<?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>158185</bug_id>
          
          <creation_ts>2016-05-28 16:56:56 -0700</creation_ts>
          <short_desc>Templatize NoncopyableFunction class similarly to std::function</short_desc>
          <delta_ts>2016-05-28 21:51:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit 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>
          
          <blocked>158173</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1197428</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 16:56:56 -0700</bug_when>
    <thetext>Templatize NoncopyableFunction class similarly to std::function, so that it can be used as a std::function replacement in more places.
Currently, NoncopyableFunction only supports &quot;void()&quot; lambdas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197429</commentid>
    <comment_count>1</comment_count>
      <attachid>280050</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 17:00:42 -0700</bug_when>
    <thetext>Created attachment 280050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197430</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-28 17:02:30 -0700</bug_when>
    <thetext>Attachment 280050 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:243:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:123:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:147:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/WorkQueue.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/WorkQueue.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:67:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:72:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:132:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:152:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:183:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:127:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:138:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:72:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:627:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/WorkQueueEfl.cpp:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/WorkQueueEfl.cpp:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:35:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:40:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:240:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:146:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/WorkQueueGeneric.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/WorkQueueGeneric.cpp:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FunctionDispatcher.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:126:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:31:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:61:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:107:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:158:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.h:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:35:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:41:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:77:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp:302:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:66:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:37:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 69 in 37 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>1197431</commentid>
    <comment_count>3</comment_count>
      <attachid>280051</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 17:09:53 -0700</bug_when>
    <thetext>Created attachment 280051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197432</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-28 17:11:06 -0700</bug_when>
    <thetext>Attachment 280051 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:243:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:123:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:147:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/WorkQueue.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/WorkQueue.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:67:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:72:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:132:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:152:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:183:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:127:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:138:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:72:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:627:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/WorkQueueEfl.cpp:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/WorkQueueEfl.cpp:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:35:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:40:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:240:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:146:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/WorkQueueGeneric.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/WorkQueueGeneric.cpp:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FunctionDispatcher.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:126:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:31:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:61:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:107:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:158:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.h:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:35:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:41:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:77:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp:302:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:66:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:37:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 69 in 37 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>1197433</commentid>
    <comment_count>5</comment_count>
      <attachid>280052</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 17:27:16 -0700</bug_when>
    <thetext>Created attachment 280052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197434</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-28 17:29:54 -0700</bug_when>
    <thetext>Attachment 280052 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm:243:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:123:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.cpp:147:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/WorkQueue.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/WorkQueue.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:67:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:72:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/fileapi/AsyncFileStream.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:132:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:152:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkQueueWin.cpp:183:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:127:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:138:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:141:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:72:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.h:83:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:627:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/WorkQueueEfl.cpp:57:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/WorkQueueEfl.cpp:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.h:95:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/mediastream/MediaEndpointPeerConnection.cpp:98:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:35:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:40:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/RunLoopGeneric.cpp:240:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:146:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/WorkQueueGeneric.cpp:84:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/generic/WorkQueueGeneric.cpp:92:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/FunctionDispatcher.h:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:94:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:109:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.cpp:126:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:31:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/cocoa/WorkQueueCocoa.cpp:42:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:48:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:61:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/page/scrolling/ScrollingThread.cpp:107:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/RunLoop.h:158:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/MainThread.h:44:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:35:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:41:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/win/WorkItemWin.cpp:58:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.h:62:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:77:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:81:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageThread.cpp:93:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp:302:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit/Storage/StorageSyncManager.cpp:66:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:37:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:47:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:52:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/efl/DispatchQueueWorkItemEfl.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 69 in 37 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>1197442</commentid>
    <comment_count>7</comment_count>
      <attachid>280052</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-28 20:57:48 -0700</bug_when>
    <thetext>Comment on attachment 280052
Patch

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

&gt; Source/WTF/wtf/NoncopyableFunction.h:36
&gt; +template &lt;typename Out, typename... In&gt;
&gt; +class NoncopyableFunction&lt;Out(In...)&gt; {

The one thing I don’t understand about this template is that I would have expected it to contain a std::function as a data member and forward things in and out.

&gt; Source/WTF/wtf/NoncopyableFunction.h:78
&gt; -    class CallableWrapper final : public CallableWrapperBase {
&gt; +    class CallableWrapper : public CallableWrapperBase {

Why no longer final?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197443</commentid>
    <comment_count>8</comment_count>
      <attachid>280052</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-28 21:18:53 -0700</bug_when>
    <thetext>Comment on attachment 280052
Patch

Clearing flags on attachment: 280052

Committed r201493: &lt;http://trac.webkit.org/changeset/201493&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197444</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-28 21:18:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197448</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-28 21:33:04 -0700</bug_when>
    <thetext>God dammit.

I&apos;m doing this right now.

*Sigh*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197449</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 21:37:51 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 280052 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280052&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/NoncopyableFunction.h:36
&gt; &gt; +template &lt;typename Out, typename... In&gt;
&gt; &gt; +class NoncopyableFunction&lt;Out(In...)&gt; {
&gt; 
&gt; The one thing I don’t understand about this template is that I would have
&gt; expected it to contain a std::function as a data member and forward things
&gt; in and out.
&gt; 
&gt; &gt; Source/WTF/wtf/NoncopyableFunction.h:78
&gt; &gt; -    class CallableWrapper final : public CallableWrapperBase {
&gt; &gt; +    class CallableWrapper : public CallableWrapperBase {
&gt; 
&gt; Why no longer final?

Oops, I did not mean to drop it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197450</commentid>
    <comment_count>12</comment_count>
      <attachid>280052</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-28 21:38:29 -0700</bug_when>
    <thetext>Comment on attachment 280052
Patch

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

That&apos;ll teach me to work on something before checking my email ever 4 hours ever again.

That said, I spotted something that I believe is suboptimal.

&gt; Source/WTF/wtf/NoncopyableFunction.h:46
&gt; +    Out operator()(In... in) const

I believe this could be:
Out operator()(In&amp;&amp;... in) const

&gt; Source/WTF/wtf/NoncopyableFunction.h:74
&gt; +        virtual Out call(In...) = 0;

I believe this could be:
virtual Out call(In&amp;&amp;... in) = 0;

&gt; Source/WTF/wtf/NoncopyableFunction.h:88
&gt; +        Out call(In... in) final { return m_callable(std::forward&lt;In&gt;(in)...); }

I believe this could be:
Out call(In&amp;&amp;... in) final { return m_callable(std::forward&lt;In&gt;(in)...); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197451</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 21:39:38 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; God dammit.
&gt; 
&gt; I&apos;m doing this right now.
&gt; 
&gt; *Sigh*

Sorry, I did not know. I thought you were working on cleaning up the dispatch() call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197452</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-28 21:43:01 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 280052 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280052&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/NoncopyableFunction.h:36
&gt; &gt; +template &lt;typename Out, typename... In&gt;
&gt; &gt; +class NoncopyableFunction&lt;Out(In...)&gt; {
&gt; 
&gt; The one thing I don’t understand about this template is that I would have
&gt; expected it to contain a std::function as a data member and forward things
&gt; in and out.

Just to close the loop on this review feedback, and leave it here for the record in case anybody else is looking around in the future:

We actually *can&apos;t* do this, and the reason why is why we had to make NoncopyableFunction in the first place.

std::function&lt;&gt; has a crappy spec requirement which is that any std::function&lt;&gt; has to be Copy Constructible.

Even if you plan to be very careful, and only ever move() your std::function&lt;&gt;s around, never making copies of them... std::function itself is still copy constructible.

Which means, if you&apos;re wrapping a lambda that is *not* copy constructible, std::function&lt;&gt; cannot wrap it.

So lambdas that contain Ref&lt;&gt; or std::unique_ptrs&lt;&gt; cannot be wrapped by std::function&lt;&gt;

And it turns out we have a *lot* of such lambdas that we *want* to wrap in a std::function&lt;&gt;-type wrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197453</commentid>
    <comment_count>15</comment_count>
      <attachid>280052</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 21:43:44 -0700</bug_when>
    <thetext>Comment on attachment 280052
Patch

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

&gt;&gt; Source/WTF/wtf/NoncopyableFunction.h:46
&gt;&gt; +    Out operator()(In... in) const
&gt; 
&gt; I believe this could be:
&gt; Out operator()(In&amp;&amp;... in) const

my version matches std::function I believe. Since In is a template , it can match references or rvalue references.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197454</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-28 21:44:09 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; God dammit.
&gt; &gt; 
&gt; &gt; I&apos;m doing this right now.
&gt; &gt; 
&gt; &gt; *Sigh*
&gt; 
&gt; Sorry, I did not know. I thought you were working on cleaning up the
&gt; dispatch() call sites.

You had no way of knowing.

I was working on that. And it turns out, to make meaningful progress on that task, I needed this. :)

No bigs, I had barely templates out the WTF class and hadn&apos;t done any of this other work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197455</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-28 21:45:29 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 280052 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280052&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/NoncopyableFunction.h:46
&gt; &gt;&gt; +    Out operator()(In... in) const
&gt; &gt; 
&gt; &gt; I believe this could be:
&gt; &gt; Out operator()(In&amp;&amp;... in) const
&gt; 
&gt; my version matches std::function I believe. Since In is a template , it can
&gt; match references or rvalue references.

I guess what I was getting at was that if our NoncopyableFunction *only* had the &amp;&amp; form, then we could enforce only using it with moveable parameters, perhaps saving unnecessary copying along the way.

It&apos;s probably not worth fixing the trouble that would arise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197458</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-05-28 21:51:37 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; Comment on attachment 280052 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=280052&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WTF/wtf/NoncopyableFunction.h:46
&gt; &gt; &gt;&gt; +    Out operator()(In... in) const
&gt; &gt; &gt; 
&gt; &gt; &gt; I believe this could be:
&gt; &gt; &gt; Out operator()(In&amp;&amp;... in) const
&gt; &gt; 
&gt; &gt; my version matches std::function I believe. Since In is a template , it can
&gt; &gt; match references or rvalue references.
&gt; 
&gt; I guess what I was getting at was that if our NoncopyableFunction *only* had
&gt; the &amp;&amp; form, then we could enforce only using it with moveable parameters,
&gt; perhaps saving unnecessary copying along the way.
&gt; 
&gt; It&apos;s probably not worth fixing the trouble that would arise.

Ah ok. I was trying to stay as close as possible to std::function, merely making it non copyable. For the record, using In&amp;&amp; by itself would not force the caller to pass an rvalue reference. it would require further restriction on In, similarly to what I did for the CallableType template parameter.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280050</attachid>
            <date>2016-05-28 17:00:42 -0700</date>
            <delta_ts>2016-05-28 17:09:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158185-20160528170154.patch</filename>
            <type>text/plain</type>
            <size>46634</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY5N2NiNWQxNjY5ZDViZGI3YWJjYmJk
M2I2MWU1YzhiZjAyZjc0M2MuLmNhNTU3ODVkNzgxYjA4N2IzMDdhMjUzNGE0NTdjMTBjZWQwMGJi
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTYtMDUtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xh
c3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlbXBsYXRpemUgTm9uY29weWFibGVGdW5jdGlvbiBjbGFz
cyBzaW1pbGFybHkgdG8gc3RkOjpmdW5jdGlvbiwgc28KKyAgICAgICAgdGhhdCBpdCBjYW4gYmUg
dXNlZCBhcyBhIHN0ZDo6ZnVuY3Rpb24gcmVwbGFjZW1lbnQgaW4gbW9yZSBwbGFjZXMuCisKKyAg
ICAgICAgUHJldmlvdXNseSwgTm9uY29weWFibGVGdW5jdGlvbiBjb3VsZCBvbmx5IHN1cHBvcnQg
InZvaWQoKSIgbGFtYmRhcy4KKworICAgICAgICAqIHd0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaDoK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmZ1bmN0aW9uUXVl
dWUpOgorICAgICAgICAoV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQu
aDoKKyAgICAgICAgKiB3dGYvTm9uY29weWFibGVGdW5jdGlvbi5oOgorICAgICAgICAqIHd0Zi9S
dW5Mb29wLmNwcDoKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6cGVyZm9ybVdvcmspOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjpkaXNwYXRjaCk6CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAg
ICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcik6CisgICAgICAgICogd3RmL2VmbC9EaXNwYXRj
aFF1ZXVlV29ya0l0ZW1FZmwuaDoKKyAgICAgICAgKFdvcmtJdGVtOjpXb3JrSXRlbSk6CisgICAg
ICAgIChUaW1lcldvcmtJdGVtOjpjcmVhdGUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6VGlt
ZXJXb3JrSXRlbSk6CisgICAgICAgICogd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpk
aXNwYXRjaEFmdGVyKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHA6
CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6U2NoZWR1bGVkVGFzazo6Y3JlYXRl
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrOjpTY2hl
ZHVsZWRUYXNrKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6ZGlzcGF0Y2hBZnRlcik6CisgICAg
ICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXb3JrUXVl
dWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcik6CisgICAg
ICAgICogd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEFm
dGVyQ29udGV4dDo6RGlzcGF0Y2hBZnRlckNvbnRleHQpOgorICAgICAgICAoV1RGOjpSdW5Mb29w
OjpkaXNwYXRjaEFmdGVyKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtJdGVtV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6V29ya0l0ZW1XaW46OldvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29y
a0l0ZW1XaW46OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OkhhbmRsZVdvcmtJdGVtOjpIYW5kbGVX
b3JrSXRlbSk6CisgICAgICAgIChXVEY6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5n
SGFuZGxlKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtJdGVtV2luLmg6CisgICAgICAgIChXVEY6
OldvcmtJdGVtV2luOjpmdW5jdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6
V29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKToKKwogMjAxNi0wNS0yOCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgcHJvamVjdHMgdGhhdCBp
bmNsdWRlIE1haW5UaHJlYWQuaCB3aXRob3V0IGluY2x1ZGluZyBGYXN0TWFsbG9jLmguCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNDI5ZTRiOGEyZTU4ZDEzMzE1MzkxZTdlYzNmNmRhMjhkZDU2NmQ5NC4uNjUyZWY4
NDJhNTk5Mzk2N2Y3ODAzNzY0Zjg3OWRlZjlmZjMzNTNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQxIEBACisyMDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAg
ICAgICAgVGVtcGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9uIGNsYXNzIHNpbWlsYXJseSB0byBz
dGQ6OmZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTgxODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xhc3Mgc2ltaWxhcmx5IHRvIHN0
ZDo6ZnVuY3Rpb24sIHNvCisgICAgICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGQ6OmZ1
bmN0aW9uIHJlcGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIFByZXZpb3VzbHks
IE5vbmNvcHlhYmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBwb3J0ICJ2b2lkKCkiIGxhbWJkYXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OnJ1blRhc2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpB
c3luY0ZpbGVTdHJlYW06OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3Ry
ZWFtOjpnZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZv
clJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp3cml0ZSk6CisgICAgICAgICog
ZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpkaXNw
YXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmll
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25z
RnJvbVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpzY2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2spOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkFWTWVkaWFDYXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayk6CisKIDIw
MTYtMDUtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXV0
b2NvcnJlY3Rpb24gbWFrZXMgaXQgaGFyZCB0byB0eXBlICJkb2Vzbid0IiBhbmQgdG8gdHlwZSBA
IGluIGVtYWlsIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4MzBkZjdkOTI1ZjVmNmUxNjViNDg5MjZk
YTUwMTQ3NTc1N2M5Yzg2Li5kYzhhN2ZmNDkyOTQzNTEyOWFjN2QxZDkwY2ZkOWU4MWM2YjYxODI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9u
IGNsYXNzIHNpbWlsYXJseSB0byBzdGQ6OmZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgxODUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24g
Y2xhc3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rpb24sIHNvCisgICAgICAgIHRoYXQgaXQgY2Fu
IGJlIHVzZWQgYXMgYSBzdGQ6OmZ1bmN0aW9uIHJlcGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgor
CisgICAgICAgIFByZXZpb3VzbHksIE5vbmNvcHlhYmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBw
b3J0ICJ2b2lkKCkiIGxhbWJkYXMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OmRpc3BhdGNo
KToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOgorICAgICAgICAqIFN0
b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFk
OjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUp
OgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oOgorCiAyMDE2LTA1LTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgp
IHNob3VsZCBub3QgY29weSBjYXB0dXJlZCBsYW1iZGEgdmFyaWFibGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NzE0Y2JjY2NlNGI4OGViMGMzNTJkZGFkZTg4NmIxMWNhMmUzNzIxOC4uODE3ZjE5NWZmNTM5NThj
YWMzZmM3ZmRmMjI1M2U3ZWY3NjI3N2IwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAy
MDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVGVt
cGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9uIGNsYXNzIHNpbWlsYXJseSB0byBzdGQ6OmZ1bmN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgx
ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1w
bGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xhc3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rp
b24sIHNvCisgICAgICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGQ6OmZ1bmN0aW9uIHJl
cGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIFByZXZpb3VzbHksIE5vbmNvcHlh
YmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBwb3J0ICJ2b2lkKCkiIGxhbWJkYXMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpydW5UYXNrSW5RdWV1ZSk6CisKKzIwMTYt
MDUtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBNb2Rlcm5p
emUgbGFtYmRhIGNhcHR1cmVzIGluIHRoZSBuZXR3b3JrIGRpc2sgY2FjaGUgaW1wbGVtZW50YXRp
b24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE3
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCmluZGV4IGMzYTYwZjA4YzUwNTI4ZmRl
ZDY1NjEyMjcxNjc4ZmY3NDQzNzJkYmUuLmI1MmVlY2YxZWJmMjY5YTQwNjA4YmEyYTg2NzVhNzUx
ZDM4MzQ4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEZ1bmN0aW9uRGlzcGF0Y2hlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxGdW5jdGlvbkRpc3BhdGNoZXI+IHsKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+RnVuY3Rpb25EaXNwYXRjaGVyKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIEZ1bmN0aW9uRGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNw
cAppbmRleCBkM2YwMjVlZjJjYzk2NjE4Njc2MmVjNTYxODNlN2RlMjcxOGE3ZDg1Li5iZDExZTEw
YzJkNTEyOTMxY2ExNjE3NWMxOTlkMWRlMTcxZDc1NWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApA
QCAtNDcsOSArNDcsOSBAQCBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRp
ZmllcjsKIAogc3RhdGljIFN0YXRpY0xvY2sgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleDsK
IAotc3RhdGljIERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+JiBmdW5jdGlvblF1ZXVlKCkKK3N0
YXRpYyBEZXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+PiYgZnVuY3Rpb25RdWV1ZSgp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+
PiBmdW5jdGlvblF1ZXVlOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTxOb25jb3B5
YWJsZUZ1bmN0aW9uPHZvaWQgKCk+Pj4gZnVuY3Rpb25RdWV1ZTsKICAgICByZXR1cm4gZnVuY3Rp
b25RdWV1ZTsKIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNG
cm9tTWFpblRocmVhZCgpCiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVh
ZHlfY2xvY2s6Om5vdygpOwogCi0gICAgTm9uY29weWFibGVGdW5jdGlvbiBmdW5jdGlvbjsKKyAg
ICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgewpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tTWFpblRocmVhZCgpCiAgICAgfQogfQogCi12b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9u
Y29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBjYWxsT25NYWluVGhyZWFkKE5vbmNv
cHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoZnVuY3Rp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggOWY1ODU2ZDBjYWM1M2I0NTIwNzFiMmY2OGIzZWRl
OGYzMzE4MGE2NS4uZjE5ZjU1OTAxOWRiNzk3NTBiNWY4YmRlY2ViNTllZmVmZGRhZTVlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuaApAQCAtNDEsNyArNDEsNyBAQCB0eXBlZGVmIHVpbnQzMl90IFRocmVhZElk
ZW50aWZpZXI7CiAvLyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9uY29weWFibGVGdW5jdGlvbiYmKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9uY29weWFibGVGdW5jdGlv
bjx2b2lkICgpPiYmKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKHZvaWQgKF5i
bG9jaykoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZUZ1bmN0aW9u
LmggYi9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZUZ1bmN0aW9uLmgKaW5kZXggMTY4OWRlMmNh
NjBlMjFhNzkzOTNmYTZkYzM2NzYwZDVlOTg1MTQ5MC4uM2QzODVmMjhlZTBmZjQ1MmRjNmE4ZDAx
OTE0YjRlNWU5NzU2OWVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTm9uY29weWFibGVG
dW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL05vbmNvcHlhYmxlRnVuY3Rpb24uaApAQCAt
MzAsMjEgKzMwLDU0IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi0vLyBGSVhNRTogV2UgY291bGQg
bWFrZSB0aGlzIHRlbXBsYXRlZCB0byBzdXBwb3J0IG90aGVyIGxhbWJkYXMgdGhhbiB2b2lkKCkg
YW5kIG1ha2UgdGhpcyBtb3JlIHJldXNhYmxlLgotY2xhc3MgTm9uY29weWFibGVGdW5jdGlvbiB7
Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgQ2FsbGFibGVXcmFwcGVyQmFzZTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIE91dCwgdHlwZW5hbWUuLi4gSW4+CitjbGFzcyBDYWxsYWJsZVdyYXBwZXJC
YXNlPE91dChJbi4uLik+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5DYWxsYWJsZVdyYXBwZXJCYXNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIE91
dCBjYWxsKEluLi4uKSA9IDA7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUsIHR5cGVuYW1lPiBj
bGFzcyBDYWxsYWJsZVdyYXBwZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENhbGxhYmxlVHlwZSwg
dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KK2NsYXNzIENhbGxhYmxlV3JhcHBlcjxDYWxs
YWJsZVR5cGUsIE91dChJbi4uLik+IDogcHVibGljIENhbGxhYmxlV3JhcHBlckJhc2U8T3V0KElu
Li4uKT4geworcHVibGljOgorICAgIGV4cGxpY2l0IENhbGxhYmxlV3JhcHBlcihDYWxsYWJsZVR5
cGUmJiBjYWxsYWJsZSkKKyAgICAgICAgOiBtX2NhbGxhYmxlKFdURk1vdmUoY2FsbGFibGUpKQor
ICAgIHsKKyAgICB9CisKKyAgICBDYWxsYWJsZVdyYXBwZXIoY29uc3QgQ2FsbGFibGVXcmFwcGVy
JikgPSBkZWxldGU7CisgICAgQ2FsbGFibGVXcmFwcGVyJiBvcGVyYXRvcj0oY29uc3QgQ2FsbGFi
bGVXcmFwcGVyJikgPSBkZWxldGU7CisKKyAgICBPdXQgY2FsbChJbi4uLiBpbikgZmluYWwgeyBy
ZXR1cm4gbV9jYWxsYWJsZShzdGQ6OmZvcndhcmQ8SW4+KGluKS4uLik7IH0KKworcHJpdmF0ZToK
KyAgICBDYWxsYWJsZVR5cGUgbV9jYWxsYWJsZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBj
bGFzcyBOb25jb3B5YWJsZUZ1bmN0aW9uOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0LCB0eXBl
bmFtZS4uLiBJbj4KK2NsYXNzIE5vbmNvcHlhYmxlRnVuY3Rpb248T3V0KEluLi4uKT4gewogcHVi
bGljOgogICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDYWxsYWJsZVR5cGUsIGNsYXNzID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19ydmFsdWVfcmVmZXJlbmNlPENhbGxhYmxlVHlwZSYmPjo6dmFsdWU+Ojp0eXBlPgog
ICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24oQ2FsbGFibGVUeXBlJiYgY2FsbGFibGUpCi0gICAgICAg
IDogbV9jYWxsYWJsZVdyYXBwZXIoc3RkOjptYWtlX3VuaXF1ZTxDYWxsYWJsZVdyYXBwZXI8Q2Fs
bGFibGVUeXBlPj4oV1RGTW92ZShjYWxsYWJsZSkpKQorICAgICAgICA6IG1fY2FsbGFibGVXcmFw
cGVyKHN0ZDo6bWFrZV91bmlxdWU8Q2FsbGFibGVXcmFwcGVyPENhbGxhYmxlVHlwZSwgT3V0KElu
Li4uKT4+KFdURk1vdmUoY2FsbGFibGUpKSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBvcGVy
YXRvcigpKCkgY29uc3QKKyAgICBPdXQgb3BlcmF0b3IoKShJbi4uLiBpbikgY29uc3QKICAgICB7
CiAgICAgICAgIGlmIChtX2NhbGxhYmxlV3JhcHBlcikKLSAgICAgICAgICAgIG1fY2FsbGFibGVX
cmFwcGVyLT5jYWxsKCk7CisgICAgICAgICAgICByZXR1cm4gbV9jYWxsYWJsZVdyYXBwZXItPmNh
bGwoc3RkOjpmb3J3YXJkPEluPihpbikuLi4pOworICAgICAgICByZXR1cm4gT3V0KCk7CiAgICAg
fQogCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9jYWxs
YWJsZVdyYXBwZXI7IH0KQEAgLTUyLDcgKzg1LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENhbGxhYmxlVHlwZSwgY2xhc3MgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3J2YWx1ZV9yZWZlcmVuY2U8Q2FsbGFibGVUeXBlJiY+Ojp2YWx1ZT46OnR5cGU+CiAgICAg
Tm9uY29weWFibGVGdW5jdGlvbiYgb3BlcmF0b3I9KENhbGxhYmxlVHlwZSYmIGNhbGxhYmxlKQog
ICAgIHsKLSAgICAgICAgbV9jYWxsYWJsZVdyYXBwZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxh
YmxlV3JhcHBlcjxDYWxsYWJsZVR5cGU+PihXVEZNb3ZlKGNhbGxhYmxlKSk7CisgICAgICAgIG1f
Y2FsbGFibGVXcmFwcGVyID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsYWJsZVdyYXBwZXI8Q2FsbGFi
bGVUeXBlLCBPdXQoSW4uLi4pPj4oV1RGTW92ZShjYWxsYWJsZSkpOwogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgfQogCkBAIC02MywzMiArOTYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotICAgIGNsYXNzIENhbGxhYmxlV3JhcHBlckJhc2UgewotICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNhbGxhYmxlV3Jh
cHBlckJhc2UoKSB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbCgpID0gMDsKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGFibGVUeXBlPgotICAgIGNsYXNzIENhbGxh
YmxlV3JhcHBlciBmaW5hbCA6IHB1YmxpYyBDYWxsYWJsZVdyYXBwZXJCYXNlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIGV4cGxpY2l0IENhbGxhYmxlV3JhcHBlcihDYWxsYWJsZVR5cGUmJiBjYWxs
YWJsZSkKLSAgICAgICAgICAgIDogbV9jYWxsYWJsZShXVEZNb3ZlKGNhbGxhYmxlKSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0KLSAgICAgICAgQ2FsbGFibGVXcmFwcGVyKGNvbnN0IENhbGxhYmxl
V3JhcHBlciYpID0gZGVsZXRlOwotICAgICAgICBDYWxsYWJsZVdyYXBwZXImIG9wZXJhdG9yPShj
b25zdCBDYWxsYWJsZVdyYXBwZXImKSA9IGRlbGV0ZTsKLQotICAgICAgICB2b2lkIGNhbGwoKSBm
aW5hbCB7IG1fY2FsbGFibGUoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FsbGFibGVU
eXBlIG1fY2FsbGFibGU7Ci0gICAgfTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsYWJsZVdy
YXBwZXJCYXNlPiBtX2NhbGxhYmxlV3JhcHBlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbGFi
bGVXcmFwcGVyQmFzZTxPdXQoSW4uLi4pPj4gbV9jYWxsYWJsZVdyYXBwZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuY3BwIGIv
U291cmNlL1dURi93dGYvUnVuTG9vcC5jcHAKaW5kZXggNGVkMDZlYmRjYTk0NzIwNjdmYjA3YjZk
Y2ZmZjFhYzI5ZDM2NmMzNS4uOTY2MGYxNTE0ZTVmMDk4MTg2Mjk5OGY4MTc0MTczNjAwOTYyNGE2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvUnVuTG9vcC5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBSdW5Mb29wOjpwZXJmb3Jt
V29yaygpCiAKICAgICBzaXplX3QgZnVuY3Rpb25zVG9IYW5kbGUgPSAwOwogICAgIHsKLSAgICAg
ICAgTm9uY29weWFibGVGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICAgICAgTm9uY29weWFibGVGdW5j
dGlvbjx2b2lkICgpPiBmdW5jdGlvbjsKICAgICAgICAgewogICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fZnVuY3Rpb25RdWV1ZUxvY2spOwogICAgICAgICAgICAgZnVuY3Rpb25zVG9I
YW5kbGUgPSBtX2Z1bmN0aW9uUXVldWUuc2l6ZSgpOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
UnVuTG9vcDo6cGVyZm9ybVdvcmsoKQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGZ1bmN0aW9u
c0hhbmRsZWQgPSAxOyBmdW5jdGlvbnNIYW5kbGVkIDwgZnVuY3Rpb25zVG9IYW5kbGU7ICsrZnVu
Y3Rpb25zSGFuZGxlZCkgewotICAgICAgICBOb25jb3B5YWJsZUZ1bmN0aW9uIGZ1bmN0aW9uOwor
ICAgICAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uOwogICAgICAgICB7
CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9mdW5jdGlvblF1ZXVlTG9jayk7CiAK
QEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIFJ1bkxvb3A6OnBlcmZvcm1Xb3JrKCkKICAgICB9CiB9
CiAKLXZvaWQgUnVuTG9vcDo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9u
KQordm9pZCBSdW5Mb29wOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYg
ZnVuY3Rpb24pCiB7CiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9mdW5jdGlv
blF1ZXVlTG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9SdW5Mb29wLmgKaW5kZXggM2UwYTFiNGQ4MWYxZTFhZWJlMGE4YzllYjlkZGRj
M2Q2OWYwMjU0NS4uZTE1NThiNjI1OWMyN2YwZjcwOTAxNWVkNTljMTUyYjk4NjU1MzVkNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1J1
bkxvb3AuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGlzTWFpbigpOwogICAgIH5SdW5Mb29wKCk7CiAKLSAgICB2b2lkIGRpc3Bh
dGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChO
b25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYpIG92ZXJyaWRlOwogCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIHJ1bigpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHN0b3AoKTsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoR0xJ
Ql9FVkVOVF9MT09QKSB8fCBVU0UoR0VORVJJQ19FVkVOVF9MT09QKQotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzLCBOb25j
b3B5YWJsZUZ1bmN0aW9uJiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRpc3BhdGNo
QWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzLCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQg
KCk+JiYpOwogI2VuZGlmCiAKICAgICBjbGFzcyBUaW1lckJhc2UgewpAQCAtMTU1LDcgKzE1NSw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwZXJmb3JtV29yaygpOwogCiAgICAgTXV0ZXggbV9mdW5j
dGlvblF1ZXVlTG9jazsKLSAgICBEZXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPiBtX2Z1bmN0aW9u
UXVldWU7CisgICAgRGVxdWU8Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPj4gbV9mdW5jdGlv
blF1ZXVlOwogCiAjaWYgVVNFKFdJTkRPV1NfRVZFTlRfTE9PUCkKICAgICBzdGF0aWMgYm9vbCBy
ZWdpc3RlclJ1bkxvb3BNZXNzYWdlV2luZG93Q2xhc3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKaW5kZXggMzMw
ZTVmNzQ2MTM0MzM0ZWIwNTg2OWQ4ZjQxZDQ3YmM1MzIxNjVlNS4uZTU1MzI1OTRhNTQzMjRkNjg4
MTFmZTE2NmRhNDBiZjc1MjM0Mjg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvV29ya1F1
ZXVlLmgKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTcyLDggKzcyLDggQEAg
cHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVmPFdvcmtRdWV1ZT4gY3Jl
YXRlKGNvbnN0IGNoYXIqIG5hbWUsIFR5cGUgPSBUeXBlOjpTZXJpYWwsIFFPUyA9IFFPUzo6RGVm
YXVsdCk7CiAgICAgdmlydHVhbCB+V29ya1F1ZXVlKCk7CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYpIG92ZXJyaWRlOwotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNv
bmRzLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJikgb3ZlcnJpZGU7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3Nl
Y29uZHMsIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7CiAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgY29uY3VycmVudEFwcGx5KHNpemVfdCBpdGVyYXRpb25zLCBj
b25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHNpemVfdCBpbmRleCk+Jik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAppbmRleCA0NDlhNDBmYzM0ZmUxNmE4YjI4M2Y4MGY1
M2IxODQ4NGQ4ZDA2MDUzLi45OTVhOTU0YWFjMWRiNzQxMzNkZTljZmI5NGYxOTQ4Yzk0MTI3NDE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwCkBAIC0yOCwxMCArMjgs
MTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChOb25j
b3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9u
Y29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIHJlZigpOwotICAg
IGF1dG8qIGZ1bmN0aW9uUHRyID0gbmV3IE5vbmNvcHlhYmxlRnVuY3Rpb24oV1RGTW92ZShmdW5j
dGlvbikpOworICAgIGF1dG8qIGZ1bmN0aW9uUHRyID0gbmV3IE5vbmNvcHlhYmxlRnVuY3Rpb248
dm9pZCAoKT4oV1RGTW92ZShmdW5jdGlvbikpOwogICAgIGRpc3BhdGNoX2FzeW5jKG1fZGlzcGF0
Y2hRdWV1ZSwgXnsKICAgICAgICAgKCpmdW5jdGlvblB0cikoKTsKICAgICAgICAgZGVsZXRlIGZ1
bmN0aW9uUHRyOwpAQCAtMzksMTAgKzM5LDEwIEBAIHZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChO
b25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCiAgICAgfSk7CiB9CiAKLXZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgTm9u
Y29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0
ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBOb25jb3B5YWJsZUZ1bmN0aW9u
PHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgcmVmKCk7Ci0gICAgYXV0byogZnVuY3Rpb25Q
dHIgPSBuZXcgTm9uY29weWFibGVGdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgYXV0
byogZnVuY3Rpb25QdHIgPSBuZXcgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPihXVEZNb3Zl
KGZ1bmN0aW9uKSk7CiAgICAgZGlzcGF0Y2hfYWZ0ZXIoZGlzcGF0Y2hfdGltZShESVNQQVRDSF9U
SU1FX05PVywgZHVyYXRpb24uY291bnQoKSksIG1fZGlzcGF0Y2hRdWV1ZSwgXnsKICAgICAgICAg
KCpmdW5jdGlvblB0cikoKTsKICAgICAgICAgZGVsZXRlIGZ1bmN0aW9uUHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvZWZsL0Rpc3BhdGNoUXVldWVXb3JrSXRlbUVmbC5oIGIvU291cmNl
L1dURi93dGYvZWZsL0Rpc3BhdGNoUXVldWVXb3JrSXRlbUVmbC5oCmluZGV4IGQwZTljNGZmZDYx
ODU2ZTQ0ZTI4N2RiOWIwZTMyNzQ4MjgzYjgwNGUuLjNkZGZlNTdkZTZhM2RmZjNmZjg4NTFmMGQw
MmEyOGYwMDFlMzY2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1
ZXVlV29ya0l0ZW1FZmwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZVdv
cmtJdGVtRWZsLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogY2xhc3MgV29ya0l0ZW0gewogcHVibGlj
OgotICAgIFdvcmtJdGVtKFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVlLCBOb25jb3B5YWJsZUZ1
bmN0aW9uJiYgZnVuY3Rpb24pCisgICAgV29ya0l0ZW0oUmVmPFdvcmtRdWV1ZT4mJiB3b3JrUXVl
dWUsIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKICAgICAgICAgOiBt
X3dvcmtRdWV1ZShXVEZNb3ZlKHdvcmtRdWV1ZSkpCiAgICAgICAgICwgbV9mdW5jdGlvbihXVEZN
b3ZlKGZ1bmN0aW9uKSkKICAgICB7CkBAIC00NCwxMiArNDQsMTIgQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOwotICAgIE5vbmNvcHlhYmxlRnVu
Y3Rpb24gbV9mdW5jdGlvbjsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVu
Y3Rpb247CiB9OwogCiBjbGFzcyBUaW1lcldvcmtJdGVtIDogcHVibGljIFdvcmtJdGVtIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShS
ZWY8V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9u
LCBzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZGVsYXlOYW5vU2Vjb25kcykKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFRpbWVyV29ya0l0ZW0+IGNyZWF0ZShSZWY8V29ya1F1ZXVlPiYmIHdv
cmtRdWV1ZSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBzdGQ6OmNo
cm9ubzo6bmFub3NlY29uZHMgZGVsYXlOYW5vU2Vjb25kcykKICAgICB7CiAgICAgICAgIEFTU0VS
VChkZWxheU5hbm9TZWNvbmRzLmNvdW50KCkgPj0gMCk7CiAgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4obmV3IFRpbWVyV29ya0l0ZW0oV1RGTW92ZSh3b3JrUXVl
dWUpLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKiAx
MDAwMDAwMDAwLjAgKyBkZWxheU5hbm9TZWNvbmRzLmNvdW50KCkpKTsKQEAgLTU4LDcgKzU4LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwaXJlZChkb3VibGUgY3VycmVudFRpbWVOYW5vU2Vj
b25kcykgY29uc3QgeyByZXR1cm4gY3VycmVudFRpbWVOYW5vU2Vjb25kcyA+PSBtX2V4cGlyYXRp
b25UaW1lTmFub1NlY29uZHM7IH0KIAogcHJvdGVjdGVkOgotICAgIFRpbWVyV29ya0l0ZW0oUmVm
PFdvcmtRdWV1ZT4mJiB3b3JrUXVldWUsIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbiwg
ZG91YmxlIGV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMpCisgICAgVGltZXJXb3JrSXRlbShSZWY8
V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1
bmN0aW9uLCBkb3VibGUgZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcykKICAgICAgICAgOiBXb3Jr
SXRlbShXVEZNb3ZlKHdvcmtRdWV1ZSksIFdURk1vdmUoZnVuY3Rpb24pKQogICAgICAgICAsIG1f
ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcyhleHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKQogICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwIGIvU291
cmNlL1dURi93dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHAKaW5kZXggOTVkYmY2Y2VlZmRhNmM0NDQ1
MWZhNTI1MjVhOTFmZTgxOTZiYmUzYy4uNDBkMTkzOWZjZDRkMGVmYTU2ODllYjAyZWQ5OTg2YTlk
NzgyMDU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHAKQEAgLTU0LDcgKzU0LDcg
QEAgdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVE
ZXNjcmlwdG9yKQogICAgIG1fZGlzcGF0Y2hRdWV1ZS0+Y2xlYXJTb2NrZXRFdmVudEhhbmRsZXIo
KTsKIH0KIAotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBm
dW5jdGlvbikKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgaWYgKCFtX2Rpc3BhdGNoUXVldWUpCiAgICAgICAg
IHJldHVybjsKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNv
cHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKICAgICBtX2Rpc3BhdGNoUXVldWUtPmRpc3BhdGNo
KHN0ZDo6bWFrZV91bmlxdWU8V29ya0l0ZW0+KCp0aGlzLCBXVEZNb3ZlKGZ1bmN0aW9uKSkpOwog
fQogCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHMgZHVyYXRpb24sIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgTm9u
Y29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIGlmICghbV9kaXNw
YXRjaFF1ZXVlKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9n
ZW5lcmljL1J1bkxvb3BHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvUnVuTG9v
cEdlbmVyaWMuY3BwCmluZGV4IDU3MTM1ODEzNjE0NzY4OTE1YWUzZmYyZmVlNGFiOWViMzQyZjEz
MGEuLjE3MWFkMzAyNzI2OTIyODZmMzJmMDk0OTJmNGYyODM3YTk3YWI2YzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvUnVuTG9vcEdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dlbmVyaWMvUnVuTG9vcEdlbmVyaWMuY3BwCkBAIC0zMiwxMiArMzIsMTIgQEAgbmFt
ZXNwYWNlIFdURiB7CiBjbGFzcyBSdW5Mb29wOjpUaW1lckJhc2U6OlNjaGVkdWxlZFRhc2sgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2NoZWR1bGVkVGFzaz4gewogV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2NoZWR1bGVkVGFzayk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxTY2hl
ZHVsZWRUYXNrPiBjcmVhdGUoTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uLCBkb3VibGUg
aW50ZXJ2YWwsIGJvb2wgcmVwZWF0aW5nKQorICAgIHN0YXRpYyBSZWZQdHI8U2NoZWR1bGVkVGFz
az4gY3JlYXRlKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgZG91Ymxl
IGludGVydmFsLCBib29sIHJlcGVhdGluZykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2NoZWR1bGVkVGFzayhXVEZNb3ZlKGZ1bmN0aW9uKSwgaW50ZXJ2YWwsIHJlcGVhdGlu
ZykpOwogICAgIH0KIAotICAgIFNjaGVkdWxlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1
bmN0aW9uLCBkb3VibGUgaW50ZXJ2YWwsIGJvb2wgcmVwZWF0aW5nKQorICAgIFNjaGVkdWxlZFRh
c2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBkb3VibGUgaW50ZXJ2
YWwsIGJvb2wgcmVwZWF0aW5nKQogICAgICAgICA6IG1fZnVuY3Rpb24oV1RGTW92ZShmdW5jdGlv
bikpCiAgICAgICAgICwgbV9maXJlSW50ZXJ2YWwoc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4o
aW50ZXJ2YWwpKSkKICAgICAgICAgLCBtX2lzUmVwZWF0aW5nKHJlcGVhdGluZykKQEAgLTkwLDcg
KzkwLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBOb25jb3B5YWJsZUZ1bmN0
aW9uIG1fZnVuY3Rpb247CisgICAgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiBtX2Z1bmN0
aW9uOwogICAgIENvbmRpdGlvbjo6Q2xvY2s6OnRpbWVfcG9pbnQgbV9zY2hlZHVsZWRUaW1lUG9p
bnQ7CiAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBtX2ZpcmVJbnRlcnZhbDsKICAgICBz
dGQ6OmF0b21pYzxib29sPiBtX2lzQWN0aXZlIHsgdHJ1ZSB9OwpAQCAtMjM3LDcgKzIzNyw3IEBA
IHZvaWQgUnVuTG9vcDo6c2NoZWR1bGVBbmRXYWtlVXAoUmVmUHRyPFRpbWVyQmFzZTo6U2NoZWR1
bGVkVGFzaz4gdGFzaykKICAgICB3YWtlVXAobG9ja2VyKTsKIH0KIAotdm9pZCBSdW5Mb29wOjpk
aXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkZWxheSwgTm9uY29weWFibGVG
dW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBSdW5Mb29wOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hy
b25vOjpuYW5vc2Vjb25kcyBkZWxheSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1
bmN0aW9uKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9vcExvY2spOwogICAgIGJvb2wg
cmVwZWF0aW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dv
cmtRdWV1ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9Xb3JrUXVldWVHZW5l
cmljLmNwcAppbmRleCBhNjE4ZDRkMWFiYjYwMTgwMjkyNWNmOGQ2ZDVjNTEwMzQ0ZjE3NTAyLi43
ZjgwZTY5Y2E1YzdjMzA2ZjkwNzdjNGY5Yzg1MDNlY2M2ZTU0NWM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3BwCisrKyBiL1NvdXJjZS9XVEYv
d3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAgfQogfQogCi12b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsK
ICAgICBSZWZQdHI8V29ya1F1ZXVlPiBwcm90ZWN0KHRoaXMpOwogICAgIG1fcnVuTG9vcC0+ZGlz
cGF0Y2goW3Byb3RlY3QsIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildIHsKQEAgLTg5LDcg
Kzg5LDcgQEAgdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBm
dW5jdGlvbikKICAgICB9KTsKIH0KIAotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIoc3Rk
OjpjaHJvbm86Om5hbm9zZWNvbmRzIGRlbGF5LCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rp
b24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHMgZGVsYXksIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBSZWZQdHI8V29ya1F1ZXVlPiBwcm90ZWN0KHRoaXMpOwogICAgIG1fcnVuTG9vcC0+ZGlzcGF0
Y2hBZnRlcihkZWxheSwgW3Byb3RlY3QsIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlvbildIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwIGIvU291cmNl
L1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKaW5kZXggMGM1MGZmMjc2OTNhNzdhNjc5Mzhj
MmRkODRmNzhiNjE5OGI2YmNmMC4uODliN2Y3MDcwYzlkNDI4ZTdiOGZiODE3YTdmOWU3YjNhZGRm
OWYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAKQEAgLTEyNCw3ICsxMjQsNyBA
QCB2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCiBjbGFzcyBEaXNwYXRjaEFmdGVyQ29udGV4dCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRGlzcGF0Y2hBZnRlckNv
bnRleHQoTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQorICAgIERpc3BhdGNoQWZ0ZXJD
b250ZXh0KE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKICAgICAgICAg
OiBtX2Z1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKQogICAgIHsKICAgICB9CkBAIC0xMzUsMTAg
KzEzNSwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE5vbmNvcHlhYmxlRnVu
Y3Rpb24gbV9mdW5jdGlvbjsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVu
Y3Rpb247CiB9OwogCi12b2lkIFJ1bkxvb3A6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5h
bm9zZWNvbmRzIGR1cmF0aW9uLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lk
IFJ1bkxvb3A6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9u
LCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgR1JlZlB0
cjxHU291cmNlPiBzb3VyY2UgPSBhZG9wdEdSZWYoZ190aW1lb3V0X3NvdXJjZV9uZXcoc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oZHVyYXRpb24p
LmNvdW50KCkpKTsKICAgICBnX3NvdXJjZV9zZXRfbmFtZShzb3VyY2UuZ2V0KCksICJbV2ViS2l0
XSBSdW5Mb29wIGRpc3BhdGNoQWZ0ZXIiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dp
bi9Xb3JrSXRlbVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya0l0ZW1XaW4uY3BwCmlu
ZGV4IDYwNWY3N2NjMGMzZTY1ZjMxMjg4YjI0MmJlNjc2Y2FjOTZiY2Q5NjAuLjg2NDIzMjJiOWU1
MTZhN2U2MTNjM2MwNGEyNGY2YTMwNzU0MzRmOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3dpbi9Xb3JrSXRlbVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvd2luL1dvcmtJdGVtV2lu
LmNwcApAQCAtMzIsMTMgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1Xb3JrSXRlbVdp
bjo6V29ya0l0ZW1XaW4oTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uLCBXb3JrUXVldWUq
IHF1ZXVlKQorV29ya0l0ZW1XaW46OldvcmtJdGVtV2luKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9p
ZCAoKT4mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKICAgICA6IG1fZnVuY3Rpb24oV1RG
TW92ZShmdW5jdGlvbikpCiAgICAgLCBtX3F1ZXVlKHF1ZXVlKQogewogfQogCi1SZWZQdHI8V29y
a0l0ZW1XaW4+IFdvcmtJdGVtV2luOjpjcmVhdGUoTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0
aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorUmVmUHRyPFdvcmtJdGVtV2luPiBXb3JrSXRlbVdpbjo6
Y3JlYXRlKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgV29ya1F1ZXVl
KiBxdWV1ZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKFdURk1vdmUo
ZnVuY3Rpb24pLCBxdWV1ZSkpOwogfQpAQCAtNDcsNyArNDcsNyBAQCBXb3JrSXRlbVdpbjo6fldv
cmtJdGVtV2luKCkKIHsKIH0KIAotSGFuZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRM
RSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1
ZSkKK0hhbmRsZVdvcmtJdGVtOjpIYW5kbGVXb3JrSXRlbShIQU5ETEUgaGFuZGxlLCBOb25jb3B5
YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCiAgICAg
OiBXb3JrSXRlbVdpbihXVEZNb3ZlKGZ1bmN0aW9uKSwgcXVldWUpCiAgICAgLCBtX2hhbmRsZSho
YW5kbGUpCiAgICAgLCBtX3dhaXRIYW5kbGUoMCkKQEAgLTU1LDcgKzU1LDcgQEAgSGFuZGxlV29y
a0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVuY3Rpb24m
JiBmdW5jdGlvbiwgV28KICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKIH0KIAotUmVm
UHRyPEhhbmRsZVdvcmtJdGVtPiBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRs
ZShIQU5ETEUgaGFuZGxlLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIFdvcmtRdWV1
ZSogcXVldWUpCitSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IEhhbmRsZVdvcmtJdGVtOjpjcmVhdGVC
eUFkb3B0aW5nSGFuZGxlKEhBTkRMRSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAo
KT4mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwgV1RGTW92ZShmdW5jdGlvbiksIHF1ZXVlKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya0l0ZW1XaW4uaCBiL1NvdXJjZS9X
VEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5oCmluZGV4IGE2MDk1NDdmOWJkZjdkY2RlZDA0OTRhY2U2
MGE0ZGI5YmI4NThlYWMuLmJhYTc3ZDk3YTc0OWEzMmUyMjJkMWIxOTkzODc3NzQ0MzUyMTNhZjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5oCkBAIC0zOSwzMCArMzksMzAgQEAgY2xhc3MgV29y
a1F1ZXVlOwogCiBjbGFzcyBXb3JrSXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxXb3JrSXRlbVdpbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8V29ya0l0ZW1XaW4+
IGNyZWF0ZShOb25jb3B5YWJsZUZ1bmN0aW9uJiYsIFdvcmtRdWV1ZSopOworICAgIHN0YXRpYyBS
ZWZQdHI8V29ya0l0ZW1XaW4+IGNyZWF0ZShOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYs
IFdvcmtRdWV1ZSopOwogICAgIHZpcnR1YWwgfldvcmtJdGVtV2luKCk7CiAKLSAgICBOb25jb3B5
YWJsZUZ1bmN0aW9uJiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICBOb25j
b3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247
IH0KICAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZS5nZXQoKTsg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgV29ya0l0ZW1XaW4oTm9uY29weWFibGVGdW5jdGlvbiYmLCBX
b3JrUXVldWUqKTsKKyAgICBXb3JrSXRlbVdpbihOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
JiYsIFdvcmtRdWV1ZSopOwogCiBwcml2YXRlOgotICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gbV9m
dW5jdGlvbjsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVuY3Rpb247CiAg
ICAgUmVmUHRyPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKIH07CiAKIGNsYXNzIEhhbmRsZVdvcmtJdGVt
IDogcHVibGljIFdvcmtJdGVtV2luIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPEhhbmRs
ZVdvcmtJdGVtPiBjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRMRSwgTm9uY29weWFibGVGdW5j
dGlvbiYmLCBXb3JrUXVldWUqKTsKKyAgICBzdGF0aWMgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBj
cmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRMRSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgp
PiYmLCBXb3JrUXVldWUqKTsKICAgICB2aXJ0dWFsIH5IYW5kbGVXb3JrSXRlbSgpOwogCiAgICAg
dm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFuZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdh
aXRIYW5kbGU7IH0KICAgICBIQU5ETEUgd2FpdEhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2Fp
dEhhbmRsZTsgfQogCiBwcml2YXRlOgotICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgTm9uY29w
eWFibGVGdW5jdGlvbiYmLCBXb3JrUXVldWUqKTsKKyAgICBIYW5kbGVXb3JrSXRlbShIQU5ETEUs
IE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiwgV29ya1F1ZXVlKik7CiAKICAgICBIQU5E
TEUgbV9oYW5kbGU7CiAgICAgSEFORExFIG1fd2FpdEhhbmRsZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwIGIvU291cmNlL1dURi93dGYvd2luL1dvcmtR
dWV1ZVdpbi5jcHAKaW5kZXggZTc4ZjkzNGNjNTg5MTVlYjFiYTYyYWFlMTk4NjczNDYxZGVhNTg3
Zi4uZTQ1Mjk4MTQ5Y2E0N2JhYjlkZTYwZDA5YzZlZDAyZGI0ZGY5NjkwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
d2luL1dvcmtRdWV1ZVdpbi5jcHAKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFdvcmtRdWV1ZTo6
cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeChtX3RpbWVyUXVl
dWUsIDApOwogfQogCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlv
biYmIGZ1bmN0aW9uKQordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rp
b248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3Jr
SXRlbVF1ZXVlTG9jayk7CiAgICAgcmVmKCk7CkBAIC0xNDksNyArMTQ5LDcgQEAgc3RydWN0IFRp
bWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1lckNvbnRleHQ+IHsK
ICAgICBzdGF0aWMgUmVmUHRyPFRpbWVyQ29udGV4dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFRpbWVyQ29udGV4dCk7IH0KIAogICAgIFdvcmtRdWV1ZSogcXVldWU7Ci0gICAgTm9u
Y29weWFibGVGdW5jdGlvbiBmdW5jdGlvbjsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQg
KCk+IGZ1bmN0aW9uOwogICAgIE11dGV4IHRpbWVyTXV0ZXg7CiAgICAgSEFORExFIHRpbWVyOwog
CkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJhY2sodm9pZCog
Y29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKQogICAgIH0KIH0KIAotdm9pZCBXb3Jr
UXVldWU6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBO
b25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hB
ZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNvcHlhYmxlRnVuY3Rp
b248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQobV90aW1lclF1ZXVlKTsKICAg
ICByZWYoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAppbmRleCAzODVjMTRm
MzZhYzI0YzJiODFiOTIwMjEyYzhhMjYzOGExYjIyNmYyLi5mMWViNjRlZmU1MWI5YWJmY2QzNGE5
YTM4YzNlNTlhNzJjM2IyZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3Bw
CkBAIC05NSw3ICs5NSw3IEBAIE1lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbjo6TWVkaWFFbmRw
b2ludFBlZXJDb25uZWN0aW9uKFBlZXJDb25uZWN0aW9uQmFja2VuZENsCiAgICAgbV9tZWRpYUVu
ZHBvaW50LT5nZW5lcmF0ZUR0bHNJbmZvKCk7CiB9CiAKLXZvaWQgTWVkaWFFbmRwb2ludFBlZXJD
b25uZWN0aW9uOjpydW5UYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiB0YXNrKQordm9pZCBNZWRp
YUVuZHBvaW50UGVlckNvbm5lY3Rpb246OnJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lk
ICgpPiYmIHRhc2spCiB7CiAgICAgaWYgKG1fZHRsc0ZpbmdlcnByaW50LmlzTnVsbCgpKSB7CiAg
ICAgICAgIC8vIE9ubHkgb25lIHRhc2sgbmVlZHMgdG8gYmUgZGVmZXJyZWQgc2luY2UgaXQgd2ls
bCBob2xkIG9mZiBhbnkgb3RoZXJzIHVudGlsIGNvbXBsZXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVy
Q29ubmVjdGlvbi5oCmluZGV4IDg2YjI0NzczMGEzZDE3MmMwNDUxNmViOGZjZmVkNjM5NjI1ZWFk
YjguLjk2N2QwYzlhMjUxNjQ2OGU3MmI0ZDk0YjVlNGE5ZTg2MmUxOTA0YzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uaApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjbGVhck5lZ290aWF0aW9uTmVlZGVkU3RhdGUoKSBvdmVycmlkZSB7IG5vdEltcGxlbWVudGVk
KCk7IH07CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBydW5UYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24m
Jik7CisgICAgdm9pZCBydW5UYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7CiAg
ICAgdm9pZCBzdGFydFJ1bm5pbmdUYXNrcygpOwogCiAgICAgdm9pZCBjcmVhdGVPZmZlclRhc2so
UlRDT2ZmZXJPcHRpb25zJiwgUGVlckNvbm5lY3Rpb246OlNlc3Npb25EZXNjcmlwdGlvblByb21p
c2UmKTsKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBQZWVyQ29ubmVjdGlvbkJhY2tl
bmRDbGllbnQqIG1fY2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYUVuZHBvaW50PiBt
X21lZGlhRW5kcG9pbnQ7CiAKLSAgICBOb25jb3B5YWJsZUZ1bmN0aW9uIG1faW5pdGlhbERlZmVy
cmVkVGFzazsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IG1faW5pdGlhbERlZmVy
cmVkVGFzazsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTRFBQcm9jZXNzb3I+IG1fc2RwUHJvY2Vz
c29yOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVh
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAKaW5kZXgg
ZjRiNzBjZjA1MWRhOGNmYzBmNWNjZWIwNmI0YTJjM2I2NDczYjI5My4uNGFlNmM4MGNlMzRlNzk0
ZTVlYzYyZDc4MmM1ODEyOGYxNzZkMmVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5
bmNGaWxlU3RyZWFtLmNwcApAQCAtNjQsMTIgKzY0LDEyIEBAIGlubGluZSBBc3luY0ZpbGVTdHJl
YW06OkludGVybmFsczo6SW50ZXJuYWxzKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkKICNlbmRp
ZgogfQogCi1zdGF0aWMgdm9pZCBjYWxsT25GaWxlVGhyZWFkKE5vbmNvcHlhYmxlRnVuY3Rpb24m
JiBmdW5jdGlvbikKK3N0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoTm9uY29weWFibGVGdW5j
dGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNZXNz
YWdlUXVldWU8Tm9uY29weWFibGVGdW5jdGlvbj4+IHF1ZXVlOworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxNZXNzYWdlUXVldWU8Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPj4+IHF1ZXVl
OwogCiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGNyZWF0ZUZpbGVUaHJlYWRPbmNlOwogICAg
IHN0ZDo6Y2FsbF9vbmNlKGNyZWF0ZUZpbGVUaHJlYWRPbmNlLCBbXSB7CkBAIC05MCw3ICs5MCw3
IEBAIHN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1
bmN0aW9uKQogICAgICAgICB9KTsKICAgICB9KTsKIAotICAgIHF1ZXVlLmdldCgpLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+KFdURk1vdmUoZnVuY3Rpb24pKSk7
CisgICAgcXVldWUuZ2V0KCkuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Tm9uY29weWFibGVGdW5j
dGlvbjx2b2lkICgpPj4oV1RGTW92ZShmdW5jdGlvbikpKTsKIH0KIAogQXN5bmNGaWxlU3RyZWFt
OjpBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KQpAQCAtMTE0LDcgKzEx
NCw3IEBAIEFzeW5jRmlsZVN0cmVhbTo6fkFzeW5jRmlsZVN0cmVhbSgpCiAgICAgfSk7CiB9CiAK
LXZvaWQgQXN5bmNGaWxlU3RyZWFtOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3RkOjpmdW5jdGlv
bjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPiYmIG9wZXJhdGlvbikKK3Zv
aWQgQXN5bmNGaWxlU3RyZWFtOjpwZXJmb3JtKE5vbmNvcHlhYmxlRnVuY3Rpb248c3RkOjpmdW5j
dGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPiYmIG9wZXJhdGlvbikK
IHsKICAgICBhdXRvJiBpbnRlcm5hbHMgPSAqbV9pbnRlcm5hbHM7CiAgICAgY2FsbE9uRmlsZVRo
cmVhZChbJmludGVybmFscywgb3BlcmF0aW9uID0gV1RGTW92ZShvcGVyYXRpb24pXSB7CkBAIC0x
MzQsMTEgKzEzNCwxMCBAQCB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6cGVyZm9ybShzdGQ6OmZ1bmN0
aW9uPHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50JgogCiB2b2lkIEFzeW5jRmls
ZVN0cmVhbTo6Z2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUpCiB7Ci0gICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZFBhdGgocGF0aCk7CiAg
ICAgLy8gRklYTUU6IEV4cGxpY2l0IHJldHVybiB0eXBlIGhlcmUgYW5kIGluIGFsbCB0aGUgb3Ro
ZXIgY2FzZXMgbGlrZSB0aGlzIGJlbG93IGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZpY2llbmN5
CiAgICAgLy8gaW4gdGhlIFdpbmRvd3MgY29tcGlsZXIgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0
aW5nLiBDb3VsZCByZW1vdmUgaXQgaWYgdGhhdCBpcyByZXNvbHZlZC4KLSAgICBwZXJmb3JtKFtj
YXB0dXJlZFBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZV0oRmlsZVN0cmVhbSYgc3RyZWFt
KSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7Ci0gICAgICAgIGxv
bmcgbG9uZyBzaXplID0gc3RyZWFtLmdldFNpemUoY2FwdHVyZWRQYXRoLnN0cmluZygpLCBleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgIHBlcmZvcm0oW3BhdGggPSBwYXRoLmlzb2xhdGVk
Q29weSgpLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWVdKEZpbGVTdHJlYW0mIHN0cmVhbSkgLT4g
c3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4geworICAgICAgICBsb25nIGxv
bmcgc2l6ZSA9IHN0cmVhbS5nZXRTaXplKHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7
CiAgICAgICAgIHJldHVybiBbc2l6ZV0oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CiAgICAg
ICAgICAgICBjbGllbnQuZGlkR2V0U2l6ZShzaXplKTsKICAgICAgICAgfTsKQEAgLTE0NywxMCAr
MTQ2LDkgQEAgdm9pZCBBc3luY0ZpbGVTdHJlYW06OmdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRo
LCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW0KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06
Om9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBs
b25nIGxlbmd0aCkKIHsKLSAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkUGF0aChwYXRoKTsKICAg
ICAvLyBGSVhNRTogRXhwbGljaXQgcmV0dXJuIHR5cGUgaGVyZSBpcyBhIHdvcmthcm91bmQgZm9y
IGEgZGVmaWNpZW5jeSBpbiB0aGUgV2luZG93cyBjb21waWxlciBhdCB0aGUgdGltZSBvZiB0aGlz
IHdyaXRpbmcuCi0gICAgcGVyZm9ybShbY2FwdHVyZWRQYXRoLCBvZmZzZXQsIGxlbmd0aF0oRmls
ZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYp
PiB7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0cmVhbS5vcGVuRm9yUmVhZChjYXB0dXJlZFBh
dGguc3RyaW5nKCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBwZXJmb3JtKFtwYXRoID0gcGF0aC5p
c29sYXRlZENvcHkoKSwgb2Zmc2V0LCBsZW5ndGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkgLT4gc3Rk
OjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4geworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBzdHJlYW0ub3BlbkZvclJlYWQocGF0aCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgICAgICBy
ZXR1cm4gW3N1Y2Nlc3NdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgewogICAgICAgICAgICAg
Y2xpZW50LmRpZE9wZW4oc3VjY2Vzcyk7CiAgICAgICAgIH07CkBAIC0xNTksOSArMTU3LDggQEAg
dm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9u
ZyBsb25nIG9mZnNldCwgbG9uZyBsb24KIAogdm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JX
cml0ZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgU3RyaW5nQ2FwdHVyZSBjYXB0dXJlZFBh
dGgocGF0aCk7Ci0gICAgcGVyZm9ybShbY2FwdHVyZWRQYXRoXShGaWxlU3RyZWFtJiBzdHJlYW0p
IC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKLSAgICAgICAgYm9v
bCBzdWNjZXNzID0gc3RyZWFtLm9wZW5Gb3JXcml0ZShjYXB0dXJlZFBhdGguc3RyaW5nKCkpOwor
ICAgIHBlcmZvcm0oW3BhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpXShGaWxlU3RyZWFtJiBzdHJl
YW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gc3RyZWFtLm9wZW5Gb3JXcml0ZShwYXRoKTsKICAgICAgICAgcmV0dXJu
IFtzdWNjZXNzXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKICAgICAgICAgICAgIGNsaWVu
dC5kaWRPcGVuKHN1Y2Nlc3MpOwogICAgICAgICB9OwpAQCAtMTg4LDkgKzE4NSw4IEBAIHZvaWQg
QXN5bmNGaWxlU3RyZWFtOjpyZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKIAogdm9pZCBB
c3luY0ZpbGVTdHJlYW06OndyaXRlKGNvbnN0IFVSTCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0
aW9uLCBpbnQgbGVuZ3RoKQogewotICAgIFVSTENhcHR1cmUgY2FwdHVyZWRVUkwoYmxvYlVSTCk7
Ci0gICAgcGVyZm9ybShbY2FwdHVyZWRVUkwsIHBvc2l0aW9uLCBsZW5ndGhdKEZpbGVTdHJlYW0m
IHN0cmVhbSkgLT4gc3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4gewotICAg
ICAgICBpbnQgYnl0ZXNXcml0dGVuID0gc3RyZWFtLndyaXRlKGNhcHR1cmVkVVJMLnVybCgpLCBw
b3NpdGlvbiwgbGVuZ3RoKTsKKyAgICBwZXJmb3JtKFtibG9iVVJMID0gYmxvYlVSTC5pc29sYXRl
ZENvcHkoKSwgcG9zaXRpb24sIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGludCBieXRlc1dyaXR0
ZW4gPSBzdHJlYW0ud3JpdGUoYmxvYlVSTCwgcG9zaXRpb24sIGxlbmd0aCk7CiAgICAgICAgIHJl
dHVybiBbYnl0ZXNXcml0dGVuXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKICAgICAgICAg
ICAgIGNsaWVudC5kaWRXcml0ZShieXRlc1dyaXR0ZW4pOwogICAgICAgICB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaCBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKaW5kZXggZmY0ODFhNDVmYjgyOGNiMWIzNjJi
Zjc2OTAwY2EwMWU4YTA1ZWQ0Ni4uMWJhM2E5Y2MwZjZjNjI3YTU3OTcwOGUzNDc4NzQ2ODQ5YmY3
YzZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCkBAIC0zNCw2
ICszNCw3IEBACiAKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlRnVuY3Rpb24uaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01Niw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lk
IHN0YXJ0KCk7Ci0gICAgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3RkOjpmdW5jdGlvbjx2
b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4oRmlsZVN0cmVhbSYpPiYmKTsKKyAgICB2b2lkIHBlcmZv
cm0oTm9uY29weWFibGVGdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVu
dCYpPihGaWxlU3RyZWFtJik+JiYpOwogCiAgICAgc3RydWN0IEludGVybmFsczsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW50ZXJuYWxzPiBtX2ludGVybmFsczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCmluZGV4IDM1YTE3YjhlNzgzMjkw
ZGZhYTZjNmQ4M2YzZGI3ODEyMjQzNzRkN2QuLjU3NjA3ODNkYjhjZTAwMzVjOGVlNDA3OGE1NDVm
NzA1ZmY2MTJkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVGhyZWFkLmNwcApAQCAtNDUsNyArNDUsNyBAQCBib29sIFNjcm9sbGluZ1RocmVhZDo6
aXNDdXJyZW50VGhyZWFkKCkKICAgICByZXR1cm4gdGhyZWFkSWRlbnRpZmllciAmJiBjdXJyZW50
VGhyZWFkKCkgPT0gdGhyZWFkSWRlbnRpZmllcjsKIH0KIAotdm9pZCBTY3JvbGxpbmdUaHJlYWQ6
OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgU2Nyb2xsaW5n
VGhyZWFkOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24p
CiB7CiAgICAgYXV0byYgc2Nyb2xsaW5nVGhyZWFkID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0
b24oKTsKICAgICBzY3JvbGxpbmdUaHJlYWQuY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKQEAgLTU4
LDcgKzU4LDcgQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVu
Y3Rpb24mJiBmdW5jdGlvbikKICAgICBzY3JvbGxpbmdUaHJlYWQud2FrZVVwUnVuTG9vcCgpOwog
fQogCi12b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hCYXJyaWVyKE5vbmNvcHlhYmxlRnVu
Y3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaEJhcnJpZXIo
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIGRpc3BhdGNo
KFtmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pXSgpIG11dGFibGUgewogICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lk
IFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tU2Nyb2xsaW5nVGhyZWFkKCkK
IHsKICAgICBBU1NFUlQoaXNDdXJyZW50VGhyZWFkKCkpOwogCi0gICAgVmVjdG9yPE5vbmNvcHlh
YmxlRnVuY3Rpb24+IGZ1bmN0aW9uczsKKyAgICBWZWN0b3I8Tm9uY29weWFibGVGdW5jdGlvbjx2
b2lkICgpPj4gZnVuY3Rpb25zOwogICAgIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9mdW5jdGlvbnNNdXRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4IGFhZjU3N2JkZDk4ODNkNDMwMjA0NzIy
NmI1ZTgyMTBiZjg2YjU1YTYuLjAzN2Y5NWI5MGI2M2E5ZGViMTMxYzM4MWJkOWQzMjQ5OTdiNTQx
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ro
cmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVh
ZC5oCkBAIC00OCwxMSArNDgsMTEgQEAgY2xhc3MgU2Nyb2xsaW5nVGhyZWFkIHsKIAogcHVibGlj
OgogICAgIHN0YXRpYyBib29sIGlzQ3VycmVudFRocmVhZCgpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIGRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgp
PiYmKTsKIAogICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIG9uIHRoZSBt
YWluIHRocmVhZCBvbmNlIGFsbCBwZW5kaW5nIGZ1bmN0aW9ucwogICAgIC8vIG9uIHRoZSBzY3Jv
bGxpbmcgdGhyZWFkIGhhdmUgZmluaXNoZWQgZXhlY3V0aW5nLiBVc2VkIGZvciBzeW5jaHJvbml6
YXRpb24gcHVycG9zZXMuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgZGlzcGF0Y2hC
YXJyaWVyKE5vbmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgZGlzcGF0Y2hCYXJyaWVyKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFNjcm9sbGluZ1RocmVhZD47CkBA
IC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgTG9jayBtX2luaXRpYWxpemVSdW5Mb29wTXV0
ZXg7CiAKICAgICBMb2NrIG1fZnVuY3Rpb25zTXV0ZXg7Ci0gICAgVmVjdG9yPE5vbmNvcHlhYmxl
RnVuY3Rpb24+IG1fZnVuY3Rpb25zOworICAgIFZlY3RvcjxOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+PiBtX2Z1bmN0aW9uczsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgdXNlIFdlYkNvcmU6OlJ1bkxvb3AgaGVyZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLmgKaW5kZXggZGFlZTJlZmZlYmFmYmZjMzljNjhmN2YxZGNmYTBhYWZmNDlhMmJkZi4uODY5
YTY4ZTk4ODZiMmQwYmY1OThiZTMwYTkyZGRmNjQ1ZGU5Mzc2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1B
VkZPYmpDLmgKQEAgLTE0Myw3ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJh
Y2tzKCk7CiAgICAgdm9pZCByZW5kZXJpbmdNb2RlQ2hhbmdlZCgpOwogCi0gICAgdm9pZCBzY2hl
ZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uJiYpOworICAgIHZvaWQgc2NoZWR1
bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKIAogICAgIGVu
dW0gRGlzcGxheU1vZGUgewogICAgICAgICBOb25lLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1t
CmluZGV4IDdhNzk2NDJhMWMwMTNhNGI0YjU4ODAwY2FjMjBkZDcyOGEyMWM0YjUuLjg0YzdkNjIz
MjRmNjQ3MTFlMTY1ZTUyNDNkZjg4ZjIxYTUwZWQ3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9i
akMubW0KQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQzo6c2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrUwogICAgIG1f
cGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpzY2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1
bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQzo6c2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYm
IGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChmdW5jdGlvbik7CiAgICAgY2FsbE9uTWFpblRocmVh
ZChbd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCksIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlv
bildIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbVByaXZhdGUuY3BwCmluZGV4IDQyZDI0NjZjMmJmNjMxZjBlZmZhY2NmOTRm
NDAwMjgxMGE3ZDAyNmIuLmQ0OWQxNTEyMTM5NjM4ODY0OWRlMTU3YzMwNDcxNzQ5M2ViZmNjYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFTdHJlYW1Qcml2YXRlLmNwcApAQCAtMjk5LDcgKzI5OSw3IEBAIHZvaWQgTWVkaWFTdHJl
YW1Qcml2YXRlOjp0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikKICAgICB9KTsK
IH0KIAotdm9pZCBNZWRpYVN0cmVhbVByaXZhdGU6OnNjaGVkdWxlRGVmZXJyZWRUYXNrKE5vbmNv
cHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgTWVkaWFTdHJlYW1Qcml2YXRlOjpzY2hl
ZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24p
CiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhp
cyA9IGNyZWF0ZVdlYWtQdHIoKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Q
cml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bVByaXZhdGUuaAppbmRleCA4Y2Y2MDRjOTA2NTZjMGZlMGFiYjA3YjkxNTRhZDExYTFkOWM2MmU1
Li45MjMwNGVmYmQ2MzQ5YWNmMTk2OTc1NGZmODI4YTA2ZmE0NGMwZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZh
dGUuaApAQCAtMTEyLDcgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGFyYWN0ZXJpc3Rp
Y3NDaGFuZ2VkKCk7CiAgICAgdm9pZCB1cGRhdGVBY3RpdmVWaWRlb1RyYWNrKCk7CiAKLSAgICB2
b2lkIHNjaGVkdWxlRGVmZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgdm9p
ZCBzY2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYpOwog
CiAgICAgV2Vha1B0ckZhY3Rvcnk8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3dlYWtQdHJGYWN0b3J5
OwogICAgIFZlY3RvcjxPYnNlcnZlcio+IG1fb2JzZXJ2ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVT
b3VyY2UuaAppbmRleCAyMWFjYWYwMmQ2NjQ5NTA0YTczNTExYjIxYzg5NzdjYzY0OTlmNDFlLi5m
NDc0YWViOWI3YzczY2JjNGM4MzRjMmYxZWM5MmI1ODljMTQ1YzY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNh
cHR1cmVTb3VyY2UuaApAQCAtODYsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRW
aWRlb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dCopOwogICAg
IHZvaWQgc2V0QXVkaW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1cmVBdWRpb0RhdGFPdXRw
dXQqKTsKIAotICAgIHZvaWQgc2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlv
biYmKTsKKyAgICB2b2lkIHNjaGVkdWxlRGVmZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb248
dm9pZCAoKT4mJik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXR1cFNlc3Npb24oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2Fw
dHVyZVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
Vk1lZGlhQ2FwdHVyZVNvdXJjZS5tbQppbmRleCA3OTE1YTg0MmVhODNkZDM1N2QyYjQyODhhNTc5
YmZjMTM4MGI3NmNjLi43NmFmZDliYmU1YTA3ZTlhNzU4YWE0NWI4ZTdjN2U2NTFjYmNiMzNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRp
YUNhcHR1cmVTb3VyY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWTWVkaWFDYXB0dXJlU291cmNlLm1tCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBB
Vk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2V0QXVkaW9TYW1wbGVCdWZmZXJEZWxlZ2F0ZShBVkNhcHR1
cmVBdWRpb0RhdGFPdXRwdXQKICAgICBbYXVkaW9PdXRwdXQgc2V0U2FtcGxlQnVmZmVyRGVsZWdh
dGU6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6Z2xvYmFBdWRpb0NhcHR1cmVTZXJpYWxRdWV1
ZSgpXTsKIH0KIAotdm9pZCBBVk1lZGlhQ2FwdHVyZVNvdXJjZTo6c2NoZWR1bGVEZWZlcnJlZFRh
c2soTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBBVk1lZGlhQ2FwdHVyZVNv
dXJjZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYm
IGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChmdW5jdGlvbik7CiAgICAgY2FsbE9uTWFpblRocmVh
ZChbd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCksIGZ1bmN0aW9uID0gV1RGTW92ZShmdW5jdGlv
bildIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlU3luY01hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKaW5k
ZXggM2UxZjFjNDAyYWRiYmUyZmViYTg4NTU4Y2I1ZjA0Y2U0ODFiNTBiNi4uZTFhNGExNWRkZDdm
MzQ3MTYxZTQ0NDMzNzFmYzQ3YjcyMjY4Zjk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
dG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgU3RyaW5nIFN0b3JhZ2VT
eW5jTWFuYWdlcjo6ZnVsbERhdGFiYXNlRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlk
ZW50aWZpZXIKICAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcGF0aCwgZGF0
YWJhc2VJZGVudGlmaWVyICsgIi5sb2NhbHN0b3JhZ2UiKTsKIH0KIAotdm9pZCBTdG9yYWdlU3lu
Y01hbmFnZXI6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQg
U3RvcmFnZVN5bmNNYW5hZ2VyOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQo
bV90aHJlYWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5j
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oCmlu
ZGV4IGVkZDcxN2RlNWJmNzI3MGQyNzc5YmEwZTkyNWRmYzU0YzVmZjhhOGUuLjc1YTQ4NmI2MjBj
MmJiMzEyYWU4Y2RmOWQ1MDY0YjQwMjZiYTFlYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
U3RvcmFnZVN5bmNNYW5hZ2VyLmgKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBSZWY8U3RvcmFnZVN5bmNNYW5hZ2VyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAg
ICB+U3RvcmFnZVN5bmNNYW5hZ2VyKCk7CiAKLSAgICB2b2lkIGRpc3BhdGNoKE5vbmNvcHlhYmxl
RnVuY3Rpb24mJik7CisgICAgdm9pZCBkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQg
KCk+JiYpOwogICAgIHZvaWQgY2xvc2UoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmNwcAppbmRleCA2Mjg0MGQyZTc3NTI3MTQwNDJlMjA1ODk5ZjJkZjY4
YWFjZDZjY2Q4Li4yOTY2ZTA0MDZlMTcwNGYyMjBjNTFjMjZkZTc4ZDA4MjE0MjZjNjA5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwCkBAIC03NCwxMSArNzQsMTEgQEAg
dm9pZCBTdG9yYWdlVGhyZWFkOjp0aHJlYWRFbnRyeVBvaW50KCkKICAgICB9CiB9CiAKLXZvaWQg
U3RvcmFnZVRocmVhZDo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQor
dm9pZCBTdG9yYWdlVGhyZWFkOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQo
IW1fcXVldWUua2lsbGVkKCkgJiYgbV90aHJlYWRJRCk7Ci0gICAgbV9xdWV1ZS5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwor
ICAgIG1fcXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Tm9uY29weWFibGVGdW5jdGlvbjx2
b2lkICgpPj4oV1RGTW92ZShmdW5jdGlvbikpKTsKIH0KIAogdm9pZCBTdG9yYWdlVGhyZWFkOjp0
ZXJtaW5hdGUoKQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0
ZSgpCiAgICAgaWYgKCFtX3RocmVhZElEKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3F1ZXVl
LmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+KFt0aGlzXSB7Cisg
ICAgbV9xdWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+PihbdGhpc10gewogICAgICAgICBwZXJmb3JtVGVybWluYXRlKCk7CiAgICAgfSkpOwog
ICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkSUQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9TdG9yYWdlVGhyZWFkLmgKaW5kZXggZGNlNWNjZmNkM2NhNjJiMWMwODc2ZmMzNGQ5MmRmNmYw
MjBkZmY3NS4uNDc1MmQ1YjE5ZTFiMDZjYWE5ZTdlZWQ4ODQ0YjQ5ZDVmM2ZjYmZhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoK
ICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIAotICAgIHZvaWQgZGlz
cGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICB2b2lkIGRpc3BhdGNoKE5vbmNvcHlh
YmxlRnVuY3Rpb248dm9pZCAoKT4mJik7CiAKICAgICBzdGF0aWMgdm9pZCByZWxlYXNlRmFzdE1h
bGxvY0ZyZWVNZW1vcnlJbkFsbFRocmVhZHMoKTsKIApAQCAtNTksNyArNTksNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgcGVyZm9ybVRlcm1pbmF0ZSgpOwogCiAgICAgVGhyZWFkSWRlbnRpZmllciBt
X3RocmVhZElEOwotICAgIE1lc3NhZ2VRdWV1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPiBtX3F1ZXVl
OworICAgIE1lc3NhZ2VRdWV1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+PiBtX3F1ZXVl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsU291cC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxT
b3VwLmNwcAppbmRleCAyYzNkMDM0YzJjZTU3ZDU5YjJkNmI5YTZkOThiM2ExZDFjMzI2MzBjLi44
YzkxYzllYzY3NTg4MjJjNmIzMGY1ZmI0MGI4MmMxYzY0OGQ0ZWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVJT0NoYW5uZWxTb3VwLmNwcApAQCAtNjksNyArNjksNyBAQCBSZWY8SU9DaGFubmVsPiBJT0No
YW5uZWw6Om9wZW4oY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgSU9DaGFubmVsOjpUeXBlIHR5cGUp
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSU9DaGFubmVsKGZpbGVQYXRoLCB0eXBlKSk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydW5UYXNrSW5RdWV1ZShOb25jb3B5YWJsZUZ1bmN0aW9u
JiYgdGFzaywgV29ya1F1ZXVlKiBxdWV1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBydW5UYXNrSW5R
dWV1ZShOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgdGFzaywgV29ya1F1ZXVlKiBxdWV1
ZSkKIHsKICAgICBpZiAocXVldWUpIHsKICAgICAgICAgcXVldWUtPmRpc3BhdGNoKFdURk1vdmUo
dGFzaykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280051</attachid>
            <date>2016-05-28 17:09:53 -0700</date>
            <delta_ts>2016-05-28 17:27:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158185-20160528171105.patch</filename>
            <type>text/plain</type>
            <size>44917</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY5N2NiNWQxNjY5ZDViZGI3YWJjYmJk
M2I2MWU1YzhiZjAyZjc0M2MuLmNhNTU3ODVkNzgxYjA4N2IzMDdhMjUzNGE0NTdjMTBjZWQwMGJi
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTYtMDUtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xh
c3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlbXBsYXRpemUgTm9uY29weWFibGVGdW5jdGlvbiBjbGFz
cyBzaW1pbGFybHkgdG8gc3RkOjpmdW5jdGlvbiwgc28KKyAgICAgICAgdGhhdCBpdCBjYW4gYmUg
dXNlZCBhcyBhIHN0ZDo6ZnVuY3Rpb24gcmVwbGFjZW1lbnQgaW4gbW9yZSBwbGFjZXMuCisKKyAg
ICAgICAgUHJldmlvdXNseSwgTm9uY29weWFibGVGdW5jdGlvbiBjb3VsZCBvbmx5IHN1cHBvcnQg
InZvaWQoKSIgbGFtYmRhcy4KKworICAgICAgICAqIHd0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaDoK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmZ1bmN0aW9uUXVl
dWUpOgorICAgICAgICAoV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQu
aDoKKyAgICAgICAgKiB3dGYvTm9uY29weWFibGVGdW5jdGlvbi5oOgorICAgICAgICAqIHd0Zi9S
dW5Mb29wLmNwcDoKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6cGVyZm9ybVdvcmspOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjpkaXNwYXRjaCk6CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAg
ICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcik6CisgICAgICAgICogd3RmL2VmbC9EaXNwYXRj
aFF1ZXVlV29ya0l0ZW1FZmwuaDoKKyAgICAgICAgKFdvcmtJdGVtOjpXb3JrSXRlbSk6CisgICAg
ICAgIChUaW1lcldvcmtJdGVtOjpjcmVhdGUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6VGlt
ZXJXb3JrSXRlbSk6CisgICAgICAgICogd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpk
aXNwYXRjaEFmdGVyKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHA6
CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6U2NoZWR1bGVkVGFzazo6Y3JlYXRl
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrOjpTY2hl
ZHVsZWRUYXNrKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6ZGlzcGF0Y2hBZnRlcik6CisgICAg
ICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXb3JrUXVl
dWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcik6CisgICAg
ICAgICogd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEFm
dGVyQ29udGV4dDo6RGlzcGF0Y2hBZnRlckNvbnRleHQpOgorICAgICAgICAoV1RGOjpSdW5Mb29w
OjpkaXNwYXRjaEFmdGVyKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtJdGVtV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6V29ya0l0ZW1XaW46OldvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29y
a0l0ZW1XaW46OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OkhhbmRsZVdvcmtJdGVtOjpIYW5kbGVX
b3JrSXRlbSk6CisgICAgICAgIChXVEY6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5n
SGFuZGxlKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtJdGVtV2luLmg6CisgICAgICAgIChXVEY6
OldvcmtJdGVtV2luOjpmdW5jdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6
V29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKToKKwogMjAxNi0wNS0yOCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgcHJvamVjdHMgdGhhdCBp
bmNsdWRlIE1haW5UaHJlYWQuaCB3aXRob3V0IGluY2x1ZGluZyBGYXN0TWFsbG9jLmguCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNDI5ZTRiOGEyZTU4ZDEzMzE1MzkxZTdlYzNmNmRhMjhkZDU2NmQ5NC4uNjUyZWY4
NDJhNTk5Mzk2N2Y3ODAzNzY0Zjg3OWRlZjlmZjMzNTNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQxIEBACisyMDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAg
ICAgICAgVGVtcGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9uIGNsYXNzIHNpbWlsYXJseSB0byBz
dGQ6OmZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTgxODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xhc3Mgc2ltaWxhcmx5IHRvIHN0
ZDo6ZnVuY3Rpb24sIHNvCisgICAgICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGQ6OmZ1
bmN0aW9uIHJlcGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIFByZXZpb3VzbHks
IE5vbmNvcHlhYmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBwb3J0ICJ2b2lkKCkiIGxhbWJkYXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OnJ1blRhc2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpB
c3luY0ZpbGVTdHJlYW06OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3Ry
ZWFtOjpnZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZv
clJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp3cml0ZSk6CisgICAgICAgICog
ZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpkaXNw
YXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmll
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25z
RnJvbVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpzY2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2spOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkFWTWVkaWFDYXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayk6CisKIDIw
MTYtMDUtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXV0
b2NvcnJlY3Rpb24gbWFrZXMgaXQgaGFyZCB0byB0eXBlICJkb2Vzbid0IiBhbmQgdG8gdHlwZSBA
IGluIGVtYWlsIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4MzBkZjdkOTI1ZjVmNmUxNjViNDg5MjZk
YTUwMTQ3NTc1N2M5Yzg2Li5kYzhhN2ZmNDkyOTQzNTEyOWFjN2QxZDkwY2ZkOWU4MWM2YjYxODI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9u
IGNsYXNzIHNpbWlsYXJseSB0byBzdGQ6OmZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgxODUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24g
Y2xhc3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rpb24sIHNvCisgICAgICAgIHRoYXQgaXQgY2Fu
IGJlIHVzZWQgYXMgYSBzdGQ6OmZ1bmN0aW9uIHJlcGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgor
CisgICAgICAgIFByZXZpb3VzbHksIE5vbmNvcHlhYmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBw
b3J0ICJ2b2lkKCkiIGxhbWJkYXMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OmRpc3BhdGNo
KToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOgorICAgICAgICAqIFN0
b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFk
OjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUp
OgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oOgorCiAyMDE2LTA1LTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgp
IHNob3VsZCBub3QgY29weSBjYXB0dXJlZCBsYW1iZGEgdmFyaWFibGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NzE0Y2JjY2NlNGI4OGViMGMzNTJkZGFkZTg4NmIxMWNhMmUzNzIxOC4uODE3ZjE5NWZmNTM5NThj
YWMzZmM3ZmRmMjI1M2U3ZWY3NjI3N2IwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAy
MDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVGVt
cGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9uIGNsYXNzIHNpbWlsYXJseSB0byBzdGQ6OmZ1bmN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgx
ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1w
bGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xhc3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rp
b24sIHNvCisgICAgICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGQ6OmZ1bmN0aW9uIHJl
cGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIFByZXZpb3VzbHksIE5vbmNvcHlh
YmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBwb3J0ICJ2b2lkKCkiIGxhbWJkYXMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpydW5UYXNrSW5RdWV1ZSk6CisKKzIwMTYt
MDUtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBNb2Rlcm5p
emUgbGFtYmRhIGNhcHR1cmVzIGluIHRoZSBuZXR3b3JrIGRpc2sgY2FjaGUgaW1wbGVtZW50YXRp
b24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE3
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCmluZGV4IGMzYTYwZjA4YzUwNTI4ZmRl
ZDY1NjEyMjcxNjc4ZmY3NDQzNzJkYmUuLmI1MmVlY2YxZWJmMjY5YTQwNjA4YmEyYTg2NzVhNzUx
ZDM4MzQ4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEZ1bmN0aW9uRGlzcGF0Y2hlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxGdW5jdGlvbkRpc3BhdGNoZXI+IHsKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+RnVuY3Rpb25EaXNwYXRjaGVyKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIEZ1bmN0aW9uRGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNw
cAppbmRleCBkM2YwMjVlZjJjYzk2NjE4Njc2MmVjNTYxODNlN2RlMjcxOGE3ZDg1Li5iZDExZTEw
YzJkNTEyOTMxY2ExNjE3NWMxOTlkMWRlMTcxZDc1NWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApA
QCAtNDcsOSArNDcsOSBAQCBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRp
ZmllcjsKIAogc3RhdGljIFN0YXRpY0xvY2sgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleDsK
IAotc3RhdGljIERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+JiBmdW5jdGlvblF1ZXVlKCkKK3N0
YXRpYyBEZXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+PiYgZnVuY3Rpb25RdWV1ZSgp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+
PiBmdW5jdGlvblF1ZXVlOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTxOb25jb3B5
YWJsZUZ1bmN0aW9uPHZvaWQgKCk+Pj4gZnVuY3Rpb25RdWV1ZTsKICAgICByZXR1cm4gZnVuY3Rp
b25RdWV1ZTsKIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNG
cm9tTWFpblRocmVhZCgpCiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVh
ZHlfY2xvY2s6Om5vdygpOwogCi0gICAgTm9uY29weWFibGVGdW5jdGlvbiBmdW5jdGlvbjsKKyAg
ICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgewpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tTWFpblRocmVhZCgpCiAgICAgfQogfQogCi12b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9u
Y29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBjYWxsT25NYWluVGhyZWFkKE5vbmNv
cHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoZnVuY3Rp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggOWY1ODU2ZDBjYWM1M2I0NTIwNzFiMmY2OGIzZWRl
OGYzMzE4MGE2NS4uZjE5ZjU1OTAxOWRiNzk3NTBiNWY4YmRlY2ViNTllZmVmZGRhZTVlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuaApAQCAtNDEsNyArNDEsNyBAQCB0eXBlZGVmIHVpbnQzMl90IFRocmVhZElk
ZW50aWZpZXI7CiAvLyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9uY29weWFibGVGdW5jdGlvbiYmKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9uY29weWFibGVGdW5jdGlv
bjx2b2lkICgpPiYmKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKHZvaWQgKF5i
bG9jaykoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZUZ1bmN0aW9u
LmggYi9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZUZ1bmN0aW9uLmgKaW5kZXggMTY4OWRlMmNh
NjBlMjFhNzkzOTNmYTZkYzM2NzYwZDVlOTg1MTQ5MC4uYWI5ZjRkYzA2NDE3NjY0NzFkMmViYzJk
NTNjOWZjZDQ2YWEzYWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTm9uY29weWFibGVG
dW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL05vbmNvcHlhYmxlRnVuY3Rpb24uaApAQCAt
MzAsOCArMzAsMTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIEZJWE1FOiBXZSBjb3VsZCBt
YWtlIHRoaXMgdGVtcGxhdGVkIHRvIHN1cHBvcnQgb3RoZXIgbGFtYmRhcyB0aGFuIHZvaWQoKSBh
bmQgbWFrZSB0aGlzIG1vcmUgcmV1c2FibGUuCi1jbGFzcyBOb25jb3B5YWJsZUZ1bmN0aW9uIHsK
K3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBOb25jb3B5YWJsZUZ1bmN0aW9uOworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KK2NsYXNzIE5vbmNvcHlhYmxlRnVuY3Rp
b248T3V0KEluLi4uKT4gewogcHVibGljOgogICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24oKSA9IGRl
ZmF1bHQ7CiAKQEAgLTQxLDEwICs0MywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgT3V0IG9wZXJhdG9yKCkoSW4uLi4gaW4pIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAobV9jYWxsYWJsZVdyYXBwZXIpCi0gICAgICAgICAgICBt
X2NhbGxhYmxlV3JhcHBlci0+Y2FsbCgpOworICAgICAgICAgICAgcmV0dXJuIG1fY2FsbGFibGVX
cmFwcGVyLT5jYWxsKHN0ZDo6Zm9yd2FyZDxJbj4oaW4pLi4uKTsKKyAgICAgICAgcmV0dXJuIE91
dCgpOwogICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fY2FsbGFibGVXcmFwcGVyOyB9CkBAIC02OCwxMSArNzEsMTEgQEAgcHJpdmF0ZToKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNhbGxhYmxlV3JhcHBlckJhc2UoKSB7IH0KIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPdXQgY2Fs
bChJbi4uLikgPSAwOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYWJsZVR5
cGU+Ci0gICAgY2xhc3MgQ2FsbGFibGVXcmFwcGVyIGZpbmFsIDogcHVibGljIENhbGxhYmxlV3Jh
cHBlckJhc2UgeworICAgIGNsYXNzIENhbGxhYmxlV3JhcHBlciA6IHB1YmxpYyBDYWxsYWJsZVdy
YXBwZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IENhbGxhYmxlV3JhcHBl
cihDYWxsYWJsZVR5cGUmJiBjYWxsYWJsZSkKICAgICAgICAgICAgIDogbV9jYWxsYWJsZShXVEZN
b3ZlKGNhbGxhYmxlKSkKQEAgLTgyLDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbGFi
bGVXcmFwcGVyKGNvbnN0IENhbGxhYmxlV3JhcHBlciYpID0gZGVsZXRlOwogICAgICAgICBDYWxs
YWJsZVdyYXBwZXImIG9wZXJhdG9yPShjb25zdCBDYWxsYWJsZVdyYXBwZXImKSA9IGRlbGV0ZTsK
IAotICAgICAgICB2b2lkIGNhbGwoKSBmaW5hbCB7IG1fY2FsbGFibGUoKTsgfQorICAgICAgICBP
dXQgY2FsbChJbi4uLiBpbikgZmluYWwgeyByZXR1cm4gbV9jYWxsYWJsZShzdGQ6OmZvcndhcmQ8
SW4+KGluKS4uLik7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIENhbGxhYmxlVHlwZSBtX2Nh
bGxhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9SdW5Mb29wLmNwcAppbmRleCA0ZWQwNmViZGNhOTQ3MjA2N2ZiMDdiNmRjZmZmMWFj
MjlkMzY2YzM1Li45NjYwZjE1MTRlNWYwOTgxODYyOTk4ZjgxNzQxNzM2MDA5NjI0YTY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
dW5Mb29wLmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFJ1bkxvb3A6OnBlcmZvcm1Xb3JrKCkK
IAogICAgIHNpemVfdCBmdW5jdGlvbnNUb0hhbmRsZSA9IDA7CiAgICAgewotICAgICAgICBOb25j
b3B5YWJsZUZ1bmN0aW9uIGZ1bmN0aW9uOworICAgICAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+IGZ1bmN0aW9uOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9mdW5jdGlvblF1ZXVlTG9jayk7CiAgICAgICAgICAgICBmdW5jdGlvbnNUb0hhbmRsZSA9
IG1fZnVuY3Rpb25RdWV1ZS5zaXplKCk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBSdW5Mb29w
OjpwZXJmb3JtV29yaygpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgZnVuY3Rpb25zSGFuZGxl
ZCA9IDE7IGZ1bmN0aW9uc0hhbmRsZWQgPCBmdW5jdGlvbnNUb0hhbmRsZTsgKytmdW5jdGlvbnNI
YW5kbGVkKSB7Ci0gICAgICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gZnVuY3Rpb247CisgICAgICAg
IE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb247CiAgICAgICAgIHsKICAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Z1bmN0aW9uUXVldWVMb2NrKTsKIApAQCAtMTIz
LDcgKzEyMyw3IEBAIHZvaWQgUnVuTG9vcDo6cGVyZm9ybVdvcmsoKQogICAgIH0KIH0KIAotdm9p
ZCBSdW5Mb29wOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lk
IFJ1bkxvb3A6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
bikKIHsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Z1bmN0aW9uUXVldWVM
b2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaCBiL1NvdXJjZS9XVEYv
d3RmL1J1bkxvb3AuaAppbmRleCAzZTBhMWI0ZDgxZjFlMWFlYmUwYThjOWViOWRkZGMzZDY5ZjAy
NTQ1Li5lMTU1OGI2MjU5YzI3ZjBmNzA5MDE1ZWQ1OWMxNTJiOTg2NTUzNWQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKKysrIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5o
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgaXNNYWluKCk7CiAgICAgflJ1bkxvb3AoKTsKIAotICAgIHZvaWQgZGlzcGF0Y2goTm9u
Y29weWFibGVGdW5jdGlvbiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKE5vbmNvcHlh
YmxlRnVuY3Rpb248dm9pZCAoKT4mJikgb3ZlcnJpZGU7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgcnVuKCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RvcCgp
OwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShHTElCX0VWRU5U
X0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMsIE5vbmNvcHlhYmxl
RnVuY3Rpb24mJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlcihz
dGQ6OmNocm9ubzo6bmFub3NlY29uZHMsIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7
CiAjZW5kaWYKIAogICAgIGNsYXNzIFRpbWVyQmFzZSB7CkBAIC0xNTUsNyArMTU1LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CiAKICAgICBNdXRleCBtX2Z1bmN0aW9uUXVl
dWVMb2NrOwotICAgIERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+IG1fZnVuY3Rpb25RdWV1ZTsK
KyAgICBEZXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+PiBtX2Z1bmN0aW9uUXVldWU7
CiAKICNpZiBVU0UoV0lORE9XU19FVkVOVF9MT09QKQogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVy
UnVuTG9vcE1lc3NhZ2VXaW5kb3dDbGFzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAppbmRleCAzMzBlNWY3NDYx
MzQzMzRlYjA1ODY5ZDhmNDFkNDdiYzUzMjE2NWU1Li5lNTUzMjU5NGE1NDMyNGQ2ODgxMWZlMTY2
ZGE0MGJmNzUyMzQyODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8V29ya1F1ZXVlPiBjcmVhdGUoY29u
c3QgY2hhciogbmFtZSwgVHlwZSA9IFR5cGU6OlNlcmlhbCwgUU9TID0gUU9TOjpEZWZhdWx0KTsK
ICAgICB2aXJ0dWFsIH5Xb3JrUXVldWUoKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJikgb3ZlcnJpZGU7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMsIE5v
bmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKSBvdmVycmlkZTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcywg
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248dm9pZCAoc2l6ZV90IGluZGV4KT4mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwIGIvU291cmNlL1dURi93dGYvY29jb2Ev
V29ya1F1ZXVlQ29jb2EuY3BwCmluZGV4IDQ0OWE0MGZjMzRmZTE2YThiMjgzZjgwZjUzYjE4NDg0
ZDhkMDYwNTMuLjk5NWE5NTRhYWMxZGI3NDEzM2RlOWNmYjk0ZjE5NDhjOTQxMjc0MTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKQEAgLTI4LDEwICsyOCwxMCBAQAog
CiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxl
RnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChOb25jb3B5YWJs
ZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgcmVmKCk7Ci0gICAgYXV0byog
ZnVuY3Rpb25QdHIgPSBuZXcgTm9uY29weWFibGVGdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSk7
CisgICAgYXV0byogZnVuY3Rpb25QdHIgPSBuZXcgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgp
PihXVEZNb3ZlKGZ1bmN0aW9uKSk7CiAgICAgZGlzcGF0Y2hfYXN5bmMobV9kaXNwYXRjaFF1ZXVl
LCBeewogICAgICAgICAoKmZ1bmN0aW9uUHRyKSgpOwogICAgICAgICBkZWxldGUgZnVuY3Rpb25Q
dHI7CkBAIC0zOSwxMCArMzksMTAgQEAgdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlh
YmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKICAgICB9KTsKIH0KIAotdm9pZCBXb3JrUXVldWU6OmRp
c3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBOb25jb3B5YWJs
ZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6
OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAo
KT4mJiBmdW5jdGlvbikKIHsKICAgICByZWYoKTsKLSAgICBhdXRvKiBmdW5jdGlvblB0ciA9IG5l
dyBOb25jb3B5YWJsZUZ1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICBhdXRvKiBmdW5j
dGlvblB0ciA9IG5ldyBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+KFdURk1vdmUoZnVuY3Rp
b24pKTsKICAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9X
LCBkdXJhdGlvbi5jb3VudCgpKSwgbV9kaXNwYXRjaFF1ZXVlLCBeewogICAgICAgICAoKmZ1bmN0
aW9uUHRyKSgpOwogICAgICAgICBkZWxldGUgZnVuY3Rpb25QdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmggYi9Tb3VyY2UvV1RGL3d0
Zi9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmgKaW5kZXggZDBlOWM0ZmZkNjE4NTZlNDRl
Mjg3ZGI5YjBlMzI3NDgyODNiODA0ZS4uM2RkZmU1N2RlNmEzZGZmM2ZmODg1MWYwZDAyYTI4ZjAw
MWUzNjY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZWZsL0Rpc3BhdGNoUXVldWVXb3Jr
SXRlbUVmbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1F
ZmwuaApAQCAtMzQsNyArMzQsNyBAQAogCiBjbGFzcyBXb3JrSXRlbSB7CiBwdWJsaWM6Ci0gICAg
V29ya0l0ZW0oUmVmPFdvcmtRdWV1ZT4mJiB3b3JrUXVldWUsIE5vbmNvcHlhYmxlRnVuY3Rpb24m
JiBmdW5jdGlvbikKKyAgICBXb3JrSXRlbShSZWY8V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSwgTm9u
Y29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogICAgICAgICA6IG1fd29ya1F1
ZXVlKFdURk1vdmUod29ya1F1ZXVlKSkKICAgICAgICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVu
Y3Rpb24pKQogICAgIHsKQEAgLTQ0LDEyICs0NCwxMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0gICAgTm9uY29weWFibGVGdW5jdGlvbiBt
X2Z1bmN0aW9uOworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsK
IH07CiAKIGNsYXNzIFRpbWVyV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW0gewogcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKFJlZjxXb3Jr
UXVldWU+JiYgd29ya1F1ZXVlLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIHN0ZDo6
Y2hyb25vOjpuYW5vc2Vjb25kcyBkZWxheU5hbm9TZWNvbmRzKQorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVl
LCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpu
YW5vc2Vjb25kcyBkZWxheU5hbm9TZWNvbmRzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGRlbGF5
TmFub1NlY29uZHMuY291bnQoKSA+PSAwKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxUaW1lcldvcmtJdGVtPihuZXcgVGltZXJXb3JrSXRlbShXVEZNb3ZlKHdvcmtRdWV1ZSksIFdU
Rk1vdmUoZnVuY3Rpb24pLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAqIDEwMDAwMDAw
MDAuMCArIGRlbGF5TmFub1NlY29uZHMuY291bnQoKSkpOwpAQCAtNTgsNyArNTgsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNFeHBpcmVkKGRvdWJsZSBjdXJyZW50VGltZU5hbm9TZWNvbmRzKSBj
b25zdCB7IHJldHVybiBjdXJyZW50VGltZU5hbm9TZWNvbmRzID49IG1fZXhwaXJhdGlvblRpbWVO
YW5vU2Vjb25kczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgVGltZXJXb3JrSXRlbShSZWY8V29ya1F1
ZXVlPiYmIHdvcmtRdWV1ZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uLCBkb3VibGUg
ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcykKKyAgICBUaW1lcldvcmtJdGVtKFJlZjxXb3JrUXVl
dWU+JiYgd29ya1F1ZXVlLCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24s
IGRvdWJsZSBleHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKQogICAgICAgICA6IFdvcmtJdGVtKFdU
Rk1vdmUod29ya1F1ZXVlKSwgV1RGTW92ZShmdW5jdGlvbikpCiAgICAgICAgICwgbV9leHBpcmF0
aW9uVGltZU5hbm9TZWNvbmRzKGV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcAppbmRleCA5NWRiZjZjZWVmZGE2YzQ0NDUxZmE1MjUy
NWE5MWZlODE5NmJiZTNjLi40MGQxOTM5ZmNkNGQwZWZhNTY4OWViMDJlZDk5ODZhOWQ3ODIwNTg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lk
IFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0
b3IpCiAgICAgbV9kaXNwYXRjaFF1ZXVlLT5jbGVhclNvY2tldEV2ZW50SGFuZGxlcigpOwogfQog
Ci12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9u
KQordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4m
JiBmdW5jdGlvbikKIHsKICAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVG
dW5jdGlvbiYmIGZ1bmN0aW9uKQogICAgIG1fZGlzcGF0Y2hRdWV1ZS0+ZGlzcGF0Y2goc3RkOjpt
YWtlX3VuaXF1ZTxXb3JrSXRlbT4oKnRoaXMsIFdURk1vdmUoZnVuY3Rpb24pKSk7CiB9CiAKLXZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJh
dGlvbiwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBXb3JrUXVldWU6OmRp
c3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBOb25jb3B5YWJs
ZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgaWYgKCFtX2Rpc3BhdGNoUXVl
dWUpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMv
UnVuTG9vcEdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJp
Yy5jcHAKaW5kZXggNTcxMzU4MTM2MTQ3Njg5MTVhZTNmZjJmZWU0YWI5ZWIzNDJmMTMwYS4uMTcx
YWQzMDI3MjY5MjI4NmYzMmYwOTQ5MmY0ZjI4MzdhOTdhYjZjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHAKQEAgLTMyLDEyICszMiwxMiBAQCBuYW1lc3BhY2Ug
V1RGIHsKIGNsYXNzIFJ1bkxvb3A6OlRpbWVyQmFzZTo6U2NoZWR1bGVkVGFzayA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTY2hlZHVsZWRUYXNrPiB7CiBXVEZfTUFLRV9OT05DT1BZQUJM
RShTY2hlZHVsZWRUYXNrKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFNjaGVkdWxlZFRh
c2s+IGNyZWF0ZShOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIGRvdWJsZSBpbnRlcnZh
bCwgYm9vbCByZXBlYXRpbmcpCisgICAgc3RhdGljIFJlZlB0cjxTY2hlZHVsZWRUYXNrPiBjcmVh
dGUoTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBkb3VibGUgaW50ZXJ2
YWwsIGJvb2wgcmVwZWF0aW5nKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
Y2hlZHVsZWRUYXNrKFdURk1vdmUoZnVuY3Rpb24pLCBpbnRlcnZhbCwgcmVwZWF0aW5nKSk7CiAg
ICAgfQogCi0gICAgU2NoZWR1bGVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24s
IGRvdWJsZSBpbnRlcnZhbCwgYm9vbCByZXBlYXRpbmcpCisgICAgU2NoZWR1bGVkVGFzayhOb25j
b3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIGRvdWJsZSBpbnRlcnZhbCwgYm9v
bCByZXBlYXRpbmcpCiAgICAgICAgIDogbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKICAg
ICAgICAgLCBtX2ZpcmVJbnRlcnZhbChzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihpbnRlcnZh
bCkpKQogICAgICAgICAsIG1faXNSZXBlYXRpbmcocmVwZWF0aW5nKQpAQCAtOTAsNyArOTAsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gbV9m
dW5jdGlvbjsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVuY3Rpb247CiAg
ICAgQ29uZGl0aW9uOjpDbG9jazo6dGltZV9wb2ludCBtX3NjaGVkdWxlZFRpbWVQb2ludDsKICAg
ICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fZmlyZUludGVydmFsOwogICAgIHN0ZDo6YXRv
bWljPGJvb2w+IG1faXNBY3RpdmUgeyB0cnVlIH07CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBS
dW5Mb29wOjpzY2hlZHVsZUFuZFdha2VVcChSZWZQdHI8VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNr
PiB0YXNrKQogICAgIHdha2VVcChsb2NrZXIpOwogfQogCi12b2lkIFJ1bkxvb3A6OmRpc3BhdGNo
QWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGRlbGF5LCBOb25jb3B5YWJsZUZ1bmN0aW9u
JiYgZnVuY3Rpb24pCit2b2lkIFJ1bkxvb3A6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5h
bm9zZWNvbmRzIGRlbGF5LCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24p
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb29wTG9jayk7CiAgICAgYm9vbCByZXBlYXRp
bmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVl
R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
CmluZGV4IGE2MThkNGQxYWJiNjAxODAyOTI1Y2Y4ZDZkNWM1MTAzNDRmMTc1MDIuLjdmODBlNjlj
YTVjN2MzMDZmOTA3N2M0ZjljODUwM2VjYzZlNTQ1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIFdvcmtRdWV1
ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICB9CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIFJl
ZlB0cjxXb3JrUXVldWU+IHByb3RlY3QodGhpcyk7CiAgICAgbV9ydW5Mb29wLT5kaXNwYXRjaChb
cHJvdGVjdCwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpAQCAtODksNyArODksNyBA
QCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9u
KQogICAgIH0pOwogfQogCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9u
bzo6bmFub3NlY29uZHMgZGVsYXksIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3Zv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkZWxh
eSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIFJlZlB0
cjxXb3JrUXVldWU+IHByb3RlY3QodGhpcyk7CiAgICAgbV9ydW5Mb29wLT5kaXNwYXRjaEFmdGVy
KGRlbGF5LCBbcHJvdGVjdCwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL1J1bkxvb3BHTGliLmNwcAppbmRleCAwYzUwZmYyNzY5M2E3N2E2NzkzOGMyZGQ4NGY3
OGI2MTk4YjZiY2YwLi44OWI3ZjcwNzBjOWQ0MjhlN2I4ZmI4MTdhN2Y5ZTdiM2FkZGY5ZjE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQg
UnVuTG9vcDo6d2FrZVVwKCkKIGNsYXNzIERpc3BhdGNoQWZ0ZXJDb250ZXh0IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEaXNwYXRjaEFmdGVyQ29udGV4dChO
b25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCisgICAgRGlzcGF0Y2hBZnRlckNvbnRleHQo
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogICAgICAgICA6IG1fZnVu
Y3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCiAgICAgewogICAgIH0KQEAgLTEzNSwxMCArMTM1LDEw
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTm9uY29weWFibGVGdW5jdGlvbiBt
X2Z1bmN0aW9uOworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsK
IH07CiAKLXZvaWQgUnVuTG9vcDo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHMgZHVyYXRpb24sIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgUnVuTG9v
cDo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNv
cHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBHUmVmUHRyPEdTb3Vy
Y2U+IHNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGQ6OmNocm9ubzo6
ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihkdXJhdGlvbikuY291bnQo
KSkpOwogICAgIGdfc291cmNlX3NldF9uYW1lKHNvdXJjZS5nZXQoKSwgIltXZWJLaXRdIFJ1bkxv
b3AgZGlzcGF0Y2hBZnRlciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL1dvcmtJ
dGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5jcHAKaW5kZXggNjA1
Zjc3Y2MwYzNlNjVmMzEyODhiMjQyYmU2NzZjYWM5NmJjZDk2MC4uODY0MjMyMmI5ZTUxNmE3ZTYx
M2MzYzA0YTI0ZjZhMzA3NTQzNGY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL1dv
cmtJdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya0l0ZW1XaW4uY3BwCkBA
IC0zMiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLVdvcmtJdGVtV2luOjpXb3Jr
SXRlbVdpbihOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUp
CitXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4oTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYm
IGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQogICAgIDogbV9mdW5jdGlvbihXVEZNb3ZlKGZ1
bmN0aW9uKSkKICAgICAsIG1fcXVldWUocXVldWUpCiB7CiB9CiAKLVJlZlB0cjxXb3JrSXRlbVdp
bj4gV29ya0l0ZW1XaW46OmNyZWF0ZShOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIFdv
cmtRdWV1ZSogcXVldWUpCitSZWZQdHI8V29ya0l0ZW1XaW4+IFdvcmtJdGVtV2luOjpjcmVhdGUo
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVl
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya0l0ZW1XaW4oV1RGTW92ZShmdW5jdGlv
biksIHF1ZXVlKSk7CiB9CkBAIC00Nyw3ICs0Nyw3IEBAIFdvcmtJdGVtV2luOjp+V29ya0l0ZW1X
aW4oKQogewogfQogCi1IYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRs
ZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorSGFu
ZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVu
Y3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKICAgICA6IFdvcmtJ
dGVtV2luKFdURk1vdmUoZnVuY3Rpb24pLCBxdWV1ZSkKICAgICAsIG1faGFuZGxlKGhhbmRsZSkK
ICAgICAsIG1fd2FpdEhhbmRsZSgwKQpAQCAtNTUsNyArNTUsNyBAQCBIYW5kbGVXb3JrSXRlbTo6
SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRsZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0
aW9uLCBXbwogICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUpOwogfQogCi1SZWZQdHI8SGFu
ZGxlV29ya0l0ZW0+IEhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRM
RSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1
ZSkKK1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4gSGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRp
bmdIYW5kbGUoSEFORExFIGhhbmRsZSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1
bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFu
ZGxlV29ya0l0ZW0oaGFuZGxlLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgcXVldWUpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5oIGIvU291cmNlL1dURi93dGYv
d2luL1dvcmtJdGVtV2luLmgKaW5kZXggYTYwOTU0N2Y5YmRmN2RjZGVkMDQ5NGFjZTYwYTRkYjli
Yjg1OGVhYy4uYmFhNzdkOTdhNzQ5YTMyZTIyMmQxYjE5OTM4Nzc3NDQzNTIxM2FmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvd2luL1dvcmtJdGVtV2luLmgKKysrIGIvU291cmNlL1dURi93
dGYvd2luL1dvcmtJdGVtV2luLmgKQEAgLTM5LDMwICszOSwzMCBAQCBjbGFzcyBXb3JrUXVldWU7
CiAKIGNsYXNzIFdvcmtJdGVtV2luIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdvcmtJ
dGVtV2luPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXb3JrSXRlbVdpbj4gY3JlYXRl
KE5vbmNvcHlhYmxlRnVuY3Rpb24mJiwgV29ya1F1ZXVlKik7CisgICAgc3RhdGljIFJlZlB0cjxX
b3JrSXRlbVdpbj4gY3JlYXRlKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiwgV29ya1F1
ZXVlKik7CiAgICAgdmlydHVhbCB+V29ya0l0ZW1XaW4oKTsKIAotICAgIE5vbmNvcHlhYmxlRnVu
Y3Rpb24mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgIE5vbmNvcHlhYmxl
RnVuY3Rpb248dm9pZCAoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQogICAg
IFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlLmdldCgpOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBXb3JrSXRlbVdpbihOb25jb3B5YWJsZUZ1bmN0aW9uJiYsIFdvcmtRdWV1
ZSopOworICAgIFdvcmtJdGVtV2luKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiwgV29y
a1F1ZXVlKik7CiAKIHByaXZhdGU6Ci0gICAgTm9uY29weWFibGVGdW5jdGlvbiBtX2Z1bmN0aW9u
OworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsKICAgICBSZWZQ
dHI8V29ya1F1ZXVlPiBtX3F1ZXVlOwogfTsKIAogY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJs
aWMgV29ya0l0ZW1XaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYs
IFdvcmtRdWV1ZSopOworICAgIHN0YXRpYyBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5
QWRvcHRpbmdIYW5kbGUoSEFORExFLCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYsIFdv
cmtRdWV1ZSopOwogICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CiAKICAgICB2b2lkIHNl
dFdhaXRIYW5kbGUoSEFORExFIHdhaXRIYW5kbGUpIHsgbV93YWl0SGFuZGxlID0gd2FpdEhhbmRs
ZTsgfQogICAgIEhBTkRMRSB3YWl0SGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV93YWl0SGFuZGxl
OyB9CiAKIHByaXZhdGU6Ci0gICAgSGFuZGxlV29ya0l0ZW0oSEFORExFLCBOb25jb3B5YWJsZUZ1
bmN0aW9uJiYsIFdvcmtRdWV1ZSopOworICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgTm9uY29w
eWFibGVGdW5jdGlvbjx2b2lkICgpPiYmLCBXb3JrUXVldWUqKTsKIAogICAgIEhBTkRMRSBtX2hh
bmRsZTsKICAgICBIQU5ETEUgbV93YWl0SGFuZGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2lu
LmNwcAppbmRleCBlNzhmOTM0Y2M1ODkxNWViMWJhNjJhYWUxOTg2NzM0NjFkZWE1ODdmLi5lNDUy
OTgxNDljYTQ3YmFiOWRlNjBkMDljNmVkMDJkYjRkZjk2OTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29y
a1F1ZXVlV2luLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9y
bUludmFsaWRhdGUoKQogICAgIDo6RGVsZXRlVGltZXJRdWV1ZUV4KG1fdGltZXJRdWV1ZSwgMCk7
CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVu
Y3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lk
ICgpPiYmIGZ1bmN0aW9uKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVl
dWVMb2NrKTsKICAgICByZWYoKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBzdHJ1Y3QgVGltZXJDb250
ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRpbWVyQ29udGV4dD4gewogICAgIHN0
YXRpYyBSZWZQdHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
VGltZXJDb250ZXh0KTsgfQogCiAgICAgV29ya1F1ZXVlKiBxdWV1ZTsKLSAgICBOb25jb3B5YWJs
ZUZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gZnVu
Y3Rpb247CiAgICAgTXV0ZXggdGltZXJNdXRleDsKICAgICBIQU5ETEUgdGltZXI7CiAKQEAgLTE4
MCw3ICsxODAsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0
LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCiAgICAgfQogfQogCi12b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNvcHlh
YmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0
ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lk
ICgpPiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOwogICAgIHJlZigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDM4NWMxNGYzNmFjMjRj
MmI4MWI5MjAyMTJjOGEyNjM4YTFiMjI2ZjIuLmYxZWI2NGVmZTUxYjlhYmZjZDM0YTlhMzhjM2U1
OWE3MmMzYjJmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTk1
LDcgKzk1LDcgQEAgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24oUGVlckNvbm5lY3Rpb25CYWNrZW5kQ2wKICAgICBtX21lZGlhRW5kcG9pbnQt
PmdlbmVyYXRlRHRsc0luZm8oKTsKIH0KIAotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmIHRhc2spCit2b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYg
dGFzaykKIHsKICAgICBpZiAobV9kdGxzRmluZ2VycHJpbnQuaXNOdWxsKCkpIHsKICAgICAgICAg
Ly8gT25seSBvbmUgdGFzayBuZWVkcyB0byBiZSBkZWZlcnJlZCBzaW5jZSBpdCB3aWxsIGhvbGQg
b2ZmIGFueSBvdGhlcnMgdW50aWwgY29tcGxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uLmgKaW5kZXggODZiMjQ3NzMwYTNkMTcyYzA0NTE2ZWI4ZmNmZWQ2Mzk2MjVlYWRiOC4uOTY3
ZDBjOWEyNTE2NDY4ZTcyYjRkOTRiNWU0YTllODYyZTE5MDRjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
TmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRlIHsgbm90SW1wbGVtZW50ZWQoKTsgfTsK
IAogcHJpdmF0ZToKLSAgICB2b2lkIHJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAg
ICB2b2lkIHJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAgICB2b2lk
IHN0YXJ0UnVubmluZ1Rhc2tzKCk7CiAKICAgICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhSVENPZmZl
ck9wdGlvbnMmLCBQZWVyQ29ubmVjdGlvbjo6U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYpOwpA
QCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIFBlZXJDb25uZWN0aW9uQmFja2VuZENsaWVu
dCogbV9jbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IG1fbWVkaWFF
bmRwb2ludDsKIAotICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gbV9pbml0aWFsRGVmZXJyZWRUYXNr
OworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9pbml0aWFsRGVmZXJyZWRUYXNr
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNEUFByb2Nlc3Nvcj4gbV9zZHBQcm9jZXNzb3I7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAppbmRleCBmNGI3MGNm
MDUxZGE4Y2ZjMGY1Y2NlYjA2YjRhMmMzYjY0NzNiMjkzLi40YWU2YzgwY2UzNGU3OTRlNWVjNjJk
NzgyYzU4MTI4ZjE3NmQyZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uY3BwCkBAIC02NCwxMiArNjQsMTIgQEAgaW5saW5lIEFzeW5jRmlsZVN0cmVhbTo6SW50
ZXJuYWxzOjpJbnRlcm5hbHMoRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KQogI2VuZGlmCiB9CiAK
LXN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQoZnVuY3Rpb24pOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lc3NhZ2VRdWV1
ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPj4gcXVldWU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE1lc3NhZ2VRdWV1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+Pj4gcXVldWU7CiAKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgY3JlYXRlRmlsZVRocmVhZE9uY2U7CiAgICAgc3RkOjpj
YWxsX29uY2UoY3JlYXRlRmlsZVRocmVhZE9uY2UsIFtdIHsKQEAgLTkwLDcgKzkwLDcgQEAgc3Rh
dGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24p
CiAgICAgICAgIH0pOwogICAgIH0pOwogCi0gICAgcXVldWUuZ2V0KCkuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8Tm9uY29weWFibGVGdW5jdGlvbj4oV1RGTW92ZShmdW5jdGlvbikpKTsKKyAgICBx
dWV1ZS5nZXQoKS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiBBc3luY0ZpbGVTdHJlYW06OkFzeW5j
RmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCkBAIC0xMTQsNyArMTE0LDcgQEAg
QXN5bmNGaWxlU3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKCkKICAgICB9KTsKIH0KIAotdm9pZCBB
c3luY0ZpbGVTdHJlYW06OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQo
RmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+JiYgb3BlcmF0aW9uKQordm9pZCBBc3lu
Y0ZpbGVTdHJlYW06OnBlcmZvcm0oTm9uY29weWFibGVGdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZv
aWQoRmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+JiYgb3BlcmF0aW9uKQogewogICAg
IGF1dG8mIGludGVybmFscyA9ICptX2ludGVybmFsczsKICAgICBjYWxsT25GaWxlVGhyZWFkKFsm
aW50ZXJuYWxzLCBvcGVyYXRpb24gPSBXVEZNb3ZlKG9wZXJhdGlvbildIHsKQEAgLTEzNCwxMSAr
MTM0LDEwIEBAIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3Rk
OjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmCiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFt
OjpnZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSkKIHsKLSAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkUGF0aChwYXRoKTsKICAgICAvLyBG
SVhNRTogRXhwbGljaXQgcmV0dXJuIHR5cGUgaGVyZSBhbmQgaW4gYWxsIHRoZSBvdGhlciBjYXNl
cyBsaWtlIHRoaXMgYmVsb3cgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGRlZmljaWVuY3kKICAgICAv
LyBpbiB0aGUgV2luZG93cyBjb21waWxlciBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuIENv
dWxkIHJlbW92ZSBpdCBpZiB0aGF0IGlzIHJlc29sdmVkLgotICAgIHBlcmZvcm0oW2NhcHR1cmVk
UGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0
ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKLSAgICAgICAgbG9uZyBsb25n
IHNpemUgPSBzdHJlYW0uZ2V0U2l6ZShjYXB0dXJlZFBhdGguc3RyaW5nKCksIGV4cGVjdGVkTW9k
aWZpY2F0aW9uVGltZSk7CisgICAgcGVyZm9ybShbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCks
IGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZV0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGxvbmcgbG9uZyBzaXpl
ID0gc3RyZWFtLmdldFNpemUocGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKICAgICAg
ICAgcmV0dXJuIFtzaXplXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKICAgICAgICAgICAg
IGNsaWVudC5kaWRHZXRTaXplKHNpemUpOwogICAgICAgICB9OwpAQCAtMTQ3LDEwICsxNDYsOSBA
QCB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Z2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJs
ZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZv
clJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoKQogewotICAgIFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgpOwogICAgIC8vIEZJ
WE1FOiBFeHBsaWNpdCByZXR1cm4gdHlwZSBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZp
Y2llbmN5IGluIHRoZSBXaW5kb3dzIGNvbXBpbGVyIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGlu
Zy4KLSAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGgsIG9mZnNldCwgbGVuZ3RoXShGaWxlU3RyZWFt
JiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKLSAg
ICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFtLm9wZW5Gb3JSZWFkKGNhcHR1cmVkUGF0aC5zdHJp
bmcoKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHBlcmZvcm0oW3BhdGggPSBwYXRoLmlzb2xhdGVk
Q29weSgpLCBvZmZzZXQsIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0
aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0
cmVhbS5vcGVuRm9yUmVhZChwYXRoLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBb
c3VjY2Vzc10oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CiAgICAgICAgICAgICBjbGllbnQu
ZGlkT3BlbihzdWNjZXNzKTsKICAgICAgICAgfTsKQEAgLTE1OSw5ICsxNTcsOCBAQCB2b2lkIEFz
eW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcg
b2Zmc2V0LCBsb25nIGxvbgogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkUGF0aChwYXRo
KTsKLSAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkgLT4gc3Rk
OjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4gewotICAgICAgICBib29sIHN1Y2Nl
c3MgPSBzdHJlYW0ub3BlbkZvcldyaXRlKGNhcHR1cmVkUGF0aC5zdHJpbmcoKSk7CisgICAgcGVy
Zm9ybShbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCldKEZpbGVTdHJlYW0mIHN0cmVhbSkgLT4g
c3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4geworICAgICAgICBib29sIHN1
Y2Nlc3MgPSBzdHJlYW0ub3BlbkZvcldyaXRlKHBhdGgpOwogICAgICAgICByZXR1cm4gW3N1Y2Nl
c3NdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgewogICAgICAgICAgICAgY2xpZW50LmRpZE9w
ZW4oc3VjY2Vzcyk7CiAgICAgICAgIH07CkBAIC0xODgsOSArMTg1LDggQEAgdm9pZCBBc3luY0Zp
bGVTdHJlYW06OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogCiB2b2lkIEFzeW5jRmls
ZVN0cmVhbTo6d3JpdGUoY29uc3QgVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGlu
dCBsZW5ndGgpCiB7Ci0gICAgVVJMQ2FwdHVyZSBjYXB0dXJlZFVSTChibG9iVVJMKTsKLSAgICBw
ZXJmb3JtKFtjYXB0dXJlZFVSTCwgcG9zaXRpb24sIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFt
KSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7Ci0gICAgICAgIGlu
dCBieXRlc1dyaXR0ZW4gPSBzdHJlYW0ud3JpdGUoY2FwdHVyZWRVUkwudXJsKCksIHBvc2l0aW9u
LCBsZW5ndGgpOworICAgIHBlcmZvcm0oW2Jsb2JVUkwgPSBibG9iVVJMLmlzb2xhdGVkQ29weSgp
LCBwb3NpdGlvbiwgbGVuZ3RoXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248
dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHN0
cmVhbS53cml0ZShibG9iVVJMLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIFti
eXRlc1dyaXR0ZW5dKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgewogICAgICAgICAgICAgY2xp
ZW50LmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7CiAgICAgICAgIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAppbmRleCBmZjQ4MWE0NWZiODI4Y2IxYjM2MmJmNzY5MDBj
YTAxZThhMDVlZDQ2Li4xYmEzYTljYzBmNmM2MjdhNTc5NzA4ZTM0Nzg3NDY4NDliZjdjNmIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKQEAgLTM0LDYgKzM0LDcg
QEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uQ29weWFibGVGdW5jdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTU2LDcgKzU3LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgc3RhcnQo
KTsKLSAgICB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQoRmls
ZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+JiYpOworICAgIHZvaWQgcGVyZm9ybShOb25j
b3B5YWJsZUZ1bmN0aW9uPHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+KEZp
bGVTdHJlYW0mKT4mJik7CiAKICAgICBzdHJ1Y3QgSW50ZXJuYWxzOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbHM+IG1faW50ZXJuYWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKaW5kZXggMzVhMTdiOGU3ODMyOTBkZmFhNmM2
ZDgzZjNkYjc4MTIyNDM3NGQ3ZC4uNTc2MDc4M2RiOGNlMDAzNWM4ZWU0MDc4YTU0NWY3MDVmZjYx
MmRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuY3BwCkBAIC00NSw3ICs0NSw3IEBAIGJvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJl
bnRUaHJlYWQoKQogICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQo
KSA9PSB0aHJlYWRJZGVudGlmaWVyOwogfQogCi12b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBTY3JvbGxpbmdUaHJlYWQ6
OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBhdXRvJiBzY3JvbGxpbmdUaHJlYWQgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpOwog
ICAgIHNjcm9sbGluZ1RocmVhZC5jcmVhdGVUaHJlYWRJZk5lZWRlZCgpOwpAQCAtNTgsNyArNTgs
NyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYm
IGZ1bmN0aW9uKQogICAgIHNjcm9sbGluZ1RocmVhZC53YWtlVXBSdW5Mb29wKCk7CiB9CiAKLXZv
aWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaEJhcnJpZXIoTm9uY29weWFibGVGdW5jdGlvbiYm
IGZ1bmN0aW9uKQordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmllcihOb25jb3B5
YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgZGlzcGF0Y2goW2Z1bmN0
aW9uID0gV1RGTW92ZShmdW5jdGlvbildKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoV1RGTW92ZShmdW5jdGlvbikpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgU2Nyb2xs
aW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21TY3JvbGxpbmdUaHJlYWQoKQogewogICAg
IEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7CiAKLSAgICBWZWN0b3I8Tm9uY29weWFibGVGdW5j
dGlvbj4gZnVuY3Rpb25zOworICAgIFZlY3RvcjxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
PiBmdW5jdGlvbnM7CiAgICAgCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2Z1bmN0aW9uc011dGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXggYWFmNTc3YmRkOTg4M2Q0MzAyMDQ3MjI2YjVlODIx
MGJmODZiNTVhNi4uMDM3Zjk1YjkwYjYzYTlkZWIxMzFjMzgxYmQ5ZDMyNDk5N2I1NDFlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKQEAg
LTQ4LDExICs0OCwxMSBAQCBjbGFzcyBTY3JvbGxpbmdUaHJlYWQgewogCiBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgaXNDdXJyZW50VGhyZWFkKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYpOwog
CiAgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4gZnVuY3Rpb24gb24gdGhlIG1haW4gdGhy
ZWFkIG9uY2UgYWxsIHBlbmRpbmcgZnVuY3Rpb25zCiAgICAgLy8gb24gdGhlIHNjcm9sbGluZyB0
aHJlYWQgaGF2ZSBmaW5pc2hlZCBleGVjdXRpbmcuIFVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiBw
dXJwb3Nlcy4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaEJhcnJpZXIo
Tm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBk
aXNwYXRjaEJhcnJpZXIoTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsaW5nVGhyZWFkPjsKQEAgLTgwLDcg
KzgwLDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKIAog
ICAgIExvY2sgbV9mdW5jdGlvbnNNdXRleDsKLSAgICBWZWN0b3I8Tm9uY29weWFibGVGdW5jdGlv
bj4gbV9mdW5jdGlvbnM7CisgICAgVmVjdG9yPE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4+
IG1fZnVuY3Rpb25zOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCB1c2UgV2ViQ29yZTo6UnVuTG9vcCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApp
bmRleCBkYWVlMmVmZmViYWZiZmMzOWM2OGY3ZjFkY2ZhMGFhZmY0OWEyYmRmLi44NjlhNjhlOTg4
NmIyZDBiZjU5OGJlMzBhOTJkZGY2NDVkZTkzNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
aApAQCAtMTQzLDcgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsK
ICAgICB2b2lkIHJlbmRlcmluZ01vZGVDaGFuZ2VkKCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlRGVm
ZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgdm9pZCBzY2hlZHVsZURlZmVy
cmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYpOwogCiAgICAgZW51bSBEaXNw
bGF5TW9kZSB7CiAgICAgICAgIE5vbmUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KaW5kZXgg
N2E3OTY0MmExYzAxM2E0YjRiNTg4MDBjYWMyMGRkNzI4YTIxYzRiNS4uODRjN2Q2MjMyNGY2NDcx
MWUxNjVlNTI0M2RmODhmMjFhNTBlZDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpA
QCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTCiAgICAgbV9wbGF5ZXIt
Pm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OnNjaGVkdWxlRGVmZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24m
JiBmdW5jdGlvbikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpz
Y2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFr
VGhpcyA9IGNyZWF0ZVdlYWtQdHIoKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1Qcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtUHJpdmF0ZS5jcHAKaW5kZXggNDJkMjQ2NmMyYmY2MzFmMGVmZmFjY2Y5NGY0MDAyODEw
YTdkMDI2Yi4uZDQ5ZDE1MTIxMzk2Mzg4NjQ5ZGUxNTdjMzA0NzE3NDkzZWJmY2NiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2
YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVByaXZhdGUuY3BwCkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBNZWRpYVN0cmVhbVByaXZh
dGU6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKQogICAgIH0pOwogfQogCi12
b2lkIE1lZGlhU3RyZWFtUHJpdmF0ZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVG
dW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBNZWRpYVN0cmVhbVByaXZhdGU6OnNjaGVkdWxlRGVm
ZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBBU1NFUlQoZnVuY3Rpb24pOwogICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gY3Jl
YXRlV2Vha1B0cigpLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pXSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0
ZS5oCmluZGV4IDhjZjYwNGM5MDY1NmMwZmUwYWJiMDdiOTE1NGFkMTFhMWQ5YzYyZTUuLjkyMzA0
ZWZiZDYzNDlhY2YxOTY5NzU0ZmY4MjhhMDZmYTQ0YzBkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oCkBA
IC0xMTIsNyArMTEyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoYXJhY3RlcmlzdGljc0NoYW5n
ZWQoKTsKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVZpZGVvVHJhY2soKTsKIAotICAgIHZvaWQgc2No
ZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICB2b2lkIHNjaGVk
dWxlRGVmZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7CiAKICAgICBX
ZWFrUHRyRmFjdG9yeTxNZWRpYVN0cmVhbVByaXZhdGU+IG1fd2Vha1B0ckZhY3Rvcnk7CiAgICAg
VmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
CmluZGV4IDIxYWNhZjAyZDY2NDk1MDRhNzM1MTFiMjFjODk3N2NjNjQ5OWY0MWUuLmY0NzRhZWI5
YjdjNzNjYmM0YzgzNGMyZjFlYzkyYjU4OWMxNDVjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNv
dXJjZS5oCkBAIC04Niw3ICs4Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFZpZGVvU2Ft
cGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0Kik7CiAgICAgdm9pZCBz
ZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCopOwog
Ci0gICAgdm9pZCBzY2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uJiYpOwor
ICAgIHZvaWQgc2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgp
PiYmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldHVwU2Vzc2lvbigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291
cmNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFD
YXB0dXJlU291cmNlLm1tCmluZGV4IDc5MTVhODQyZWE4M2RkMzU3ZDJiNDI4OGE1NzliZmMxMzgw
Yjc2Y2MuLjc2YWZkOWJiZTVhMDdlOWE3NThhYTQ1YjhlN2M3ZTY1MWNiY2IzM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVy
ZVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QVZNZWRpYUNhcHR1cmVTb3VyY2UubW0KQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIEFWTWVkaWFD
YXB0dXJlU291cmNlOjpzZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZUF1ZGlv
RGF0YU91dHB1dAogICAgIFthdWRpb091dHB1dCBzZXRTYW1wbGVCdWZmZXJEZWxlZ2F0ZTptX29i
amNPYnNlcnZlci5nZXQoKSBxdWV1ZTpnbG9iYUF1ZGlvQ2FwdHVyZVNlcmlhbFF1ZXVlKCldOwog
fQogCi12b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayhOb25j
b3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpz
Y2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFr
VGhpcyA9IGNyZWF0ZVdlYWtQdHIoKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAppbmRleCAzZTFm
MWM0MDJhZGJiZTJmZWJhODg1NThjYjVmMDRjZTQ4MWI1MGI2Li5lMWE0YTE1ZGRkN2YzNDcxNjFl
NDQ0MzM3MWZjNDdiNzIyNjhmOTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
U3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVN5bmNNYW5hZ2VyLmNwcApAQCAtNjMsNyArNjMsNyBAQCBTdHJpbmcgU3RvcmFnZVN5bmNNYW5h
Z2VyOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmll
cgogICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBkYXRhYmFzZUlk
ZW50aWZpZXIgKyAiLmxvY2Fsc3RvcmFnZSIpOwogfQogCi12b2lkIFN0b3JhZ2VTeW5jTWFuYWdl
cjo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBTdG9yYWdl
U3luY01hbmFnZXI6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5j
dGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3RocmVh
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKaW5kZXggZWRk
NzE3ZGU1YmY3MjcwZDI3NzliYTBlOTI1ZGZjNTRjNWZmOGE4ZS4uNzVhNDg2YjYyMGMyYmIzMTJh
ZThjZGY5ZDUwNjRiNDAyNmJhMWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VTeW5jTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
U3luY01hbmFnZXIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxT
dG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIH5TdG9y
YWdlU3luY01hbmFnZXIoKTsKIAotICAgIHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlv
biYmKTsKKyAgICB2b2lkIGRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7
CiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuY3BwCmluZGV4IDYyODQwZDJlNzc1MjcxNDA0MmUyMDU4OTlmMmRmNjhhYWNkNmNj
ZDguLjI5NjZlMDQwNmUxNzA0ZjIyMGM1MWMyNmRlNzhkMDgyMTQyNmM2MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKQEAgLTc0LDExICs3NCwxMSBAQCB2b2lkIFN0
b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnQoKQogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdl
VGhyZWFkOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFN0
b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5j
dGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9xdWV1
ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+KFdURk1vdmUoZnVuY3Rpb24pKSk7CisgICAgbV9x
dWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0
ZSgpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKICAg
ICBpZiAoIW1fdGhyZWFkSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcXVldWUuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8Tm9uY29weWFibGVGdW5jdGlvbj4oW3RoaXNdIHsKKyAgICBtX3F1
ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4+
KFt0aGlzXSB7CiAgICAgICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7CiAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuaAppbmRleCBkY2U1Y2NmY2QzY2E2MmIxYzA4NzZmYzM0ZDkyZGY2ZjAyMGRmZjc1
Li40NzUyZDViMTllMWIwNmNhYTllN2VlZDg4NDRiNDlkNWYzZmNiZmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGJv
b2wgc3RhcnQoKTsKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCi0gICAgdm9pZCBkaXNwYXRjaChO
b25jb3B5YWJsZUZ1bmN0aW9uJiYpOworICAgIHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5j
dGlvbjx2b2lkICgpPiYmKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUluQWxsVGhyZWFkcygpOwogCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQ7Ci0gICAgTWVzc2FnZVF1ZXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+IG1fcXVldWU7CisgICAg
TWVzc2FnZVF1ZXVlPE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4+IG1fcXVldWU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3Bw
CmluZGV4IDJjM2QwMzRjMmNlNTdkNTliMmQ2YjlhNmQ5OGIzYTFkMWMzMjYzMGMuLjhjOTFjOWVj
Njc1ODgyMmM2YjMwZjVmYjQwYjgyYzFjNjQ4ZDRlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hh
bm5lbFNvdXAuY3BwCkBAIC02OSw3ICs2OSw3IEBAIFJlZjxJT0NoYW5uZWw+IElPQ2hhbm5lbDo6
b3Blbihjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBJT0NoYW5uZWw6OlR5cGUgdHlwZSkKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJT0NoYW5uZWwoZmlsZVBhdGgsIHR5cGUpKTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHJ1blRhc2tJblF1ZXVlKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiB0YXNr
LCBXb3JrUXVldWUqIHF1ZXVlKQorc3RhdGljIGlubGluZSB2b2lkIHJ1blRhc2tJblF1ZXVlKE5v
bmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiB0YXNrLCBXb3JrUXVldWUqIHF1ZXVlKQogewog
ICAgIGlmIChxdWV1ZSkgewogICAgICAgICBxdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZSh0YXNrKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280052</attachid>
            <date>2016-05-28 17:27:16 -0700</date>
            <delta_ts>2016-05-28 21:18:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158185-20160528172828.patch</filename>
            <type>text/plain</type>
            <size>44917</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY5N2NiNWQxNjY5ZDViZGI3YWJjYmJk
M2I2MWU1YzhiZjAyZjc0M2MuLmNhNTU3ODVkNzgxYjA4N2IzMDdhMjUzNGE0NTdjMTBjZWQwMGJi
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTYtMDUtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xh
c3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRlbXBsYXRpemUgTm9uY29weWFibGVGdW5jdGlvbiBjbGFz
cyBzaW1pbGFybHkgdG8gc3RkOjpmdW5jdGlvbiwgc28KKyAgICAgICAgdGhhdCBpdCBjYW4gYmUg
dXNlZCBhcyBhIHN0ZDo6ZnVuY3Rpb24gcmVwbGFjZW1lbnQgaW4gbW9yZSBwbGFjZXMuCisKKyAg
ICAgICAgUHJldmlvdXNseSwgTm9uY29weWFibGVGdW5jdGlvbiBjb3VsZCBvbmx5IHN1cHBvcnQg
InZvaWQoKSIgbGFtYmRhcy4KKworICAgICAgICAqIHd0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaDoK
KyAgICAgICAgKiB3dGYvTWFpblRocmVhZC5jcHA6CisgICAgICAgIChXVEY6OmZ1bmN0aW9uUXVl
dWUpOgorICAgICAgICAoV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL01haW5UaHJlYWQu
aDoKKyAgICAgICAgKiB3dGYvTm9uY29weWFibGVGdW5jdGlvbi5oOgorICAgICAgICAqIHd0Zi9S
dW5Mb29wLmNwcDoKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6cGVyZm9ybVdvcmspOgorICAgICAg
ICAoV1RGOjpSdW5Mb29wOjpkaXNwYXRjaCk6CisgICAgICAgICogd3RmL1J1bkxvb3AuaDoKKyAg
ICAgICAgKiB3dGYvV29ya1F1ZXVlLmg6CisgICAgICAgICogd3RmL2NvY29hL1dvcmtRdWV1ZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcik6CisgICAgICAgICogd3RmL2VmbC9EaXNwYXRj
aFF1ZXVlV29ya0l0ZW1FZmwuaDoKKyAgICAgICAgKFdvcmtJdGVtOjpXb3JrSXRlbSk6CisgICAg
ICAgIChUaW1lcldvcmtJdGVtOjpjcmVhdGUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6VGlt
ZXJXb3JrSXRlbSk6CisgICAgICAgICogd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpk
aXNwYXRjaEFmdGVyKToKKyAgICAgICAgKiB3dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHA6
CisgICAgICAgIChXVEY6OlJ1bkxvb3A6OlRpbWVyQmFzZTo6U2NoZWR1bGVkVGFzazo6Y3JlYXRl
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNrOjpTY2hl
ZHVsZWRUYXNrKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6ZGlzcGF0Y2hBZnRlcik6CisgICAg
ICAgICogd3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHA6CisgICAgICAgIChXb3JrUXVl
dWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcik6CisgICAg
ICAgICogd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEFm
dGVyQ29udGV4dDo6RGlzcGF0Y2hBZnRlckNvbnRleHQpOgorICAgICAgICAoV1RGOjpSdW5Mb29w
OjpkaXNwYXRjaEFmdGVyKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtJdGVtV2luLmNwcDoKKyAg
ICAgICAgKFdURjo6V29ya0l0ZW1XaW46OldvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29y
a0l0ZW1XaW46OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OkhhbmRsZVdvcmtJdGVtOjpIYW5kbGVX
b3JrSXRlbSk6CisgICAgICAgIChXVEY6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5n
SGFuZGxlKToKKyAgICAgICAgKiB3dGYvd2luL1dvcmtJdGVtV2luLmg6CisgICAgICAgIChXVEY6
OldvcmtJdGVtV2luOjpmdW5jdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6
V29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKToKKwogMjAxNi0wNS0yOCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBmb3IgcHJvamVjdHMgdGhhdCBp
bmNsdWRlIE1haW5UaHJlYWQuaCB3aXRob3V0IGluY2x1ZGluZyBGYXN0TWFsbG9jLmguCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggNDI5ZTRiOGEyZTU4ZDEzMzE1MzkxZTdlYzNmNmRhMjhkZDU2NmQ5NC4uNjUyZWY4
NDJhNTk5Mzk2N2Y3ODAzNzY0Zjg3OWRlZjlmZjMzNTNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQxIEBACisyMDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAg
ICAgICAgVGVtcGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9uIGNsYXNzIHNpbWlsYXJseSB0byBz
dGQ6OmZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTgxODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xhc3Mgc2ltaWxhcmx5IHRvIHN0
ZDo6ZnVuY3Rpb24sIHNvCisgICAgICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGQ6OmZ1
bmN0aW9uIHJlcGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIFByZXZpb3VzbHks
IE5vbmNvcHlhYmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBwb3J0ICJ2b2lkKCkiIGxhbWJkYXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb246
OnJ1blRhc2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBl
ZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FsbE9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpB
c3luY0ZpbGVTdHJlYW06OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3Ry
ZWFtOjpnZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZv
clJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3JpdGUp
OgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp3cml0ZSk6CisgICAgICAgICog
ZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVGhyZWFkOjpkaXNw
YXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmll
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoRnVuY3Rpb25z
RnJvbVNjcm9sbGluZ1RocmVhZCk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJl
YW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDOjpzY2hlZHVsZURlZmVycmVkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhU3RyZWFtUHJpdmF0ZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2spOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkFWTWVkaWFDYXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayk6CisKIDIw
MTYtMDUtMjggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXV0
b2NvcnJlY3Rpb24gbWFrZXMgaXQgaGFyZCB0byB0eXBlICJkb2Vzbid0IiBhbmQgdG8gdHlwZSBA
IGluIGVtYWlsIGFkZHJlc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4MzBkZjdkOTI1ZjVmNmUxNjViNDg5MjZk
YTUwMTQ3NTc1N2M5Yzg2Li5kYzhhN2ZmNDkyOTQzNTEyOWFjN2QxZDkwY2ZkOWU4MWM2YjYxODI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9u
IGNsYXNzIHNpbWlsYXJseSB0byBzdGQ6OmZ1bmN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgxODUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1wbGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24g
Y2xhc3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rpb24sIHNvCisgICAgICAgIHRoYXQgaXQgY2Fu
IGJlIHVzZWQgYXMgYSBzdGQ6OmZ1bmN0aW9uIHJlcGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgor
CisgICAgICAgIFByZXZpb3VzbHksIE5vbmNvcHlhYmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBw
b3J0ICJ2b2lkKCkiIGxhbWJkYXMuCisKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFu
YWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlU3luY01hbmFnZXI6OmRpc3BhdGNo
KToKKyAgICAgICAgKiBTdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5oOgorICAgICAgICAqIFN0
b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFk
OjpkaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlVGhyZWFkOjp0ZXJtaW5hdGUp
OgorICAgICAgICAqIFN0b3JhZ2UvU3RvcmFnZVRocmVhZC5oOgorCiAyMDE2LTA1LTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgY2FsbE9uTWFpblRocmVhZCgp
IHNob3VsZCBub3QgY29weSBjYXB0dXJlZCBsYW1iZGEgdmFyaWFibGVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NzE0Y2JjY2NlNGI4OGViMGMzNTJkZGFkZTg4NmIxMWNhMmUzNzIxOC4uODE3ZjE5NWZmNTM5NThj
YWMzZmM3ZmRmMjI1M2U3ZWY3NjI3N2IwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIwIEBACiAy
MDE2LTA1LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVGVt
cGxhdGl6ZSBOb25jb3B5YWJsZUZ1bmN0aW9uIGNsYXNzIHNpbWlsYXJseSB0byBzdGQ6OmZ1bmN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgx
ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1w
bGF0aXplIE5vbmNvcHlhYmxlRnVuY3Rpb24gY2xhc3Mgc2ltaWxhcmx5IHRvIHN0ZDo6ZnVuY3Rp
b24sIHNvCisgICAgICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgYSBzdGQ6OmZ1bmN0aW9uIHJl
cGxhY2VtZW50IGluIG1vcmUgcGxhY2VzLgorCisgICAgICAgIFByZXZpb3VzbHksIE5vbmNvcHlh
YmxlRnVuY3Rpb24gY291bGQgb25seSBzdXBwb3J0ICJ2b2lkKCkiIGxhbWJkYXMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpydW5UYXNrSW5RdWV1ZSk6CisKKzIwMTYt
MDUtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBNb2Rlcm5p
emUgbGFtYmRhIGNhcHR1cmVzIGluIHRoZSBuZXR3b3JrIGRpc2sgY2FjaGUgaW1wbGVtZW50YXRp
b24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODE3
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaCBiL1Nv
dXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCmluZGV4IGMzYTYwZjA4YzUwNTI4ZmRl
ZDY1NjEyMjcxNjc4ZmY3NDQzNzJkYmUuLmI1MmVlY2YxZWJmMjY5YTQwNjA4YmEyYTg2NzVhNzUx
ZDM4MzQ4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlzcGF0Y2hlci5oCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEZ1bmN0aW9uRGlzcGF0Y2hlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxGdW5jdGlvbkRpc3BhdGNoZXI+IHsKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+RnVuY3Rpb25EaXNwYXRjaGVyKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
KE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJikgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIEZ1bmN0aW9uRGlzcGF0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvTWFpblRocmVhZC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNw
cAppbmRleCBkM2YwMjVlZjJjYzk2NjE4Njc2MmVjNTYxODNlN2RlMjcxOGE3ZDg1Li5iZDExZTEw
YzJkNTEyOTMxY2ExNjE3NWMxOTlkMWRlMTcxZDc1NWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmNwcApA
QCAtNDcsOSArNDcsOSBAQCBzdGF0aWMgVGhyZWFkSWRlbnRpZmllciBtYWluVGhyZWFkSWRlbnRp
ZmllcjsKIAogc3RhdGljIFN0YXRpY0xvY2sgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleDsK
IAotc3RhdGljIERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+JiBmdW5jdGlvblF1ZXVlKCkKK3N0
YXRpYyBEZXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+PiYgZnVuY3Rpb25RdWV1ZSgp
CiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+
PiBmdW5jdGlvblF1ZXVlOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEZXF1ZTxOb25jb3B5
YWJsZUZ1bmN0aW9uPHZvaWQgKCk+Pj4gZnVuY3Rpb25RdWV1ZTsKICAgICByZXR1cm4gZnVuY3Rp
b25RdWV1ZTsKIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNG
cm9tTWFpblRocmVhZCgpCiAKICAgICBhdXRvIHN0YXJ0VGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVh
ZHlfY2xvY2s6Om5vdygpOwogCi0gICAgTm9uY29weWFibGVGdW5jdGlvbiBmdW5jdGlvbjsKKyAg
ICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uOwogCiAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgewpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tTWFpblRocmVhZCgpCiAgICAgfQogfQogCi12b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9u
Y29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBjYWxsT25NYWluVGhyZWFkKE5vbmNv
cHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQoZnVuY3Rp
b24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9NYWluVGhyZWFkLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9NYWluVGhyZWFkLmgKaW5kZXggOWY1ODU2ZDBjYWM1M2I0NTIwNzFiMmY2OGIzZWRl
OGYzMzE4MGE2NS4uZjE5ZjU1OTAxOWRiNzk3NTBiNWY4YmRlY2ViNTllZmVmZGRhZTVlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvTWFpblRocmVhZC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L01haW5UaHJlYWQuaApAQCAtNDEsNyArNDEsNyBAQCB0eXBlZGVmIHVpbnQzMl90IFRocmVhZElk
ZW50aWZpZXI7CiAvLyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLVdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9uY29weWFibGVGdW5jdGlvbiYmKTsKK1dU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGNhbGxPbk1haW5UaHJlYWQoTm9uY29weWFibGVGdW5jdGlv
bjx2b2lkICgpPiYmKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2FsbE9uV2ViVGhyZWFkT3JEaXNwYXRjaEFzeW5jT25NYWluVGhyZWFkKHZvaWQgKF5i
bG9jaykoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZUZ1bmN0aW9u
LmggYi9Tb3VyY2UvV1RGL3d0Zi9Ob25jb3B5YWJsZUZ1bmN0aW9uLmgKaW5kZXggMTY4OWRlMmNh
NjBlMjFhNzkzOTNmYTZkYzM2NzYwZDVlOTg1MTQ5MC4uYWI5ZjRkYzA2NDE3NjY0NzFkMmViYzJk
NTNjOWZjZDQ2YWEzYWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTm9uY29weWFibGVG
dW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL05vbmNvcHlhYmxlRnVuY3Rpb24uaApAQCAt
MzAsOCArMzAsMTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLS8vIEZJWE1FOiBXZSBjb3VsZCBt
YWtlIHRoaXMgdGVtcGxhdGVkIHRvIHN1cHBvcnQgb3RoZXIgbGFtYmRhcyB0aGFuIHZvaWQoKSBh
bmQgbWFrZSB0aGlzIG1vcmUgcmV1c2FibGUuCi1jbGFzcyBOb25jb3B5YWJsZUZ1bmN0aW9uIHsK
K3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBOb25jb3B5YWJsZUZ1bmN0aW9uOworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3V0LCB0eXBlbmFtZS4uLiBJbj4KK2NsYXNzIE5vbmNvcHlhYmxlRnVuY3Rp
b248T3V0KEluLi4uKT4gewogcHVibGljOgogICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24oKSA9IGRl
ZmF1bHQ7CiAKQEAgLTQxLDEwICs0MywxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgT3V0IG9wZXJhdG9yKCkoSW4uLi4gaW4pIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAobV9jYWxsYWJsZVdyYXBwZXIpCi0gICAgICAgICAgICBt
X2NhbGxhYmxlV3JhcHBlci0+Y2FsbCgpOworICAgICAgICAgICAgcmV0dXJuIG1fY2FsbGFibGVX
cmFwcGVyLT5jYWxsKHN0ZDo6Zm9yd2FyZDxJbj4oaW4pLi4uKTsKKyAgICAgICAgcmV0dXJuIE91
dCgpOwogICAgIH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhIW1fY2FsbGFibGVXcmFwcGVyOyB9CkBAIC02OCwxMSArNzEsMTEgQEAgcHJpdmF0ZToKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkNhbGxhYmxlV3JhcHBlckJhc2UoKSB7IH0KIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBPdXQgY2Fs
bChJbi4uLikgPSAwOwogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYWJsZVR5
cGU+Ci0gICAgY2xhc3MgQ2FsbGFibGVXcmFwcGVyIGZpbmFsIDogcHVibGljIENhbGxhYmxlV3Jh
cHBlckJhc2UgeworICAgIGNsYXNzIENhbGxhYmxlV3JhcHBlciA6IHB1YmxpYyBDYWxsYWJsZVdy
YXBwZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IENhbGxhYmxlV3JhcHBl
cihDYWxsYWJsZVR5cGUmJiBjYWxsYWJsZSkKICAgICAgICAgICAgIDogbV9jYWxsYWJsZShXVEZN
b3ZlKGNhbGxhYmxlKSkKQEAgLTgyLDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbGFi
bGVXcmFwcGVyKGNvbnN0IENhbGxhYmxlV3JhcHBlciYpID0gZGVsZXRlOwogICAgICAgICBDYWxs
YWJsZVdyYXBwZXImIG9wZXJhdG9yPShjb25zdCBDYWxsYWJsZVdyYXBwZXImKSA9IGRlbGV0ZTsK
IAotICAgICAgICB2b2lkIGNhbGwoKSBmaW5hbCB7IG1fY2FsbGFibGUoKTsgfQorICAgICAgICBP
dXQgY2FsbChJbi4uLiBpbikgZmluYWwgeyByZXR1cm4gbV9jYWxsYWJsZShzdGQ6OmZvcndhcmQ8
SW4+KGluKS4uLik7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIENhbGxhYmxlVHlwZSBtX2Nh
bGxhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUnVuTG9vcC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9SdW5Mb29wLmNwcAppbmRleCA0ZWQwNmViZGNhOTQ3MjA2N2ZiMDdiNmRjZmZmMWFj
MjlkMzY2YzM1Li45NjYwZjE1MTRlNWYwOTgxODYyOTk4ZjgxNzQxNzM2MDA5NjI0YTY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
dW5Mb29wLmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFJ1bkxvb3A6OnBlcmZvcm1Xb3JrKCkK
IAogICAgIHNpemVfdCBmdW5jdGlvbnNUb0hhbmRsZSA9IDA7CiAgICAgewotICAgICAgICBOb25j
b3B5YWJsZUZ1bmN0aW9uIGZ1bmN0aW9uOworICAgICAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+IGZ1bmN0aW9uOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9mdW5jdGlvblF1ZXVlTG9jayk7CiAgICAgICAgICAgICBmdW5jdGlvbnNUb0hhbmRsZSA9
IG1fZnVuY3Rpb25RdWV1ZS5zaXplKCk7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBSdW5Mb29w
OjpwZXJmb3JtV29yaygpCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgZnVuY3Rpb25zSGFuZGxl
ZCA9IDE7IGZ1bmN0aW9uc0hhbmRsZWQgPCBmdW5jdGlvbnNUb0hhbmRsZTsgKytmdW5jdGlvbnNI
YW5kbGVkKSB7Ci0gICAgICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gZnVuY3Rpb247CisgICAgICAg
IE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb247CiAgICAgICAgIHsKICAgICAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Z1bmN0aW9uUXVldWVMb2NrKTsKIApAQCAtMTIz
LDcgKzEyMyw3IEBAIHZvaWQgUnVuTG9vcDo6cGVyZm9ybVdvcmsoKQogICAgIH0KIH0KIAotdm9p
ZCBSdW5Mb29wOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lk
IFJ1bkxvb3A6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlv
bikKIHsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2Z1bmN0aW9uUXVldWVM
b2NrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1J1bkxvb3AuaCBiL1NvdXJjZS9XVEYv
d3RmL1J1bkxvb3AuaAppbmRleCAzZTBhMWI0ZDgxZjFlMWFlYmUwYThjOWViOWRkZGMzZDY5ZjAy
NTQ1Li5lMTU1OGI2MjU5YzI3ZjBmNzA5MDE1ZWQ1OWMxNTJiOTg2NTUzNWQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9SdW5Mb29wLmgKKysrIGIvU291cmNlL1dURi93dGYvUnVuTG9vcC5o
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgaXNNYWluKCk7CiAgICAgflJ1bkxvb3AoKTsKIAotICAgIHZvaWQgZGlzcGF0Y2goTm9u
Y29weWFibGVGdW5jdGlvbiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKE5vbmNvcHlh
YmxlRnVuY3Rpb248dm9pZCAoKT4mJikgb3ZlcnJpZGU7CiAKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgcnVuKCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RvcCgp
OwpAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShHTElCX0VWRU5U
X0xPT1ApIHx8IFVTRShHRU5FUklDX0VWRU5UX0xPT1ApCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMsIE5vbmNvcHlhYmxl
RnVuY3Rpb24mJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlcihz
dGQ6OmNocm9ubzo6bmFub3NlY29uZHMsIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7
CiAjZW5kaWYKIAogICAgIGNsYXNzIFRpbWVyQmFzZSB7CkBAIC0xNTUsNyArMTU1LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHBlcmZvcm1Xb3JrKCk7CiAKICAgICBNdXRleCBtX2Z1bmN0aW9uUXVl
dWVMb2NrOwotICAgIERlcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+IG1fZnVuY3Rpb25RdWV1ZTsK
KyAgICBEZXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+PiBtX2Z1bmN0aW9uUXVldWU7
CiAKICNpZiBVU0UoV0lORE9XU19FVkVOVF9MT09QKQogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVy
UnVuTG9vcE1lc3NhZ2VXaW5kb3dDbGFzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAppbmRleCAzMzBlNWY3NDYx
MzQzMzRlYjA1ODY5ZDhmNDFkNDdiYzUzMjE2NWU1Li5lNTUzMjU5NGE1NDMyNGQ2ODgxMWZlMTY2
ZGE0MGJmNzUyMzQyODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWY8V29ya1F1ZXVlPiBjcmVhdGUoY29u
c3QgY2hhciogbmFtZSwgVHlwZSA9IFR5cGU6OlNlcmlhbCwgUU9TID0gUU9TOjpEZWZhdWx0KTsK
ICAgICB2aXJ0dWFsIH5Xb3JrUXVldWUoKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb24mJikgb3ZlcnJpZGU7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMsIE5v
bmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKSBvdmVycmlkZTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcywg
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBjb25jdXJyZW50QXBwbHkoc2l6ZV90IGl0ZXJhdGlvbnMsIGNvbnN0IHN0
ZDo6ZnVuY3Rpb248dm9pZCAoc2l6ZV90IGluZGV4KT4mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvY29jb2EvV29ya1F1ZXVlQ29jb2EuY3BwIGIvU291cmNlL1dURi93dGYvY29jb2Ev
V29ya1F1ZXVlQ29jb2EuY3BwCmluZGV4IDQ0OWE0MGZjMzRmZTE2YThiMjgzZjgwZjUzYjE4NDg0
ZDhkMDYwNTMuLjk5NWE5NTRhYWMxZGI3NDEzM2RlOWNmYjk0ZjE5NDhjOTQxMjc0MTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2NvY29hL1dvcmtRdWV1ZUNvY29hLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9jb2NvYS9Xb3JrUXVldWVDb2NvYS5jcHAKQEAgLTI4LDEwICsyOCwxMCBAQAog
CiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxl
RnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChOb25jb3B5YWJs
ZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgcmVmKCk7Ci0gICAgYXV0byog
ZnVuY3Rpb25QdHIgPSBuZXcgTm9uY29weWFibGVGdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSk7
CisgICAgYXV0byogZnVuY3Rpb25QdHIgPSBuZXcgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgp
PihXVEZNb3ZlKGZ1bmN0aW9uKSk7CiAgICAgZGlzcGF0Y2hfYXN5bmMobV9kaXNwYXRjaFF1ZXVl
LCBeewogICAgICAgICAoKmZ1bmN0aW9uUHRyKSgpOwogICAgICAgICBkZWxldGUgZnVuY3Rpb25Q
dHI7CkBAIC0zOSwxMCArMzksMTAgQEAgdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlh
YmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKICAgICB9KTsKIH0KIAotdm9pZCBXb3JrUXVldWU6OmRp
c3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBOb25jb3B5YWJs
ZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6
OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAo
KT4mJiBmdW5jdGlvbikKIHsKICAgICByZWYoKTsKLSAgICBhdXRvKiBmdW5jdGlvblB0ciA9IG5l
dyBOb25jb3B5YWJsZUZ1bmN0aW9uKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICBhdXRvKiBmdW5j
dGlvblB0ciA9IG5ldyBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+KFdURk1vdmUoZnVuY3Rp
b24pKTsKICAgICBkaXNwYXRjaF9hZnRlcihkaXNwYXRjaF90aW1lKERJU1BBVENIX1RJTUVfTk9X
LCBkdXJhdGlvbi5jb3VudCgpKSwgbV9kaXNwYXRjaFF1ZXVlLCBeewogICAgICAgICAoKmZ1bmN0
aW9uUHRyKSgpOwogICAgICAgICBkZWxldGUgZnVuY3Rpb25QdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmggYi9Tb3VyY2UvV1RGL3d0
Zi9lZmwvRGlzcGF0Y2hRdWV1ZVdvcmtJdGVtRWZsLmgKaW5kZXggZDBlOWM0ZmZkNjE4NTZlNDRl
Mjg3ZGI5YjBlMzI3NDgyODNiODA0ZS4uM2RkZmU1N2RlNmEzZGZmM2ZmODg1MWYwZDAyYTI4ZjAw
MWUzNjY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZWZsL0Rpc3BhdGNoUXVldWVXb3Jr
SXRlbUVmbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2VmbC9EaXNwYXRjaFF1ZXVlV29ya0l0ZW1F
ZmwuaApAQCAtMzQsNyArMzQsNyBAQAogCiBjbGFzcyBXb3JrSXRlbSB7CiBwdWJsaWM6Ci0gICAg
V29ya0l0ZW0oUmVmPFdvcmtRdWV1ZT4mJiB3b3JrUXVldWUsIE5vbmNvcHlhYmxlRnVuY3Rpb24m
JiBmdW5jdGlvbikKKyAgICBXb3JrSXRlbShSZWY8V29ya1F1ZXVlPiYmIHdvcmtRdWV1ZSwgTm9u
Y29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogICAgICAgICA6IG1fd29ya1F1
ZXVlKFdURk1vdmUod29ya1F1ZXVlKSkKICAgICAgICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoZnVu
Y3Rpb24pKQogICAgIHsKQEAgLTQ0LDEyICs0NCwxMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7Ci0gICAgTm9uY29weWFibGVGdW5jdGlvbiBt
X2Z1bmN0aW9uOworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsK
IH07CiAKIGNsYXNzIFRpbWVyV29ya0l0ZW0gOiBwdWJsaWMgV29ya0l0ZW0gewogcHVibGljOgot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKFJlZjxXb3Jr
UXVldWU+JiYgd29ya1F1ZXVlLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIHN0ZDo6
Y2hyb25vOjpuYW5vc2Vjb25kcyBkZWxheU5hbm9TZWNvbmRzKQorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8VGltZXJXb3JrSXRlbT4gY3JlYXRlKFJlZjxXb3JrUXVldWU+JiYgd29ya1F1ZXVl
LCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIHN0ZDo6Y2hyb25vOjpu
YW5vc2Vjb25kcyBkZWxheU5hbm9TZWNvbmRzKQogICAgIHsKICAgICAgICAgQVNTRVJUKGRlbGF5
TmFub1NlY29uZHMuY291bnQoKSA+PSAwKTsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxUaW1lcldvcmtJdGVtPihuZXcgVGltZXJXb3JrSXRlbShXVEZNb3ZlKHdvcmtRdWV1ZSksIFdU
Rk1vdmUoZnVuY3Rpb24pLCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAqIDEwMDAwMDAw
MDAuMCArIGRlbGF5TmFub1NlY29uZHMuY291bnQoKSkpOwpAQCAtNTgsNyArNTgsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNFeHBpcmVkKGRvdWJsZSBjdXJyZW50VGltZU5hbm9TZWNvbmRzKSBj
b25zdCB7IHJldHVybiBjdXJyZW50VGltZU5hbm9TZWNvbmRzID49IG1fZXhwaXJhdGlvblRpbWVO
YW5vU2Vjb25kczsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgVGltZXJXb3JrSXRlbShSZWY8V29ya1F1
ZXVlPiYmIHdvcmtRdWV1ZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uLCBkb3VibGUg
ZXhwaXJhdGlvblRpbWVOYW5vU2Vjb25kcykKKyAgICBUaW1lcldvcmtJdGVtKFJlZjxXb3JrUXVl
dWU+JiYgd29ya1F1ZXVlLCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24s
IGRvdWJsZSBleHBpcmF0aW9uVGltZU5hbm9TZWNvbmRzKQogICAgICAgICA6IFdvcmtJdGVtKFdU
Rk1vdmUod29ya1F1ZXVlKSwgV1RGTW92ZShmdW5jdGlvbikpCiAgICAgICAgICwgbV9leHBpcmF0
aW9uVGltZU5hbm9TZWNvbmRzKGV4cGlyYXRpb25UaW1lTmFub1NlY29uZHMpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcAppbmRleCA5NWRiZjZjZWVmZGE2YzQ0NDUxZmE1MjUy
NWE5MWZlODE5NmJiZTNjLi40MGQxOTM5ZmNkNGQwZWZhNTY4OWViMDJlZDk5ODZhOWQ3ODIwNTg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lk
IFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0
b3IpCiAgICAgbV9kaXNwYXRjaFF1ZXVlLT5jbGVhclNvY2tldEV2ZW50SGFuZGxlcigpOwogfQog
Ci12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9u
KQordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4m
JiBmdW5jdGlvbikKIHsKICAgICBpZiAoIW1fZGlzcGF0Y2hRdWV1ZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVG
dW5jdGlvbiYmIGZ1bmN0aW9uKQogICAgIG1fZGlzcGF0Y2hRdWV1ZS0+ZGlzcGF0Y2goc3RkOjpt
YWtlX3VuaXF1ZTxXb3JrSXRlbT4oKnRoaXMsIFdURk1vdmUoZnVuY3Rpb24pKSk7CiB9CiAKLXZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJh
dGlvbiwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBXb3JrUXVldWU6OmRp
c3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0aW9uLCBOb25jb3B5YWJs
ZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgaWYgKCFtX2Rpc3BhdGNoUXVl
dWUpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMv
UnVuTG9vcEdlbmVyaWMuY3BwIGIvU291cmNlL1dURi93dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJp
Yy5jcHAKaW5kZXggNTcxMzU4MTM2MTQ3Njg5MTVhZTNmZjJmZWU0YWI5ZWIzNDJmMTMwYS4uMTcx
YWQzMDI3MjY5MjI4NmYzMmYwOTQ5MmY0ZjI4MzdhOTdhYjZjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvZ2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2VuZXJpYy9SdW5Mb29wR2VuZXJpYy5jcHAKQEAgLTMyLDEyICszMiwxMiBAQCBuYW1lc3BhY2Ug
V1RGIHsKIGNsYXNzIFJ1bkxvb3A6OlRpbWVyQmFzZTo6U2NoZWR1bGVkVGFzayA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTY2hlZHVsZWRUYXNrPiB7CiBXVEZfTUFLRV9OT05DT1BZQUJM
RShTY2hlZHVsZWRUYXNrKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPFNjaGVkdWxlZFRh
c2s+IGNyZWF0ZShOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIGRvdWJsZSBpbnRlcnZh
bCwgYm9vbCByZXBlYXRpbmcpCisgICAgc3RhdGljIFJlZlB0cjxTY2hlZHVsZWRUYXNrPiBjcmVh
dGUoTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBkb3VibGUgaW50ZXJ2
YWwsIGJvb2wgcmVwZWF0aW5nKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
Y2hlZHVsZWRUYXNrKFdURk1vdmUoZnVuY3Rpb24pLCBpbnRlcnZhbCwgcmVwZWF0aW5nKSk7CiAg
ICAgfQogCi0gICAgU2NoZWR1bGVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24s
IGRvdWJsZSBpbnRlcnZhbCwgYm9vbCByZXBlYXRpbmcpCisgICAgU2NoZWR1bGVkVGFzayhOb25j
b3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24sIGRvdWJsZSBpbnRlcnZhbCwgYm9v
bCByZXBlYXRpbmcpCiAgICAgICAgIDogbV9mdW5jdGlvbihXVEZNb3ZlKGZ1bmN0aW9uKSkKICAg
ICAgICAgLCBtX2ZpcmVJbnRlcnZhbChzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihpbnRlcnZh
bCkpKQogICAgICAgICAsIG1faXNSZXBlYXRpbmcocmVwZWF0aW5nKQpAQCAtOTAsNyArOTAsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gbV9m
dW5jdGlvbjsKKyAgICBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+IG1fZnVuY3Rpb247CiAg
ICAgQ29uZGl0aW9uOjpDbG9jazo6dGltZV9wb2ludCBtX3NjaGVkdWxlZFRpbWVQb2ludDsKICAg
ICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1fZmlyZUludGVydmFsOwogICAgIHN0ZDo6YXRv
bWljPGJvb2w+IG1faXNBY3RpdmUgeyB0cnVlIH07CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBS
dW5Mb29wOjpzY2hlZHVsZUFuZFdha2VVcChSZWZQdHI8VGltZXJCYXNlOjpTY2hlZHVsZWRUYXNr
PiB0YXNrKQogICAgIHdha2VVcChsb2NrZXIpOwogfQogCi12b2lkIFJ1bkxvb3A6OmRpc3BhdGNo
QWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGRlbGF5LCBOb25jb3B5YWJsZUZ1bmN0aW9u
JiYgZnVuY3Rpb24pCit2b2lkIFJ1bkxvb3A6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5h
bm9zZWNvbmRzIGRlbGF5LCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24p
CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb29wTG9jayk7CiAgICAgYm9vbCByZXBlYXRp
bmcgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dlbmVyaWMvV29ya1F1ZXVl
R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nZW5lcmljL1dvcmtRdWV1ZUdlbmVyaWMuY3Bw
CmluZGV4IGE2MThkNGQxYWJiNjAxODAyOTI1Y2Y4ZDZkNWM1MTAzNDRmMTc1MDIuLjdmODBlNjlj
YTVjN2MzMDZmOTA3N2M0ZjljODUwM2VjYzZlNTQ1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL2dlbmVyaWMvV29ya1F1ZXVlR2VuZXJpYy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2Vu
ZXJpYy9Xb3JrUXVldWVHZW5lcmljLmNwcApAQCAtODEsNyArODEsNyBAQCB2b2lkIFdvcmtRdWV1
ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKICAgICB9CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIFJl
ZlB0cjxXb3JrUXVldWU+IHByb3RlY3QodGhpcyk7CiAgICAgbV9ydW5Mb29wLT5kaXNwYXRjaChb
cHJvdGVjdCwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpAQCAtODksNyArODksNyBA
QCB2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9u
KQogICAgIH0pOwogfQogCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9u
bzo6bmFub3NlY29uZHMgZGVsYXksIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3Zv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkZWxh
eSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogewogICAgIFJlZlB0
cjxXb3JrUXVldWU+IHByb3RlY3QodGhpcyk7CiAgICAgbV9ydW5Mb29wLT5kaXNwYXRjaEFmdGVy
KGRlbGF5LCBbcHJvdGVjdCwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9SdW5Mb29wR0xpYi5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9nbGliL1J1bkxvb3BHTGliLmNwcAppbmRleCAwYzUwZmYyNzY5M2E3N2E2NzkzOGMyZGQ4NGY3
OGI2MTk4YjZiY2YwLi44OWI3ZjcwNzBjOWQ0MjhlN2I4ZmI4MTdhN2Y5ZTdiM2FkZGY5ZjE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQg
UnVuTG9vcDo6d2FrZVVwKCkKIGNsYXNzIERpc3BhdGNoQWZ0ZXJDb250ZXh0IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEaXNwYXRjaEFmdGVyQ29udGV4dChO
b25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCisgICAgRGlzcGF0Y2hBZnRlckNvbnRleHQo
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uKQogICAgICAgICA6IG1fZnVu
Y3Rpb24oV1RGTW92ZShmdW5jdGlvbikpCiAgICAgewogICAgIH0KQEAgLTEzNSwxMCArMTM1LDEw
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTm9uY29weWFibGVGdW5jdGlvbiBt
X2Z1bmN0aW9uOworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsK
IH07CiAKLXZvaWQgUnVuTG9vcDo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHMgZHVyYXRpb24sIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgUnVuTG9v
cDo6ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNv
cHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAgICBHUmVmUHRyPEdTb3Vy
Y2U+IHNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGQ6OmNocm9ubzo6
ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihkdXJhdGlvbikuY291bnQo
KSkpOwogICAgIGdfc291cmNlX3NldF9uYW1lKHNvdXJjZS5nZXQoKSwgIltXZWJLaXRdIFJ1bkxv
b3AgZGlzcGF0Y2hBZnRlciIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvd2luL1dvcmtJ
dGVtV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5jcHAKaW5kZXggNjA1
Zjc3Y2MwYzNlNjVmMzEyODhiMjQyYmU2NzZjYWM5NmJjZDk2MC4uODY0MjMyMmI5ZTUxNmE3ZTYx
M2MzYzA0YTI0ZjZhMzA3NTQzNGY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvd2luL1dv
cmtJdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya0l0ZW1XaW4uY3BwCkBA
IC0zMiwxMyArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLVdvcmtJdGVtV2luOjpXb3Jr
SXRlbVdpbihOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUp
CitXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4oTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYm
IGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQogICAgIDogbV9mdW5jdGlvbihXVEZNb3ZlKGZ1
bmN0aW9uKSkKICAgICAsIG1fcXVldWUocXVldWUpCiB7CiB9CiAKLVJlZlB0cjxXb3JrSXRlbVdp
bj4gV29ya0l0ZW1XaW46OmNyZWF0ZShOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24sIFdv
cmtRdWV1ZSogcXVldWUpCitSZWZQdHI8V29ya0l0ZW1XaW4+IFdvcmtJdGVtV2luOjpjcmVhdGUo
Tm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVl
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya0l0ZW1XaW4oV1RGTW92ZShmdW5jdGlv
biksIHF1ZXVlKSk7CiB9CkBAIC00Nyw3ICs0Nyw3IEBAIFdvcmtJdGVtV2luOjp+V29ya0l0ZW1X
aW4oKQogewogfQogCi1IYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRs
ZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorSGFu
ZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVu
Y3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKICAgICA6IFdvcmtJ
dGVtV2luKFdURk1vdmUoZnVuY3Rpb24pLCBxdWV1ZSkKICAgICAsIG1faGFuZGxlKGhhbmRsZSkK
ICAgICAsIG1fd2FpdEhhbmRsZSgwKQpAQCAtNTUsNyArNTUsNyBAQCBIYW5kbGVXb3JrSXRlbTo6
SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRsZSwgTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0
aW9uLCBXbwogICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUpOwogfQogCi1SZWZQdHI8SGFu
ZGxlV29ya0l0ZW0+IEhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRM
RSBoYW5kbGUsIE5vbmNvcHlhYmxlRnVuY3Rpb24mJiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1
ZSkKK1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4gSGFuZGxlV29ya0l0ZW06OmNyZWF0ZUJ5QWRvcHRp
bmdIYW5kbGUoSEFORExFIGhhbmRsZSwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmIGZ1
bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFu
ZGxlV29ya0l0ZW0oaGFuZGxlLCBXVEZNb3ZlKGZ1bmN0aW9uKSwgcXVldWUpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrSXRlbVdpbi5oIGIvU291cmNlL1dURi93dGYv
d2luL1dvcmtJdGVtV2luLmgKaW5kZXggYTYwOTU0N2Y5YmRmN2RjZGVkMDQ5NGFjZTYwYTRkYjli
Yjg1OGVhYy4uYmFhNzdkOTdhNzQ5YTMyZTIyMmQxYjE5OTM4Nzc3NDQzNTIxM2FmOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvd2luL1dvcmtJdGVtV2luLmgKKysrIGIvU291cmNlL1dURi93
dGYvd2luL1dvcmtJdGVtV2luLmgKQEAgLTM5LDMwICszOSwzMCBAQCBjbGFzcyBXb3JrUXVldWU7
CiAKIGNsYXNzIFdvcmtJdGVtV2luIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdvcmtJ
dGVtV2luPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxXb3JrSXRlbVdpbj4gY3JlYXRl
KE5vbmNvcHlhYmxlRnVuY3Rpb24mJiwgV29ya1F1ZXVlKik7CisgICAgc3RhdGljIFJlZlB0cjxX
b3JrSXRlbVdpbj4gY3JlYXRlKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiwgV29ya1F1
ZXVlKik7CiAgICAgdmlydHVhbCB+V29ya0l0ZW1XaW4oKTsKIAotICAgIE5vbmNvcHlhYmxlRnVu
Y3Rpb24mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgIE5vbmNvcHlhYmxl
RnVuY3Rpb248dm9pZCAoKT4mIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQogICAg
IFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlLmdldCgpOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBXb3JrSXRlbVdpbihOb25jb3B5YWJsZUZ1bmN0aW9uJiYsIFdvcmtRdWV1
ZSopOworICAgIFdvcmtJdGVtV2luKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiwgV29y
a1F1ZXVlKik7CiAKIHByaXZhdGU6Ci0gICAgTm9uY29weWFibGVGdW5jdGlvbiBtX2Z1bmN0aW9u
OworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9mdW5jdGlvbjsKICAgICBSZWZQ
dHI8V29ya1F1ZXVlPiBtX3F1ZXVlOwogfTsKIAogY2xhc3MgSGFuZGxlV29ya0l0ZW0gOiBwdWJs
aWMgV29ya0l0ZW1XaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBOb25jb3B5YWJsZUZ1bmN0aW9uJiYs
IFdvcmtRdWV1ZSopOworICAgIHN0YXRpYyBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5
QWRvcHRpbmdIYW5kbGUoSEFORExFLCBOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYsIFdv
cmtRdWV1ZSopOwogICAgIHZpcnR1YWwgfkhhbmRsZVdvcmtJdGVtKCk7CiAKICAgICB2b2lkIHNl
dFdhaXRIYW5kbGUoSEFORExFIHdhaXRIYW5kbGUpIHsgbV93YWl0SGFuZGxlID0gd2FpdEhhbmRs
ZTsgfQogICAgIEhBTkRMRSB3YWl0SGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV93YWl0SGFuZGxl
OyB9CiAKIHByaXZhdGU6Ci0gICAgSGFuZGxlV29ya0l0ZW0oSEFORExFLCBOb25jb3B5YWJsZUZ1
bmN0aW9uJiYsIFdvcmtRdWV1ZSopOworICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgTm9uY29w
eWFibGVGdW5jdGlvbjx2b2lkICgpPiYmLCBXb3JrUXVldWUqKTsKIAogICAgIEhBTkRMRSBtX2hh
bmRsZTsKICAgICBIQU5ETEUgbV93YWl0SGFuZGxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvd2luL1dvcmtRdWV1ZVdpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2lu
LmNwcAppbmRleCBlNzhmOTM0Y2M1ODkxNWViMWJhNjJhYWUxOTg2NzM0NjFkZWE1ODdmLi5lNDUy
OTgxNDljYTQ3YmFiOWRlNjBkMDljNmVkMDJkYjRkZjk2OTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29y
a1F1ZXVlV2luLmNwcApAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9y
bUludmFsaWRhdGUoKQogICAgIDo6RGVsZXRlVGltZXJRdWV1ZUV4KG1fdGltZXJRdWV1ZSwgMCk7
CiB9CiAKLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVu
Y3Rpb24pCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbjx2b2lk
ICgpPiYmIGZ1bmN0aW9uKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVl
dWVMb2NrKTsKICAgICByZWYoKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBzdHJ1Y3QgVGltZXJDb250
ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRpbWVyQ29udGV4dD4gewogICAgIHN0
YXRpYyBSZWZQdHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
VGltZXJDb250ZXh0KTsgfQogCiAgICAgV29ya1F1ZXVlKiBxdWV1ZTsKLSAgICBOb25jb3B5YWJs
ZUZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gZnVu
Y3Rpb247CiAgICAgTXV0ZXggdGltZXJNdXRleDsKICAgICBIQU5ETEUgdGltZXI7CiAKQEAgLTE4
MCw3ICsxODAsNyBAQCB2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0
LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCiAgICAgfQogfQogCi12b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIE5vbmNvcHlh
YmxlRnVuY3Rpb24mJiBmdW5jdGlvbikKK3ZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyKHN0
ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcyBkdXJhdGlvbiwgTm9uY29weWFibGVGdW5jdGlvbjx2b2lk
ICgpPiYmIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOwogICAgIHJlZigp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDM4NWMxNGYzNmFjMjRj
MmI4MWI5MjAyMTJjOGEyNjM4YTFiMjI2ZjIuLmYxZWI2NGVmZTUxYjlhYmZjZDM0YTlhMzhjM2U1
OWE3MmMzYjJmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTk1
LDcgKzk1LDcgQEAgTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0aW9uOjpNZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24oUGVlckNvbm5lY3Rpb25CYWNrZW5kQ2wKICAgICBtX21lZGlhRW5kcG9pbnQt
PmdlbmVyYXRlRHRsc0luZm8oKTsKIH0KIAotdm9pZCBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rp
b246OnJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmIHRhc2spCit2b2lkIE1lZGlhRW5kcG9p
bnRQZWVyQ29ubmVjdGlvbjo6cnVuVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYg
dGFzaykKIHsKICAgICBpZiAobV9kdGxzRmluZ2VycHJpbnQuaXNOdWxsKCkpIHsKICAgICAgICAg
Ly8gT25seSBvbmUgdGFzayBuZWVkcyB0byBiZSBkZWZlcnJlZCBzaW5jZSBpdCB3aWxsIGhvbGQg
b2ZmIGFueSBvdGhlcnMgdW50aWwgY29tcGxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFFbmRwb2ludFBlZXJDb25uZWN0
aW9uLmgKaW5kZXggODZiMjQ3NzMwYTNkMTcyYzA0NTE2ZWI4ZmNmZWQ2Mzk2MjVlYWRiOC4uOTY3
ZDBjOWEyNTE2NDY4ZTcyYjRkOTRiNWU0YTllODYyZTE5MDRjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5oCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
TmVnb3RpYXRpb25OZWVkZWRTdGF0ZSgpIG92ZXJyaWRlIHsgbm90SW1wbGVtZW50ZWQoKTsgfTsK
IAogcHJpdmF0ZToKLSAgICB2b2lkIHJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAg
ICB2b2lkIHJ1blRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKICAgICB2b2lk
IHN0YXJ0UnVubmluZ1Rhc2tzKCk7CiAKICAgICB2b2lkIGNyZWF0ZU9mZmVyVGFzayhSVENPZmZl
ck9wdGlvbnMmLCBQZWVyQ29ubmVjdGlvbjo6U2Vzc2lvbkRlc2NyaXB0aW9uUHJvbWlzZSYpOwpA
QCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogICAgIFBlZXJDb25uZWN0aW9uQmFja2VuZENsaWVu
dCogbV9jbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhRW5kcG9pbnQ+IG1fbWVkaWFF
bmRwb2ludDsKIAotICAgIE5vbmNvcHlhYmxlRnVuY3Rpb24gbV9pbml0aWFsRGVmZXJyZWRUYXNr
OworICAgIE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4gbV9pbml0aWFsRGVmZXJyZWRUYXNr
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNEUFByb2Nlc3Nvcj4gbV9zZHBQcm9jZXNzb3I7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAppbmRleCBmNGI3MGNm
MDUxZGE4Y2ZjMGY1Y2NlYjA2YjRhMmMzYjY0NzNiMjkzLi40YWU2YzgwY2UzNGU3OTRlNWVjNjJk
NzgyYzU4MTI4ZjE3NmQyZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uY3BwCkBAIC02NCwxMiArNjQsMTIgQEAgaW5saW5lIEFzeW5jRmlsZVN0cmVhbTo6SW50
ZXJuYWxzOjpJbnRlcm5hbHMoRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KQogI2VuZGlmCiB9CiAK
LXN0YXRpYyB2b2lkIGNhbGxPbkZpbGVUaHJlYWQoTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0
aW9uKQorc3RhdGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQoZnVuY3Rpb24pOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lc3NhZ2VRdWV1
ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPj4gcXVldWU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PE1lc3NhZ2VRdWV1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+Pj4gcXVldWU7CiAKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgY3JlYXRlRmlsZVRocmVhZE9uY2U7CiAgICAgc3RkOjpj
YWxsX29uY2UoY3JlYXRlRmlsZVRocmVhZE9uY2UsIFtdIHsKQEAgLTkwLDcgKzkwLDcgQEAgc3Rh
dGljIHZvaWQgY2FsbE9uRmlsZVRocmVhZChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24p
CiAgICAgICAgIH0pOwogICAgIH0pOwogCi0gICAgcXVldWUuZ2V0KCkuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8Tm9uY29weWFibGVGdW5jdGlvbj4oV1RGTW92ZShmdW5jdGlvbikpKTsKKyAgICBx
dWV1ZS5nZXQoKS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZv
aWQgKCk+PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiBBc3luY0ZpbGVTdHJlYW06OkFzeW5j
RmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpCkBAIC0xMTQsNyArMTE0LDcgQEAg
QXN5bmNGaWxlU3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKCkKICAgICB9KTsKIH0KIAotdm9pZCBB
c3luY0ZpbGVTdHJlYW06OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQo
RmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+JiYgb3BlcmF0aW9uKQordm9pZCBBc3lu
Y0ZpbGVTdHJlYW06OnBlcmZvcm0oTm9uY29weWFibGVGdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZv
aWQoRmlsZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+JiYgb3BlcmF0aW9uKQogewogICAg
IGF1dG8mIGludGVybmFscyA9ICptX2ludGVybmFsczsKICAgICBjYWxsT25GaWxlVGhyZWFkKFsm
aW50ZXJuYWxzLCBvcGVyYXRpb24gPSBXVEZNb3ZlKG9wZXJhdGlvbildIHsKQEAgLTEzNCwxMSAr
MTM0LDEwIEBAIHZvaWQgQXN5bmNGaWxlU3RyZWFtOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248c3Rk
OjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmCiAKIHZvaWQgQXN5bmNGaWxlU3RyZWFt
OjpnZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSkKIHsKLSAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkUGF0aChwYXRoKTsKICAgICAvLyBG
SVhNRTogRXhwbGljaXQgcmV0dXJuIHR5cGUgaGVyZSBhbmQgaW4gYWxsIHRoZSBvdGhlciBjYXNl
cyBsaWtlIHRoaXMgYmVsb3cgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGRlZmljaWVuY3kKICAgICAv
LyBpbiB0aGUgV2luZG93cyBjb21waWxlciBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuIENv
dWxkIHJlbW92ZSBpdCBpZiB0aGF0IGlzIHJlc29sdmVkLgotICAgIHBlcmZvcm0oW2NhcHR1cmVk
UGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0
ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKLSAgICAgICAgbG9uZyBsb25n
IHNpemUgPSBzdHJlYW0uZ2V0U2l6ZShjYXB0dXJlZFBhdGguc3RyaW5nKCksIGV4cGVjdGVkTW9k
aWZpY2F0aW9uVGltZSk7CisgICAgcGVyZm9ybShbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCks
IGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZV0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1
bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGxvbmcgbG9uZyBzaXpl
ID0gc3RyZWFtLmdldFNpemUocGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKICAgICAg
ICAgcmV0dXJuIFtzaXplXShGaWxlU3RyZWFtQ2xpZW50JiBjbGllbnQpIHsKICAgICAgICAgICAg
IGNsaWVudC5kaWRHZXRTaXplKHNpemUpOwogICAgICAgICB9OwpAQCAtMTQ3LDEwICsxNDYsOSBA
QCB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Z2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJs
ZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbQogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZv
clJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoKQogewotICAgIFN0cmluZ0NhcHR1cmUgY2FwdHVyZWRQYXRoKHBhdGgpOwogICAgIC8vIEZJ
WE1FOiBFeHBsaWNpdCByZXR1cm4gdHlwZSBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBkZWZp
Y2llbmN5IGluIHRoZSBXaW5kb3dzIGNvbXBpbGVyIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGlu
Zy4KLSAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGgsIG9mZnNldCwgbGVuZ3RoXShGaWxlU3RyZWFt
JiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKLSAg
ICAgICAgYm9vbCBzdWNjZXNzID0gc3RyZWFtLm9wZW5Gb3JSZWFkKGNhcHR1cmVkUGF0aC5zdHJp
bmcoKSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHBlcmZvcm0oW3BhdGggPSBwYXRoLmlzb2xhdGVk
Q29weSgpLCBvZmZzZXQsIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFtKSAtPiBzdGQ6OmZ1bmN0
aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0
cmVhbS5vcGVuRm9yUmVhZChwYXRoLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBb
c3VjY2Vzc10oRmlsZVN0cmVhbUNsaWVudCYgY2xpZW50KSB7CiAgICAgICAgICAgICBjbGllbnQu
ZGlkT3BlbihzdWNjZXNzKTsKICAgICAgICAgfTsKQEAgLTE1OSw5ICsxNTcsOCBAQCB2b2lkIEFz
eW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcg
b2Zmc2V0LCBsb25nIGxvbgogCiB2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBTdHJpbmdDYXB0dXJlIGNhcHR1cmVkUGF0aChwYXRo
KTsKLSAgICBwZXJmb3JtKFtjYXB0dXJlZFBhdGhdKEZpbGVTdHJlYW0mIHN0cmVhbSkgLT4gc3Rk
OjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4gewotICAgICAgICBib29sIHN1Y2Nl
c3MgPSBzdHJlYW0ub3BlbkZvcldyaXRlKGNhcHR1cmVkUGF0aC5zdHJpbmcoKSk7CisgICAgcGVy
Zm9ybShbcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCldKEZpbGVTdHJlYW0mIHN0cmVhbSkgLT4g
c3RkOjpmdW5jdGlvbjx2b2lkKEZpbGVTdHJlYW1DbGllbnQmKT4geworICAgICAgICBib29sIHN1
Y2Nlc3MgPSBzdHJlYW0ub3BlbkZvcldyaXRlKHBhdGgpOwogICAgICAgICByZXR1cm4gW3N1Y2Nl
c3NdKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgewogICAgICAgICAgICAgY2xpZW50LmRpZE9w
ZW4oc3VjY2Vzcyk7CiAgICAgICAgIH07CkBAIC0xODgsOSArMTg1LDggQEAgdm9pZCBBc3luY0Zp
bGVTdHJlYW06OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogCiB2b2lkIEFzeW5jRmls
ZVN0cmVhbTo6d3JpdGUoY29uc3QgVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGlu
dCBsZW5ndGgpCiB7Ci0gICAgVVJMQ2FwdHVyZSBjYXB0dXJlZFVSTChibG9iVVJMKTsKLSAgICBw
ZXJmb3JtKFtjYXB0dXJlZFVSTCwgcG9zaXRpb24sIGxlbmd0aF0oRmlsZVN0cmVhbSYgc3RyZWFt
KSAtPiBzdGQ6OmZ1bmN0aW9uPHZvaWQoRmlsZVN0cmVhbUNsaWVudCYpPiB7Ci0gICAgICAgIGlu
dCBieXRlc1dyaXR0ZW4gPSBzdHJlYW0ud3JpdGUoY2FwdHVyZWRVUkwudXJsKCksIHBvc2l0aW9u
LCBsZW5ndGgpOworICAgIHBlcmZvcm0oW2Jsb2JVUkwgPSBibG9iVVJMLmlzb2xhdGVkQ29weSgp
LCBwb3NpdGlvbiwgbGVuZ3RoXShGaWxlU3RyZWFtJiBzdHJlYW0pIC0+IHN0ZDo6ZnVuY3Rpb248
dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+IHsKKyAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IHN0
cmVhbS53cml0ZShibG9iVVJMLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIFti
eXRlc1dyaXR0ZW5dKEZpbGVTdHJlYW1DbGllbnQmIGNsaWVudCkgewogICAgICAgICAgICAgY2xp
ZW50LmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7CiAgICAgICAgIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAppbmRleCBmZjQ4MWE0NWZiODI4Y2IxYjM2MmJmNzY5MDBj
YTAxZThhMDVlZDQ2Li4wODhiYjM3NzQ2ZjQ3NTk4MmQ0NzA4NGRmNTA2MWYxOTc2YzY5MmUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgKQEAgLTM0LDYgKzM0LDcg
QEAKIAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGVGdW5jdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTU2LDcgKzU3LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgc3RhcnQo
KTsKLSAgICB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjxzdGQ6OmZ1bmN0aW9uPHZvaWQoRmls
ZVN0cmVhbUNsaWVudCYpPihGaWxlU3RyZWFtJik+JiYpOworICAgIHZvaWQgcGVyZm9ybShOb25j
b3B5YWJsZUZ1bmN0aW9uPHN0ZDo6ZnVuY3Rpb248dm9pZChGaWxlU3RyZWFtQ2xpZW50Jik+KEZp
bGVTdHJlYW0mKT4mJik7CiAKICAgICBzdHJ1Y3QgSW50ZXJuYWxzOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbnRlcm5hbHM+IG1faW50ZXJuYWxzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKaW5kZXggMzVhMTdiOGU3ODMyOTBkZmFhNmM2
ZDgzZjNkYjc4MTIyNDM3NGQ3ZC4uNTc2MDc4M2RiOGNlMDAzNWM4ZWU0MDc4YTU0NWY3MDVmZjYx
MmRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
aHJlYWQuY3BwCkBAIC00NSw3ICs0NSw3IEBAIGJvb2wgU2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJl
bnRUaHJlYWQoKQogICAgIHJldHVybiB0aHJlYWRJZGVudGlmaWVyICYmIGN1cnJlbnRUaHJlYWQo
KSA9PSB0aHJlYWRJZGVudGlmaWVyOwogfQogCi12b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBTY3JvbGxpbmdUaHJlYWQ6
OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBhdXRvJiBzY3JvbGxpbmdUaHJlYWQgPSBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpOwog
ICAgIHNjcm9sbGluZ1RocmVhZC5jcmVhdGVUaHJlYWRJZk5lZWRlZCgpOwpAQCAtNTgsNyArNTgs
NyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYm
IGZ1bmN0aW9uKQogICAgIHNjcm9sbGluZ1RocmVhZC53YWtlVXBSdW5Mb29wKCk7CiB9CiAKLXZv
aWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaEJhcnJpZXIoTm9uY29weWFibGVGdW5jdGlvbiYm
IGZ1bmN0aW9uKQordm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmllcihOb25jb3B5
YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rpb24pCiB7CiAgICAgZGlzcGF0Y2goW2Z1bmN0
aW9uID0gV1RGTW92ZShmdW5jdGlvbildKCkgbXV0YWJsZSB7CiAgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoV1RGTW92ZShmdW5jdGlvbikpOwpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgU2Nyb2xs
aW5nVGhyZWFkOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21TY3JvbGxpbmdUaHJlYWQoKQogewogICAg
IEFTU0VSVChpc0N1cnJlbnRUaHJlYWQoKSk7CiAKLSAgICBWZWN0b3I8Tm9uY29weWFibGVGdW5j
dGlvbj4gZnVuY3Rpb25zOworICAgIFZlY3RvcjxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
PiBmdW5jdGlvbnM7CiAgICAgCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2Z1bmN0aW9uc011dGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXggYWFmNTc3YmRkOTg4M2Q0MzAyMDQ3MjI2YjVlODIx
MGJmODZiNTVhNi4uMDM3Zjk1YjkwYjYzYTlkZWIxMzFjMzgxYmQ5ZDMyNDk5N2I1NDFlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKQEAg
LTQ4LDExICs0OCwxMSBAQCBjbGFzcyBTY3JvbGxpbmdUaHJlYWQgewogCiBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgaXNDdXJyZW50VGhyZWFkKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYpOwog
CiAgICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4gZnVuY3Rpb24gb24gdGhlIG1haW4gdGhy
ZWFkIG9uY2UgYWxsIHBlbmRpbmcgZnVuY3Rpb25zCiAgICAgLy8gb24gdGhlIHNjcm9sbGluZyB0
aHJlYWQgaGF2ZSBmaW5pc2hlZCBleGVjdXRpbmcuIFVzZWQgZm9yIHN5bmNocm9uaXphdGlvbiBw
dXJwb3Nlcy4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBkaXNwYXRjaEJhcnJpZXIo
Tm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBk
aXNwYXRjaEJhcnJpZXIoTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgpPiYmKTsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsaW5nVGhyZWFkPjsKQEAgLTgwLDcg
KzgwLDcgQEAgcHJpdmF0ZToKICAgICBMb2NrIG1faW5pdGlhbGl6ZVJ1bkxvb3BNdXRleDsKIAog
ICAgIExvY2sgbV9mdW5jdGlvbnNNdXRleDsKLSAgICBWZWN0b3I8Tm9uY29weWFibGVGdW5jdGlv
bj4gbV9mdW5jdGlvbnM7CisgICAgVmVjdG9yPE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4+
IG1fZnVuY3Rpb25zOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCB1c2UgV2ViQ29yZTo6UnVuTG9vcCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMuaApp
bmRleCBkYWVlMmVmZmViYWZiZmMzOWM2OGY3ZjFkY2ZhMGFhZmY0OWEyYmRmLi44NjlhNjhlOTg4
NmIyZDBiZjU5OGJlMzBhOTJkZGY2NDVkZTkzNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMu
aApAQCAtMTQzLDcgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsK
ICAgICB2b2lkIHJlbmRlcmluZ01vZGVDaGFuZ2VkKCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlRGVm
ZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24mJik7CisgICAgdm9pZCBzY2hlZHVsZURlZmVy
cmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYpOwogCiAgICAgZW51bSBEaXNw
bGF5TW9kZSB7CiAgICAgICAgIE5vbmUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0
cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KaW5kZXgg
N2E3OTY0MmExYzAxM2E0YjRiNTg4MDBjYWMyMGRkNzI4YTIxYzRiNS4uODRjN2Q2MjMyNGY2NDcx
MWUxNjVlNTI0M2RmODhmMjFhNTBlZDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
dHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpA
QCAtNjI0LDcgKzYyNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDOjpzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTCiAgICAgbV9wbGF5ZXIt
Pm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakM6OnNjaGVkdWxlRGVmZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb24m
JiBmdW5jdGlvbikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjpz
Y2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFr
VGhpcyA9IGNyZWF0ZVdlYWtQdHIoKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJl
YW1Qcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtUHJpdmF0ZS5jcHAKaW5kZXggNDJkMjQ2NmMyYmY2MzFmMGVmZmFjY2Y5NGY0MDAyODEw
YTdkMDI2Yi4uZDQ5ZDE1MTIxMzk2Mzg4NjQ5ZGUxNTdjMzA0NzE3NDkzZWJmY2NiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1Qcml2
YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0
cmVhbVByaXZhdGUuY3BwCkBAIC0yOTksNyArMjk5LDcgQEAgdm9pZCBNZWRpYVN0cmVhbVByaXZh
dGU6OnRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKQogICAgIH0pOwogfQogCi12
b2lkIE1lZGlhU3RyZWFtUHJpdmF0ZTo6c2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVG
dW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBNZWRpYVN0cmVhbVByaXZhdGU6OnNjaGVkdWxlRGVm
ZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5jdGlvbikKIHsKICAg
ICBBU1NFUlQoZnVuY3Rpb24pOwogICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gY3Jl
YXRlV2Vha1B0cigpLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pXSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVByaXZhdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0
ZS5oCmluZGV4IDhjZjYwNGM5MDY1NmMwZmUwYWJiMDdiOTE1NGFkMTFhMWQ5YzYyZTUuLjkyMzA0
ZWZiZDYzNDlhY2YxOTY5NzU0ZmY4MjhhMDZmYTQ0YzBkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtUHJpdmF0ZS5oCkBA
IC0xMTIsNyArMTEyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoYXJhY3RlcmlzdGljc0NoYW5n
ZWQoKTsKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVZpZGVvVHJhY2soKTsKIAotICAgIHZvaWQgc2No
ZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbiYmKTsKKyAgICB2b2lkIHNjaGVk
dWxlRGVmZXJyZWRUYXNrKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7CiAKICAgICBX
ZWFrUHRyRmFjdG9yeTxNZWRpYVN0cmVhbVByaXZhdGU+IG1fd2Vha1B0ckZhY3Rvcnk7CiAgICAg
VmVjdG9yPE9ic2VydmVyKj4gbV9vYnNlcnZlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZNZWRpYUNhcHR1cmVTb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5o
CmluZGV4IDIxYWNhZjAyZDY2NDk1MDRhNzM1MTFiMjFjODk3N2NjNjQ5OWY0MWUuLmY0NzRhZWI5
YjdjNzNjYmM0YzgzNGMyZjFlYzkyYjU4OWMxNDVjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVyZVNv
dXJjZS5oCkBAIC04Niw3ICs4Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFZpZGVvU2Ft
cGxlQnVmZmVyRGVsZWdhdGUoQVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0Kik7CiAgICAgdm9pZCBz
ZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZUF1ZGlvRGF0YU91dHB1dCopOwog
Ci0gICAgdm9pZCBzY2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uJiYpOwor
ICAgIHZvaWQgc2NoZWR1bGVEZWZlcnJlZFRhc2soTm9uY29weWFibGVGdW5jdGlvbjx2b2lkICgp
PiYmKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHNldHVwU2Vzc2lvbigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFDYXB0dXJlU291
cmNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWTWVkaWFD
YXB0dXJlU291cmNlLm1tCmluZGV4IDc5MTVhODQyZWE4M2RkMzU3ZDJiNDI4OGE1NzliZmMxMzgw
Yjc2Y2MuLjc2YWZkOWJiZTVhMDdlOWE3NThhYTQ1YjhlN2M3ZTY1MWNiY2IzM2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVk1lZGlhQ2FwdHVy
ZVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QVZNZWRpYUNhcHR1cmVTb3VyY2UubW0KQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIEFWTWVkaWFD
YXB0dXJlU291cmNlOjpzZXRBdWRpb1NhbXBsZUJ1ZmZlckRlbGVnYXRlKEFWQ2FwdHVyZUF1ZGlv
RGF0YU91dHB1dAogICAgIFthdWRpb091dHB1dCBzZXRTYW1wbGVCdWZmZXJEZWxlZ2F0ZTptX29i
amNPYnNlcnZlci5nZXQoKSBxdWV1ZTpnbG9iYUF1ZGlvQ2FwdHVyZVNlcmlhbFF1ZXVlKCldOwog
fQogCi12b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpzY2hlZHVsZURlZmVycmVkVGFzayhOb25j
b3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIEFWTWVkaWFDYXB0dXJlU291cmNlOjpz
Y2hlZHVsZURlZmVycmVkVGFzayhOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+JiYgZnVuY3Rp
b24pCiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFr
VGhpcyA9IGNyZWF0ZVdlYWtQdHIoKSwgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3JhZ2VTeW5jTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAppbmRleCAzZTFm
MWM0MDJhZGJiZTJmZWJhODg1NThjYjVmMDRjZTQ4MWI1MGI2Li5lMWE0YTE1ZGRkN2YzNDcxNjFl
NDQ0MzM3MWZjNDdiNzIyNjhmOTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2Uv
U3RvcmFnZVN5bmNNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFn
ZVN5bmNNYW5hZ2VyLmNwcApAQCAtNjMsNyArNjMsNyBAQCBTdHJpbmcgU3RvcmFnZVN5bmNNYW5h
Z2VyOjpmdWxsRGF0YWJhc2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWRlbnRpZmll
cgogICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9wYXRoLCBkYXRhYmFzZUlk
ZW50aWZpZXIgKyAiLmxvY2Fsc3RvcmFnZSIpOwogfQogCi12b2lkIFN0b3JhZ2VTeW5jTWFuYWdl
cjo6ZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlvbiYmIGZ1bmN0aW9uKQordm9pZCBTdG9yYWdl
U3luY01hbmFnZXI6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5j
dGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3RocmVh
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVN5bmNNYW5hZ2VyLmgKaW5kZXggZWRk
NzE3ZGU1YmY3MjcwZDI3NzliYTBlOTI1ZGZjNTRjNWZmOGE4ZS4uNzVhNDg2YjYyMGMyYmIzMTJh
ZThjZGY5ZDUwNjRiNDAyNmJhMWVjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdl
L1N0b3JhZ2VTeW5jTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdl
U3luY01hbmFnZXIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxT
dG9yYWdlU3luY01hbmFnZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIH5TdG9y
YWdlU3luY01hbmFnZXIoKTsKIAotICAgIHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5jdGlv
biYmKTsKKyAgICB2b2lkIGRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJik7
CiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TdG9yYWdlL1N0b3JhZ2VUaHJlYWQuY3BwIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuY3BwCmluZGV4IDYyODQwZDJlNzc1MjcxNDA0MmUyMDU4OTlmMmRmNjhhYWNkNmNj
ZDguLjI5NjZlMDQwNmUxNzA0ZjIyMGM1MWMyNmRlNzhkMDgyMTQyNmM2MDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9TdG9yYWdlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5jcHAKQEAgLTc0LDExICs3NCwxMSBAQCB2b2lkIFN0
b3JhZ2VUaHJlYWQ6OnRocmVhZEVudHJ5UG9pbnQoKQogICAgIH0KIH0KIAotdm9pZCBTdG9yYWdl
VGhyZWFkOjpkaXNwYXRjaChOb25jb3B5YWJsZUZ1bmN0aW9uJiYgZnVuY3Rpb24pCit2b2lkIFN0
b3JhZ2VUaHJlYWQ6OmRpc3BhdGNoKE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiBmdW5j
dGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9xdWV1
ZS5raWxsZWQoKSAmJiBtX3RocmVhZElEKTsKLSAgICBtX3F1ZXVlLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+KFdURk1vdmUoZnVuY3Rpb24pKSk7CisgICAgbV9x
dWV1ZS5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxOb25jb3B5YWJsZUZ1bmN0aW9uPHZvaWQgKCk+
PihXVEZNb3ZlKGZ1bmN0aW9uKSkpOwogfQogCiB2b2lkIFN0b3JhZ2VUaHJlYWQ6OnRlcm1pbmF0
ZSgpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgU3RvcmFnZVRocmVhZDo6dGVybWluYXRlKCkKICAg
ICBpZiAoIW1fdGhyZWFkSUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcXVldWUuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8Tm9uY29weWFibGVGdW5jdGlvbj4oW3RoaXNdIHsKKyAgICBtX3F1
ZXVlLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4+
KFt0aGlzXSB7CiAgICAgICAgIHBlcmZvcm1UZXJtaW5hdGUoKTsKICAgICB9KSk7CiAgICAgd2Fp
dEZvclRocmVhZENvbXBsZXRpb24obV90aHJlYWRJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1N0b3Jh
Z2VUaHJlYWQuaAppbmRleCBkY2U1Y2NmY2QzY2E2MmIxYzA4NzZmYzM0ZDkyZGY2ZjAyMGRmZjc1
Li40NzUyZDViMTllMWIwNmNhYTllN2VlZDg4NDRiNDlkNWYzZmNiZmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvU3RvcmFnZVRocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
U3RvcmFnZS9TdG9yYWdlVGhyZWFkLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGJv
b2wgc3RhcnQoKTsKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCi0gICAgdm9pZCBkaXNwYXRjaChO
b25jb3B5YWJsZUZ1bmN0aW9uJiYpOworICAgIHZvaWQgZGlzcGF0Y2goTm9uY29weWFibGVGdW5j
dGlvbjx2b2lkICgpPiYmKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeUluQWxsVGhyZWFkcygpOwogCkBAIC01OSw3ICs1OSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwZXJmb3JtVGVybWluYXRlKCk7CiAKICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFk
SUQ7Ci0gICAgTWVzc2FnZVF1ZXVlPE5vbmNvcHlhYmxlRnVuY3Rpb24+IG1fcXVldWU7CisgICAg
TWVzc2FnZVF1ZXVlPE5vbmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4+IG1fcXVldWU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3Bw
CmluZGV4IDJjM2QwMzRjMmNlNTdkNTliMmQ2YjlhNmQ5OGIzYTFkMWMzMjYzMGMuLjhjOTFjOWVj
Njc1ODgyMmM2YjMwZjVmYjQwYjgyYzFjNjQ4ZDRlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hh
bm5lbFNvdXAuY3BwCkBAIC02OSw3ICs2OSw3IEBAIFJlZjxJT0NoYW5uZWw+IElPQ2hhbm5lbDo6
b3Blbihjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBJT0NoYW5uZWw6OlR5cGUgdHlwZSkKICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJT0NoYW5uZWwoZmlsZVBhdGgsIHR5cGUpKTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHJ1blRhc2tJblF1ZXVlKE5vbmNvcHlhYmxlRnVuY3Rpb24mJiB0YXNr
LCBXb3JrUXVldWUqIHF1ZXVlKQorc3RhdGljIGlubGluZSB2b2lkIHJ1blRhc2tJblF1ZXVlKE5v
bmNvcHlhYmxlRnVuY3Rpb248dm9pZCAoKT4mJiB0YXNrLCBXb3JrUXVldWUqIHF1ZXVlKQogewog
ICAgIGlmIChxdWV1ZSkgewogICAgICAgICBxdWV1ZS0+ZGlzcGF0Y2goV1RGTW92ZSh0YXNrKSk7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>