<?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>205133</bug_id>
          
          <creation_ts>2019-12-11 13:27:44 -0800</creation_ts>
          <short_desc>REGRESSION(r253376): Broke internal builds (Requested by smfr on #webkit).</short_desc>
          <delta_ts>2019-12-11 17:08:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>205021</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1597752</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-11 13:27:44 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/253376 broke the build:
Broke internal builds (Requested by smfr on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597754</commentid>
    <comment_count>1</comment_count>
      <attachid>385431</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-11 13:27:57 -0800</bug_when>
    <thetext>Created attachment 385431
ROLLOUT of r253376

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597773</commentid>
    <comment_count>2</comment_count>
      <attachid>385431</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-11 13:47:55 -0800</bug_when>
    <thetext>Comment on attachment 385431
ROLLOUT of r253376

Rejecting attachment 385431 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 385431, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
/ChangeLog&apos;
W: e613a9a6a8e1c830e5f6adaed44ac0ca1c61795b and refs/remotes/origin/master differ, using rebase:
:040000 040000 f24d998dfc3c11919cac39ded5c15cf7cf7fedf3 42164bfad444b8e33206a52ecf7b8321ec0f502b M	Source
:040000 040000 0a1646b1f809bb32c715964fd38443d963f28e64 cff12787e99cb72e08b94f49ce62641a492b9cab M	Tools
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	D	Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.h
	D	Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm
	D	Source/WebKit/UIProcess/API/ios/WKWebViewTestingIOS.h
	D	Source/WebKit/UIProcess/API/ios/WKWebViewTestingIOS.mm
	D	Source/WebKit/UIProcess/API/mac/WKWebViewTestingMac.h
	D	Source/WebKit/UIProcess/API/mac/WKWebViewTestingMac.mm
	M	Source/WebKit/ChangeLog
	M	Source/WebKit/SourcesCocoa.txt
	M	Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h
	M	Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
	M	Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
	M	Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
	M	Source/WebKit/UIProcess/Cocoa/PageClientImplCocoa.mm
	M	Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
	M	Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm
	M	Source/WebKit/UIProcess/ios/WKMouseGestureRecognizer.h
	M	Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm
	M	Source/WebKit/UIProcess/mac/PageClientImplMac.mm
	M	Source/WebKit/UIProcess/mac/WKFullScreenWindowController.h
	M	Source/WebKit/WebKit.xcodeproj/project.pbxproj
	M	Tools/ChangeLog
	M	Tools/MiniBrowser/Configurations/Base.xcconfig
	M	Tools/MiniBrowser/mac/WK2BrowserWindowController.m
	M	Tools/TestWebKitAPI/Configurations/Base.xcconfig
	M	Tools/TestWebKitAPI/EditingTestHarness.mm
	M	Tools/TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/AnimatedResize.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/DeviceOrientation.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/DoubleDefersLoading.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/NowPlayingControlsTests.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/PictureInPictureDelegate.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSuspendMediaBuffering.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/SnapshotStore.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/VideoControlsManager.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/WKRequestActivatedElementInfo.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewCandidateTests.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewEditActions.mm
	M	Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebViewFirstResponderTests.mm
	M	Tools/TestWebKitAPI/Tests/ios/AccessibilityTestsIOS.mm
	M	Tools/TestWebKitAPI/Tests/ios/ActionSheetTests.mm
	M	Tools/TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm
	M	Tools/TestWebKitAPI/Tests/ios/FocusPreservationTests.mm
	M	Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm
	M	Tools/TestWebKitAPI/ios/DragAndDropSimulatorIOS.mm
	M	Tools/TestWebKitAPI/mac/DragAndDropSimulatorMac.mm
	M	Tools/WebKitTestRunner/Configurations/Base.xcconfig
	M	Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm
	M	Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm
	M	Tools/WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm
	M	Tools/WebKitTestRunner/ios/TestControllerIOS.mm
	M	Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm
	M	Tools/WebKitTestRunner/mac/UIScriptControllerMac.mm
	D+	Source/WebKit/UIProcess/API/ios/

ERROR from SVN:
Merge conflict during commit: Conflict at &apos;/trunk/Source/WebKit/ChangeLog&apos;
W: e613a9a6a8e1c830e5f6adaed44ac0ca1c61795b and refs/remotes/origin/master differ, using rebase:
:040000 040000 f24d998dfc3c11919cac39ded5c15cf7cf7fedf3 42164bfad444b8e33206a52ecf7b8321ec0f502b M	Source
:040000 040000 0a1646b1f809bb32c715964fd38443d963f28e64 cff12787e99cb72e08b94f49ce62641a492b9cab M	Tools
Current branch master is up to date.
ERROR: Not all changes have been committed into SVN, however the committed
ones (if any) seem to be successfully integrated into the working tree.
Please see the above messages for details.


Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;, &apos;--rmdir&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
Current branch master is up to date.

Full output: https://webkit-queues.webkit.org/results/13290186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597875</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-11 17:07:32 -0800</bug_when>
    <thetext>Was rolled out manually in https://trac.webkit.org/changeset/253396/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597877</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-11 17:08:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/57860771&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385431</attachid>
            <date>2019-12-11 13:27:57 -0800</date>
            <delta_ts>2019-12-11 13:47:55 -0800</delta_ts>
            <desc>ROLLOUT of r253376</desc>
            <filename>bug-205133-20191211132757.patch</filename>
            <type>text/plain</type>
            <size>280734</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDI4YWJmMzQzZDIzYTBjZjE1
YWI5MGM5Y2UwYmJiOTRlNjhiY2IwY2YuLjBiZmQxNjUxMDczMDljNDczYzllNTU5NzMyNDZhMTMw
ZTkzNTVhMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMTItMTEgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyNTMzNzYuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDUxMzMKKworICAgICAgICBCcm9rZSBpbnRlcm5hbCBidWlsZHMgKFJlcXVl
c3RlZCBieSBzbWZyIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoK
KworICAgICAgICAiTW92ZSBXS1dlYlZpZXcgY29kZSByZWxhdGVkIHRvIHRlc3RpbmcgdG8gbmV3
IGZpbGVzLCB3aXRoCisgICAgICAgIHRoZWlyIG93biBoZWFkZXJzLCBhbmQgc3RvcCBleHBvc2lu
ZyB0ZXN0LW9ubHkgZnVuY3Rpb25zIGFzCisgICAgICAgIFNQSS4iCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwMjEKKyAgICAgICAgaHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzI1MzM3NgorCiAyMDE5LTEyLTExICBEb24gT2xtc3Rl
YWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBBZGQgSGFyZkJ1
enogdGFyZ2V0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDFiMjVhN2I5ZDA5ZWEzNjViNzI0
ZDA1YTk3ZGJmYzYzMGZkYWM3MGQuLjlkMjQyZTJhMDY0ZGZmNzJmNDljNDJmNTRkOTc4MTNjYWQ5
NGQ5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTMyMiwxNSArMzIyLDExIEBAIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tVc2VyU2NyaXB0Lm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
c2l0ZURhdGFSZWNvcmQubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQotVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdUZXN0aW5nLm1tCiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24ubW0KIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJwYWdlUHJlZmVyZW5jZXMubW0K
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXaW5kb3dGZWF0dXJlcy5tbQogCi1VSVByb2Nlc3MvQVBJ
L2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCi0KIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQotVUlQcm9jZXNzL0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQogCiBVSVByb2Nlc3Mv
QXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1t
CiBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vY29jb2EvU2VjS2V5UHJveHlTdG9yZS5tbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQ
cml2YXRlLmgKaW5kZXggMjU5MDc4ZmY1YzE0MWQ0YzBkZmUyYTgyNmFhNDg4YTJiOWE1ZGYyNy4u
NTM2MmIxOGU4NTNmYTU0ODMxNjllZjRlMjIxZWUxOWYyOGM0OGViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5o
CkBAIC0zOSw3ICszOSw2IEBACiBAY2xhc3MgX1dLQWN0aXZhdGVkRWxlbWVudEluZm87CiBAY2xh
c3MgX1dLRWxlbWVudEFjdGlvbjsKIEBjbGFzcyBfV0tGcmFtZUhhbmRsZTsKLUBjbGFzcyBfV0tJ
bnNwZWN0b3I7CiAKICNpZiBUQVJHRVRfT1NfSU9TCiBAY2xhc3MgVUlDb250ZXh0TWVudUNvbmZp
Z3VyYXRpb247CkBAIC0xODMsNyArMTgyLDYgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIC0gKHZv
aWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YUludGVyYWN0aW9uOihpZClpbnRl
cmFjdGlvbiBzZXNzaW9uOihpZClzZXNzaW9uIGRpZEVuZFdpdGhPcGVyYXRpb246KE5TVUludGVn
ZXIpb3BlcmF0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjApKTsKIC0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YUludGVyYWN0aW9uT3BlcmF0aW9uV2FzSGFuZGxl
ZDooQk9PTCloYW5kbGVkIGZvclNlc3Npb246KGlkKXNlc3Npb24gaXRlbVByb3ZpZGVyczooTlNB
cnJheSAqKWl0ZW1Qcm92aWRlcnMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwogLSAoTlNV
SW50ZWdlcilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyB3aWxsVXBkYXRlRGF0YUludGVy
YWN0aW9uT3BlcmF0aW9uVG9PcGVyYXRpb246KE5TVUludGVnZXIpb3BlcmF0aW9uIGZvclNlc3Np
b246KGlkKXNlc3Npb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMCkpOwotCiAjaWYgVEFSR0VU
X09TX0lPUwogLSAoVUlEcm9wUHJvcG9zYWwgKilfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmll
dyB3aWxsVXBkYXRlRHJvcFByb3Bvc2FsVG9Qcm9wb3NhbDooVUlEcm9wUHJvcG9zYWwgKilwcm9w
b3NhbCBmb3JTZXNzaW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBXS19BUElfQVZBSUxB
QkxFKGlvcygxMi4yKSk7CiAtIChVSVRhcmdldGVkRHJhZ1ByZXZpZXcgKilfd2ViVmlldzooV0tX
ZWJWaWV3ICopd2ViVmlldyBwcmV2aWV3Rm9yTGlmdGluZ0l0ZW06KFVJRHJhZ0l0ZW0gKilpdGVt
IHNlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDExLjApKTsKQEAgLTE5Miw3ICsxOTAsNiBAQCBzdHJ1Y3QgVUlFZGdlSW5zZXRzOwogLSAoTlNJ
bnRlZ2VyKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRhdGFPd25lckZvckRyb3BTZXNz
aW9uOihpZCA8VUlEcm9wU2Vzc2lvbj4pc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4w
KSk7CiAtIChOU0ludGVnZXIpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGF0YU93bmVy
Rm9yRHJhZ1Nlc3Npb246KGlkIDxVSURyYWdTZXNzaW9uPilzZXNzaW9uIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDExLjApKTsKICNlbmRpZgotCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRpZENoYW5nZVNhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHM6KEJPT0wp
c2FmZUFyZWFTaG91bGRBZmZlY3RPYnNjdXJlZEluc2V0cyBXS19BUElfQVZBSUxBQkxFKGlvcygx
MS4wKSk7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZFByZXNlbnRG
b2N1c2VkRWxlbWVudFZpZXdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopY29udHJvbGxl
ciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7CiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZp
ZXcgKil3ZWJWaWV3IGRpZERpc21pc3NGb2N1c2VkRWxlbWVudFZpZXdDb250cm9sbGVyOihVSVZp
ZXdDb250cm9sbGVyICopY29udHJvbGxlciBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4wKSk7CkBA
IC0yMDcsNyArMjA0LDYgQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIC0gKHZvaWQpX3dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlv
bkFjY2Vzc1JlcXVlc3RlZEJ5RnJhbWU6KFdLRnJhbWVJbmZvICopcmVxdWVzdGluZ0ZyYW1lIGRl
Y2lzaW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpZGVjaXNpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUoaW9zKDEzLjApKTsKIAogI2Vsc2UgLy8gIVRBUkdFVF9PU19JUEhPTkUKLQogLSAodm9p
ZClfcHJlcGFyZUZvckltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkZvcldlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAtICh2b2lkKV9j
YW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogLSAodm9pZClfY29tcGxldGVJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Gb3JXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwpAQCAtMjQxLDcgKzIzNyw2IEBAIHN0cnVj
dCBVSUVkZ2VJbnNldHM7CiAgICAgQHBhcmFtIGluc3BlY3RvciBUaGUgV2ViIEluc3BlY3RvciBp
bnN0YW5jZSBhdHRhY2hlZCB0byB0aGlzIFdLV2ViVmlldy4KICovCiAtICh2b2lkKV93ZWJWaWV3
OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEF0dGFjaEluc3BlY3RvcjooX1dLSW5zcGVjdG9yICop
aW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOwotCiAjZW5kaWYg
Ly8gIVRBUkdFVF9PU19JUEhPTkUKIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggZGQ3NmQ4NjdkNDkwYmE2MzlhYzIyNTE0YTQx
OGVlMDZkOTIxMjEwMS4uMzM1NGFjNmVlY2I1YThkNzE5OGFlOGE1OGNhMjk5NDRjODMwZTUxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBA
IC01Miw2ICs1Miw3IEBACiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgogI2ltcG9ydCAiVGV4dENo
ZWNrZXJTdGF0ZS5oIgogI2ltcG9ydCAiVUlEZWxlZ2F0ZS5oIgorI2ltcG9ydCAiVXNlck1lZGlh
UHJvY2Vzc01hbmFnZXIuaCIKICNpbXBvcnQgIlZlcnNpb25DaGVja3MuaCIKICNpbXBvcnQgIlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIgogI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9s
bGVyLmgiCkBAIC03OSw3ICs4MCw2IEBACiAjaW1wb3J0ICJXS1VzZXJDb250ZW50Q29udHJvbGxl
ckludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIldLV2ViVmlld0NvbnRlbnRQcm92aWRlci5oIgotI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZ0lPUy5oIgogI2ltcG9ydCAiV0tXZWJwYWdlUHJlZmVyZW5jZXNJbnRlcm5hbC5oIgog
I2ltcG9ydCAiV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYkJhY2tG
b3J3YXJkTGlzdC5oIgpAQCAtMTI0LDYgKzEyNCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdVdGlsaXRpZXMuaD4KICNpbXBvcnQg
PFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
VmFsaWRhdGlvbkJ1YmJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Xcml0aW5nTW9kZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLmg+CkBAIC0yODEsMTggKzI4MiwyOSBAQCBzdGF0aWMgT3B0aW9u
YWw8V2ViQ29yZTo6U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPiB0b0NvcmVTY3JvbGxiYXJTdHlsZShf
V0tPdmVybGF5UwogCiAgICAgV2Vha09iakNQdHI8aWQgPF9XS0lucHV0RGVsZWdhdGU+PiBfaW5w
dXREZWxlZ2F0ZTsKIAorICAgIE9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVl
dEltbWVkaWF0ZUNvbXBsZXRpb25Gb3JUZXN0aW5nOwogICAgIFJldGFpblB0cjxXS1NhZmVCcm93
c2luZ1dhcm5pbmc+IF9zYWZlQnJvd3NpbmdXYXJuaW5nOwogCiAgICAgQk9PTCBfdXNlUGxhdGZv
cm1GaW5kVUk7CiAKKyAgICBXZWFrT2JqQ1B0cjxpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVn
YXRlPj4gX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgUmV0YWluUHRyPF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0
UmVnaXN0cnk7CiAKKyAgICBSZXRhaW5QdHI8V0tTY3JvbGxWaWV3PiBfc2Nyb2xsVmlldzsKKyAg
ICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gX2NvbnRlbnRWaWV3OworCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
PiBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKKwogICAgIE9wdGlvbmFsPENH
U2l6ZT4gX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29yZTo6Rmxv
YXRTaXplPiBfbGFzdFNlbnRWaWV3TGF5b3V0U2l6ZTsKICAgICBPcHRpb25hbDxDR1NpemU+IF9t
YXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9h
dFNpemU+IF9sYXN0U2VudE1heGltdW1Vbm9ic2N1cmVkU2l6ZTsKIAorICAgIENHUmVjdCBfaW5w
dXRWaWV3Qm91bmRzOwogICAgIENHRmxvYXQgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoOwogICAgIEJP
T0wgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoV2FzRXhwbGljaXQ7CiAgICAgQk9PTCBfdmlld3BvcnRN
ZXRhVGFnQ2FtZUZyb21JbWFnZURvY3VtZW50OwpAQCAtMzM3LDYgKzM0OSw3IEBAIHN0YXRpYyBP
cHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+IHRvQ29yZVNjcm9sbGJhclN0
eWxlKF9XS092ZXJsYXlTCiAgICAgT3B0aW9uYWw8V2ViS2l0OjpUcmFuc2FjdGlvbklEPiBfZmly
c3RUcmFuc2FjdGlvbklEQWZ0ZXJQYWdlUmVzdG9yZTsKICAgICBkb3VibGUgX3NjYWxlVG9SZXN0
b3JlOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVy
PiBfZ2VzdHVyZUNvbnRyb2xsZXI7CiAgICAgQk9PTCBfYWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0
aW9uR2VzdHVyZXM7CiAKICAgICBSZXRhaW5QdHI8VUlWaWV3IDxXS1dlYlZpZXdDb250ZW50UHJv
dmlkZXI+PiBfY3VzdG9tQ29udGVudFZpZXc7CkBAIC0zNjgsNiArMzgxLDcgQEAgc3RhdGljIE9w
dGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4gdG9Db3JlU2Nyb2xsYmFyU3R5
bGUoX1dLT3ZlcmxheVMKIAogICAgIEJPT0wgX2hhc1NjaGVkdWxlZFZpc2libGVSZWN0VXBkYXRl
OwogICAgIEJPT0wgX3Zpc2libGVDb250ZW50UmVjdFVwZGF0ZVNjaGVkdWxlZEZyb21TY3JvbGxW
aWV3SW5TdGFibGVTdGF0ZTsKKyAgICBWZWN0b3I8QmxvY2tQdHI8dm9pZCAoKT4+IF92aXNpYmxl
Q29udGVudFJlY3RVcGRhdGVDYWxsYmFja3M7CiAKICAgICBfV0tEcmFnSW50ZXJhY3Rpb25Qb2xp
Y3kgX2RyYWdJbnRlcmFjdGlvblBvbGljeTsKIApAQCAtMzgzLDYgKzM5Nyw3IEBAIHN0YXRpYyBP
cHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+IHRvQ29yZVNjcm9sbGJhclN0
eWxlKF9XS092ZXJsYXlTCiAgICAgQk9PTCBfaGFzRW50ZXJlZERlYWxsb2M7CiAjZW5kaWYKICNp
ZiBQTEFURk9STShNQUMpCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2ViVmlld0ltcGw+
IF9pbXBsOwogICAgIFJldGFpblB0cjxXS1RleHRGaW5kZXJDbGllbnQ+IF90ZXh0RmluZGVyQ2xp
ZW50OwogI2VuZGlmCiAgICAgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBfc2VsZWN0aW9uQXR0cmli
dXRlczsKQEAgLTE0MTUsNDEgKzE0MzAsNiBAQCBzdGF0aWMgX1dLU2VsZWN0aW9uQXR0cmlidXRl
cyBzZWxlY3Rpb25BdHRyaWJ1dGVzKGNvbnN0IFdlYktpdDo6RWRpdG9yU3RhdGUmIGVkaQogICAg
ICAgICBbc2VsZiBfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nXTsKIH0KIAotLSAodm9pZClfaW50
ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToodm9pZCAoXikodm9pZCkpdXBkYXRl
QmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzooQk9PTCl3aXRob3V0V2FpdGluZ0ZvclBh
aW50aW5nIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6KEJPT0wpd2l0aG91dFdhaXRp
bmdGb3JBbmltYXRlZFJlc2l6ZQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYg
KCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgZGlzcGF0Y2hfYXN5
bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAod2l0aG91dFdhaXRpbmdGb3JQYWludGluZykK
LSAgICAgICAgX3BhZ2UtPnNldFNob3VsZFNraXBXYWl0aW5nRm9yUGFpbnRBZnRlck5leHRWaWV3
RGlkTW92ZVRvV2luZG93KHRydWUpOwotCi0gICAgYXV0byB1cGRhdGVCbG9ja0NvcHkgPSBtYWtl
QmxvY2tQdHIodXBkYXRlQmxvY2spOwotCi0gICAgUmV0YWluUHRyPFdLV2ViVmlldz4gc3Ryb25n
U2VsZiA9IHNlbGY7Ci0gICAgX3BhZ2UtPmNhbGxBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUo
W3VwZGF0ZUJsb2NrQ29weSwgd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZSwgc3Ryb25n
U2VsZl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIGlmICgh
dXBkYXRlQmxvY2tDb3B5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAgICAgaWYgKCF3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplICYm
IHN0cm9uZ1NlbGYtPl9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICE9IFdlYktpdDo6RHluYW1p
Y1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpIHsKLSAgICAgICAgICAgIHN0cm9uZ1Nl
bGYtPl9jYWxsYmFja3NEZWZlcnJlZER1cmluZ1Jlc2l6ZS5hcHBlbmQoW3VwZGF0ZUJsb2NrQ29w
eV0gewotICAgICAgICAgICAgICAgIHVwZGF0ZUJsb2NrQ29weSgpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUpOwotI2Vu
ZGlmCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDb3B5KCk7Ci0gICAgfSk7Ci19Ci0KICNpZiBFTkFC
TEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCiAtICh2b2lkKV9kaWRJbnNlcnRBdHRhY2htZW50OihB
UEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UK
QEAgLTE0NzksNiArMTQ1OSwxMSBAQCBzdGF0aWMgX1dLU2VsZWN0aW9uQXR0cmlidXRlcyBzZWxl
Y3Rpb25BdHRyaWJ1dGVzKGNvbnN0IFdlYktpdDo6RWRpdG9yU3RhdGUmIGVkaQogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIAorLSAoQk9PTClfY29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVy
Cit7CisgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRDb250ZW50Vmlldy5pc0ZpcnN0UmVzcG9uZGVy
OworfQorCiAtIChCT09MKV9zaG91bGRBdm9pZFJlc2l6aW5nV2hlbklucHV0Vmlld0JvdW5kc0No
YW5nZQogewogICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9zaG91bGRBdm9pZFJlc2l6aW5nV2hl
bklucHV0Vmlld0JvdW5kc0NoYW5nZV07CkBAIC0zNjkwLDE4ICszNjc1LDYgQEAgc3RhdGljIHZv
aWQgaGFyZHdhcmVLZXlib2FyZEF2YWlsYWJpbGl0eUNoYW5nZWRDYWxsYmFjayhDRk5vdGlmaWNh
dGlvbkNlbnRlclJlZiwKICAgICBfaW1wbC0+aGFuZGxlRE9NUGFzdGVSZXF1ZXN0V2l0aFJlc3Vs
dChXZWJDb3JlOjpET01QYXN0ZUFjY2Vzc1Jlc3BvbnNlOjpHcmFudGVkRm9yR2VzdHVyZSk7CiB9
CiAKLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KLXsKLX0KLQot
LSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0KLS0gKHZvaWQp
X2NvbXBsZXRlSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uCi17Ci19Ci0KIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0JFR0lOCiAtICh2b2lkKXJlbmV3R1N0YXRlCiBBTExPV19ERVBS
RUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKQEAgLTQ4NTcsMTk3OCArNDgzMCwyMzEzIEBAIFdF
QkNPUkVfUFJJVkFURV9DT01NQU5EKHBhc3RlQW5kTWF0Y2hTdHlsZSkKICAgICBfcGFnZS0+Y2hh
bmdlTGlzdFR5cGUoKTsKIH0KIAotLSAoQk9PTClfdXNlU3lzdGVtQXBwZWFyYW5jZQorI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKK0ZPUl9FQUNI
X1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oRk9SV0FSRF9BQ1RJT05fVE9fV0tDT05URU5U
VklFVykKKworLSAodm9pZClfc2V0Rm9udDooVUlGb250ICopZm9udCBzZW5kZXI6KGlkKXNlbmRl
cgogewotICAgIHJldHVybiBfaW1wbC0+dXNlU3lzdGVtQXBwZWFyYW5jZSgpOworICAgIGlmIChz
ZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQorICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXRG
b250Rm9yV2ViVmlldzpmb250IHNlbmRlcjpzZW5kZXJdOwogfQogCi0tICh2b2lkKV9zZXRVc2VT
eXN0ZW1BcHBlYXJhbmNlOihCT09MKXVzZVN5c3RlbUFwcGVhcmFuY2UKKy0gKHZvaWQpX3NldEZv
bnRTaXplOihDR0Zsb2F0KWZvbnRTaXplIHNlbmRlcjooaWQpc2VuZGVyCiB7Ci0gICAgX2ltcGwt
PnNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSk7CisgICAgaWYgKHNl
bGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCisgICAgICAgIFtfY29udGVudFZpZXcgX3NldEZv
bnRTaXplRm9yV2ViVmlldzpmb250U2l6ZSBzZW5kZXI6c2VuZGVyXTsKIH0KIAotLSAoV0tQYWdl
UmVmKV9wYWdlUmVmRm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3CistICh2b2lkKV9zZXRUZXh0Q29s
b3I6KFVJQ29sb3IgKiljb2xvciBzZW5kZXI6KGlkKXNlbmRlcgogewotICAgIHJldHVybiB0b0FQ
SShfcGFnZS5nZXQoKSk7CisgICAgaWYgKHNlbGYudXNlc1N0YW5kYXJkQ29udGVudFZpZXcpCisg
ICAgICAgIFtfY29udGVudFZpZXcgX3NldFRleHRDb2xvckZvcldlYlZpZXc6Y29sb3Igc2VuZGVy
OnNlbmRlcl07CiB9CiAKLS0gKEJPT0wpX2NhbkNoYW5nZUZyYW1lTGF5b3V0OihfV0tGcmFtZUhh
bmRsZSAqKWZyYW1lSGFuZGxlCistIChVSVZpZXcgKilpbnB1dEFjY2Vzc29yeVZpZXcKIHsKLSAg
ICBpZiAoYXV0byogd2ViRnJhbWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2Vi
Q29yZTo6ZnJhbWVJZGVudGlmaWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCi0gICAg
ICAgIHJldHVybiBfaW1wbC0+Y2FuQ2hhbmdlRnJhbWVMYXlvdXQoKndlYkZyYW1lUHJveHkpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBpbnB1dEFjY2Vzc29y
eVZpZXdGb3JXZWJWaWV3XTsKIH0KIAotLSAoQk9PTClfdHJ5VG9Td2lwZVdpdGhFdmVudDooTlNF
dmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3JpbmdQaW5uZWRTdGF0
ZQorLSAoVUlWaWV3ICopaW5wdXRWaWV3CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT50cnlUb1N3aXBl
V2l0aEV2ZW50KGV2ZW50LCBpZ25vcmluZ1Bpbm5lZFN0YXRlKTsKKyAgICByZXR1cm4gW19jb250
ZW50VmlldyBpbnB1dFZpZXdGb3JXZWJWaWV3XTsKIH0KIAotLSAoQk9PTClfaWdub3Jlc05vbldo
ZWVsRXZlbnRzCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworLSAoQk9PTClfaXNF
ZGl0YWJsZQogewotICAgIHJldHVybiBfaW1wbC0+aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7Cisg
ICAgcmV0dXJuIF9wYWdlICYmIF9wYWdlLT5pc0VkaXRhYmxlKCk7CiB9CiAKLS0gKHZvaWQpX3Nl
dElnbm9yZXNOb25XaGVlbEV2ZW50czooQk9PTClpZ25vcmVzTm9uV2hlZWxFdmVudHMKKy0gKHZv
aWQpX3NldEVkaXRhYmxlOihCT09MKWVkaXRhYmxlCiB7Ci0gICAgX2ltcGwtPnNldElnbm9yZXNO
b25XaGVlbEV2ZW50cyhpZ25vcmVzTm9uV2hlZWxFdmVudHMpOworICAgIGJvb2wgd2FzRWRpdGFi
bGUgPSBfcGFnZS0+aXNFZGl0YWJsZSgpOworICAgIF9wYWdlLT5zZXRFZGl0YWJsZShlZGl0YWJs
ZSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChlZGl0YWJsZSkKKyAgICAgICAgX2ltcGwt
PmRpZEJlY29tZUVkaXRhYmxlKCk7CisjZW5kaWYKKworICAgIGlmICh3YXNFZGl0YWJsZSA9PSBl
ZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICBbX2NvbnRlbnRWaWV3IF9kaWRDaGFuZ2VXZWJWaWV3RWRpdGFiaWxpdHldOworI2VuZGlmCiB9
CiAKLS0gKEJPT0wpX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyCistICh2b2lkKV90
YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIHJldHVybiBfcGFn
ZSAmJiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250cm9sc01hbmFnZXIoKTsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgW3NlbGYgdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOnNlbmRlcl07
CisjZWxzZQorICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRha2VGaW5kU3RyaW5nRnJv
bVNlbGVjdGlvbiJfcyk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfZGlzbWlzc0NvbnRlbnRSZWxh
dGl2ZUNoaWxkV2luZG93cworKyAoTlNTdHJpbmcgKilfc3RyaW5nRm9yRmluZAogewotICAgIF9p
bXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzRnJvbVZpZXdPbmx5KCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6c3RyaW5nRm9yRmluZCgpOwogfQogCi0tICh2b2lkKV9nZXN0dXJl
RXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKKysgKHZvaWQpX3Nl
dFN0cmluZ0ZvckZpbmQ6KE5TU3RyaW5nICopZmluZFN0cmluZwogewotICAgIF9pbXBsLT5nZXN0
dXJlRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlRnJvbVZpZXdPbmx5KGV2ZW50KTsKKyAgICBX
ZWJLaXQ6OnVwZGF0ZVN0cmluZ0ZvckZpbmQoZmluZFN0cmluZyk7CiB9CiAKLS0gKHZvaWQpX2Rp
c2FibGVGcmFtZVNpemVVcGRhdGVzCistIChfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSAqKV9yZW1v
dGVPYmplY3RSZWdpc3RyeQogewotICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBkYXRlcygp
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lz
dHJ5KCk7CisjZWxzZQorICAgIGlmICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KSB7CisgICAgICAg
IF9yZW1vdGVPYmplY3RSZWdpc3RyeSA9IGFkb3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3Ry
eSBhbGxvY10gX2luaXRXaXRoV2ViUGFnZVByb3h5OipfcGFnZV0pOworICAgICAgICBfcGFnZS0+
cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBfcGFnZS0+aWRlbnRpZmll
cigpLCBbX3JlbW90ZU9iamVjdFJlZ2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7CisgICAg
fQorCisgICAgcmV0dXJuIF9yZW1vdGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKKyNlbmRpZgogfQog
Ci0tICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzCistIChXS0Jyb3dzaW5nQ29udGV4dEhh
bmRsZSAqKV9oYW5kbGUKIHsKLSAgICBfaW1wbC0+ZW5hYmxlRnJhbWVTaXplVXBkYXRlcygpOwor
ICAgIHJldHVybiBbW1tXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSBhbGxvY10gX2luaXRXaXRoUGFn
ZVByb3h5OipfcGFnZV0gYXV0b3JlbGVhc2VdOwogfQogCi0tICh2b2lkKV9iZWdpbkRlZmVycmlu
Z1ZpZXdJbldpbmRvd0NoYW5nZXMKKy0gKF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKV9vYnNl
cnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzCiB7Ci0gICAgX2ltcGwtPmJlZ2luRGVmZXJyaW5n
Vmlld0luV2luZG93Q2hhbmdlcygpOworICAgIHJldHVybiBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9n
cmVzc0V2ZW50czsKIH0KIAotLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdl
cworLSAoaWQgPFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZT4pX2hpc3RvcnlEZWxlZ2F0ZQogewot
ICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7CisgICAgcmV0dXJu
IF9uYXZpZ2F0aW9uU3RhdGUtPmhpc3RvcnlEZWxlZ2F0ZSgpLmF1dG9yZWxlYXNlKCk7CiB9CiAK
LS0gKHZvaWQpX2VuZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jCistICh2b2lkKV9z
ZXRIaXN0b3J5RGVsZWdhdGU6KGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+KWhpc3RvcnlE
ZWxlZ2F0ZQogewotICAgIF9pbXBsLT5lbmREZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzU3lu
YygpOworICAgIF9wYWdlLT5zZXRIaXN0b3J5Q2xpZW50KF9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0
ZUhpc3RvcnlDbGllbnQoKSk7CisgICAgX25hdmlnYXRpb25TdGF0ZS0+c2V0SGlzdG9yeURlbGVn
YXRlKGhpc3RvcnlEZWxlZ2F0ZSk7CiB9CiAKLS0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3CistICh2b2lkKV91cGRhdGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyCiB7
Ci0gICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7CisjaWYgSEFW
RShUT1VDSF9CQVIpICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAg
ICBfaW1wbC0+dXBkYXRlTWVkaWFQbGF5YmFja0NvbnRyb2xzTWFuYWdlcigpOworI2VuZGlmCiB9
CiAKLS0gKE5TV2luZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cKKy0gKEJPT0wpX2NhblRvZ2dsZVBp
Y3R1cmVJblBpY3R1cmUKIHsKLSAgICByZXR1cm4gX2ltcGwtPmZ1bGxTY3JlZW5XaW5kb3coKTsK
KyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2ltcGwtPmNhblRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUoKTsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCiB9CiAKLS0gKE5TQ29s
b3IgKilfdW5kZXJsYXlDb2xvcgorLSAoQk9PTClfaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlCiB7
Ci0gICAgcmV0dXJuIF9pbXBsLT51bmRlcmxheUNvbG9yKCk7CisjaWYgSEFWRShUT1VDSF9CQVIp
ICYmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKyAgICByZXR1cm4gX2lt
cGwtPmlzUGljdHVyZUluUGljdHVyZUFjdGl2ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gTk87Cisj
ZW5kaWYKIH0KIAotLSAodm9pZClfc2V0VW5kZXJsYXlDb2xvcjooTlNDb2xvciAqKXVuZGVybGF5
Q29sb3IKKy0gKHZvaWQpX3RvZ2dsZVBpY3R1cmVJblBpY3R1cmUKIHsKLSAgICBfaW1wbC0+c2V0
VW5kZXJsYXlDb2xvcih1bmRlcmxheUNvbG9yKTsKKyNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5B
QkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorICAgIF9pbXBsLT50b2dnbGVQaWN0
dXJlSW5QaWN0dXJlKCk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3
czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MKKy0gKHZvaWQpX2Nsb3NlQWxsTWVkaWFQcmVz
ZW50YXRpb25zCiB7Ci0gICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3MoY3VzdG9tU3dpcGVW
aWV3cyk7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChhdXRvIHZpZGVvRnVs
bHNjcmVlbk1hbmFnZXIgPSBfcGFnZS0+dmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpKSB7CisgICAg
ICAgIHZpZGVvRnVsbHNjcmVlbk1hbmFnZXItPmZvckVhY2hTZXNzaW9uKFtdIChhdXRvJiBtb2Rl
bCwgYXV0byYgaW50ZXJmYWNlKSB7CisgICAgICAgICAgICBtb2RlbC5yZXF1ZXN0RnVsbHNjcmVl
bk1vZGUoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2Rl
Tm9uZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGlmIChhdXRvIGZ1bGxTY3JlZW5NYW5h
Z2VyID0gX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCk7IGZ1bGxTY3JlZW5NYW5hZ2VyICYmIGZ1
bGxTY3JlZW5NYW5hZ2VyLT5pc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgZnVsbFNjcmVlbk1hbmFn
ZXItPmNsb3NlKCk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0Q3VzdG9tU3dpcGVWaWV3c1Rv
cENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0CistICh2b2lkKV9zdG9wTWVkaWFD
YXB0dXJlCiB7Ci0gICAgX2ltcGwtPnNldEN1c3RvbVN3aXBlVmlld3NUb3BDb250ZW50SW5zZXQo
dG9wQ29udGVudEluc2V0KTsKKyAgICBfcGFnZS0+c3RvcE1lZGlhQ2FwdHVyZSgpOwogfQogCi0t
ICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENHUmVjdCkp
Y2FsbGJhY2sKKy0gKHZvaWQpX3N0b3BBbGxNZWRpYVBsYXliYWNrCiB7Ci0gICAgX2ltcGwtPnNl
dERpZE1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2soY2FsbGJhY2spOworICAgIF9wYWdlLT5zdG9w
QWxsTWVkaWFQbGF5YmFjaygpOwogfQogCi0tICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJlY3Qg
YW5kU2Nyb2xsQnk6KE5TU2l6ZSlvZmZzZXQKKy0gKHZvaWQpX3N1c3BlbmRBbGxNZWRpYVBsYXli
YWNrCiB7Ci0gICAgX2ltcGwtPnNldEZyYW1lQW5kU2Nyb2xsQnkoTlNSZWN0VG9DR1JlY3QocmVj
dCksIE5TU2l6ZVRvQ0dTaXplKG9mZnNldCkpOworICAgIF9wYWdlLT5zdXNwZW5kQWxsTWVkaWFQ
bGF5YmFjaygpOwogfQogCi0tICh2b2lkKV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczooQ0dGbG9h
dCl0b3RhbEhlaWdodE9mQmFubmVycworLSAodm9pZClfcmVzdW1lQWxsTWVkaWFQbGF5YmFjawog
ewotICAgIF9pbXBsLT5zZXRUb3RhbEhlaWdodE9mQmFubmVycyh0b3RhbEhlaWdodE9mQmFubmVy
cyk7CisgICAgX3BhZ2UtPnJlc3VtZUFsbE1lZGlhUGxheWJhY2soKTsKIH0KIAotLSAoQ0dGbG9h
dClfdG90YWxIZWlnaHRPZkJhbm5lcnMKKy0gKE5TVVJMICopX3VucmVhY2hhYmxlVVJMCiB7Ci0g
ICAgcmV0dXJuIF9pbXBsLT50b3RhbEhlaWdodE9mQmFubmVycygpOworICAgIHJldHVybiBbTlNV
UkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudW5yZWFjaGFi
bGVVUkwoKV07CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotCi1GT1JfRUFDSF9QUklWQVRFX1dLQ09OVEVOVFZJRVdfQUNUSU9OKEZPUldB
UkRfQUNUSU9OX1RPX1dLQ09OVEVOVFZJRVcpCi0KLS0gKHZvaWQpX3NldEZvbnQ6KFVJRm9udCAq
KWZvbnQgc2VuZGVyOihpZClzZW5kZXIKKy0gKE5TVVJMICopX21haW5GcmFtZVVSTAogewotICAg
IGlmIChzZWxmLnVzZXNTdGFuZGFyZENvbnRlbnRWaWV3KQotICAgICAgICBbX2NvbnRlbnRWaWV3
IF9zZXRGb250Rm9yV2ViVmlldzpmb250IHNlbmRlcjpzZW5kZXJdOworICAgIGlmIChhdXRvKiBm
cmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT51cmwoKTsK
KyAgICByZXR1cm4gbmlsOwogfQogCi0tICh2b2lkKV9zZXRGb250U2l6ZTooQ0dGbG9hdClmb250
U2l6ZSBzZW5kZXI6KGlkKXNlbmRlcgorLSAodm9pZClfbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6
KE5TU3RyaW5nICopc3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCBmb3JVbnJlYWNoYWJs
ZVVSTDooTlNVUkwgKil1bnJlYWNoYWJsZVVSTAogewotICAgIGlmIChzZWxmLnVzZXNTdGFuZGFy
ZENvbnRlbnRWaWV3KQotICAgICAgICBbX2NvbnRlbnRWaWV3IF9zZXRGb250U2l6ZUZvcldlYlZp
ZXc6Zm9udFNpemUgc2VuZGVyOnNlbmRlcl07CisgICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107CisgICAgX3BhZ2UtPmxvYWRB
bHRlcm5hdGVIVE1MKHsgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEuYnl0ZXMpLCBk
YXRhLmxlbmd0aCB9LCAiVVRGLTgiX3MsIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJMKTsKIH0KIAot
LSAodm9pZClfc2V0VGV4dENvbG9yOihVSUNvbG9yICopY29sb3Igc2VuZGVyOihpZClzZW5kZXIK
Ky0gKFdLTmF2aWdhdGlvbiAqKV9sb2FkRGF0YTooTlNEYXRhICopZGF0YSBNSU1FVHlwZTooTlNT
dHJpbmcgKilNSU1FVHlwZSBjaGFyYWN0ZXJFbmNvZGluZ05hbWU6KE5TU3RyaW5nICopY2hhcmFj
dGVyRW5jb2RpbmdOYW1lIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCB1c2VyRGF0YTooaWQpdXNl
ckRhdGEKIHsKLSAgICBpZiAoc2VsZi51c2VzU3RhbmRhcmRDb250ZW50VmlldykKLSAgICAgICAg
W19jb250ZW50VmlldyBfc2V0VGV4dENvbG9yRm9yV2ViVmlldzpjb2xvciBzZW5kZXI6c2VuZGVy
XTsKKyAgICByZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25z
dCB1aW50OF90Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBjaGFyYWN0
ZXJFbmNvZGluZ05hbWUsIGJhc2VVUkwuYWJzb2x1dGVTdHJpbmcsIFdlYktpdDo6T2JqQ09iamVj
dEdyYXBoOjpjcmVhdGUodXNlckRhdGEpLnB0cigpKSk7CiB9CiAKLS0gKFVJVmlldyAqKWlucHV0
QWNjZXNzb3J5VmlldworLSAoV0tOYXZpZ2F0aW9uICopX2xvYWRSZXF1ZXN0OihOU1VSTFJlcXVl
c3QgKilyZXF1ZXN0IHNob3VsZE9wZW5FeHRlcm5hbFVSTHM6KEJPT0wpc2hvdWxkT3BlbkV4dGVy
bmFsVVJMcwogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlucHV0QWNjZXNzb3J5Vmlld0Zv
cldlYlZpZXddOworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5sb2FkUmVxdWVzdChyZXF1ZXN0
LCBzaG91bGRPcGVuRXh0ZXJuYWxVUkxzID8gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJM
c1BvbGljeTo6U2hvdWxkQWxsb3cgOiBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9s
aWN5OjpTaG91bGROb3RBbGxvdykpOwogfQogCi0tIChVSVZpZXcgKilpbnB1dFZpZXcKKy0gKE5T
QXJyYXkgKilfY2VydGlmaWNhdGVDaGFpbgogewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGlu
cHV0Vmlld0ZvcldlYlZpZXddOworICAgIGlmIChXZWJLaXQ6OldlYkZyYW1lUHJveHkqIG1haW5G
cmFtZSA9IF9wYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG1haW5GcmFtZS0+Y2Vy
dGlmaWNhdGVJbmZvKCkgPyAoX19icmlkZ2UgTlNBcnJheSAqKW1haW5GcmFtZS0+Y2VydGlmaWNh
dGVJbmZvKCktPmNlcnRpZmljYXRlSW5mbygpLmNlcnRpZmljYXRlQ2hhaW4oKSA6IG5pbDsKKwor
ICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKFVJVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3CistIChOU1VSTCAqKV9jb21taXR0ZWRVUkwKIHsKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCi0gICAgaWYgKFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2NyZWVuXSkK
LSAgICAgICAgcmV0dXJuIFtfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNl
aG9sZGVyXTsKLSNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gW05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpfcGFnZS0+cGFnZUxv
YWRTdGF0ZSgpLnVybCgpXTsKIH0KIAotLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRB
dFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikoX1dL
QWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sKKy0gKE5TU3RyaW5nICopX01JTUVUeXBlCiB7
Ci0gICAgYXV0byBpbmZvUmVxdWVzdCA9IFdlYktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJl
cXVlc3QoV2ViQ29yZTo6cm91bmRlZEludFBvaW50KHBvc2l0aW9uKSk7Ci0gICAgaW5mb1JlcXVl
c3QuaW5jbHVkZVNuYXBzaG90ID0gdHJ1ZTsKKyAgICBpZiAoX3BhZ2UtPm1haW5GcmFtZSgpKQor
ICAgICAgICByZXR1cm4gX3BhZ2UtPm1haW5GcmFtZSgpLT5taW1lVHlwZSgpOwogCi0gICAgW19j
b250ZW50VmlldyBkb0FmdGVyUG9zaXRpb25JbmZvcm1hdGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9j
ayA9IG1ha2VCbG9ja1B0cihibG9jayldIChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25B
dFBvc2l0aW9uIGluZm9ybWF0aW9uKSB7Ci0gICAgICAgIGNhcHR1cmVkQmxvY2soW19XS0FjdGl2
YXRlZEVsZW1lbnRJbmZvIGFjdGl2YXRlZEVsZW1lbnRJbmZvV2l0aEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uOmluZm9ybWF0aW9uIHVzZXJJbmZvOm5pbF0pOwotICAgIH0gZm9yUmVx
dWVzdDppbmZvUmVxdWVzdF07CisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQ0dSZWN0KV9jb250
ZW50VmlzaWJsZVJlY3QKKy0gKE5TU3RyaW5nICopX3VzZXJBZ2VudAogewotICAgIHJldHVybiBb
c2VsZiBjb252ZXJ0UmVjdDpbc2VsZiBib3VuZHNdIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVu
dFZpZXddOworICAgIHJldHVybiBfcGFnZS0+dXNlckFnZW50KCk7CiB9CiAKLS0gKENHUG9pbnQp
X2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClwb2ludAorLSAoTlNTdHJp
bmcgKilfYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50CiB7Ci0gICAgcmV0dXJuIFtzZWxmIGNv
bnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXddOworICAg
IHJldHVybiBfcGFnZS0+YXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KCk7CiB9CiAKLS0gKENH
UG9pbnQpX2NvbnZlcnRQb2ludEZyb21WaWV3VG9Db250ZW50czooQ0dQb2ludClwb2ludAorLSAo
dm9pZClfc2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OihOU1N0cmluZyAqKWFwcGxpY2F0
aW9uTmFtZUZvclVzZXJBZ2VudAogewotICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UG9pbnQ6cG9p
bnQgdG9WaWV3OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107CisgICAgX3BhZ2UtPnNldEFwcGxp
Y2F0aW9uTmFtZUZvclVzZXJBZ2VudChhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQpOworICAg
IF9wYWdlLT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JEZXNrdG9wVXNlckFnZW50KGFwcGxpY2F0aW9u
TmFtZUZvclVzZXJBZ2VudCk7CiB9CiAKLS0gKHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVy
YWN0aW9uCistIChOU1N0cmluZyAqKV9jdXN0b21Vc2VyQWdlbnQKIHsKLSAgICAvLyBGb3Igc3Vi
Y2xhc3NlcyB0byBvdmVycmlkZS4KKyAgICByZXR1cm4gc2VsZi5jdXN0b21Vc2VyQWdlbnQ7CiB9
CiAKLS0gKHZvaWQpZGlkRW5kRm9ybUNvbnRyb2xJbnRlcmFjdGlvbgorLSAodm9pZClfc2V0Q3Vz
dG9tVXNlckFnZW50OihOU1N0cmluZyAqKWN1c3RvbVVzZXJBZ2VudAogewotICAgIC8vIEZvciBz
dWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorICAgIHNlbGYuY3VzdG9tVXNlckFnZW50ID0gY3VzdG9t
VXNlckFnZW50OwogfQogCi0tIChDR1JlY3QpX3VpVGV4dENhcmV0UmVjdAorLSAodm9pZClfc2V0
VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDooQk9PTCl1c2VyQ29udGVudEV4dGVuc2lvbnNF
bmFibGVkCiB7Ci0gICAgLy8gRm9yY2UgdGhlIHNlbGVjdGlvbiB2aWV3IHRvIHVwZGF0ZSBpZiBu
ZWVkZWQuCi0gICAgW19jb250ZW50VmlldyBfdXBkYXRlQ2hhbmdlZFNlbGVjdGlvbl07Ci0KLSAg
ICByZXR1cm4gW1tfY29udGVudFZpZXcgdmFsdWVGb3JLZXlQYXRoOkAiaW50ZXJhY3Rpb25Bc3Np
c3RhbnQuc2VsZWN0aW9uVmlldy5zZWxlY3Rpb24uY2FyZXRSZWN0Il0gQ0dSZWN0VmFsdWVdOwor
ICAgIC8vIFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4K
IH0KIAotLSAodm9pZClfYWNjZXNzaWJpbGl0eVJldHJpZXZlUmVjdHNBdFNlbGVjdGlvbk9mZnNl
dDooTlNJbnRlZ2VyKW9mZnNldCB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShOU0FycmF5PE5TVmFsdWUgKj4gKnJlY3RzKSljb21wbGV0aW9uSGFu
ZGxlcgorLSAoQk9PTClfdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZAogewotICAgIFtfY29u
dGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6b2Zm
c2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25SZWN0cykgewotICAgICAgICBpZiAoIWNh
cHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1
dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsKLSAgICAgICAgZm9yIChhdXRvJiBzZWxl
Y3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCi0gICAgICAgICAgICBbcmVjdFZhbHVlcyBhZGRP
YmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNlbGVjdGlvblJlY3QucmVjdCgpXV07Ci0g
ICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIocmVjdFZhbHVlcy5nZXQoKSk7Ci0gICAg
fV07CisgICAgLy8gVGhpcyBpcyBrZXB0IGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIGlP
UyA5LgorICAgIHJldHVybiB0cnVlOwogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5U3RvcmVT
ZWxlY3Rpb24KKy0gKHBpZF90KV93ZWJQcm9jZXNzSWRlbnRpZmllcgogewotICAgIFtfY29udGVu
dFZpZXcgX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbl07Ci19CisgICAgaWYgKCFbc2VsZiBf
aXNWYWxpZF0pCisgICAgICAgIHJldHVybiAwOwogCi0tICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xl
YXJTZWxlY3Rpb24KLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxl
Y3Rpb25dOworICAgIHJldHVybiBfcGFnZS0+cHJvY2Vzc0lkZW50aWZpZXIoKTsKIH0KIAotLSAo
Qk9PTClfY29udGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyCistIChwaWRfdClfcHJvdmlzaW9uYWxX
ZWJQcm9jZXNzSWRlbnRpZmllcgogewotICAgIHJldHVybiBzZWxmLl9jdXJyZW50Q29udGVudFZp
ZXcuaXNGaXJzdFJlc3BvbmRlcjsKLX0KKyAgICBpZiAoIVtzZWxmIF9pc1ZhbGlkXSkKKyAgICAg
ICAgcmV0dXJuIDA7CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGF1dG8q
IHByb3Zpc2lvbmFsUGFnZSA9IF9wYWdlLT5wcm92aXNpb25hbFBhZ2VQcm94eSgpOworICAgIGlm
ICghcHJvdmlzaW9uYWxQYWdlKQorICAgICAgICByZXR1cm4gMDsKIAotLSAoX1dLSW5zcGVjdG9y
ICopX2luc3BlY3RvcgotewotICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+aW5zcGVj
dG9yKCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyKCppbnNwZWN0b3IpOwotICAgIHJldHVybiBu
aWw7CisgICAgcmV0dXJuIHByb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NJZGVudGlm
aWVyKCk7CiB9CiAKLS0gKF9XS0ZyYW1lSGFuZGxlICopX21haW5GcmFtZQorLSAodm9pZClfa2ls
bFdlYkNvbnRlbnRQcm9jZXNzCiB7Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gX3BhZ2UtPm1haW5G
cmFtZSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcihBUEk6OkZyYW1lSGFuZGxlOjpjcmVhdGUo
ZnJhbWUtPmZyYW1lSUQoKSkpOwotICAgIHJldHVybiBuaWw7CisgICAgaWYgKCFbc2VsZiBfaXNW
YWxpZF0pCisgICAgICAgIHJldHVybjsKKworICAgIF9wYWdlLT5wcm9jZXNzKCkudGVybWluYXRl
KCk7CiB9CiAKLS0gKEJPT0wpX2lzRWRpdGFibGUKKyNpZiBQTEFURk9STShNQUMpCistIChOU1Zp
ZXcgKilfc2FmZUJyb3dzaW5nV2FybmluZwogewotICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+
aXNFZGl0YWJsZSgpOworICAgIHJldHVybiBfaW1wbC0+c2FmZUJyb3dzaW5nV2FybmluZygpOwog
fQotCi0tICh2b2lkKV9zZXRFZGl0YWJsZTooQk9PTCllZGl0YWJsZQorI2Vsc2UKKy0gKFVJVmll
dyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5nCiB7Ci0gICAgYm9vbCB3YXNFZGl0YWJsZSA9IF9wYWdl
LT5pc0VkaXRhYmxlKCk7Ci0gICAgX3BhZ2UtPnNldEVkaXRhYmxlKGVkaXRhYmxlKTsKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgaWYgKGVkaXRhYmxlKQotICAgICAgICBfaW1wbC0+ZGlkQmVjb21l
RWRpdGFibGUoKTsKKyAgICByZXR1cm4gX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCk7Cit9CiAj
ZW5kaWYKIAotICAgIGlmICh3YXNFZGl0YWJsZSA9PSBlZGl0YWJsZSkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBbX2NvbnRlbnRWaWV3IF9kaWRDaGFu
Z2VXZWJWaWV3RWRpdGFiaWxpdHldOwotI2VuZGlmCistIChXS05hdmlnYXRpb24gKilfcmVsb2Fk
V2l0aG91dENvbnRlbnRCbG9ja2VycworeworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5yZWxv
YWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVudEJsb2NrZXJzKSk7CiB9CiAK
LS0gKHZvaWQpX2V4ZWN1dGVFZGl0Q29tbWFuZDooTlNTdHJpbmcgKiljb21tYW5kIGFyZ3VtZW50
OihOU1N0cmluZyAqKWFyZ3VtZW50IGNvbXBsZXRpb246KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRp
b24KKy0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRFeHBpcmVkT25seQogewotICAgIF9wYWdlLT5l
eGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25C
bG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVy
cm9yIGVycm9yKSB7Ci0gICAgICAgIGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAg
ICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tC
YXNlOjpFcnJvcjo6Tm9uZSk7Ci0gICAgfSk7CisgICAgcmV0dXJuIHdyYXBwZXIoX3BhZ2UtPnJl
bG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5KSk7CiB9CiAKLS0gKGlkIDxf
V0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+KV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUKKy0g
KHZvaWQpX2tpbGxXZWJDb250ZW50UHJvY2Vzc0FuZFJlc2V0U3RhdGUKIHsKLSAgICByZXR1cm4g
X3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKKyAgICBSZWY8V2Vi
S2l0OjpXZWJQcm9jZXNzUHJveHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShfcGFnZS0+cHJvY2Vz
cygpKTsKKyAgICBwcm90ZWN0ZWRQcm9jZXNzUHJveHktPnJlcXVlc3RUZXJtaW5hdGlvbihXZWJL
aXQ6OlByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOworCisgICAg
aWYgKGF1dG8qIHByb3Zpc2lvbmFsUGFnZVByb3h5ID0gX3BhZ2UtPnByb3Zpc2lvbmFsUGFnZVBy
b3h5KCkpIHsKKyAgICAgICAgUmVmPFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0ZWRQ
cm9jZXNzUHJveHkocHJvdmlzaW9uYWxQYWdlUHJveHktPnByb2Nlc3MoKSk7CisgICAgICAgIHBy
b3RlY3RlZFByb2Nlc3NQcm94eS0+cmVxdWVzdFRlcm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rl
cm1pbmF0aW9uUmVhc29uOjpSZXF1ZXN0ZWRCeUNsaWVudCk7CisgICAgfQogfQogCi0tICh2b2lk
KV9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6KGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGU+KWRlbGVnYXRlCistIChDR1JlY3QpX2NvbnZlcnRSZWN0RnJvbVJvb3RWaWV3Q29vcmRp
bmF0ZXM6KENHUmVjdClyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzCiB7Ci0gICAgX3RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZSA9IGRlbGVnYXRlOworICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUg
ZWFzaWVyIHRvIHRhbGsgYWJvdXQgV0tXZWJWaWV3IGNvb3JkaW5hdGVzIGluIGEgY29uc2lzdGVu
dCBhbmQgY3Jvc3MtcGxhdGZvcm0gd2F5LgorICAgIC8vIEN1cnJlbnRseSwgbmVpdGhlciAicm9v
dCB2aWV3IiBub3IgIndpbmRvdyIgbWVhbiAiV0tXZWJWaWV3IGNvb3JkaW5hdGVzIiBvbiBib3Ro
IHBsYXRmb3Jtcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzNjQ5IGFuZCBy
ZWxhdGVkIGJ1Z3MuCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICByZXR1cm4gW3NlbGYg
Y29udmVydFJlY3Q6cmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyBmcm9tVmlldzpfY29udGVudFZp
ZXcuZ2V0KCldOworI2Vsc2UKKyAgICByZXR1cm4gcmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsK
KyNlbmRpZgogfQogCi0tICh2b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3Vy
YXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBj
b21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKENHUmVjdClfY29udmVy
dFJlY3RUb1Jvb3RWaWV3Q29vcmRpbmF0ZXM6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRpbmF0
ZXMKIHsKLSAgICB1c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzIHRvVmll
dzpfY29udGVudFZpZXcuZ2V0KCldOworI2Vsc2UKKyAgICByZXR1cm4gcmVjdEluV2ViVmlld0Nv
b3JkaW5hdGVzOworI2VuZGlmCit9CiAKLSAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUgfHwgIV9wYWdlKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CistICh2b2lkKV9y
ZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0SW5XZWJWaWV3Q29vcmRp
bmF0ZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250
ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihAW10pOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2VuZGlmCiAKLSAg
ICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1
bGU+IGV4Y2x1c2lvblJ1bGVzOwotICAgIGlmIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGZv
ciAoX1dLVGV4dE1hbmlwdWxhdGlvbkV4Y2x1c2lvblJ1bGUgKndrUnVsZSBpbiBjb25maWd1cmF0
aW9uLmV4Y2x1c2lvblJ1bGVzKSB7Ci0gICAgICAgICAgICBhdXRvIHR5cGUgPSB3a1J1bGUuaXNF
eGNsdXNpb24gPyBFeGNsdXNpb25SdWxlOjpUeXBlOjpFeGNsdWRlIDogRXhjbHVzaW9uUnVsZTo6
VHlwZTo6SW5jbHVkZTsKLSAgICAgICAgICAgIGlmICh3a1J1bGUuYXR0cmlidXRlTmFtZSkKLSAg
ICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6
OkF0dHJpYnV0ZVJ1bGUgeyB3a1J1bGUuYXR0cmlidXRlTmFtZSwgd2tSdWxlLmF0dHJpYnV0ZVZh
bHVlIH0gfSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh3a1J1bGUuY2xhc3NOYW1lKQotICAgICAg
ICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6Q2xh
c3NSdWxlIHsgd2tSdWxlLmNsYXNzTmFtZSB9IH0pOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGV4Y2x1c2lvblJ1bGVzLmFwcGVuZCh7dHlwZSwgRXhjbHVzaW9uUnVsZTo6RWxl
bWVudFJ1bGUgeyB3a1J1bGUuZWxlbWVudE5hbWUgfSB9KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIF9wYWdlLT5zdGFydFRleHRNYW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1bGVzLCBbd2Vha1Nl
bGYgPSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpXSAoV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKLSAgICAgICAgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tl
bj4mIHRva2VucykgewotICAgICAgICBpZiAoIXdlYWtTZWxmKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGF1dG8gcmV0YWluZWRTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0gICAgICAg
IGF1dG8gZGVsZWdhdGUgPSBbcmV0YWluZWRTZWxmIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGVd
OwotICAgICAgICBpZiAoIWRlbGVnYXRlKQotICAgICAgICAgICAgcmV0dXJuOworICAgIENHUmVj
dCByZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gW3NlbGYgX2NvbnZlcnRSZWN0VG9Sb290Vmll
d0Nvb3JkaW5hdGVzOnJlY3RJbldlYlZpZXdDb29yZGluYXRlc107CisgICAgYXV0byB3ZWFrU2Vs
ZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZik7CisgICAgX3BhZ2UtPnRleHRJbnB1dENv
bnRleHRzSW5SZWN0KHJlY3RJblJvb3RWaWV3Q29vcmRpbmF0ZXMsIFt3ZWFrU2VsZiwgY2FwdHVy
ZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChj
b25zdCBWZWN0b3I8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+JiBjb250ZXh0cykgeworICAgICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGVsZW1lbnRzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmNvbnRleHRzLnNpemUoKV0pOwogCi0gICAg
ICAgIE5TTXV0YWJsZUFycmF5ICp3a1Rva2VucyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhD
YXBhY2l0eTp0b2tlbnMuc2l6ZSgpXTsKLSAgICAgICAgZm9yIChhdXRvJiB0b2tlbiA6IHRva2Vu
cykgewotICAgICAgICAgICAgYXV0byB3a1Rva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbiBhbGxvY10gaW5pdF0pOwotICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRp
ZmllcjpTdHJpbmc6Om51bWJlcih0b2tlbi5pZGVudGlmaWVyLnRvVUludDY0KCkpXTsKLSAgICAg
ICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVudF07Ci0gICAgICAgICAgICBb
d2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVkXTsKLSAgICAgICAgICAgIFt3a1Rv
a2VucyBhZGRPYmplY3Q6d2tUb2tlbi5nZXQoKV07CisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9
IHdlYWtTZWxmLmdldCgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRleHQgOiBjb250
ZXh0cykgeworICAgICAgICAgICAgV2ViQ29yZTo6RWxlbWVudENvbnRleHQgY29udGV4dFdpdGhX
ZWJWaWV3Qm91bmRpbmdSZWN0ID0gY29udGV4dDsKKyAgICAgICAgICAgIGNvbnRleHRXaXRoV2Vi
Vmlld0JvdW5kaW5nUmVjdC5ib3VuZGluZ1JlY3QgPSBbc3Ryb25nU2VsZiBfY29udmVydFJlY3RG
cm9tUm9vdFZpZXdDb29yZGluYXRlczpjb250ZXh0LmJvdW5kaW5nUmVjdF07CisgICAgICAgICAg
ICBbZWxlbWVudHMgYWRkT2JqZWN0OmFkb3B0TlMoW1tfV0tUZXh0SW5wdXRDb250ZXh0IGFsbG9j
XSBfaW5pdFdpdGhUZXh0SW5wdXRDb250ZXh0OmNvbnRleHRXaXRoV2ViVmlld0JvdW5kaW5nUmVj
dF0pLmdldCgpXTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tf
V0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOlN0cmluZzo6
bnVtYmVyKGl0ZW1JRC50b1VJbnQ2NCgpKSB0b2tlbnM6d2tUb2tlbnNdKTsKLSAgICAgICAgW2Rl
bGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQoKSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlv
bkl0ZW06aXRlbS5nZXQoKV07Ci0gICAgfSwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFr
ZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgewotICAgICAgICBjYXB0dXJlZENvbXBs
ZXRpb25CbG9jaygpOworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKGVsZW1lbnRz
LmdldCgpKTsKICAgICB9KTsKIH0KIAotLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9u
OihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlvbjoodm9pZCheKShCT09M
IHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRl
eHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKil0ZXh0SW5wdXRDb250ZXh0IGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgdXNpbmcgTWFuaXB1
bGF0aW9uUmVzdWx0ID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblJlc3VsdDsKLQotICAgIGlmICghX3BhZ2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihOTyk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKIAot
ICAgIGF1dG8gaXRlbUlEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViQ29yZTo6VGV4dE1hbmlw
dWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyVHlwZT4oU3RyaW5nKGl0ZW0uaWRlbnRp
ZmllcikudG9VSW50NjQoKSk7CisgICAgYXV0byB3ZWJDb250ZXh0ID0gW3RleHRJbnB1dENvbnRl
eHQgX3RleHRJbnB1dENvbnRleHRdOworICAgIGlmICh3ZWJDb250ZXh0LndlYlBhZ2VJZGVudGlm
aWVyICE9IF9wYWdlLT53ZWJQYWdlSUQoKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5T
SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlRoZSBwcm92aWRlZCBfV0tUZXh0SW5w
dXRDb250ZXh0IHdhcyBub3QgY3JlYXRlZCBieSB0aGlzIFdLV2ViVmlldy4iXTsKIAotICAgIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW4+IHRva2VuczsKLSAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqd2tUb2tlbiBp
biBpdGVtLnRva2VucykgewotICAgICAgICBhdXRvIHRva2VuSUQgPSBtYWtlT2JqZWN0SWRlbnRp
ZmllcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6VG9rZW5JZGVudGlmaWVy
VHlwZT4oU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllcikudG9VSW50NjQoKSk7Ci0gICAgICAgIHRv
a2Vucy5hcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuIHsgdG9rZW5JRCwgd2tUb2tlbi5jb250ZW50IH0pOwotICAgIH0KKyAgICBbc2Vs
ZiBiZWNvbWVGaXJzdFJlc3BvbmRlcl07CiAKLSAgICBfcGFnZS0+Y29tcGxldGVUZXh0TWFuaXB1
bGF0aW9uKGl0ZW1JRCwgdG9rZW5zLCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoTWFuaXB1bGF0aW9uUmVzdWx0IHJlc3VsdCkgewot
ICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jayhyZXN1bHQgPT0gTWFuaXB1bGF0aW9uUmVz
dWx0OjpTdWNjZXNzKTsKKyAgICBfcGFnZS0+Zm9jdXNUZXh0SW5wdXRDb250ZXh0KHdlYkNvbnRl
eHQsIFtjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKV0oYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRs
ZXIoc3VjY2Vzcyk7CiAgICAgfSk7CiB9Ci0tICh2b2lkKV90YWtlRmluZFN0cmluZ0Zyb21TZWxl
Y3Rpb246KGlkKXNlbmRlcgotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbc2VsZiB0YWtlRmlu
ZFN0cmluZ0Zyb21TZWxlY3Rpb246c2VuZGVyXTsKLSNlbHNlCi0gICAgX3BhZ2UtPmV4ZWN1dGVF
ZGl0Q29tbWFuZCgiVGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uIl9zKTsKLSNlbmRpZgotfQog
Ci0rIChOU1N0cmluZyAqKV9zdHJpbmdGb3JGaW5kCistICh2b2lkKV90YWtlUERGU25hcHNob3RX
aXRoQ29uZmlndXJhdGlvbjooV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZp
Z3VyYXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICop
KWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6c3RyaW5nRm9yRmluZCgp
OworICAgIFdLUERGQ29uZmlndXJhdGlvbiAqcGRmQ29uZmlndXJhdGlvbiA9IG5pbDsKKyAgICBp
ZiAoc25hcHNob3RDb25maWd1cmF0aW9uKSB7CisgICAgICAgIHBkZkNvbmZpZ3VyYXRpb24gPSBb
W1tXS1BERkNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
cGRmQ29uZmlndXJhdGlvbi5yZWN0ID0gc25hcHNob3RDb25maWd1cmF0aW9uLnJlY3Q7CisgICAg
fQorCisgICAgW3NlbGYgY3JlYXRlUERGV2l0aENvbmZpZ3VyYXRpb246cGRmQ29uZmlndXJhdGlv
biBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLSsgKHZvaWQpX3Nl
dFN0cmluZ0ZvckZpbmQ6KE5TU3RyaW5nICopZmluZFN0cmluZworI2lmIFBMQVRGT1JNKE1BQykK
Ky0gKHZvaWQpX3NldFNob3VsZFN1cHByZXNzRmlyc3RSZXNwb25kZXJDaGFuZ2VzOihCT09MKXNo
b3VsZFN1cHByZXNzCiB7Ci0gICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5kKGZpbmRTdHJp
bmcpOworICAgIF9pbXBsLT5zZXRTaG91bGRTdXBwcmVzc0ZpcnN0UmVzcG9uZGVyQ2hhbmdlcyhz
aG91bGRTdXBwcmVzcyk7CiB9CisjZW5kaWYKIAotLSAoX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkg
KilfcmVtb3RlT2JqZWN0UmVnaXN0cnkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorLSAodm9p
ZCAoXikodm9pZCkpX3JldGFpbkFjdGl2ZUZvY3VzZWRTdGF0ZQogewotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICByZXR1cm4gX2ltcGwtPnJlbW90ZU9iamVjdFJlZ2lzdHJ5KCk7Ci0jZWxzZQotICAg
IGlmICghX3JlbW90ZU9iamVjdFJlZ2lzdHJ5KSB7Ci0gICAgICAgIF9yZW1vdGVPYmplY3RSZWdp
c3RyeSA9IGFkb3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRo
V2ViUGFnZVByb3h5OipfcGFnZV0pOwotICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBfcGFnZS0+aWRlbnRpZmllcigpLCBbX3JlbW90ZU9iamVj
dFJlZ2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7Ci0gICAgfQorICAgICsrX2FjdGl2ZUZv
Y3VzZWRTdGF0ZVJldGFpbkNvdW50OwogCi0gICAgcmV0dXJuIF9yZW1vdGVPYmplY3RSZWdpc3Ry
eS5nZXQoKTsKLSNlbmRpZgorICAgIC8vIEZJWE1FOiBVc2Ugc29tZXRoaW5nIGxpa2UgQ29tcGxl
dGlvbkhhbmRsZXJDYWxsQ2hlY2tlciB0byBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgYmxvY2sg
aXMgY2FsbGVkIGJlZm9yZSBpdCdzIHJlbGVhc2VkLgorICAgIHJldHVybiBbW1tzZWxmXSB7Cisg
ICAgICAgIC0tX2FjdGl2ZUZvY3VzZWRTdGF0ZVJldGFpbkNvdW50OworICAgIH0gY29weV0gYXV0
b3JlbGVhc2VdOwogfQogCi0tIChXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqKV9oYW5kbGUKKy0g
KHZvaWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmluZ0ZvcndhcmQ6KEJP
T0wpc2VsZWN0aW5nRm9yd2FyZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCBkaWRC
ZWNvbWVGaXJzdFJlc3BvbmRlcikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4gW1tb
V0tCcm93c2luZ0NvbnRleHRIYW5kbGUgYWxsb2NdIF9pbml0V2l0aFBhZ2VQcm94eToqX3BhZ2Vd
IGF1dG9yZWxlYXNlXTsKLX0KKyAgICB0eXBlb2YoY29tcGxldGlvbkhhbmRsZXIpIGNvbXBsZXRp
b25IYW5kbGVyQ29weSA9IG5pbDsKKyAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2NrX2NvcHkoY29tcGxldGlvbkhhbmRsZXIpOwog
Ci0tIChfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cylfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVz
c0V2ZW50cwotewotICAgIHJldHVybiBfb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czsK
LX0KKyAgICBbX2NvbnRlbnRWaWV3IF9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rpb25N
b3ZpbmdGb3J3YXJkOnNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6W2NvbXBsZXRp
b25IYW5kbGVyQ29weV0oQk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRlcikgeworICAgICAgICBp
ZiAoIWNvbXBsZXRpb25IYW5kbGVyQ29weSkKKyAgICAgICAgICAgIHJldHVybjsKIAotLSAoaWQg
PFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZT4pX2hpc3RvcnlEZWxlZ2F0ZQotewotICAgIHJldHVy
biBfbmF2aWdhdGlvblN0YXRlLT5oaXN0b3J5RGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgpOworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkoZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpOworICAg
ICAgICBCbG9ja19yZWxlYXNlKGNvbXBsZXRpb25IYW5kbGVyQ29weSk7CisgICAgfV07CiB9CiAK
LS0gKHZvaWQpX3NldEhpc3RvcnlEZWxlZ2F0ZTooaWQgPFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0
ZT4paGlzdG9yeURlbGVnYXRlCistIChpZClfc25hcHNob3RMYXllckNvbnRlbnRzRm9yQmFja0Zv
cndhcmRMaXN0SXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbQogewotICAgIF9wYWdl
LT5zZXRIaXN0b3J5Q2xpZW50KF9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUhpc3RvcnlDbGllbnQo
KSk7Ci0gICAgX25hdmlnYXRpb25TdGF0ZS0+c2V0SGlzdG9yeURlbGVnYXRlKGhpc3RvcnlEZWxl
Z2F0ZSk7Ci19CisgICAgaWYgKF9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgp
ID09ICZpdGVtLl9pdGVtKQorICAgICAgICBfcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90
KCpfcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkuY3VycmVudEl0ZW0oKSk7CiAKLS0gKHZvaWQpX3Vw
ZGF0ZU1lZGlhUGxheWJhY2tDb250cm9sc01hbmFnZXIKLXsKLSNpZiBIQVZFKFRPVUNIX0JBUikg
JiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIF9pbXBsLT51cGRh
dGVNZWRpYVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyKCk7Ci0jZW5kaWYKKyAgICBpZiAoYXV0byog
dmlld1NuYXBzaG90ID0gaXRlbS5faXRlbS5zbmFwc2hvdCgpKQorICAgICAgICByZXR1cm4gdmll
d1NuYXBzaG90LT5hc0xheWVyQ29udGVudHMoKTsKKworICAgIHJldHVybiBuaWw7CiB9CiAKLS0g
KEJPT0wpX2NhblRvZ2dsZVBpY3R1cmVJblBpY3R1cmUKKy0gKE5TQXJyYXkgKilfZGF0YURldGVj
dGlvblJlc3VsdHMKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikKLSAgICByZXR1cm4gX2ltcGwtPmNh
blRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKKyNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisg
ICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2RhdGFEZXRlY3Rpb25SZXN1bHRzXTsKICNlbHNlCi0g
ICAgcmV0dXJuIE5POworICAgIHJldHVybiBuaWw7CiAjZW5kaWYKIH0KIAotLSAoQk9PTClfaXNQ
aWN0dXJlSW5QaWN0dXJlQWN0aXZlCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVTcGVh
a1NlbGVjdGlvbkNvbnRlbnQKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikgJiYgRU5BQkxFKFdFQl9Q
TEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIHJldHVybiBfaW1wbC0+aXNQaWN0dXJlSW5Q
aWN0dXJlQWN0aXZlKCk7Ci0jZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgorICAgIFtfY29u
dGVudFZpZXcgYWNjZXNzaWJpbGl0eVJldHJpZXZlU3BlYWtTZWxlY3Rpb25Db250ZW50XTsKIH0K
IAotLSAodm9pZClfdG9nZ2xlUGljdHVyZUluUGljdHVyZQorLy8gVGhpcyBtZXRob2QgaXMgZm9y
IHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCisvLyBDdXJyZW50bHkgaXQncyBvbmx5IGluIFRlc3RS
dW5uZXJXS1dlYlZpZXcuCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxlY3Rp
b25Db250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikgJiYg
RU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQotICAgIF9pbXBsLT50b2dnbGVQ
aWN0dXJlSW5QaWN0dXJlKCk7Ci0jZW5kaWYKIH0KIAotLSAodm9pZClfY2xvc2VBbGxNZWRpYVBy
ZXNlbnRhdGlvbnMKKy0gKFVJVGV4dElucHV0QXNzaXN0YW50SXRlbSAqKWlucHV0QXNzaXN0YW50
SXRlbQogewotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBpZiAoYXV0byB2aWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyID0gX3BhZ2UtPnZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKSkgewotICAg
ICAgICB2aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLT5mb3JFYWNoU2Vzc2lvbihbXSAoYXV0byYgbW9k
ZWwsIGF1dG8mIGludGVyZmFjZSkgewotICAgICAgICAgICAgbW9kZWwucmVxdWVzdEZ1bGxzY3Jl
ZW5Nb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZU5vbmUpOwotICAgICAgICB9KTsKLSAgICB9CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5w
dXRBc3Npc3RhbnRJdGVtRm9yV2ViVmlld107Cit9CiAKLSAgICBpZiAoYXV0byBmdWxsU2NyZWVu
TWFuYWdlciA9IF9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpOyBmdWxsU2NyZWVuTWFuYWdlciAm
JiBmdWxsU2NyZWVuTWFuYWdlci0+aXNGdWxsU2NyZWVuKCkpCi0gICAgICAgIGZ1bGxTY3JlZW5N
YW5hZ2VyLT5jbG9zZSgpOwogI2VuZGlmCi19CiAKLS0gKHZvaWQpX3N0b3BNZWRpYUNhcHR1cmUK
Ky0gKE5TRGF0YSAqKV9zZXNzaW9uU3RhdGVEYXRhCiB7Ci0gICAgX3BhZ2UtPnN0b3BNZWRpYUNh
cHR1cmUoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IHVzZSB0aGUgbGVnYWN5IHNl
c3Npb24gc3RhdGUgZW5jb2Rlci4KKyAgICByZXR1cm4gd3JhcHBlcihXZWJLaXQ6OmVuY29kZUxl
Z2FjeVNlc3Npb25TdGF0ZShfcGFnZS0+c2Vzc2lvblN0YXRlKCkpKTsKIH0KIAotLSAodm9pZClf
c3RvcEFsbE1lZGlhUGxheWJhY2sKKy0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGUK
IHsKLSAgICBfcGFnZS0+c3RvcEFsbE1lZGlhUGxheWJhY2soKTsKKyAgICByZXR1cm4gW1tbX1dL
U2Vzc2lvblN0YXRlIGFsbG9jXSBfaW5pdFdpdGhTZXNzaW9uU3RhdGU6X3BhZ2UtPnNlc3Npb25T
dGF0ZSgpXSBhdXRvcmVsZWFzZV07CiB9CiAKLS0gKHZvaWQpX3N1c3BlbmRBbGxNZWRpYVBsYXli
YWNrCistIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlV2l0aEZpbHRlcjooQk9PTCAo
XikoV0tCYWNrRm9yd2FyZExpc3RJdGVtICppdGVtKSlmaWx0ZXIKIHsKLSAgICBfcGFnZS0+c3Vz
cGVuZEFsbE1lZGlhUGxheWJhY2soKTsKLX0KKyAgICBXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzZXNz
aW9uU3RhdGUgPSBfcGFnZS0+c2Vzc2lvblN0YXRlKFtmaWx0ZXJdKFdlYktpdDo6V2ViQmFja0Zv
cndhcmRMaXN0SXRlbSYgaXRlbSkgeworICAgICAgICBpZiAoIWZpbHRlcikKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCi0tICh2b2lkKV9yZXN1bWVBbGxNZWRpYVBsYXliYWNrCi17Ci0gICAg
X3BhZ2UtPnJlc3VtZUFsbE1lZGlhUGxheWJhY2soKTsKKyAgICAgICAgcmV0dXJuIChib29sKWZp
bHRlcih3cmFwcGVyKGl0ZW0pKTsKKyAgICB9KTsKKworICAgIHJldHVybiBbW1tfV0tTZXNzaW9u
U3RhdGUgYWxsb2NdIF9pbml0V2l0aFNlc3Npb25TdGF0ZTpzZXNzaW9uU3RhdGVdIGF1dG9yZWxl
YXNlXTsKIH0KIAotLSAoTlNVUkwgKilfdW5yZWFjaGFibGVVUkwKKy0gKHZvaWQpX3Jlc3RvcmVG
cm9tU2Vzc2lvblN0YXRlRGF0YTooTlNEYXRhICopc2Vzc2lvblN0YXRlRGF0YQogewotICAgIHJl
dHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCku
dW5yZWFjaGFibGVVUkwoKV07CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCB1c2UgdGhl
IGxlZ2FjeSBzZXNzaW9uIHN0YXRlIGRlY29kZXIuCisgICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUg
c2Vzc2lvblN0YXRlOworICAgIGlmICghV2ViS2l0OjpkZWNvZGVMZWdhY3lTZXNzaW9uU3RhdGUo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlc3Npb25TdGF0ZURhdGEuYnl0ZXMpLCBzZXNz
aW9uU3RhdGVEYXRhLmxlbmd0aCwgc2Vzc2lvblN0YXRlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgX3BhZ2UtPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdURk1vdmUoc2Vzc2lvblN0YXRlKSwg
dHJ1ZSk7CiB9CiAKLS0gKE5TVVJMICopX21haW5GcmFtZVVSTAorLSAoV0tOYXZpZ2F0aW9uICop
X3Jlc3RvcmVTZXNzaW9uU3RhdGU6KF9XS1Nlc3Npb25TdGF0ZSAqKXNlc3Npb25TdGF0ZSBhbmRO
YXZpZ2F0ZTooQk9PTCluYXZpZ2F0ZQogewotICAgIGlmIChhdXRvKiBmcmFtZSA9IF9wYWdlLT5t
YWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lLT51cmwoKTsKLSAgICByZXR1cm4gbmls
OworICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5yZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShzZXNz
aW9uU3RhdGUgPyBzZXNzaW9uU3RhdGUtPl9zZXNzaW9uU3RhdGUgOiBXZWJLaXQ6OlNlc3Npb25T
dGF0ZSB7IH0sIG5hdmlnYXRlKSk7CiB9CiAKLS0gKHZvaWQpX2xvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgZm9yVW5yZWFj
aGFibGVVUkw6KE5TVVJMICopdW5yZWFjaGFibGVVUkwKKy0gKHZvaWQpX2Nsb3NlCiB7Ci0gICAg
TlNEYXRhICpkYXRhID0gW3N0cmluZyBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ107Ci0gICAgX3BhZ2UtPmxvYWRBbHRlcm5hdGVIVE1MKHsgc3RhdGljX2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KGRhdGEuYnl0ZXMpLCBkYXRhLmxlbmd0aCB9LCAiVVRGLTgiX3MsIGJhc2VVUkws
IHVucmVhY2hhYmxlVVJMKTsKKyAgICBfcGFnZS0+Y2xvc2UoKTsKIH0KIAotLSAoV0tOYXZpZ2F0
aW9uICopX2xvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVU
eXBlIGNoYXJhY3RlckVuY29kaW5nTmFtZTooTlNTdHJpbmcgKiljaGFyYWN0ZXJFbmNvZGluZ05h
bWUgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMIHVzZXJEYXRhOihpZCl1c2VyRGF0YQorLSAoX1dL
QXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOihOU1N0cmluZyAqKWZp
bGVuYW1lIGNvbnRlbnRUeXBlOihOU1N0cmluZyAqKWNvbnRlbnRUeXBlIGRhdGE6KE5TRGF0YSAq
KWRhdGEgb3B0aW9uczooX1dLQXR0YWNobWVudERpc3BsYXlPcHRpb25zICopb3B0aW9ucyBjb21w
bGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICBy
ZXR1cm4gd3JhcHBlcihfcGFnZS0+bG9hZERhdGEoeyBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YS5ieXRlcyksIGRhdGEubGVuZ3RoIH0sIE1JTUVUeXBlLCBjaGFyYWN0ZXJFbmNvZGlu
Z05hbWUsIGJhc2VVUkwuYWJzb2x1dGVTdHJpbmcsIFdlYktpdDo6T2JqQ09iamVjdEdyYXBoOjpj
cmVhdGUodXNlckRhdGEpLnB0cigpKSk7CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbnMpOworICAg
IGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJl
Z3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdKTsKKyAgICBpZiAoZmlsZW5hbWUpCisgICAgICAg
IFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CisgICAgcmV0dXJu
IFtzZWxmIF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgp
IGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRpb246Y29tcGxldGlvbkhhbmRsZXJdOwog
fQogCi0tIChXS05hdmlnYXRpb24gKilfbG9hZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXVl
c3Qgc2hvdWxkT3BlbkV4dGVybmFsVVJMczooQk9PTClzaG91bGRPcGVuRXh0ZXJuYWxVUkxzCist
IChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KE5TRmls
ZVdyYXBwZXIgKilmaWxlV3JhcHBlciBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlw
ZSBvcHRpb25zOihfV0tBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgKilvcHRpb25zIGNvbXBsZXRp
b246KHZvaWQoXikoQk9PTCBzdWNjZXNzKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHJldHVy
biB3cmFwcGVyKF9wYWdlLT5sb2FkUmVxdWVzdChyZXF1ZXN0LCBzaG91bGRPcGVuRXh0ZXJuYWxV
UkxzID8gV2ViQ29yZTo6U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkQWxsb3cg
OiBXZWJDb3JlOjpTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGROb3RBbGxvdykp
OworICAgIFVOVVNFRF9QQVJBTShvcHRpb25zKTsKKyAgICByZXR1cm4gW3NlbGYgX2luc2VydEF0
dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIgY29udGVudFR5cGU6Y29udGVudFR5
cGUgY29tcGxldGlvbjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0gKE5TQXJyYXkgKilfY2Vy
dGlmaWNhdGVDaGFpbgorLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRBdHRhY2htZW50V2l0aEZp
bGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29udGVudFR5cGU6KE5TU3Ry
aW5nICopY29udGVudFR5cGUgY29tcGxldGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0gICAgaWYgKFdlYktpdDo6V2ViRnJhbWVQcm94eSogbWFpbkZyYW1l
ID0gX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5jZXJ0aWZp
Y2F0ZUluZm8oKSA/IChfX2JyaWRnZSBOU0FycmF5ICopbWFpbkZyYW1lLT5jZXJ0aWZpY2F0ZUlu
Zm8oKS0+Y2VydGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVDaGFpbigpIDogbmlsOworI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgYXV0byBpZGVudGlmaWVyID0gY3JlYXRlQ2Fu
b25pY2FsVVVJRFN0cmluZygpOworICAgIGF1dG8gYXR0YWNobWVudCA9IEFQSTo6QXR0YWNobWVu
dDo6Y3JlYXRlKGlkZW50aWZpZXIsICpfcGFnZSk7CisgICAgYXR0YWNobWVudC0+c2V0RmlsZVdy
YXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZShmaWxlV3JhcHBlciwgY29udGVudFR5cGUpOworICAg
IF9wYWdlLT5pbnNlcnRBdHRhY2htZW50KGF0dGFjaG1lbnQuY29weVJlZigpLCBbY2FwdHVyZWRI
YW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYktpdDo6Q2FsbGJh
Y2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgICAgICBpZiAoY2FwdHVyZWRIYW5kbGVyKQorICAg
ICAgICAgICAgY2FwdHVyZWRIYW5kbGVyKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpF
cnJvcjo6Tm9uZSk7CisgICAgfSk7CiAKKyAgICByZXR1cm4gd3JhcHBlcihhdHRhY2htZW50KTsK
KyNlbHNlCiAgICAgcmV0dXJuIG5pbDsKKyNlbmRpZgogfQogCi0tIChOU1VSTCAqKV9jb21taXR0
ZWRVUkwKKy0gKF9XS0F0dGFjaG1lbnQgKilfYXR0YWNobWVudEZvcklkZW50aWZpZXI6KE5TU3Ry
aW5nICopaWRlbnRpZmllcgogewotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3Ry
aW5nOl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCldOworI2lmIEVOQUJMRShBVFRBQ0hNRU5U
X0VMRU1FTlQpCisgICAgaWYgKGF1dG8gYXR0YWNobWVudCA9IF9wYWdlLT5hdHRhY2htZW50Rm9y
SWRlbnRpZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIoYXR0YWNobWVu
dCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmlsOwogfQogCi0tIChOU1N0cmluZyAqKV9NSU1FVHlw
ZQorLSAodm9pZClfc2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZVdpdGhBbHBoYTooZG91
YmxlKWFscGhhIGJldGE6KGRvdWJsZSliZXRhIGdhbW1hOihkb3VibGUpZ2FtbWEKIHsKLSAgICBp
ZiAoX3BhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gX3BhZ2UtPm1haW5GcmFtZSgp
LT5taW1lVHlwZSgpOwotCi0gICAgcmV0dXJuIG5pbDsKKyAgICBfcGFnZS0+c2ltdWxhdGVEZXZp
Y2VPcmllbnRhdGlvbkNoYW5nZShhbHBoYSwgYmV0YSwgZ2FtbWEpOwogfQogCi0tIChOU1N0cmlu
ZyAqKV91c2VyQWdlbnQKKysgKEJPT0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIHsKLSAgICByZXR1
cm4gX3BhZ2UtPnVzZXJBZ2VudCgpOworICAgIHJldHVybiB0cnVlOwogfQogCi0tIChOU1N0cmlu
ZyAqKV9hcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKKy0gKHZvaWQpX3Nob3dTYWZlQnJvd3Np
bmdXYXJuaW5nV2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdhcm5pbmc6KE5TU3RyaW5nICop
d2FybmluZyBkZXRhaWxzOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilkZXRhaWxzIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIF9w
YWdlLT5hcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoKTsKKyAgICAvLyBGSVhNRTogQWRvcHQg
X3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTCBhbmQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24u
CisgICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTDpuaWwgdGl0bGU6dGl0
bGUgd2FybmluZzp3YXJuaW5nIGRldGFpbHM6ZGV0YWlscyBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlcl07CiB9CiAKLS0gKHZvaWQpX3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJB
Z2VudDooTlNTdHJpbmcgKilhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKKy0gKHZvaWQpX3No
b3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTDooTlNVUkwgKil1cmwgdGl0bGU6KE5TU3RyaW5n
ICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRl
ZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxl
dGlvbkhhbmRsZXIKIHsKLSAgICBfcGFnZS0+c2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
KGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCk7Ci0gICAgX3BhZ2UtPnNldEFwcGxpY2F0aW9u
TmFtZUZvckRlc2t0b3BVc2VyQWdlbnQoYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KTsKKyAg
ICBhdXRvIHNhZmVCcm93c2luZ1dhcm5pbmcgPSBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5pbmc6
OmNyZWF0ZSh1cmwsIHRpdGxlLCB3YXJuaW5nLCBkZXRhaWxzKTsKKyAgICBhdXRvIHdyYXBwZXIg
PSBbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAo
VmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgVVJMPiYmIHZhcmlhbnQpIHsKKyAg
ICAgICAgc3dpdGNoT24odmFyaWFudCwgWyZdIChXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCBj
b250aW51ZVVuc2FmZUxvYWQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29udGludWVVbnNhZmVM
b2FkKSB7CisgICAgICAgICAgICBjYXNlIFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXM6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFlFUyk7CisgICAgICAg
ICAgICBjYXNlIFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpObzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoTk8pOworICAgICAgICAgICAgfQorICAgICAgICB9
LCBbJl0gKFVSTCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihOTyk7CisgICAgICAgIH0pOworICAgIH07CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIF9pbXBsLT5zaG93U2FmZUJyb3dzaW5nV2FybmluZyhzYWZlQnJvd3Np
bmdXYXJuaW5nLCBXVEZNb3ZlKHdyYXBwZXIpKTsKKyNlbHNlCisgICAgW3NlbGYgX3Nob3dTYWZl
QnJvd3NpbmdXYXJuaW5nOnNhZmVCcm93c2luZ1dhcm5pbmcgY29tcGxldGlvbkhhbmRsZXI6V1RG
TW92ZSh3cmFwcGVyKV07CisjZW5kaWYKIH0KIAotLSAoTlNTdHJpbmcgKilfY3VzdG9tVXNlckFn
ZW50CisrIChOU1VSTCAqKV9jb25maXJtTWFsd2FyZVNlbnRpbmVsCiB7Ci0gICAgcmV0dXJuIHNl
bGYuY3VzdG9tVXNlckFnZW50OworICAgIHJldHVybiBXZWJLaXQ6OlNhZmVCcm93c2luZ1dhcm5p
bmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKTsKIH0KIAotLSAodm9pZClfc2V0Q3VzdG9tVXNl
ckFnZW50OihOU1N0cmluZyAqKWN1c3RvbVVzZXJBZ2VudAorKyAoTlNVUkwgKilfdmlzaXRVbnNh
ZmVXZWJzaXRlU2VudGluZWwKIHsKLSAgICBzZWxmLmN1c3RvbVVzZXJBZ2VudCA9IGN1c3RvbVVz
ZXJBZ2VudDsKKyAgICByZXR1cm4gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjp2aXNpdFVu
c2FmZVdlYnNpdGVTZW50aW5lbCgpOwogfQogCi0tICh2b2lkKV9zZXRVc2VyQ29udGVudEV4dGVu
c2lvbnNFbmFibGVkOihCT09MKXVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQKKy0gKHZvaWQp
X2lzSklURW5hYmxlZDoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIC8v
IFRoaXMgaXMga2VwdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4KKyAgICBf
cGFnZS0+aXNKSVRFbmFibGVkKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildIChib29sIGVuYWJsZWQpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZW5hYmxlZCk7CisgICAgfSk7CiB9CiAKLS0gKEJPT0wpX3VzZXJDb250ZW50RXh0ZW5zaW9u
c0VuYWJsZWQKKy0gKHZvaWQpX2V2YWx1YXRlSmF2YVNjcmlwdFdpdGhvdXRVc2VyR2VzdHVyZToo
TlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShp
ZCwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIC8vIFRoaXMgaXMga2VwdCBm
b3IgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBpT1MgOS4KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBbc2VsZiBfZXZhbHVhdGVKYXZhU2NyaXB0OmphdmFTY3JpcHRTdHJpbmcgZm9yY2VVc2VyR2Vz
dHVyZTpOTyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CiB9CiAKLS0gKHBp
ZF90KV93ZWJQcm9jZXNzSWRlbnRpZmllcgorLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVz
OihfV0tXZWJzaXRlUG9saWNpZXMgKil3ZWJzaXRlUG9saWNpZXMKIHsKLSAgICBpZiAoIVtzZWxm
IF9pc1ZhbGlkXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gX3BhZ2UtPnByb2Nl
c3NJZGVudGlmaWVyKCk7CisgICAgYXV0byBkYXRhID0gd2Vic2l0ZVBvbGljaWVzLndlYnBhZ2VQ
cmVmZXJlbmNlcy0+X3dlYnNpdGVQb2xpY2llcy0+ZGF0YSgpOworICAgIGlmIChkYXRhLndlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzKQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZh
bGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiVXBkYXRpbmcgV0tXZWJzaXRlRGF0YVN0b3Jl
IGlzIG9ubHkgc3VwcG9ydGVkIGR1cmluZyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
LiJdOworICAgIF9wYWdlLT51cGRhdGVXZWJzaXRlUG9saWNpZXMoV1RGTW92ZShkYXRhKSk7CiB9
CiAKLS0gKHBpZF90KV9wcm92aXNpb25hbFdlYlByb2Nlc3NJZGVudGlmaWVyCistIChCT09MKV9h
bGxvd3NSZW1vdGVJbnNwZWN0aW9uCiB7Ci0gICAgaWYgKCFbc2VsZiBfaXNWYWxpZF0pCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgYXV0byogcHJvdmlzaW9uYWxQYWdlID0gX3BhZ2UtPnByb3Zp
c2lvbmFsUGFnZVByb3h5KCk7Ci0gICAgaWYgKCFwcm92aXNpb25hbFBhZ2UpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHByb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLnByb2Nlc3NJ
ZGVudGlmaWVyKCk7CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgcmV0dXJuIF9w
YWdlLT5hbGxvd3NSZW1vdGVJbnNwZWN0aW9uKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNl
bmRpZgogfQogCi0tICh2b2lkKV9raWxsV2ViQ29udGVudFByb2Nlc3MKKy0gKHZvaWQpX3NldEFs
bG93c1JlbW90ZUluc3BlY3Rpb246KEJPT0wpYWxsb3cKIHsKLSAgICBpZiAoIVtzZWxmIF9pc1Zh
bGlkXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPnByb2Nlc3MoKS50ZXJtaW5hdGUo
KTsKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBfcGFnZS0+c2V0QWxsb3dzUmVt
b3RlSW5zcGVjdGlvbihhbGxvdyk7CisjZW5kaWYKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykKLS0g
KE5TVmlldyAqKV9zYWZlQnJvd3NpbmdXYXJuaW5nCistIChOU1N0cmluZyAqKV9yZW1vdGVJbnNw
ZWN0aW9uTmFtZU92ZXJyaWRlCiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZlQnJvd3NpbmdXYXJu
aW5nKCk7Ci19CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgcmV0dXJuIF9wYWdl
LT5yZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKCk7CiAjZWxzZQotLSAoVUlWaWV3ICopX3Nh
ZmVCcm93c2luZ1dhcm5pbmcKLXsKLSAgICByZXR1cm4gX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0
KCk7Ci19CisgICAgcmV0dXJuIG5pbDsKICNlbmRpZgotCi0tIChXS05hdmlnYXRpb24gKilfcmVs
b2FkV2l0aG91dENvbnRlbnRCbG9ja2VycwotewotICAgIHJldHVybiB3cmFwcGVyKF9wYWdlLT5y
ZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVudEJsb2NrZXJzKSk7CiB9
CiAKLS0gKFdLTmF2aWdhdGlvbiAqKV9yZWxvYWRFeHBpcmVkT25seQorLSAodm9pZClfc2V0UmVt
b3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZTooTlNTdHJpbmcgKiluYW1lCiB7Ci0gICAgcmV0dXJu
IHdyYXBwZXIoX3BhZ2UtPnJlbG9hZChXZWJDb3JlOjpSZWxvYWRPcHRpb246OkV4cGlyZWRPbmx5
KSk7CisjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgX3BhZ2UtPnNldFJlbW90ZUlu
c3BlY3Rpb25OYW1lT3ZlcnJpZGUobmFtZSk7CisjZW5kaWYKIH0KIAotLSAodm9pZClfa2lsbFdl
YkNvbnRlbnRQcm9jZXNzQW5kUmVzZXRTdGF0ZQorLSAoQk9PTClfYWRkc1Zpc2l0ZWRMaW5rcwog
ewotICAgIFJlZjxXZWJLaXQ6OldlYlByb2Nlc3NQcm94eT4gcHJvdGVjdGVkUHJvY2Vzc1Byb3h5
KF9wYWdlLT5wcm9jZXNzKCkpOwotICAgIHByb3RlY3RlZFByb2Nlc3NQcm94eS0+cmVxdWVzdFRl
cm1pbmF0aW9uKFdlYktpdDo6UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uOjpSZXF1ZXN0ZWRCeUNs
aWVudCk7Ci0KLSAgICBpZiAoYXV0byogcHJvdmlzaW9uYWxQYWdlUHJveHkgPSBfcGFnZS0+cHJv
dmlzaW9uYWxQYWdlUHJveHkoKSkgewotICAgICAgICBSZWY8V2ViS2l0OjpXZWJQcm9jZXNzUHJv
eHk+IHByb3RlY3RlZFByb2Nlc3NQcm94eShwcm92aXNpb25hbFBhZ2VQcm94eS0+cHJvY2Vzcygp
KTsKLSAgICAgICAgcHJvdGVjdGVkUHJvY2Vzc1Byb3h5LT5yZXF1ZXN0VGVybWluYXRpb24oV2Vi
S2l0OjpQcm9jZXNzVGVybWluYXRpb25SZWFzb246OlJlcXVlc3RlZEJ5Q2xpZW50KTsKLSAgICB9
CisgICAgcmV0dXJuIF9wYWdlLT5hZGRzVmlzaXRlZExpbmtzKCk7CiB9CiAKLS0gKENHUmVjdClf
Y29udmVydFJlY3RGcm9tUm9vdFZpZXdDb29yZGluYXRlczooQ0dSZWN0KXJlY3RJblJvb3RWaWV3
Q29vcmRpbmF0ZXMKKy0gKHZvaWQpX3NldEFkZHNWaXNpdGVkTGlua3M6KEJPT0wpYWRkc1Zpc2l0
ZWRMaW5rcwogewotICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgZWFzaWVyIHRvIHRhbGsgYWJv
dXQgV0tXZWJWaWV3IGNvb3JkaW5hdGVzIGluIGEgY29uc2lzdGVudCBhbmQgY3Jvc3MtcGxhdGZv
cm0gd2F5LgotICAgIC8vIEN1cnJlbnRseSwgbmVpdGhlciAicm9vdCB2aWV3IiBub3IgIndpbmRv
dyIgbWVhbiAiV0tXZWJWaWV3IGNvb3JkaW5hdGVzIiBvbiBib3RoIHBsYXRmb3Jtcy4KLSAgICAv
LyBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzNjQ5IGFuZCByZWxhdGVkIGJ1Z3MuCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVjdElu
Um9vdFZpZXdDb29yZGluYXRlcyBmcm9tVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotI2Vsc2UK
LSAgICByZXR1cm4gcmVjdEluUm9vdFZpZXdDb29yZGluYXRlczsKLSNlbmRpZgorICAgIF9wYWdl
LT5zZXRBZGRzVmlzaXRlZExpbmtzKGFkZHNWaXNpdGVkTGlua3MpOwogfQogCi0tIChDR1JlY3Qp
X2NvbnZlcnRSZWN0VG9Sb290Vmlld0Nvb3JkaW5hdGVzOihDR1JlY3QpcmVjdEluV2ViVmlld0Nv
b3JkaW5hdGVzCistIChCT09MKV9uZXR3b3JrUmVxdWVzdHNJblByb2dyZXNzCiB7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3Q6cmVjdEluV2Vi
Vmlld0Nvb3JkaW5hdGVzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwotI2Vsc2UKLSAgICBy
ZXR1cm4gcmVjdEluV2ViVmlld0Nvb3JkaW5hdGVzOwotI2VuZGlmCisgICAgcmV0dXJuIF9wYWdl
LT5wYWdlTG9hZFN0YXRlKCkubmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcygpOwogfQogCi0tICh2
b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0SW5XZWJWaWV3
Q29vcmRpbmF0ZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5w
dXRDb250ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCitzdGF0aWMgaW5saW5lIE9wdGlvblNl
dDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IGxheW91dE1pbGVzdG9uZXMoX1dLUmVuZGVyaW5n
UHJvZ3Jlc3NFdmVudHMgZXZlbnRzKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKCFbc2VsZiB1c2VzU3RhbmRhcmRDb250ZW50Vmlld10pIHsKLSAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQFtdKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIE9wdGlv
blNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IG1pbGVzdG9uZXM7CiAKLSAgICBDR1JlY3Qg
cmVjdEluUm9vdFZpZXdDb29yZGluYXRlcyA9IFtzZWxmIF9jb252ZXJ0UmVjdFRvUm9vdFZpZXdD
b29yZGluYXRlczpyZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZXNdOwotICAgIGF1dG8gd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpOwotICAgIF9wYWdlLT50ZXh0SW5wdXRDb250
ZXh0c0luUmVjdChyZWN0SW5Sb290Vmlld0Nvb3JkaW5hdGVzLCBbd2Vha1NlbGYsIGNhcHR1cmVk
Q29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0PiYgY29udGV4dHMpIHsKLSAgICAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBlbGVtZW50cyA9IGFkb3B0TlMoW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb250ZXh0cy5zaXplKCldKTsKKyAgICBpZiAo
ZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TGF5b3V0KQorICAgICAgICBt
aWxlc3RvbmVzLmFkZChXZWJDb3JlOjpEaWRGaXJzdExheW91dCk7CiAKLSAgICAgICAgYXV0byBz
dHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgY29u
dGV4dCA6IGNvbnRleHRzKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCBj
b250ZXh0V2l0aFdlYlZpZXdCb3VuZGluZ1JlY3QgPSBjb250ZXh0OwotICAgICAgICAgICAgY29u
dGV4dFdpdGhXZWJWaWV3Qm91bmRpbmdSZWN0LmJvdW5kaW5nUmVjdCA9IFtzdHJvbmdTZWxmIF9j
b252ZXJ0UmVjdEZyb21Sb290Vmlld0Nvb3JkaW5hdGVzOmNvbnRleHQuYm91bmRpbmdSZWN0XTsK
LSAgICAgICAgICAgIFtlbGVtZW50cyBhZGRPYmplY3Q6YWRvcHROUyhbW19XS1RleHRJbnB1dENv
bnRleHQgYWxsb2NdIF9pbml0V2l0aFRleHRJbnB1dENvbnRleHQ6Y29udGV4dFdpdGhXZWJWaWV3
Qm91bmRpbmdSZWN0XSkuZ2V0KCldOwotICAgICAgICB9CisgICAgaWYgKGV2ZW50cyAmIF9XS1Jl
bmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpCisgICAgICAg
IG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk7
CiAKLSAgICAgICAgY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcihlbGVtZW50cy5nZXQoKSk7Ci0g
ICAgfSk7Ci19CisgICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJz
dFBhaW50V2l0aFNpZ25pZmljYW50QXJlYSkKKyAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29y
ZTo6RGlkSGl0UmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzQXJlYVRocmVzaG9sZCk7CiAKLS0gKHZv
aWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4dElucHV0Q29udGV4dCAqKXRleHRJbnB1
dENvbnRleHQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRs
ZXIKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5k
YXJkQ29udGVudFZpZXddKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQ
cm9ncmVzc0V2ZW50UmVhY2hlZFNlc3Npb25SZXN0b3JhdGlvblJlbmRlclRyZWVTaXplVGhyZXNo
b2xkKQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpSZWFjaGVkU2Vzc2lvblJlc3Rv
cmF0aW9uUmVuZGVyVHJlZVNpemVUaHJlc2hvbGQpOwogCi0gICAgYXV0byB3ZWJDb250ZXh0ID0g
W3RleHRJbnB1dENvbnRleHQgX3RleHRJbnB1dENvbnRleHRdOwotICAgIGlmICh3ZWJDb250ZXh0
LndlYlBhZ2VJZGVudGlmaWVyICE9IF9wYWdlLT53ZWJQYWdlSUQoKSkKLSAgICAgICAgW05TRXhj
ZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIlRoZSBwcm92
aWRlZCBfV0tUZXh0SW5wdXRDb250ZXh0IHdhcyBub3QgY3JlYXRlZCBieSB0aGlzIFdLV2ViVmll
dy4iXTsKKyAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0TGF5
b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpCisgICAgICAgIG1pbGVzdG9u
ZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TGF5b3V0QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxS
ZW5kZXJpbmcpOwogCi0gICAgW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdOworICAgIGlmIChl
dmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludEFmdGVyU3VwcHJlc3Nl
ZEluY3JlbWVudGFsUmVuZGVyaW5nKQorICAgICAgICBtaWxlc3RvbmVzLmFkZChXZWJDb3JlOjpE
aWRGaXJzdFBhaW50QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpOwogCi0gICAg
X3BhZ2UtPmZvY3VzVGV4dElucHV0Q29udGV4dCh3ZWJDb250ZXh0LCBbY2FwdHVyZWRDb21wbGV0
aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgc3VjY2Vz
cykgewotICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwotICAgIH0p
OwotfQorICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50RGlkUmVuZGVy
U2lnbmlmaWNhbnRBbW91bnRPZlRleHQpCisgICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6
OkRpZFJlbmRlclNpZ25pZmljYW50QW1vdW50T2ZUZXh0KTsKIAotLSAodm9pZClfdGFrZVBERlNu
YXBzaG90V2l0aENvbmZpZ3VyYXRpb246KFdLU25hcHNob3RDb25maWd1cmF0aW9uICopc25hcHNo
b3RDb25maWd1cmF0aW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0RhdGEgKiwgTlNF
cnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFdLUERGQ29uZmlndXJhdGlvbiAqcGRm
Q29uZmlndXJhdGlvbiA9IG5pbDsKLSAgICBpZiAoc25hcHNob3RDb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIHBkZkNvbmZpZ3VyYXRpb24gPSBbW1tXS1BERkNvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgcGRmQ29uZmlndXJhdGlvbi5yZWN0ID0gc25hcHNo
b3RDb25maWd1cmF0aW9uLnJlY3Q7Ci0gICAgfQorICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJp
bmdQcm9ncmVzc0V2ZW50Rmlyc3RNZWFuaW5nZnVsUGFpbnQpCisgICAgICAgIG1pbGVzdG9uZXMu
YWRkKFdlYkNvcmU6OkRpZEZpcnN0TWVhbmluZ2Z1bFBhaW50KTsKIAotICAgIFtzZWxmIGNyZWF0
ZVBERldpdGhDb25maWd1cmF0aW9uOnBkZkNvbmZpZ3VyYXRpb24gY29tcGxldGlvbkhhbmRsZXI6
Y29tcGxldGlvbkhhbmRsZXJdOworICAgIHJldHVybiBtaWxlc3RvbmVzOwogfQogCi0jaWYgUExB
VEZPUk0oTUFDKQotLSAodm9pZClfc2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5n
ZXM6KEJPT0wpc2hvdWxkU3VwcHJlc3MKKy0gKHZvaWQpX3NldE9ic2VydmVkUmVuZGVyaW5nUHJv
Z3Jlc3NFdmVudHM6KF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKW9ic2VydmVkUmVuZGVyaW5n
UHJvZ3Jlc3NFdmVudHMKIHsKLSAgICBfaW1wbC0+c2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3Bv
bmRlckNoYW5nZXMoc2hvdWxkU3VwcHJlc3MpOworICAgIF9vYnNlcnZlZFJlbmRlcmluZ1Byb2dy
ZXNzRXZlbnRzID0gb2JzZXJ2ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50czsKKyAgICBfcGFnZS0+
bGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhsYXlvdXRNaWxlc3RvbmVzKG9ic2VydmVkUmVuZGVy
aW5nUHJvZ3Jlc3NFdmVudHMpKTsKIH0KLSNlbmRpZgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLS0gKHZvaWQgKF4pKHZvaWQpKV9yZXRhaW5BY3RpdmVGb2N1c2VkU3RhdGUKKy0gKHZvaWQp
X2dldE1haW5SZXNvdXJjZURhdGFXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0
YSAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgKytfYWN0aXZlRm9jdXNl
ZFN0YXRlUmV0YWluQ291bnQ7CisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbY29tcGxldGlv
bkhhbmRsZXIgY29weV0pOwogCi0gICAgLy8gRklYTUU6IFVzZSBzb21ldGhpbmcgbGlrZSBDb21w
bGV0aW9uSGFuZGxlckNhbGxDaGVja2VyIHRvIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBibG9j
ayBpcyBjYWxsZWQgYmVmb3JlIGl0J3MgcmVsZWFzZWQuCi0gICAgcmV0dXJuIFtbW3NlbGZdIHsK
LSAgICAgICAgLS1fYWN0aXZlRm9jdXNlZFN0YXRlUmV0YWluQ291bnQ7Ci0gICAgfSBjb3B5XSBh
dXRvcmVsZWFzZV07CisgICAgX3BhZ2UtPmdldE1haW5SZXNvdXJjZURhdGFPZkZyYW1lKF9wYWdl
LT5tYWluRnJhbWUoKSwgW2hhbmRsZXJdKEFQSTo6RGF0YSogZGF0YSwgV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlckJs
b2NrKShOU0RhdGEgKiwgTlNFcnJvciAqKSA9ICh2b2lkICheKShOU0RhdGEgKiwgTlNFcnJvciAq
KSloYW5kbGVyLmdldCgpOworICAgICAgICBpZiAoZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yOjpOb25lKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUGlwZSBhIHByb3BlciBl
cnJvciBpbiBmcm9tIHRoZSBXZWJQYWdlUHJveHkuCisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlckJsb2NrKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOldLRXJyb3JEb21haW4gY29k
ZTpzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlckJsb2NrKHdyYXBwZXIoKmRhdGEpLCBuaWwp
OworICAgIH0pOwogfQogCi0tICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3Rp
b25Nb3ZpbmdGb3J3YXJkOihCT09MKXNlbGVjdGluZ0ZvcndhcmQgY29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKEJPT0wgZGlkQmVjb21lRmlyc3RSZXNwb25kZXIpKWNvbXBsZXRpb25IYW5kbGVy
CistICh2b2lkKV9nZXRXZWJBcmNoaXZlRGF0YVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
XikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICB0eXBlb2Yo
Y29tcGxldGlvbkhhbmRsZXIpIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IG5pbDsKLSAgICBpZiAo
Y29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyQ29weSA9IEJsb2Nr
X2NvcHkoY29tcGxldGlvbkhhbmRsZXIpOwotCi0gICAgW19jb250ZW50VmlldyBfYmVjb21lRmly
c3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpzZWxlY3RpbmdGb3J3YXJkIGNv
bXBsZXRpb25IYW5kbGVyOltjb21wbGV0aW9uSGFuZGxlckNvcHldKEJPT0wgZGlkQmVjb21lRmly
c3RSZXNwb25kZXIpIHsKLSAgICAgICAgaWYgKCFjb21wbGV0aW9uSGFuZGxlckNvcHkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5KGRpZEJlY29t
ZUZpcnN0UmVzcG9uZGVyKTsKLSAgICAgICAgQmxvY2tfcmVsZWFzZShjb21wbGV0aW9uSGFuZGxl
ckNvcHkpOwotICAgIH1dOworICAgIFtzZWxmIGNyZWF0ZVdlYkFyY2hpdmVEYXRhV2l0aENvbXBs
ZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKIH0KIAotLSAoaWQpX3NuYXBzaG90TGF5
ZXJDb250ZW50c0ZvckJhY2tGb3J3YXJkTGlzdEl0ZW06KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAq
KWl0ZW0KKy0gKHZvaWQpX2dldENvbnRlbnRzQXNTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6
KHZvaWQgKF4pKE5TU3RyaW5nICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAg
ICBpZiAoX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCkgPT0gJml0ZW0uX2l0
ZW0pCi0gICAgICAgIF9wYWdlLT5yZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKl9wYWdlLT5iYWNr
Rm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpKTsKKyAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxv
Y2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgaWYgKGF1dG8qIHZpZXdTbmFwc2hvdCA9
IGl0ZW0uX2l0ZW0uc25hcHNob3QoKSkKLSAgICAgICAgcmV0dXJuIHZpZXdTbmFwc2hvdC0+YXNM
YXllckNvbnRlbnRzKCk7CisgICAgX3BhZ2UtPmdldENvbnRlbnRzQXNTdHJpbmcoW2hhbmRsZXJd
KFN0cmluZyBzdHJpbmcsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAg
ICAgICBpZiAoZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogUGlwZSBhIHByb3BlciBlcnJvciBpbiBmcm9tIHRoZSBXZWJQ
YWdlUHJveHkuCisgICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOldLRXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSB1c2VySW5mbzpu
aWxdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBoYW5kbGVyKHN0cmluZywgbmlsKTsK
KyAgICB9KTsKK30KIAotICAgIHJldHVybiBuaWw7CistICh2b2lkKV9nZXRDb250ZW50c0FzQXR0
cmlidXRlZFN0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBdHRyaWJ1dGVk
U3RyaW5nICosIE5TRGljdGlvbmFyeTxOU0F0dHJpYnV0ZWRTdHJpbmdEb2N1bWVudEF0dHJpYnV0
ZUtleSwgaWQ+ICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfcGFnZS0+
Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoW2hhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29t
cGxldGlvbkhhbmRsZXIpXShhdXRvJiBhdHRyaWJ1dGVkU3RyaW5nKSB7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVkU3RyaW5nLnN0cmluZykKKyAgICAgICAgICAgIGhhbmRsZXIoW1thdHRyaWJ1dGVk
U3RyaW5nLnN0cmluZy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSwgW1thdHRyaWJ1dGVkU3Ry
aW5nLmRvY3VtZW50QXR0cmlidXRlcy5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXSwgbmlsKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlcihuaWwsIG5pbCwgY3JlYXRlTlNFcnJv
cihXS0Vycm9yVW5rbm93bikuZ2V0KCkpOworICAgIH0pOwogfQogCi0tIChOU0FycmF5ICopX2Rh
dGFEZXRlY3Rpb25SZXN1bHRzCistICh2b2lkKV9nZXRBcHBsaWNhdGlvbk1hbmlmZXN0V2l0aENv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBsaWNhdGlvbk1hbmlmZXN0ICopKWNvbXBs
ZXRpb25IYW5kbGVyCiB7Ci0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotICAgIHJldHVybiBb
X2NvbnRlbnRWaWV3IF9kYXRhRGV0ZWN0aW9uUmVzdWx0c107CisjaWYgRU5BQkxFKEFQUExJQ0FU
SU9OX01BTklGRVNUKQorICAgIF9wYWdlLT5nZXRBcHBsaWNhdGlvbk1hbmlmZXN0KFtjb21wbGV0
aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IE9wdGlv
bmFsPFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q+JiBtYW5pZmVzdCwgV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Cisg
ICAgICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICAgICAgaWYgKG1hbmlmZXN0
KSB7CisgICAgICAgICAgICAgICAgYXV0byBhcGlNYW5pZmVzdCA9IEFQSTo6QXBwbGljYXRpb25N
YW5pZmVzdDo6Y3JlYXRlKCptYW5pZmVzdCk7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIod3JhcHBlcihhcGlNYW5pZmVzdCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgfQorICAgIH0pOwogI2Vs
c2UKLSAgICByZXR1cm4gbmlsOworICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobmlsKTsKICNlbmRpZgogfQogCi0tICh2b2lkKV9hY2Nlc3NpYmls
aXR5UmV0cmlldmVTcGVha1NlbGVjdGlvbkNvbnRlbnQKKy0gKF9XS1BhZ2luYXRpb25Nb2RlKV9w
YWdpbmF0aW9uTW9kZQogewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzaWJpbGl0eVJldHJpZXZl
U3BlYWtTZWxlY3Rpb25Db250ZW50XTsKKyAgICBzd2l0Y2ggKF9wYWdlLT5wYWdpbmF0aW9uTW9k
ZSgpKSB7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpVbnBhZ2luYXRlZDoKKyAgICAg
ICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7CisgICAgY2FzZSBXZWJDb3Jl
OjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1Bh
Z2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpS
aWdodFRvTGVmdFBhZ2luYXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlUmln
aHRUb0xlZnQ7CisgICAgY2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpUb3BUb0JvdHRvbVBhZ2lu
YXRlZDoKKyAgICAgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVG9wVG9Cb3R0b207CisgICAg
Y2FzZSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDoKKyAgICAgICAg
cmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A7CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIF9XS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7
CiB9CiAKLS8vIFRoaXMgbWV0aG9kIGlzIGZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotLy8g
Q3VycmVudGx5IGl0J3Mgb25seSBpbiBUZXN0UnVubmVyV0tXZWJWaWV3LgotLSAodm9pZClfYWNj
ZXNzaWJpbGl0eURpZEdldFNwZWFrU2VsZWN0aW9uQ29udGVudDooTlNTdHJpbmcgKiljb250ZW50
CistICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooX1dLUGFnaW5hdGlvbk1vZGUpcGFnaW5hdGlv
bk1vZGUKIHsKKyAgICBXZWJDb3JlOjpQYWdpbmF0aW9uOjpNb2RlIG1vZGU7CisgICAgc3dpdGNo
IChwYWdpbmF0aW9uTW9kZSkgeworICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVVbnBhZ2luYXRl
ZDoKKyAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlVucGFnaW5hdGVkOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlTGVmdFRvUmlnaHQ6CisgICAg
ICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpMZWZ0VG9SaWdodFBhZ2luYXRlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVJpZ2h0VG9MZWZ0OgorICAg
ICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6UmlnaHRUb0xlZnRQYWdpbmF0ZWQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVUb3BUb0JvdHRvbToKKyAg
ICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OlRvcFRvQm90dG9tUGFnaW5hdGVkOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlQm90dG9tVG9Ub3A6Cisg
ICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpCb3R0b21Ub1RvcFBhZ2luYXRlZDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIF9wYWdlLT5zZXRQYWdpbmF0aW9uTW9kZShtb2RlKTsKIH0KIAotLSAoVUlUZXh0SW5wdXRB
c3Npc3RhbnRJdGVtICopaW5wdXRBc3Npc3RhbnRJdGVtCistIChCT09MKV9wYWdpbmF0aW9uQmVo
YXZlc0xpa2VDb2x1bW5zCiB7Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgaW5wdXRBc3Npc3Rh
bnRJdGVtRm9yV2ViVmlld107CisgICAgcmV0dXJuIF9wYWdlLT5wYWdpbmF0aW9uQmVoYXZlc0xp
a2VDb2x1bW5zKCk7CiB9CiAKLSNlbmRpZgorLSAodm9pZClfc2V0UGFnaW5hdGlvbkJlaGF2ZXNM
aWtlQ29sdW1uczooQk9PTCliZWhhdmVzTGlrZUNvbHVtbnMKK3sKKyAgICBfcGFnZS0+c2V0UGFn
aW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhiZWhhdmVzTGlrZUNvbHVtbnMpOworfQogCi0tIChO
U0RhdGEgKilfc2Vzc2lvblN0YXRlRGF0YQorLSAoQ0dGbG9hdClfcGFnZUxlbmd0aAogewotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgdXNlIHRoZSBsZWdhY3kgc2Vzc2lvbiBzdGF0ZSBl
bmNvZGVyLgotICAgIHJldHVybiB3cmFwcGVyKFdlYktpdDo6ZW5jb2RlTGVnYWN5U2Vzc2lvblN0
YXRlKF9wYWdlLT5zZXNzaW9uU3RhdGUoKSkpOworICAgIHJldHVybiBfcGFnZS0+cGFnZUxlbmd0
aCgpOwogfQogCi0tIChfV0tTZXNzaW9uU3RhdGUgKilfc2Vzc2lvblN0YXRlCistICh2b2lkKV9z
ZXRQYWdlTGVuZ3RoOihDR0Zsb2F0KXBhZ2VMZW5ndGgKIHsKLSAgICByZXR1cm4gW1tbX1dLU2Vz
c2lvblN0YXRlIGFsbG9jXSBfaW5pdFdpdGhTZXNzaW9uU3RhdGU6X3BhZ2UtPnNlc3Npb25TdGF0
ZSgpXSBhdXRvcmVsZWFzZV07CisgICAgX3BhZ2UtPnNldFBhZ2VMZW5ndGgocGFnZUxlbmd0aCk7
CiB9CiAKLS0gKF9XS1Nlc3Npb25TdGF0ZSAqKV9zZXNzaW9uU3RhdGVXaXRoRmlsdGVyOihCT09M
ICheKShXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKml0ZW0pKWZpbHRlcgorLSAoQ0dGbG9hdClfZ2Fw
QmV0d2VlblBhZ2VzCiB7Ci0gICAgV2ViS2l0OjpTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlID0g
X3BhZ2UtPnNlc3Npb25TdGF0ZShbZmlsdGVyXShXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0mIGl0ZW0pIHsKLSAgICAgICAgaWYgKCFmaWx0ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgICAgICByZXR1cm4gKGJvb2wpZmlsdGVyKHdyYXBwZXIoaXRlbSkpOwotICAgIH0p
OwotCi0gICAgcmV0dXJuIFtbW19XS1Nlc3Npb25TdGF0ZSBhbGxvY10gX2luaXRXaXRoU2Vzc2lv
blN0YXRlOnNlc3Npb25TdGF0ZV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBfcGFnZS0+Z2Fw
QmV0d2VlblBhZ2VzKCk7CiB9CiAKLS0gKHZvaWQpX3Jlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0
YTooTlNEYXRhICopc2Vzc2lvblN0YXRlRGF0YQorLSAodm9pZClfc2V0R2FwQmV0d2VlblBhZ2Vz
OihDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBu
b3QgdXNlIHRoZSBsZWdhY3kgc2Vzc2lvbiBzdGF0ZSBkZWNvZGVyLgotICAgIFdlYktpdDo6U2Vz
c2lvblN0YXRlIHNlc3Npb25TdGF0ZTsKLSAgICBpZiAoIVdlYktpdDo6ZGVjb2RlTGVnYWN5U2Vz
c2lvblN0YXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZXNzaW9uU3RhdGVEYXRhLmJ5
dGVzKSwgc2Vzc2lvblN0YXRlRGF0YS5sZW5ndGgsIHNlc3Npb25TdGF0ZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIF9wYWdlLT5yZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShXVEZNb3ZlKHNlc3Np
b25TdGF0ZSksIHRydWUpOworICAgIF9wYWdlLT5zZXRHYXBCZXR3ZWVuUGFnZXMoZ2FwQmV0d2Vl
blBhZ2VzKTsKIH0KIAotLSAoV0tOYXZpZ2F0aW9uICopX3Jlc3RvcmVTZXNzaW9uU3RhdGU6KF9X
S1Nlc3Npb25TdGF0ZSAqKXNlc3Npb25TdGF0ZSBhbmROYXZpZ2F0ZTooQk9PTCluYXZpZ2F0ZQor
LSAoQk9PTClfcGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZAogewotICAgIHJldHVybiB3cmFwcGVy
KF9wYWdlLT5yZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUgPyBzZXNzaW9uU3Rh
dGUtPl9zZXNzaW9uU3RhdGUgOiBXZWJLaXQ6OlNlc3Npb25TdGF0ZSB7IH0sIG5hdmlnYXRlKSk7
CisgICAgcmV0dXJuIF9wYWdlLT5wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKCk7CiB9CiAKLS0g
KHZvaWQpX2Nsb3NlCistICh2b2lkKV9zZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkOihCT09M
KWxpbmVHcmlkRW5hYmxlZAogewotICAgIF9wYWdlLT5jbG9zZSgpOworICAgIF9wYWdlLT5zZXRQ
YWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKGxpbmVHcmlkRW5hYmxlZCk7CiB9CiAKLS0gKF9XS0F0
dGFjaG1lbnQgKilfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTooTlNTdHJpbmcgKilmaWxl
bmFtZSBjb250ZW50VHlwZTooTlNTdHJpbmcgKiljb250ZW50VHlwZSBkYXRhOihOU0RhdGEgKilk
YXRhIG9wdGlvbnM6KF9XS0F0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyAqKW9wdGlvbnMgY29tcGxl
dGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyCistIChOU1VJbnRl
Z2VyKV9wYWdlQ291bnQKIHsKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgYXV0byBm
aWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZp
bGVXaXRoQ29udGVudHM6ZGF0YV0pOwotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgW2ZpbGVX
cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKLSAgICByZXR1cm4gW3NlbGYg
X2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVu
dFR5cGU6Y29udGVudFR5cGUgY29tcGxldGlvbjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgcmV0
dXJuIF9wYWdlLT5wYWdlQ291bnQoKTsKIH0KIAotLSAoX1dLQXR0YWNobWVudCAqKV9pbnNlcnRB
dHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOihOU0ZpbGVXcmFwcGVyICopZmlsZVdyYXBwZXIgY29u
dGVudFR5cGU6KE5TU3RyaW5nICopY29udGVudFR5cGUgb3B0aW9uczooX1dLQXR0YWNobWVudERp
c3BsYXlPcHRpb25zICopb3B0aW9ucyBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2Vzcykp
Y29tcGxldGlvbkhhbmRsZXIKKy0gKEJPT0wpX3N1cHBvcnRzVGV4dFpvb20KIHsKLSAgICBVTlVT
RURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgcmV0dXJuIFtzZWxmIF9pbnNlcnRBdHRhY2htZW50V2l0
aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyIGNvbnRlbnRUeXBlOmNvbnRlbnRUeXBlIGNvbXBsZXRp
b246Y29tcGxldGlvbkhhbmRsZXJdOworICAgIHJldHVybiBfcGFnZS0+c3VwcG9ydHNUZXh0Wm9v
bSgpOwogfQogCi0tIChfV0tBdHRhY2htZW50ICopX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdy
YXBwZXI6KE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlciBjb250ZW50VHlwZTooTlNTdHJpbmcg
Kiljb250ZW50VHlwZSBjb21wbGV0aW9uOih2b2lkKF4pKEJPT0wgc3VjY2VzcykpY29tcGxldGlv
bkhhbmRsZXIKKy0gKGRvdWJsZSlfdGV4dFpvb21GYWN0b3IKIHsKLSNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQotICAgIGF1dG8gaWRlbnRpZmllciA9IGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKTsKLSAgICBhdXRvIGF0dGFjaG1lbnQgPSBBUEk6OkF0dGFjaG1lbnQ6OmNyZWF0ZShp
ZGVudGlmaWVyLCAqX3BhZ2UpOwotICAgIGF0dGFjaG1lbnQtPnNldEZpbGVXcmFwcGVyQW5kVXBk
YXRlQ29udGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRlbnRUeXBlKTsKLSAgICBfcGFnZS0+aW5z
ZXJ0QXR0YWNobWVudChhdHRhY2htZW50LmNvcHlSZWYoKSwgW2NhcHR1cmVkSGFuZGxlciA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3IgZXJyb3IpIHsKLSAgICAgICAgaWYgKGNhcHR1cmVkSGFuZGxlcikKLSAgICAgICAgICAgIGNh
cHR1cmVkSGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUp
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIHdyYXBwZXIoYXR0YWNobWVudCk7Ci0jZWxzZQotICAg
IHJldHVybiBuaWw7Ci0jZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UtPnRleHRab29tRmFjdG9yKCk7
CiB9CiAKLS0gKF9XS0F0dGFjaG1lbnQgKilfYXR0YWNobWVudEZvcklkZW50aWZpZXI6KE5TU3Ry
aW5nICopaWRlbnRpZmllcgorLSAodm9pZClfc2V0VGV4dFpvb21GYWN0b3I6KGRvdWJsZSl6b29t
RmFjdG9yCiB7Ci0jaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICBpZiAoYXV0byBh
dHRhY2htZW50ID0gX3BhZ2UtPmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGlkZW50aWZpZXIpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcihhdHRhY2htZW50KTsKLSNlbmRpZgotICAgIHJldHVybiBu
aWw7CisgICAgX3BhZ2UtPnNldFRleHRab29tRmFjdG9yKHpvb21GYWN0b3IpOwogfQogCi0tICh2
b2lkKV9zaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlV2l0aEFscGhhOihkb3VibGUpYWxw
aGEgYmV0YTooZG91YmxlKWJldGEgZ2FtbWE6KGRvdWJsZSlnYW1tYQorLSAodm9pZClzZXRQYWdl
Wm9vbTooQ0dGbG9hdClwYWdlWm9vbQogewotICAgIF9wYWdlLT5zaW11bGF0ZURldmljZU9yaWVu
dGF0aW9uQ2hhbmdlKGFscGhhLCBiZXRhLCBnYW1tYSk7CisgICAgX3BhZ2UtPnNldFBhZ2Vab29t
RmFjdG9yKHBhZ2Vab29tKTsKIH0KIAotKyAoQk9PTClfaGFuZGxlc1NhZmVCcm93c2luZworLSAo
Q0dGbG9hdClwYWdlWm9vbQogewotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBfcGFnZS0+
cGFnZVpvb21GYWN0b3IoKTsKIH0KIAotLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdX
aXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRl
dGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIKKy0gKGRvdWJsZSlfcGFnZVpvb21GYWN0b3IK
IHsKLSAgICAvLyBGSVhNRTogQWRvcHQgX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTCBh
bmQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24uCi0gICAgW3NlbGYgX3Nob3dTYWZlQnJvd3NpbmdXYXJu
aW5nV2l0aFVSTDpuaWwgdGl0bGU6dGl0bGUgd2FybmluZzp3YXJuaW5nIGRldGFpbHM6ZGV0YWls
cyBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CisgICAgcmV0dXJuIFtzZWxm
IHBhZ2Vab29tXTsKIH0KIAotLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRoVVJM
OihOU1VSTCAqKXVybCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSB3YXJuaW5nOihOU1N0cmluZyAq
KXdhcm5pbmcgZGV0YWlsczooTlNBdHRyaWJ1dGVkU3RyaW5nICopZGV0YWlscyBjb21wbGV0aW9u
SGFuZGxlcjoodm9pZCheKShCT09MKSljb21wbGV0aW9uSGFuZGxlcgorLSAodm9pZClfc2V0UGFn
ZVpvb21GYWN0b3I6KGRvdWJsZSl6b29tRmFjdG9yCiB7Ci0gICAgYXV0byBzYWZlQnJvd3NpbmdX
YXJuaW5nID0gV2ViS2l0OjpTYWZlQnJvd3NpbmdXYXJuaW5nOjpjcmVhdGUodXJsLCB0aXRsZSwg
d2FybmluZywgZGV0YWlscyk7Ci0gICAgYXV0byB3cmFwcGVyID0gW2NvbXBsZXRpb25IYW5kbGVy
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFZhcmlhbnQ8V2ViS2l0OjpDb250
aW51ZVVuc2FmZUxvYWQsIFVSTD4mJiB2YXJpYW50KSB7Ci0gICAgICAgIHN3aXRjaE9uKHZhcmlh
bnQsIFsmXSAoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQgY29udGludWVVbnNhZmVMb2FkKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnRpbnVlVW5zYWZlTG9hZCkgewotICAgICAgICAgICAg
Y2FzZSBXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihZRVMpOwotICAgICAgICAgICAgY2FzZSBXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZDo6Tm86Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKE5PKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwgWyZdIChVUkwpIHsKLSAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoTk8pOwotICAgICAgICB9KTsKLSAgICB9OwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBfaW1w
bC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoc2FmZUJyb3dzaW5nV2FybmluZywgV1RGTW92ZSh3
cmFwcGVyKSk7Ci0jZWxzZQotICAgIFtzZWxmIF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpzYWZl
QnJvd3NpbmdXYXJuaW5nIGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUod3JhcHBlcildOwotI2Vu
ZGlmCisgICAgW3NlbGYgc2V0UGFnZVpvb206em9vbUZhY3Rvcl07CiB9CiAKLSsgKE5TVVJMICop
X2NvbmZpcm1NYWx3YXJlU2VudGluZWwKKy0gKGlkIDxfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVn
YXRlPilfZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZQogewotICAgIHJldHVybiBXZWJLaXQ6OlNh
ZmVCcm93c2luZ1dhcm5pbmc6OmNvbmZpcm1NYWx3YXJlU2VudGluZWwoKTsKLX0KKyAgICBhdXRv
KiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9wYWdlLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCgpOworICAgIGlmICghZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpCisgICAgICAgIHJldHVybiBu
aWw7CiAKLSsgKE5TVVJMICopX3Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsCi17Ci0gICAgcmV0
dXJuIFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZzo6dmlzaXRVbnNhZmVXZWJzaXRlU2VudGlu
ZWwoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkuZGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgp
OwogfQogCi0tICh2b2lkKV9pc0pJVEVuYWJsZWQ6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhh
bmRsZXIKKy0gKHZvaWQpX3NldERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KGlkPF9XS0RpYWdu
b3N0aWNMb2dnaW5nRGVsZWdhdGU+KWRpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKIHsKLSAgICBf
cGFnZS0+aXNKSVRFbmFibGVkKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21w
bGV0aW9uSGFuZGxlcildIChib29sIGVuYWJsZWQpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZW5hYmxlZCk7Ci0gICAgfSk7Ci19CisgICAgYXV0byogZGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQgPSBfcGFnZS0+ZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKTsKKyAgICBpZiAoIWRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KQorICAgICAgICByZXR1cm47CiAKLS0gKHZvaWQpX2V2YWx1YXRlSmF2
YVNjcmlwdFdpdGhvdXRVc2VyR2VzdHVyZTooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cgotewotICAgIFtzZWxmIF9ldmFsdWF0ZUphdmFTY3JpcHQ6amF2YVNjcmlwdFN0cmluZyBmb3Jj
ZVVzZXJHZXN0dXJlOk5PIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKKyAg
ICBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50Jj4oKmRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50KS5zZXREZWxlZ2F0ZShkaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlKTsK
IH0KIAotLSAodm9pZClfdXBkYXRlV2Vic2l0ZVBvbGljaWVzOihfV0tXZWJzaXRlUG9saWNpZXMg
Kil3ZWJzaXRlUG9saWNpZXMKKy0gKGlkIDxfV0tGaW5kRGVsZWdhdGU+KV9maW5kRGVsZWdhdGUK
IHsKLSAgICBhdXRvIGRhdGEgPSB3ZWJzaXRlUG9saWNpZXMud2VicGFnZVByZWZlcmVuY2VzLT5f
d2Vic2l0ZVBvbGljaWVzLT5kYXRhKCk7Ci0gICAgaWYgKGRhdGEud2Vic2l0ZURhdGFTdG9yZVBh
cmFtZXRlcnMpCi0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4
Y2VwdGlvbiBmb3JtYXQ6QCJVcGRhdGluZyBXS1dlYnNpdGVEYXRhU3RvcmUgaXMgb25seSBzdXBw
b3J0ZWQgZHVyaW5nIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24uIl07Ci0gICAgX3Bh
Z2UtPnVwZGF0ZVdlYnNpdGVQb2xpY2llcyhXVEZNb3ZlKGRhdGEpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViS2l0OjpGaW5kQ2xpZW50Jj4oX3BhZ2UtPmZpbmRDbGllbnQoKSkuZGVsZWdh
dGUoKS5hdXRvcmVsZWFzZSgpOwogfQogCi0tIChCT09MKV9hbGxvd3NSZW1vdGVJbnNwZWN0aW9u
CistICh2b2lkKV9zZXRGaW5kRGVsZWdhdGU6KGlkPF9XS0ZpbmREZWxlZ2F0ZT4pZmluZERlbGVn
YXRlCiB7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgcmV0dXJuIF9wYWdlLT5h
bGxvd3NSZW1vdGVJbnNwZWN0aW9uKCk7Ci0jZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgor
ICAgIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdlLT5maW5kQ2xpZW50KCkp
LnNldERlbGVnYXRlKGZpbmREZWxlZ2F0ZSk7CiB9CiAKLS0gKHZvaWQpX3NldEFsbG93c1JlbW90
ZUluc3BlY3Rpb246KEJPT0wpYWxsb3cKK3N0YXRpYyBpbmxpbmUgV2ViS2l0OjpGaW5kT3B0aW9u
cyB0b0ZpbmRPcHRpb25zKF9XS0ZpbmRPcHRpb25zIHdrRmluZE9wdGlvbnMpCiB7Ci0jaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgX3BhZ2UtPnNldEFsbG93c1JlbW90ZUluc3BlY3Rp
b24oYWxsb3cpOwotI2VuZGlmCisgICAgdW5zaWduZWQgZmluZE9wdGlvbnMgPSAwOworCisgICAg
aWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZSkKKyAgICAg
ICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0Nhc2VJbnNlbnNpdGl2ZTsKKyAg
ICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zQXRXb3JkU3RhcnRzKQorICAgICAg
ICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zQXRXb3JkU3RhcnRzOworICAgIGlm
ICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRT
dGFydCkKKyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1RyZWF0TWVk
aWFsQ2FwaXRhbEFzV29yZFN0YXJ0OworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9w
dGlvbnNCYWNrd2FyZHMpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlv
bnNCYWNrd2FyZHM7CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1dyYXBB
cm91bmQpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNXcmFwQXJv
dW5kOworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSkK
KyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dPdmVybGF5Owor
ICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcikK
KyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNh
dG9yOworICAgIGlmICh3a0ZpbmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0
KQorICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd0hpZ2hsaWdo
dDsKKyAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zTm9JbmRleENoYW5nZSkK
KyAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc05vSW5kZXhDaGFuZ2U7
CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5k
ZXgpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNEZXRlcm1pbmVN
YXRjaEluZGV4OworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlvbnM+
KGZpbmRPcHRpb25zKTsKIH0KIAotLSAoTlNTdHJpbmcgKilfcmVtb3RlSW5zcGVjdGlvbk5hbWVP
dmVycmlkZQorLSAodm9pZClfY291bnRTdHJpbmdNYXRjaGVzOihOU1N0cmluZyAqKXN0cmluZyBv
cHRpb25zOihfV0tGaW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENv
dW50CiB7Ci0jaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCi0gICAgcmV0dXJuIF9wYWdlLT5y
ZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKCk7Ci0jZWxzZQotICAgIHJldHVybiBuaWw7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7Cisg
ICAgICAgIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2NvdW50U3RyaW5nTWF0Y2hlczpzdHJpbmcg
b3B0aW9uczpvcHRpb25zIG1heENvdW50Om1heENvdW50XTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICNlbmRpZgorICAgIF9wYWdlLT5jb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCB0b0ZpbmRP
cHRpb25zKG9wdGlvbnMpLCBtYXhDb3VudCk7CiB9CiAKLS0gKHZvaWQpX3NldFJlbW90ZUluc3Bl
Y3Rpb25OYW1lT3ZlcnJpZGU6KE5TU3RyaW5nICopbmFtZQorLSAodm9pZClfZmluZFN0cmluZzoo
TlNTdHJpbmcgKilzdHJpbmcgb3B0aW9uczooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3Vu
dDooTlNVSW50ZWdlciltYXhDb3VudAogewotI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQot
ICAgIF9wYWdlLT5zZXRSZW1vdGVJbnNwZWN0aW9uTmFtZU92ZXJyaWRlKG5hbWUpOworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gV2hpbGUgQXBwS2l0IGNvbnRhaW5zIGxvZ2ljIGlu
IE5TQmFyVGV4dEZpbmRlciB0byBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgZmluZCBwYXN0ZWJv
YXJkCisgICAgLy8gd2hlbiB0aGUgZmluZCBzdHJpbmcgY2hhbmdlcywgdGhpcyAoYWxvbmcgd2l0
aCB0aGUgZmluZCBwYXN0ZWJvYXJkIGl0c2VsZikgYXJlIGJvdGggbWlzc2luZworICAgIC8vIGZy
b20gaU9TOyB0aHVzLCBvbiBpT1MsIHdlIHVwZGF0ZSB0aGUgY3VycmVudCBmaW5kLWluLXBhZ2Ug
c3RyaW5nIGhlcmUuCisgICAgV2ViS2l0Ojp1cGRhdGVTdHJpbmdGb3JGaW5kKHN0cmluZyk7CisK
KyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7CisgICAgICAgIFtfY3VzdG9tQ29udGVudFZp
ZXcgd2ViX2ZpbmRTdHJpbmc6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3Vu
dF07CisgICAgICAgIHJldHVybjsKKyAgICB9CiAjZW5kaWYKKyAgICBfcGFnZS0+ZmluZFN0cmlu
ZyhzdHJpbmcsIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1heENvdW50KTsKIH0KIAotLSAoQk9P
TClfYWRkc1Zpc2l0ZWRMaW5rcworLSAodm9pZClfaGlkZUZpbmRVSQogewotICAgIHJldHVybiBf
cGFnZS0+YWRkc1Zpc2l0ZWRMaW5rcygpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
aWYgKF9jdXN0b21Db250ZW50VmlldykgeworICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdl
Yl9oaWRlRmluZFVJXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIF9wYWdl
LT5oaWRlRmluZFVJKCk7CiB9CiAKLS0gKHZvaWQpX3NldEFkZHNWaXNpdGVkTGlua3M6KEJPT0wp
YWRkc1Zpc2l0ZWRMaW5rcworLSAodm9pZClfc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JJdGVt
OihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCiB7Ci0gICAgX3BhZ2UtPnNldEFkZHNWaXNp
dGVkTGlua3MoYWRkc1Zpc2l0ZWRMaW5rcyk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1
cm47CisgICAgX3BhZ2UtPnJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtLl9pdGVtKTsKIH0K
IAotLSAoQk9PTClfbmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcworLSAoaWQgPF9XS0lucHV0RGVs
ZWdhdGU+KV9pbnB1dERlbGVnYXRlCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlTG9hZFN0YXRl
KCkubmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcygpOworICAgIHJldHVybiBfaW5wdXREZWxlZ2F0
ZS5nZXRBdXRvcmVsZWFzZWQoKTsKIH0KIAotc3RhdGljIGlubGluZSBPcHRpb25TZXQ8V2ViQ29y
ZTo6TGF5b3V0TWlsZXN0b25lPiBsYXlvdXRNaWxlc3RvbmVzKF9XS1JlbmRlcmluZ1Byb2dyZXNz
RXZlbnRzIGV2ZW50cykKKy0gKHZvaWQpX3NldElucHV0RGVsZWdhdGU6KGlkIDxfV0tJbnB1dERl
bGVnYXRlPilpbnB1dERlbGVnYXRlCiB7Ci0gICAgT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1p
bGVzdG9uZT4gbWlsZXN0b25lczsKLQotICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9n
cmVzc0V2ZW50Rmlyc3RMYXlvdXQpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRp
ZEZpcnN0TGF5b3V0KTsKKyAgICBfaW5wdXREZWxlZ2F0ZSA9IGlucHV0RGVsZWdhdGU7CiAKLSAg
ICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0KTsKKyAgICBjbGFzcyBGb3JtQ2xpZW50IDogcHVibGljIEFQSTo6
Rm9ybUNsaWVudCB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1Ymxp
YzoKKyAgICAgICAgZXhwbGljaXQgRm9ybUNsaWVudChXS1dlYlZpZXcgKndlYlZpZXcpCisgICAg
ICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQorICAgICAgICB7CisgICAgICAgIH0KIAotICAg
IGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWludFdpdGhTaWdu
aWZpY2FudEFyZWEpCi0gICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEhpdFJlbGV2
YW50UmVwYWludGVkT2JqZWN0c0FyZWFUaHJlc2hvbGQpOworICAgICAgICB2aXJ0dWFsIH5Gb3Jt
Q2xpZW50KCkgeyB9CiAKLSAgICBpZiAoZXZlbnRzICYgX1dLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dFJlYWNoZWRTZXNzaW9uUmVzdG9yYXRpb25SZW5kZXJUcmVlU2l6ZVRocmVzaG9sZCkKLSAgICAg
ICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6UmVhY2hlZFNlc3Npb25SZXN0b3JhdGlvblJlbmRl
clRyZWVTaXplVGhyZXNob2xkKTsKKyAgICAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybShXZWJLaXQ6
OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQ
cm94eSYgc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8V1RGOjpTdHJpbmcsIFdU
Rjo6U3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywgQVBJOjpPYmplY3QqIHVzZXJEYXRhLCBXVEY6
OkZ1bmN0aW9uPHZvaWQodm9pZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh1c2VyRGF0YSAmJiB1c2VyRGF0YS0+dHlwZSgpICE9IEFQ
STo6T2JqZWN0OjpUeXBlOjpEYXRhKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF1c2VyRGF0
YSB8fCB1c2VyRGF0YS0+dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKTsKKyAgICAg
ICAgICAgICAgICBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT5tYXJr
Q3VycmVudGx5RGlzcGF0Y2hlZE1lc3NhZ2VBc0ludmFsaWQoKTsKKyAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KIAotICAgIGlmIChldmVudHMgJiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RMYXlv
dXRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJlbmRlcmluZykKLSAgICAgICAgbWlsZXN0b25l
cy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RMYXlvdXRBZnRlclN1cHByZXNzZWRJbmNyZW1lbnRhbFJl
bmRlcmluZyk7CisgICAgICAgICAgICBhdXRvIGlucHV0RGVsZWdhdGUgPSBtX3dlYlZpZXctPl9p
bnB1dERlbGVnYXRlLmdldCgpOwogCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dy
ZXNzRXZlbnRGaXJzdFBhaW50QWZ0ZXJTdXBwcmVzc2VkSW5jcmVtZW50YWxSZW5kZXJpbmcpCi0g
ICAgICAgIG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0UGFpbnRBZnRlclN1cHByZXNz
ZWRJbmNyZW1lbnRhbFJlbmRlcmluZyk7CisgICAgICAgICAgICBpZiAoIVtpbnB1dERlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1
ZXM6dXNlck9iamVjdDpzdWJtaXNzaW9uSGFuZGxlcjopXSkgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQogCi0gICAgaWYgKGV2ZW50cyAmIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnREaWRSZW5kZXJT
aWduaWZpY2FudEFtb3VudE9mVGV4dCkKLSAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6
RGlkUmVuZGVyU2lnbmlmaWNhbnRBbW91bnRPZlRleHQpOworICAgICAgICAgICAgYXV0byB2YWx1
ZU1hcCA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OnRleHRGaWVsZFZhbHVlcy5zaXplKCldKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgcGFpciA6IHRleHRGaWVsZFZhbHVlcykKKyAgICAgICAgICAgICAgICBbdmFsdWVNYXAgc2V0
T2JqZWN0OnBhaXIuc2Vjb25kIGZvcktleTpwYWlyLmZpcnN0XTsKIAotICAgIGlmIChldmVudHMg
JiBfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RNZWFuaW5nZnVsUGFpbnQpCi0gICAgICAg
IG1pbGVzdG9uZXMuYWRkKFdlYkNvcmU6OkRpZEZpcnN0TWVhbmluZ2Z1bFBhaW50KTsKLQotICAg
IHJldHVybiBtaWxlc3RvbmVzOwotfQorICAgICAgICAgICAgTlNPYmplY3QgPE5TU2VjdXJlQ29k
aW5nPiAqdXNlck9iamVjdCA9IG5pbDsKKyAgICAgICAgICAgIGlmIChBUEk6OkRhdGEqIGRhdGEg
PSBzdGF0aWNfY2FzdDxBUEk6OkRhdGEqPih1c2VyRGF0YSkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6
Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KGRhdGEtPmJ5dGVzKCkp
KSBsZW5ndGg6ZGF0YS0+c2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10pOworICAgICAgICAgICAgICAg
IGF1dG8gdW5hcmNoaXZlciA9IHNlY3VyZVVuYXJjaGl2ZXJGcm9tRGF0YShuc0RhdGEuZ2V0KCkp
OworICAgICAgICAgICAgICAgIEB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byog
YWxsb3dlZENsYXNzZXMgPSBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2wo
KS5hbGxvd2VkQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGluZygpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczphbGxv
d2VkQ2xhc3NlcyBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmplY3QgPSBbdW5hcmNoaXZlciBkZWNv
ZGVPYmplY3RPZkNsYXNzOltOU09iamVjdCBjbGFzc10gZm9yS2V5OkAidXNlck9iamVjdCJdOwor
ICAgICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSB1c2VyIGRhdGE6ICVA
IiwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLS0gKHZv
aWQpX3NldE9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHM6KF9XS1JlbmRlcmluZ1Byb2dy
ZXNzRXZlbnRzKW9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMKLXsKLSAgICBfb2JzZXJ2
ZWRSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyA9IG9ic2VydmVkUmVuZGVyaW5nUHJvZ3Jlc3NFdmVu
dHM7Ci0gICAgX3BhZ2UtPmxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMobGF5b3V0TWlsZXN0b25l
cyhvYnNlcnZlZFJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKSk7Ci19CisgICAgICAgICAgICBhdXRv
IGNoZWNrZXIgPSBXZWJLaXQ6OkNvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShp
bnB1dERlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6d2lsbFN1Ym1pdEZvcm1WYWx1
ZXM6dXNlck9iamVjdDpzdWJtaXNzaW9uSGFuZGxlcjopKTsKKyAgICAgICAgICAgIFtpbnB1dERl
bGVnYXRlIF93ZWJWaWV3Om1fd2ViVmlldyB3aWxsU3VibWl0Rm9ybVZhbHVlczp2YWx1ZU1hcC5n
ZXQoKSB1c2VyT2JqZWN0OnVzZXJPYmplY3Qgc3VibWlzc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRy
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2Vy
ID0gV1RGTW92ZShjaGVja2VyKV0geworICAgICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21w
bGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KS5nZXQo
KV07CisgICAgICAgIH0KIAotLSAodm9pZClfZ2V0TWFpblJlc291cmNlRGF0YVdpdGhDb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXIKLXsKLSAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtjb21wbGV0aW9uSGFuZGxlciBjb3B5
XSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgfTsK
IAotICAgIF9wYWdlLT5nZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShfcGFnZS0+bWFpbkZyYW1l
KCksIFtoYW5kbGVyXShBUEk6OkRhdGEqIGRhdGEsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
ciBlcnJvcikgewotICAgICAgICB2b2lkICheY29tcGxldGlvbkhhbmRsZXJCbG9jaykoTlNEYXRh
ICosIE5TRXJyb3IgKikgPSAodm9pZCAoXikoTlNEYXRhICosIE5TRXJyb3IgKikpaGFuZGxlci5n
ZXQoKTsKLSAgICAgICAgaWYgKGVycm9yICE9IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6
Tm9uZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFBpcGUgYSBwcm9wZXIgZXJyb3IgaW4gZnJv
bSB0aGUgV2ViUGFnZVByb3h5LgotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayhu
aWwsIFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpXS0Vycm9yRG9tYWluIGNvZGU6c3RhdGljX2Nh
c3Q8aW50PihlcnJvcikgdXNlckluZm86bmlsXSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXJCbG9jayh3cmFwcGVyKCpkYXRhKSwgbmlsKTsKLSAgICB9KTsK
KyAgICBpZiAoaW5wdXREZWxlZ2F0ZSkKKyAgICAgICAgX3BhZ2UtPnNldEZvcm1DbGllbnQobWFr
ZVVuaXF1ZTxGb3JtQ2xpZW50PihzZWxmKSk7CisgICAgZWxzZQorICAgICAgICBfcGFnZS0+c2V0
Rm9ybUNsaWVudChudWxscHRyKTsKIH0KIAotLSAodm9pZClfZ2V0V2ViQXJjaGl2ZURhdGFXaXRo
Q29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TRGF0YSAqLCBOU0Vycm9yICopKWNvbXBsZXRp
b25IYW5kbGVyCistIChCT09MKV9pc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2VEb2N1bWVudAog
ewotICAgIFtzZWxmIGNyZWF0ZVdlYkFyY2hpdmVEYXRhV2l0aENvbXBsZXRpb25IYW5kbGVyOmNv
bXBsZXRpb25IYW5kbGVyXTsKKyAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5G
cmFtZSgpKQorICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFsb25l
SW1hZ2VEb2N1bWVudCgpOworICAgIHJldHVybiBOTzsKIH0KIAotLSAodm9pZClfZ2V0Q29udGVu
dHNBc1N0cmluZ1dpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNTdHJpbmcgKiwgTlNF
cnJvciAqKSljb21wbGV0aW9uSGFuZGxlcgorLSAoQk9PTClfaXNEaXNwbGF5aW5nU3RhbmRhbG9u
ZU1lZGlhRG9jdW1lbnQKIHsKLSAgICBhdXRvIGhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpOwotCi0gICAgX3BhZ2UtPmdldENvbnRlbnRzQXNTdHJpbmcoW2hhbmRsZXJd
KFN0cmluZyBzdHJpbmcsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewotICAg
ICAgICBpZiAoZXJyb3IgIT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogUGlwZSBhIHByb3BlciBlcnJvciBpbiBmcm9tIHRoZSBXZWJQ
YWdlUHJveHkuCi0gICAgICAgICAgICBoYW5kbGVyKG5pbCwgW05TRXJyb3IgZXJyb3JXaXRoRG9t
YWluOldLRXJyb3JEb21haW4gY29kZTpzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSB1c2VySW5mbzpu
aWxdKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBoYW5kbGVyKHN0cmluZywgbmlsKTsK
LSAgICB9KTsKKyAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2UtPm1haW5GcmFtZSgpKQor
ICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFuZGFsb25lTWVkaWFEb2N1
bWVudCgpOworICAgIHJldHVybiBOTzsKIH0KIAotLSAodm9pZClfZ2V0Q29udGVudHNBc0F0dHJp
YnV0ZWRTdHJpbmdXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXR0cmlidXRlZFN0
cmluZyAqLCBOU0RpY3Rpb25hcnk8TlNBdHRyaWJ1dGVkU3RyaW5nRG9jdW1lbnRBdHRyaWJ1dGVL
ZXksIGlkPiAqLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyCistIChCT09MKV9pc1BsYXlp
bmdBdWRpbwogewotICAgIF9wYWdlLT5nZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhbaGFu
ZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGF0dHJpYnV0ZWRT
dHJpbmcpIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nKQotICAgICAgICAg
ICAgaGFuZGxlcihbW2F0dHJpYnV0ZWRTdHJpbmcuc3RyaW5nLmdldCgpIHJldGFpbl0gYXV0b3Jl
bGVhc2VdLCBbW2F0dHJpYnV0ZWRTdHJpbmcuZG9jdW1lbnRBdHRyaWJ1dGVzLmdldCgpIHJldGFp
bl0gYXV0b3JlbGVhc2VdLCBuaWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoYW5kbGVy
KG5pbCwgbmlsLCBjcmVhdGVOU0Vycm9yKFdLRXJyb3JVbmtub3duKS5nZXQoKSk7Ci0gICAgfSk7
CisgICAgcmV0dXJuIF9wYWdlLT5pc1BsYXlpbmdBdWRpbygpOwogfQogCi0tICh2b2lkKV9nZXRB
cHBsaWNhdGlvbk1hbmlmZXN0V2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShfV0tBcHBs
aWNhdGlvbk1hbmlmZXN0ICopKWNvbXBsZXRpb25IYW5kbGVyCistIChCT09MKV9pc1Nob3dpbmdO
YXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90CiB7Ci0jaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklG
RVNUKQotICAgIF9wYWdlLT5nZXRBcHBsaWNhdGlvbk1hbmlmZXN0KFtjb21wbGV0aW9uSGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKGNvbnN0IE9wdGlvbmFsPFdlYkNv
cmU6OkFwcGxpY2F0aW9uTWFuaWZlc3Q+JiBtYW5pZmVzdCwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6
OkVycm9yIGVycm9yKSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShlcnJvcik7Ci0gICAgICAgIGlm
IChjb21wbGV0aW9uSGFuZGxlcikgewotICAgICAgICAgICAgaWYgKG1hbmlmZXN0KSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBhcGlNYW5pZmVzdCA9IEFQSTo6QXBwbGljYXRpb25NYW5pZmVzdDo6
Y3JlYXRlKCptYW5pZmVzdCk7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod3Jh
cHBlcihhcGlNYW5pZmVzdCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIobmlsKTsKLSAgICAgICAgfQotICAgIH0pOwotI2Vsc2UKLSAgICBp
ZiAoY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKG5pbCk7Ci0j
ZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UtPmlzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNo
b3QoKTsKIH0KIAotLSAoX1dLUGFnaW5hdGlvbk1vZGUpX3BhZ2luYXRpb25Nb2RlCistIChfV0tM
YXlvdXRNb2RlKV9sYXlvdXRNb2RlCiB7Ci0gICAgc3dpdGNoIChfcGFnZS0+cGFnaW5hdGlvbk1v
ZGUoKSkgewotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ6Ci0gICAg
ICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVVucGFnaW5hdGVkOwotICAgIGNhc2UgV2ViQ29y
ZTo6UGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQ
YWdpbmF0aW9uTW9kZUxlZnRUb1JpZ2h0OwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6
UmlnaHRUb0xlZnRQYWdpbmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVJp
Z2h0VG9MZWZ0OwotICAgIGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdp
bmF0ZWQ6Ci0gICAgICAgIHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOwotICAg
IGNhc2UgV2ViQ29yZTo6UGFnaW5hdGlvbjo6Qm90dG9tVG9Ub3BQYWdpbmF0ZWQ6Ci0gICAgICAg
IHJldHVybiBfV0tQYWdpbmF0aW9uTW9kZUJvdHRvbVRvVG9wOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBzd2l0Y2ggKF9pbXBsLT5sYXlvdXRNb2RlKCkpIHsKKyAgICBjYXNlIGtXS0xheW91dE1v
ZGVGaXhlZFNpemU6CisgICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlRml4ZWRTaXplOworICAg
IGNhc2Uga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlOgorICAg
ICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxl
OworICAgIGNhc2Uga1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11bURv
Y3VtZW50U2l6ZToKKyAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1
dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7CisgICAgY2FzZSBrV0tMYXlvdXRNb2RlVmlld1Np
emU6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVWaWV3U2l6ZTsK
ICAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gX1dLUGFnaW5h
dGlvbk1vZGVVbnBhZ2luYXRlZDsKKyNlbHNlCisgICAgcmV0dXJuIF9wYWdlLT51c2VGaXhlZExh
eW91dCgpID8gX1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSA6IF9XS0xheW91dE1vZGVWaWV3U2l6ZTsK
KyNlbmRpZgogfQogCi0tICh2b2lkKV9zZXRQYWdpbmF0aW9uTW9kZTooX1dLUGFnaW5hdGlvbk1v
ZGUpcGFnaW5hdGlvbk1vZGUKKy0gKHZvaWQpX3NldExheW91dE1vZGU6KF9XS0xheW91dE1vZGUp
bGF5b3V0TW9kZQogewotICAgIFdlYkNvcmU6OlBhZ2luYXRpb246Ok1vZGUgbW9kZTsKLSAgICBz
d2l0Y2ggKHBhZ2luYXRpb25Nb2RlKSB7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVVucGFn
aW5hdGVkOgotICAgICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlvbk1vZGVMZWZ0VG9SaWdodDoK
LSAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OkxlZnRUb1JpZ2h0UGFnaW5hdGVk
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIF9XS1BhZ2luYXRpb25Nb2RlUmlnaHRUb0xlZnQ6
Ci0gICAgICAgIG1vZGUgPSBXZWJDb3JlOjpQYWdpbmF0aW9uOjpSaWdodFRvTGVmdFBhZ2luYXRl
ZDsKKyNpZiBQTEFURk9STShNQUMpCisgICAgV0tMYXlvdXRNb2RlIHdrVmlld0xheW91dE1vZGU7
CisgICAgc3dpdGNoIChsYXlvdXRNb2RlKSB7CisgICAgY2FzZSBfV0tMYXlvdXRNb2RlRml4ZWRT
aXplOgorICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9kZUZpeGVkU2l6ZTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tQYWdpbmF0aW9uTW9kZVRvcFRvQm90dG9tOgot
ICAgICAgICBtb2RlID0gV2ViQ29yZTo6UGFnaW5hdGlvbjo6VG9wVG9Cb3R0b21QYWdpbmF0ZWQ7
CisgICAgY2FzZSBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6
CisgICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21w
dXRlZEZyb21WaWV3U2NhbGU7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1dLUGFnaW5hdGlv
bk1vZGVCb3R0b21Ub1RvcDoKLSAgICAgICAgbW9kZSA9IFdlYkNvcmU6OlBhZ2luYXRpb246OkJv
dHRvbVRvVG9wUGFnaW5hdGVkOworICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29t
cHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZToKKyAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9
IGtXS0xheW91dE1vZGVEeW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgX1dLTGF5b3V0TW9kZVZpZXdTaXplOgogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xh
eW91dE1vZGVWaWV3U2l6ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIF9pbXBsLT5zZXRM
YXlvdXRNb2RlKHdrVmlld0xheW91dE1vZGUpOworI2Vsc2UKKyAgICBfcGFnZS0+c2V0VXNlRml4
ZWRMYXlvdXQobGF5b3V0TW9kZSA9PSBfV0tMYXlvdXRNb2RlRml4ZWRTaXplIHx8IGxheW91dE1v
ZGUgPT0gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tVmlld1NjYWxlKTsKKyNl
bmRpZgorfQogCi0gICAgX3BhZ2UtPnNldFBhZ2luYXRpb25Nb2RlKG1vZGUpOworLSAoQ0dTaXpl
KV9maXhlZExheW91dFNpemUKK3sKKyAgICByZXR1cm4gX3BhZ2UtPmZpeGVkTGF5b3V0U2l6ZSgp
OwogfQogCi0tIChCT09MKV9wYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zCistICh2b2lkKV9z
ZXRGaXhlZExheW91dFNpemU6KENHU2l6ZSlmaXhlZExheW91dFNpemUKIHsKLSAgICByZXR1cm4g
X3BhZ2UtPnBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoKTsKKyAgICBfcGFnZS0+c2V0Rml4
ZWRMYXlvdXRTaXplKFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUo
Zml4ZWRMYXlvdXRTaXplKSkpOwogfQogCi0tICh2b2lkKV9zZXRQYWdpbmF0aW9uQmVoYXZlc0xp
a2VDb2x1bW5zOihCT09MKWJlaGF2ZXNMaWtlQ29sdW1ucworLSAodm9pZClfc2V0QmFja2dyb3Vu
ZEV4dGVuZHNCZXlvbmRQYWdlOihCT09MKWJhY2tncm91bmRFeHRlbmRzCiB7Ci0gICAgX3BhZ2Ut
PnNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKTsKKyAg
ICBfcGFnZS0+c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tncm91bmRFeHRlbmRz
KTsKIH0KIAotLSAoQ0dGbG9hdClfcGFnZUxlbmd0aAorLSAoQk9PTClfYmFja2dyb3VuZEV4dGVu
ZHNCZXlvbmRQYWdlCiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5wYWdlTGVuZ3RoKCk7CisgICAgcmV0
dXJuIF9wYWdlLT5iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKTsKIH0KIAotLSAodm9pZClf
c2V0UGFnZUxlbmd0aDooQ0dGbG9hdClwYWdlTGVuZ3RoCistIChDR0Zsb2F0KV92aWV3U2NhbGUK
IHsKLSAgICBfcGFnZS0+c2V0UGFnZUxlbmd0aChwYWdlTGVuZ3RoKTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgcmV0dXJuIF9wYWdlLT52aWV3U2NhbGVGYWN0b3IoKTsKKyNlbHNlCisgICAgcmV0
dXJuIF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKTsKKyNlbmRpZgogfQogCi0tIChDR0Zs
b2F0KV9nYXBCZXR3ZWVuUGFnZXMKKy0gKHZvaWQpX3NldFZpZXdTY2FsZTooQ0dGbG9hdCl2aWV3
U2NhbGUKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmdhcEJldHdlZW5QYWdlcygpOworICAgIGlmICh2
aWV3U2NhbGUgPD0gMCB8fCBpc25hbih2aWV3U2NhbGUpIHx8IGlzaW5mKHZpZXdTY2FsZSkpCisg
ICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3Jt
YXQ6QCJWaWV3IHNjYWxlIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlciJdOworCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIF9pbXBsLT5zZXRWaWV3U2NhbGUodmlld1NjYWxlKTsKKyNlbHNlCisg
ICAgaWYgKF9wYWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKSA9PSB2aWV3U2NhbGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5
b3V0U2l6ZShbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc10sIHZpZXdTY2Fs
ZSwgX3BhZ2UtPm1pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCgpKTsKKyNlbmRpZgogfQogCi0t
ICh2b2lkKV9zZXRHYXBCZXR3ZWVuUGFnZXM6KENHRmxvYXQpZ2FwQmV0d2VlblBhZ2VzCistICh2
b2lkKV9zZXRNaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGg6KENHRmxvYXQpbWluaW11bUVmZmVj
dGl2ZURldmljZVdpZHRoCiB7Ci0gICAgX3BhZ2UtPnNldEdhcEJldHdlZW5QYWdlcyhnYXBCZXR3
ZWVuUGFnZXMpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKF9wYWdlLT5taW5p
bXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKSA9PSBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgp
CisgICAgICAgIHJldHVybjsKKworICAgIF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25W
aWV3TGF5b3V0U2l6ZShbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc10sIF9w
YWdlLT5sYXlvdXRTaXplU2NhbGVGYWN0b3IoKSwgbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRo
KTsKKyNlbmRpZgogfQogCi0tIChCT09MKV9wYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkCistIChD
R0Zsb2F0KV9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgKIHsKLSAgICByZXR1cm4gX3BhZ2Ut
PnBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIHJldHVybiBfcGFnZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCk7CisjZWxzZQor
ICAgIHJldHVybiAwOworI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NldFBhZ2luYXRpb25MaW5lR3Jp
ZEVuYWJsZWQ6KEJPT0wpbGluZUdyaWRFbmFibGVkCisjcHJhZ21hIG1hcmsgc2Nyb2xscGVyZiBt
ZXRob2RzCisKKy0gKHZvaWQpX3NldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFi
bGVkOihCT09MKWVuYWJsZWQKIHsKLSAgICBfcGFnZS0+c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5h
YmxlZChsaW5lR3JpZEVuYWJsZWQpOworICAgIF9wYWdlLT5zZXRTY3JvbGxQZXJmb3JtYW5jZURh
dGFDb2xsZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAotLSAoTlNVSW50ZWdlcilfcGFnZUNv
dW50CistIChCT09MKV9zY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZAogewot
ICAgIHJldHVybiBfcGFnZS0+cGFnZUNvdW50KCk7CisgICAgcmV0dXJuIF9wYWdlLT5zY3JvbGxQ
ZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5hYmxlZCgpOwogfQogCi0tIChCT09MKV9zdXBwb3J0
c1RleHRab29tCistIChOU0FycmF5ICopX3Njcm9sbFBlcmZvcm1hbmNlRGF0YQogewotICAgIHJl
dHVybiBfcGFnZS0+c3VwcG9ydHNUZXh0Wm9vbSgpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgaWYgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlU2Nyb2xsaW5nUGVyZm9ybWFuY2VEYXRh
KiBzY3JvbGxQZXJmRGF0YSA9IF9wYWdlLT5zY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbFBlcmZEYXRhLT5kYXRhKCk7CisjZW5kaWYKKyAgICByZXR1cm4g
bmlsOwogfQogCi0tIChkb3VibGUpX3RleHRab29tRmFjdG9yCisjcHJhZ21hIG1hcmsgbWVkaWEg
cGxheWJhY2sgcmVzdHJpY3Rpb25zCisKKy0gKEJPT0wpX2FsbG93c01lZGlhRG9jdW1lbnRJbmxp
bmVQbGF5YmFjawogewotICAgIHJldHVybiBfcGFnZS0+dGV4dFpvb21GYWN0b3IoKTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIHJldHVybiBfcGFnZS0+YWxsb3dzTWVkaWFEb2N1bWVu
dElubGluZVBsYXliYWNrKCk7CisjZWxzZQorICAgIHJldHVybiBOTzsKKyNlbmRpZgogfQogCi0t
ICh2b2lkKV9zZXRUZXh0Wm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3IKKy0gKHZvaWQpX3Nl
dEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjazooQk9PTClmbGFnCiB7Ci0gICAgX3Bh
Z2UtPnNldFRleHRab29tRmFjdG9yKHpvb21GYWN0b3IpOworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgX3BhZ2UtPnNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhmbGFn
KTsKKyNlbmRpZgogfQogCi0tICh2b2lkKXNldFBhZ2Vab29tOihDR0Zsb2F0KXBhZ2Vab29tCist
IChCT09MKV93ZWJQcm9jZXNzSXNSZXNwb25zaXZlCiB7Ci0gICAgX3BhZ2UtPnNldFBhZ2Vab29t
RmFjdG9yKHBhZ2Vab29tKTsKKyAgICByZXR1cm4gX3BhZ2UtPnByb2Nlc3MoKS5pc1Jlc3BvbnNp
dmUoKTsKIH0KIAotLSAoQ0dGbG9hdClwYWdlWm9vbQorLSAodm9pZClfc2V0RnVsbHNjcmVlbkRl
bGVnYXRlOihpZDxfV0tGdWxsc2NyZWVuRGVsZWdhdGU+KWRlbGVnYXRlCiB7Ci0gICAgcmV0dXJu
IF9wYWdlLT5wYWdlWm9vbUZhY3RvcigpOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICBpZiAoaXM8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVu
dCgpKSkKKyAgICAgICAgZG93bmNhc3Q8V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+
ZnVsbHNjcmVlbkNsaWVudCgpKS5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7CisjZW5kaWYKK30KKwor
LSAoaWQ8X1dLRnVsbHNjcmVlbkRlbGVnYXRlPilfZnVsbHNjcmVlbkRlbGVnYXRlCit7CisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGll
bnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8
V2ViS2l0OjpGdWxsc2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKS5kZWxl
Z2F0ZSgpLmF1dG9yZWxlYXNlKCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmlsOworfQorCistIChC
T09MKV9pc0luRnVsbHNjcmVlbgoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBy
ZXR1cm4gX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCkgJiYgX3BhZ2UtPmZ1bGxTY3JlZW5NYW5h
Z2VyKCktPmlzRnVsbFNjcmVlbigpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYK
K30KKworLSAoX1dLTWVkaWFDYXB0dXJlU3RhdGUpX21lZGlhQ2FwdHVyZVN0YXRlCit7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9XS01lZGlhQ2FwdHVyZVN0YXRlKF9wYWdlLT5tZWRpYVN0YXRlRmxh
Z3MoKSk7Cit9CisKKy0gKHZvaWQpX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6KEJPT0wpZW5hYmxl
ZAoreworICAgIF9wYWdlLT5zZXRNZWRpYUNhcHR1cmVFbmFibGVkKGVuYWJsZWQpOworfQorCist
IChCT09MKV9tZWRpYUNhcHR1cmVFbmFibGVkCit7CisgICAgcmV0dXJuIF9wYWdlLT5tZWRpYUNh
cHR1cmVFbmFibGVkKCk7Cit9CisKKy0gKHZvaWQpX3NldFBhZ2VNdXRlZDooX1dLTWVkaWFNdXRl
ZFN0YXRlKW11dGVkU3RhdGUKK3sKKyAgICBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0
YXRlRmxhZ3MgY29yZVN0YXRlID0gV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6Tm9uZU11dGVkOwor
CisgICAgaWYgKG11dGVkU3RhdGUgJiBfV0tNZWRpYUF1ZGlvTXV0ZWQpCisgICAgICAgIGNvcmVT
dGF0ZSB8PSBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpBdWRpb0lzTXV0ZWQ7CisgICAgaWYgKG11
dGVkU3RhdGUgJiBfV0tNZWRpYUNhcHR1cmVEZXZpY2VzTXV0ZWQpCisgICAgICAgIGNvcmVTdGF0
ZSB8PSBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpBdWRpb0FuZFZpZGVvQ2FwdHVyZUlzTXV0ZWQ7
CisgICAgaWYgKG11dGVkU3RhdGUgJiBfV0tNZWRpYVNjcmVlbkNhcHR1cmVNdXRlZCkKKyAgICAg
ICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6OlNjcmVlbkNhcHR1cmVJc011
dGVkOworCisgICAgX3BhZ2UtPnNldE11dGVkKGNvcmVTdGF0ZSk7Cit9CisKKy0gKHZvaWQpX3Jl
bW92ZURhdGFEZXRlY3RlZExpbmtzOihkaXNwYXRjaF9ibG9ja190KWNvbXBsZXRpb24KK3sKKyNp
ZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCisgICAgX3BhZ2UtPnJlbW92ZURhdGFEZXRlY3RlZExp
bmtzKFtjb21wbGV0aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0gbWFrZVdl
YWtQdHIoX3BhZ2UuZ2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7CisgICAgICAgIGlmIChwYWdlKQor
ICAgICAgICAgICAgcGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOworICAgICAg
ICBpZiAoY29tcGxldGlvbikKKyAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKKyAgICB9KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworI2VuZGlmCit9CisKKyNwcmFnbWEg
bWFyayBpT1Mtc3BlY2lmaWMgbWV0aG9kcworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwor
LSAodm9pZClfZGV0ZWN0RGF0YVdpdGhUeXBlczooV0tEYXRhRGV0ZWN0b3JUeXBlcyl0eXBlcyBj
b21wbGV0aW9uSGFuZGxlcjooZGlzcGF0Y2hfYmxvY2tfdCljb21wbGV0aW9uCit7CisjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQorICAgIF9wYWdlLT5kZXRlY3REYXRhSW5BbGxGcmFtZXMoZnJv
bVdLRGF0YURldGVjdG9yVHlwZXModHlwZXMpLCBbY29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihj
b21wbGV0aW9uKSwgcGFnZSA9IG1ha2VXZWFrUHRyKF9wYWdlLmdldCgpKV0gKGF1dG8mIHJlc3Vs
dCkgeworICAgICAgICBpZiAocGFnZSkKKyAgICAgICAgICAgIHBhZ2UtPnNldERhdGFEZXRlY3Rp
b25SZXN1bHQocmVzdWx0KTsKKyAgICAgICAgaWYgKGNvbXBsZXRpb24pCisgICAgICAgICAgICBj
b21wbGV0aW9uKCk7CisgICAgfSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0eXBlcyk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCistICh2b2lkKXJlbW92ZUZyb21TdXBlcnZpZXcKK3sKKyAgICBbc3VwZXIg
cmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBpZiAoW19mdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBpc0Z1bGxTY3JlZW5dKQorICAgICAgICBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IHdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dOworfQorI2Vu
ZGlmCisKKy8vIERlcHJlY2F0ZWQgU1BJLgorLSAoQ0dTaXplKV9taW5pbXVtTGF5b3V0U2l6ZU92
ZXJyaWRlCit7CisgICAgQVNTRVJUKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKTsKKyAgICByZXR1
cm4gX3ZpZXdMYXlvdXRTaXplT3ZlcnJpZGUudmFsdWVPcihDR1NpemVaZXJvKTsKK30KKworLSAo
dm9pZClfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTooQ0dTaXplKXZpZXdMYXlvdXRTaXplT3Zl
cnJpZGUKK3sKKyAgICBfdmlld0xheW91dFNpemVPdmVycmlkZSA9IHZpZXdMYXlvdXRTaXplT3Zl
cnJpZGU7CisKKyAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpE
eW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykKKyAgICAgICAgW3NlbGYgX2Rp
c3BhdGNoU2V0Vmlld0xheW91dFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKHZpZXdMYXlvdXRTaXpl
T3ZlcnJpZGUpXTsKK30KKworLSAoVUlFZGdlSW5zZXRzKV9vYnNjdXJlZEluc2V0cworeworICAg
IHJldHVybiBfb2JzY3VyZWRJbnNldHM7Cit9CisKKy0gKHZvaWQpX3NldE9ic2N1cmVkSW5zZXRz
OihVSUVkZ2VJbnNldHMpb2JzY3VyZWRJbnNldHMKK3sKKyAgICBBU1NFUlQob2JzY3VyZWRJbnNl
dHMudG9wID49IDApOworICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy5sZWZ0ID49IDApOworICAg
IEFTU0VSVChvYnNjdXJlZEluc2V0cy5ib3R0b20gPj0gMCk7CisgICAgQVNTRVJUKG9ic2N1cmVk
SW5zZXRzLnJpZ2h0ID49IDApOworCisgICAgX2hhdmVTZXRPYnNjdXJlZEluc2V0cyA9IFlFUzsK
KworICAgIGlmIChVSUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhfb2JzY3VyZWRJbnNldHMs
IG9ic2N1cmVkSW5zZXRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX29ic2N1cmVkSW5zZXRz
ID0gb2JzY3VyZWRJbnNldHM7CisKKyAgICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVdOworfQorCistIChVSVJlY3RFZGdlKV9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3Rl
ZEJ5U2FmZUFyZWEKK3sKKyAgICByZXR1cm4gX29ic2N1cmVkSW5zZXRFZGdlc0FmZmVjdGVkQnlT
YWZlQXJlYTsKK30KKworLSAodm9pZClfc2V0T2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNh
ZmVBcmVhOihVSVJlY3RFZGdlKWVkZ2VzCit7CisgICAgaWYgKGVkZ2VzID09IF9vYnNjdXJlZElu
c2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIF9vYnNj
dXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEgPSBlZGdlczsKKworICAgIFtzZWxmIF9z
Y2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cit9CisKKy0gKFVJRWRnZUluc2V0cylf
dW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzCit7CisgICAgcmV0dXJuIF91bm9ic2N1cmVkU2FmZUFy
ZWFJbnNldHM7Cit9CisKKy0gKHZvaWQpX3NldFVub2JzY3VyZWRTYWZlQXJlYUluc2V0czooVUlF
ZGdlSW5zZXRzKXVub2JzY3VyZWRTYWZlQXJlYUluc2V0cworeworICAgIEFTU0VSVCh1bm9ic2N1
cmVkU2FmZUFyZWFJbnNldHMudG9wID49IDApOworICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFy
ZWFJbnNldHMubGVmdCA+PSAwKTsKKyAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRz
LmJvdHRvbSA+PSAwKTsKKyAgICBBU1NFUlQodW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0
ID49IDApOworCisgICAgX2hhdmVTZXRVbm9ic2N1cmVkU2FmZUFyZWFJbnNldHMgPSBZRVM7CisK
KyAgICBpZiAoVUlFZGdlSW5zZXRzRXF1YWxUb0VkZ2VJbnNldHMoX3Vub2JzY3VyZWRTYWZlQXJl
YUluc2V0cywgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgX3Vub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IHVub2JzY3VyZWRTYWZlQXJlYUluc2V0czsK
KworICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Cit9CisKKy0g
KEJPT0wpX3NhZmVBcmVhU2hvdWxkQWZmZWN0T2JzY3VyZWRJbnNldHMKK3sKKyAgICBpZiAoIVtz
ZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRWaWV3XSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJl
dHVybiBfYXZvaWRzVW5zYWZlQXJlYTsKK30KKworLSAodm9pZClfc2V0SW50ZXJmYWNlT3JpZW50
YXRpb25PdmVycmlkZTooVUlJbnRlcmZhY2VPcmllbnRhdGlvbilpbnRlcmZhY2VPcmllbnRhdGlv
bgoreworICAgIF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA9IFlFUzsKKyAgICBfaW50
ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IGludGVyZmFjZU9yaWVudGF0aW9uOworCisgICAg
aWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0
VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCisgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmlj
ZU9yaWVudGF0aW9uOmRldmljZU9yaWVudGF0aW9uRm9yVUlJbnRlcmZhY2VPcmllbnRhdGlvbihf
aW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSldOworfQorCistIChVSUludGVyZmFjZU9yaWVu
dGF0aW9uKV9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlCit7CisgICAgQVNTRVJUKF9vdmVy
cmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbik7CisgICAgcmV0dXJuIF9pbnRlcmZhY2VPcmllbnRh
dGlvbk92ZXJyaWRlOworfQorCistICh2b2lkKV9jbGVhckludGVyZmFjZU9yaWVudGF0aW9uT3Zl
cnJpZGUKK3sKKyAgICBfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24gPSBOTzsKKyAgICBf
aW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IFVJSW50ZXJmYWNlT3JpZW50YXRpb25Qb3J0
cmFpdDsKK30KKworLy8gRGVwcmVjYXRlZCBTUEkKKy0gKENHU2l6ZSlfbWF4aW11bVVub2JzY3Vy
ZWRTaXplT3ZlcnJpZGUKK3sKKyAgICBBU1NFUlQoX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJy
aWRlKTsKKyAgICByZXR1cm4gX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlLnZhbHVlT3Io
Q0dTaXplWmVybyk7Cit9CisKKy0gKHZvaWQpX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJy
aWRlOihDR1NpemUpc2l6ZQoreworICAgIEFTU0VSVChzaXplLndpZHRoIDw9IHNlbGYuYm91bmRz
LnNpemUud2lkdGggJiYgc2l6ZS5oZWlnaHQgPD0gc2VsZi5ib3VuZHMuc2l6ZS5oZWlnaHQpOwor
ICAgIF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IHNpemU7CisKKyAgICBpZiAoX2R5
bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUgPT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVN
b2RlOjpOb3RSZXNpemluZykKKyAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0TWF4aW11bVVub2Jz
Y3VyZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShzaXplKV07Cit9CisKKy0gKHZvaWQpX3NldEFs
bG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQ6KEJPT0wpYWxsb3dTaHJpbmtUb0ZpdAoreworICAgIF9h
bGxvd3NWaWV3cG9ydFNocmlua1RvRml0ID0gYWxsb3dTaHJpbmtUb0ZpdDsKK30KKworLSAoQk9P
TClfYWxsb3dzVmlld3BvcnRTaHJpbmtUb0ZpdAoreworICAgIHJldHVybiBfYWxsb3dzVmlld3Bv
cnRTaHJpbmtUb0ZpdDsKK30KKworLSAodm9pZClfYmVnaW5JbnRlcmFjdGl2ZU9ic2N1cmVkSW5z
ZXRzQ2hhbmdlCit7CisgICAgQVNTRVJUKCFfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJh
Y3RpdmVseSk7CisgICAgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBZ
RVM7Cit9CisKKy0gKHZvaWQpX2VuZEludGVyYWN0aXZlT2JzY3VyZWRJbnNldHNDaGFuZ2UKK3sK
KyAgICBBU1NFUlQoX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkpOworICAg
IF9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5ID0gTk87CisgICAgW3NlbGYg
X3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlXTsKK30KKworLSAodm9pZClfaGlkZUNv
bnRlbnRVbnRpbE5leHRVcGRhdGUKK3sKKyAgICBpZiAoYXV0byogYXJlYSA9IF9wYWdlLT5kcmF3
aW5nQXJlYSgpKQorICAgICAgICBhcmVhLT5oaWRlQ29udGVudFVudGlsQW55VXBkYXRlKCk7Cit9
CisKKy0gKHZvaWQpX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczoodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sKK3sKKyAgICBDR1JlY3Qgb2xkQm91bmRzID0gc2VsZi5ib3VuZHM7Cisg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdCA9IF9wYWdlLT51
bm9ic2N1cmVkQ29udGVudFJlY3QoKTsKKworICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29u
dGVudFZpZXddIHx8ICFfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSB8fCBDR1JlY3RJc0Vt
cHR5KG9sZEJvdW5kcykgfHwgb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoW19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6KV0pCisgICAgICAgICAgICBb
X2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBk
YXRlQmxvY2tdOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1cGRhdGVCbG9jaygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBh
Z2VQcm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0
ZXM6XSIsIHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CisKKyAgICBfZHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9k
ZTo6UmVzaXppbmdXaXRoQW5pbWF0aW9uOworCisgICAgYXV0byBvbGRWaWV3TGF5b3V0U2l6ZSA9
IFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXTsKKyAgICBhdXRvIG9sZE1h
eGltdW1Vbm9ic2N1cmVkU2l6ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShzZWxmLCBv
bGRCb3VuZHMpOworICAgIGludDMyX3Qgb2xkT3JpZW50YXRpb24gPSBhY3RpdmVPcmllbnRhdGlv
bihzZWxmKTsKKyAgICBVSUVkZ2VJbnNldHMgb2xkT2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJ
bnNldHM7CisKKyAgICB1cGRhdGVCbG9jaygpOworCisgICAgQ0dSZWN0IG5ld0JvdW5kcyA9IHNl
bGYuYm91bmRzOworICAgIGF1dG8gbmV3Vmlld0xheW91dFNpemUgPSBbc2VsZiBhY3RpdmVWaWV3
TGF5b3V0U2l6ZTpuZXdCb3VuZHNdOworICAgIGF1dG8gbmV3TWF4aW11bVVub2JzY3VyZWRTaXpl
ID0gYWN0aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG5ld0JvdW5kcyk7CisgICAgaW50
MzJfdCBuZXdPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYpOworICAgIFVJRWRn
ZUluc2V0cyBuZXdPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsKKyAgICBDR1JlY3Qg
ZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcyA9IFVJRWRnZUluc2V0c0luc2V0
UmVjdChuZXdCb3VuZHMsIF9vYnNjdXJlZEluc2V0cyk7CisgICAgQ0dSZWN0IGNvbnRlbnRWaWV3
Qm91bmRzID0gW19jb250ZW50VmlldyBib3VuZHNdOworCisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlICYmIG5ld1ZpZXdMYXlvdXRTaXplLmlzRW1wdHko
KSksICJDbGllbnRzIGNvbnRyb2xsaW5nIHRoZSBsYXlvdXQgc2l6ZSBzaG91bGQgbWFpbnRhaW4g
YSB2YWxpZCBsYXlvdXQgc2l6ZSB0byBtaW5pbWl6ZSBsYXlvdXRzLiIpOworICAgIGlmIChDR1Jl
Y3RJc0VtcHR5KG5ld0JvdW5kcykgfHwgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgpIHx8IENH
UmVjdElzRW1wdHkoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcykgfHwgQ0dS
ZWN0SXNFbXB0eShjb250ZW50Vmlld0JvdW5kcykpIHsKKyAgICAgICAgW3NlbGYgX2NhbmNlbEFu
aW1hdGVkUmVzaXplXTsKKyAgICAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKKyAg
ICAgICAgaWYgKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKQorICAgICAgICAgICAgW3NlbGYgX2Rp
c3BhdGNoU2V0Vmlld0xheW91dFNpemU6bmV3Vmlld0xheW91dFNpemVdOworICAgICAgICBpZiAo
X21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKQorICAgICAgICAgICAgW3NlbGYgX2Rpc3Bh
dGNoU2V0TWF4aW11bVVub2JzY3VyZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShuZXdNYXhpbXVt
VW5vYnNjdXJlZFNpemUpXTsKKyAgICAgICAgaWYgKF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRh
dGlvbikKKyAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOm5l
d09yaWVudGF0aW9uXTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKENHUmVj
dEVxdWFsVG9SZWN0KG9sZEJvdW5kcywgbmV3Qm91bmRzKQorICAgICAgICAmJiBvbGRWaWV3TGF5
b3V0U2l6ZSA9PSBuZXdWaWV3TGF5b3V0U2l6ZQorICAgICAgICAmJiBvbGRNYXhpbXVtVW5vYnNj
dXJlZFNpemUgPT0gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplCisgICAgICAgICYmIG9sZE9yaWVu
dGF0aW9uID09IG5ld09yaWVudGF0aW9uCisgICAgICAgICYmIFVJRWRnZUluc2V0c0VxdWFsVG9F
ZGdlSW5zZXRzKG9sZE9ic2N1cmVkSW5zZXRzLCBuZXdPYnNjdXJlZEluc2V0cykpIHsKKyAgICAg
ICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cyA9IENBVHJhbnNmb3Jt
M0RJZGVudGl0eTsKKworICAgIGlmICghX3Jlc2l6ZUFuaW1hdGlvblZpZXcpIHsKKyAgICAgICAg
TlNVSW50ZWdlciBpbmRleE9mQ29udGVudFZpZXcgPSBbW19zY3JvbGxWaWV3IHN1YnZpZXdzXSBp
bmRleE9mT2JqZWN0Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgICAgIF9yZXNpemVBbmltYXRp
b25WaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOworICAgICAgICBbX3Jlc2l6
ZUFuaW1hdGlvblZpZXcgbGF5ZXJdLm5hbWUgPSBAIlJlc2l6ZUFuaW1hdGlvbiI7CisgICAgICAg
IFtfc2Nyb2xsVmlldyBpbnNlcnRTdWJ2aWV3Ol9yZXNpemVBbmltYXRpb25WaWV3LmdldCgpIGF0
SW5kZXg6aW5kZXhPZkNvbnRlbnRWaWV3XTsKKyAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3
IGFkZFN1YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICAgICAgW19yZXNpemVBbmltYXRp
b25WaWV3IGFkZFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXddXTsKKyAgICB9CisK
KyAgICBDR1NpemUgY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBjb250ZW50
Vmlld0JvdW5kcy5zaXplOworICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNjYWxlOnN0
ZDo6bWluKG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUluQ29udGVudFZp
ZXdDb29yZGluYXRlcy53aWR0aCwgW19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVdKV07Cisg
ICAgW19zY3JvbGxWaWV3IHNldE1heGltdW1ab29tU2NhbGU6c3RkOjptYXgobmV3Vmlld0xheW91
dFNpemUud2lkdGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRo
LCBbX3Njcm9sbFZpZXcgbWF4aW11bVpvb21TY2FsZV0pXTsKKworICAgIC8vIENvbXB1dGUgdGhl
IG5ldyBzY2FsZSB0byBrZWVwIHRoZSBjdXJyZW50IGNvbnRlbnQgd2lkdGggaW4gdGhlIHNjcm9s
bHZpZXcuCisgICAgQ0dGbG9hdCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29vcmRpbmF0
ZXMgPSBvbGRVbm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKTsKKyAgICBfYW5pbWF0ZWRSZXNp
emVPcmlnaW5hbENvbnRlbnRXaWR0aCA9IHN0ZDo6bWluKGNvbnRlbnRTaXplSW5Db250ZW50Vmll
d0Nvb3JkaW5hdGVzLndpZHRoLCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29vcmRpbmF0
ZXMpOworICAgIENHRmxvYXQgdGFyZ2V0U2NhbGUgPSBuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgp
IC8gX2FuaW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGg7CisgICAgQ0dGbG9hdCByZXNp
emVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUgPSB0YXJnZXRTY2FsZSAvIGNvbnRlbnRab29t
U2NhbGUoc2VsZik7CisgICAgW19yZXNpemVBbmltYXRpb25WaWV3IHNldFRyYW5zZm9ybTpDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VTY2FsZShyZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUs
IHJlc2l6ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSldOworCisgICAgLy8gQ29tcHV0ZSBh
IG5ldyBwb3NpdGlvbiB0byBrZWVwIHRoZSBjb250ZW50IGNlbnRlcmVkLgorICAgIENHUG9pbnQg
b3JpZ2luYWxDb250ZW50Q2VudGVyID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmNlbnRlcigp
OworICAgIENHUG9pbnQgb3JpZ2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMgPSBb
c2VsZiBjb252ZXJ0UG9pbnQ6b3JpZ2luYWxDb250ZW50Q2VudGVyIGZyb21WaWV3Ol9jb250ZW50
Vmlldy5nZXQoKV07CisgICAgQ0dQb2ludCBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2Vs
ZkNvb3JkaW5hdGVzID0gQ0dQb2ludE1ha2UoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29y
ZGluYXRlcy5vcmlnaW4ueCArIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMu
c2l6ZS53aWR0aCAvIDIsIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMub3Jp
Z2luLnkgKyBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLnNpemUuaGVpZ2h0
IC8gMik7CisKKyAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVudE9mZnNldCA9IFtfc2Nyb2xsVmll
dyBjb250ZW50T2Zmc2V0XTsKKyAgICBDR1BvaW50IGNvbnRlbnRPZmZzZXQgPSBvcmlnaW5hbENv
bnRlbnRPZmZzZXQ7CisgICAgY29udGVudE9mZnNldC54ICs9IChvcmlnaW5hbENvbnRlbnRDZW50
ZXJJblNlbGZDb29yZGluYXRlcy54IC0gZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNlbGZD
b29yZGluYXRlcy54KTsKKyAgICBjb250ZW50T2Zmc2V0LnkgKz0gKG9yaWdpbmFsQ29udGVudENl
bnRlckluU2VsZkNvb3JkaW5hdGVzLnkgLSBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2Vs
ZkNvb3JkaW5hdGVzLnkpOworCisgICAgLy8gTGltaXQgdGhlIG5ldyBvZmZzZXQgd2l0aGluIHRo
ZSBzY3JvbGx2aWV3LCB3ZSBkbyBub3Qgd2FudCB0byBydWJiZXIgYmFuZCBwcm9ncmFtbWF0aWNh
bGx5LgorICAgIENHU2l6ZSBmdXR1cmVDb250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzID0gQ0dT
aXplTWFrZShjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy53aWR0aCAqIHRhcmdl
dFNjYWxlLCBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRlcy5oZWlnaHQgKiB0YXJn
ZXRTY2FsZSk7CisgICAgQ0dGbG9hdCBtYXhIb3Jpem9udGFsT2Zmc2V0ID0gZnV0dXJlQ29udGVu
dFNpemVJblNlbGZDb29yZGluYXRlcy53aWR0aCAtIG5ld0JvdW5kcy5zaXplLndpZHRoICsgX29i
c2N1cmVkSW5zZXRzLnJpZ2h0OworICAgIGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWluKGNvbnRl
bnRPZmZzZXQueCwgbWF4SG9yaXpvbnRhbE9mZnNldCk7CisgICAgQ0dGbG9hdCBtYXhWZXJ0aWNh
bE9mZnNldCA9IGZ1dHVyZUNvbnRlbnRTaXplSW5TZWxmQ29vcmRpbmF0ZXMuaGVpZ2h0IC0gbmV3
Qm91bmRzLnNpemUuaGVpZ2h0ICsgX29ic2N1cmVkSW5zZXRzLmJvdHRvbTsKKyAgICBjb250ZW50
T2Zmc2V0LnkgPSBzdGQ6Om1pbihjb250ZW50T2Zmc2V0LnksIG1heFZlcnRpY2FsT2Zmc2V0KTsK
KworICAgIGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWF4KGNvbnRlbnRPZmZzZXQueCwgLV9vYnNj
dXJlZEluc2V0cy5sZWZ0KTsKKyAgICBjb250ZW50T2Zmc2V0LnkgPSBzdGQ6Om1heChjb250ZW50
T2Zmc2V0LnksIC1fb2JzY3VyZWRJbnNldHMudG9wKTsKKworICAgIC8vIE1ha2UgdGhlIHRvcC9i
b3R0b20gZWRnZXMgInN0aWNreSIgd2l0aGluIDEgcGl4ZWwuCisgICAgaWYgKG9sZFVub2JzY3Vy
ZWRDb250ZW50UmVjdC5tYXhZKCkgPiBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29yZGluYXRl
cy5oZWlnaHQgLSAxKQorICAgICAgICBjb250ZW50T2Zmc2V0LnkgPSBtYXhWZXJ0aWNhbE9mZnNl
dDsKKyAgICBpZiAob2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LnkoKSA8IDEpCisgICAgICAgIGNv
bnRlbnRPZmZzZXQueSA9IFtzZWxmIF9pbml0aWFsQ29udGVudE9mZnNldEZvclNjcm9sbFZpZXdd
Lnk7CisKKyAgICAvLyBGSVhNRTogaWYgd2UgaGF2ZSBjb250ZW50IGNlbnRlcmVkIGFmdGVyIGRv
dWJsZSB0YXAgdG8gem9vbSwgd2Ugc2hvdWxkIGFsc28gdHJ5IHRvIGtlZXAgdGhhdCByZWN0IGlu
IHZpZXcuCisgICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRTaXplOnJvdW5kU2Nyb2xsVmlld0Nv
bnRlbnRTaXplKCpfcGFnZSwgZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcyldOwor
ICAgIFtfc2Nyb2xsVmlldyBzZXRDb250ZW50T2Zmc2V0OmNvbnRlbnRPZmZzZXRdOworCisgICAg
Q0dSZWN0IHZpc2libGVSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVj
dDpuZXdCb3VuZHMgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQoKV07CisgICAgQ0dSZWN0IHVub2Jz
Y3VyZWRSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMgPSBbc2VsZiBjb252ZXJ0UmVjdDpmdXR1cmVV
bm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzIHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCld
OworCisgICAgVUlFZGdlSW5zZXRzIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cyA9IFtzZWxmIF9j
b21wdXRlZFVub2JzY3VyZWRTYWZlQXJlYUluc2V0XTsKKyAgICBXZWJDb3JlOjpGbG9hdEJveEV4
dGVudCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHNFeHRlbnQodW5vYnNjdXJlZFNhZmVBcmVhSW5z
ZXRzLnRvcCwgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzLnJpZ2h0LCB1bm9ic2N1cmVkU2FmZUFy
ZWFJbnNldHMuYm90dG9tLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMubGVmdCk7CisKKyAgICBf
bGFzdFNlbnRWaWV3TGF5b3V0U2l6ZSA9IG5ld1ZpZXdMYXlvdXRTaXplOworICAgIF9sYXN0U2Vu
dE1heGltdW1Vbm9ic2N1cmVkU2l6ZSA9IG5ld01heGltdW1Vbm9ic2N1cmVkU2l6ZTsKKyAgICBf
bGFzdFNlbnREZXZpY2VPcmllbnRhdGlvbiA9IG5ld09yaWVudGF0aW9uOworCisgICAgX3BhZ2Ut
PmR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUobmV3Vmlld0xheW91dFNpemUsIG5ld01heGltdW1V
bm9ic2N1cmVkU2l6ZSwgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgdW5vYnNjdXJl
ZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29y
ZGluYXRlcywgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0ZW50LCB0YXJnZXRTY2FsZSwgbmV3
T3JpZW50YXRpb24sICsrX2N1cnJlbnREeW5hbWljVmlld3BvcnRTaXplVXBkYXRlSUQpOworICAg
IGlmIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gX3BhZ2UtPmRyYXdp
bmdBcmVhKCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUo
bmV3Qm91bmRzLnNpemUpKTsKKworICAgIF93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJl
c2l6ZSA9IFlFUzsKKyAgICBfd2FpdGluZ0ZvckVuZEFuaW1hdGVkUmVzaXplID0gWUVTOworfQor
CistICh2b2lkKV9lbmRBbmltYXRlZFJlc2l6ZQoreworICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAtW1dLV2ViVmlldyBfZW5kQW5pbWF0ZWRSZXNpemVd
IF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlICVkIiwgc2VsZiwgX3BhZ2UtPmlkZW50aWZpZXIo
KS50b1VJbnQ2NCgpLCBfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSk7CisKKyAgICAvLyBJZiB3
ZSBhbHJlYWR5IGhhdmUgYW4gdXAtdG8tZGF0ZSBsYXllciB0cmVlLCBpbW1lZGlhdGVseSBjb21w
bGV0ZQorICAgIC8vIHRoZSByZXNpemUuIE90aGVyd2lzZSwgd2Ugd2lsbCBkZWZlciBjb21wbGV0
aW9uIHVudGlsIHdlIGRvLgorICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRSZXNpemUgPSBOTzsK
KyAgICBpZiAoIV93YWl0aW5nRm9yQ29tbWl0QWZ0ZXJBbmltYXRlZFJlc2l6ZSkKKyAgICAgICAg
W3NlbGYgX2RpZENvbXBsZXRlQW5pbWF0ZWRSZXNpemVdOworfQorCistICh2b2lkKV9yZXNpemVX
aGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlczoodm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sK
K3sKKyAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCIlcCAocGFnZVByb3h5SUQ9JWxsdSkgLVtX
S1dlYlZpZXcgX3Jlc2l6ZVdoaWxlSGlkaW5nQ29udGVudFdpdGhVcGRhdGVzOl0iLCBzZWxmLCBf
cGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCkpOworCisgICAgW3NlbGYgX2JlZ2luQW5pbWF0
ZWRSZXNpemVXaXRoVXBkYXRlczp1cGRhdGVCbG9ja107CisgICAgaWYgKF9keW5hbWljVmlld3Bv
cnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVzaXpp
bmdXaXRoQW5pbWF0aW9uKSB7CisgICAgICAgIFtfY29udGVudFZpZXcgc2V0SGlkZGVuOllFU107
CisgICAgICAgIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID0gV2ViS2l0OjpEeW5hbWljVmll
d3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dpdGhEb2N1bWVudEhpZGRlbjsKKyAgICAgICAgCisg
ICAgICAgIC8vIF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRXaXRoVXBkYXRlcyBpcyB1c2VkIGJ5
IGl0c2VsZjsgdGhlIGNsaWVudCB3aWxsCisgICAgICAgIC8vIG5vdCBjYWxsIGVuZEFuaW1hdGVk
UmVzaXplLCBzbyB3ZSBjYW4ndCB3YWl0IGZvciBpdC4KKyAgICAgICAgX3dhaXRpbmdGb3JFbmRB
bmltYXRlZFJlc2l6ZSA9IE5POworICAgIH0KK30KKworLSAodm9pZClfc2V0T3ZlcmxhaWRBY2Nl
c3NvcnlWaWV3c0luc2V0OihDR1NpemUpaW5zZXQKK3sKKyAgICBbX2N1c3RvbUNvbnRlbnRWaWV3
IHdlYl9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6aW5zZXRdOworfQorCistICh2b2lk
KV9zbmFwc2hvdFJlY3Q6KENHUmVjdClyZWN0SW5WaWV3Q29vcmRpbmF0ZXMgaW50b0ltYWdlT2ZX
aWR0aDooQ0dGbG9hdClpbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKENHSW1h
Z2VSZWYpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlICE9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcp
IHsKKyAgICAgICAgLy8gRGVmZXIgc25hcHNob3R0aW5nIHVudGlsIGFmdGVyIHRoZSBjdXJyZW50
IHJlc2l6ZSBjb21wbGV0ZXMuCisgICAgICAgIHZvaWQgKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxl
cikoQ0dJbWFnZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgICAgIFJldGFp
blB0cjxXS1dlYlZpZXc+IHJldGFpbmVkU2VsZiA9IHNlbGY7CisgICAgICAgIF9jYWxsYmFja3NE
ZWZlcnJlZER1cmluZ1Jlc2l6ZS5hcHBlbmQoW3JldGFpbmVkU2VsZiwgcmVjdEluVmlld0Nvb3Jk
aW5hdGVzLCBpbWFnZVdpZHRoLCBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAg
ICAgW3JldGFpbmVkU2VsZiBfc25hcHNob3RSZWN0OnJlY3RJblZpZXdDb29yZGluYXRlcyBpbnRv
SW1hZ2VPZldpZHRoOmltYWdlV2lkdGggY29tcGxldGlvbkhhbmRsZXI6Y29waWVkQ29tcGxldGlv
bkhhbmRsZXJdOworICAgICAgICAgICAgW2NvcGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2Vd
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENHUmVjdCBzbmFw
c2hvdFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcyA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3RJblZp
ZXdDb29yZGluYXRlcyB0b1ZpZXc6c2VsZi5fY3VycmVudENvbnRlbnRWaWV3XTsKKyAgICBDR0Zs
b2F0IGltYWdlU2NhbGUgPSBpbWFnZVdpZHRoIC8gc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRp
bmF0ZXMuc2l6ZS53aWR0aDsKKyAgICBDR0Zsb2F0IGltYWdlSGVpZ2h0ID0gaW1hZ2VTY2FsZSAq
IHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzLnNpemUuaGVpZ2h0OworICAgIENHU2l6
ZSBpbWFnZVNpemUgPSBDR1NpemVNYWtlKGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTsKKworICAg
IGlmIChbW19jdXN0b21Db250ZW50VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3VzdG9tU25hcHNo
b3R0aW5nXSkgeworICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zbmFwc2hvdFJlY3RJ
bkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXM6c25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMg
c25hcHNob3RXaWR0aDppbWFnZVdpZHRoIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBsZXRpb25IYW5k
bGVyXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEhBVkUoQ09SRV9BTklNQVRJT05f
UkVOREVSX1NFUlZFUikgJiYgSEFWRShJT1NVUkZBQ0UpCisgICAgLy8gSWYgd2UgYXJlIHBhcmVu
dGVkIGFuZCBub3QgaGlkZGVuLCBhbmQgdGh1cyB3b24ndCBpbmN1ciBhIHNpZ25pZmljYW50IHBl
bmFsdHkgZnJvbSBwYWdpbmcgaW4gdGlsZXMsIHNuYXBzaG90IHRoZSB2aWV3IGhpZXJhcmNoeSBk
aXJlY3RseS4KKyAgICBOU1N0cmluZyAqZGlzcGxheU5hbWUgPSBzZWxmLndpbmRvdy5zY3JlZW4u
ZGlzcGxheUNvbmZpZ3VyYXRpb24ubmFtZTsKKyAgICBpZiAoZGlzcGxheU5hbWUgJiYgIXNlbGYu
d2luZG93LmhpZGRlbikgeworICAgICAgICBhdXRvIHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZh
Y2U6OmNyZWF0ZShXZWJDb3JlOjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGlt
YWdlU2l6ZSkpLCBXZWJDb3JlOjpzUkdCQ29sb3JTcGFjZVJlZigpKTsKKyAgICAgICAgaWYgKCFz
dXJmYWNlKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDR0Zsb2F0IGltYWdlU2NhbGVJblZp
ZXdDb29yZGluYXRlcyA9IGltYWdlV2lkdGggLyByZWN0SW5WaWV3Q29vcmRpbmF0ZXMuc2l6ZS53
aWR0aDsKKyAgICAgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFr
ZVNjYWxlKGltYWdlU2NhbGVJblZpZXdDb29yZGluYXRlcywgaW1hZ2VTY2FsZUluVmlld0Nvb3Jk
aW5hdGVzLCAxKTsKKyAgICAgICAgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0
cmFuc2Zvcm0sIC1yZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3JpZ2luLngsIC1yZWN0SW5WaWV3Q29v
cmRpbmF0ZXMub3JpZ2luLnksIDApOworICAgICAgICBDQVJlbmRlclNlcnZlclJlbmRlckRpc3Bs
YXlMYXllcldpdGhUcmFuc2Zvcm1BbmRUaW1lT2Zmc2V0KE1BQ0hfUE9SVF9OVUxMLCAoQ0ZTdHJp
bmdSZWYpZGlzcGxheU5hbWUsIHNlbGYubGF5ZXIuY29udGV4dC5jb250ZXh0SWQsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDY0X3Q+KHNlbGYubGF5ZXIpLCBzdXJmYWNlLT5zdXJmYWNlKCksIDAsIDAs
ICZ0cmFuc2Zvcm0sIDApOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpJT1N1
cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShzdXJmYWNlKSkuZ2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoX2N1c3RvbUNvbnRlbnRWaWV3KSB7Cisg
ICAgICAgIEFTU0VSVCghW1tfY3VzdG9tQ29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1
c3RvbVNuYXBzaG90dGluZ10pOworICAgICAgICBVSUdyYXBoaWNzQmVnaW5JbWFnZUNvbnRleHRX
aXRoT3B0aW9ucyhpbWFnZVNpemUsIFlFUywgMSk7CisKKyAgICAgICAgVUlWaWV3ICpjdXN0b21D
b250ZW50VmlldyA9IF9jdXN0b21Db250ZW50Vmlldy5nZXQoKTsKKyAgICAgICAgW2N1c3RvbUNv
bnRlbnRWaWV3LmJhY2tncm91bmRDb2xvciBzZXRdOworICAgICAgICBVSVJlY3RGaWxsKENHUmVj
dE1ha2UoMCwgMCwgaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpKTsKKworICAgICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IFVJR3JhcGhpY3NHZXRDdXJyZW50Q29udGV4dCgpOworICAgICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLXNuYXBzaG90UmVjdEluQ29udGVudENvb3Jk
aW5hdGVzLm9yaWdpbi54ICogaW1hZ2VTY2FsZSwgLXNuYXBzaG90UmVjdEluQ29udGVudENvb3Jk
aW5hdGVzLm9yaWdpbi55ICogaW1hZ2VTY2FsZSk7CisgICAgICAgIENHQ29udGV4dFNjYWxlQ1RN
KGNvbnRleHQsIGltYWdlU2NhbGUsIGltYWdlU2NhbGUpOworICAgICAgICBbY3VzdG9tQ29udGVu
dFZpZXcubGF5ZXIgcmVuZGVySW5Db250ZXh0OmNvbnRleHRdOworCisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFtVSUdyYXBoaWNzR2V0SW1hZ2VGcm9tQ3VycmVudEltYWdlQ29udGV4dCgpIENH
SW1hZ2VdKTsKKworICAgICAgICBVSUdyYXBoaWNzRW5kSW1hZ2VDb250ZXh0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB2b2lkKF5jb3BpZWRDb21wbGV0aW9uSGFuZGxlcikoQ0dJ
bWFnZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAgX3BhZ2UtPnRha2VTbmFw
c2hvdChXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHNuYXBzaG90UmVjdEluQ29udGVudENvb3Jk
aW5hdGVzKSwgV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShpbWFn
ZVNpemUpKSwgV2ViS2l0OjpTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2aWNlU2NhbGVGYWN0b3Is
IFs9XShjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBpbWFnZUhhbmRsZSwg
V2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgIGlmIChpbWFnZUhhbmRsZS5p
c051bGwoKSkgeworICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7
CisgICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGJpdG1hcCA9IFdlYktpdDo6
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5
OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAgICAgICAgaWYgKCFiaXRtYXApIHsKKyAgICAg
ICAgICAgIGNvcGllZENvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOworICAgICAgICAgICAgW2Nv
cGllZENvbXBsZXRpb25IYW5kbGVyIHJlbGVhc2VdOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2U7CisgICAgICAg
IGNnSW1hZ2UgPSBiaXRtYXAtPm1ha2VDR0ltYWdlKCk7CisgICAgICAgIGNvcGllZENvbXBsZXRp
b25IYW5kbGVyKGNnSW1hZ2UuZ2V0KCkpOworICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRs
ZXIgcmVsZWFzZV07CisgICAgfSk7Cit9CisKKy0gKHZvaWQpX292ZXJyaWRlTGF5b3V0UGFyYW1l
dGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTooQ0dTaXplKW1pbmltdW1MYXlvdXRTaXplIG1heGlt
dW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUpbWF4aW11bVVub2JzY3VyZWRTaXplT3Zl
cnJpZGUKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oVmlzaWJsZVJlY3RzLCBzdHJlYW0gPDwgIi1b
V0tXZWJWaWV3ICIgPDwgX3BhZ2UtPmlkZW50aWZpZXIoKSA8PCAiIF9vdmVycmlkZUxheW91dFBh
cmFtZXRlcnNXaXRoTWluaW11bUxheW91dFNpemU6IiA8PCBXZWJDb3JlOjpGbG9hdFNpemUobWlu
aW11bUxheW91dFNpemUpIDw8ICIgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6IiA8PCBX
ZWJDb3JlOjpGbG9hdFNpemUobWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUpIDw8ICJdIik7
CisKKyAgICBbc2VsZiBfc2V0Vmlld0xheW91dFNpemVPdmVycmlkZTptaW5pbXVtTGF5b3V0U2l6
ZV07CisgICAgW3NlbGYgX3NldE1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOm1heGltdW1V
bm9ic2N1cmVkU2l6ZU92ZXJyaWRlXTsKK30KKworLSAodm9pZClfY2xlYXJPdmVycmlkZUxheW91
dFBhcmFtZXRlcnMKK3sKKyAgICBfdmlld0xheW91dFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9w
dDsKKyAgICBfbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGUgPSBXVEY6Om51bGxvcHQ7Cit9
CisKK3N0YXRpYyBXVEY6Ok9wdGlvbmFsPFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzPiB2aWV3
cG9ydEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0
cmluZyAqPiAqdmlld3BvcnRBcmd1bWVudFBhaXJzLCBib29sIHZpZXdwb3J0Rml0RW5hYmxlZCkK
K3sKKyAgICBpZiAoIXZpZXdwb3J0QXJndW1lbnRQYWlycykKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1l
bnRzKFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWaWV3cG9ydE1ldGEpOworCisgICAgW3Zp
ZXdwb3J0QXJndW1lbnRQYWlycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6bWFr
ZUJsb2NrUHRyKFsmXSAoTlNTdHJpbmcgKmtleSwgTlNTdHJpbmcgKnZhbHVlLCBCT09MKiBzdG9w
KSB7CisgICAgICAgIGlmICghW2tleSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dIHx8
ICFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKKyAgICAgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCItW1dL
V2ViVmlldyBfb3ZlcnJpZGVWaWV3cG9ydFdpdGhBcmd1bWVudHM6XTogS2V5cyBhbmQgdmFsdWVz
IG11c3QgYWxsIGJlIE5TU3RyaW5ncy4iXTsKKyAgICAgICAgU3RyaW5nIGtleVN0cmluZyA9IGtl
eTsKKyAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWU7CisgICAgICAgIFdlYkNvcmU6
OnNldFZpZXdwb3J0RmVhdHVyZSh2aWV3cG9ydEFyZ3VtZW50cywga2V5U3RyaW5nLCB2YWx1ZVN0
cmluZywgdmlld3BvcnRGaXRFbmFibGVkLCBbXSAoV2ViQ29yZTo6Vmlld3BvcnRFcnJvckNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7CisgICAgICAgICAgICBOU0xvZyhAIi1bV0tX
ZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBFcnJvciBwYXJzaW5nIHZp
ZXdwb3J0IGFyZ3VtZW50OiAlcyIsIGVycm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgfSk7CisgICAgfSkuZ2V0KCldOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXJndW1lbnRzOwor
fQorCistICh2b2lkKV9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopYXJndW1lbnRzCit7CisgICAgaWYgKCFfcGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgX3BhZ2UtPnNldE92ZXJyaWRlVmlld3BvcnRBcmd1bWVu
dHModmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShhcmd1bWVudHMsIF9wYWdlLT5wcmVm
ZXJlbmNlcygpLnZpZXdwb3J0Rml0RW5hYmxlZCgpKSk7Cit9CisKKy0gKFVJVmlldyAqKV92aWV3
Rm9yRmluZFVJCit7CisgICAgcmV0dXJuIFtzZWxmIHZpZXdGb3Jab29taW5nSW5TY3JvbGxWaWV3
OltzZWxmIHNjcm9sbFZpZXddXTsKK30KKworLSAoQk9PTClfaXNEaXNwbGF5aW5nUERGCit7Cisg
ICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OnBkZk1J
TUVUeXBlcygpKSB7CisgICAgICAgIENsYXNzIHByb3ZpZGVyQ2xhc3MgPSBbW19jb25maWd1cmF0
aW9uIF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV0gcHJvdmlkZXJGb3JNSU1FVHlwZTptaW1lVHlw
ZV07CisgICAgICAgIGlmIChbX2N1c3RvbUNvbnRlbnRWaWV3IGlzS2luZE9mQ2xhc3M6cHJvdmlk
ZXJDbGFzc10pCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKworICAgIHJldHVybiBO
TzsKK30KKworLSAoTlNEYXRhICopX2RhdGFGb3JEaXNwbGF5ZWRQREYKK3sKKyAgICBpZiAoIVtz
ZWxmIF9pc0Rpc3BsYXlpbmdQREZdKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBb
X2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9kYXRhUmVwcmVzZW50YXRpb25dOworfQorCistIChOU1N0
cmluZyAqKV9zdWdnZXN0ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERgoreworICAgIGlmICghW3Nl
bGYgX2lzRGlzcGxheWluZ1BERl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtf
Y3VzdG9tQ29udGVudFZpZXcgd2ViX3N1Z2dlc3RlZEZpbGVuYW1lXTsKK30KKworLSAoX1dLV2Vi
Vmlld1ByaW50Rm9ybWF0dGVyICopX3dlYlZpZXdQcmludEZvcm1hdHRlcgoreworICAgIFVJVmll
d1ByaW50Rm9ybWF0dGVyICp2aWV3UHJpbnRGb3JtYXR0ZXIgPSBzZWxmLnZpZXdQcmludEZvcm1h
dHRlcjsKKyAgICBBU1NFUlQoW3ZpZXdQcmludEZvcm1hdHRlciBpc0tpbmRPZkNsYXNzOltfV0tX
ZWJWaWV3UHJpbnRGb3JtYXR0ZXIgY2xhc3NdXSk7CisgICAgcmV0dXJuIChfV0tXZWJWaWV3UHJp
bnRGb3JtYXR0ZXIgKil2aWV3UHJpbnRGb3JtYXR0ZXI7Cit9CisKK3N0YXRpYyBXZWJDb3JlOjpV
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHRvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0ZSBjb250ZW50QXR0cmlidXRlKQoreworICAgIGF1
dG8gZGlyZWN0aW9uID0gW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uRm9yU2Vt
YW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVdOworICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25MZWZ0VG9S
aWdodDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b246OkxUUjsKKyAgICBjYXNlIFVJVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9M
ZWZ0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlv
bjo6UlRMOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBX
ZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOjpMVFI7Cit9CisKKy0gKHZvaWQp
c2V0U2VtYW50aWNDb250ZW50QXR0cmlidXRlOihVSVNlbWFudGljQ29udGVudEF0dHJpYnV0ZSlj
b250ZW50QXR0cmlidXRlCit7CisgICAgW3N1cGVyIHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0
ZTpjb250ZW50QXR0cmlidXRlXTsKKworICAgIF9wYWdlLT5zZXRVc2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uKHRvVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbihjb250ZW50QXR0cmlidXRl
KSk7CiB9CiAKLS0gKGRvdWJsZSlfcGFnZVpvb21GYWN0b3IKKyNlbHNlIC8vICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorCisjcHJhZ21hIG1hcmsgLSBPUyBYLXNwZWNpZmljIG1ldGhvZHMKKwor
LSAoQk9PTClfZHJhd3NCYWNrZ3JvdW5kCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHBhZ2Vab29tXTsK
KyAgICByZXR1cm4gX2ltcGwtPmRyYXdzQmFja2dyb3VuZCgpOwogfQogCi0tICh2b2lkKV9zZXRQ
YWdlWm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3IKKy0gKHZvaWQpX3NldERyYXdzQmFja2dy
b3VuZDooQk9PTClkcmF3c0JhY2tncm91bmQKIHsKLSAgICBbc2VsZiBzZXRQYWdlWm9vbTp6b29t
RmFjdG9yXTsKKyAgICBfaW1wbC0+c2V0RHJhd3NCYWNrZ3JvdW5kKGRyYXdzQmFja2dyb3VuZCk7
CiB9CiAKLS0gKGlkIDxfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlPilfZGlhZ25vc3RpY0xv
Z2dpbmdEZWxlZ2F0ZQorLSAoTlNDb2xvciAqKV9iYWNrZ3JvdW5kQ29sb3IKIHsKLSAgICBhdXRv
KiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCA9IF9wYWdlLT5kaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCgpOwotICAgIGlmICghZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCkuZGVsZWdhdGUoKS5hdXRvcmVsZWFzZSgp
OworICAgIHJldHVybiBfaW1wbC0+YmFja2dyb3VuZENvbG9yKCk7CiB9CiAKLS0gKHZvaWQpX3Nl
dERpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGU6KGlkPF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdh
dGU+KWRpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUKKy0gKHZvaWQpX3NldEJhY2tncm91bmRDb2xv
cjooTlNDb2xvciAqKWJhY2tncm91bmRDb2xvcgogewotICAgIGF1dG8qIGRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50ID0gX3BhZ2UtPmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCk7Ci0gICAgaWYgKCFk
aWFnbm9zdGljTG9nZ2luZ0NsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljX2Nh
c3Q8V2ViS2l0OjpEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCY+KCpkaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudCkuc2V0RGVsZWdhdGUoZGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZSk7CisgICAgX2ltcGwt
PnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi0tIChpZCA8X1dLRmlu
ZERlbGVnYXRlPilfZmluZERlbGVnYXRlCistICh2b2lkKV9zZXREcmF3c1RyYW5zcGFyZW50QmFj
a2dyb3VuZDooQk9PTClkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZAogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJLaXQ6OkZpbmRDbGllbnQmPihfcGFnZS0+ZmluZENsaWVudCgpKS5kZWxl
Z2F0ZSgpLmF1dG9yZWxlYXNlKCk7CisgICAgc3RhdGljIEJPT0wgaGFzTG9nZ2VkRGVwcmVjYXRp
b25XYXJuaW5nOworICAgIGlmICghaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nKSB7CisgICAg
ICAgIC8vIFNlZSBidWcgMTU1NTUwIGZvciBkZXRhaWxzLgorICAgICAgICBOU0xvZyhAIi1bV0tX
ZWJWaWV3IF9zZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZDpdIGlzIGRlcHJlY2F0ZWQgYW5k
IHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAgICAgICAgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJu
aW5nID0gWUVTOworICAgIH0KKyAgICBbc2VsZiBfc2V0RHJhd3NCYWNrZ3JvdW5kOiFkcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZF07CiB9CiAKLS0gKHZvaWQpX3NldEZpbmREZWxlZ2F0ZTooaWQ8
X1dLRmluZERlbGVnYXRlPilmaW5kRGVsZWdhdGUKKy0gKE5TVmlldyAqKV9pbnNwZWN0b3JBdHRh
Y2htZW50VmlldwogewotICAgIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZENsaWVudCY+KF9wYWdl
LT5maW5kQ2xpZW50KCkpLnNldERlbGVnYXRlKGZpbmREZWxlZ2F0ZSk7CisgICAgcmV0dXJuIF9p
bXBsLT5pbnNwZWN0b3JBdHRhY2htZW50VmlldygpOwogfQogCi1zdGF0aWMgaW5saW5lIFdlYktp
dDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25z
KQorLSAodm9pZClfc2V0SW5zcGVjdG9yQXR0YWNobWVudFZpZXc6KE5TVmlldyAqKW5ld1ZpZXcK
IHsKLSAgICB1bnNpZ25lZCBmaW5kT3B0aW9ucyA9IDA7Ci0KLSAgICBpZiAod2tGaW5kT3B0aW9u
cyAmIF9XS0ZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlKQotICAgICAgICBmaW5kT3B0aW9ucyB8
PSBXZWJLaXQ6OkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOwotICAgIGlmICh3a0ZpbmRPcHRp
b25zICYgX1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMpCi0gICAgICAgIGZpbmRPcHRpb25zIHw9
IFdlYktpdDo6RmluZE9wdGlvbnNBdFdvcmRTdGFydHM7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMg
JiBfV0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFzV29yZFN0YXJ0KQotICAgICAgICBm
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3Jk
U3RhcnQ7Ci0gICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0JhY2t3YXJkcykK
LSAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0JhY2t3YXJkczsKLSAg
ICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCkKLSAgICAgICAg
ZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Ci0gICAgaWYgKHdr
RmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dPdmVybGF5KQotICAgICAgICBmaW5kT3B0
aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd092ZXJsYXk7Ci0gICAgaWYgKHdrRmluZE9w
dGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yKQotICAgICAgICBmaW5kT3B0
aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3I7Ci0gICAgaWYgKHdr
RmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQpCi0gICAgICAgIGZpbmRP
cHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0OwotICAgIGlmICh3a0Zp
bmRPcHRpb25zICYgX1dLRmluZE9wdGlvbnNOb0luZGV4Q2hhbmdlKQotICAgICAgICBmaW5kT3B0
aW9ucyB8PSBXZWJLaXQ6OkZpbmRPcHRpb25zTm9JbmRleENoYW5nZTsKLSAgICBpZiAod2tGaW5k
T3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleCkKLSAgICAgICAgZmlu
ZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXg7Ci0KLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0OjpGaW5kT3B0aW9ucz4oZmluZE9wdGlvbnMpOwor
ICAgIF9pbXBsLT5zZXRJbnNwZWN0b3JBdHRhY2htZW50VmlldyhuZXdWaWV3KTsKIH0KIAotLSAo
dm9pZClfY291bnRTdHJpbmdNYXRjaGVzOihOU1N0cmluZyAqKXN0cmluZyBvcHRpb25zOihfV0tG
aW5kT3B0aW9ucylvcHRpb25zIG1heENvdW50OihOU1VJbnRlZ2VyKW1heENvdW50CistICh2b2lk
KV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KF9XS092ZXJsYXlTY3JvbGxiYXJTdHlsZSlzY3Jv
bGxiYXJTdHlsZQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKF9jdXN0b21D
b250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9jb3VudFN0cmlu
Z01hdGNoZXM6c3RyaW5nIG9wdGlvbnM6b3B0aW9ucyBtYXhDb3VudDptYXhDb3VudF07Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICBfcGFnZS0+Y291bnRTdHJpbmdNYXRjaGVz
KHN0cmluZywgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4Q291bnQpOworICAgIF9pbXBsLT5z
ZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGUodG9Db3JlU2Nyb2xsYmFyU3R5bGUoc2Nyb2xsYmFyU3R5
bGUpKTsKIH0KIAotLSAodm9pZClfZmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcgb3B0aW9u
czooX1dLRmluZE9wdGlvbnMpb3B0aW9ucyBtYXhDb3VudDooTlNVSW50ZWdlciltYXhDb3VudAor
LSAoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKV9vdmVybGF5U2Nyb2xsYmFyU3R5bGUKIHsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIFdoaWxlIEFwcEtpdCBjb250YWlucyBsb2dp
YyBpbiBOU0JhclRleHRGaW5kZXIgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGZpbmQgcGFz
dGVib2FyZAotICAgIC8vIHdoZW4gdGhlIGZpbmQgc3RyaW5nIGNoYW5nZXMsIHRoaXMgKGFsb25n
IHdpdGggdGhlIGZpbmQgcGFzdGVib2FyZCBpdHNlbGYpIGFyZSBib3RoIG1pc3NpbmcKLSAgICAv
LyBmcm9tIGlPUzsgdGh1cywgb24gaU9TLCB3ZSB1cGRhdGUgdGhlIGN1cnJlbnQgZmluZC1pbi1w
YWdlIHN0cmluZyBoZXJlLgotICAgIFdlYktpdDo6dXBkYXRlU3RyaW5nRm9yRmluZChzdHJpbmcp
OwotCi0gICAgaWYgKF9jdXN0b21Db250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRl
bnRWaWV3IHdlYl9maW5kU3RyaW5nOnN0cmluZyBvcHRpb25zOm9wdGlvbnMgbWF4Q291bnQ6bWF4
Q291bnRdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgX3BhZ2UtPmZpbmRT
dHJpbmcoc3RyaW5nLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhDb3VudCk7CisgICAgcmV0
dXJuIHRvQVBJU2Nyb2xsYmFyU3R5bGUoX2ltcGwtPm92ZXJsYXlTY3JvbGxiYXJTdHlsZSgpKTsK
IH0KIAotLSAodm9pZClfaGlkZUZpbmRVSQorLSAoQk9PTClfd2luZG93T2NjbHVzaW9uRGV0ZWN0
aW9uRW5hYmxlZAogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKF9jdXN0b21D
b250ZW50VmlldykgewotICAgICAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9oaWRlRmluZFVJ
XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIF9wYWdlLT5oaWRlRmluZFVJ
KCk7CisgICAgcmV0dXJuIF9pbXBsLT53aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCk7
CiB9CiAKLS0gKHZvaWQpX3NhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbTooV0tCYWNrRm9y
d2FyZExpc3RJdGVtICopaXRlbQorLSAodm9pZClfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9u
RW5hYmxlZDooQk9PTCllbmFibGVkCiB7Ci0gICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47
Ci0gICAgX3BhZ2UtPnJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtLl9pdGVtKTsKKyAgICBf
aW1wbC0+c2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAot
LSAoaWQgPF9XS0lucHV0RGVsZWdhdGU+KV9pbnB1dERlbGVnYXRlCistICh2b2lkKXNoYXJlU2hl
ZXREaWREaXNtaXNzOihXS1NoYXJlU2hlZXQgKilzaGFyZVNoZWV0CiB7Ci0gICAgcmV0dXJuIF9p
bnB1dERlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworICAgIF9pbXBsLT5zaGFyZVNoZWV0RGlk
RGlzbWlzcyhzaGFyZVNoZWV0KTsKIH0KIAotLSAodm9pZClfc2V0SW5wdXREZWxlZ2F0ZTooaWQg
PF9XS0lucHV0RGVsZWdhdGU+KWlucHV0RGVsZWdhdGUKKy0gKHZvaWQpX3NldE92ZXJyaWRlRGV2
aWNlU2NhbGVGYWN0b3I6KENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3IKIHsKLSAgICBfaW5wdXRE
ZWxlZ2F0ZSA9IGlucHV0RGVsZWdhdGU7Ci0KLSAgICBjbGFzcyBGb3JtQ2xpZW50IDogcHVibGlj
IEFQSTo6Rm9ybUNsaWVudCB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAg
IHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgRm9ybUNsaWVudChXS1dlYlZpZXcgKndlYlZpZXcp
Ci0gICAgICAgICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQotICAgICAgICB7Ci0gICAgICAgIH0K
LQotICAgICAgICB2aXJ0dWFsIH5Gb3JtQ2xpZW50KCkgeyB9Ci0KLSAgICAgICAgdm9pZCB3aWxs
U3VibWl0Rm9ybShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYs
IFdlYktpdDo6V2ViRnJhbWVQcm94eSYgc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBh
aXI8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPj4mIHRleHRGaWVsZFZhbHVlcywgQVBJOjpPYmpl
Y3QqIHVzZXJEYXRhLCBXVEY6OkZ1bmN0aW9uPHZvaWQodm9pZCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpIG92ZXJyaWRlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh1c2VyRGF0YSAmJiB1c2Vy
RGF0YS0+dHlwZSgpICE9IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRhKSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCF1c2VyRGF0YSB8fCB1c2VyRGF0YS0+dHlwZSgpID09IEFQSTo6T2JqZWN0OjpU
eXBlOjpEYXRhKTsKLSAgICAgICAgICAgICAgICBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCku
Y29ubmVjdGlvbigpLT5tYXJrQ3VycmVudGx5RGlzcGF0Y2hlZE1lc3NhZ2VBc0ludmFsaWQoKTsK
LSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byBpbnB1dERlbGVnYXRlID0g
bV93ZWJWaWV3LT5faW5wdXREZWxlZ2F0ZS5nZXQoKTsKLQotICAgICAgICAgICAgaWYgKCFbaW5w
dXREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OndpbGxTdWJt
aXRGb3JtVmFsdWVzOnVzZXJPYmplY3Q6c3VibWlzc2lvbkhhbmRsZXI6KV0pIHsKLSAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byB2YWx1ZU1hcCA9IGFkb3B0TlMoW1tOU011
dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnRleHRGaWVsZFZhbHVlcy5z
aXplKCldKTsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHRleHRGaWVsZFZh
bHVlcykKLSAgICAgICAgICAgICAgICBbdmFsdWVNYXAgc2V0T2JqZWN0OnBhaXIuc2Vjb25kIGZv
cktleTpwYWlyLmZpcnN0XTsKLQotICAgICAgICAgICAgTlNPYmplY3QgPE5TU2VjdXJlQ29kaW5n
PiAqdXNlck9iamVjdCA9IG5pbDsKLSAgICAgICAgICAgIGlmIChBUEk6OkRhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxBUEk6OkRhdGEqPih1c2VyRGF0YSkpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IG5zRGF0YSA9IGFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29u
c3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KGRhdGEtPmJ5dGVzKCkpKSBs
ZW5ndGg6ZGF0YS0+c2l6ZSgpIGZyZWVXaGVuRG9uZTpOT10pOwotICAgICAgICAgICAgICAgIGF1
dG8gdW5hcmNoaXZlciA9IHNlY3VyZVVuYXJjaGl2ZXJGcm9tRGF0YShuc0RhdGEuZ2V0KCkpOwot
ICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogYWxs
b3dlZENsYXNzZXMgPSBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5h
bGxvd2VkQ2xhc3Nlc0ZvclBhcmFtZXRlckNvZGluZygpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlck9iamVjdCA9IFt1bmFyY2hpdmVyIGRlY29kZU9iamVjdE9mQ2xhc3NlczphbGxvd2Vk
Q2xhc3NlcyBmb3JLZXk6QCJ1c2VyT2JqZWN0Il07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPYmplY3QgPSBbdW5hcmNoaXZlciBkZWNvZGVP
YmplY3RPZkNsYXNzOltOU09iamVjdCBjbGFzc10gZm9yS2V5OkAidXNlck9iamVjdCJdOwotICAg
ICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlY29kZSB1c2VyIGRhdGE6ICVAIiwg
ZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGF1dG8gY2hlY2tlciA9IFdlYktpdDo6Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6
Y3JlYXRlKGlucHV0RGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzp3aWxsU3VibWl0
Rm9ybVZhbHVlczp1c2VyT2JqZWN0OnN1Ym1pc3Npb25IYW5kbGVyOikpOwotICAgICAgICAgICAg
W2lucHV0RGVsZWdhdGUgX3dlYlZpZXc6bV93ZWJWaWV3IHdpbGxTdWJtaXRGb3JtVmFsdWVzOnZh
bHVlTWFwLmdldCgpIHVzZXJPYmplY3Q6dXNlck9iamVjdCBzdWJtaXNzaW9uSGFuZGxlcjptYWtl
QmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNr
ZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAg
IH0pLmdldCgpXTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV0tXZWJWaWV3
ICptX3dlYlZpZXc7Ci0gICAgfTsKLQotICAgIGlmIChpbnB1dERlbGVnYXRlKQotICAgICAgICBf
cGFnZS0+c2V0Rm9ybUNsaWVudChtYWtlVW5pcXVlPEZvcm1DbGllbnQ+KHNlbGYpKTsKLSAgICBl
bHNlCi0gICAgICAgIF9wYWdlLT5zZXRGb3JtQ2xpZW50KG51bGxwdHIpOworICAgIF9pbXBsLT5z
ZXRPdmVycmlkZURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAotLSAo
Qk9PTClfaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlRG9jdW1lbnQKKy0gKENHRmxvYXQpX292
ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IKIHsKLSAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3Bh
Z2UtPm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdT
dGFuZGFsb25lSW1hZ2VEb2N1bWVudCgpOwotICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2lt
cGwtPm92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3IoKTsKIH0KIAotLSAoQk9PTClfaXNEaXNwbGF5
aW5nU3RhbmRhbG9uZU1lZGlhRG9jdW1lbnQKKy0gKHZvaWQpX3NldFRvcENvbnRlbnRJbnNldDoo
Q0dGbG9hdCljb250ZW50SW5zZXQKIHsKLSAgICBpZiAoYXV0byogbWFpbkZyYW1lID0gX3BhZ2Ut
Pm1haW5GcmFtZSgpKQotICAgICAgICByZXR1cm4gbWFpbkZyYW1lLT5pc0Rpc3BsYXlpbmdTdGFu
ZGFsb25lTWVkaWFEb2N1bWVudCgpOwotICAgIHJldHVybiBOTzsKKyAgICByZXR1cm4gX2ltcGwt
PnNldFRvcENvbnRlbnRJbnNldChjb250ZW50SW5zZXQpOwogfQogCi0tIChCT09MKV9pc1BsYXlp
bmdBdWRpbworLSAoQ0dGbG9hdClfdG9wQ29udGVudEluc2V0CiB7Ci0gICAgcmV0dXJuIF9wYWdl
LT5pc1BsYXlpbmdBdWRpbygpOworICAgIHJldHVybiBfaW1wbC0+dG9wQ29udGVudEluc2V0KCk7
CiB9CiAKLS0gKEJPT0wpX2lzU2hvd2luZ05hdmlnYXRpb25HZXN0dXJlU25hcHNob3QKKy0gKE5T
Q29sb3IgKilfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yCiB7Ci0gICAgcmV0dXJuIF9wYWdl
LT5pc1Nob3dpbmdOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCk7CisgICAgcmV0dXJuIF9pbXBs
LT5wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKTsKIH0KIAotLSAoX1dLTGF5b3V0TW9kZSlf
bGF5b3V0TW9kZQorLSAoX1dLUmVjdEVkZ2UpX3Bpbm5lZFN0YXRlCiB7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIHN3aXRjaCAoX2ltcGwtPmxheW91dE1vZGUoKSkgewotICAgIGNhc2Uga1dLTGF5
b3V0TW9kZUZpeGVkU2l6ZToKLSAgICAgICAgcmV0dXJuIF9XS0xheW91dE1vZGVGaXhlZFNpemU7
Ci0gICAgY2FzZSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6
Ci0gICAgICAgIHJldHVybiBfV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3
U2NhbGU7Ci0gICAgY2FzZSBrV0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21NaW5p
bXVtRG9jdW1lbnRTaXplOgotICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXpl
Q29tcHV0ZWRGcm9tTWluaW11bURvY3VtZW50U2l6ZTsKLSAgICBjYXNlIGtXS0xheW91dE1vZGVW
aWV3U2l6ZToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gX1dLTGF5b3V0TW9kZVZpZXdT
aXplOwotICAgIH0KLSNlbHNlCi0gICAgcmV0dXJuIF9wYWdlLT51c2VGaXhlZExheW91dCgpID8g
X1dLTGF5b3V0TW9kZUZpeGVkU2l6ZSA6IF9XS0xheW91dE1vZGVWaWV3U2l6ZTsKLSNlbmRpZgor
ICAgIHJldHVybiBfaW1wbC0+cGlubmVkU3RhdGUoKTsKIH0KIAotLSAodm9pZClfc2V0TGF5b3V0
TW9kZTooX1dLTGF5b3V0TW9kZSlsYXlvdXRNb2RlCistIChfV0tSZWN0RWRnZSlfcnViYmVyQmFu
ZGluZ0VuYWJsZWQKIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgV0tMYXlvdXRNb2RlIHdrVmll
d0xheW91dE1vZGU7Ci0gICAgc3dpdGNoIChsYXlvdXRNb2RlKSB7Ci0gICAgY2FzZSBfV0tMYXlv
dXRNb2RlRml4ZWRTaXplOgotICAgICAgICB3a1ZpZXdMYXlvdXRNb2RlID0ga1dLTGF5b3V0TW9k
ZUZpeGVkU2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBfV0tMYXlvdXRNb2RlRHluYW1p
Y1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU6Ci0gICAgICAgIHdrVmlld0xheW91dE1vZGUgPSBr
V0tMYXlvdXRNb2RlRHluYW1pY1NpemVDb21wdXRlZEZyb21WaWV3U2NhbGU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZUR5bmFtaWNTaXplQ29tcHV0ZWRGcm9tTWluaW11
bURvY3VtZW50U2l6ZToKLSAgICAgICAgd2tWaWV3TGF5b3V0TW9kZSA9IGtXS0xheW91dE1vZGVE
eW5hbWljU2l6ZUNvbXB1dGVkRnJvbU1pbmltdW1Eb2N1bWVudFNpemU7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgX1dLTGF5b3V0TW9kZVZpZXdTaXplOgotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHdrVmlld0xheW91dE1vZGUgPSBrV0tMYXlvdXRNb2RlVmlld1NpemU7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBfaW1wbC0+c2V0TGF5b3V0TW9kZSh3a1ZpZXdMYXlvdXRNb2RlKTsKLSNl
bHNlCi0gICAgX3BhZ2UtPnNldFVzZUZpeGVkTGF5b3V0KGxheW91dE1vZGUgPT0gX1dLTGF5b3V0
TW9kZUZpeGVkU2l6ZSB8fCBsYXlvdXRNb2RlID09IF9XS0xheW91dE1vZGVEeW5hbWljU2l6ZUNv
bXB1dGVkRnJvbVZpZXdTY2FsZSk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwtPnJ1YmJlckJh
bmRpbmdFbmFibGVkKCk7CiB9CiAKLS0gKENHU2l6ZSlfZml4ZWRMYXlvdXRTaXplCistICh2b2lk
KV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDooX1dLUmVjdEVkZ2Upc3RhdGUKIHsKLSAgICByZXR1
cm4gX3BhZ2UtPmZpeGVkTGF5b3V0U2l6ZSgpOworICAgIF9pbXBsLT5zZXRSdWJiZXJCYW5kaW5n
RW5hYmxlZChzdGF0ZSk7CiB9CiAKLS0gKHZvaWQpX3NldEZpeGVkTGF5b3V0U2l6ZTooQ0dTaXpl
KWZpeGVkTGF5b3V0U2l6ZQorLSAoaWQpX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
ZXJGb3JIaXRUZXN0UmVzdWx0OihfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVzdFJlc3VsdCB3aXRo
VHlwZTooX1dLSW1tZWRpYXRlQWN0aW9uVHlwZSl0eXBlIHVzZXJEYXRhOihpZDxOU1NlY3VyZUNv
ZGluZz4pdXNlckRhdGEKIHsKLSAgICBfcGFnZS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYkNvcmU6
OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNpemUoZml4ZWRMYXlvdXRTaXplKSkpOwor
ICAgIHJldHVybiBuaWw7CiB9CiAKLS0gKHZvaWQpX3NldEJhY2tncm91bmRFeHRlbmRzQmV5b25k
UGFnZTooQk9PTCliYWNrZ3JvdW5kRXh0ZW5kcworLSAodm9pZClfc2V0QXV0b21hdGljYWxseUFk
anVzdHNDb250ZW50SW5zZXRzOihCT09MKWF1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0
cwogewotICAgIF9wYWdlLT5zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYmFja2dyb3Vu
ZEV4dGVuZHMpOworICAgIF9pbXBsLT5zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNl
dHMoYXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKTsKIH0KIAotLSAoQk9PTClfYmFj
a2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlCistIChCT09MKV9hdXRvbWF0aWNhbGx5QWRqdXN0c0Nv
bnRlbnRJbnNldHMKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmJhY2tncm91bmRFeHRlbmRzQmV5b25k
UGFnZSgpOworICAgIHJldHVybiBfaW1wbC0+YXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5z
ZXRzKCk7CiB9CiAKLS0gKENHRmxvYXQpX3ZpZXdTY2FsZQorLSAoQ0dGbG9hdClfbWluaW11bUxh
eW91dFdpZHRoCiB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBfcGFnZS0+dmlld1Nj
YWxlRmFjdG9yKCk7Ci0jZWxzZQotICAgIHJldHVybiBfcGFnZS0+bGF5b3V0U2l6ZVNjYWxlRmFj
dG9yKCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UtPm1pbmltdW1TaXplRm9yQXV0b0xheW91
dCgpLndpZHRoKCk7CiB9CiAKLS0gKHZvaWQpX3NldFZpZXdTY2FsZTooQ0dGbG9hdCl2aWV3U2Nh
bGUKKy0gKHZvaWQpX3NldE1pbmltdW1MYXlvdXRXaWR0aDooQ0dGbG9hdCl3aWR0aAogewotICAg
IGlmICh2aWV3U2NhbGUgPD0gMCB8fCBpc25hbih2aWV3U2NhbGUpIHx8IGlzaW5mKHZpZXdTY2Fs
ZSkpCi0gICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlv
biBmb3JtYXQ6QCJWaWV3IHNjYWxlIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlciJdOworICAg
IEJPT0wgZXhwYW5kc1RvRml0ID0gd2lkdGggPiAwOwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IF9pbXBsLT5zZXRWaWV3U2NhbGUodmlld1NjYWxlKTsKLSNlbHNlCi0gICAgaWYgKF9wYWdlLT5s
YXlvdXRTaXplU2NhbGVGYWN0b3IoKSA9PSB2aWV3U2NhbGUpCi0gICAgICAgIHJldHVybjsKKyAg
ICBfcGFnZS0+c2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0KFdlYkNvcmU6OkludFNpemUod2lk
dGgsIDApKTsKKyAgICBfcGFnZS0+c2V0TWFpbkZyYW1lSXNTY3JvbGxhYmxlKCFleHBhbmRzVG9G
aXQpOwogCi0gICAgX3BhZ2UtPnNldFZpZXdwb3J0Q29uZmlndXJhdGlvblZpZXdMYXlvdXRTaXpl
KFtzZWxmIGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXSwgdmlld1NjYWxlLCBfcGFn
ZS0+bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKCkpOwotI2VuZGlmCisgICAgX2ltcGwtPnNl
dENsaXBzVG9WaXNpYmxlUmVjdChleHBhbmRzVG9GaXQpOwogfQogCi0tICh2b2lkKV9zZXRNaW5p
bXVtRWZmZWN0aXZlRGV2aWNlV2lkdGg6KENHRmxvYXQpbWluaW11bUVmZmVjdGl2ZURldmljZVdp
ZHRoCistIChCT09MKV9zaG91bGRFeHBhbmRDb250ZW50VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91
dAogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKF9wYWdlLT5taW5pbXVtRWZm
ZWN0aXZlRGV2aWNlV2lkdGgoKSA9PSBtaW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIF9wYWdlLT5zZXRWaWV3cG9ydENvbmZpZ3VyYXRpb25WaWV3TGF5
b3V0U2l6ZShbc2VsZiBhY3RpdmVWaWV3TGF5b3V0U2l6ZTpzZWxmLmJvdW5kc10sIF9wYWdlLT5s
YXlvdXRTaXplU2NhbGVGYWN0b3IoKSwgbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoKTsKLSNl
bmRpZgorICAgIHJldHVybiBfaW1wbC0+c2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0Rm9yQXV0b0xh
eW91dCgpOwogfQogCi0tIChDR0Zsb2F0KV9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgKKy0g
KHZvaWQpX3NldFNob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0OihC
T09MKXNob3VsZEV4cGFuZAogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgcmV0dXJu
IF9wYWdlLT5taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGgoKTsKLSNlbHNlCi0gICAgcmV0dXJu
IDA7Ci0jZW5kaWYKKyAgICByZXR1cm4gX2ltcGwtPnNldFNob3VsZEV4cGFuZFRvVmlld0hlaWdo
dEZvckF1dG9MYXlvdXQoc2hvdWxkRXhwYW5kKTsKIH0KIAotI3ByYWdtYSBtYXJrIHNjcm9sbHBl
cmYgbWV0aG9kcwotCi0tICh2b2lkKV9zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9u
RW5hYmxlZDooQk9PTCllbmFibGVkCistIChCT09MKV9hbHdheXNTaG93c0hvcml6b250YWxTY3Jv
bGxlcgogewotICAgIF9wYWdlLT5zZXRTY3JvbGxQZXJmb3JtYW5jZURhdGFDb2xsZWN0aW9uRW5h
YmxlZChlbmFibGVkKTsKKyAgICByZXR1cm4gX3BhZ2UtPmFsd2F5c1Nob3dzSG9yaXpvbnRhbFNj
cm9sbGVyKCk7CiB9CiAKLS0gKEJPT0wpX3Njcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25F
bmFibGVkCistICh2b2lkKV9zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcjooQk9PTClh
bHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcgogewotICAgIHJldHVybiBfcGFnZS0+c2Nyb2xs
UGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoKTsKKyAgICBfcGFnZS0+c2V0QWx3YXlz
U2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIpOwog
fQogCi0tIChOU0FycmF5ICopX3Njcm9sbFBlcmZvcm1hbmNlRGF0YQorLSAoQk9PTClfYWx3YXlz
U2hvd3NWZXJ0aWNhbFNjcm9sbGVyCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBp
ZiAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVTY3JvbGxpbmdQZXJmb3JtYW5jZURhdGEqIHNjcm9s
bFBlcmZEYXRhID0gX3BhZ2UtPnNjcm9sbGluZ1BlcmZvcm1hbmNlRGF0YSgpKQotICAgICAgICBy
ZXR1cm4gc2Nyb2xsUGVyZkRhdGEtPmRhdGEoKTsKLSNlbmRpZgotICAgIHJldHVybiBuaWw7Cisg
ICAgcmV0dXJuIF9wYWdlLT5hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoKTsKIH0KIAotI3By
YWdtYSBtYXJrIG1lZGlhIHBsYXliYWNrIHJlc3RyaWN0aW9ucworLSAodm9pZClfc2V0QWx3YXlz
U2hvd3NWZXJ0aWNhbFNjcm9sbGVyOihCT09MKWFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcgor
eworICAgIF9wYWdlLT5zZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NW
ZXJ0aWNhbFNjcm9sbGVyKTsKK30KIAotLSAoQk9PTClfYWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrCistIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50
SW5mbzooTlNQcmludEluZm8gKilwcmludEluZm8KIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIHJldHVybiBfcGFnZS0+YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKCk7
Ci0jZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgorICAgIHJldHVybiBbc2VsZiBwcmludE9w
ZXJhdGlvbldpdGhQcmludEluZm86cHJpbnRJbmZvXTsKIH0KIAotLSAodm9pZClfc2V0QWxsb3dz
TWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrOihCT09MKWZsYWcKKy0gKE5TUHJpbnRPcGVyYXRp
b24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5m
byBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilmcmFtZUhhbmRsZQogewotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgX3BhZ2UtPnNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5
YmFjayhmbGFnKTsKLSNlbmRpZgorICAgIGlmIChhdXRvKiB3ZWJGcmFtZVByb3h5ID0gX3BhZ2Ut
PnByb2Nlc3MoKS53ZWJGcmFtZShXZWJDb3JlOjpmcmFtZUlkZW50aWZpZXJGcm9tSUQoZnJhbWVI
YW5kbGUuX2ZyYW1lSUQpKSkKKyAgICAgICAgcmV0dXJuIF9pbXBsLT5wcmludE9wZXJhdGlvbldp
dGhQcmludEluZm8ocHJpbnRJbmZvLCAqd2ViRnJhbWVQcm94eSk7CisgICAgcmV0dXJuIG5pbDsK
IH0KIAotLSAoQk9PTClfd2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZQorLSAodm9pZClzZXRVc2VySW50
ZXJmYWNlTGF5b3V0RGlyZWN0aW9uOihOU1VzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pdXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbgogewotICAgIHJldHVybiBfcGFnZS0+cHJvY2Vzcygp
LmlzUmVzcG9uc2l2ZSgpOworICAgIFtzdXBlciBzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uOnVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25dOworCisgICAgX2ltcGwtPnNldFVzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24odXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbik7CiB9
CiAKLS0gKHZvaWQpX3NldEZ1bGxzY3JlZW5EZWxlZ2F0ZTooaWQ8X1dLRnVsbHNjcmVlbkRlbGVn
YXRlPilkZWxlZ2F0ZQorLSAoQk9PTClfd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7
Ci0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3Jl
ZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpKQotICAgICAgICBkb3duY2FzdDxX
ZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5mdWxsc2NyZWVuQ2xpZW50KCkpLnNldERl
bGVnYXRlKGRlbGVnYXRlKTsKKyNpZiBIQVZFKFRPVUNIX0JBUikKKyAgICByZXR1cm4gX2ltcGwt
PmNsaWVudFdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldygpOworI2Vsc2UKKyAgICByZXR1
cm4gTk87CiAjZW5kaWYKIH0KIAotLSAoaWQ8X1dLRnVsbHNjcmVlbkRlbGVnYXRlPilfZnVsbHNj
cmVlbkRlbGVnYXRlCistICh2b2lkKV9zZXRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6
KEJPT0wpd2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQotICAgIGlmIChpczxXZWJLaXQ6OkZ1bGxzY3JlZW5DbGllbnQ+KF9wYWdlLT5m
dWxsc2NyZWVuQ2xpZW50KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0OjpGdWxs
c2NyZWVuQ2xpZW50PihfcGFnZS0+ZnVsbHNjcmVlbkNsaWVudCgpKS5kZWxlZ2F0ZSgpLmF1dG9y
ZWxlYXNlKCk7CisjaWYgSEFWRShUT1VDSF9CQVIpCisgICAgX2ltcGwtPnNldENsaWVudFdhbnRz
TWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldyh3YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcp
OwogI2VuZGlmCi0gICAgcmV0dXJuIG5pbDsKIH0KIAotLSAoQk9PTClfaXNJbkZ1bGxzY3JlZW4K
Ky0gKGlkKV9tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgIHJldHVybiBfcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKSAmJiBfcGFnZS0+
ZnVsbFNjcmVlbk1hbmFnZXIoKS0+aXNGdWxsU2NyZWVuKCk7CisjaWYgSEFWRShUT1VDSF9CQVIp
CisgICAgcmV0dXJuIF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXco
KSA/IF9pbXBsLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7CiAjZWxzZQotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbmlsOwogI2VuZGlmCiB9CiAKLS0gKF9XS01lZGlh
Q2FwdHVyZVN0YXRlKV9tZWRpYUNhcHR1cmVTdGF0ZQorLy8gVGhpcyBtZXRob2QgaXMgZm9yIHN1
YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCistICh2b2lkKV9hZGRNZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3OihpZCltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6
dG9XS01lZGlhQ2FwdHVyZVN0YXRlKF9wYWdlLT5tZWRpYVN0YXRlRmxhZ3MoKSk7CiB9CiAKLS0g
KHZvaWQpX3NldE1lZGlhQ2FwdHVyZUVuYWJsZWQ6KEJPT0wpZW5hYmxlZAorLy8gVGhpcyBtZXRo
b2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCistICh2b2lkKV9yZW1vdmVNZWRpYVBs
YXliYWNrQ29udHJvbHNWaWV3CiB7Ci0gICAgX3BhZ2UtPnNldE1lZGlhQ2FwdHVyZUVuYWJsZWQo
ZW5hYmxlZCk7CiB9CiAKLS0gKEJPT0wpX21lZGlhQ2FwdHVyZUVuYWJsZWQKKy0gKHZvaWQpX3By
ZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopdGFyZ2V0V2luZG93IGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyCiB7Ci0gICAgcmV0dXJuIF9w
YWdlLT5tZWRpYUNhcHR1cmVFbmFibGVkKCk7CisgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlckNv
cHkgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOworICAgIF9pbXBsLT5wcmVwYXJl
Rm9yTW92ZVRvV2luZG93KHRhcmdldFdpbmRvdywgW2NvbXBsZXRpb25IYW5kbGVyQ29weV0gewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkoKTsKKyAgICB9KTsKIH0KIAotLSAodm9pZClf
c2V0UGFnZU11dGVkOihfV0tNZWRpYU11dGVkU3RhdGUpbXV0ZWRTdGF0ZQorLSAodm9pZClfc2V0
VGh1bWJuYWlsVmlldzooX1dLVGh1bWJuYWlsVmlldyAqKXRodW1ibmFpbFZpZXcKIHsKLSAgICBX
ZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3MgY29yZVN0YXRlID0gV2ViQ29y
ZTo6TWVkaWFQcm9kdWNlcjo6Tm9uZU11dGVkOwotCi0gICAgaWYgKG11dGVkU3RhdGUgJiBfV0tN
ZWRpYUF1ZGlvTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3JlOjpNZWRpYVByb2R1
Y2VyOjpBdWRpb0lzTXV0ZWQ7Ci0gICAgaWYgKG11dGVkU3RhdGUgJiBfV0tNZWRpYUNhcHR1cmVE
ZXZpY2VzTXV0ZWQpCi0gICAgICAgIGNvcmVTdGF0ZSB8PSBXZWJDb3JlOjpNZWRpYVByb2R1Y2Vy
OjpBdWRpb0FuZFZpZGVvQ2FwdHVyZUlzTXV0ZWQ7Ci0gICAgaWYgKG11dGVkU3RhdGUgJiBfV0tN
ZWRpYVNjcmVlbkNhcHR1cmVNdXRlZCkKLSAgICAgICAgY29yZVN0YXRlIHw9IFdlYkNvcmU6Ok1l
ZGlhUHJvZHVjZXI6OlNjcmVlbkNhcHR1cmVJc011dGVkOwotCi0gICAgX3BhZ2UtPnNldE11dGVk
KGNvcmVTdGF0ZSk7CisgICAgX2ltcGwtPnNldFRodW1ibmFpbFZpZXcodGh1bWJuYWlsVmlldyk7
CiB9CiAKLS0gKHZvaWQpX3JlbW92ZURhdGFEZXRlY3RlZExpbmtzOihkaXNwYXRjaF9ibG9ja190
KWNvbXBsZXRpb24KKy0gKF9XS1RodW1ibmFpbFZpZXcgKilfdGh1bWJuYWlsVmlldwogewotI2lm
IEVOQUJMRShEQVRBX0RFVEVDVElPTikKLSAgICBfcGFnZS0+cmVtb3ZlRGF0YURldGVjdGVkTGlu
a3MoW2NvbXBsZXRpb24gPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbiksIHBhZ2UgPSBtYWtlV2Vh
a1B0cihfcGFnZS5nZXQoKSldIChhdXRvJiByZXN1bHQpIHsKLSAgICAgICAgaWYgKHBhZ2UpCi0g
ICAgICAgICAgICBwYWdlLT5zZXREYXRhRGV0ZWN0aW9uUmVzdWx0KHJlc3VsdCk7Ci0gICAgICAg
IGlmIChjb21wbGV0aW9uKQotICAgICAgICAgICAgY29tcGxldGlvbigpOwotICAgIH0pOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7Ci0jZW5kaWYKKyAgICBpZiAoIV9pbXBs
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfaW1wbC0+dGh1bWJuYWlsVmlldygp
OwogfQogCi0vLyBFeGVjdXRlIHRoZSBzdXBwbGllZCBibG9jayBhZnRlciB0aGUgbmV4dCB0cmFu
c2FjdGlvbiBmcm9tIHRoZSBXZWJQcm9jZXNzLgotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50
YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistICh2b2lkKV9zZXRJZ25v
cmVzQWxsRXZlbnRzOihCT09MKWlnbm9yZXNBbGxFdmVudHMKIHsKLSAgICBbc2VsZiBfaW50ZXJu
YWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1cGRhdGVCbG9jayB3aXRob3V0V2FpdGlu
Z0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOworICAg
IF9pbXBsLT5zZXRJZ25vcmVzQWxsRXZlbnRzKGlnbm9yZXNBbGxFdmVudHMpOwogfQogCi0tICh2
b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yUGFpbnRp
bmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistIChCT09MKV9pZ25vcmVzQWxsRXZlbnRz
CiB7Ci0gICAgW3NlbGYgX2ludGVybmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBk
YXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzpZRVMgd2l0aG91dFdhaXRpbmdGb3JB
bmltYXRlZFJlc2l6ZTpOT107CisgICAgcmV0dXJuIF9pbXBsLT5pZ25vcmVzQWxsRXZlbnRzKCk7
CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotLSAodm9pZClfZG9BZnRlck5leHRTdGFi
bGVQcmVzZW50YXRpb25VcGRhdGU6KGRpc3BhdGNoX2Jsb2NrX3QpdXBkYXRlQmxvY2sKKy0gKE5T
SW50ZWdlcilfc3BlbGxDaGVja2VyRG9jdW1lbnRUYWcKIHsKLSAgICBpZiAoIVtzZWxmIHVzZXNT
dGFuZGFyZENvbnRlbnRWaWV3XSkgewotICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9n
ZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7Ci0K
LSAgICBpZiAoX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzKQotICAgICAg
ICBbX3N0YWJsZVN0YXRlUHJlc2VudGF0aW9uVXBkYXRlQ2FsbGJhY2tzIGFkZE9iamVjdDp1cGRh
dGVCbG9ja0NvcHkuZ2V0KCldOwotICAgIGVsc2UgewotICAgICAgICBfc3RhYmxlU3RhdGVQcmVz
ZW50YXRpb25VcGRhdGVDYWxsYmFja3MgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoT2JqZWN0czp1cGRhdGVCbG9ja0NvcHkuZ2V0KCksIG5pbF0pOwotICAgICAgICBb
c2VsZiBfZmlyZVByZXNlbnRhdGlvblVwZGF0ZUZvclBlbmRpbmdTdGFibGVTdGF0ZVByZXNlbnRh
dGlvbkNhbGxiYWNrc107Ci0gICAgfQorICAgIHJldHVybiBfaW1wbC0+c3BlbGxDaGVja2VyRG9j
dW1lbnRUYWcoKTsKIH0KKwogI2VuZGlmCiAKLSNwcmFnbWEgbWFyayBpT1Mtc3BlY2lmaWMgbWV0
aG9kcworQGVuZAogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyN1bmRlZiBGT1JXQVJEX0FD
VElPTl9UT19XS0NPTlRFTlRWSUVXCiAKLS0gKHZvaWQpX2RldGVjdERhdGFXaXRoVHlwZXM6KFdL
RGF0YURldGVjdG9yVHlwZXMpdHlwZXMgY29tcGxldGlvbkhhbmRsZXI6KGRpc3BhdGNoX2Jsb2Nr
X3QpY29tcGxldGlvbgorQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nKQorCist
ICh2b2lkKV9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOihCT09M
KWVuYWJsZWQKIHsKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAgX3BhZ2UtPmRldGVj
dERhdGFJbkFsbEZyYW1lcyhmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh0eXBlcyksIFtjb21wbGV0
aW9uID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pLCBwYWdlID0gbWFrZVdlYWtQdHIoX3BhZ2Uu
Z2V0KCkpXSAoYXV0byYgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChwYWdlKQotICAgICAgICAgICAg
cGFnZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdChyZXN1bHQpOwotICAgICAgICBpZiAoY29tcGxl
dGlvbikKLSAgICAgICAgICAgIGNvbXBsZXRpb24oKTsKLSAgICB9KTsKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIFtfY29udGVudFZpZXcgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkOmVuYWJsZWRdOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odHlwZXMpOwotICAgIFVO
VVNFRF9QQVJBTShjb21wbGV0aW9uKTsKKyAgICBfaW1wbC0+c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGVuYWJsZWQpOwogI2VuZGlmCiB9CiAKLSNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCi0tICh2b2lkKXJlbW92ZUZyb21TdXBlcnZpZXcKKy0gKE5TRGljdGlvbmFyeSAqKV9j
b250ZW50c09mVXNlckludGVyZmFjZUl0ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW0K
IHsKLSAgICBbc3VwZXIgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgaWYgKFt1c2VySW50ZXJm
YWNlSXRlbSBpc0VxdWFsVG9TdHJpbmc6QCJ2YWxpZGF0aW9uQnViYmxlIl0pIHsKKyAgICAgICAg
YXV0byogdmFsaWRhdGlvbkJ1YmJsZSA9IF9wYWdlLT52YWxpZGF0aW9uQnViYmxlKCk7CisgICAg
ICAgIFN0cmluZyBtZXNzYWdlID0gdmFsaWRhdGlvbkJ1YmJsZSA/IHZhbGlkYXRpb25CdWJibGUt
Pm1lc3NhZ2UoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIGRvdWJsZSBmb250U2l6ZSA9IHZh
bGlkYXRpb25CdWJibGUgPyB2YWxpZGF0aW9uQnViYmxlLT5mb250U2l6ZSgpIDogMDsKKyAgICAg
ICAgcmV0dXJuIEB7IHVzZXJJbnRlcmZhY2VJdGVtOiBAeyBAIm1lc3NhZ2UiOiAoTlNTdHJpbmcg
KiltZXNzYWdlLCBAImZvbnRTaXplIjogW05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6Zm9udFNp
emVdIH0gfTsKKyAgICB9CiAKLSAgICBpZiAoW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBp
c0Z1bGxTY3JlZW5dKQotICAgICAgICBbX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZp
ZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dOwotfQorI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgX2NvbnRlbnRzT2ZVc2Vy
SW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbV07CisjZWxzZQorICAg
IHJldHVybiBuaWw7CiAjZW5kaWYKLQotLy8gRGVwcmVjYXRlZCBTUEkuCi0tIChDR1NpemUpX21p
bmltdW1MYXlvdXRTaXplT3ZlcnJpZGUKLXsKLSAgICBBU1NFUlQoX3ZpZXdMYXlvdXRTaXplT3Zl
cnJpZGUpOwotICAgIHJldHVybiBfdmlld0xheW91dFNpemVPdmVycmlkZS52YWx1ZU9yKENHU2l6
ZVplcm8pOwogfQogCi0tICh2b2lkKV9zZXRWaWV3TGF5b3V0U2l6ZU92ZXJyaWRlOihDR1NpemUp
dmlld0xheW91dFNpemVPdmVycmlkZQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCistICh2b2lk
KV9yZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24gY29t
cGxldGlvbkJsb2NrOih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jawog
ewotICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gdmlld0xheW91dFNpemVPdmVycmlkZTsK
KyAgICBhdXRvIGluZm9SZXF1ZXN0ID0gV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uUmVx
dWVzdChXZWJDb3JlOjpyb3VuZGVkSW50UG9pbnQocG9zaXRpb24pKTsKKyAgICBpbmZvUmVxdWVz
dC5pbmNsdWRlU25hcHNob3QgPSB0cnVlOwogCi0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRh
dGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcp
Ci0gICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldFZpZXdMYXlvdXRTaXplOldlYkNvcmU6OkZsb2F0
U2l6ZSh2aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKV07CisgICAgW19jb250ZW50VmlldyBkb0FmdGVy
UG9zaXRpb25JbmZvcm1hdGlvblVwZGF0ZTpbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihi
bG9jayldIChXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGluZm9ybWF0
aW9uKSB7CisgICAgICAgIGNhcHR1cmVkQmxvY2soW19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvIGFj
dGl2YXRlZEVsZW1lbnRJbmZvV2l0aEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOmlu
Zm9ybWF0aW9uIHVzZXJJbmZvOm5pbF0pOworICAgIH0gZm9yUmVxdWVzdDppbmZvUmVxdWVzdF07
CiB9CiAKLS0gKFVJRWRnZUluc2V0cylfb2JzY3VyZWRJbnNldHMKKy0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQgd2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJh
eTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIKIHsKLSAgICByZXR1cm4gX29i
c2N1cmVkSW5zZXRzOworICAgIFtfY29udGVudFZpZXcgX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJl
Y3RzQXRTZWxlY3Rpb25PZmZzZXQ6b2Zmc2V0IHdpdGhUZXh0OnRleHQgY29tcGxldGlvbkhhbmRs
ZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhh
bmRsZXIpXSAoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiBzZWxlY3Rpb25S
ZWN0cykgeworICAgICAgICBpZiAoIWNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGF1dG8gcmVjdFZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzZWxlY3Rpb25SZWN0cy5zaXplKCldKTsK
KyAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCisgICAg
ICAgICAgICBbcmVjdFZhbHVlcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dSZWN0OnNl
bGVjdGlvblJlY3QucmVjdCgpXV07CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIo
cmVjdFZhbHVlcy5nZXQoKSk7CisgICAgfV07CiB9CiAKLS0gKHZvaWQpX3NldE9ic2N1cmVkSW5z
ZXRzOihVSUVkZ2VJbnNldHMpb2JzY3VyZWRJbnNldHMKKy0gKHZvaWQpX3NldERldmljZU9yaWVu
dGF0aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9yVGVzdGluZzooQk9PTCAoXikoKSloYW5kbGVy
CiB7Ci0gICAgQVNTRVJUKG9ic2N1cmVkSW5zZXRzLnRvcCA+PSAwKTsKLSAgICBBU1NFUlQob2Jz
Y3VyZWRJbnNldHMubGVmdCA+PSAwKTsKLSAgICBBU1NFUlQob2JzY3VyZWRJbnNldHMuYm90dG9t
ID49IDApOwotICAgIEFTU0VSVChvYnNjdXJlZEluc2V0cy5yaWdodCA+PSAwKTsKLQotICAgIF9o
YXZlU2V0T2JzY3VyZWRJbnNldHMgPSBZRVM7Ci0KLSAgICBpZiAoVUlFZGdlSW5zZXRzRXF1YWxU
b0VkZ2VJbnNldHMoX29ic2N1cmVkSW5zZXRzLCBvYnNjdXJlZEluc2V0cykpCi0gICAgICAgIHJl
dHVybjsKKyAgICBGdW5jdGlvbjxib29sKCk+IGhhbmRsZXJXcmFwcGVyOworICAgIGlmIChoYW5k
bGVyKQorICAgICAgICBoYW5kbGVyV3JhcHBlciA9IFtoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGhh
bmRsZXIpXSB7IHJldHVybiBoYW5kbGVyKCk7IH07CisgICAgX3BhZ2UtPnNldERldmljZU9yaWVu
dGF0aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9yVGVzdGluZyhXVEZNb3ZlKGhhbmRsZXJXcmFw
cGVyKSk7Cit9CiAKLSAgICBfb2JzY3VyZWRJbnNldHMgPSBvYnNjdXJlZEluc2V0czsKKy0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbgoreworICAgIFtfY29udGVudFZpZXcgX2Fj
Y2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbl07Cit9CiAKLSAgICBbc2VsZiBfc2NoZWR1bGVWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVdOworLSAodm9pZClfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0
aW9uCit7CisgICAgW19jb250ZW50VmlldyBfYWNjZXNzaWJpbGl0eUNsZWFyU2VsZWN0aW9uXTsK
IH0KIAotLSAoVUlSZWN0RWRnZSlfb2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVh
CistIChVSVZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldwogewotICAgIHJldHVybiBf
b2JzY3VyZWRJbnNldEVkZ2VzQWZmZWN0ZWRCeVNhZmVBcmVhOworI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyAgICBpZiAoW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxTY3Jl
ZW5dKQorICAgICAgICByZXR1cm4gW19mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3
UGxhY2Vob2xkZXJdOworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICByZXR1
cm4gbmlsOwogfQogCi0tICh2b2lkKV9zZXRPYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2Fm
ZUFyZWE6KFVJUmVjdEVkZ2UpZWRnZXMKKy0gKENHUmVjdClfY29udGVudFZpc2libGVSZWN0CiB7
Ci0gICAgaWYgKGVkZ2VzID09IF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2FmZUFyZWEp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIF9vYnNjdXJlZEluc2V0RWRnZXNBZmZlY3RlZEJ5U2Fm
ZUFyZWEgPSBlZGdlczsKLQotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZV07CisgICAgcmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIGJvdW5kc10gdG9WaWV3
OnNlbGYuX2N1cnJlbnRDb250ZW50Vmlld107CiB9CiAKLS0gKFVJRWRnZUluc2V0cylfdW5vYnNj
dXJlZFNhZmVBcmVhSW5zZXRzCistIChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tQ29udGVudHNU
b1ZpZXc6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1cm4gX3Vub2JzY3VyZWRTYWZlQXJlYUlu
c2V0czsKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3OnNlbGYu
X2N1cnJlbnRDb250ZW50Vmlld107CiB9CiAKLS0gKHZvaWQpX3NldFVub2JzY3VyZWRTYWZlQXJl
YUluc2V0czooVUlFZGdlSW5zZXRzKXVub2JzY3VyZWRTYWZlQXJlYUluc2V0cworLSAoQ0dQb2lu
dClfY29udmVydFBvaW50RnJvbVZpZXdUb0NvbnRlbnRzOihDR1BvaW50KXBvaW50CiB7Ci0gICAg
QVNTRVJUKHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy50b3AgPj0gMCk7Ci0gICAgQVNTRVJUKHVu
b2JzY3VyZWRTYWZlQXJlYUluc2V0cy5sZWZ0ID49IDApOwotICAgIEFTU0VSVCh1bm9ic2N1cmVk
U2FmZUFyZWFJbnNldHMuYm90dG9tID49IDApOwotICAgIEFTU0VSVCh1bm9ic2N1cmVkU2FmZUFy
ZWFJbnNldHMucmlnaHQgPj0gMCk7Ci0KLSAgICBfaGF2ZVNldFVub2JzY3VyZWRTYWZlQXJlYUlu
c2V0cyA9IFlFUzsKLQotICAgIGlmIChVSUVkZ2VJbnNldHNFcXVhbFRvRWRnZUluc2V0cyhfdW5v
YnNjdXJlZFNhZmVBcmVhSW5zZXRzLCB1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBfdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gdW5vYnNjdXJlZFNh
ZmVBcmVhSW5zZXRzOwotCi0gICAgW3NlbGYgX3NjaGVkdWxlVmlzaWJsZUNvbnRlbnRSZWN0VXBk
YXRlXTsKKyAgICByZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpzZWxmLl9j
dXJyZW50Q29udGVudFZpZXddOwogfQogCi0tIChCT09MKV9zYWZlQXJlYVNob3VsZEFmZmVjdE9i
c2N1cmVkSW5zZXRzCistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dAogewotICAgIGlm
ICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZpZXddKQotICAgICAgICByZXR1cm4gTk87Ci0g
ICAgcmV0dXJuIF9hdm9pZHNVbnNhZmVBcmVhOworICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5
VGFiOllFU107CiB9CiAKLS0gKHZvaWQpX3NldEludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6
KFVJSW50ZXJmYWNlT3JpZW50YXRpb24paW50ZXJmYWNlT3JpZW50YXRpb24KKy0gKHZvaWQpa2V5
Ym9hcmRBY2Nlc3NvcnlCYXJQcmV2aW91cwogewotICAgIF9vdmVycmlkZXNJbnRlcmZhY2VPcmll
bnRhdGlvbiA9IFlFUzsKLSAgICBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSA9IGludGVy
ZmFjZU9yaWVudGF0aW9uOwotCi0gICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09
IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6Tm90UmVzaXppbmcpCi0gICAgICAg
IFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOmRldmljZU9yaWVudGF0aW9uRm9y
VUlJbnRlcmZhY2VPcmllbnRhdGlvbihfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZSldOwor
ICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5VGFiOk5PXTsKIH0KIAotLSAoVUlJbnRlcmZhY2VP
cmllbnRhdGlvbilfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZQorLSAodm9pZClhcHBseUF1
dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0b1N0cmluZzooTlNTdHJpbmcgKilv
bGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9u
SGFuZGxlcgogewotICAgIEFTU0VSVChfb3ZlcnJpZGVzSW50ZXJmYWNlT3JpZW50YXRpb24pOwot
ICAgIHJldHVybiBfaW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTsKKyAgICBbX2NvbnRlbnRW
aWV3IGFwcGx5QXV0b2NvcnJlY3Rpb246bmV3U3RyaW5nIHRvU3RyaW5nOm9sZFN0cmluZyB3aXRo
Q29tcGxldGlvbkhhbmRsZXI6W2NhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzKSB7
CisgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICB9XTsKIH0KIAotLSAo
dm9pZClfY2xlYXJJbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlCistICh2b2lkKWRpc21pc3NG
b3JtQWNjZXNzb3J5VmlldwogewotICAgIF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbiA9
IE5POwotICAgIF9pbnRlcmZhY2VPcmllbnRhdGlvbk92ZXJyaWRlID0gVUlJbnRlcmZhY2VPcmll
bnRhdGlvblBvcnRyYWl0OworICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5RG9uZV07CiB9CiAK
LS8vIERlcHJlY2F0ZWQgU1BJCi0tIChDR1NpemUpX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJy
aWRlCistICh2b2lkKV9kaXNtaXNzRmlsZVBpY2tlcgogewotICAgIEFTU0VSVChfbWF4aW11bVVu
b2JzY3VyZWRTaXplT3ZlcnJpZGUpOwotICAgIHJldHVybiBfbWF4aW11bVVub2JzY3VyZWRTaXpl
T3ZlcnJpZGUudmFsdWVPcihDR1NpemVaZXJvKTsKKyAgICBbX2NvbnRlbnRWaWV3IGRpc21pc3NG
aWxlUGlja2VyXTsKIH0KIAotLSAodm9pZClfc2V0TWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJp
ZGU6KENHU2l6ZSlzaXplCistICh2b2lkKXNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjooTlNJbnRl
Z2VyKWhvdXIgbWludXRlOihOU0ludGVnZXIpbWludXRlCiB7Ci0gICAgQVNTRVJUKHNpemUud2lk
dGggPD0gc2VsZi5ib3VuZHMuc2l6ZS53aWR0aCAmJiBzaXplLmhlaWdodCA8PSBzZWxmLmJvdW5k
cy5zaXplLmhlaWdodCk7Ci0gICAgX21heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlID0gc2l6
ZTsKLQotICAgIGlmIChfZHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9PSBXZWJLaXQ6OkR5bmFt
aWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJlc2l6aW5nKQotICAgICAgICBbc2VsZiBfZGlzcGF0
Y2hTZXRNYXhpbXVtVW5vYnNjdXJlZFNpemU6V2ViQ29yZTo6RmxvYXRTaXplKHNpemUpXTsKKyAg
ICBbX2NvbnRlbnRWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjpob3VyIG1pbnV0ZTptaW51
dGVdOwogfQogCi0tICh2b2lkKV9zZXRBbGxvd3NWaWV3cG9ydFNocmlua1RvRml0OihCT09MKWFs
bG93U2hyaW5rVG9GaXQKKy0gKHZvaWQpc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50
KXJvd0luZGV4CiB7Ci0gICAgX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQgPSBhbGxvd1Nocmlu
a1RvRml0OworICAgIFtfY29udGVudFZpZXcgc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzpy
b3dJbmRleF07CiB9CiAKLS0gKEJPT0wpX2FsbG93c1ZpZXdwb3J0U2hyaW5rVG9GaXQKKy0gKE5T
U3RyaW5nICopc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZQogewotICAgIHJldHVybiBfYWxsb3dzVmll
d3BvcnRTaHJpbmtUb0ZpdDsKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBzZWxlY3RGb3JtUG9w
b3ZlclRpdGxlXTsKIH0KIAotLSAodm9pZClfYmVnaW5JbnRlcmFjdGl2ZU9ic2N1cmVkSW5zZXRz
Q2hhbmdlCistIChOU1N0cmluZyAqKXRleHRDb250ZW50VHlwZUZvclRlc3RpbmcKIHsKLSAgICBB
U1NFUlQoIV9pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJbnRlcmFjdGl2ZWx5KTsKLSAgICBfaXND
aGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSA9IFlFUzsKKyAgICByZXR1cm4gW19j
b250ZW50VmlldyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXTsKIH0KIAotLSAodm9pZClfZW5k
SW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZQorLSAoTlNTdHJpbmcgKilmb3JtSW5wdXRM
YWJlbAogewotICAgIEFTU0VSVChfaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVs
eSk7Ci0gICAgX2lzQ2hhbmdpbmdPYnNjdXJlZEluc2V0c0ludGVyYWN0aXZlbHkgPSBOTzsKLSAg
ICBbc2VsZiBfc2NoZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworICAgIHJldHVybiBb
X2NvbnRlbnRWaWV3IGZvcm1JbnB1dExhYmVsXTsKIH0KIAotLSAodm9pZClfaGlkZUNvbnRlbnRV
bnRpbE5leHRVcGRhdGUKKy0gKHZvaWQpZGlkU3RhcnRGb3JtQ29udHJvbEludGVyYWN0aW9uCiB7
Ci0gICAgaWYgKGF1dG8qIGFyZWEgPSBfcGFnZS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAgICAgYXJl
YS0+aGlkZUNvbnRlbnRVbnRpbEFueVVwZGF0ZSgpOworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRv
IG92ZXJyaWRlLgogfQogCi0tICh2b2lkKV9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6
KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50
ZXJhY3Rpb24KIHsKLSAgICBDR1JlY3Qgb2xkQm91bmRzID0gc2VsZi5ib3VuZHM7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IG9sZFVub2JzY3VyZWRDb250ZW50UmVjdCA9IF9wYWdlLT51bm9ic2N1
cmVkQ29udGVudFJlY3QoKTsKLQotICAgIGlmICghW3NlbGYgdXNlc1N0YW5kYXJkQ29udGVudFZp
ZXddIHx8ICFfaGFzQ29tbWl0dGVkTG9hZEZvck1haW5GcmFtZSB8fCBDR1JlY3RJc0VtcHR5KG9s
ZEJvdW5kcykgfHwgb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAg
ICBpZiAoW19jdXN0b21Db250ZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdl
Yl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6KV0pCi0gICAgICAgICAgICBbX2N1c3Rv
bUNvbnRlbnRWaWV3IHdlYl9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6dXBkYXRlQmxv
Y2tdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cGRhdGVCbG9jaygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQcm94
eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6XSIs
IHNlbGYsIF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7Ci0KLSAgICBfZHluYW1pY1Zp
ZXdwb3J0VXBkYXRlTW9kZSA9IFdlYktpdDo6RHluYW1pY1ZpZXdwb3J0VXBkYXRlTW9kZTo6UmVz
aXppbmdXaXRoQW5pbWF0aW9uOwotCi0gICAgYXV0byBvbGRWaWV3TGF5b3V0U2l6ZSA9IFtzZWxm
IGFjdGl2ZVZpZXdMYXlvdXRTaXplOnNlbGYuYm91bmRzXTsKLSAgICBhdXRvIG9sZE1heGltdW1V
bm9ic2N1cmVkU2l6ZSA9IGFjdGl2ZU1heGltdW1Vbm9ic2N1cmVkU2l6ZShzZWxmLCBvbGRCb3Vu
ZHMpOwotICAgIGludDMyX3Qgb2xkT3JpZW50YXRpb24gPSBhY3RpdmVPcmllbnRhdGlvbihzZWxm
KTsKLSAgICBVSUVkZ2VJbnNldHMgb2xkT2JzY3VyZWRJbnNldHMgPSBfb2JzY3VyZWRJbnNldHM7
Ci0KLSAgICB1cGRhdGVCbG9jaygpOwotCi0gICAgQ0dSZWN0IG5ld0JvdW5kcyA9IHNlbGYuYm91
bmRzOwotICAgIGF1dG8gbmV3Vmlld0xheW91dFNpemUgPSBbc2VsZiBhY3RpdmVWaWV3TGF5b3V0
U2l6ZTpuZXdCb3VuZHNdOwotICAgIGF1dG8gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplID0gYWN0
aXZlTWF4aW11bVVub2JzY3VyZWRTaXplKHNlbGYsIG5ld0JvdW5kcyk7Ci0gICAgaW50MzJfdCBu
ZXdPcmllbnRhdGlvbiA9IGFjdGl2ZU9yaWVudGF0aW9uKHNlbGYpOwotICAgIFVJRWRnZUluc2V0
cyBuZXdPYnNjdXJlZEluc2V0cyA9IF9vYnNjdXJlZEluc2V0czsKLSAgICBDR1JlY3QgZnV0dXJl
VW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcyA9IFVJRWRnZUluc2V0c0luc2V0UmVjdChu
ZXdCb3VuZHMsIF9vYnNjdXJlZEluc2V0cyk7Ci0gICAgQ0dSZWN0IGNvbnRlbnRWaWV3Qm91bmRz
ID0gW19jb250ZW50VmlldyBib3VuZHNdOwotCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghKF92
aWV3TGF5b3V0U2l6ZU92ZXJyaWRlICYmIG5ld1ZpZXdMYXlvdXRTaXplLmlzRW1wdHkoKSksICJD
bGllbnRzIGNvbnRyb2xsaW5nIHRoZSBsYXlvdXQgc2l6ZSBzaG91bGQgbWFpbnRhaW4gYSB2YWxp
ZCBsYXlvdXQgc2l6ZSB0byBtaW5pbWl6ZSBsYXlvdXRzLiIpOwotICAgIGlmIChDR1JlY3RJc0Vt
cHR5KG5ld0JvdW5kcykgfHwgbmV3Vmlld0xheW91dFNpemUuaXNFbXB0eSgpIHx8IENHUmVjdElz
RW1wdHkoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRlcykgfHwgQ0dSZWN0SXNF
bXB0eShjb250ZW50Vmlld0JvdW5kcykpIHsKLSAgICAgICAgW3NlbGYgX2NhbmNlbEFuaW1hdGVk
UmVzaXplXTsKLSAgICAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKLSAgICAgICAg
aWYgKF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlKQotICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNo
U2V0Vmlld0xheW91dFNpemU6bmV3Vmlld0xheW91dFNpemVdOwotICAgICAgICBpZiAoX21heGlt
dW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKQotICAgICAgICAgICAgW3NlbGYgX2Rpc3BhdGNoU2V0
TWF4aW11bVVub2JzY3VyZWRTaXplOldlYkNvcmU6OkZsb2F0U2l6ZShuZXdNYXhpbXVtVW5vYnNj
dXJlZFNpemUpXTsKLSAgICAgICAgaWYgKF9vdmVycmlkZXNJbnRlcmZhY2VPcmllbnRhdGlvbikK
LSAgICAgICAgICAgIFtzZWxmIF9kaXNwYXRjaFNldERldmljZU9yaWVudGF0aW9uOm5ld09yaWVu
dGF0aW9uXTsKLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENHUmVjdEVxdWFs
VG9SZWN0KG9sZEJvdW5kcywgbmV3Qm91bmRzKQotICAgICAgICAmJiBvbGRWaWV3TGF5b3V0U2l6
ZSA9PSBuZXdWaWV3TGF5b3V0U2l6ZQotICAgICAgICAmJiBvbGRNYXhpbXVtVW5vYnNjdXJlZFNp
emUgPT0gbmV3TWF4aW11bVVub2JzY3VyZWRTaXplCi0gICAgICAgICYmIG9sZE9yaWVudGF0aW9u
ID09IG5ld09yaWVudGF0aW9uCi0gICAgICAgICYmIFVJRWRnZUluc2V0c0VxdWFsVG9FZGdlSW5z
ZXRzKG9sZE9ic2N1cmVkSW5zZXRzLCBuZXdPYnNjdXJlZEluc2V0cykpIHsKLSAgICAgICAgW3Nl
bGYgX2NhbmNlbEFuaW1hdGVkUmVzaXplXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IF9yZXNpemVBbmltYXRpb25UcmFuc2Zvcm1BZGp1c3RtZW50cyA9IENBVHJhbnNmb3JtM0RJZGVu
dGl0eTsKLQotICAgIGlmICghX3Jlc2l6ZUFuaW1hdGlvblZpZXcpIHsKLSAgICAgICAgTlNVSW50
ZWdlciBpbmRleE9mQ29udGVudFZpZXcgPSBbW19zY3JvbGxWaWV3IHN1YnZpZXdzXSBpbmRleE9m
T2JqZWN0Ol9jb250ZW50Vmlldy5nZXQoKV07Ci0gICAgICAgIF9yZXNpemVBbmltYXRpb25WaWV3
ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOwotICAgICAgICBbX3Jlc2l6ZUFuaW1h
dGlvblZpZXcgbGF5ZXJdLm5hbWUgPSBAIlJlc2l6ZUFuaW1hdGlvbiI7Ci0gICAgICAgIFtfc2Ny
b2xsVmlldyBpbnNlcnRTdWJ2aWV3Ol9yZXNpemVBbmltYXRpb25WaWV3LmdldCgpIGF0SW5kZXg6
aW5kZXhPZkNvbnRlbnRWaWV3XTsKLSAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3IGFkZFN1
YnZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKLSAgICAgICAgW19yZXNpemVBbmltYXRpb25WaWV3
IGFkZFN1YnZpZXc6W19jb250ZW50VmlldyB1bnNjYWxlZFZpZXddXTsKLSAgICB9Ci0KLSAgICBD
R1NpemUgY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBjb250ZW50Vmlld0Jv
dW5kcy5zaXplOwotICAgIFtfc2Nyb2xsVmlldyBzZXRNaW5pbXVtWm9vbVNjYWxlOnN0ZDo6bWlu
KG5ld1ZpZXdMYXlvdXRTaXplLndpZHRoKCkgLyBjb250ZW50U2l6ZUluQ29udGVudFZpZXdDb29y
ZGluYXRlcy53aWR0aCwgW19zY3JvbGxWaWV3IG1pbmltdW1ab29tU2NhbGVdKV07Ci0gICAgW19z
Y3JvbGxWaWV3IHNldE1heGltdW1ab29tU2NhbGU6c3RkOjptYXgobmV3Vmlld0xheW91dFNpemUu
d2lkdGgoKSAvIGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3JkaW5hdGVzLndpZHRoLCBbX3Nj
cm9sbFZpZXcgbWF4aW11bVpvb21TY2FsZV0pXTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG5ldyBz
Y2FsZSB0byBrZWVwIHRoZSBjdXJyZW50IGNvbnRlbnQgd2lkdGggaW4gdGhlIHNjcm9sbHZpZXcu
Ci0gICAgQ0dGbG9hdCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMgPSBv
bGRVbm9ic2N1cmVkQ29udGVudFJlY3Qud2lkdGgoKTsKLSAgICBfYW5pbWF0ZWRSZXNpemVPcmln
aW5hbENvbnRlbnRXaWR0aCA9IHN0ZDo6bWluKGNvbnRlbnRTaXplSW5Db250ZW50Vmlld0Nvb3Jk
aW5hdGVzLndpZHRoLCBvbGRXZWJWaWV3V2lkdGhJbkNvbnRlbnRWaWV3Q29vcmRpbmF0ZXMpOwot
ICAgIENHRmxvYXQgdGFyZ2V0U2NhbGUgPSBuZXdWaWV3TGF5b3V0U2l6ZS53aWR0aCgpIC8gX2Fu
aW1hdGVkUmVzaXplT3JpZ2luYWxDb250ZW50V2lkdGg7Ci0gICAgQ0dGbG9hdCByZXNpemVBbmlt
YXRpb25WaWV3QW5pbWF0aW9uU2NhbGUgPSB0YXJnZXRTY2FsZSAvIGNvbnRlbnRab29tU2NhbGUo
c2VsZik7Ci0gICAgW19yZXNpemVBbmltYXRpb25WaWV3IHNldFRyYW5zZm9ybTpDR0FmZmluZVRy
YW5zZm9ybU1ha2VTY2FsZShyZXNpemVBbmltYXRpb25WaWV3QW5pbWF0aW9uU2NhbGUsIHJlc2l6
ZUFuaW1hdGlvblZpZXdBbmltYXRpb25TY2FsZSldOwotCi0gICAgLy8gQ29tcHV0ZSBhIG5ldyBw
b3NpdGlvbiB0byBrZWVwIHRoZSBjb250ZW50IGNlbnRlcmVkLgotICAgIENHUG9pbnQgb3JpZ2lu
YWxDb250ZW50Q2VudGVyID0gb2xkVW5vYnNjdXJlZENvbnRlbnRSZWN0LmNlbnRlcigpOwotICAg
IENHUG9pbnQgb3JpZ2luYWxDb250ZW50Q2VudGVySW5TZWxmQ29vcmRpbmF0ZXMgPSBbc2VsZiBj
b252ZXJ0UG9pbnQ6b3JpZ2luYWxDb250ZW50Q2VudGVyIGZyb21WaWV3Ol9jb250ZW50Vmlldy5n
ZXQoKV07Ci0gICAgQ0dQb2ludCBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3Jk
aW5hdGVzID0gQ0dQb2ludE1ha2UoZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRl
cy5vcmlnaW4ueCArIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMuc2l6ZS53
aWR0aCAvIDIsIGZ1dHVyZVVub2JzY3VyZWRSZWN0SW5TZWxmQ29vcmRpbmF0ZXMub3JpZ2luLnkg
KyBmdXR1cmVVbm9ic2N1cmVkUmVjdEluU2VsZkNvb3JkaW5hdGVzLnNpemUuaGVpZ2h0IC8gMik7
Ci0KLSAgICBDR1BvaW50IG9yaWdpbmFsQ29udGVudE9mZnNldCA9IFtfc2Nyb2xsVmlldyBjb250
ZW50T2Zmc2V0XTsKLSAgICBDR1BvaW50IGNvbnRlbnRPZmZzZXQgPSBvcmlnaW5hbENvbnRlbnRP
ZmZzZXQ7Ci0gICAgY29udGVudE9mZnNldC54ICs9IChvcmlnaW5hbENvbnRlbnRDZW50ZXJJblNl
bGZDb29yZGluYXRlcy54IC0gZnV0dXJlVW5vYnNjdXJlZFJlY3RDZW50ZXJJblNlbGZDb29yZGlu
YXRlcy54KTsKLSAgICBjb250ZW50T2Zmc2V0LnkgKz0gKG9yaWdpbmFsQ29udGVudENlbnRlcklu
U2VsZkNvb3JkaW5hdGVzLnkgLSBmdXR1cmVVbm9ic2N1cmVkUmVjdENlbnRlckluU2VsZkNvb3Jk
aW5hdGVzLnkpOworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQogCi0gICAg
Ly8gTGltaXQgdGhlIG5ldyBvZmZzZXQgd2l0aGluIHRoZSBzY3JvbGx2aWV3LCB3ZSBkbyBub3Qg
d2FudCB0byBydWJiZXIgYmFuZCBwcm9ncmFtbWF0aWNhbGx5LgotICAgIENHU2l6ZSBmdXR1cmVD
b250ZW50U2l6ZUluU2VsZkNvb3JkaW5hdGVzID0gQ0dTaXplTWFrZShjb250ZW50U2l6ZUluQ29u
dGVudFZpZXdDb29yZGluYXRlcy53aWR0aCAqIHRhcmdldFNjYWxlLCBjb250ZW50U2l6ZUluQ29u
dGVudFZpZXdDb29yZGluYXRlcy5oZWlnaHQgKiB0YXJnZXRTY2FsZSk7Ci0gICAgQ0dGbG9hdCBt
YXhIb3Jpem9udGFsT2Zmc2V0ID0gZnV0dXJlQ29udGVudFNpemVJblNlbGZDb29yZGluYXRlcy53
aWR0aCAtIG5ld0JvdW5kcy5zaXplLndpZHRoICsgX29ic2N1cmVkSW5zZXRzLnJpZ2h0OwotICAg
IGNvbnRlbnRPZmZzZXQueCA9IHN0ZDo6bWluKGNvbnRlbnRPZmZzZXQueCwgbWF4SG9yaXpvbnRh
bE9mZnNldCk7Ci0gICAgQ0dGbG9hdCBtYXhWZXJ0aWNhbE9mZnNldCA9IGZ1dHVyZUNvbnRlbnRT
aXplSW5TZWxmQ29vcmRpbmF0ZXMuaGVpZ2h0IC0gbmV3Qm91bmRzLnNpemUuaGVpZ2h0ICsgX29i
c2N1cmVkSW5zZXRzLmJvdHRvbTsKLSAgICBjb250ZW50T2Zmc2V0LnkgPSBzdGQ6Om1pbihjb250
ZW50T2Zmc2V0LnksIG1heFZlcnRpY2FsT2Zmc2V0KTsKKy0gKHZvaWQpX2RpZFNob3dDb250ZXh0
TWVudQoreworICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgorfQogCi0gICAgY29u
dGVudE9mZnNldC54ID0gc3RkOjptYXgoY29udGVudE9mZnNldC54LCAtX29ic2N1cmVkSW5zZXRz
LmxlZnQpOwotICAgIGNvbnRlbnRPZmZzZXQueSA9IHN0ZDo6bWF4KGNvbnRlbnRPZmZzZXQueSwg
LV9vYnNjdXJlZEluc2V0cy50b3ApOworLSAodm9pZClfZGlkRGlzbWlzc0NvbnRleHRNZW51Cit7
CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCit9CiAKLSAgICAvLyBNYWtlIHRo
ZSB0b3AvYm90dG9tIGVkZ2VzICJzdGlja3kiIHdpdGhpbiAxIHBpeGVsLgotICAgIGlmIChvbGRV
bm9ic2N1cmVkQ29udGVudFJlY3QubWF4WSgpID4gY29udGVudFNpemVJbkNvbnRlbnRWaWV3Q29v
cmRpbmF0ZXMuaGVpZ2h0IC0gMSkKLSAgICAgICAgY29udGVudE9mZnNldC55ID0gbWF4VmVydGlj
YWxPZmZzZXQ7Ci0gICAgaWYgKG9sZFVub2JzY3VyZWRDb250ZW50UmVjdC55KCkgPCAxKQotICAg
ICAgICBjb250ZW50T2Zmc2V0LnkgPSBbc2VsZiBfaW5pdGlhbENvbnRlbnRPZmZzZXRGb3JTY3Jv
bGxWaWV3XS55OworLSAoQ0dSZWN0KV91aVRleHRDYXJldFJlY3QKK3sKKyAgICAvLyBGb3JjZSB0
aGUgc2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KKyAgICBbX2NvbnRlbnRWaWV3
IF91cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKIAotICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXZlIGNv
bnRlbnQgY2VudGVyZWQgYWZ0ZXIgZG91YmxlIHRhcCB0byB6b29tLCB3ZSBzaG91bGQgYWxzbyB0
cnkgdG8ga2VlcCB0aGF0IHJlY3QgaW4gdmlldy4KLSAgICBbX3Njcm9sbFZpZXcgc2V0Q29udGVu
dFNpemU6cm91bmRTY3JvbGxWaWV3Q29udGVudFNpemUoKl9wYWdlLCBmdXR1cmVDb250ZW50U2l6
ZUluU2VsZkNvb3JkaW5hdGVzKV07Ci0gICAgW19zY3JvbGxWaWV3IHNldENvbnRlbnRPZmZzZXQ6
Y29udGVudE9mZnNldF07CisgICAgcmV0dXJuIFtbX2NvbnRlbnRWaWV3IHZhbHVlRm9yS2V5UGF0
aDpAImludGVyYWN0aW9uQXNzaXN0YW50LnNlbGVjdGlvblZpZXcuc2VsZWN0aW9uLmNhcmV0UmVj
dCJdIENHUmVjdFZhbHVlXTsKK30KIAotICAgIENHUmVjdCB2aXNpYmxlUmVjdEluQ29udGVudENv
b3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJlY3Q6bmV3Qm91bmRzIHRvVmlldzpfY29udGVudFZp
ZXcuZ2V0KCldOwotICAgIENHUmVjdCB1bm9ic2N1cmVkUmVjdEluQ29udGVudENvb3JkaW5hdGVz
ID0gW3NlbGYgY29udmVydFJlY3Q6ZnV0dXJlVW5vYnNjdXJlZFJlY3RJblNlbGZDb29yZGluYXRl
cyB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKy0gKENHUmVjdClfaW5wdXRWaWV3Qm91bmRz
Cit7CisgICAgcmV0dXJuIF9pbnB1dFZpZXdCb3VuZHM7Cit9CiAKLSAgICBVSUVkZ2VJbnNldHMg
dW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzID0gW3NlbGYgX2NvbXB1dGVkVW5vYnNjdXJlZFNhZmVB
cmVhSW5zZXRdOwotICAgIFdlYkNvcmU6OkZsb2F0Qm94RXh0ZW50IHVub2JzY3VyZWRTYWZlQXJl
YUluc2V0c0V4dGVudCh1bm9ic2N1cmVkU2FmZUFyZWFJbnNldHMudG9wLCB1bm9ic2N1cmVkU2Fm
ZUFyZWFJbnNldHMucmlnaHQsIHVub2JzY3VyZWRTYWZlQXJlYUluc2V0cy5ib3R0b20sIHVub2Jz
Y3VyZWRTYWZlQXJlYUluc2V0cy5sZWZ0KTsKKy0gKE5TQXJyYXk8TlNWYWx1ZSAqPiAqKV91aVRl
eHRTZWxlY3Rpb25SZWN0cworeworICAgIC8vIEZvcmNlIHRoZSBzZWxlY3Rpb24gdmlldyB0byB1
cGRhdGUgaWYgbmVlZGVkLgorICAgIFtfY29udGVudFZpZXcgX3VwZGF0ZUNoYW5nZWRTZWxlY3Rp
b25dOwogCi0gICAgX2xhc3RTZW50Vmlld0xheW91dFNpemUgPSBuZXdWaWV3TGF5b3V0U2l6ZTsK
LSAgICBfbGFzdFNlbnRNYXhpbXVtVW5vYnNjdXJlZFNpemUgPSBuZXdNYXhpbXVtVW5vYnNjdXJl
ZFNpemU7Ci0gICAgX2xhc3RTZW50RGV2aWNlT3JpZW50YXRpb24gPSBuZXdPcmllbnRhdGlvbjsK
KyAgICByZXR1cm4gW19jb250ZW50VmlldyBfdWlUZXh0U2VsZWN0aW9uUmVjdHNdOworfQogCi0g
ICAgX3BhZ2UtPmR5bmFtaWNWaWV3cG9ydFNpemVVcGRhdGUobmV3Vmlld0xheW91dFNpemUsIG5l
d01heGltdW1Vbm9ic2N1cmVkU2l6ZSwgdmlzaWJsZVJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywg
dW5vYnNjdXJlZFJlY3RJbkNvbnRlbnRDb29yZGluYXRlcywgZnV0dXJlVW5vYnNjdXJlZFJlY3RJ
blNlbGZDb29yZGluYXRlcywgdW5vYnNjdXJlZFNhZmVBcmVhSW5zZXRzRXh0ZW50LCB0YXJnZXRT
Y2FsZSwgbmV3T3JpZW50YXRpb24sICsrX2N1cnJlbnREeW5hbWljVmlld3BvcnRTaXplVXBkYXRl
SUQpOwotICAgIGlmIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gX3Bh
Z2UtPmRyYXdpbmdBcmVhKCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5zZXRTaXplKFdlYkNvcmU6
OkludFNpemUobmV3Qm91bmRzLnNpemUpKTsKKy0gKE5TU3RyaW5nICopX3Njcm9sbGluZ1RyZWVB
c1RleHQKK3sKKyAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNv
b3JkaW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKKyAgICBpZiAo
IWNvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm4gQCIiOwogCi0gICAgX3dhaXRpbmdGb3JDb21t
aXRBZnRlckFuaW1hdGVkUmVzaXplID0gWUVTOwotICAgIF93YWl0aW5nRm9yRW5kQW5pbWF0ZWRS
ZXNpemUgPSBZRVM7CisgICAgcmV0dXJuIGNvb3JkaW5hdG9yLT5zY3JvbGxpbmdUcmVlQXNUZXh0
KCk7CiB9CiAKLS0gKHZvaWQpX2VuZEFuaW1hdGVkUmVzaXplCistIChOU051bWJlciAqKV9zdGFi
bGVTdGF0ZU92ZXJyaWRlCiB7Ci0gICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRCgiJXAgKHBhZ2VQ
cm94eUlEPSVsbHUpIC1bV0tXZWJWaWV3IF9lbmRBbmltYXRlZFJlc2l6ZV0gX2R5bmFtaWNWaWV3
cG9ydFVwZGF0ZU1vZGUgJWQiLCBzZWxmLCBfcGFnZS0+aWRlbnRpZmllcigpLnRvVUludDY0KCks
IF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2
ZSBhbiB1cC10by1kYXRlIGxheWVyIHRyZWUsIGltbWVkaWF0ZWx5IGNvbXBsZXRlCi0gICAgLy8g
dGhlIHJlc2l6ZS4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGRlZmVyIGNvbXBsZXRpb24gdW50aWwgd2Ug
ZG8uCi0gICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IE5POwotICAgIGlmICghX3dh
aXRpbmdGb3JDb21taXRBZnRlckFuaW1hdGVkUmVzaXplKQotICAgICAgICBbc2VsZiBfZGlkQ29t
cGxldGVBbmltYXRlZFJlc2l6ZV07CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUu
CisgICAgcmV0dXJuIG5pbDsKIH0KIAotLSAodm9pZClfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50
V2l0aFVwZGF0ZXM6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCistICh2b2lkKV9kb0FmdGVy
TmV4dFN0YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9j
awogewotICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoIiVwIChwYWdlUHJveHlJRD0lbGx1KSAt
W1dLV2ViVmlldyBfcmVzaXplV2hpbGVIaWRpbmdDb250ZW50V2l0aFVwZGF0ZXM6XSIsIHNlbGYs
IF9wYWdlLT5pZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CisgICAgaWYgKCFbc2VsZiB1c2VzU3Rh
bmRhcmRDb250ZW50Vmlld10pIHsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKSwgdXBkYXRlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgW3NlbGYgX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp1cGRhdGVCbG9ja107Ci0g
ICAgaWYgKF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2RlID09IFdlYktpdDo6RHluYW1pY1ZpZXdw
b3J0VXBkYXRlTW9kZTo6UmVzaXppbmdXaXRoQW5pbWF0aW9uKSB7Ci0gICAgICAgIFtfY29udGVu
dFZpZXcgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIF9keW5hbWljVmlld3BvcnRVcGRhdGVNb2Rl
ID0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpSZXNpemluZ1dpdGhEb2N1bWVu
dEhpZGRlbjsKLSAgICAgICAgCi0gICAgICAgIC8vIF9yZXNpemVXaGlsZUhpZGluZ0NvbnRlbnRX
aXRoVXBkYXRlcyBpcyB1c2VkIGJ5IGl0c2VsZjsgdGhlIGNsaWVudCB3aWxsCi0gICAgICAgIC8v
IG5vdCBjYWxsIGVuZEFuaW1hdGVkUmVzaXplLCBzbyB3ZSBjYW4ndCB3YWl0IGZvciBpdC4KLSAg
ICAgICAgX3dhaXRpbmdGb3JFbmRBbmltYXRlZFJlc2l6ZSA9IE5POworICAgIGF1dG8gdXBkYXRl
QmxvY2tDb3B5ID0gbWFrZUJsb2NrUHRyKHVwZGF0ZUJsb2NrKTsKKworICAgIGlmIChfc3RhYmxl
U3RhdGVQcmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MpCisgICAgICAgIFtfc3RhYmxlU3RhdGVQ
cmVzZW50YXRpb25VcGRhdGVDYWxsYmFja3MgYWRkT2JqZWN0OnVwZGF0ZUJsb2NrQ29weS5nZXQo
KV07CisgICAgZWxzZSB7CisgICAgICAgIF9zdGFibGVTdGF0ZVByZXNlbnRhdGlvblVwZGF0ZUNh
bGxiYWNrcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
OnVwZGF0ZUJsb2NrQ29weS5nZXQoKSwgbmlsXSk7CisgICAgICAgIFtzZWxmIF9maXJlUHJlc2Vu
dGF0aW9uVXBkYXRlRm9yUGVuZGluZ1N0YWJsZVN0YXRlUHJlc2VudGF0aW9uQ2FsbGJhY2tzXTsK
ICAgICB9CiB9CiAKQEAgLTY4NDMsNDU5ICs3MTUxLDY0MyBAQCBzdGF0aWMgaW5saW5lIFdlYktp
dDo6RmluZE9wdGlvbnMgdG9GaW5kT3B0aW9ucyhfV0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25z
KQogICAgIH1dOwogfQogCi0tICh2b2lkKV9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdzSW5zZXQ6
KENHU2l6ZSlpbnNldAorLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElE
Oih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRAoreworICAgIENBTGF5ZXIqIGxheWVyID0gZG93
bmNhc3Q8V2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5PigqX3BhZ2UtPmRy
YXdpbmdBcmVhKCkpLmxheWVyV2l0aElERm9yVGVzdGluZyhsYXllcklEKTsKKyAgICBpZiAoIWxh
eWVyKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgcmV0dXJuIEB7CisgICAgICAgIEAiYm91
bmRzIiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAor
ICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYm91bmRzLm9yaWdpbi54KSwKKyAgICAgICAgICAg
IEAid2lkdGgiIDogQChsYXllci5ib3VuZHMuc2l6ZS53aWR0aCksCisgICAgICAgICAgICBAImhl
aWdodCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLmhlaWdodCksCisKKyAgICAgICAgfSwKKyAgICAg
ICAgQCJwb3NpdGlvbiIgOiBAeworICAgICAgICAgICAgQCJ4IiA6IEAobGF5ZXIucG9zaXRpb24u
eCksCisgICAgICAgICAgICBAInkiIDogQChsYXllci5wb3NpdGlvbi55KSwKKyAgICAgICAgfSwK
KyAgICAgICAgQCJ6UG9zaXRpb24iIDogQChsYXllci56UG9zaXRpb24pLAorICAgICAgICBAImFu
Y2hvclBvaW50IiA6IEB7CisgICAgICAgICAgICBAIngiIDogQChsYXllci5hbmNob3JQb2ludC54
KSwKKyAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLmFuY2hvclBvaW50LnkpLAorICAgICAgICB9
LAorICAgICAgICBAImFuY2hvclBvaW50WiIgOiBAKGxheWVyLmFuY2hvclBvaW50WiksCisgICAg
ICAgIEAidHJhbnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnRyYW5z
Zm9ybS5tMTEpLAorICAgICAgICAgICAgQCJtMTIiIDogQChsYXllci50cmFuc2Zvcm0ubTEyKSwK
KyAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xMyksCisgICAgICAgICAg
ICBAIm0xNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTQpLAorCisgICAgICAgICAgICBAIm0yMSIg
OiBAKGxheWVyLnRyYW5zZm9ybS5tMjEpLAorICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci50
cmFuc2Zvcm0ubTIyKSwKKyAgICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0y
MyksCisgICAgICAgICAgICBAIm0yNCIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMjQpLAorCisgICAg
ICAgICAgICBAIm0zMSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzEpLAorICAgICAgICAgICAgQCJt
MzIiIDogQChsYXllci50cmFuc2Zvcm0ubTMyKSwKKyAgICAgICAgICAgIEAibTMzIiA6IEAobGF5
ZXIudHJhbnNmb3JtLm0zMyksCisgICAgICAgICAgICBAIm0zNCIgOiBAKGxheWVyLnRyYW5zZm9y
bS5tMzQpLAorCisgICAgICAgICAgICBAIm00MSIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDEpLAor
ICAgICAgICAgICAgQCJtNDIiIDogQChsYXllci50cmFuc2Zvcm0ubTQyKSwKKyAgICAgICAgICAg
IEAibTQzIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBAIm00NCIgOiBA
KGxheWVyLnRyYW5zZm9ybS5tNDQpLAorICAgICAgICB9LAorICAgICAgICBAInN1YmxheWVyVHJh
bnNmb3JtIiA6IEB7CisgICAgICAgICAgICBAIm0xMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNm
b3JtLm0xMSksCisgICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3Jt
Lm0xMiksCisgICAgICAgICAgICBAIm0xMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0x
MyksCisgICAgICAgICAgICBAIm0xNCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0xNCks
CisKKyAgICAgICAgICAgIEAibTIxIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIxKSwK
KyAgICAgICAgICAgIEAibTIyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIyKSwKKyAg
ICAgICAgICAgIEAibTIzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTIzKSwKKyAgICAg
ICAgICAgIEAibTI0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTI0KSwKKworICAgICAg
ICAgICAgQCJtMzEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzEpLAorICAgICAgICAg
ICAgQCJtMzIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzIpLAorICAgICAgICAgICAg
QCJtMzMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzMpLAorICAgICAgICAgICAgQCJt
MzQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMzQpLAorCisgICAgICAgICAgICBAIm00
MSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MSksCisgICAgICAgICAgICBAIm00MiIg
OiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MiksCisgICAgICAgICAgICBAIm00MyIgOiBA
KGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm00MyksCisgICAgICAgICAgICBAIm00NCIgOiBAKGxh
eWVyLnN1YmxheWVyVHJhbnNmb3JtLm00NCksCisgICAgICAgIH0sCisKKyAgICAgICAgQCJoaWRk
ZW4iIDogQChsYXllci5oaWRkZW4pLAorICAgICAgICBAImRvdWJsZVNpZGVkIiA6IEAobGF5ZXIu
ZG91YmxlU2lkZWQpLAorICAgICAgICBAIm1hc2tzVG9Cb3VuZHMiIDogQChsYXllci5tYXNrc1Rv
Qm91bmRzKSwKKyAgICAgICAgQCJjb250ZW50c1NjYWxlIiA6IEAobGF5ZXIuY29udGVudHNTY2Fs
ZSksCisgICAgICAgIEAicmFzdGVyaXphdGlvblNjYWxlIiA6IEAobGF5ZXIucmFzdGVyaXphdGlv
blNjYWxlKSwKKyAgICAgICAgQCJvcGFxdWUiIDogQChsYXllci5vcGFxdWUpLAorICAgICAgICBA
Im9wYWNpdHkiIDogQChsYXllci5vcGFjaXR5KSwKKyAgICB9OworfQorCistICh2b2lkKV9kb0Fm
dGVyUmVzZXR0aW5nU2luZ2xlVGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KIHsK
LSAgICBbX2N1c3RvbUNvbnRlbnRWaWV3IHdlYl9zZXRPdmVybGFpZEFjY2Vzc29yeVZpZXdzSW5z
ZXQ6aW5zZXRdOworICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBH
ZXN0dXJlOmFjdGlvbl07CiB9CiAKLS0gKHZvaWQpX3NuYXBzaG90UmVjdDooQ0dSZWN0KXJlY3RJ
blZpZXdDb29yZGluYXRlcyBpbnRvSW1hZ2VPZldpZHRoOihDR0Zsb2F0KWltYWdlV2lkdGggY29t
cGxldGlvbkhhbmRsZXI6KHZvaWQoXikoQ0dJbWFnZVJlZikpY29tcGxldGlvbkhhbmRsZXIKKy0g
KHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0
Y2hfYmxvY2tfdClhY3Rpb24KIHsKLSAgICBpZiAoX2R5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGUg
IT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNpemluZykgewotICAg
ICAgICAvLyBEZWZlciBzbmFwc2hvdHRpbmcgdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVzaXpl
IGNvbXBsZXRlcy4KLSAgICAgICAgdm9pZCAoXmNvcGllZENvbXBsZXRpb25IYW5kbGVyKShDR0lt
YWdlUmVmKSA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKLSAgICAgICAgUmV0YWluUHRyPFdL
V2ViVmlldz4gcmV0YWluZWRTZWxmID0gc2VsZjsKLSAgICAgICAgX2NhbGxiYWNrc0RlZmVycmVk
RHVyaW5nUmVzaXplLmFwcGVuZChbcmV0YWluZWRTZWxmLCByZWN0SW5WaWV3Q29vcmRpbmF0ZXMs
IGltYWdlV2lkdGgsIGNvcGllZENvbXBsZXRpb25IYW5kbGVyXSB7Ci0gICAgICAgICAgICBbcmV0
YWluZWRTZWxmIF9zbmFwc2hvdFJlY3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIGludG9JbWFnZU9m
V2lkdGg6aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpjb3BpZWRDb21wbGV0aW9uSGFuZGxl
cl07Ci0gICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFzZV07Ci0gICAg
ICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFtfY29udGVudFZpZXcgX2RvQWZ0
ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzphY3Rpb25dOworfQogCi0gICAg
Q0dSZWN0IHNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzID0gW3NlbGYgY29udmVydFJl
Y3Q6cmVjdEluVmlld0Nvb3JkaW5hdGVzIHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVudFZpZXdd
OwotICAgIENHRmxvYXQgaW1hZ2VTY2FsZSA9IGltYWdlV2lkdGggLyBzbmFwc2hvdFJlY3RJbkNv
bnRlbnRDb29yZGluYXRlcy5zaXplLndpZHRoOwotICAgIENHRmxvYXQgaW1hZ2VIZWlnaHQgPSBp
bWFnZVNjYWxlICogc25hcHNob3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMuc2l6ZS5oZWlnaHQ7
Ci0gICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoaW1hZ2VXaWR0aCwgaW1hZ2VIZWln
aHQpOworI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLSAgICBpZiAoW1tfY3VzdG9t
Q29udGVudFZpZXcgY2xhc3NdIHdlYl9yZXF1aXJlc0N1c3RvbVNuYXBzaG90dGluZ10pIHsKLSAg
ICAgICAgW19jdXN0b21Db250ZW50VmlldyB3ZWJfc25hcHNob3RSZWN0SW5Db250ZW50Vmlld0Nv
b3JkaW5hdGVzOnNuYXBzaG90UmVjdEluQ29udGVudENvb3JkaW5hdGVzIHNuYXBzaG90V2lkdGg6
aW1hZ2VXaWR0aCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorLSAoV0tQYWdlUmVmKV9wYWdlUmVm
Rm9yVHJhbnNpdGlvblRvV0tXZWJWaWV3Cit7CisgICAgcmV0dXJuIHRvQVBJKF9wYWdlLmdldCgp
KTsKK30KIAotI2lmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikgJiYgSEFWRShJ
T1NVUkZBQ0UpCi0gICAgLy8gSWYgd2UgYXJlIHBhcmVudGVkIGFuZCBub3QgaGlkZGVuLCBhbmQg
dGh1cyB3b24ndCBpbmN1ciBhIHNpZ25pZmljYW50IHBlbmFsdHkgZnJvbSBwYWdpbmcgaW4gdGls
ZXMsIHNuYXBzaG90IHRoZSB2aWV3IGhpZXJhcmNoeSBkaXJlY3RseS4KLSAgICBOU1N0cmluZyAq
ZGlzcGxheU5hbWUgPSBzZWxmLndpbmRvdy5zY3JlZW4uZGlzcGxheUNvbmZpZ3VyYXRpb24ubmFt
ZTsKLSAgICBpZiAoZGlzcGxheU5hbWUgJiYgIXNlbGYud2luZG93LmhpZGRlbikgewotICAgICAg
ICBhdXRvIHN1cmZhY2UgPSBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZShXZWJDb3JlOjpleHBh
bmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKGltYWdlU2l6ZSkpLCBXZWJDb3JlOjpzUkdC
Q29sb3JTcGFjZVJlZigpKTsKLSAgICAgICAgaWYgKCFzdXJmYWNlKSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBDR0Zsb2F0IGltYWdlU2NhbGVJblZpZXdDb29yZGluYXRlcyA9IGltYWdlV2lk
dGggLyByZWN0SW5WaWV3Q29vcmRpbmF0ZXMuc2l6ZS53aWR0aDsKLSAgICAgICAgQ0FUcmFuc2Zv
cm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGltYWdlU2NhbGVJblZpZXdD
b29yZGluYXRlcywgaW1hZ2VTY2FsZUluVmlld0Nvb3JkaW5hdGVzLCAxKTsKLSAgICAgICAgdHJh
bnNmb3JtID0gQ0FUcmFuc2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIC1yZWN0SW5WaWV3Q29v
cmRpbmF0ZXMub3JpZ2luLngsIC1yZWN0SW5WaWV3Q29vcmRpbmF0ZXMub3JpZ2luLnksIDApOwot
ICAgICAgICBDQVJlbmRlclNlcnZlclJlbmRlckRpc3BsYXlMYXllcldpdGhUcmFuc2Zvcm1BbmRU
aW1lT2Zmc2V0KE1BQ0hfUE9SVF9OVUxMLCAoQ0ZTdHJpbmdSZWYpZGlzcGxheU5hbWUsIHNlbGYu
bGF5ZXIuY29udGV4dC5jb250ZXh0SWQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHNlbGYu
bGF5ZXIpLCBzdXJmYWNlLT5zdXJmYWNlKCksIDAsIDAsICZ0cmFuc2Zvcm0sIDApOwotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RG
TW92ZShzdXJmYWNlKSkuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCist
ICh2b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzCit7CisgICAgX2ltcGwt
PmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NGcm9tVmlld09ubHkoKTsKK30KIAot
ICAgIGlmIChfY3VzdG9tQ29udGVudFZpZXcpIHsKLSAgICAgICAgQVNTRVJUKCFbW19jdXN0b21D
b250ZW50VmlldyBjbGFzc10gd2ViX3JlcXVpcmVzQ3VzdG9tU25hcHNob3R0aW5nXSk7Ci0gICAg
ICAgIFVJR3JhcGhpY3NCZWdpbkltYWdlQ29udGV4dFdpdGhPcHRpb25zKGltYWdlU2l6ZSwgWUVT
LCAxKTsKKy0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpcmVjdCBhbmRTY3JvbGxCeTooTlNTaXpl
KW9mZnNldAoreworICAgIF9pbXBsLT5zZXRGcmFtZUFuZFNjcm9sbEJ5KE5TUmVjdFRvQ0dSZWN0
KHJlY3QpLCBOU1NpemVUb0NHU2l6ZShvZmZzZXQpKTsKK30KIAotICAgICAgICBVSVZpZXcgKmN1
c3RvbUNvbnRlbnRWaWV3ID0gX2N1c3RvbUNvbnRlbnRWaWV3LmdldCgpOwotICAgICAgICBbY3Vz
dG9tQ29udGVudFZpZXcuYmFja2dyb3VuZENvbG9yIHNldF07Ci0gICAgICAgIFVJUmVjdEZpbGwo
Q0dSZWN0TWFrZSgwLCAwLCBpbWFnZVdpZHRoLCBpbWFnZUhlaWdodCkpOworLSAodm9pZClfc2V0
VG90YWxIZWlnaHRPZkJhbm5lcnM6KENHRmxvYXQpdG90YWxIZWlnaHRPZkJhbm5lcnMKK3sKKyAg
ICBfaW1wbC0+c2V0VG90YWxIZWlnaHRPZkJhbm5lcnModG90YWxIZWlnaHRPZkJhbm5lcnMpOwor
fQogCi0gICAgICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gVUlHcmFwaGljc0dldEN1cnJlbnRD
b250ZXh0KCk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtc25hcHNo
b3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnggKiBpbWFnZVNjYWxlLCAtc25hcHNo
b3RSZWN0SW5Db250ZW50Q29vcmRpbmF0ZXMub3JpZ2luLnkgKiBpbWFnZVNjYWxlKTsKLSAgICAg
ICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgaW1hZ2VTY2FsZSwgaW1hZ2VTY2FsZSk7Ci0g
ICAgICAgIFtjdXN0b21Db250ZW50Vmlldy5sYXllciByZW5kZXJJbkNvbnRleHQ6Y29udGV4dF07
CistIChDR0Zsb2F0KV90b3RhbEhlaWdodE9mQmFubmVycworeworICAgIHJldHVybiBfaW1wbC0+
dG90YWxIZWlnaHRPZkJhbm5lcnMoKTsKK30KIAotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihb
VUlHcmFwaGljc0dldEltYWdlRnJvbUN1cnJlbnRJbWFnZUNvbnRleHQoKSBDR0ltYWdlXSk7Cist
ICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMKK3sKKyAgICBfaW1wbC0+
YmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Cit9CiAKLSAgICAgICAgVUlHcmFw
aGljc0VuZEltYWdlQ29udGV4dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorLSAodm9pZClf
ZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlcworeworICAgIF9pbXBsLT5lbmREZWZlcnJp
bmdWaWV3SW5XaW5kb3dDaGFuZ2VzKCk7Cit9CiAKLSAgICB2b2lkKF5jb3BpZWRDb21wbGV0aW9u
SGFuZGxlcikoQ0dJbWFnZVJlZikgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgX3Bh
Z2UtPnRha2VTbmFwc2hvdChXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHNuYXBzaG90UmVjdElu
Q29udGVudENvb3JkaW5hdGVzKSwgV2ViQ29yZTo6ZXhwYW5kZWRJbnRTaXplKFdlYkNvcmU6OkZs
b2F0U2l6ZShpbWFnZVNpemUpKSwgV2ViS2l0OjpTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2aWNl
U2NhbGVGYWN0b3IsIFs9XShjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBp
bWFnZUhhbmRsZSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAgIGlmIChp
bWFnZUhhbmRsZS5pc051bGwoKSkgewotICAgICAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7Ci0gICAgICAgICAgICBbY29waWVkQ29tcGxldGlvbkhhbmRsZXIgcmVsZWFz
ZV07Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKy0gKHZvaWQpX2VuZERlZmVycmlu
Z1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jCit7CisgICAgX2ltcGwtPmVuZERlZmVycmluZ1ZpZXdJ
bldpbmRvd0NoYW5nZXNTeW5jKCk7Cit9CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGltYWdlSGFuZGxlLCBXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFu
ZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2ltcGwtPmdlc3R1cmVFdmVu
dFdhc05vdEhhbmRsZWRCeVdlYkNvcmVGcm9tVmlld09ubHkoZXZlbnQpOworfQogCi0gICAgICAg
IGlmICghYml0bWFwKSB7Ci0gICAgICAgICAgICBjb3BpZWRDb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKLSAgICAgICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorLSAodm9pZClfc2V0SWdub3Jlc05vbldoZWVs
RXZlbnRzOihCT09MKWlnbm9yZXNOb25XaGVlbEV2ZW50cworeworICAgIF9pbXBsLT5zZXRJZ25v
cmVzTm9uV2hlZWxFdmVudHMoaWdub3Jlc05vbldoZWVsRXZlbnRzKTsKK30KIAotICAgICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZTsKLSAgICAgICAgY2dJbWFnZSA9IGJpdG1hcC0+
bWFrZUNHSW1hZ2UoKTsKLSAgICAgICAgY29waWVkQ29tcGxldGlvbkhhbmRsZXIoY2dJbWFnZS5n
ZXQoKSk7Ci0gICAgICAgIFtjb3BpZWRDb21wbGV0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICB9
KTsKKy0gKEJPT0wpX2lnbm9yZXNOb25XaGVlbEV2ZW50cworeworICAgIHJldHVybiBfaW1wbC0+
aWdub3Jlc05vbldoZWVsRXZlbnRzKCk7CiB9CiAKLS0gKHZvaWQpX292ZXJyaWRlTGF5b3V0UGFy
YW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTooQ0dTaXplKW1pbmltdW1MYXlvdXRTaXplIG1h
eGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOihDR1NpemUpbWF4aW11bVVub2JzY3VyZWRTaXpl
T3ZlcnJpZGUKKy0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkgKiljdXN0b21T
d2lwZVZpZXdzCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFZpc2libGVSZWN0cywgc3RyZWFtIDw8
ICItW1dLV2ViVmlldyAiIDw8IF9wYWdlLT5pZGVudGlmaWVyKCkgPDwgIiBfb3ZlcnJpZGVMYXlv
dXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOiIgPDwgV2ViQ29yZTo6RmxvYXRTaXpl
KG1pbmltdW1MYXlvdXRTaXplKSA8PCAiIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOiIg
PDwgV2ViQ29yZTo6RmxvYXRTaXplKG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlKSA8PCAi
XSIpOworICAgIF9pbXBsLT5zZXRDdXN0b21Td2lwZVZpZXdzKGN1c3RvbVN3aXBlVmlld3MpOwor
fQogCi0gICAgW3NlbGYgX3NldFZpZXdMYXlvdXRTaXplT3ZlcnJpZGU6bWluaW11bUxheW91dFNp
emVdOwotICAgIFtzZWxmIF9zZXRNYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTptYXhpbXVt
VW5vYnNjdXJlZFNpemVPdmVycmlkZV07CistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdzVG9w
Q29udGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQKK3sKKyAgICBfaW1wbC0+c2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldCh0b3BDb250ZW50SW5zZXQpOwogfQogCi0tICh2
b2lkKV9jbGVhck92ZXJyaWRlTGF5b3V0UGFyYW1ldGVycworLSAoQk9PTClfdHJ5VG9Td2lwZVdp
dGhFdmVudDooTlNFdmVudCAqKWV2ZW50IGlnbm9yaW5nUGlubmVkU3RhdGU6KEJPT0wpaWdub3Jp
bmdQaW5uZWRTdGF0ZQogewotICAgIF92aWV3TGF5b3V0U2l6ZU92ZXJyaWRlID0gV1RGOjpudWxs
b3B0OwotICAgIF9tYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZSA9IFdURjo6bnVsbG9wdDsK
KyAgICByZXR1cm4gX2ltcGwtPnRyeVRvU3dpcGVXaXRoRXZlbnQoZXZlbnQsIGlnbm9yaW5nUGlu
bmVkU3RhdGUpOwogfQogCi1zdGF0aWMgV1RGOjpPcHRpb25hbDxXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50cz4gdmlld3BvcnRBcmd1bWVudHNGcm9tRGljdGlvbmFyeShOU0RpY3Rpb25hcnk8TlNT
dHJpbmcgKiwgTlNTdHJpbmcgKj4gKnZpZXdwb3J0QXJndW1lbnRQYWlycywgYm9vbCB2aWV3cG9y
dEZpdEVuYWJsZWQpCistICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2
b2lkKF4pKENHUmVjdCkpY2FsbGJhY2sKIHsKLSAgICBpZiAoIXZpZXdwb3J0QXJndW1lbnRQYWly
cykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBfaW1wbC0+c2V0RGlkTW92ZVN3
aXBlU25hcHNob3RDYWxsYmFjayhjYWxsYmFjayk7Cit9CiAKLSAgICBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50cyhXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6
Vmlld3BvcnRNZXRhKTsKKy0gKE5TVmlldyAqKV9mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Cit7
CisgICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3KCk7Cit9CiAKLSAg
ICBbdmlld3BvcnRBcmd1bWVudFBhaXJzIGVudW1lcmF0ZUtleXNBbmRPYmplY3RzVXNpbmdCbG9j
azptYWtlQmxvY2tQdHIoWyZdIChOU1N0cmluZyAqa2V5LCBOU1N0cmluZyAqdmFsdWUsIEJPT0wq
IHN0b3ApIHsKLSAgICAgICAgaWYgKCFba2V5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNz
XV0gfHwgIVt2YWx1ZSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQotICAgICAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpA
Ii1bV0tXZWJWaWV3IF9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czpdOiBLZXlzIGFuZCB2
YWx1ZXMgbXVzdCBhbGwgYmUgTlNTdHJpbmdzLiJdOwotICAgICAgICBTdHJpbmcga2V5U3RyaW5n
ID0ga2V5OwotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSB2YWx1ZTsKLSAgICAgICAgV2Vi
Q29yZTo6c2V0Vmlld3BvcnRGZWF0dXJlKHZpZXdwb3J0QXJndW1lbnRzLCBrZXlTdHJpbmcsIHZh
bHVlU3RyaW5nLCB2aWV3cG9ydEZpdEVuYWJsZWQsIFtdIChXZWJDb3JlOjpWaWV3cG9ydEVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgIE5TTG9nKEAi
LVtXS1dlYlZpZXcgX292ZXJyaWRlVmlld3BvcnRXaXRoQXJndW1lbnRzOl06IEVycm9yIHBhcnNp
bmcgdmlld3BvcnQgYXJndW1lbnQ6ICVzIiwgZXJyb3JNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICB9KTsKLSAgICB9KS5nZXQoKV07CistIChOU1dpbmRvdyAqKV9mdWxsU2NyZWVuV2lu
ZG93Cit7CisgICAgcmV0dXJuIF9pbXBsLT5mdWxsU2NyZWVuV2luZG93KCk7Cit9CiAKLSAgICBy
ZXR1cm4gdmlld3BvcnRBcmd1bWVudHM7CistICh2b2lkKV9kaXNhYmxlRnJhbWVTaXplVXBkYXRl
cworeworICAgIF9pbXBsLT5kaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpOwogfQogCi0tICh2b2lk
KV9vdmVycmlkZVZpZXdwb3J0V2l0aEFyZ3VtZW50czooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IE5TU3RyaW5nICo+ICopYXJndW1lbnRzCistICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVz
CiB7Ci0gICAgaWYgKCFfcGFnZSkKLSAgICAgICAgcmV0dXJuOworICAgIF9pbXBsLT5lbmFibGVG
cmFtZVNpemVVcGRhdGVzKCk7Cit9CiAKLSAgICBfcGFnZS0+c2V0T3ZlcnJpZGVWaWV3cG9ydEFy
Z3VtZW50cyh2aWV3cG9ydEFyZ3VtZW50c0Zyb21EaWN0aW9uYXJ5KGFyZ3VtZW50cywgX3BhZ2Ut
PnByZWZlcmVuY2VzKCkudmlld3BvcnRGaXRFbmFibGVkKCkpKTsKKy0gKHZvaWQpX3ByZXBhcmVG
b3JJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24KK3sKIH0KIAotLSAoVUlWaWV3ICopX3ZpZXdGb3JG
aW5kVUkKKy0gKHZvaWQpX2NhbmNlbEltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbgogewotICAgIHJl
dHVybiBbc2VsZiB2aWV3Rm9yWm9vbWluZ0luU2Nyb2xsVmlldzpbc2VsZiBzY3JvbGxWaWV3XV07
CiB9CiAKLS0gKEJPT0wpX2lzRGlzcGxheWluZ1BERgorLSAodm9pZClfY29tcGxldGVJbW1lZGlh
dGVBY3Rpb25BbmltYXRpb24KIHsKLSAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogV2ViQ29yZTo6
TUlNRVR5cGVSZWdpc3RyeTo6cGRmTUlNRVR5cGVzKCkpIHsKLSAgICAgICAgQ2xhc3MgcHJvdmlk
ZXJDbGFzcyA9IFtbX2NvbmZpZ3VyYXRpb24gX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5XSBwcm92
aWRlckZvck1JTUVUeXBlOm1pbWVUeXBlXTsKLSAgICAgICAgaWYgKFtfY3VzdG9tQ29udGVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpwcm92aWRlckNsYXNzXSkKLSAgICAgICAgICAgIHJldHVybiBZRVM7
Ci0gICAgfQorfQogCi0gICAgcmV0dXJuIE5POworLSAoQk9PTClfY2FuQ2hhbmdlRnJhbWVMYXlv
dXQ6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUKK3sKKyAgICBpZiAoYXV0byogd2ViRnJh
bWVQcm94eSA9IF9wYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoV2ViQ29yZTo6ZnJhbWVJZGVudGlm
aWVyRnJvbUlEKGZyYW1lSGFuZGxlLl9mcmFtZUlEKSkpCisgICAgICAgIHJldHVybiBfaW1wbC0+
Y2FuQ2hhbmdlRnJhbWVMYXlvdXQoKndlYkZyYW1lUHJveHkpOworICAgIHJldHVybiBmYWxzZTsK
IH0KIAotLSAoTlNEYXRhICopX2RhdGFGb3JEaXNwbGF5ZWRQREYKKy0gKE5TQ29sb3IgKilfdW5k
ZXJsYXlDb2xvcgogewotICAgIGlmICghW3NlbGYgX2lzRGlzcGxheWluZ1BERl0pCi0gICAgICAg
IHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtfY3VzdG9tQ29udGVudFZpZXcgd2ViX2RhdGFSZXBy
ZXNlbnRhdGlvbl07CisgICAgcmV0dXJuIF9pbXBsLT51bmRlcmxheUNvbG9yKCk7CiB9CiAKLS0g
KE5TU3RyaW5nICopX3N1Z2dlc3RlZEZpbGVuYW1lRm9yRGlzcGxheWVkUERGCistICh2b2lkKV9z
ZXRVbmRlcmxheUNvbG9yOihOU0NvbG9yICopdW5kZXJsYXlDb2xvcgogewotICAgIGlmICghW3Nl
bGYgX2lzRGlzcGxheWluZ1BERl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtf
Y3VzdG9tQ29udGVudFZpZXcgd2ViX3N1Z2dlc3RlZEZpbGVuYW1lXTsKKyAgICBfaW1wbC0+c2V0
VW5kZXJsYXlDb2xvcih1bmRlcmxheUNvbG9yKTsKIH0KIAotLSAoX1dLV2ViVmlld1ByaW50Rm9y
bWF0dGVyICopX3dlYlZpZXdQcmludEZvcm1hdHRlcgorLSAoQk9PTClfaGFzQWN0aXZlVmlkZW9G
b3JDb250cm9sc01hbmFnZXIKIHsKLSAgICBVSVZpZXdQcmludEZvcm1hdHRlciAqdmlld1ByaW50
Rm9ybWF0dGVyID0gc2VsZi52aWV3UHJpbnRGb3JtYXR0ZXI7Ci0gICAgQVNTRVJUKFt2aWV3UHJp
bnRGb3JtYXR0ZXIgaXNLaW5kT2ZDbGFzczpbX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyIGNsYXNz
XV0pOwotICAgIHJldHVybiAoX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyICopdmlld1ByaW50Rm9y
bWF0dGVyOworICAgIHJldHVybiBfcGFnZSAmJiBfcGFnZS0+aGFzQWN0aXZlVmlkZW9Gb3JDb250
cm9sc01hbmFnZXIoKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24gdG9Vc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKFVJU2VtYW50aWNDb250ZW50
QXR0cmlidXRlIGNvbnRlbnRBdHRyaWJ1dGUpCistICh2b2lkKV9yZXF1ZXN0Q29udHJvbGxlZEVs
ZW1lbnRJRAogewotICAgIGF1dG8gZGlyZWN0aW9uID0gW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uRm9yU2VtYW50aWNDb250ZW50QXR0cmlidXRlOmNvbnRlbnRBdHRyaWJ1dGVd
OwotICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Ci0gICAgY2FzZSBVSVVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb25MZWZ0VG9SaWdodDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb246OkxUUjsKLSAgICBjYXNlIFVJVXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvblJpZ2h0VG9MZWZ0OgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbjo6UlRMOwotICAgIH0KKyAgICBpZiAoX3BhZ2UpCisgICAgICAg
IF9wYWdlLT5yZXF1ZXN0Q29udHJvbGxlZEVsZW1lbnRJRCgpOworfQogCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246OkxUUjsKKy0gKHZvaWQpX2hhbmRsZUNvbnRyb2xsZWRFbGVtZW50SURSZXNwb25zZToo
TlNTdHJpbmcgKilpZGVudGlmaWVyCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2Vz
LgogfQogCi0tICh2b2lkKXNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTooVUlTZW1hbnRpY0Nv
bnRlbnRBdHRyaWJ1dGUpY29udGVudEF0dHJpYnV0ZQorLSAodm9pZClfaGFuZGxlQWNjZXB0ZWRD
YW5kaWRhdGU6KE5TVGV4dENoZWNraW5nUmVzdWx0ICopY2FuZGlkYXRlCiB7Ci0gICAgW3N1cGVy
IHNldFNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpjb250ZW50QXR0cmlidXRlXTsKKyAgICBfaW1w
bC0+aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoY2FuZGlkYXRlKTsKK30KIAotICAgIF9wYWdlLT5z
ZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHRvVXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbihjb250ZW50QXR0cmlidXRlKSk7CistICh2b2lkKV9kaWRIYW5kbGVBY2NlcHRlZENhbmRp
ZGF0ZQoreworICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KIH0KIAotI2Vsc2UgLy8g
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0
VmlzaWJpbGl0eTooQk9PTCl2aXNpYmxlCit7CisgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJjbGFz
c2VzLgorfQogCi0jcHJhZ21hIG1hcmsgLSBPUyBYLXNwZWNpZmljIG1ldGhvZHMKKy0gKHZvaWQp
X2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMKK3sKKyAgICBfaW1wbC0+Zm9yY2VSZXF1ZXN0Q2FuZGlk
YXRlc0ZvclRlc3RpbmcoKTsKK30KIAotLSAoQk9PTClfZHJhd3NCYWNrZ3JvdW5kCistIChCT09M
KV9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcwogewotICAgIHJldHVybiBfaW1wbC0+ZHJhd3NCYWNr
Z3JvdW5kKCk7CisgICAgcmV0dXJuIF9pbXBsLT5zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcygpOwog
fQogCi0tICh2b2lkKV9zZXREcmF3c0JhY2tncm91bmQ6KEJPT0wpZHJhd3NCYWNrZ3JvdW5kCist
ICh2b2lkKV9pbnNlcnRUZXh0OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSly
ZXBsYWNlbWVudFJhbmdlCiB7Ci0gICAgX2ltcGwtPnNldERyYXdzQmFja2dyb3VuZChkcmF3c0Jh
Y2tncm91bmQpOworICAgIFtzZWxmIGluc2VydFRleHQ6c3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6
cmVwbGFjZW1lbnRSYW5nZV07CiB9CiAKLS0gKE5TQ29sb3IgKilfYmFja2dyb3VuZENvbG9yCist
IChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QKIHsKLSAgICByZXR1cm4gX2ltcGwtPmJhY2tncm91bmRD
b2xvcigpOworICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgp
LmZvY3VzZWRFbGVtZW50UmVjdDsKIH0KIAotLSAodm9pZClfc2V0QmFja2dyb3VuZENvbG9yOihO
U0NvbG9yICopYmFja2dyb3VuZENvbG9yCistIChCT09MKV91c2VTeXN0ZW1BcHBlYXJhbmNlCiB7
Ci0gICAgX2ltcGwtPnNldEJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworICAgIHJl
dHVybiBfaW1wbC0+dXNlU3lzdGVtQXBwZWFyYW5jZSgpOwogfQogCi0tICh2b2lkKV9zZXREcmF3
c1RyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClkcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZAor
LSAodm9pZClfc2V0VXNlU3lzdGVtQXBwZWFyYW5jZTooQk9PTCl1c2VTeXN0ZW1BcHBlYXJhbmNl
CiB7Ci0gICAgc3RhdGljIEJPT0wgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nOwotICAgIGlm
ICghaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nKSB7Ci0gICAgICAgIC8vIFNlZSBidWcgMTU1
NTUwIGZvciBkZXRhaWxzLgotICAgICAgICBOU0xvZyhAIi1bV0tXZWJWaWV3IF9zZXREcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZDpdIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNl
ZC4iKTsKLSAgICAgICAgaGFzTG9nZ2VkRGVwcmVjYXRpb25XYXJuaW5nID0gWUVTOwotICAgIH0K
LSAgICBbc2VsZiBfc2V0RHJhd3NCYWNrZ3JvdW5kOiFkcmF3c1RyYW5zcGFyZW50QmFja2dyb3Vu
ZF07CisgICAgX2ltcGwtPnNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5j
ZSk7CiB9CiAKLS0gKE5TVmlldyAqKV9pbnNwZWN0b3JBdHRhY2htZW50VmlldworLSAodm9pZCl2
aWV3RGlkQ2hhbmdlRWZmZWN0aXZlQXBwZWFyYW5jZQogewotICAgIHJldHVybiBfaW1wbC0+aW5z
cGVjdG9yQXR0YWNobWVudFZpZXcoKTsKKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVyaW5n
IFtzdXBlciBpbml0V2l0aENvZGVyOl0gYW5kIFtzdXBlciBpbml0V2l0aEZyYW1lOl0uCisgICAg
Ly8gVGhhdCBpcyBiZWZvcmUgX2ltcGwgaXMgcmVhZHkgdG8gYmUgdXNlZCwgc28gY2hlY2suIDxy
ZGFyOi8vcHJvYmxlbS8zOTYxMTIzNj4KKyAgICBpZiAoIV9pbXBsKQorICAgICAgICByZXR1cm47
CisKKyAgICBfaW1wbC0+ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOwogfQogCi0tICh2
b2lkKV9zZXRJbnNwZWN0b3JBdHRhY2htZW50VmlldzooTlNWaWV3ICopbmV3VmlldworLSAodm9p
ZClfc2V0SGVhZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0CiB7Ci0gICAgX2ltcGwtPnNldElu
c3BlY3RvckF0dGFjaG1lbnRWaWV3KG5ld1ZpZXcpOworICAgIF9wYWdlLT5zZXRIZWFkZXJCYW5u
ZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCk7CiB9CiAKLS0gKHZvaWQpX3NldE92ZXJsYXlTY3Jv
bGxiYXJTdHlsZTooX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKXNjcm9sbGJhclN0eWxlCistICh2
b2lkKV9zZXRGb290ZXJCYW5uZXJIZWlnaHQ6KGludCloZWlnaHQKIHsKLSAgICBfaW1wbC0+c2V0
T3ZlcmxheVNjcm9sbGJhclN0eWxlKHRvQ29yZVNjcm9sbGJhclN0eWxlKHNjcm9sbGJhclN0eWxl
KSk7CisgICAgX3BhZ2UtPnNldEZvb3RlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KTsK
IH0KIAotLSAoX1dLT3ZlcmxheVNjcm9sbGJhclN0eWxlKV9vdmVybGF5U2Nyb2xsYmFyU3R5bGUK
Ky0gKHZvaWQpX2RvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNwYXRj
aF9ibG9ja190KWFjdGlvbgogewotICAgIHJldHVybiB0b0FQSVNjcm9sbGJhclN0eWxlKF9pbXBs
LT5vdmVybGF5U2Nyb2xsYmFyU3R5bGUoKSk7CisgICAgX2ltcGwtPmRvQWZ0ZXJQcm9jZXNzaW5n
QWxsUGVuZGluZ01vdXNlRXZlbnRzKGFjdGlvbik7CiB9CiAKLS0gKEJPT0wpX3dpbmRvd09jY2x1
c2lvbkRldGVjdGlvbkVuYWJsZWQKKy0gKE5TTWVudSAqKV9hY3RpdmVNZW51CiB7Ci0gICAgcmV0
dXJuIF9pbXBsLT53aW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkKCk7CisgICAgLy8gRklY
TUU6IE9ubHkgdGhlIERPTSBwYXN0ZSBhY2Nlc3MgbWVudSBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4g
SW4gdGhlIGZ1dHVyZSwgaXQgY291bGQgYmUKKyAgICAvLyBleHRlbmRlZCB0byByZWNvZ25pemUg
dGhlIHJlZ3VsYXIgY29udGV4dCBtZW51IGFzIHdlbGwuCisgICAgcmV0dXJuIF9pbXBsLT5kb21Q
YXN0ZU1lbnUoKTsKIH0KIAotLSAodm9pZClfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5h
YmxlZDooQk9PTCllbmFibGVkCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorCistICh2b2lkKV9y
ZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvOih2b2lkKF4pKEJPT0wsIEJPT0wsIE5T
U3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5TSW50ZWdlcikpY2FsbGJhY2sKIHsKLSAgICBfaW1w
bC0+c2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICBpZiAo
IV9wYWdlKSB7CisgICAgICAgIGNhbGxiYWNrKE5PLCBOTywgQCIiLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihjYWxsYmFjayk7CisgICAgYXV0byBsb2NhbENhbGxiYWNrID0gV2Vi
S2l0OjpOb3dQbGF5aW5nSW5mb0NhbGxiYWNrOjpjcmVhdGUoW2hhbmRsZXJdKGJvb2wgYWN0aXZl
LCBib29sIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgU3RyaW5nIHRpdGxlLCBk
b3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRlbnRp
ZmllciwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgIGhhbmRsZXIoYWN0
aXZlLCByZWdpc3RlcmVkQXNOb3dQbGF5aW5nQXBwbGljYXRpb24sIHRpdGxlLCBkdXJhdGlvbiwg
ZWxhcHNlZFRpbWUsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIH0pOworCisgICAgX3BhZ2UtPnJl
cXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oV1RGTW92ZShsb2NhbENhbGxiYWNrKSk7
CiB9CiAKLS0gKHZvaWQpc2hhcmVTaGVldERpZERpc21pc3M6KFdLU2hhcmVTaGVldCAqKXNoYXJl
U2hlZXQKKy0gKHZvaWQpX3NldFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihD
R1BvaW50KW9yaWdpbgogewotICAgIF9pbXBsLT5zaGFyZVNoZWV0RGlkRGlzbWlzcyhzaGFyZVNo
ZWV0KTsKKyAgICBfcGFnZS0+c2NhbGVQYWdlKHNjYWxlLCBXZWJDb3JlOjpyb3VuZGVkSW50UG9p
bnQob3JpZ2luKSk7CiB9CiAKLS0gKHZvaWQpX3NldE92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3I6
KENHRmxvYXQpZGV2aWNlU2NhbGVGYWN0b3IKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZQogewotICAg
IF9pbXBsLT5zZXRPdmVycmlkZURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsK
KyAgICByZXR1cm4gX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwogfQogCi0tIChDR0Zsb2F0KV9v
dmVycmlkZURldmljZVNjYWxlRmFjdG9yCistICh2b2lkKV9pbnRlcm5hbERvQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayB3aXRob3V0V2FpdGlu
Z0ZvclBhaW50aW5nOihCT09MKXdpdGhvdXRXYWl0aW5nRm9yUGFpbnRpbmcgd2l0aG91dFdhaXRp
bmdGb3JBbmltYXRlZFJlc2l6ZTooQk9PTCl3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXpl
CiB7Ci0gICAgcmV0dXJuIF9pbXBsLT5vdmVycmlkZURldmljZVNjYWxlRmFjdG9yKCk7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoIVtzZWxmIHVzZXNTdGFuZGFyZENvbnRlbnRW
aWV3XSkgeworICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
LCB1cGRhdGVCbG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIGlm
ICh3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nKQorICAgICAgICBfcGFnZS0+c2V0U2hvdWxkU2tp
cFdhaXRpbmdGb3JQYWludEFmdGVyTmV4dFZpZXdEaWRNb3ZlVG9XaW5kb3codHJ1ZSk7CisKKyAg
ICBhdXRvIHVwZGF0ZUJsb2NrQ29weSA9IG1ha2VCbG9ja1B0cih1cGRhdGVCbG9jayk7CisKKyAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzdHJvbmdTZWxmID0gc2VsZjsKKyAgICBfcGFnZS0+Y2Fs
bEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbdXBkYXRlQmxvY2tDb3B5LCB3aXRob3V0V2Fp
dGluZ0ZvckFuaW1hdGVkUmVzaXplLCBzdHJvbmdTZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3IgZXJyb3IpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVCbG9ja0NvcHkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoIXdpdGhv
dXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemUgJiYgc3Ryb25nU2VsZi0+X2R5bmFtaWNWaWV3cG9y
dFVwZGF0ZU1vZGUgIT0gV2ViS2l0OjpEeW5hbWljVmlld3BvcnRVcGRhdGVNb2RlOjpOb3RSZXNp
emluZykgeworICAgICAgICAgICAgc3Ryb25nU2VsZi0+X2NhbGxiYWNrc0RlZmVycmVkRHVyaW5n
UmVzaXplLmFwcGVuZChbdXBkYXRlQmxvY2tDb3B5XSB7CisgICAgICAgICAgICAgICAgdXBkYXRl
QmxvY2tDb3B5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0od2l0aG91dFdh
aXRpbmdGb3JBbmltYXRlZFJlc2l6ZSk7CisjZW5kaWYKKworICAgICAgICB1cGRhdGVCbG9ja0Nv
cHkoKTsKKyAgICB9KTsKIH0KIAotLSAodm9pZClfc2V0VG9wQ29udGVudEluc2V0OihDR0Zsb2F0
KWNvbnRlbnRJbnNldAorLSAoQk9PTClfc2Nyb2xsaW5nVXBkYXRlc0Rpc2FibGVkRm9yVGVzdGlu
ZwogewotICAgIHJldHVybiBfaW1wbC0+c2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCk7
CisgICAgLy8gRm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGU7CisgICAgcmV0dXJuIE5POwogfQog
Ci0tIChDR0Zsb2F0KV90b3BDb250ZW50SW5zZXQKKy0gKHZvaWQpX3NldFNjcm9sbGluZ1VwZGF0
ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KEJPT0wpZGlzYWJsZWQKIHsKLSAgICByZXR1cm4gX2ltcGwt
PnRvcENvbnRlbnRJbnNldCgpOwogfQogCi0tIChOU0NvbG9yICopX3BhZ2VFeHRlbmRlZEJhY2tn
cm91bmRDb2xvcgorLy8gRXhlY3V0ZSB0aGUgc3VwcGxpZWQgYmxvY2sgYWZ0ZXIgdGhlIG5leHQg
dHJhbnNhY3Rpb24gZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIHJldHVy
biBfaW1wbC0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7CisgICAgW3NlbGYgX2ludGVy
bmFsRG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGU6dXBkYXRlQmxvY2sgd2l0aG91dFdhaXRp
bmdGb3JQYWludGluZzpOTyB3aXRob3V0V2FpdGluZ0ZvckFuaW1hdGVkUmVzaXplOk5PXTsKIH0K
IAotLSAoX1dLUmVjdEVkZ2UpX3Bpbm5lZFN0YXRlCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0aW5nOih2
b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawogewotICAgIHJldHVybiBfaW1wbC0+cGlubmVkU3Rh
dGUoKTsKKyAgICBbc2VsZiBfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTp1
cGRhdGVCbG9jayB3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOk5PIHdpdGhvdXRXYWl0aW5nRm9y
QW5pbWF0ZWRSZXNpemU6WUVTXTsKIH0KIAotLSAoX1dLUmVjdEVkZ2UpX3J1YmJlckJhbmRpbmdF
bmFibGVkCistICh2b2lkKV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0
aW5nRm9yUGFpbnRpbmc6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrCiB7Ci0gICAgcmV0dXJu
IF9pbXBsLT5ydWJiZXJCYW5kaW5nRW5hYmxlZCgpOworICAgIFtzZWxmIF9pbnRlcm5hbERvQWZ0
ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9yUGFp
bnRpbmc6WUVTIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemU6Tk9dOwogfQogCi0tICh2
b2lkKV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDooX1dLUmVjdEVkZ2Upc3RhdGUKKy0gKHZvaWQp
X2RvQWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRh
dGVCbG9jawogewotICAgIF9pbXBsLT5zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZChzdGF0ZSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2Fs
bGJhY2tzLmFwcGVuZChtYWtlQmxvY2tQdHIodXBkYXRlQmxvY2spKTsKKyAgICBbc2VsZiBfc2No
ZWR1bGVWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVdOworI2Vsc2UKKyAgICBkaXNwYXRjaF9hc3lu
YyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCB1cGRhdGVCbG9jayk7CisjZW5kaWYKIH0KIAot
LSAoaWQpX2ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0
OihfV0tIaXRUZXN0UmVzdWx0ICopaGl0VGVzdFJlc3VsdCB3aXRoVHlwZTooX1dLSW1tZWRpYXRl
QWN0aW9uVHlwZSl0eXBlIHVzZXJEYXRhOihpZDxOU1NlY3VyZUNvZGluZz4pdXNlckRhdGEKKy0g
KHZvaWQpX2Rpc2FibGVCYWNrRm9yd2FyZFNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcKIHsK
LSAgICByZXR1cm4gbmlsOworICAgIFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRv
bigpLnNldERpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKHRydWUpOwogfQogCi0t
ICh2b2lkKV9zZXRBdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNldHM6KEJPT0wpYXV0b21h
dGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzCistICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6
KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0
aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9uCiB7Ci0gICAgX2ltcGwtPnNldEF1dG9tYXRp
Y2FsbHlBZGp1c3RzQ29udGVudEluc2V0cyhhdXRvbWF0aWNhbGx5QWRqdXN0c0NvbnRlbnRJbnNl
dHMpOworICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtj
YXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0
OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgICAgIGlmIChjYXB0dXJlZENvbXBs
ZXRpb25CbG9jaykKKyAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKGVycm9yID09
IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7CisgICAgfSk7CiB9CiAKLS0gKEJP
T0wpX2F1dG9tYXRpY2FsbHlBZGp1c3RzQ29udGVudEluc2V0cworLSAoaWQgPF9XS1RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZT4pX3RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZQogewotICAgIHJldHVy
biBfaW1wbC0+YXV0b21hdGljYWxseUFkanVzdHNDb250ZW50SW5zZXRzKCk7CisgICAgcmV0dXJu
IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7CiB9CiAKLS0gKENH
RmxvYXQpX21pbmltdW1MYXlvdXRXaWR0aAorLSAodm9pZClfc2V0VGV4dE1hbmlwdWxhdGlvbkRl
bGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilkZWxlZ2F0ZQogewotICAg
IHJldHVybiBfcGFnZS0+bWluaW11bVNpemVGb3JBdXRvTGF5b3V0KCkud2lkdGgoKTsKKyAgICBf
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7CiB9CiAKLS0gKHZvaWQpX3NldE1p
bmltdW1MYXlvdXRXaWR0aDooQ0dGbG9hdCl3aWR0aAorLSAodm9pZClfc3RhcnRUZXh0TWFuaXB1
bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJhdGlv
biAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5kbGVy
CiB7Ci0gICAgQk9PTCBleHBhbmRzVG9GaXQgPSB3aWR0aCA+IDA7CisgICAgdXNpbmcgRXhjbHVz
aW9uUnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNpb25S
dWxlOwogCi0gICAgX3BhZ2UtPnNldE1pbmltdW1TaXplRm9yQXV0b0xheW91dChXZWJDb3JlOjpJ
bnRTaXplKHdpZHRoLCAwKSk7Ci0gICAgX3BhZ2UtPnNldE1haW5GcmFtZUlzU2Nyb2xsYWJsZSgh
ZXhwYW5kc1RvRml0KTsKKyAgICBpZiAoIV90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgfHwgIV9w
YWdlKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBfaW1wbC0+c2V0Q2xpcHNUb1Zpc2libGVSZWN0KGV4cGFuZHNUb0ZpdCk7Ci19
CisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpFeGNsdXNp
b25SdWxlPiBleGNsdXNpb25SdWxlczsKKyAgICBpZiAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25FeGNsdXNpb25SdWxlICp3a1J1bGUgaW4gY29uZmln
dXJhdGlvbi5leGNsdXNpb25SdWxlcykgeworICAgICAgICAgICAgYXV0byB0eXBlID0gd2tSdWxl
LmlzRXhjbHVzaW9uID8gRXhjbHVzaW9uUnVsZTo6VHlwZTo6RXhjbHVkZSA6IEV4Y2x1c2lvblJ1
bGU6OlR5cGU6OkluY2x1ZGU7CisgICAgICAgICAgICBpZiAod2tSdWxlLmF0dHJpYnV0ZU5hbWUp
CisgICAgICAgICAgICAgICAgZXhjbHVzaW9uUnVsZXMuYXBwZW5kKHt0eXBlLCBFeGNsdXNpb25S
dWxlOjpBdHRyaWJ1dGVSdWxlIHsgd2tSdWxlLmF0dHJpYnV0ZU5hbWUsIHdrUnVsZS5hdHRyaWJ1
dGVWYWx1ZSB9IH0pOworICAgICAgICAgICAgZWxzZSBpZiAod2tSdWxlLmNsYXNzTmFtZSkKKyAg
ICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6
OkNsYXNzUnVsZSB7IHdrUnVsZS5jbGFzc05hbWUgfSB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBleGNsdXNpb25SdWxlcy5hcHBlbmQoe3R5cGUsIEV4Y2x1c2lvblJ1bGU6
OkVsZW1lbnRSdWxlIHsgd2tSdWxlLmVsZW1lbnROYW1lIH0gfSk7CisgICAgICAgIH0KKyAgICB9
CiAKLS0gKEJPT0wpX3Nob3VsZEV4cGFuZENvbnRlbnRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5b3V0
Ci17Ci0gICAgcmV0dXJuIF9pbXBsLT5zaG91bGRFeHBhbmRUb1ZpZXdIZWlnaHRGb3JBdXRvTGF5
b3V0KCk7CisgICAgX3BhZ2UtPnN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoZXhjbHVzaW9uUnVsZXMs
IFt3ZWFrU2VsZiA9IFdlYWtPYmpDUHRyPFdLV2ViVmlldz4oc2VsZildIChXZWJDb3JlOjpUZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELAorICAgICAgICBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxh
dGlvblRva2VuPiYgdG9rZW5zKSB7CisgICAgICAgIGlmICghd2Vha1NlbGYpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYXV0byByZXRhaW5lZFNlbGYgPSB3ZWFrU2VsZi5nZXQoKTsK
KyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IFtyZXRhaW5lZFNlbGYgX3RleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZV07CisgICAgICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKndrVG9rZW5zID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OnRva2Vucy5zaXplKCldOworICAgICAgICBmb3IgKGF1dG8mIHRva2VuIDog
dG9rZW5zKSB7CisgICAgICAgICAgICBhdXRvIHdrVG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7CisgICAgICAgICAgICBbd2tUb2tlbiBzZXRJ
ZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZpZXIudG9VSW50NjQoKSldOwor
ICAgICAgICAgICAgW3drVG9rZW4gc2V0Q29udGVudDp0b2tlbi5jb250ZW50XTsKKyAgICAgICAg
ICAgIFt3a1Rva2VuIHNldEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOworICAgICAgICAgICAg
W3drVG9rZW5zIGFkZE9iamVjdDp3a1Rva2VuLmdldCgpXTsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSBhbGxvY10gaW5p
dFdpdGhJZGVudGlmaWVyOlN0cmluZzo6bnVtYmVyKGl0ZW1JRC50b1VJbnQ2NCgpKSB0b2tlbnM6
d2tUb2tlbnNdKTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3OnJldGFpbmVkU2VsZi5nZXQo
KSBkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW06aXRlbS5nZXQoKV07CisgICAgfSwgW2NhcHR1
cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
eworICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jaygpOworICAgIH0pOwogfQogCi0tICh2
b2lkKV9zZXRTaG91bGRFeHBhbmRDb250ZW50VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dDooQk9P
TClzaG91bGRFeHBhbmQKKy0gKHZvaWQpX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4
dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBsZXRpb246KHZvaWQoXikoQk9PTCBzdWNjZXNz
KSljb21wbGV0aW9uSGFuZGxlcgogewotICAgIHJldHVybiBfaW1wbC0+c2V0U2hvdWxkRXhwYW5k
VG9WaWV3SGVpZ2h0Rm9yQXV0b0xheW91dChzaG91bGRFeHBhbmQpOworICAgIHVzaW5nIE1hbmlw
dWxhdGlvblJlc3VsdCA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5p
cHVsYXRpb25SZXN1bHQ7CisKKyAgICBpZiAoIV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGl0ZW1JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyOjpJdGVtSWRlbnRpZmllclR5cGU+KFN0cmluZyhpdGVtLmlkZW50aWZp
ZXIpLnRvVUludDY0KCkpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gdG9rZW5zOworICAgIGZvciAoX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuICp3a1Rva2VuIGluIGl0ZW0udG9rZW5zKSB7CisgICAgICAgIGF1dG8g
dG9rZW5JRCA9IG1ha2VPYmplY3RJZGVudGlmaWVyPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpUb2tlbklkZW50aWZpZXJUeXBlPihTdHJpbmcod2tUb2tlbi5pZGVudGlmaWVy
KS50b1VJbnQ2NCgpKTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyB0b2tlbklELCB3a1Rva2VuLmNv
bnRlbnQgfSk7CisgICAgfQorCisgICAgX3BhZ2UtPmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihp
dGVtSUQsIHRva2VucywgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0gKE1hbmlwdWxhdGlvblJlc3VsdCByZXN1bHQpIHsKKyAgICAgICAg
Y2FwdHVyZWRDb21wbGV0aW9uQmxvY2socmVzdWx0ID09IE1hbmlwdWxhdGlvblJlc3VsdDo6U3Vj
Y2Vzcyk7CisgICAgfSk7CiB9CiAKLS0gKEJPT0wpX2Fsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9s
bGVyCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworLSAoQ0dSZWN0KV9kcmFnQ2FyZXRSZWN0
CiB7Ci0gICAgcmV0dXJuIF9wYWdlLT5hbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcigpOwor
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgcmV0dXJuIF9wYWdlLT5jdXJyZW50RHJhZ0Nh
cmV0UmVjdCgpOworI2Vsc2UKKyAgICByZXR1cm4gQ0dSZWN0WmVybzsKKyNlbmRpZgogfQogCi0t
ICh2b2lkKV9zZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcjooQk9PTClhbHdheXNTaG93
c0hvcml6b250YWxTY3JvbGxlcgorLSAodm9pZClfc2ltdWxhdGVMb25nUHJlc3NBY3Rpb25BdExv
Y2F0aW9uOihDR1BvaW50KWxvY2F0aW9uCiB7Ci0gICAgX3BhZ2UtPnNldEFsd2F5c1Nob3dzSG9y
aXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKTsKKyAgICBbX2Nv
bnRlbnRWaWV3IF9zaW11bGF0ZUxvbmdQcmVzc0FjdGlvbkF0TG9jYXRpb246bG9jYXRpb25dOwog
fQogCi0tIChCT09MKV9hbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIKKy0gKHZvaWQpX3NpbXVs
YXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBfcGFnZS0+YWx3
YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKCk7CisgICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVU
ZXh0RW50ZXJlZDp0ZXh0XTsKIH0KIAotLSAodm9pZClfc2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNj
cm9sbGVyOihCT09MKWFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcgorLSAodm9pZClfZHluYW1p
Y1VzZXJJbnRlcmZhY2VUcmFpdERpZENoYW5nZQogewotICAgIF9wYWdlLT5zZXRBbHdheXNTaG93
c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKTsKKyAgICBpZiAo
IV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAgX3BhZ2UtPmVmZmVjdGl2ZUFwcGVhcmFuY2VE
aWRDaGFuZ2UoKTsKKyAgICBbc2VsZiBfdXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOwogfQog
Ci0tIChOU1ByaW50T3BlcmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQ
cmludEluZm8gKilwcmludEluZm8KKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQorCist
IChCT09MKV9iZWdpbkJhY2tTd2lwZUZvclRlc3RpbmcKIHsKLSAgICByZXR1cm4gW3NlbGYgcHJp
bnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOnByaW50SW5mb107CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHJldHVybiBfaW1wbC0+YmVnaW5CYWNrU3dpcGVGb3JUZXN0aW5nKCk7CisjZWxzZQorICAg
IGlmICghX2dlc3R1cmVDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gTk87CisgICAgcmV0dXJu
IF9nZXN0dXJlQ29udHJvbGxlci0+YmVnaW5TaW11bGF0ZWRTd2lwZUluRGlyZWN0aW9uRm9yVGVz
dGluZyhXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6U3dpcGVEaXJlY3Rpb246OkJhY2sp
OworI2VuZGlmCiB9CiAKLS0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRo
UHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFtZTooX1dLRnJhbWVIYW5k
bGUgKilmcmFtZUhhbmRsZQorLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5nCiB7
Ci0gICAgaWYgKGF1dG8qIHdlYkZyYW1lUHJveHkgPSBfcGFnZS0+cHJvY2VzcygpLndlYkZyYW1l
KFdlYkNvcmU6OmZyYW1lSWRlbnRpZmllckZyb21JRChmcmFtZUhhbmRsZS5fZnJhbWVJRCkpKQot
ICAgICAgICByZXR1cm4gX2ltcGwtPnByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbyhwcmludElu
Zm8sICp3ZWJGcmFtZVByb3h5KTsKLSAgICByZXR1cm4gbmlsOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICByZXR1cm4gX2ltcGwtPmNvbXBsZXRlQmFja1N3aXBlRm9yVGVzdGluZygpOworI2Vsc2UK
KyAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIE5POworICAgIHJl
dHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmNvbXBsZXRlU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlv
bkZvclRlc3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9u
OjpCYWNrKTsKKyNlbmRpZgogfQogCi0tICh2b2lkKXNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb246KE5TVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbil1c2VySW50ZXJmYWNlTGF5b3V0
RGlyZWN0aW9uCistICh2b2lkKV9zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZl
cnNMb2FkaW5nCiB7Ci0gICAgW3N1cGVyIHNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246
dXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbl07Ci0KLSAgICBfaW1wbC0+c2V0VXNlckludGVy
ZmFjZUxheW91dERpcmVjdGlvbih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKTsKKyAgICBf
cGFnZS0+c2V0RGVmZXJzTG9hZGluZ0ZvclRlc3RpbmcoZGVmZXJzTG9hZGluZyk7CiB9CiAKLS0g
KEJPT0wpX3dhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOihCT09MKXJl
c29sdmVkCiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIpCi0gICAgcmV0dXJuIF9pbXBsLT5jbGllbnRX
YW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXcoKTsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwot
I2VuZGlmCisgICAgX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZv
clRlc3RpbmcgPSByZXNvbHZlZDsKIH0KIAotLSAodm9pZClfc2V0V2FudHNNZWRpYVBsYXliYWNr
Q29udHJvbHNWaWV3OihCT09MKXdhbnRzTWVkaWFQbGF5YmFja0NvbnRyb2xzVmlldworLSAoQk9P
TClfaGFzSW5zcGVjdG9yRnJvbnRlbmQKIHsKLSNpZiBIQVZFKFRPVUNIX0JBUikKLSAgICBfaW1w
bC0+c2V0Q2xpZW50V2FudHNNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KHdhbnRzTWVkaWFQbGF5
YmFja0NvbnRyb2xzVmlldyk7Ci0jZW5kaWYKKyAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhh
c0luc3BlY3RvckZyb250ZW5kKCk7CiB9CiAKLS0gKGlkKV9tZWRpYVBsYXliYWNrQ29udHJvbHNW
aWV3CistIChfV0tJbnNwZWN0b3IgKilfaW5zcGVjdG9yCiB7Ci0jaWYgSEFWRShUT1VDSF9CQVIp
Ci0gICAgcmV0dXJuIF9pbXBsLT5jbGllbnRXYW50c01lZGlhUGxheWJhY2tDb250cm9sc1ZpZXco
KSA/IF9pbXBsLT5tZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3KCkgOiBuaWw7Ci0jZWxzZQorICAg
IGlmIChhdXRvKiBpbnNwZWN0b3IgPSBfcGFnZS0+aW5zcGVjdG9yKCkpCisgICAgICAgIHJldHVy
biB3cmFwcGVyKCppbnNwZWN0b3IpOwogICAgIHJldHVybiBuaWw7Ci0jZW5kaWYKIH0KIAotLy8g
VGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0tICh2b2lkKV9hZGRN
ZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3OihpZCltZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3Cist
IChfV0tGcmFtZUhhbmRsZSAqKV9tYWluRnJhbWUKIHsKKyAgICBpZiAoYXV0byogZnJhbWUgPSBf
cGFnZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyKEFQSTo6RnJhbWVIYW5k
bGU6OmNyZWF0ZShmcmFtZS0+ZnJhbWVJRCgpKSk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAotLy8g
VGhpcyBtZXRob2QgaXMgZm9yIHN1YmNsYXNzZXMgdG8gb3ZlcnJpZGUuCi0tICh2b2lkKV9yZW1v
dmVNZWRpYVBsYXliYWNrQ29udHJvbHNWaWV3CistICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZwogeworICAgIGlmIChfcGFnZSkKKyAgICAgICAgX3BhZ2UtPnBy
b2Nlc3MoKS5zZW5kUHJlcGFyZVRvU3VzcGVuZChXZWJLaXQ6OklzU3VzcGVuc2lvbkltbWluZW50
OjpZZXMsIFtdIHsgfSk7CiB9CiAKLS0gKHZvaWQpX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5T
V2luZG93ICopdGFyZ2V0V2luZG93IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNv
bXBsZXRpb25IYW5kbGVyCistICh2b2lkKV9wcm9jZXNzRGlkUmVzdW1lRm9yVGVzdGluZwogewot
ICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXJDb3B5ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25I
YW5kbGVyKTsKLSAgICBfaW1wbC0+cHJlcGFyZUZvck1vdmVUb1dpbmRvdyh0YXJnZXRXaW5kb3cs
IFtjb21wbGV0aW9uSGFuZGxlckNvcHldIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXJDb3B5
KCk7Ci0gICAgfSk7CisgICAgaWYgKF9wYWdlKQorICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnNl
bmRQcm9jZXNzRGlkUmVzdW1lKCk7CiB9CiAKLS0gKHZvaWQpX3NldFRodW1ibmFpbFZpZXc6KF9X
S1RodW1ibmFpbFZpZXcgKil0aHVtYm5haWxWaWV3CistICh2b2lkKV9zZXRBc3NlcnRpb25TdGF0
ZUZvclRlc3Rpbmc6KGludCl2YWx1ZQogewotICAgIF9pbXBsLT5zZXRUaHVtYm5haWxWaWV3KHRo
dW1ibmFpbFZpZXcpOworICAgIGlmICghX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIF9w
YWdlLT5wcm9jZXNzKCkuc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nKHN0YXRpY19jYXN0PFdl
YktpdDo6QXNzZXJ0aW9uU3RhdGU+KHZhbHVlKSk7CiB9CiAKLS0gKF9XS1RodW1ibmFpbFZpZXcg
KilfdGh1bWJuYWlsVmlldworLSAoQk9PTClfaGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rp
dml0eUZvclRlc3RpbmcKIHsKLSAgICBpZiAoIV9pbXBsKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHJldHVybiBfaW1wbC0+dGh1bWJuYWlsVmlldygpOworI2lmIEVOQUJMRShTRVJWSUNFX1dP
UktFUikKKyAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCku
aGFzU2VydmljZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotLSAodm9pZClfc2V0SWdub3Jl
c0FsbEV2ZW50czooQk9PTClpZ25vcmVzQWxsRXZlbnRzCistIChCT09MKV9oYXNTZXJ2aWNlV29y
a2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZwogewotICAgIF9pbXBsLT5zZXRJZ25vcmVz
QWxsRXZlbnRzKGlnbm9yZXNBbGxFdmVudHMpOworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikK
KyAgICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2Vy
dmljZVdvcmtlckZvcmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAotLSAoQk9PTClfaWdub3Jlc0FsbEV2ZW50
cworLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0CiB7Ci0gICAgcmV0dXJuIF9pbXBs
LT5pZ25vcmVzQWxsRXZlbnRzKCk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBXZWJL
aXQ6OlVzZXJNZWRpYVByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5kZW55TmV4dFVzZXJNZWRp
YVJlcXVlc3QoKTsKKyNlbmRpZgogfQogCi0tIChOU0ludGVnZXIpX3NwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKy0gKHZvaWQpX3RyaWdnZXJTeXN0ZW1Q
cmV2aWV3QWN0aW9uT25FbGVtZW50Oih1aW50NjRfdCllbGVtZW50SUQgZG9jdW1lbnQ6KHVpbnQ2
NF90KWRvY3VtZW50SUQgcGFnZToodWludDY0X3QpcGFnZUlECiB7Ci0gICAgcmV0dXJuIF9pbXBs
LT5zcGVsbENoZWNrZXJEb2N1bWVudFRhZygpOworI2lmIFVTRShTWVNURU1fUFJFVklFVykKKyAg
ICBpZiAoX3BhZ2UpIHsKKyAgICAgICAgaWYgKGF1dG8qIHByZXZpZXdDb250cm9sbGVyID0gX3Bh
Z2UtPnN5c3RlbVByZXZpZXdDb250cm9sbGVyKCkpCisgICAgICAgICAgICBwcmV2aWV3Q29udHJv
bGxlci0+dHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9yVGVzdGluZyhlbGVt
ZW50SUQsIGRvY3VtZW50SUQsIHBhZ2VJRCk7CisgICAgfQorI2VuZGlmCiB9Ci0KICNlbmRpZgog
CiBAZW5kCiAKLSN1bmRlZiBGT1JXQVJEX0FDVElPTl9UT19XS0NPTlRFTlRWSUVXCi0KICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIEBpbXBsZW1l
bnRhdGlvbiBXS1dlYlZpZXcgKEZ1bGxTY3JlZW5BUElfUHJpdmF0ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKaW5kZXgg
OGEyODdlZjcyMGE4MjliYWM1ZGU5OWJjMTFkZTcwMTQxYzI0ZThhMy4uNDM1MDgwZjMyNDQ1Y2U4
ZTdmNTZlZTVkYzAwNDM5NGJjZjFhYTVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTM0LDcgKzM0LDYgQEAK
ICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBv
cnQgPHd0Zi9WYXJpYW50Lmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTY5LDQ3ICs2OCwx
OCBAQCBjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xh
c3MgV2ViUGFnZVByb3h5Owogc3RydWN0IFByaW50SW5mbzsKLSNpZiBQTEFURk9STShNQUMpCi1j
bGFzcyBXZWJWaWV3SW1wbDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1jbGFz
cyBWaWV3R2VzdHVyZUNvbnRyb2xsZXI7Ci0jZW5kaWYKIH0KIAogQGNsYXNzIFdLV2ViVmlld0Nv
bnRlbnRQcm92aWRlclJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9X
S0ZyYW1lSGFuZGxlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1AY2xhc3MgV0tTY3JvbGxW
aWV3OwotQGNsYXNzIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Ci0jZW5kaWYKLUBwcm90
b2NvbCBfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7CiAKIEBpbnRlcmZhY2UgV0tXZWJWaWV3
ICgpIFdLX1dFQl9WSUVXX1BST1RPQ09MUyB7CiAKIEBwYWNrYWdlCiAgICAgUmV0YWluUHRyPFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24+IF9jb25maWd1cmF0aW9uOwotICAgIFJlZlB0cjxXZWJLaXQ6
OldlYlBhZ2VQcm94eT4gX3BhZ2U7Ci0gICAgV2Vha09iakNQdHI8aWQgPF9XS1RleHRNYW5pcHVs
YXRpb25EZWxlZ2F0ZT4+IF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU7Ci0gICAgT3B0aW9uYWw8
Qk9PTD4gX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRpYXRlQ29tcGxldGlvbkZvclRlc3Rp
bmc7CiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6V2Vi
Vmlld0ltcGw+IF9pbXBsOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IFJldGFpblB0cjxXS1Njcm9sbFZpZXc+IF9zY3JvbGxWaWV3OwotICAgIFJldGFpblB0cjxXS0Nv
bnRlbnRWaWV3PiBfY29udGVudFZpZXc7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6Vmll
d0dlc3R1cmVDb250cm9sbGVyPiBfZ2VzdHVyZUNvbnRyb2xsZXI7Ci0gICAgVmVjdG9yPEJsb2Nr
UHRyPHZvaWQgKCk+PiBfdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlQ2FsbGJhY2tzOwotCi0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyPiBfZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7Ci0jZW5kaWYKLQotICAgIENH
UmVjdCBfaW5wdXRWaWV3Qm91bmRzOwotI2VuZGlmCisgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFn
ZVByb3h5PiBfcGFnZTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMTcsOCAr
ODcsNiBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xsZXI7CiAtICh2b2lkKV9wcm9jZXNzV2ls
bFN3YXA7CiAtICh2b2lkKV9kaWRSZWxhdW5jaFByb2Nlc3M7CiAKLS0gKFVJVmlldyAqKV9jdXJy
ZW50Q29udGVudFZpZXc7Ci0KIC0gKHZvaWQpX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWU7CiAt
ICh2b2lkKV9kaWRDb21taXRMYXllclRyZWU6KGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9uOwogLSAodm9pZClfbGF5ZXJUcmVlQ29t
bWl0Q29tcGxldGU7CkBAIC0xMzEsMTAgKzk5LDggQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9s
bGVyOwogCiAtICh2b2lkKV9zY3JvbGxUb0NvbnRlbnRTY3JvbGxQb3NpdGlvbjooV2ViQ29yZTo6
RmxvYXRQb2ludClzY3JvbGxQb3NpdGlvbiBzY3JvbGxPcmlnaW46KFdlYkNvcmU6OkludFBvaW50
KXNjcm9sbE9yaWdpbjsKIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0
KXRhcmdldFJlY3Qgb3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBtaW5pbXVtU2Ny
b2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKLQogLSAoZG91YmxlKV9p
bml0aWFsU2NhbGVGYWN0b3I7CiAtIChkb3VibGUpX2NvbnRlbnRab29tU2NhbGU7Ci0KIC0gKGRv
dWJsZSlfdGFyZ2V0Q29udGVudFpvb21TY2FsZUZvclJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpdGFyZ2V0UmVjdCBjdXJyZW50U2NhbGU6KGRvdWJsZSljdXJyZW50U2NhbGUgZml0RW50
aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1T
Y2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGU7CiAtICh2b2lkKV96b29tVG9G
b2N1c1JlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpZm9jdXNlZEVsZW1lbnRSZWN0IHNl
bGVjdGlvblJlY3Q6KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpc2VsZWN0aW9uUmVjdEluRG9j
dW1lbnRDb29yZGluYXRlcyBpbnNpZGVGaXhlZDooQk9PTClpbnNpZGVGaXhlZCBmb250U2l6ZToo
ZmxvYXQpZm9udFNpemUgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1T
Y2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBhbGxvd1NjYWxpbmc6KEJPT0wpYWxsb3dTY2FsaW5n
IGZvcmNlU2Nyb2xsOihCT09MKWZvcmNlU2Nyb2xsOwogLSAoQk9PTClfem9vbVRvUmVjdDooV2Vi
Q29yZTo6RmxvYXRSZWN0KXRhcmdldFJlY3Qgd2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2lu
dClvcmlnaW4gZml0RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZToo
ZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgbWlu
aW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7CkBAIC0xOTAs
MTAgKzE1NiwxMyBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xsZXI7CiAtICh2b2lkKV9yZXNl
dEZvY3VzUHJlc2VydmF0aW9uQ291bnQ7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25s
eSkgV0tQYXNzd29yZFZpZXcgKl9wYXNzd29yZFZpZXc7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSkgQk9PTCBfaXNCYWNrZ3JvdW5kOworCiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5ICpfY29udGVudFByb3Zp
ZGVyUmVnaXN0cnk7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgV0tTZWxlY3Rp
b25HcmFudWxhcml0eSBfc2VsZWN0aW9uR3JhbnVsYXJpdHk7CiAKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgQk9PTCBfaXNCYWNrZ3JvdW5kOwogQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBCT09MIF9hbGxvd3NEb3VibGVUYXBHZXN0dXJlczsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQk9PTCBfc3R5bHVzVGFwR2VzdHVyZVNob3VsZENyZWF0ZUVkaXRh
YmxlSW1hZ2U7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhdmVTZXRP
YnNjdXJlZEluc2V0czsKQEAgLTIwMyw3ICsxNzIsNiBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRy
b2xsZXI7CiAKIC0gKEJPT0wpX2VmZmVjdGl2ZUFwcGVhcmFuY2VJc0Rhcms7CiAtIChCT09MKV9l
ZmZlY3RpdmVVc2VySW50ZXJmYWNlTGV2ZWxJc0VsZXZhdGVkOwotCiAjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCkBAIC0yMTIs
OCArMTgwLDYgQEAgY2xhc3MgVmlld0dlc3R1cmVDb250cm9sbGVyOwogLSAodm9pZClfZGlkSW52
YWxpZGF0ZURhdGFGb3JBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQ7CiAj
ZW5kaWYKIAotLSAodm9pZClfaW50ZXJuYWxEb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZToo
dm9pZCAoXikodm9pZCkpdXBkYXRlQmxvY2sgd2l0aG91dFdhaXRpbmdGb3JQYWludGluZzooQk9P
TCl3aXRob3V0V2FpdGluZ0ZvclBhaW50aW5nIHdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNp
emU6KEJPT0wpd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTsKLQogLSAodm9pZClfc2hv
d1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nV2FybmluZyYp
d2FybmluZyBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50
PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVy
OwogLSAodm9pZClfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nOwogLSAodm9pZClfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nSWZGb3JNYWluRnJhbWVOYXZpZ2F0aW9uOwpAQCAtMjI0LDE0ICsxOTAs
NyBAQCBjbGFzcyBWaWV3R2VzdHVyZUNvbnRyb2xsZXI7CiAtIChXZWJLaXQ6OldlYlBhZ2VQcm94
eSopX3BhZ2U7CiAKICNpZiBQTEFURk9STShNQUMpCi0KLS0gKHZvaWQpX3ByZXBhcmVGb3JJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0t
ICh2b2lkKV9jYW5jZWxJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9jb21wbGV0ZUltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
biBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLQotLSAodm9pZClpbnNlcnRUZXh0
OihpZClzdHJpbmcgcmVwbGFjZW1lbnRSYW5nZTooTlNSYW5nZSlyZXBsYWNlbWVudFJhbmdlOwog
LSAodm9pZClfd2ViX2dyYW50RE9NUGFzdGVBY2Nlc3M7Ci0KICNlbmRpZgogCiBAZW5kCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aAppbmRleCA5YTcxMzgwNzBkMmFjZWZmOTZkOTExNmQwNzI2NDMwM2RmYmJhZjE2Li5mYjFlNDU1
Yjk1NWJjYzU5ZTkxNDc2MjI2NjZkMjc2ZDc4YzY5NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKQEAgLTE3MiwxMiAr
MTcyLDYgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEFsbG93c1JlbW90ZUluc3BlY3Rpb246
KSBCT09MIF9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIGNv
cHksIHNldHRlcj1fc2V0UmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZTopIE5TU3RyaW5nICpf
cmVtb3RlSW5zcGVjdGlvbk5hbWVPdmVycmlkZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
KSwgaW9zKDEwLjApKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVj
dG9yICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4y
KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFp
bkZyYW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci0KLUBw
cm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9u
RGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKLS0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjoo
X1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24g
Y29tcGxldGlvbjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfY29tcGxl
dGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxl
dGlvbjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBzZXR0ZXI9X3NldEFkZHNWaXNpdGVkTGlua3M6KSBCT09MIF9hZGRzVmlzaXRl
ZExpbmtzOwogCkBAIC0yMTgsMTQgKzIxMiw2IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRl
Z2VyLCBfV0tSZWN0RWRnZSkgewogLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmdXaXRo
VGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3YXJuaW5nIGRldGFp
bHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQo
XikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIC0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nV2l0aFVSTDoo
TlNVUkwgKil1cmwgdGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2FybmluZzooTlNTdHJpbmcgKil3
YXJuaW5nIGRldGFpbHM6KE5TQXR0cmlidXRlZFN0cmluZyAqKWRldGFpbHMgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIAotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50
YXRpb25VcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTIpLCBpb3MoMTAuMCkpOwotLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRp
b25VcGRhdGVXaXRob3V0V2FpdGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVC
bG9jayBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOwotI2lmIFRB
UkdFVF9PU19JUEhPTkUKLS0gKHZvaWQpX2RvQWZ0ZXJOZXh0U3RhYmxlUHJlc2VudGF0aW9uVXBk
YXRlOihkaXNwYXRjaF9ibG9ja190KXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKLSNlbmRpZgotCi0tICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5TU3RyaW5nICop
Y29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9uOih2b2lkIChe
KShCT09MKSljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygx
MS4zKSk7Ci0KIC0gKHZvaWQpX2lzSklURW5hYmxlZDoodm9pZCheKShCT09MKSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogLSAo
dm9pZClfcmVtb3ZlRGF0YURldGVjdGVkTGlua3M6KGRpc3BhdGNoX2Jsb2NrX3QpY29tcGxldGlv
biBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogCkBAIC0yNTIs
MTAgKzIzOCw2IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkg
ewogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQogCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjAp
KTsKLS0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250ZW50c1RvVmlldzooQ0dQb2ludClw
b2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Ci0tIChDR1BvaW50KV9jb252ZXJ0UG9p
bnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQgV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTAuMCkpOwotCiAtICh2b2lkKV9zZXRGb250OihVSUZvbnQgKilmb250IHNlbmRlcjooaWQpc2Vu
ZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKIC0gKHZvaWQpX3NldEZvbnRTaXplOihD
R0Zsb2F0KWZvbnRTaXplIHNlbmRlcjooaWQpc2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEy
LjIpKTsKIC0gKHZvaWQpX3NldFRleHRDb2xvcjooVUlDb2xvciAqKWNvbG9yIHNlbmRlcjooaWQp
c2VuZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKQEAgLTI5NCwxNCArMjc2LDYgQEAg
dHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldERyYWdJbnRlcmFjdGlvblBvbGljeTopIF9XS0RyYWdJ
bnRlcmFjdGlvblBvbGljeSBfZHJhZ0ludGVyYWN0aW9uUG9saWN5IFdLX0FQSV9BVkFJTEFCTEUo
aW9zKDExLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfc2hvdWxk
QXZvaWRSZXNpemluZ1doZW5JbnB1dFZpZXdCb3VuZHNDaGFuZ2UgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTMuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9jb250ZW50
Vmlld0lzRmlyc3RSZXNwb25kZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIuMikpOwotCi1AcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfdWlUZXh0Q2FyZXRSZWN0IFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKLQotLSAodm9pZClfcmVxdWVzdEFjdGl2YXRlZEVsZW1l
bnRBdFBvc2l0aW9uOihDR1BvaW50KXBvc2l0aW9uIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXiko
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKikpYmxvY2sgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEu
MCkpOwotCi0tICh2b2lkKWRpZFN0YXJ0Rm9ybUNvbnRyb2xJbnRlcmFjdGlvbiBXS19BUElfQVZB
SUxBQkxFKGlvcygxMC4zKSk7Ci0tICh2b2lkKWRpZEVuZEZvcm1Db250cm9sSW50ZXJhY3Rpb24g
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOwogCiAtICh2b2lkKV9iZWdpbkludGVyYWN0aXZl
T2JzY3VyZWRJbnNldHNDaGFuZ2U7CiAtICh2b2lkKV9lbmRJbnRlcmFjdGl2ZU9ic2N1cmVkSW5z
ZXRzQ2hhbmdlOwpAQCAtMzMyLDMzICszMDYsMTggQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUlu
dGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAtIChpZClfc25hcHNob3RMYXllckNvbnRlbnRzRm9yQmFj
a0ZvcndhcmRMaXN0SXRlbTooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbSBXS19BUElfQVZB
SUxBQkxFKGlvcyg5XzApKTsKIC0gKE5TQXJyYXkgKilfZGF0YURldGVjdGlvblJlc3VsdHM7CiAK
LS0gKHZvaWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVJlY3RzQXRTZWxlY3Rpb25PZmZzZXQ6KE5T
SW50ZWdlcilvZmZzZXQgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNBcnJheTxOU1ZhbHVlICo+ICpyZWN0cykpY29tcGxldGlvbkhhbmRsZXIg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTEuMykpOwotLSAodm9pZClfYWNjZXNzaWJpbGl0eVN0b3Jl
U2VsZWN0aW9uIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKLS0gKHZvaWQpX2FjY2Vzc2li
aWxpdHlDbGVhclNlbGVjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Ci0KIC0gKHZv
aWQpX2FjY2Vzc2liaWxpdHlSZXRyaWV2ZVNwZWFrU2VsZWN0aW9uQ29udGVudCBXS19BUElfQVZB
SUxBQkxFKGlvcygxMS4wKSk7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5RGlkR2V0U3BlYWtTZWxl
Y3Rpb25Db250ZW50OihOU1N0cmluZyAqKWNvbnRlbnQgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTEu
MCkpOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlldyAqX3NhZmVCcm93
c2luZ1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsK
LQotLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FWQUlMQUJM
RShpb3MoMTIuMCkpOwotCiAjZWxzZQotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IFdLUGFnZVJlZiBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlldyAgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJP
T0wgX2hhc0FjdGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUsIHNldHRlcj1fc2V0
SWdub3Jlc05vbldoZWVsRXZlbnRzOikgQk9PTCBfaWdub3Jlc05vbldoZWVsRXZlbnRzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotCi1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVh
ZG9ubHkpIE5TVmlldyAqX3NhZmVCcm93c2luZ1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xNC40KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TVmlldyAqX3Nh
ZmVCcm93c2luZ1dhcm5pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tSZWN0RWRnZSBfcGlu
bmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgc2V0dGVyPV9zZXRSdWJiZXJCYW5kaW5nRW5hYmxlZDopIF9XS1JlY3RFZGdlIF9y
dWJiZXJCYW5kaW5nRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIAog
QHByb3BlcnR5IChyZWFkb25seSkgTlNDb2xvciAqX3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xv
cjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEJhY2tncm91bmRDb2xvcjopIE5T
Q29sb3IgKl9iYWNrZ3JvdW5kQ29sb3IgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCkpOwot
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0VW5kZXJsYXlDb2xvcjopIE5T
Q29sb3IgKl91bmRlcmxheUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwot
Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczop
IENHRmxvYXQgX3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0RHJhd3NCYWNrZ3JvdW5k
OikgQk9PTCBfZHJhd3NCYWNrZ3JvdW5kOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1f
c2V0VG9wQ29udGVudEluc2V0OikgQ0dGbG9hdCBfdG9wQ29udGVudEluc2V0OwogCkBAIC0zNzIs
MjcgKzMzMSw2IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tSZWN0RWRnZSkg
ewogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0ludGVnZXIgX3NwZWxsQ2hlY2tl
ckRvY3VtZW50VGFnIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKIAogLSAodm9pZClf
c2V0U2hvdWxkU3VwcHJlc3NGaXJzdFJlc3BvbmRlckNoYW5nZXM6KEJPT0wpc2hvdWxkU3VwcHJl
c3M7Ci0tIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUgKilmcmFt
ZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKEJPT0wpX3RyeVRv
U3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRlOihCT09M
KWlnbm9yaW5nUGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0K
LS0gKHZvaWQpX2Rpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3MgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9zZXRGcmFtZTooTlNSZWN0KXJlY3QgYW5k
U2Nyb2xsQnk6KE5TU2l6ZSlvZmZzZXQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
Ci0KLS0gKHZvaWQpX2dlc3R1cmVFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZlbnQg
KilldmVudCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLQotLSAodm9pZClfZGlz
YWJsZUZyYW1lU2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0t
ICh2b2lkKV9lbmFibGVGcmFtZVNpemVVcGRhdGVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTMuNCkpOwotCi0tICh2b2lkKV9iZWdpbkRlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXMgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7Ci0tICh2b2lkKV9lbmREZWZlcnJpbmdWaWV3
SW5XaW5kb3dDaGFuZ2VzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9p
ZClfZW5kRGVmZXJyaW5nVmlld0luV2luZG93Q2hhbmdlc1N5bmMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7Ci0KLS0gKHZvaWQpX3NldEN1c3RvbVN3aXBlVmlld3M6KE5TQXJyYXkg
KiljdXN0b21Td2lwZVZpZXdzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAo
dm9pZClfc2V0RGlkTW92ZVN3aXBlU25hcHNob3RDYWxsYmFjazoodm9pZCheKShDR1JlY3QpKWNh
bGxiYWNrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotLSAodm9pZClfc2V0Q3Vz
dG9tU3dpcGVWaWV3c1RvcENvbnRlbnRJbnNldDooZmxvYXQpdG9wQ29udGVudEluc2V0IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwotCi0tIChOU1ZpZXcgKilfZnVsbFNjcmVlblBs
YWNlaG9sZGVyVmlldyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLS0gKE5TV2lu
ZG93ICopX2Z1bGxTY3JlZW5XaW5kb3cgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7
CiAKIC8vIENsaWVudHMgdGhhdCB3YW50IHRvIG1haW50YWluIGRlZmF1bHQgYmVoYXZpb3IgY2Fu
IHJldHVybiBuaWwuIFRvIGRpc2FibGUgdGhlIGltbWVkaWF0ZSBhY3Rpb24gZW50aXJlbHksIHJl
dHVybiBOU051bGwuIEFuZCB0bwogLy8gZG8gc29tZXRoaW5nIGN1c3RvbSwgcmV0dXJuIGFuIG9i
amVjdCB0aGF0IGNvbmZvcm1zIHRvIHRoZSBOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRy
b2xsZXIgcHJvdG9jb2wuCkBAIC00MDgsNyArMzQ2LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9z
ZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXI6KSBCT09MIF9hbHdheXNTaG93c1ZlcnRpY2Fs
U2Nyb2xsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAKIC0gKE5TUHJpbnRP
cGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXBy
aW50SW5mbzsKLS0gKE5TUHJpbnRPcGVyYXRpb24gKilfcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJ
bmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFtZTooX1dLRnJhbWVIYW5kbGUgKilm
cmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyKSk7CistIChOU1ByaW50T3Bl
cmF0aW9uICopX3ByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzooTlNQcmludEluZm8gKilwcmlu
dEluZm8gZm9yRnJhbWU6KF9XS0ZyYW1lSGFuZGxlICopZnJhbWVIYW5kbGUgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xMiksIGlvcygxMC4wKSk7CiAKIC8vIEZJWE1FOiBUaGlzIFNQSSBzaG91
bGQgYmVjb21lIGEgcGFydCBvZiB0aGUgV0tVSURlbGVnYXRlLiByZGFyOi8vcHJvYmxlbS8yNjU2
MTUzNwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRXYW50c01l
ZGlhUGxheWJhY2tDb250cm9sc1ZpZXc6KSBCT09MIF93YW50c01lZGlhUGxheWJhY2tDb250cm9s
c1ZpZXcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7CkBAIC00MTgsNyArMzU2LDYg
QEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiAKIC0gKHZv
aWQpX3ByZXBhcmVGb3JNb3ZlVG9XaW5kb3c6KE5TV2luZG93ICopdGFyZ2V0V2luZG93IGNvbXBs
ZXRpb25IYW5kbGVyOih2b2lkKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMpKTsKIAotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwg
c2V0dGVyPV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBwZWFyYW5j
ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
c2V0dGVyPV9zZXRPdmVybGF5U2Nyb2xsYmFyU3R5bGU6KSBfV0tPdmVybGF5U2Nyb2xsYmFyU3R5
bGUgX292ZXJsYXlTY3JvbGxiYXJTdHlsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQp
KTsKIEBwcm9wZXJ0eSAoc3Ryb25nLCBub25hdG9taWMsIHNldHRlcj1fc2V0SW5zcGVjdG9yQXR0
YWNobWVudFZpZXc6KSBOU1ZpZXcgKl9pbnNwZWN0b3JBdHRhY2htZW50VmlldyBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKIApAQCAtNTE0LDQgKzQ1MSwxNDIgQEAgdHlwZWRlZiBO
U19PUFRJT05TKE5TVUludGVnZXIsIF9XS1JlY3RFZGdlKSB7CiBAaW50ZXJmYWNlIFdLV2ViVmll
dyAoKSA8VUlSZXNwb25kZXJTdGFuZGFyZEVkaXRBY3Rpb25zPgogQGVuZAogCi0jZW5kaWYgLy8g
VEFSR0VUX09TX0lQSE9ORQorI2VuZGlmCisKK0BpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3Rp
bmcpCisKKy0gKHZvaWQpX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rp
bmc6KEJPT0wpZW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOworLSAoTlNEaWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2VySW50ZXJmYWNl
SXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjEyLjMpLCBpb3MoMTAuMykpOworCisjaWYgVEFSR0VUX09TX0lQSE9ORQorCitAcHJvcGVy
dHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfY29udGVudFZpc2libGVSZWN0IFdLX0FQ
SV9BVkFJTEFCTEUoaW9zKDEwLjApKTsKKy0gKENHUG9pbnQpX2NvbnZlcnRQb2ludEZyb21Db250
ZW50c1RvVmlldzooQ0dQb2ludClwb2ludCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7Cist
IChDR1BvaW50KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQg
V0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOworCistICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5
QmFyTmV4dCBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4wKSk7CistICh2b2lkKWtleWJvYXJkQWNj
ZXNzb3J5QmFyUHJldmlvdXMgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMCkpOworLSAodm9pZClk
aXNtaXNzRm9ybUFjY2Vzc29yeVZpZXcgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworLSAo
dm9pZClfZGlzbWlzc0ZpbGVQaWNrZXIgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOworLSAo
dm9pZClzZWxlY3RGb3JtQWNjZXNzb3J5UGlja2VyUm93OihpbnQpcm93SW5kZXggV0tfQVBJX0FW
QUlMQUJMRShpb3MoMTAuMykpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0
cmluZyAqdGV4dENvbnRlbnRUeXBlRm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKGlvcygxMi4w
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5nICpzZWxlY3RGb3Jt
UG9wb3ZlclRpdGxlIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjApKTsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKmZvcm1JbnB1dExhYmVsIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDEyLjApKTsKKy0gKHZvaWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3VyOihOU0ludGVn
ZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGUgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTIu
MCkpOworCistICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5nICopbmV3U3RyaW5n
IHRvU3RyaW5nOihOU1N0cmluZyAqKW9sZFN0cmluZyB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjAp
KTsKKworLSAodm9pZClkaWRTdGFydEZvcm1Db250cm9sSW50ZXJhY3Rpb24gV0tfQVBJX0FWQUlM
QUJMRShpb3MoMTAuMykpOworLSAodm9pZClkaWRFbmRGb3JtQ29udHJvbEludGVyYWN0aW9uIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKworLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51
IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKy0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0
TWVudSBXS19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CistICh2b2lkKV9kb0FmdGVyTmV4dFN0
YWJsZVByZXNlbnRhdGlvblVwZGF0ZTooZGlzcGF0Y2hfYmxvY2tfdCl1cGRhdGVCbG9jayBXS19B
UElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CistICh2b2lkKV9kb0FmdGVyUmVzZXR0aW5nU2luZ2xl
VGFwR2VzdHVyZTooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3Mo
V0tfSU9TX1RCQSkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8
TlNWYWx1ZSAqPiAqX3VpVGV4dFNlbGVjdGlvblJlY3RzIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEw
LjMpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQ0dSZWN0IF91aVRleHRDYXJl
dFJlY3QgV0tfQVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworQHByb3BlcnR5IChub25hdG9taWMs
IHJlYWRvbmx5KSBDR1JlY3QgX2lucHV0Vmlld0JvdW5kcyBXS19BUElfQVZBSUxBQkxFKGlvcygx
MC4zKSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKl9zY3Jv
bGxpbmdUcmVlQXNUZXh0IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKworQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBOU051bWJlciAqX3N0YWJsZVN0YXRlT3ZlcnJpZGUgV0tf
QVBJX0FWQUlMQUJMRShpb3MoMTAuMykpOworCistIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGll
c09mTGF5ZXJXaXRoSUQ6KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklEIFdLX0FQSV9BVkFJTEFC
TEUoaW9zKDExLjApKTsKKy0gKHZvaWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlv
bjooQ0dQb2ludClsb2NhdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CistICh2b2lk
KV9zaW11bGF0ZVRleHRFbnRlcmVkOihOU1N0cmluZyAqKXRleHQgV0tfQVBJX0FWQUlMQUJMRShp
b3MoMTIuMCkpOworCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfZHJh
Z0NhcmV0UmVjdCBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4wKSk7CisKKy0gKHZvaWQpX2RvQWZ0
ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVzdGluZzooZGlzcGF0Y2hfYmxvY2tfdClh
Y3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3MoMTMuMCkpOworCistICh2b2lkKV9yZXF1ZXN0QWN0
aXZhdGVkRWxlbWVudEF0UG9zaXRpb246KENHUG9pbnQpcG9zaXRpb24gY29tcGxldGlvbkJsb2Nr
Oih2b2lkICheKShfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKSlibG9jayBXS19BUElfQVZBSUxB
QkxFKGlvcygxMS4wKSk7CistICh2b2lkKV9hY2Nlc3NpYmlsaXR5UmV0cmlldmVSZWN0c0F0U2Vs
ZWN0aW9uT2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0IHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNWYWx1ZSAqPiAqcmVjdHMpKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDExLjMpKTsKKy0gKHZvaWQpX2Fj
Y2Vzc2liaWxpdHlTdG9yZVNlbGVjdGlvbiBXS19BUElfQVZBSUxBQkxFKGlvcygxMS4zKSk7Cist
ICh2b2lkKV9hY2Nlc3NpYmlsaXR5Q2xlYXJTZWxlY3Rpb24gV0tfQVBJX0FWQUlMQUJMRShpb3Mo
MTEuMykpOworLSAoVUlWaWV3ICopX2Z1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgV0tfQVBJX0FW
QUlMQUJMRShpb3MoMTIuMCkpOworCistICh2b2lkKV90cmlnZ2VyU3lzdGVtUHJldmlld0FjdGlv
bk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50NjRfdClkb2N1bWVu
dElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRCBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJB
KSk7CisKKy0gKHZvaWQpX3NldERldmljZU9yaWVudGF0aW9uVXNlclBlcm1pc3Npb25IYW5kbGVy
Rm9yVGVzdGluZzooQk9PTCAoXikodm9pZCkpaGFuZGxlciBXS19BUElfQVZBSUxBQkxFKGlvcyhX
S19JT1NfVEJBKSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfY29u
dGVudFZpZXdJc0ZpcnN0UmVzcG9uZGVyIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEyLjIpKTsKKyNl
bHNlCistICh2b2lkKV9kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdClyZWN0
IGFuZFNjcm9sbEJ5OihOU1NpemUpb2Zmc2V0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCkpOworLSAodm9pZClfYmVnaW5EZWZlcnJpbmdWaWV3SW5XaW5kb3dDaGFuZ2VzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfZW5kRGVmZXJyaW5nVmlld0luV2lu
ZG93Q2hhbmdlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKHZvaWQpX2Vu
ZERlZmVycmluZ1ZpZXdJbldpbmRvd0NoYW5nZXNTeW5jIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTMuNCkpOworLSAodm9pZClfZ2VzdHVyZUV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZToo
TlNFdmVudCAqKWV2ZW50IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9p
ZClfc2V0Q3VzdG9tU3dpcGVWaWV3czooTlNBcnJheSAqKWN1c3RvbVN3aXBlVmlld3MgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9zZXRDdXN0b21Td2lwZVZpZXdz
VG9wQ29udGVudEluc2V0OihmbG9hdCl0b3BDb250ZW50SW5zZXQgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7CistIChOU1ZpZXcgKilfZnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKE5TV2luZG93ICopX2Z1bGxTY3Jl
ZW5XaW5kb3cgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CistICh2b2lkKV9kaXNh
YmxlRnJhbWVTaXplVXBkYXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0g
KHZvaWQpX2VuYWJsZUZyYW1lU2l6ZVVwZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
My40KSk7CistICh2b2lkKV9wcmVwYXJlRm9ySW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClfY2FuY2VsSW1tZWRpYXRlQWN0
aW9uQW5pbWF0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOworLSAodm9pZClf
Y29tcGxldGVJbW1lZGlhdGVBY3Rpb25BbmltYXRpb24gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygx
MC4xMy40KSk7CistIChCT09MKV9jYW5DaGFuZ2VGcmFtZUxheW91dDooX1dLRnJhbWVIYW5kbGUg
KilmcmFtZUhhbmRsZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKKy0gKEJPT0wp
X3RyeVRvU3dpcGVXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudCBpZ25vcmluZ1Bpbm5lZFN0YXRl
OihCT09MKWlnbm9yaW5nUGlubmVkU3RhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40
KSk7CistICh2b2lkKV9zZXREaWRNb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrOih2b2lkKF4pKENH
UmVjdCkpY2FsbGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CitAcHJvcGVy
dHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRUb3RhbEhlaWdodE9mQmFubmVyczopIENHRmxvYXQg
X3RvdGFsSGVpZ2h0T2ZCYW5uZXJzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwor
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1fc2V0VW5kZXJsYXlDb2xvcjopIE5T
Q29sb3IgKl91bmRlcmxheUNvbG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwor
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3cml0ZSwgc2V0dGVyPV9zZXRJZ25vcmVzTm9uV2hl
ZWxFdmVudHM6KSBCT09MIF9pZ25vcmVzTm9uV2hlZWxFdmVudHMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFdLUGFnZVJl
ZiBfcGFnZVJlZkZvclRyYW5zaXRpb25Ub1dLV2ViVmlldyAgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMy40KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2hhc0Fj
dGl2ZVZpZGVvRm9yQ29udHJvbHNNYW5hZ2VyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIp
KTsKKy0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVudElEIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTIuMykpOworLSAodm9pZClfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3Bv
bnNlOihOU1N0cmluZyAqKWlkZW50aWZpZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4z
KSk7CistICh2b2lkKV9oYW5kbGVBY2NlcHRlZENhbmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdSZXN1
bHQgKiljYW5kaWRhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7CistICh2b2lk
KV9kaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEy
LjMpKTsKKy0gKHZvaWQpX2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMi4zKSk7CistICh2b2lkKV9kaWRVcGRhdGVDYW5kaWRhdGVMaXN0VmlzaWJpbGl0
eTooQk9PTCl2aXNpYmxlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTIuMykpOworQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9zaG91bGRSZXF1ZXN0Q2FuZGlkYXRlcyBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKKy0gKHZvaWQpX2luc2VydFRleHQ6KGlk
KXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJlcGxhY2VtZW50UmFuZ2UgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xMi4zKSk7CistIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMykpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWR3
cml0ZSwgc2V0dGVyPV9zZXRVc2VTeXN0ZW1BcHBlYXJhbmNlOikgQk9PTCBfdXNlU3lzdGVtQXBw
ZWFyYW5jZSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmVhZG9ubHkpIE5TTWVudSAqX2FjdGl2ZU1lbnUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSk7CisKKy0gKHZvaWQpX3NldEhlYWRlckJhbm5lckhlaWdodDooaW50KWhl
aWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMpKTsKKy0gKHZvaWQpX3NldEZvb3Rl
ckJhbm5lckhlaWdodDooaW50KWhlaWdodCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEyLjMp
KTsKKy0gKHZvaWQpX2RvQWZ0ZXJQcm9jZXNzaW5nQWxsUGVuZGluZ01vdXNlRXZlbnRzOihkaXNw
YXRjaF9ibG9ja190KWFjdGlvbiBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpKTsKKyNl
bmRpZgorCistICh2b2lkKV9yZXF1ZXN0QWN0aXZlTm93UGxheWluZ1Nlc3Npb25JbmZvOih2b2lk
KF4pKEJPT0wsIEJPT0wsIE5TU3RyaW5nKiwgZG91YmxlLCBkb3VibGUsIE5TSW50ZWdlcikpY2Fs
bGJhY2sgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKDExLjMpKTsKKworLSAo
dm9pZClfc2V0UGFnZVNjYWxlOihDR0Zsb2F0KXNjYWxlIHdpdGhPcmlnaW46KENHUG9pbnQpb3Jp
Z2luIFdLX0FQSV9BVkFJTEFCTEUoaW9zKDEwLjMpKTsKKy0gKENHRmxvYXQpX3BhZ2VTY2FsZSBX
S19BUElfQVZBSUxBQkxFKGlvcygxMC4zKSk7CisKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxBQkxF
KG1hY29zKDEwLjEyKSwgaW9zKDEwLjApKTsKKy0gKHZvaWQpX2RvQWZ0ZXJOZXh0UHJlc2VudGF0
aW9uVXBkYXRlV2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZUZvclRlc3Rpbmc6KHZvaWQg
KF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3Mo
MTIuMCkpOworLSAodm9pZClfZG9BZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVXaXRob3V0V2Fp
dGluZ0ZvclBhaW50aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jayBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjEyLjMpLCBpb3MoMTAuMykpOworLSAodm9pZClfZG9BZnRlck5leHRWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGU6KHZvaWQgKF4pKHZvaWQpKXVwZGF0ZUJsb2NrIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOworCistICh2b2lkKV9kaXNhYmxlQmFj
a0ZvcndhcmRTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTIuMyksIGlvcygxMC4zKSk7CistICh2b2lkKV9leGVjdXRlRWRpdENvbW1hbmQ6KE5T
U3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBjb21wbGV0aW9u
Oih2b2lkICheKShCT09MKSljb21wbGV0aW9uIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMu
NCksIGlvcygxMS4zKSk7CisKKy0gKHZvaWQpX2RlbnlOZXh0VXNlck1lZGlhUmVxdWVzdCBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjApKTsKKworLSAoQk9PTClfYmVnaW5C
YWNrU3dpcGVGb3JUZXN0aW5nOworLSAoQk9PTClfY29tcGxldGVCYWNrU3dpcGVGb3JUZXN0aW5n
OworLSAodm9pZClfc2V0RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGlu
ZzsKKworLSAodm9pZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29s
dXRpb25Gb3JUZXN0aW5nOihCT09MKXJlc29sdmVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAu
MTQuNCksIGlvcygxMi4yKSk7CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9P
TCBfaGFzSW5zcGVjdG9yRnJvbnRlbmQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwg
aW9zKDEyLjIpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgX1dLSW5zcGVjdG9y
ICpfaW5zcGVjdG9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIF9XS0ZyYW1lSGFuZGxlICpfbWFpbkZy
YW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CisKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCB3ZWFrLCBzZXR0ZXI9X3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZTopIGlkIDxfV0tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU+IF90ZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEp
KTsKKy0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dL
VGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKilzbmFwc2hvdENvbmZpZ3VyYXRpb24gY29t
cGxldGlvbjoodm9pZCheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxF
KG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfY29tcGxldGVU
ZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0ZW0gY29tcGxldGlv
bjoodm9pZCheKShCT09MIHN1Y2Nlc3MpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rpbmc6KSBC
T09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOworCistICh2b2lkKV9wcm9jZXNzV2lsbFN1c3BlbmRJ
bW1pbmVudGx5Rm9yVGVzdGluZzsKKy0gKHZvaWQpX3Byb2Nlc3NEaWRSZXN1bWVGb3JUZXN0aW5n
OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNTZXJ2aWNlV29ya2Vy
QmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBCT09MIF9oYXNTZXJ2aWNlV29ya2VyRm9yZWdyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZyBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9p
ZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpc3RhdGUgV0tfQVBJX0FWQUlMQUJM
RShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKworQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdUZXN0aW5nLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YTNjZGFkZTNhNjkyNWEyYTkzOWM0ODJkZmFj
NGVhMjA4ZDgxNDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJXS1dl
YlZpZXdUZXN0aW5nSU9TLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nTWFjLmgiCi0KLUBp
bnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmcpCi0KLS0gKHZvaWQpX3NldFBhZ2VTY2FsZToo
Q0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbjsKLS0gKENHRmxvYXQpX3Bh
Z2VTY2FsZTsKLQotLSAodm9pZClfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9y
VGVzdGluZzooQk9PTCllbmFibGVkOwotLSAoTlNEaWN0aW9uYXJ5ICopX2NvbnRlbnRzT2ZVc2Vy
SW50ZXJmYWNlSXRlbTooTlNTdHJpbmcgKil1c2VySW50ZXJmYWNlSXRlbTsKLQotLSAodm9pZClf
cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbzoodm9pZCheKShCT09MLCBCT09MLCBO
U1N0cmluZyosIGRvdWJsZSwgZG91YmxlLCBOU0ludGVnZXIpKWNhbGxiYWNrOwotCi0tICh2b2lk
KV9kb0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRS
ZXNpemVGb3JUZXN0aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jazsKLS0gKHZvaWQpX2Rv
QWZ0ZXJOZXh0VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlOih2b2lkICheKSh2b2lkKSl1cGRhdGVC
bG9jazsKLQotLSAodm9pZClfZGlzYWJsZUJhY2tGb3J3YXJkU25hcHNob3RWb2xhdGlsaXR5Rm9y
VGVzdGluZzsKLQotLSAodm9pZClfZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0OwotCi0tIChCT09M
KV9iZWdpbkJhY2tTd2lwZUZvclRlc3Rpbmc7Ci0tIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZv
clRlc3Rpbmc7Ci0tICh2b2lkKV9zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZzooQk9PTClkZWZl
cnNMb2FkaW5nOwotCi0tICh2b2lkKV9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlX
aXRoUmVzb2x1dGlvbkZvclRlc3Rpbmc6KEJPT0wpcmVzb2x2ZWQ7Ci0KLUBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzSW5zcGVjdG9yRnJvbnRlbmQ7Ci0KLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNjcm9sbGluZ1VwZGF0ZXNEaXNhYmxlZEZvclRlc3Rp
bmc6KSBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWRGb3JUZXN0aW5nOwotCi0tICh2b2lk
KV9wcm9jZXNzV2lsbFN1c3BlbmRJbW1pbmVudGx5Rm9yVGVzdGluZzsKLS0gKHZvaWQpX3Byb2Nl
c3NEaWRSZXN1bWVGb3JUZXN0aW5nOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBC
T09MIF9oYXNTZXJ2aWNlV29ya2VyQmFja2dyb3VuZEFjdGl2aXR5Rm9yVGVzdGluZzsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfaGFzU2VydmljZVdvcmtlckZvcmVncm91
bmRBY3Rpdml0eUZvclRlc3Rpbmc7Ci0tICh2b2lkKV9zZXRBc3NlcnRpb25TdGF0ZUZvclRlc3Rp
bmc6KGludClzdGF0ZTsKLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1Rlc3RpbmcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNGYwMTlhODMxMDM2YWU0MTY3MTU1YTVhYzc2ZTE4NWEwZDdjNzk1Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3VGVzdGluZy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDIw
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IldLV2ViVmlld1Rlc3RpbmcuaCIKLQotI2ltcG9ydCAiVXNlck1lZGlhUHJvY2Vzc01hbmFnZXIu
aCIKLSNpbXBvcnQgIlZpZXdHZXN0dXJlQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV0tXZWJWaWV3
SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCAiV2ViUHJvY2Vz
c1Bvb2wuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgotI2ltcG9ydCAiV2ViVmlld0lt
cGwuaCIKLSNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS0lu
c3BlY3RvckludGVybmFsLmgiCi0jaW1wb3J0IDxXZWJDb3JlL1ZhbGlkYXRpb25CdWJibGUuaD4K
LQotCi1AaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IChXS1Rlc3RpbmcpCi0KLS0gKHZvaWQpX3Nl
dFBhZ2VTY2FsZTooQ0dGbG9hdClzY2FsZSB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbgotewot
ICAgIF9wYWdlLT5zY2FsZVBhZ2Uoc2NhbGUsIFdlYkNvcmU6OnJvdW5kZWRJbnRQb2ludChvcmln
aW4pKTsKLX0KLQotLSAoQ0dGbG9hdClfcGFnZVNjYWxlCi17Ci0gICAgcmV0dXJuIF9wYWdlLT5w
YWdlU2NhbGVGYWN0b3IoKTsKLX0KLQotLSAodm9pZClfc2V0Q29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkRm9yVGVzdGluZzooQk9PTCllbmFibGVkCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBbX2NvbnRlbnRWaWV3IHNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZDplbmFibGVkXTsKLSNlbHNlCi0gICAgX2ltcGwtPnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChlbmFibGVkKTsKLSNlbmRpZgotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfY29udGVu
dHNPZlVzZXJJbnRlcmZhY2VJdGVtOihOU1N0cmluZyAqKXVzZXJJbnRlcmZhY2VJdGVtCi17Ci0g
ICAgaWYgKFt1c2VySW50ZXJmYWNlSXRlbSBpc0VxdWFsVG9TdHJpbmc6QCJ2YWxpZGF0aW9uQnVi
YmxlIl0pIHsKLSAgICAgICAgYXV0byogdmFsaWRhdGlvbkJ1YmJsZSA9IF9wYWdlLT52YWxpZGF0
aW9uQnViYmxlKCk7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsaWRhdGlvbkJ1YmJsZSA/
IHZhbGlkYXRpb25CdWJibGUtPm1lc3NhZ2UoKSA6IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIGRv
dWJsZSBmb250U2l6ZSA9IHZhbGlkYXRpb25CdWJibGUgPyB2YWxpZGF0aW9uQnViYmxlLT5mb250
U2l6ZSgpIDogMDsKLSAgICAgICAgcmV0dXJuIEB7IHVzZXJJbnRlcmZhY2VJdGVtOiBAeyBAIm1l
c3NhZ2UiOiAoTlNTdHJpbmcgKiltZXNzYWdlLCBAImZvbnRTaXplIjogW05TTnVtYmVyIG51bWJl
cldpdGhEb3VibGU6Zm9udFNpemVdIH0gfTsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9jb250ZW50c09mVXNlckludGVyZmFjZUl0
ZW06KE5TU3RyaW5nICopdXNlckludGVyZmFjZUl0ZW1dOwotI2Vsc2UKLSAgICByZXR1cm4gbmls
OwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3JlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbklu
Zm86KHZvaWQoXikoQk9PTCwgQk9PTCwgTlNTdHJpbmcqLCBkb3VibGUsIGRvdWJsZSwgTlNJbnRl
Z2VyKSljYWxsYmFjawotewotICAgIGlmICghX3BhZ2UpIHsKLSAgICAgICAgY2FsbGJhY2soTk8s
IE5PLCBAIiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCksIDApOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgYXV0byBoYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNhbGxiYWNrKTsKLSAg
ICBhdXRvIGxvY2FsQ2FsbGJhY2sgPSBXZWJLaXQ6Ok5vd1BsYXlpbmdJbmZvQ2FsbGJhY2s6OmNy
ZWF0ZShbaGFuZGxlcl0oYm9vbCBhY3RpdmUsIGJvb2wgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0Fw
cGxpY2F0aW9uLCBTdHJpbmcgdGl0bGUsIGRvdWJsZSBkdXJhdGlvbiwgZG91YmxlIGVsYXBzZWRU
aW1lLCB1aW50NjRfdCB1bmlxdWVJZGVudGlmaWVyLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3IpIHsKLSAgICAgICAgaGFuZGxlcihhY3RpdmUsIHJlZ2lzdGVyZWRBc05vd1BsYXlpbmdBcHBs
aWNhdGlvbiwgdGl0bGUsIGR1cmF0aW9uLCBlbGFwc2VkVGltZSwgdW5pcXVlSWRlbnRpZmllcik7
Ci0gICAgfSk7Ci0KLSAgICBfcGFnZS0+cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5m
byhXVEZNb3ZlKGxvY2FsQ2FsbGJhY2spKTsKLX0KLQotLSAoQk9PTClfc2Nyb2xsaW5nVXBkYXRl
c0Rpc2FibGVkRm9yVGVzdGluZwotewotICAgIC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRl
OwotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClfc2V0U2Nyb2xsaW5nVXBkYXRlc0Rpc2Fi
bGVkRm9yVGVzdGluZzooQk9PTClkaXNhYmxlZAotewotfQotCi0tICh2b2lkKV9kb0FmdGVyTmV4
dFByZXNlbnRhdGlvblVwZGF0ZVdpdGhvdXRXYWl0aW5nRm9yQW5pbWF0ZWRSZXNpemVGb3JUZXN0
aW5nOih2b2lkICheKSh2b2lkKSl1cGRhdGVCbG9jawotewotICAgIFtzZWxmIF9pbnRlcm5hbERv
QWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlOnVwZGF0ZUJsb2NrIHdpdGhvdXRXYWl0aW5nRm9y
UGFpbnRpbmc6Tk8gd2l0aG91dFdhaXRpbmdGb3JBbmltYXRlZFJlc2l6ZTpZRVNdOwotfQotCi0t
ICh2b2lkKV9kb0FmdGVyTmV4dFZpc2libGVDb250ZW50UmVjdFVwZGF0ZToodm9pZCAoXikodm9p
ZCkpdXBkYXRlQmxvY2sKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIF92aXNpYmxl
Q29udGVudFJlY3RVcGRhdGVDYWxsYmFja3MuYXBwZW5kKG1ha2VCbG9ja1B0cih1cGRhdGVCbG9j
aykpOwotICAgIFtzZWxmIF9zY2hlZHVsZVZpc2libGVDb250ZW50UmVjdFVwZGF0ZV07Ci0jZWxz
ZQotICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIHVwZGF0ZUJs
b2NrKTsKLSNlbmRpZgotfQotCi0tICh2b2lkKV9kaXNhYmxlQmFja0ZvcndhcmRTbmFwc2hvdFZv
bGF0aWxpdHlGb3JUZXN0aW5nCi17Ci0gICAgV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6c2lu
Z2xldG9uKCkuc2V0RGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcodHJ1ZSk7Ci19
Ci0KLS0gKEJPT0wpX2JlZ2luQmFja1N3aXBlRm9yVGVzdGluZwotewotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICByZXR1cm4gX2ltcGwtPmJlZ2luQmFja1N3aXBlRm9yVGVzdGluZygpOwotI2Vsc2UK
LSAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuIE5POwotICAgIHJl
dHVybiBfZ2VzdHVyZUNvbnRyb2xsZXItPmJlZ2luU2ltdWxhdGVkU3dpcGVJbkRpcmVjdGlvbkZv
clRlc3RpbmcoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OlN3aXBlRGlyZWN0aW9uOjpC
YWNrKTsKLSNlbmRpZgotfQotCi0tIChCT09MKV9jb21wbGV0ZUJhY2tTd2lwZUZvclRlc3RpbmcK
LXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIF9pbXBsLT5jb21wbGV0ZUJhY2tTd2lw
ZUZvclRlc3RpbmcoKTsKLSNlbHNlCi0gICAgaWYgKCFfZ2VzdHVyZUNvbnRyb2xsZXIpCi0gICAg
ICAgIHJldHVybiBOTzsKLSAgICByZXR1cm4gX2dlc3R1cmVDb250cm9sbGVyLT5jb21wbGV0ZVNp
bXVsYXRlZFN3aXBlSW5EaXJlY3Rpb25Gb3JUZXN0aW5nKFdlYktpdDo6Vmlld0dlc3R1cmVDb250
cm9sbGVyOjpTd2lwZURpcmVjdGlvbjo6QmFjayk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfc2V0
RGVmZXJzTG9hZGluZ0ZvclRlc3Rpbmc6KEJPT0wpZGVmZXJzTG9hZGluZwotewotICAgIF9wYWdl
LT5zZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZyhkZWZlcnNMb2FkaW5nKTsKLX0KLQotLSAodm9p
ZClfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0
aW5nOihCT09MKXJlc29sdmVkCi17Ci0gICAgX3Jlc29sdXRpb25Gb3JTaGFyZVNoZWV0SW1tZWRp
YXRlQ29tcGxldGlvbkZvclRlc3RpbmcgPSByZXNvbHZlZDsKLX0KLQotLSAoQk9PTClfaGFzSW5z
cGVjdG9yRnJvbnRlbmQKLXsKLSAgICByZXR1cm4gX3BhZ2UgJiYgX3BhZ2UtPmhhc0luc3BlY3Rv
ckZyb250ZW5kKCk7Ci19Ci0KLS0gKHZvaWQpX3Byb2Nlc3NXaWxsU3VzcGVuZEltbWluZW50bHlG
b3JUZXN0aW5nCi17Ci0gICAgaWYgKF9wYWdlKQotICAgICAgICBfcGFnZS0+cHJvY2VzcygpLnNl
bmRQcmVwYXJlVG9TdXNwZW5kKFdlYktpdDo6SXNTdXNwZW5zaW9uSW1taW5lbnQ6OlllcywgW10g
eyB9KTsKLX0KLQotLSAodm9pZClfcHJvY2Vzc0RpZFJlc3VtZUZvclRlc3RpbmcKLXsKLSAgICBp
ZiAoX3BhZ2UpCi0gICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuc2VuZFByb2Nlc3NEaWRSZXN1bWUo
KTsKLX0KLQotLSAodm9pZClfc2V0QXNzZXJ0aW9uU3RhdGVGb3JUZXN0aW5nOihpbnQpdmFsdWUK
LXsKLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+cHJvY2Vz
cygpLnNldEFzc2VydGlvblN0YXRlRm9yVGVzdGluZyhzdGF0aWNfY2FzdDxXZWJLaXQ6OkFzc2Vy
dGlvblN0YXRlPih2YWx1ZSkpOwotfQotCi0tIChCT09MKV9oYXNTZXJ2aWNlV29ya2VyQmFja2dy
b3VuZEFjdGl2aXR5Rm9yVGVzdGluZwotewotI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKLSAg
ICByZXR1cm4gX3BhZ2UgPyBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuaGFzU2Vydmlj
ZVdvcmtlckJhY2tncm91bmRBY3Rpdml0eUZvclRlc3RpbmcoKSA6IGZhbHNlOwotI2Vsc2UKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotLSAoQk9PTClfaGFzU2VydmljZVdvcmtlckZv
cmVncm91bmRBY3Rpdml0eUZvclRlc3RpbmcKLXsKLSNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
Ci0gICAgcmV0dXJuIF9wYWdlID8gX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmhhc1Nl
cnZpY2VXb3JrZXJGb3JlZ3JvdW5kQWN0aXZpdHlGb3JUZXN0aW5nKCkgOiBmYWxzZTsKLSNlbHNl
Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2RlbnlOZXh0VXNlck1l
ZGlhUmVxdWVzdAotewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgV2ViS2l0OjpVc2Vy
TWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuZGVueU5leHRVc2VyTWVkaWFSZXF1ZXN0
KCk7Ci0jZW5kaWYKLX0KLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTIyOWEzMjUzMDQwZmZjNjhhZDc4NGU3ZmE4NzI5ODM0MjM4ZDVkMC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+Ci0KLSNp
ZiBUQVJHRVRfT1NfSVBIT05FCi0KLUBpbnRlcmZhY2UgV0tXZWJWaWV3IChXS1Rlc3RpbmdJT1Mp
Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKnRleHRDb250ZW50
VHlwZUZvclRlc3Rpbmc7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TU3RyaW5n
ICpzZWxlY3RGb3JtUG9wb3ZlclRpdGxlOwotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5
KSBOU1N0cmluZyAqZm9ybUlucHV0TGFiZWw7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TQXJyYXk8TlNWYWx1ZSAqPiAqX3VpVGV4dFNlbGVjdGlvblJlY3RzOwotQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBDR1JlY3QgX2lucHV0Vmlld0JvdW5kczsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNTdHJpbmcgKl9zY3JvbGxpbmdUcmVlQXNUZXh0Owot
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU051bWJlciAqX3N0YWJsZVN0YXRlT3Zl
cnJpZGU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIENHUmVjdCBfZHJhZ0NhcmV0
UmVjdDsKLQotLSAodm9pZClrZXlib2FyZEFjY2Vzc29yeUJhck5leHQ7Ci0tICh2b2lkKWtleWJv
YXJkQWNjZXNzb3J5QmFyUHJldmlvdXM7Ci0tICh2b2lkKWRpc21pc3NGb3JtQWNjZXNzb3J5Vmll
dzsKLS0gKHZvaWQpX2Rpc21pc3NGaWxlUGlja2VyOwotLSAodm9pZClzZWxlY3RGb3JtQWNjZXNz
b3J5UGlja2VyUm93OihpbnQpcm93SW5kZXg7Ci0KLS0gKHZvaWQpc2V0VGltZVBpY2tlclZhbHVl
VG9Ib3VyOihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGU7Ci0KLS0gKHZv
aWQpYXBwbHlBdXRvY29ycmVjdGlvbjooTlNTdHJpbmcgKiluZXdTdHJpbmcgdG9TdHJpbmc6KE5T
U3RyaW5nICopb2xkU3RyaW5nIHdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkp
Y29tcGxldGlvbkhhbmRsZXI7Ci0KLS0gKHZvaWQpX2RpZFNob3dDb250ZXh0TWVudTsKLS0gKHZv
aWQpX2RpZERpc21pc3NDb250ZXh0TWVudTsKLS0gKHZvaWQpX2RvQWZ0ZXJSZXNldHRpbmdTaW5n
bGVUYXBHZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbjsKLQotLSAoTlNEaWN0aW9uYXJ5
ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25lZCBsb25nIGxvbmcpbGF5ZXJJRDsK
LS0gKHZvaWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjooQ0dQb2ludClsb2Nh
dGlvbjsKLS0gKHZvaWQpX3NpbXVsYXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dDsKLQot
LSAodm9pZClfZG9BZnRlclJlY2VpdmluZ0VkaXREcmFnU25hcHNob3RGb3JUZXN0aW5nOihkaXNw
YXRjaF9ibG9ja190KWFjdGlvbjsKLQotLSAodm9pZClfdHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rp
b25PbkVsZW1lbnQ6KHVpbnQ2NF90KWVsZW1lbnRJRCBkb2N1bWVudDoodWludDY0X3QpZG9jdW1l
bnRJRCBwYWdlOih1aW50NjRfdClwYWdlSUQ7Ci0KLS0gKHZvaWQpX3NldERldmljZU9yaWVudGF0
aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9yVGVzdGluZzooQk9PTCAoXikodm9pZCkpaGFuZGxl
cjsKLQotQGVuZAotCi0jZW5kaWYgLy8gVEFSR0VUX09TX0lQSE9ORQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGFiYzZmYzBkMzVkMGE0ZWQwMjhmNjg1ZWM0MDFh
MDUzYzY4M2I3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQor
KysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJjb25maWcuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmdJT1MuaCIKLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KLSNpbXBvcnQgIlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHkuaCIKLSNpbXBvcnQgIlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCIKLSNpbXBv
cnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldLV2ViVmlld0lu
dGVybmFsLmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNpbXBvcnQgIl9XS0FjdGl2YXRl
ZEVsZW1lbnRJbmZvSW50ZXJuYWwuaCIKLQotQGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tU
ZXN0aW5nSU9TKQotCi0tICh2b2lkKWtleWJvYXJkQWNjZXNzb3J5QmFyTmV4dAotewotICAgIFtf
Y29udGVudFZpZXcgYWNjZXNzb3J5VGFiOllFU107Ci19Ci0KLS0gKHZvaWQpa2V5Ym9hcmRBY2Nl
c3NvcnlCYXJQcmV2aW91cwotewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5VGFiOk5PXTsK
LX0KLQotLSAodm9pZClhcHBseUF1dG9jb3JyZWN0aW9uOihOU1N0cmluZyAqKW5ld1N0cmluZyB0
b1N0cmluZzooTlNTdHJpbmcgKilvbGRTdHJpbmcgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIFtfY29udGVudFZpZXcgYXBwbHlB
dXRvY29ycmVjdGlvbjpuZXdTdHJpbmcgdG9TdHJpbmc6b2xkU3RyaW5nIHdpdGhDb21wbGV0aW9u
SGFuZGxlcjpbY2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0
aW9uSGFuZGxlcildIChVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHMpIHsKLSAgICAgICAg
Y2FwdHVyZWRDb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH1dOwotfQotCi0tICh2b2lkKWRpc21p
c3NGb3JtQWNjZXNzb3J5VmlldwotewotICAgIFtfY29udGVudFZpZXcgYWNjZXNzb3J5RG9uZV07
Ci19Ci0KLS0gKHZvaWQpX2Rpc21pc3NGaWxlUGlja2VyCi17Ci0gICAgW19jb250ZW50VmlldyBk
aXNtaXNzRmlsZVBpY2tlcl07Ci19Ci0KLS0gKHZvaWQpc2V0VGltZVBpY2tlclZhbHVlVG9Ib3Vy
OihOU0ludGVnZXIpaG91ciBtaW51dGU6KE5TSW50ZWdlciltaW51dGUKLXsKLSAgICBbX2NvbnRl
bnRWaWV3IHNldFRpbWVQaWNrZXJWYWx1ZVRvSG91cjpob3VyIG1pbnV0ZTptaW51dGVdOwotfQot
Ci0tICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6KGludClyb3dJbmRleAotewot
ICAgIFtfY29udGVudFZpZXcgc2VsZWN0Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzpyb3dJbmRleF07
Ci19Ci0KLS0gKE5TU3RyaW5nICopc2VsZWN0Rm9ybVBvcG92ZXJUaXRsZQotewotICAgIHJldHVy
biBbX2NvbnRlbnRWaWV3IHNlbGVjdEZvcm1Qb3BvdmVyVGl0bGVdOwotfQotCi0tIChOU1N0cmlu
ZyAqKXRleHRDb250ZW50VHlwZUZvclRlc3RpbmcKLXsKLSAgICByZXR1cm4gW19jb250ZW50Vmll
dyB0ZXh0Q29udGVudFR5cGVGb3JUZXN0aW5nXTsKLX0KLQotLSAoTlNTdHJpbmcgKilmb3JtSW5w
dXRMYWJlbAotewotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IGZvcm1JbnB1dExhYmVsXTsKLX0K
LQotLSAodm9pZClfZGlkU2hvd0NvbnRleHRNZW51Ci17Ci0gICAgLy8gRm9yIHN1YmNsYXNzZXMg
dG8gb3ZlcnJpZGUuCi19Ci0KLS0gKHZvaWQpX2RpZERpc21pc3NDb250ZXh0TWVudQotewotICAg
IC8vIEZvciBzdWJjbGFzc2VzIHRvIG92ZXJyaWRlLgotfQotCi0tIChDR1JlY3QpX2lucHV0Vmll
d0JvdW5kcwotewotICAgIHJldHVybiBfaW5wdXRWaWV3Qm91bmRzOwotfQotCi0tIChOU0FycmF5
PE5TVmFsdWUgKj4gKilfdWlUZXh0U2VsZWN0aW9uUmVjdHMKLXsKLSAgICAvLyBGb3JjZSB0aGUg
c2VsZWN0aW9uIHZpZXcgdG8gdXBkYXRlIGlmIG5lZWRlZC4KLSAgICBbX2NvbnRlbnRWaWV3IF91
cGRhdGVDaGFuZ2VkU2VsZWN0aW9uXTsKLQotICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF91aVRl
eHRTZWxlY3Rpb25SZWN0c107Ci19Ci0KLS0gKE5TU3RyaW5nICopX3Njcm9sbGluZ1RyZWVBc1Rl
eHQKLXsKLSAgICBXZWJLaXQ6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkqIGNvb3Jk
aW5hdG9yID0gX3BhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkoKTsKLSAgICBpZiAoIWNv
b3JkaW5hdG9yKQotICAgICAgICByZXR1cm4gQCIiOwotCi0gICAgcmV0dXJuIGNvb3JkaW5hdG9y
LT5zY3JvbGxpbmdUcmVlQXNUZXh0KCk7Ci19Ci0KLS0gKE5TTnVtYmVyICopX3N0YWJsZVN0YXRl
T3ZlcnJpZGUKLXsKLSAgICAvLyBGb3Igc3ViY2xhc3NlcyB0byBvdmVycmlkZS4KLSAgICByZXR1
cm4gbmlsOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfcHJvcGVydGllc09mTGF5ZXJXaXRoSUQ6
KHVuc2lnbmVkIGxvbmcgbG9uZylsYXllcklECi17Ci0gICAgQ0FMYXllciogbGF5ZXIgPSBkb3du
Y2FzdDxXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk+KCpfcGFnZS0+ZHJh
d2luZ0FyZWEoKSkubGF5ZXJXaXRoSURGb3JUZXN0aW5nKGxheWVySUQpOwotICAgIGlmICghbGF5
ZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICByZXR1cm4gQHsKLSAgICAgICAgQCJib3Vu
ZHMiIDogQHsKLSAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmJvdW5kcy5vcmlnaW4ueCksCi0g
ICAgICAgICAgICBAInkiIDogQChsYXllci5ib3VuZHMub3JpZ2luLngpLAotICAgICAgICAgICAg
QCJ3aWR0aCIgOiBAKGxheWVyLmJvdW5kcy5zaXplLndpZHRoKSwKLSAgICAgICAgICAgIEAiaGVp
Z2h0IiA6IEAobGF5ZXIuYm91bmRzLnNpemUuaGVpZ2h0KSwKLQotICAgICAgICB9LAotICAgICAg
ICBAInBvc2l0aW9uIiA6IEB7Ci0gICAgICAgICAgICBAIngiIDogQChsYXllci5wb3NpdGlvbi54
KSwKLSAgICAgICAgICAgIEAieSIgOiBAKGxheWVyLnBvc2l0aW9uLnkpLAotICAgICAgICB9LAot
ICAgICAgICBAInpQb3NpdGlvbiIgOiBAKGxheWVyLnpQb3NpdGlvbiksCi0gICAgICAgIEAiYW5j
aG9yUG9pbnQiIDogQHsKLSAgICAgICAgICAgIEAieCIgOiBAKGxheWVyLmFuY2hvclBvaW50Lngp
LAotICAgICAgICAgICAgQCJ5IiA6IEAobGF5ZXIuYW5jaG9yUG9pbnQueSksCi0gICAgICAgIH0s
Ci0gICAgICAgIEAiYW5jaG9yUG9pbnRaIiA6IEAobGF5ZXIuYW5jaG9yUG9pbnRaKSwKLSAgICAg
ICAgQCJ0cmFuc2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIudHJhbnNm
b3JtLm0xMSksCi0gICAgICAgICAgICBAIm0xMiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMTIpLAot
ICAgICAgICAgICAgQCJtMTMiIDogQChsYXllci50cmFuc2Zvcm0ubTEzKSwKLSAgICAgICAgICAg
IEAibTE0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0xNCksCi0KLSAgICAgICAgICAgIEAibTIxIiA6
IEAobGF5ZXIudHJhbnNmb3JtLm0yMSksCi0gICAgICAgICAgICBAIm0yMiIgOiBAKGxheWVyLnRy
YW5zZm9ybS5tMjIpLAotICAgICAgICAgICAgQCJtMjMiIDogQChsYXllci50cmFuc2Zvcm0ubTIz
KSwKLSAgICAgICAgICAgIEAibTI0IiA6IEAobGF5ZXIudHJhbnNmb3JtLm0yNCksCi0KLSAgICAg
ICAgICAgIEAibTMxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm0zMSksCi0gICAgICAgICAgICBAIm0z
MiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tMzIpLAotICAgICAgICAgICAgQCJtMzMiIDogQChsYXll
ci50cmFuc2Zvcm0ubTMzKSwKLSAgICAgICAgICAgIEAibTM0IiA6IEAobGF5ZXIudHJhbnNmb3Jt
Lm0zNCksCi0KLSAgICAgICAgICAgIEAibTQxIiA6IEAobGF5ZXIudHJhbnNmb3JtLm00MSksCi0g
ICAgICAgICAgICBAIm00MiIgOiBAKGxheWVyLnRyYW5zZm9ybS5tNDIpLAotICAgICAgICAgICAg
QCJtNDMiIDogQChsYXllci50cmFuc2Zvcm0ubTQzKSwKLSAgICAgICAgICAgIEAibTQ0IiA6IEAo
bGF5ZXIudHJhbnNmb3JtLm00NCksCi0gICAgICAgIH0sCi0gICAgICAgIEAic3VibGF5ZXJUcmFu
c2Zvcm0iIDogQHsKLSAgICAgICAgICAgIEAibTExIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zv
cm0ubTExKSwKLSAgICAgICAgICAgIEAibTEyIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0u
bTEyKSwKLSAgICAgICAgICAgIEAibTEzIiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTEz
KSwKLSAgICAgICAgICAgIEAibTE0IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTE0KSwK
LQotICAgICAgICAgICAgQCJtMjEiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjEpLAot
ICAgICAgICAgICAgQCJtMjIiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjIpLAotICAg
ICAgICAgICAgQCJtMjMiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjMpLAotICAgICAg
ICAgICAgQCJtMjQiIDogQChsYXllci5zdWJsYXllclRyYW5zZm9ybS5tMjQpLAotCi0gICAgICAg
ICAgICBAIm0zMSIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMSksCi0gICAgICAgICAg
ICBAIm0zMiIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMiksCi0gICAgICAgICAgICBA
Im0zMyIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zMyksCi0gICAgICAgICAgICBAIm0z
NCIgOiBAKGxheWVyLnN1YmxheWVyVHJhbnNmb3JtLm0zNCksCi0KLSAgICAgICAgICAgIEAibTQx
IiA6IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQxKSwKLSAgICAgICAgICAgIEAibTQyIiA6
IEAobGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQyKSwKLSAgICAgICAgICAgIEAibTQzIiA6IEAo
bGF5ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQzKSwKLSAgICAgICAgICAgIEAibTQ0IiA6IEAobGF5
ZXIuc3VibGF5ZXJUcmFuc2Zvcm0ubTQ0KSwKLSAgICAgICAgfSwKLQotICAgICAgICBAImhpZGRl
biIgOiBAKGxheWVyLmhpZGRlbiksCi0gICAgICAgIEAiZG91YmxlU2lkZWQiIDogQChsYXllci5k
b3VibGVTaWRlZCksCi0gICAgICAgIEAibWFza3NUb0JvdW5kcyIgOiBAKGxheWVyLm1hc2tzVG9C
b3VuZHMpLAotICAgICAgICBAImNvbnRlbnRzU2NhbGUiIDogQChsYXllci5jb250ZW50c1NjYWxl
KSwKLSAgICAgICAgQCJyYXN0ZXJpemF0aW9uU2NhbGUiIDogQChsYXllci5yYXN0ZXJpemF0aW9u
U2NhbGUpLAotICAgICAgICBAIm9wYXF1ZSIgOiBAKGxheWVyLm9wYXF1ZSksCi0gICAgICAgIEAi
b3BhY2l0eSIgOiBAKGxheWVyLm9wYWNpdHkpLAotICAgIH07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0
ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbgotewot
ICAgIFtfY29udGVudFZpZXcgX2RvQWZ0ZXJSZXNldHRpbmdTaW5nbGVUYXBHZXN0dXJlOmFjdGlv
bl07Ci19Ci0KLS0gKHZvaWQpX2RvQWZ0ZXJSZWNlaXZpbmdFZGl0RHJhZ1NuYXBzaG90Rm9yVGVz
dGluZzooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KLXsKLSAgICBbX2NvbnRlbnRWaWV3IF9kb0Fm
dGVyUmVjZWl2aW5nRWRpdERyYWdTbmFwc2hvdEZvclRlc3Rpbmc6YWN0aW9uXTsKLX0KLQotLSAo
Q0dSZWN0KV9kcmFnQ2FyZXRSZWN0Ci17Ci0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKLSAgICBy
ZXR1cm4gX3BhZ2UtPmN1cnJlbnREcmFnQ2FyZXRSZWN0KCk7Ci0jZWxzZQotICAgIHJldHVybiBD
R1JlY3RaZXJvOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX3NpbXVsYXRlTG9uZ1ByZXNzQWN0aW9u
QXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgotewotICAgIFtfY29udGVudFZpZXcgX3NpbXVs
YXRlTG9uZ1ByZXNzQWN0aW9uQXRMb2NhdGlvbjpsb2NhdGlvbl07Ci19Ci0KLS0gKHZvaWQpX3Np
bXVsYXRlVGV4dEVudGVyZWQ6KE5TU3RyaW5nICopdGV4dAotewotICAgIFtfY29udGVudFZpZXcg
X3NpbXVsYXRlVGV4dEVudGVyZWQ6dGV4dF07Ci19Ci0KLS0gKHZvaWQpX2R5bmFtaWNVc2VySW50
ZXJmYWNlVHJhaXREaWRDaGFuZ2UKLXsKLSAgICBpZiAoIV9wYWdlKQotICAgICAgICByZXR1cm47
Ci0gICAgX3BhZ2UtPmVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UoKTsKLSAgICBbc2VsZiBf
dXBkYXRlU2Nyb2xsVmlld0JhY2tncm91bmRdOwotfQotCi0tICh2b2lkKV90cmlnZ2VyU3lzdGVt
UHJldmlld0FjdGlvbk9uRWxlbWVudDoodWludDY0X3QpZWxlbWVudElEIGRvY3VtZW50Oih1aW50
NjRfdClkb2N1bWVudElEIHBhZ2U6KHVpbnQ2NF90KXBhZ2VJRAotewotI2lmIFVTRShTWVNURU1f
UFJFVklFVykKLSAgICBpZiAoX3BhZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8qIHByZXZpZXdDb250
cm9sbGVyID0gX3BhZ2UtPnN5c3RlbVByZXZpZXdDb250cm9sbGVyKCkpCi0gICAgICAgICAgICBw
cmV2aWV3Q29udHJvbGxlci0+dHJpZ2dlclN5c3RlbVByZXZpZXdBY3Rpb25XaXRoVGFyZ2V0Rm9y
VGVzdGluZyhlbGVtZW50SUQsIGRvY3VtZW50SUQsIHBhZ2VJRCk7Ci0gICAgfQotI2VuZGlmCi19
Ci0KLS0gKHZvaWQpX3NldERldmljZU9yaWVudGF0aW9uVXNlclBlcm1pc3Npb25IYW5kbGVyRm9y
VGVzdGluZzooQk9PTCAoXikoKSloYW5kbGVyCi17Ci0gICAgRnVuY3Rpb248Ym9vbCgpPiBoYW5k
bGVyV3JhcHBlcjsKLSAgICBpZiAoaGFuZGxlcikKLSAgICAgICAgaGFuZGxlcldyYXBwZXIgPSBb
aGFuZGxlciA9IG1ha2VCbG9ja1B0cihoYW5kbGVyKV0geyByZXR1cm4gaGFuZGxlcigpOyB9Owot
ICAgIF9wYWdlLT5zZXREZXZpY2VPcmllbnRhdGlvblVzZXJQZXJtaXNzaW9uSGFuZGxlckZvclRl
c3RpbmcoV1RGTW92ZShoYW5kbGVyV3JhcHBlcikpOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBQ
TEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZmZkMTU2YTI1NmQ0NTEyNTMyYjk4M2JmZjZiMzZmMWM4MGVmMjBhMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvbWFjL1dLV2ViVmlld1Rlc3RpbmdNYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdC9XS0Jhc2UuaD4KLSNpbXBv
cnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KLQotI2lmICFUQVJHRVRfT1NfSVBIT05FCi0KLUBjbGFz
cyBfV0tGcmFtZUhhbmRsZTsKLQotQGludGVyZmFjZSBXS1dlYlZpZXcgKFdLVGVzdGluZ01hYykK
LQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIF9oYXNBY3RpdmVWaWRlb0Zv
ckNvbnRyb2xzTWFuYWdlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBf
c2hvdWxkUmVxdWVzdENhbmRpZGF0ZXM7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TTWVudSAqX2FjdGl2ZU1lbnU7Ci0KLS0gKHZvaWQpX3JlcXVlc3RDb250cm9sbGVkRWxlbWVu
dElEOwotLSAodm9pZClfaGFuZGxlQ29udHJvbGxlZEVsZW1lbnRJRFJlc3BvbnNlOihOU1N0cmlu
ZyAqKWlkZW50aWZpZXI7Ci0KLS0gKHZvaWQpX2hhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlOihOU1Rl
eHRDaGVja2luZ1Jlc3VsdCAqKWNhbmRpZGF0ZTsKLS0gKHZvaWQpX2RpZEhhbmRsZUFjY2VwdGVk
Q2FuZGlkYXRlOwotCi0tICh2b2lkKV9mb3JjZVJlcXVlc3RDYW5kaWRhdGVzOwotLSAodm9pZClf
ZGlkVXBkYXRlQ2FuZGlkYXRlTGlzdFZpc2liaWxpdHk6KEJPT0wpdmlzaWJsZTsKLQotLSAodm9p
ZClfaW5zZXJ0VGV4dDooaWQpc3RyaW5nIHJlcGxhY2VtZW50UmFuZ2U6KE5TUmFuZ2UpcmVwbGFj
ZW1lbnRSYW5nZTsKLS0gKE5TUmVjdClfY2FuZGlkYXRlUmVjdDsKLQotLSAodm9pZClfc2V0SGVh
ZGVyQmFubmVySGVpZ2h0OihpbnQpaGVpZ2h0OwotLSAodm9pZClfc2V0Rm9vdGVyQmFubmVySGVp
Z2h0OihpbnQpaGVpZ2h0OwotLSAodm9pZClfZG9BZnRlclByb2Nlc3NpbmdBbGxQZW5kaW5nTW91
c2VFdmVudHM6KGRpc3BhdGNoX2Jsb2NrX3QpYWN0aW9uOwotCi1AZW5kCi0KLSNlbmRpZiAvLyAh
VEFSR0VUX09TX0lQSE9ORQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L21hYy9XS1dlYlZpZXdUZXN0aW5nTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5ZjI3OTdlNGVjOTk4MzNjZTA1NGEzOTE5MDFhMmI2MDNjMWFmNzZkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9tYWMvV0tXZWJWaWV3VGVzdGluZ01hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDExNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldL
V2ViVmlld1Rlc3RpbmdNYWMuaCIKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIl9XS0ZyYW1lSGFuZGxlSW50ZXJuYWwuaCIKLQot
QGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nTWFjKQotCi0tICh2b2lkKV9yZXF1
ZXN0Q29udHJvbGxlZEVsZW1lbnRJRAotewotICAgIGlmIChfcGFnZSkKLSAgICAgICAgX3BhZ2Ut
PnJlcXVlc3RDb250cm9sbGVkRWxlbWVudElEKCk7Ci19Ci0KLS0gKHZvaWQpX2hhbmRsZUNvbnRy
b2xsZWRFbGVtZW50SURSZXNwb25zZTooTlNTdHJpbmcgKilpZGVudGlmaWVyCi17Ci0gICAgLy8g
T3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotfQotCi0tICh2b2lkKV9oYW5kbGVBY2NlcHRlZENh
bmRpZGF0ZTooTlNUZXh0Q2hlY2tpbmdSZXN1bHQgKiljYW5kaWRhdGUKLXsKLSAgICBfaW1wbC0+
aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLX0KLQotLSAodm9pZClfZGlkSGFu
ZGxlQWNjZXB0ZWRDYW5kaWRhdGUKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMu
Ci19Ci0KLS0gKHZvaWQpX2RpZFVwZGF0ZUNhbmRpZGF0ZUxpc3RWaXNpYmlsaXR5OihCT09MKXZp
c2libGUKLXsKLSAgICAvLyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCi19Ci0KLS0gKHZvaWQp
X2ZvcmNlUmVxdWVzdENhbmRpZGF0ZXMKLXsKLSAgICBfaW1wbC0+Zm9yY2VSZXF1ZXN0Q2FuZGlk
YXRlc0ZvclRlc3RpbmcoKTsKLX0KLQotLSAoQk9PTClfc2hvdWxkUmVxdWVzdENhbmRpZGF0ZXMK
LXsKLSAgICByZXR1cm4gX2ltcGwtPnNob3VsZFJlcXVlc3RDYW5kaWRhdGVzKCk7Ci19Ci0KLS0g
KHZvaWQpX2luc2VydFRleHQ6KGlkKXN0cmluZyByZXBsYWNlbWVudFJhbmdlOihOU1JhbmdlKXJl
cGxhY2VtZW50UmFuZ2UKLXsKLSAgICBbc2VsZiBpbnNlcnRUZXh0OnN0cmluZyByZXBsYWNlbWVu
dFJhbmdlOnJlcGxhY2VtZW50UmFuZ2VdOwotfQotCi0tIChOU1JlY3QpX2NhbmRpZGF0ZVJlY3QK
LXsKLSAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5mb2N1
c2VkRWxlbWVudFJlY3Q7Ci19Ci0KLS0gKHZvaWQpdmlld0RpZENoYW5nZUVmZmVjdGl2ZUFwcGVh
cmFuY2UKLXsKLSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVyaW5nIFtzdXBlciBpbml0V2l0
aENvZGVyOl0gYW5kIFtzdXBlciBpbml0V2l0aEZyYW1lOl0uCi0gICAgLy8gVGhhdCBpcyBiZWZv
cmUgX2ltcGwgaXMgcmVhZHkgdG8gYmUgdXNlZCwgc28gY2hlY2suIDxyZGFyOi8vcHJvYmxlbS8z
OTYxMTIzNj4KLSAgICBpZiAoIV9pbXBsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfaW1wbC0+
ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpOwotfQotCi0tICh2b2lkKV9zZXRIZWFkZXJC
YW5uZXJIZWlnaHQ6KGludCloZWlnaHQKLXsKLSAgICBfcGFnZS0+c2V0SGVhZGVyQmFubmVySGVp
Z2h0Rm9yVGVzdGluZyhoZWlnaHQpOwotfQotCi0tICh2b2lkKV9zZXRGb290ZXJCYW5uZXJIZWln
aHQ6KGludCloZWlnaHQKLXsKLSAgICBfcGFnZS0+c2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVz
dGluZyhoZWlnaHQpOwotfQotCi0tICh2b2lkKV9kb0FmdGVyUHJvY2Vzc2luZ0FsbFBlbmRpbmdN
b3VzZUV2ZW50czooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb24KLXsKLSAgICBfaW1wbC0+ZG9BZnRl
clByb2Nlc3NpbmdBbGxQZW5kaW5nTW91c2VFdmVudHMoYWN0aW9uKTsKLX0KLQotLSAoTlNNZW51
ICopX2FjdGl2ZU1lbnUKLXsKLSAgICAvLyBGSVhNRTogT25seSB0aGUgRE9NIHBhc3RlIGFjY2Vz
cyBtZW51IGlzIHN1cHBvcnRlZCBmb3Igbm93LiBJbiB0aGUgZnV0dXJlLCBpdCBjb3VsZCBiZQot
ICAgIC8vIGV4dGVuZGVkIHRvIHJlY29nbml6ZSB0aGUgcmVndWxhciBjb250ZXh0IG1lbnUgYXMg
d2VsbC4KLSAgICByZXR1cm4gX2ltcGwtPmRvbVBhc3RlTWVudSgpOwotfQotCi1AZW5kCi0KLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQppbmRleCA3ZDg5MDJlZWI5NjZkZmRiYWQ3ODdk
ODJiYjJkOGVkZmM5YmI3Y2Y4Li5mNTg5ZTlkMzM2MWZhMWZiNjAzNWRhYTEzOTIxNTIyMDE2NmJj
ZTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50
SW1wbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGll
bnRJbXBsQ29jb2EubW0KQEAgLTI4LDcgKzI4LDYgQEAKIAogI2ltcG9ydCAiV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KaW5kZXggMGM1
ZTBmN2Y2YzYwZjdhNGMzZjY4MWUyOWRkNDMwZDUzZDFjMDlkYi4uZGM5Zjc0YzQ5YTZiZWE5ZWRj
MTUwNmM1YWI5NTdlMDA2YTIwN2E1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtNDksNyArNDksNiBAQAogI2ltcG9ydCAiV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbkludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb250ZW50
UHJvdmlkZXJSZWdpc3RyeS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBv
cnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgIldlYkNvbnRleHRNZW51UHJveHkuaCIK
ICNpbXBvcnQgIldlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bklPUy5oIgogI2ltcG9ydCAi
V2ViRWRpdENvbW1hbmRQcm94eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMDViODhkMTlkM2FkMDM4
OWNlMDdiYTUzYWU1YmEyZWQwMTNjODFjYi4uYmM4YWUwMjIxYzRlNjFiNjRhOTdjZTVkNDI4ZjMx
NmQ0ZTA3ODBjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC03MSw3ICs3MSw2IEBACiAjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJu
YWwuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rl
c3RpbmdJT1MuaCIKICNpbXBvcnQgIldlYkF1dG9jb3JyZWN0aW9uQ29udGV4dC5oIgogI2ltcG9y
dCAiV2ViQXV0b2NvcnJlY3Rpb25EYXRhLmgiCiAjaW1wb3J0ICJXZWJEYXRhTGlzdFN1Z2dlc3Rp
b25zRHJvcGRvd25JT1MuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XS01vdXNlR2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCA0NDEwYjdkMTNmMDZjMTJjNmFiZWFk
OGEzNjc1MjAwNmQ2OWQyNTFjLi41NjI4Y2YzNWI4Y2NiMmQxZmI5MTlkMWMyYTcwODQzZjc2ODc4
ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tNb3VzZUdlc3R1
cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLTW91c2VH
ZXN0dXJlUmVjb2duaXplci5oCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpZiBIQVZFKEhPVkVSX0dF
U1RVUkVfUkVDT0dOSVpFUikKIAotI2ltcG9ydCA8VUlLaXQvVUlHZXN0dXJlUmVjb2duaXplci5o
PgogI2ltcG9ydCAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogCiBAaW50ZXJmYWNlIFdLTW91c2VH
ZXN0dXJlUmVjb2duaXplciA6IFVJR2VzdHVyZVJlY29nbml6ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCmluZGV4IDM4YjdjNGYwZjZiYmFlNmIzODk5
NmRlYjFjYjYzNjQ0NzdkY2E5MDIuLjFhMmJmZDg3NTJlNzc2MTJkMzgwOWFmMjJlOTA1ZWRlNjkz
MWU3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVu
L1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5t
bQpAQCAtMzMsNyArMzMsNyBAQAogI2ltcG9ydCAiV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmgiCiAj
aW1wb3J0ICJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0ludGVybmFsLmgiCi0jaW1w
b3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCiAj
aW1wb3J0ICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJv
eHkuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCmluZGV4IDAyZGVkMTg3ZDMy
YmQ2MmE0M2ExMGQyZTlhNjM2ODJhMzNhNzQ5MzkuLjIyNjUzZDc0Mzk4ODZkYmY1ZWNkY2RkYWZl
NzJkMDJkN2I4MzFkMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGxNYWMubW0KQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbXBvcnQgIldLU3RyaW5nQ0Yu
aCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5h
bC5oIgotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZ01hYy5oIgogI2ltcG9ydCAiV2ViQ29sb3JQ
aWNrZXJNYWMuaCIKICNpbXBvcnQgIldlYkNvbnRleHRNZW51UHJveHlNYWMuaCIKICNpbXBvcnQg
IldlYkRhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93bk1hYy5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgK
aW5kZXggMDFkN2EyYWI3NTE4ZTYzNzk4ZWZhZjI2ZDM5YzY5NTU4MDFjN2NiMy4uNGRlZGMwYTZh
YTJhMjIzODk2MTU2MWVmMDk2MzZmYmYxZTdkNTExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oCkBA
IC0yMyw5ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oTUFDKQorI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKIAotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgogI2ltcG9ydCAi
R2VuZXJpY0NhbGxiYWNrLmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI3MzI4ZTI0
NWMwMDg3NWY0MmQ0OGNmYWU3MGQzNDhhMDdlYmM1M2IuLmY3OWRkYzEyMDQwZjJiZjc5MjQwY2Nh
NTVlZjk4OTMwYjUwMDc1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtOTgsOSArOTgsNiBAQAogCQkwRjA4Q0Y1NDFENjNDMTQwMDBC
NDhERjEgLyogV0tGb3JtU2VsZWN0UG9wb3Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOENGNTMxRDYzQzE0MDAwQjQ4REYxIC8qIFdLRm9ybVNl
bGVjdFBvcG92ZXIuaCAqLzsgfTsKIAkJMEYxNzRBQTMxNDJBNENCNzAwMzkyNTBGIC8qIEFQSUdl
b21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjE3NEFBMjE0MkE0Q0I2MDAzOTI1MEYgLyogQVBJR2VvbWV0cnkuaCAqLzsgfTsKIAkJMEYzQzcy
NUIxOTZGNjA0RTAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQzcyNTkxOTZGNUY2ODAw
QUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oICovOyB9OwotCQkwRjQ1QTMzMTIz
OUQ4OUExMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzMkYyMzlEODlBMDAwMjk0QUJGIC8q
IFdLV2ViVmlld1Rlc3RpbmdJT1MuaCAqLzsgfTsKLQkJMEY0NUEzMzUyMzlEODlBRjAwMjk0QUJG
IC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDVBMzMzMjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0
aW5nTWFjLmggKi87IH07Ci0JCTBGNDVBMzNEMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdU
ZXN0aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjQ1QTMzQjIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5oICovOyB9OwogCQkw
RjU5NDc5MDE4N0IzQjNBMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTk0NzhEMTg3
QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oICovOyB9OwogCQkw
RjU5NDc5QjE4N0IzQjYwMDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1OTQ3
OTUxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCAq
LzsgfTsKIAkJMEY1OTQ3OUQxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ1RyZWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTk0Nzk3
MTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdUcmVlLmggKi87IH07CkBAIC0xMTIs
OSArMTA5LDYgQEAKIAkJMEY5MzFDMUMxOEM1NzExOTAwREJBN0MzIC8qIFNjcm9sbGluZ1RyZWVP
dmVyZmxvd1Njcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMxQzFBMThDNTcxMTkwMERCQTdDMyAvKiBTY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLmggKi87IH07CiAJCTBGOTMxQzFDMThDNTcxMTkwMERC
QjhENCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlSU9TLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMUMxQTE4QzU3MTE5MDBE
QkI4RDQgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZUlPUy5oICovOyB9Owog
CQkwRkI2NTkyMzEyMDhCNERCMDA0NDgxNkMgLyogRHJhd2luZ0FyZWFJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI2NTkyMjEyMDhCNERCMDA0
NDgxNkMgLyogRHJhd2luZ0FyZWFJbmZvLmggKi87IH07Ci0JCTBGQjk0ODM3MjM5RjMxRDEwMDky
NkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggaW4gQ29weSBUZXN0aW5nIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8q
IFdLV2ViVmlld1Rlc3RpbmcuaCAqLzsgfTsKLQkJMEZCOTQ4MzgyMzlGMzIzODAwOTI2QThGIC8q
IFdLV2ViVmlld1Rlc3RpbmdJT1MuaCBpbiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1QTMyRjIzOUQ4OUEwMDAyOTRBQkYgLyogV0tX
ZWJWaWV3VGVzdGluZ0lPUy5oICovOyB9OwotCQkwRkI5NDgzOTIzOUYzMjM4MDA5MjZBOEYgLyog
V0tXZWJWaWV3VGVzdGluZ01hYy5oIGluIENvcHkgVGVzdGluZyBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDVBMzMzMjM5RDg5QUYwMDI5NEFCRiAvKiBXS1dl
YlZpZXdUZXN0aW5nTWFjLmggKi87IH07CiAJCTBGQ0I0RTQ2MThCQkUwNDQwMDBGQ0ZDOSAvKiBQ
YWdlQ2xpZW50SW1wbElPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDQjRFMzYxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBsSU9TLmgg
Ki87IH07CiAJCTBGQ0I0RTQ4MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzODE4QkJF
MDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldC5oICovOyB9OwogCQkwRkNCNEU0QTE4QkJFMDQ0
MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFM0ExOEJCRTA0NDAwMEZDRkM5IC8qIFdL
QWN0aW9uU2hlZXRBc3Npc3RhbnQuaCAqLzsgfTsKQEAgLTE5MjksMTkgKzE5MjMsNiBAQAogLyog
RW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvcHlG
aWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkwRkI5NDgzNjIzOUYzMUI3MDA5MjZBOEYgLyog
Q29weSBUZXN0aW5nIEhlYWRlcnMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBo
YXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWRzdFBhdGggPSBXZWJL
aXRUZXN0U3VwcG9ydDsKLQkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKLQkJCWZpbGVzID0gKAot
CQkJCTBGQjk0ODM3MjM5RjMxRDEwMDkyNkE4RiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggaW4gQ29w
eSBUZXN0aW5nIEhlYWRlcnMgKi8sCi0JCQkJMEZCOTQ4MzgyMzlGMzIzODAwOTI2QThGIC8qIFdL
V2ViVmlld1Rlc3RpbmdJT1MuaCBpbiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLywKLQkJCQkwRkI5
NDgzOTIzOUYzMjM4MDA5MjZBOEYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5oIGluIENvcHkgVGVz
dGluZyBIZWFkZXJzICovLAotCQkJKTsKLQkJCW5hbWUgPSAiQ29weSBUZXN0aW5nIEhlYWRlcnMi
OwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCTFB
MDdEMkY3MTkxOUIzNjUwMEVDREExNiAvKiBDb3B5IE1lc3NhZ2UgR2VuZXJhdGlvbiBTY3JpcHRz
ICovID0gewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yMDQ0LDEyICsyMDI1LDYgQEAKIAkJMEYxNzRBQTYxNDJB
QUM2MTAwMzkyNTBGIC8qIFdLR2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0tHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0M3MjU3MTk2RjVGNTAwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0M3MjU5MTk2RjVG
NjgwMEFFREQwQyAvKiBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGNDVBMzJGMjM5RDg5QTAwMDI5NEFCRiAvKiBXS1dlYlZpZXdU
ZXN0aW5nSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViVmlld1Rl
c3RpbmdJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY0NUEzMzAyMzlEODlB
MTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdUZXN0aW5nSU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjQ1QTMzMzIzOUQ4OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVz
dGluZ01hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlZpZXdUZXN0
aW5nTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNDVBMzM0MjM5RDg5QUYw
MDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZ01hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3Rp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJWaWV3VGVzdGluZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjQ1QTMzQzIzOUQ4Q0M0MDAyOTRBQkYg
LyogV0tXZWJWaWV3VGVzdGluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdLV2ViVmlld1Rlc3RpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNTk0NzhEMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU5NDc4RTE4N0IzQjNBMDA0
Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubWVzc2FnZXMuaW47IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTk0NzhGMTg3QjNCM0EwMDQzNzg1NyAvKiBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTA5NCwxNSArNTA2OSw2IEBACiAJCQl0YWJXaWR0aCA9IDg7CiAJ
CQl1c2VzVGFicyA9IDA7CiAJCX07Ci0JCTBGNDVBMzJFMjM5RDg5NjAwMDI5NEFCRiAvKiBpb3Mg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTBGNDVBMzJG
MjM5RDg5QTAwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nSU9TLmggKi8sCi0JCQkJMEY0NUEz
MzAyMzlEODlBMTAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdJT1MubW0gKi8sCi0JCQkpOwot
CQkJcGF0aCA9IGlvczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTEwNThD
N0IwRkVBNTU4NUUxMUNBMkNCQiAvKiBMaW5rZWQgRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02NzgzLDggKzY3NDksNiBAQAogCQkJCTFB
QzE0MTUwMThBQzQ3RUUwMDZDNjAyQyAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5o
ICovLAogCQkJCTFBNjZCRjhFMThBMDUyRUQwMDIwNzFCNCAvKiBXS1dlYlZpZXdJbnRlcm5hbC5o
ICovLAogCQkJCTI2RjlBODNBMThBMzQ2M0YwMEFFQjg4QSAvKiBXS1dlYlZpZXdQcml2YXRlLmgg
Ki8sCi0JCQkJMEY0NUEzM0IyMzlEOENDNDAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmcuaCAq
LywKLQkJCQkwRjQ1QTMzQzIzOUQ4Q0M0MDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZy5tbSAq
LywKIAkJCQkxQUQ2MEY1QzE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlcy5oICov
LAogCQkJCTFBRDYwRjVCMThFMjBGNEMwMDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVzLm1tICov
LAogCQkJCTFBRDYwRjVGMThFMjBGNzQwMDIwQzAzNCAvKiBXS1dpbmRvd0ZlYXR1cmVzSW50ZXJu
YWwuaCAqLywKQEAgLTgyMTQsNyArODE3OCw2IEBACiAJCQkJQkMwQzM3NjYxMEY4MDc2NjAwNzZE
N0NCIC8qIEMgKi8sCiAJCQkJMzdDNEMwODMxODE0OUMyQTAwMzY4OEI5IC8qIENvY29hICovLAog
CQkJCUJDOEE1MDEzMTE3NjVGNDUwMDc1NzU3MyAvKiBjcHAgKi8sCi0JCQkJMEY0NUEzMkUyMzlE
ODk2MDAwMjk0QUJGIC8qIGlvcyAqLywKIAkJCQlCQzExMUI0NzExMkY2MTY5MDAzMzdCQUIgLyog
bWFjICovLAogCQkJCTYzNDg0MjRGMUZCMjZFNzEwMDk0NkUzQyAvKiBBUElBcHBsaWNhdGlvbk1h
bmlmZXN0LmggKi8sCiAJCQkJMkU1Qzc3MEQxRkE3RDQyOTAwNTkzMkMzIC8qIEFQSUF0dGFjaG1l
bnQuY3BwICovLApAQCAtODQ5OCw4ICs4NDYxLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJD
ODY5OUIzMTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXcubW0gKi8sCiAJCQkJQkM4Njk5QjQxMTZB
QURBQTAwMkE5MjVCIC8qIFdLVmlld0ludGVybmFsLmggKi8sCi0JCQkJMEY0NUEzMzMyMzlEODlB
RjAwMjk0QUJGIC8qIFdLV2ViVmlld1Rlc3RpbmdNYWMuaCAqLywKLQkJCQkwRjQ1QTMzNDIzOUQ4
OUFGMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ01hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEwNzc0LDkgKzEwNzM1LDYg
QEAKIAkJCQkyREM2RDlDMzE4QzQ0QTYxMDA0M0JBRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3Zp
ZGVyUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjZCRjhGMThBMDUyRUQwMDIwNzFC
NCAvKiBXS1dlYlZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4M0IxOEEz
NDY4MTAwQUVCODhBIC8qIFdLV2ViVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NDVBMzNEMjM5RDhDQzQwMDI5NEFCRiAvKiBXS1dlYlZpZXdUZXN0aW5nLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRjQ1QTMzMTIzOUQ4OUExMDAyOTRBQkYgLyogV0tXZWJWaWV3VGVzdGluZ0lPUy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEY0NUEzMzUyMzlEODlBRjAwMjk0QUJGIC8qIFdLV2ViVmll
d1Rlc3RpbmdNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDYwRjVFMThFMjBGNEMwMDIwQzAz
NCAvKiBXS1dpbmRvd0ZlYXR1cmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUQ2MEY2MDE4RTIw
Rjc0MDAyMEMwMzQgLyogV0tXaW5kb3dGZWF0dXJlc0ludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2QTUwODBCRjFGMEVEQUFBMDBFNjE3QzUgLyogV0tXaW5kb3dGZWF0dXJlc1ByaXZhdGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMTA4OTQsNyArMTA4NTIsNiBAQAogCQkJCTFBMjE4MDE2MUI1
NDU0NjIwMDQ2QUVDNCAvKiBBZGQgU3ltbGluayBpbiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZy
YW1ld29ya3MgKi8sCiAJCQkJNTM3OUM3QUMyMUU1Mjg4NTAwRTRBOEY2IC8qIENoZWNrIC54Y2Zp
bGVsaXN0cyAqLywKIAkJCQk5MzMxNzAwNzIyMzQ2NzQ1MDBCMzI1NTQgLyogQ3JlYXRlIHN5bWxp
bmtzIHRvIFhQQyBzZXJ2aWNlcyBmb3IgZW5naW5lZXJpbmcgYnVpbGRzICovLAotCQkJCTBGQjk0
ODM2MjM5RjMxQjcwMDkyNkE4RiAvKiBDb3B5IFRlc3RpbmcgSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlidWlsZFJ1bGVzID0gKAogCQkJCTUzNUUwOEM0MjI1NDVCNzIwMERGMDBDQSAvKiBQQlhCdWls
ZFJ1bGUgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggN2ZhZDZmYzlkNGQ2Njc2YWJmMzk3MWQzMzBiNDUxY2RkMTBmYTJmZi4uNzBiOTU2YzBh
OTIyODI3ODgyN2Y3NzNkZjA5NTgyYjdjYzgwZDlkNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTEyLTExICBD
b21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMjUzMzc2LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MTMzCisKKyAgICAgICAgQnJva2UgaW50ZXJuYWwgYnVpbGRz
IChSZXF1ZXN0ZWQgYnkgc21mciBvbiAjd2Via2l0KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFu
Z2VzZXQ6CisKKyAgICAgICAgIk1vdmUgV0tXZWJWaWV3IGNvZGUgcmVsYXRlZCB0byB0ZXN0aW5n
IHRvIG5ldyBmaWxlcywgd2l0aAorICAgICAgICB0aGVpciBvd24gaGVhZGVycywgYW5kIHN0b3Ag
ZXhwb3NpbmcgdGVzdC1vbmx5IGZ1bmN0aW9ucyBhcworICAgICAgICBTUEkuIgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDIxCisgICAgICAgIGh0
dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yNTMzNzYKKwogMjAxOS0xMi0xMCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIFdLV2Vi
VmlldyBjb2RlIHJlbGF0ZWQgdG8gdGVzdGluZyB0byBuZXcgZmlsZXMsIHdpdGggdGhlaXIgb3du
IGhlYWRlcnMsIGFuZCBzdG9wIGV4cG9zaW5nIHRlc3Qtb25seSBmdW5jdGlvbnMgYXMgU1BJLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
ZyBiL1Rvb2xzL01pbmlCcm93c2VyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKaW5kZXgg
MjBmMGU0NWY5Mzk1Mzc1Y2RhZjMxZTc1MmI0YjI1NmZlZGY3YjI3My4uZmM2MWQ1MjI3Yzg2MDg0
ODg1MTRjYmQ5MmEyOGRjN2MxYzJlZmFmNCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
Q29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9Db25m
aWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCkBAIC03MCw4ICs3MCw2IEBAIEdDQ19WRVJTSU9OID0g
Y29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKIFdBUk5JTkdfQ0ZMQUdTID0gLVdh
bGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyCiBHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsK
IAotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJLaXRUZXN0
U3VwcG9ydDsKLQogU1VQUE9SVEVEX1BMQVRGT1JNUyA9IGlwaG9uZW9zIGlwaG9uZXNpbXVsYXRv
ciBtYWNvc3ggdHZvcyB0dnNpbXVsYXRvciB3YXRjaG9zIHdhdGNoc2ltdWxhdG9yOwogCiBUQVJH
RVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFK
T1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0g
Yi9Ub29scy9NaW5pQnJvd3Nlci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQppbmRl
eCA0OTZhYzQ3MTZlOGNjZjM5OGQxOTU2ZjBhOWY0MmJlMzk5ODJkZTRjLi4wMDYzMjY2ZWQzM2U3
ZGE3YTJhYjkxNDJhMmFmMGExMmM1OTBkMGQ5IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9tYWMvV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQpAQCAtMjcsNyArMjcsNiBAQAogCiAj
aW1wb3J0ICJBcHBEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiU2V0dGluZ3NDb250cm9sbGVyLmgiCi0j
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tGcmFtZUluZm8u
aD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25BY3Rpb25Qcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGUuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwppbmRleCBlOTU2YmIxOGMzNjQ3YWIyMTAy
ZDc3MjE0ZTNlYmQxNDIzMmQxZGRkLi5lZWMxM2Y2ZWQ5ODZkMjNjMTBjYzY3MjZhYTliZDc0MDc0
MTM0NjY0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCkBAIC0zMyw3ICszMyw3IEBAIENMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9
IGdudSsrMXo7CiBDTEFOR19DWFhfTElCUkFSWSA9IGxpYmMrKzsKIENMQU5HX0VOQUJMRV9PQkpD
X1dFQUsgPSBZRVM7CiBDTEFOR19XQVJOX0NYWDBYX0VYVEVOU0lPTlMgPSBOTzsKLUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAke0JVSUxUX1BST0RVQ1RTX0RJUn0vdXNyL2xvY2FsL2luY2x1ZGUgJChX
RUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRpbmdIZWFkZXJzICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9XZWJDb3JlVGVzdFN1cHBvcnQgJChCVUlMVF9QUk9EVUNUU19ESVIpL1dlYktp
dFRlc3RTdXBwb3J0ICR7U1JDUk9PVH07CitIRUFERVJfU0VBUkNIX1BBVEhTID0gJHtCVUlMVF9Q
Uk9EVUNUU19ESVJ9L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNf
RElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKEJVSUxUX1BST0RVQ1RTX0RJUikvV2ViQ29yZVRlc3RT
dXBwb3J0ICR7U1JDUk9PVH07CiAKIEdDQ19OT19DT01NT05fQkxPQ0tTID0gWUVTOwogR0NDX1BS
RVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICQoREVCVUdfREVGSU5FUykgJChGRUFUVVJFX0RFRklO
RVMpIFVfRElTQUJMRV9SRU5BTUlORz0xIFVfU0hPV19DUExVU1BMVVNfQVBJPTAgJChHQ0NfUFJF
UFJPQ0VTU09SX0RFRklOSVRJT05TXyQoUExBVEZPUk1fTkFNRSkpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9FZGl0aW5nVGVzdEhhcm5lc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL0VkaXRpbmdUZXN0SGFybmVzcy5tbQppbmRleCAxNjY3ZjcwZWQxYzMwYmFmZGMxYjM5MGE0
OTdkMDUyMDA0OWRkZjA1Li5mMDk2ZmI3NTZmMDA0M2U2MzY2ZGVjNGYwMWE5MGJjMWQwNzM3YzNi
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0VkaXRpbmdUZXN0SGFybmVzcy5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0VkaXRpbmdUZXN0SGFybmVzcy5tbQpAQCAtMjgsNyAr
MjgsNyBAQAogI2luY2x1ZGUgIkVkaXRpbmdUZXN0SGFybmVzcy5oIgogCiAjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgorI2ltcG9ydCA8
V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAogQGltcGxlbWVudGF0aW9uIEVkaXRpbmdUZXN0
SGFybmVzcwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9S
ZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdC9SZXNwb25zaXZlbmVzc1RpbWVyQ3Jhc2gubW0KaW5kZXggZDViN2NmZDkxZGQxMzUwNzI0
YTU1N2VhNGI1ZWE2MmJjYzlhZDU4Zi4uMjcxMmM1ZjA0MGFkZTFhYmVlNjI0NTE5MjhkZTdkNzM4
YjdhMTFjZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvUmVz
cG9uc2l2ZW5lc3NUaW1lckNyYXNoLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L1Jlc3BvbnNpdmVuZXNzVGltZXJDcmFzaC5tbQpAQCAtMjksNyArMjksNiBAQAogCiAj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgot
I2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZVByaXZh
dGVNYWMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3
dGYvSGFzaFNldC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9BbmltYXRlZFJlc2l6ZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvQW5pbWF0ZWRSZXNpemUubW0KaW5kZXggZTQwNDQwOTVkYTQxOWE2MTU5ZDRjM2I4
ZmFkMWMyNTk5Zjg3MzU3Mi4uMzExOWMzYzM5OTAzMDI1YzFkMjcxMGMxYmVkYmRiNDY3NjIzMzA1
NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Bbmlt
YXRlZFJlc2l6ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0FuaW1hdGVkUmVzaXplLm1tCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbXBvcnQgIlRlc3QuaCIK
ICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZp
ZXcuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1By
ZWZlcmVuY2VzLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25m
aWd1cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9y
dCA8V2ViS2l0L19XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0RldmljZU9yaWVudGF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9EZXZpY2VPcmllbnRhdGlvbi5tbQppbmRleCAwMDA1OWEyODliODE5ODIyNmM4
MmNkYzhhYTc0ODFiMWI4YmYzOTkwLi45MDA0ZjhjNTMyYWFkZGY5MzJjNGYxNjQ0MjI0MzgxYTI2
YThiMDM2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0RldmljZU9yaWVudGF0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRGV2aWNlT3JpZW50YXRpb24ubW0KQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQg
IlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RVUkxTY2hlbWVIYW5kbGVy
LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5n
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvRnVuY3Rpb24uaD4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG91YmxlRGVm
ZXJzTG9hZGluZy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG91
YmxlRGVmZXJzTG9hZGluZy5tbQppbmRleCA4MDAyZDhhNjAwMjg0MGE0NjNlNTUxZWJlNmI0NTQx
ZTdkMGQwODgwLi42NGRjNDZiNGY3NzcyYmRjZmU4NzFlMmY4NWVlMjllNjEzNGEwZGM4IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvdWJsZURlZmVy
c0xvYWRpbmcubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9E
b3VibGVEZWZlcnNMb2FkaW5nLm1tCkBAIC0yOCwxMCArMjgsMTAgQEAKICNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldLV2ViVmll
d0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNp
bXBvcnQgPFdlYktpdC9XS0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJpdmF0
ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktp
dC9fV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSW50ZXJhY3Rpb25EZWFkbG9ja0FmdGVyQ3Jhc2gubW0KaW5kZXggYTc5
ZGRhOWMxZmNhMmM4NjNiNGE1NDczZjlkOTMxZjNjZmU1ODUxMi4uZDQzMjRhOGY2YzZhOWRmMjNk
ZTg4NGJmNTlhNjQ2MTE1ZDI4OTEwYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbnRlcmFjdGlvbkRlYWRsb2NrQWZ0ZXJDcmFzaC5tbQorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0ludGVyYWN0aW9uRGVhZGxvY2tB
ZnRlckNyYXNoLm1tCkBAIC0yOSw4ICsyOSw4IEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0
ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0j
aW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29u
ZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1
ZmZlcmluZ1BvbGljeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
TWVkaWFCdWZmZXJpbmdQb2xpY3kubW0KaW5kZXggZDE2Y2FmMTdkYTM4N2RlZDdmNmE0Yzk2ZWYw
YzQxNmRiY2I5ZTJlMC4uNmMyZDdiNmY0ZTAwZWNmMDUyZDEwNTkzODEzOGQ3YzA2YmUxMjU5YSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9NZWRpYUJ1
ZmZlcmluZ1BvbGljeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL01lZGlhQnVmZmVyaW5nUG9saWN5Lm1tCkBAIC0yOSw4ICsyOSw5IEBACiAKICNpbXBvcnQg
IlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0
ICJXS1dlYlZpZXdUZXN0aW5nLmgiCisKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdDb25maWd1
cmF0aW9uUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAog
c3RhdGljIHZvaWQgd2FpdFVudGlsQnVmZmVyaW5nUG9saWN5SXNFcXVhbFRvKFdLV2ViVmlldyog
d2ViVmlldywgY29uc3QgY2hhciogZXhwZWN0ZWQpCiB7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3RzLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Ob3dQbGF5aW5nQ29udHJvbHNU
ZXN0cy5tbQppbmRleCA4YWM1ZWM1MDQ0YTJiMTY3ZWUwNjRmZmRhZDEyM2IzNGM0NDAzM2YzLi41
MDAxMmYwZjE5ZGZlNWVjZDhlZGQ1YWNiMzNmN2I1N2UyYjEwMGY4IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05vd1BsYXlpbmdDb250cm9sc1Rlc3Rz
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTm93UGxheWlu
Z0NvbnRyb2xzVGVzdHMubW0KQEAgLTI3LDggKzI3LDkgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1V
dGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgIldLV2ViVmll
d1Rlc3RpbmcuaCIKKwogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9QaWN0dXJlSW5QaWN0dXJlRGVsZWdhdGUubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbQppbmRleCBi
ZjZlM2NlNGI5YmRmODhhM2U3Y2E4ZDIwYzFiZmY5M2RjZDExZjhmLi41ZGMxYTE5Nzg5ODQ0MzE5
ZDI2MTlhNWM3YTFmOGZjOTJmNmU4OTM4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0ZS5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BpY3R1cmVJblBpY3R1cmVEZWxlZ2F0
ZS5tbQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW1w
b3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0ICJXS1dlYlZp
ZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLUGFnZVByaXZhdGVNYWMuaD4KICNpbXBvcnQgPFdlYktpdC9XS1By
ZWZlcmVuY2VzUHJpdmF0ZS5oPgpAQCAtMzksNiArMzgsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dL
VUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VSTENGLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tWaWV3Lmg+CisjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3Vz
cGVuZE1lZGlhQnVmZmVyaW5nLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Qcm9jZXNzU3VzcGVuZE1lZGlhQnVmZmVyaW5nLm1tCmluZGV4IDdiZjRhYTU3Mjk1OGU4
YjMzOWZkOTMxMGM4MzI1OTNlMzlmOTM0ZDQuLjg0N2JmYjY3ZWU2ZjBiODBkOTI3NmE0MzY5YjE0
ZGY3NzYzNDAwYmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUHJvY2Vzc1N1c3BlbmRNZWRpYUJ1ZmZlcmluZy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTdXNwZW5kTWVkaWFCdWZmZXJpbmcubW0K
QEAgLTI5LDggKzI5LDkgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNpbXBv
cnQgIlRlc3RXS1dlYlZpZXcuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKKwogI2lt
cG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiBURVNUKFdlYktpdCwgUHJvY2Vzc1N1c3BlbmRN
ZWRpYUJ1ZmZlcmluZykKIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1Byb2Nlc3NTd2FwT25OYXZpZ2F0aW9uLm1tCmluZGV4IDNj
YTI5MzQzYzc4OTU0NzRkN2MwYzYzY2UzNTJhZTQzNWY4YzJiODAuLjExNTc3N2U3NGQ5YmJmZGZj
NGNlM2UwM2FjNjMyMjE4NmY4MzIxZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24ubW0KKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Qcm9jZXNzU3dhcE9uTmF2aWdhdGlvbi5t
bQpAQCAtMjksNyArMjksNiBAQAogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAiVGVzdE5hdmln
YXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tX
ZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQmFja0ZvcndhcmRMaXN0SXRlbVBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS0NvbnRlbnRSdWxlTGlzdFN0b3JlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmg+CkBAIC00MCw2ICszOSw3
IEBACiAjaW1wb3J0IDxXZWJLaXQvV0tVUkxTY2hlbWVIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVUkxTY2hlbWVUYXNrUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb25Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQu
aD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Vy
dmljZVdvcmtlckJhc2ljLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KaW5kZXggZDc3OTY0MDU2ODRmYjdmYWE1OGU3NGEyZGNj
MWRkMjJjNjE3MDcwYi4uNWI2NjllYWIwMjM4OWYyMTNhMDUxN2Y3NWRkNmI4YzU0NjhiOTEwOSAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TZXJ2aWNl
V29ya2VyQmFzaWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TZXJ2aWNlV29ya2VyQmFzaWMubW0KQEAgLTMxLDEyICszMSwxMiBAQAogI2ltcG9ydCAiVGVz
dC5oIgogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdL
V2ViVmlldy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0
L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFBy
aXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VSTFNjaGVtZUhhbmRsZXIuaD4KICNpbXBvcnQg
PFdlYktpdC9XS1VSTFNjaGVtZVRhc2tQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJW
aWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YktpdC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TbmFwc2hvdFN0b3JlLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TbmFwc2hvdFN0b3JlLm1tCmluZGV4IGJjYzEwMjZiY2FhNTg4NmFiY2UyYjAxNmNkMmY0YTZm
ZTU4MjJjZGUuLjZjMmY4NDMyZThhYWE2NjY3Njk5MWFhN2ZiYWUxZmMwNjBjNTdlNTUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU25hcHNob3RTdG9y
ZS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NuYXBzaG90
U3RvcmUubW0KQEAgLTMyLDExICszMiwxMSBAQAogI2ltcG9ydCAiVGVzdC5oIgogI2ltcG9ydCAi
VGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2lt
cG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLQmFja0ZvcndhcmRM
aXN0SXRlbVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1BhZ2UuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1BhZ2VQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CisjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgogCiBzdGF0aWMgYm9vbCBkaWRGb3JjZVJlcGFpbnQ7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1N5c3RlbVByZXZpZXcubW0KaW5kZXggZWEyNDAx
YWM0MjM3YjAyZGQ4ZDJlYjVlNTE3NTZjOWI0ODlkOWIzYS4uZDlhZGVmNDQzMmQ5ODNlNGI0NzEw
MjA3NDA2OWE2MmRhOWMxYjdjMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TeXN0ZW1QcmV2aWV3Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU3lzdGVtUHJldmlldy5tbQpAQCAtMzAsOCArMzAsOCBAQAogI2lt
cG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5n
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tWaWV3UHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dL
V2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXQuaD4KIAogc3RhdGljIGJv
b2wgaGFzVHJpZ2dlckluZm87CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1VJRGVsZWdhdGUubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1VJRGVsZWdhdGUubW0KaW5kZXggMTYxMTgwODM2ZDU3NTYyMDI3ZTA2MWM5NzUy
ZjQ3MjgxMjFkY2RiMS4uNzkxN2I4ZjlkMmY2NzlhMTE5OTgyYjhlNTAxMjJjYWVlMTJkZjNlYyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9VSURlbGVn
YXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVUlEZWxl
Z2F0ZS5tbQpAQCAtMjksNyArMjksNiBAQAogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2lt
cG9ydCAiVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFz
LmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tDb250
ZXh0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tDb250ZXh0UHJpdmF0ZU1hYy5oPgogI2ltcG9ydCA8
V2ViS2l0L1dLR2VvbG9jYXRpb25NYW5hZ2VyLmg+CkBAIC0zNyw2ICszNiw3IEBACiAjaW1wb3J0
IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1JldGFp
blB0ci5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLSGl0VGVzdFJl
c3VsdC5oPgogI2ltcG9ydCA8V2ViS2l0L19XS0luc3BlY3Rvci5oPgogI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9Vc2VyTWVkaWFTaW11bGF0ZUZhaWxlZFNhbmRib3gubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5tbQpp
bmRleCAxMGIyMDI0YjFlNWYxNDY3Nzk0MzY4MjRjMmRiMTdhMzliMDA5NDQ2Li4zYjg4MzdjMWRm
MzM0NWIyZTc4ZGM5MjExZWM0NGE4NTNmMmI1ZGRlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNpbXVsYXRlRmFpbGVkU2FuZGJveC5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1VzZXJNZWRpYVNp
bXVsYXRlRmFpbGVkU2FuZGJveC5tbQpAQCAtMjgsNyArMjgsNyBAQAogI2ltcG9ydCAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3QuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcu
aCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKKwogI2ltcG9ydCA8V2ViS2l0L1dLUHJl
ZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xs
ZXJQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZh
dGUuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VmlkZW9Db250cm9sc01hbmFnZXIubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1ZpZGVvQ29udHJvbHNNYW5hZ2VyLm1tCmluZGV4IDcwZGZmZTc3MGExN2JjMzFjNjY0
YTM4MDk1YjdmM2QxZDYxYzJjMTguLjdhMDg5NjNmMTA2NjExNmMwMDZlMjhiZDJhODY2YmZjYmIw
NjI1NDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VmlkZW9Db250cm9sc01hbmFnZXIubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9WaWRlb0NvbnRyb2xzTWFuYWdlci5tbQpAQCAtMjcsOCArMjcsOSBAQAogCiAj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgot
I2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgorCiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3
Q29uZmlndXJhdGlvblByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRl
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVu
dFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFj
aG1lbnRUZXN0cy5tbQppbmRleCBmZDM0MjBmZTc5MzhlODg3YTUyYjVkYmE2OWRkMmQxNmIzZTg4
ZjdkLi5iNmZjZDkzNTg1MGViZDY3YjJiMTg2MTBlNDg4OTA2NjVlMzE5MmFiIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3Rz
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2ht
ZW50VGVzdHMubW0KQEAgLTM0LDEwICszNCwxMCBAQAogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25E
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3
Q29uZmlndXJhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2lt
cG9ydCA8Q29udGFjdHMvQ29udGFjdHMuaD4KICNpbXBvcnQgPE1hcEtpdC9NYXBLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJBcmNoaXZlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV2ViS2l0UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1JlcXVl
c3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV0tSZXF1ZXN0QWN0aXZhdGVkRWxlbWVudEluZm8ubW0KaW5kZXggOTU1ZWJlMGUy
M2ZlMTZjMWRiY2YxNDU1MTZkNjA2YWZiYTk1NmE5ZS4uOTkzZjBiYmZmM2FmNTJjMzNkM2VlNjcz
MWVhMTc1YzE2NDUwMGJjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS1JlcXVlc3RBY3RpdmF0ZWRFbGVtZW50SW5mby5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLUmVxdWVzdEFjdGl2YXRlZEVsZW1lbnRJ
bmZvLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJUZXN0LmgiCiAjaW1wb3J0ICJUZXN0
TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0
ICJXS1dlYlZpZXdUZXN0aW5nLmgiCisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3Lmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tXZWJWaWV3Q29uZmlndXJhdGlvblByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tBY3RpdmF0ZWRFbGVtZW50SW5mby5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5o
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dl
YlZpZXdDYW5kaWRhdGVUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW0KaW5kZXggMTBjMTljYmYyMTMxMTc3NzEy
YTA2ZTMwOTE4NmFmYmY3OWFiZmU1Yi4uODE2NTAwMWYzZTgzNGVkNjIyNDhkNDU1ZTM5ZDA3M2Nh
ZjUyYjYyMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tCkBAIC0yOSw3ICsyOSw3
IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJW
aWV3LmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCisKICNpbXBvcnQgPENhcmJvbi9D
YXJib24uaD4KICNpbXBvcnQgPFdlYktpdC9XZWJLaXRQcml2YXRlLmg+CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlv
bnMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0Vk
aXRBY3Rpb25zLm1tCmluZGV4IDZiYTliOWU0NmIwNzQyYjUzMTIwMGFhOTc0ZTA1MWYwODI4OGY4
MTIuLjlkMWI3YzYyNTQ5ODRhZmEwMTRkMjkyZWZhMTU4YjhiOGEzMWI5OTggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3RWRpdEFjdGlv
bnMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZp
ZXdFZGl0QWN0aW9ucy5tbQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0
aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3
VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMubW0gYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLV2ViVmlld0ZpcnN0UmVzcG9uZGVyVGVzdHMu
bW0KaW5kZXggZWMxOTBjOGQ2NDI1M2E4NTU0ZDZjNDhhNmMxZjRjMzAzZjRjZjM2NC4uN2QyNTdm
ZDczMmM0NzdlN2NhZDVkZjliNmMyYjA5ZTY2MzBiZDk2MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS1dlYlZpZXdGaXJzdFJlc3BvbmRlclRlc3Rz
Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tXZWJWaWV3
Rmlyc3RSZXNwb25kZXJUZXN0cy5tbQpAQCAtMjgsNyArMjgsNiBAQAogI2ltcG9ydCAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0ICJU
ZXN0V0tXZWJWaWV3LmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCiAjaW1wb3J0IDxX
ZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0
c0lPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjY2Vzc2liaWxpdHlUZXN0
c0lPUy5tbQppbmRleCBkYjA4MjczMzQ2MjhmMDczOGY5NTdiMTBkZmQ3Yzc1YjJkYjNkMTJmLi4x
ZjZhMDkzN2I3MDY4OGRiYzczNTE1YjkwMTk1NDNlZjJmOGJmMzRlIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BY2Nlc3NpYmlsaXR5VGVzdHNJT1MubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWNjZXNzaWJpbGl0eVRlc3RzSU9TLm1tCkBA
IC0zMSw3ICszMSw2IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAi
VGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5o
IgotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmll
d1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UuaD4K
ICNpbXBvcnQgPFdlYktpdC9fV0tSZW1vdGVPYmplY3RSZWdpc3RyeS5oPgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0FjdGlvblNoZWV0VGVzdHMubW0KaW5kZXggNjBhMGUw
MGZmYzRjYTI2NTU3Mzk2ZDE2NzUxYzU5MmZlYzUwZTYxNS4uZTgxZjEwMmVmNmMxYjMyYWU3ZDMx
OTFhNWM0NThhODVjMGFjOTVjYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvQWN0aW9uU2hlZXRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L2lvcy9BY3Rpb25TaGVldFRlc3RzLm1tCkBAIC0zNSw5ICszNSw5IEBACiAjaW1wb3J0ICJUZXN0
V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3Q29udHJvbGxlci5oIgogI2ltcG9y
dCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPE1v
YmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4KICNpbXBvcnQgPFdlYktpdC9X
S1VJRGVsZWdhdGVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5o
PgogI2ltcG9ydCA8V2ViS2l0L19XS0FjdGl2YXRlZEVsZW1lbnRJbmZvLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvX1dLRWxlbWVudEFjdGlvbi5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3Rz
SU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvQXV0b2NvcnJlY3Rpb25UZXN0
c0lPUy5tbQppbmRleCBlMmFhYWMwODcwNTgzOTU3Yjc0NzgwYmI3MTdlYjI3YjgxZTUzNzU3Li5m
MDkyOWY4N2MyYWMxNDc4OGExOTgyNWI3MzUwZDJjMTgxNzU0YzIwIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9BdXRvY29ycmVjdGlvblRlc3RzSU9TLm1tCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0F1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0K
QEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRlLmgiCiAjaW1wb3J0
ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgotI2ltcG9ydCAiV0tXZWJW
aWV3VGVzdGluZy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAogQGlu
dGVyZmFjZSBUZXN0V0tXZWJWaWV3IChBdXRvY29ycmVjdGlvblRlc3RzKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0ZvY3VzUHJlc2VydmF0aW9uVGVzdHMubW0K
aW5kZXggMGI2ZDkzZjg4ODRlZjY0ZjhmYTkwOGM3NzU4OTZmZmRjYjE3NTk0OS4uNDk1NjIwYzQz
ZWRlNzc0YTljOWUzNmI3MzAwYTE4NWJjM2ZmNGJkMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9pb3MvRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbQorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9Gb2N1c1ByZXNlcnZhdGlvblRlc3RzLm1tCkBAIC0zMiw3
ICszMiw2IEBACiAjaW1wb3J0ICJUZXN0SW5wdXREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdL
V2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3Rp
bmcuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvX1dLSW5wdXREZWxlZ2F0ZS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUubW0KaW5k
ZXggMDM1MDc2NjMzNDE2YWRiYjM4Mzg0NTAxYmIzNjQwMTA3YmJlZjkxYy4uOTY3NmEzM2JiMjZj
YWY5OWViN2JjMTkyZDI4MDlmZDg2NmZlZmQyZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9jb2NvYS9UZXN0TmF2aWdhdGlvbkRlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5tbQpAQCAtMjcsNyArMjcsNiBAQAog
I2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogCiAjaW1wb3J0ICJVdGlsaXRpZXMu
aCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KIAogQGltcGxlbWVudGF0aW9uIFRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0KaW5kZXggMGQ2
NTIxZDY5MDY4YzEzYzY5ZjhjNWE0OTlhM2JmZjI2YTg5OTA0OS4uNjljZDQ5N2RjMTY2YmJhNjJh
MmVlMjAyZjk0YWMwZjk2YzdkNjdmMiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9p
b3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9p
b3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0KQEAgLTMxLDExICszMSwxMiBAQAogI2ltcG9y
dCAiSW5zdGFuY2VNZXRob2RTd2l6emxlci5oIgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMu
aCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0aW5nLmgiCisK
ICNpbXBvcnQgPFVJS2l0L1VJRHJhZ0ludGVyYWN0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSURy
YWdJdGVtLmg+CiAjaW1wb3J0IDxVSUtpdC9VSURyb3BJbnRlcmFjdGlvbi5oPgogI2ltcG9ydCA8
VUlLaXQvVUlJbnRlcmFjdGlvbi5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9fV0tGb2N1c2VkRWxlbWVudEluZm8uaD4KICNpbXBvcnQgPFdl
YktpdC9fV0tGb3JtSW5wdXRTZXNzaW9uLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1h
Yy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1t
CmluZGV4IDgyMWQ1ZGMwMDc5MjM1NDk3ZmM0MjY5ZjdiNzA2YWQ3N2VmYzhhNjYuLjEwMDVlZTQ3
OGI1N2RmZmVjODdmNDUzZDQyMjQ0OTQ0MTNhOTNmNGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvbWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgogI2ltcG9ydCAiVGVzdERyYWdnaW5nSW5m
by5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGlu
Zy5oIgogI2ltcG9ydCA8Y21hdGg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29u
ZmlnIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmln
CmluZGV4IGMzMzdiN2I2ODk5MGNmNzdiMDQ5NzBjOGFlMGMzZjhhNTBhODU5NWQuLjg1Y2I3Mjhm
ZDMyZjdmNjVlYzZhMjZiODRlZGFmNTJkMTEwNjI2ZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZworKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKQEAgLTUzLDcgKzUzLDcg
QEAgQ0xBTkdfQU5BTFlaRVJfTE9DQUxJWkFCSUxJVFlfTk9OTE9DQUxJWkVEID0gWUVTOwogQ0xB
TkdfV0FSTl9SQU5HRV9MT09QX0FOQUxZU0lTID0gWUVTOwogQ0xBTkdfV0FSTl9TVVNQSUNJT1VT
X01PVkUgPSBZRVM7CiBDTEFOR19XQVJOX0RFUFJFQ0FURURfT0JKQ19JTVBMRU1FTlRBVElPTlMg
PSBZRVM7Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9s
b2NhbC9pbmNsdWRlICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJDb3JlVGVzdFN1cHBvcnQgJChC
VUlMVF9QUk9EVUNUU19ESVIpL1dlYktpdFRlc3RTdXBwb3J0ICQoV0VCQ09SRV9QUklWQVRFX0hF
QURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKE5FWFRfUk9PVCkvdXNyL2xvY2FsL2luY2x1
ZGUvV2ViQ29yZVRlc3RTdXBwb3J0ICQoUExBVEZPUk1fSEVBREVSX1NFQVJDSF9QQVRIUyk7CitI
RUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNs
dWRlICQoQlVJTFRfUFJPRFVDVFNfRElSKS9XZWJDb3JlVGVzdFN1cHBvcnQgJChXRUJDT1JFX1BS
SVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRpbmdIZWFkZXJzICQoTkVYVF9ST09UKS91c3IvbG9j
YWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQgJChQTEFURk9STV9IRUFERVJfU0VBUkNIX1BB
VEhTKTsKIFBMQVRGT1JNX0hFQURFUl9TRUFSQ0hfUEFUSFNbc2RrPWlwaG9uZSpdID0gJChTUkNS
T09UKS8uLi8uLi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3M7CiBHQ0NfTk9fQ09NTU9O
X0JMT0NLUyA9IFlFUzsKIEdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RF
RklORVMpIFVfRElTQUJMRV9SRU5BTUlORz0xIFVfU0hPV19DUExVU1BMVVNfQVBJPTA7CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2Eu
bW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0K
aW5kZXggOTVhNjgxM2Q2OTQwN2UyZWViNGFkM2ViOWI3NDVjM2M5ZDg0NjVjMC4uZTkyM2I4NTFh
M2U5ZGQ2NGMyZDYzYTRlMjYxNDM1NDE2ZGM2YmJkYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQpAQCAtMzIsNyArMzIsNiBA
QAogI2ltcG9ydCAiVGVzdEludm9jYXRpb24uaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZp
ZXcuaCIKICNpbXBvcnQgIlRlc3RXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGUuaCIKLSNpbXBvcnQg
IldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgog
I2ltcG9ydCA8U2VjdXJpdHkvU2VjSXRlbS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLQ29udGV4dENv
bmZpZ3VyYXRpb25SZWYuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29j
b2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdFJ1bm5lcldLV2ViVmlldy5tbQppbmRleCBjNDI5MTJkZmEwZDY4MDgwNzdjM2Y0ZDhkNWU3
MTViNTc0ZjRlODEzLi5lY2EwMDZjNjg5MzRmOGY3YzNiZmUzMzMxMzc5NzUyNzYxYzI1OGYyIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZp
ZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJW
aWV3Lm1tCkBAIC0yNiw3ICsyNiw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRl
c3RSdW5uZXJXS1dlYlZpZXcuaCIKIAotI2ltcG9ydCAiV0tXZWJWaWV3VGVzdGluZy5oIgogI2lt
cG9ydCAiV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mby5oIgogI2ltcG9ydCA8V2ViS2l0L1dL
VUlEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0zNyw3
ICszNiw2IEBACiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJS2l0U1BJLmgi
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgotCiBAaW50ZXJmYWNlIFdLV2Vi
VmlldyAoKQogCiAvLyBGSVhNRTogbW92ZSB0aGVzZSB0byBXS1dlYlZpZXdfUHJpdmF0ZS5oCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxl
ckNvY29hLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9VSVNjcmlwdENvbnRyb2xs
ZXJDb2NvYS5tbQppbmRleCAwZmExNmRkNDg5Y2RkY2QwNmUzMTNjNTk0NzM3YTc4NWY2ZmM4ZTJj
Li5iZWUwNDk3YmY1NmQyMzYwMDZhMzgxYmExMTYxYTcwYjkzMGVmY2YzIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1VJU2NyaXB0Q29udHJvbGxlckNvY29hLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVUlTY3JpcHRDb250cm9sbGVyQ29jb2Eu
bW0KQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQgIlRlc3RDb250cm9sbGVyLmgiCiAjaW1wb3J0
ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRleHQuaCIKLSNp
bXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJpdmF0ZS5oPgogCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCmluZGV4IGI2
MDA3NTBmYTk3Njg2ODNkZTc1MmQ1NzQ4OTExNTNmMDIxZjcxOWQuLmFlMmE5NGExNWIwMDk5MmIx
ZTg5NWY5NDg3NjYyNWExOGMxYTQ5ZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
aW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJUZXN0
SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAi
VUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEZvdW5k
YXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1tCmluZGV4IGUwNTBkNWIzYmNhMWVjZDU0
ZDM4MWVmZDIwODE0NzMwMDYwMTE5MzkuLjk5OWNhODcxZWNhMWVkYmExOGI1NThjYTIwZTg1Yjg1
MWU3MTA3Y2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlw
dENvbnRyb2xsZXJJT1MubW0KQEAgLTM3LDcgKzM3LDYgQEAKICNpbXBvcnQgIlRlc3RSdW5uZXJX
S1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCiAjaW1wb3J0ICJVSVNjcmlwdENvbnRl
eHQuaCIKLSNpbXBvcnQgIldLV2ViVmlld1Rlc3RpbmcuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0
cmluZy5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1VJU2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCAyNWVkODVjZTZkZjhh
MWJkYmQ5MTNhZmYyNzNlOWM1NDg1MDc4NmJlLi42YmRlMjYxNWVlZjA4MmQyZDk3ZjU4NGViOTcx
ODAxOTg3NjI1M2EzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9VSVNj
cmlwdENvbnRyb2xsZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVUlT
Y3JpcHRDb250cm9sbGVyTWFjLm1tCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbXBvcnQgIkV2ZW50
U2VyaWFsaXplck1hYy5oIgogI2ltcG9ydCAiUGxhdGZvcm1WaWV3SGVscGVycy5oIgogI2ltcG9y
dCAiUGxhdGZvcm1XZWJWaWV3LmgiCi0jaW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNpbXBv
cnQgIlNoYXJlZEV2ZW50U3RyZWFtc01hYy5oIgorI2ltcG9ydCAiVGVzdENvbnRyb2xsZXIuaCIK
KyNpbXBvcnQgIlBsYXRmb3JtV2ViVmlldy5oIgogI2ltcG9ydCAiU3RyaW5nRnVuY3Rpb25zLmgi
CiAjaW1wb3J0ICJUZXN0Q29udHJvbGxlci5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmll
dy5oIgogI2ltcG9ydCAiVUlTY3JpcHRDb250ZXh0LmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdUZXN0
aW5nLmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHQuaD4KICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWUuaD4K
</data>
<flag name="commit-queue"
          id="401242"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>