<?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>117658</bug_id>
          
          <creation_ts>2013-06-14 14:44:33 -0700</creation_ts>
          <short_desc>[meta] Merge Nix WebCore bits on WebCore</short_desc>
          <delta_ts>2013-11-27 09:53:50 -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>WebKit Misc.</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>118326</dependson>
    
    <dependson>118331</dependson>
    
    <dependson>118358</dependson>
    
    <dependson>118367</dependson>
    
    <dependson>118368</dependson>
    
    <dependson>121752</dependson>
          <blocked>117657</blocked>
    
    <blocked>117660</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hugo Parente Lima">hugo.lima</reporter>
          <assigned_to name="Hugo Parente Lima">hugo.lima</assigned_to>
          <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>david.corvoysier</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>galpeter</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jesus</cc>
    
    <cc>luciano.wolf</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mkwst</cc>
    
    <cc>mrobinson</cc>
    
    <cc>nick.diego</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>900663</commentid>
    <comment_count>0</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-06-14 14:44:33 -0700</bug_when>
    <thetext>To ease the review process the merge was split into 4 parts, WebCore, WebKit2, API tests and LayoutTests

This is the first one, after this patch Nix should build just a static WebCore library and the Platfom library were Nix::Platform API lives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903446</commentid>
    <comment_count>1</comment_count>
      <attachid>205427</attachid>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-06-25 16:11:40 -0700</bug_when>
    <thetext>Created attachment 205427
Add WebCore bits of Nix

This patch is a RFC, RFC for the patch contents and for the proper way of doing the upload, split in smaller pieces? what pieces?

The patch is huge, but the major parts are Nix specific stuff and #if&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903450</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-25 16:18:58 -0700</bug_when>
    <thetext>Attachment 205427 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;CMakeLists.txt&apos;, u&apos;Source/CMakeLists.txt&apos;, u&apos;Source/Platform/CMakeLists.txt&apos;, u&apos;Source/Platform/PlatformNix.cmake&apos;, u&apos;Source/Platform/nix/public/Platform.h&apos;, u&apos;Source/Platform/nix/public/WebAudioBus.h&apos;, u&apos;Source/Platform/nix/public/WebAudioDevice.h&apos;, u&apos;Source/Platform/nix/public/WebCanvas.h&apos;, u&apos;Source/Platform/nix/public/WebColor.h&apos;, u&apos;Source/Platform/nix/public/WebCommon.h&apos;, u&apos;Source/Platform/nix/public/WebData.h&apos;, u&apos;Source/Platform/nix/public/WebFFTFrame.h&apos;, u&apos;Source/Platform/nix/public/WebGamepad.h&apos;, u&apos;Source/Platform/nix/public/WebGamepads.h&apos;, u&apos;Source/Platform/nix/public/WebRect.h&apos;, u&apos;Source/Platform/nix/public/WebSize.h&apos;, u&apos;Source/Platform/nix/public/WebThemeEngine.h&apos;, u&apos;Source/Platform/nix/public/WebVector.h&apos;, u&apos;Source/Platform/nix/src/DefaultWebThemeEngine.cpp&apos;, u&apos;Source/Platform/nix/src/DefaultWebThemeEngine.h&apos;, u&apos;Source/Platform/nix/src/Platform.cpp&apos;, u&apos;Source/WTF/wtf/FeatureDefines.h&apos;, u&apos;Source/WTF/wtf/Platform.h&apos;, u&apos;Source/WTF/wtf/PlatformNix.cmake&apos;, u&apos;Source/WTF/wtf/nix/FeatureDefinesNix.h&apos;, u&apos;Source/WTF/wtf/nix/PlatformNix.h&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/PlatformNix.cmake&apos;, u&apos;Source/WebCore/bridge/npruntime_internal.h&apos;, u&apos;Source/WebCore/css/mediaControlsNix.css&apos;, u&apos;Source/WebCore/css/mediaControlsNixFullscreen.css&apos;, u&apos;Source/WebCore/loader/FrameLoader.cpp&apos;, u&apos;Source/WebCore/page/nix/EventHandlerNix.cpp&apos;, u&apos;Source/WebCore/platform/Cursor.h&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/DragImage.h&apos;, u&apos;Source/WebCore/platform/FileSystem.h&apos;, u&apos;Source/WebCore/platform/PlatformMenuDescription.h&apos;, u&apos;Source/WebCore/platform/RunLoop.h&apos;, u&apos;Source/WebCore/platform/Widget.h&apos;, u&apos;Source/WebCore/platform/audio/FFTFrame.h&apos;, u&apos;Source/WebCore/platform/audio/HRTFElevation.cpp&apos;, u&apos;Source/WebCore/platform/audio/nix/AudioBusNix.cpp&apos;, u&apos;Source/WebCore/platform/audio/nix/AudioDestinationNix.cpp&apos;, u&apos;Source/WebCore/platform/audio/nix/AudioDestinationNix.h&apos;, u&apos;Source/WebCore/platform/audio/nix/FFTFrameNix.cpp&apos;, u&apos;Source/WebCore/platform/cairo/WidgetBackingStore.h&apos;, u&apos;Source/WebCore/platform/graphics/ANGLEWebKitBridge.h&apos;, u&apos;Source/WebCore/platform/graphics/FontPlatformData.h&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/OpenGLESShims.h&apos;, u&apos;Source/WebCore/platform/graphics/OpenGLShims.cpp&apos;, u&apos;Source/WebCore/platform/graphics/OpenGLShims.h&apos;, u&apos;Source/WebCore/platform/graphics/PlatformLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/cairo/GLContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/cairo/GraphicsContext3DPrivate.cpp&apos;, u&apos;Source/WebCore/platform/graphics/egl/GLContextFromCurrentEGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/egl/GLContextFromCurrentEGL.h&apos;, u&apos;Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowNix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/nix/IconNix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/nix/ImageNix.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLES.h&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/TextureMapper.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h&apos;, u&apos;Source/WebCore/platform/nix/CursorNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/DragDataNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/DragImageNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/ErrorsNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/ErrorsNix.h&apos;, u&apos;Source/WebCore/platform/nix/FileSystemNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/GamepadsNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/LanguageNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/LocalizedStringsNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/MIMETypeRegistryNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/NixKeyboardUtilities.cpp&apos;, u&apos;Source/WebCore/platform/nix/NixKeyboardUtilities.h&apos;, u&apos;Source/WebCore/platform/nix/PasteboardNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/PlatformKeyboardEventNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/PlatformScreenNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/RenderThemeNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/RenderThemeNix.h&apos;, u&apos;Source/WebCore/platform/nix/RunLoopNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/ScrollbarThemeNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/ScrollbarThemeNix.h&apos;, u&apos;Source/WebCore/platform/nix/SharedTimerNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/SoundNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/TemporaryLinkStubs.cpp&apos;, u&apos;Source/WebCore/platform/nix/WidgetNix.cpp&apos;, u&apos;Source/WebCore/platform/nix/support/WebAudioBus.cpp&apos;, u&apos;Source/WebCore/platform/nix/support/WebData.cpp&apos;, u&apos;Source/WebCore/platform/text/nix/TextBreakIteratorInternalICUNix.cpp&apos;, u&apos;Source/WebCore/plugins/PluginPackage.cpp&apos;, u&apos;Source/WebCore/plugins/PluginView.cpp&apos;, u&apos;Source/WebCore/plugins/PluginView.h&apos;, u&apos;Source/WebCore/plugins/PluginViewNone.cpp&apos;, u&apos;Source/cmake/FindEGL.cmake&apos;, u&apos;Source/cmake/FindOpenGLES2.cmake&apos;, u&apos;Source/cmake/OptionsCommon.cmake&apos;, u&apos;Source/cmake/OptionsNix.cmake&apos;, u&apos;Tools/Scripts/build-dumprendertree&apos;, u&apos;Tools/Scripts/build-webkit&apos;, u&apos;Tools/Scripts/build-webkittestrunner&apos;, u&apos;Tools/Scripts/run-javascriptcore-tests&apos;, u&apos;Tools/Scripts/run-launcher&apos;, u&apos;Tools/Scripts/run-nix-tests&apos;, u&apos;Tools/Scripts/run-webkit-tests&apos;, u&apos;Tools/Scripts/update-webkit-libs-jhbuild&apos;, u&apos;Tools/Scripts/update-webkitnix-libs&apos;, u&apos;Tools/Scripts/webkitdirs.pm&apos;, u&apos;Tools/Scripts/webkitpy/common/config/ports.py&apos;, u&apos;Tools/Scripts/webkitpy/port/factory.py&apos;, u&apos;Tools/Scripts/webkitpy/port/nix.py&apos;, u&apos;Tools/Scripts/webkitpy/port/nix_unittest.py&apos;, u&apos;Tools/jhbuild/jhbuild-wrapper&apos;, u&apos;Tools/nix/common.py&apos;, u&apos;Tools/nix/jhbuild.modules&apos;, u&apos;Tools/nix/jhbuildrc&apos;, u&apos;Tools/nix/run-with-jhbuild&apos;]&quot; exit_code: 1
Tools/Scripts/webkitpy/common/config/ports.py:73:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Tools/Scripts/webkitpy/common/config/ports.py:235:  expected 2 blank lines, found 1  [pep8/E302] [5]
Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowNix.cpp:22:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/nix/public/WebData.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/nix/public/WebData.h:76:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/nix/support/WebAudioBus.cpp:48:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/platform/nix/FileSystemNix.cpp:86:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/nix/FileSystemNix.cpp:97:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/nix/FileSystemNix.cpp:110:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/nix/FileSystemNix.cpp:125:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/nix/FileSystemNix.cpp:153:  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/WebCore/platform/nix/FileSystemNix.cpp:167:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/nix/FileSystemNix.cpp:238:  Declaration has space between type name and * in GPatternSpec *pspec  [whitespace/declaration] [3]
Source/WebCore/platform/nix/FileSystemNix.cpp:312:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/nix/FileSystemNix.cpp:321:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/nix/FileSystemNix.cpp:330:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.h:29:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:28:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:36:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:36:  BG_COLOR1 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:37:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:37:  BG_COLOR2 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:38:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:38:  BORDER_COLOR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:39:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:39:  BORDER_ONHOVER_COLOR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:40:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:40:  CHECK_COLOR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:41:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:41:  TEXTFIELD_DARK_BORDER_COLOR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:42:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:42:  TEXTFIELD_LIGHT_BORDER_COLOR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:44:  MENULIST_BORDER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:45:  MENULIST_ARROW_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:47:  INNERSPINBUTTON_BORDER is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:48:  INNERSPINBUTTON_ARROW_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:50:  TAP_HIGHLIGHT_COLOR is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:215:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:222:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:245:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:248:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:320:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:326:  Missing spaces around /  [whitespace/operators] [3]
Source/Platform/nix/src/DefaultWebThemeEngine.cpp:350:  SLIDER_TRACK_HEIGHT is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/audio/nix/AudioBusNix.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Tools/Scripts/webkitpy/port/nix_unittest.py:40:  whitespace before &apos;]&apos;  [pep8/E202] [5]
Tools/Scripts/webkitpy/port/nix_unittest.py:43:  whitespace before &apos;]&apos;  [pep8/E202] [5]
Source/Platform/PlatformNix.cmake:1:  No space between command &quot;set&quot; and its parentheses, should be &quot;set(&quot;  [whitespace/parentheses] [5]
Source/Platform/PlatformNix.cmake:8:  No space between command &quot;set&quot; and its parentheses, should be &quot;set(&quot;  [whitespace/parentheses] [5]
Source/Platform/PlatformNix.cmake:24:  No space between command &quot;set&quot; and its parentheses, should be &quot;set(&quot;  [whitespace/parentheses] [5]
Source/WebCore/platform/nix/RenderThemeNix.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/nix/RenderThemeNix.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/nix/RenderThemeNix.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/nix/RenderThemeNix.cpp:332:  SLIDER_THUMB_WIDTH is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/nix/RenderThemeNix.cpp:333:  SLIDER_THUMB_HEIGHT is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/audio/nix/FFTFrameNix.cpp:28:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/PlatformNix.cmake:220:  Use lowercase command &quot;list&quot;  [command/lowercase] [5]
Source/WebCore/PlatformNix.cmake:223:  Use lowercase command &quot;list&quot;  [command/lowercase] [5]
Source/WebCore/PlatformNix.cmake:228:  Use lowercase command &quot;set&quot;  [command/lowercase] [5]
Source/WebCore/PlatformNix.cmake:229:  Use lowercase command &quot;file&quot;  [command/lowercase] [5]
Source/WebCore/PlatformNix.cmake:230:  Use lowercase command &quot;install&quot;  [command/lowercase] [5]
Source/WebCore/PlatformNix.cmake:231:  Use lowercase command &quot;add_definitions&quot;  [command/lowercase] [5]
Source/WebCore/platform/nix/RenderThemeNix.h:43:  The parameter name &quot;cssValueId&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp:208:  Missing spaces around |  [whitespace/operators] [3]
Source/Platform/nix/public/WebThemeEngine.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/nix/public/WebThemeEngine.h:101:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/platform/nix/PlatformScreenNix.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/nix/PlatformScreenNix.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/cmake/FindOpenGLES2.cmake:7:  Use lowercase command &quot;find_package&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:9:  Use lowercase command &quot;pkg_check_modules&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:11:  Use lowercase command &quot;if&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:12:  Use lowercase command &quot;set&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:13:  Use lowercase command &quot;set&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:14:  Use lowercase command &quot;else&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:15:  Use lowercase command &quot;find_path&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:16:  Use lowercase command &quot;endif&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:18:  Use lowercase command &quot;find_library&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:22:  Use lowercase command &quot;include&quot;  [command/lowercase] [5]
Source/cmake/FindOpenGLES2.cmake:25:  Use lowercase command &quot;mark_as_advanced&quot;  [command/lowercase] [5]
Source/Platform/nix/src/Platform.cpp:33:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/Platform/nix/src/Platform.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/nix/public/WebColor.h:33:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/nix/public/WebColor.h:36:  This { should be at the end of the previous line  [whitespace/braces] [4]
Tools/Scripts/webkitpy/port/nix.py:106:  whitespace after &apos;[&apos;  [pep8/E201] [5]
Source/WebCore/platform/nix/SharedTimerNix.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/nix/SharedTimerNix.cpp:46:  timeout_cb is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/nix/SharedTimerNix.cpp:65:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/cmake/FindEGL.cmake:39:  Use lowercase command &quot;mark_as_advanced&quot;  [command/lowercase] [5]
Total errors found: 89 in 124 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>903612</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-06-26 02:08:21 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=205427) [details]
&gt; Add WebCore bits of Nix
&gt; 
&gt; This patch is a RFC, RFC for the patch contents and for the proper way of doing the upload, split in smaller pieces? what pieces?
&gt; 
&gt; The patch is huge, but the major parts are Nix specific stuff and #if&apos;s.

How about separating it like this:
* CMake changes
* #ifs (e.g. GraphicsContext3D)
* stubs &amp; Nix specific platform files (e.g. FilesystemNix)
* RenderTheme
* WebAudio &amp; Source/Platform stuff
* Nix-specific tools</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903803</commentid>
    <comment_count>4</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-06-26 10:47:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=205427) [details] [details]
&gt; &gt; Add WebCore bits of Nix
&gt; &gt; 
&gt; &gt; This patch is a RFC, RFC for the patch contents and for the proper way of doing the upload, split in smaller pieces? what pieces?
&gt; &gt; 
&gt; &gt; The patch is huge, but the major parts are Nix specific stuff and #if&apos;s.
&gt; 
&gt; How about separating it like this:
&gt; * CMake changes
&gt; * #ifs (e.g. GraphicsContext3D)
&gt; * stubs &amp; Nix specific platform files (e.g. FilesystemNix)
&gt; * RenderTheme
&gt; * WebAudio &amp; Source/Platform stuff
&gt; * Nix-specific tools

Seems good to me, split WebCoreNix upstream in:

1. #ifs (e.g. GraphicsContext3D)
2. stubs &amp; Nix specific platform files (e.g. FilesystemNix)
3. WebAudio &amp; Source/Platform stuff
4. RenderTheme
5. CMake changes

So this bug will be turned into a meta bug.

And do the same for WK2 parts.

P.S.: This lot os style errors were already fixed :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954567</commentid>
    <comment_count>5</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2013-11-27 09:53:50 -0800</bug_when>
    <thetext>All bits of Nix already merged in WebCore.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205427</attachid>
            <date>2013-06-25 16:11:40 -0700</date>
            <delta_ts>2013-06-25 16:11:40 -0700</delta_ts>
            <desc>Add WebCore bits of Nix</desc>
            <filename>nix.diff</filename>
            <type>text/plain</type>
            <size>329776</size>
            <attacher name="Hugo Parente Lima">hugo.lima</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggMjgxZjk0
YS4uYmZjNDlkOCAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50
eHQKQEAgLTEwLDYgKzEwLDcgQEAgc2V0KFdFQkNPUkVfRElSICIke0NNQUtFX1NPVVJDRV9ESVJ9
L1NvdXJjZS9XZWJDb3JlIikKIHNldChXRUJLSVRfRElSICIke0NNQUtFX1NPVVJDRV9ESVJ9L1Nv
dXJjZS9XZWJLaXQiKQogc2V0KFdFQktJVDJfRElSICIke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJj
ZS9XZWJLaXQyIikKIHNldChUSElSRFBBUlRZX0RJUiAiJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3Vy
Y2UvVGhpcmRQYXJ0eSIpCitzZXQoUExBVEZPUk1fRElSICIke0NNQUtFX1NPVVJDRV9ESVJ9L1Nv
dXJjZS9QbGF0Zm9ybSIpCiAKIHNldChUT09MU19ESVIgIiR7Q01BS0VfU09VUkNFX0RJUn0vVG9v
bHMiKQogCkBAIC0zOSw3ICs0MCw3IEBAIGluY2x1ZGUoV2ViS2l0RmVhdHVyZXMpCiAjIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAjIERldGVybWluZSB3aGljaCBwb3J0IHdpbGwgYmUgYnVpbHQKICMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNldChBTExfUE9SVFMgRWZsIFdpbkNFIEJsYWNrQmVycnkg
R1RLKQorc2V0KEFMTF9QT1JUUyBFZmwgV2luQ0UgQmxhY2tCZXJyeSBHVEsgTml4KQogc2V0KFBP
UlQgIk5PUE9SVCIgQ0FDSEUgU1RSSU5HICJjaG9vc2Ugd2hpY2ggV2ViS2l0IHBvcnQgdG8gYnVp
bGQgKG9uZSBvZiAke0FMTF9QT1JUU30pIikKIAogbGlzdChGSU5EIEFMTF9QT1JUUyAke1BPUlR9
IFJFVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9DTWFrZUxp
c3RzLnR4dAppbmRleCAzNzM2ZWVhLi4yNjhiYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL0NNYWtlTGlzdHMudHh0CkBAIC01LDYgKzUsMTAgQEAgYWRk
X3N1YmRpcmVjdG9yeShXVEYpCiAKIGFkZF9zdWJkaXJlY3RvcnkoSmF2YVNjcmlwdENvcmUpCiAK
K2lmICgiJHtQT1JUfSIgU1RSRVFVQUwgIk5peCIpCisgICAgYWRkX3N1YmRpcmVjdG9yeShQbGF0
Zm9ybSkKK2VuZGlmICgpCisKIGlmIChFTkFCTEVfQVBJX1RFU1RTKQogICAgIGFkZF9zdWJkaXJl
Y3RvcnkoY21ha2UvZ3Rlc3QpCiBlbmRpZiAoKQpAQCAtMjYsNiArMzAsMTMgQEAgV0VCS0lUX0lO
Q0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAj
IFNldCBjb21waWxlciBmbGFncyBmb3IgYWxsIHRhcmdldHMKICMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KK2lmICgiJHtQT1JUfSIgU1RSRVFVQUwgIk5peCIpCisgICAgaWYgKE5PVCBESVNBQkxFX1NU
UklDVF9CVUlMRCkKKyAgICAgICAgc2V0KEFERElUSU9OQUxfRkxBR1MgRU5BQkxFX1dFUlJPUikK
KyAgICBlbmRpZiAoKQorICAgIFdFQktJVF9TRVRfRVhUUkFfQ09NUElMRVJfRkxBR1MoUGxhdGZv
cm0gJHtBRERJVElPTkFMX0ZMQUdTfSkKK2VuZGlmICgpCisKIGlmICgke1BPUlR9IFNUUkVRVUFM
ICJFZmwiKQogICAgIHNldChBRERJVElPTkFMX0ZMQUdTIEVOQUJMRV9XRVJST1IpCiBlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1Bs
YXRmb3JtL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmZhZjdjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vQ01ha2VMaXN0cy50
eHQKQEAgLTAsMCArMSw1IEBACitXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RT
KCkKKworaW5jbHVkZV9kaXJlY3Rvcmllcygke1BsYXRmb3JtX0lOQ0xVREVTfSkKK2FkZF9saWJy
YXJ5KFBsYXRmb3JtIFNUQVRJQyAke1BsYXRmb3JtX1NPVVJDRVN9KQorc2V0X3RhcmdldF9wcm9w
ZXJ0aWVzKFBsYXRmb3JtIFBST1BFUlRJRVMgRk9MREVSICJQbGF0Zm9ybSIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm1OaXguY21ha2UgYi9Tb3VyY2UvUGxhdGZvcm0vUGxh
dGZvcm1OaXguY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiYWE2
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybU5peC5jbWFrZQpA
QCAtMCwwICsxLDI5IEBACitzZXQgKFBsYXRmb3JtX0lOQ0xVREVTCisgICAgbml4CisgICAgJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvICMgRm9yIEludFJlY3QuaAorICAgICR7V1RG
X0RJUn0gIyBGb3IgY29uZmlnLmgKKyAgICAke0NNQUtFX0JJTkFSWV9ESVJ9ICMgRm9yIGNtYWtl
Y29uZmlnLmgKKykKKworc2V0IChQbGF0Zm9ybV9IRUFERVJTCisgICAgbml4L3B1YmxpYy9QbGF0
Zm9ybS5oCisgICAgbml4L3B1YmxpYy9XZWJDb2xvci5oCisgICAgbml4L3B1YmxpYy9XZWJGRlRG
cmFtZS5oCisgICAgbml4L3B1YmxpYy9XZWJSZWN0LmgKKyAgICBuaXgvcHVibGljL1dlYlNpemUu
aAorICAgIG5peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAorICAgIG5peC9wdWJsaWMvV2ViQXVk
aW9CdXMuaAorICAgIG5peC9wdWJsaWMvV2ViQXVkaW9EZXZpY2UuaAorICAgIG5peC9wdWJsaWMv
V2ViQ29tbW9uLmgKKyAgICBuaXgvcHVibGljL1dlYkRhdGEuaAorICAgIG5peC9wdWJsaWMvV2Vi
R2FtZXBhZHMuaAorICAgIG5peC9wdWJsaWMvV2ViR2FtZXBhZC5oCisgICAgbml4L3B1YmxpYy9X
ZWJWZWN0b3IuaAorKQorCitzZXQgKFBsYXRmb3JtX1NPVVJDRVMKKyAgICBuaXgvc3JjL1BsYXRm
b3JtLmNwcAorICAgIG5peC9zcmMvRGVmYXVsdFdlYlRoZW1lRW5naW5lLmNwcAorKQorCitpbnN0
YWxsKEZJTEVTICR7UGxhdGZvcm1fSEVBREVSU30gREVTVElOQVRJT04gaW5jbHVkZS8ke1dlYktp
dDJfT1VUUFVUX05BTUV9LSR7UFJPSkVDVF9WRVJTSU9OX01BSk9SfS9OaXhQbGF0Zm9ybSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1BsYXRmb3JtLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vbml4L3B1YmxpYy9QbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmFiMjU3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9QbGF0Zm9ybS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtX2gKKyNk
ZWZpbmUgUGxhdGZvcm1faAorCisjaW5jbHVkZSAiV2ViQXVkaW9EZXZpY2UuaCIKKyNpbmNsdWRl
ICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViR2FtZXBhZHMuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYkF1ZGlvQnVzOworY2xhc3MgV2ViRkZURnJhbWU7CitjbGFzcyBXZWJU
aGVtZUVuZ2luZTsKKworY2xhc3MgV0VCS0lUX0VYUE9SVCBQbGF0Zm9ybSB7CitwdWJsaWM6CisK
KyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoUGxhdGZvcm0qKTsKKyAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgV0VCS0lUX0VYUE9S
VCBzdGF0aWMgUGxhdGZvcm0qIGN1cnJlbnQoKTsKKworICAgIC8vIEF1ZGlvIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
dmlydHVhbCBkb3VibGUgYXVkaW9IYXJkd2FyZVNhbXBsZVJhdGUoKSB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBzaXplX3QgYXVkaW9IYXJkd2FyZUJ1ZmZlclNpemUoKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCB1bnNpZ25lZCBhdWRpb0hhcmR3YXJlT3V0cHV0Q2hhbm5lbHMoKSB7IHJl
dHVybiAwOyB9CisKKyAgICAvLyBDcmVhdGVzIGEgZGV2aWNlIGZvciBhdWRpbyBJL08uCisgICAg
Ly8gUGFzcyBpbiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID4gMCkgaWYgbGl2ZS9sb2NhbCBhdWRp
byBpbnB1dCBpcyBkZXNpcmVkLgorICAgIHZpcnR1YWwgV2ViQXVkaW9EZXZpY2UqIGNyZWF0ZUF1
ZGlvRGV2aWNlKHNpemVfdCAvKmJ1ZmZlclNpemUqLywgdW5zaWduZWQgLypudW1iZXJPZklucHV0
Q2hhbm5lbHMqLywgdW5zaWduZWQgLypudW1iZXJPZkNoYW5uZWxzKi8sIGRvdWJsZSAvKnNhbXBs
ZVJhdGUqLywgV2ViQXVkaW9EZXZpY2U6OlJlbmRlckNhbGxiYWNrKikgeyByZXR1cm4gMDsgfQor
CisKKyAgICAvLyBHYW1lcGFkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB2aXJ0dWFsIHZvaWQgc2FtcGxlR2FtZXBhZHMo
V2ViR2FtZXBhZHMmIGludG8pIHsgaW50by5sZW5ndGggPSAwOyB9CisKKworICAgIC8vIEZGVEZy
YW1lCisgICAgdmlydHVhbCBXZWJGRlRGcmFtZSogY3JlYXRlRkZURnJhbWUodW5zaWduZWQgLypm
ZnRzaXplKi8pIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFdlYkZGVEZyYW1lKiBjcmVhdGVG
RlRGcmFtZShjb25zdCBXZWJGRlRGcmFtZSogLypmcmFtZSovKSB7IHJldHVybiAwOyB9CisKKyAg
ICAvLyBSZXNvdXJjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBSZXR1cm5zIGEgYmxvYiBvZiBkYXRhIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIG5hbWVkIHJlc291cmNlLgorICAgIHZpcnR1YWwgV2ViRGF0YSBsb2FkUmVz
b3VyY2UoY29uc3QgY2hhciogLypuYW1lKi8pIHsgcmV0dXJuIFdlYkRhdGEoKTsgfQorCisgICAg
Ly8gRGVjb2RlcyB0aGUgaW4tbWVtb3J5IGF1ZGlvIGZpbGUgZGF0YSBhbmQgcmV0dXJucyB0aGUg
bGluZWFyIFBDTSBhdWRpbyBkYXRhIGluIHRoZSBkZXN0aW5hdGlvbkJ1cy4KKyAgICAvLyBBIHNh
bXBsZS1yYXRlIGNvbnZlcnNpb24gdG8gc2FtcGxlUmF0ZSB3aWxsIG9jY3VyIGlmIHRoZSBmaWxl
IGRhdGEgaXMgYXQgYSBkaWZmZXJlbnQgc2FtcGxlLXJhdGUuCisgICAgLy8gUmV0dXJucyB0cnVl
IG9uIHN1Y2Nlc3MuCisgICAgdmlydHVhbCBib29sIGxvYWRBdWRpb1Jlc291cmNlKFdlYkF1ZGlv
QnVzKiAvKmRlc3RpbmF0aW9uQnVzKi8sIGNvbnN0IGNoYXIqIC8qYXVkaW9GaWxlRGF0YSovLCBz
aXplX3QgLypkYXRhU2l6ZSovLCBkb3VibGUgLypzYW1wbGVSYXRlKi8pIHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICAvLyBUaGVtZSBlbmdpbmUKKyAgICB2aXJ0dWFsIFdlYlRoZW1lRW5naW5lKiB0
aGVtZUVuZ2luZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+UGxhdGZvcm0oKSB7IH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkF1ZGlvQnVzLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9XZWJBdWRpb0J1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjE3YjI1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9X
ZWJBdWRpb0J1cy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkF1
ZGlvQnVzX2gKKyNkZWZpbmUgV2ViQXVkaW9CdXNfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQXVkaW9CdXM7IH0KKworI2lmZGVmIEJVSUxE
SU5HX05JWF9fCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBh
c3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQXVk
aW9CdXNQcml2YXRlOworCisvLyBBIGNvbnRhaW5lciBmb3IgbXVsdGktY2hhbm5lbCBsaW5lYXIg
UENNIGF1ZGlvIGRhdGEuCisvLworLy8gV0FSTklORzogSXQgaXMgbm90IHNhZmUgdG8gcGFzcyBh
IFdlYkF1ZGlvQnVzIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViQXVkaW9CdXMgewor
cHVibGljOgorICAgIFdlYkF1ZGlvQnVzKCkgOiBtX2QoMCkgeyB9CisgICAgfldlYkF1ZGlvQnVz
KCkgeyByZXNldCgpOyB9CisKKyAgICAvLyBpbml0aWFsaXplKCkgYWxsb2NhdGVzIG1lbW9yeSBv
ZiB0aGUgZ2l2ZW4gbGVuZ3RoIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGNoYW5uZWxzLgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMs
IHNpemVfdCBsZW5ndGgsIGRvdWJsZSBzYW1wbGVSYXRlKTsKKworICAgIC8vIHJlc2l6ZVNtYWxs
ZXIoKSBjYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgaW5pdGlhbGl6ZSgpIHdpdGggYSBuZXcgbGVu
Z3RoIDw9IHRoZSBpbml0aWFsaXphdGlvbiBsZW5ndGguCisgICAgLy8gVGhlIGRhdGEgc3RvcmVk
IGluIHRoZSBidXMgd2lsbCByZW1haW4gdW5kaXN0dXJiZWQuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHJlc2l6ZVNtYWxsZXIoc2l6ZV90IG5ld0xlbmd0aCk7CisKKyAgICAvLyByZXNldCgpIHJl
bGVhc2VzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZyb20gaW5pdGlhbGl6ZSgpLgorICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCByZXNldCgpOworCisgICAgV0VCS0lUX0VYUE9SVCB1bnNpZ25lZCBudW1i
ZXJPZkNoYW5uZWxzKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBzaXplX3QgbGVuZ3RoKCkg
Y29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0OworCisg
ICAgV0VCS0lUX0VYUE9SVCBmbG9hdCogY2hhbm5lbERhdGEodW5zaWduZWQgY2hhbm5lbEluZGV4
KTsKKworI2lmZGVmIEJVSUxESU5HX05JWF9fCisgICAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkF1ZGlvQnVzPiBhdWRpb0J1cygpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgLy8gRGlzYWxs
b3cgY29weSBhbmQgYXNzaWduLgorICAgIFdlYkF1ZGlvQnVzKGNvbnN0IFdlYkF1ZGlvQnVzJik7
CisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgV2ViQXVkaW9CdXMmKTsKKworICAgIFdlYkF1ZGlv
QnVzUHJpdmF0ZSogbV9kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJBdWRpb0J1c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9X
ZWJBdWRpb0RldmljZS5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQXVkaW9EZXZp
Y2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDQ1MTM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQXVkaW9EZXZpY2UuaApA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBdWRpb0RldmljZV9oCisjZGVmaW5lIFdlYkF1
ZGlvRGV2aWNlX2gKKworI2luY2x1ZGUgIldlYlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworLy8gQWJzdHJhY3QgaW50ZXJmYWNlIHRvIHRoZSBDaHJvbWl1bSBhdWRpbyBzeXN0ZW0u
CisKK2NsYXNzIFdlYkF1ZGlvRGV2aWNlIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBSZW5kZXJDYWxs
YmFjayB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKGNvbnN0IFdl
YlZlY3RvcjxmbG9hdCo+JiAvKnNvdXJjZURhdGEqLywgY29uc3QgV2ViVmVjdG9yPGZsb2F0Kj4m
IC8qZGVzdGluYXRpb25EYXRhKi8sIHNpemVfdCAvKm51bWJlck9mRnJhbWVzKi8pIHsgfQorCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIH5SZW5kZXJDYWxsYmFjaygpIHsgfQorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5XZWJBdWRpb0RldmljZSgpIHsgfQorCisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOworICAgIHZpcnR1
YWwgZG91YmxlIHNhbXBsZVJhdGUoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFdlYkF1ZGlvRGV2aWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9uaXgvcHVibGljL1dlYkNhbnZhcy5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2Vi
Q2FudmFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliMmZlMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkNhbnZhcy5oCkBA
IC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgV2ViQ2FudmFzX2gKKyNkZWZpbmUgV2ViQ2FudmFzX2gK
KworI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordHlwZWRl
ZiBjYWlyb190IFdlYkNhbnZhczsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9XZWJDb2xvci5oIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMv
V2ViQ29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDE1NzkwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViQ29sb3IuaApA
QCAtMCwwICsxLDk5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNp
Zm5kZWYgV2ViQ29sb3JfaAorI2RlZmluZSBXZWJDb2xvcl9oCisKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgICAg
ICAgIC8vIFJHQkEgcXVhZHJ1cGxldAorCitzdHJ1Y3QgV2ViQ29sb3IKK3sKKyAgICBzdGF0aWMg
Y29uc3QgUkdCQTMyIGJsYWNrID0gMHhGRjAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMy
IHdoaXRlID0gMHhGRkZGRkZGRjsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtHcmF5ID0g
MHhGRjgwODA4MDsKKyAgICBzdGF0aWMgY29uc3QgUkdCQTMyIGdyYXkgPSAweEZGQTBBMEEwOwor
ICAgIHN0YXRpYyBjb25zdCBSR0JBMzIgbGlnaHRHcmF5ID0gMHhGRkMwQzBDMDsKKyAgICBzdGF0
aWMgY29uc3QgUkdCQTMyIHRyYW5zcGFyZW50ID0gMHgwMDAwMDAwMDsKKworICAgIFJHQkEzMiBy
Z2JhOworCisgICAgV2ViQ29sb3IoKQorICAgICAgICA6IHJnYmEoV2ViQ29sb3I6OmJsYWNrKQor
ICAgIHsKKyAgICB9CisKKyAgICBXZWJDb2xvcihSR0JBMzIgcmdiYSkKKyAgICAgICAgOiByZ2Jh
KHJnYmEpCisgICAgeworICAgIH0KKworICAgIFdlYkNvbG9yKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhID0gMjU1KQorICAgICAgICA6IHJnYmEoc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1
KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUp
KSkKKyAgICB7CisgICAgfQorCisgICAgb3BlcmF0b3IgUkdCQTMyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZ2JhOworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIgcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKHJnYmEgJiAweDAwRkYwMDAwKSA+PiAxNjsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBjaGFyIGcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChy
Z2JhICYgMHgwMDAwRkYwMCkgPj4gODsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyIGIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChyZ2JhICYgMHgwMDAwMDBGRik7CisgICAgfQor
CisgICAgdW5zaWduZWQgY2hhciBhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAocmdi
YSAmIDB4RkYwMDAwMDApID4+IDI0OworICAgIH0KK307CisKK2lubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgV2ViQ29sb3ImIGEsIGNvbnN0IFdlYkNvbG9yJiBiKQoreworICAgIHJldHVybiBh
LnJnYmEgPT0gYi5yZ2JhOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYkNv
bG9yJiBhLCBjb25zdCBXZWJDb2xvciYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vbml4L3B1YmxpYy9XZWJDb21tb24uaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGlj
L1dlYkNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGQ3M2MK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJDb21tb24u
aApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDb21tb25faAorI2RlZmluZSBXZWJDb21tb25f
aAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRXhwb3J0ZWQgc3ltYm9scyBuZWVkIHRv
IGJlIGFubm90YXRlZCB3aXRoIFdFQktJVF9FWFBPUlQKKyNkZWZpbmUgV0VCS0lUX0VYUE9SVCBf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gQmFzaWMgdHlwZXMKKyNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gRm9yIHNpemVf
dAorCituYW1lc3BhY2UgV2ViS2l0IHsKKy8vIFVURi0xNiBjaGFyYWN0ZXIgdHlwZQordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBXZWJVQ2hhcjsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkRhdGEuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zY2U2MjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L25peC9wdWJsaWMvV2ViRGF0YS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJEYXRhX2gK
KyNkZWZpbmUgV2ViRGF0YV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmZGVmIEJV
SUxESU5HX05JWF9fCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIFNoYXJlZEJ1ZmZlcjsgfQor
bmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRhdGFQcml2YXRlOwor
CisvLyBBIGNvbnRhaW5lciBmb3IgcmF3IGJ5dGVzLiAgSXQgaXMgaW5leHBlbnNpdmUgdG8gY29w
eSBhIFdlYkRhdGEgb2JqZWN0LgorLy8KKy8vIFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRvIHBh
c3MgYSBXZWJEYXRhIGFjcm9zcyB0aHJlYWRzISEhCisvLworY2xhc3MgV2ViRGF0YSB7CitwdWJs
aWM6CisgICAgfldlYkRhdGEoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYkRhdGEoKSA6IG1fcHJp
dmF0ZSgwKSB7IH0KKworICAgIFdlYkRhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUp
IDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBhc3NpZ24oZGF0YSwgc2l6ZSk7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPGludCBOPgorICAgIFdlYkRhdGEoY29uc3QgY2hhciAoJmRhdGEp
W05dKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgYXNzaWduKGRhdGEsIE4gLSAxKTsK
KyAgICB9CisKKyAgICBXZWJEYXRhKGNvbnN0IFdlYkRhdGEmIGQpIDogbV9wcml2YXRlKDApIHsg
YXNzaWduKGQpOyB9CisKKyAgICBXZWJEYXRhJiBvcGVyYXRvcj0oY29uc3QgV2ViRGF0YSYgZCkK
KyAgICB7CisgICAgICAgIGFzc2lnbihkKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhc3NpZ24oY29uc3QgV2ViRGF0YSYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24o
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworCisgICAgV0VCS0lUX0VYUE9SVCBzaXpl
X3Qgc2l6ZSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgY29uc3QgY2hhciogZGF0YSgpIGNv
bnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisjaWZkZWYgQlVJ
TERJTkdfTklYX18KKyAgICBXZWJEYXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+Jik7CisgICAgV2ViRGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4oKSBjb25zdDsKKyNlbHNlCisgICAgdGVtcGxhdGUg
PGNsYXNzIEM+CisgICAgV2ViRGF0YShjb25zdCBDJiBjKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsK
KyAgICAgICAgYXNzaWduKGMuZGF0YSgpLCBjLnNpemUoKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPGNsYXNzIEM+CisgICAgV2ViRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEMmIGMpCisgICAgewor
ICAgICAgICBhc3NpZ24oYy5kYXRhKCksIGMuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdlYkRhdGFQcml2
YXRlKik7CisgICAgV2ViRGF0YVByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1dlYkZGVEZyYW1lLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJGRlRGcmFt
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YzExMWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJGRlRGcmFtZS5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBXZWJGRlRG
cmFtZV9oCisjZGVmaW5lIFdlYkZGVEZyYW1lX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkF1ZGlvQnVzOworCitjbGFzcyBXZWJGRlRGcmFtZSB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB+V2ViRkZURnJhbWUoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkb0ZGVChjb25zdCBm
bG9hdCopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkb0ludmVyc2VGRlQoZmxvYXQqKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbXVsdGlwbHkoY29uc3QgV2ViRkZURnJhbWUmKSB7IH0KKworICAgIHZp
cnR1YWwgdW5zaWduZWQgZnJlcXVlbmN5RG9tYWluU2FtcGxlQ291bnQoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgLy8gQWZ0ZXIgbXVsdGlwbGljYXRpb24gYW5kIHRyYW5zZm9ybSBvcGVyYXRp
b25zLCB0aGUgZGF0YSBpcyBzY2FsZWQKKyAgICAvLyB0byB0YWtlIGluIGFjY291bnQgdGhlIHNj
YWxlIHVzZWQgaW50ZXJuYWxseSBpbiBXZWJLaXQsIG9yaWdpbmFsbHkKKyAgICAvLyBmcm9tIE1h
YydzIHZlY0xpYi4KKyAgICAvLyBBZnRlciBtdWx0aXBsaWNhdGlvbjogUGxhbmFyIGRhdGEgaXMg
c2NhbGVkIGJ5IDAuNS4KKyAgICAvLyBBZnRlciBkaXJlY3QgdHJhbnNmb3JtOiBQbGFuYXIgZGF0
YSBpcyBzY2FsZWQgYnkgMi4wLgorICAgIC8vIEFmdGVyIGludmVyc2UgdHJhbnNmb3JtOiBUaW1l
IGRvbWFpbiBkYXRhIGlzIHNjYWxlZCBieSAxLjAvKDIqIEZGVCBzaXplKS4KKyAgICB2aXJ0dWFs
IGZsb2F0KiByZWFsRGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0
KiBpbWFnRGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dl
YkdhbWVwYWQuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkdhbWVwYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjMyNWY1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZC5oCkBAIC0wLDAgKzEsNzEg
QEAKKy8vIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8KKy8vIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorLy8gICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLy8gQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisv
LyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorLy8gQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisvLyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorLy8gU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKy8vIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorLy8gTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLy8gT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisvLyBE
QU1BR0UuCisKKyNpZm5kZWYgV2ViR2FtZXBhZF9oCisjZGVmaW5lIFdlYkdhbWVwYWRfaAorCisj
aW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJH
YW1lcGFkIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGlkTGVuZ3RoQ2FwID0g
MTI4OworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXhlc0xlbmd0aENhcCA9IDE2OworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgYnV0dG9uc0xlbmd0aENhcCA9IDMyOworCisgICAgV2ViR2FtZXBh
ZCgpCisgICAgICAgIDogY29ubmVjdGVkKGZhbHNlKQorICAgICAgICAsIHRpbWVzdGFtcCgwKQor
ICAgICAgICAsIGF4ZXNMZW5ndGgoMCkKKyAgICAgICAgLCBidXR0b25zTGVuZ3RoKDApCisgICAg
eworICAgICAgICBpZFswXSA9IDA7CisgICAgfQorCisgICAgLy8gSXMgdGhlcmUgYSBnYW1lcGFk
IGNvbm5lY3RlZCBhdCB0aGlzIGluZGV4PworICAgIGJvb2wgY29ubmVjdGVkOworCisgICAgLy8g
RGV2aWNlIGlkZW50aWZpZXIgKGJhc2VkIG9uIG1hbnVmYWN0dXJlciwgbW9kZWwsIGV0Yy4pLgor
ICAgIFdlYlVDaGFyIGlkW2lkTGVuZ3RoQ2FwXTsKKworICAgIC8vIE1vbm90b25pY2FsbHkgaW5j
cmVhc2luZyB2YWx1ZSByZWZlcnJpbmcgdG8gd2hlbiB0aGUgZGF0YSB3ZXJlIGxhc3QKKyAgICAv
LyB1cGRhdGVkLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3RhbXA7CisKKyAgICAvLyBO
dW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgYXhlcyBhcnJheS4KKyAgICB1bnNpZ25lZCBh
eGVzTGVuZ3RoOworCisgICAgLy8gTm9ybWFsaXplZCB2YWx1ZXMgcmVwcmVzZW50aW5nIGF4ZXMs
IGluIHRoZSByYW5nZSBbLTEuLjFdLgorICAgIGZsb2F0IGF4ZXNbYXhlc0xlbmd0aENhcF07CisK
KyAgICAvLyBOdW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgYnV0dG9ucyBhcnJheS4KKyAg
ICB1bnNpZ25lZCBidXR0b25zTGVuZ3RoOworCisgICAgLy8gTm9ybWFsaXplZCB2YWx1ZXMgcmVw
cmVzZW50aW5nIGJ1dHRvbnMsIGluIHRoZSByYW5nZSBbMC4uMV0uCisgICAgZmxvYXQgYnV0dG9u
c1tidXR0b25zTGVuZ3RoQ2FwXTsKK307CisKK30KKworI2VuZGlmIC8vIFdlYkdhbWVwYWRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViR2FtZXBhZHMuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYkdhbWVwYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTNiYTJhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9uaXgvcHVibGljL1dlYkdhbWVwYWRzLmgKQEAgLTAsMCArMSw0NyBAQAorLy8gQ29weXJp
Z2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisvLworLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisvLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisvLyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKy8vIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisvLyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorLy8gRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKy8vIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisvLyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorLy8gQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisvLyBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisvLyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKy8vIERBTUFHRS4KKworI2lm
bmRlZiBXZWJHYW1lcGFkc19oCisjZGVmaW5lIFdlYkdhbWVwYWRzX2gKKworI2luY2x1ZGUgIldl
YkdhbWVwYWQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkdhbWVwYWRzIHsK
K3B1YmxpYzoKKyAgICBXZWJHYW1lcGFkcygpCisgICAgICAgIDogbGVuZ3RoKDApIHsgfQorCisg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBpdGVtc0xlbmd0aENhcCA9IDQ7CisKKyAgICAvLyBOdW1i
ZXIgb2YgdmFsaWQgZW50cmllcyBpbiB0aGUgaXRlbXMgYXJyYXkuCisgICAgdW5zaWduZWQgbGVu
Z3RoOworCisgICAgLy8gR2FtZXBhZCBkYXRhIGZvciBOIHNlcGFyYXRlIGdhbWVwYWQgZGV2aWNl
cy4KKyAgICBXZWJHYW1lcGFkIGl0ZW1zW2l0ZW1zTGVuZ3RoQ2FwXTsKK307CisKK30KKworI2Vu
ZGlmIC8vIFdlYkdhbWVwYWRzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVi
bGljL1dlYlJlY3QuaCBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlJlY3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjYxYWFjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViUmVjdC5oCkBAIC0wLDAgKzEsNDYgQEAK
KyNpZm5kZWYgV2ViUmVjdF9oCisjZGVmaW5lIFdlYlJlY3RfaAorCisjaWZkZWYgQlVJTERJTkdf
TklYX18KKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlJlY3QgeworcHVibGljOgorICAgIGludCB4OworICAgIGludCB5OworICAg
IGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworCisgICAgV2ViUmVjdChjb25zdCBXZWJSZWN0
JiByKQorICAgICAgICA6IHgoci54KQorICAgICAgICAsIHkoci55KQorICAgICAgICAsIHdpZHRo
KHIud2lkdGgpCisgICAgICAgICwgaGVpZ2h0KHIuaGVpZ2h0KQorICAgIHsKKyAgICB9CisKKyNp
ZmRlZiBCVUlMRElOR19OSVhfXworICAgIFdlYlJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cikKKyAgICAgICAgOiB4KHIueCgpKQorICAgICAgICAsIHkoci55KCkpCisgICAgICAgICwgd2lk
dGgoci53aWR0aCgpKQorICAgICAgICAsIGhlaWdodChyLmhlaWdodCgpKQorICAgIHsKKyAgICB9
CisKKyAgICBXZWJSZWN0JiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcikKKyAg
ICB7CisgICAgICAgIHggPSByLngoKTsKKyAgICAgICAgeSA9IHIueSgpOworICAgICAgICB3aWR0
aCA9IHIud2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gci5oZWlnaHQoKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKyNlbmRpZgorfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vbml4L3B1YmxpYy9XZWJTaXplLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4
L3B1YmxpYy9XZWJTaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0
ZWY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlNp
emUuaApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJTaXplX2gKKyNkZWZpbmUgV2ViU2l6ZV9o
CisKKyNpZmRlZiBCVUlMRElOR19OSVhfXworI2luY2x1ZGUgIkludFNpemUuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYlNpemUgeworICAgIGludCB3aWR0aDsK
KyAgICBpbnQgaGVpZ2h0OworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gd2lk
dGggPD0gMCB8fCBoZWlnaHQgPD0gMDsgfQorCisgICAgV2ViU2l6ZSgpCisgICAgICAgIDogd2lk
dGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICB7CisgICAgfQorCisgICAgV2ViU2l6ZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgICAgIDogd2lkdGgod2lkdGgpCisgICAgICAgICwg
aGVpZ2h0KGhlaWdodCkKKyAgICB7CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfTklYX18KKyAg
ICBXZWJTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHMpCisgICAgICAgIDogd2lkdGgocy53
aWR0aCgpKQorICAgICAgICAsIGhlaWdodChzLmhlaWdodCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICBXZWJTaXplJiBvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcykKKyAgICB7Cisg
ICAgICAgIHdpZHRoID0gcy53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBzLmhlaWdodCgpOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6SW50
U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKKyAgICB9CisjZW5kaWYKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgV2ViU2l6ZSYgYSwgY29uc3QgV2ViU2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0
aCA9PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09IGIuaGVpZ2h0OworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFdlYlNpemUmIGEsIGNvbnN0IFdlYlNpemUmIGIpCit7CisgICAgcmV0
dXJuICEoYSA9PSBiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9uaXgvcHVibGljL1dlYlRoZW1lRW5naW5lLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjMmI5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9uaXgvcHVibGljL1dlYlRoZW1lRW5naW5lLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYlRoZW1lRW5naW5lX2gKKyNkZWZpbmUgV2ViVGhlbWVFbmdpbmVfaAorCisjaW5jbHVk
ZSAiV2ViU2l6ZS5oIgorI2luY2x1ZGUgIldlYkNhbnZhcy5oIgorI2luY2x1ZGUgIldlYkNvbG9y
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJSZWN0OworCitjbGFzcyBXZWJU
aGVtZUVuZ2luZSB7CitwdWJsaWM6CisgICAgLy8gVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFz
c29jaWF0ZWQgUGFydC4KKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgU3RhdGVEaXNhYmxlZCwK
KyAgICAgICAgU3RhdGVIb3ZlciwKKyAgICAgICAgU3RhdGVOb3JtYWwsCisgICAgICAgIFN0YXRl
UHJlc3NlZAorICAgIH07CisKKyAgICAvLyBFeHRyYSBwYXJhbWV0ZXJzIGZvciBkcmF3aW5nIHRo
ZSBQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIGFuZAorICAgIC8vIFBhcnRTY3JvbGxiYXJW
ZXJ0aWNhbFRyYWNrLgorICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKKyAg
ICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBhcyBvcHBvc2VkIHRvIHRo
ZSBwYXJ0IGJlaW5nIHBhaW50ZWQuCisgICAgICAgIGludCB0cmFja1g7CisgICAgICAgIGludCB0
cmFja1k7CisgICAgICAgIGludCB0cmFja1dpZHRoOworICAgICAgICBpbnQgdHJhY2tIZWlnaHQ7
CisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRDaGVja2JveCwgUGFy
dFB1c2hCdXR0b24gYW5kIFBhcnRSYWRpby4KKyAgICBzdHJ1Y3QgQnV0dG9uRXh0cmFQYXJhbXMg
eworICAgICAgICBib29sIGNoZWNrZWQ7CisgICAgICAgIGJvb2wgaW5kZXRlcm1pbmF0ZTsgLy8g
V2hldGhlciB0aGUgYnV0dG9uIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUuCisgICAgICAgIGJvb2wg
aXNEZWZhdWx0OyAvLyBXaGV0aGVyIHRoZSBidXR0b24gaXMgZGVmYXVsdCBidXR0b24uCisgICAg
ICAgIGJvb2wgaGFzQm9yZGVyOworICAgICAgICBXZWJDb2xvciBiYWNrZ3JvdW5kQ29sb3I7Cisg
ICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRNZW51TGlzdAorICAgIHN0
cnVjdCBNZW51TGlzdEV4dHJhUGFyYW1zIHsKKyAgICAgICAgYm9vbCBoYXNCb3JkZXI7CisgICAg
ICAgIGJvb2wgaGFzQm9yZGVyUmFkaXVzOworICAgICAgICBpbnQgYXJyb3dYOworICAgICAgICBp
bnQgYXJyb3dZOworICAgICAgICBXZWJDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgfTsKKwor
ICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgZm9yIFBhcnRTbGlkZXJUcmFjayBhbmQgUGFydFNsaWRl
clRodW1iCisgICAgc3RydWN0IFNsaWRlckV4dHJhUGFyYW1zIHsKKyAgICAgICAgYm9vbCB2ZXJ0
aWNhbDsKKyAgICAgICAgYm9vbCBpbkRyYWc7CisgICAgfTsKKworICAgIC8vIEV4dHJhIHBhcmFt
ZXRlcnMgZm9yIFBhcnRJbm5lclNwaW5CdXR0b24KKyAgICBzdHJ1Y3QgSW5uZXJTcGluQnV0dG9u
RXh0cmFQYXJhbXMgeworICAgICAgICBib29sIHNwaW5VcDsKKyAgICAgICAgYm9vbCByZWFkT25s
eTsKKyAgICB9OworCisgICAgLy8gRXh0cmEgcGFyYW1ldGVycyBmb3IgUGFydFByb2dyZXNzQmFy
CisgICAgc3RydWN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMgeworICAgICAgICBib29sIGlzRGV0
ZXJtaW5hdGU7CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKKyAgICAgICAgZG91YmxlIGFuaW1h
dGlvblByb2dyZXNzOworICAgICAgICBkb3VibGUgYW5pbWF0aW9uU3RhcnRUaW1lOworICAgIH07
CisKKyAgICBzdHJ1Y3QgTWV0ZXJFeHRyYVBhcmFtcworICAgIHsKKyAgICAgICAgZG91YmxlIG1p
bjsKKyAgICAgICAgZG91YmxlIG1heDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICBk
b3VibGUgbG93OworICAgICAgICBkb3VibGUgaGlnaDsKKyAgICAgICAgZG91YmxlIG9wdGltdW07
CisgICAgICAgIGRvdWJsZSB2YWx1ZVJhdGlvKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1heCA8PSBtaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgICAgICB9CisgICAgfTsK
KworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpIGNvbnN0
IHsgcmV0dXJuICIiOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBleHRyYVF1aXJrc1N0eWxl
U2hlZXQoKSBjb25zdCB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZXh0
cmFQbHVnSW5zU3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisKKyAgICAvLyBUZXh0
IHNlbGVjdGlvbiBjb2xvcnMuCisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xv
ciBpbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFdlYkNvbG9yIGluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QgPSAw
OworCisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNvbG9ycworICAgIHZpcnR1YWwgV2ViQ29s
b3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFdlYkNvbG9yIGFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIFdlYkNvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBXZWJDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNv
bnN0ID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29sb3IgdGFwSGlnaGxpZ2h0Q29sb3IoKSBjb25z
dCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oV2ViQ2FudmFzKiwgU3RhdGUs
IGNvbnN0IFdlYlJlY3QmLCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdl
YlJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBXZWJTaXplIGdldENoZWNrYm94U2l6ZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChXZWJDYW52YXMqLCBT
dGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgV2ViU2l6ZSBnZXRSYWRpb1NpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50UmFkaW8oV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBj
b25zdCBCdXR0b25FeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUZXh0QXJlYShXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0TWVudUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50
JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRkaW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludE1lbnVMaXN0KFdlYkNhbnZhcyosIFN0YXRl
LCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dy
ZXNzQmFyKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgUHJvZ3Jlc3NC
YXJFeHRyYVBhcmFtcyYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBnZXRBbmltYXRp
b25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
ZG91YmxlIGdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGdldElubmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9w
LCBpbnQmIHBhZGRpbmdMZWZ0LCBpbnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50SW5uZXJTcGluQnV0dG9uKFdlYkNh
bnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQ
YXJhbXMmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWV0ZXIoV2ViQ2FudmFz
KiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmLCBjb25zdCBNZXRlckV4dHJhUGFyYW1zJikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFdlYkNhbnZhcyosIFN0YXRl
LCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludFNsaWRl
clRodW1iKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JikgY29uc3QgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL25peC9wdWJsaWMvV2ViVmVjdG9yLmggYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3B1Ymxp
Yy9XZWJWZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZiN2U2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL25peC9wdWJsaWMvV2ViVmVjdG9y
LmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZlY3Rvcl9oCisjZGVmaW5lIFdlYlZlY3Rv
cl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQSBzaW1wbGUgdmVj
dG9yIGNsYXNzLgorLy8KKy8vIFNhbXBsZSB1c2FnZToKKy8vCisvLyAgIHZvaWQgRm9vKFdlYlZl
Y3RvcjxpbnQ+JiByZXN1bHQpCisvLyAgIHsKKy8vICAgICAgIFdlYlZlY3RvcjxpbnQ+IGRhdGEo
MTApOworLy8gICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytpKQor
Ly8gICAgICAgICAgIGRhdGFbaV0gPSAuLi4KKy8vICAgICAgIHJlc3VsdC5zd2FwKGRhdGEpOwor
Ly8gICB9CisvLworLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhc3NpZ24gZnJvbSBvdGhlciB0
eXBlcyBvZiByYW5kb20gYWNjZXNzCisvLyBjb250YWluZXJzOgorLy8KKy8vICAgdm9pZCBGb28o
Y29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiBpbnB1dCkKKy8vICAgeworLy8gICAgICAg
V2ViVmVjdG9yPFdlYkNTdHJpbmc+IGNzdHJpbmdzID0gaW5wdXQ7CisvLyAgICAgICAuLi4KKy8v
ICAgfQorLy8KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgV2ViVmVjdG9yIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOworCisgICAgfldlYlZlY3RvcigpCisgICAgewor
ICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgZXhwbGljaXQgV2ViVmVjdG9yKHNpemVf
dCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIGluaXRpYWxpemUoc2l6ZSk7CisgICAgfQorCisg
ICAgV2ViVmVjdG9yKGNvbnN0IFdlYlZlY3RvcjxUPiYgb3RoZXIpCisgICAgeworICAgICAgICBp
bml0aWFsaXplRnJvbShvdGhlci5tX3B0ciwgb3RoZXIubV9zaXplKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQz4KKyAgICBXZWJWZWN0b3IoY29uc3QgQyYgb3RoZXIpCisgICAg
eworICAgICAgICBpbml0aWFsaXplRnJvbShvdGhlci5zaXplKCkgPyAmb3RoZXJbMF0gOiAwLCBv
dGhlci5zaXplKCkpOworICAgIH0KKworICAgIFdlYlZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFdl
YlZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyAhPSAmb3RoZXIpCisgICAg
ICAgICAgICBhc3NpZ24ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEM+CisgICAgV2ViVmVjdG9yPFQ+JiBvcGVyYXRvcj0oY29u
c3QgQyYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyAhPSByZWludGVycHJldF9jYXN0
PGNvbnN0IFdlYlZlY3RvcjxUPio+KCZvdGhlcikpCisgICAgICAgICAgICBhc3NpZ24ob3RoZXIp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEM+CisgICAgdm9pZCBhc3NpZ24oY29uc3QgQyYgb3RoZXIpCisgICAgeworICAgICAgICBhc3Np
Z24ob3RoZXIuc2l6ZSgpID8gJm90aGVyWzBdIDogMCwgb3RoZXIuc2l6ZSgpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICB2b2lkIGFzc2lnbihjb25zdCBVKiB2YWx1
ZXMsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBpbml0
aWFsaXplRnJvbSh2YWx1ZXMsIHNpemUpOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
IW1fc2l6ZTsgfQorCisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkKKyAgICB7CisgICAgICAg
IGFzc2VydChpIDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fcHRyW2ldOworICAgIH0KKyAg
ICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgYXNz
ZXJ0KGkgPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9wdHJbaV07CisgICAgfQorCisgICAg
Ym9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtX3B0cltp
XSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fcHRy
OyB9CisgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisKKyAgICB2
b2lkIHN3YXAoV2ViVmVjdG9yPFQ+JiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0ZDo6c3dhcCht
X3B0ciwgb3RoZXIubV9wdHIpOworICAgICAgICBzdGQ6OnN3YXAobV9zaXplLCBvdGhlci5tX3Np
emUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoc2l6ZV90IHNpemUp
CisgICAgeworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBpZiAoIW1fc2l6ZSkKKyAg
ICAgICAgICAgIG1fcHRyID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3B0ciA9
IHN0YXRpY19jYXN0PFQqPig6Om9wZXJhdG9yIG5ldyhzaXplb2YoVCkgKiBtX3NpemUpKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAg
ICAgICAgbmV3ICgmbV9wdHJbaV0pIFQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgorICAgIHZvaWQgaW5pdGlhbGl6ZUZyb20oY29uc3QgVSogdmFsdWVz
LCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgIGlm
ICghbV9zaXplKQorICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIG1fcHRyID0gc3RhdGljX2Nhc3Q8VCo+KDo6b3BlcmF0b3IgbmV3KHNpemVvZihUKSAq
IG1fc2l6ZSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemU7ICsr
aSkKKyAgICAgICAgICAgICAgICBuZXcgKCZtX3B0cltpXSkgVCh2YWx1ZXNbaV0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICBtX3B0cltpXS5+VCgpOwor
ICAgICAgICA6Om9wZXJhdG9yIGRlbGV0ZShtX3B0cik7CisgICAgfQorCisgICAgVCogbV9wdHI7
CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVu
Z2luZS5jcHAgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MGZjN2IKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUu
Y3BwCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRlZmF1bHRXZWJUaGVtZUVuZ2luZS5oIgorI2luY2x1
ZGUgInB1YmxpYy9XZWJDb2xvci5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJSZWN0LmgiCisjaW5j
bHVkZSAicHVibGljL1dlYlNpemUuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
Y21hdGg+CisjaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KKworY29uc3QgZG91YmxlIEJHX0NPTE9S
MSA9IDB4RjYvMjU2LjA7Citjb25zdCBkb3VibGUgQkdfQ09MT1IyID0gMHhERS8yNTYuMDsKK2Nv
bnN0IGRvdWJsZSBCT1JERVJfQ09MT1IgPSAweEE0LzI1Ni4wOworY29uc3QgZG91YmxlIEJPUkRF
Ul9PTkhPVkVSX0NPTE9SID0gMHg3QS8yNTYuMDsKK2NvbnN0IGRvdWJsZSBDSEVDS19DT0xPUiA9
IDB4NjYvMjU2LjA7Citjb25zdCBkb3VibGUgVEVYVEZJRUxEX0RBUktfQk9SREVSX0NPTE9SID0g
MHg5QS8yNTYuMDsKK2NvbnN0IGRvdWJsZSBURVhURklFTERfTElHSFRfQk9SREVSX0NPTE9SID0g
MHhFRS8yNTYuMDsKKworY29uc3QgaW50IE1FTlVMSVNUX0JPUkRFUiA9IDU7Citjb25zdCBpbnQg
TUVOVUxJU1RfQVJST1dfU0laRSA9IDY7CisKK2NvbnN0IGludCBJTk5FUlNQSU5CVVRUT05fQk9S
REVSID0gMzsKK2NvbnN0IGludCBJTk5FUlNQSU5CVVRUT05fQVJST1dfU0laRSA9IDI7CisKK2Nv
bnN0IFdlYktpdDo6UkdCQTMyIFRBUF9ISUdITElHSFRfQ09MT1IgPSAweDY2MDAwMDAwOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjphY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBXZWJDb2xv
cigwLCAwLCAyNTUpOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvbG9y
Ojp3aGl0ZTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvbG9yKDE3
NiwgMTc2LCAxNzYpOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmluYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29s
b3I6OmJsYWNrOworfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBhY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRo
ZW1lRW5naW5lOjphY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Cit9CisKK1dl
YkNvbG9yIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKTsKK30KKworV2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVy
biBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOworfQorCitXZWJDb2xvciBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFdlYkNvbG9yKDI1NSwgMTUwLCA1MCk7IC8vIE9yYW5nZS4KK30KKwor
V2ViQ29sb3IgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjppbmFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvbG9yKDI1NSwgMjU1LCAwKTsgLy8g
WWVsbG93LgorfQorCitXZWJDb2xvciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmZvY3VzUmluZ0Nv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29sb3I6OmJsYWNrOworfQorCitXZWJDb2xv
ciBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnRhcEhpZ2hsaWdodENvbG9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gVEFQX0hJR0hMSUdIVF9DT0xPUjsKK30KKworc3RhdGljIHZvaWQgZ3JhZGllbnRG
aWxsKGNhaXJvX3QqIGNhaXJvLCBkb3VibGUgeVN0YXJ0LCBkb3VibGUgeUxlbmd0aCwgYm9vbCBp
bnZlcnRlZCA9IGZhbHNlKQoreworICAgIGRvdWJsZSBncmFkU3RhcnRDb2xvciA9IEJHX0NPTE9S
MTsKKyAgICBkb3VibGUgZ3JhZEVuZENvbG9yID0gQkdfQ09MT1IyOworICAgIGlmIChpbnZlcnRl
ZCkKKyAgICAgICAgc3RkOjpzd2FwKGdyYWRTdGFydENvbG9yLCBncmFkRW5kQ29sb3IpOworCisg
ICAgY2Fpcm9fcGF0dGVybl90KiBncmFkaWVudCA9IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVh
cigwLCB5U3RhcnQsIDAsIHlTdGFydCArIHlMZW5ndGgpOworICAgIGNhaXJvX3BhdHRlcm5fYWRk
X2NvbG9yX3N0b3BfcmdiKGdyYWRpZW50LCAwLCBncmFkU3RhcnRDb2xvciwgZ3JhZFN0YXJ0Q29s
b3IsIGdyYWRTdGFydENvbG9yKTsKKyAgICBjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3Jn
YihncmFkaWVudCwgMSwgZ3JhZEVuZENvbG9yLCBncmFkRW5kQ29sb3IsIGdyYWRFbmRDb2xvcik7
CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjYWlybywgZ3JhZGllbnQpOworICAgIGNhaXJvX2ZpbGwo
Y2Fpcm8pOworICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShncmFkaWVudCk7Cit9CisKK3N0YXRp
YyB2b2lkIHNldHVwQm9yZGVyKGNhaXJvX3QgKiBjYWlybywgV2ViVGhlbWVFbmdpbmU6OlN0YXRl
IHN0YXRlKQoreworICAgIGRvdWJsZSBib3JkZXJDb2xvciA9IHN0YXRlID09IFdlYlRoZW1lRW5n
aW5lOjpTdGF0ZUhvdmVyID8gQk9SREVSX09OSE9WRVJfQ09MT1IgOiBCT1JERVJfQ09MT1I7Cisg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2Fpcm8sIGJvcmRlckNvbG9yLCBib3JkZXJDb2xvciwg
Ym9yZGVyQ29sb3IpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNhaXJvLCAxKTsKK30KKwor
dm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50QnV0dG9uKFdlYkNhbnZhcyogY2FudmFz
LCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgY29uc3QgQnV0dG9uRXh0cmFQYXJh
bXMmKSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihj
YW52YXMsIHN0YXRlKTsKKyAgICAvLyBDYWlybyB1c2VzIGEgY29vcmRpbmF0ZSBzeXN0ZW0gbm90
IGJhc2VkIG9uIHBpeGVsIGNvb3JkaW5hdGVzLCBzbworICAgIC8vIHdlIG5lZWQgdG8gYWRkICAw
LjUgdG8geCBhbmQgeSBjb29yZCBvciB0aGUgbGluZSB3aWxsIHN0YXkgYmV0d2VlbgorICAgIC8v
IHR3byBwaXhlbHMgaW5zdGVhZCBvZiBpbiB0aGUgbWlkZGxlIG9mIGEgcGl4ZWwuCisgICAgY2Fp
cm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qud2lk
dGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKwor
ICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09IFN0
YXRlUHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRUZXh0RmllbGQoV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRl
LCBjb25zdCBXZWJSZWN0JiByZWN0KSBjb25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsK
KworICAgIGNvbnN0IGRvdWJsZSBsaW5lV2lkdGggPSAyOworICAgIGNvbnN0IGRvdWJsZSBjb3Jy
ZWN0aW9uID0gbGluZVdpZHRoIC8gMi4wOworCisgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY2Fu
dmFzLCBsaW5lV2lkdGgpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgVEVYVEZJ
RUxEX0RBUktfQk9SREVSX0NPTE9SLCBURVhURklFTERfREFSS19CT1JERVJfQ09MT1IsIFRFWFRG
SUVMRF9EQVJLX0JPUkRFUl9DT0xPUik7CisgICAgY2Fpcm9fbW92ZV90byhjYW52YXMsIHJlY3Qu
eCArIGNvcnJlY3Rpb24sIHJlY3QueSArIGNvcnJlY3Rpb24gKyByZWN0LmhlaWdodCk7CisgICAg
Y2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFzLCAwLCAtcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3Jl
bF9saW5lX3RvKGNhbnZhcywgcmVjdC53aWR0aCwgMCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNhbnZh
cyk7CisKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihjYW52YXMsIFRFWFRGSUVMRF9MSUdIVF9C
T1JERVJfQ09MT1IsIFRFWFRGSUVMRF9MSUdIVF9CT1JERVJfQ09MT1IsIFRFWFRGSUVMRF9MSUdI
VF9CT1JERVJfQ09MT1IpOworICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyBjb3Jy
ZWN0aW9uICsgcmVjdC53aWR0aCwgcmVjdC55ICsgY29ycmVjdGlvbik7CisgICAgY2Fpcm9fcmVs
X2xpbmVfdG8oY2FudmFzLCAwLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fcmVsX2xpbmVfdG8o
Y2FudmFzLCAtcmVjdC53aWR0aCwgMCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNhbnZhcyk7CisKKyAg
ICBjYWlyb19yZXN0b3JlKGNhbnZhcyk7Cit9CisKK3ZvaWQgRGVmYXVsdFdlYlRoZW1lRW5naW5l
OjpwYWludFRleHRBcmVhKFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBzdGF0ZSwgY29uc3QgV2Vi
UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBwYWludFRleHRGaWVsZChjYW52YXMsIHN0YXRlLCBy
ZWN0KTsKK30KKworV2ViU2l6ZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldENoZWNrYm94U2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUoMTMsIDEzKTsKK30KKwordm9pZCBEZWZh
dWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50Q2hlY2tib3goV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRl
IHN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0LCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYgcGFy
YW0pIGNvbnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNh
bnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwg
cmVjdC55ICsgMC41LCByZWN0LndpZHRoLCByZWN0LmhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tl
X3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJl
Y3QuaGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQpOworCisgICAgaWYgKHBhcmFtLmNoZWNr
ZWQpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIGJvcmRlciA9IDM7CisgICAgICAgIGNhaXJvX3Nl
dF9saW5lX3dpZHRoKGNhbnZhcywgMik7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNh
bnZhcywgQ0hFQ0tfQ09MT1IsIENIRUNLX0NPTE9SLCBDSEVDS19DT0xPUik7CisgICAgICAgIGNh
aXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAwLjUgKyBib3JkZXIsIHJlY3QueSArIDAuNSAr
IHJlY3QuaGVpZ2h0IC0gYm9yZGVyKTsKKyAgICAgICAgY2Fpcm9fcmVsX2xpbmVfdG8oY2FudmFz
LCByZWN0LndpZHRoIC0gYm9yZGVyICogMiwgLXJlY3QuaGVpZ2h0ICsgYm9yZGVyICogMik7Cisg
ICAgICAgIGNhaXJvX21vdmVfdG8oY2FudmFzLCByZWN0LnggKyAwLjUgKyBib3JkZXIsIHJlY3Qu
eSArIDAuNSArIGJvcmRlcik7CisgICAgICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgcmVj
dC53aWR0aCAtIGJvcmRlciAqIDIsIHJlY3QuaGVpZ2h0IC0gYm9yZGVyICogMik7CisgICAgICAg
IGNhaXJvX3N0cm9rZShjYW52YXMpOworICAgIH0KKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFz
KTsKK30KKworV2ViU2l6ZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldFJhZGlvU2l6ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYlNpemUoMTMsIDEzKTsKK30KKwordm9pZCBEZWZhdWx0V2Vi
VGhlbWVFbmdpbmU6OnBhaW50UmFkaW8oV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBj
b25zdCBXZWJSZWN0JiByZWN0LCBjb25zdCBCdXR0b25FeHRyYVBhcmFtcyYgcGFyYW0pIGNvbnN0
Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3Rh
dGUpOworICAgIGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGgvMi4wLCByZWN0
LnkgKyByZWN0LmhlaWdodC8yLjAsIHJlY3Qud2lkdGgvMi4wLCAwLCAyICogTV9QSSk7CisgICAg
Y2Fpcm9fc3Ryb2tlX3ByZXNlcnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFz
LCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKworICAgIGlmIChwYXJhbS5jaGVja2VkKSB7CisgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNhbnZhcywgQ0hFQ0tfQ09MT1IsIENIRUNLX0NPTE9S
LCBDSEVDS19DT0xPUik7CisgICAgICAgIGNhaXJvX2FyYyhjYW52YXMsIHJlY3QueCArIHJlY3Qu
d2lkdGgvMi4wLCByZWN0LnkgKyByZWN0LmhlaWdodC8yLjAsIHJlY3Qud2lkdGgvNC4wLCAwLCAy
ICogTV9QSSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY2FudmFzKTsKKyAgICB9CisgICAgY2Fpcm9f
cmVzdG9yZShjYW52YXMpOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6Z2V0TWVu
dUxpc3RQYWRkaW5nKGludCYgcGFkZGluZ1RvcCwgaW50JiBwYWRkaW5nTGVmdCwgaW50JiBwYWRk
aW5nQm90dG9tLCBpbnQmIHBhZGRpbmdSaWdodCkgY29uc3QKK3sKKyAgICBwYWRkaW5nVG9wID0g
TUVOVUxJU1RfQk9SREVSOworICAgIHBhZGRpbmdMZWZ0ID0gTUVOVUxJU1RfQk9SREVSOworICAg
IHBhZGRpbmdCb3R0b20gPSBNRU5VTElTVF9CT1JERVI7CisgICAgcGFkZGluZ1JpZ2h0ID0gMiAq
IE1FTlVMSVNUX0JPUkRFUiArIE1FTlVMSVNUX0FSUk9XX1NJWkU7Cit9CisKK3ZvaWQgRGVmYXVs
dFdlYlRoZW1lRW5naW5lOjpwYWludE1lbnVMaXN0KFdlYkNhbnZhcyogY2FudmFzLCBTdGF0ZSBz
dGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZh
cyk7CisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNhbnZhcywgcmVjdC54ICsgMC41LCByZWN0LnkgKyAwLjUsIHJlY3Qud2lkdGgsIHJlY3QuaGVp
Z2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAgIGdyYWRpZW50
RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09IFN0YXRlUHJlc3NlZCk7
CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVjdC53aWR0aCAtIE1FTlVM
SVNUX0FSUk9XX1NJWkUgLSBNRU5VTElTVF9CT1JERVIsIHJlY3QueSArIDEgKyByZWN0LmhlaWdo
dC8yIC0gTUVOVUxJU1RfQVJST1dfU0laRS8yKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYihj
YW52YXMsIENIRUNLX0NPTE9SLCBDSEVDS19DT0xPUiwgQ0hFQ0tfQ09MT1IpOworICAgIGNhaXJv
X3JlbF9saW5lX3RvKGNhbnZhcywgTUVOVUxJU1RfQVJST1dfU0laRSwgMCk7CisgICAgY2Fpcm9f
cmVsX2xpbmVfdG8oY2FudmFzLCAtTUVOVUxJU1RfQVJST1dfU0laRS8yLCBNRU5VTElTVF9BUlJP
V19TSVpFKTsKKyAgICBjYWlyb19jbG9zZV9wYXRoKGNhbnZhcyk7CisgICAgY2Fpcm9fZmlsbChj
YW52YXMpOworCisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCitXZWJTaXplIERlZmF1
bHRXZWJUaGVtZUVuZ2luZTo6Z2V0UHJvZ3Jlc3NCYXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV2ViU2l6ZSgyMDAwLCAzMDApOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6
cGFpbnRQcm9ncmVzc0JhcihXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUgc3RhdGUsIGNvbnN0IFdl
YlJlY3QmIHJlY3QsIGNvbnN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMmIHBhcmFtcykgY29uc3QK
K3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisKKyAgICBpZiAocGFyYW1zLmlzRGV0ZXJtaW5h
dGUpIHsKKyAgICAgICAgLy8gQmFja2dyb3VuZAorICAgICAgICBzZXR1cEJvcmRlcihjYW52YXMs
IHN0YXRlKTsKKyAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNhbnZhcywgcmVjdC54LCByZWN0Lnks
IHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICAgICAgY2Fpcm9fZmlsbChjYW52YXMpOwor
ICAgICAgICAvLyBQcm9ncmVzcworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0
LngsIHJlY3QueSwgcmVjdC53aWR0aCAqIHBhcmFtcy5wb3NpdGlvbiwgcmVjdC5oZWlnaHQpOwor
ICAgICAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwg
cmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgICAgICBncmFkaWVudEZpbGwoY2FudmFzLCBy
ZWN0LnksIHJlY3QuaGVpZ2h0LCB0cnVlKTsKKyAgICB9CisKKyAgICBjYWlyb19yZXN0b3JlKGNh
bnZhcyk7Cit9CisKKy8vIFRoZXNlIHZhbHVlcyBoYXZlIGJlZW4gY29waWVkIGZyb20gUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuY3BwCitzdGF0aWMgY29uc3QgaW50IHByb2dyZXNzQWN0aXZpdHlC
bG9ja3MgPSA1Oworc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lcyA9IDEw
Oworc3RhdGljIGNvbnN0IGRvdWJsZSBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFsID0gMC4xMjU7
CisKK2RvdWJsZSBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldEFuaW1hdGlvblJlcGVhdEludGVy
dmFsRm9yUHJvZ3Jlc3NCYXIoKSBjb25zdAoreworICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlv
bkludGVydmFsOworfQorCitkb3VibGUgRGVmYXVsdFdlYlRoZW1lRW5naW5lOjpnZXRBbmltYXRp
b25EdXJhdGlvbkZvclByb2dyZXNzQmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvZ3Jlc3NB
bmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZv
ciBiYWNrIGFuZCBmb3J0aDsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OmdldElu
bmVyU3BpbkJ1dHRvblBhZGRpbmcoaW50JiBwYWRkaW5nVG9wLCBpbnQmIHBhZGRpbmdMZWZ0LCBp
bnQmIHBhZGRpbmdCb3R0b20sIGludCYgcGFkZGluZ1JpZ2h0KSBjb25zdAoreworICAgIHBhZGRp
bmdUb3AgPSBJTk5FUlNQSU5CVVRUT05fQk9SREVSOworICAgIHBhZGRpbmdMZWZ0ID0gSU5ORVJT
UElOQlVUVE9OX0JPUkRFUjsKKyAgICBwYWRkaW5nQm90dG9tID0gSU5ORVJTUElOQlVUVE9OX0JP
UkRFUjsKKyAgICBwYWRkaW5nUmlnaHQgPSAyICogSU5ORVJTUElOQlVUVE9OX0JPUkRFUiArIElO
TkVSU1BJTkJVVFRPTl9BUlJPV19TSVpFOworfQorCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2lu
ZTo6cGFpbnRJbm5lclNwaW5CdXR0b24oV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBj
b25zdCBXZWJSZWN0JiByZWN0LCBjb25zdCBJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyYgcGFy
YW0pIGNvbnN0Cit7CisgICAgZG91YmxlIHJlY3RIYWxmSGVpZ2h0ID0gcmVjdC5oZWlnaHQgLyAy
OworCisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIHNldHVwQm9yZGVyKGNhbnZhcywgc3Rh
dGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJlY3QueCArIDAuNSwgcmVjdC55ICsg
MS41LCByZWN0LndpZHRoLCByZWN0SGFsZkhlaWdodCk7CisgICAgY2Fpcm9fc3Ryb2tlX3ByZXNl
cnZlKGNhbnZhcyk7CisKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3RIYWxm
SGVpZ2h0LCBzdGF0ZSA9PSBTdGF0ZVByZXNzZWQgJiYgcGFyYW0uc3BpblVwKTsKKworICAgIHNl
dHVwQm9yZGVyKGNhbnZhcywgc3RhdGUpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52YXMsIHJl
Y3QueCArIDAuNSwgcmVjdC55ICsgMC41ICsgcmVjdEhhbGZIZWlnaHQsIHJlY3Qud2lkdGgsIHJl
Y3RIYWxmSGVpZ2h0KTsKKyAgICBjYWlyb19zdHJva2VfcHJlc2VydmUoY2FudmFzKTsKKworICAg
IGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSArIHJlY3RIYWxmSGVpZ2h0LCByZWN0SGFsZkhl
aWdodCwgc3RhdGUgPT0gU3RhdGVQcmVzc2VkICYmICFwYXJhbS5zcGluVXApOworCisgICAgY2Fp
cm9fbW92ZV90byhjYW52YXMsIHJlY3QueCArIHJlY3Qud2lkdGggLSBJTk5FUlNQSU5CVVRUT05f
QVJST1dfU0laRSAtIElOTkVSU1BJTkJVVFRPTl9CT1JERVIgKiAyLCByZWN0LnkgKyByZWN0SGFs
ZkhlaWdodCArIHJlY3QuaGVpZ2h0LzQgLSBJTk5FUlNQSU5CVVRUT05fQVJST1dfU0laRSArIDEu
NSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDSEVDS19DT0xPUiwgQ0hFQ0tf
Q09MT1IsIENIRUNLX0NPTE9SKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1FTlVM
SVNUX0FSUk9XX1NJWkUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLU1FTlVM
SVNUX0FSUk9XX1NJWkUgLyAyLCBNRU5VTElTVF9BUlJPV19TSVpFKTsKKyAgICBjYWlyb19jbG9z
ZV9wYXRoKGNhbnZhcyk7CisKKyAgICBjYWlyb19tb3ZlX3RvKGNhbnZhcywgcmVjdC54ICsgcmVj
dC53aWR0aCAtIElOTkVSU1BJTkJVVFRPTl9BUlJPV19TSVpFIC0gSU5ORVJTUElOQlVUVE9OX0JP
UkRFUiAqIDIsIHJlY3QueSArIHJlY3QuaGVpZ2h0LzQgKyBJTk5FUlNQSU5CVVRUT05fQVJST1df
U0laRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY2FudmFzLCBDSEVDS19DT0xPUiwgQ0hF
Q0tfQ09MT1IsIENIRUNLX0NPTE9SKTsKKyAgICBjYWlyb19yZWxfbGluZV90byhjYW52YXMsIE1F
TlVMSVNUX0FSUk9XX1NJWkUsIDApOworICAgIGNhaXJvX3JlbF9saW5lX3RvKGNhbnZhcywgLU1F
TlVMSVNUX0FSUk9XX1NJWkUgLyAyLCAtTUVOVUxJU1RfQVJST1dfU0laRSk7CisgICAgY2Fpcm9f
Y2xvc2VfcGF0aChjYW52YXMpOworCisgICAgY2Fpcm9fZmlsbChjYW52YXMpOworfQorCit2b2lk
IERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRNZXRlcihXZWJDYW52YXMqIGNhbnZhcywgU3Rh
dGUgc3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QsIGNvbnN0IE1ldGVyRXh0cmFQYXJhbXMmIHBh
cmFtcykgY29uc3QKK3sKKyAgICBjYWlyb19zYXZlKGNhbnZhcyk7CisKKyAgICAvLyBCYWNrZ3Jv
dW5kCisgICAgc2V0dXBCb3JkZXIoY2FudmFzLCBzdGF0ZSk7CisgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNhbnZhcywgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKyAgICBj
YWlyb19maWxsKGNhbnZhcyk7CisgICAgLy8gTWV0ZXIKKyAgICBjYWlyb19yZWN0YW5nbGUoY2Fu
dmFzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCAqIHBhcmFtcy52YWx1ZVJhdGlvKCksIHJl
Y3QuaGVpZ2h0KTsKKyAgICBncmFkaWVudEZpbGwoY2FudmFzLCByZWN0LnksIHJlY3QuaGVpZ2h0
KTsKKworICAgIGNhaXJvX3Jlc3RvcmUoY2FudmFzKTsKK30KKworY29uc3QgaW50IFNMSURFUl9U
UkFDS19IRUlHSFQgPSA2OworCit2b2lkIERlZmF1bHRXZWJUaGVtZUVuZ2luZTo6cGFpbnRTbGlk
ZXJUcmFjayhXZWJDYW52YXMqIGNhbnZhcywgU3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgY2Fpcm9fc2F2ZShjYW52YXMpOworICAgIGNhaXJvX3JlY3RhbmdsZShjYW52
YXMsIHJlY3QueCwgcmVjdC55ICsgKHJlY3QuaGVpZ2h0IC0gU0xJREVSX1RSQUNLX0hFSUdIVCkg
LyAyLjAsIHJlY3Qud2lkdGgsIFNMSURFUl9UUkFDS19IRUlHSFQpOworICAgIGdyYWRpZW50Rmls
bChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHRydWUpOworICAgIGNhaXJvX3Jlc3RvcmUo
Y2FudmFzKTsKK30KKwordm9pZCBEZWZhdWx0V2ViVGhlbWVFbmdpbmU6OnBhaW50U2xpZGVyVGh1
bWIoV2ViQ2FudmFzKiBjYW52YXMsIFN0YXRlIHN0YXRlLCBjb25zdCBXZWJSZWN0JiByZWN0KSBj
b25zdAoreworICAgIGNhaXJvX3NhdmUoY2FudmFzKTsKKyAgICBzZXR1cEJvcmRlcihjYW52YXMs
IHN0YXRlKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY2FudmFzLCByZWN0LngsIHJlY3QueSwgcmVj
dC53aWR0aCwgcmVjdC5oZWlnaHQpOworICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjYW52YXMp
OworICAgIGdyYWRpZW50RmlsbChjYW52YXMsIHJlY3QueSwgcmVjdC5oZWlnaHQsIHN0YXRlID09
IFN0YXRlUHJlc3NlZCk7CisgICAgY2Fpcm9fcmVzdG9yZShjYW52YXMpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaCBi
L1NvdXJjZS9QbGF0Zm9ybS9uaXgvc3JjL0RlZmF1bHRXZWJUaGVtZUVuZ2luZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OWE1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vbml4L3NyYy9EZWZhdWx0V2ViVGhlbWVFbmdpbmUuaApAQCAtMCwwICsx
LDUwIEBACisjaWZuZGVmIERlZmF1bHRXZWJUaGVtZUVuZ2luZV9oCisjZGVmaW5lIERlZmF1bHRX
ZWJUaGVtZUVuZ2luZV9oCisKKyNpbmNsdWRlICJwdWJsaWMvV2ViVGhlbWVFbmdpbmUuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERlZmF1bHRXZWJUaGVtZUVuZ2luZSA6IHB1Ymxp
YyBXZWJUaGVtZUVuZ2luZSB7CitwdWJsaWM6CisgICAgLy8gVGV4dCBzZWxlY3Rpb24gY29sb3Jz
LgorICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgLy8gTGlzdCBib3ggc2VsZWN0aW9uIGNv
bG9ycworICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29sb3IgaW5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBX
ZWJDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgV2ViQ29sb3IgYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBXZWJDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRD
b2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBXZWJDb2xvciBmb2N1c1JpbmdDb2xvcigpIGNv
bnN0OworCisgICAgdmlydHVhbCBXZWJDb2xvciB0YXBIaWdobGlnaHRDb2xvcigpIGNvbnN0Owor
CisgICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKFdlYkNhbnZhcyosIFN0YXRlIHN0YXRlLCBj
b25zdCBXZWJSZWN0JiwgY29uc3QgQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoV2ViQ2FudmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3Qm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0QXJlYShXZWJDYW52YXMqLCBTdGF0
ZSwgY29uc3QgV2ViUmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViU2l6ZSBnZXRDaGVja2Jv
eFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGVja2JveChXZWJDYW52YXMq
LCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNvbnN0IEJ1dHRvbkV4dHJhUGFyYW1zJikgY29uc3Q7
CisgICAgdmlydHVhbCBXZWJTaXplIGdldFJhZGlvU2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBwYWludFJhZGlvKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3Qg
QnV0dG9uRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZW51TGlz
dChXZWJDYW52YXMgKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QgJikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGdldE1lbnVMaXN0UGFkZGluZyhpbnQmIHBhZGRpbmdUb3AsIGludCYgcGFkZGluZ0xl
ZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5nUmlnaHQpIGNvbnN0OworICAgIHZp
cnR1YWwgV2ViU2l6ZSBnZXRQcm9ncmVzc0JhclNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRQcm9ncmVzc0JhcihXZWJDYW52YXMqLCBTdGF0ZSwgY29uc3QgV2ViUmVjdCYsIGNv
bnN0IFByb2dyZXNzQmFyRXh0cmFQYXJhbXMmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBn
ZXRBbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCkgY29uc3Q7CisgICAgdmly
dHVhbCBkb3VibGUgZ2V0QW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBwYWludElubmVyU3BpbkJ1dHRvbihXZWJDYW52YXMgKiwgU3RhdGUs
IGNvbnN0IFdlYlJlY3QgJiwgY29uc3QgSW5uZXJTcGluQnV0dG9uRXh0cmFQYXJhbXMmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5uZXJTcGluQnV0dG9uUGFkZGluZyhpbnQmIHBhZGRp
bmdUb3AsIGludCYgcGFkZGluZ0xlZnQsIGludCYgcGFkZGluZ0JvdHRvbSwgaW50JiBwYWRkaW5n
UmlnaHQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludE1ldGVyKFdlYkNhbnZhcyosIFN0
YXRlLCBjb25zdCBXZWJSZWN0JiwgY29uc3QgTWV0ZXJFeHRyYVBhcmFtcyYpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBwYWludFNsaWRlclRyYWNrKFdlYkNhbnZhcyosIFN0YXRlLCBjb25zdCBX
ZWJSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50U2xpZGVyVGh1bWIoV2ViQ2Fu
dmFzKiwgU3RhdGUsIGNvbnN0IFdlYlJlY3QmKSBjb25zdDsKK307CisKK30KKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwIGIvU291cmNlL1Bs
YXRmb3JtL25peC9zcmMvUGxhdGZvcm0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY2NTRhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vbml4L3Ny
Yy9QbGF0Zm9ybS5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAicHVibGljL1BsYXRmb3JtLmgiCisjaW5jbHVkZSAiRGVmYXVsdFdl
YlRoZW1lRW5naW5lLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEVtcHR5UGxhdGZv
cm0gOiBwdWJsaWMgUGxhdGZvcm0geworcHVibGljOgorICAgIH5FbXB0eVBsYXRmb3JtKCkgeyB9
Cit9Oworc3RhdGljIFdURjo6T3duUHRyPEVtcHR5UGxhdGZvcm0+IHNfZW1wdHlQbGF0Zm9ybSA9
IFdURjo6YWRvcHRQdHIobmV3IEVtcHR5UGxhdGZvcm0oKSk7CisKK3N0YXRpYyBQbGF0Zm9ybSog
c19wbGF0Zm9ybSA9IHNfZW1wdHlQbGF0Zm9ybS5nZXQoKTsKKwordm9pZCBQbGF0Zm9ybTo6aW5p
dGlhbGl6ZShQbGF0Zm9ybSogcGxhdGZvcm0pCit7CisgICAgc19wbGF0Zm9ybSA9IHBsYXRmb3Jt
OworfQorCit2b2lkIFBsYXRmb3JtOjpzaHV0ZG93bigpCit7CisgICAgc19wbGF0Zm9ybSA9IDA7
Cit9CisKK1BsYXRmb3JtKiBQbGF0Zm9ybTo6Y3VycmVudCgpCit7CisgICAgcmV0dXJuIHNfcGxh
dGZvcm07Cit9CisKK1dlYlRoZW1lRW5naW5lKiBQbGF0Zm9ybTo6dGhlbWVFbmdpbmUoKQorewor
ICAgIHN0YXRpYyBEZWZhdWx0V2ViVGhlbWVFbmdpbmUgdGhlbWU7CisgICAgcmV0dXJuICZ0aGVt
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9GZWF0dXJlRGVmaW5lcy5oIGIvU291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAppbmRl
eCA3MzI5Yzk1Li4yYTAyMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVm
aW5lcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKQEAgLTIzNSw2ICsy
MzUsMTEgQEAKIAogI2VuZGlmIC8qIFBMQVRGT1JNKFdJTl9DQUlSTykgKi8KIAorLyogLS0tLS0t
LS0tIE5JWCBwb3J0IChVbml4KSAtLS0tLS0tLS0gKi8KKyNpZiBQTEFURk9STShOSVgpCisjaW5j
bHVkZSAibml4L0ZlYXR1cmVEZWZpbmVzTml4LmgiCisjZW5kaWYgLyogUExBVEZPUk0oTklYKSAq
LworCiAvKiAtLS0tLS0tLS0gRUZMIHBvcnQgKFVuaXgpIC0tLS0tLS0tLSAqLwogI2lmIFBMQVRG
T1JNKEVGTCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggNzZmYzE0NS4uYjhlMTRiYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CkBAIC00NDYsNiArNDQ2LDggQEAKICNkZWZpbmUgV1RGX1BMQVRGT1JNX0dUSyAxCiAjZWxpZiBk
ZWZpbmVkKEJVSUxESU5HX0JMQUNLQkVSUllfXykKICNkZWZpbmUgV1RGX1BMQVRGT1JNX0JMQUNL
QkVSUlkgMQorI2VsaWYgZGVmaW5lZChCVUlMRElOR19OSVhfXykKKyNpbmNsdWRlICJuaXgvUGxh
dGZvcm1OaXguaCIKICNlbGlmIE9TKERBUldJTikKICNkZWZpbmUgV1RGX1BMQVRGT1JNX01BQyAx
CiAjZWxpZiBPUyhXSU5ET1dTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1O
aXguY21ha2UgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybU5peC5jbWFrZQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzMyZTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi93dGYvUGxhdGZvcm1OaXguY21ha2UKQEAgLTAsMCArMSwxNiBAQAorbGlzdChBUFBFTkQg
V1RGX1NPVVJDRVMKKyAgICBndGsvTWFpblRocmVhZEd0ay5jcHAKKyAgICBnb2JqZWN0L0dPd25Q
dHIuY3BwCisgICAgZ29iamVjdC9HUmVmUHRyLmNwcAorICAgIGdvYmplY3QvR2xpYlV0aWxpdGll
cy5jcHAKKykKKworbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUworICAgIHB0aHJlYWQKKyAgICAk
e0dMSUJfTElCUkFSSUVTfQorICAgICR7R0xJQl9HSU9fTElCUkFSSUVTfQorKQorCitsaXN0KEFQ
UEVORCBXVEZfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICR7R0xJQl9JTkNMVURFX0RJUlN9Cisp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9uaXgvRmVhdHVyZURlZmluZXNOaXguaCBiL1Nv
dXJjZS9XVEYvd3RmL25peC9GZWF0dXJlRGVmaW5lc05peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM0MzJhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9uaXgvRmVhdHVyZURlZmluZXNOaXguaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyogIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaWZuZGVmIFdURl9GZWF0dXJlRGVmaW5lc05peF9oCisjZGVmaW5lIFdU
Rl9GZWF0dXJlRGVmaW5lc05peF9oCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfM0RfUkVOREVSSU5H
KQorI2RlZmluZSBFTkFCTEVfM0RfUkVOREVSSU5HIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
RU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNkZWZpbmUgRU5BQkxFX0FDQ0VMRVJBVEVE
XzJEX0NBTlZBUyAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9BQ0NFTEVSQVRFRF9P
VkVSRkxPV19TQ1JPTExJTkcpCisjZGVmaW5lIEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19T
Q1JPTExJTkcgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfQkxPQikKKyNkZWZpbmUg
RU5BQkxFX0JMT0IgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfQ0hBTk5FTF9NRVNT
QUdJTkcpCisjZGVmaW5lIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyAxCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkKEVOQUJMRV9DT05URVhUX01FTlVTKQorI2RlZmluZSBFTkFCTEVfQ09OVEVYVF9N
RU5VUyAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9DU1MzX1RFWFQpCisjZGVmaW5l
IEVOQUJMRV9DU1MzX1RFWFQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfQ1NTX0JP
WF9ERUNPUkFUSU9OX0JSRUFLKQorI2RlZmluZSBFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JS
RUFLIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX0NTU19FWENMVVNJT05TKQorI2Rl
ZmluZSBFTkFCTEVfQ1NTX0VYQ0xVU0lPTlMgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFC
TEVfQ1NTX0ZJTFRFUlMpCisjZGVmaW5lIEVOQUJMRV9DU1NfRklMVEVSUyAxCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pCisjZGVmaW5lIEVOQUJM
RV9DU1NfSU1BR0VfT1JJRU5UQVRJT04gMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVf
Q1NTX0lNQUdFX1JFU09MVVRJT04pCisjZGVmaW5lIEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElP
TiAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9DU1NfSU1BR0VfU0VUKQorI2RlZmlu
ZSBFTkFCTEVfQ1NTX0lNQUdFX1NFVCAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9D
U1NfUkVHSU9OUykKKyNkZWZpbmUgRU5BQkxFX0NTU19SRUdJT05TIDEKKyNlbmRpZgorCisjaWYg
IWRlZmluZWQoRU5BQkxFX0NTU19TSEFERVJTKQorI2RlZmluZSBFTkFCTEVfQ1NTX1NIQURFUlMg
MQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfQ1NTX1ZBUklBQkxFUykKKyNkZWZpbmUg
RU5BQkxFX0NTU19WQVJJQUJMRVMgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfREFU
QUxJU1RfRUxFTUVOVCkKKyNkZWZpbmUgRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQgMQorI2VuZGlm
CisKKyNpZiAhZGVmaW5lZChFTkFCTEVfREVUQUlMU19FTEVNRU5UKQorI2RlZmluZSBFTkFCTEVf
REVUQUlMU19FTEVNRU5UIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX0RSQUdfU1VQ
UE9SVCkKKyNkZWZpbmUgRU5BQkxFX0RSQUdfU1VQUE9SVCAwCisjZW5kaWYKKworI2lmICFkZWZp
bmVkKEVOQUJMRV9GQVNUX01PQklMRV9TQ1JPTExJTkcpCisjZGVmaW5lIEVOQUJMRV9GQVNUX01P
QklMRV9TQ1JPTExJTkcgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfRklMVEVSUykK
KyNkZWZpbmUgRU5BQkxFX0ZJTFRFUlMgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVf
RlRQRElSKQorI2RlZmluZSBFTkFCTEVfRlRQRElSIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
RU5BQkxFX0ZVTExTQ1JFRU5fQVBJKQorI2RlZmluZSBFTkFCTEVfRlVMTFNDUkVFTl9BUEkgMAor
I2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfR0FNRVBBRCkKKyNkZWZpbmUgRU5BQkxFX0dB
TUVQQUQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfR0VTVFVSRV9FVkVOVFMpCisj
ZGVmaW5lIEVOQUJMRV9HRVNUVVJFX0VWRU5UUyAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVO
QUJMRV9JQ09OREFUQUJBU0UpCisjZGVmaW5lIEVOQUJMRV9JQ09OREFUQUJBU0UgMQorI2VuZGlm
CisKKyNpZiAhZGVmaW5lZChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKQorI2RlZmluZSBFTkFCTEVf
SUZSQU1FX1NFQU1MRVNTIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX0lOREVYRURf
REFUQUJBU0UpCisjZGVmaW5lIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFIDEKKyNlbmRpZgorCisj
aWYgIWRlZmluZWQoRU5BQkxFX0lOU1BFQ1RPUikKKyNkZWZpbmUgRU5BQkxFX0lOU1BFQ1RPUiAx
CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9JTlNQRUNUT1JfU0VSVkVSKQorI2RlZmlu
ZSBFTkFCTEVfSU5TUEVDVE9SX1NFUlZFUiAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJM
RV9KQVZBU0NSSVBUX0RFQlVHR0VSKQorI2RlZmluZSBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dF
UiAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9KSVQpCisjZGVmaW5lIEVOQUJMRV9K
SVQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhF
UykKKyNkZWZpbmUgRU5BQkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMgMAorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChFTkFCTEVfTEVHQUNZX1ZJRVdQT1JUX0FEQVBUSU9OKQorI2RlZmluZSBFTkFC
TEVfTEVHQUNZX1ZJRVdQT1JUX0FEQVBUSU9OIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5B
QkxFX0xFR0FDWV9XRUJfQVVESU8pCisjZGVmaW5lIEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPIDEK
KyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX0xMSU5UKQorI2RlZmluZSBFTkFCTEVfTExJ
TlQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfTUFUSE1MKQorI2RlZmluZSBFTkFC
TEVfTUFUSE1MIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX01FVEVSX0VMRU1FTlQp
CisjZGVmaW5lIEVOQUJMRV9NRVRFUl9FTEVNRU5UIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
RU5BQkxFX01JQ1JPREFUQSkKKyNkZWZpbmUgRU5BQkxFX01JQ1JPREFUQSAxCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykKKyNkZWZpbmUgRU5B
QkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5B
QkxFX05FVFNDQVBFX1BMVUdJTl9BUEkpCisjZGVmaW5lIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5f
QVBJIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX05FVFdPUktfSU5GTykKKyNkZWZp
bmUgRU5BQkxFX05FVFdPUktfSU5GTyAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9Q
TFVHSU5fUEFDS0FHRV9TSU1QTEVfSEFTSCkKKyNkZWZpbmUgRU5BQkxFX1BMVUdJTl9QQUNLQUdF
X1NJTVBMRV9IQVNIIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX1BPUFVQX01FTlVT
KQorI2RlZmluZSBFTkFCTEVfUE9QVVBfTUVOVVMgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChF
TkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkKKyNkZWZpbmUgRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQg
MQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CisjZGVmaW5lIEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSAxCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkKEVOQUJMRV9DU1NfU0hBUEVTKQorI2RlZmluZSBFTkFCTEVfQ1NTX1NIQVBFUyAx
CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9TSEFSRURfV09SS0VSUykKKyNkZWZpbmUg
RU5BQkxFX1NIQVJFRF9XT1JLRVJTIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX1NR
TF9EQVRBQkFTRSkKKyNkZWZpbmUgRU5BQkxFX1NRTF9EQVRBQkFTRSAxCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkKEVOQUJMRV9TVkcpCisjZGVmaW5lIEVOQUJMRV9TVkcgMQorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChFTkFCTEVfU1ZHX0ZPTlRTKQorI2RlZmluZSBFTkFCTEVfU1ZHX0ZPTlRTIDEK
KyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQpCisjZGVmaW5l
IEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxF
X1RPVUNIX0VWRU5UUykKKyNkZWZpbmUgRU5BQkxFX1RPVUNIX0VWRU5UUyAxCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKEVOQUJMRV9VTkRPX01BTkFHRVIpCisjZGVmaW5lIEVOQUJMRV9VTkRPX01B
TkFHRVIgMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfVklERU8pCisjZGVmaW5lIEVO
QUJMRV9WSURFTyAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9WSUVXX01PREVfQ1NT
X01FRElBKQorI2RlZmluZSBFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSAxCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQVVESU8pCisjZGVmaW5lIEVOQUJMRV9XRUJfQVVESU8g
MQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfV0VCR0wpCisjZGVmaW5lIEVOQUJMRV9X
RUJHTCAxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfU09DS0VUUykKKyNkZWZp
bmUgRU5BQkxFX1dFQl9TT0NLRVRTIDEKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRU5BQkxFX1dF
Ql9USU1JTkcpCisjZGVmaW5lIEVOQUJMRV9XRUJfVElNSU5HIDEKKyNlbmRpZgorCisjaWYgIWRl
ZmluZWQoRU5BQkxFX1dPUktFUlMpCisjZGVmaW5lIEVOQUJMRV9XT1JLRVJTIDEKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoRU5BQkxFX1hIUl9SRVNQT05TRV9CTE9CKQorI2RlZmluZSBFTkFCTEVf
WEhSX1JFU1BPTlNFX0JMT0IgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChFTkFCTEVfWFNMVCkK
KyNkZWZpbmUgRU5BQkxFX1hTTFQgMQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvbml4L1BsYXRmb3JtTml4LmggYi9Tb3VyY2UvV1RGL3d0Zi9uaXgvUGxhdGZv
cm1OaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ1M2EzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbml4L1BsYXRmb3JtTml4LmgKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyog
YXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIFdURl9QbGF0Zm9ybU5p
eF9oCisjZGVmaW5lIFdURl9QbGF0Zm9ybU5peF9oCisKKyNkZWZpbmUgV1RGX1BMQVRGT1JNX05J
WCAxCisjZGVmaW5lIEVOQUJMRV9HTE9CQUxfRkFTVE1BTExPQ19ORVcgMAorCisvLyBTb21lIGJp
dHMgY2FuJ3QgYmUgY2hhbmdlZCBhdCBhbGwKKyNkZWZpbmUgV1RGX1VTRV8zRF9HUkFQSElDUyAx
CisjZGVmaW5lIFdURl9VU0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgMQorI2RlZmluZSBXVEZf
VVNFX0NBSVJPIDEKKyNkZWZpbmUgV1RGX1VTRV9DT09SRElOQVRFRF9HUkFQSElDUyAxCisjZGVm
aW5lIFdURl9VU0VfQ1JPU1NfUExBVEZPUk1fQ09OVEVYVF9NRU5VUyAxCisjZGVmaW5lIFdURl9V
U0VfRlJFRVRZUEUgMQorI2RlZmluZSBXVEZfVVNFX0dMSUIgMQorI2RlZmluZSBXVEZfVVNFX0hB
UkZCVVpaIDEKKyNkZWZpbmUgV1RGX1VTRV9IQVJGQlVaWl9ORyAxCisjZGVmaW5lIFdURl9VU0Vf
SUNVX1VOSUNPREUgMQorI2RlZmluZSBXVEZfVVNFX0lPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSAxCisjZGVmaW5lIFdURl9VU0VfTEVWRUxEQiAxCisjZGVmaW5lIFdURl9VU0VfUFRIUkVB
RFMgMQorI2RlZmluZSBXVEZfVVNFX1RFWFRVUkVfTUFQUEVSIDEKKyNkZWZpbmUgV1RGX1VTRV9U
RVhUVVJFX01BUFBFUl9HTCAxCisjZGVmaW5lIFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSAx
CisjZGVmaW5lIFdURl9VU0VfVU5JWF9ET01BSU5fU09DS0VUUyAxCisKKy8vIEVHTC9PcGVuR0xF
UzIgdnMgR0xYCisjaWYgIWRlZmluZWQoV1RGX1VTRV9PUEVOR0xfRVNfMikgfHwgIVdURl9VU0Vf
T1BFTkdMX0VTXzIKKyNkZWZpbmUgV1RGX1VTRV9PUEVOR0wgMQorI2RlZmluZSBXVEZfVVNFX0dM
WCAxCisjZGVmaW5lIFdURl9QTEFURk9STV9YMTEgMQorI2RlZmluZSBXVEZfVVNFX0dSQVBISUNT
X1NVUkZBQ0UgMQorI2Vsc2UKKyNkZWZpbmUgV1RGX1VTRV9FR0wgMQorI2VuZGlmCisKKy8vIFNv
dXAgdnMgbGliQ3VybAorI2lmICFkZWZpbmVkKFdURl9VU0VfQ1VSTCkgfHwgIVdURl9VU0VfQ1VS
TAorI2RlZmluZSBXVEZfVVNFX1NPVVAgMQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCBjMWFjZTVlLi4zMzQ2MDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjgz
MSwxNiArMjgzMSwxOCBAQCBlbmRpZiAoKQogCiBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAgJHtPUEVO
R0xfSU5DTFVERV9ESVJ9CiAgICAgICAgICIke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMiCiAg
ICAgICAgICIke1RISVJEUEFSVFlfRElSfS9BTkdMRS9pbmNsdWRlIgogICAgICAgICAiJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvaW5jbHVkZS9LSFIiCiAgICAgICAgICIke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9pbmNsdWRlL0dMU0xBTkciCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUiCiAgICAgKQotICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVT
Ci0gICAgICAgICR7T1BFTkdMX2dsX0xJQlJBUll9Ci0gICAgKQorCisgICAgIyBOaXggbWF5IHVz
ZSBlaXRoZXIgT3BlbkdMIG9yIE9wZW5HTEVTMiBoZWFkZXJzLCBzbyB3ZSBoYW5kbGUgdGhpcyBh
dCBQbGF0Zm9ybU5peC5jbWFrZS4KKyAgICBpZiAoTk9UIFBPUlQgU1RSRVFVQUwgIk5peCIpCisg
ICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUyAke09QRU5HTF9J
TkNMVURFX0RJUn0pCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTICR7T1BF
TkdMX2dsX0xJQlJBUll9KQorICAgIGVuZGlmICgpCiAKICAgICBpZiAoQklTT05fVkVSU0lPTiBF
UVVBTCAiMi41IikKICAgICAgICAgIyBCaXNvbiAyLjUgY2FuIG5vdCBjb21waWxlIGdlbmVyYXRl
ZCBnbHNsYW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1OaXguY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU5peC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42ZjMyZDYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1OaXguY21ha2UKQEAgLTAsMCArMSwyNjUgQEAKK2xpc3QoQVBQRU5EIFdlYkNvcmVf
SU5DTFVERV9ESVJFQ1RPUklFUworICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uaXgiCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2NhaXJvIgorICAgICIke1dFQkNPUkVfRElSfS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvZnJlZXR5cGUiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2ds
eCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovIgorICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZyIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgorICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9saW51eCIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIgorICAg
ICIke1BMQVRGT1JNX0RJUn0vbml4LyIKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CisgICAgcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCisKKyAgICBwYWdlL25peC9FdmVudEhhbmRs
ZXJOaXguY3BwCisgICAgcGxhdGZvcm0vQ3Vyc29yLmNwcAorICAgIHBsYXRmb3JtL0NvbnRleHRN
ZW51Tm9uZS5jcHAKKyAgICBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW1Ob25lLmNwcAorICAgIHBs
YXRmb3JtL25peC9DdXJzb3JOaXguY3BwCisgICAgcGxhdGZvcm0vbml4L0RyYWdEYXRhTml4LmNw
cAorICAgIHBsYXRmb3JtL25peC9EcmFnSW1hZ2VOaXguY3BwCisgICAgcGxhdGZvcm0vbml4L05p
eEtleWJvYXJkVXRpbGl0aWVzLmNwcAorICAgIHBsYXRmb3JtL25peC9FcnJvcnNOaXguY3BwCisg
ICAgcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAKKyAgICBwbGF0Zm9ybS9uaXgvRmlsZVN5
c3RlbU5peC5jcHAKKyAgICBwbGF0Zm9ybS9uaXgvTGFuZ3VhZ2VOaXguY3BwCisgICAgcGxhdGZv
cm0vbml4L0xvY2FsaXplZFN0cmluZ3NOaXguY3BwCisgICAgcGxhdGZvcm0vZ3RrL0xvZ2dpbmdH
dGsuY3BwCisgICAgcGxhdGZvcm0vbml4L01JTUVUeXBlUmVnaXN0cnlOaXguY3BwCisgICAgcGxh
dGZvcm0vbml4L1Bhc3RlYm9hcmROaXguY3BwCisgICAgcGxhdGZvcm0vbml4L1BsYXRmb3JtU2Ny
ZWVuTml4LmNwcAorICAgIHBsYXRmb3JtL25peC9QbGF0Zm9ybUtleWJvYXJkRXZlbnROaXguY3Bw
CisgICAgcGxhdGZvcm0vbml4L1JlbmRlclRoZW1lTml4LmNwcAorICAgIHBsYXRmb3JtL25peC9S
dW5Mb29wTml4LmNwcAorICAgIHBsYXRmb3JtL25peC9TY3JvbGxiYXJUaGVtZU5peC5jcHAKKyAg
ICBwbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcAorICAgIHBsYXRmb3JtL25peC9Tb3Vu
ZE5peC5jcHAKKyAgICBwbGF0Zm9ybS9uaXgvU2hhcmVkVGltZXJOaXguY3BwCisgICAgcGxhdGZv
cm0vbml4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKyAgICBwbGF0Zm9ybS9uaXgvV2lkZ2V0Tml4
LmNwcAorCisgICAgcGxhdGZvcm0vY2Fpcm8vV2lkZ2V0QmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL093blB0ckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bh
dGhDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vVGlsZUNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RpbGVk
QmFja2luZ1N0b3JlQmFja2VuZENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCisKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKworICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1dPRkZGaWxlRm9ybWF0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hl
RnJlZVR5cGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udEN1c3RvbVBs
YXRmb3JtRGF0YUZyZWVUeXBlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpGYWNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6RmFjZUNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmNwcAorCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNhaXJvLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25peC9JY29uTml4LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25peC9JbWFnZU5peC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCisKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck1l
c2hHZW5lcmF0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcAorCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAorICAg
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorICAgIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2xp
bnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKKyAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTWVkaWFTdHJlYW1DZW50ZXJHU3RyZWFtZXIuY3BwCisgICAgcGxhdGZvcm0vUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcAorICAgIHBsYXRmb3JtL3RleHQvbml4L1RleHRCcmVha0l0ZXJhdG9y
SW50ZXJuYWxJQ1VOaXguY3BwCisKKyAgICBwbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcAorICAg
IHBsdWdpbnMvUGx1Z2luRGVidWcuY3BwCisgICAgcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAor
ICAgIHBsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmlldy5jcHAK
KyAgICBwbHVnaW5zL1BsdWdpblBhY2thZ2VOb25lLmNwcAorICAgIHBsdWdpbnMvUGx1Z2luVmll
d05vbmUuY3BwCisKKyAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAKKyAgICBwbGF0Zm9y
bS90ZXh0L0xvY2FsZU5vbmUuY3BwCisKKyAgICBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9XZWJBdWRp
b0J1cy5jcHAKKyAgICBwbGF0Zm9ybS9uaXgvc3VwcG9ydC9XZWJEYXRhLmNwcAorCisgICAgY3Nz
L1dlYktpdENTU0FycmF5RnVuY3Rpb25WYWx1ZS5jcHAKKyAgICBjc3MvV2ViS2l0Q1NTTWl4RnVu
Y3Rpb25WYWx1ZS5jcHAKKyAgICBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAorICAgIGNzcy9XZWJL
aXRDU1NNYXRGdW5jdGlvblZhbHVlLmNwcAorICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZUNhY2hl
ZFNoYWRlci5jcHAKKyAgICByZW5kZXJpbmcvc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFt
LmNwcAorICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZUN1c3RvbUZpbHRlclByb2dyYW1DYWNoZS5j
cHAKKykKKworaWYgKFdURl9VU0VfT1BFTkdMX0VTXzIpCisgICAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xFUy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgKQorICAgIGxpc3QoSU5TRVJUIFdlYkNvcmVfSU5DTFVE
RV9ESVJFQ1RPUklFUyAwICR7T1BFTkdMRVMyX0lOQ0xVREVfRElSU30pCisgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9MSUJSQVJJRVMgJHtPUEVOR0xFUzJfTElCUkFSSUVTfSkKKyAgICBhZGRfZGVm
aW5pdGlvbnMoJHtPUEVOR0xFUzJfREVGSU5JVElPTlN9KQorZWxzZSAoKQorICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
TElCUkFSSUVTCisgICAgICAgICR7T1BFTkdMX2dsX0xJQlJBUll9CisgICAgKQorZW5kaWYgKCkK
KworaWYgKFdURl9VU0VfRUdMKQorICAgIGxpc3QoSU5TRVJUIFdlYkNvcmVfSU5DTFVERV9ESVJF
Q1RPUklFUyAwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbAorICAgICAgICAke0VHTF9J
TkNMVURFX0RJUn0KKyAgICApCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RnJvbUN1cnJlbnRFR0wuY3BwCisgICAg
KQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTICR7RUdMX0xJQlJBUll9KQorZWxz
ZSAoKQorICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWZsCisgICAgICAgICR7WDExX1gxMV9JTkNMVURFX1BBVEh9CisgICAgKQor
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZmwvR3JhcGhpY3NTdXJmYWNlQ29tbW9uLmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCisKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorICAgICkKKyAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyAke1gxMV9YMTFfTElCfSAke1gxMV9YY29tcG9zaXRl
X0xJQn0gJHtYMTFfWHJlbmRlcl9MSUJ9KQorZW5kaWYgKCkKKworbGlzdChBUFBFTkQgV2ViQ29y
ZV9VU0VSX0FHRU5UX1NUWUxFX1NIRUVUUworICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9tZWRpYUNv
bnRyb2xzTml4LmNzcworICAgICR7V0VCQ09SRV9ESVJ9L2Nzcy9tZWRpYUNvbnRyb2xzTml4RnVs
bHNjcmVlbi5jc3MKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAke0NB
SVJPX0xJQlJBUklFU30KKyAgICAke0ZPTlRDT05GSUdfTElCUkFSSUVTfQorICAgICR7RlJFRVRZ
UEVfTElCUkFSSUVTfQorICAgICR7SlBFR19MSUJSQVJZfQorICAgICR7TElCWE1MMl9MSUJSQVJJ
RVN9CisgICAgJHtMSUJYU0xUX0xJQlJBUklFU30KKyAgICAke1BOR19MSUJSQVJZfQorICAgICR7
U1FMSVRFX0xJQlJBUklFU30KKyAgICAke0dMSUJfTElCUkFSSUVTfQorICAgICR7R0xJQl9HSU9f
TElCUkFSSUVTfQorICAgICR7R0xJQl9HTU9EVUxFX0xJQlJBUklFU30KKyAgICAke0dMSUJfR09C
SkVDVF9MSUJSQVJJRVN9CisgICAgJHtaTElCX0xJQlJBUklFU30KKyAgICBQbGF0Zm9ybQorICAg
ICR7SEFSRkJVWlpfTElCUkFSSUVTfQorKQorCitsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVf
RElSRUNUT1JJRVMKKyAgICAke0ZPTlRDT05GSUdfSU5DTFVERV9ESVJ9CisgICAgJHtDQUlST19J
TkNMVURFX0RJUlN9CisgICAgJHtGUkVFVFlQRV9JTkNMVURFX0RJUlN9CisgICAgJHtMSUJYTUwy
X0lOQ0xVREVfRElSfQorICAgICR7TElCWFNMVF9JTkNMVURFX0RJUn0KKyAgICAke1NRTElURV9J
TkNMVURFX0RJUn0KKyAgICAke0dMSUJfSU5DTFVERV9ESVJTfQorICAgICR7WkxJQl9JTkNMVURF
X0RJUlN9CisgICAgJHtIQVJGQlVaWl9JTkNMVURFX0RJUlN9CispCisKK2FkZF9kZWZpbml0aW9u
cygtRERBVEFfRElSPSIke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0RBVEFfSU5TVEFMTF9ESVJ9
IikKKworaWYgKEVOQUJMRV9XRUJfQVVESU8pCisgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVE
RV9ESVJFQ1RPUklFUworICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9uaXgiCisg
ICkKKyAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgcGxhdGZvcm0vYXVkaW8vbml4
L0F1ZGlvQnVzTml4LmNwcAorICAgIHBsYXRmb3JtL2F1ZGlvL25peC9BdWRpb0Rlc3RpbmF0aW9u
Tml4LmNwcAorICAgIHBsYXRmb3JtL2F1ZGlvL25peC9GRlRGcmFtZU5peC5jcHAKKyAgKQorICBT
RVQoV0VCX0FVRElPX0RJUiAke0NNQUtFX0lOU1RBTExfUFJFRklYfS8ke0RBVEFfSU5TVEFMTF9E
SVJ9L3dlYmF1ZGlvL3Jlc291cmNlcykKKyAgRklMRShHTE9CIFdFQl9BVURJT19EQVRBICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9yZXNvdXJjZXMvKi53YXYiKQorICBJTlNUQUxMKEZJ
TEVTICR7V0VCX0FVRElPX0RBVEF9IERFU1RJTkFUSU9OICR7V0VCX0FVRElPX0RJUn0pCisgIEFE
RF9ERUZJTklUSU9OUygtRFVOSU5TVEFMTEVEX0FVRElPX1JFU09VUkNFU19ESVI9IiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2F1ZGlvL3Jlc291cmNlcyIpCitlbmRpZiAoKQorCitpZiAoRU5BQkxF
X0dBTUVQQUQpCisgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIHBsYXRm
b3JtL25peC9HYW1lcGFkc05peC5jcHAKKyAgICApCitlbmRpZiAoKQorCitsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVTdG9yYWdlU291cC5jcHAKKyAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ3JlZGVudGlhbFN0b3JhZ2VTb3VwLmNwcAorICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvc291
cC9HT3duUHRyU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUHJveHlSZXNvbHZl
clNvdXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Byb3h5U2VydmVyU291cC5jcHAK
KyAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwCisgICAgcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXNwb25zZVNvdXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwCisgICAgcGxhdGZvcm0vbmV0d29yay9zb3VwL1Nv
dXBVUklVdGlscy5jcHAKKykKKworbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9S
SUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKKyAgICAke0xJ
QlNPVVBfSU5DTFVERV9ESVJTfQorKQorCitsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwor
ICAgICR7TElCU09VUF9MSUJSQVJJRVN9CispCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvbnBydW50aW1lX2ludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBydW50
aW1lX2ludGVybmFsLmgKaW5kZXggM2EwNDUxMi4uZjJiMTg4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYnJpZGdlL25wcnVudGltZV9pbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ucHJ1bnRpbWVfaW50ZXJuYWwuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUg
Im5wZnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAibnBydW50aW1lLmgiCiAKLSNpZiBkZWZpbmVkKE1P
Wl9YMTEpCisjaWYgZGVmaW5lZChYUF9VTklYKSAmJiBkZWZpbmVkKE1PWl9YMTEpCiAgICAgI2lu
Y2x1ZGUgPFgxMS9YcmVzb3VyY2UuaD4KIAogICAgICN1bmRlZiBOb25lCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc05peC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc05peC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYjViMzY2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNv
bnRyb2xzTml4LmNzcwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogTml4V2ViS2l0
IG1lZGlhIGNvbnRyb2xzLiBFeHRlbmRzIG1lZGlhQ29udHJvbHMuY3NzICovCisKK2F1ZGlvIHsK
KyAgICB3aWR0aDogMzAwcHg7CisgICAgaGVpZ2h0OiAyMHB4OworfQorCithdWRpbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1wYW5lbCwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFu
ZWwgeworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgIC13ZWJraXQtYm94LW9yaWVudDog
aG9yaXpvbnRhbDsKKyAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQt
dXNlci1zZWxlY3Q6IG5vbmU7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGJvdHRvbTog
MDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICB6LWluZGV4OiAwOworICAgIG92ZXJmbG93OiBoaWRk
ZW47CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCit2aWRl
bzotd2Via2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7
CisgICAgYm90dG9tOiAwcHg7Cit9CisKK2F1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLW11
dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiB7Cisg
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1tdXRlLWJ1dHRvbjsKKyAgICBkaXNwbGF5OiAt
d2Via2l0LWJveDsKKyAgICB3aWR0aDogMjBweDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgcG9z
aXRpb246IHJlbGF0aXZlOworICAgIHotaW5kZXg6IDI7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
aW5pdGlhbDsKKyAgICBib3JkZXI6IGluaXRpYWw7CisgICAgY29sb3I6IGluaGVyaXQ7Cit9CisK
K2F1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uLCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBt
ZWRpYS1wbGF5LWJ1dHRvbjsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKKyAgICB3aWR0aDog
MjBweDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsK
KyAgICBib3JkZXI6IGluaXRpYWw7CisgICAgY29sb3I6IGluaGVyaXQ7Cit9CisKK2F1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtdGltZWxpbmUtY29udGFpbmVyIHsKKyAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG1lZGlhLWNvbnRyb2xzLWJhY2tncm91bmQ7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7
CisgICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOworICAgIC13ZWJraXQtYm94LWFs
aWduOiBjZW50ZXI7CisgICAgLXdlYmtpdC1ib3gtcGFjazogZW5kOworICAgIC13ZWJraXQtYm94
LWZsZXg6IDE7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBoZWlnaHQ6IDIw
cHg7Cit9CisKK2F1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNw
bGF5LCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1jdXJyZW50LXRpbWUtZGlzcGxheTsKKyAg
ICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94Owor
ICAgIGhlaWdodDogMjBweDsKKworICAgIHBhZGRpbmc6IDRweDsKKworICAgIHRleHQtYWxpZ246
IGNlbnRlcjsKKyAgICBmb250LXNpemU6IDEwcHg7CisKKyAgICBjb2xvcjogYmxhY2s7CisgICAg
bGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKKyAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsKKyAgICBs
aW5lLWhlaWdodDogbm9ybWFsOworICAgIHRleHQtdHJhbnNmb3JtOiBub25lOworICAgIHRleHQt
aW5kZW50OiAwOworICAgIHRleHQtc2hhZG93OiBub25lOworICAgIHRleHQtZGVjb3JhdGlvbjog
bm9uZTsKKyAgICBmb250LXN0eWxlOiBub3JtYWw7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsK
KyAgICBmb250LWZhbWlseTogc2VyaWY7Cit9CisKK2F1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXRpbWUtcmVtYWluaW5nLWRpc3BsYXkgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKK2F1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy10aW1lbGluZSB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1zbGlkZXI7
CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgLXdlYmtpdC1ib3gtZmxleDogMTsKKyAg
ICBoZWlnaHQ6IDIwcHg7CisgICAgcGFkZGluZzogMHB4IDJweDsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBpbml0aWFsOworICAgIGJvcmRlcjogaW5pdGlhbDsKKyAgICBjb2xvcjogaW5oZXJpdDsK
KyAgICBtYXJnaW46IGluaXRpYWw7Cit9CisKK2F1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xz
LXZvbHVtZS1zbGlkZXItY29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12
b2x1bWUtc2xpZGVyLWNvbnRhaW5lciB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12
b2x1bWUtc2xpZGVyLWNvbnRhaW5lcjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgaGVp
Z2h0OiAxMDBweDsKKyAgICB3aWR0aDogMjBweDsKKyAgICBib3R0b206IDIwcHg7CisgICAgei1p
bmRleDogMTsKK30KKworYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRl
ciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyOworICAgIGRpc3BsYXk6IG5vbmU7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKKyAgICBib3JkZXI6IGluaXRpYWw7Cisg
ICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiBpbml0aWFsOworfQorCithdWRpbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1l
ZGlhLXNlZWstYmFjay1idXR0b247CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CisgICAgd2lk
dGg6IDIwcHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRp
YWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAgIGNvbG9yOiBpbmhlcml0OworfQorCithdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uLCB2aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWZvcndhcmQtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IG1lZGlhLXNlZWstZm9yd2FyZC1idXR0b247CisgICAgZGlzcGxheTogLXdlYmtp
dC1ib3g7CisgICAgd2lkdGg6IDIwcHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIGJhY2tncm91
bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAgIGNvbG9yOiBpbmhl
cml0OworfQorCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2NyZWVuLWJ1dHRv
biwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24geworICAg
IC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtZnVsbHNjcmVlbi1idXR0b247CisgICAgZGlzcGxh
eTogLXdlYmtpdC1ib3g7CisgICAgd2lkdGg6IDIwcHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAg
IGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAgIGNv
bG9yOiBpbmhlcml0OworfQorCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQt
YnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdpbmQtYnV0dG9uIHsKKyAg
ICBkaXNwbGF5OiBub25lOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9y
ZGVyOiBpbml0aWFsOworICAgIGNvbG9yOiBpbmhlcml0OworfQorCithdWRpbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uIHsKKyAgICBkaXNwbGF5OiBu
b25lOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFs
OworICAgIGNvbG9yOiBpbmhlcml0OworfQorCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy10b2dnbGUtY2xvc2VkLWNhcHRpb25zLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFy
YW5jZTogbWVkaWEtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b247CisgICAgZGlzcGxheTog
LXdlYmtpdC1ib3g7CisgICAgd2lkdGg6IDIwcHg7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIGJh
Y2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAgIGNvbG9y
OiBpbmhlcml0OworfQorCithdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xp
ZGVyLW11dGUtYnV0dG9uLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xp
ZGVyLW11dGUtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1z
bGlkZXItbXV0ZS1idXR0b247CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBpbml0aWFsOworICAgIGJvcmRlcjogaW5pdGlhbDsKKyAgICBjb2xvcjogaW5oZXJpdDsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzTml4RnVsbHNj
cmVlbi5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc05peEZ1bGxzY3JlZW4u
Y3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzM2Q3MDdkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNOaXhGdWxsc2NyZWVu
LmNzcwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIE5peFdlYktpdCBtZWRpYSBjb250cm9scyBmb3Ig
ZnVsbHNjcmVlbi4gKi8KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgewor
ICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgIC13ZWJraXQtYm94LW9yaWVudDogaG9yaXpv
bnRhbDsKKyAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtdXNlci1z
ZWxlY3Q6IG5vbmU7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGJvdHRvbTogMDsKKyAg
ICB3aWR0aDogMTAwJTsKKyAgICB6LWluZGV4OiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47Cisg
ICAgaGVpZ2h0OiAyMHB4OworICAgIHRleHQtYWxpZ246IHJpZ2h0OworfQorCit2aWRlbzotd2Vi
a2l0LWZ1bGwtcGFnZS1tZWRpYTo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCB7CisgICAg
ZGlzcGxheTogbm9uZTsKK30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtbXV0ZS1i
dXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3ZpZGVvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXBsYXktYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXBsYXkt
YnV0dG9uOworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAgIHdpZHRoOiAyMHB4OworICAg
IGhlaWdodDogMjBweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbml0aWFsOworICAgIGJvcmRl
cjogaW5pdGlhbDsKKyAgICBjb2xvcjogaW5oZXJpdDsKK30KKwordmlkZW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtdGltZWxpbmUtY29udGFpbmVyIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IG1lZGlhLWNvbnRyb2xzLWJhY2tncm91bmQ7CisgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Cisg
ICAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsOworICAgIC13ZWJraXQtYm94LWFsaWdu
OiBjZW50ZXI7CisgICAgLXdlYmtpdC1ib3gtcGFjazogZW5kOworICAgIC13ZWJraXQtYm94LWZs
ZXg6IDE7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBoZWlnaHQ6IDIwcHg7
Cit9CisKK3ZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5
IHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLWN1cnJlbnQtdGltZS1kaXNwbGF5Owor
ICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworICAgIGhlaWdodDogMjBweDsKKyAgICBwYWRkaW5nOiA0cHg7CisgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworICAgIGZvbnQtc2l6ZTogMTBweDsKK30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KwordmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUgeworICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogbWVkaWEtc2xpZGVyOworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworICAg
IC13ZWJraXQtYm94LWZsZXg6IDE7CisgICAgaGVpZ2h0OiAyMHB4OworICAgIHBhZGRpbmc6IDBw
eCAycHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKKyAgICBib3JkZXI6IGluaXRp
YWw7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgbWFyZ2luOiBpbml0aWFsOworfQorCit2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lciB7CisgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUtc2xpZGVyLWNvbnRhaW5lcjsKKyAgICBk
aXNwbGF5OiBub25lOworfQorCit2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUt
c2xpZGVyIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVtZS1zbGlkZXI7Cisg
ICAgZGlzcGxheTogbm9uZTsKK30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vl
ay1iYWNrLWJ1dHRvbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKwordmlkZW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJkLWJ1dHRvbiB7CisgICAgZGlzcGxheTogbm9uZTsK
K30KKwordmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0b24gewor
ICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3ZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJl
d2luZC1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKK3ZpZGVvOjotd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXJldHVybi10by1yZWFsdGltZS1idXR0b24geworICAgIGRpc3BsYXk6IG5v
bmU7Cit9CisKK3ZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2Fw
dGlvbnMtYnV0dG9uIHsKKyAgICBkaXNwbGF5OiBub25lOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKaW5kZXggODNkNDJmMy4uNzhkMTVlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC04OTgsNyArODk4LDcgQEAgT2JqZWN0Q29udGVudFR5cGUg
RnJhbWVMb2FkZXI6OmRlZmF1bHRPYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFMKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICBtaW1lVHlwZSA9IG1p
bWVUeXBlRnJvbVVSTCh1cmwpOwogCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEVG
TCkgLy8gTWFjIGhhcyBubyBQbHVnaW5EYXRhYmFzZSwgbm9yIGRvZXMgQ2hyb21pdW0gb3IgRUZM
CisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEVGTCkgJiYgIVBMQVRGT1JNKE5JWCkg
Ly8gTWFjIGhhcyBubyBQbHVnaW5EYXRhYmFzZSwgbm9yIGRvZXMgQ2hyb21pdW0gb3IgRUZMCiAg
ICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICBTdHJpbmcgZGVjb2RlZFBhdGgg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSk7CiAgICAgICAgIG1pbWVUeXBl
ID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+TUlNRVR5cGVGb3JFeHRlbnNp
b24oZGVjb2RlZFBhdGguc3Vic3RyaW5nKGRlY29kZWRQYXRoLnJldmVyc2VGaW5kKCcuJykgKyAx
KSk7CkBAIC05MDgsNyArOTA4LDcgQEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXI6OmRl
ZmF1bHRPYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFMKICAgICBpZiAo
bWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOyAv
LyBHbyBhaGVhZCBhbmQgaG9wZSB0aGF0IHdlIGNhbiBkaXNwbGF5IHRoZSBjb250ZW50LgogCi0j
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEVGTCkgLy8gTWFjIGhhcyBubyBQbHVnaW5E
YXRhYmFzZSwgbm9yIGRvZXMgQ2hyb21pdW0gb3IgRUZMCisjaWYgIVBMQVRGT1JNKE1BQykgJiYg
IVBMQVRGT1JNKEVGTCkgJiYgIVBMQVRGT1JNKE5JWCkgLy8gTWFjIGhhcyBubyBQbHVnaW5EYXRh
YmFzZSwgbm9yIGRvZXMgQ2hyb21pdW0gb3IgRUZMCiAgICAgYm9vbCBwbHVnSW5TdXBwb3J0c01J
TUVUeXBlID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMoKS0+aXNNSU1FVHlwZVJl
Z2lzdGVyZWQobWltZVR5cGUpOwogI2Vsc2UKICAgICBib29sIHBsdWdJblN1cHBvcnRzTUlNRVR5
cGUgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvbml4L0V2ZW50SGFu
ZGxlck5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL25peC9FdmVudEhhbmRsZXJOaXguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTc0MTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL25peC9FdmVudEhhbmRsZXJOaXguY3BwCkBAIC0w
LDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRl
IFRlY25vbG9naWEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwyMDEwIFByb0ZVU0lPTiBlbWJlZGRl
ZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVu
dEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorY29u
c3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERyYWdEZWxheSA9IDAuMDsKKyNlbmRpZgorCiti
b29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsRm9ybUNvbnRyb2xzKEtleWJvYXJkRXZlbnQqKSBj
b25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNE
b2N1bWVudFZpZXcoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQor
ICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUp
OworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRn
ZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAgUmVu
ZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2Rl
KCktPnJlbmRlcmVyKCkgOiAwOworCisgICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC0+aXNXaWRn
ZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHRhcmdldCktPndpZGdldCgp
KTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lk
Z2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQoreworICAgIHJldHVybiBwYXNzTW91c2VE
b3duRXZlbnRUb1dpZGdldChyZW5kZXJXaWRnZXQtPndpZGdldCgpKTsKK30KKworYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVy
OjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBldmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgQVNTRVJUKHdpZGdldCk7CisgICAgaWYg
KCF3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7Cit9CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdD
bGlwYm9hcmQoKSBjb25zdAoreworICAgIHJldHVybiBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdB
bmREcm9wKCk7Cit9CisjZW5kaWYKKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNz
RXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUq
IHN1YmZyYW1lKQoreworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQ
cmVzc0V2ZW50KG1ldi5ldmVudCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRU
ZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWRO
b2RlKQoreworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VNb3ZlRXZl
bnQobWV2LmV2ZW50KCksIGhvdmVyZWROb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCit7CisgICAgc3ViZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChtZXYuZXZlbnQoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEV2ZW50SGFuZGxlcjo6YWNjZXNzS2V5
TW9kaWZpZXJzKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1FdmVudDo6QWx0S2V5OworfQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJzb3IuaAppbmRleCBjMjQwZTU3Li5kMzU0MjBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DdXJzb3IuaApAQCAtNTYsNyArNTYsNyBAQCB0eXBlZGVmIEhJQ09OIEhDVVJTT1I7
CiAjZW5kaWYKIAogLy8gTG9va3MgbGlrZSBpdCdzIGp1c3QgUExBVEZPUk0oQkxBQ0tCRVJSWSkg
c3RpbGwgbm90IHVzaW5nIHRoaXM/Ci0jaWYgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBQ
TEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShOSVgpCiAjZGVmaW5lIFdURl9VU0Vf
TEFaWV9OQVRJVkVfQ1VSU09SIDEKICNlbmRpZgogCkBAIC03OSw3ICs3OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIE5TQ3Vyc29yICpQbGF0Zm9ybUN1cnNvcjsKICNlbGlm
IFBMQVRGT1JNKEdUSykKICAgICB0eXBlZGVmIEdSZWZQdHI8R2RrQ3Vyc29yPiBQbGF0Zm9ybUN1
cnNvcjsKLSNlbGlmIFBMQVRGT1JNKEVGTCkKKyNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oTklYKQogICAgIHR5cGVkZWYgY29uc3QgY2hhciogUGxhdGZvcm1DdXJzb3I7CiAjZWxpZiBQ
TEFURk9STShRVCkgJiYgIWRlZmluZWQoUVRfTk9fQ1VSU09SKQogICAgIC8vIERvIG5vdCBuZWVk
IHRvIGJlIHNoYXJlZCBidXQgbmVlZCB0byBiZSBjcmVhdGVkIGR5bmFtaWNhbGx5IHZpYSBlbnN1
cmVQbGF0Zm9ybUN1cnNvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmluZGV4IDY0NDQ5
MjYuLjc0ZWZmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaApAQCAtNTksNyArNTks
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0R3RrOwogfQogdHlwZWRl
ZiBXZWJDb3JlOjpEYXRhT2JqZWN0R3RrKiBEcmFnRGF0YVJlZjsKLSNlbGlmIFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNlbGlmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oTklYKQogdHlwZWRlZiB2b2lkKiBEcmFnRGF0YVJl
ZjsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1h
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCmluZGV4IGVjMTBiMmMu
Ljk0MjMzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCkBAIC00MSw3ICs0MSw3
IEBAIGNsYXNzIFFQaXhtYXA7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBQTEFURk9STShXSU4p
CiB0eXBlZGVmIHN0cnVjdCBIQklUTUFQX18qIEhCSVRNQVA7Ci0jZWxpZiBQTEFURk9STShHVEsp
CisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKE5JWCkKIHR5cGVkZWYgc3RydWN0IF9j
YWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2VfdDsKICNlbmRpZgogCkBAIC02MCw3ICs2MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0eXBlZGVmIFFQaXhtYXAqIERyYWdJbWFnZVJlZjsK
ICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICB0eXBlZGVmIEhCSVRNQVAgRHJhZ0ltYWdlUmVmOwot
I2VsaWYgUExBVEZPUk0oR1RLKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShOSVgp
CiAgICAgdHlwZWRlZiBjYWlyb19zdXJmYWNlX3QqIERyYWdJbWFnZVJlZjsKICNlbGlmIFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICB0eXBlZGVmIHZvaWQqIERyYWdJ
bWFnZVJlZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAppbmRleCBlMWQ1YjdlLi5h
YTMwYzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCkBAIC02MSw3ICs2MSw3
IEBAIHR5cGVkZWYgc3RydWN0IEhJTlNUQU5DRV9fKiBISU5TVEFOQ0U7CiB0eXBlZGVmIEhJTlNU
QU5DRSBITU9EVUxFOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShOSVgpCiB0eXBlZGVmIHN0cnVjdCBfR0ZpbGVJT1N0cmVhbSBHRmls
ZUlPU3RyZWFtOwogdHlwZWRlZiBzdHJ1Y3QgX0dNb2R1bGUgR01vZHVsZTsKICNlbmRpZgpAQCAt
NzUsNyArNzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBQbGF0Zm9ybU1vZHVsZQogI2lm
IE9TKFdJTkRPV1MpCiB0eXBlZGVmIEhNT0RVTEUgUGxhdGZvcm1Nb2R1bGU7Ci0jZWxpZiBQTEFU
Rk9STShHVEspCisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKE5JWCkKIHR5cGVkZWYg
R01vZHVsZSogUGxhdGZvcm1Nb2R1bGU7CiAjZWxpZiBQTEFURk9STShFRkwpCiB0eXBlZGVmIEVp
bmFfTW9kdWxlKiBQbGF0Zm9ybU1vZHVsZTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB0eXBlZGVmIHVu
c2lnbmVkIFBsYXRmb3JtTW9kdWxlVmVyc2lvbjsKICNpZiBQTEFURk9STShRVCkKIHR5cGVkZWYg
UUZpbGUqIFBsYXRmb3JtRmlsZUhhbmRsZTsKIGNvbnN0IFBsYXRmb3JtRmlsZUhhbmRsZSBpbnZh
bGlkUGxhdGZvcm1GaWxlSGFuZGxlID0gMDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oTklYKQogdHlwZWRlZiBHRmlsZUlPU3RyZWFtKiBQbGF0
Zm9ybUZpbGVIYW5kbGU7CiBjb25zdCBQbGF0Zm9ybUZpbGVIYW5kbGUgaW52YWxpZFBsYXRmb3Jt
RmlsZUhhbmRsZSA9IDA7CiAjZWxpZiBPUyhXSU5ET1dTKQpAQCAtMjEyLDcgKzIxMiw3IEBAIFJl
dGFpblB0cjxDRlVSTFJlZj4gcGF0aEFzVVJMKGNvbnN0IFN0cmluZyYpOwogdm9pZCBzZXRNZXRh
ZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3Qg
U3RyaW5nJiBwYXRoKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oTklYKQogU3RyaW5nIGZpbGVuYW1lVG9TdHJpbmcoY29uc3QgY2hh
ciopOwogU3RyaW5nIGZpbGVuYW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmKTsKIENTdHJpbmcg
YXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaAppbmRleCA3YjE4NjM3Li5mNWZiZThjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgK
QEAgLTM0LDYgKzM0LDggQEAgT0JKQ19DTEFTUyBOU011dGFibGVBcnJheTsKICNpbmNsdWRlIDxx
bGlzdC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0d0a01lbnUgR3Rr
TWVudTsKKyNlbGlmIFBMQVRGT1JNKE5JWCkKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUnVuTG9vcC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVuTG9vcC5oCmluZGV4
IGI3ZjAxYmMuLjc2Zjc5MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1
bkxvb3AuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW5Mb29wLmgKQEAgLTM2LDcg
KzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogCi0jaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oTklYKQogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNlbmRpZgogCkBAIC05
OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RhdGljIHZvaWQgdGltZXJGaXJlZChSdW5M
b29wKiwgaW50IElEKTsKICAgICAgICAgaW50IG1fSUQ7CiAgICAgICAgIGJvb2wgbV9pc1JlcGVh
dGluZzsKLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oTklYKQogICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gdGltZXJGaXJlZENhbGxiYWNrKFJ1bkxv
b3A6OlRpbWVyQmFzZSopOwogICAgICAgICBnYm9vbGVhbiBpc1JlcGVhdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNSZXBlYXRpbmc7IH0KICAgICAgICAgdm9pZCBjbGVhclRpbWVyU291cmNlKCk7
CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKICAgICBUaW1lck1hcCBtX2FjdGl2ZVRpbWVy
czsKICAgICBjbGFzcyBUaW1lck9iamVjdDsKICAgICBUaW1lck9iamVjdCogbV90aW1lck9iamVj
dDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
TklYKQogcHVibGljOgogICAgIHN0YXRpYyBnYm9vbGVhbiBxdWV1ZVdvcmsoUnVuTG9vcCopOwog
ICAgIEdNYWluTG9vcCogaW5uZXJtb3N0TG9vcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApp
bmRleCBhNGExOGEwLi5lZjk4YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9XaWRnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAtNjUs
NyArNjUsNyBAQCBRVF9FTkRfTkFNRVNQQUNFCiB0eXBlZGVmIFFPYmplY3QqIFBsYXRmb3JtV2lk
Z2V0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2lmIFBMQVRGT1JNKEJM
QUNLQkVSUlkpIHx8IFBMQVRGT1JNKE5JWCkKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1XaWRnZXQ7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZU
RnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgKaW5kZXgg
MTE1YzhmOC4uNWZmYjdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vRkZURnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFt
ZS5oCkBAIC02Nyw2ICs2NywxMSBAQCBzdHJ1Y3QgUkRGVENvbnRleHQ7CiAjaW5jbHVkZSA8aXBw
cy5oPgogI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCiAKKyNpZiBQTEFURk9STShOSVgpCisj
aW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8cHVibGljL1dlYkZGVEZyYW1lLmg+CisjZW5kaWYK
KwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xNzgsNiArMTgzLDExIEBAIHByaXZhdGU6
CiAgICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7CiAjZW5kaWYgLy8gVVNFKFdFQkFVRElP
X0lQUCkKIAorI2lmIFBMQVRGT1JNKE5JWCkKKyAgICB2b2lkIHNjYWxlUGxhbmFyRGF0YShmbG9h
dCBzY2FsZSk7CisgICAgT3duUHRyPFdlYktpdDo6V2ViRkZURnJhbWU+IG1fZmZ0RnJhbWU7Cisj
ZW5kaWYgLy8gUExBVEZPUk0oTklYKQorCiAjaWYgVVNFKFdFQkFVRElPX09QRU5NQVhfRExfRkZU
KQogICAgIHN0YXRpYyBPTVhGRlRTcGVjX1JfRjMyKiBjb250ZXh0Rm9yU2l6ZSh1bnNpZ25lZCBs
b2cyRkZUU2l6ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0hSVEZFbGV2YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVs
ZXZhdGlvbi5jcHAKaW5kZXggNGFhYTFjMC4uNTU5NjYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkVsZXZhdGlvbi5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgY29u
c3Qgc2l6ZV90IFJlc3BvbnNlRnJhbWVTaXplID0gMjU2OwogLy8gVGhlIGltcHVsc2UgcmVzcG9u
c2VzIG1heSBiZSByZXNhbXBsZWQgdG8gYSBkaWZmZXJlbnQgc2FtcGxlLXJhdGUgKGRlcGVuZGlu
ZyBvbiB0aGUgYXVkaW8gaGFyZHdhcmUpIHdoZW4gdGhleSBhcmUgbG9hZGVkLgogY29uc3QgZmxv
YXQgUmVzcG9uc2VTYW1wbGVSYXRlID0gNDQxMDA7CiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFVT
RShXRUJBVURJT19HU1RSRUFNRVIpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBVU0UoV0VCQVVESU9f
R1NUUkVBTUVSKSB8fCBQTEFURk9STShOSVgpCiAjZGVmaW5lIFVTRV9DT05DQVRFTkFURURfSU1Q
VUxTRV9SRVNQT05TRVMKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9uaXgvQXVkaW9CdXNOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbml4L0F1ZGlvQnVzTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hYWY0NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbml4L0F1ZGlvQnVzTml4LmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCisKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlIDxw
dWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQXVkaW9CdXMuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IGRlY29kZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IHNpemUsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIFdlYktpdDo6
V2ViQXVkaW9CdXMgd2ViQXVkaW9CdXM7CisgICAgaWYgKFdlYktpdDo6UGxhdGZvcm06OmN1cnJl
bnQoKS0+bG9hZEF1ZGlvUmVzb3VyY2UoJndlYkF1ZGlvQnVzLCBkYXRhLCBzaXplLCBzYW1wbGVS
YXRlKSkKKyAgICAgICAgcmV0dXJuIHdlYkF1ZGlvQnVzLmF1ZGlvQnVzKCk7CisgICAgcmV0dXJu
IFBhc3NSZWZQdHI8QXVkaW9CdXM+KCk7Cit9CisKK1Bhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlv
QnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBmbG9hdCBzYW1wbGVS
YXRlKQoreworICAgIFN0cmluZyBhYnNvbHV0ZUZpbGVuYW1lKG1ha2VTdHJpbmcoREFUQV9ESVIs
ICIvd2ViYXVkaW8vcmVzb3VyY2VzLyIsIG5hbWUsICIud2F2IikpOworICAgIGNvbnN0IFdlYktp
dDo6V2ViRGF0YSYgcmVzb3VyY2UgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmxvYWRS
ZXNvdXJjZShhYnNvbHV0ZUZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKHJlc291
cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8QXVkaW9CdXM+KCk7CisK
KyAgICAvLyBGSVhNRTogdGhlIHNhbXBsZVJhdGUgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIEl0IHNo
b3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIEFQSS4KKyAgICBSZWZQdHI8QXVkaW9CdXM+IGF1ZGlv
QnVzID0gZGVjb2RlQXVkaW9GaWxlRGF0YShyZXNvdXJjZS5kYXRhKCksIHJlc291cmNlLnNpemUo
KSwgc2FtcGxlUmF0ZSk7CisKKyAgICBpZiAoIWF1ZGlvQnVzLmdldCgpKQorICAgICAgICByZXR1
cm4gUGFzc1JlZlB0cjxBdWRpb0J1cz4oKTsKKworICAgIC8vIElmIHRoZSBidXMgaXMgYWxyZWFk
eSBhdCB0aGUgcmVxdWVzdGVkIHNhbXBsZS1yYXRlIHRoZW4gcmV0dXJuIGFzIGlzLgorICAgIGlm
IChhdWRpb0J1cy0+c2FtcGxlUmF0ZSgpID09IHNhbXBsZVJhdGUpCisgICAgICAgIHJldHVybiBh
dWRpb0J1cy5yZWxlYXNlKCk7CisKKyAgICByZXR1cm4gQXVkaW9CdXM6OmNyZWF0ZUJ5U2FtcGxl
UmF0ZUNvbnZlcnRpbmcoYXVkaW9CdXMuZ2V0KCksIGZhbHNlLCBzYW1wbGVSYXRlKTsKK30KKwor
UGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBs
ZVJhdGUpCit7CisgICAgLy8gRklYTUU6IHRoZSBzYW1wbGVSYXRlIHBhcmFtZXRlciBpcyBpZ25v
cmVkLiBJdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBBUEkuCisgICAgUmVmUHRyPEF1ZGlv
QnVzPiBhdWRpb0J1cyA9IGRlY29kZUF1ZGlvRmlsZURhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGRhdGEpLCBkYXRhU2l6ZSwgc2FtcGxlUmF0ZSk7CisgICAgaWYgKCFhdWRpb0J1cy5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8QXVkaW9CdXM+KCk7CisKKyAgICAvLyBJZiB0
aGUgYnVzIG5lZWRzIG5vIGNvbnZlcnNpb24gdGhlbiByZXR1cm4gYXMgaXMuCisgICAgaWYgKCgh
bWl4VG9Nb25vIHx8IGF1ZGlvQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMSkgJiYgYXVkaW9C
dXMtPnNhbXBsZVJhdGUoKSA9PSBzYW1wbGVSYXRlKQorICAgICAgICByZXR1cm4gYXVkaW9CdXMu
cmVsZWFzZSgpOworCisgICAgcmV0dXJuIEF1ZGlvQnVzOjpjcmVhdGVCeVNhbXBsZVJhdGVDb252
ZXJ0aW5nKGF1ZGlvQnVzLmdldCgpLCBtaXhUb01vbm8sIHNhbXBsZVJhdGUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRpb25O
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbml4L0F1ZGlvRGVzdGluYXRp
b25OaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTIxN2UKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvQXVkaW9E
ZXN0aW5hdGlvbk5peC5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5p
eC5oIgorCisjaW5jbHVkZSAiQXVkaW9GSUZPLmgiCisjaW5jbHVkZSAiQXVkaW9QdWxsRklGTy5o
IgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIEJ1ZmZlciBzaXplIGF0IHdoaWNoIHRoZSB3ZWIgYXVkaW8gZW5naW5lIHdpbGwgcmVuZGVy
LgorY29uc3QgdW5zaWduZWQgcmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKKworLy8gU2l6ZSBvZiB0
aGUgRklGTworY29uc3Qgc2l6ZV90IGZpZm9TaXplID0gODE5MjsKKworLy8gRmFjdG9yeSBtZXRo
b2Q6IENocm9taXVtLWltcGxlbWVudGF0aW9uCitQYXNzT3duUHRyPEF1ZGlvRGVzdGluYXRpb24+
IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25z
dCBTdHJpbmcmIGlucHV0RGV2aWNlSWQsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywg
dW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEF1ZGlvRGVzdGluYXRpb25OaXgoY2FsbGJhY2ssIGlucHV0
RGV2aWNlSWQsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywg
c2FtcGxlUmF0ZSkpOworfQorCitBdWRpb0Rlc3RpbmF0aW9uTml4OjpBdWRpb0Rlc3RpbmF0aW9u
Tml4KEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG51
bWJlck9mSW5wdXRDaGFubmVscywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxv
YXQgc2FtcGxlUmF0ZSkKKyAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX251bWJl
ck9mT3V0cHV0Q2hhbm5lbHMobnVtYmVyT2ZPdXRwdXRDaGFubmVscykKKyAgICAsIG1faW5wdXRC
dXMoQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZklucHV0Q2hhbm5lbHMsIHJlbmRlckJ1ZmZlclNp
emUpKQorICAgICwgbV9yZW5kZXJCdXMoQXVkaW9CdXM6OmNyZWF0ZShudW1iZXJPZk91dHB1dENo
YW5uZWxzLCByZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkpCisgICAgLCBtX3NhbXBsZVJhdGUoc2Ft
cGxlUmF0ZSkKKyAgICAsIG1faXNQbGF5aW5nKGZhbHNlKQoreworICAgIC8vIFVzZSB0aGUgb3B0
aW1hbCBidWZmZXIgc2l6ZSByZWNvbW1lbmRlZCBieSB0aGUgYXVkaW8gYmFja2VuZC4KKyAgICBt
X2NhbGxiYWNrQnVmZmVyU2l6ZSA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+YXVkaW9I
YXJkd2FyZUJ1ZmZlclNpemUoKTsKKworICAgIC8vIFF1aWNrIGV4aXQgaWYgdGhlIHJlcXVlc3Rl
ZCBzaXplIGlzIHRvbyBsYXJnZS4KKyAgICBBU1NFUlQobV9jYWxsYmFja0J1ZmZlclNpemUgKyBy
ZW5kZXJCdWZmZXJTaXplIDw9IGZpZm9TaXplKTsKKyAgICBpZiAobV9jYWxsYmFja0J1ZmZlclNp
emUgKyByZW5kZXJCdWZmZXJTaXplID4gZmlmb1NpemUpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fYXVkaW9EZXZpY2UgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNy
ZWF0ZUF1ZGlvRGV2aWNlKG1fY2FsbGJhY2tCdWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5l
bHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUsIHRoaXMpKTsKKyAgICBBU1NF
UlQobV9hdWRpb0RldmljZSk7CisKKyAgICAvLyBDcmVhdGUgYSBGSUZPIHRvIGhhbmRsZSB0aGUg
cG9zc2liaWxpdHkgb2YgdGhlIGNhbGxiYWNrIHNpemUKKyAgICAvLyBub3QgYmVpbmcgYSBtdWx0
aXBsZSBvZiB0aGUgcmVuZGVyIHNpemUuIElmIHRoZSBGSUZPIGFscmVhZHkKKyAgICAvLyBjb250
YWlucyBlbm91Z2ggZGF0YSwgdGhlIGRhdGEgd2lsbCBiZSBwcm92aWRlZCBkaXJlY3RseS4KKyAg
ICAvLyBPdGhlcndpc2UsIHRoZSBGSUZPIHdpbGwgY2FsbCB0aGUgcHJvdmlkZXIgZW5vdWdoIHRp
bWVzIHRvCisgICAgLy8gc2F0aXNmeSB0aGUgcmVxdWVzdCBmb3IgZGF0YS4KKyAgICBtX2ZpZm8g
PSBhZG9wdFB0cihuZXcgQXVkaW9QdWxsRklGTygqdGhpcywgbnVtYmVyT2ZPdXRwdXRDaGFubmVs
cywgZmlmb1NpemUsIHJlbmRlckJ1ZmZlclNpemUpKTsKKworICAgIC8vIElucHV0IGJ1ZmZlcmlu
Zy4KKyAgICBtX2lucHV0RmlmbyA9IGFkb3B0UHRyKG5ldyBBdWRpb0ZJRk8obnVtYmVyT2ZJbnB1
dENoYW5uZWxzLCBmaWZvU2l6ZSkpOworCisgICAgLy8gSWYgdGhlIGNhbGxiYWNrIHNpemUgZG9l
cyBub3QgbWF0Y2ggdGhlIHJlbmRlciBzaXplLCB0aGVuIHdlIG5lZWQgdG8gYnVmZmVyIHNvbWUK
KyAgICAvLyBleHRyYSBzaWxlbmNlIGZvciB0aGUgaW5wdXQuIE90aGVyd2lzZSwgd2UgY2FuIG92
ZXItY29uc3VtZSB0aGUgaW5wdXQgRklGTy4KKyAgICBpZiAobV9jYWxsYmFja0J1ZmZlclNpemUg
IT0gcmVuZGVyQnVmZmVyU2l6ZSkgeworICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRpLWNo
YW5uZWwgaW5wdXQgYW5kIGRvbid0IGhhcmQtY29kZSB0byBzdGVyZW8uCisgICAgICAgIFJlZlB0
cjxBdWRpb0J1cz4gc2lsZW5jZSA9IEF1ZGlvQnVzOjpjcmVhdGUoMiwgcmVuZGVyQnVmZmVyU2l6
ZSk7CisgICAgICAgIG1faW5wdXRGaWZvLT5wdXNoKHNpbGVuY2UuZ2V0KCkpOworICAgIH0KK30K
KworQXVkaW9EZXN0aW5hdGlvbk5peDo6fkF1ZGlvRGVzdGluYXRpb25OaXgoKQoreworICAgIHN0
b3AoKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTml4OjpzdGFydCgpCit7CisgICAgaWYg
KCFtX2lzUGxheWluZyAmJiBtX2F1ZGlvRGV2aWNlKSB7CisgICAgICAgIG1fYXVkaW9EZXZpY2Ut
PnN0YXJ0KCk7CisgICAgICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQg
QXVkaW9EZXN0aW5hdGlvbk5peDo6c3RvcCgpCit7CisgICAgaWYgKG1faXNQbGF5aW5nICYmIG1f
YXVkaW9EZXZpY2UpIHsKKyAgICAgICAgbV9hdWRpb0RldmljZS0+c3RvcCgpOworICAgICAgICBt
X2lzUGxheWluZyA9IGZhbHNlOworICAgIH0KK30KKworZmxvYXQgQXVkaW9EZXN0aW5hdGlvbjo6
aGFyZHdhcmVTYW1wbGVSYXRlKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+YXVkaW9IYXJkd2FyZVNhbXBsZVJhdGUoKSk7Cit9
CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4Q2hhbm5lbENvdW50KCkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQo
KS0+YXVkaW9IYXJkd2FyZU91dHB1dENoYW5uZWxzKCkpOworfQorCit2b2lkIEF1ZGlvRGVzdGlu
YXRpb25OaXg6OnJlbmRlcihjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxmbG9hdCo+JiBzb3VyY2VE
YXRhLCBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxmbG9hdCo+JiBhdWRpb0RhdGEsIHNpemVfdCBu
dW1iZXJPZkZyYW1lcykKK3sKKyAgICBib29sIGlzTnVtYmVyT2ZDaGFubmVsc0dvb2QgPSBhdWRp
b0RhdGEuc2l6ZSgpID09IG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsKKyAgICBpZiAoIWlzTnVt
YmVyT2ZDaGFubmVsc0dvb2QpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGlzQnVmZmVyU2l6ZUdvb2QgPSBudW1iZXJP
ZkZyYW1lcyA9PSBtX2NhbGxiYWNrQnVmZmVyU2l6ZTsKKyAgICBpZiAoIWlzQnVmZmVyU2l6ZUdv
b2QpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBCdWZmZXIgb3B0aW9uYWwgbGl2ZSBpbnB1dC4KKyAgICBpZiAoc291cmNl
RGF0YS5zaXplKCkgPj0gMikgeworICAgICAgICAvLyBGSVhNRTogaGFuZGxlIG11bHRpLWNoYW5u
ZWwgaW5wdXQgYW5kIGRvbid0IGhhcmQtY29kZSB0byBzdGVyZW8uCisgICAgICAgIFJlZlB0cjxB
dWRpb0J1cz4gd3JhcHBlckJ1cyA9IEF1ZGlvQnVzOjpjcmVhdGUoMiwgbnVtYmVyT2ZGcmFtZXMs
IGZhbHNlKTsKKyAgICAgICAgd3JhcHBlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeSgwLCBzb3VyY2VE
YXRhWzBdLCBudW1iZXJPZkZyYW1lcyk7CisgICAgICAgIHdyYXBwZXJCdXMtPnNldENoYW5uZWxN
ZW1vcnkoMSwgc291cmNlRGF0YVsxXSwgbnVtYmVyT2ZGcmFtZXMpOworICAgICAgICBtX2lucHV0
Rmlmby0+cHVzaCh3cmFwcGVyQnVzLmdldCgpKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9udW1iZXJPZk91dHB1dENoYW5uZWxzOyArK2kpCisgICAgICAgIG1fcmVu
ZGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KGksIGF1ZGlvRGF0YVtpXSwgbnVtYmVyT2ZGcmFtZXMp
OworCisgICAgbV9maWZvLT5jb25zdW1lKG1fcmVuZGVyQnVzLmdldCgpLCBudW1iZXJPZkZyYW1l
cyk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk5peDo6cHJvdmlkZUlucHV0KEF1ZGlvQnVz
KiBidXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgUmVmUHRyPEF1ZGlvQnVzPiBz
b3VyY2VCdXM7CisgICAgaWYgKG1faW5wdXRGaWZvLT5mcmFtZXNJbkZpZm8oKSA+PSBmcmFtZXNU
b1Byb2Nlc3MpIHsKKyAgICAgICAgbV9pbnB1dEZpZm8tPmNvbnN1bWUobV9pbnB1dEJ1cy5nZXQo
KSwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICAgICAgc291cmNlQnVzID0gbV9pbnB1dEJ1czsKKyAg
ICB9CisKKyAgICBtX2NhbGxiYWNrLnJlbmRlcihzb3VyY2VCdXMuZ2V0KCksIGJ1cywgZnJhbWVz
VG9Qcm9jZXNzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L25peC9BdWRpb0Rlc3RpbmF0aW9uTml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjE2NTZmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9uaXgvQXVkaW9EZXN0aW5hdGlvbk5peC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEF1ZGlvRGVzdGluYXRpb25OaXhfaAorI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uTml4X2gK
KworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgor
I2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlk
ZXIuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQXVkaW9EZXZpY2UuaD4KKyNpbmNsdWRlIDxwdWJs
aWMvV2ViVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9GSUZP
OworY2xhc3MgQXVkaW9QdWxsRklGTzsKKworLy8gQW4gQXVkaW9EZXN0aW5hdGlvbiB1c2luZyBD
aHJvbWl1bSdzIGF1ZGlvIHN5c3RlbQorCitjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTml4IDogcHVi
bGljIEF1ZGlvRGVzdGluYXRpb24sIHB1YmxpYyBXZWJLaXQ6OldlYkF1ZGlvRGV2aWNlOjpSZW5k
ZXJDYWxsYmFjaywgcHVibGljIEF1ZGlvU291cmNlUHJvdmlkZXIgeworcHVibGljOgorICAgIEF1
ZGlvRGVzdGluYXRpb25OaXgoQXVkaW9JT0NhbGxiYWNrJiwgY29uc3QgU3RyaW5nJiBpbnB1dERl
dmljZUlkLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZpcnR1YWwgfkF1ZGlvRGVz
dGluYXRpb25OaXgoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwg
dm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1BsYXlpbmcoKSB7IHJldHVybiBtX2lzUGxheWluZzsg
fQorCisgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsg
fQorCisgICAgLy8gV2ViS2l0OjpXZWJBdWRpb0RldmljZTo6UmVuZGVyQ2FsbGJhY2sKKyAgICB2
aXJ0dWFsIHZvaWQgcmVuZGVyKGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPGZsb2F0Kj4mIHNvdXJj
ZURhdGEsIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPGZsb2F0Kj4mIGF1ZGlvRGF0YSwgc2l6ZV90
IG51bWJlck9mRnJhbWVzKTsKKworICAgIC8vIFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXIK
KyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlkZUlucHV0KEF1ZGlvQnVzKiwgc2l6ZV90IGZyYW1lc1Rv
UHJvY2Vzcyk7CisKK3ByaXZhdGU6CisgICAgQXVkaW9JT0NhbGxiYWNrJiBtX2NhbGxiYWNrOwor
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVsczsKKyAgICBSZWZQdHI8QXVkaW9C
dXM+IG1faW5wdXRCdXM7CisgICAgUmVmUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKKyAgICBm
bG9hdCBtX3NhbXBsZVJhdGU7CisgICAgYm9vbCBtX2lzUGxheWluZzsKKyAgICBPd25QdHI8V2Vi
S2l0OjpXZWJBdWRpb0RldmljZT4gbV9hdWRpb0RldmljZTsKKyAgICBzaXplX3QgbV9jYWxsYmFj
a0J1ZmZlclNpemU7CisKKyAgICBPd25QdHI8QXVkaW9GSUZPPiBtX2lucHV0RmlmbzsKKyAgICBP
d25QdHI8QXVkaW9QdWxsRklGTz4gbV9maWZvOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlvbk5peF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9uaXgvRkZURnJhbWVOaXguY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hMDVmZWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbml4L0ZGVEZyYW1lTml4LmNwcApAQCAtMCwwICsxLDEzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkZGVEZyYW1lLmgiCisjaW5jbHVkZSAiVmVjdG9y
TWF0aC5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJGRlRGcmFtZS5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRkZURnJhbWU6OkZGVEZy
YW1lKHVuc2lnbmVkIGZmdFNpemUpCisgICAgOiBtX0ZGVFNpemUoZmZ0U2l6ZSkKKyAgICAsIG1f
bG9nMkZGVFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZzIoZmZ0U2l6ZSkpKQoreworICAg
IG1fZmZ0RnJhbWUgPSBhZG9wdFB0cihXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNyZWF0
ZUZGVEZyYW1lKGZmdFNpemUpKTsKK30KKworRkZURnJhbWU6OkZGVEZyYW1lKGNvbnN0IEZGVEZy
YW1lJiBmcmFtZSkKKyAgICA6IG1fRkZUU2l6ZShmcmFtZS5tX0ZGVFNpemUpCisgICAgLCBtX2xv
ZzJGRlRTaXplKGZyYW1lLm1fbG9nMkZGVFNpemUpCit7CisgICAgbV9mZnRGcmFtZSA9IGFkb3B0
UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlRkZURnJhbWUoZnJhbWUubV9m
ZnRGcmFtZS5nZXQoKSkpOworfQorCitGRlRGcmFtZTo6fkZGVEZyYW1lKCkKK3sKKyAgICBtX2Zm
dEZyYW1lLnJlbGVhc2UoKTsKK30KKwordm9pZCBGRlRGcmFtZTo6bXVsdGlwbHkoY29uc3QgRkZU
RnJhbWUmIGZyYW1lKQoreworICAgIGlmICghbV9mZnRGcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9mZnRGcmFtZS0+bXVsdGlwbHkoKmZyYW1lLm1fZmZ0RnJhbWUpOworCisgICAgLy8g
U2NhbGUgYWNjb3VudHMgdGhlIHBlY3VsaWFyIHNjYWxpbmcgb2YgdmVjTGliIG9uIHRoZSBNYWMu
CisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSByaWdodCBzY2FsaW5nIGFsbCB0aGUgd2F5IGJhY2sg
dG8gaW52ZXJzZSBGRlQuCisgICAgLy8gRklYTUU6IGlmIHdlIGNoYW5nZSB0aGUgc2NhbGluZyBv
biB0aGUgTWFjIHRoZW4gdGhpcyBzY2FsZQorICAgIC8vIGZhY3RvciB3aWxsIG5lZWQgdG8gY2hh
bmdlIHRvby4KKyAgICBzY2FsZVBsYW5hckRhdGEoMC41Zik7Cit9CisKKy8vIFByb3ZpZGVzIHRp
bWUgZG9tYWluIHNhbXBsZXMgaW4gYXJndW1lbnQgImRhdGEiLiBGcmFtZSB3aWxsIHN0b3JlIHRo
ZSB0cmFuc2Zvcm1lZCBkYXRhLgordm9pZCBGRlRGcmFtZTo6ZG9GRlQoY29uc3QgZmxvYXQqIGRh
dGEpCit7CisgICAgaWYgKCFtX2ZmdEZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Zm
dEZyYW1lLT5kb0ZGVChkYXRhKTsKKworICAgIHNjYWxlUGxhbmFyRGF0YSgyLjBmKTsKK30KKwor
Ly8gQ2FsY3VsYXRlcyBpbnZlcnNlIHRyYW5zZm9ybSBmcm9tIHRoZSBzdG9yZWQgZGF0YSwgcHV0
dGluZyB0aGUgcmVzdWx0cyBpbiBhcmd1bWVudCAnZGF0YScuCit2b2lkIEZGVEZyYW1lOjpkb0lu
dmVyc2VGRlQoZmxvYXQqIGRhdGEpCit7CisgICAgaWYgKCFtX2ZmdEZyYW1lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2ZmdEZyYW1lLT5kb0ludmVyc2VGRlQoZGF0YSk7CisKKyAgICAvLyBT
Y2FsZSBzbyB0aGF0IGEgZm9yd2FyZCB0aGVuIGludmVyc2UgRkZUIHlpZWxkcyBleGFjdGx5IHRo
ZSBvcmlnaW5hbCBkYXRhLgorICAgIGNvbnN0IGZsb2F0IHNjYWxlID0gMS4wIC8gKDIgKiBtX0ZG
VFNpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX0ZGVFNpemU7ICsraSkKKyAg
ICAgICAgZGF0YVtpXSA9IHNjYWxlICogZGF0YVtpXTsKK30KKwordm9pZCBGRlRGcmFtZTo6aW5p
dGlhbGl6ZSgpCit7Cit9CisKK3ZvaWQgRkZURnJhbWU6OmNsZWFudXAoKQoreworfQorCit2b2lk
IEZGVEZyYW1lOjpzY2FsZVBsYW5hckRhdGEoZmxvYXQgc2NhbGUpCit7CisgICAgZmxvYXQqIHJl
YWxQID0gbV9mZnRGcmFtZS0+cmVhbERhdGEoKTsKKyAgICBmbG9hdCogaW1hZ1AgPSBtX2ZmdEZy
YW1lLT5pbWFnRGF0YSgpOworCisgICAgY29uc3QgdW5zaWduZWQgZnJhbWVzVG9Qcm9jZXNzID0g
bV9mZnRGcmFtZS0+ZnJlcXVlbmN5RG9tYWluU2FtcGxlQ291bnQoKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmcmFtZXNUb1Byb2Nlc3M7ICsraSkgeworICAgICAgICByZWFsUFtp
XSAqPSBzY2FsZTsKKyAgICAgICAgaW1hZ1BbaV0gKj0gc2NhbGU7CisgICAgfQorfQorCitmbG9h
dCogRkZURnJhbWU6OnJlYWxEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZmZ0RnJhbWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2ZmdEZy
YW1lLT5yZWFsRGF0YSgpKTsKK30KKworZmxvYXQqIEZGVEZyYW1lOjppbWFnRGF0YSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2ZmdEZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBjb25zdF9jYXN0PGZsb2F0Kj4obV9mZnRGcmFtZS0+aW1hZ0RhdGEoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWlyby9XaWRnZXRCYWNraW5nU3RvcmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhaXJvL1dpZGdldEJhY2tpbmdTdG9yZS5oCmluZGV4
IGE3MjIwYmUuLmQ0MGJmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
aXJvL1dpZGdldEJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
aXJvL1dpZGdldEJhY2tpbmdTdG9yZS5oCkBAIC0zOSw2ICszOSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHR5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdpZGdldDsKICNlbGlmIFBMQVRGT1JN
KEVGTCkKIHR5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV2lkZ2V0OworI2VsaWYgUExBVEZP
Uk0oTklYKQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybVdpZGdldDsKICNlbmRpZgogCiBjbGFzcyBX
aWRnZXRCYWNraW5nU3RvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKaW5kZXggODNjMmUwMDQuLjhjOGYzYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlk
Z2UuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShFRkwpICYmICFQTEFURk9STShCTEFDS0JFUlJZKSAmJiAhUExBVEZPUk0oUVQpICYm
ICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKEVGTCkgJiYg
IVBMQVRGT1JNKEJMQUNLQkVSUlkpICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKFdJTikg
JiYgIVBMQVRGT1JNKE5JWCkKICNpbmNsdWRlICJBTkdMRS9TaGFkZXJMYW5nLmgiCiAjZWxpZiBQ
TEFURk9STShXSU4pCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXgg
MzI5NjlmMC4uNGMwNWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgInF0
L0ZvbnRQbGF0Zm9ybURhdGEuaCIKICNlbGlmIFVTRShXSU5HREkpCiAjaW5jbHVkZSAid2luY2Uv
Rm9udFBsYXRmb3JtRGF0YS5oIgotI2VsaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEsp
CisjZWxpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oTklYKQog
I2luY2x1ZGUgImZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGEuaCIKICNlbHNlCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNw
cAppbmRleCBjZTA3NzZmLi5mYTk2OTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCkBAIC0xNDc0LDcgKzE0NzQs
NyBAQCB1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChH
QzNEZW51bSBmb3JtYXQpCiAgICAgfQogfQogCi0jaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpICYm
ICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKEVGTCkgJiYgIVBM
QVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkg
JiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oRUZMKSAmJiAh
UExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oTklYKQogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKaW5kZXggMmM4ZjA2ZC4uZWEyMjQ1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC00Nyw3ICs0
Nyw3IEBACiAjdW5kZWYgVkVSU0lPTgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0o
QkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFD
S0JFUlJZKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNpbmNsdWRlICJBTkdM
RVdlYktpdEJyaWRnZS5oIgogI2VuZGlmCiAKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgUUdMQ29u
dGV4dDsKIGNsYXNzIFFPcGVuR0xDb250ZXh0OwogY2xhc3MgUVN1cmZhY2U7CiBRVF9FTkRfTkFN
RVNQQUNFCi0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNlbGlmIFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShOSVgpCiB0eXBlZGVmIHVuc2ln
bmVkIGludCBHTHVpbnQ7CiAjZW5kaWYKIApAQCAtNDkxLDE0ICs0OTEsMTQgQEAgcHVibGljOgog
I2Vsc2UKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKTsKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0Owot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNl
bmRpZgogI2VuZGlmCiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0jaWYgUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkg
fHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShOSVgp
CiAgICAgLy8gV2l0aCBtdWx0aXNhbXBsaW5nIG9uLCBibGl0IGZyb20gbXVsdGlzYW1wbGVGQk8g
dG8gcmVndWxhciBGQk8uCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwogI2VuZGlmCkBAIC05
MjMsNyArOTIzLDcgQEAgcHJpdmF0ZToKICAgICAvLyBEZXN0aW5hdGlvbiBkYXRhIHdpbGwgaGF2
ZSBubyBnYXBzIGJldHdlZW4gcm93cy4KICAgICBzdGF0aWMgYm9vbCBwYWNrUGl4ZWxzKGNvbnN0
IHVpbnQ4X3QqIHNvdXJjZURhdGEsIERhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCwgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgc291cmNlVW5wYWNrQWxpZ25tZW50
LCB1bnNpZ25lZCBkZXN0aW5hdGlvbkZvcm1hdCwgdW5zaWduZWQgZGVzdGluYXRpb25UeXBlLCBB
bHBoYU9wLCB2b2lkKiBkZXN0aW5hdGlvbkRhdGEsIGJvb2wgZmxpcFkpOwogCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwp
IHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShN
QUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwg
UExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFURk9STShOSVgpCiAg
ICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVh
dGlvbiBhdHRyaWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFs
aWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCiAgICAgLy8gY291bGQgbm90IGJlIGhv
bm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgT3BlbkdMCkBAIC05NDQsNyAr
OTQ0LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgcmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYp
OwogICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0
JiA9IEludFJlY3QoKSk7Ci0jaWYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpKSAmJiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkg
fHwgUExBVEZPUk0oTklYKSkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgdm9pZCBjcmVh
dGVHcmFwaGljc1N1cmZhY2VzKGNvbnN0IEludFNpemUmKTsKICNlbmRpZgogCkBAIC05NjEsNyAr
OTYxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkKiBtX2NvbnRleHQ7CiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
RUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKSB8fCBQTEFURk9STShXSU4pCisjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwp
IHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklY
KQogICAgIHN0cnVjdCBTeW1ib2xJbmZvIHsKICAgICAgICAgU3ltYm9sSW5mbygpCiAgICAgICAg
ICAgICA6IHR5cGUoMCkKQEAgLTEwMjAsNyArMTAyMCw3IEBAIHByaXZhdGU6CiAgICAgQU5HTEVX
ZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKSkgfHwgKChQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkpICYmIFVTRShPUEVOR0xfRVNfMikpCisjaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFUX09QRU5HTF9F
U18yKSkgfHwgKChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oTklY
KSkgJiYgVVNFKE9QRU5HTF9FU18yKSkKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3Bl
bkdMRVM7CiAgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CiAj
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdM
RVNTaGltcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGlt
cy5oCmluZGV4IGMwNmI2N2MuLjcyNTZmNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYg
T3BlbkdMRVNTaGltc19oCiAjZGVmaW5lIE9wZW5HTEVTU2hpbXNfaAogCi0jaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKSB8fCBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShXSU4p
IHx8IFBMQVRGT1JNKE5JWCkKICNkZWZpbmUgZ2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJh
bWVidWZmZXIKICNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVy
VGV4dHVyZTJECiAjZGVmaW5lIGdsQmluZFJlbmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZm
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNo
aW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNw
cAppbmRleCBkZTdiZWJkLi44MTk0MGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCkBAIC0yNiw2ICsyNiwxMCBAQAogI2luY2x1ZGUg
PGRsZmNuLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE5JWCkgJiYgVVNFKEVHTCkKKyNpbmNs
dWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDIsNiArNDYsMTEgQEAgc3Rh
dGljIHZvaWQqIGdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIqIHByb2NOYW1lKQogewogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihRT3BlbkdMQ29udGV4dDo6Y3VycmVudENvbnRl
eHQoKS0+Z2V0UHJvY0FkZHJlc3MocHJvY05hbWUpKTsKIH0KKyNlbGlmIFBMQVRGT1JNKE5JWCkg
JiYgVVNFKEVHTCkKK3N0YXRpYyB2b2lkKiBnZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyKiBwcm9j
TmFtZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZWdsR2V0UHJvY0Fk
ZHJlc3MocHJvY05hbWUpKTsKK30KICNlbHNlCiB0eXBlZGVmIHZvaWQqICgqZ2xHZXRQcm9jQWRk
cmVzc1R5cGUpIChjb25zdCBjaGFyKiBwcm9jTmFtZSk7CiBzdGF0aWMgdm9pZCogZ2V0UHJvY0Fk
ZHJlc3MoY29uc3QgY2hhciogcHJvY05hbWUpCkBAIC05OSw3ICsxMDgsNyBAQCBzdGF0aWMgdm9p
ZCogbG9va3VwT3BlbkdMRnVuY3Rpb25BZGRyZXNzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Ym9vbCogc3VjY2VzcwogICAgIHJldHVybiB0YXJnZXQ7CiB9CiAKLSNpZiBQTEFURk9STShRVCkg
JiYgZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyNpZiAoUExBVEZPUk0oUVQpICYmIGRlZmluZWQo
UVRfT1BFTkdMX0VTXzIpKSB8fCAoUExBVEZPUk0oTklYKSAmJiBVU0UoT1BFTkdMX0VTXzIpKQog
CiAvLyBXaXRoIEFuZ2xlIG9ubHkgRUdML0dMRVMyIGV4dGVuc2lvbnMgYXJlIGF2YWlsYWJsZSB0
aHJvdWdoIGVnbEdldFByb2NBZGRyZXNzLCBub3QgdGhlIHJlZ3VsYXIgc3RhbmRhcmRpemVkIGZ1
bmN0aW9ucy4KICNkZWZpbmUgQVNTSUdOX0ZVTkNUSU9OX1RBQkxFX0VOVFJZKEZ1bmN0aW9uTmFt
ZSwgc3VjY2VzcykgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvT3BlbkdMU2hpbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5H
TFNoaW1zLmgKaW5kZXggOGY3OTQyMS4uYTczMDk5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVk
ZSA8cW9wZW5nbGZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgogI2luY2x1
ZGUgPFFTdXJmYWNlPgorI2VsaWYgUExBVEZPUk0oTklYKSAmJiBVU0UoT1BFTkdMX0VTXzIpCisj
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjZWxzZQogI2luY2x1ZGUgPEdML2dsLmg+CiAjaW5jbHVk
ZSA8R0wvZ2xleHQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtTGF5ZXIuaAppbmRleCAxODM2NzNiLi5jNWE2OTRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCkBAIC01MCw3ICs1MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHR5cGVkZWYgQ2x1dHRlckFjdG9yIFBsYXRmb3JtTGF5ZXI7
CiB9OwogI2VuZGlmCi0jZWxpZiBQTEFURk9STShFRkwpCisjZWxpZiBQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKE5JWCkKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQuY3BwCmluZGV4IDgxYzIx
YzcuLjhlYTEwNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dMQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR0xDb250ZXh0LmNwcApAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkdMQ29udGV4dC5oIgogCi0jaWYgVVNFKE9QRU5HTCkKKyNpZiBVU0Uo
T1BFTkdMKSB8fCBVU0UoT1BFTkdMX0VTXzIpCiAKICNpbmNsdWRlICJHTENvbnRleHRFR0wuaCIK
ICNpbmNsdWRlICJHTENvbnRleHRHTFguaCIKQEAgLTE1Myw2ICsxNTMsNyBAQCBQYXNzT3duUHRy
PEdMQ29udGV4dD4gR0xDb250ZXh0OjpjcmVhdGVDb250ZXh0Rm9yV2luZG93KHVpbnQ2NF90IHdp
bmRvd0hhbmRsZSwgRwogICAgIH0KICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKE5JWCkKICNpZiBV
U0UoR0xYKQogICAgIGlmIChPd25QdHI8R0xDb250ZXh0PiBnbHhDb250ZXh0ID0gR0xDb250ZXh0
R0xYOjpjcmVhdGVDb250ZXh0KHdpbmRvd0hhbmRsZSwgc2hhcmluZ0NvbnRleHQpKQogICAgICAg
ICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CkBAIC0xNjEsNiArMTYyLDcgQEAgUGFzc093
blB0cjxHTENvbnRleHQ+IEdMQ29udGV4dDo6Y3JlYXRlQ29udGV4dEZvcldpbmRvdyh1aW50NjRf
dCB3aW5kb3dIYW5kbGUsIEcKICAgICBpZiAoT3duUHRyPEdMQ29udGV4dD4gZWdsQ29udGV4dCA9
IEdMQ29udGV4dEVHTDo6Y3JlYXRlQ29udGV4dCh3aW5kb3dIYW5kbGUsIHNoYXJpbmdDb250ZXh0
KSkKICAgICAgICAgcmV0dXJuIGVnbENvbnRleHQucmVsZWFzZSgpOwogI2VuZGlmCisjZW5kaWYK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAKaW5kZXggYWE3ZmVjMS4uZDY3MWU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAKKyNpZiBQTEFURk9STShO
SVgpICYmIFVTRShFR0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RnJvbUN1cnJlbnRFR0wuaCIKKyNl
bmRpZgorCiAjaWYgVVNFKE9QRU5HTF9FU18yKQogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2lu
Y2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgpAQCAtNTYsNiArNjAsOSBAQCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgRwogICAgICAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVu
Q29udGV4dChHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJUb0N1cnJlbnRHTENvbnRleHQ6CisjaWYg
UExBVEZPUk0oTklYKSAmJiBVU0UoRUdMKQorICAgICAgICBtX2dsQ29udGV4dCA9IEdMQ29udGV4
dEZyb21DdXJyZW50RUdMOjpjcmVhdGVGcm9tQ3VycmVudEdMQ29udGV4dCgpOworI2VuZGlmCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5
VG9Ib3N0V2luZG93OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRGcm9tQ3VycmVu
dEVHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0
RnJvbUN1cnJlbnRFR0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJm
YjZlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZ2wvR0xDb250ZXh0RnJvbUN1cnJlbnRFR0wuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R0xDb250ZXh0RnJvbUN1cnJlbnRFR0wuaCIKKworI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxHTENvbnRleHRGcm9tQ3VycmVudEVH
TD4gR0xDb250ZXh0RnJvbUN1cnJlbnRFR0w6OmNyZWF0ZUZyb21DdXJyZW50R0xDb250ZXh0KCkK
K3sKKyAgICBpZiAoIWluaXRpYWxpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBHTENvbnRleHRGcm9tQ3VycmVudEVHTCgpKTsKK30KKworR0xD
b250ZXh0RnJvbUN1cnJlbnRFR0w6OkdMQ29udGV4dEZyb21DdXJyZW50RUdMKCkKKyAgICA6IG1f
ZGlzcGxheShlZ2xHZXRDdXJyZW50RGlzcGxheSgpKQorICAgICwgbV9zdXJmYWNlKGVnbEdldEN1
cnJlbnRTdXJmYWNlKEVHTF9EUkFXKSkKKyAgICAsIG1fY29udGV4dChlZ2xHZXRDdXJyZW50Q29u
dGV4dCgpKQoreworfQorCitib29sIEdMQ29udGV4dEZyb21DdXJyZW50RUdMOjptYWtlQ29udGV4
dEN1cnJlbnQoKQoreworICAgIEdMQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
cmV0dXJuIGVnbE1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9zdXJmYWNlLCBtX3N1cmZhY2UsIG1f
Y29udGV4dCk7Cit9CisKK2Jvb2wgR0xDb250ZXh0RnJvbUN1cnJlbnRFR0w6OmluaXRpYWxpemUo
KQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJv
b2wgc3VjY2VzcyA9IHRydWU7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBzdWNj
ZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7CisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENv
bnRleHRGcm9tQ3VycmVudEVHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWdsL0dMQ29udGV4dEZyb21DdXJyZW50RUdMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTVlZmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRGcm9tQ3VycmVudEVHTC5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdMQ29udGV4dEZyb21D
dXJyZW50RUdMX2gKKyNkZWZpbmUgR0xDb250ZXh0RnJvbUN1cnJlbnRFR0xfaAorCisjaW5jbHVk
ZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSA8RUdML2VnbC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdMQ29udGV4dEZyb21DdXJyZW50RUdMIDogcHVibGljIEdMQ29udGV4dCB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR0xDb250ZXh0RnJvbUN1cnJlbnRFR0wpOworcHVi
bGljOgorICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBPZmZzY3JlZW4gYnVmZmVycy4KKyAg
ICBzdGF0aWMgUGFzc093blB0cjxHTENvbnRleHRGcm9tQ3VycmVudEVHTD4gY3JlYXRlRnJvbUN1
cnJlbnRHTENvbnRleHQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKworICAgIC8vIFRoZXNlIGFyZSBub3QgdXNlZCBieSBOaXguCisgICAgdmlydHVhbCB2b2lk
IHN3YXBCdWZmZXJzKCkgeyB9CisgICAgdmlydHVhbCBJbnRTaXplIGRlZmF1bHRGcmFtZUJ1ZmZl
clNpemUoKSB7IHJldHVybiBJbnRTaXplKCk7IH0KKyAgICB2aXJ0dWFsIGNhaXJvX2RldmljZV90
KiBjYWlyb0RldmljZSgpIHsgcmV0dXJuIDA7IH0KKworICAgIC8vIFRPRE86IFRoaXMgaXMgbm90
IHVzZWQgaW4gR0xDb250ZXh0IGludGVyZmFjZSwgaXQncyB1c2VkIGJ5CisgICAgLy8gR0xDb250
ZXh0R0xYIG9ubHkgYXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgIHZpcnR1YWwgYm9v
bCBjYW5SZW5kZXJUb0RlZmF1bHRGcmFtZWJ1ZmZlcigpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICAvLyBUT0RPOiBVc2VkIG9ubHkgYXMgYSBrZXkgaW4gSGFzaE1hcHMsIHNlZSBpZiB3ZSBjYW4g
Y2hhbmdlIFdlYktpdCBjb2RlIHRvIG5vdAorICAgIC8vIHJlbHkgb24gdGhpcyBhbnltb3JlIChh
dCBsZWFzdCBpbiBvdXIgcGxhdGZvcm0pLgorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCB2
b2lkIHdhaXROYXRpdmUoKSB7IHJldHVybjsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemUoKTsKKworICAgIEdMQ29udGV4dEZyb21DdXJyZW50RUdMKCk7CisKKyAgICBF
R0xEaXNwbGF5IG1fZGlzcGxheTsKKyAgICBFR0xTdXJmYWNlIG1fc3VyZmFjZTsKKyAgICBFR0xD
b250ZXh0IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEdMQ29udGV4dEZyb21DdXJyZW50RUdMX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1E
YXRhRnJlZVR5cGUuY3BwCmluZGV4IGEyZDU5MWIuLjRhNzlhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVl
VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUg
PGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCi0jaWYgIVBMQVRGT1JNKEVGTCkKKyNpZiAhUExBVEZPUk0oRUZMKSAmJiAhUExBVEZPUk0o
TklYKQogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvd05p
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZv
cm1WaWRlb1dpbmRvd05peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTY2NzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93Tml4LmNwcApAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVZpZGVvV2luZG93Lmgi
CisjaWYgVVNFKEdTVFJFQU1FUikgJiYgIWRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
UGxhdGZvcm1WaWRlb1dpbmRvdzo6UGxhdGZvcm1WaWRlb1dpbmRvdygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworUGxhdGZvcm1WaWRlb1dpbmRvdzo6flBsYXRmb3JtVmlkZW9XaW5k
b3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1WaWRlb1dp
bmRvdzo6cHJlcGFyZUZvck92ZXJsYXkoR3N0TWVzc2FnZSopCit7Cit9CisKKyNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSKSAmJiAhZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25peC9JY29uTml4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25peC9JY29uTml4LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDNmOGQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbml4L0ljb25OaXguY3BwCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJJY29uLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSWNv
bjo6fkljb24oKQoreworfQorCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaXgvSW1hZ2VOaXguY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbml4L0ltYWdlTml4LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTBiMjRiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbml4L0ltYWdlTml4LmNwcApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IEJpdG1hcEltYWdlOjppbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKK3sKK30KKworc3RhdGljIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb2FkUmVzb3VyY2VTaGFyZWRCdWZmZXJGYWxsYmFjaygp
Cit7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7IC8vIFRPRE86IGZhbGxiYWNr
IGltYWdlPworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGxvYWRSZXNvdXJj
ZVNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENvbnRlbnRzT2ZGaWxlKG1ha2VT
dHJpbmcoREFUQV9ESVIgIi93ZWJraXQtMS4wL2ltYWdlcy8iLCBuYW1lLCAiLnBuZyIpKTsKKyAg
ICBpZiAoYnVmZmVyKQorICAgICAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVyRmFsbGJhY2soKTsKK30KKworUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCit7Cisg
ICAgUmVmUHRyPEJpdG1hcEltYWdlPiBpbWcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gbG9hZFJlc291cmNlU2hhcmVkQnVmZmVyKG5h
bWUpOworICAgIGltZy0+c2V0RGF0YShidWZmZXIucmVsZWFzZSgpLCB0cnVlKTsKKyAgICByZXR1
cm4gaW1nLnJlbGVhc2UoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAppbmRl
eCAwOTA1YzkyLi4wNzBjM2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcApAQCAtMzUs
NyArMzUsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlICJBTkdMRS9TaGFkZXJMYW5n
LmgiCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+Ci0jZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKFdJTikKKyNlbGlmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKSB8
fCBQTEFURk9STShOSVgpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgogCkBAIC02
NSw3ICs2NSw3IEBAIFBsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMOjpjcmVhdGVW
ZXJ0ZXhBcnJheU9FUygpCiB7CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBHTHVpbnQgYXJyYXkgPSAwOwotI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShFRkwpKSB8fCBQTEFURk9STShXSU4pCisjaWYgKFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oV0lOKSB8fCBQTEFU
Rk9STShOSVgpKQogICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCiAgICAg
ICAgIGdsR2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiAjZWxpZiBkZWZpbmVkKEdMX0FQUExF
X3ZlcnRleF9hcnJheV9vYmplY3QpICYmIEdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QKQEAg
LTgwLDcgKzgwLDcgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jaWYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oV0lOKSkKKyNpZiAoUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShXSU4pIHx8
IFBMQVRGT1JNKE5JWCkpCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkK
ICAgICAgICAgZ2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICNlbGlmIGRlZmluZWQo
R0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQTEVfdmVydGV4X2FycmF5X29i
amVjdApAQCAtOTQsNyArOTQsNyBAQCBHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0w6Omlz
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwogCiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNpZiAoUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShX
SU4pKQorI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwp
IHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKSkKICAgICBpZiAoaXNWZXJ0ZXhBcnJh
eU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICByZXR1cm4gZ2xJc1ZlcnRleEFycmF5KGFycmF5
KTsKICNlbGlmIGRlZmluZWQoR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCkgJiYgR0xfQVBQ
TEVfdmVydGV4X2FycmF5X29iamVjdApAQCAtMTA2LDcgKzEwNiw3IEBAIEdDM0Rib29sZWFuIEV4
dGVuc2lvbnMzRE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5
KQogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQogewogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0j
aWYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExB
VEZPUk0oV0lOKSkKKyNpZiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oRUZMKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkpCiAgICAgaWYgKGlzVmVy
dGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKICAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkoYXJy
YXkpOwogI2VsaWYgZGVmaW5lZChHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0KSAmJiBHTF9B
UFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0CkBAIC0xNjAsNyArMTYwLDcgQEAgYm9vbCBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogICAg
IC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CiAgICAgaWYgKG5hbWUgPT0gIkdMX09FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IikgewotI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShFRkwpKQorI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKE5JWCkpCiAgICAgICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CiAj
ZWxzZQogICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9B
UFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CkBAIC0yMDUsNyArMjA1LDcgQEAgU3RyaW5nIEV4
dGVuc2lvbnMzRE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCiAgICAgcmV0dXJuIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7
CiB9CiAKLSNpZiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZM
KSB8fCBQTEFURk9STShXSU4pKQorI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHxQTEFURk9STShOSVgpKQogYm9vbCBF
eHRlbnNpb25zM0RPcGVuR0w6OmlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKQogewogICAg
IHN0YXRpYyBjb25zdCBib29sIHN1cHBvcnRzVmVydGV4QXJyYXlPYmplY3QgPSBzdXBwb3J0cygi
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAppbmRl
eCBmOWQ2OWU5Li40YzBlMGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCkBAIC02MCw3ICs2
MCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihj
b25zdCBXVEY6OlN0cmluZyYpOwogICAgIHZpcnR1YWwgU3RyaW5nIGdldEV4dGVuc2lvbnMoKTsK
LSNpZiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShXSU4pKQorI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikgfHwgUExBVEZPUk0oTklYKSkKIHByaXZhdGU6CiAg
ICAgYm9vbCBpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZjQxM2E2Ny4uYjBmN2Y5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQyLDcgKzQyLDcgQEAK
ICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KICNlbGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRl
IDxPcGVuR0wvZ2wuaD4KLSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5J
WCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTEVTLmgKaW5kZXggMjFlYzJlNS4uZTNhYzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TEVTLmgKQEAgLTY5LDYgKzY5LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
R0VUTlVOSUZPUk1GVkVYVFBST0MpIChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jCiB0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE5VTklGT1JNSVZFWFRQUk9DKSAoR0x1aW50IHBy
b2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKE5JWCkgJiYgVVNFKE9QRU5HTF9FU18yKSAmJiAhR0xf
SU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQorLy8gb24gclBpLCBQRk5HTEZSQU1F
QlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUcgaXMgY2FsbGVkIFBGTkdMQ0xJUFBMQU5FWElN
Ry4KK3R5cGVkZWYgUEZOR0xDTElQUExBTkVYSU1HIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRN
VUxUSVNBTVBMRUlNRzsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV4
dGVuc2lvbnMzRE9wZW5HTEVTIDogcHVibGljIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCBmYmRjYTBlLi5lN2RmOTRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTQyLDcgKzQyLDcg
QEAKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KLSNlbGlmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
V0lOKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNpbmNsdWRlICJPcGVuR0xTaGlt
cy5oIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmluZGV4IDg5ZDJiM2YuLjRkN2RlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtNTksNyArNTksNyBAQAogI2luY2x1ZGUgIk9w
ZW5HTEVTU2hpbXMuaCIKICNlbGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wu
aD4KLSNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oV0lOKQorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShXSU4pIHx8IFBMQVRGT1JNKE5JWCkKICNpbmNsdWRl
ICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBpZiAod2lk
dGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKICAgICAg
ICAgcmV0dXJuOwogCi0jaWYgKFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpKSAmJiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiAoUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwg
UExBVEZPUk0oTklYKSkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgOjpnbEZsdXNoKCk7
IC8vIE1ha2Ugc3VyZSBhbGwgR0wgY2FsbHMgaGF2ZSBiZWVuIGNvbW1pdHRlZCBiZWZvcmUgcmVz
aXppbmcuCiAgICAgY3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQp
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggNmVjNjc1Ny4uZDNjMDVlNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgI2RlZmluZSBURVhNQVBfT1BFTkdMX0VTXzIK
ICNlbmRpZgogI2VuZGlmCi0jaWYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkgJiYg
VVNFKE9QRU5HTF9FU18yKQorI2lmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwg
UExBVEZPUk0oTklYKSkgJiYgVVNFKE9QRU5HTF9FU18yKQogI2RlZmluZSBURVhNQVBfT1BFTkdM
X0VTXzIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXggN2ZhOTJhZC4uYTcxOWRhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtMjA2LDQg
KzIwNiwzIEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVf
aAogCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9DdXJzb3JOaXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0N1cnNvck5peC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3ZWYwYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9DdXJzb3JOaXguY3BwCkBAIC0wLDAgKzEsMTIwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hhcmxlcyBTYW11ZWxzIDxjaGFybGVzQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q3Vyc29yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCisgICAgOiBtX3R5
cGUob3RoZXIubV90eXBlKQorICAgICwgbV9pbWFnZShvdGhlci5tX2ltYWdlKQorICAgICwgbV9o
b3RTcG90KG90aGVyLm1faG90U3BvdCkKKyAgICAsIG1fcGxhdGZvcm1DdXJzb3Iob3RoZXIubV9w
bGF0Zm9ybUN1cnNvcikKK3sKK30KKworQ3Vyc29yOjp+Q3Vyc29yKCkKK3sKK30KKworQ3Vyc29y
JiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIG1fdHlwZSA9
IG90aGVyLm1fdHlwZTsKKyAgICBtX2ltYWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICBtX2hvdFNw
b3QgPSBvdGhlci5tX2hvdFNwb3Q7CisgICAgbV9wbGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxh
dGZvcm1DdXJzb3I7CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdGF0aWMgY29uc3QgY2hhciog
Y3Vyc29yU3RyaW5nKEN1cnNvcjo6VHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjdXJzb3JTdHJpbmdzW10gPSB7CisgICAgICAgICJjdXJzb3IvcG9pbnRlciIsCisgICAgICAg
ICJjdXJzb3IvY3Jvc3MiLAorICAgICAgICAiY3Vyc29yL2hhbmQiLAorICAgICAgICAiY3Vyc29y
L2lfYmVhbSIsCisgICAgICAgICJjdXJzb3Ivd2FpdCIsCisgICAgICAgICJjdXJzb3IvaGVscCIs
CisgICAgICAgICJjdXJzb3IvZWFzdF9yZXNpemUiLAorICAgICAgICAiY3Vyc29yL25vcnRoX3Jl
c2l6ZSIsCisgICAgICAgICJjdXJzb3Ivbm9ydGhfZWFzdF9yZXNpemUiLAorICAgICAgICAiY3Vy
c29yL25vcnRoX3dlc3RfcmVzaXplIiwKKyAgICAgICAgImN1cnNvci9zb3V0aF9yZXNpemUiLAor
ICAgICAgICAiY3Vyc29yL3NvdXRoX2Vhc3RfcmVzaXplIiwKKyAgICAgICAgImN1cnNvci9zb3V0
aF93ZXN0X3Jlc2l6ZSIsCisgICAgICAgICJjdXJzb3Ivd2VzdF9yZXNpemUiLAorICAgICAgICAi
Y3Vyc29yL25vcnRoX3NvdXRoX3Jlc2l6ZSIsCisgICAgICAgICJjdXJzb3IvZWFzdF93ZXN0X3Jl
c2l6ZSIsCisgICAgICAgICJjdXJzb3Ivbm9ydGhfZWFzdF9zb3V0aF93ZXN0X3Jlc2l6ZSIsCisg
ICAgICAgICJjdXJzb3Ivbm9ydGhfd2VzdF9zb3V0aF9lYXN0X3Jlc2l6ZSIsCisgICAgICAgICJj
dXJzb3IvY29sdW1uX3Jlc2l6ZSIsCisgICAgICAgICJjdXJzb3Ivcm93X3Jlc2l6ZSIsCisgICAg
ICAgICJjdXJzb3IvbWlkZGxlX3Bhbm5pbmciLAorICAgICAgICAiY3Vyc29yL2Vhc3RfcGFubmlu
ZyIsCisgICAgICAgICJjdXJzb3Ivbm9ydGhfcGFubmluZyIsCisgICAgICAgICJjdXJzb3Ivbm9y
dGhfZWFzdF9wYW5uaW5nIiwKKyAgICAgICAgImN1cnNvci9ub3J0aF93ZXN0X3Bhbm5pbmciLAor
ICAgICAgICAiY3Vyc29yL3NvdXRoX3Bhbm5pbmciLAorICAgICAgICAiY3Vyc29yL3NvdXRoX2Vh
c3RfcGFubmluZyIsCisgICAgICAgICJjdXJzb3Ivc291dGhfd2VzdF9wYW5uaW5nIiwKKyAgICAg
ICAgImN1cnNvci93ZXN0X3Bhbm5pbmciLAorICAgICAgICAiY3Vyc29yL21vdmUiLAorICAgICAg
ICAiY3Vyc29yL3ZlcnRpY2FsX3RleHQiLAorICAgICAgICAiY3Vyc29yL2NlbGwiLAorICAgICAg
ICAiY3Vyc29yL2NvbnRleHRfbWVudSIsCisgICAgICAgICJjdXJzb3IvYWxpYXMiLAorICAgICAg
ICAiY3Vyc29yL3Byb2dyZXNzIiwKKyAgICAgICAgImN1cnNvci9ub19kcm9wIiwKKyAgICAgICAg
ImN1cnNvci9jb3B5IiwKKyAgICAgICAgImN1cnNvci9ub25lIiwKKyAgICAgICAgImN1cnNvci9u
b3RfYWxsb3dlZCIsCisgICAgICAgICJjdXJzb3Ivem9vbV9pbiIsCisgICAgICAgICJjdXJzb3Iv
em9vbV9vdXQiLAorICAgICAgICAiY3Vyc29yL2dyYWIiLAorICAgICAgICAiY3Vyc29yL2dyYWJi
aW5nIiwKKyAgICAgICAgIiJ9OyAvLyBGSVhNRTogSnVzdCByZXR1cm4gIiIgZm9yIGN1c3RvbSB0
eXBlLiBXZSBkb24ndCBzdXBwb3J0IGl0IG5vdy4KKyAgICByZXR1cm4gY3Vyc29yU3RyaW5nc1t0
eXBlXTsKK30KKwordm9pZCBDdXJzb3I6OmVuc3VyZVBsYXRmb3JtQ3Vyc29yKCkgY29uc3QKK3sK
KyAgICBpZiAobV9wbGF0Zm9ybUN1cnNvcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBjdXJzb3JTdHJpbmcobV90eXBlKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0RyYWdEYXRhTml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25peC9EcmFnRGF0YU5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWZmYjY5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25peC9EcmFnRGF0YU5peC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5o
IgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRh
aW5zQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBEcmFnRGF0
YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNp
Z25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JikgY29uc3QKK3sK
K30KKworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dChGcmFtZSopIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitDb2xvciBEcmFnRGF0YTo6YXNDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yKCk7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNv
bnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRnJhbWUqLCBGaWxlbmFtZUNvbnZlcnNpb25Q
b2xpY3kpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRHJhZ0RhdGE6
OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5LCBTdHJpbmcqKSBjb25zdAor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sLCBi
b29sJikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbml4L0RyYWdJbWFnZU5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uaXgvRHJhZ0ltYWdlTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kZGFjODYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbml4L0RyYWdJbWFnZU5peC5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnSW1hZ2Uu
aCIKKworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUg
ZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKK30KKwordm9pZCBkZWxldGVEcmFnSW1hZ2UoRHJhZ0lt
YWdlUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0RyYWdJbWFnZVJlZiBzY2Fs
ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZsb2F0U2l6ZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBpbWFnZTsKK30KKworRHJhZ0ltYWdlUmVmIGRpc3NvbHZl
RHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitEcmFnSW1hZ2VSZWYgY3Jl
YXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVt
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0RyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXguY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbml4L0Vycm9yc05peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjc3MDRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25peC9FcnJvcnNOaXguY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVycm9yc05p
eC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJyb3JDYW5jZWxsZWQsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCksICJMb2FkIHJlcXVlc3QgY2FuY2VsbGVkIik7Cit9CisKK1Jlc291cmNlRXJy
b3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBy
ZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5ub3RV
c2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgIk5vdCBhbGxvd2VkIHRv
IHVzZSByZXN0cmljdGVkIG5ldHdvcmsgcG9ydCIpOworfQorCitSZXNvdXJjZUVycm9yIGNhbm5v
dFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0
dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yQ2Fubm90U2hv
d1VSTCwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgIlVSTCBjYW5ub3QgYmUgc2hvd24iKTsKK30K
KworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJv
ckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hh
bmdlLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCAiRnJhbWUgbG9hZCB3YXMgaW50ZXJydXB0ZWQi
KTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJv
ckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5cGUsIHJlc3BvbnNlLnVy
bCgpLnN0cmluZygpLCAiQ29udGVudCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5v
dCBiZSBzaG93biIpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbk5ldHdvcmssIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhpc3QsIHJl
c3BvbnNlLnVybCgpLnN0cmluZygpLCAiRmlsZSBkb2VzIG5vdCBleGlzdCIpOworfQorCitSZXNv
dXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVn
aW4sIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCAi
UGx1Z2luIHdpbGwgaGFuZGxlIGxvYWQiKTsKK30KKworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5l
dHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBuZXR3b3JrRXJyb3IpCit7CisgICAgcmV0
dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93bmxvYWRFcnJvck5ldHdv
cmssIG5ldHdvcmtFcnJvci5mYWlsaW5nVVJMKCksIG5ldHdvcmtFcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbigpKTsKK30KKworUmVzb3VyY2VFcnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVy
cm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKGVycm9yRG9tYWluRG93bmxvYWQsIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVz
ZXIsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCAiVXNlciBjYW5jZWxsZWQgdGhlIGRvd25sb2Fk
Iik7Cit9CisKK1Jlc291cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sK
KyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVy
cm9yRGVzdGluYXRpb24sIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBlcnJvck1lc3NhZ2UpOwor
fQorCitSZXNvdXJjZUVycm9yIHByaW50RXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENv
bnRleHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIERvY3VtZW50TG9hZGVy
KiBkb2N1bWVudExvYWRlciA9IHByaW50Q29udGV4dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCk7CisKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50
LCBQcmludEVycm9yR2VuZXJhbCwgZG9jdW1lbnRMb2FkZXIgPyBkb2N1bWVudExvYWRlci0+dXJs
KCkgOiBLVVJMKCksIGVycm9yTWVzc2FnZSk7Cit9CisKK1Jlc291cmNlRXJyb3IgcHJpbnRlck5v
dEZvdW5kRXJyb3IoY29uc3QgUHJpbnRDb250ZXh0KiBwcmludENvbnRleHQpCit7CisgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gcHJpbnRDb250ZXh0LT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluUHJpbnQsIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsIGRvY3VtZW50TG9hZGVyID8g
ZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VSTCgpLCAiUHJpbnRlciBub3QgZm91bmQiKTsKK30K
KworUmVzb3VyY2VFcnJvciBpbnZhbGlkUGFnZVJhbmdlVG9QcmludChjb25zdCBQcmludENvbnRl
eHQqIHByaW50Q29udGV4dCkKK3sKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBwcmludENvbnRleHQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworCisg
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckludmFs
aWRQYWdlUmFuZ2UsIGRvY3VtZW50TG9hZGVyID8gZG9jdW1lbnRMb2FkZXItPnVybCgpIDogS1VS
TCgpLCAiSW52YWxpZCBwYWdlIHJhbmdlIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9FcnJvcnNOaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xZDE5ODBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbml4L0Vycm9yc05peC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFcnJvcnNOaXhfaAorI2RlZmluZSBFcnJv
cnNOaXhfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUHJpbnRDb250ZXh0OworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2Ns
YXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CisKK3N0YXRpYyBj
b25zdCBjaGFyIGVycm9yRG9tYWluTmV0d29ya1tdID0gIldlYktpdE5ldHdvcmtFcnJvciI7Citz
dGF0aWMgY29uc3QgY2hhciBlcnJvckRvbWFpblBvbGljeVtdID0gIldlYktpdFBvbGljeUVycm9y
IjsKK3N0YXRpYyBjb25zdCBjaGFyIGVycm9yRG9tYWluUGx1Z2luW10gPSAiV2ViS2l0UGx1Z2lu
RXJyb3IiOworc3RhdGljIGNvbnN0IGNoYXIgZXJyb3JEb21haW5Eb3dubG9hZFtdID0gIldlYktp
dERvd25sb2FkRXJyb3IiOworc3RhdGljIGNvbnN0IGNoYXIgZXJyb3JEb21haW5QcmludFtdID0g
IldlYktpdFByaW50RXJyb3IiOworCitlbnVtIE5ldHdvcmtFcnJvciB7CisgICAgTmV0d29ya0Vy
cm9yRmFpbGVkID0gMzk5LAorICAgIE5ldHdvcmtFcnJvclRyYW5zcG9ydCA9IDMwMCwKKyAgICBO
ZXR3b3JrRXJyb3JVbmtub3duUHJvdG9jb2wgPSAzMDEsCisgICAgTmV0d29ya0Vycm9yQ2FuY2Vs
bGVkID0gMzAyLAorICAgIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhpc3QgPSAzMDMKK307CisK
Ky8vIFN5bmMnZCB3aXRoIE1hYydzIFdlYktpdCBFcnJvcnMgYXQ6CisvLyBTb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYktpdEVycm9yc1tQcml2YXRlXS5oCitlbnVtIFBvbGljeUVycm9yIHsKKyAg
ICBQb2xpY3lFcnJvckZhaWxlZCA9IDE5OSwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dNaW1l
VHlwZSA9IDEwMCwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFNob3dVUkwgPSAxMDEsCisgICAgUG9s
aWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAorICAgIFBv
bGljeUVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQgPSAxMDMKK307CisKK2VudW0gUGx1Z2lu
RXJyb3IgeworICAgIFBsdWdpbkVycm9yRmFpbGVkID0gMjk5LAorICAgIFBsdWdpbkVycm9yQ2Fu
bm90RmluZFBsdWdpbiA9IDIwMCwKKyAgICBQbHVnaW5FcnJvckNhbm5vdExvYWRQbHVnaW4gPSAy
MDEsCisgICAgUGx1Z2luRXJyb3JKYXZhVW5hdmFpbGFibGUgPSAyMDIsCisgICAgUGx1Z2luRXJy
b3JDb25uZWN0aW9uQ2FuY2VsbGVkID0gMjAzLAorICAgIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxv
YWQgPSAyMDQKK307CisKK2VudW0gRG93bmxvYWRFcnJvciB7CisgICAgRG93bmxvYWRFcnJvck5l
dHdvcmsgPSA0OTksCisgICAgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlciA9IDQwMCwKKyAg
ICBEb3dubG9hZEVycm9yRGVzdGluYXRpb24gPSA0MDEKK307CisKK2VudW0gUHJpbnRFcnJvciB7
CisgICAgUHJpbnRFcnJvckdlbmVyYWwgPSA1OTksCisgICAgUHJpbnRFcnJvclByaW50ZXJOb3RG
b3VuZCA9IDUwMCwKKyAgICBQcmludEVycm9ySW52YWxpZFBhZ2VSYW5nZSA9IDUwMQorfTsKKwor
UmVzb3VyY2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jl
c291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3Vy
Y2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CitSZXNv
dXJjZUVycm9yIGludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKK1Jlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVycm9yKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKK1Jlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxv
YWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2Fk
TmV0d29ya0Vycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKK1Jlc291cmNlRXJyb3IgZG93bmxv
YWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJj
ZUVycm9yIGRvd25sb2FkRGVzdGluYXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNv
bnN0IFByaW50Q29udGV4dCosIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNl
RXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3IoY29uc3QgUHJpbnRDb250ZXh0Kik7CitSZXNvdXJj
ZUVycm9yIGludmFsaWRQYWdlUmFuZ2VUb1ByaW50KGNvbnN0IFByaW50Q29udGV4dCopOworCit9
CisKKyNlbmRpZiAvLyBFcnJvcnNOaXhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbml4L0ZpbGVTeXN0ZW1OaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4
L0ZpbGVTeXN0ZW1OaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2
ZmYxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvRmls
ZVN5c3RlbU5peC5jcHAKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDb2xsYWJvcmEsIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNp
bmNsdWRlICJVVUlELmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR2xpYlV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBP
biBsaW51eCBmaWxlIG5hbWVzIGFyZSBqdXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRo
YXQgY2Fubm90IGJlIGVuY29kZWQgaW4gYW55IHdheQorICogYXJlIHZhbGlkIGZpbGUgbmFtZXMu
IFRoaXMgbWVhbiB0aGF0IHdlIGNhbm5vdCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGlu
IGEgU3RyaW5nCisgKiBidXQgd2UgaGF2ZSB0byBlc2NhcGUgaXQuCisgKiBPbiBXaW5kb3dzIHRo
ZSBHTGliIGZpbGUgbmFtZSBlbmNvZGluZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGlt
aXplIHRoaXMgY2FzZS4gKi8KK1N0cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZp
bGVuYW1lKQoreworICAgIGlmICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KworICAgIEdPd25QdHI8Z2NoYXI+IGVzY2FwZWRTdHJpbmcoZ191cmlfZXNjYXBlX3N0cmluZyhm
aWxlbmFtZSwgIi86IiwgZmFsc2UpKTsKKyAgICByZXR1cm4gZXNjYXBlZFN0cmluZy5nZXQoKTsK
K30KKworQ1N0cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIEdPd25QdHI8Z2NoYXI+IGZpbGVuYW1lKGdfdXJpX3VuZXNjYXBlX3N0cmluZyhw
YXRoLnV0ZjgoKS5kYXRhKCksIDApKTsKKyAgICByZXR1cm4gZmlsZW5hbWUuZ2V0KCk7Cit9CisK
Ky8vIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5
ZWQgdG8gdGhlIHVzZXIuCitTdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oc3RyaW5nKTsKKyAgICBHT3duUHRyPGdjaGFyPiBkaXNwbGF5KGdfZmlsZW5hbWVfdG9fdXRm
OChmaWxlbmFtZS5kYXRhKCksIDAsIDAsIDAsIDApKTsKKyAgICBpZiAoIWRpc3BsYXkpCisgICAg
ICAgIHJldHVybiBzdHJpbmc7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXNwbGF5
LmdldCgpKTsKK30KKworYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVt
UmVwcmVzZW50YXRpb24ocGF0aCk7CisKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQorICAg
ICAgICByZXN1bHQgPSBnX2ZpbGVfdGVzdChmaWxlbmFtZS5kYXRhKCksIEdfRklMRV9URVNUX0VY
SVNUUyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIGRlbGV0ZUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgQ1N0cmluZyBm
aWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKworICAgIGlmICghZmls
ZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9IGdfcmVtb3ZlKGZpbGVuYW1lLmRhdGEo
KSkgPT0gMDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgZGVsZXRlRW1wdHlEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgQ1N0cmluZyBmaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKKwor
ICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9IGdfcm1kaXIoZmls
ZW5hbWUuZGF0YSgpKSA9PSAwOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBnZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKK3sKKyAg
ICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAg
IGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1N0
YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBnaW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRh
KCksICZzdGF0UmVzdWx0KTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJlc3VsdFNpemUgPSBzdGF0UmVzdWx0LnN0X3NpemU7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBw
YXRoLCB0aW1lX3QmIG1vZGlmaWVkVGltZSkKK3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgpOworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBn
aW50IHJlc3VsdCA9IGdfc3RhdChmaWxlbmFtZS5kYXRhKCksICZzdGF0UmVzdWx0KTsKKyAgICBp
ZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1vZGlmaWVkVGlt
ZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CisgICAgcmV0dXJuIHRydWU7CisKK30KKworYm9vbCBn
ZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRh
KQoreworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocGF0
aCk7CisgICAgaWYgKGZpbGVuYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzdHJ1Y3Qgc3RhdCBzdGF0UmVzdWx0OworICAgIGdpbnQgcmVzdWx0ID0gZ19zdGF0KGZp
bGVuYW1lLmRhdGEoKSwgJnN0YXRSZXN1bHQpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBzdGF0UmVzdWx0
LnN0X210aW1lOworICAgIG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKKyAg
ICBtZXRhZGF0YS50eXBlID0gU19JU0RJUihzdGF0UmVzdWx0LnN0X21vZGUpID8gRmlsZU1ldGFk
YXRhOjpUeXBlRGlyZWN0b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKKyAgICByZXR1cm4g
dHJ1ZTsKKworfQorCitTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAgaWYgKHBhdGguZW5kc1dp
dGgoR19ESVJfU0VQQVJBVE9SX1MpKQorICAgICAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudDsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBwYXRoICsgR19ESVJfU0VQQVJBVE9SX1MgKyBjb21w
b25lbnQ7Cit9CisKK2Jvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBhdGgp
OworICAgIGlmIChmaWxlbmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZ2ludCByZXN1bHQgPSBnX21rZGlyX3dpdGhfcGFyZW50cyhmaWxlbmFtZS5kYXRhKCksIFNf
SVJXWFUpOworCisgICAgcmV0dXJuIHJlc3VsdCA9PSAwOworfQorCitTdHJpbmcgaG9tZURpcmVj
dG9yeVBhdGgoKQoreworICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGdfZ2V0X2hvbWVfZGly
KCkpOworfQorCitTdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aE5hbWUp
Cit7CisgICAgaWYgKHBhdGhOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHBhdGhOYW1l
OworCisgICAgQ1N0cmluZyB0bXBGaWxlbmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihw
YXRoTmFtZSk7CisgICAgR093blB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9iYXNlbmFt
ZSh0bXBGaWxlbmFtZS5kYXRhKCkpKTsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChiYXNl
TmFtZS5nZXQoKSk7Cit9CisKK0NTdHJpbmcgYXBwbGljYXRpb25EaXJlY3RvcnlQYXRoKCkKK3sK
KyAgICBDU3RyaW5nIHBhdGggPSBnZXRDdXJyZW50RXhlY3V0YWJsZVBhdGgoKTsKKyAgICBpZiAo
IXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwYXRoOworCisgICAgLy8gSWYgdGhlIGFi
b3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUuCisgICAgR093blB0cjxjaGFy
PiBjdXJyZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoKGdfZ2V0X3ByZ25hbWUoKSkp
OworICAgIGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAgICAgIHJldHVybiBDU3RyaW5n
KCk7CisKKyAgICBHT3duUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJuYW1lKGN1cnJl
bnRFeGVQYXRoLmdldCgpKSk7CisgICAgcmV0dXJuIGRpcm5hbWUuZ2V0KCk7Cit9CisKK0NTdHJp
bmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpCit7CisgICAgc3RhdGljIENTdHJpbmcgY2FjaGVkUGF0
aDsKKyAgICBpZiAoIWNhY2hlZFBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBjYWNoZWRQ
YXRoOworCisgICAgR093blB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShEQVRB
X0RJUiwgIndlYmtpdG5peCIsIE5VTEwpKTsKKworICAgIGNhY2hlZFBhdGggPSBkYXRhUGF0aC5n
ZXQoKTsKKyAgICByZXR1cm4gY2FjaGVkUGF0aDsKK30KKwordWludDY0X3QgZ2V0Vm9sdW1lRnJl
ZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgR1JlZlB0cjxHRmlsZT4gZmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgpKTsKKyAgICBHUmVmUHRyPEdG
aWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5m
byhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwgMCkpOwor
ICAgIGlmICghZmlsZUluZm8pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfZmls
ZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVfQVRUUklC
VVRFX0ZJTEVTWVNURU1fRlJFRSk7Cit9CisKK1N0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICAvKiBObyBudWxsIGNoZWNraW5nIG5lZWRlZCAqLworICAgIEdP
d25QdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKHBhdGgpLmRhdGEoKSkpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpcm5h
bWUuZ2V0KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gZW50
cmllczsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
cGF0aCk7CisgICAgR0RpciogZGlyID0gZ19kaXJfb3BlbihmaWxlbmFtZS5kYXRhKCksIDAsIDAp
OworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm4gZW50cmllczsKKworICAgIEdQYXR0ZXJu
U3BlYyAqcHNwZWMgPSBnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRhdGEoKSk7
CisgICAgd2hpbGUgKGNvbnN0IGNoYXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyKSkgewor
ICAgICAgICBpZiAoIWdfcGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMsIG5hbWUpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgR093blB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9m
aWxlbmFtZShmaWxlbmFtZS5kYXRhKCksIG5hbWUsIE5VTEwpKTsKKyAgICAgICAgZW50cmllcy5h
cHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOworICAgIH0KKyAgICBnX3BhdHRl
cm5fc3BlY19mcmVlKHBzcGVjKTsKKyAgICBnX2Rpcl9jbG9zZShkaXIpOworCisgICAgcmV0dXJu
IGVudHJpZXM7Cit9CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBy
ZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgR093blB0cjxnY2hhcj4g
ZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0cjxn
Y2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVuYW1l
LmdldCgpLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2Zp
bGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBoYW5kbGUgPSBnX2ZpbGVf
Y3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDApOwor
ICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOworfQorCitQbGF0
Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUg
bW9kZSkKK3sKKyAgICBDU3RyaW5nIGZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBh
dGgpOworICAgIGlmIChmc1JlcC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGU7CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgoZnNSZXAuZGF0YSgpKSk7CisgICAgR0ZpbGVJT1N0cmVhbSogaW9T
dHJlYW0gPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAgICAgICBpb1N0cmVh
bSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICBlbHNlIGlm
IChtb2RlID09IE9wZW5Gb3JXcml0ZSkgeworICAgICAgICBpZiAoZ19maWxlX3Rlc3QoZnNSZXAu
ZGF0YSgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklM
RV9URVNUX0lTX1JFR1VMQVIpKSkKKyAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5f
cmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
b1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVB
VEVfTk9ORSwgMCwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIGlvU3RyZWFtOworfQorCit2b2lk
IGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19pb19zdHJlYW1fY2xv
c2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7CisgICAgZ19vYmplY3RfdW5yZWYoaGFuZGxl
KTsKKyAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlOworfQorCitsb25nIGxv
bmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwg
RmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9IEdfU0VF
S19TRVQ7CisgICAgc3dpdGNoIChvcmlnaW4pIHsKKyAgICBjYXNlIFNlZWtGcm9tQmVnaW5uaW5n
OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU2Vla0Zyb21DdXJyZW50OgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU2Vla0Zyb21FbmQ6CisgICAgICAgIHNlZWtUeXBlID0gR19T
RUVLX0VORDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19TRUVLQUJM
RShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHNlZWtUeXBlLCAwLCAwKSkKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIHJldHVybiBnX3NlZWthYmxlX3RlbGwoR19TRUVLQUJMRShnX2lvX3N0
cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSk7Cit9CisKK2ludCB3
cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKQoreworICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKKyAgICBnX291dHB1dF9zdHJl
YW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhh
bmRsZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAmYnl0
ZXNXcml0dGVuLCAwLCAwKTsKKyAgICByZXR1cm4gYnl0ZXNXcml0dGVuOworfQorCitpbnQgcmVh
ZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCit7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGRvIHsKKyAgICAgICAgZ3Nz
aXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0
X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCisgICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFk
OworICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdfRklMRV9FUlJPUl9JTlRS
KTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxl
IG1vZHVsZSkKK3sKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsKK30KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9HYW1lcGFkc05peC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvR2FtZXBhZHNOaXguY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTI4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uaXgvR2FtZXBhZHNOaXguY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHYW1lcGFkcy5oIgor
CisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgorCisjaW5j
bHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R2FtZXBhZExpc3Q7CisKK3ZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCit7
CisgICAgV2ViS2l0OjpXZWJHYW1lcGFkcyBnYW1lcGFkczsKKworICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+c2FtcGxlR2FtZXBhZHMoZ2FtZXBhZHMpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwOyArK2kp
IHsKKyAgICAgICAgV2ViS2l0OjpXZWJHYW1lcGFkJiB3ZWJHYW1lcGFkID0gZ2FtZXBhZHMuaXRl
bXNbaV07CisgICAgICAgIGlmIChpIDwgZ2FtZXBhZHMubGVuZ3RoICYmIHdlYkdhbWVwYWQuY29u
bmVjdGVkKSB7CisgICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0
ZW0oaSk7CisgICAgICAgICAgICBpZiAoIWdhbWVwYWQpCisgICAgICAgICAgICAgICAgZ2FtZXBh
ZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQod2ViR2FtZXBh
ZC5pZCk7CisgICAgICAgICAgICBnYW1lcGFkLT5pbmRleChpKTsKKyAgICAgICAgICAgIGdhbWVw
YWQtPnRpbWVzdGFtcCh3ZWJHYW1lcGFkLnRpbWVzdGFtcCk7CisgICAgICAgICAgICBnYW1lcGFk
LT5heGVzKHdlYkdhbWVwYWQuYXhlc0xlbmd0aCwgd2ViR2FtZXBhZC5heGVzKTsKKyAgICAgICAg
ICAgIGdhbWVwYWQtPmJ1dHRvbnMod2ViR2FtZXBhZC5idXR0b25zTGVuZ3RoLCB3ZWJHYW1lcGFk
LmJ1dHRvbnMpOworICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAgICB9Cit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvTGFuZ3VhZ2VOaXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0xhbmd1YWdlTml4LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTcwN2MxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L0xhbmd1YWdlTml4LmNwcApAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0
aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxhbmd1YWdlLmgiCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBwbGF0Zm9ybUxhbmd1YWdlKCkKK3sKKyAgICBj
aGFyKiBsb2NhbGVEZWZhdWx0ID0gc2V0bG9jYWxlKExDX0NUWVBFLCAwKTsKKworICAgIGlmICgh
bG9jYWxlRGVmYXVsdCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiYyIpOworCisgICAgU3RyaW5n
IGxvY2FsZSA9IFN0cmluZyhsb2NhbGVEZWZhdWx0KTsKKyAgICBsb2NhbGUucmVwbGFjZSgnXycs
ICctJyk7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gbG9jYWxlLmZpbmQoJy4nKTsKKyAgICBpZiAo
cG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgIGxvY2FsZSA9IGxvY2FsZS5sZWZ0KHBvc2l0
aW9uKTsKKworICAgIHJldHVybiBsb2NhbGU7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHBsYXRmb3Jt
VXNlclByZWZlcnJlZExhbmd1YWdlcygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZl
cnJlZExhbmd1YWdlczsKKyAgICB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzLmFwcGVuZChwbGF0Zm9y
bUxhbmd1YWdlKCkpOworICAgIHJldHVybiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvTG9jYWxpemVkU3RyaW5n
c05peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvTG9jYWxpemVkU3RyaW5nc05p
eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxMDExMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9Mb2NhbGl6ZWRTdHJpbmdz
Tml4LmNwcApAQCAtMCwwICsxLDYxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlz
dGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4
IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCBJbnN0aXR1dG8gTm9raWEg
ZGUgVGVjbm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5n
IHN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoIlN1Ym1pdCIpOworfQorCitTdHJpbmcgaW5wdXRFbGVtZW50QWx0VGV4dCgpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlN1Ym1pdCIpOworfQorCitTdHJpbmcgcmVzZXRCdXR0
b25EZWZhdWx0TGFiZWwoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJSZXNldCIp
OworfQorCitTdHJpbmcgZGVmYXVsdERldGFpbHNTdW1tYXJ5VGV4dCgpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoIkRldGFpbHMiKTsKK30KKworU3RyaW5nIHNlYXJjaGFibGVJbmRl
eEludHJvZHVjdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlRoaXMgaXMg
YSBzZWFyY2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICIpOworfQorCitTdHJp
bmcgZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoIkNob29zZSBGaWxlIik7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uQ2hvb3NlTXVsdGlw
bGVGaWxlc0xhYmVsKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ2hvb3NlIEZp
bGVzIik7Cit9CisKK1N0cmluZyBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk5vIGZpbGUgc2VsZWN0ZWQiKTsKK30KKworU3Ry
aW5nIGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoIk5vIGZpbGVzIHNlbGVjdGVkIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCgiT3BlbiBMaW5rIGluIE5ldyBXaW5kb3ciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVU
RjgoIkRvd25sb2FkIExpbmtlZCBGaWxlIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1U
YWdDb3B5TGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgi
Q29weSBMaW5rIExvY2F0aW9uIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVu
SW1hZ2VJbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4g
SW1hZ2UgaW4gTmV3IFdpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRWaWRlb1RvRGlzaygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkRvd25s
b2FkIFZpZGVvIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEF1ZGlv
VG9EaXNrKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiRG93bmxvYWQgQXVkaW8i
KTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2soKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTYXZlIEltYWdlIEFzIik7Cit9CisKK1N0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpCit7CisgICAgcmV0
dXJuIFN0cmluZzo6ZnJvbVVURjgoIkNvcHkgSW1hZ2UiKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVVybFRvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiQ29weSBJbWFnZSBBZGRyZXNzIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoIk9wZW4gVmlkZW8gaW4gTmV3IFdpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1l
bnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KCJPcGVuIEF1ZGlvIGluIE5ldyBXaW5kb3ciKTsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoIkNvcHkgVmlkZW8gTGluayBMb2NhdGlvbiIpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiQ29weSBBdWRpbyBMaW5rIExvY2F0aW9uIik7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiVG9nZ2xlIE1lZGlhIENvbnRyb2xzIik7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKQoreworICAgIHJldHVybiBTdHJpbmc6
OmZyb21VVEY4KCJUb2dnbGUgTWVkaWEgTG9vcCBQbGF5YmFjayIpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4oKQoreworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KCJTd2l0Y2ggVmlkZW8gdG8gRnVsbHNjcmVlbiIpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCgiUGxheSIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQYXVzZSgp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlBhdXNlIik7Cit9CisKK1N0cmluZyBj
b250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KCJNdXRlIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5l
d1dpbmRvdygpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4gRnJhbWUgaW4g
TmV3IFdpbmRvdyIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ29weSgpCit7Cisg
ICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiQ29weSIpOwor
ICAgIHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnRGVs
ZXRlKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nIHN0b2NrTGFiZWwgPSBTdHJpbmc6OmZyb21VVEY4
KCJEZWxldGUiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNvbnRleHRN
ZW51SXRlbVRhZ1NlbGVjdEFsbCgpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0g
U3RyaW5nOjpmcm9tVVRGOCgiU2VsZWN0IEFsbCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnVW5pY29kZSgpCit7CisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoIkluc2VydCBVbmljb2RlIENvbnRyb2wgQ2hhcmFjdGVyIik7Cit9CisK
K1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHMoKQoreworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KCJJbnB1dCBNZXRob2RzIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVu
dUl0ZW1UYWdHb0JhY2soKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmlu
Zzo6ZnJvbVVURjgoIkdvIEJhY2siKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3Ry
aW5nIGNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpCit7CisgICAgc3RhdGljIFN0cmluZyBz
dG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiR28gRm9yd2FyZCIpOworICAgIHJldHVybiBz
dG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU3RvcCgpCit7CisgICAg
c3RhdGljIFN0cmluZyBzdG9ja0xhYmVsID0gU3RyaW5nOjpmcm9tVVRGOCgiU3RvcCIpOworICAg
IHJldHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUmVsb2Fk
KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiUmVsb2FkIik7Cit9CisKK1N0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdDdXQoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJl
bCA9IFN0cmluZzo6ZnJvbVVURjgoIkN1dCIpOworICAgIHJldHVybiBzdG9ja0xhYmVsOworfQor
CitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKQoreworICAgIHN0YXRpYyBTdHJpbmcg
c3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIlBhc3RlIik7CisgICAgcmV0dXJuIHN0b2Nr
TGFiZWw7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk5vIEd1ZXNzZXMgRm91bmQiKTsKK30KKwor
U3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4g
U3RyaW5nOjpmcm9tVVRGOCgiSWdub3JlIFNwZWxsaW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OCgiTGVhcm4gU3BlbGxpbmciKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJj
aFdlYigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIlNlYXJjaCB0aGUgV2ViIik7
Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTG9vayBVcCBpbiBEaWN0
aW9uYXJ5Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpCit7Cisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk9wZW4gTGluayIpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoIklnbm9yZSBHcmFtbWFyIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdT
cGVsbGluZ01lbnUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJTcGVsbGluZyBh
bmQgR3JhbW1hciIpOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5n
UGFuZWwoYm9vbCBzaG93KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHNob3cgPyAi
U2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIgOiAiSGlkZSBTcGVsbGluZyBhbmQgR3JhbW1hciIp
OworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkNoZWNrIERvY3VtZW50IE5vdyIpOworfQorCitTdHJp
bmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ2hlY2sgU3BlbGxpbmcgV2hpbGUgX1R5cGluZyIpOwor
fQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiQ2hlY2sgR3JhbW1hciBXaXRoIFNwZWxs
aW5nIik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIkZvbnQiKTsKK30KKworU3RyaW5nIGNvbnRleHRNZW51
SXRlbVRhZ0JvbGQoKQoreworICAgIHN0YXRpYyBTdHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6
ZnJvbVVURjgoIkJvbGQiKTsKKyAgICByZXR1cm4gc3RvY2tMYWJlbDsKK30KKworU3RyaW5nIGNv
bnRleHRNZW51SXRlbVRhZ0l0YWxpYygpCit7CisgICAgc3RhdGljIFN0cmluZyBzdG9ja0xhYmVs
ID0gU3RyaW5nOjpmcm9tVVRGOCgiSXRhbGljIik7CisgICAgcmV0dXJuIHN0b2NrTGFiZWw7Cit9
CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKQoreworICAgIHN0YXRpYyBT
dHJpbmcgc3RvY2tMYWJlbCA9IFN0cmluZzo6ZnJvbVVURjgoIlVuZGVybGluZSIpOworICAgIHJl
dHVybiBzdG9ja0xhYmVsOworfQorCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgp
Cit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoIk91dGxpbmUiKTsKK30KKworU3RyaW5n
IGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOCgiSW5zcGVjdCBFbGVtZW50Iik7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0
ZW1UYWdSaWdodFRvTGVmdCgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdUZXh0
RGlyZWN0aW9uTWVudSgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgY29u
dGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpCit7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitTdHJpbmcgc2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgiTm8gcmVjZW50IHNlYXJjaGVzIik7Cit9CisKK1N0cmlu
ZyBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpm
cm9tVVRGOCgiUmVjZW50IHNlYXJjaGVzIik7Cit9CisKK1N0cmluZyBzZWFyY2hNZW51Q2xlYXJS
ZWNlbnRTZWFyY2hlc1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJDbGVh
ciByZWNlbnQgc2VhcmNoZXMiKTsKK30KKworU3RyaW5nIEFYRGVmaW5pdGlvbkxpc3RUZXJtVGV4
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInRlcm0iKTsKK30KKworU3RyaW5n
IEFYRGVmaW5pdGlvbkxpc3REZWZpbml0aW9uVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgoImRlZmluaXRpb24iKTsKK30KKworU3RyaW5nIEFYRm9vdGVyUm9sZURlc2NyaXB0
aW9uVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoImZvb3RlciIpOworfQor
CitTdHJpbmcgQVhCdXR0b25BY3Rpb25WZXJiKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCgicHJlc3MiKTsKK30KKworU3RyaW5nIEFYUmFkaW9CdXR0b25BY3Rpb25WZXJiKCkKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgic2VsZWN0Iik7Cit9CisKK1N0cmluZyBBWFRl
eHRGaWVsZEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJhY3Rp
dmF0ZSIpOworfQorCitTdHJpbmcgQVhDaGVja2VkQ2hlY2tCb3hBY3Rpb25WZXJiKCkKK3sKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgidW5jaGVjayIpOworfQorCitTdHJpbmcgQVhVbmNo
ZWNrZWRDaGVja0JveEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KCJjaGVjayIpOworfQorCitTdHJpbmcgQVhMaW5rQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJu
IFN0cmluZzo6ZnJvbVVURjgoImp1bXAiKTsKK30KKworU3RyaW5nIHVua25vd25GaWxlU2l6ZVRl
eHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJVbmtub3duIik7Cit9CisKK1N0
cmluZyBpbWFnZVRpdGxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFNpemUmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCisjaWYgRU5BQkxFKFZJ
REVPKQorU3RyaW5nIGxvY2FsaXplZE1lZGlhQ29udHJvbEVsZW1lbnRTdHJpbmcoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCitTdHJpbmcgbG9jYWxpemVkTWVkaWFDb250cm9sRWxlbWVudEhlbHBUZXh0KGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworU3RyaW5nIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0aW9uKGZsb2F0IHRp
bWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cisj
ZW5kaWYKKworU3RyaW5nIG1lZGlhRWxlbWVudExvYWRpbmdTdGF0ZVRleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KCJMb2FkaW5nLi4uIik7Cit9CisKK1N0cmluZyBtZWRpYUVs
ZW1lbnRMaXZlQnJvYWRjYXN0U3RhdGVUZXh0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9t
VVRGOCgiTGl2ZSBCcm9hZGNhc3QiKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUGF0
dGVybk1pc21hdGNoVGV4dCgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInBhdHRl
cm4gbWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VPdmVyZmxv
d1RleHQoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgicmFu
Z2Ugb3ZlcmZsb3ciKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlUmFuZ2VVbmRlcmZs
b3dUZXh0KGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInJh
bmdlIHVuZGVyZmxvdyIpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VTdGVwTWlzbWF0
Y2hUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmlu
Zzo6ZnJvbVVURjgoInN0ZXAgbWlzbWF0Y2giKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNz
YWdlVG9vTG9uZ1RleHQoaW50LCBpbnQpCit7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
InRvbyBsb25nIik7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaFRl
eHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ0eXBlIG1pc21hdGNoIik7Cit9
CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvckVtYWlsVGV4dCgpCit7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoInR5cGUgbWlzbWF0Y2giKTsKK30KKworU3Ry
aW5nIHZhbGlkYXRpb25NZXNzYWdlVHlwZU1pc21hdGNoRm9yTXVsdGlwbGVFbWFpbFRleHQoKQor
eworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJ0eXBlIG1pc21hdGNoIik7Cit9CisKK1N0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVR5cGVNaXNtYXRjaEZvclVSTFRleHQoKQoreworICAgIHJl
dHVybiBTdHJpbmc6OmZyb21VVEY4KCJ0eXBlIG1pc21hdGNoIik7Cit9CisKK1N0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1RleHQoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KCJ2YWx1ZSBtaXNzaW5nIik7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZh
bHVlTWlzc2luZ0ZvckNoZWNrYm94VGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0cmlu
ZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvckZpbGVUZXh0KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ1Rl
eHQoKTsKK30KKworU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNzaW5nRm9yTXVsdGlw
bGVGaWxlVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdmFsaWRh
dGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0cmluZyB2YWxpZGF0aW9uTWVz
c2FnZVZhbHVlTWlzc2luZ0ZvclJhZGlvVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VWYWx1ZU1pc3NpbmdUZXh0KCk7Cit9CisKK1N0
cmluZyB2YWxpZGF0aW9uTWVzc2FnZVZhbHVlTWlzc2luZ0ZvclNlbGVjdFRleHQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlVmFsdWVNaXNz
aW5nVGV4dCgpOworfQorCitTdHJpbmcgbWlzc2luZ1BsdWdpblRleHQoKQoreworICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KCJtaXNzaW5nIHBsdWdpbiIpOworfQorCitTdHJpbmcgQVhNZW51
TGlzdFBvcHVwQWN0aW9uVmVyYigpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJp
bmcgQVhNZW51TGlzdEFjdGlvblZlcmIoKQoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
U3RyaW5nIG11bHRpcGxlRmlsZVVwbG9hZFRleHQodW5zaWduZWQgbnVtYmVyT2ZGaWxlcykKK3sK
KyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobnVtYmVyT2ZGaWxlcykgKyBTdHJpbmc6OmZyb21V
VEY4KCIgZmlsZXMiKTsKK30KKworU3RyaW5nIGNyYXNoZWRQbHVnaW5UZXh0KCkKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCgicGx1Z2luIGNyYXNoZWQiKTsKK30KKworU3RyaW5nIGJs
b2NrZWRQbHVnaW5CeUNvbnRlbnRTZWN1cml0eVBvbGljeVRleHQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgaW5zZWN1cmVQbHVn
aW5WZXJzaW9uVGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBpbmFjdGl2ZVBsdWdpblRleHQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgdW5hY2NlcHRhYmxl
VExTQ2VydGlmaWNhdGUoKQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KCJVbmFjY2Vw
dGFibGUgVExTIGNlcnRpZmljYXRlIik7Cit9CisKK1N0cmluZyBsb2NhbGl6ZWRTdHJpbmcoY29u
c3QgY2hhcioga2V5KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGtleSwgc3RybGVu
KGtleSkpOworfQorCitTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2VCYWRJbnB1dEZvck51bWJlclRl
eHQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHZhbGlkYXRpb25NZXNz
YWdlVHlwZU1pc21hdGNoVGV4dCgpOworfQorCitTdHJpbmcgc25hcHNob3R0ZWRQbHVnSW5MYWJl
bFRpdGxlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBzbmFwc2hvdHRlZFBsdWdJbkxh
YmVsU3VidGl0bGUoKSB7IHJldHVybiBTdHJpbmcoKTsgfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uaXgvTUlNRVR5cGVSZWdpc3RyeU5peC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhNTg2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25peC9NSU1FVHlwZVJlZ2lzdHJ5Tml4LmNwcApAQCAtMCwwICsx
LDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBFeHRlbnNpb25NYXAgeworICAgIGNvbnN0IGNoYXIqIGV4dGVu
c2lvbjsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKK307CisKK3N0YXRpYyBjb25zdCBFeHRl
bnNpb25NYXAgZXh0ZW5zaW9uTWFwW10gPSB7CisgICAgeyAiYm1wIiwgImltYWdlL2JtcCIgfSwK
KyAgICB7ICJjc3MiLCAidGV4dC9jc3MiIH0sCisgICAgeyAiZ2lmIiwgImltYWdlL2dpZiIgfSwK
KyAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJodG0iLCAidGV4dC9odG1sIiB9
LAorICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sCisgICAgeyAianBlZyIsICJpbWFnZS9q
cGVnIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpzIiwgImFwcGxp
Y2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJtbmciLCAidmlkZW8veC1tbmciIH0sCisg
ICAgeyAicGJtIiwgImltYWdlL3gtcG9ydGFibGUtYml0bWFwIiB9LAorICAgIHsgInBnbSIsICJp
bWFnZS94LXBvcnRhYmxlLWdyYXltYXAiIH0sCisgICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3Bk
ZiIgfSwKKyAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAorICAgIHsgInBwbSIsICJpbWFnZS94
LXBvcnRhYmxlLXBpeG1hcCIgfSwKKyAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIg
fSwKKyAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAgICB7ICJ0ZXh0IiwgInRleHQv
cGxhaW4iIH0sCisgICAgeyAidGlmIiwgImltYWdlL3RpZmYiIH0sCisgICAgeyAidGlmZiIsICJp
bWFnZS90aWZmIiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInhibSIs
ICJpbWFnZS94LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwgInRleHQveG1sIiB9LAorICAgIHsg
InhwbSIsICJpbWFnZS94LXhwbSIgfSwKKyAgICB7ICJ4c2wiLCAidGV4dC94c2wiIH0sCisgICAg
eyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAgIHsgIndtbCIsICJ0ZXh0
L3ZuZC53YXAud21sIiB9LAorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndhcC53bWxj
IiB9LAorICAgIHsgMCwgMCB9Cit9OworCitTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIFN0cmluZyBzID0gZXh0Lmxvd2VyKCk7CisgICAgY29uc3QgRXh0
ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9uTWFwOworICAgIHdoaWxlIChlLT5leHRlbnNpb24pIHsK
KyAgICAgICAgaWYgKHMgPT0gZS0+ZXh0ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJuIGUtPm1p
bWVUeXBlOworICAgICAgICArK2U7CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
Citib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzQXBwbGljYXRpb25QbHVnaW5NSU1FVHlwZShjb25z
dCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L05peEtleWJvYXJkVXRpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25peC9OaXhLZXlib2FyZFV0aWxpdGllcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyNTE0YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9OaXhLZXlib2FyZFV0aWxpdGllcy5jcHAKQEAgLTAs
MCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaXhLZXlib2FyZFV0aWxpdGllcy5oIgorCisjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBLZXlNYXA7Cit0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBpbnQ+IFdpbmRvd3NLZXlNYXA7Cit0eXBlZGVmIEhhc2hNYXA8aW50LCBj
b25zdCBjaGFyKj4gS2V5Q29tbWFuZE1hcDsKKworc3RhdGljIEtleU1hcCYga2V5TWFwKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEtleU1hcCwga2V5TWFwLCAoKSk7CisgICAgcmV0dXJu
IGtleU1hcDsKK30KKworc3RhdGljIFdpbmRvd3NLZXlNYXAmIHdpbmRvd3NLZXlNYXAoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2luZG93c0tleU1hcCwgd2luZG93c0tleU1hcCwgKCkp
OworICAgIHJldHVybiB3aW5kb3dzS2V5TWFwOworfQorCitzdGF0aWMgS2V5Q29tbWFuZE1hcCYg
a2V5RG93bkNvbW1hbmRzTWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEtleUNvbW1h
bmRNYXAsIGtleURvd25Db21tYW5kc01hcCwgKCkpOworICAgIHJldHVybiBrZXlEb3duQ29tbWFu
ZHNNYXA7Cit9CisKK3N0YXRpYyBLZXlDb21tYW5kTWFwJiBrZXlQcmVzc0NvbW1hbmRzTWFwKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEtleUNvbW1hbmRNYXAsIGtleVByZXNzQ29tbWFu
ZHNNYXAsICgpKTsKKyAgICByZXR1cm4ga2V5UHJlc3NDb21tYW5kc01hcDsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGFkZENoYXJhY3RlcnNUb0tleU1hcChjb25zdCBjaGFyIGZyb20sIGNvbnN0
IGNoYXIgdG8pCit7CisgICAgZm9yIChjaGFyIGMgPSBmcm9tOyBjIDw9IHRvOyBjKyspCisgICAg
ICAgIGtleU1hcCgpLnNldChTdHJpbmcoJmMsIDEpLCBTdHJpbmc6OmZvcm1hdCgiVSslMDRYIiwg
YykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkQ2hhcmFjdGVyc1RvV2luS2V5TWFwKGNv
bnN0IGNoYXIgZnJvbSwgY29uc3QgY2hhciB0bywgY29uc3QgaW50IGJhc2VDb2RlKQoreworICAg
IGludCBpID0gMDsKKyAgICBmb3IgKGNoYXIgYyA9IGZyb207IGMgPD0gdG87IGMrKywgaSsrKQor
ICAgICAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KFN0cmluZygmYywgMSksIGJhc2VDb2RlICsgaSk7
Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOworc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEFsdEtleSA9IDEgPDwgMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBTaGlm
dEtleSA9IDEgPDwgMjsKKworc3RydWN0IEtleURvd25FbnRyeSB7CisgICAgdW5zaWduZWQgdmly
dHVhbEtleTsKKyAgICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgY29uc3QgY2hhciogbmFtZTsK
K307CisKK3N0cnVjdCBLZXlQcmVzc0VudHJ5IHsKKyAgICB1bnNpZ25lZCBjaGFyQ29kZTsKKyAg
ICB1bnNpZ25lZCBtb2RpZmllcnM7CisgICAgY29uc3QgY2hhciogbmFtZTsKK307CisKK3N0YXRp
YyBjb25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsKKyAgICB7IFZLX0xFRlQs
ICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQsICAgU2hpZnRLZXksICAgICAgICAgICAiTW92
ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xF
RlQsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0xFRlQsICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAi
TW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgfSwKKyAgICB7IFZL
X1JJR0hULCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJR0hULCAgU2hpZnRLZXksICAgICAgICAg
ICAiTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgfSwKKyAgICB7
IFZLX1JJR0hULCAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1JJR0hULCAgQ3RybEtleSB8IFNoaWZ0
S2V5LCAiTW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKKyAg
ICB7IFZLX1VQLCAgICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVVwIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX1VQLCAgICAgU2hpZnRLZXksICAg
ICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICB7IFZLX1BSSU9SLCAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlm
eVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0RPV04sICAgMCwgICAgICAg
ICAgICAgICAgICAiTW92ZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICB7IFZLX0RPV04sICAgU2hpZnRLZXksICAgICAgICAgICAiTW92ZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX05FWFQsICAgU2hpZnRL
ZXksICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAg
ICAgfSwKKyAgICB7IFZLX1BSSU9SLCAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX05FWFQsICAgMCwg
ICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAgMCwgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVn
aW5uaW5nT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAg
U2hpZnRLZXksICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgfSwKKyAgICB7IFZLX0hPTUUsICAgQ3RybEtleSwgICAgICAgICAgICAiTW92ZVRv
QmVnaW5uaW5nT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IFZLX0hPTUUs
ICAgQ3RybEtleSB8IFNoaWZ0S2V5LCAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlm
eVNlbGVjdGlvbiIgfSwKKworICAgIHsgVktfRU5ELCAgICAwLCAgICAgICAgICAgICAgICAgICJN
b3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
RU5ELCAgICBTaGlmdEtleSwgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxl
Y3Rpb24iICAgICAgICAgICB9LAorICAgIHsgVktfRU5ELCAgICBDdHJsS2V5LCAgICAgICAgICAg
ICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfRU5ELCAgICBDdHJsS2V5IHwgU2hpZnRLZXksICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9k
aWZ5U2VsZWN0aW9uIiAgICAgICB9LAorCisgICAgeyBWS19CQUNLLCAgIDAsICAgICAgICAgICAg
ICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgeyBWS19CQUNLLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIDAsICAgICAgICAg
ICAgICAgICAgIkRlbGV0ZUZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgeyBWS19CQUNLLCAgIEN0cmxLZXksICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2Fy
ZCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBWS19ERUxFVEUsIEN0cmxLZXks
ICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCisKKyAgICB7ICdCJywgICAgICAgQ3RybEtleSwgICAgICAgICAgICAiVG9nZ2xlQm9sZCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7ICdJJywgICAgICAgQ3Ry
bEtleSwgICAgICAgICAgICAiVG9nZ2xlSXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKworICAgIHsgVktfRVNDQVBFLCAwLCAgICAgICAgICAgICAgICAgICJDYW5jZWwi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfT0VNX1BF
UklPRCwgQ3RybEtleSwgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgIHsgVktfVEFCLCAgICAwLCAgICAgICAgICAgICAgICAgICJJbnNl
cnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfVEFC
LCAgICBTaGlmdEtleSwgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCAwLCAgICAgICAgICAgICAgICAgICJJ
bnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktf
UkVUVVJOLCBDdHJsS2V5LCAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgIHsgVktfUkVUVVJOLCBBbHRLZXksICAgICAgICAgICAg
ICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsg
VktfUkVUVVJOLCBBbHRLZXkgfCBTaGlmdEtleSwgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkg
a2V5UHJlc3NFbnRyaWVzW10gPSB7CisgICAgeyAnXHQnLCAgIDAsICAgICAgICAgICAgICAgICAg
Ikluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAn
XHQnLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIDAsICAgICAgICAgICAgICAgICAgIklu
c2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHIn
LCAgIEN0cmxLZXksICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAgIEFsdEtleSwgICAgICAgICAgICAgIkluc2Vy
dE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyAnXHInLCAg
IEFsdEtleSB8IFNoaWZ0S2V5LCAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCit9OworCitzdGF0aWMgdm9pZCBjcmVhdGVLZXlEb3duQ29tbWFuZE1hcCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGtleURvd25F
bnRyaWVzKTsgKytpKQorICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAoKS5zZXQoa2V5RG93bkVu
dHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5RG93bkVudHJpZXNbaV0udmlydHVhbEtleSwg
a2V5RG93bkVudHJpZXNbaV0ubmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUtleVByZXNz
Q29tbWFuZE1hcCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVO
R1RIKGtleVByZXNzRW50cmllcyk7ICsraSkKKyAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcCgp
LnNldChrZXlQcmVzc0VudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVz
W2ldLmNoYXJDb2RlLCBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7Cit9CisKK2NvbnN0IGNoYXIq
IGdldEtleURvd25Db21tYW5kTmFtZShjb25zdCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAg
ICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAg
ICAgICAgbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OworICAgIGlmIChldmVudC0+YWx0S2V5KCkpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisg
ICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5OworCisgICAgaW50IG1hcEtleSA9IG1vZGlmaWVy
cyA8PCAxNiB8IGV2ZW50LT5rZXlDb2RlKCk7CisgICAgaWYgKCFtYXBLZXkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKGtleURvd25Db21tYW5kc01hcCgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgY3JlYXRlS2V5RG93bkNvbW1hbmRNYXAoKTsKKworICAgIHJldHVybiBrZXlEb3duQ29tbWFu
ZHNNYXAoKS5nZXQobWFwS2V5KTsKK30KKworY29uc3QgY2hhciogZ2V0S2V5UHJlc3NDb21tYW5k
TmFtZShjb25zdCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICB1bnNpZ25lZCBtb2RpZmll
cnMgPSAwOworICAgIGlmIChldmVudC0+c2hpZnRLZXkoKSkKKyAgICAgICAgbW9kaWZpZXJzIHw9
IFNoaWZ0S2V5OworICAgIGlmIChldmVudC0+YWx0S2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBBbHRLZXk7CisgICAgaWYgKGV2ZW50LT5jdHJsS2V5KCkpCisgICAgICAgIG1vZGlmaWVycyB8
PSBDdHJsS2V5OworCisgICAgaW50IG1hcEtleSA9IG1vZGlmaWVycyA8PCAxNiB8IGV2ZW50LT5j
aGFyQ29kZSgpOworICAgIGlmICghbWFwS2V5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
IChrZXlQcmVzc0NvbW1hbmRzTWFwKCkuaXNFbXB0eSgpKQorICAgICAgICBjcmVhdGVLZXlQcmVz
c0NvbW1hbmRNYXAoKTsKKworICAgIHJldHVybiBrZXlQcmVzc0NvbW1hbmRzTWFwKCkuZ2V0KG1h
cEtleSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25peC9OaXhLZXlib2FyZFV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbml4L05peEtleWJvYXJkVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzI1NjEwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25peC9OaXhLZXlib2FyZFV0aWxpdGllcy5oCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTml4S2V5Ym9h
cmRVdGlsaXRpZXNfaAorI2RlZmluZSBOaXhLZXlib2FyZFV0aWxpdGllc19oCisKK25hbWVzcGFj
ZSBXVEYgeworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEtleWJvYXJkRXZlbnQ7CisKK2NvbnN0IGNoYXIqIGdldEtleURvd25Db21tYW5kTmFtZShjb25z
dCBLZXlib2FyZEV2ZW50Kik7Citjb25zdCBjaGFyKiBnZXRLZXlQcmVzc0NvbW1hbmROYW1lKGNv
bnN0IEtleWJvYXJkRXZlbnQqKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gTml4S2V5Ym9hcmRVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbml4L1Bhc3RlYm9hcmROaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4
L1Bhc3RlYm9hcmROaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4
M2NkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvUGFz
dGVib2FyZE5peC5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJ
bnN0aXR1dG8gTm9raWEgZGUgVGVjbm9sb2dpYQorICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAg
U2Ftc3VuZyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKQoreworICAg
IHN0YXRpYyBQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQoKTsKKyAgICBy
ZXR1cm4gcGFzdGVib2FyZDsKK30KKworUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChj
b25zdCBTdHJpbmcmLCBTbWFydFJlcGxhY2VPcHRpb24pCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wsIEZy
YW1lKiwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVVUkwoY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6
d3JpdGVDbGlwYm9hcmQoQ2xpcGJvYXJkKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Citib29sIFBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+
LCBib29sLCBib29sJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc093blB0cjxQYXN0ZWJv
YXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgUGFzdGVib2FyZCk7Cit9CisKK1Bhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFz
dGVib2FyZDo6Y3JlYXRlUHJpdmF0ZSgpCit7CisgICAgcmV0dXJuIGNyZWF0ZUZvckNvcHlBbmRQ
YXN0ZSgpOworfQorCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKK1Bhc3NPd25QdHI8UGFzdGVi
b2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoKQoreworICAgIHJldHVybiBj
cmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsKK30KKworUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0
ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChjb25zdCBEcmFnRGF0YSYpCit7CisgICAgcmV0
dXJuIGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOworfQorI2VuZGlmCisKK2Jvb2wgUGFzdGVib2Fy
ZDo6aGFzRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitib29sIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K0xpc3RIYXNoU2V0PFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXMoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKK30KKworVmVjdG9y
PFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKK30KKworI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCit2b2lkIFBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZShEcmFnSW1hZ2VSZWYsIGNv
bnN0IEludFBvaW50JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKK3Zv
aWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25peC9QbGF0Zm9ybUtleWJvYXJkRXZlbnROaXguY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbml4L1BsYXRmb3JtS2V5Ym9hcmRFdmVudE5peC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwZWY2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25peC9QbGF0Zm9ybUtleWJvYXJkRXZlbnROaXguY3BwCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGllZ28gSGlkYWxnbyBD
LiBHb256YWxlegorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sKQorewor
ICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5RG93bik7CisgICAgbV90eXBlID0gdHlwZTsKKworICAg
IGlmICh0eXBlID09IFBsYXRmb3JtRXZlbnQ6OlJhd0tleURvd24pIHsKKyAgICAgICAgbV90ZXh0
ID0gU3RyaW5nKCk7CisgICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBTdHJpbmcoKTsKKyAgICAgICAgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUgPSAwOworICAgIH0KK30KKworYm9vbCBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Omdl
dEN1cnJlbnRNb2RpZmllclN0YXRlKGJvb2wmIHNoaWZ0S2V5LCBib29sJiBjdHJsS2V5LCBib29s
JiBhbHRLZXksIGJvb2wmIG1ldGFLZXkpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBz
aGlmdEtleSA9IGZhbHNlOworICAgIGN0cmxLZXkgPSBmYWxzZTsKKyAgICBhbHRLZXkgPSBmYWxz
ZTsKKyAgICBtZXRhS2V5ID0gZmFsc2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25peC9QbGF0Zm9ybVNjcmVlbk5peC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uaXgvUGxhdGZvcm1TY3JlZW5OaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI4ZGMyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uaXgvUGxhdGZvcm1TY3JlZW5OaXguY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TY3JlZW4uaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVk
ZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworaW50IHNjcmVlbkhvcml6b250YWxEUEkoV2lkZ2V0KikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgc2NyZWVuVmVydGljYWxE
UEkoV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
CitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCitpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitib29sIHNjcmVlbklz
TW9ub2Nocm9tZShXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAxMDI0LCA3NjgpOworfQor
CitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBzY3JlZW5SZWN0KHdpZGdldCk7Cit9CisKK3Zv
aWQgc2NyZWVuQ29sb3JQcm9maWxlKENvbG9yUHJvZmlsZSYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1Jl
bmRlclRoZW1lTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9SZW5kZXJUaGVt
ZU5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxMDdhYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9SZW5kZXJUaGVtZU5p
eC5jcHAKQEAgLTAsMCArMSw0NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVOaXguaCIKKworI2luY2x1
ZGUgIklucHV0VHlwZU5hbWVzLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViQ2FudmFzLmgiCisj
aW5jbHVkZSAicHVibGljL1dlYlRoZW1lRW5naW5lLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlJl
Y3QuaCIKKyNpbmNsdWRlICJwdWJsaWMvUGxhdGZvcm0uaCIKKyNpZiBFTkFCTEUoUFJPR1JFU1Nf
RUxFTUVOVCkKKyNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgorI2VuZGlmCisjaWYgRU5BQkxF
KE1FVEVSX0VMRU1FTlQpCisjaW5jbHVkZSAiUmVuZGVyTWV0ZXIuaCIKKyNpbmNsdWRlICJIVE1M
TWV0ZXJFbGVtZW50LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZGVmYXVsdEJ1dHRvbkJhY2tncm91bmRDb2xvciA9IDB4ZmZkZGRkZGQ7
CisKK3N0YXRpYyB2b2lkIHNldFNpemVJZkF1dG8oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQp
KTsKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworfQorCitDb2xvciB0b0NvbG9y
KGNvbnN0IFdlYktpdDo6V2ViQ29sb3ImIGNvbG9yKQoreworICAgIHJldHVybiBXZWJDb3JlOjpD
b2xvcihSR0JBMzIoY29sb3IpKTsKK30KKworc3RhdGljIFdlYktpdDo6V2ViVGhlbWVFbmdpbmUq
IHRoZW1lRW5naW5lKCkKK3sKKyAgICByZXR1cm4gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT50aGVtZUVuZ2luZSgpOworfQorCitzdGF0aWMgV2ViS2l0OjpXZWJDYW52YXMqIHdlYkNhbnZh
cyhjb25zdCBQYWludEluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSopCit7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lTml4
OjpjcmVhdGUoKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVOaXg6
OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZU5peCk7Cit9
CisKK1JlbmRlclRoZW1lTml4OjpSZW5kZXJUaGVtZU5peCgpCisgICAgOiBSZW5kZXJUaGVtZSgp
Cit7Cit9CisKK1JlbmRlclRoZW1lTml4Ojp+UmVuZGVyVGhlbWVOaXgoKQoreworCit9CisKK1N0
cmluZyBSZW5kZXJUaGVtZU5peDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCit7CisgICAgcmV0
dXJuIHRoZW1lRW5naW5lKCktPmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKK30KKworU3RyaW5n
IFJlbmRlclRoZW1lTml4OjpleHRyYVF1aXJrc1N0eWxlU2hlZXQoKQoreworICAgIHJldHVybiB0
aGVtZUVuZ2luZSgpLT5leHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKK30KKworU3RyaW5nIFJlbmRl
clRoZW1lTml4OjpleHRyYVBsdWdJbnNTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gdGhlbWVF
bmdpbmUoKS0+ZXh0cmFQbHVnSW5zU3R5bGVTaGVldCgpOworfQorCitDb2xvciBSZW5kZXJUaGVt
ZU5peDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIHJldHVybiB0b0NvbG9yKHRoZW1lRW5naW5lKCktPmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVOaXg6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiB0b0NvbG9yKHRo
ZW1lRW5naW5lKCktPmluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworfQorCitD
b2xvciBSZW5kZXJUaGVtZU5peDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiB0b0NvbG9yKHRoZW1lRW5naW5lKCktPmFjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVOaXg6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiB0b0NvbG9yKHRoZW1lRW5naW5lKCktPmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkpOworfQorCitDb2xvciBSZW5kZXJUaGVtZU5peDo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG9Db2xvcih0
aGVtZUVuZ2luZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwor
fQorCitDb2xvciBSZW5kZXJUaGVtZU5peDo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiB0b0NvbG9yKHRoZW1lRW5n
aW5lKCktPmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKK30KKwor
Q29sb3IgUmVuZGVyVGhlbWVOaXg6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvQ29sb3IodGhlbWVFbmdpbmUoKS0+
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpKTsKK30KKworQ29sb3IgUmVu
ZGVyVGhlbWVOaXg6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdG9Db2xvcih0aGVtZUVuZ2luZSgpLT5pbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSk7Cit9CisKK0NvbG9yIFJlbmRlclRo
ZW1lTml4OjpwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRvQ29sb3IodGhlbWVFbmdpbmUoKS0+YWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yKCkpOworfQorCitDb2xvciBSZW5kZXJUaGVtZU5peDo6cGxhdGZvcm1JbmFjdGl2
ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvQ29sb3Io
dGhlbWVFbmdpbmUoKS0+aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoKSk7Cit9CisK
K0NvbG9yIFJlbmRlclRoZW1lTml4OjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdG9Db2xvcih0aGVtZUVuZ2luZSgpLT5mb2N1c1JpbmdDb2xvcigpKTsgICAK
K30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitDb2xvciBSZW5kZXJUaGVtZU5peDo6cGxh
dGZvcm1UYXBIaWdobGlnaHRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvQ29sb3IodGhl
bWVFbmdpbmUoKS0+dGFwSGlnaGxpZ2h0Q29sb3IoKSk7Cit9CisjZW5kaWYKKwordm9pZCBSZW5k
ZXJUaGVtZU5peDo6c3lzdGVtRm9udChXZWJDb3JlOjpDU1NWYWx1ZUlELCBGb250RGVzY3JpcHRp
b24mKSBjb25zdAoreworfQorCitzdGF0aWMgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6U3RhdGUg
Z2V0V2ViVGhlbWVTdGF0ZShjb25zdCBSZW5kZXJUaGVtZSogdGhlbWUsIGNvbnN0IFJlbmRlck9i
amVjdCogbykKK3sKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQobykpCisgICAgICAgIHJldHVy
biBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVkOworICAgIGlmICh0aGVtZS0+
aXNQcmVzc2VkKG8pKQorICAgICAgICByZXR1cm4gV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6U3Rh
dGVQcmVzc2VkOworICAgIGlmICh0aGVtZS0+aXNIb3ZlcmVkKG8pKQorICAgICAgICByZXR1cm4g
V2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6U3RhdGVIb3ZlcjsKKworICAgIHJldHVybiBXZWJLaXQ6
OldlYlRoZW1lRW5naW5lOjpTdGF0ZU5vcm1hbDsKK30KKworYm9vbCBSZW5kZXJUaGVtZU5peDo6
cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZTo6QnV0dG9uRXh0cmFQ
YXJhbXMgZXh0cmFQYXJhbXM7CisgICAgZXh0cmFQYXJhbXMuaXNEZWZhdWx0ID0gaXNEZWZhdWx0
KG8pOworICAgIGV4dHJhUGFyYW1zLmhhc0JvcmRlciA9IHRydWU7CisgICAgZXh0cmFQYXJhbXMu
YmFja2dyb3VuZENvbG9yID0gZGVmYXVsdEJ1dHRvbkJhY2tncm91bmRDb2xvcjsKKyAgICBpZiAo
by0+aGFzQmFja2dyb3VuZCgpKQorICAgICAgICBleHRyYVBhcmFtcy5iYWNrZ3JvdW5kQ29sb3Ig
PSBvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IpLnJnYigpOworCisgICAgdGhlbWVFbmdpbmUoKS0+cGFpbnRCdXR0b24od2ViQ2FudmFz
KGkpLCBnZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8pLCBXZWJLaXQ6OldlYlJlY3QocmVjdCksIGV4
dHJhUGFyYW1zKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVOaXg6
OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIFdlYlRoZW1lRW5naW5lIGRvZXMgbm90IGhhbmRs
ZSBib3JkZXIgcm91bmRlZCBjb3JuZXIgYW5kIGJhY2tncm91bmQgaW1hZ2UKKyAgICAvLyBzbyBy
ZXR1cm4gdHJ1ZSB0byBkcmF3IENTUyBib3JkZXIgYW5kIGJhY2tncm91bmQuCisgICAgaWYgKG8t
PnN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpIHx8IG8tPnN0eWxlKCktPmhhc0JhY2tncm91bmRJ
bWFnZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHRoZW1lRW5naW5lKCktPnBhaW50
VGV4dEZpZWxkKHdlYkNhbnZhcyhpKSwgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlzLCBvKSwgV2ViS2l0
OjpXZWJSZWN0KHJlY3QpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVOaXg6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHJlY3QpOworfQorCitib29sIFJlbmRlclRoZW1lTml4OjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OkJ1dHRvbkV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOwor
ICAgIGV4dHJhUGFyYW1zLmNoZWNrZWQgPSBpc0NoZWNrZWQobyk7CisgICAgZXh0cmFQYXJhbXMu
aW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0ZShvKTsKKworICAgIHRoZW1lRW5naW5lKCkt
PnBhaW50Q2hlY2tib3god2ViQ2FudmFzKGkpLCBnZXRXZWJUaGVtZVN0YXRlKHRoaXMsIG8pLCBX
ZWJLaXQ6OldlYlJlY3QocmVjdCksIGV4dHJhUGFyYW1zKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVOaXg6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSBzaXplID0gdGhlbWVFbmdpbmUoKS0+Z2V0Q2hl
Y2tib3hTaXplKCk7CisgICAgc2V0U2l6ZUlmQXV0byhzdHlsZSwgc2l6ZSk7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVOaXg6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgV2ViS2l0OjpXZWJUaGVtZUVuZ2lu
ZTo6QnV0dG9uRXh0cmFQYXJhbXMgZXh0cmFQYXJhbXM7CisgICAgZXh0cmFQYXJhbXMuY2hlY2tl
ZCA9IGlzQ2hlY2tlZChvKTsKKyAgICBleHRyYVBhcmFtcy5pbmRldGVybWluYXRlID0gaXNJbmRl
dGVybWluYXRlKG8pOworCisgICAgdGhlbWVFbmdpbmUoKS0+cGFpbnRSYWRpbyh3ZWJDYW52YXMo
aSksIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIFdlYktpdDo6V2ViUmVjdChyZWN0KSwgZXh0
cmFQYXJhbXMpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU5peDo6
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5n
IHRvIGRvLgorICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
c3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRTaXpl
IHNpemUgPSB0aGVtZUVuZ2luZSgpLT5nZXRSYWRpb1NpemUoKTsKKyAgICBzZXRTaXplSWZBdXRv
KHN0eWxlLCBzaXplKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZU5peDo6cGFpbnRNZW51TGlzdChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICB0aGVtZUVuZ2luZSgpLT5wYWludE1lbnVMaXN0KHdlYkNhbnZhcyhpKSwgZ2V0V2Vi
VGhlbWVTdGF0ZSh0aGlzLCBvKSwgV2ViS2l0OjpXZWJSZWN0KHJlY3QpKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVOaXg6OmFkanVzdE1lbnVMaXN0U3R5bGUoU3R5
bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKwor
ICAgIGludCBwYWRkaW5nVG9wID0gMDsKKyAgICBpbnQgcGFkZGluZ0xlZnQgPSAwOworICAgIGlu
dCBwYWRkaW5nQm90dG9tID0gMDsKKyAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gMDsKKyAgICB0aGVt
ZUVuZ2luZSgpLT5nZXRNZW51TGlzdFBhZGRpbmcocGFkZGluZ1RvcCwgcGFkZGluZ0xlZnQsIHBh
ZGRpbmdCb3R0b20sIHBhZGRpbmdSaWdodCk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVu
Z3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5n
dGgocGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExl
bmd0aChwYWRkaW5nQm90dG9tLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfRUxF
TUVOVCkKK3ZvaWQgUmVuZGVyVGhlbWVOaXg6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoU3R5bGVS
ZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCAqKSBjb25zdAoreworICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVOaXg6OnBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzID0g
dG9SZW5kZXJQcm9ncmVzcyhvKTsKKyAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpQcm9ncmVz
c0JhckV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOworICAgIGV4dHJhUGFyYW1zLmlzRGV0ZXJtaW5h
dGUgPSByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpOworICAgIGV4dHJhUGFyYW1zLnBv
c2l0aW9uID0gcmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCk7CisgICAgZXh0cmFQYXJhbXMuYW5p
bWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKTsKKyAg
ICBleHRyYVBhcmFtcy5hbmltYXRpb25TdGFydFRpbWUgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0
aW9uU3RhcnRUaW1lKCk7CisgICAgdGhlbWVFbmdpbmUoKS0+cGFpbnRQcm9ncmVzc0Jhcih3ZWJD
YW52YXMoaSksIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIFdlYktpdDo6V2ViUmVjdChyZWN0
KSwgZXh0cmFQYXJhbXMpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgUmVuZGVy
VGhlbWVOaXg6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqKSBjb25zdAoreworICAgIHJldHVybiB0aGVtZUVuZ2luZSgpLT5nZXRBbmltYXRpb25S
ZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKCk7Cit9CisKK2RvdWJsZSBSZW5kZXJUaGVtZU5p
eDo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
Cit7CisgICAgcmV0dXJuIHRoZW1lRW5naW5lKCktPmdldEFuaW1hdGlvbkR1cmF0aW9uRm9yUHJv
Z3Jlc3NCYXIoKTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1lTml4OjpwYWludFNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgdGhlbWVFbmdpbmUoKS0+cGFpbnRTbGlkZXJUcmFjayh3
ZWJDYW52YXMoaW5mbyksIGdldFdlYlRoZW1lU3RhdGUodGhpcywgb2JqZWN0KSwgcmVjdCk7Cisj
aWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisgICAgcGFpbnRTbGlkZXJUaWNrcyhvYmplY3Qs
IGluZm8sIHJlY3QpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRl
clRoZW1lTml4OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3co
bnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVOaXg6OnBhaW50U2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICB0aGVtZUVuZ2luZSgpLT5wYWludFNsaWRlclRodW1iKHdlYkNhbnZhcyhp
bmZvKSwgZ2V0V2ViVGhlbWVTdGF0ZSh0aGlzLCBvYmplY3QpLCByZWN0KTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU5peDo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1i
U3R5bGUoc3R5bGVSZXNvbHZlciwgc3R5bGUsIGVsZW1lbnQpOworICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7Cit9CisKK2NvbnN0IGludCBTTElERVJfVEhVTUJfV0lEVEggPSAxMDsK
K2NvbnN0IGludCBTTElERVJfVEhVTUJfSEVJR0hUID0gMjA7CisKK3ZvaWQgUmVuZGVyVGhlbWVO
aXg6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOworICAg
IGlmIChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5z
ZXRXaWR0aChMZW5ndGgoU0xJREVSX1RIVU1CX1dJRFRILCBGaXhlZCkpOworICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aChTTElERVJfVEhVTUJfSEVJR0hULCBGaXhlZCkpOworICAgIH0g
ZWxzZSBpZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0KSB7CisgICAgICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgoU0xJREVSX1RIVU1CX1dJRFRILCBGaXhlZCkpOworICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChTTElERVJfVEhVTUJfSEVJR0hULCBGaXhlZCkpOwor
ICAgIH0KK30KKworI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorSW50U2l6ZSBSZW5kZXJU
aGVtZU5peDo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKDEs
IDYpOworfQorCitpbnQgUmVuZGVyVGhlbWVOaXg6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tD
ZW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiAtMTI7Cit9CisKK0xheW91dFVuaXQgUmVuZGVy
VGhlbWVOaXg6OnNsaWRlclRpY2tTbmFwcGluZ1RocmVzaG9sZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVOaXg6OnN1cHBvcnRzRGF0YUxpc3RVSShjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW5wdXRU
eXBlTmFtZXM6OnJhbmdlKCk7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJUaGVtZU5peDo6YWRq
dXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5
bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKworICAgIGludCBwYWRkaW5nVG9wID0gMDsKKyAgICBp
bnQgcGFkZGluZ0xlZnQgPSAwOworICAgIGludCBwYWRkaW5nQm90dG9tID0gMDsKKyAgICBpbnQg
cGFkZGluZ1JpZ2h0ID0gMDsKKyAgICB0aGVtZUVuZ2luZSgpLT5nZXRJbm5lclNwaW5CdXR0b25Q
YWRkaW5nKHBhZGRpbmdUb3AsIHBhZGRpbmdMZWZ0LCBwYWRkaW5nQm90dG9tLCBwYWRkaW5nUmln
aHQpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nVG9wLCBGaXhlZCkp
OworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4
ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhl
ZCkpOworfQorCitib29sIFJlbmRlclRoZW1lTml4OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpJbm5lclNwaW5CdXR0b25FeHRyYVBhcmFtcyBl
eHRyYVBhcmFtczsKKyAgICBleHRyYVBhcmFtcy5zcGluVXAgPSBpc1NwaW5VcEJ1dHRvblBhcnRQ
cmVzc2VkKG8pOworICAgIGV4dHJhUGFyYW1zLnJlYWRPbmx5ID0gaXNSZWFkT25seUNvbnRyb2wo
byk7CisKKyAgICB0aGVtZUVuZ2luZSgpLT5wYWludElubmVyU3BpbkJ1dHRvbih3ZWJDYW52YXMo
aSksIGdldFdlYlRoZW1lU3RhdGUodGhpcywgbyksIFdlYktpdDo6V2ViUmVjdChyZWN0KSwgZXh0
cmFQYXJhbXMpOworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShNRVRFUl9FTEVN
RU5UKQordm9pZCBSZW5kZXJUaGVtZU5peDo6YWRqdXN0TWV0ZXJTdHlsZShTdHlsZVJlc29sdmVy
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworfQorCitJbnRTaXplIFJlbmRlclRoZW1lTml4OjptZXRlclNp
emVGb3JCb3VuZHMoY29uc3QgUmVuZGVyTWV0ZXIqLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJvdW5kcy5zaXplKCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVO
aXg6OnN1cHBvcnRzTWV0ZXIoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHBhcnQpIHsKKyAgICBjYXNlIFJlbGV2YW5jeUxldmVsSW5kaWNhdG9yUGFydDoKKyAgICBjYXNl
IERpc2NyZXRlQ2FwYWNpdHlMZXZlbEluZGljYXRvclBhcnQ6CisgICAgY2FzZSBSYXRpbmdMZXZl
bEluZGljYXRvclBhcnQ6CisgICAgY2FzZSBNZXRlclBhcnQ6CisgICAgY2FzZSBDb250aW51b3Vz
Q2FwYWNpdHlMZXZlbEluZGljYXRvclBhcnQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVOaXg6OnBhaW50TWV0ZXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFvLT5pc01ldGVyKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgUmVuZGVyTWV0ZXIqIHJlbmRlck1ldGVyID0gdG9SZW5kZXJNZXRl
cihvKTsKKyAgICBIVE1MTWV0ZXJFbGVtZW50KiBlID0gcmVuZGVyTWV0ZXItPm1ldGVyRWxlbWVu
dCgpOworICAgIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6Ok1ldGVyRXh0cmFQYXJhbXMgZXh0cmFQ
YXJhbXM7CisgICAgZXh0cmFQYXJhbXMubWluID0gZS0+bWluKCk7CisgICAgZXh0cmFQYXJhbXMu
bWF4ID0gZS0+bWF4KCk7CisgICAgZXh0cmFQYXJhbXMudmFsdWUgPSBlLT52YWx1ZSgpOworICAg
IGV4dHJhUGFyYW1zLmxvdyA9IGUtPmxvdygpOworICAgIGV4dHJhUGFyYW1zLmhpZ2ggPSBlLT5o
aWdoKCk7CisgICAgZXh0cmFQYXJhbXMub3B0aW11bSA9IGUtPm9wdGltdW0oKTsKKworICAgIHRo
ZW1lRW5naW5lKCktPnBhaW50TWV0ZXIod2ViQ2FudmFzKGkpLCBnZXRXZWJUaGVtZVN0YXRlKHRo
aXMsIG8pLCByZWN0LCBleHRyYVBhcmFtcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1JlbmRlclRo
ZW1lTml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvUmVuZGVyVGhlbWVOaXguaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzkzNmE5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1JlbmRlclRoZW1lTml4LmgKQEAgLTAs
MCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRl
clRoZW1lTml4X2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVOaXhfaAorCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJUaGVtZU5peCA6
IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVu
ZGVyVGhlbWU+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVOaXgoKTsKKwor
ICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBleHRyYVF1aXJrc1N0eWxlU2hlZXQoKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRy
YVBsdWdJbnNTdHlsZVNoZWV0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChXZWJD
b3JlOjpDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0IE9WRVJS
SURFOworCisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgLy8gUmV0dXJucyB0aGUg
cmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisg
ICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0IE9WRVJSSURFOworICAgIC8vIFJldHVybnMgdGhlIGR1cmF0
aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBk
b3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNv
bnN0IE9WRVJSSURFOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVURVJfRUxFTUVOVCkKKyAgICB2
aXJ0dWFsIEludFNpemUgbWV0ZXJTaXplRm9yQm91bmRzKGNvbnN0IFJlbmRlck1ldGVyKiwgY29u
c3QgSW50UmVjdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01l
dGVyKENvbnRyb2xQYXJ0KSBjb25zdCBPVkVSUklERTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICAvLyBIaWdobGln
aHRpbmcgY29sb3JzIGZvciBUZXh0TWF0Y2hlcy4KKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKKworI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybVRhcEhpZ2hsaWdo
dENvbG9yKCkgY29uc3Q7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IE9WRVJSSURFOwor
CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShTdHls
ZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIE9WRVJSSURFIHsgcmV0dXJuIHBhaW50TWVu
dUxpc3QobywgaSwgcik7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworI2lmIEVO
QUJMRShQUk9HUkVTU19FTEVNRU5UKQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0Jh
clN0eWxlKFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisjZW5kaWYKKworI2lm
IEVOQUJMRShNRVRFUl9FTEVNRU5UKQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZXRlclN0eWxl
KFN0eWxlUmVzb2x2ZXIqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZXRlcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tT
dHlsZShTdHlsZVJlc29sdmVyKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdCBPVkVSUklERTsKKworI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorICAgIHZpcnR1YWwgSW50U2l6ZSBzbGlkZXJUaWNr
U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNsaWRlclRpY2tPZmZzZXRG
cm9tVHJhY2tDZW50ZXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQg
c2xpZGVyVGlja1NuYXBwaW5nVGhyZXNob2xkKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNEYXRhTGlzdFVJKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0IE9W
RVJSSURFOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgUmVuZGVyVGhlbWVOaXgoKTsKK307CisK
K30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1lTml4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25peC9SdW5Mb29wTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25peC9SdW5Mb29wTml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
NzFiNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1J1
bkxvb3BOaXguY3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUnVuTG9vcDo6UnVuTG9vcCgpCit7CisgICAgLy8gZ19tYWluX2NvbnRl
eHRfZGVmYXVsdCgpIGRvZXNuJ3QgYWRkIGFuIGV4dHJhIHJlZmVyZW5jZS4KKyAgICBtX3J1bkxv
b3BDb250ZXh0ID0gaXNNYWluVGhyZWFkKCkgPyBnX21haW5fY29udGV4dF9kZWZhdWx0KCkgOiBh
ZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VSVChtX3J1bkxvb3BDb250
ZXh0KTsKKyAgICBHUmVmUHRyPEdNYWluTG9vcD4gaW5uZXJtb3N0TG9vcCA9IGFkb3B0R1JlZihn
X21haW5fbG9vcF9uZXcobV9ydW5Mb29wQ29udGV4dC5nZXQoKSwgRkFMU0UpKTsKKyAgICBBU1NF
UlQoaW5uZXJtb3N0TG9vcCk7CisgICAgbV9ydW5Mb29wTWFpbkxvb3BzLmFwcGVuZChpbm5lcm1v
c3RMb29wKTsKK30KKworUnVuTG9vcDo6flJ1bkxvb3AoKQoreworICAgIGZvciAoaW50IGkgPSBt
X3J1bkxvb3BNYWluTG9vcHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYg
KCFnX21haW5fbG9vcF9pc19ydW5uaW5nKG1fcnVuTG9vcE1haW5Mb29wc1tpXS5nZXQoKSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BN
YWluTG9vcHNbaV0uZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBSdW5Mb29wOjpydW4oKQorewor
ICAgIFJ1bkxvb3AqIG1haW5SdW5Mb29wID0gUnVuTG9vcDo6Y3VycmVudCgpOworICAgIEdNYWlu
TG9vcCogaW5uZXJtb3N0TG9vcCA9IG1haW5SdW5Mb29wLT5pbm5lcm1vc3RMb29wKCk7CisgICAg
aWYgKCFnX21haW5fbG9vcF9pc19ydW5uaW5nKGlubmVybW9zdExvb3ApKSB7CisgICAgICAgIGdf
bWFpbl9sb29wX3J1bihpbm5lcm1vc3RMb29wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIENyZWF0ZSBhbmQgcnVuIGEgbmVzdGVkIGxvb3AgaWYgdGhlIGlubmVybW9zdCBvbmUg
d2FzIGFscmVhZHkgcnVubmluZy4KKyAgICBHTWFpbkxvb3AqIG5lc3RlZE1haW5Mb29wID0gZ19t
YWluX2xvb3BfbmV3KDAsIEZBTFNFKTsKKyAgICBtYWluUnVuTG9vcC0+cHVzaE5lc3RlZE1haW5M
b29wKG5lc3RlZE1haW5Mb29wKTsKKyAgICBnX21haW5fbG9vcF9ydW4obmVzdGVkTWFpbkxvb3Ap
OworICAgIG1haW5SdW5Mb29wLT5wb3BOZXN0ZWRNYWluTG9vcCgpOworfQorCitHTWFpbkxvb3Aq
IFJ1bkxvb3A6OmlubmVybW9zdExvb3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBs
b29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX3J1bkxvb3BNYWluTG9v
cHMuaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV9ydW5Mb29wTWFpbkxvb3BzWzBdLmdldCgpOwor
fQorCit2b2lkIFJ1bkxvb3A6OnB1c2hOZXN0ZWRNYWluTG9vcChHTWFpbkxvb3AqIG5lc3RlZExv
b3ApCit7CisgICAgLy8gVGhlIGlubmVybW9zdCBtYWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0
aGVyZS4KKyAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5Mb29wcy5pc0VtcHR5KCkpOworICAgIG1f
cnVuTG9vcE1haW5Mb29wcy5hcHBlbmQoYWRvcHRHUmVmKG5lc3RlZExvb3ApKTsKK30KKwordm9p
ZCBSdW5Mb29wOjpwb3BOZXN0ZWRNYWluTG9vcCgpCit7CisgICAgLy8gVGhlIGlubmVybW9zdCBt
YWluIGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KKyAgICBBU1NFUlQoIW1fcnVuTG9vcE1h
aW5Mb29wcy5pc0VtcHR5KCkpOworICAgIG1fcnVuTG9vcE1haW5Mb29wcy5yZW1vdmVMYXN0KCk7
Cit9CisKK3ZvaWQgUnVuTG9vcDo6c3RvcCgpCit7CisgICAgLy8gVGhlIGlubmVybW9zdCBtYWlu
IGxvb3Agc2hvdWxkIGFsd2F5cyBiZSB0aGVyZS4KKyAgICBBU1NFUlQoIW1fcnVuTG9vcE1haW5M
b29wcy5pc0VtcHR5KCkpOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBsYXN0TWFpbkxvb3AgPSBt
X3J1bkxvb3BNYWluTG9vcHMubGFzdCgpOworICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5n
KGxhc3RNYWluTG9vcC5nZXQoKSkpCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobGFzdE1haW5M
b29wLmdldCgpKTsKK30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6cXVldWVXb3JrKFJ1bkxvb3AqIHJ1
bkxvb3ApCit7CisgICAgcnVuTG9vcC0+cGVyZm9ybVdvcmsoKTsKKyAgICByZXR1cm4gRkFMU0U7
Cit9CisKK3ZvaWQgUnVuTG9vcDo6d2FrZVVwKCkKK3sKKyAgICBHUmVmUHRyPEdTb3VyY2U+IHNv
dXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKKyAgICBnX3NvdXJjZV9zZXRf
cHJpb3JpdHkoc291cmNlLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQpOworICAgIGdfc291cmNl
X3NldF9jYWxsYmFjayhzb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KCZSdW5Mb29wOjpxdWV1ZVdvcmspLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9hdHRhY2goc291
cmNlLmdldCgpLCBtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKKworICAgIGdfbWFpbl9jb250ZXh0
X3dha2V1cChtX3J1bkxvb3BDb250ZXh0LmdldCgpKTsKK30KKworUnVuTG9vcDo6VGltZXJCYXNl
OjpUaW1lckJhc2UoUnVuTG9vcCogcnVuTG9vcCkKKyAgICA6IG1fcnVuTG9vcChydW5Mb29wKQor
ICAgICwgbV90aW1lclNvdXJjZSgwKQoreworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1l
ckJhc2UoKQoreworICAgIHN0b3AoKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OmNs
ZWFyVGltZXJTb3VyY2UoKQoreworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitnYm9vbGVh
biBSdW5Mb29wOjpUaW1lckJhc2U6OnRpbWVyRmlyZWRDYWxsYmFjayhSdW5Mb29wOjpUaW1lckJh
c2UqIHRpbWVyKQoreworICAgIEdTb3VyY2UqIGN1cnJlbnRUaW1lclNvdXJjZSA9IHRpbWVyLT5t
X3RpbWVyU291cmNlLmdldCgpOworICAgIGJvb2wgaXNSZXBlYXRpbmcgPSB0aW1lci0+aXNSZXBl
YXRpbmcoKTsKKyAgICAvLyBUaGlzIGNhbiBjaGFuZ2UgdGhlIHRpbWVyU291cmNlIGJ5IHN0YXJ0
aW5nIGEgbmV3IHRpbWVyIHdpdGhpbiB0aGUgY2FsbGJhY2suCisgICAgaWYgKCFpc1JlcGVhdGlu
ZyAmJiBjdXJyZW50VGltZXJTb3VyY2UgPT0gdGltZXItPm1fdGltZXJTb3VyY2UuZ2V0KCkpCisg
ICAgICAgIHRpbWVyLT5jbGVhclRpbWVyU291cmNlKCk7CisKKyAgICB0aW1lci0+ZmlyZWQoKTsK
KyAgICByZXR1cm4gaXNSZXBlYXRpbmc7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpz
dGFydChkb3VibGUgZmlyZUludGVydmFsLCBib29sIHJlcGVhdCkKK3sKKyAgICBpZiAobV90aW1l
clNvdXJjZSkKKyAgICAgICAgc3RvcCgpOworCisgICAgbV90aW1lclNvdXJjZSA9IGFkb3B0R1Jl
ZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZmlyZUludGVydmFsICog
MTAwMCkpKTsKKyAgICBtX2lzUmVwZWF0aW5nID0gcmVwZWF0OworICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhtX3RpbWVyU291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5j
PigmUnVuTG9vcDo6VGltZXJCYXNlOjp0aW1lckZpcmVkQ2FsbGJhY2spLCB0aGlzLCAwKTsKKyAg
ICBnX3NvdXJjZV9hdHRhY2gobV90aW1lclNvdXJjZS5nZXQoKSwgbV9ydW5Mb29wLT5tX3J1bkxv
b3BDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3AoKQor
eworICAgIGlmICghbV90aW1lclNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zb3Vy
Y2VfZGVzdHJveShtX3RpbWVyU291cmNlLmdldCgpKTsKKyAgICBjbGVhclRpbWVyU291cmNlKCk7
Cit9CisKK2Jvb2wgUnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdGltZXJTb3VyY2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9TY3JvbGxiYXJUaGVtZU5peC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2Nyb2xsYmFyVGhlbWVOaXguY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGJhYjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2Nyb2xsYmFyVGhlbWVOaXguY3BwCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVOaXguaCIKKworI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKK3sKKyAgICBz
dGF0aWMgU2Nyb2xsYmFyVGhlbWVOaXggdGhlbWU7CisgICAgcmV0dXJuICZ0aGVtZTsKK30KKwor
U2Nyb2xsYmFyVGhlbWVOaXg6On5TY3JvbGxiYXJUaGVtZU5peCgpCit7Cit9CisKK2ludCBTY3Jv
bGxiYXJUaGVtZU5peDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplKQor
eworICAgIHJldHVybiAwOyAvLyB3ZSBwYWludCBvbiB0b3AKK30KKwordm9pZCBTY3JvbGxiYXJU
aGVtZU5peDo6cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKQoreworfQor
Cit2b2lkIFNjcm9sbGJhclRoZW1lTml4Ojp1bnJlZ2lzdGVyU2Nyb2xsYmFyKFNjcm9sbGJhclRo
ZW1lQ2xpZW50KikKK3sKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uaXgvU2Nyb2xsYmFyVGhlbWVOaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25p
eC9TY3JvbGxiYXJUaGVtZU5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmJhZTc2ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgv
U2Nyb2xsYmFyVGhlbWVOaXguaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyLTIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxiYXJUaGVtZU5peF9oCisjZGVmaW5lIFNjcm9sbGJh
clRoZW1lTml4X2gKKworI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVOaXggOiBwdWJsaWMgU2Nyb2xsYmFyVGhl
bWUgeworcHVibGljOgorICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lTml4KCk7CisKKyAgICB2
aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1
bGFyU2Nyb2xsYmFyKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3Jv
bGxiYXJUaGVtZUNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyU2Nyb2xsYmFy
KFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7Cit9OworCit9CisjZW5kaWYgLy8gU2Nyb2xsYmFyVGhl
bWVOaXhfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uaXgvU2hhcmVk
VGltZXJOaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1NoYXJlZFRpbWVyTml4
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDg2YzMxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1NoYXJlZFRpbWVyTml4LmNw
cApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgorI2RlZmluZSBHREtfUFJJT1JJVFlfUkVEUkFXIChHX1BSSU9SSVRZX0hJR0hfSURMRSArIDIw
KQorI2luY2x1ZGUgPGdsaWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZ3Vp
bnQgc2hhcmVkVGltZXI7CitzdGF0aWMgdm9pZCAoKnNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbiko
KTsKKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCit7Cisg
ICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uID0gZjsKK30KKworc3RhdGljIGdib29sZWFuIHRp
bWVvdXRfY2IoZ3BvaW50ZXIpCit7CisgICAgaWYgKHNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbikK
KyAgICAgICAgc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKCk7CisgICAgcmV0dXJuIEZBTFNFOwor
fQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZUludGVydmFsKGRvdWJsZSBpbnRlcnZhbCkKK3sK
KyAgICBBU1NFUlQoc2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKTsKKworICAgIGd1aW50IGludGVy
dmFsSW5NUyA9IHN0YXRpY19jYXN0PGd1aW50PihpbnRlcnZhbCAqIDEwMDApOworCisgICAgc3Rv
cFNoYXJlZFRpbWVyKCk7CisgICAgc2hhcmVkVGltZXIgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RL
X1BSSU9SSVRZX1JFRFJBVywgaW50ZXJ2YWxJbk1TLCB0aW1lb3V0X2NiLCAwLCAwKTsKK30KKwor
dm9pZCBzdG9wU2hhcmVkVGltZXIoKQoreworICAgIGlmIChzaGFyZWRUaW1lciA9PSAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiByZW1vdmVkU291cmNlID0gZ19zb3VyY2VfcmVt
b3ZlKHNoYXJlZFRpbWVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWRTb3VyY2UsIHJlbW92
ZWRTb3VyY2UpOworICAgIHNoYXJlZFRpbWVyID0gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L1NvdW5kTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25peC9Tb3VuZE5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGUxYmJlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25p
eC9Tb3VuZE5peC5jcHAKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb3VuZC5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIHN5c3Rl
bUJlZXAoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbml4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzMGY4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25peC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBnZXRTdXBwb3J0ZWRLZXlTaXplcyhWZWN0b3I8U3Ry
aW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIHNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCwgY29uc3QgU3RyaW5nJiwgY29uc3QgS1VS
TCYpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25peC9XaWRnZXROaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbml4L1dpZGdldE5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMThkMzA5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25p
eC9XaWRnZXROaXguY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaWRnZXQ6OldpZGdldChQ
bGF0Zm9ybVdpZGdldCB3aWRnZXQpCisgICAgOiBtX3BhcmVudCgwKQorICAgICwgbV93aWRnZXQo
MCkKKyAgICAsIG1fc2VsZlZpc2libGUoZmFsc2UpCisgICAgLCBtX3BhcmVudFZpc2libGUoZmFs
c2UpCisgICAgLCBtX2ZyYW1lKDAsIDAsIDAsIDApCit7CisgICAgaW5pdCh3aWRnZXQpOworfQor
CitXaWRnZXQ6On5XaWRnZXQoKQoreworICAgIEFTU0VSVCghcGFyZW50KCkpOworfQorCitJbnRS
ZWN0IFdpZGdldDo6ZnJhbWVSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mcmFtZTsKK30K
Kwordm9pZCBXaWRnZXQ6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IG1fZnJhbWUgPSByZWN0OworICAgIFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQoKTsKK30KKwor
dm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wpCit7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgU2Nyb2xsVmlldyogdmlldyA9IHJvb3Qo
KTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3LT5ob3N0V2luZG93
KCktPnNldEN1cnNvcihjdXJzb3IpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdl
dDo6c2V0SXNTZWxlY3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dlYkF1ZGlv
QnVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dlYkF1ZGlvQnVz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDk5OTkxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQvV2ViQXVkaW9C
dXMuY3BwCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJBdWRpb0J1cy5oPgorCisjaWYgRU5BQkxFKFdFQl9BVURJ
TykKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2Vsc2UKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIEF1ZGlvQnVzIHsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKKworI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkF1
ZGlvQnVzUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViQXVkaW9CdXNQcml2YXRlKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6QXVkaW9CdXM+IGF1ZGlvQnVzKQorICAgICAgICA6IG1fYXVkaW9CdXMoYXVk
aW9CdXMpCisgICAge30KKworICAgIFJlZlB0cjxXZWJDb3JlOjpBdWRpb0J1cz4gbV9hdWRpb0J1
czsKK307CisKK3ZvaWQgV2ViQXVkaW9CdXM6OmluaXRpYWxpemUodW5zaWduZWQgbnVtYmVyT2ZD
aGFubmVscywgc2l6ZV90IGxlbmd0aCwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisjaWYgRU5BQkxF
KFdFQl9BVURJTykKKyAgICBpZiAobV9kKQorICAgICAgICBkZWxldGUgbV9kOworICAgIG1fZCA9
IG5ldyBXZWJBdWRpb0J1c1ByaXZhdGUoV2ViQ29yZTo6QXVkaW9CdXM6OmNyZWF0ZShudW1iZXJP
ZkNoYW5uZWxzLCBsZW5ndGgpKTsKKyAgICBtX2QtPm1fYXVkaW9CdXMtPnNldFNhbXBsZVJhdGUo
c2FtcGxlUmF0ZSk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9
CisKK3ZvaWQgV2ViQXVkaW9CdXM6OnJlc2l6ZVNtYWxsZXIoc2l6ZV90IG5ld0xlbmd0aCkKK3sK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEFTU0VSVChtX2QpOworICAgIGlmIChtX2QpIHsK
KyAgICAgICAgQVNTRVJUKG5ld0xlbmd0aCA8PSBsZW5ndGgoKSk7CisgICAgICAgIG1fZC0+bV9h
dWRpb0J1cy0+cmVzaXplU21hbGxlcihuZXdMZW5ndGgpOworICAgIH0KKyNlbHNlCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJBdWRpb0J1czo6cmVzZXQo
KQoreworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgZGVsZXRlIG1fZDsKKyAgICBtX2QgPSAw
OworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit1bnNpZ25l
ZCBXZWJBdWRpb0J1czo6bnVtYmVyT2ZDaGFubmVscygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1f
ZC0+bV9hdWRpb0J1cy0+bnVtYmVyT2ZDaGFubmVscygpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitzaXplX3QgV2ViQXVkaW9C
dXM6Omxlbmd0aCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1f
ZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+bGVuZ3Ro
KCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2Vu
ZGlmCit9CisKK2RvdWJsZSBXZWJBdWRpb0J1czo6c2FtcGxlUmF0ZSgpIGNvbnN0Cit7CisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKyAgICBpZiAoIW1fZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fZC0+bV9hdWRpb0J1cy0+c2FtcGxlUmF0ZSgpOworI2Vsc2UKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitmbG9hdCogV2ViQXVk
aW9CdXM6OmNoYW5uZWxEYXRhKHVuc2lnbmVkIGNoYW5uZWxJbmRleCkKK3sKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorICAgIGlmICghbV9kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQo
Y2hhbm5lbEluZGV4IDwgbnVtYmVyT2ZDaGFubmVscygpKTsKKyAgICByZXR1cm4gbV9kLT5tX2F1
ZGlvQnVzLT5jaGFubmVsKGNoYW5uZWxJbmRleCktPm11dGFibGVEYXRhKCk7CisjZWxzZQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1Bhc3NS
ZWZQdHI8QXVkaW9CdXM+IFdlYkF1ZGlvQnVzOjphdWRpb0J1cygpCit7CisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyAgICByZXR1cm4gbV9kLT5tX2F1ZGlvQnVzOworI2Vsc2UKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9z
dXBwb3J0L1dlYkRhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbml4L3N1cHBvcnQv
V2ViRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjNGY2OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25peC9zdXBwb3J0L1dl
YkRhdGEuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJEYXRhLmg+CisKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJE
YXRhUHJpdmF0ZSA6IHB1YmxpYyBTaGFyZWRCdWZmZXIgeworfTsKKwordm9pZCBXZWJEYXRhOjpy
ZXNldCgpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkgeworICAgICAgICBtX3ByaXZhdGUtPmRlcmVm
KCk7CisgICAgICAgIG1fcHJpdmF0ZSA9IDA7CisgICAgfQorfQorCit2b2lkIFdlYkRhdGE6OmFz
c2lnbihjb25zdCBXZWJEYXRhJiBvdGhlcikKK3sKKyAgICBXZWJEYXRhUHJpdmF0ZSogcCA9IGNv
bnN0X2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQor
ICAgICAgICBwLT5yZWYoKTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK3ZvaWQgV2ViRGF0YTo6YXNz
aWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGFzc2lnbihzdGF0aWNf
Y2FzdDxXZWJEYXRhUHJpdmF0ZSo+KAorICAgICAgICBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRh
LCBzaXplKS5sZWFrUmVmKCkpKTsKK30KKworc2l6ZV90IFdlYkRhdGE6OnNpemUoKSBjb25zdAor
eworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29u
c3RfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KG1fcHJpdmF0ZSktPnNpemUoKTsKK30KKworY29uc3Qg
Y2hhciogV2ViRGF0YTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ByaXZhdGUpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYkRhdGFQcml2YXRlKj4obV9w
cml2YXRlKS0+ZGF0YSgpOworfQorCitXZWJEYXRhOjpXZWJEYXRhKGNvbnN0IFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiYgYnVmZmVyKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRh
dGFQcml2YXRlKj4oYnVmZmVyLmxlYWtSZWYoKSkpCit7Cit9CisKK1dlYkRhdGEmIFdlYkRhdGE6
Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikKK3sKKyAg
ICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihidWZmZXIubGVha1JlZigpKSk7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJEYXRhOjpvcGVyYXRvciBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4oKSBjb25zdAoreworICAgIHJldHVybiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4oY29uc3RfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KG1fcHJpdmF0ZSkpOworfQorCit2b2lkIFdl
YkRhdGE6OmFzc2lnbihXZWJEYXRhUHJpdmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkg
cmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBt
X3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L25peC9U
ZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvbml4L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VOaXguY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmE3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L25peC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVTml4LmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBjaGFyKiBjdXJyZW50U2Vh
cmNoTG9jYWxlSUQoKQoreworICAgIHJldHVybiAiIjsKK30KKworY29uc3QgY2hhciogY3VycmVu
dFRleHRCcmVha0xvY2FsZUlEKCkKK3sKKyAgICByZXR1cm4gImVuX3VzIjsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAKaW5kZXggZDJiNmY1Mi4uZjllMjIx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCkBAIC0xNzcsNyAr
MTc3LDcgQEAgUGFzc1JlZlB0cjxQbHVnaW5QYWNrYWdlPiBQbHVnaW5QYWNrYWdlOjpjcmVhdGVQ
YWNrYWdlRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcGEKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5l
ZChYUF9VTklYKQorI2lmIGRlZmluZWQoWFBfVU5JWCkgJiYgIVBMQVRGT1JNKE5JWCkKIHZvaWQg
UGx1Z2luUGFja2FnZTo6ZGV0ZXJtaW5lUXVpcmtzKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7
CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBl
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggNjE4YjM2OC4uN2Nm
ZmE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC04MzEsNyArODMx
LDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhGcmFtZSogcGFyZW50RnJhbWUsIGNvbnN0IElu
dFNpemUmIHNpemUsIFBsdWdpblBhY2thZ2UqIHAKICAgICAsIG1fd21QcmludEhEQygwKQogICAg
ICwgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldChmYWxzZSkKICNlbmRpZgotI2lmIChQTEFURk9S
TShRVCkgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiAoUExBVEZPUk0oUVQp
ICYmIE9TKFdJTkRPV1MpKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKE5JWCkKICAgICAs
IG1fd2luZG93KDApCiAjZW5kaWYKICNpZiBkZWZpbmVkKFhQX01BQ09TWCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggYTgxYmQwYS4uMzI3NzYwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTM4Myw3ICszODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgbV9oYXZlVXBkYXRlZFBsdWdpbldpZGdldDsKICNlbmRpZgogCi0jaWYg
KChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSkgJiYgT1MoV0lORE9XUykpIHx8IFBMQVRG
T1JNKEVGTCkKKyNpZiAoKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpKSAmJiBPUyhXSU5E
T1dTKSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShOSVgpCiAgICAgICAgIC8vIE9uIE1h
YyBPU1ggYW5kIFF0L1dpbmRvd3MgdGhlIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGl0cyBvd24gbmF0
aXZlIHdpZGdldCwKICAgICAgICAgLy8gYnV0IGlzIHVzaW5nIHRoZSBjb250YWluaW5nIHdpbmRv
dyBhcyBpdHMgcmVmZXJlbmNlIGZvciBwb3NpdGlvbmluZy9wYWludGluZy4KICAgICAgICAgUGxh
dGZvcm1QbHVnaW5XaWRnZXQgbV93aW5kb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXdOb25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
Vmlld05vbmUuY3BwCmluZGV4IDBjOTQ1ZmIuLjQ5OGFiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luVmlld05vbmUuY3BwCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbHVnaW5W
aWV3OjpoYW5kbGVGb2N1c091dEV2ZW50KCkKIC8vIHBvcnRzIHVzaW5nIFBsdWdpblZpZXcsIGJ1
dCB1bnRpbCB0aGVuLCBpZiBuZXcgZnVuY3Rpb25zIGxpa2UgdGhpcyBhcmUgCiAvLyBhZGRlZCwg
cGxlYXNlIG1ha2Ugc3VyZSB0aGV5IGhhdmUgdGhlIHByb3BlciBwbGF0Zm9ybSAjaWZzIHNvIHRo
YXQgY2hhbmdlcwogLy8gZG8gbm90IGJyZWFrIHBvcnRzIHdobyBjb21waWxlIGJvdGggdGhpcyBm
aWxlIGFuZCBQbHVnaW5WaWV3LmNwcC4gICAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KEVGTCkgfHwgKE9TKFdJTkNFKSAmJiAhUExBVEZPUk0oUVQpKSB8fCAoUExBVEZPUk0oUVQpICYm
ICFPUyhXSU5DRSkpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShFRkwpIHx8IChPUyhX
SU5DRSkgJiYgIVBMQVRGT1JNKFFUKSkgfHwgKFBMQVRGT1JNKFFUKSAmJiAhT1MoV0lOQ0UpKSB8
fCBQTEFURk9STShOSVgpCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB2b2lkIFBs
dWdpblZpZXc6OmtlZXBBbGl2ZShOUFApCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmlu
ZEVHTC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kRUdMLmNtYWtlCmluZGV4IDUyNmM1YmEuLjkz
YTE0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9GaW5kRUdMLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZS9GaW5kRUdMLmNtYWtlCkBAIC0zNSwzICszNSw1IEBAIGZpbmRfbGlicmFyeShFR0xf
TElCUkFSWSBOQU1FUyAke0VHTF9OQU1FU30pCiAKIGluY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVT
dGFuZGFyZEFyZ3MpCiBGSU5EX1BBQ0tBR0VfSEFORExFX1NUQU5EQVJEX0FSR1MoRUdMIERFRkFV
TFRfTVNHIEVHTF9JTkNMVURFX0RJUiBFR0xfTElCUkFSWSkKKworTUFSS19BU19BRFZBTkNFRChF
R0xfSU5DTFVERV9ESVIgRUdMX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmlu
ZE9wZW5HTEVTMi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kT3BlbkdMRVMyLmNtYWtlCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NzRkZGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvY21ha2UvRmluZE9wZW5HTEVTMi5jbWFrZQpAQCAtMCwwICsxLDI1IEBACisjIFRy
eSB0byBmaW5kIE9wZW5HTEVTMi4gT25jZSBkb25lIHRoaXMgd2lsbCBkZWZpbmU6CisjICAgICBP
UEVOR0xFUzJfRk9VTkQKKyMgICAgIE9QRU5HTEVTMl9JTkNMVURFX0RJUlMKKyMgICAgIE9QRU5H
TEVTMl9MSUJSQVJJRVMKKyMgICAgIE9QRU5HTEVTMl9ERUZJTklUSU9OUworCitGSU5EX1BBQ0tB
R0UoUGtnQ29uZmlnKQorCitQS0dfQ0hFQ0tfTU9EVUxFUyhQQ19PUEVOR0xFUzIgZ2xlc3YyKQor
CitJRiAoUENfT1BFTkdMRVMyX0ZPVU5EKQorICAgIFNFVChPUEVOR0xFUzJfSU5DTFVERV9ESVJT
ICR7UENfT1BFTkdMRVMyX0lOQ0xVREVfRElSU30pCisgICAgU0VUKE9QRU5HTEVTMl9ERUZJTklU
SU9OUyAke1BDX09QRU5HTEVTMl9DRkxBR1NfT1RIRVJ9KQorRUxTRSAoKQorICAgIEZJTkRfUEFU
SChPUEVOR0xFUzJfSU5DTFVERV9ESVJTIE5BTUVTIEdMRVMyL2dsMi5oKQorRU5ESUYgKCkKKwor
RklORF9MSUJSQVJZKE9QRU5HTEVTMl9MSUJSQVJJRVMgR0xFU3YyCisgICAgSElOVFMgJHtQQ19P
UEVOR0xFUzJfTElCUkFSWV9ESVJTfSAke1BDX09QRU5HTEVTMl9MSUJESVJ9CispCisKK0lOQ0xV
REUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCitGSU5EX1BBQ0tBR0VfSEFORExFX1NU
QU5EQVJEX0FSR1MoT3BlbkdMRVMyIERFRkFVTFRfTVNHIE9QRU5HTEVTMl9MSUJSQVJJRVMgT1BF
TkdMRVMyX0lOQ0xVREVfRElSUykKKworTUFSS19BU19BRFZBTkNFRChPUEVOR0xFUzJfSU5DTFVE
RV9ESVJTIE9QRU5HTEVTMl9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlv
bnNDb21tb24uY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZQppbmRleCAw
YWNiY2ZjLi4yOTRlMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5j
bWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0NvbW1vbi5jbWFrZQpAQCAtMSw4ICsxLDE2
IEBACi1hZGRfZGVmaW5pdGlvbnMoLURCVUlMRElOR19XSVRIX0NNQUtFPTEpCi1hZGRfZGVmaW5p
dGlvbnMoLURIQVZFX0NPTkZJR19IPTEpCisjIE5peCBkb2Vzbid0IHVzZSBjbWFrZWNvbmZpZy5o
CitpZiAoTk9UIFBPUlQgU1RSRVFVQUwgIk5peCIpCisgICAgYWRkX2RlZmluaXRpb25zKC1EQlVJ
TERJTkdfV0lUSF9DTUFLRT0xKQorICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfQ09ORklHX0g9
MSkKK2VuZGlmICgpCisKIAogaWYgKFdURl9PU19VTklYKQogICAgIGFkZF9kZWZpbml0aW9ucygt
RFhQX1VOSVgpCisgICAgI1RPRE86IGNoZWNrIGZvciBYMTEgdGFyZ2V0CisgICAgaWYgKE5PVCBQ
T1JUIFNUUkVRVUFMICJOaXgiKQorICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURNT1pfWDExKQor
ICAgIGVuZGlmICgpCiBlbmRpZiAoV1RGX09TX1VOSVgpCiAKICMgQ09ERV9HRU5FUkFUT1JfUFJF
UFJPQ0VTU09SX1dJVEhfTElORU1BUktFUlMgb25seSBtYXR0ZXJzIHdpdGggR0NDID49IDQuNy4w
LiAgU2luY2UgdGhpcwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNOaXguY21ha2Ug
Yi9Tb3VyY2UvY21ha2UvT3B0aW9uc05peC5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kYzFhODIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL2NtYWtlL09wdGlv
bnNOaXguY21ha2UKQEAgLTAsMCArMSwxNDggQEAKKyMgTml4IHVzZXMgYSBkaWZmZXJlbnQgd2F5
IHRvIHNldC91bnNldCBkZWZhdWx0IGZlYXR1cmVzIGJhc2VkIG9uIFdLIGJ1ZyAxMTA3MTcgKG5v
dCB5ZXQgbGFuZGVkKS4KKyMgU28gdGhlIGltcGxlbWVudGF0aW9uLCBpLmUuIHRoZSBuZXh0IHR3
byBtYWNyb3MsIHdhcyBtb3ZlZCB0byBoZXJlIHRvIGtlZXAgYSBtaW5pbWFsIGFzIHBvc3NpYmxl
CisjIGludGVyZmVyZW5jZSBvbiBvdGhlciBwb3J0cyB1bnRpbCBzb21lIGRheSB3aGVuL2lmIGJ1
ZyAxMTA3MTcgZ2V0IGxhbmRlZC4KKworIyBDb21wdXRlIGFuZCBzZXQgZGVmYXVsdCB2YWx1ZXMg
Zm9yIGZlYXR1cmUgZGVmaW5lcworbWFjcm8oV0VCS0lUX09QVElPTl9ERUZBVUxUUyBfcG9ydCkK
KyAgICAjIFVzZSB0aGUgcHJlcHJvY2Vzc29yIHRvIGdldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9y
IGZlYXR1cmUgZGVmaW5lcworICAgIEVYRUNfUFJPR1JBTSgiZ2NjIC1FIC1QIC1kTSAtREJVSUxE
SU5HXyR7X3BvcnR9X18gLUkgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV1RGICR7Q01BS0Vf
U09VUkNFX0RJUn0vU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCB8IGdyZXAgJ14jZGVmaW5lIEVO
QUJMRV9cXHdcXCsgWzAxXSQnIHwgY3V0IC1kJyAnIC1mMi0zIHwgc29ydCIgT1VUUFVUX1ZBUklB
QkxFIERFRklOSVRJT05TKQorICAgIHN0cmluZyhSRUdFWCBNQVRDSEFMTCAiKFteXG5dK3xbXlxu
XSskKSIgREVGSU5JVElPTlNfTElTVCAke0RFRklOSVRJT05TfSkKKworICAgIGZvcmVhY2ggKERF
RklOSVRJT04gJHtERUZJTklUSU9OU19MSVNUfSkKKyAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExB
Q0UgIl4oW14gXSspIChbXiBdKykkIiAiXFwxIiBERUZJTklUSU9OX05BTUUgIiR7REVGSU5JVElP
Tn0iKQorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXihbXiBdKykgKFteIF0rKSQiICJc
XDIiIERFRklOSVRJT05fVkFMVUUgIiR7REVGSU5JVElPTn0iKQorICAgICAgICBXRUJLSVRfT1BU
SU9OX0RFRklORSgke0RFRklOSVRJT05fTkFNRX0gIlRvZ2dsZSAke0RFRklOSVRJT05fTkFNRX0i
ICR7REVGSU5JVElPTl9WQUxVRX0pCisgICAgICAgIG9wdGlvbigke0RFRklOSVRJT05fTkFNRX0g
IlRvZ2dsZSAke0RFRklOSVRJT05fTkFNRX0iICR7REVGSU5JVElPTl9WQUxVRX0pCisgICAgZW5k
Zm9yZWFjaCAoKQorZW5kbWFjcm8oKQorCisjIFNob3cgV2ViS2l0IG9wdGlvbnMgc3VtbWFyeSBh
bmQgYWRkIC1ERk9PQkFSIHRvIGVhY2ggb3B0aW9uIHdpdGggYSB2YWx1ZSBkaWZmZXJlbnQgZnJv
bSB0aGUgZGVmYXVsdCB2YWx1ZS4KK21hY3JvKFBST0NFU1NfV0VCS0lUX09QVElPTlMpCisgICAg
bWVzc2FnZShTVEFUVVMgIkVuYWJsZWQgZmVhdHVyZXM6IikKKworICAgIHNldChfTUFYX0ZFQVRV
UkVfTEVOR1RIIDApCisgICAgZm9yZWFjaCAoX25hbWUgJHtfV0VCS0lUX0FWQUlMQUJMRV9PUFRJ
T05TfSkKKyAgICAgICAgc3RyaW5nKExFTkdUSCAke19uYW1lfSBfTkFNRV9MRU5HVEgpCisgICAg
ICAgIGlmIChfTkFNRV9MRU5HVEggR1JFQVRFUiBfTUFYX0ZFQVRVUkVfTEVOR1RIKQorICAgICAg
ICAgICAgc2V0KF9NQVhfRkVBVFVSRV9MRU5HVEggJHtfTkFNRV9MRU5HVEh9KQorICAgICAgICBl
bmRpZiAoKQorICAgIGVuZGZvcmVhY2ggKCkKKworICAgIHNldChfU0hPVUxEX1BSSU5UX1BPSU5U
UyBPRkYpCisgICAgZm9yZWFjaCAoX25hbWUgJHtfV0VCS0lUX0FWQUlMQUJMRV9PUFRJT05TfSkK
KyAgICAgICAgc3RyaW5nKExFTkdUSCAke19uYW1lfSBfTkFNRV9MRU5HVEgpCisKKyAgICAgICAg
c2V0KF9NRVNTQUdFICIgJHtfbmFtZX0gIikKKworICAgICAgICBpZiAoX1NIT1VMRF9QUklOVF9Q
T0lOVFMpCisgICAgICAgICAgICBmb3JlYWNoIChJR05PUkUgUkFOR0UgJHtfTkFNRV9MRU5HVEh9
ICR7X01BWF9GRUFUVVJFX0xFTkdUSH0pCisgICAgICAgICAgICAgICAgc2V0KF9NRVNTQUdFICIk
e19NRVNTQUdFfSAiKQorICAgICAgICAgICAgZW5kZm9yZWFjaCAoKQorICAgICAgICAgICAgc2V0
KF9TSE9VTERfUFJJTlRfUE9JTlRTIE9GRikKKyAgICAgICAgZWxzZSAoKQorICAgICAgICAgICAg
Zm9yZWFjaCAoSUdOT1JFIFJBTkdFICR7X05BTUVfTEVOR1RIfSAke19NQVhfRkVBVFVSRV9MRU5H
VEh9KQorICAgICAgICAgICAgICAgIHNldChfTUVTU0FHRSAiJHtfTUVTU0FHRX0uIikKKyAgICAg
ICAgICAgIGVuZGZvcmVhY2ggKCkKKyAgICAgICAgICAgIHNldChfU0hPVUxEX1BSSU5UX1BPSU5U
UyBPTikKKyAgICAgICAgZW5kaWYgKCkKKworICAgICAgICBpZiAoJHtfbmFtZX0pCisgICAgICAg
ICAgICBsaXN0KEFQUEVORCBGRUFUVVJFX0RFRklORVMgJHtfbmFtZX0pCisgICAgICAgICAgICBz
ZXQoRkVBVFVSRV9ERUZJTkVTX1dJVEhfU1BBQ0VfU0VQQVJBVE9SICIke0ZFQVRVUkVfREVGSU5F
U19XSVRIX1NQQUNFX1NFUEFSQVRPUn0gJHtfbmFtZX0iKQorICAgICAgICBlbmRpZiAoKQorCisg
ICAgICAgIHNldChfTUVTU0FHRSAiJHtfTUVTU0FHRX0gJHske19uYW1lfX0iKQorICAgICAgICBt
ZXNzYWdlKFNUQVRVUyAiJHtfTUVTU0FHRX0iKQorICAgIGVuZGZvcmVhY2ggKCkKKworICAgICMg
QWRkIGFkZF9kZWZpbml0aW9ucyB0byB2YWx1ZXMgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHRz
CisgICAgZm9yZWFjaCAoX25hbWUgJHtfV0VCS0lUX0FWQUlMQUJMRV9PUFRJT05TfSkKKyAgICAg
ICAgIyBDb252ZXJ0IHZhbHVlcyBmcm9tIE9OL09GRiB0byAxLzAgYmVjYXVzZQorICAgICAgICAj
IENNYWtlIHNheXMgIjEgRVFVQUwgT04iIGlzIGZhbHNlLgorICAgICAgICBpZiAoJHtfV0VCS0lU
X0FWQUlMQUJMRV9PUFRJT05TX0lOSVRBTFZBTFVFXyR7X25hbWV9fSkKKyAgICAgICAgICAgIHNl
dChfYSAxKQorICAgICAgICBlbHNlICgpCisgICAgICAgICAgICBzZXQoX2EgMCkKKyAgICAgICAg
ZW5kaWYgKCkKKyAgICAgICAgaWYgKCR7JHtfbmFtZX19KQorICAgICAgICAgICAgc2V0KF9iIDEp
CisgICAgICAgIGVsc2UgKCkKKyAgICAgICAgICAgIHNldChfYiAwKQorICAgICAgICBlbmRpZiAo
KQorICAgICAgICBpZiAoTk9UIF9hIEVRVUFMIF9iKQorICAgICAgICAgICAgYWRkX2RlZmluaXRp
b25zKCItRCR7X25hbWV9PSR7X2J9IikKKyAgICAgICAgZW5kaWYgKCkKKyAgICBlbmRmb3JlYWNo
ICgpCitlbmRtYWNybygpCisKKworc2V0KFBST0pFQ1RfVkVSU0lPTl9NQUpPUiAwKQorc2V0KFBS
T0pFQ1RfVkVSU0lPTl9NSU5PUiAxKQorc2V0KFBST0pFQ1RfVkVSU0lPTl9QQVRDSCAwKQorc2V0
KFBST0pFQ1RfVkVSU0lPTiAke1BST0pFQ1RfVkVSU0lPTl9NQUpPUn0uJHtQUk9KRUNUX1ZFUlNJ
T05fTUlOT1J9LiR7UFJPSkVDVF9WRVJTSU9OX1BBVENIfSkKKworaWYgKENNQUtFX0NYWF9DT01Q
SUxFUl9JRCBTVFJFUVVBTCAiR05VIikKKyAgICAjIFVzZSAtZmVtaXQtc3RydWN0LWRlYnVnLWJh
c2Vvbmx5IHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiBXZWJDb3JlIHN0YXRpYyBsaWJyYXJ5CisgICAg
c2V0KENNQUtFX0NYWF9GTEFHU19ERUJVRyAiLWcgLWZlbWl0LXN0cnVjdC1kZWJ1Zy1iYXNlb25s
eSIgQ0FDSEUgU1RSSU5HICJGbGFncyB1c2VkIGJ5IHRoZSBjb21waWxlciBkdXJpbmcgZGVidWcg
YnVpbGRzLiIgRk9SQ0UpCitlbmRpZiAoKQorCitzZXQoU0hBUkVEX0NPUkUgT0ZGKQorc2V0KEVO
QUJMRV9XRUJLSVQgT0ZGKQorc2V0KEVOQUJMRV9XRUJLSVQyIE9GRikKK3NldChFTkFCTEVfVE9P
TFMgT0ZGKQorCitzZXQoV2ViS2l0Ml9PVVRQVVRfTkFNRSBXZWJLaXROaXgpCisKK2FkZF9kZWZp
bml0aW9ucygtREJVSUxESU5HX05JWF9fPTEpCisKK2ZpbmRfcGFja2FnZShDYWlybyAxLjEyLjgg
UkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoRm9udGNvbmZpZyAyLjguMCBSRVFVSVJFRCkKK2ZpbmRf
cGFja2FnZShGcmVldHlwZSBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShHTElCIDIuMzYuMCBSRVFV
SVJFRCBDT01QT05FTlRTIGdpbyBnb2JqZWN0IGdtb2R1bGUgZ3RocmVhZCkKK2ZpbmRfcGFja2Fn
ZShIYXJmQnV6eikKK2ZpbmRfcGFja2FnZShJQ1UgUkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoSlBF
RyBSRVFVSVJFRCkKK2ZpbmRfcGFja2FnZShMaWJYbWwyIDIuNiBSRVFVSVJFRCkKK2ZpbmRfcGFj
a2FnZShMaWJYc2x0IDEuMS43IFJFUVVJUkVEKQorZmluZF9wYWNrYWdlKFBORyBSRVFVSVJFRCkK
K2ZpbmRfcGFja2FnZShTcWxpdGUgUkVRVUlSRUQpCitmaW5kX3BhY2thZ2UoVGhyZWFkcyBSRVFV
SVJFRCkKK2ZpbmRfcGFja2FnZShaTElCIFJFUVVJUkVEKQorCisjIFZhcmlhYmxlcyB0aGF0IG11
c3QgZXhpc3RzIG9uIENNYWtlIHNwYWNlCisjIHRvIGtlZXAgY29tbW9uIENNYWtlIGZpbGVzIHdv
cmtpbmcgYXMgZGVzaXJlZCBmb3IgdXMKK3NldChXVEZfVVNFX0lDVV9VTklDT0RFIE9OKQorc2V0
KFdURl9VU0VfTEVWRUxEQiBPTikKK3NldChFTkFCTEVfQVBJX1RFU1RTIE9GRikKKworV0VCS0lU
X09QVElPTl9ERUZBVUxUUygiTklYIikKK1dFQktJVF9PUFRJT05fREVGSU5FKFdURl9VU0VfT1BF
TkdMX0VTXzIgIlVzZSBFR0wgKyBPcGVuR0xFUzIiIE9GRikKK1dFQktJVF9PUFRJT05fREVGSU5F
KFdURl9VU0VfQ1VSTCAiVXNlIGxpYkN1cmwgYXMgbmV0d29yayBiYWNrZW5kIiBPRkYpCisKK2lm
IChXVEZfVVNFX0NVUkwpCisgICAgZmluZF9wYWNrYWdlKENVUkwgUkVRVUlSRUQpCisgICAgc2V0
KFJFUVVJUkVEX05FVFdPUksgbGliY3VybCkKK2Vsc2UgKCkKKyAgICBmaW5kX3BhY2thZ2UoTGli
U291cCAyLjQyLjAgUkVRVUlSRUQpCisgICAgc2V0KFJFUVVJUkVEX05FVFdPUksgbGlic291cC0y
LjQpCitlbmRpZiAoKQorCitpZiAoV1RGX1VTRV9PUEVOR0xfRVNfMikKKyAgICBmaW5kX3BhY2th
Z2UoT3BlbkdMRVMyIFJFUVVJUkVEKQorICAgIGZpbmRfcGFja2FnZShFR0wgUkVRVUlSRUQpCisg
ICAgc2V0KFdURl9VU0VfRUdMIE9OKQorICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfT1BF
TkdMX0VTXzI9MSkKK2Vsc2UgKCkKKyAgICBmaW5kX3BhY2thZ2UoWDExIFJFUVVJUkVEKQorICAg
IGZpbmRfcGFja2FnZShPcGVuR0wgUkVRVUlSRUQpCisgICAgYWRkX2RlZmluaXRpb25zKC1ESEFW
RV9HTFg9MSkKK2VuZGlmICgpCisKK2lmIChOT1QgRU5BQkxFX1NWRykKKyAgICBzZXQoRU5BQkxF
X1NWR19GT05UUyBPRkYpCitlbmRpZiAoKQorCitQUk9DRVNTX1dFQktJVF9PUFRJT05TKCkKKwor
CisKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtZHVtcHJlbmRlcnRyZWUgYi9Ub29s
cy9TY3JpcHRzL2J1aWxkLWR1bXByZW5kZXJ0cmVlCmluZGV4IDFmZjc1ZjcuLjkxZjU0ODIgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtZHVtcHJlbmRlcnRyZWUKKysrIGIvVG9vbHMv
U2NyaXB0cy9idWlsZC1kdW1wcmVuZGVydHJlZQpAQCAtNzAsNyArNzAsNyBAQCBpZiAoaXNBcHBs
ZU1hY1dlYktpdCgpKSB7CiB9IGVsc2lmIChpc0FwcGxlV2luV2ViS2l0KCkpIHsKICAgICBteSAk
ZHJ0U29sdXRpb25QYXRoID0gIkR1bXBSZW5kZXJUcmVlLnZjeHByb2ovRHVtcFJlbmRlclRyZWUu
c2xuIjsKICAgICAkcmVzdWx0ID0gYnVpbGRWaXN1YWxTdHVkaW9Qcm9qZWN0KCRkcnRTb2x1dGlv
blBhdGgsICRjbGVhbik7Ci19IGVsc2lmIChpc1F0KCkgfHwgaXNHdGsoKSB8fCBpc0VmbCgpKSB7
Cit9IGVsc2lmIChpc1F0KCkgfHwgaXNHdGsoKSB8fCBpc0VmbCgpIHx8IGlzTml4KCkpIHsKICAg
ICAjIFF0LCBHdGsgYW5kIEVGTCBidWlsZCBldmVyeXRoaW5nIGluIG9uZSBzaG90LiBObyBuZWVk
IHRvIGJ1aWxkIGFueXRoaW5nIGhlcmUuCiAgICAgJHJlc3VsdCA9IDA7CiB9IGVsc2UgewpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxk
LXdlYmtpdAppbmRleCBlM2RkOTE5Li5mNTIyNDVkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtMzYsNyAr
MzYsNyBAQCB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgRmlsZTo6RmluZDsKIHVzZSBGaWxlOjpT
cGVjOwogdXNlIEZpbmRCaW47Ci11c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcGFzc190aHJv
dWdoKTsKK3VzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBwYXNzX3Rocm91Z2ggbm9fYXV0b19h
YmJyZXYpOwogdXNlIGxpYiAkRmluZEJpbjo6QmluOwogdXNlIHdlYmtpdGRpcnM7CiB1c2Ugd2Vi
a2l0cGVybDo6RmVhdHVyZUxpc3QgcXcoZ2V0RmVhdHVyZU9wdGlvbkxpc3QpOwpAQCAtNjIsNiAr
NjIsOCBAQCBteSAkbm9XZWJLaXQxID0gMDsKIG15ICRub1dlYktpdDIgPSAwOwogbXkgJGNvdmVy
YWdlU3VwcG9ydCA9IDA7CiBteSAkc3RhcnRUaW1lID0gdGltZSgpOworbXkgJGN1cmwgPSAwOwor
bXkgJG9wZW5nbGVzMiA9IDA7CiAKIG15IEBmZWF0dXJlcyA9IGdldEZlYXR1cmVPcHRpb25MaXN0
KCk7CiAKQEAgLTg3LDYgKzg5LDM4IEBAIGlmIChpc1F0KCkpIHsKICAgICB9CiB9CiAKKyMgVXBk
YXRlIGRlZmF1bHRzIGZvciB0aGUgTml4IHBvcnQKK2lmIChpc05peCgpKSB7CisgICAgIyBJbnN0
ZWFkIG9mIHVzZSBGZWF0dXJlTGlzdC5wbSB0byBsaXN0IGVuYWJsZWQgZmVhdHVyZXMsIHRlbGwg
dGhlIGNvbXBpbGVyIHRvCisgICAgIyBwYXJzZSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGFu
ZCBnZXQgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIGFsbCBmZWF0dXJlIGZsYWdzCisgICAgIyBmcm9t
IHRoZSByZXN1bHQuCisgICAgbXkgJHBvcnREZWZpbmUgPSAiQlVJTERJTkdfIi51YyhjbWFrZUJh
c2VkUG9ydE5hbWUoKSkuIl9fIjsKKyAgICBteSAkZGVmaW5pdGlvbnMgPSBgZ2NjIC1FIC1QIC1k
TSAtRCRwb3J0RGVmaW5lIC1JIFNvdXJjZS9XVEYgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCB8
IGdyZXAgJ14jZGVmaW5lIEVOQUJMRV9cXHdcXCsgXFswMVxdXCQnIHwgY3V0IC1kJyAnIC1mMi0z
YDsKKworICAgIG15ICVmZWF0dXJlRGVmYXVsdHM7CisgICAgZm9yZWFjaCAoc3BsaXQoL1xuLywg
JGRlZmluaXRpb25zKSkgeworICAgICAgICBteSBAbWFjcm9EZWZpbml0aW9uID0gc3BsaXQoLyAv
KTsKKyAgICAgICAgJGZlYXR1cmVEZWZhdWx0c3skbWFjcm9EZWZpbml0aW9uWzBdfSA9ICRtYWNy
b0RlZmluaXRpb25bMV07CisgICAgfQorCisgICAgQGZlYXR1cmVzID0gKCk7CisgICAgZm9yZWFj
aCAoc29ydCBrZXlzICVmZWF0dXJlRGVmYXVsdHMpIHsKKyAgICAgICAgbmV4dCBpZiAoIS9eRU5B
QkxFLyk7CisgICAgICAgIG15ICRvcHRpb25OYW1lID0gbGMgJF87CisgICAgICAgICRvcHRpb25O
YW1lID1+IHMvXmVuYWJsZV8vLzsKKyAgICAgICAgJG9wdGlvbk5hbWUgPX4gcy9fLy0vZzsKKyAg
ICAgICAgbXkgJGRlc2NOYW1lID0gJG9wdGlvbk5hbWU7CisgICAgICAgICRkZXNjTmFtZSA9fiBz
Ly0vIC9nOworCisgICAgICAgIHB1c2ggQGZlYXR1cmVzLCB7CisgICAgICAgICAgICBvcHRpb24g
PT4gJG9wdGlvbk5hbWUsCisgICAgICAgICAgICBkZXNjID0+ICJUb2dnbGUgJGRlc2NOYW1lIHN1
cHBvcnQiLAorICAgICAgICAgICAgZGVmaW5lID0+ICRfLAorICAgICAgICAgICAgZGVmYXVsdCA9
PiAkZmVhdHVyZURlZmF1bHRzeyRffQorICAgICAgICB9OworICAgIH0KK30KKwogIyBBZGRpdGlv
bmFsIGVudmlyb25tZW50IHBhcmFtZXRlcnMKIHB1c2ggQEFSR1YsIHNwbGl0KC8gLywgJEVOVnsn
QlVJTERfV0VCS0lUX0FSR1MnfSkgaWYgKCRFTlZ7J0JVSUxEX1dFQktJVF9BUkdTJ30pOwogCkBA
IC0xMTYsNiArMTUwLDcgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29wdGlvbnMg
dG8gcGFzcyB0byBidWlsZCBzeXN0ZW1dCiAKICAgLS1ibGFja2JlcnJ5ICAgICAgICAgICAgICAg
ICAgICAgIEJ1aWxkIHRoZSBCbGFja0JlcnJ5IHBvcnQgb24gTWFjL0xpbnV4CiAgIC0tZWZsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZCB0aGUgRUZMIHBvcnQKKyAgLS1uaXggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHRoZSBOaXggcG9ydAogICAtLWd0ayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIEdUSysgcG9ydAogICAtLXF0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQgdGhlIFF0IHBvcnQKICAgLS13aW5jYWlybyAg
ICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHVzaW5nIENhaXJvIChyYXRoZXIgdGhhbiBDb3Jl
R3JhcGhpY3MpIG9uIFdpbmRvd3MKQEAgLTEzNyw2ICsxNzIsOSBAQCBVc2FnZTogJHByb2dyYW1O
YW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS1uby13
ZWJraXQxICAgICAgICAgICAgICAgICAgICAgIE9taXQgV2ViS2l0MSBjb2RlIGZyb20gdGhlIGJ1
aWxkIChRdC9FRkwvR1RLIG9ubHkpCiAgIC0tbm8td2Via2l0MiAgICAgICAgICAgICAgICAgICAg
ICBPbWl0IFdlYktpdDIgY29kZSBmcm9tIHRoZSBidWlsZAogCisgIC0tY3VybCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVc2UgbGliQ3VybCBhcyBuZXR3b3JrIGJhY2tlbmQgKE5peCBvbmx5
KQorICAtLW9wZW5nbGVzMiAgICAgICAgICAgICAgICAgICAgICAgVXNlIEVHTCBhbmQgT3BlbkdM
RVMyIGluc3RlYWQgb2YgR0xYIChOaXggb25seSkKKwogRU9GCiAKIG15ICVvcHRpb25zID0gKApA
QCAtMTUyLDYgKzE5MCw4IEBAIG15ICVvcHRpb25zID0gKAogICAgICduby13ZWJraXQxJyA9PiBc
JG5vV2ViS2l0MSwKICAgICAnbm8td2Via2l0MicgPT4gXCRub1dlYktpdDIsCiAgICAgJ2NvdmVy
YWdlJyA9PiBcJGNvdmVyYWdlU3VwcG9ydCwKKyAgICAnY3VybCcgPT4gXCRjdXJsLAorICAgICdv
cGVuZ2xlczInID0+IFwkb3BlbmdsZXMyLAogKTsKIAogIyBCdWlsZCB1c2FnZSB0ZXh0IGFuZCBv
cHRpb25zIGxpc3QgZnJvbSBmZWF0dXJlcwpAQCAtMjczLDYgKzMxMywyNCBAQCBpZiAoaXNJbnNw
ZWN0b3JGcm9udGVuZCgpKSB7CiAKIG15ICRyZXN1bHQgPSAwOwogCitpZiAoaXNOaXgoKSkgewor
ICAgIGlmICgkbm9XZWJLaXQyKSB7CisgICAgICAgIHByaW50IFNUREVSUiAiTml4IGlzIGEgV2Vi
S2l0MiBwb3J0LCB5b3UgY2FuJ3QgZGlzYWJsZSBXZWJLaXQyIG9uIGl0IVxuIjsKKyAgICAgICAg
ZXhpdCAxOworICAgIH0KKworICAgICMgQnkgZGVmYXVsdCB3ZSBidWlsZCB1c2luZyBhbGwgb2Yg
dGhlIGF2YWlsYWJsZSBDUFVzLgorICAgICRtYWtlQXJncyAuPSAoJG1ha2VBcmdzID8gIiAiIDog
IiIpIC4gIi1qIiAuIG51bWJlck9mQ1BVcygpIGlmICRtYWtlQXJncyAhfiAvLWpccypcZCsvOwor
ICAgICRjbWFrZUFyZ3MgPSAiLURXVEZfVVNFX0NVUkw9T04gIiAuICRjbWFrZUFyZ3MgaWYgJGN1
cmw7CisgICAgJGNtYWtlQXJncyA9ICItRFdURl9VU0VfT1BFTkdMX0VTXzI9T04gIiAuICRjbWFr
ZUFyZ3MgaWYgJG9wZW5nbGVzMjsKKworICAgICMgV2UgcmVtb3ZlIENNYWtlQ2FjaGUgdG8gYXZv
aWQgdGhlIGJvdHMgdG8gcmV1c2UgY2FjaGVkIGZsYWdzIHdoZW4KKyAgICAjIHdlIGVuYWJsZSBu
ZXcgZmVhdHVyZXMuIFRoaXMgZm9yY2VzIGEgcmVjb25maWd1cmF0aW9uLgorICAgIHJlbW92ZUNN
YWtlQ2FjaGUoKTsKKworICAgIGJ1aWxkQ01ha2VQcm9qZWN0T3JFeGl0KCRjbGVhbiwgIk5peCIs
ICRwcmVmaXhQYXRoLCAkbWFrZUFyZ3MsIChjbWFrZUJhc2VkUG9ydEFyZ3VtZW50cygpLCBjTWFr
ZUFyZ3NGcm9tRmVhdHVyZXMoKSksICRjbWFrZUFyZ3MpOworfQorCiBpZiAoaXNFZmwoKSkgewog
ICAgICMgQnkgZGVmYXVsdCB3ZSBidWlsZCB1c2luZyBhbGwgb2YgdGhlIGF2YWlsYWJsZSBDUFVz
LgogICAgICRtYWtlQXJncyAuPSAoJG1ha2VBcmdzID8gIiAiIDogIiIpIC4gIi1qIiAuIG51bWJl
ck9mQ1BVcygpIGlmICRtYWtlQXJncyAhfiAvLWpccypcZCsvOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy9idWlsZC13ZWJraXR0ZXN0cnVubmVyIGIvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXR0ZXN0cnVubmVyCmluZGV4IGU1YjIzNTQuLmM4YTM0MmIgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0dGVzdHJ1bm5lcgorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdl
YmtpdHRlc3RydW5uZXIKQEAgLTYzLDcgKzYzLDcgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkg
ewogICAgICRyZXN1bHQgPSBidWlsZFhDb2RlUHJvamVjdCgiV2ViS2l0VGVzdFJ1bm5lciIsICRj
bGVhbiwgWGNvZGVPcHRpb25zKCksIEBBUkdWKTsKIH0gZWxzaWYgKGlzQXBwbGVXaW5XZWJLaXQo
KSkgewogICAgICRyZXN1bHQgPSBidWlsZFZpc3VhbFN0dWRpb1Byb2plY3QoIldlYktpdFRlc3RS
dW5uZXIuc2xuIiwgJGNsZWFuKTsKLX0gZWxzaWYgKGlzUXQoKSB8fCBpc0d0aygpIHx8IGlzRWZs
KCkpIHsKK30gZWxzaWYgKGlzUXQoKSB8fCBpc0d0aygpIHx8IGlzRWZsKCkgfHwgaXNOaXgoKSkg
ewogICAgICMgUXQgYW5kIEdUSysgYnVpbGQgZXZlcnl0aGluZyBpbiBvbmUgc2hvdC4gTm8gbmVl
ZCB0byBidWlsZCBhbnl0aGluZyBoZXJlLgogICAgICRyZXN1bHQgPSAwOwogfSBlbHNlIHsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWphdmFzY3JpcHRjb3JlLXRlc3RzIGIvVG9vbHMv
U2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMKaW5kZXggOGI3OWYyNS4uNDQ4MjlmZiAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMKKysrIGIv
VG9vbHMvU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUtdGVzdHMKQEAgLTU3LDYgKzU3LDEwIEBA
IG15IEB0ZXN0c1RvU2tpcCA9ICgKICAgICAiZWNtYS9EYXRlLzE1LjkuNS4xNC5qcyIsCiAgICAg
ImVjbWEvRGF0ZS8xNS45LjUuMzEtMS5qcyIsCiAgICAgImVjbWEvRGF0ZS8xNS45LjUuMzQtMS5q
cyIsCisgICAgIyBUZXN0cyBmYWlsaW5nIHdoZW4gcnVubmluZyBpbiBCUlQgdGltZXpvbmUKKyAg
ICAiZWNtYS9EYXRlLzE1LjkuNS4yOC0xLmpzIiwKKyAgICAiZWNtYS9EYXRlLzE1LjkuNS4yOS0x
LmpzIiwKKyAgICAiZWNtYS9EYXRlLzE1LjkuNS4zNS0xLmpzIiwKICk7CiAKIG15ICRqc0RyaXZl
ckFyZ3MgPSAiLUwgIiAuIGpvaW4oIiAiLCBAdGVzdHNUb1NraXApOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9ydW4tbGF1bmNoZXIgYi9Ub29scy9TY3JpcHRzL3J1bi1sYXVuY2hlcgppbmRl
eCA2Njg4NmZlLi5lODM5YjVhIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3J1bi1sYXVuY2hl
cgorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1sYXVuY2hlcgpAQCAtNzMsNiArNzMsMTIgQEAgaWYg
KGlzUXQoKSkgewogICAgICAgICB1bnNoaWZ0KEBBUkdWLCAoIi0tZ3RrIiwgInJ1biIpKTsKICAg
ICB9CiAKKyAgICBpZiAoaXNOaXgoKSkgeworICAgICAgICB1bnNoaWZ0KEBBUkdWLCBjYXRkaXIo
JGxhdW5jaGVyUGF0aCwgImJpbiIsICJNaW5pQnJvd3NlciIpKTsKKyAgICAgICAgJGxhdW5jaGVy
UGF0aCA9IGNhdGRpcihzb3VyY2VEaXIoKSwgIlRvb2xzIiwgImpoYnVpbGQiLCAiamhidWlsZC13
cmFwcGVyIik7CisgICAgICAgIHVuc2hpZnQoQEFSR1YsICgiLS1uaXgiLCAicnVuIikpOworICAg
IH0KKwogICAgIGlmIChpc0VmbCgpKSB7CiAgICAgICAgIGlmIChpc1dLMigpKSB7CiAgICAgICAg
ICAgICB1bnNoaWZ0KEBBUkdWLCBjYXRkaXIoJGxhdW5jaGVyUGF0aCwgImJpbiIsICJNaW5pQnJv
d3NlciIpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLW5peC10ZXN0cyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLW5peC10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
Li42Nzk4ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tbml4LXRlc3Rz
CkBAIC0wLDAgKzEsNDQgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCit1c2Ugc3RyaWN0OwordXNlIEZpbmRCaW47Cit1c2Ug
bGliICRGaW5kQmluOjpCaW47Cit1c2Ugd2Via2l0ZGlyczsKKworc2V0Q29uZmlndXJhdGlvbigp
OworCisjIE1hbnVhbGx5IGFkZCB0aGlzIGZvciBqaGJ1aWxkV3JhcHBlclByZWZpeElmTmVlZGVk
KCkuCitwdXNoKEBBUkdWLCAiLS1uaXgiKTsKKworIyBUZWxsIENUZXN0IHRvIGR1bXAgZ3Rlc3Qg
b3V0cHV0IGluIGNhc2Ugb2YgZmFpbHVyZS4KKyRFTlZ7Q1RFU1RfT1VUUFVUX09OX0ZBSUxVUkV9
ID0gIjEiOworCitidWlsZENNYWtlUHJvamVjdE9yRXhpdCgwLCAiTml4IiwgdW5kZWYsICJ0ZXN0
IiwgY21ha2VCYXNlZFBvcnRBcmd1bWVudHMoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3J1bi13ZWJraXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMKaW5kZXgg
ZmQ1MDdlNC4uZGM2ZmZiZCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRl
c3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cwpAQCAtOTAsNiArOTAsOCBA
QCBpZiAoaXNRdCgpKSB7CiAgICAgcHVzaChAQVJHViwgIi0tZ3RrIik7CiB9IGVsc2lmIChpc0Vm
bCgpKSB7CiAgICAgcHVzaChAQVJHViwgIi0tZWZsIik7Cit9IGVsc2lmIChpc05peCgpKSB7Cisg
ICAgcHVzaChAQVJHViwgIi0tbml4Iik7CiB9IGVsc2lmIChpc1dpbkNhaXJvKCkpIHsKICAgICBw
dXNoKEBBUkdWLCAiLS13aW5jYWlybyIpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy91
cGRhdGUtd2Via2l0LWxpYnMtamhidWlsZCBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdC1s
aWJzLWpoYnVpbGQKaW5kZXggYTE0ODg4Ny4uYTA3NzVhYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy91cGRhdGUtd2Via2l0LWxpYnMtamhidWlsZAorKysgYi9Ub29scy9TY3JpcHRzL3VwZGF0
ZS13ZWJraXQtbGlicy1qaGJ1aWxkCkBAIC0yMywxNSArMjMsMTcgQEAgdXNlIEdldG9wdDo6TG9u
ZzsKIAogbXkgJHBsYXRmb3JtRWZsID0gMDsKIG15ICRwbGF0Zm9ybUd0ayA9IDA7CitteSAkcGxh
dGZvcm1OaXggPSAwOwogCiBteSAkZ2V0T3B0aW9uc1Jlc3VsdCA9IEdldE9wdGlvbnMoCiAgICAg
J2VmbCcgPT4gXCRwbGF0Zm9ybUVmbCwKLSAgICAnZ3RrJyA9PiBcJHBsYXRmb3JtR3RrCisgICAg
J2d0aycgPT4gXCRwbGF0Zm9ybUd0aywKKyAgICAnbml4JyA9PiBcJHBsYXRmb3JtTml4CiAgICAg
KTsKIAogbXkgJHBsYXRmb3JtID0gIiI7CiBpZiAoISRnZXRPcHRpb25zUmVzdWx0KSB7Ci0gICAg
ZGllICJObyBwbGF0Zm9ybSBzcGVjaWZpZWQgZm9yICIgLiBiYXNlbmFtZSgkMCkgLiIuIFVzZSAt
LWd0ayBvciAtLWVmbC5cbiI7CisgICAgZGllICJObyBwbGF0Zm9ybSBzcGVjaWZpZWQgZm9yICIg
LiBiYXNlbmFtZSgkMCkgLiIuIFVzZSAtLWd0aywgLS1lZmwgb3IgLS1uaXguXG4iOwogfSBlbHNl
IHsKICAgICBpZiAoJHBsYXRmb3JtRWZsKSB7CiAgICAgICAgICRwbGF0Zm9ybSA9ICJlZmwiOwpA
QCAtMzksNiArNDEsOSBAQCBpZiAoISRnZXRPcHRpb25zUmVzdWx0KSB7CiAgICAgaWYgKCRwbGF0
Zm9ybUd0aykgewogICAgICAgICAkcGxhdGZvcm0gPSAiZ3RrIjsKICAgICB9CisgICAgaWYgKCRw
bGF0Zm9ybU5peCkgeworICAgICAgICAkcGxhdGZvcm0gPSAibml4IjsKKyAgICB9CiB9CiAKIHN1
YiBnZXRNRDVIYXNoRm9yRmlsZSgkKQpAQCAtMTE4LDcgKzEyMyw3IEBAIGRlbGV0ZSAkRU5We0FS
X0ZMQUdTfSBpZiBleGlzdHMgJEVOVntBUl9GTEFHU307CiAKIGNoZGlyKHJlbGF0aXZlU2NyaXB0
c0RpcigpIC4gIi8uLi9qaGJ1aWxkIikgb3IgZGllICQhOwogCi1teSAlcHJldHR5UGxhdGZvcm0g
PSAoICJlZmwiID0+ICJFRkwiLCAiZ3RrIiA9PiAiR1RLKyIgKTsKK215ICVwcmV0dHlQbGF0Zm9y
bSA9ICggImVmbCIgPT4gIkVGTCIsICJndGsiID0+ICJHVEsrIiwgIm5peCIgPT4gIk5peCIgKTsK
IAogaWYgKC1lIGdldEpoYnVpbGRQYXRoKCkgJiYgamhidWlsZENvbmZpZ3VyYXRpb25DaGFuZ2Vk
KCkpIHsKICAgICBjbGVhbkpoYnVpbGQoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdXBk
YXRlLXdlYmtpdG5peC1saWJzIGIvVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0bml4LWxpYnMK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTNmMzZiZAotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmtpdG5peC1saWJzCkBAIC0wLDAgKzEsMjQg
QEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisKK3VzZSBGaW5kQmluOwordXNlIGxpYiAkRmluZEJpbjo6Qmlu
OwordXNlIHdlYmtpdGRpcnM7CisKK215ICRzY3JpcHRzRGlyID0gcmVsYXRpdmVTY3JpcHRzRGly
KCk7CitzeXN0ZW0oInBlcmwiLCAiJHNjcmlwdHNEaXIvdXBkYXRlLXdlYmtpdC1saWJzLWpoYnVp
bGQiLCAiLS1uaXgiKSA9PSAwIG9yIGRpZSAkITsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0ZGlycy5wbSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQppbmRleCBiNGE1NTI4
Li43NjhmYjFkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCkBAIC05NSw2ICs5NSw3IEBAIG15ICRpc0d0azsK
IG15ICRpc1dpbkNFOwogbXkgJGlzV2luQ2Fpcm87CiBteSAkaXNFZmw7CitteSAkaXNOaXg7CiBt
eSAkaXNCbGFja0JlcnJ5OwogbXkgJGlzSW5zcGVjdG9yRnJvbnRlbmQ7CiBteSAkaXNXSzI7CkBA
IC0zMjIsNyArMzIzLDcgQEAgc3ViIGRldGVybWluZUFyY2hpdGVjdHVyZQogICAgICAgICAgICAg
ICAgICRhcmNoaXRlY3R1cmUgPSAnYXJtdjcnOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgfSBlbHNpZiAoaXNFZmwoKSkgeworICAgIH0gZWxzaWYgKGlzRWZsKCkgfHwgaXNOaXgoKSkg
ewogICAgICAgICBteSAkaG9zdF9wcm9jZXNzb3IgPSAiIjsKICAgICAgICAgJGhvc3RfcHJvY2Vz
c29yID0gYGNtYWtlIC0tc3lzdGVtLWluZm9ybWF0aW9uIHwgZ3JlcCBDTUFLRV9TWVNURU1fUFJP
Q0VTU09SYDsKICAgICAgICAgaWYgKCRob3N0X3Byb2Nlc3NvciA9fiBtL15DTUFLRV9TWVNURU1f
UFJPQ0VTU09SIFwiKFteIl0rKVwiLykgewpAQCAtMzMyLDEzICszMzMsMTMgQEAgc3ViIGRldGVy
bWluZUFyY2hpdGVjdHVyZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCEkYXJjaGl0ZWN0
dXJlICYmIChpc0d0aygpIHx8IGlzQXBwbGVNYWNXZWJLaXQoKSB8fCBpc0VmbCgpKSkgeworICAg
IGlmICghJGFyY2hpdGVjdHVyZSAmJiAoaXNHdGsoKSB8fCBpc0FwcGxlTWFjV2ViS2l0KCkgfHwg
aXNFZmwoKSB8fCBpc05peCgpKSkgewogICAgICAgICAjIEZhbGwgYmFjayB0byBvdXRwdXQgb2Yg
YGFyY2gnLCBpZiBpdCBpcyBwcmVzZW50LgogICAgICAgICAkYXJjaGl0ZWN0dXJlID0gYGFyY2hg
OwogICAgICAgICBjaG9tcCAkYXJjaGl0ZWN0dXJlOwogICAgIH0KIAotICAgIGlmICghJGFyY2hp
dGVjdHVyZSAmJiAoaXNHdGsoKSB8fCBpc0FwcGxlTWFjV2ViS2l0KCkgfHwgaXNFZmwoKSkpIHsK
KyAgICBpZiAoISRhcmNoaXRlY3R1cmUgJiYgKGlzR3RrKCkgfHwgaXNBcHBsZU1hY1dlYktpdCgp
IHx8IGlzRWZsKCkgfHwgaXNOaXgoKSkpIHsKICAgICAgICAgIyBGYWxsIGJhY2sgdG8gb3V0cHV0
IG9mIGB1bmFtZSAtbScsIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgICAgICRhcmNoaXRlY3R1cmUg
PSBgdW5hbWUgLW1gOwogICAgICAgICBjaG9tcCAkYXJjaGl0ZWN0dXJlOwpAQCAtMzg3LDYgKzM4
OCw3IEBAIHN1YiBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkKICAgICBwdXNoKEBhcmdzLCAn
LS1xdCcpIGlmIGlzUXQoKTsKICAgICBwdXNoKEBhcmdzLCAnLS1ndGsnKSBpZiBpc0d0aygpOwog
ICAgIHB1c2goQGFyZ3MsICctLWVmbCcpIGlmIGlzRWZsKCk7CisgICAgcHVzaChAYXJncywgJy0t
bml4JykgaWYgaXNOaXgoKTsKICAgICBwdXNoKEBhcmdzLCAnLS13aW5jYWlybycpIGlmIGlzV2lu
Q2Fpcm8oKTsKICAgICBwdXNoKEBhcmdzLCAnLS13aW5jZScpIGlmIGlzV2luQ0UoKTsKICAgICBw
dXNoKEBhcmdzLCAnLS1ibGFja2JlcnJ5JykgaWYgaXNCbGFja0JlcnJ5KCk7CkBAIC01MzAsNyAr
NTMyLDcgQEAgc3ViIHByb2R1Y3REaXIKIHN1YiBqc2NQcm9kdWN0RGlyCiB7CiAgICAgbXkgJHBy
b2R1Y3REaXIgPSBwcm9kdWN0RGlyKCk7Ci0gICAgJHByb2R1Y3REaXIgLj0gIi9iaW4iIGlmIChp
c1F0KCkgfHwgaXNFZmwoKSk7CisgICAgJHByb2R1Y3REaXIgLj0gIi9iaW4iIGlmIChpc1F0KCkg
fHwgaXNFZmwoKSB8fCBpc05peCgpKTsKICAgICAkcHJvZHVjdERpciAuPSAiL1Byb2dyYW1zIiBp
ZiBpc0d0aygpOwogCiAgICAgcmV0dXJuICRwcm9kdWN0RGlyOwpAQCAtODQ2LDYgKzg0OCw5IEBA
IHN1YiBidWlsdER5bGliUGF0aEZvck5hbWUKICAgICAgICAgfQogICAgICAgICByZXR1cm4gIiRj
b25maWd1cmF0aW9uUHJvZHVjdERpci9saWIvbGliZXdlYmtpdC5zbyI7CiAgICAgfQorICAgIGlm
IChpc05peCgpKSB7CisgICAgICAgIHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyL2xp
Yi9saWJXZWJLaXROaXguc28iOworICAgIH0KICAgICBpZiAoaXNXaW5DRSgpKSB7CiAgICAgICAg
IHJldHVybiAiJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyLyRsaWJyYXJ5TmFtZSI7CiAgICAgfQpA
QCAtOTg5LDggKzk5NCw4IEBAIHN1YiBkZXRlcm1pbmVJc1F0KCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgICMgVGhlIHByZXNlbmNlIG9mIFFURElSIG9ubHkgbWVhbnMgUXQgaWYgLS1n
dGsgb3IgLS1lZmwgb3IgLS1ibGFja2JlcnJ5IG9yIC0td2luY2Fpcm8gYXJlIG5vdCBvbiB0aGUg
Y29tbWFuZC1saW5lCi0gICAgaWYgKGlzR3RrKCkgfHwgaXNFZmwoKSB8fCBpc0JsYWNrQmVycnko
KSB8fCBpc1dpbkNhaXJvKCkpIHsKKyAgICBpZiAoaXNHdGsoKSB8fCBpc0VmbCgpIHx8IGlzQmxh
Y2tCZXJyeSgpIHx8IGlzV2luQ2Fpcm8oKSB8fCBpc05peCgpKSB7CisgICAgIyBUaGUgcHJlc2Vu
Y2Ugb2YgUVRESVIgb25seSBtZWFucyBRdCBpZiAtLWd0ayBvciAtLWVmbCBvciAtLWJsYWNrYmVy
cnkgb3IgLS13aW5jYWlybyBvciAtLW5peCBhcmUgbm90IG9uIHRoZSBjb21tYW5kLWxpbmUKICAg
ICAgICAgJGlzUXQgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0MSw2ICsxMTQ2
LDE3IEBAIHN1YiBpc0VmbCgpCiAgICAgcmV0dXJuICRpc0VmbDsKIH0KIAorc3ViIGRldGVybWlu
ZUlzTml4KCkKK3sKKyAgICByZXR1cm4gaWYgZGVmaW5lZCgkaXNOaXgpOworICAgICRpc05peCA9
IGNoZWNrRm9yQXJndW1lbnRBbmRSZW1vdmVGcm9tQVJHVigiLS1uaXgiKTsKK30KKworc3ViIGlz
Tml4KCkKK3sKKyAgICBkZXRlcm1pbmVJc05peCgpOworICAgIHJldHVybiAkaXNOaXg7Cit9CiBz
dWIgaXNHdGsoKQogewogICAgIGRldGVybWluZUlzR3RrKCk7CkBAIC0xMjc5LDcgKzEyOTUsNyBA
QCBzdWIgaXNDcm9zc0NvbXBpbGF0aW9uKCkKIAogc3ViIGlzQXBwbGVXZWJLaXQoKQogewotICAg
IHJldHVybiAhKGlzUXQoKSBvciBpc0d0aygpIG9yIGlzRWZsKCkgb3IgaXNXaW5DRSgpIG9yIGlz
QmxhY2tCZXJyeSgpKTsKKyAgICByZXR1cm4gIShpc1F0KCkgb3IgaXNHdGsoKSBvciBpc0VmbCgp
IG9yIGlzV2luQ0UoKSBvciBpc0JsYWNrQmVycnkoKSBvciBpc05peCgpKTsKIH0KIAogc3ViIGlz
QXBwbGVNYWNXZWJLaXQoKQpAQCAtMTQ1NCw3ICsxNDcwLDcgQEAgc3ViIHJlbGF0aXZlU2NyaXB0
c0RpcigpCiBzdWIgbGF1bmNoZXJQYXRoKCkKIHsKICAgICBteSAkcmVsYXRpdmVTY3JpcHRzUGF0
aCA9IHJlbGF0aXZlU2NyaXB0c0RpcigpOwotICAgIGlmIChpc0d0aygpIHx8IGlzUXQoKSB8fCBp
c0VmbCgpIHx8IGlzV2luQ0UoKSkgeworICAgIGlmIChpc0d0aygpIHx8IGlzUXQoKSB8fCBpc0Vm
bCgpIHx8IGlzV2luQ0UoKSB8fCBpc05peCgpKSB7CiAgICAgICAgIHJldHVybiAiJHJlbGF0aXZl
U2NyaXB0c1BhdGgvcnVuLWxhdW5jaGVyIjsKICAgICB9IGVsc2lmIChpc0FwcGxlV2ViS2l0KCkp
IHsKICAgICAgICAgcmV0dXJuICIkcmVsYXRpdmVTY3JpcHRzUGF0aC9ydW4tc2FmYXJpIjsKQEAg
LTE0NzMsNiArMTQ4OSw4IEBAIHN1YiBsYXVuY2hlck5hbWUoKQogICAgICAgICByZXR1cm4gIkVX
ZWJMYXVuY2hlci9NaW5pQnJvd3NlciI7CiAgICAgfSBlbHNpZiAoaXNXaW5DRSgpKSB7CiAgICAg
ICAgIHJldHVybiAiV2luQ0VMYXVuY2hlciI7CisgICAgfSBlbHNpZiAoaXNOaXgoKSkgeworICAg
ICAgICByZXR1cm4gIk1pbmlCcm93c2VyIjsKICAgICB9CiB9CiAKQEAgLTE0OTksNyArMTUxNyw3
IEBAIHN1YiBjaGVja1JlcXVpcmVkU3lzdGVtQ29uZmlnCiAgICAgICAgICAgICBwcmludCAiaHR0
cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMveGNvZGVcbiI7CiAgICAgICAgICAgICBwcmlu
dCAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKlxuIjsKICAgICAgICAgfQotICAgIH0gZWxzaWYgKGlzR3RrKCkgb3IgaXNRdCgpIG9y
IGlzRWZsKCkpIHsKKyAgICB9IGVsc2lmIChpc0d0aygpIG9yIGlzUXQoKSBvciBpc0VmbCgpIG9y
IGlzTml4KCkpIHsKICAgICAgICAgbXkgQGNtZHMgPSBxdyhiaXNvbiBncGVyZik7CiAgICAgICAg
IGlmIChpc1F0KCkgYW5kIGlzV2luZG93cygpKSB7CiAgICAgICAgICAgICBwdXNoIEBjbWRzLCAi
d2luX2ZsZXgiOwpAQCAtMTY5NCw3ICsxNzEyLDcgQEAgc3ViIGNvcHlJbnNwZWN0b3JGcm9udGVu
ZEZpbGVzCiAgICAgICAgICRpbnNwZWN0b3JSZXNvdXJjZXNEaXJQYXRoID0gJHByb2R1Y3REaXIg
LiAiL1dlYkNvcmUuZnJhbWV3b3JrL1Jlc291cmNlcy9pbnNwZWN0b3IiOwogICAgIH0gZWxzaWYg
KGlzQXBwbGVXaW5XZWJLaXQoKSkgewogICAgICAgICAkaW5zcGVjdG9yUmVzb3VyY2VzRGlyUGF0
aCA9ICRwcm9kdWN0RGlyIC4gIi9XZWJLaXQucmVzb3VyY2VzL2luc3BlY3RvciI7Ci0gICAgfSBl
bHNpZiAoaXNRdCgpIHx8IGlzR3RrKCkpIHsKKyAgICB9IGVsc2lmIChpc1F0KCkgfHwgaXNHdGso
KSB8fCBpc05peCgpKSB7CiAgICAgICAgIG15ICRwcmVmaXggPSAkRU5WeyJXZWJLaXRJbnN0YWxs
YXRpb25QcmVmaXgifTsKICAgICAgICAgJGluc3BlY3RvclJlc291cmNlc0RpclBhdGggPSAoZGVm
aW5lZCgkcHJlZml4KSA/ICRwcmVmaXggOiAiL3Vzci9zaGFyZSIpIC4gIi93ZWJraXQtMS4wL3dl
Ymluc3BlY3RvciI7CiAgICAgfSBlbHNpZiAoaXNFZmwoKSkgewpAQCAtMjAzNSw2ICsyMDUzLDgg
QEAgc3ViIGpoYnVpbGRXcmFwcGVyUHJlZml4SWZOZWVkZWQoKQogICAgICAgICAgICAgcHVzaChA
cHJlZml4LCAiLS1lZmwiKTsKICAgICAgICAgfSBlbHNpZiAoaXNHdGsoKSkgewogICAgICAgICAg
ICAgcHVzaChAcHJlZml4LCAiLS1ndGsiKTsKKyAgICAgICAgfSBlbHNpZiAoaXNOaXgoKSkgewor
ICAgICAgICAgICAgcHVzaChAcHJlZml4LCAiLS1uaXgiKTsKICAgICAgICAgfQogICAgICAgICBw
dXNoKEBwcmVmaXgsICJydW4iKTsKIApAQCAtMjEyOSw2ICsyMTQ5LDkgQEAgc3ViIGJ1aWxkQ01h
a2VQcm9qZWN0T3JFeGl0KCQkJCRAKQogICAgICAgICBzeXN0ZW0oInBlcmwiLCAiJHNvdXJjZURp
ci9Ub29scy9TY3JpcHRzL3VwZGF0ZS13ZWJraXRlZmwtbGlicyIpID09IDAgb3IgZGllICQhOwog
ICAgIH0KIAorICAgIGlmIChpc05peCgpICYmIGNoZWNrRm9yQXJndW1lbnRBbmRSZW1vdmVGcm9t
QVJHVigiLS11cGRhdGUtbml4IikpIHsKKyAgICAgICAgc3lzdGVtKCJwZXJsIiwgIiRzb3VyY2VE
aXIvVG9vbHMvU2NyaXB0cy91cGRhdGUtd2Via2l0bml4LWxpYnMiKSA9PSAwIG9yIGRpZSAkITsK
KyAgICB9CiAKICAgICAkcmV0dXJuQ29kZSA9IGV4aXRTdGF0dXMoZ2VuZXJhdGVCdWlsZFN5c3Rl
bUZyb21DTWFrZVByb2plY3QoJHBvcnQsICRwcmVmaXhQYXRoLCBAY21ha2VBcmdzKSk7CiAgICAg
ZXhpdCgkcmV0dXJuQ29kZSkgaWYgJHJldHVybkNvZGU7CkBAIC0yMTUyLDYgKzIxNzUsNyBAQCBz
dWIgY21ha2VCYXNlZFBvcnROYW1lKCkKICAgICByZXR1cm4gIkJsYWNrQmVycnkiIGlmIGlzQmxh
Y2tCZXJyeSgpOwogICAgIHJldHVybiAiRWZsIiBpZiBpc0VmbCgpOwogICAgIHJldHVybiAiV2lu
Q0UiIGlmIGlzV2luQ0UoKTsKKyAgICByZXR1cm4gIk5peCIgaWYgaXNOaXgoKTsKICAgICByZXR1
cm4gIiI7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Nv
bmZpZy9wb3J0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NvbmZpZy9wb3J0
cy5weQppbmRleCAwYzIwZGFlLi5jNjExMjgzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9jb25maWcvcG9ydHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vY29uZmlnL3BvcnRzLnB5CkBAIC03MCw2ICs3MCw3IEBAIGNsYXNzIERlcHJlY2F0
ZWRQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAicXQtd2syIjogUXRXSzJQb3J0LAogICAgICAg
ICAgICAgImVmbCI6IEVmbFBvcnQsCiAgICAgICAgICAgICAiZWZsLXdrMiI6IEVmbFdLMlBvcnQs
CisgICAgICAgICAgICAibml4IjogTml4UG9ydAogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHRf
cG9ydCA9IHsKICAgICAgICAgICAgICJXaW5kb3dzIjogV2luUG9ydCwKQEAgLTIzMCwzICsyMzEs
MTMgQEAgY2xhc3MgRWZsV0syUG9ydChEZXByZWNhdGVkUG9ydCk6CiAgICAgICAgIGNvbW1hbmQu
YXBwZW5kKCItLW5vLXdlYmtpdDEiKQogICAgICAgICBjb21tYW5kLmFwcGVuZChzdXBlcihFZmxX
SzJQb3J0LCBzZWxmKS5tYWtlQXJncygpKQogICAgICAgICByZXR1cm4gY29tbWFuZAorCitjbGFz
cyBOaXhQb3J0KERlcHJlY2F0ZWRQb3J0KToKKyAgICBwb3J0X2ZsYWdfbmFtZSA9ICJuaXgiCisK
KyAgICBkZWYgYnVpbGRfd2Via2l0X2NvbW1hbmQoc2VsZiwgYnVpbGRfc3R5bGU9Tm9uZSk6Cisg
ICAgICAgIGNvbW1hbmQgPSBzdXBlcihOaXhQb3J0LCBzZWxmKS5idWlsZF93ZWJraXRfY29tbWFu
ZChidWlsZF9zdHlsZT1idWlsZF9zdHlsZSkKKyAgICAgICAgY29tbWFuZC5hcHBlbmQoIi0tbml4
IikKKyAgICAgICAgY29tbWFuZC5hcHBlbmQoIi0tdXBkYXRlLW5peCIpCisgICAgICAgIGNvbW1h
bmQuYXBwZW5kKHN1cGVyKE5peFBvcnQsIHNlbGYpLm1ha2VBcmdzKCkpCisgICAgICAgIHJldHVy
biBjb21tYW5kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9y
eS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CmluZGV4IGU5ZjE0
NjUuLjgwMzkxNTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0
b3J5LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CkBAIC00
Miw2ICs0Miw4IEBAIGRlZiBwbGF0Zm9ybV9vcHRpb25zKHVzZV9nbG9icz1GYWxzZSk6CiAgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLWVmbCcsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBk
ZXN0PSdwbGF0Zm9ybScsCiAgICAgICAgICAgICBjb25zdD0oJ2VmbConIGlmIHVzZV9nbG9icyBl
bHNlICdlZmwnKSwKICAgICAgICAgICAgIGhlbHA9KCdBbGlhcyBmb3IgLS1wbGF0Zm9ybT1lZmwq
JyBpZiB1c2VfZ2xvYnMgZWxzZSAnQWxpYXMgZm9yIC0tcGxhdGZvcm09ZWZsJykpLAorICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbignLS1uaXgnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgZGVz
dD0ncGxhdGZvcm0nLAorICAgICAgICAgICAgY29uc3Q9KCduaXgnKSwgaGVscD0oJ0FsaWFzIGZv
ciAtLXBsYXRmb3JtPW5peCcpKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tZ3Rr
JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlc3Q9J3BsYXRmb3JtJywKICAgICAgICAgICAgIGNv
bnN0PSgnZ3RrKicgaWYgdXNlX2dsb2JzIGVsc2UgJ2d0aycpLAogICAgICAgICAgICAgaGVscD0o
J0FsaWFzIGZvciAtLXBsYXRmb3JtPWd0ayonIGlmIHVzZV9nbG9icyBlbHNlICdBbGlhcyBmb3Ig
LS1wbGF0Zm9ybT1ndGsnKSksCkBAIC03NSw2ICs3Nyw3IEBAIGRlZiBfYnVpbGRlcl9vcHRpb25z
KGJ1aWxkZXJfbmFtZSk6CiBjbGFzcyBQb3J0RmFjdG9yeShvYmplY3QpOgogICAgIFBPUlRfQ0xB
U1NFUyA9ICgKICAgICAgICAgJ2VmbC5FZmxQb3J0JywKKyAgICAgICAgJ25peC5OaXhQb3J0JywK
ICAgICAgICAgJ2d0ay5HdGtQb3J0JywKICAgICAgICAgJ21hYy5NYWNQb3J0JywKICAgICAgICAg
J21vY2tfZHJ0Lk1vY2tEUlRQb3J0JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9uaXgucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbml4LnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGEwYzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbml4LnB5CkBAIC0wLDAgKzEsMTE5IEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6Cisj
CisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyIiIldlYktpdCBOaXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50
ZXJmYWNlLiIiIgorCitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9k
ZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KK2Zyb20gd2Vi
a2l0cHkucG9ydC5iYXNlIGltcG9ydCBQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQucHVsc2VhdWRp
b19zYW5pdGl6ZXIgaW1wb3J0IFB1bHNlQXVkaW9TYW5pdGl6ZXIKKworCitjbGFzcyBOaXhQb3J0
KFBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICduaXgnCisKKyAgICBkZWYgX3drMl9wb3J0X25hbWUo
c2VsZik6CisgICAgICAgIHJldHVybiAnbml4JworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVm
IGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6
CisgICAgICAgICIiIkRldGVybWluZSB0aGUgcG9ydCBuYW1lIGJhc2VkIG9uIGhvc3QgYW5kIG9w
dGlvbnMgdmFsdWVzLiIiIgorICAgICAgICAjIEN1cnJlbnRseSB0aGUgb25seSAicG9ydCIgaW5z
dGFuY2Ugc3VwcG9ydGVkIGJ5IE5peCBpcyAibml4Ii4gUmVpbXBsZW1lbnRpbmcKKyAgICAgICAg
IyB0aGlzIG1ldGhvZCBhdm9pZHMgY2hhbmdpbmcgcG9ydCBuYW1lIHRvIG5peC13azIsIHdoaWNo
IGlzIHRoZSBkZWZhdWx0CisgICAgICAgICMgYmVoYXZpb3IgaW4gYmFzZS5weS4KKyAgICAgICAg
cmV0dXJuIHBvcnRfbmFtZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHN1cGVyKE5peFBvcnQsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJn
cykKKworICAgICAgICBzZWxmLl9qaGJ1aWxkX3dyYXBwZXJfcGF0aCA9IHNlbGYucGF0aF9mcm9t
X3dlYmtpdF9iYXNlKCdUb29scycsICduaXgnLCAncnVuLXdpdGgtamhidWlsZCcpCisKKyAgICAg
ICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3dyYXBwZXInLCBzZWxmLl9qaGJ1aWxkX3dyYXBw
ZXJfcGF0aCkKKyAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3dlYmtpdF90ZXN0X3J1
bm5lcicsIFRydWUpCisgICAgICAgIHNlbGYud2VicHJvY2Vzc19jbWRfcHJlZml4ID0gc2VsZi5n
ZXRfb3B0aW9uKCd3ZWJwcm9jZXNzX2NtZF9wcmVmaXgnKQorCisgICAgICAgIHNlbGYuX3B1bHNl
YXVkaW9fc2FuaXRpemVyID0gUHVsc2VBdWRpb1Nhbml0aXplcigpCisKKyAgICBkZWYgX3BvcnRf
ZmxhZ19mb3Jfc2NyaXB0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuICItLW5peCIKKworICAgIGRl
ZiBzZXR1cF90ZXN0X3J1bihzZWxmKToKKyAgICAgICAgc2VsZi5fcHVsc2VhdWRpb19zYW5pdGl6
ZXIudW5sb2FkX3B1bHNlYXVkaW9fbW9kdWxlKCkKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zv
cl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAgIGVudiA9IHN1cGVyKE5p
eFBvcnQsIHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICAg
ICAgIyBJZiBESVNQTEFZIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuc2V0IGluIHRoZSBzeXN0
ZW0KKyAgICAgICAgIyBlLmcuIG9uIGJ1aWxkIGJvdCwgcmVtb3ZlIERJU1BMQVkgdmFyaWFibGUg
ZnJvbSB0aGUgZGljdGlvbmFyeQorICAgICAgICBpZiBub3QgJ0RJU1BMQVknIGluIG9zLmVudmly
b246CisgICAgICAgICAgICBkZWwgZW52WydESVNQTEFZJ10KKyAgICAgICAgZW52WydURVNUX1JV
Tk5FUl9JTkpFQ1RFRF9CVU5ETEVfRklMRU5BTUUnXSA9IHNlbGYuX2J1aWxkX3BhdGgoJ2xpYics
ICdsaWJUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGUuc28nKQorICAgICAgICBlbnZbJ1RFU1RfUlVO
TkVSX1BMVUdJTl9QQVRIJ10gPSBzZWxmLl9idWlsZF9wYXRoKCdsaWInKQorICAgICAgICBpZiBz
ZWxmLndlYnByb2Nlc3NfY21kX3ByZWZpeDoKKyAgICAgICAgICAgIGVudlsnV0VCX1BST0NFU1Nf
Q01EX1BSRUZJWCddID0gc2VsZi53ZWJwcm9jZXNzX2NtZF9wcmVmaXgKKworICAgICAgICByZXR1
cm4gZW52CisKKyAgICBkZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgorICAgICAgICAjIFRl
c3RzIHJ1biBjb25zaWRlcmFibHkgc2xvd2VyIHVuZGVyIGdkYgorICAgICAgICAjIG9yIHZhbGdy
aW5kLgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYnByb2Nlc3NfY21kX3ByZWZpeCcp
OgorICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKKyAgICAgICAgcmV0dXJuIHN1cGVyKE5p
eFBvcnQsIHNlbGYpLmRlZmF1bHRfdGltZW91dF9tcygpCisKKyAgICBkZWYgY2xlYW5fdXBfdGVz
dF9ydW4oc2VsZik6CisgICAgICAgIHN1cGVyKE5peFBvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3Rf
cnVuKCkKKyAgICAgICAgc2VsZi5fcHVsc2VhdWRpb19zYW5pdGl6ZXIucmVzdG9yZV9wdWxzZWF1
ZGlvX21vZHVsZSgpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZpZ3VyYXRpb25z
KHNlbGYpOgorICAgICAgICByZXR1cm4gW1Rlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5f
dmVyc2lvbiwgYXJjaGl0ZWN0dXJlPSd4ODYnLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpIGZvciBi
dWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTXQorCisgICAgZGVmIF9wYXRoX3RvX2Ry
aXZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1aWxkX3BhdGgoJ2JpbicsIHNlbGYu
ZHJpdmVyX25hbWUoKSkKKworICAgIGRlZiBfcGF0aF90b19pbWFnZV9kaWZmKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fYnVpbGRfcGF0aCgnYmluJywgJ0ltYWdlRGlmZicpCisKKyAgICBk
ZWYgX2ltYWdlX2RpZmZfY29tbWFuZChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBy
ZXR1cm4gW3NlbGYuX2poYnVpbGRfd3JhcHBlcl9wYXRoXSArIHN1cGVyKE5peFBvcnQsIHNlbGYp
Ll9pbWFnZV9kaWZmX2NvbW1hbmQoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9zZWFyY2hf
cGF0aHMoc2VsZik6CisgICAgICAgIHJldHVybiBbIHNlbGYucG9ydF9uYW1lIF0KKworICAgIGRl
ZiBzaG93X3Jlc3VsdHNfaHRtbF9maWxlKHNlbGYsIHJlc3VsdHNfZmlsZW5hbWUpOgorICAgICAg
ICBydW5fbGF1bmNoZXJfYXJncyA9IFsiZmlsZTovLyVzIiAlIHJlc3VsdHNfZmlsZW5hbWVdCisg
ICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoInJ1bi1sYXVuY2hlciIsIHJ1bl9sYXVuY2hlcl9hcmdz
KQorCisgICAgZGVmIF9wb3J0X3NwZWNpZmljX2V4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKKyAg
ICAgICAgcGF0aHMgPSBzZWxmLl9zZWFyY2hfcGF0aHMoKQorICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgcGF0aHMuYXBwZW5kKCd3
azInKQorICAgICAgICByZXR1cm4gbGlzdCgoW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93
ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgcCBpbiBwYXRo
c10pKQorCisgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAg
ICAgIHJldHVybiBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgsIFsnbml4JywgJ3drMidd
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L25peF91bml0dGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9uaXhfdW5pdHRlc3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxZGZmZgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9uaXhfdW5pdHRlc3QucHkKQEAgLTAsMCArMSw3MCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVJTIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gY29weSBpbXBvcnQgZGVlcGNvcHkK
KworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZV9tb2NrIGltcG9ydCBNb2Nr
RXhlY3V0aXZlLCBNb2NrRXhlY3V0aXZlMgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91
dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0Citmcm9tIHdlYmtpdHB5
LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydC5uaXggaW1wb3J0
IE5peFBvcnQKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMK
KworCitjbGFzcyBOaXhQb3J0VGVzdChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6CisgICAg
cG9ydF9uYW1lID0gJ25peCcKKyAgICBwb3J0X21ha2VyID0gTml4UG9ydAorICAgIHNlYXJjaF9w
YXRoc19jYXNlcyA9IFsKKyAgICAgICAgeydzZWFyY2hfcGF0aHMnOlsnbml4JywgJ3drMiddLCAn
b3NfbmFtZSc6J2xpbnV4J30KKyAgICBdCisgICAgZXhwZWN0YXRpb25fZmlsZXNfY2FzZXMgPSBb
CisgICAgICAgIHsnc2VhcmNoX3BhdGhzJzpbJycsICduaXgnLCAnd2syJ10sICdvc19uYW1lJzon
bGludXgnfQorICAgIF0KKworICAgIGRlZiBfYXNzZXJ0X3NlYXJjaF9wYXRoKHNlbGYsIHNlYXJj
aF9wYXRocywgb3NfbmFtZSk6CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1l
PW9zX25hbWUpCisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9c2VsZi5w
b3J0X25hbWUsIGhvc3Q9aG9zdCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5u
ZXI9VHJ1ZSkpCisgICAgICAgIGFic29sdXRlX3NlYXJjaF9wYXRocyA9IG1hcChwb3J0Ll93ZWJr
aXRfYmFzZWxpbmVfcGF0aCwgc2VhcmNoX3BhdGhzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHBvcnQuYmFzZWxpbmVfc2VhcmNoX3BhdGgoKSwgYWJzb2x1dGVfc2VhcmNoX3BhdGhzKQor
CisgICAgZGVmIF9hc3NlcnRfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYsIHNlYXJjaF9wYXRocywg
b3NfbmFtZSk6CisgICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdChvc19uYW1lPW9zX25hbWUp
CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9c2VsZi5wb3J0X25hbWUs
IGhvc3Q9aG9zdCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh3ZWJraXRfdGVzdF9ydW5uZXI9VHJ1ZSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuZXhwZWN0YXRpb25zX2ZpbGVzKCksIHNl
YXJjaF9wYXRocykKKworICAgIGRlZiB0ZXN0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgor
ICAgICAgICBmb3IgY2FzZSBpbiBzZWxmLnNlYXJjaF9wYXRoc19jYXNlczoKKyAgICAgICAgICAg
IHNlbGYuX2Fzc2VydF9zZWFyY2hfcGF0aCgqKmNhc2UpCisKKyAgICBkZWYgdGVzdF9leHBlY3Rh
dGlvbnNfZmlsZXMoc2VsZik6CisgICAgICAgIGZvciBjYXNlIGluIHNlbGYuZXhwZWN0YXRpb25f
ZmlsZXNfY2FzZXM6CisgICAgICAgICAgICBleHBlY3RhdGlvbnNfY2FzZSA9IGRlZXBjb3B5KGNh
c2UpCisgICAgICAgICAgICBleHBlY3RhdGlvbnNfY2FzZVsnc2VhcmNoX3BhdGhzJ10gPSBtYXAo
bGFtYmRhIHBhdGg6ICcvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25z
JyAgaWYgbm90IHBhdGggZWxzZSAnL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
JXMvVGVzdEV4cGVjdGF0aW9ucycgJSAocGF0aCksIGV4cGVjdGF0aW9uc19jYXNlWydzZWFyY2hf
cGF0aHMnXSkKKyAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9leHBlY3RhdGlvbnNfZmlsZXMoKipl
eHBlY3RhdGlvbnNfY2FzZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdGltZW91dF9tcyhzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VfcG9ydChvcHRpb25zPU1vY2tP
cHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnKSkuZGVmYXVsdF90aW1lb3V0X21zKCksIDgw
MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9j
a09wdGlvbnMoY29uZmlndXJhdGlvbj0nRGVidWcnKSkuZGVmYXVsdF90aW1lb3V0X21zKCksIDgw
MDAwKQpkaWZmIC0tZ2l0IGEvVG9vbHMvamhidWlsZC9qaGJ1aWxkLXdyYXBwZXIgYi9Ub29scy9q
aGJ1aWxkL2poYnVpbGQtd3JhcHBlcgppbmRleCA5ZDNhODdiLi5hM2E3NTViIDEwMDc1NQotLS0g
YS9Ub29scy9qaGJ1aWxkL2poYnVpbGQtd3JhcHBlcgorKysgYi9Ub29scy9qaGJ1aWxkL2poYnVp
bGQtd3JhcHBlcgpAQCAtOTUsNiArOTUsOCBAQCBkZWYgZGV0ZXJtaW5lX3BsYXRmb3JtKCk6CiAg
ICAgICAgIHJldHVybiAiZWZsIjsKICAgICBpZiAnLS1ndGsnIGluIHN5cy5hcmd2OgogICAgICAg
ICByZXR1cm4gImd0ayI7CisgICAgaWYgJy0tbml4JyBpbiBzeXMuYXJndjoKKyAgICAgICAgcmV0
dXJuICJuaXgiOwogICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHBsYXRmb3JtIHNwZWNpZmllZCBm
b3IgamhidWlsZC13cmFwcGVyLicpCiAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvbml4L2NvbW1vbi5w
eSBiL1Rvb2xzL25peC9jb21tb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWY4MzU3ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL25peC9jb21tb24ucHkKQEAgLTAs
MCArMSwzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
IyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworaW1wb3J0IG9zCisKK3NjcmlwdF9kaXIgPSBOb25l
CisKKworZGVmIHNjcmlwdF9wYXRoKCphcmdzKToKKyAgICBnbG9iYWwgc2NyaXB0X2RpcgorICAg
IGlmIG5vdCBzY3JpcHRfZGlyOgorICAgICAgICBzY3JpcHRfZGlyID0gb3MucGF0aC5qb2luKG9z
LnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICdTY3JpcHRzJykKKyAgICByZXR1cm4gb3Mu
cGF0aC5qb2luKCooc2NyaXB0X2RpciwpICsgYXJncykKKworCitkZWYgdG9wX2xldmVsX3BhdGgo
KmFyZ3MpOgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oKigoc2NyaXB0X3BhdGgoJy4uJywgJy4u
JyksKSArIGFyZ3MpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbml4L2poYnVpbGQubW9kdWxlcyBiL1Rv
b2xzL25peC9qaGJ1aWxkLm1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uODc5OGMwZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL25peC9qaGJ1aWxkLm1vZHVsZXMK
QEAgLTAsMCArMSwxMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIG1vZHVs
ZXNldCBTWVNURU0gIm1vZHVsZXNldC5kdGQiPgorPD94bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0
L3hzbCIgaHJlZj0ibW9kdWxlc2V0LnhzbCI/PgorPG1vZHVsZXNldD4KKworICA8bWV0YW1vZHVs
ZSBpZD0id2Via2l0bml4LXRlc3RpbmctZGVwZW5kZW5jaWVzIj4KKyAgICA8ZGVwZW5kZW5jaWVz
PgorICAgICAgPGRlcCBwYWNrYWdlPSJjYWlybyIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJmb250
cyIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJmb250Y29uZmlnIi8+CisgICAgICA8ZGVwIHBhY2th
Z2U9ImZyZWV0eXBlNiIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJoYXJmYnV6eiIvPgorICAgICAg
PGRlcCBwYWNrYWdlPSJnbGliIi8+CisgICAgICA8ZGVwIHBhY2thZ2U9ImdsaWItbmV0d29ya2lu
ZyIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJsaWJzb3VwIi8+CisgICAgPC9kZXBlbmRlbmNpZXM+
CisgIDwvbWV0YW1vZHVsZT4KKworICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJn
aXRodWIuY29tIgorICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tIi8+CisgIDxyZXBvc2l0
b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9InNvdXJjZXdhcmUub3JnIgorICAgICAgaHJlZj0iZnRw
Oi8vc291cmNld2FyZS5vcmciLz4KKyAgPHJlcG9zaXRvcnkgdHlwZT0idGFyYmFsbCIgbmFtZT0i
ZnRwLmdub21lLm9yZyIKKyAgICAgIGhyZWY9Imh0dHA6Ly9mdHAuZ25vbWUub3JnIi8+CisgIDxy
ZXBvc2l0b3J5IHR5cGU9ImdpdCIgbmFtZT0iZ2l0Lmdub21lLm9yZyIKKyAgICAgIGhyZWY9Imdp
dDovL2dpdC5nbm9tZS5vcmcvIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9
ImNhaXJvZ3JhcGhpY3Mub3JnIgorICAgICAgaHJlZj0iaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3Jn
Ii8+CisgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJhbGwiIG5hbWU9ImZyZWVkZXNrdG9wLm9yZyIK
KyAgICAgIGhyZWY9Imh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnIi8+CisKKyAgPGF1dG90b29s
cyBpZD0iY2Fpcm8iIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+CisgICAgPGRlcGVuZGVuY2llcz4K
KyAgICAgIDxkZXAgcGFja2FnZT0iZm9udGNvbmZpZyIvPgorICAgICAgPGRlcCBwYWNrYWdlPSJw
aXhtYW4iLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnJhbmNoIG1vZHVsZT0icmVsZWFz
ZXMvY2Fpcm8tMS4xMi44LnRhci54eiIgdmVyc2lvbj0iMS4xMi44IgorICAgICAgICAgICAgcmVw
bz0iY2Fpcm9ncmFwaGljcy5vcmciCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6OGZiYjZmYzY2
MTE3YWI0MTAwYmFkODMwY2I0NDc5NDk3ZTUzYzZmM2ZhY2I5OGJmMDVjOGQyOTg1NTRlYmRkOSIK
KyAgICAgICAgICAgIG1kNXN1bT0iOGIzZGNhZGU4NTljNDRmYjdlNTZmYzY4ZWRmZTlhNDUiPgor
ICAgIDwvYnJhbmNoPgorICA8L2F1dG90b29scz4KKworICA8YXV0b3Rvb2xzIGlkPSJwaXhtYW4i
IGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSIKKyAgICAgICAgICAgICBhdXRvZ2VuYXJncz0iLS1lbmFi
bGUtZ3RrPW5vIj4KKyAgICA8YnJhbmNoIG1vZHVsZT0ic25hcHNob3RzL3BpeG1hbi0wLjI5LjIu
dGFyLmd6IiB2ZXJzaW9uPSIwLjI5LjIiCisgICAgICAgICAgICByZXBvPSJjYWlyb2dyYXBoaWNz
Lm9yZyIKKyAgICAgICAgICAgIGhhc2g9InNoYTI1Njo0YzRlOTIxNDNhNDU1N2E0NjE3YjgwY2Fm
MGE1OGNjYjAxMmQ4MjkzNzQxZTc1Mzg5MDM3Y2Q1MTMzYjMzNWRiIgorICAgICAgICAgICAgbWQ1
c3VtPSI4ZjU3OTVlYTk4Y2FkZDdiN2YxMmU0YjM3MzUwMGVlZiI+CisgICAgPC9icmFuY2g+Cisg
IDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9ImZvbnRzIgorICAgICAgICAgICAgIHNr
aXAtYXV0b2dlbj0idHJ1ZSI+CisgICAgPGJyYW5jaCBtb2R1bGU9ImRvd25sb2Fkcy9tcm9iaW5z
b24vd2Via2l0Z3RrLXRlc3QtZm9udHMvd2Via2l0Z3RrLXRlc3QtZm9udHMtMC4wLjMudGFyLmd6
IiB2ZXJzaW9uPSIwLjAuMyIKKyAgICAgICAgICAgIHJlcG89ImdpdGh1Yi5jb20iCisgICAgICAg
ICAgICBoYXNoPSJzaGEyNTY6NGEwYTAxZjAwODU1OTk3Y2RjYzcyMDFmMTY0YjMzYTRlNDE0NGU4
ZWFkZjQwYTVlNTQyYTFjNDQ4ZTAzNWRlNSIKKyAgICAgICAgICAgIG1kNXN1bT0iMTBlNzRkZTFh
OGJhOTYxZDkwMzc5OTRkNDI3YjFkZDIiIHNpemU9IjE2OTgxNjQyIj4KKyAgICA8L2JyYW5jaD4K
KyAgPC9hdXRvdG9vbHM+CisKKyAgPGF1dG90b29scyBpZD0ibGliZmZpIiBhdXRvZ2VuLXNoPSJj
b25maWd1cmUiPgorICAgIDxicmFuY2ggbW9kdWxlPSIvcHViL2xpYmZmaS9saWJmZmktMy4wLjEx
LnRhci5neiIgdmVyc2lvbj0iMy4wLjExIgorICAgICAgICAgICAgIHJlcG89InNvdXJjZXdhcmUu
b3JnIgorICAgICAgICAgICAgIGhhc2g9InNoYTI1Njo3MGJmYjAxMzU2MzYwMDg5YWE5N2QzZTcx
ZTNlZGYwNWQxOTU1OTlmZDgyMmU5MjJlNTBkNDZhMDA1NWE2MjgzIgorICAgICAgICAgICAgIG1k
NXN1bT0iZjY5Yjk2OTMyMjdkOTc2ODM1YjQ4NTdiMWJhN2QwZTMiLz4KKyAgPC9hdXRvdG9vbHM+
CisKKyAgPHRhcmJhbGwgaWQ9ImZyZWV0eXBlNiI+CisgICAgPHNvdXJjZSBocmVmPSJkb3dubG9h
ZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzL2ZyZWV0eXBlL2ZyZWV0eXBlLTIuNC4yLnRhci5i
ejIiIHZlcnNpb249IjIuNC4yIgorICAgICAgICAgICAgaGFzaD0ic2hhMjU2OjlhOTg3YWVmOGM1
MGQ5YmNmZGZkYzlmMDEyZjhiZDBkZTYwOTVjYzFhNTUyNGU2MmMxYTAzN2RlYjhkYWNiZmUiCisg
ICAgICAgICAgICBtZDVzdW09IjY0N2VlOGVkMjY2ZjlhNDExN2M4ZDBhNDg1NWIzZDNlIiAvPgor
ICA8L3RhcmJhbGw+CisKKyAgPGF1dG90b29scyBpZD0iZ2xpYiIKKyAgICAgICAgICAgICBhdXRv
Z2VuLXNoPSJjb25maWd1cmUiCisgICAgICAgICAgICAgYXV0b2dlbmFyZ3M9Ii0tZGlzYWJsZS1k
dHJhY2UiPgorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICA8ZGVwIHBhY2thZ2U9ImxpYmZmaSIv
PgorICAgIDwvZGVwZW5kZW5jaWVzPgorICAgIDxicmFuY2ggbW9kdWxlPSIvcHViL0dOT01FL3Nv
dXJjZXMvZ2xpYi8yLjM2L2dsaWItMi4zNi4wLnRhci54eiIgdmVyc2lvbj0iMi4zNi4wIgorICAg
ICAgICAgICAgcmVwbz0iZnRwLmdub21lLm9yZyIKKyAgICAgICAgICAgIGhhc2g9InNoYTI1Njo0
NTVhOGFiZTg2OTJjNTE3NGJjYzdmZmExNWI5NmE3NTIxYTJmMmY5ZmI0NzU5NDQwNTkyN2MzNWNi
OWJiMjI3Ii8+CisgIDwvYXV0b3Rvb2xzPgorCisgIDxhdXRvdG9vbHMgaWQ9ImdsaWItbmV0d29y
a2luZyI+CisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgIDxkZXAgcGFja2FnZT0iZ2xpYiIvPgor
ICAgIDwvZGVwZW5kZW5jaWVzPgorICAgIDxicmFuY2ggbW9kdWxlPSIvcHViL0dOT01FL3NvdXJj
ZXMvZ2xpYi1uZXR3b3JraW5nLzIuMzMvZ2xpYi1uZXR3b3JraW5nLTIuMzMuMi50YXIueHoiIHZl
cnNpb249IjIuMzMuMiIKKyAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9tZS5vcmciCisgICAgICAg
ICAgICBoYXNoPSJzaGEyNTY6ZTI5OGNmZjM5MzVlYjc1MmJlMjkwYmJmNzM0ZTQ1N2YxODcwYmRi
NTM3MGVlMjkyNjA2ZTYwNDBhODIwNzRlNyIKKyAgICAgICAgICAgIG1kNXN1bT0iNWFiYjM2NGYy
YTBiYWJlMmVjMWUzYTZkNTlmNjkwNDMiLz4KKyAgPC9hdXRvdG9vbHM+CisKKyAgPGF1dG90b29s
cyBpZD0ibGlic291cCIKKyAgICAgICAgICAgICBhdXRvZ2VuYXJncz0iLS13aXRob3V0LWdub21l
IC0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIj4KKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRl
cCBwYWNrYWdlPSJnbGliLW5ldHdvcmtpbmciLz4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8
YnJhbmNoIG1vZHVsZT0iL3B1Yi9HTk9NRS9zb3VyY2VzL2xpYnNvdXAvMi40Mi9saWJzb3VwLTIu
NDIuMC50YXIueHoiIHZlcnNpb249IjIuNDIuMCIKKyAgICAgICAgICAgIHJlcG89ImZ0cC5nbm9t
ZS5vcmciCisgICAgICAgICAgICBoYXNoPSJzaGEyNTY6OWUwZTdlYjVkM2Y3NDAxY2NmNTIxZmJj
Mjg5ZmMxZmEwOTIzYjdjNzgzMzcyOWUyZWQ3Njk2ZjdiODQ4ODkzZSIKKyAgICAgICAgICAgIG1k
NXN1bT0iYTYzMmEzOGQyOTgzYzJhODg2Nzk2NzJkMDA5NDAxMjgiLz4KKyAgPC9hdXRvdG9vbHM+
CisKKyAgPGF1dG90b29scyBpZD0iZm9udGNvbmZpZyIgYXV0b2dlbi1zaD0iY29uZmlndXJlIj4K
KyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgPGRlcCBwYWNrYWdlPSJmcmVldHlwZTYiLz4KKyAg
ICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnJhbmNoIG1vZHVsZT0ic29mdHdhcmUvZm9udGNvbmZp
Zy9yZWxlYXNlL2ZvbnRjb25maWctMi44LjAudGFyLmd6IiB2ZXJzaW9uPSIyLjguMCIKKyAgICAg
ICAgICAgIHJlcG89ImZyZWVkZXNrdG9wLm9yZyIKKyAgICAgICAgICAgIGhhc2g9InNoYTI1Njpm
YTJhMWM2ZWVhNjU0ZDlmY2U3YTRiMTIyMGYxMGM5OWNkZWM4NDhkY2NhZjE2MjVjMDFmMDc2YjMx
MzgyMzM1IgorICAgICAgICAgICAgbWQ1c3VtPSI3N2UxNWE5MjAwNmRkYzJhZGJiMDZmODQwZDU5
MWMwZSI+CisgICAgPC9icmFuY2g+CisgIDwvYXV0b3Rvb2xzPgorCisgPGF1dG90b29scyBpZD0i
aGFyZmJ1enoiIGF1dG9nZW4tc2g9ImNvbmZpZ3VyZSI+CisgICA8YnJhbmNoIG1vZHVsZT0ic29m
dHdhcmUvaGFyZmJ1enovcmVsZWFzZS9oYXJmYnV6ei0wLjkuMTQudGFyLmJ6MiIgdmVyc2lvbj0i
MC45LjE0IgorICAgICAgICAgICBjaGVja291dGRpcj0iaGFyZmJ1enotMC45LjE0IgorICAgICAg
ICAgICByZXBvPSJmcmVlZGVza3RvcC5vcmciCisgICAgICAgICAgIGhhc2g9InNoYTI1NjpkMDdj
MGZmZGJiYmZkZmJiNmM2NWU3M2ZlOWM3NjQ2NmU4N2RiZjA0YjA5NGNiZDBhYmY1ZmQ3ZDU3MWE0
MDA0IgorICAgICAgICAgICBtZDVzdW09IjdlMTk5MGI3OTA2MGU5OGUyZDMxZjY3N2EwYWM5ZWVk
Ij4KKyAgIDwvYnJhbmNoPgorIDwvYXV0b3Rvb2xzPgorCis8L21vZHVsZXNldD4KZGlmZiAtLWdp
dCBhL1Rvb2xzL25peC9qaGJ1aWxkcmMgYi9Ub29scy9uaXgvamhidWlsZHJjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTM5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9uaXgvamhidWlsZHJjCkBAIC0wLDAgKzEsNzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitp
bXBvcnQgc3lzCisKK19fbml4X3Rvb2xzX2RpcmVjdG9yeSA9IG9zLnBhdGguYWJzcGF0aChvcy5w
YXRoLmRpcm5hbWUoX19maWxlX18pKQorc3lzLnBhdGggPSBbX19uaXhfdG9vbHNfZGlyZWN0b3J5
XSArIHN5cy5wYXRoCitpbXBvcnQgY29tbW9uCisKK2J1aWxkX3BvbGljeSA9ICd1cGRhdGVkJwor
CisjIEZJWE1FOiBtb3ZlIHNoYXJlZCBwYXJ0cyBpbnRvIC4uL2poYnVpbGQgZm9sZGVyLgorCitf
X21vZHVsZXNldF9maWxlX3VyaSA9ICdmaWxlOi8vJyArIG9zLnBhdGguam9pbihfX25peF90b29s
c19kaXJlY3RvcnksICdqaGJ1aWxkLm1vZHVsZXMnKQorX19leHRyYV9tb2R1bGVzZXRzID0gb3Mu
ZW52aXJvbi5nZXQoIldFQktJVF9FWFRSQV9NT0RVTEVTRVRTIiwgIiIpLnNwbGl0KCIsIikKK21v
ZHVsZXNldCA9IFsgX19tb2R1bGVzZXRfZmlsZV91cmksIF0KK2lmIF9fZXh0cmFfbW9kdWxlc2V0
cyAhPSBbJyddOgorICAgIG1vZHVsZXNldC5leHRlbmQoX19leHRyYV9tb2R1bGVzZXRzKQorCitf
X2V4dHJhX21vZHVsZXMgPSBvcy5lbnZpcm9uLmdldCgiV0VCS0lUX0VYVFJBX01PRFVMRVMiLCAi
Iikuc3BsaXQoIiwiKQorbW9kdWxlcyA9IFsgJ3dlYmtpdG5peC10ZXN0aW5nLWRlcGVuZGVuY2ll
cycsIF0KK2lmIF9fZXh0cmFfbW9kdWxlcyAhPSBbJyddOgorICAgIG1vZHVsZXMuZXh0ZW5kKF9f
ZXh0cmFfbW9kdWxlcykKKworaWYgb3MuZW52aXJvbi5oYXNfa2V5KCdXRUJLSVRPVVRQVVRESVIn
KToKKyAgICBjaGVja291dHJvb3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKG9zLmVu
dmlyb25bJ1dFQktJVE9VVFBVVERJUiddLCAnRGVwZW5kZW5jaWVzJywgJ1NvdXJjZScpKQorICAg
IHByZWZpeCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnV0VCS0lU
T1VUUFVURElSJ10sICdEZXBlbmRlbmNpZXMnLCAnUm9vdCcpKQorZWxzZToKKyAgICBjaGVja291
dHJvb3QgPSBvcy5wYXRoLmFic3BhdGgoY29tbW9uLnRvcF9sZXZlbF9wYXRoKCdXZWJLaXRCdWls
ZCcsJ0RlcGVuZGVuY2llcycsICdTb3VyY2UnKSkKKyAgICBwcmVmaXggPSBvcy5wYXRoLmFic3Bh
dGgoY29tbW9uLnRvcF9sZXZlbF9wYXRoKCdXZWJLaXRCdWlsZCcsJ0RlcGVuZGVuY2llcycsICdS
b290JykpCisKK25vbm90aWZ5ID0gVHJ1ZQorbm90cmF5aWNvbiA9IFRydWUKK2lmICdNQUtFRkxB
R1MnIG5vdCBpbiBvcy5lbnZpcm9uOgorICAgIG9zLmVudmlyb25bJ01BS0VGTEFHUyddID0gJy1q
JWQnICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisKKyMgVXNlIHN5c3RlbSBsaWJyYXJp
ZXMgd2hpbGUgYnVpbGRpbmcuCitpZiB1c2VfbGliNjQ6CisgICAgX2xpYmRpciA9ICdsaWI2NCcK
K2Vsc2U6CisgICAgX2xpYmRpciA9ICdsaWInCithZGRwYXRoKCdQS0dfQ09ORklHX1BBVEgnLCBv
cy5wYXRoLmpvaW4ob3Muc2VwLCAndXNyJywgX2xpYmRpciwgJ3BrZ2NvbmZpZycpKQorYWRkcGF0
aCgnUEtHX0NPTkZJR19QQVRIJywgb3MucGF0aC5qb2luKG9zLnNlcCwgJ3VzcicsICdzaGFyZScs
ICdwa2djb25maWcnKSkKKworYWRkcGF0aCgnWERHX0RBVEFfRElSUycsICcvdXNyL3NoYXJlJykK
K2FkZHBhdGgoJ1hER19DT05GSUdfRElSUycsICcvZXRjL3hkZycpCisKKyMgQXZvaWQgb3Zlcmxh
cHBpbmcgc2VhcmNoIHBhdGggQ01BS0Ugd2FybmluZyBvbiA2NGJpdCBzeXN0ZW1zLgoraWYgKHVz
ZV9saWI2NCk6CisgICAgYWRkcGF0aCgnQ01BS0VfUFJFRklYX1BBVEgnLCBvcy5wYXRoLmpvaW4o
b3Muc2VwLCBwcmVmaXgsICdsaWI2NCcpKQorZWxzZToKKyAgICBhZGRwYXRoKCdDTUFLRV9QUkVG
SVhfUEFUSCcsIHByZWZpeCkKKworcGFydGlhbF9idWlsZCA9IEZhbHNlCmRpZmYgLS1naXQgYS9U
b29scy9uaXgvcnVuLXdpdGgtamhidWlsZCBiL1Rvb2xzL25peC9ydW4td2l0aC1qaGJ1aWxkCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg1OWYyZTIKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9uaXgvcnVuLXdpdGgtamhidWlsZApAQCAtMCwwICsxLDI2IEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisjIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorIworIyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisj
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisjIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisj
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworaW1wb3J0IGNv
bW1vbgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKKworamhidWlsZF93cmFwcGVyID0gY29tbW9u
LnRvcF9sZXZlbF9wYXRoKCdUb29scycsICdqaGJ1aWxkJywgJ2poYnVpbGQtd3JhcHBlcicpCitv
cy5leGVjdmUoamhidWlsZF93cmFwcGVyLCBbamhidWlsZF93cmFwcGVyLCAnLS1uaXgnLCAncnVu
J10gKyBzeXMuYXJndlsxOl0sIG9zLmVudmlyb24pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>