<?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>183503</bug_id>
          
          <creation_ts>2018-03-08 23:43:17 -0800</creation_ts>
          <short_desc>Improvements to fullscreen; new UI and security features</short_desc>
          <delta_ts>2018-03-12 17:24:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1405101</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-08 23:43:17 -0800</bug_when>
    <thetext>Improvements to fullscreen; new UI and security features</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405109</commentid>
    <comment_count>1</comment_count>
      <attachid>335404</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-09 00:01:12 -0800</bug_when>
    <thetext>Created attachment 335404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405344</commentid>
    <comment_count>2</comment_count>
      <attachid>335472</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-09 15:10:23 -0800</bug_when>
    <thetext>Created attachment 335472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405366</commentid>
    <comment_count>3</comment_count>
      <attachid>335479</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-09 15:36:09 -0800</bug_when>
    <thetext>Created attachment 335479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405385</commentid>
    <comment_count>4</comment_count>
      <attachid>335483</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-09 16:15:00 -0800</bug_when>
    <thetext>Created attachment 335483
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405386</commentid>
    <comment_count>5</comment_count>
      <attachid>335484</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-09 16:15:39 -0800</bug_when>
    <thetext>Created attachment 335484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405388</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-09 16:18:27 -0800</bug_when>
    <thetext>Attachment 335484 did not pass style-queue:


ERROR: Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:410:  The parameter name &quot;height&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:65:  Declaration has space between type name and * in m_xWeight * pow  [whitespace/declaration] [3]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:66:  Declaration has space between type name and * in m_yWeight * pow  [whitespace/declaration] [3]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:68:  Declaration has space between type name and * in m_xWeight * pow  [whitespace/declaration] [3]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:69:  Declaration has space between type name and * in m_yWeight * pow  [whitespace/declaration] [3]
Total errors found: 5 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405414</commentid>
    <comment_count>7</comment_count>
      <attachid>335484</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-03-09 17:33:27 -0800</bug_when>
    <thetext>Comment on attachment 335484
Patch

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

&gt; Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:27
&gt; +#include &quot;FullscreenTouchSecheuristic.h&quot;

As mentioned on IRC, i thought this name was a typo.

&gt; Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:29
&gt; +#if ENABLE(FULLSCREEN_API) &amp;&amp; PLATFORM(IOS)

Is FULLSCREEN_API disabled for IOS_SIMULATOR and MINIMAL_SIMULATOR? And watchOS and tvOS?

&gt; Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:72
&gt; +        return scaledDistance * (m_rampUpSpeed / deltaTime);

Does m_rampUpSpeed ever change?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.h:36
&gt; +namespace WebKit {
&gt; +class WebPageProxy;
&gt; +}

Never used.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:61
&gt; +    void setParent(WKFullScreenViewController *parent) { m_parent = parent; }
&gt; +
&gt; +    void rateChanged(bool isPlaying, float) override
&gt; +    {
&gt; +        m_parent.playing = isPlaying;
&gt; +    }
&gt; +
&gt; +    void pictureInPictureActiveChanged(bool active) override
&gt; +    {
&gt; +        m_parent.pictureInPictureActive = active;
&gt; +    }

Probably should guard for m_parent being nullptr, since it isn&apos;t required in the constructor.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:65
&gt; +    void setInterface(PlaybackSessionInterfaceAVKit* interface)
&gt; +    {
&gt; +        if (m_interface &amp;&amp; m_interface-&gt;playbackSessionModel())

Check m_interface != interface?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:93
&gt; +- (CGSize)intrinsicContentSize
&gt; +{
&gt; +    return _extrinsicContentSize;
&gt; +}

I thought you didn&apos;t need this, even when you provide the setter?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:102
&gt; +@interface WKFullScreenViewController () &lt;UIGestureRecognizerDelegate, UIToolbarDelegate&gt;
&gt; +@property (assign, nonatomic) WKWebView *_webView; // Cannot be retained, see &lt;rdar://problem/14884666&gt;.
&gt; +@property (readonly, nonatomic) WebFullScreenManagerProxy* _manager;
&gt; +@property (readonly, nonatomic) CGFloat _effectiveFullscreenInsetTop;
&gt; +@end

Is this public, or an extension? If it is an internal-only extension, I&apos;m not sure if we use () or (Private) any more. Probably ().

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:109
&gt; +    RetainPtr&lt;_WKExtrinsicButton&gt; _cancelButton;
&gt; +    RetainPtr&lt;_WKExtrinsicButton&gt; _pipButton;
&gt; +    RetainPtr&lt;UIButton&gt; _locationButton;

Do these need to be retained? (I never know)

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:129
&gt; +    _secheuristic.setRampUpSpeed(Seconds(0.25));
&gt; +    _secheuristic.setRampDownSpeed(Seconds(1.));

If these are the only places that set the values, it might be better to have them not-settable and just use constants?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:146
&gt; +    _playbackClient.setParent(nullptr);

It&apos;s just a pointer object in WKFullScreenViewControllerPlaybackSessionModelClient, so no real need to do this here.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:159
&gt; +    [UIView animateWithDuration:showHideAnimationDuration animations: ^{

Nit: No space before ^

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:189
&gt; +    PlaybackSessionManagerProxy* playbackSessionManager = page ? page-&gt;playbackSessionManager() : NULL;

nullptr

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:190
&gt; +    PlatformPlaybackSessionInterface* playbackSessionInterface = playbackSessionManager ? playbackSessionManager-&gt;controlsManagerInterface() : NULL;

nullptr

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:193
&gt; +    PlaybackSessionModel* playbackSessionModel = playbackSessionInterface ? playbackSessionInterface-&gt;playbackSessionModel() : NULL;

nullptr

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:200
&gt; +@synthesize prefersStatusBarHidden=_prefersStatusBarHidden;
&gt; +- (void)setPrefersStatusBarHidden:(BOOL)value

Nit: blank line.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:219
&gt; +    if (!_playing)
&gt; +        [self showUI];
&gt; +    else {
&gt; +        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideUI) object:nil];
&gt; +        NSTimeInterval hideDelay = autoHideDelay;
&gt; +        [self performSelector:@selector(hideUI) withObject:nil afterDelay:hideDelay];
&gt; +    }

don&apos;t we want to cancel any hideUI requests that were started when we move to the !_playing stage?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:235
&gt; +    [self setView:adoptNS([[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]).get()];

Was the idea here that the created RetainPtr stays alive until the end of loadView?

I&apos;m not sure why you call adoptNS if your only reference is inside self.view.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:246
&gt; +    [_cancelButton setTintColor:[UIColor whiteColor]];

Do we always want to hard-code the tint? What is the default?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:269
&gt; +    UILayoutGuide* safeArea = self.view.safeAreaLayoutGuide;
&gt; +    UILayoutGuide* margins = self.view.layoutMarginsGuide;

* on the other side

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:311
&gt; +    [coordinator animateAlongsideTransition: ^(id&lt;UIViewControllerTransitionCoordinatorContext&gt; context) {

Nit: no space before ^

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:316
&gt; +        void (^webViewUpdateBlock)() = ^{
&gt; +            [self._webView _overrideLayoutParametersWithMinimumLayoutSize:size maximumUnobscuredSizeOverride:size];
&gt; +        };
&gt; +
&gt; +        [self._webView _beginAnimatedResizeWithUpdates:webViewUpdateBlock];

Why make the local variable?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:334
&gt; +#pragma mark -
&gt; +#pragma mark UIGestureRecognizerDelegate

You did this with one pragma above.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:349
&gt; +#pragma mark -
&gt; +
&gt; +#pragma mark -

Why two?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:426
&gt; +    NSString *alertTitle = @&quot;Deceptive Website Warning&quot;;
&gt; +    NSString *alertMessage = [NSString stringWithFormat:@&quot;The website \&quot;%@\&quot; may be a deceptive website. Would you like to exit fullscreen?&quot;, (NSString *)self.location];

Needs to be localizable.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:431
&gt; +    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@&quot;Exit Fullscreen&quot; style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
&gt; +        [self _cancelAction:action];
&gt; +    }];

It&apos;s confusing that the exit button calls cancelAction, but the next UIAlertAction is called cancelAction. 
Shouldn&apos;t this just be calling exit full screen directly?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:146
&gt; +- (NSTimeInterval)transitionDuration:(id&lt;UIViewControllerContextTransitioning&gt;)transitionContext
&gt;  {
&gt; -    [NSObject cancelPreviousPerformRequestsWithTarget:self];
&gt; -    [[NSNotificationCenter defaultCenter] removeObserver:self];
&gt; -
&gt; -    [super dealloc];
&gt; +    const NSTimeInterval animationDuration = 0.2;
&gt; +    return animationDuration;
&gt;  }

Is there any reason to have this as a function?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:185
&gt; +    _maskView = adoptNS([[UIView alloc] init]);
&gt; +    [_maskView setBackgroundColor:[UIColor blackColor]];
&gt; +    [_maskView setBounds:_initialMaskViewBounds];
&gt; +    [_maskView setCenter:_initialMaskViewCenter];

You only need to create this once (I assume this instance can stay around)

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:195
&gt; +    [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

Yeah, maybe just use a static const for duration. And do we want ease in out over a regular ease?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:206
&gt; +    if (([self isAnimatingIn] &amp;&amp; !transitionCompleted) || (![self isAnimatingIn] &amp;&amp; transitionCompleted))
&gt; +        [_animatingView removeFromSuperview];

Do you need to actually test? You&apos;re about to set the RetainPtr to nil, so it will get deleted anyway.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:210
&gt; +    _maskView = nil;
&gt; +    _animatingView = nil;

Right, so here is where you nuke the views, but you could also just keep them around. You know that if you see one animation, you&apos;re almost certainly going to see another (the exit fullscreen).

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:220
&gt; +    _maskView = adoptNS([[UIView alloc] init]);
&gt; +    [_maskView setBackgroundColor:[UIColor blackColor]];
&gt; +    [_maskView setBounds:_initialMaskViewBounds];
&gt; +    [_maskView setCenter:_initialMaskViewCenter];

Maybe there should be a helper to create the mask view, since you do it more than once. Especially if you reuse it.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:228
&gt; +- (void)updateWithPercent:(CGFloat)percent

I thought other UIView animations always talked about progress as [0,1]. It&apos;s a bit strange that we use percent, but still mean [0,1] not [0,100].

Maybe this should just be setProgress:

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:270
&gt; +-(void)end:(BOOL)cancelled {

Nit: space after -

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:306
&gt; +    self = [super init];
&gt; +    if (!self)
&gt; +        return nil;

We tend to do this:

    if (!(self = [super init]))
        return nil;

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:327
&gt; +- (void)updateInteractiveTransition:(CGFloat)percentComplete withTranslation:(CGSize)translation
&gt;  {
&gt; -    return !_showsStatusBar;
&gt; +    [_animator updateWithPercent:percentComplete translation:translation anchor:_anchor];
&gt; +    [_context updateInteractiveTransition:percentComplete];

Again, I think other APIs just use &quot;progress&quot;

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:427
&gt; +    _rootViewController.get().view.backgroundColor = [UIColor clearColor];
&gt; +    _rootViewController.get().view.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);

Other places in this patch you use [] syntax to avoid the .get()

[[_rootViewController view] setBackgroundColor:]

I agree that looks ugly.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:439
&gt; +    [[_fullscreenViewController view] setFrame:[[_rootViewController view] bounds]];

... but here&apos;s an example.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:447
&gt; +    [[_fullscreenViewController view] addGestureRecognizer:_startDismissGestureRecognizer.get()];

... and here

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:452
&gt; +    [[_fullscreenViewController view] addGestureRecognizer:_interactiveDismissGestureRecognizer.get()];

... and here.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:461
&gt; +    [[_webViewPlaceholder layer] setName:@&quot;Fullscreen Placeholder View&quot;];

Again, need localization.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:636
&gt; +    if (auto* page = [_webView _page])
&gt; +        [_webView _page]-&gt;forceRepaint(_repaintCallback.copyRef());

Just page-&gt;forceRepaint(...

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:804
&gt; +    if (LinkPresentationLibrary())
&gt; +        domain = [url _lp_simplifiedDisplayString];

Interesting!

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:810
&gt; +        text = @&quot;data:&quot;;

Do we expect anyone to understand what this means?

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.h:40
&gt; +@property (nonatomic, retain, nullable) UIView *targetViewForSecondaryMaterialOverlay;
&gt; +@property (nonatomic, readonly) UIView *contentView;

Add a blank line above these.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.mm:42
&gt; +        effects.get() = @[[UIVisualEffect effectCompositingColor:[UIColor colorWithRed:(43.0 / 255.0) green:(46.0 / 255.0) blue:(48.0 / 255.0) alpha:1.0] withMode:UICompositingModeNormal alpha:1.0]];

Where does this magic come from? We should get the color from somewhere rather than hardcode it.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.mm:56
&gt; +            [UIVisualEffect effectCompositingColor:[UIColor blackColor] withMode:UICompositingModeNormal alpha:0.55],
&gt; +            [UIBlurEffect effectWithBlurRadius:UIRoundToScreenScale(17.5, [UIScreen mainScreen])],
&gt; +            [UIColorEffect colorEffectSaturate:1.8],
&gt; +            [UIVisualEffect effectCompositingColor:[UIColor whiteColor] withMode:UICompositingModeNormal alpha:0.14]

Same here.

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.mm:163
&gt; +@synthesize _stackView=_stackView;
&gt; +@synthesize _visualEffectView=_visualEffectView;

Why do you need these? Can&apos;t they just be @synthesize _stackView;

&gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.mm:185
&gt; +        [self _setContinuousCornerRadius:((CGRectGetHeight(bounds) &gt; 40.0) ? 16.0 : 8.0)];

More magic numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405453</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-09 23:32:00 -0800</bug_when>
    <thetext>(In reply to Dean Jackson from comment #7)
&gt; Comment on attachment 335484 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=335484&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:72
&gt; &gt; +        return scaledDistance * (m_rampUpSpeed / deltaTime);
&gt; 
&gt; Does m_rampUpSpeed ever change?

It could, conceivably, change. It currently doesn&apos;t.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.h:36
&gt; &gt; +namespace WebKit {
&gt; &gt; +class WebPageProxy;
&gt; &gt; +}
&gt; 
&gt; Never used.

Removed.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:61
&gt; &gt; +    void setParent(WKFullScreenViewController *parent) { m_parent = parent; }
&gt; &gt; +
&gt; &gt; +    void rateChanged(bool isPlaying, float) override
&gt; &gt; +    {
&gt; &gt; +        m_parent.playing = isPlaying;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    void pictureInPictureActiveChanged(bool active) override
&gt; &gt; +    {
&gt; &gt; +        m_parent.pictureInPictureActive = active;
&gt; &gt; +    }
&gt; 
&gt; Probably should guard for m_parent being nullptr, since it isn&apos;t required in
&gt; the constructor.

Since it&apos;s an Objective-C object, it being nullptr isn&apos;t dangerous.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:65
&gt; &gt; +    void setInterface(PlaybackSessionInterfaceAVKit* interface)
&gt; &gt; +    {
&gt; &gt; +        if (m_interface &amp;&amp; m_interface-&gt;playbackSessionModel())
&gt; 
&gt; Check m_interface != interface?

Done.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:93
&gt; &gt; +- (CGSize)intrinsicContentSize
&gt; &gt; +{
&gt; &gt; +    return _extrinsicContentSize;
&gt; &gt; +}
&gt; 
&gt; I thought you didn&apos;t need this, even when you provide the setter?

This is an overridden UIView method, -intrinsicContentSize (vs. -extrinsicContentSize).

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:102
&gt; &gt; +@interface WKFullScreenViewController () &lt;UIGestureRecognizerDelegate, UIToolbarDelegate&gt;
&gt; &gt; +@property (assign, nonatomic) WKWebView *_webView; // Cannot be retained, see &lt;rdar://problem/14884666&gt;.
&gt; &gt; +@property (readonly, nonatomic) WebFullScreenManagerProxy* _manager;
&gt; &gt; +@property (readonly, nonatomic) CGFloat _effectiveFullscreenInsetTop;
&gt; &gt; +@end
&gt; 
&gt; Is this public, or an extension? If it is an internal-only extension, I&apos;m
&gt; not sure if we use () or (Private) any more. Probably ().

It&apos;s an internal-only extension.  It has to be () or the automatic @property generation stuff doesn&apos;t work.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:109
&gt; &gt; +    RetainPtr&lt;_WKExtrinsicButton&gt; _cancelButton;
&gt; &gt; +    RetainPtr&lt;_WKExtrinsicButton&gt; _pipButton;
&gt; &gt; +    RetainPtr&lt;UIButton&gt; _locationButton;
&gt; 
&gt; Do these need to be retained? (I never know)

Probably not, since they&apos;re retained by the views that they&apos;re added to, but I really would hate to have that not be true in the future.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:129
&gt; &gt; +    _secheuristic.setRampUpSpeed(Seconds(0.25));
&gt; &gt; +    _secheuristic.setRampDownSpeed(Seconds(1.));
&gt; 
&gt; If these are the only places that set the values, it might be better to have
&gt; them not-settable and just use constants?

I am imagining some diagnostic UI that lets you change the values. I&apos;m also imagining running the heuristic over a large set of simulated data and tweaking all the settings to find the &quot;best&quot; settings for that data set.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:146
&gt; &gt; +    _playbackClient.setParent(nullptr);
&gt; 
&gt; It&apos;s just a pointer object in
&gt; WKFullScreenViewControllerPlaybackSessionModelClient, so no real need to do
&gt; this here.

Good point, but now that you mention it, we definitely need to remove the _playbackClient as a client of whatever it&apos;s current interface is. Will change.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:159
&gt; &gt; +    [UIView animateWithDuration:showHideAnimationDuration animations: ^{
&gt; 
&gt; Nit: No space before ^

Removed.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:189
&gt; &gt; +    PlaybackSessionManagerProxy* playbackSessionManager = page ? page-&gt;playbackSessionManager() : NULL;
&gt; 
&gt; nullptr

Changed.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:190
&gt; &gt; +    PlatformPlaybackSessionInterface* playbackSessionInterface = playbackSessionManager ? playbackSessionManager-&gt;controlsManagerInterface() : NULL;
&gt; 
&gt; nullptr

Ditto.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:193
&gt; &gt; +    PlaybackSessionModel* playbackSessionModel = playbackSessionInterface ? playbackSessionInterface-&gt;playbackSessionModel() : NULL;
&gt; 
&gt; nullptr

Ditto.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:200
&gt; &gt; +@synthesize prefersStatusBarHidden=_prefersStatusBarHidden;
&gt; &gt; +- (void)setPrefersStatusBarHidden:(BOOL)value
&gt; 
&gt; Nit: blank line.

Like, you want a blank line between the two? Added.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:219
&gt; &gt; +    if (!_playing)
&gt; &gt; +        [self showUI];
&gt; &gt; +    else {
&gt; &gt; +        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideUI) object:nil];
&gt; &gt; +        NSTimeInterval hideDelay = autoHideDelay;
&gt; &gt; +        [self performSelector:@selector(hideUI) withObject:nil afterDelay:hideDelay];
&gt; &gt; +    }
&gt; 
&gt; don&apos;t we want to cancel any hideUI requests that were started when we move
&gt; to the !_playing stage?

-showUI will do that.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:235
&gt; &gt; +    [self setView:adoptNS([[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]).get()];
&gt; 
&gt; Was the idea here that the created RetainPtr stays alive until the end of
&gt; loadView?
&gt;
&gt; I&apos;m not sure why you call adoptNS if your only reference is inside self.view.

No, just till the end of the call. It&apos;s a inline way of avoiding doing -autorelease when you&apos;re doing +alloc, -init.
 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:246
&gt; &gt; +    [_cancelButton setTintColor:[UIColor whiteColor]];
&gt; 
&gt; Do we always want to hard-code the tint? What is the default?

&quot;If the system cannot find a nondefault color in the hierarchy, this property’s value is a system-defined color instead.&quot;  So it depends on the system.  So yes, I think we want to hard-code this.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:269
&gt; &gt; +    UILayoutGuide* safeArea = self.view.safeAreaLayoutGuide;
&gt; &gt; +    UILayoutGuide* margins = self.view.layoutMarginsGuide;
&gt; 
&gt; * on the other side

Swapped.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:311
&gt; &gt; +    [coordinator animateAlongsideTransition: ^(id&lt;UIViewControllerTransitionCoordinatorContext&gt; context) {
&gt; 
&gt; Nit: no space before ^

Removed.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:316
&gt; &gt; +        void (^webViewUpdateBlock)() = ^{
&gt; &gt; +            [self._webView _overrideLayoutParametersWithMinimumLayoutSize:size maximumUnobscuredSizeOverride:size];
&gt; &gt; +        };
&gt; &gt; +
&gt; &gt; +        [self._webView _beginAnimatedResizeWithUpdates:webViewUpdateBlock];
&gt; 
&gt; Why make the local variable?

No good reason.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:334
&gt; &gt; +#pragma mark -
&gt; &gt; +#pragma mark UIGestureRecognizerDelegate
&gt; 
&gt; You did this with one pragma above.

Will collapse.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:349
&gt; &gt; +#pragma mark -
&gt; &gt; +
&gt; &gt; +#pragma mark -
&gt; 
&gt; Why two?

No good reason.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:426
&gt; &gt; +    NSString *alertTitle = @&quot;Deceptive Website Warning&quot;;
&gt; &gt; +    NSString *alertMessage = [NSString stringWithFormat:@&quot;The website \&quot;%@\&quot; may be a deceptive website. Would you like to exit fullscreen?&quot;, (NSString *)self.location];
&gt; 
&gt; Needs to be localizable.

Good point! Will WEB_UI_STRING() all these strings.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:431
&gt; &gt; +    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@&quot;Exit Fullscreen&quot; style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
&gt; &gt; +        [self _cancelAction:action];
&gt; &gt; +    }];
&gt; 
&gt; It&apos;s confusing that the exit button calls cancelAction, but the next
&gt; UIAlertAction is called cancelAction. 

Renamed these to &quot;exitAction&quot; and &quot;stayAction&quot;

&gt; Shouldn&apos;t this just be calling exit full screen directly?

That&apos;s a function of the window controller, which is why the &quot;-action&quot; property exists now.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:146
&gt; &gt; +- (NSTimeInterval)transitionDuration:(id&lt;UIViewControllerContextTransitioning&gt;)transitionContext
&gt; &gt;  {
&gt; &gt; -    [NSObject cancelPreviousPerformRequestsWithTarget:self];
&gt; &gt; -    [[NSNotificationCenter defaultCenter] removeObserver:self];
&gt; &gt; -
&gt; &gt; -    [super dealloc];
&gt; &gt; +    const NSTimeInterval animationDuration = 0.2;
&gt; &gt; +    return animationDuration;
&gt; &gt;  }
&gt; 
&gt; Is there any reason to have this as a function?

It&apos;s an override of the UIViewControllerAnimatedTransitioning protocol.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:185
&gt; &gt; +    _maskView = adoptNS([[UIView alloc] init]);
&gt; &gt; +    [_maskView setBackgroundColor:[UIColor blackColor]];
&gt; &gt; +    [_maskView setBounds:_initialMaskViewBounds];
&gt; &gt; +    [_maskView setCenter:_initialMaskViewCenter];
&gt; 
&gt; You only need to create this once (I assume this instance can stay around)

Ok.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:195
&gt; &gt; +    [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
&gt; 
&gt; Yeah, maybe just use a static const for duration. And do we want ease in out
&gt; over a regular ease?

Like I said above, we need to implement the protocol method, but they can both use the same static const. We use EaseInEaseOut on Mac, so I planned on doing the same here until HI told me otherwise.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:206
&gt; &gt; +    if (([self isAnimatingIn] &amp;&amp; !transitionCompleted) || (![self isAnimatingIn] &amp;&amp; transitionCompleted))
&gt; &gt; +        [_animatingView removeFromSuperview];
&gt; 
&gt; Do you need to actually test? You&apos;re about to set the RetainPtr to nil, so
&gt; it will get deleted anyway.

No, it won&apos;t, we&apos;ll just un-ref it. The animating view is just the presented view controller&apos;s view. The idea is that if the animation needs to reverse, it&apos;s less likely to glitch if you just leave it attached.

Also, keep in mind that this code was just moved around, and isn&apos;t new.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:210
&gt; &gt; +    _maskView = nil;
&gt; &gt; +    _animatingView = nil;
&gt; 
&gt; Right, so here is where you nuke the views, but you could also just keep
&gt; them around. You know that if you see one animation, you&apos;re almost certainly
&gt; going to see another (the exit fullscreen).

Good point, but this class just gets used for a single animation. A new WKFullscreenAnimationController gets created for each enter or dismiss animation.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:220
&gt; &gt; +    _maskView = adoptNS([[UIView alloc] init]);
&gt; &gt; +    [_maskView setBackgroundColor:[UIColor blackColor]];
&gt; &gt; +    [_maskView setBounds:_initialMaskViewBounds];
&gt; &gt; +    [_maskView setCenter:_initialMaskViewCenter];
&gt; 
&gt; Maybe there should be a helper to create the mask view, since you do it more
&gt; than once. Especially if you reuse it.

Sure!

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:228
&gt; &gt; +- (void)updateWithPercent:(CGFloat)percent
&gt; 
&gt; I thought other UIView animations always talked about progress as [0,1].
&gt; It&apos;s a bit strange that we use percent, but still mean [0,1] not [0,100].

Sure, we can change it to progress.

&gt; Maybe this should just be setProgress:
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:270
&gt; &gt; +-(void)end:(BOOL)cancelled {
&gt; 
&gt; Nit: space after -
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:306
&gt; &gt; +    self = [super init];
&gt; &gt; +    if (!self)
&gt; &gt; +        return nil;
&gt; 
&gt; We tend to do this:
&gt; 
&gt;     if (!(self = [super init]))
&gt;         return nil;
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:327
&gt; &gt; +- (void)updateInteractiveTransition:(CGFloat)percentComplete withTranslation:(CGSize)translation
&gt; &gt;  {
&gt; &gt; -    return !_showsStatusBar;
&gt; &gt; +    [_animator updateWithPercent:percentComplete translation:translation anchor:_anchor];
&gt; &gt; +    [_context updateInteractiveTransition:percentComplete];
&gt; 
&gt; Again, I think other APIs just use &quot;progress&quot;
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:427
&gt; &gt; +    _rootViewController.get().view.backgroundColor = [UIColor clearColor];
&gt; &gt; +    _rootViewController.get().view.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
&gt; 
&gt; Other places in this patch you use [] syntax to avoid the .get()
&gt; 
&gt; [[_rootViewController view] setBackgroundColor:]
&gt; 
&gt; I agree that looks ugly.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:439
&gt; &gt; +    [[_fullscreenViewController view] setFrame:[[_rootViewController view] bounds]];
&gt; 
&gt; ... but here&apos;s an example.

Yeah, I should use .get() syntax here.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:447
&gt; &gt; +    [[_fullscreenViewController view] addGestureRecognizer:_startDismissGestureRecognizer.get()];
&gt; 
&gt; ... and here
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:452
&gt; &gt; +    [[_fullscreenViewController view] addGestureRecognizer:_interactiveDismissGestureRecognizer.get()];
&gt; 
&gt; ... and here.

Dittos.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:461
&gt; &gt; +    [[_webViewPlaceholder layer] setName:@&quot;Fullscreen Placeholder View&quot;];
&gt; 
&gt; Again, need localization.

Really? This is debug info only.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:636
&gt; &gt; +    if (auto* page = [_webView _page])
&gt; &gt; +        [_webView _page]-&gt;forceRepaint(_repaintCallback.copyRef());
&gt; 
&gt; Just page-&gt;forceRepaint(...

Changed.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:804
&gt; &gt; +    if (LinkPresentationLibrary())
&gt; &gt; +        domain = [url _lp_simplifiedDisplayString];
&gt; 
&gt; Interesting!
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mmSource/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.mm:810
&gt; &gt; +        text = @&quot;data:&quot;;
&gt; 
&gt; Do we expect anyone to understand what this means?

I think this code was taken wholesale from other places we display the EV name.

&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.h:40
&gt; &gt; +@property (nonatomic, retain, nullable) UIView *targetViewForSecondaryMaterialOverlay;
&gt; &gt; +@property (nonatomic, readonly) UIView *contentView;
&gt; 
&gt; Add a blank line above these.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/ios/fullscreen/WKFullscreenStackView.mm:163
&gt; &gt; +@synthesize _stackView=_stackView;
&gt; &gt; +@synthesize _visualEffectView=_visualEffectView;
&gt; 
&gt; Why do you need these? Can&apos;t they just be @synthesize _stackView;

If we don&apos;t @synthesize them, they&apos;ll end up with ivar names like __stackView, rather than _stackView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405456</commentid>
    <comment_count>9</comment_count>
      <attachid>335504</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2018-03-10 00:02:38 -0800</bug_when>
    <thetext>Created attachment 335504
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405457</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-10 00:04:15 -0800</bug_when>
    <thetext>Attachment 335504 did not pass style-queue:


ERROR: Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:409:  The parameter name &quot;height&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:65:  Declaration has space between type name and * in m_xWeight * pow  [whitespace/declaration] [3]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:66:  Declaration has space between type name and * in m_yWeight * pow  [whitespace/declaration] [3]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:68:  Declaration has space between type name and * in m_xWeight * pow  [whitespace/declaration] [3]
ERROR: Source/WebKit/UIProcess/ios/fullscreen/FullscreenTouchSecheuristic.cpp:69:  Declaration has space between type name and * in m_yWeight * pow  [whitespace/declaration] [3]
Total errors found: 5 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405519</commentid>
    <comment_count>11</comment_count>
      <attachid>335504</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-10 17:49:05 -0800</bug_when>
    <thetext>Comment on attachment 335504
Patch for landing

Clearing flags on attachment: 335504

Committed r229512: &lt;https://trac.webkit.org/changeset/229512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405520</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-10 17:49:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405995</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-12 17:24:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/38397853&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335404</attachid>
            <date>2018-03-09 00:01:12 -0800</date>
            <delta_ts>2018-03-09 15:10:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183503-20180309000112.patch</filename>
            <type>text/plain</type>
            <size>136004</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGYxNmQxNTczYTk0NmE0ZjI0
N2ZhYWZiMGYwMDBmMTNjNWZiZGFmNzEuLjUyZGViNTJiNGQ1YWFlZmQwMDJjY2YyZTI0YmExZGYy
NTUwOTVlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDE4LTAzLTA4ICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmVtZW50cyB0byBmdWxs
c2NyZWVuOyBuZXcgVUkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM1MDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3cgdGhhdCB0aGUgaU9TIEZ1bGxzY3JlZW4g
Y29kZSBoYXMgbW9yZSB0aGFuIG9uZSBtYWpvciBjbGFzcywgbW92ZSBpdCBpbnRvIGFuIGlvcy8K
KyAgICAgICAgZGlyZWN0b3J5LgorCisgICAgICAgIENsZWFuIHVwIHRoZSBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVySU9TIGNsYXNzIHRvIG1vcmUgY2xlYXJseSBzZXBhcmF0ZSBleHRlcm5h
bAorICAgICAgICBmYWNpbmcgQVBJIGZyb20gcHVyZWx5IGludGVybmFsIGZ1bmN0aW9ucy4KKwor
ICAgICAgICBNb3ZlIHRoZSBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBpdHMg
b3duIGZpbGUuIEFkZCBzdXBwb3J0IGZvciBmdWxsc2NyZWVuCisgICAgICAgIHRvcCBpbnNldCBh
bmQgZnVsbHNjcmVlbiBhdXRvaGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgorCisgICAgICAg
IEFkZCBhIGhldXJpc3RpYyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGNvbnRyb2wgcmVs
YXRlZCB0b3VjaGVzIGFuZCBvbmVzIHRoYXQgbG9vaworICAgICAgICBtb3JlIGtleWJvYXJkIGlu
dGVyYWN0aW9ucy4KKworICAgICAgICBBZGQgYSBuZXcgVUlTdGFja1ZpZXcgYmFzZWQgY29udHJv
bCB0byBob2xkIHRoZSBmdWxsc2NyZWVuIGNvbnRyb2xzLgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
OjpzY29yZU9mTmV4dFRvdWNoKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2Vj
aGV1cmlzdGljOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYzo6ZGlzdGFuY2VTY29yZSk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYzo6YXR0ZW51YXRpb25GYWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaDogCisgICAgICAgIChX
ZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcFVwU3BlZWQpOgorICAg
ICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFJhbXBEb3duU3Bl
ZWQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFhX
ZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNl
dFlXZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OnNldFNpemUpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OnNldEdhbW1hKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
OjpzZXRHYW1tYUN1dG9mZik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxs
c2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldFBh
cmVudCk6CisgICAgICAgIChXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50OjpzZXRJbnRlcmZhY2UpOgorICAgICAgICAoLVtfV0tFeHRyaW5zaWNCdXR0
b24gc2V0RXh0cmluc2ljQ29udGVudFNpemU6XSk6CisgICAgICAgICgtW19XS0V4dHJpbnNpY0J1
dHRvbiBpbnRyaW5zaWNDb250ZW50U2l6ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3
Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgc2hvd1VJXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGhp
ZGVVSV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJv
bGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOl0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBsb2FkVmlld10pOgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlciB2aWV3V2lsbEFwcGVhcjpdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld0RpZExheW91dFN1YnZpZXdzXSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTp3aXRo
VHJhbnNpdGlvbkNvb3JkaW5hdG9yOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBwcmVmZXJyZWRTdGF0dXNCYXJTdHlsZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciBwcmVmZXJzU3RhdHVzQmFySGlkZGVuXSk6CisgICAgICAgICgtW1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6
ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNlaXZlVG91
Y2g6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9tYW5hZ2VyXSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9lZmZlY3RpdmVGdWxsc2Ny
ZWVuSW5zZXRUb3BdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX2Nh
bmNlbEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3Rv
Z2dsZVBpUEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIg
X3RvdWNoRGV0ZWN0ZWQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVy
IF9zdGF0dXNCYXJGcmFtZURpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9zaG93UGhpc2hpbmdBbGVydF0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVySU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpyZXBsYWNlVmlld1dpdGhWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V0tXZWJWaWV3
U3RhdGU6OmFwcGx5VG8pOgorICAgICAgICAoV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6c3RvcmUp
OgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHRyYW5zaXRpb25E
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBj
b25maWd1cmVJbml0aWFsQW5kRmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOl0pOgorICAgICAgICAo
LVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGVUcmFuc2l0aW9uOl0pOgor
ICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGlvbkVuZGVk
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHN0YXJ0SW50
ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyIHVwZGF0ZVdpdGhQZXJjZW50Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5B
bmltYXRpb25Db250cm9sbGVyIHVwZGF0ZVdpdGhQZXJjZW50OnRyYW5zbGF0aW9uOmFuY2hvcjpd
KToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBlbmQ6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBpbml0V2l0aEFuaW1h
dG9yOmFuY2hvcjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0
aW9uIHdhbnRzSW50ZXJhY3RpdmVTdGFydF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24gc3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246XSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiB1cGRhdGVJbnRlcmFjdGl2ZVRy
YW5zaXRpb246d2l0aFRyYW5zbGF0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24gY2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBmaW5pc2hJbnRlcmFjdGl2ZVRy
YW5zaXRpb25dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbml0
V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
ZGVhbGxvY10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVs
bFNjcmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZp
ZXdQbGFjZWhvbGRlcl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHJlcXVlc3RFeGl0RnVsbFNj
cmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGV4aXRGdWxs
U2NyZWVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5F
eGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dKToK
KyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBjbG9zZV0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRSZW1vdmVGcm9tU3Vw
ZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29n
bml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50
ZWRDb250cm9sbGVyOnByZXNlbnRpbmdDb250cm9sbGVyOnNvdXJjZUNvbnRyb2xsZXI6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxl
ckZvckRpc21pc3NlZENvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgaW50ZXJhY3Rpb25Db250cm9sbGVyRm9yRGlzbWlzc2FsOl0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0
ZWx5XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludmFsaWRh
dGVFVk9yZ2FuaXphdGlvbk5hbWVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfaXNTZWN1cmVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBfc2VydmVyVHJ1c3RdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBfRVZPcmdhbml6YXRpb25OYW1lXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgX3VwZGF0ZUxvY2F0aW9uSW5mb10pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgX3N0YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6XSk6CisgICAg
ICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludGVyYWN0aXZlRGlzbWlzc0No
YW5nZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVl
blN0YWNrVmlldy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tOiBBZGRlZC4KKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IGJhc2VFZmZlY3RzXSk6CisgICAgICAgICgrW1dLRnVsbHNj
cmVlblN0YWNrVmlldyBjb25maWd1cmVWaWV3OmZvclRpbnRFZmZlY3RXaXRoQ29sb3I6ZmlsdGVy
VHlwZTpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZpZ3VyZVZpZXc6
d2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpvcGFjaXR5OmZpbHRlcjpdKToKKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddKToKKyAg
ICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmll
dzpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5U2Vjb25kYXJ5R2x5
cGhUaW50VG9WaWV3Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgaW5pdFdp
dGhBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNr
VmlldyBzZXRUYXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Ol0pOgorICAgICAg
ICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgY29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tG
dWxsc2NyZWVuU3RhY2tWaWV3IF9zZXRBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAg
ICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBzZXRCb3VuZHM6XSk6CisgICAgICAgICgtW1dLRnVs
bHNjcmVlblN0YWNrVmlldyB1cGRhdGVDb25zdHJhaW50c10pOgorICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFVuY29uZGl0aW9uYWxpemUgbW9yZSBtZXRob2Rz
IGluIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSAoYW5kIHJlbGF0ZWQgY2xhc3NlcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVySU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFiNjIz
NDUyOGM1M2Y1NGZhMjk4NDMzZDQ0OWY0MGE3MWVlYjFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0o
SU9TKQotCi0jaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsgCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci19Ci0KLUBjbGFzcyBXZWJDb3JlRnVsbFNjcmVl
blBsYWNlaG9sZGVyVmlldzsKLUBjbGFzcyBXS1dlYlZpZXc7Ci0KLUBpbnRlcmZhY2UgV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyVHJhbnNp
dGlvbmluZ0RlbGVnYXRlPgotCi0tIChpZClpbml0V2l0aFdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXc7Ci0KLS0gKFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Kil3ZWJWaWV3UGxh
Y2Vob2xkZXI7Ci0KLS0gKEJPT0wpaXNGdWxsU2NyZWVuOwotCi0tICh2b2lkKWVudGVyRnVsbFNj
cmVlbjsKLS0gKHZvaWQpZXhpdEZ1bGxTY3JlZW47Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbFNj
cmVlbjsKLS0gKHZvaWQpY2xvc2U7Ci0tICh2b2lkKWJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aElu
aXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxG
cmFtZTsKLS0gKHZvaWQpYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVj
dClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7Ci0tICh2b2lkKXdl
YlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW47Ci0tICh2b2lkKXZp
ZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlOwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcklPUy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhNTU4MmUw
ZjNiMWZiNTE4NWEyNWUyY2U0NzA3YjU1MDJjMmZhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDg4NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1Mp
ICYmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MuaCIKLQotI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmll
dy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld1By
aXZhdGUuaCIKLSNpbXBvcnQgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1w
b3J0IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgotI2ltcG9ydCA8U2VjdXJpdHkvU2VjVHJ1
c3QuaD4KLSNpbXBvcnQgPFVJS2l0L1VJVmlzdWFsRWZmZWN0Vmlldy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRT
dHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1VSTEV4dHJhcy5oPgotI2ltcG9y
dCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGlu
a1ByZXNlbnRhdGlvblNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU1N0cmluZ1NQSS5o
PgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDx3dGYv
U29mdExpbmtpbmcuaD4KLSNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1TT0ZU
X0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTGlua1ByZXNlbnRhdGlvbikKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBzaG93SGlkZUFu
aW1hdGlvbkR1cmF0aW9uID0gMC4xOwotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIGF1dG9I
aWRlRGVsYXkgPSA0LjA7Ci1zdGF0aWMgY29uc3QgQ0dGbG9hdCBmb250U2l6ZSA9IDEyOwotCi1z
dGF0aWMgdm9pZCByZXBsYWNlVmlld1dpdGhWaWV3KFVJVmlldyAqdmlldywgVUlWaWV3ICpvdGhl
clZpZXcpCi17Ci0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9u
IHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgW290aGVyVmlldyBzZXRGcmFtZTpbdmlldyBm
cmFtZV1dOwotICAgIFtvdGhlclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbdmlldyBhdXRvcmVz
aXppbmdNYXNrXV07Ci0gICAgW1t2aWV3IHN1cGVydmlld10gaW5zZXJ0U3VidmlldzpvdGhlclZp
ZXcgYWJvdmVTdWJ2aWV3OnZpZXddOwotICAgIFt2aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwot
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLWVudW0gRnVsbFNjcmVlblN0YXRlIDog
TlNJbnRlZ2VyIHsKLSAgICBOb3RJbkZ1bGxTY3JlZW4sCi0gICAgV2FpdGluZ1RvRW50ZXJGdWxs
U2NyZWVuLAotICAgIEVudGVyaW5nRnVsbFNjcmVlbiwKLSAgICBJbkZ1bGxTY3JlZW4sCi0gICAg
V2FpdGluZ1RvRXhpdEZ1bGxTY3JlZW4sCi0gICAgRXhpdGluZ0Z1bGxTY3JlZW4sCi19OwotCi1z
dHJ1Y3QgV0tXZWJWaWV3U3RhdGUgewotICAgIGZsb2F0IF9zYXZlZFRvcENvbnRlbnRJbnNldCA9
IDAuMDsKLSAgICBDR0Zsb2F0IF9zYXZlZFBhZ2VTY2FsZSA9IDE7Ci0gICAgQ0dGbG9hdCBfc2F2
ZWRWaWV3U2NhbGUgPSAxLjA7Ci0gICAgQ0dGbG9hdCBfc2F2ZWRab29tU2NhbGUgPSAxOwotICAg
IFVJRWRnZUluc2V0cyBfc2F2ZWRFZGdlSW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOwotICAgIFVJ
RWRnZUluc2V0cyBfc2F2ZWRPYnNjdXJlZEluc2V0cyA9IFVJRWRnZUluc2V0c1plcm87Ci0gICAg
VUlFZGdlSW5zZXRzIF9zYXZlZFNjcm9sbEluZGljYXRvckluc2V0cyA9IFVJRWRnZUluc2V0c1pl
cm87Ci0gICAgQ0dQb2ludCBfc2F2ZWRDb250ZW50T2Zmc2V0ID0gQ0dQb2ludFplcm87Ci0KLSAg
ICB2b2lkIGFwcGx5VG8oV0tXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgW3dlYlZp
ZXcgX3NldFBhZ2VTY2FsZTpfc2F2ZWRQYWdlU2NhbGUgd2l0aE9yaWdpbjpDR1BvaW50TWFrZSgw
LCAwKV07Ci0gICAgICAgIFt3ZWJWaWV3IF9zZXRPYnNjdXJlZEluc2V0czpfc2F2ZWRPYnNjdXJl
ZEluc2V0c107Ci0gICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRDb250ZW50SW5zZXQ6
X3NhdmVkRWRnZUluc2V0XTsKLSAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldENvbnRl
bnRPZmZzZXQ6X3NhdmVkQ29udGVudE9mZnNldF07Ci0gICAgICAgIFtbd2ViVmlldyBzY3JvbGxW
aWV3XSBzZXRTY3JvbGxJbmRpY2F0b3JJbnNldHM6X3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRz
XTsKLSAgICAgICAgW3dlYlZpZXcgX3BhZ2VdLT5zZXRUb3BDb250ZW50SW5zZXQoX3NhdmVkVG9w
Q29udGVudEluc2V0KTsKLSAgICAgICAgW3dlYlZpZXcgX3NldFZpZXdTY2FsZTpfc2F2ZWRWaWV3
U2NhbGVdOwotICAgICAgICBbW3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Wm9vbVNjYWxlOl9zYXZl
ZFpvb21TY2FsZV07Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3RvcmUoV0tXZWJWaWV3KiB3ZWJW
aWV3KQotICAgIHsKLSAgICAgICAgX3NhdmVkUGFnZVNjYWxlID0gW3dlYlZpZXcgX3BhZ2VTY2Fs
ZV07Ci0gICAgICAgIF9zYXZlZE9ic2N1cmVkSW5zZXRzID0gW3dlYlZpZXcgX29ic2N1cmVkSW5z
ZXRzXTsKLSAgICAgICAgX3NhdmVkRWRnZUluc2V0ID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIGNv
bnRlbnRJbnNldF07Ci0gICAgICAgIF9zYXZlZENvbnRlbnRPZmZzZXQgPSBbW3dlYlZpZXcgc2Ny
b2xsVmlld10gY29udGVudE9mZnNldF07Ci0gICAgICAgIF9zYXZlZFNjcm9sbEluZGljYXRvcklu
c2V0cyA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzY3JvbGxJbmRpY2F0b3JJbnNldHNdOwotICAg
ICAgICBfc2F2ZWRUb3BDb250ZW50SW5zZXQgPSBbd2ViVmlldyBfcGFnZV0tPnRvcENvbnRlbnRJ
bnNldCgpOwotICAgICAgICBfc2F2ZWRWaWV3U2NhbGUgPSBbd2ViVmlldyBfdmlld1NjYWxlXTsK
LSAgICAgICAgX3NhdmVkWm9vbVNjYWxlID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHpvb21TY2Fs
ZV07Ci0gICAgfQotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0KLUBpbnRlcmZh
Y2UgX1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlciA8VUlHZXN0
dXJlUmVjb2duaXplckRlbGVnYXRlPgotQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgTlNB
cnJheSAqc2F2ZWRDb25zdHJhaW50czsKLUBwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIFVJ
VmlldyAqY29udGVudFZpZXc7Ci1AcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBpZCB0YXJn
ZXQ7Ci1AcHJvcGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gX1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHsKLSAgICBSZXRhaW5Q
dHI8VUlWaWV3PiBfYmFja2dyb3VuZFZpZXc7Ci0gICAgUmV0YWluUHRyPFVJTG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXI+IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyOwotICAgIFJldGFpblB0cjxV
SUJ1dHRvbj4gX2NhbmNlbEJ1dHRvbjsKLSAgICBSZXRhaW5QdHI8VUlCdXR0b24+IF9sb2NhdGlv
bkJ1dHRvbjsKLSAgICBSZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3RWaWV3PiBfdmlzdWFsRWZmZWN0
VmlldzsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZp
b3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotCi0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXpl
KXNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5z
aXRpb25Db29yZGluYXRvcj4pY29vcmRpbmF0b3IKLXsKLSAgICBbc3VwZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07
Ci0gICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmll
d0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7Ci0KLSAg
ICAgICAgdm9pZCAoXndlYlZpZXdVcGRhdGVCbG9jaykoKSA9IF57Ci0gICAgICAgICAgICBbKFdL
V2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0
aE1pbmltdW1MYXlvdXRTaXplOnNpemUgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6c2l6
ZV07Ci0gICAgICAgIH07Ci0KLSAgICAgICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250ZW50Vmll
d10gX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp3ZWJWaWV3VXBkYXRlQmxvY2tdOwot
ICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfc2V0SW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZTpbVUlBcHAgc3RhdHVzQmFyT3JpZW50YXRpb25dXTsKLSAgICB9IGNv
bXBsZXRpb246XihpZCA8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvckNvbnRl
eHQ+Y29udGV4dCkgewotICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBf
ZW5kQW5pbWF0ZWRSZXNpemVdOwotICAgIH1dOwotfQotCi0rICh2b2lkKWNvbmZpZ3VyZVZpZXc6
KFVJVmlldyAqKXZpZXcgd2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjooVUlDb2xvciAqKWZpbGxD
b2xvciBvcGFjaXR5OihDR0Zsb2F0KW9wYWNpdHkgZmlsdGVyOihOU1N0cmluZyAqKWZpbHRlcgot
ewotICAgIF9VSVZpc3VhbEVmZmVjdExheWVyQ29uZmlnICpiYXNlTGF5ZXJDb25maWcgPSBbX1VJ
VmlzdWFsRWZmZWN0TGF5ZXJDb25maWcgbGF5ZXJXaXRoRmlsbENvbG9yOmZpbGxDb2xvciBvcGFj
aXR5Om9wYWNpdHkgZmlsdGVyVHlwZTpmaWx0ZXJdOwotICAgIFtbW19VSVZpc3VhbEVmZmVjdENv
bmZpZyBjb25maWdXaXRoQ29udGVudENvbmZpZzpiYXNlTGF5ZXJDb25maWddIGNvbnRlbnRDb25m
aWddIGNvbmZpZ3VyZUxheWVyVmlldzp2aWV3XTsKLX0KLQotLSAodm9pZClfdXBkYXRlVHJhbnNw
YXJlbmN5T2ZWaXN1YWxFZmZlY3RWaWV3OihVSVZpc3VhbEVmZmVjdFZpZXcgKil2aXN1YWxFZmZl
Y3RWaWV3Ci17Ci0gICAgUmV0YWluUHRyPFVJVmlzdWFsRWZmZWN0PiB2aXN1YWxFZmZlY3Q7Ci0K
LSAgICBpZiAoVUlBY2Nlc3NpYmlsaXR5SXNSZWR1Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpIHsK
LSAgICAgICAgdmlzdWFsRWZmZWN0ID0gW1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0XTsKLSAg
ICAgICAgW1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6
W1VJQ29sb3IgY29sb3JXaXRoUmVkOig0My4wIC8gMjU1LjApIGdyZWVuOig0Ni4wIC8gMjU1LjAp
IGJsdWU6KDQ4LjAgLyAyNTUuMCkgYWxwaGE6MS4wXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
UmV0YWluUHRyPFVJQ29sb3JFZmZlY3Q+IHNhdHVyYXRpb25FZmZlY3QgPSBbVUlDb2xvckVmZmVj
dCBjb2xvckVmZmVjdFNhdHVyYXRlOjEuOF07Ci0gICAgICAgIFJldGFpblB0cjxVSUJsdXJFZmZl
Y3Q+IGJsdXJFZmZlY3QgPSBbVUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVzOlVJUm91
bmRUb1NjcmVlblNjYWxlKDE3LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVuXSldOwotICAgICAgICBS
ZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3Q+IGNvbWJpbmVkRWZmZWN0cyA9IFtVSVZpc3VhbEVmZmVj
dCBlZmZlY3RDb21iaW5pbmdFZmZlY3RzOkBbYmx1ckVmZmVjdC5nZXQoKSwgc2F0dXJhdGlvbkVm
ZmVjdC5nZXQoKV1dOwotICAgICAgICB2aXN1YWxFZmZlY3QgPSBjb21iaW5lZEVmZmVjdHM7Ci0g
ICAgICAgIFtbdmlzdWFsRWZmZWN0VmlldyBjb250ZW50Vmlld10gc2V0QmFja2dyb3VuZENvbG9y
Om5pbF07Ci0gICAgfQotCi0gICAgW3Zpc3VhbEVmZmVjdFZpZXcgc2V0RWZmZWN0OnZpc3VhbEVm
ZmVjdC5nZXQoKV07Ci19Ci0KLS0gKFVJVmlzdWFsRWZmZWN0VmlldyAqKXZpc3VhbEVmZmVjdFZp
ZXdXaXRoRnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIFJldGFpblB0cjxVSVZpc3VhbEVmZmVj
dFZpZXc+IHZpc3VhbEVmZmVjdFZpZXcgPSBhZG9wdE5TKFtbVUlWaXN1YWxFZmZlY3RWaWV3IGFs
bG9jXSBpbml0V2l0aEVmZmVjdDpbVUlWaXN1YWxFZmZlY3QgZW1wdHlFZmZlY3RdXSk7Ci0gICAg
W3NlbGYgX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlzdWFsRWZmZWN0Vmlldzp2aXN1YWxFZmZlY3RW
aWV3LmdldCgpXTsKLQotICAgIFJldGFpblB0cjxVSVZpZXc+IGJhY2tMYXllclRpbnRWaWV3ID0g
YWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbdmlzdWFsRWZmZWN0VmlldyBi
b3VuZHNdXSk7Ci0gICAgW2JhY2tMYXllclRpbnRWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KFVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJs
ZUhlaWdodCldOwotICAgIFtiYWNrTGF5ZXJUaW50VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFi
bGVkOk5PXTsKLSAgICBbW3NlbGYgY2xhc3NdIGNvbmZpZ3VyZVZpZXc6YmFja0xheWVyVGludFZp
ZXcuZ2V0KCkgd2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0
ZTowLjAgYWxwaGE6MC41NV0gb3BhY2l0eToxLjAgZmlsdGVyOmtDQUZpbHRlck5vcm1hbEJsZW5k
TW9kZV07Ci0gICAgW1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OmJh
Y2tMYXllclRpbnRWaWV3LmdldCgpXTsKLQotICAgIFJldGFpblB0cjxVSVZpZXc+IHRvcExheWVy
VGludFZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOlt2aXN1YWxF
ZmZlY3RWaWV3IGJvdW5kc11dKTsKLSAgICBbdG9wTGF5ZXJUaW50VmlldyBzZXRBdXRvcmVzaXpp
bmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVIZWlnaHQpXTsKLSAgICBbdG9wTGF5ZXJUaW50VmlldyBzZXRVc2VySW50ZXJh
Y3Rpb25FbmFibGVkOk5PXTsKLSAgICBbW3NlbGYgY2xhc3NdIGNvbmZpZ3VyZVZpZXc6dG9wTGF5
ZXJUaW50Vmlldy5nZXQoKSB3aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOltVSUNvbG9yIGNvbG9y
V2l0aFdoaXRlOjEuMCBhbHBoYTowLjE0XSBvcGFjaXR5OjEuMCBmaWx0ZXI6a0NBRmlsdGVyTm9y
bWFsQmxlbmRNb2RlXTsKLSAgICBbW3Zpc3VhbEVmZmVjdFZpZXcgY29udGVudFZpZXddIGFkZFN1
YnZpZXc6dG9wTGF5ZXJUaW50Vmlldy5nZXQoKV07Ci0KLSAgICBbc2VsZiBfdXBkYXRlVHJhbnNw
YXJlbmN5T2ZWaXN1YWxFZmZlY3RWaWV3OnZpc3VhbEVmZmVjdFZpZXcuZ2V0KCldOwotCi0gICAg
cmV0dXJuIHZpc3VhbEVmZmVjdFZpZXcuYXV0b3JlbGVhc2UoKTsKLX0KLQotc3RhdGljIFVJRWRn
ZUluc2V0cyBtaXJyb3JFZGdlSW5zZXRzKFVJRWRnZUluc2V0cyBpbnNldHMpCi17Ci0gICAgcmV0
dXJuIFVJRWRnZUluc2V0c01ha2UoaW5zZXRzLnRvcCwgaW5zZXRzLnJpZ2h0LCBpbnNldHMuYm90
dG9tLCBpbnNldHMubGVmdCk7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUxheW91dE1hcmdpbnMKLXsK
LSAgICBVSVZpZXcgKnZpZXcgPSBbc2VsZiB2aWV3XTsKLSAgICBbdmlldyBzZXRQcmVzZXJ2ZXNT
dXBlcnZpZXdMYXlvdXRNYXJnaW5zOk5PXTsKLQotICAgIFVJRWRnZUluc2V0cyB0YXJnZXRJbnNl
dHMgPSBbdmlldyBzYWZlQXJlYUluc2V0c107Ci0gICAgdGFyZ2V0SW5zZXRzLnRvcCA9IHN0ZDo6
bWF4KHRhcmdldEluc2V0cy50b3AsIDIwLjApOwotICAgIFt2aWV3IHNldExheW91dE1hcmdpbnM6
dGFyZ2V0SW5zZXRzXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKLXsKLSAg
ICBbc2VsZiBfdXBkYXRlTGF5b3V0TWFyZ2luc107Ci19Ci0KLS0gICh2b2lkKXNldExvY2F0aW9u
OihOU1N0cmluZyAqKWxvY2F0aW9uTmFtZSBzZWN1cmU6KEJPT0wpc2VjdXJlIHRydXN0ZWROYW1l
OihCT09MKXRydXN0ZWROYW1lIHRydXN0ZWRTaXRlOihCT09MKXRydXN0ZWRTaXRlCi17Ci0gICAg
VUlDb2xvciAqZ3JlZW5UaW50ID0gW1VJQ29sb3IgY29sb3JXaXRoUmVkOjEwMCAvIDI1NS4wIGdy
ZWVuOjE3NSAvIDI1NS4wIGJsdWU6OTkgLyAyNTUuMCBhbHBoYToxLjBdOwotICAgIFVJQ29sb3Ig
KndoaXRlVGludCA9IFtVSUNvbG9yIHdoaXRlQ29sb3JdOwotCi0gICAgZmxvYXQgaFBhZGRpbmcg
PSAxNDsKLSAgICBOU1N0cmluZyAqbG9ja0ltYWdlTmFtZSA9IEAiTG9ja01pbmkiOwotCi0gICAg
ZmxvYXQgbG9ja1NwYWNpbmcgPSBzZWN1cmUgPyAxMCA6IDA7Ci0KLSAgICBVSUVkZ2VJbnNldHMg
bG9jYXRpb25Db250ZW50RWRnZUluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgaFBhZGRpbmcr
bG9ja1NwYWNpbmcsIDAsIGhQYWRkaW5nKTsKLSAgICBVSUVkZ2VJbnNldHMgbG9jYXRpb25JbWFn
ZUVkZ2VJbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIC1sb2NrU3BhY2luZywgMCwgMCk7Ci0K
LSAgICBpZiAoW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uRm9yU2VtYW50aWND
b250ZW50QXR0cmlidXRlOltbc2VsZiB2aWV3XSBzZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGVdXSA9
PSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdCkgewotICAgICAgICBs
b2NhdGlvbkNvbnRlbnRFZGdlSW5zZXRzID0gbWlycm9yRWRnZUluc2V0cyhsb2NhdGlvbkNvbnRl
bnRFZGdlSW5zZXRzKTsKLSAgICAgICAgbG9jYXRpb25JbWFnZUVkZ2VJbnNldHMgPSBtaXJyb3JF
ZGdlSW5zZXRzKGxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzKTsKLSAgICAgICAgW19sb2NhdGlvbkJ1
dHRvbiBzZXRDb250ZW50SG9yaXpvbnRhbEFsaWdubWVudDpVSUNvbnRyb2xDb250ZW50SG9yaXpv
bnRhbEFsaWdubWVudFJpZ2h0XTsKLSAgICB9Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldFRp
dGxlQ29sb3I6KHRydXN0ZWROYW1lID8gZ3JlZW5UaW50IDogd2hpdGVUaW50KSBmb3JTdGF0ZTpV
SUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBpZiAoc2VjdXJlKSB7Ci0gICAgICAgIE5TQnVu
ZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgY2xhc3NdXTsKLSAgICAgICAgVUlJbWFnZSAqbG9ja0ltYWdlID0gW1VJSW1h
Z2UgaW1hZ2VOYW1lZDpsb2NrSW1hZ2VOYW1lIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0
aFRyYWl0Q29sbGVjdGlvbjpuaWxdOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdl
Oltsb2NrSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFs
d2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgICAgIFtb
X2xvY2F0aW9uQnV0dG9uIGltYWdlVmlld10gc2V0VGludENvbG9yOnRydXN0ZWRTaXRlID8gZ3Jl
ZW5UaW50IDogd2hpdGVUaW50XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUaW50Q29s
b3I6dHJ1c3RlZFNpdGUgPyBncmVlblRpbnQgOiB3aGl0ZVRpbnRdOwotICAgIH0gZWxzZQotICAg
ICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdlOm5pbCBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0
ZU5vcm1hbF07Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldENvbnRlbnRFZGdlSW5zZXRzOmxv
Y2F0aW9uQ29udGVudEVkZ2VJbnNldHNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SW1hZ2VF
ZGdlSW5zZXRzOmxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9u
IHNldFRpdGxlOmxvY2F0aW9uTmFtZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci19
Ci0KLS0gKHZvaWQpY3JlYXRlU3Vidmlld3MKLXsKLSAgICBfdmlzdWFsRWZmZWN0VmlldyA9IFtz
ZWxmIHZpc3VhbEVmZmVjdFZpZXdXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAyMCwgMjApXTsK
LQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0lu
dG9Db25zdHJhaW50czpOT107Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X3Zpc3VhbEVm
ZmVjdFZpZXcuZ2V0KCldOwotCi0gICAgX2NhbmNlbEJ1dHRvbiA9IFtVSUJ1dHRvbiBidXR0b25X
aXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldFRyYW5z
bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKLSAgICBbX2NhbmNlbEJ1
dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfY2FuY2VsQnV0
dG9uIHNldEJhY2tncm91bmRDb2xvcjogW1VJQ29sb3IgYmxhY2tDb2xvcl1dOwotICAgIFtbX2Nh
bmNlbEJ1dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldp
dGhUeXBlOmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0VGl0bGU6V0VC
X1VJX1NUUklORygiRG9uZSIsICJUZXh0IG9mIGJ1dHRvbiB0aGF0IGV4aXRzIGVsZW1lbnQgZnVs
bHNjcmVlbi4iKSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgW19jYW5jZWxC
dXR0b24gc2V0VGludENvbG9yOltVSUNvbG9yIHdoaXRlQ29sb3JdXTsKLSAgICBbW19jYW5jZWxC
dXR0b24gdGl0bGVMYWJlbF0gc2V0Rm9udDpbVUlGb250IHN5c3RlbUZvbnRPZlNpemU6Zm9udFNp
emVdXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9y
KGNhbmNlbEFjdGlvbjopIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRUb3VjaFVwSW5z
aWRlXTsKLQotICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2aWV3Ol9jYW5jZWxCdXR0b24uZ2V0KCld
OwotCi0gICAgX2xvY2F0aW9uQnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0
dG9uVHlwZVN5c3RlbV07Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jl
c2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRB
ZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0
QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGJsYWNrQ29sb3JdXTsKLSAgICBbW19sb2NhdGlvbkJ1
dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBl
OmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW1tfbG9jYXRpb25CdXR0b24gdGl0bGVMYWJlbF0gc2V0
TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOwotICAgIFtbX2xvY2F0
aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEFkanVzdHNGb250U2l6ZVRvRml0V2lkdGg6Tk9dOwot
ICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEZvbnQ6W1VJRm9udCBzeXN0ZW1G
b250T2ZTaXplOmZvbnRTaXplXV07Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X2xvY2F0
aW9uQnV0dG9uLmdldCgpXTsKLQotICAgIFVJTGF5b3V0R3VpZGUqIGNvbnRhaW5lckd1aWRlID0g
W1tzZWxmIHZpZXddIGxheW91dE1hcmdpbnNHdWlkZV07Ci0KLSAgICBbW1tfdmlzdWFsRWZmZWN0
VmlldyBsZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gbGVm
dEFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtbW192aXN1YWxFZmZlY3RWaWV3IHJpZ2h0
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gcmlnaHRBbmNob3Jd
XSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyB0b3BBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRBY3RpdmU6
WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyBoZWlnaHRBbmNob3JdIGNvbnN0cmFpbnRH
cmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50OjIwXSBzZXRBY3RpdmU6WUVTXTsKLQotICAgIE5T
TGF5b3V0Q29uc3RyYWludCAqYm90dG9tID0gW1tfdmlzdWFsRWZmZWN0VmlldyBib3R0b21BbmNo
b3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSB0b3BBbmNob3JdXTsK
LSAgICBbYm90dG9tIHNldFByaW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCAtIDFdOwot
ICAgIFtib3R0b20gc2V0QWN0aXZlOllFU107Ci0KLSAgICBbW1tfY2FuY2VsQnV0dG9uIGxlYWRp
bmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSBsZWFkaW5n
QW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2NhbmNlbEJ1dHRvbiB0b3BBbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRBY3Rp
dmU6WUVTXTsKLSAgICBbW1tfY2FuY2VsQnV0dG9uIGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZ
RVNdOwotCi0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIGhlaWdodEFuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9Db25zdGFudDoyMF0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2xvY2F0aW9uQnV0dG9u
IGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3
IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtbW19sb2NhdGlvbkJ1dHRvbiBs
ZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFsVG9BbmNob3I6W19jYW5j
ZWxCdXR0b24gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfbG9jYXRp
b25CdXR0b24gdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hv
cjpbW3NlbGYgdmlld10gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBOU0xh
eW91dENvbnN0cmFpbnQgKmNlbnRlcmluZ0NvbnN0cmFpbnQgPSBbW19sb2NhdGlvbkJ1dHRvbiBj
ZW50ZXJYQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gY2VudGVy
WEFuY2hvcl1dOwotICAgIFtjZW50ZXJpbmdDb25zdHJhaW50IHNldFByaW9yaXR5OlVJTGF5b3V0
UHJpb3JpdHlEZWZhdWx0TG93XTsKLSAgICBbY2VudGVyaW5nQ29uc3RyYWludCBzZXRBY3RpdmU6
WUVTXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRBbHBoYTowXTsKLSAgICBbX2NhbmNl
bEJ1dHRvbiBzZXRBbHBoYTowXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhhOjBdOwot
Ci0gICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEhpZGRlbjpZRVNdOwotICAgIFtfY2FuY2VsQnV0
dG9uIHNldEhpZGRlbjpZRVNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOllFU107
Ci19Ci0KLS0gKHZvaWQpbG9hZFZpZXcKLXsKLSAgICBbc2VsZiBzZXRWaWV3OmFkb3B0TlMoW1tV
SVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCldKS5n
ZXQoKV07Ci0gICAgW1tzZWxmIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9y
ZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCld
OwotCi0gICAgX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVj
dG9yKHNob3dDYW5jZWxCdXR0b246KV0pOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBz
ZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0Q2FuY2Vs
c1RvdWNoZXNJblZpZXc6Tk9dOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXRNaW5p
bXVtUHJlc3NEdXJhdGlvbjowXTsKLSAgICBbW3NlbGYgdmlld10gYWRkR2VzdHVyZVJlY29nbml6
ZXI6X3RvdWNoR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotICAgIFtzZWxmIGNyZWF0ZVN1YnZp
ZXdzXTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbEFwcGVhcjooQk9PTClhbmltYXRlZAotewotICAg
IFtbc2VsZiBjb250ZW50Vmlld10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07Ci0g
ICAgW1tzZWxmIGNvbnRlbnRWaWV3XSBzZXRGcmFtZTpbW3NlbGYgdmlld10gYm91bmRzXV07Ci0g
ICAgW1tzZWxmIHZpZXddIGluc2VydFN1YnZpZXc6W3NlbGYgY29udGVudFZpZXddIGF0SW5kZXg6
MF07Ci19Ci0KLS0gKHZvaWQpdmlld0RpZEFwcGVhcjooQk9PTClhbmltYXRlZAotewotICAgIFtz
ZWxmIF91cGRhdGVMYXlvdXRNYXJnaW5zXTsKLX0KLQotLSAodm9pZCljYW5jZWxBY3Rpb246KGlk
KXNlbmRlcgotewotICAgIFtbc2VsZiB0YXJnZXRdIHBlcmZvcm1TZWxlY3Rvcjpbc2VsZiBhY3Rp
b25dXTsKLX0KLQotLSAodm9pZCloaWRlQ2FuY2VsQnV0dG9uCi17Ci0gICAgW05TT2JqZWN0IGNh
bmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxl
Y3RvcihoaWRlQ2FuY2VsQnV0dG9uKSBvYmplY3Q6bmlsXTsKLSAgICBbVUlWaWV3IGFuaW1hdGVX
aXRoRHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOl57Ci0gICAg
ICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRBbHBoYTowXTsKLSAgICAgICAgW19jYW5jZWxCdXR0
b24gc2V0QWxwaGE6MF07Ci0gICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0QWxwaGE6MF07Ci0g
ICAgfSBjb21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCl7Ci0gICAgICAgIGlmIChmaW5pc2hlZCkg
ewotICAgICAgICAgICAgW19jYW5jZWxCdXR0b24gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAg
ICBbX2xvY2F0aW9uQnV0dG9uIHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW192aXN1YWxF
ZmZlY3RWaWV3IHNldEhpZGRlbjpZRVNdOwotICAgICAgICB9Ci0gICAgfV07Ci19Ci0KLS0gKHZv
aWQpc2hvd0NhbmNlbEJ1dHRvbjooaWQpc2VuZGVyCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFBy
ZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvciho
aWRlQ2FuY2VsQnV0dG9uKSBvYmplY3Q6bmlsXTsKLSAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKGhpZGVDYW5jZWxCdXR0b24pIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YXV0
b0hpZGVEZWxheV07Ci0gICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOnNob3dIaWRlQW5p
bWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uczogXnsKLSAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3
IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtfY2FuY2VsQnV0dG9uIHNldEhpZGRlbjpOT107Ci0g
ICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW192aXN1YWxF
ZmZlY3RWaWV3IHNldEFscGhhOjFdOwotICAgICAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBbHBoYTox
XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRBbHBoYToxXTsKLSAgICB9XTsKLX0KLQot
LSAodm9pZClzZXRUYXJnZXQ6KGlkKXRhcmdldCBhY3Rpb246KFNFTClhY3Rpb24KLXsKLSAgICBb
c2VsZiBzZXRUYXJnZXQ6dGFyZ2V0XTsKLSAgICBbc2VsZiBzZXRBY3Rpb246YWN0aW9uXTsKLX0K
LQotLy8gTUFSSyAtIFVJR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZQotCi0tIChCT09MKWdlc3R1
cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hv
dWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCi17Ci0gICAgcmV0dXJuIFlFUzsK
LX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIF9XS0Z1bGxzY3JlZW5Sb290Vmlld0NvbnRyb2xsZXIg
OiBVSVZpZXdDb250cm9sbGVyCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBfV0tGdWxsc2NyZWVu
Um9vdFZpZXdDb250cm9sbGVyIHsKLSAgICBCT09MIF9zaG93c1N0YXR1c0JhcjsKLX0KLQotLSAo
dm9pZClzZXRTaG93c1N0YXR1c0JhcjooQk9PTCl2YWx1ZQotewotICAgIF9zaG93c1N0YXR1c0Jh
ciA9IHZhbHVlOwotICAgIFtzZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5jZVVwZGF0ZV07
Ci19Ci0KLS0gKEJPT0wpcHJlZmVyc1N0YXR1c0JhckhpZGRlbgotewotICAgIHJldHVybiAhX3No
b3dzU3RhdHVzQmFyOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tGdWxsc2NyZWVuQW5pbWF0
aW9uQ29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0
aW9uaW5nPgotQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3Q29udHJvbGxlciog
dmlld0NvbnRyb2xsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IGluaXRpYWxGcmFt
ZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZmluYWxGcmFtZTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBnZXR0ZXI9aXNBbmltYXRpbmdJbikgQk9PTCBhbmltYXRpbmdJbjsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIKLQotLSAo
TlNUaW1lSW50ZXJ2YWwpdHJhbnNpdGlvbkR1cmF0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29u
dGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Ci17Ci0gICAgY29uc3QgTlNUaW1l
SW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbkR1
cmF0aW9uOwotfQotCi0tICh2b2lkKWFuaW1hdGVUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9s
bGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Ci17Ci0gICAgVUlWaWV3
ICpjb250YWluZXJWaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IGNvbnRhaW5lclZpZXddOwotICAg
IFVJVmlldyAqZnJvbVZpZXcgPSBbdHJhbnNpdGlvbkNvbnRleHQgdmlld0ZvcktleTpVSVRyYW5z
aXRpb25Db250ZXh0RnJvbVZpZXdLZXldOwotICAgIFVJVmlldyAqdG9WaWV3ID0gW3RyYW5zaXRp
b25Db250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dFRvVmlld0tleV07Ci0KLSAg
ICBDR1JlY3QgaW5saW5lRnJhbWUgPSBfYW5pbWF0aW5nSW4gPyBfaW5pdGlhbEZyYW1lIDogX2Zp
bmFsRnJhbWU7Ci0gICAgQ0dSZWN0IGZ1bGxzY3JlZW5GcmFtZSA9IF9hbmltYXRpbmdJbiA/IF9m
aW5hbEZyYW1lIDogX2luaXRpYWxGcmFtZTsKLSAgICBVSVZpZXcgKmFuaW1hdGluZ1ZpZXcgPSBf
YW5pbWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsKLSAgICAKLSAgICBDR1JlY3QgYm91bmRz
UmVjdCA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdChGbG9hdFJlY3QoaW5s
aW5lRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBmdWxsc2NyZWVuRnJhbWUpOwotICAgIGJv
dW5kc1JlY3Qub3JpZ2luID0gQ0dQb2ludFplcm87Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbWFz
a1ZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgW21hc2tWaWV3IHNl
dEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBibGFja0NvbG9yXV07Ci0gICAgW21hc2tWaWV3IHNl
dEJvdW5kczpfYW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0IDogW2FuaW1hdGluZ1ZpZXcgYm91bmRz
XV07Ci0gICAgW21hc2tWaWV3IHNldENlbnRlcjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFth
bmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFthbmltYXRpbmdWaWV3IGJvdW5k
c10pKV07Ci0gICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bWFza1ZpZXcuZ2V0KCldOwot
ICAgIAotICAgIEZsb2F0UmVjdCBzY2FsZVJlY3QgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0
aW9Bcm91bmRSZWN0KEZsb2F0UmVjdChmdWxsc2NyZWVuRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRp
bygpLCBpbmxpbmVGcmFtZSk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2NhbGVUcmFuc2Zvcm0g
PSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZVJlY3Qud2lkdGgoKSAvIGZ1bGxzY3Jl
ZW5GcmFtZS5zaXplLndpZHRoLCBzY2FsZVJlY3QuaGVpZ2h0KCkgLyBmdWxsc2NyZWVuRnJhbWUu
c2l6ZS5oZWlnaHQpOwotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0ZVRyYW5zZm9ybSA9
IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKENHUmVjdEdldE1pZFgoaW5saW5lRnJh
bWUpIC0gQ0dSZWN0R2V0TWlkWChmdWxsc2NyZWVuRnJhbWUpLCBDR1JlY3RHZXRNaWRZKGlubGlu
ZUZyYW1lKSAtIENHUmVjdEdldE1pZFkoZnVsbHNjcmVlbkZyYW1lKSk7Ci0gICAgCi0gICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gZmluYWxUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChz
Y2FsZVRyYW5zZm9ybSwgdHJhbnNsYXRlVHJhbnNmb3JtKTsKLQotICAgIFthbmltYXRpbmdWaWV3
IHNldFRyYW5zZm9ybTpfYW5pbWF0aW5nSW4gPyBmaW5hbFRyYW5zZm9ybSA6IENHQWZmaW5lVHJh
bnNmb3JtSWRlbnRpdHldOwotICAgIAotICAgIFtjb250YWluZXJWaWV3IGFkZFN1YnZpZXc6YW5p
bWF0aW5nVmlld107Ci0KLSAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246W3NlbGYgdHJh
bnNpdGlvbkR1cmF0aW9uOnRyYW5zaXRpb25Db250ZXh0XSBkZWxheTowIG9wdGlvbnM6VUlWaWV3
QW5pbWF0aW9uT3B0aW9uQ3VydmVFYXNlSW5PdXQgYW5pbWF0aW9uczpeewotICAgICAgICBbYW5p
bWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2FuaW1hdGluZ0luID8gQ0dBZmZpbmVUcmFuc2Zvcm1J
ZGVudGl0eSA6IGZpbmFsVHJhbnNmb3JtXTsKLSAgICAgICAgW21hc2tWaWV3IHNldEJvdW5kczpf
YW5pbWF0aW5nSW4gPyBhbmltYXRpbmdWaWV3LmJvdW5kcyA6IGJvdW5kc1JlY3RdOwotICAgICAg
ICBbbWFza1ZpZXcgc2V0Q2VudGVyOkNHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW2FuaW1hdGlu
Z1ZpZXcgYm91bmRzXSksIENHUmVjdEdldE1pZFkoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpXTsK
LSAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKXsKLSAgICAgICAgQk9PTCBzdWNjZXNz
ID0gIVt0cmFuc2l0aW9uQ29udGV4dCB0cmFuc2l0aW9uV2FzQ2FuY2VsbGVkXTsKLQotICAgICAg
ICBpZiAoKFtzZWxmIGlzQW5pbWF0aW5nSW5dICYmICFzdWNjZXNzKSB8fCAoIVtzZWxmIGlzQW5p
bWF0aW5nSW5dICYmIHN1Y2Nlc3MpKQotICAgICAgICAgICAgW2FuaW1hdGluZ1ZpZXcgcmVtb3Zl
RnJvbVN1cGVydmlld107Ci0KLSAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJh
bnNpdGlvbjpzdWNjZXNzXTsKLSAgICAgICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bmls
XTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClhbmltYXRpb25FbmRlZDooQk9PTCl0cmFuc2l0aW9u
Q29tcGxldGVkCi17Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgewotICAgIFdLV2ViVmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSBy
ZXRhaW5lZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS8xNDg4NDY2Nj4uCi0gICAgUmV0YWluUHRyPFVJ
Vmlldz4gX3dlYlZpZXdQbGFjZWhvbGRlcjsKLQotICAgIEZ1bGxTY3JlZW5TdGF0ZSBfZnVsbFNj
cmVlblN0YXRlOwotICAgIFdLV2ViVmlld1N0YXRlIF92aWV3U3RhdGU7Ci0KLSAgICBSZXRhaW5Q
dHI8VUlXaW5kb3c+IF93aW5kb3c7Ci0gICAgUmV0YWluUHRyPF9XS0Z1bGxzY3JlZW5Sb290Vmll
d0NvbnRyb2xsZXI+IF9yb290Vmlld0NvbnRyb2xsZXI7Ci0KLSAgICBSZWZQdHI8V2ViS2l0OjpW
b2lkQ2FsbGJhY2s+IF9yZXBhaW50Q2FsbGJhY2s7Ci0gICAgUmV0YWluUHRyPFVJVmlld0NvbnRy
b2xsZXI+IF92aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbjsKLSAgICBSZXRhaW5QdHI8X1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyPiBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyOwotCi0g
ICAgQ0dSZWN0IF9pbml0aWFsRnJhbWU7Ci0gICAgQ0dSZWN0IF9maW5hbEZyYW1lOwotCi0gICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBfRVZPcmdhbml6YXRpb25OYW1lOwotICAgIEJPT0wgX0VWT3Jn
YW5pemF0aW9uTmFtZUlzVmFsaWQ7Ci0KLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFy
ayBJbml0aWFsaXphdGlvbgotLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3Ci17Ci0gICAgaWYgKCFbc3VwZXIgaW5pdF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
X3dlYlZpZXcgPSB3ZWJWaWV3OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhU
YXJnZXQ6c2VsZl07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjpzZWxmXTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotI3ByYWdt
YSBtYXJrIC0KLSNwcmFnbWEgbWFyayBBY2Nlc3NvcnMKLQotLSAoQk9PTClpc0Z1bGxTY3JlZW4K
LXsKLSAgICByZXR1cm4gX2Z1bGxTY3JlZW5TdGF0ZSA9PSBXYWl0aW5nVG9FbnRlckZ1bGxTY3Jl
ZW4KLSAgICAgICAgfHwgX2Z1bGxTY3JlZW5TdGF0ZSA9PSBFbnRlcmluZ0Z1bGxTY3JlZW4KLSAg
ICAgICAgfHwgX2Z1bGxTY3JlZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW47Ci19Ci0KLS0gKFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3ICopd2ViVmlld1BsYWNlaG9sZGVyCi17Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBFeHBvc2VkIElu
dGVyZmFjZQotCi0tICh2b2lkKV9pbnZhbGlkYXRlRVZPcmdhbml6YXRpb25OYW1lCi17Ci0gICAg
X0VWT3JnYW5pemF0aW9uTmFtZSA9IG5pbDsKLSAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxp
ZCA9IE5POwotfQotCi0tIChCT09MKWlzU2VjdXJlCi17Ci0gICAgcmV0dXJuIF93ZWJWaWV3Lmhh
c09ubHlTZWN1cmVDb250ZW50OwotfQotCi0tIChTZWNUcnVzdFJlZilfc2VydmVyVHJ1c3QKLXsK
LSAgICByZXR1cm4gX3dlYlZpZXcuc2VydmVyVHJ1c3Q7Ci19Ci0KLS0gKE5TU3RyaW5nICopX0VW
T3JnYW5pemF0aW9uTmFtZQotewotICAgIGlmICghc2VsZi5pc1NlY3VyZSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIGlmIChfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCkKLSAgICAgICAg
cmV0dXJuIF9FVk9yZ2FuaXphdGlvbk5hbWUuZ2V0KCk7Ci0KLSAgICBBU1NFUlQoIV9FVk9yZ2Fu
aXphdGlvbk5hbWUuZ2V0KCkpOwotICAgIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkID0gWUVT
OwotCi0gICAgU2VjVHJ1c3RSZWYgdHJ1c3QgPSBbc2VsZiBfc2VydmVyVHJ1c3RdOwotICAgIGlm
ICghdHJ1c3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU0RpY3Rpb25hcnkgKmluZm9E
aWN0aW9uYXJ5ID0gWyhfX2JyaWRnZSBOU0RpY3Rpb25hcnkgKilTZWNUcnVzdENvcHlJbmZvKHRy
dXN0KSBhdXRvcmVsZWFzZV07Ci0gICAgLy8gSWYgU2VjVHJ1c3RDb3B5SW5mbyByZXR1cm5lZCBO
VUxMIHRoZW4gaXQncyBsaWtlbHkgdGhhdCB0aGUgU2VjVHJ1c3RSZWYgaGFzIG5vdCBiZWVuIGV2
YWx1YXRlZAotICAgIC8vIGFuZCB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB3
ZSBuZWVkIGlzIHRvIGNhbGwgU2VjVHJ1c3RFdmFsdWF0ZSBvdXJzZWx2ZXMuCi0gICAgaWYgKCFp
bmZvRGljdGlvbmFyeSkgewotICAgICAgICBTZWNUcnVzdFJlc3VsdFR5cGUgcmVzdWx0ID0ga1Nl
Y1RydXN0UmVzdWx0UHJvY2VlZDsKLSAgICAgICAgT1NTdGF0dXMgZXJyID0gU2VjVHJ1c3RFdmFs
dWF0ZSh0cnVzdCwgJnJlc3VsdCk7Ci0gICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgcmVzdWx0
ID09IGtTZWNUcnVzdFJlc3VsdFByb2NlZWQpCi0gICAgICAgICAgICBpbmZvRGljdGlvbmFyeSA9
IFsoX19icmlkZ2UgTlNEaWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3Jl
bGVhc2VdOwotICAgICAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KQotICAgICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgRVYgY2VydGlmaWNhdGUg
aXMgdmFsaWQgYWdhaW5zdCBvdXIgY2VydGlmaWNhdGUgY2hhaW4uCi0gICAgaWQgaGFzRVYgPSBb
aW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVz
dEluZm9FeHRlbmRlZFZhbGlkYXRpb25LZXldOwotICAgIGlmICghW2hhc0VWIGlzS2luZE9mQ2xh
c3M6W05TVmFsdWUgY2xhc3NdXSB8fCAhW2hhc0VWIGJvb2xWYWx1ZV0pCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjb3VsZCBjb250YWN0IHJldm9jYXRp
b24gc2VydmVyIGFuZCBpdCBpcyBzdGlsbCB2YWxpZC4KLSAgICBpZCBpc05vdFJldm9rZWQgPSBb
aW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVz
dEluZm9SZXZvY2F0aW9uS2V5XTsKLSAgICBpZiAoIVtpc05vdFJldm9rZWQgaXNLaW5kT2ZDbGFz
czpbTlNWYWx1ZSBjbGFzc11dIHx8ICFbaXNOb3RSZXZva2VkIGJvb2xWYWx1ZV0pCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBfRVZPcmdhbml6YXRpb25OYW1lID0gW2luZm9EaWN0aW9uYXJ5
IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvQ29tcGFueU5h
bWVLZXldOwotICAgIHJldHVybiBfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpOwotfQotCi0tICh2
b2lkKXVwZGF0ZUxvY2F0aW9uSW5mbwotewotICAgIE5TVVJMKiB1cmwgPSBfd2ViVmlldy5fY29t
bWl0dGVkVVJMOwotCi0gICAgTlNTdHJpbmcgKkVWT3JnYW5pemF0aW9uTmFtZSA9IFtzZWxmIF9F
Vk9yZ2FuaXphdGlvbk5hbWVdOwotICAgIEJPT0wgc2hvd3NFVk9yZ2FuaXphdGlvbk5hbWUgPSBb
RVZPcmdhbml6YXRpb25OYW1lIGxlbmd0aF0gPiAwOwotCi0gICAgTlNTdHJpbmcgKmRvbWFpbiA9
IG5pbDsKLQotICAgIGlmIChMaW5rUHJlc2VudGF0aW9uTGlicmFyeSgpKQotICAgICAgICBkb21h
aW4gPSBbdXJsIF9scF9zaW1wbGlmaWVkRGlzcGxheVN0cmluZ107Ci0gICAgZWxzZQotICAgICAg
ICBkb21haW4gPSB1c2VyVmlzaWJsZVN0cmluZyh1cmwpOwotCi0gICAgTlNTdHJpbmcgKnRleHQg
PSBuaWw7Ci0gICAgaWYgKFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImRh
dGEiXSA9PSBOU09yZGVyZWRTYW1lKQotICAgICAgICB0ZXh0ID0gQCJkYXRhOiI7Ci0gICAgZWxz
ZSBpZiAoc2hvd3NFVk9yZ2FuaXphdGlvbk5hbWUpCi0gICAgICAgIHRleHQgPSBFVk9yZ2FuaXph
dGlvbk5hbWU7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0ID0gZG9tYWluOwotCi0gICAgW19mdWxs
c2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0TG9jYXRpb246dGV4dCBzZWN1cmU6c2VsZi5pc1NlY3Vy
ZSB0cnVzdGVkTmFtZTpzaG93c0VWT3JnYW5pemF0aW9uTmFtZSB0cnVzdGVkU2l0ZTohIUVWT3Jn
YW5pemF0aW9uTmFtZV07Ci19Ci0KLS0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuCi17Ci0gICAgaWYg
KFtzZWxmIGlzRnVsbFNjcmVlbl0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9pbnZh
bGlkYXRlRVZPcmdhbml6YXRpb25OYW1lXTsKLQotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBXYWl0
aW5nVG9FbnRlckZ1bGxTY3JlZW47Ci0KLSAgICBfd2luZG93ID0gYWRvcHROUyhbW1VJV2luZG93
IGFsbG9jXSBpbml0XSk7Ci0gICAgW193aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9y
IGNsZWFyQ29sb3JdXTsKLSAgICBfcm9vdFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XS0Z1
bGxzY3JlZW5Sb290Vmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX3dpbmRvdyBz
ZXRSb290Vmlld0NvbnRyb2xsZXI6X3Jvb3RWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgW1tf
d2luZG93IHJvb3RWaWV3Q29udHJvbGxlcl0gc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOltfd2luZG93IGJvdW5kc11dKS5nZXQoKV07Ci0gICAgW1tbX3dpbmRv
dyByb290Vmlld0NvbnRyb2xsZXJdIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBj
bGVhckNvbG9yXV07Ci0gICAgW1tbX3dpbmRvdyByb290Vmlld0NvbnRyb2xsZXJdIHZpZXddIHNl
dEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZp
ZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOwotICAgIFtfd2luZG93IHNldFdpbmRvd0xl
dmVsOlVJV2luZG93TGV2ZWxOb3JtYWwgLSAxXTsKLSAgICBbX3dpbmRvdyBzZXRIaWRkZW46Tk9d
OwotICAgIF92aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbiA9IFtfd2luZG93IHJvb3RWaWV3
Q29udHJvbGxlcl07Ci0KLSAgICBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyID0gYWRvcHROUyhb
W19XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtfZnVsbHNj
cmVlblZpZXdDb250cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsKLSAgICBb
X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9k
YWxQcmVzZW50YXRpb25DdXN0b21dOwotICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNl
dFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07Ci0g
ICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOltbX3ZpZXdDb250
cm9sbGVyRm9yUHJlc2VudGF0aW9uIHZpZXddIGJvdW5kc11dOwotICAgIFtzZWxmIHVwZGF0ZUxv
Y2F0aW9uSW5mb107Ci0KLSAgICBbc2VsZiBfbWFuYWdlcl0tPnNhdmVTY3JvbGxQb3NpdGlvbigp
OwotCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyh0
cnVlKTsKLQotICAgIF92aWV3U3RhdGUuc3RvcmUoX3dlYlZpZXcpOwotCi0gICAgX3dlYlZpZXdQ
bGFjZWhvbGRlciA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICBbW193ZWJW
aWV3UGxhY2Vob2xkZXIgbGF5ZXJdIHNldE5hbWU6QCJGdWxsc2NyZWVuIFBsYWNlaG9sZGVyIFZm
aWV3Il07Ci0KLSAgICBXS1NuYXBzaG90Q29uZmlndXJhdGlvbiogY29uZmlnID0gbmlsOwotICAg
IFtfd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb25maWcgY29tcGxldGlv
bkhhbmRsZXI6XihVSUltYWdlICogc25hcHNob3RJbWFnZSwgTlNFcnJvciAqIGVycm9yKXsKLSAg
ICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlz
YWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgCi0gICAgICAgIFtbX3dlYlZpZXdQbGFjZWhvbGRl
ciBsYXllcl0gc2V0Q29udGVudHM6KGlkKVtzbmFwc2hvdEltYWdlIENHSW1hZ2VdXTsKLSAgICAg
ICAgcmVwbGFjZVZpZXdXaXRoVmlldyhfd2ViVmlldywgX3dlYlZpZXdQbGFjZWhvbGRlci5nZXQo
KSk7Ci0KLSAgICAgICAgV0tXZWJWaWV3U3RhdGUoKS5hcHBseVRvKF93ZWJWaWV3KTsKLSAgICAg
ICAgCi0gICAgICAgIFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVz
aXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpXTsK
LSAgICAgICAgW193ZWJWaWV3IHNldEZyYW1lOltfd2luZG93IGJvdW5kc11dOwotICAgICAgICBb
X3dpbmRvdyBpbnNlcnRTdWJ2aWV3Ol93ZWJWaWV3IGF0SW5kZXg6MF07Ci0gICAgICAgIFtfd2Vi
VmlldyBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOltfd2lu
ZG93IGJvdW5kc10uc2l6ZSBtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTpbX3dpbmRvdyBi
b3VuZHNdLnNpemVdOwotCi0gICAgICAgIFtfd2ViVmlldyBzZXROZWVkc0xheW91dF07Ci0gICAg
ICAgIFtfd2ViVmlldyBsYXlvdXRJZk5lZWRlZF07Ci0gICAgICAgIAotICAgICAgICBbc2VsZiBf
bWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7Ci0KLSAgICAgICAgX3JlcGFp
bnRDYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWlu
UHRyKHNlbGYpLCBzZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKLSAgICAgICAg
ICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFbX3dlYlZp
ZXcgX3BhZ2VdKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgW3Byb3Rl
Y3RlZFNlbGYgX21hbmFnZXJdLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICBbX3dlYlZpZXcgX3BhZ2VdLT5mb3JjZVJlcGFpbnQoX3JlcGFpbnRDYWxsYmFjay5j
b3B5UmVmKCkpOwotCi0gICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0gICAgfV07Ci19
Ci0KLS0gKHZvaWQpYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3Qp
aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCi17Ci0gICAgaWYgKF9m
dWxsU2NyZWVuU3RhdGUgIT0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuKQotICAgICAgICByZXR1
cm47Ci0gICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEVudGVyaW5nRnVsbFNjcmVlbjsKLQotICAgIF9p
bml0aWFsRnJhbWUgPSBpbml0aWFsRnJhbWU7Ci0gICAgX2ZpbmFsRnJhbWUgPSBmaW5hbEZyYW1l
OwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERp
c2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbX3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
Ci0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0Q29udGVudFZpZXc6X3dlYlZpZXdd
OwotCi0gICAgW193aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbF07Ci0g
ICAgW193aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAgIFtfcm9vdFZpZXdDb250cm9sbGVy
IHNldFNob3dzU3RhdHVzQmFyOllFU107Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwot
Ci0gICAgW192aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xs
ZXI6X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlci5nZXQoKSBhbmltYXRlZDpZRVMgY29tcGxldGlv
bjpeewotICAgICAgICBbc2VsZiBjb21wbGV0ZWRFbnRlckZ1bGxTY3JlZW5dOwotICAgICAgICBb
X3Jvb3RWaWV3Q29udHJvbGxlciBzZXRTaG93c1N0YXR1c0JhcjpOT107Ci0gICAgfV07Ci19Ci0K
LS0gKHZvaWQpY29tcGxldGVkRW50ZXJGdWxsU2NyZWVuCi17Ci0gICAgaWYgKCFbX3dlYlZpZXcg
X3BhZ2VdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZnVsbFNjcmVlblN0YXRlID0gSW5GdWxs
U2NyZWVuOwotCi0gICAgW3NlbGYgX21hbmFnZXJdLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsKLSAg
ICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotCi0gICAg
W193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci19
Ci0KLS0gKHZvaWQpZXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBpZiAoIVtzZWxmIGlzRnVsbFNjcmVl
bl0pCi0gICAgICAgIHJldHVybjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRXhp
dEZ1bGxTY3JlZW47Ci0KLSAgICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3Jl
ZW4odHJ1ZSk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKLX0K
LQotLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBbc2VsZiBfbWFuYWdlcl0t
PnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOwotfQotCi0tICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3Jl
ZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVj
dClmaW5hbEZyYW1lCi17Ci0gICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0gV2FpdGluZ1RvRXhp
dEZ1bGxTY3JlZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gRXhp
dGluZ0Z1bGxTY3JlZW47Ci0KLSAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOwotICAg
IF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLSAgICAKLSAgICBbX3dlYlZpZXcgX3BhZ2VdLT5z
ZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKHRydWUpOwotCi0gICAgW19yb290Vmlld0NvbnRy
b2xsZXIgc2V0U2hvd3NTdGF0dXNCYXI6WUVTXTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJv
bGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXJBbmltYXRlZDpZRVMgY29tcGxldGlvbjpeewotICAg
ICAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgW3NlbGYgY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dOwotICAgICAgICBbX3Jvb3RWaWV3Q29u
dHJvbGxlciBzZXRTaG93c1N0YXR1c0JhcjpOT107Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpY29t
cGxldGVkRXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSAhPSBFeGl0
aW5nRnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBO
b3RJbkZ1bGxTY3JlZW47Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAgIFtbX3dlYlZpZXdQbGFjZWhv
bGRlciBzdXBlcnZpZXddIGluc2VydFN1YnZpZXc6X3dlYlZpZXcgYmVsb3dTdWJ2aWV3Ol93ZWJW
aWV3UGxhY2Vob2xkZXIuZ2V0KCldOwotICAgIFtfd2ViVmlldyBzZXRGcmFtZTpbX3dlYlZpZXdQ
bGFjZWhvbGRlciBmcmFtZV1dOwotICAgIFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOltf
d2ViVmlld1BsYWNlaG9sZGVyIGF1dG9yZXNpemluZ01hc2tdXTsKLQotICAgIFtbX3dlYlZpZXcg
d2luZG93XSBtYWtlS2V5QW5kVmlzaWJsZV07Ci0KLSAgICBfdmlld1N0YXRlLmFwcGx5VG8oX3dl
YlZpZXcpOwotCi0gICAgW193ZWJWaWV3IHNldE5lZWRzTGF5b3V0XTsKLSAgICBbX3dlYlZpZXcg
bGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFtf
d2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgIF93aW5kb3cgPSBuaWw7Ci0KLSAgICBbc2VsZiBf
bWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgIFtzZWxmIF9tYW5h
Z2VyXS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKLQotICAgIGlmIChfcmVwYWludENhbGxiYWNrKSB7
Ci0gICAgICAgIF9yZXBhaW50Q2FsbGJhY2stPmludmFsaWRhdGUoV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgQVNTRVJUKCFfcmVwYWlu
dENhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNr
OjpjcmVhdGUoW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZiksIHNlbGZdKFdlYktpdDo6
Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBfcmVwYWludENhbGxiYWNrID0gbnVsbHB0
cjsKLSAgICAgICAgW193ZWJWaWV3UGxhY2Vob2xkZXIgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0K
LSAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFs
c2UpOwotICAgIH0pOwotCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBh
aW50Q2FsbGJhY2suY29weVJlZigpKTsKLX0KLQotLSAodm9pZClleGl0RnVsbHNjcmVlbkltbWVk
aWF0ZWx5Ci17Ci0gICAgaWYgKCFbc2VsZiBpc0Z1bGxTY3JlZW5dKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtz
ZWxmIF9tYW5hZ2VyXS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgW3NlbGYgZXhpdEZ1
bGxTY3JlZW5dOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBFeGl0aW5nRnVsbFNjcmVlbjsKLSAg
ICBbc2VsZiBjb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl07Ci0gICAgcmVwbGFjZVZpZXdXaXRoVmll
dyhfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpLCBfd2ViVmlldyk7Ci0gICAgW193ZWJWaWV3IF9w
YWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci0gICAgW3NlbGYgX21h
bmFnZXJdLT5kaWRFeGl0RnVsbFNjcmVlbigpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5p
bWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IG5pbDsK
LX0KLQotLSAodm9pZCljbG9zZQotewotICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuSW1tZWRpYXRl
bHldOwotICAgIF93ZWJWaWV3ID0gbmlsOwotfQotCi0tICh2b2lkKXdlYlZpZXdEaWRSZW1vdmVG
cm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW4KLXsKLSAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0
ZSA9PSBJbkZ1bGxTY3JlZW4gJiYgX3dlYlZpZXcud2luZG93ICE9IF93aW5kb3cuZ2V0KCkpCi0g
ICAgICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwotfQotCi0tICh2b2lkKXZp
ZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlCi17Ci19Ci0KLSNwcmFnbWEgbWFyayAtCi0jcHJh
Z21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCi0KLS0gKFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHkqKV9tYW5hZ2VyCi17Ci0gICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW193ZWJWaWV3IF9wYWdlXS0+ZnVsbFNjcmVlbk1hbmFn
ZXIoKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBVSVZpZXdDb250cm9sbGVy
VHJhbnNpdGlvbmluZ0RlbGVnYXRlCi0KLS0gKGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRy
YW5zaXRpb25pbmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250cm9sbGVyOihV
SVZpZXdDb250cm9sbGVyICopcHJlc2VudGVkIHByZXNlbnRpbmdDb250cm9sbGVyOihVSVZpZXdD
b250cm9sbGVyICopcHJlc2VudGluZyBzb3VyY2VDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVy
ICopc291cmNlCi17Ci0gICAgUmV0YWluUHRyPFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxsc2NyZWVuQW5pbWF0aW9u
Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldFZp
ZXdDb250cm9sbGVyOnByZXNlbnRlZF07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0SW5p
dGlhbEZyYW1lOl9pbml0aWFsRnJhbWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEZp
bmFsRnJhbWU6X2ZpbmFsRnJhbWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1h
dGluZ0luOllFU107Ci0gICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXIuYXV0b3JlbGVhc2Uo
KTsKLX0KLQotLSAoaWQ8VUlWaWV3Q29udHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4pYW5p
bWF0aW9uQ29udHJvbGxlckZvckRpc21pc3NlZENvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIg
KilkaXNtaXNzZWQKLXsKLSAgICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJv
bGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5BbmltYXRp
b25Db250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0
Vmlld0NvbnRyb2xsZXI6ZGlzbWlzc2VkXTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJ
bml0aWFsRnJhbWU6X2luaXRpYWxGcmFtZV07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0
RmluYWxGcmFtZTpfZmluYWxGcmFtZV07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0QW5p
bWF0aW5nSW46Tk9dOwotICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLmF1dG9yZWxlYXNl
KCk7Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxz
Y3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWU5MDcwMTE1OGFlMjEyY2Q2YWM3NzhiMDNjZGQ1YTcxZWUzMzNhOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxz
Y3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWMuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Rv
dWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNjb3JlT2ZOZXh0VG91Y2goQ0dQb2lu
dCBsb2NhdGlvbikKK3sKKyAgICBTZWNvbmRzIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCk7CisKKyAgICBpZiAoIW1fbGFzdFRvdWNoVGltZSkgeworICAgICAg
ICBtX2xhc3RUb3VjaFRpbWUgPSBXVEZNb3ZlKG5vdyk7CisgICAgICAgIG1fbGFzdFRvdWNoTG9j
YXRpb24gPSBXVEZNb3ZlKGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgU2Vjb25kcyBkZWx0YVRpbWUgPSBub3cgLSBtX2xhc3RUb3VjaFRpbWU7CisKKyAgICBkb3Vi
bGUgY29lZmZpY2llbnQgPSBhdHRlbnVhdGlvbkZhY3RvcihkZWx0YVRpbWUpOworICAgIG1fbGFz
dFNjb3JlID0gY29lZmZpY2llbnQgKiBkaXN0YW5jZVNjb3JlKGxvY2F0aW9uLCBtX2xhc3RUb3Vj
aExvY2F0aW9uLCBkZWx0YVRpbWUpICsgKDEgLSBjb2VmZmljaWVudCkgKiBtX2xhc3RTY29yZTsK
KworICAgIG1fbGFzdFRvdWNoVGltZSA9IG5vdzsKKyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0g
bG9jYXRpb247CisgICAgcmV0dXJuIG1fbGFzdFNjb3JlOworfQorCit2b2lkIEZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYzo6cmVzZXQoKQoreworICAgIG1fbGFzdFRvdWNoVGltZSA9IDBfczsK
KyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0geyB9OworICAgIG1fbGFzdFNjb3JlID0gMDsKK30K
KworZG91YmxlIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VTY29yZShjb25z
dCBDR1BvaW50JiBuZXh0TG9jYXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwgY29u
c3QgU2Vjb25kcyYgZGVsdGFUaW1lKQoreworICAgIGRvdWJsZSBkaXN0YW5jZSA9IHNxcnQoCisg
ICAgICAgIG1feFdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueCAtIGxhc3RMb2NhdGlvbi54LCAy
KSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueSAtIGxhc3RMb2NhdGlv
bi55LCAyKSk7CisgICAgZG91YmxlIHNpemVGYWN0b3IgPSBzcXJ0KAorICAgICAgICBtX3hXZWln
aHQgKiBwb3cobV9zaXplLndpZHRoLCAyKSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhtX3Np
emUuaGVpZ2h0LCAyKSk7CisgICAgZG91YmxlIHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2UgLyBz
aXplRmFjdG9yOworICAgIGlmIChzY2FsZWREaXN0YW5jZSA8PSBtX2N1dG9mZikKKyAgICAgICAg
cmV0dXJuIHNjYWxlZERpc3RhbmNlICogKG1fcmFtcFVwU3BlZWQgLyBkZWx0YVRpbWUpOworCisg
ICAgZG91YmxlIGV4cG9uZW50aWFsRGlzdGFuY2UgPSBtX2N1dG9mZiArIHBvdygoc2NhbGVkRGlz
dGFuY2UgLSBtX2N1dG9mZikgLyAoMSAtIG1fY3V0b2ZmKSwgbV9nYW1tYSk7CisgICAgcmV0dXJu
IGV4cG9uZW50aWFsRGlzdGFuY2UgKiAobV9yYW1wVXBTcGVlZCAvIGRlbHRhVGltZSk7Cit9CisK
K2RvdWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OmF0dGVudWF0aW9uRmFjdG9yKFNl
Y29uZHMgZGVsdGEpCit7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRUaW1lRGVsdGEgPSBkZWx0YSAv
IG1fcmFtcERvd25TcGVlZDsKKyAgICByZXR1cm4gbm9ybWFsaXplZFRpbWVEZWx0YSAqIG1fd2Vp
Z2h0OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjNjZGNhM2Q3YzAzMTZhOGY0NTc3OWQyMWQ4MTA4ZmFjM2Q1OGFmNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEZ1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYyB7CitwdWJsaWM6CisgICAgZG91YmxlIHNjb3JlT2ZO
ZXh0VG91Y2goQ0dQb2ludCBsb2NhdGlvbik7CisgICAgdm9pZCByZXNldCgpOworCisgICAgdm9p
ZCBzZXRSYW1wVXBTcGVlZChTZWNvbmRzIHNwZWVkKSB7IG1fcmFtcFVwU3BlZWQgPSBzcGVlZDsg
fQorICAgIHZvaWQgc2V0UmFtcERvd25TcGVlZChTZWNvbmRzIHNwZWVkKSB7IG1fcmFtcERvd25T
cGVlZCA9IHNwZWVkOyB9CisgICAgdm9pZCBzZXRYV2VpZ2h0KGRvdWJsZSB3ZWlnaHQpIHsgbV94
V2VpZ2h0ID0gd2VpZ2h0OyB9CisgICAgdm9pZCBzZXRZV2VpZ2h0KGRvdWJsZSB3ZWlnaHQpIHsg
bV95V2VpZ2h0ID0gd2VpZ2h0OyB9CisgICAgdm9pZCBzZXRTaXplKENHU2l6ZSBzaXplKSB7IG1f
c2l6ZSA9IHNpemU7IH0KKyAgICB2b2lkIHNldEdhbW1hKGRvdWJsZSBnYW1tYSkgeyBtX2dhbW1h
ID0gZ2FtbWE7IH0KKyAgICB2b2lkIHNldEdhbW1hQ3V0b2ZmKGRvdWJsZSBjdXRvZmYpIHsgbV9j
dXRvZmYgPSBjdXRvZmY7IH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgZGlzdGFuY2VTY29yZShj
b25zdCBDR1BvaW50JiBuZXh0TG9jYXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwg
Y29uc3QgU2Vjb25kcyYgZGVsdGFUaW1lKTsKKyAgICBkb3VibGUgYXR0ZW51YXRpb25GYWN0b3Io
U2Vjb25kcyBkZWx0YSk7CisKKyAgICBkb3VibGUgbV93ZWlnaHQgeyAwLjEgfTsKKyAgICBTZWNv
bmRzIG1fcmFtcFVwU3BlZWQgeyAxIH07CisgICAgU2Vjb25kcyBtX3JhbXBEb3duU3BlZWQgeyAx
IH07CisgICAgZG91YmxlIG1feFdlaWdodCB7IDEgfTsKKyAgICBkb3VibGUgbV95V2VpZ2h0IHsg
MSB9OworICAgIGRvdWJsZSBtX2dhbW1hIHsgMSB9OworICAgIGRvdWJsZSBtX2N1dG9mZiB7IDEg
fTsKKyAgICBDR1NpemUgbV9zaXplIHsgfTsKKyAgICBTZWNvbmRzIG1fbGFzdFRvdWNoVGltZSB7
IDAgfTsKKyAgICBDR1BvaW50IG1fbGFzdFRvdWNoTG9jYXRpb24geyB9OworICAgIGRvdWJsZSBt
X2xhc3RTY29yZSB7IDAgfTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGY4M2IyYzUzN2YxMGExNjdlZmU1ZGEwZDZhYzc4MWE4ZDk2ZDI0ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVu
L1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9S
TShJT1MpCisKKyNpbXBvcnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXIuaD4KKworQGNsYXNzIFdL
V2ViVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisK
K05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuVmlld0Nv
bnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCitAcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWlj
KSBpZCB0YXJnZXQ7CitAcHJvcGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOwor
QHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgTlNTdHJpbmcgKmxvY2F0aW9uOworQHByb3Bl
cnR5IChhc3NpZ24sIG5vbmF0b21pYykgQk9PTCBwcmVmZXJzU3RhdHVzQmFySGlkZGVuOworQHBy
b3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5n
OworQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGljdHVyZUluUGljdHVy
ZUFjdGl2ZSkgQk9PTCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlOworCistIChpZClpbml0V2l0aFdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXc7CistICh2b2lkKXNob3dVSTsKKy0gKHZvaWQpaGlk
ZVVJOworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZTsKK0BlbmQKKworTlNf
QVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYm
IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9m
dWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGRhMWViOWY0YzM3ZmRlZDdjYWI4ZDQzZGUzYTRkMWY4NWMyOTA5MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIldLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgiCisKKyNpbXBv
cnQgIkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tGdWxs
c2NyZWVuU3RhY2tWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIHNo
b3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjE7CitzdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2
YWwgYXV0b0hpZGVEZWxheSA9IDQuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcmVxdWlyZWRTY29y
ZSA9IDAuMTsKKworQGNsYXNzIFdLRnVsbHNjcmVlblN0YWNrVmlldzsKKworY2xhc3MgV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCA6IFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldFBhcmVudChXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlciAqcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKKyAg
ICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1fcGFyZW50LnBsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAgfQorCisgICAgdm9p
ZCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlQ2hhbmdlZChib29sIGFjdGl2ZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fcGFyZW50LnBpY3R1cmVJblBpY3R1cmVBY3RpdmUgPSBhY3RpdmU7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRJbnRlcmZhY2UoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQqIGludGVyZmFjZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVy
ZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgbV9pbnRl
cmZhY2UgPSBpbnRlcmZhY2U7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVyZmFj
ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKS0+YWRkQ2xpZW50KCp0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgKm1fcGFyZW50IHsgbnVsbHB0ciB9OworICAg
IFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7Cit9Owor
CisjcHJhZ21hIG1hcmsgLSBfV0tFeHRyaW5zaWNCdXR0b24KKworQGludGVyZmFjZSBfV0tFeHRy
aW5zaWNCdXR0b24gOiBVSUJ1dHRvbgorQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYykgQ0dT
aXplIGV4dHJpbnNpY0NvbnRlbnRTaXplOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLRXh0
cmluc2ljQnV0dG9uCistICh2b2lkKXNldEV4dHJpbnNpY0NvbnRlbnRTaXplOihDR1NpemUpc2l6
ZQoreworICAgIF9leHRyaW5zaWNDb250ZW50U2l6ZSA9IHNpemU7CisgICAgW3NlbGYgaW52YWxp
ZGF0ZUludHJpbnNpY0NvbnRlbnRTaXplXTsKK30KKworLSAoQ0dTaXplKWludHJpbnNpY0NvbnRl
bnRTaXplCit7CisgICAgcmV0dXJuIF9leHRyaW5zaWNDb250ZW50U2l6ZTsKK30KK0BlbmQKKwor
I3ByYWdtYSBtYXJrIC0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIKKworQGludGVyZmFjZSBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciAoKSA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRl
LCBVSVRvb2xiYXJEZWxlZ2F0ZT4KK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIFdLV2Vi
VmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSByZXRhaW5lZCwgc2VlIDxyZGFyOi8vcHJvYmxl
bS8xNDg4NDY2Nj4uCitAcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkqIF9tYW5hZ2VyOworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWlj
KSBDR0Zsb2F0IF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3A7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB7CisgICAgUmV0YWluUHRyPFVJTG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyOworICAgIFJl
dGFpblB0cjxXS0Z1bGxzY3JlZW5TdGFja1ZpZXc+IF9zdGFja1ZpZXc7CisgICAgUmV0YWluUHRy
PF9XS0V4dHJpbnNpY0J1dHRvbj4gX2NhbmNlbEJ1dHRvbjsKKyAgICBSZXRhaW5QdHI8X1dLRXh0
cmluc2ljQnV0dG9uPiBfcGlwQnV0dG9uOworICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2xvY2F0
aW9uQnV0dG9uOworICAgIFJldGFpblB0cjxVSUxheW91dEd1aWRlPiBfdG9wR3VpZGU7CisgICAg
UmV0YWluUHRyPE5TTGF5b3V0Q29uc3RyYWludD4gX3RvcENvbnN0cmFpbnQ7CisgICAgV2ViS2l0
OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMgX3NlY2hldXJpc3RpYzsKKyAgICBXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IF9wbGF5YmFja0Ns
aWVudDsKKyAgICBCT09MIF9oYXNDb250cm9sc01hbmFnZXI7CisgICAgQ0dGbG9hdCBfbm9uWmVy
b1N0YXR1c0JhckhlaWdodDsKK30KKworI3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJmYWNl
CisKKy0gKGlkKWluaXRXaXRoV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJlZEFwcGxp
Y2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X3N0YXR1c0JhckZyYW1lRGlkQ2hhbmdlOikgbmFtZTpVSUFwcGxpY2F0aW9uRGlkQ2hhbmdlU3Rh
dHVzQmFyRnJhbWVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgX3NlY2hldXJpc3RpYy5z
ZXRSYW1wVXBTcGVlZChTZWNvbmRzKDAuMjUpKTsKKyAgICBfc2VjaGV1cmlzdGljLnNldFJhbXBE
b3duU3BlZWQoU2Vjb25kcygxLikpOworICAgIF9zZWNoZXVyaXN0aWMuc2V0WFdlaWdodCgwKTsK
KyAgICBfc2VjaGV1cmlzdGljLnNldEdhbW1hKDAuMSk7CisgICAgX3NlY2hldXJpc3RpYy5zZXRH
YW1tYUN1dG9mZigwLjA4KTsKKworICAgIHNlbGYuX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAg
X3BsYXliYWNrQ2xpZW50LnNldFBhcmVudChzZWxmKTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3Jt
UmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisKKyAgICBfcGxheWJhY2tDbGllbnQu
c2V0UGFyZW50KG51bGxwdHIpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KXNob3dVSQoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dp
dGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKwor
ICAgIGlmIChfcGxheWluZykgeworICAgICAgICBOU1RpbWVJbnRlcnZhbCBoaWRlRGVsYXkgPSBh
dXRvSGlkZURlbGF5OworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGhp
ZGVVSSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpoaWRlRGVsYXldOworICAgIH0KKyAgICBb
VUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmlt
YXRpb25zOiBeeworICAgICAgICBbX3N0YWNrVmlldyBzZXRIaWRkZW46Tk9dOworICAgICAgICBb
X3N0YWNrVmlldyBzZXRBbHBoYToxXTsKKyAgICAgICAgc2VsZi5wcmVmZXJzU3RhdHVzQmFySGlk
ZGVuID0gTk87CisgICAgfV07Cit9CisKKy0gKHZvaWQpaGlkZVVJCit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihoaWRlVUkpIG9iamVjdDpuaWxdOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJh
dGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3Nl
bGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAg
ICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1
YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3IgY29uc3Rh
bnQ6c2VsZi52aWV3LnNhZmVBcmVhSW5zZXRzLnRvcF07CisgICAgICAgIFtfdG9wQ29uc3RyYWlu
dCBzZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgW19zdGFja1ZpZXcgc2V0QWxwaGE6MF07CisgICAg
ICAgIHNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbiA9IFlFUzsKKyAgICB9IGNvbXBsZXRpb246
XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgIGlmICghZmluaXNoZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25z
dHJhaW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9w
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRH
dWlkZS50b3BBbmNob3JdOworICAgICAgICBbX3RvcENvbnN0cmFpbnQgc2V0QWN0aXZlOllFU107
CisgICAgICAgIFtfc3RhY2tWaWV3IHNldEhpZGRlbjpZRVNdOworICAgIH1dOworfQorCistICh2
b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlCit7CisgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gW3NlbGYuX3dlYlZpZXcgX3BhZ2VdOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IHBhZ2UgPyBwYWdlLT5wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCkgOiBOVUxMOworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID8gcGxh
eWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkgOiBOVUxMOwor
ICAgIF9wbGF5YmFja0NsaWVudC5zZXRJbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KTsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSA/IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSA6IE5VTEw7CisgICAgX2hhc0NvbnRyb2xzTWFuYWdlciA9IHBsYXli
YWNrU2Vzc2lvbk1vZGVsOworICAgIHNlbGYucGxheWluZyA9IHBsYXliYWNrU2Vzc2lvbk1vZGVs
ID8gcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpIDogTk87CisgICAgW19waXBCdXR0
b24gc2V0SGlkZGVuOiFwbGF5YmFja1Nlc3Npb25Nb2RlbF07Cit9CisKK0BzeW50aGVzaXplIHBy
ZWZlcnNTdGF0dXNCYXJIaWRkZW49X3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47CistICh2b2lkKXNl
dFByZWZlcnNTdGF0dXNCYXJIaWRkZW46KEJPT0wpdmFsdWUKK3sKKyAgICBfcHJlZmVyc1N0YXR1
c0JhckhpZGRlbiA9IHZhbHVlOworICAgIFtzZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5j
ZVVwZGF0ZV07CisgICAgW3NlbGYgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30K
KworLSAodm9pZClzZXRQbGF5aW5nOihCT09MKWlzUGxheWluZworeworICAgIGlmIChfcGxheWlu
ZyA9PSBpc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIF9wbGF5aW5nID0gaXNQbGF5
aW5nOworICAgIGlmICghX3BsYXlpbmcpCisgICAgICAgIFtzZWxmIHNob3dVSV07CisgICAgZWxz
ZSB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhU
YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKyAgICAg
ICAgTlNUaW1lSW50ZXJ2YWwgaGlkZURlbGF5ID0gYXV0b0hpZGVEZWxheTsKKyAgICAgICAgW3Nl
bGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIHdpdGhPYmplY3Q6bmlsIGFmdGVy
RGVsYXk6aGlkZURlbGF5XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0UGljdHVyZUluUGljdHVy
ZUFjdGl2ZTooQk9PTClhY3RpdmUKK3sKKyAgICBpZiAoX3BpY3R1cmVJblBpY3R1cmVBY3RpdmUg
PT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBfcGljdHVyZUluUGljdHVyZUFjdGl2
ZSA9IGFjdGl2ZTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRTZWxlY3RlZDphY3RpdmVdOworfQorCisj
cHJhZ21hIG1hcmsgLSBVSVZpZXdDb250cm9sbGVyIE92ZXJyaWRlcworCistICh2b2lkKWxvYWRW
aWV3Cit7CisgICAgW3NlbGYgc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApXSkuZ2V0KCldOworICAgIHNlbGYudmll
dy5hdXRvcmVzaXppbmdNYXNrID0gVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0OworCisgICAgX2NhbmNlbEJ1dHRvbiA9IFtf
V0tFeHRyaW5zaWNCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsKKyAg
ICBbX2NhbmNlbEJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJh
aW50czpOT107CisgICAgW19jYW5jZWxCdXR0b24gc2V0QWRqdXN0c0ltYWdlV2hlbkhpZ2hsaWdo
dGVkOk5PXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRFeHRyaW5zaWNDb250ZW50U2l6ZTpDR1Np
emVNYWtlKDYwLjAsIDQ3LjApXTsKKyAgICBbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJp
bWFyeUdseXBoVGludFRvVmlldzpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBOU0J1bmRsZSAq
YnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOnNlbGYuY2xhc3NdOworICAgIFVJSW1h
Z2UgKmRvbmVJbWFnZSA9IFtVSUltYWdlIGltYWdlTmFtZWQ6QCJEb25lIiBpbkJ1bmRsZTpidW5k
bGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBbX2NhbmNlbEJ1dHRv
biBzZXRJbWFnZTpbZG9uZUltYWdlIGltYWdlV2l0aFJlbmRlcmluZ01vZGU6VUlJbWFnZVJlbmRl
cmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwor
ICAgIFtfY2FuY2VsQnV0dG9uIHNldFRpbnRDb2xvcjpbVUlDb2xvciB3aGl0ZUNvbG9yXV07Cisg
ICAgW19jYW5jZWxCdXR0b24gc2l6ZVRvRml0XTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJn
ZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9jYW5jZWxBY3Rpb246KSBmb3JDb250cm9sRXZlbnRz
OlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07CisKKyAgICBfcGlwQnV0dG9uID0gW19XS0V4
dHJpbnNpY0J1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOworICAgIFtf
cGlwQnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5P
XTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwor
ICAgIFtfcGlwQnV0dG9uIHNldEV4dHJpbnNpY0NvbnRlbnRTaXplOkNHU2l6ZU1ha2UoNjAuMCwg
NDcuMCldOworICAgIFtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5cGhUaW50
VG9WaWV3Ol9waXBCdXR0b24uZ2V0KCldOworICAgIFVJSW1hZ2UgKnN0YXJ0UGlQSW1hZ2UgPSBb
VUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RhcnRQaWN0dXJlSW5QaWN0dXJlQnV0dG9uIiBpbkJ1bmRs
ZTpidW5kbGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBVSUltYWdl
ICpzdG9wUGlQSW1hZ2UgPSBbVUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RvcFBpY3R1cmVJblBpY3R1
cmVCdXR0b24iIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpu
aWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdGFydFBpUEltYWdlIGltYWdlV2l0aFJl
bmRlcmluZ01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6
VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdG9wUGlQ
SW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1Rl
bXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZVNlbGVjdGVkXTsKKyAgICBbX3BpcEJ1dHRv
biBzZXRUaW50Q29sb3I6W1VJQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFtfcGlwQnV0dG9uIHNp
emVUb0ZpdF07CisgICAgW19waXBCdXR0b24gYWRkVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rv
cihfdG9nZ2xlUGlQQWN0aW9uOikgZm9yQ29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNo
VXBJbnNpZGVdOworCisgICAgX3N0YWNrVmlldyA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5TdGFj
a1ZpZXcgYWxsb2NdIGluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czpAW19jYW5jZWxCdXR0b24uZ2V0
KCksIF9waXBCdXR0b24uZ2V0KCldIGF4aXM6VUlMYXlvdXRDb25zdHJhaW50QXhpc0hvcml6b250
YWxdKTsKKyAgICBbX3N0YWNrVmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9D
b25zdHJhaW50czpOT107CisgICAgW19zdGFja1ZpZXcgc2V0VGFyZ2V0Vmlld0ZvclNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheTpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBbW3NlbGYgdmlld10g
YWRkU3Vidmlldzpfc3RhY2tWaWV3LmdldCgpXTsKKworICAgIFVJTGF5b3V0R3VpZGUqIHNhZmVB
cmVhID0gc2VsZi52aWV3LnNhZmVBcmVhTGF5b3V0R3VpZGU7CisgICAgVUlMYXlvdXRHdWlkZSog
bWFyZ2lucyA9IHNlbGYudmlldy5sYXlvdXRNYXJnaW5zR3VpZGU7CisKKyAgICBfdG9wR3VpZGUg
PSBhZG9wdE5TKFtbVUlMYXlvdXRHdWlkZSBhbGxvY10gaW5pdF0pOworICAgIFtzZWxmLnZpZXcg
YWRkTGF5b3V0R3VpZGU6X3RvcEd1aWRlLmdldCgpXTsKKyAgICBOU0xheW91dEFuY2hvciogdG9w
QW5jaG9yID0gW190b3BHdWlkZSB0b3BBbmNob3JdOworICAgIF90b3BDb25zdHJhaW50ID0gW3Rv
cEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzYWZlQXJlYS50b3BBbmNob3JdOworICAg
IFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBfdG9w
Q29uc3RyYWludC5nZXQoKSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IHRvcEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6dG9wQW5jaG9yXSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IGxlYWRp
bmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOm1hcmdpbnMubGVhZGluZ0FuY2hvcl0s
CisgICAgXV07CisKKyAgICBbX3N0YWNrVmlldyBzZXRBbHBoYTowXTsKKyAgICBbX3N0YWNrVmll
dyBzZXRIaWRkZW46WUVTXTsKKyAgICBbc2VsZiB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZV07CisKKyAgICBfdG91Y2hHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUxvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3RvdWNoRGV0ZWN0ZWQ6KV0pOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBz
ZXRDYW5jZWxzVG91Y2hlc0luVmlldzpOT107CisgICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVy
IHNldE1pbmltdW1QcmVzc0R1cmF0aW9uOjBdOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZi52aWV3IGFkZEdlc3R1cmVSZWNvZ25pemVy
Ol90b3VjaEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKK30KKworLSAodm9pZCl2aWV3V2lsbEFw
cGVhcjooQk9PTClhbmltYXRlZAoreworICAgIHNlbGYuX3dlYlZpZXcuYXV0b3Jlc2l6aW5nTWFz
ayA9IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdG
bGV4aWJsZUhlaWdodDsKKyAgICBzZWxmLl93ZWJWaWV3LmZyYW1lID0gc2VsZi52aWV3LmJvdW5k
czsKKyAgICBbc2VsZi52aWV3IGluc2VydFN1YnZpZXc6c2VsZi5fd2ViVmlldyBhdEluZGV4OjBd
OworCisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKQorICAgICAgICBtYW5h
Z2VyLT5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEZWxheShhdXRvSGlkZURlbGF5KTsKK30KKworLSAo
dm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc2VsZiBfdXBkYXRlV2ViVmlld0Z1
bGxzY3JlZW5JbnNldHNdOworICAgIF9zZWNoZXVyaXN0aWMuc2V0U2l6ZShzZWxmLnZpZXcuYm91
bmRzLnNpemUpOworfQorCistICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXpl
KXNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5z
aXRpb25Db29yZGluYXRvcj4pY29vcmRpbmF0b3IKK3sKKyAgICBbc3VwZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07
CisgICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmll
d0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7CisgICAg
ICAgIHZvaWQgKF53ZWJWaWV3VXBkYXRlQmxvY2spKCkgPSBeeworICAgICAgICAgICAgW3NlbGYu
X3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpz
aXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVdOworICAgICAgICB9OworCisg
ICAgICAgIFtzZWxmLl93ZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6d2Vi
Vmlld1VwZGF0ZUJsb2NrXTsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX3NldEludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU6W1VJQXBwIHN0YXR1c0Jhck9yaWVudGF0aW9uXV07CisgICAgfSBj
b21wbGV0aW9uOl4oaWQgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250
ZXh0PmNvbnRleHQpIHsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXpl
XTsKKyAgICB9XTsKK30KKworLSAoVUlTdGF0dXNCYXJTdHlsZSlwcmVmZXJyZWRTdGF0dXNCYXJT
dHlsZQoreworICAgIHJldHVybiBVSVN0YXR1c0JhclN0eWxlTGlnaHRDb250ZW50OworfQorCist
IChCT09MKXByZWZlcnNTdGF0dXNCYXJIaWRkZW4KK3sKKyAgICByZXR1cm4gX3ByZWZlcnNTdGF0
dXNCYXJIaWRkZW47Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJl
UmVjb2duaXplckRlbGVnYXRlCisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2Vz
dHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKWdlc3R1cmVS
ZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxk
UmVjZWl2ZVRvdWNoOihVSVRvdWNoICopdG91Y2gKK3sKKyAgICBbc2VsZiBzaG93VUldOworICAg
IHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKyNwcmFnbWEgbWFyayAtCisjcHJh
Z21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCisKK0BkeW5hbWljIF9tYW5hZ2VyOworLSAoV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoYXV0byogcGFnZSA9
IFtzZWxmLl93ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0BkeW5hbWljIF9lZmZlY3RpdmVG
dWxsc2NyZWVuSW5zZXRUb3A7CistIChDR0Zsb2F0KV9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRU
b3AKK3sKKyAgICBpZiAoIXNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBDR1JlY3QgY2FuY2VsRnJhbWUgPSBfY2FuY2VsQnV0dG9uLmdldCgpLmZy
YW1lOworICAgIENHUG9pbnQgbWF4WFkgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKGNhbmNl
bEZyYW1lKSwgQ0dSZWN0R2V0TWF4WShjYW5jZWxGcmFtZSkpOworICAgIHJldHVybiBbX2NhbmNl
bEJ1dHRvbiBjb252ZXJ0UG9pbnQ6bWF4WFkgdG9WaWV3OnNlbGYudmlld10ueTsKK30KKworLSAo
dm9pZClfY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgdGFyZ2V0XSBwZXJm
b3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Cit9CisKKy0gKHZvaWQpX3RvZ2dsZVBpUEFjdGlv
bjooaWQpc2VuZGVyCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZpZXcg
X3BhZ2VdOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gcGFnZS0+cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpOworICAgIGlmICghcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNvbnRyb2xz
TWFuYWdlckludGVyZmFjZSgpOworICAgIGlmICghcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7CisgICAgaWYgKCFwbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwor
LSAodm9pZClfdG91Y2hEZXRlY3RlZDooaWQpc2VuZGVyCit7CisgICAgaWYgKFtfdG91Y2hHZXN0
dXJlUmVjb2duaXplciBzdGF0ZV0gIT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4gfHwg
W190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVFbmRlZCkgeworICAgICAgICBkb3VibGUgc2NvcmUgPSBfc2VjaGV1cmlzdGljLnNjb3JlT2ZO
ZXh0VG91Y2goW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGYudmll
d10pOworICAgICAgICBpZiAoc2NvcmUgPiByZXF1aXJlZFNjb3JlKQorICAgICAgICAgICAgW3Nl
bGYgX3Nob3dQaGlzaGluZ0FsZXJ0XTsKKyAgICB9CisgICAgW3NlbGYgc2hvd1VJXTsKK30KKwor
LSAodm9pZClfc3RhdHVzQmFyRnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uQ2VudGVyICop
bm90aWZpY2F0aW9uCit7CisgICAgQ0dGbG9hdCBoZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJl
ZEFwcGxpY2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIGlmICghaGVpZ2h0
IHx8IGhlaWdodCA9PSBfbm9uWmVyb1N0YXR1c0JhckhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBoZWlnaHQ7CisgICAgW3NlbGYgX3VwZGF0
ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30KKworLSAodm9pZClfdXBkYXRlV2ViVmlld0Z1
bGxzY3JlZW5JbnNldHMKK3sKKyAgICBpZiAoYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXIp
CisgICAgICAgIG1hbmFnZXItPnNldEZ1bGxzY3JlZW5JbnNldFRvcChzZWxmLl9lZmZlY3RpdmVG
dWxsc2NyZWVuSW5zZXRUb3ApOworfQorCistICh2b2lkKV9zaG93UGhpc2hpbmdBbGVydAorewor
ICAgIE5TU3RyaW5nICphbGVydFRpdGxlID0gQCJEZWNlcHRpdmUgV2Vic2l0ZSBXYXJuaW5nIjsK
KyAgICBOU1N0cmluZyAqYWxlcnRNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJUaGUgd2Vic2l0ZSBcIiVAXCIgbWF5IGJlIGEgZGVjZXB0aXZlIHdlYnNpdGUuIFdvdWxkIHlv
dSBsaWtlIHRvIGV4aXQgZnVsbHNjcmVlbj8iLCAoTlNTdHJpbmcgKilzZWxmLmxvY2F0aW9uXTsK
KyAgICBVSUFsZXJ0Q29udHJvbGxlciogYWxlcnQgPSBbVUlBbGVydENvbnRyb2xsZXIgYWxlcnRD
b250cm9sbGVyV2l0aFRpdGxlOmFsZXJ0VGl0bGUgbWVzc2FnZTphbGVydE1lc3NhZ2UgcHJlZmVy
cmVkU3R5bGU6VUlBbGVydENvbnRyb2xsZXJTdHlsZUFsZXJ0XTsKKworICAgIFVJQWxlcnRBY3Rp
b24qIGRlZmF1bHRBY3Rpb24gPSBbVUlBbGVydEFjdGlvbiBhY3Rpb25XaXRoVGl0bGU6QCJFeGl0
IEZ1bGxzY3JlZW4iIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZURlZmF1bHQgaGFuZGxlcjpeKFVJ
QWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgW3NlbGYgX2NhbmNlbEFjdGlvbjphY3Rp
b25dOworICAgIH1dOworCisgICAgVUlBbGVydEFjdGlvbiogY2FuY2VsQWN0aW9uID0gW1VJQWxl
cnRBY3Rpb24gYWN0aW9uV2l0aFRpdGxlOkAiU3RheSBpbiBGdWxsc2NyZWVuIiBzdHlsZTpVSUFs
ZXJ0QWN0aW9uU3R5bGVDYW5jZWwgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsK
KyAgICAgICAgX3NlY2hldXJpc3RpYy5yZXNldCgpOworICAgIH1dOworCisgICAgW2FsZXJ0IGFk
ZEFjdGlvbjpkZWZhdWx0QWN0aW9uXTsKKyAgICBbYWxlcnQgYWRkQWN0aW9uOmNhbmNlbEFjdGlv
bl07CisgICAgW3NlbGYgcHJlc2VudFZpZXdDb250cm9sbGVyOmFsZXJ0IGFuaW1hdGVkOllFUyBj
b21wbGV0aW9uOm5pbF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiZWYyYTEyODhiZTZmY2Q0NmE0MGFiYTE3MWVlZDA4
MDMwOTNhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmcuaD4K
KworQGNsYXNzIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3OworQGNsYXNzIFdLV2Vi
VmlldzsKKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIDogTlNPYmpl
Y3QgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGU+CitAcHJvcGVydHkgKHJl
YWRvbmx5LCByZXRhaW4sIG5vbmF0b21pYykgV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcgKndlYlZpZXdQbGFjZWhvbGRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGFzc2lnbiwgbm9u
YXRvbWljKSBCT09MIGlzRnVsbFNjcmVlbjsKKworLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3OworLSAodm9pZCllbnRlckZ1bGxTY3JlZW47CistICh2b2lkKWJlZ2Fu
RW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZTsKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsU2NyZWVu
OworLSAodm9pZClleGl0RnVsbFNjcmVlbjsKKy0gKHZvaWQpYmVnYW5FeGl0RnVsbFNjcmVlbldp
dGhJbml0aWFsRnJhbWU6KENHUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZp
bmFsRnJhbWU7CistICh2b2lkKWNsb3NlOworLSAodm9pZCl3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1
cGVydmlld1doaWxlSW5GdWxsc2NyZWVuOworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZTsKKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYzQyNjJkNTk1N2MzMzNiZTYyZTk2NjRl
ZTM0YjdmMmVjMGEzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCkBAIC0w
LDAgKzEsODY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFU
Rk9STShJT1MpICYmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbXBvcnQgIldLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJJT1MuaCIKKworI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQg
IldLRnVsbHNjcmVlblN0YWNrVmlldy5oIgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuVmlld0NvbnRy
b2xsZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5o
PgorI2ltcG9ydCA8U2VjdXJpdHkvU2VjVHJ1c3QuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmlzdWFs
RWZmZWN0Vmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4K
KyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGlua1ByZXNlbnRhdGlvblNQSS5oPgorI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9OU1N0cmluZ1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFy
dHpDb3JlU1BJLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi9z
cGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9O
QUwoTGlua1ByZXNlbnRhdGlvbikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lk
IHJlcGxhY2VWaWV3V2l0aFZpZXcoVUlWaWV3ICp2aWV3LCBVSVZpZXcgKm90aGVyVmlldykKK3sK
KyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKKyAgICBbb3RoZXJWaWV3IHNldEZyYW1lOlt2aWV3IGZyYW1lXV07Cisg
ICAgW290aGVyVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOlt2aWV3IGF1dG9yZXNpemluZ01hc2td
XTsKKyAgICBbW3ZpZXcgc3VwZXJ2aWV3XSBpbnNlcnRTdWJ2aWV3Om90aGVyVmlldyBhYm92ZVN1
YnZpZXc6dmlld107CisgICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworZW51bSBGdWxsU2NyZWVuU3RhdGUgOiBOU0ludGVnZXIg
eworICAgIE5vdEluRnVsbFNjcmVlbiwKKyAgICBXYWl0aW5nVG9FbnRlckZ1bGxTY3JlZW4sCisg
ICAgRW50ZXJpbmdGdWxsU2NyZWVuLAorICAgIEluRnVsbFNjcmVlbiwKKyAgICBXYWl0aW5nVG9F
eGl0RnVsbFNjcmVlbiwKKyAgICBFeGl0aW5nRnVsbFNjcmVlbiwKK307CisKK3N0cnVjdCBXS1dl
YlZpZXdTdGF0ZSB7CisgICAgZmxvYXQgX3NhdmVkVG9wQ29udGVudEluc2V0ID0gMC4wOworICAg
IENHRmxvYXQgX3NhdmVkUGFnZVNjYWxlID0gMTsKKyAgICBDR0Zsb2F0IF9zYXZlZFZpZXdTY2Fs
ZSA9IDEuMDsKKyAgICBDR0Zsb2F0IF9zYXZlZFpvb21TY2FsZSA9IDE7CisgICAgVUlFZGdlSW5z
ZXRzIF9zYXZlZEVkZ2VJbnNldCA9IFVJRWRnZUluc2V0c1plcm87CisgICAgVUlFZGdlSW5zZXRz
IF9zYXZlZE9ic2N1cmVkSW5zZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBVSUVkZ2VJbnNl
dHMgX3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBD
R1BvaW50IF9zYXZlZENvbnRlbnRPZmZzZXQgPSBDR1BvaW50WmVybzsKKworICAgIHZvaWQgYXBw
bHlUbyhXS1dlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBbd2ViVmlldyBfc2V0UGFn
ZVNjYWxlOl9zYXZlZFBhZ2VTY2FsZSB3aXRoT3JpZ2luOkNHUG9pbnRNYWtlKDAsIDApXTsKKyAg
ICAgICAgW3dlYlZpZXcgX3NldE9ic2N1cmVkSW5zZXRzOl9zYXZlZE9ic2N1cmVkSW5zZXRzXTsK
KyAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldENvbnRlbnRJbnNldDpfc2F2ZWRFZGdl
SW5zZXRdOworICAgICAgICBbW3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Q29udGVudE9mZnNldDpf
c2F2ZWRDb250ZW50T2Zmc2V0XTsKKyAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldFNj
cm9sbEluZGljYXRvckluc2V0czpfc2F2ZWRTY3JvbGxJbmRpY2F0b3JJbnNldHNdOworICAgICAg
ICBbd2ViVmlldyBfcGFnZV0tPnNldFRvcENvbnRlbnRJbnNldChfc2F2ZWRUb3BDb250ZW50SW5z
ZXQpOworICAgICAgICBbd2ViVmlldyBfc2V0Vmlld1NjYWxlOl9zYXZlZFZpZXdTY2FsZV07Cisg
ICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRab29tU2NhbGU6X3NhdmVkWm9vbVNjYWxl
XTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZShXS1dlYlZpZXcqIHdlYlZpZXcpCisgICAg
eworICAgICAgICBfc2F2ZWRQYWdlU2NhbGUgPSBbd2ViVmlldyBfcGFnZVNjYWxlXTsKKyAgICAg
ICAgX3NhdmVkT2JzY3VyZWRJbnNldHMgPSBbd2ViVmlldyBfb2JzY3VyZWRJbnNldHNdOworICAg
ICAgICBfc2F2ZWRFZGdlSW5zZXQgPSBbW3dlYlZpZXcgc2Nyb2xsVmlld10gY29udGVudEluc2V0
XTsKKyAgICAgICAgX3NhdmVkQ29udGVudE9mZnNldCA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBj
b250ZW50T2Zmc2V0XTsKKyAgICAgICAgX3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRzID0gW1t3
ZWJWaWV3IHNjcm9sbFZpZXddIHNjcm9sbEluZGljYXRvckluc2V0c107CisgICAgICAgIF9zYXZl
ZFRvcENvbnRlbnRJbnNldCA9IFt3ZWJWaWV3IF9wYWdlXS0+dG9wQ29udGVudEluc2V0KCk7Cisg
ICAgICAgIF9zYXZlZFZpZXdTY2FsZSA9IFt3ZWJWaWV3IF92aWV3U2NhbGVdOworICAgICAgICBf
c2F2ZWRab29tU2NhbGUgPSBbW3dlYlZpZXcgc2Nyb2xsVmlld10gem9vbVNjYWxlXTsKKyAgICB9
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNwcmFnbWEgbWFyayAtCisKK0Bp
bnRlcmZhY2UgV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZp
ZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nLCBVSVZpZXdDb250cm9sbGVySW50ZXJh
Y3RpdmVUcmFuc2l0aW9uaW5nPgorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3
Q29udHJvbGxlciogdmlld0NvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0
IGluaXRpYWxGcmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZmluYWxGcmFtZTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNBbmltYXRpbmdJbikgQk9PTCBhbmltYXRp
bmdJbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRy
b2xsZXIgeworICAgIENHUmVjdCBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzOworICAgIENHUmVjdCBf
ZmluYWxNYXNrVmlld0JvdW5kczsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBfaW5pdGlhbEFuaW1h
dGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX2ZpbmFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybTsKKyAgICBDR1BvaW50IF9pbml0aWFsTWFza1ZpZXdDZW50ZXI7CisgICAg
Q0dQb2ludCBfZmluYWxNYXNrVmlld0NlbnRlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfbWFz
a1ZpZXc7CisgICAgUmV0YWluUHRyPFVJVmlldz4gX2FuaW1hdGluZ1ZpZXc7CisgICAgUmV0YWlu
UHRyPGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0Owor
ICAgIENHRmxvYXQgX2luaXRpYWxCYWNrZ3JvdW5kQWxwaGE7CisgICAgQ0dGbG9hdCBfZmluYWxC
YWNrZ3JvdW5kQWxwaGE7Cit9CisKKy0gKE5TVGltZUludGVydmFsKXRyYW5zaXRpb25EdXJhdGlv
bjooaWQ8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0aW9uQ29u
dGV4dAoreworICAgIGNvbnN0IE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gMC4y
OworICAgIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjsKK30KKworLSAodm9pZCljb25maWd1cmVJ
bml0aWFsQW5kRmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29u
dGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQgPSB0
cmFuc2l0aW9uQ29udGV4dDsKKyAgICBVSVZpZXcgKmZyb21WaWV3ID0gW3RyYW5zaXRpb25Db250
ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dEZyb21WaWV3S2V5XTsKKyAgICBVSVZp
ZXcgKnRvVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCB2aWV3Rm9yS2V5OlVJVHJhbnNpdGlvbkNv
bnRleHRUb1ZpZXdLZXldOworCisgICAgQ0dSZWN0IGlubGluZUZyYW1lID0gX2FuaW1hdGluZ0lu
ID8gX2luaXRpYWxGcmFtZSA6IF9maW5hbEZyYW1lOworICAgIENHUmVjdCBmdWxsc2NyZWVuRnJh
bWUgPSBfYW5pbWF0aW5nSW4gPyBfZmluYWxGcmFtZSA6IF9pbml0aWFsRnJhbWU7CisgICAgX2Fu
aW1hdGluZ1ZpZXcgPSBfYW5pbWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsKKworICAgIENH
UmVjdCBib3VuZHNSZWN0ID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KEZs
b2F0UmVjdChpbmxpbmVGcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGZ1bGxzY3JlZW5GcmFt
ZSk7CisgICAgYm91bmRzUmVjdC5vcmlnaW4gPSBDR1BvaW50WmVybzsKKworICAgIF9pbml0aWFs
TWFza1ZpZXdCb3VuZHMgPSBfYW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0IDogW19hbmltYXRpbmdW
aWV3IGJvdW5kc107CisgICAgX2luaXRpYWxNYXNrVmlld0NlbnRlciA9IENHUG9pbnRNYWtlKENH
UmVjdEdldE1pZFgoW19hbmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFtfYW5p
bWF0aW5nVmlldyBib3VuZHNdKSk7CisgICAgX2ZpbmFsTWFza1ZpZXdCb3VuZHMgPSBfYW5pbWF0
aW5nSW4gPyBbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSA6IGJvdW5kc1JlY3Q7CisgICAgX2ZpbmFs
TWFza1ZpZXdDZW50ZXIgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFtfYW5pbWF0aW5nVmll
dyBib3VuZHNdKSwgQ0dSZWN0R2V0TWlkWShbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpOworCisg
ICAgRmxvYXRSZWN0IHNjYWxlUmVjdCA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3Vu
ZFJlY3QoRmxvYXRSZWN0KGZ1bGxzY3JlZW5GcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGlu
bGluZUZyYW1lKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBzY2FsZVRyYW5zZm9ybSA9IENHQWZm
aW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlUmVjdC53aWR0aCgpIC8gZnVsbHNjcmVlbkZyYW1l
LnNpemUud2lkdGgsIHNjYWxlUmVjdC5oZWlnaHQoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLmhl
aWdodCk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRlVHJhbnNmb3JtID0gQ0dBZmZp
bmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oQ0dSZWN0R2V0TWlkWChpbmxpbmVGcmFtZSkgLSBD
R1JlY3RHZXRNaWRYKGZ1bGxzY3JlZW5GcmFtZSksIENHUmVjdEdldE1pZFkoaW5saW5lRnJhbWUp
IC0gQ0dSZWN0R2V0TWlkWShmdWxsc2NyZWVuRnJhbWUpKTsKKworICAgIENHQWZmaW5lVHJhbnNm
b3JtIGZpbmFsVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2NhbGVUcmFuc2Zv
cm0sIHRyYW5zbGF0ZVRyYW5zZm9ybSk7CisgICAgX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtID0gX2FuaW1hdGluZ0luID8gZmluYWxUcmFuc2Zvcm0gOiBDR0FmZmluZVRyYW5zZm9ybUlk
ZW50aXR5OworICAgIF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0gPSBfYW5pbWF0aW5nSW4g
PyBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5IDogZmluYWxUcmFuc2Zvcm07CisKKyAgICBfaW5p
dGlhbEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDAgOiAxOworICAgIF9maW5hbEJh
Y2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDEgOiAwOworfQorCistICh2b2lkKWFuaW1h
dGVUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRy
YW5zaXRpb25Db250ZXh0Cit7CisgICAgW3NlbGYgY29uZmlndXJlSW5pdGlhbEFuZEZpbmFsU3Rh
dGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dF07CisKKyAgICBfbWFza1ZpZXcgPSBh
ZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3Jv
dW5kQ29sb3I6W1VJQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRz
Ol9pbml0aWFsTWFza1ZpZXdCb3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0
aWFsTWFza1ZpZXdDZW50ZXJdOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFz
a1ZpZXcuZ2V0KCldOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtXTsKKyAgICAKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcg
PSBbdHJhbnNpdGlvbkNvbnRleHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcg
YWRkU3VidmlldzpfYW5pbWF0aW5nVmlldy5nZXQoKV07CisKKyAgICBVSVdpbmRvdyAqd2luZG93
ID0gY29udGFpbmVyVmlldy53aW5kb3c7CisgICAgd2luZG93LmJhY2tncm91bmRDb2xvciA9IFtV
SUNvbG9yIGNvbG9yV2l0aFdoaXRlOjAgYWxwaGE6X2luaXRpYWxCYWNrZ3JvdW5kQWxwaGFdOwor
CisgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlv
bjp0cmFuc2l0aW9uQ29udGV4dF0gZGVsYXk6MCBvcHRpb25zOlVJVmlld0FuaW1hdGlvbk9wdGlv
bkN1cnZlRWFzZUluT3V0IGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBl
cmNlbnQ6MV07CisgICAgfSBjb21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCkgeworICAgICAgICBb
c2VsZiBhbmltYXRpb25FbmRlZDohW3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRpb25XYXNDYW5j
ZWxsZWRdXTsKKyAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjoh
W3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRpb25XYXNDYW5jZWxsZWRdXTsKKyAgICB9XTsKK30K
KworLSAodm9pZClhbmltYXRpb25FbmRlZDooQk9PTCl0cmFuc2l0aW9uQ29tcGxldGVkCit7Cisg
ICAgaWYgKChbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiAhdHJhbnNpdGlvbkNvbXBsZXRlZCkgfHwg
KCFbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiB0cmFuc2l0aW9uQ29tcGxldGVkKSkKKyAgICAgICAg
W19hbmltYXRpbmdWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW19hbmltYXRpbmdW
aWV3IHNldE1hc2tWaWV3Om5pbF07CisgICAgX21hc2tWaWV3ID0gbmlsOworICAgIF9hbmltYXRp
bmdWaWV3ID0gbmlsOworfQorCistICh2b2lkKXN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOihp
ZCA8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0aW9uQ29udGV4
dAoreworICAgIFtzZWxmIGNvbmZpZ3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0ZvclRyYW5zaXRp
b246dHJhbnNpdGlvbkNvbnRleHRdOworCisgICAgX21hc2tWaWV3ID0gYWRvcHROUyhbW1VJVmll
dyBhbGxvY10gaW5pdF0pOworICAgIFtfbWFza1ZpZXcgc2V0QmFja2dyb3VuZENvbG9yOltVSUNv
bG9yIGJsYWNrQ29sb3JdXTsKKyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpfaW5pdGlhbE1hc2tW
aWV3Qm91bmRzXTsKKyAgICBbX21hc2tWaWV3IHNldENlbnRlcjpfaW5pdGlhbE1hc2tWaWV3Q2Vu
dGVyXTsKKyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6X21hc2tWaWV3LmdldCgpXTsK
KyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0VHJhbnNmb3JtOl9pbml0aWFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybV07CisKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcgPSBbdHJhbnNpdGlvbkNvbnRl
eHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcgYWRkU3VidmlldzpfYW5pbWF0
aW5nVmlldy5nZXQoKV07Cit9CisKKy0gKHZvaWQpdXBkYXRlV2l0aFBlcmNlbnQ6KENHRmxvYXQp
cGVyY2VudAoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIHBlcmNlbnRUcmFuc2Zvcm0gPSBfaW5p
dGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgcGVyY2VudFRyYW5zZm9ybS5hICs9IHBl
cmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hIC0gX2luaXRpYWxBbmltYXRp
bmdWaWV3VHJhbnNmb3JtLmEpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYiArPSBwZXJjZW50ICog
KF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybS5iKTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmMgKz0gcGVyY2VudCAqIChfZmluYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLmMgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0u
Yyk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5kICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS5kIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQpOworICAg
IHBlcmNlbnRUcmFuc2Zvcm0udHggKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJh
bnNmb3JtLnR4IC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4KTsKKyAgICBwZXJj
ZW50VHJhbnNmb3JtLnR5ICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9y
bS50eSAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS50eSk7CisgICAgW19hbmltYXRp
bmdWaWV3IHNldFRyYW5zZm9ybTpwZXJjZW50VHJhbnNmb3JtXTsKKworICAgIENHUmVjdCBwZXJj
ZW50Qm91bmRzID0gX2luaXRpYWxNYXNrVmlld0JvdW5kczsKKyAgICBwZXJjZW50Qm91bmRzLm9y
aWdpbi54ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnggLSBfaW5p
dGlhbE1hc2tWaWV3Qm91bmRzLm9yaWdpbi54KTsKKyAgICBwZXJjZW50Qm91bmRzLm9yaWdpbi55
ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnkgLSBfaW5pdGlhbE1h
c2tWaWV3Qm91bmRzLm9yaWdpbi55KTsKKyAgICBwZXJjZW50Qm91bmRzLnNpemUud2lkdGggKz0g
cGVyY2VudCAqIChfZmluYWxNYXNrVmlld0JvdW5kcy5zaXplLndpZHRoIC0gX2luaXRpYWxNYXNr
Vmlld0JvdW5kcy5zaXplLndpZHRoKTsKKyAgICBwZXJjZW50Qm91bmRzLnNpemUuaGVpZ2h0ICs9
IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQgLSBfaW5pdGlhbE1h
c2tWaWV3Qm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpwZXJj
ZW50Qm91bmRzXTsKKworICAgIENHUG9pbnQgcGVyY2VudENlbnRlciA9IF9pbml0aWFsTWFza1Zp
ZXdDZW50ZXI7CisgICAgcGVyY2VudENlbnRlci54ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1Zp
ZXdDZW50ZXIueCAtIF9maW5hbE1hc2tWaWV3Q2VudGVyLngpOworICAgIHBlcmNlbnRDZW50ZXIu
eSArPSBwZXJjZW50ICogKF9maW5hbE1hc2tWaWV3Q2VudGVyLnkgLSBfZmluYWxNYXNrVmlld0Nl
bnRlci55KTsKKyAgICBbX21hc2tWaWV3IHNldENlbnRlcjpwZXJjZW50Q2VudGVyXTsKKworICAg
IFVJV2luZG93ICp3aW5kb3cgPSBbX2FuaW1hdGluZ1ZpZXcgd2luZG93XTsKKyAgICB3aW5kb3cu
YmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlh
bEJhY2tncm91bmRBbHBoYSArIHBlcmNlbnQgKiAoX2ZpbmFsQmFja2dyb3VuZEFscGhhIC0gX2lu
aXRpYWxCYWNrZ3JvdW5kQWxwaGEpXTsKK30KKworLSAodm9pZCl1cGRhdGVXaXRoUGVyY2VudDoo
Q0dGbG9hdClwZXJjZW50IHRyYW5zbGF0aW9uOihDR1NpemUpdHJhbnNsYXRpb24gYW5jaG9yOihD
R1BvaW50KWFuY2hvcgoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIHBlcmNlbnRUcmFuc2Zvcm0g
PSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgcGVyY2VudFRyYW5zZm9ybS5h
ICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hIC0gX2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLmEpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYiArPSBwZXJj
ZW50ICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS5iKTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmMgKz0gcGVyY2VudCAqIChf
ZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmMgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFu
c2Zvcm0uYyk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5kICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5p
bWF0aW5nVmlld1RyYW5zZm9ybS5kIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQp
OworICAgIHBlcmNlbnRUcmFuc2Zvcm0udHggKz0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtLnR4ICsgdHJhbnNsYXRpb24ud2lkdGg7CisgICAgcGVyY2VudFRyYW5zZm9ybS50eSArPSBf
aW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHkgKyB0cmFuc2xhdGlvbi5oZWlnaHQ7Cisg
ICAgW19hbmltYXRpbmdWaWV3IHNldFRyYW5zZm9ybTpwZXJjZW50VHJhbnNmb3JtXTsKKworICAg
IFVJV2luZG93ICp3aW5kb3cgPSBbX2FuaW1hdGluZ1ZpZXcgd2luZG93XTsKKyAgICB3aW5kb3cu
YmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlh
bEJhY2tncm91bmRBbHBoYSArIHBlcmNlbnQgKiAoX2ZpbmFsQmFja2dyb3VuZEFscGhhIC0gX2lu
aXRpYWxCYWNrZ3JvdW5kQWxwaGEpXTsKK30KKworLSh2b2lkKWVuZDooQk9PTCljYW5jZWxsZWQg
eworICAgIGlmIChjYW5jZWxsZWQpIHsKKyAgICAgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0
aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlvbjpfY29udGV4dC5nZXQoKV0gYW5pbWF0aW9uczpe
eworICAgICAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBlcmNlbnQ6MF07CisgICAgICAgIH0gY29t
cGxldGlvbjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAgICAgICAgIFtfY29udGV4dCBjYW5jZWxJ
bnRlcmFjdGl2ZVRyYW5zaXRpb25dOworICAgICAgICAgICAgW19jb250ZXh0IGNvbXBsZXRlVHJh
bnNpdGlvbjpOT107CisgICAgICAgIH1dOworICAgIH0gZWxzZSB7CisgICAgICAgIFtVSVZpZXcg
YW5pbWF0ZVdpdGhEdXJhdGlvbjpbc2VsZiB0cmFuc2l0aW9uRHVyYXRpb246X2NvbnRleHQuZ2V0
KCldIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZVdpdGhQZXJjZW50OjFd
OworICAgICAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgICAgICBb
X2NvbnRleHQgZmluaXNoSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgICAgIFtfY29u
dGV4dCBjb21wbGV0ZVRyYW5zaXRpb246WUVTXTsKKyAgICAgICAgfV07CisgICAgfQorfQorCitA
ZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuSW50ZXJhY3Rp
dmVUcmFuc2l0aW9uIDogTlNPYmplY3Q8VUlWaWV3Q29udHJvbGxlckludGVyYWN0aXZlVHJhbnNp
dGlvbmluZz4KKy0gKGlkKWluaXRXaXRoQW5pbWF0b3I6KFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNv
bnRyb2xsZXIgKilhbmltYXRvciBhbmNob3I6KENHUG9pbnQpcG9pbnQ7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24geworICAgIFJldGFp
blB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyPiBfYW5pbWF0b3I7CisgICAgUmV0
YWluUHRyPGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0
OworICAgIENHUG9pbnQgX2FuY2hvcjsKK30KKworLSAoaWQpaW5pdFdpdGhBbmltYXRvcjooV0tG
dWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciAqKWFuaW1hdG9yIGFuY2hvcjooQ0dQb2ludClw
b2ludAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgX2FuaW1hdG9yID0gYW5pbWF0b3I7CisgICAgX2FuY2hvciA9
IHBvaW50OworICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKXdhbnRzSW50ZXJhY3RpdmVT
dGFydAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpc3RhcnRJbnRlcmFjdGl2ZVRy
YW5zaXRpb246KGlkIDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5z
aXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQgPSB0cmFuc2l0aW9uQ29udGV4dDsKKyAgICBb
X2FuaW1hdG9yIHN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOnRyYW5zaXRpb25Db250ZXh0XTsK
K30KKworLSAodm9pZCl1cGRhdGVJbnRlcmFjdGl2ZVRyYW5zaXRpb246KENHRmxvYXQpcGVyY2Vu
dENvbXBsZXRlIHdpdGhUcmFuc2xhdGlvbjooQ0dTaXplKXRyYW5zbGF0aW9uCit7CisgICAgW19h
bmltYXRvciB1cGRhdGVXaXRoUGVyY2VudDpwZXJjZW50Q29tcGxldGUgdHJhbnNsYXRpb246dHJh
bnNsYXRpb24gYW5jaG9yOl9hbmNob3JdOworICAgIFtfY29udGV4dCB1cGRhdGVJbnRlcmFjdGl2
ZVRyYW5zaXRpb246cGVyY2VudENvbXBsZXRlXTsKK30KKworLSAodm9pZCljYW5jZWxJbnRlcmFj
dGl2ZVRyYW5zaXRpb24KK3sKKyAgICBbX2FuaW1hdG9yIGVuZDpZRVNdOworfQorCistICh2b2lk
KWZpbmlzaEludGVyYWN0aXZlVHJhbnNpdGlvbgoreworICAgIFtfYW5pbWF0b3IgZW5kOk5PXTsK
K30KK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyICgpIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGU+CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKKyAgICBXS1dlYlZp
ZXcgKl93ZWJWaWV3OyAvLyBDYW5ub3QgYmUgcmV0YWluZWQsIHNlZSA8cmRhcjovL3Byb2JsZW0v
MTQ4ODQ2NjY+LgorICAgIFJldGFpblB0cjxVSVZpZXc+IF93ZWJWaWV3UGxhY2Vob2xkZXI7CisK
KyAgICBGdWxsU2NyZWVuU3RhdGUgX2Z1bGxTY3JlZW5TdGF0ZTsKKyAgICBXS1dlYlZpZXdTdGF0
ZSBfdmlld1N0YXRlOworCisgICAgUmV0YWluUHRyPFVJV2luZG93PiBfd2luZG93OworICAgIFJl
dGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBfcm9vdFZpZXdDb250cm9sbGVyOworCisgICAgUmVm
UHRyPFdlYktpdDo6Vm9pZENhbGxiYWNrPiBfcmVwYWludENhbGxiYWNrOworICAgIFJldGFpblB0
cjxVSVZpZXdDb250cm9sbGVyPiBfdmlld0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb247CisgICAg
UmV0YWluUHRyPFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyPiBfZnVsbHNjcmVlblZpZXdDb250
cm9sbGVyOworICAgIFJldGFpblB0cjxVSVN3aXBlR2VzdHVyZVJlY29nbml6ZXI+IF9zdGFydERp
c21pc3NHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8VUlQYW5HZXN0dXJlUmVjb2du
aXplcj4gX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0
cjxXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24+IF9pbnRlcmFjdGl2ZURpc21pc3NU
cmFuc2l0aW9uQ29vcmRpbmF0b3I7CisKKyAgICBDR1JlY3QgX2luaXRpYWxGcmFtZTsKKyAgICBD
R1JlY3QgX2ZpbmFsRnJhbWU7CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9FVk9yZ2FuaXph
dGlvbk5hbWU7CisgICAgQk9PTCBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZDsKKyAgICBCT09M
IF9pbkludGVyYWN0aXZlRGlzbWlzczsKKworICAgIFJldGFpblB0cjxpZD4gX25vdGlmaWNhdGlv
bkxpc3RlbmVyOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEluaXRpYWxpemF0
aW9uCistIChpZClpbml0V2l0aFdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBp
ZiAoIVtzdXBlciBpbml0XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfd2ViVmlldyA9IHdl
YlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsK
KyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGZdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgLQorI3By
YWdtYSBtYXJrIEFjY2Vzc29ycworCistIChCT09MKWlzRnVsbFNjcmVlbgoreworICAgIHJldHVy
biBfZnVsbFNjcmVlblN0YXRlID09IFdhaXRpbmdUb0VudGVyRnVsbFNjcmVlbgorICAgICAgICB8
fCBfZnVsbFNjcmVlblN0YXRlID09IEVudGVyaW5nRnVsbFNjcmVlbgorICAgICAgICB8fCBfZnVs
bFNjcmVlblN0YXRlID09IEluRnVsbFNjcmVlbjsKK30KKworLSAoV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcgKil3ZWJWaWV3UGxhY2Vob2xkZXIKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4dGVybmFsIEludGVyZmFjZQorCist
ICh2b2lkKWVudGVyRnVsbFNjcmVlbgoreworICAgIGlmIChbc2VsZiBpc0Z1bGxTY3JlZW5dKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFt
ZV07CisKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuOwor
CisgICAgX3dpbmRvdyA9IGFkb3B0TlMoW1tVSVdpbmRvdyBhbGxvY10gaW5pdF0pOworICAgIFtf
d2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBjbGVhckNvbG9yXV07CisgICAgW193
aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbCAtIDFdOworICAgIFtfd2lu
ZG93IHNldEhpZGRlbjpOT107CisKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyID0gW1tVSVZpZXdD
b250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpLnZp
ZXcgPSBbW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6X3dpbmRvdy5nZXQoKS5ib3VuZHNd
IGF1dG9yZWxlYXNlXTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYmFja2dy
b3VuZENvbG9yID0gW1VJQ29sb3IgY2xlYXJDb2xvcl07CisgICAgX3Jvb3RWaWV3Q29udHJvbGxl
ci5nZXQoKS52aWV3LmF1dG9yZXNpemluZ01hc2sgPSAoVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGli
bGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KTsKKyAgICBbX3Jvb3RW
aWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRp
b25DdXN0b21dOworICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxl
Z2F0ZTpzZWxmXTsKKworICAgIF93aW5kb3cuZ2V0KCkucm9vdFZpZXdDb250cm9sbGVyID0gX3Jv
b3RWaWV3Q29udHJvbGxlci5nZXQoKTsKKworICAgIF9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIg
PSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzpfd2ViVmlld10pOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldE1vZGFs
UHJlc2VudGF0aW9uU3R5bGU6VUlNb2RhbFByZXNlbnRhdGlvbkN1c3RvbV07CisgICAgW19mdWxs
c2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0VHJhbnNpdGlvbmluZ0RlbGVnYXRlOnNlbGZdOworICAg
IFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uQ2FwdHVyZXNT
dGF0dXNCYXJBcHBlYXJhbmNlOllFU107CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIg
c2V0VGFyZ2V0OnNlbGZdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldEFjdGlv
bjpAc2VsZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07CisgICAgW1tfZnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOltbX3Jvb3RWaWV3Q29udHJvbGxlciB2aWV3XSBi
b3VuZHNdXTsKKyAgICBbc2VsZiBfdXBkYXRlTG9jYXRpb25JbmZvXTsKKworICAgIF9zdGFydERp
c21pc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVN3aXBlR2VzdHVyZVJlY29nbml6
ZXIgYWxsb2NdICBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3N0YXJ0VG9E
aXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6KV0pOworICAgIFtfc3RhcnREaXNtaXNzR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19zdGFydERpc21pc3NHZXN0dXJlUmVj
b2duaXplciBzZXRDYW5jZWxzVG91Y2hlc0luVmlldzpZRVNdOworICAgIFtfc3RhcnREaXNtaXNz
R2VzdHVyZVJlY29nbml6ZXIgc2V0TnVtYmVyT2ZUb3VjaGVzUmVxdWlyZWQ6MV07CisgICAgW19z
dGFydERpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXREaXJlY3Rpb246VUlTd2lwZUdlc3R1cmVS
ZWNvZ25pemVyRGlyZWN0aW9uRG93bl07CisgICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVy
IHZpZXddIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9zdGFydERpc21pc3NHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CisKKyAgICBfaW50ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgPSBh
ZG9wdE5TKFtbVUlQYW5HZXN0dXJlUmVjb2duaXplciBhbGxvY10gIGluaXRXaXRoVGFyZ2V0OnNl
bGYgYWN0aW9uOkBzZWxlY3RvcihfaW50ZXJhY3RpdmVEaXNtaXNzQ2hhbmdlZDopXSk7CisgICAg
W19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsK
KyAgICBbX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHNldENhbmNlbHNUb3Vj
aGVzSW5WaWV3Ok5PXTsKKyAgICBbW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld10gYWRk
R2VzdHVyZVJlY29nbml6ZXI6X2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyLmdl
dCgpXTsKKworICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2F2ZVNjcm9sbFBvc2l0aW9uKCk7CisKKyAg
ICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKHRydWUpOwor
CisgICAgX3ZpZXdTdGF0ZS5zdG9yZShfd2ViVmlldyk7CisKKyAgICBfd2ViVmlld1BsYWNlaG9s
ZGVyID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOworICAgIFtbX3dlYlZpZXdQbGFj
ZWhvbGRlciBsYXllcl0gc2V0TmFtZTpAIkZ1bGxzY3JlZW4gUGxhY2Vob2xkZXIgVmlldyJdOwor
CisgICAgV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24qIGNvbmZpZyA9IG5pbDsKKyAgICBbX3dlYlZp
ZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29uZmlnIGNvbXBsZXRpb25IYW5kbGVy
Ol4oVUlJbWFnZSAqIHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKiBlcnJvcikgeworICAgICAgICBp
ZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOworICAgICAgICAKKyAgICAgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIGxheWVy
XSBzZXRDb250ZW50czooaWQpW3NuYXBzaG90SW1hZ2UgQ0dJbWFnZV1dOworICAgICAgICByZXBs
YWNlVmlld1dpdGhWaWV3KF93ZWJWaWV3LCBfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpKTsKKwor
ICAgICAgICBXS1dlYlZpZXdTdGF0ZSgpLmFwcGx5VG8oX3dlYlZpZXcpOworICAgICAgICAKKyAg
ICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOworICAgICAg
ICBbX3dlYlZpZXcgc2V0RnJhbWU6W193aW5kb3cgYm91bmRzXV07CisgICAgICAgIFtfd2luZG93
IGluc2VydFN1YnZpZXc6X3dlYlZpZXcgYXRJbmRleDowXTsKKyAgICAgICAgW193ZWJWaWV3IHNl
dE5lZWRzTGF5b3V0XTsKKyAgICAgICAgW193ZWJWaWV3IGxheW91dElmTmVlZGVkXTsKKyAgICAg
ICAgCisgICAgICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVl
KTsKKworICAgICAgICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoW3By
b3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZiksIHNlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNl
OjpFcnJvcikgeworICAgICAgICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IG51bGxwdHI7CisgICAg
ICAgICAgICBpZiAoYXV0byogbWFuYWdlciA9IFtwcm90ZWN0ZWRTZWxmIF9tYW5hZ2VyXSkKKyAg
ICAgICAgICAgICAgICBtYW5hZ2VyLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CisKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgW3NlbGYgX2V4aXRGdWxsc2Ny
ZWVuSW1tZWRpYXRlbHldOworICAgICAgICB9KTsKKyAgICAgICAgW193ZWJWaWV3IF9wYWdlXS0+
Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKKworICAgICAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworICAgIH1dOworfQorCistICh2b2lkKWJlZ2FuRW50ZXJGdWxs
U2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihD
R1JlY3QpZmluYWxGcmFtZQoreworICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IFdhaXRpbmdU
b0VudGVyRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIF9mdWxsU2NyZWVuU3RhdGUg
PSBFbnRlcmluZ0Z1bGxTY3JlZW47CisKKyAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1l
OworICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworCisgICAg
W193ZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW193aW5kb3cgc2V0V2luZG93
TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbF07CisgICAgW193aW5kb3cgbWFrZUtleUFuZFZpc2li
bGVdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJI
aWRkZW46Tk9dOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNob3dVSV07CisKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgW19yb290Vmlld0NvbnRyb2xsZXIgcHJl
c2VudFZpZXdDb250cm9sbGVyOl9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb246XnsKKyAgICAgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEluRnVsbFNj
cmVlbjsKKworICAgICAgICBhdXRvKiBwYWdlID0gW193ZWJWaWV3IF9wYWdlXTsKKyAgICAgICAg
YXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXI7CisgICAgICAgIGlmIChwYWdlICYmIG1hbmFn
ZXIpIHsKKyAgICAgICAgICAgIG1hbmFnZXItPmRpZEVudGVyRnVsbFNjcmVlbigpOworICAgICAg
ICAgICAgbWFuYWdlci0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7CisgICAgICAgICAg
ICBwYWdlLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKGZhbHNlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAgfV07Cit9CisKKy0g
KHZvaWQpcmVxdWVzdEV4aXRGdWxsU2NyZWVuCit7CisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBz
ZWxmLl9tYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOworfQorCistICh2b2lkKWV4aXRG
dWxsU2NyZWVuCit7CisgICAgaWYgKCFzZWxmLmlzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJu
OworICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBXYWl0aW5nVG9FeGl0RnVsbFNjcmVlbjsKKworICAg
IGlmIChhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdlcikgeworICAgICAgICBtYW5hZ2VyLT5z
ZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOworICAgICAgICBtYW5hZ2VyLT53aWxsRXhpdEZ1
bGxTY3JlZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIFtzZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKK30KKworLSAo
dm9pZCliZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxG
cmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZQoreworICAgIGlmIChfZnVsbFNjcmVl
blN0YXRlICE9IFdhaXRpbmdUb0V4aXRGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAg
X2Z1bGxTY3JlZW5TdGF0ZSA9IEV4aXRpbmdGdWxsU2NyZWVuOworCisgICAgX2luaXRpYWxGcmFt
ZSA9IGluaXRpYWxGcmFtZTsKKyAgICBfZmluYWxGcmFtZSA9IGZpbmFsRnJhbWU7CisgICAgCisg
ICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyh0cnVlKTsK
KworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRk
ZW46Tk9dOworCisgICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0
b3IpIHsKKyAgICAgICAgW19pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3Ig
ZmluaXNoSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgX2ludGVyYWN0aXZlRGlzbWlz
c1RyYW5zaXRpb25Db29yZGluYXRvciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1h
dGVkOllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3Jl
ZW5dOworICAgIH1dOworfQorCistICh2b2lkKV9jb21wbGV0ZWRFeGl0RnVsbFNjcmVlbgorewor
ICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IEV4aXRpbmdGdWxsU2NyZWVuKQorICAgICAgICBy
ZXR1cm47CisgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IE5vdEluRnVsbFNjcmVlbjsKKworICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9u
czpZRVNdOworCisgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIHN1cGVydmlld10gaW5zZXJ0U3Vi
dmlldzpfd2ViVmlldyBiZWxvd1N1YnZpZXc6X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKV07Cisg
ICAgW193ZWJWaWV3IHNldEZyYW1lOltfd2ViVmlld1BsYWNlaG9sZGVyIGZyYW1lXV07CisgICAg
W193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6W193ZWJWaWV3UGxhY2Vob2xkZXIgYXV0b3Jl
c2l6aW5nTWFza11dOworCisgICAgW1tfd2ViVmlldyB3aW5kb3ddIG1ha2VLZXlBbmRWaXNpYmxl
XTsKKworICAgIF92aWV3U3RhdGUuYXBwbHlUbyhfd2ViVmlldyk7CisKKyAgICBbX3dlYlZpZXcg
c2V0TmVlZHNMYXlvdXRdOworICAgIFtfd2ViVmlldyBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgW193aW5kb3cgc2V0SGlkZGVuOllFU107Cisg
ICAgX3dpbmRvdyA9IG5pbDsKKworICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdl
cikgeworICAgICAgICBtYW5hZ2VyLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKKyAg
ICAgICAgbWFuYWdlci0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB9CisKKyAgICBpZiAoX3Jl
cGFpbnRDYWxsYmFjaykgeworICAgICAgICBfcmVwYWludENhbGxiYWNrLT5pbnZhbGlkYXRlKFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAg
IEFTU0VSVCghX3JlcGFpbnRDYWxsYmFjayk7CisgICAgfQorCisgICAgX3JlcGFpbnRDYWxsYmFj
ayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYp
LCBzZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgX3JlcGFpbnRD
YWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgIFtfd2ViVmlld1BsYWNlaG9sZGVyIHJlbW92ZUZy
b21TdXBlcnZpZXddOworCisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2li
aWxpdHlVcGRhdGVzKGZhbHNlKTsKKyAgICB9KTsKKworICAgIGlmIChhdXRvKiBwYWdlID0gW193
ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9y
ZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKKyAgICBlbHNlCisgICAgICAgIF9yZXBhaW50Q2Fs
bGJhY2stPnBlcmZvcm1DYWxsYmFjaygpOworCisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xs
ZXIgc2V0UHJlZmVyc1N0YXR1c0JhckhpZGRlbjpZRVNdOworfQorCistICh2b2lkKWNsb3NlCit7
CisgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOworICAgIF93ZWJWaWV3ID0g
bmlsOworfQorCistICh2b2lkKXdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1
bGxzY3JlZW4KK3sKKyAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW4gJiYg
X3dlYlZpZXcud2luZG93ICE9IF93aW5kb3cuZ2V0KCkpCisgICAgICAgIFtzZWxmIF9leGl0RnVs
bHNjcmVlbkltbWVkaWF0ZWx5XTsKK30KKworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZQoreworICAgIGlmIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyKQorICAgICAgICBb
X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV07
Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRl
bGVnYXRlCisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIg
KilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0
dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6
ZXIKK3sKKyAgICByZXR1cm4gWUVTOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJr
IFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGUKKworLSAoaWQ8VUlWaWV3Q29u
dHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4pYW5pbWF0aW9uQ29udHJvbGxlckZvclByZXNl
bnRlZENvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKilwcmVzZW50ZWQgcHJlc2VudGluZ0Nv
bnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKilwcmVzZW50aW5nIHNvdXJjZUNvbnRyb2xsZXI6
KFVJVmlld0NvbnRyb2xsZXIgKilzb3VyY2UKK3sKKyAgICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVu
QW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1
bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2FuaW1hdGlv
bkNvbnRyb2xsZXIgc2V0Vmlld0NvbnRyb2xsZXI6cHJlc2VudGVkXTsKKyAgICBbYW5pbWF0aW9u
Q29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6X2luaXRpYWxGcmFtZV07CisgICAgW2FuaW1hdGlv
bkNvbnRyb2xsZXIgc2V0RmluYWxGcmFtZTpfZmluYWxGcmFtZV07CisgICAgW2FuaW1hdGlvbkNv
bnRyb2xsZXIgc2V0QW5pbWF0aW5nSW46WUVTXTsKKyAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJv
bGxlci5hdXRvcmVsZWFzZSgpOworfQorCistIChpZDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRU
cmFuc2l0aW9uaW5nPilhbmltYXRpb25Db250cm9sbGVyRm9yRGlzbWlzc2VkQ29udHJvbGxlcjoo
VUlWaWV3Q29udHJvbGxlciAqKWRpc21pc3NlZAoreworICAgIENHUmVjdCBpbml0aWFsRnJhbWUg
PSBfaW5pdGlhbEZyYW1lOworICAgIENHUmVjdCBmaW5hbEZyYW1lID0gX2ZpbmFsRnJhbWU7CisK
KyAgICAvLyBCZWNhdXNlIHdlJ3JlIG5vdCBjYWxsaW5nICJyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4o
KSIgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpbnRlcmFjdGl2ZSBhbmltYXRpb24sCisgICAgLy8g
dGhlIF9pbml0aWFsRnJhbWUgYW5kIF9maW5hbEZyYW1lIHZhbHVlcyBhcmUgbGVmdCBvdmVyIGZy
b20gd2hlbiB3ZSBlbnRlcmVkIGZ1bGxzY3JlZW4uCisgICAgaWYgKF9pbkludGVyYWN0aXZlRGlz
bWlzcykKKyAgICAgICAgc3RkOjpzd2FwKGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7CisKKyAg
ICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFsbG9j
XSBpbml0XSk7CisgICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0Vmlld0NvbnRyb2xsZXI6ZGlz
bWlzc2VkXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6aW5pdGlh
bEZyYW1lXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRGaW5hbEZyYW1lOmZpbmFsRnJh
bWVdOworICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1hdGluZ0luOk5PXTsKKyAgICBy
ZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci5hdXRvcmVsZWFzZSgpOworfQorCistIChpZDxVSVZp
ZXdDb250cm9sbGVySW50ZXJhY3RpdmVUcmFuc2l0aW9uaW5nPilpbnRlcmFjdGlvbkNvbnRyb2xs
ZXJGb3JEaXNtaXNzYWw6KGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+
KWFuaW1hdG9yCit7CisgICAgaWYgKCFfaW5JbnRlcmFjdGl2ZURpc21pc3MpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBpZiAoIVthbmltYXRvciBpc0tpbmRPZkNsYXNzOltXS0Z1bGxzY3Jl
ZW5BbmltYXRpb25Db250cm9sbGVyIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBpZiAoIV9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IpCisgICAgICAg
IF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgPSBhZG9wdE5TKFtbV0tG
dWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIGFsbG9jXSBpbml0V2l0aEFuaW1hdG9yOihX
S0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyICopYW5pbWF0b3IgYW5jaG9yOkNHUG9pbnRa
ZXJvXSk7CisKKyAgICByZXR1cm4gX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGlu
YXRvci5nZXQoKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJbnRlcm5hbCBJ
bnRlcmZhY2UKKworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseQoreworICAgIGlm
ICghW3NlbGYgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogbWFu
YWdlciA9IHNlbGYuX21hbmFnZXI7CisgICAgaWYgKG1hbmFnZXIpCisgICAgICAgIG1hbmFnZXIt
PnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworICAgIFtzZWxmIGV4aXRGdWxsU2NyZWVuXTsKKyAg
ICBfZnVsbFNjcmVlblN0YXRlID0gRXhpdGluZ0Z1bGxTY3JlZW47CisgICAgW3NlbGYgX2NvbXBs
ZXRlZEV4aXRGdWxsU2NyZWVuXTsKKyAgICByZXBsYWNlVmlld1dpdGhWaWV3KF93ZWJWaWV3UGxh
Y2Vob2xkZXIuZ2V0KCksIF93ZWJWaWV3KTsKKyAgICBpZiAoYXV0byogcGFnZSA9IFtfd2ViVmll
dyBfcGFnZV0pCisgICAgICAgIHBhZ2UtPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFs
c2UpOworICAgIGlmIChtYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPmRpZEV4aXRGdWxsU2Ny
ZWVuKCk7CisgICAgICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwor
ICAgIH0KKyAgICBfd2ViVmlld1BsYWNlaG9sZGVyID0gbmlsOworfQorCistICh2b2lkKV9pbnZh
bGlkYXRlRVZPcmdhbml6YXRpb25OYW1lCit7CisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IG5p
bDsKKyAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IE5POworfQorCistIChCT09MKV9p
c1NlY3VyZQoreworICAgIHJldHVybiBfd2ViVmlldy5oYXNPbmx5U2VjdXJlQ29udGVudDsKK30K
KworLSAoU2VjVHJ1c3RSZWYpX3NlcnZlclRydXN0Cit7CisgICAgcmV0dXJuIF93ZWJWaWV3LnNl
cnZlclRydXN0OworfQorCistIChOU1N0cmluZyAqKV9FVk9yZ2FuaXphdGlvbk5hbWUKK3sKKyAg
ICBpZiAoIXNlbGYuX2lzU2VjdXJlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKF9F
Vk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkKQorICAgICAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9u
TmFtZS5nZXQoKTsKKworICAgIEFTU0VSVCghX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKSk7Cisg
ICAgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQgPSBZRVM7CisKKyAgICBTZWNUcnVzdFJlZiB0
cnVzdCA9IFtzZWxmIF9zZXJ2ZXJUcnVzdF07CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIE5TRGljdGlvbmFyeSAqaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdl
IE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKKyAg
ICAvLyBJZiBTZWNUcnVzdENvcHlJbmZvIHJldHVybmVkIE5VTEwgdGhlbiBpdCdzIGxpa2VseSB0
aGF0IHRoZSBTZWNUcnVzdFJlZiBoYXMgbm90IGJlZW4gZXZhbHVhdGVkCisgICAgLy8gYW5kIHRo
ZSBvbmx5IHdheSB0byBnZXQgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgaXMgdG8gY2FsbCBTZWNU
cnVzdEV2YWx1YXRlIG91cnNlbHZlcy4KKyAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KSB7CisgICAg
ICAgIE9TU3RhdHVzIGVyciA9IFNlY1RydXN0RXZhbHVhdGUodHJ1c3QsIE5VTEwpOworICAgICAg
ICBpZiAoZXJyID09IG5vRXJyKQorICAgICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJp
ZGdlIE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgaWYgKCFpbmZvRGljdGlvbmFyeSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlk
IGFnYWluc3Qgb3VyIGNlcnRpZmljYXRlIGNoYWluLgorICAgIGlkIGhhc0VWID0gW2luZm9EaWN0
aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0
ZW5kZWRWYWxpZGF0aW9uS2V5XTsKKyAgICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1Zh
bHVlIGNsYXNzXV0gfHwgIVtoYXNFViBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZl
ciBhbmQgaXQgaXMgc3RpbGwgdmFsaWQuCisgICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0
aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2
b2NhdGlvbktleV07CisgICAgaWYgKCFbaXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFs
dWUgY2xhc3NdXSB8fCAhW2lzTm90UmV2b2tlZCBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RG
b3JLZXk6KF9fYnJpZGdlIE5TU3RyaW5nICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsK
KyAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKK30KKworLSAodm9pZClfdXBk
YXRlTG9jYXRpb25JbmZvCit7CisgICAgTlNVUkwqIHVybCA9IF93ZWJWaWV3Ll9jb21taXR0ZWRV
Ukw7CisKKyAgICBOU1N0cmluZyAqRVZPcmdhbml6YXRpb25OYW1lID0gW3NlbGYgX0VWT3JnYW5p
emF0aW9uTmFtZV07CisgICAgQk9PTCBzaG93c0VWT3JnYW5pemF0aW9uTmFtZSA9IFtFVk9yZ2Fu
aXphdGlvbk5hbWUgbGVuZ3RoXSA+IDA7CisKKyAgICBOU1N0cmluZyAqZG9tYWluID0gbmlsOwor
CisgICAgaWYgKExpbmtQcmVzZW50YXRpb25MaWJyYXJ5KCkpCisgICAgICAgIGRvbWFpbiA9IFt1
cmwgX2xwX3NpbXBsaWZpZWREaXNwbGF5U3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIGRvbWFp
biA9IHVzZXJWaXNpYmxlU3RyaW5nKHVybCk7CisKKyAgICBOU1N0cmluZyAqdGV4dCA9IG5pbDsK
KyAgICBpZiAoW1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiZGF0YSJdID09
IE5TT3JkZXJlZFNhbWUpCisgICAgICAgIHRleHQgPSBAImRhdGE6IjsKKyAgICBlbHNlIGlmIChz
aG93c0VWT3JnYW5pemF0aW9uTmFtZSkKKyAgICAgICAgdGV4dCA9IEVWT3JnYW5pemF0aW9uTmFt
ZTsKKyAgICBlbHNlCisgICAgICAgIHRleHQgPSBkb21haW47CisKKyAgICBbX2Z1bGxzY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRMb2NhdGlvbjp0ZXh0XTsKK30KKworLSAoV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBbX3dlYlZpZXcgX3BhZ2VdLT5mdWxsU2Ny
ZWVuTWFuYWdlcigpOworfQorCistICh2b2lkKV9zdGFydFRvRGlzbWlzc0Z1bGxzY3JlZW5DaGFu
Z2VkOihpZClzZW5kZXIKK3sKKyAgICBfaW5JbnRlcmFjdGl2ZURpc21pc3MgPSB0cnVlOworICAg
IFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVk
OllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5d
OworICAgICAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3RhdHVzQmFy
SGlkZGVuOllFU107CisgICAgfV07Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0aXZlRGlzbWlzc0No
YW5nZWQ6KGlkKXNlbmRlcgoreworICAgIGlmICghX2luSW50ZXJhY3RpdmVEaXNtaXNzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR1BvaW50IHRyYW5zbGF0aW9uID0gW19pbnRlcmFjdGl2ZURp
c21pc3NHZXN0dXJlUmVjb2duaXplciB0cmFuc2xhdGlvbkluVmlldzpfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyLmdldCgpLnZpZXddOworICAgIENHUG9pbnQgdmVsb2NpdHkgPSBbX2ludGVyYWN0
aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHZlbG9jaXR5SW5WaWV3Ol9mdWxsc2NyZWVuVmll
d0NvbnRyb2xsZXIuZ2V0KCkudmlld107CisgICAgQ0dGbG9hdCBwZXJjZW50ID0gdHJhbnNsYXRp
b24ueSAvIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYm91bmRzLnNpemUu
aGVpZ2h0IC8gMik7CisgICAgcGVyY2VudCA9IHN0ZDo6bWluKDEuLCBzdGQ6Om1heCgwLiwgcGVy
Y2VudCkpOworCisgICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplci5n
ZXQoKS5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCkgeworICAgICAgICBf
aW5JbnRlcmFjdGl2ZURpc21pc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAocGVyY2VudCA+IDAu
MjUgfHwgKHBlcmNlbnQgPiAwICYmIHZlbG9jaXR5LnkgPiA1KSkKKyAgICAgICAgICAgIFtzZWxm
IHJlcXVlc3RFeGl0RnVsbFNjcmVlbl07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgW19p
bnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgY2FuY2VsSW50ZXJhY3RpdmVU
cmFuc2l0aW9uXTsKKyAgICAgICAgICAgIF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29v
cmRpbmF0b3IgPSBuaWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFtfaW50ZXJhY3RpdmVEaXNtaXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9yIHVwZGF0ZUludGVyYWN0
aXZlVHJhbnNpdGlvbjpwZXJjZW50IHdpdGhUcmFuc2xhdGlvbjpDR1NpemVNYWtlKHRyYW5zbGF0
aW9uLngsIHRyYW5zbGF0aW9uLnkpXTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSAmJiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmZDJhZjY3NTNmNGViNWQwZTM4ZTI1NzUwZmRkMmRlMDdhNDgzNGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9X
S0Z1bGxzY3JlZW5TdGFja1ZpZXcuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykK
KworI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisK
K0BpbnRlcmZhY2UgV0tGdWxsc2NyZWVuU3RhY2tWaWV3IDogVUlWaWV3CisrICh2b2lkKWFwcGx5
UHJpbWFyeUdseXBoVGludFRvVmlldzooVUlWaWV3ICopdmlldzsKKysgKHZvaWQpYXBwbHlTZWNv
bmRhcnlHbHlwaFRpbnRUb1ZpZXc6KFVJVmlldyAqKXZpZXc7CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+ICopYXJyYW5nZWRTdWJ2
aWV3cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXM7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBudWxsYWJsZSkgVUlWaWV3ICp0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0
ZXJpYWxPdmVybGF5OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKmNv
bnRlbnRWaWV3OworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYTExYjVhMjcwMzgzOTg3NGJhMjZlNGY4N2JkMDc3MDlm
MDMwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVs
bHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0KQEAgLTAsMCArMSwyMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
ICYmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCIKKwor
I2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FGaWx0ZXIuaD4KKyNp
bXBvcnQgPFVJS2l0L1VJVmlzdWFsRWZmZWN0Vmlldy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBOU0FycmF5PFVJ
VmlzdWFsRWZmZWN0ICo+KiByZWR1Y2VkVHJhbnNwYXJlbmN5RWZmZWN0cygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+Pj4g
ZWZmZWN0czsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGVmZmVjdHMuZ2V0KCkgPSBAW1tVSVZp
c3VhbEVmZmVjdCBlZmZlY3RDb21wb3NpdGluZ0NvbG9yOltVSUNvbG9yIGNvbG9yV2l0aFJlZDoo
NDMuMCAvIDI1NS4wKSBncmVlbjooNDYuMCAvIDI1NS4wKSBibHVlOig0OC4wIC8gMjU1LjApIGFs
cGhhOjEuMF0gd2l0aE1vZGU6VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxwaGE6MS4wXV07Cisg
ICAgfSk7CisgICAgcmV0dXJuIGVmZmVjdHMuZ2V0KCkuZ2V0KCk7Cit9CisKK3N0YXRpYyBOU0Fy
cmF5PFVJVmlzdWFsRWZmZWN0ICo+KiBub3JtYWxUcmFuc3BhcmVuY3lFZmZlY3RzKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TQXJyYXk8VUlWaXN1YWxFZmZlY3Qg
Kj4+PiBlZmZlY3RzOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAg
IGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgZWZmZWN0cy5nZXQoKSA9IEBb
CisgICAgICAgICAgICBbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlD
b2xvciBibGFja0NvbG9yXSB3aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZU5vcm1hbCBhbHBoYTow
LjU1XSwKKyAgICAgICAgICAgIFtVSUJsdXJFZmZlY3QgZWZmZWN0V2l0aEJsdXJSYWRpdXM6VUlS
b3VuZFRvU2NyZWVuU2NhbGUoMTcuNSwgW1VJU2NyZWVuIG1haW5TY3JlZW5dKV0sCisgICAgICAg
ICAgICBbVUlDb2xvckVmZmVjdCBjb2xvckVmZmVjdFNhdHVyYXRlOjEuOF0sCisgICAgICAgICAg
ICBbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciB3aGl0ZUNv
bG9yXSB3aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZU5vcm1hbCBhbHBoYTowLjE0XQorICAgICAg
ICBdOworICAgIH0pOworICAgIHJldHVybiBlZmZlY3RzLmdldCgpLmdldCgpOworfQorCitAaW50
ZXJmYWNlIFVJVmlzdWFsRWZmZWN0VmlldyAoV2ViS2l0UHJpdmF0ZSkKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkd3JpdGUsIGNvcHkpIE5TQXJyYXk8VUlWaXN1YWxFZmZlY3QgKj4gKmJhY2tn
cm91bmRFZmZlY3RzOworQGVuZAorCitAaW50ZXJmYWNlIFdLRnVsbHNjcmVlblN0YWNrVmlldyAo
KQorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVN0YWNrVmlldyAqX3N0YWNrVmll
dzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlWaXN1YWxFZmZlY3RWaWV3ICpf
dmlzdWFsRWZmZWN0VmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBVSVZpc3VhbEVmZmVjdFZp
ZXcgKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYykg
TlNBcnJheTxOU0xheW91dENvbnN0cmFpbnQgKj4gKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXdDb25zdHJhaW50czsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlblN0YWNr
VmlldworCisjcHJhZ21hIG1hcmsgLSBDbGFzcyBNZXRob2RzCisrIChOU0FycmF5PFVJVmlzdWFs
RWZmZWN0ICo+ICopYmFzZUVmZmVjdHMKK3sKKyAgICBpZiAoVUlBY2Nlc3NpYmlsaXR5SXNSZWR1
Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpCisgICAgICAgIHJldHVybiByZWR1Y2VkVHJhbnNwYXJl
bmN5RWZmZWN0cygpOworICAgIHJldHVybiBub3JtYWxUcmFuc3BhcmVuY3lFZmZlY3RzKCk7Cit9
CisKKysgKHZvaWQpY29uZmlndXJlVmlldzooVUlWaWV3ICopdmlldyBmb3JUaW50RWZmZWN0V2l0
aENvbG9yOihVSUNvbG9yICopdGludENvbG9yIGZpbHRlclR5cGU6KE5TU3RyaW5nICopZmlsdGVy
VHlwZQoreworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltVSUxhYmVsIGNsYXNzXV0pIHsK
KyAgICAgICAgWyhVSUxhYmVsICopdmlldyBzZXRUZXh0Q29sb3I6dGludENvbG9yXTsKKyAgICAg
ICAgW3ZpZXcgc2V0VGludENvbG9yOnRpbnRDb2xvcl07CisgICAgICAgIFtbdmlldyBsYXllcl0g
c2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBs
dXNMXV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBfVUlWaXN1YWxFZmZlY3RUaW50
TGF5ZXJDb25maWcgKnRpbnRMYXllckNvbmZpZyA9IFtfVUlWaXN1YWxFZmZlY3RUaW50TGF5ZXJD
b25maWcgbGF5ZXJXaXRoVGludENvbG9yOnRpbnRDb2xvciBmaWx0ZXJUeXBlOmZpbHRlclR5cGVd
OworICAgIFtbW19VSVZpc3VhbEVmZmVjdENvbmZpZyBjb25maWdXaXRoQ29udGVudENvbmZpZzp0
aW50TGF5ZXJDb25maWddIGNvbnRlbnRDb25maWddIGNvbmZpZ3VyZUxheWVyVmlldzp2aWV3XTsK
K30KKworKyAodm9pZCljb25maWd1cmVWaWV3OihVSVZpZXcgKil2aWV3IHdpdGhCYWNrZ3JvdW5k
RmlsbE9mQ29sb3I6KFVJQ29sb3IgKilmaWxsQ29sb3Igb3BhY2l0eTooQ0dGbG9hdClvcGFjaXR5
IGZpbHRlcjooTlNTdHJpbmcgKilmaWx0ZXIKK3sKKyAgICBfVUlWaXN1YWxFZmZlY3RMYXllckNv
bmZpZyAqYmFzZUxheWVyQ29uZmlnID0gW19VSVZpc3VhbEVmZmVjdExheWVyQ29uZmlnIGxheWVy
V2l0aEZpbGxDb2xvcjpmaWxsQ29sb3Igb3BhY2l0eTpvcGFjaXR5IGZpbHRlclR5cGU6ZmlsdGVy
XTsKKyAgICBbW1tfVUlWaXN1YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENvbnRlbnRDb25maWc6
YmFzZUxheWVyQ29uZmlnXSBjb250ZW50Q29uZmlnXSBjb25maWd1cmVMYXllclZpZXc6dmlld107
Cit9CisKKysgKFVJVmlzdWFsRWZmZWN0VmlldyAqKXNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXcKK3sKKyAgICBVSVZpc3VhbEVmZmVjdFZpZXcgKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXcgPSBbW1VJVmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6bmlsXTsKKyAg
ICBbc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVk
Ok5PXTsKKyAgICBbc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBzZXRCYWNrZ3JvdW5kRWZm
ZWN0czpAW1tVSVZpc3VhbEVmZmVjdCBlZmZlY3RDb21wb3NpdGluZ0NvbG9yOltVSUNvbG9yIGJs
YWNrQ29sb3JdIHdpdGhNb2RlOlVJQ29tcG9zaXRpbmdNb2RlUGx1c0RhcmtlciBhbHBoYTowLjA2
XV1dOworICAgIHJldHVybiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3OworfQorCisjcHJh
Z21hIG1hcmsgLSBFeHRlcm5hbCBJbnRlcmZhY2UKKworKyAodm9pZClhcHBseVByaW1hcnlHbHlw
aFRpbnRUb1ZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICBbc2VsZiBjb25maWd1cmVWaWV3OnZp
ZXcgZm9yVGludEVmZmVjdFdpdGhDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZToxLjAgYWxw
aGE6MC43NV0gZmlsdGVyVHlwZTprQ0FGaWx0ZXJQbHVzTF07Cit9CisKKysgKHZvaWQpYXBwbHlT
ZWNvbmRhcnlHbHlwaFRpbnRUb1ZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICBbc2VsZiBjb25m
aWd1cmVWaWV3OnZpZXcgZm9yVGludEVmZmVjdFdpdGhDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhX
aGl0ZToxLjAgYWxwaGE6MC41NV0gZmlsdGVyVHlwZTprQ0FGaWx0ZXJQbHVzTF07Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+
ICopYXJyYW5nZWRTdWJ2aWV3cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXMKK3sK
KyAgICBzZWxmID0gW3NlbGYgaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAw
KV07CisKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBbc2VsZiBz
ZXRDbGlwc1RvQm91bmRzOllFU107CisKKyAgICBfdmlzdWFsRWZmZWN0VmlldyA9IFtbVUlWaXN1
YWxFZmZlY3RWaWV3IGFsbG9jXSBpbml0V2l0aEVmZmVjdDpuaWxdOworICAgIFtzZWxmIGFkZFN1
YnZpZXc6X3Zpc3VhbEVmZmVjdFZpZXddOworICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRCYWNr
Z3JvdW5kRWZmZWN0czpbW3NlbGYgY2xhc3NdIGJhc2VFZmZlY3RzXV07CisKKyAgICBfc3RhY2tW
aWV3ID0gW1tVSVN0YWNrVmlldyBhbGxvY10gaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdzOmFycmFu
Z2VkU3Vidmlld3NdOworICAgIFtfc3RhY2tWaWV3IHNldEF4aXM6YXhpc107CisgICAgW19zdGFj
a1ZpZXcgc2V0TGF5b3V0TWFyZ2luc1JlbGF0aXZlQXJyYW5nZW1lbnQ6WUVTXTsKKyAgICBbX3N0
YWNrVmlldyBzZXRJbnNldHNMYXlvdXRNYXJnaW5zRnJvbVNhZmVBcmVhOk5PXTsKKyAgICBbc2Vs
ZiBpbnNlcnRTdWJ2aWV3Ol9zdGFja1ZpZXcgYWJvdmU6X3Zpc3VhbEVmZmVjdFZpZXddOworCisg
ICAgW3NlbGYgX3NldEFycmFuZ2VkU3Vidmlld3M6YXJyYW5nZWRTdWJ2aWV3cyBheGlzOmF4aXNd
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0VGFyZ2V0Vmlld0ZvclNlY29u
ZGFyeU1hdGVyaWFsT3ZlcmxheTooVUlWaWV3ICopdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVy
aWFsT3ZlcmxheQoreworICAgIGlmIChfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3Zl
cmxheSA9PSB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSA9IHRh
cmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk7CisgICAgW3NlbGYgc2V0TmVlZHNV
cGRhdGVDb25zdHJhaW50c107Cit9CisKKy0gKFVJVmlldyAqKWNvbnRlbnRWaWV3Cit7CisgICAg
cmV0dXJuIFtfdmlzdWFsRWZmZWN0VmlldyBjb250ZW50Vmlld107Cit9CisKKyNwcmFnbWEgbWFy
ayAtIEludGVybmFsIEludGVyZmFjZQorCitAc3ludGhlc2l6ZSBfc3RhY2tWaWV3PV9zdGFja1Zp
ZXc7CitAc3ludGhlc2l6ZSBfdmlzdWFsRWZmZWN0Vmlldz1fdmlzdWFsRWZmZWN0VmlldzsKKwor
LSAodm9pZClfc2V0QXJyYW5nZWRTdWJ2aWV3czooTlNBcnJheTxVSVZpZXcgKj4gKilhcnJhbmdl
ZFN1YnZpZXdzIGF4aXM6KFVJTGF5b3V0Q29uc3RyYWludEF4aXMpYXhpcworeworICAgIGZvciAo
VUlWaWV3ICp2aWV3IGluIFtfc3RhY2tWaWV3IGFycmFuZ2VkU3Vidmlld3NdKQorICAgICAgICBb
dmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIGZvciAoVUlWaWV3ICp2aWV3IGluIGFy
cmFuZ2VkU3Vidmlld3MpCisgICAgICAgIFtfc3RhY2tWaWV3IGFkZEFycmFuZ2VkU3Vidmlldzp2
aWV3XTsKKworICAgIFtfc3RhY2tWaWV3IHNldEF4aXM6YXhpc107Cit9CisKKyNwcmFnbWEgbWFy
ayAtIFVJVmlldyBPdmVycmlkZXMKKworLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdClib3VuZHMK
K3sKKyAgICBDR1NpemUgb2xkU2l6ZSA9IFtzZWxmIGJvdW5kc10uc2l6ZTsKKworICAgIFtzdXBl
ciBzZXRCb3VuZHM6Ym91bmRzXTsKKworICAgIGlmICghQ0dTaXplRXF1YWxUb1NpemUob2xkU2l6
ZSwgYm91bmRzLnNpemUpKQorICAgICAgICBbc2VsZiBfc2V0Q29udGludW91c0Nvcm5lclJhZGl1
czooKENHUmVjdEdldEhlaWdodChib3VuZHMpID4gNDAuMCkgPyAxNi4wIDogOC4wKV07Cit9CisK
Ky0gKHZvaWQpdXBkYXRlQ29uc3RyYWludHMKK3sKKyAgICBpZiAoW19zdGFja1ZpZXcgdHJhbnNs
YXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHNdIHx8IFtfdmlzdWFsRWZmZWN0Vmll
dyB0cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50c10pIHsKKyAgICAgICAg
W192aXN1YWxFZmZlY3RWaWV3IHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0
cmFpbnRzOk5PXTsKKyAgICAgICAgW19zdGFja1ZpZXcgc2V0VHJhbnNsYXRlc0F1dG9yZXNpemlu
Z01hc2tJbnRvQ29uc3RyYWludHM6Tk9dOworCisgICAgICAgIE5TQXJyYXk8TlNMYXlvdXRDb25z
dHJhaW50ICo+ICpjb25zdHJhaW50cyA9IEBbCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RW
aWV3IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGxlYWRpbmdB
bmNob3JdXSwKKyAgICAgICAgICAgIFtbX3Zpc3VhbEVmZmVjdFZpZXcgdG9wQW5jaG9yXSBjb25z
dHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiB0b3BBbmNob3JdXSwKKyAgICAgICAgICAgIFtbX3Zp
c3VhbEVmZmVjdFZpZXcgdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltz
ZWxmIHRyYWlsaW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IGJv
dHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgYm90dG9tQW5jaG9yXV0s
CisgICAgICAgICAgICBbW19zdGFja1ZpZXcgbGVhZGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFs
VG9BbmNob3I6W3NlbGYgbGVhZGluZ0FuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3
IHRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgdG9wQW5jaG9yXV0sCisg
ICAgICAgICAgICBbW19zdGFja1ZpZXcgdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRv
QW5jaG9yOltzZWxmIHRyYWlsaW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW19zdGFja1ZpZXcg
Ym90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiBib3R0b21BbmNob3Jd
XSwKKyAgICAgICAgXTsKKworICAgICAgICBmb3IgKE5TTGF5b3V0Q29uc3RyYWludCAqY29uc3Ry
YWludCBpbiBjb25zdHJhaW50cykKKyAgICAgICAgICAgIFtjb25zdHJhaW50IHNldFByaW9yaXR5
OihVSUxheW91dFByaW9yaXR5UmVxdWlyZWQgLSAxKV07CisKKyAgICAgICAgW05TTGF5b3V0Q29u
c3RyYWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOmNvbnN0cmFpbnRzXTsKKyAgICB9CisKKyAgICBp
ZiAoW1tzZWxmIHRhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXldIGlzRGVzY2Vu
ZGFudE9mVmlldzpzZWxmXSkgeworICAgICAgICBpZiAoIV9zZWNvbmRhcnlNYXRlcmlhbE92ZXJs
YXlWaWV3KSB7CisgICAgICAgICAgICBbc2VsZiBzZXRTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlW
aWV3Oltbc2VsZiBjbGFzc10gc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld11dOworICAgICAg
ICAgICAgW3NlbGYgYWRkU3Vidmlldzpbc2VsZiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3
XV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoW1tzZWxmIHNlY29uZGFyeU1hdGVyaWFsT3Zl
cmxheVZpZXddIGlzRGVzY2VuZGFudE9mVmlldzpzZWxmXSAmJiAhX3NlY29uZGFyeU1hdGVyaWFs
T3ZlcmxheVZpZXdDb25zdHJhaW50cykgeworICAgICAgICAgICAgW1tzZWxmIHNlY29uZGFyeU1h
dGVyaWFsT3ZlcmxheVZpZXddIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0
cmFpbnRzOk5PXTsKKyAgICAgICAgICAgIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50ICo+ICpj
b25zdHJhaW50cyA9IEBbCisgICAgICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5VmlldyBjZW50ZXJYQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbX3RhcmdldFZp
ZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkgY2VudGVyWEFuY2hvcl1dLAorICAgICAgICAg
ICAgICAgIFtbX3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgY2VudGVyWUFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5IGNlbnRlcllBbmNob3JdXSwKKyAgICAgICAgICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlh
bE92ZXJsYXlWaWV3IHdpZHRoQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbX3Rhcmdl
dFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkgd2lkdGhBbmNob3JdXSwKKyAgICAgICAg
ICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3IGhlaWdodEFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5IGhlaWdodEFuY2hvcl1dCisgICAgICAgICAgICBdOworICAgICAgICAgICAgW3NlbGYgc2V0
U2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld0NvbnN0cmFpbnRzOmNvbnN0cmFpbnRzXTsKKyAg
ICAgICAgICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpbc2VsZiBz
ZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHNdXTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBbX3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CisKKyAgICBbc3VwZXIgdXBkYXRlQ29uc3RyYWludHNdOworfQorCitAZW5k
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAz
ODQ0NDlmOTU0MjNmODMzZGM5YzRjOWI5OGI4OWJlYTY4Y2NiY2MuLjUyZmNiMWJiNmYyNTY4MjI2
YjA1ZGYxNTEwMDdhNmQ3NGQ3ZmNlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAyNSw4ICsyMDI1LDEyIEBACiAJCUM5Q0Q0MzlF
MUI0QjAyNTMwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM5Q0Q0Mzk5MUI0QjAyNDIwMDIz
OUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNwcCAqLzsgfTsKIAkJQ0QwMDNBNTIxOUQ0
OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTAxOUQ0OUI1RDAwNUFC
Q0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwICovOyB9OwogCQlDRDAwM0E1MzE5
RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTExOUQ0OUI1RDAwNUFC
Q0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzEyMDFG
RDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDBDNjgyRjIwMUZEMTAxMDBBNTk0
MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzIyMDFG
RDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwQzY4MzAyMDFGRDEwMTAwQTU5
NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tICovOyB9OwogCQlDRDE5QTI2RDFB
MTNFODJBMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNjkxQTEzRTgyMDAw
OEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJQ0QxOUEy
NkUxQTEzRTgzNDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDE5QTI2QTFBMTNFODIx
MDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKKwkJQ0QxOUQy
RUEyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUQyRTgyMDQ2NDA2
RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICovOyB9OworCQlDRDE5
RDJFQjIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMTlEMkU5MjA0
NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovOyB9Owog
CQlDRDQ5MUIwNzFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q0OTFCMDUx
RTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJ
Q0Q0OTFCMDgxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDQ5MUIwNjFFNzBE
MDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLzsgfTsKIAkJQ0Q0OTFC
MEQxRTczMkU0RDAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
NDkxQjBCMUU3MzJFNEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07CkBAIC0yMDU2LDYgKzIwNjAsOCBAQAogCQlDREEyOUEyOTFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CiAJCUNEQTI5
QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCUNEQzI4MzFE
MjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzI4MzFCMjAxQkQ3OUQwMEU2RTc0
NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCAqLzsgfTsKKwkJQ0RDMjgzMUUyMDFCRDc5RDAw
RTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1
bGxzY3JlZW5TdGFja1ZpZXcubW0gKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3OTkwMDhBMkZDMyAv
KiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJy
YXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3MjExN0REMDA4QTJGQzMgLyogQ29va2llU3RvcmFn
ZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJh
cnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyogQ29va2llU3RvcmFn
ZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5
LmggKi87IH07CkBAIC0zMjg3LDggKzMyOTMsOCBAQAogCQkzRjg3QjlCQTE1ODkzRjYzMDA5MEZG
NjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyog
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgcGF0
aCA9IGlvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzRjkxNUMwRjFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVySU9TLmg7IHBhdGggPSBpb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjkxNUMwRTFGNTY0REVEMDAxODND
RTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5t
bTsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGOTE1QzBGMUY1NjRERUQwMDE4M0NF
OSAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0ZCMDhFNDIxRjYwQjI0MDAwNUU1MzEyIC8qIGlPUy54Y2Fzc2V0cyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlci5hc3NldGNhdGFs
b2c7IHBhdGggPSBpT1MueGNhc3NldHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MDQ4MkNCMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ05ldHdvcmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTA0ODJDQzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENOZXR3b3JrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NTMzLDggKzQ1MzksMTIgQEAKIAkJQzlDRDQzOUExQjRCMDI0MjAw
MjM5RTMzIC8qIFdLTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tNZWRpYVNlc3Npb25NZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDAwM0E1MDE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdl
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJNZWRp
YUtleVN0b3JhZ2VNYW5hZ2VyLmNwcDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9y
YWdlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMDAzQTUxMTlE
NDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaDsgcGF0aCA9
IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIu
aDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMEM2ODMwMjAxRkQxMDEwMEE1OTQwOSAvKiBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyLm1tOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlB
MjY5MUExM0U4MjAwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlBMjZBMUExM0U4MjEw
MDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVl
blRvdWNoU2VjaGV1cmlzdGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYy5oOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlz
dGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMTlEMkU5MjA0NjQwNkYwMDE3
MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVu
L0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA2MUU3
MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYgLyogVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIu
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTc0LDYgKzQ1ODQs
OCBAQAogCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
ck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEy
OUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRnVsbHNjcmVlblN0YWNrVmlldy5oOyBwYXRoID0g
aW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFj
a1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07
IHBhdGggPSBpb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MkY3MTcyMTE1MDYwMDhBMkZDMyAvKiBDRk5ldHdv
cmsuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDRk5ldHdvcmsuZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1ld29yazsgc291cmNl
VHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENv
b2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb29raWVTdG9y
YWdlU2hpbUxpYnJhcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODMw
NjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTU3NjUsNiArNTc3Nyw3IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1NDI1NkFFMThCRUMxNjEwMERF
NDE3OSAvKiBmb3JtcyAqLywKKwkJCQlDREMyODMxQTIwMUJENzU2MDBFNkU3NDUgLyogZnVsbHNj
cmVlbiAqLywKIAkJCQlBMTE1REM2RTE5MUQ4MkFCMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50
Rm9ybWF0dGVyLmggKi8sCiAJCQkJQTExNURDNkQxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZp
ZXdQcmludEZvcm1hdHRlci5tbSAqLywKIAkJCQlBMTlERDNCRjFEMDdEMTY4MDBBQzgyM0IgLyog
X1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCAqLywKQEAgLTU3OTYsOCArNTgwOSw2
IEBACiAJCQkJMEZDQjRFM0QxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXcubW0gKi8s
CiAJCQkJMEZDQjRFNkExOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oICovLAogCQkJCTBGQ0I0RTZCMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0gKi8sCi0JCQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLywKLQkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODND
RTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLywKIAkJCQkwRkNCNEUz
RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggKi8sCiAJCQkJ
MEZDQjRFNDAxOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSAq
LywKIAkJCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovLApAQCAtODQ3Nyw2ICs4NDg4LDIxIEBACiAJCQlu
YW1lID0gRnVsbFNjcmVlbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUNE
QzI4MzFBMjAxQkQ3NTYwMEU2RTc0NSAvKiBmdWxsc2NyZWVuICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyog
V0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi8sCisJCQkJQ0RDMjgzMUMyMDFCRDc5RDAwRTZFNzQ1
IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5tbSAqLywKKwkJCQlDRDBDNjgyRjIwMUZEMTAxMDBB
NTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLywKKwkJCQlDRDBDNjgzMDIw
MUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gKi8sCisJCQkJ
M0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MuaCAqLywKKwkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5tbSAqLywKKwkJCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyog
RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggKi8sCisJCQkJQ0QxOUQyRTkyMDQ2NDA2RjAw
MTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGZ1bGxzY3JlZW47CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlD
RENBODVFNDEzMkFEMzMwMDBFOTYxREYgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTg4MDIsNiArODgyOCw3IEBACiAJCQkJOTk1NUE2RjUxQzc5
ODZFMDAwRUI2QTkzIC8qIEF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5QzgxRDVBMUMyMEU3RTIwMDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OTI0OUFENjFGMUYxRTVGMDBCNjJGQkIgLyogQXV0b21hdGlv
bkZyb250ZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEMTlEMkVBMjA0NjQw
NkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5NTVBNkY3MUM3OTg2RTUwMEVCNkE5MyAvKiBBdXRvbWF0aW9uUHJvdG9jb2xPYmpl
Y3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTBEMjhCQjFDNjUzOUQzMDA5ODY5NzcgLyogQXV0
b21hdGlvblNlc3Npb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTA0MUY0MUFDRTIx
MDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODE3LDYgKzg4NDQsNyBAQAogCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDk1NkYxMjg0ODU2NDAwMUVCOTYyIC8qIENo
aWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGQUVDM0ExQjA2NTc2MzAwMDlDNEU3
IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREMyODMxRDIw
MUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTUxM0M2NzE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI5MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NT
dXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTExQUQ1MjFDQkM0ODJGMDA2ODFFRTUg
LyogQ29kZVNpZ25pbmcuaCBpbiBIZWFkZXJzICovLApAQCAtOTM2MSw2ICs5Mzg5LDcgQEAKIAkJ
CQk5MzRCNzI0NDE5RjVCOUJFMDBBRTk2RDYgLyogV0tBY3Rpb25NZW51SXRlbVR5cGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzlGNDAxQzE5RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rpb25NZW51
VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTQ4MThCQkUwNDQwMDBGQ0ZDOSAvKiBX
S0FjdGlvblNoZWV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDBDNjgzMTIwMUZEMTAxMDBBNTk0
MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
Q0I0RTRBMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDNUZBMUVEMzE4RTEwNjIyMDBCM0Y0MDIgLyogV0tBaXJQbGF5Um91dGVQ
aWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRERCMzJEMTI0RUMyRTEwMDQ4RDEzQyAvKiBX
S0FQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0NTMsNiArMTA0ODIsNyBAQAogCQkJCTk5
MEQyOEJDMUM2NTM5REEwMDk4Njk3NyAvKiBBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTQ2QTJCNjA4MUU1Njc2QTYwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJv
Y2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2NEEyRjEx
OTFBRjE0RTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5z
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEMTlEMkVCMjA0NjQwNkYwMDE3MDc0QSAvKiBG
dWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3MDg3
NkIxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyeVByb3h5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjE4NjM4MTY3RDA3MUUwMEExQTg1QSAvKiBDYWNoZU1vZGVsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxODk3RUQ3MUY0MTVEOEEwMDE2RkE0MiAvKiBDYWNoZVN0b3JhZ2VFbmdp
bmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDU0MCw2ICsxMDU3MCw3IEBACiAJCQkJMUFFNDk4
NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkwRjBDMzY1RTE4QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRh
dGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQzI4MzFFMjAxQkQ3OUQwMEU2RTc0NSAvKiBX
S0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTkyREMxMzEyRjhC
QUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUZERTY0NTE5NTEwQjU1MDBDNDhGRkEgLyogTGVnYWN5QnVuZGxlRm9yQ2xhc3MubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1Q0ZFQ0IwNDFFMUVEMUNDMDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTEwMzgsNiArMTEwNjksNyBAQAog
CQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRTREMjFBMUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQ
cm9jZXNzUG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0U0RDIxNjFBNDkxNDg0MDBDN0Yx
NTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEMEM2ODMy
MjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDRTREMjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUIxMTExMkY1RTRGMDAz
MzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDRGNjE5
MUE0QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICov
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335472</attachid>
            <date>2018-03-09 15:10:23 -0800</date>
            <delta_ts>2018-03-09 15:36:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183503-20180309151022.patch</filename>
            <type>text/plain</type>
            <size>136004</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGJiNWE1MGNlYjM1ODQ2NDUy
ZmU4NjFiZGEyNTI1NjdkZWIwZjUzMWUuLjA0NGNjNGRjYmMzYzlmNzNkNDFkY2I1YmQ5ODlmNWI3
YTU2ZGFjZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDE4LTAzLTA4ICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmVtZW50cyB0byBmdWxs
c2NyZWVuOyBuZXcgVUkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM1MDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3cgdGhhdCB0aGUgaU9TIEZ1bGxzY3JlZW4g
Y29kZSBoYXMgbW9yZSB0aGFuIG9uZSBtYWpvciBjbGFzcywgbW92ZSBpdCBpbnRvIGFuIGlvcy8K
KyAgICAgICAgZGlyZWN0b3J5LgorCisgICAgICAgIENsZWFuIHVwIHRoZSBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVySU9TIGNsYXNzIHRvIG1vcmUgY2xlYXJseSBzZXBhcmF0ZSBleHRlcm5h
bAorICAgICAgICBmYWNpbmcgQVBJIGZyb20gcHVyZWx5IGludGVybmFsIGZ1bmN0aW9ucy4KKwor
ICAgICAgICBNb3ZlIHRoZSBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBpdHMg
b3duIGZpbGUuIEFkZCBzdXBwb3J0IGZvciBmdWxsc2NyZWVuCisgICAgICAgIHRvcCBpbnNldCBh
bmQgZnVsbHNjcmVlbiBhdXRvaGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgorCisgICAgICAg
IEFkZCBhIGhldXJpc3RpYyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGNvbnRyb2wgcmVs
YXRlZCB0b3VjaGVzIGFuZCBvbmVzIHRoYXQgbG9vaworICAgICAgICBtb3JlIGtleWJvYXJkIGlu
dGVyYWN0aW9ucy4KKworICAgICAgICBBZGQgYSBuZXcgVUlTdGFja1ZpZXcgYmFzZWQgY29udHJv
bCB0byBob2xkIHRoZSBmdWxsc2NyZWVuIGNvbnRyb2xzLgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
OjpzY29yZU9mTmV4dFRvdWNoKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2Vj
aGV1cmlzdGljOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYzo6ZGlzdGFuY2VTY29yZSk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYzo6YXR0ZW51YXRpb25GYWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaDogCisgICAgICAgIChX
ZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcFVwU3BlZWQpOgorICAg
ICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFJhbXBEb3duU3Bl
ZWQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFhX
ZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNl
dFlXZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OnNldFNpemUpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OnNldEdhbW1hKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
OjpzZXRHYW1tYUN1dG9mZik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxs
c2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldFBh
cmVudCk6CisgICAgICAgIChXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50OjpzZXRJbnRlcmZhY2UpOgorICAgICAgICAoLVtfV0tFeHRyaW5zaWNCdXR0
b24gc2V0RXh0cmluc2ljQ29udGVudFNpemU6XSk6CisgICAgICAgICgtW19XS0V4dHJpbnNpY0J1
dHRvbiBpbnRyaW5zaWNDb250ZW50U2l6ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3
Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgc2hvd1VJXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGhp
ZGVVSV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJv
bGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOl0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBsb2FkVmlld10pOgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlciB2aWV3V2lsbEFwcGVhcjpdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld0RpZExheW91dFN1YnZpZXdzXSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTp3aXRo
VHJhbnNpdGlvbkNvb3JkaW5hdG9yOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBwcmVmZXJyZWRTdGF0dXNCYXJTdHlsZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciBwcmVmZXJzU3RhdHVzQmFySGlkZGVuXSk6CisgICAgICAgICgtW1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6
ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNlaXZlVG91
Y2g6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9tYW5hZ2VyXSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9lZmZlY3RpdmVGdWxsc2Ny
ZWVuSW5zZXRUb3BdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX2Nh
bmNlbEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3Rv
Z2dsZVBpUEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIg
X3RvdWNoRGV0ZWN0ZWQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVy
IF9zdGF0dXNCYXJGcmFtZURpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9zaG93UGhpc2hpbmdBbGVydF0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVySU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpyZXBsYWNlVmlld1dpdGhWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V0tXZWJWaWV3
U3RhdGU6OmFwcGx5VG8pOgorICAgICAgICAoV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6c3RvcmUp
OgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHRyYW5zaXRpb25E
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBj
b25maWd1cmVJbml0aWFsQW5kRmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOl0pOgorICAgICAgICAo
LVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGVUcmFuc2l0aW9uOl0pOgor
ICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGlvbkVuZGVk
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHN0YXJ0SW50
ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyIHVwZGF0ZVdpdGhQZXJjZW50Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5B
bmltYXRpb25Db250cm9sbGVyIHVwZGF0ZVdpdGhQZXJjZW50OnRyYW5zbGF0aW9uOmFuY2hvcjpd
KToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBlbmQ6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBpbml0V2l0aEFuaW1h
dG9yOmFuY2hvcjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0
aW9uIHdhbnRzSW50ZXJhY3RpdmVTdGFydF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24gc3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246XSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiB1cGRhdGVJbnRlcmFjdGl2ZVRy
YW5zaXRpb246d2l0aFRyYW5zbGF0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24gY2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBmaW5pc2hJbnRlcmFjdGl2ZVRy
YW5zaXRpb25dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbml0
V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
ZGVhbGxvY10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVs
bFNjcmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZp
ZXdQbGFjZWhvbGRlcl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHJlcXVlc3RFeGl0RnVsbFNj
cmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGV4aXRGdWxs
U2NyZWVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5F
eGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dKToK
KyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBjbG9zZV0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRSZW1vdmVGcm9tU3Vw
ZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29n
bml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50
ZWRDb250cm9sbGVyOnByZXNlbnRpbmdDb250cm9sbGVyOnNvdXJjZUNvbnRyb2xsZXI6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxl
ckZvckRpc21pc3NlZENvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgaW50ZXJhY3Rpb25Db250cm9sbGVyRm9yRGlzbWlzc2FsOl0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0
ZWx5XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludmFsaWRh
dGVFVk9yZ2FuaXphdGlvbk5hbWVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfaXNTZWN1cmVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBfc2VydmVyVHJ1c3RdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBfRVZPcmdhbml6YXRpb25OYW1lXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgX3VwZGF0ZUxvY2F0aW9uSW5mb10pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgX3N0YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6XSk6CisgICAg
ICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludGVyYWN0aXZlRGlzbWlzc0No
YW5nZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVl
blN0YWNrVmlldy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tOiBBZGRlZC4KKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IGJhc2VFZmZlY3RzXSk6CisgICAgICAgICgrW1dLRnVsbHNj
cmVlblN0YWNrVmlldyBjb25maWd1cmVWaWV3OmZvclRpbnRFZmZlY3RXaXRoQ29sb3I6ZmlsdGVy
VHlwZTpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZpZ3VyZVZpZXc6
d2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpvcGFjaXR5OmZpbHRlcjpdKToKKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddKToKKyAg
ICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmll
dzpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5U2Vjb25kYXJ5R2x5
cGhUaW50VG9WaWV3Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgaW5pdFdp
dGhBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNr
VmlldyBzZXRUYXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Ol0pOgorICAgICAg
ICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgY29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tG
dWxsc2NyZWVuU3RhY2tWaWV3IF9zZXRBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAg
ICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBzZXRCb3VuZHM6XSk6CisgICAgICAgICgtW1dLRnVs
bHNjcmVlblN0YWNrVmlldyB1cGRhdGVDb25zdHJhaW50c10pOgorICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFVuY29uZGl0aW9uYWxpemUgbW9yZSBtZXRob2Rz
IGluIFZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSAoYW5kIHJlbGF0ZWQgY2xhc3NlcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVySU9TLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFiNjIz
NDUyOGM1M2Y1NGZhMjk4NDMzZDQ0OWY0MGE3MWVlYjFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0o
SU9TKQotCi0jaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsgCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIEludFJlY3Q7Ci19Ci0KLUBjbGFzcyBXZWJDb3JlRnVsbFNjcmVl
blBsYWNlaG9sZGVyVmlldzsKLUBjbGFzcyBXS1dlYlZpZXc7Ci0KLUBpbnRlcmZhY2UgV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyVHJhbnNp
dGlvbmluZ0RlbGVnYXRlPgotCi0tIChpZClpbml0V2l0aFdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXc7Ci0KLS0gKFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Kil3ZWJWaWV3UGxh
Y2Vob2xkZXI7Ci0KLS0gKEJPT0wpaXNGdWxsU2NyZWVuOwotCi0tICh2b2lkKWVudGVyRnVsbFNj
cmVlbjsKLS0gKHZvaWQpZXhpdEZ1bGxTY3JlZW47Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbFNj
cmVlbjsKLS0gKHZvaWQpY2xvc2U7Ci0tICh2b2lkKWJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aElu
aXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxG
cmFtZTsKLS0gKHZvaWQpYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVj
dClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7Ci0tICh2b2lkKXdl
YlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW47Ci0tICh2b2lkKXZp
ZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlOwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcklPUy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhNTU4MmUw
ZjNiMWZiNTE4NWEyNWUyY2U0NzA3YjU1MDJjMmZhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDg4NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1Mp
ICYmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MuaCIKLQotI2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmll
dy5oIgotI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld1By
aXZhdGUuaCIKLSNpbXBvcnQgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQg
IldlYlBhZ2VQcm94eS5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1w
b3J0IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgotI2ltcG9ydCA8U2VjdXJpdHkvU2VjVHJ1
c3QuaD4KLSNpbXBvcnQgPFVJS2l0L1VJVmlzdWFsRWZmZWN0Vmlldy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRT
dHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1VSTEV4dHJhcy5oPgotI2ltcG9y
dCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGlu
a1ByZXNlbnRhdGlvblNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU1N0cmluZ1NQSS5o
PgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDx3dGYv
U29mdExpbmtpbmcuaD4KLSNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1TT0ZU
X0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTGlua1ByZXNlbnRhdGlvbikKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBzaG93SGlkZUFu
aW1hdGlvbkR1cmF0aW9uID0gMC4xOwotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIGF1dG9I
aWRlRGVsYXkgPSA0LjA7Ci1zdGF0aWMgY29uc3QgQ0dGbG9hdCBmb250U2l6ZSA9IDEyOwotCi1z
dGF0aWMgdm9pZCByZXBsYWNlVmlld1dpdGhWaWV3KFVJVmlldyAqdmlldywgVUlWaWV3ICpvdGhl
clZpZXcpCi17Ci0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9u
IHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgW290aGVyVmlldyBzZXRGcmFtZTpbdmlldyBm
cmFtZV1dOwotICAgIFtvdGhlclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbdmlldyBhdXRvcmVz
aXppbmdNYXNrXV07Ci0gICAgW1t2aWV3IHN1cGVydmlld10gaW5zZXJ0U3VidmlldzpvdGhlclZp
ZXcgYWJvdmVTdWJ2aWV3OnZpZXddOwotICAgIFt2aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwot
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci19Ci0KLWVudW0gRnVsbFNjcmVlblN0YXRlIDog
TlNJbnRlZ2VyIHsKLSAgICBOb3RJbkZ1bGxTY3JlZW4sCi0gICAgV2FpdGluZ1RvRW50ZXJGdWxs
U2NyZWVuLAotICAgIEVudGVyaW5nRnVsbFNjcmVlbiwKLSAgICBJbkZ1bGxTY3JlZW4sCi0gICAg
V2FpdGluZ1RvRXhpdEZ1bGxTY3JlZW4sCi0gICAgRXhpdGluZ0Z1bGxTY3JlZW4sCi19OwotCi1z
dHJ1Y3QgV0tXZWJWaWV3U3RhdGUgewotICAgIGZsb2F0IF9zYXZlZFRvcENvbnRlbnRJbnNldCA9
IDAuMDsKLSAgICBDR0Zsb2F0IF9zYXZlZFBhZ2VTY2FsZSA9IDE7Ci0gICAgQ0dGbG9hdCBfc2F2
ZWRWaWV3U2NhbGUgPSAxLjA7Ci0gICAgQ0dGbG9hdCBfc2F2ZWRab29tU2NhbGUgPSAxOwotICAg
IFVJRWRnZUluc2V0cyBfc2F2ZWRFZGdlSW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOwotICAgIFVJ
RWRnZUluc2V0cyBfc2F2ZWRPYnNjdXJlZEluc2V0cyA9IFVJRWRnZUluc2V0c1plcm87Ci0gICAg
VUlFZGdlSW5zZXRzIF9zYXZlZFNjcm9sbEluZGljYXRvckluc2V0cyA9IFVJRWRnZUluc2V0c1pl
cm87Ci0gICAgQ0dQb2ludCBfc2F2ZWRDb250ZW50T2Zmc2V0ID0gQ0dQb2ludFplcm87Ci0KLSAg
ICB2b2lkIGFwcGx5VG8oV0tXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgW3dlYlZp
ZXcgX3NldFBhZ2VTY2FsZTpfc2F2ZWRQYWdlU2NhbGUgd2l0aE9yaWdpbjpDR1BvaW50TWFrZSgw
LCAwKV07Ci0gICAgICAgIFt3ZWJWaWV3IF9zZXRPYnNjdXJlZEluc2V0czpfc2F2ZWRPYnNjdXJl
ZEluc2V0c107Ci0gICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRDb250ZW50SW5zZXQ6
X3NhdmVkRWRnZUluc2V0XTsKLSAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldENvbnRl
bnRPZmZzZXQ6X3NhdmVkQ29udGVudE9mZnNldF07Ci0gICAgICAgIFtbd2ViVmlldyBzY3JvbGxW
aWV3XSBzZXRTY3JvbGxJbmRpY2F0b3JJbnNldHM6X3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRz
XTsKLSAgICAgICAgW3dlYlZpZXcgX3BhZ2VdLT5zZXRUb3BDb250ZW50SW5zZXQoX3NhdmVkVG9w
Q29udGVudEluc2V0KTsKLSAgICAgICAgW3dlYlZpZXcgX3NldFZpZXdTY2FsZTpfc2F2ZWRWaWV3
U2NhbGVdOwotICAgICAgICBbW3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Wm9vbVNjYWxlOl9zYXZl
ZFpvb21TY2FsZV07Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3RvcmUoV0tXZWJWaWV3KiB3ZWJW
aWV3KQotICAgIHsKLSAgICAgICAgX3NhdmVkUGFnZVNjYWxlID0gW3dlYlZpZXcgX3BhZ2VTY2Fs
ZV07Ci0gICAgICAgIF9zYXZlZE9ic2N1cmVkSW5zZXRzID0gW3dlYlZpZXcgX29ic2N1cmVkSW5z
ZXRzXTsKLSAgICAgICAgX3NhdmVkRWRnZUluc2V0ID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIGNv
bnRlbnRJbnNldF07Ci0gICAgICAgIF9zYXZlZENvbnRlbnRPZmZzZXQgPSBbW3dlYlZpZXcgc2Ny
b2xsVmlld10gY29udGVudE9mZnNldF07Ci0gICAgICAgIF9zYXZlZFNjcm9sbEluZGljYXRvcklu
c2V0cyA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzY3JvbGxJbmRpY2F0b3JJbnNldHNdOwotICAg
ICAgICBfc2F2ZWRUb3BDb250ZW50SW5zZXQgPSBbd2ViVmlldyBfcGFnZV0tPnRvcENvbnRlbnRJ
bnNldCgpOwotICAgICAgICBfc2F2ZWRWaWV3U2NhbGUgPSBbd2ViVmlldyBfdmlld1NjYWxlXTsK
LSAgICAgICAgX3NhdmVkWm9vbVNjYWxlID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHpvb21TY2Fs
ZV07Ci0gICAgfQotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0KLUBpbnRlcmZh
Y2UgX1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlciA8VUlHZXN0
dXJlUmVjb2duaXplckRlbGVnYXRlPgotQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgTlNB
cnJheSAqc2F2ZWRDb25zdHJhaW50czsKLUBwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIFVJ
VmlldyAqY29udGVudFZpZXc7Ci1AcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBpZCB0YXJn
ZXQ7Ci1AcHJvcGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gX1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHsKLSAgICBSZXRhaW5Q
dHI8VUlWaWV3PiBfYmFja2dyb3VuZFZpZXc7Ci0gICAgUmV0YWluUHRyPFVJTG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXI+IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyOwotICAgIFJldGFpblB0cjxV
SUJ1dHRvbj4gX2NhbmNlbEJ1dHRvbjsKLSAgICBSZXRhaW5QdHI8VUlCdXR0b24+IF9sb2NhdGlv
bkJ1dHRvbjsKLSAgICBSZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3RWaWV3PiBfdmlzdWFsRWZmZWN0
VmlldzsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZp
b3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotCi0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXpl
KXNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5z
aXRpb25Db29yZGluYXRvcj4pY29vcmRpbmF0b3IKLXsKLSAgICBbc3VwZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07
Ci0gICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmll
d0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7Ci0KLSAg
ICAgICAgdm9pZCAoXndlYlZpZXdVcGRhdGVCbG9jaykoKSA9IF57Ci0gICAgICAgICAgICBbKFdL
V2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0
aE1pbmltdW1MYXlvdXRTaXplOnNpemUgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6c2l6
ZV07Ci0gICAgICAgIH07Ci0KLSAgICAgICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250ZW50Vmll
d10gX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp3ZWJWaWV3VXBkYXRlQmxvY2tdOwot
ICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfc2V0SW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZTpbVUlBcHAgc3RhdHVzQmFyT3JpZW50YXRpb25dXTsKLSAgICB9IGNv
bXBsZXRpb246XihpZCA8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvckNvbnRl
eHQ+Y29udGV4dCkgewotICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBf
ZW5kQW5pbWF0ZWRSZXNpemVdOwotICAgIH1dOwotfQotCi0rICh2b2lkKWNvbmZpZ3VyZVZpZXc6
KFVJVmlldyAqKXZpZXcgd2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjooVUlDb2xvciAqKWZpbGxD
b2xvciBvcGFjaXR5OihDR0Zsb2F0KW9wYWNpdHkgZmlsdGVyOihOU1N0cmluZyAqKWZpbHRlcgot
ewotICAgIF9VSVZpc3VhbEVmZmVjdExheWVyQ29uZmlnICpiYXNlTGF5ZXJDb25maWcgPSBbX1VJ
VmlzdWFsRWZmZWN0TGF5ZXJDb25maWcgbGF5ZXJXaXRoRmlsbENvbG9yOmZpbGxDb2xvciBvcGFj
aXR5Om9wYWNpdHkgZmlsdGVyVHlwZTpmaWx0ZXJdOwotICAgIFtbW19VSVZpc3VhbEVmZmVjdENv
bmZpZyBjb25maWdXaXRoQ29udGVudENvbmZpZzpiYXNlTGF5ZXJDb25maWddIGNvbnRlbnRDb25m
aWddIGNvbmZpZ3VyZUxheWVyVmlldzp2aWV3XTsKLX0KLQotLSAodm9pZClfdXBkYXRlVHJhbnNw
YXJlbmN5T2ZWaXN1YWxFZmZlY3RWaWV3OihVSVZpc3VhbEVmZmVjdFZpZXcgKil2aXN1YWxFZmZl
Y3RWaWV3Ci17Ci0gICAgUmV0YWluUHRyPFVJVmlzdWFsRWZmZWN0PiB2aXN1YWxFZmZlY3Q7Ci0K
LSAgICBpZiAoVUlBY2Nlc3NpYmlsaXR5SXNSZWR1Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpIHsK
LSAgICAgICAgdmlzdWFsRWZmZWN0ID0gW1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0XTsKLSAg
ICAgICAgW1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6
W1VJQ29sb3IgY29sb3JXaXRoUmVkOig0My4wIC8gMjU1LjApIGdyZWVuOig0Ni4wIC8gMjU1LjAp
IGJsdWU6KDQ4LjAgLyAyNTUuMCkgYWxwaGE6MS4wXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
UmV0YWluUHRyPFVJQ29sb3JFZmZlY3Q+IHNhdHVyYXRpb25FZmZlY3QgPSBbVUlDb2xvckVmZmVj
dCBjb2xvckVmZmVjdFNhdHVyYXRlOjEuOF07Ci0gICAgICAgIFJldGFpblB0cjxVSUJsdXJFZmZl
Y3Q+IGJsdXJFZmZlY3QgPSBbVUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVzOlVJUm91
bmRUb1NjcmVlblNjYWxlKDE3LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVuXSldOwotICAgICAgICBS
ZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3Q+IGNvbWJpbmVkRWZmZWN0cyA9IFtVSVZpc3VhbEVmZmVj
dCBlZmZlY3RDb21iaW5pbmdFZmZlY3RzOkBbYmx1ckVmZmVjdC5nZXQoKSwgc2F0dXJhdGlvbkVm
ZmVjdC5nZXQoKV1dOwotICAgICAgICB2aXN1YWxFZmZlY3QgPSBjb21iaW5lZEVmZmVjdHM7Ci0g
ICAgICAgIFtbdmlzdWFsRWZmZWN0VmlldyBjb250ZW50Vmlld10gc2V0QmFja2dyb3VuZENvbG9y
Om5pbF07Ci0gICAgfQotCi0gICAgW3Zpc3VhbEVmZmVjdFZpZXcgc2V0RWZmZWN0OnZpc3VhbEVm
ZmVjdC5nZXQoKV07Ci19Ci0KLS0gKFVJVmlzdWFsRWZmZWN0VmlldyAqKXZpc3VhbEVmZmVjdFZp
ZXdXaXRoRnJhbWU6KENHUmVjdClmcmFtZQotewotICAgIFJldGFpblB0cjxVSVZpc3VhbEVmZmVj
dFZpZXc+IHZpc3VhbEVmZmVjdFZpZXcgPSBhZG9wdE5TKFtbVUlWaXN1YWxFZmZlY3RWaWV3IGFs
bG9jXSBpbml0V2l0aEVmZmVjdDpbVUlWaXN1YWxFZmZlY3QgZW1wdHlFZmZlY3RdXSk7Ci0gICAg
W3NlbGYgX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlzdWFsRWZmZWN0Vmlldzp2aXN1YWxFZmZlY3RW
aWV3LmdldCgpXTsKLQotICAgIFJldGFpblB0cjxVSVZpZXc+IGJhY2tMYXllclRpbnRWaWV3ID0g
YWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbdmlzdWFsRWZmZWN0VmlldyBi
b3VuZHNdXSk7Ci0gICAgW2JhY2tMYXllclRpbnRWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KFVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJs
ZUhlaWdodCldOwotICAgIFtiYWNrTGF5ZXJUaW50VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFi
bGVkOk5PXTsKLSAgICBbW3NlbGYgY2xhc3NdIGNvbmZpZ3VyZVZpZXc6YmFja0xheWVyVGludFZp
ZXcuZ2V0KCkgd2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0
ZTowLjAgYWxwaGE6MC41NV0gb3BhY2l0eToxLjAgZmlsdGVyOmtDQUZpbHRlck5vcm1hbEJsZW5k
TW9kZV07Ci0gICAgW1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OmJh
Y2tMYXllclRpbnRWaWV3LmdldCgpXTsKLQotICAgIFJldGFpblB0cjxVSVZpZXc+IHRvcExheWVy
VGludFZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOlt2aXN1YWxF
ZmZlY3RWaWV3IGJvdW5kc11dKTsKLSAgICBbdG9wTGF5ZXJUaW50VmlldyBzZXRBdXRvcmVzaXpp
bmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVIZWlnaHQpXTsKLSAgICBbdG9wTGF5ZXJUaW50VmlldyBzZXRVc2VySW50ZXJh
Y3Rpb25FbmFibGVkOk5PXTsKLSAgICBbW3NlbGYgY2xhc3NdIGNvbmZpZ3VyZVZpZXc6dG9wTGF5
ZXJUaW50Vmlldy5nZXQoKSB3aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOltVSUNvbG9yIGNvbG9y
V2l0aFdoaXRlOjEuMCBhbHBoYTowLjE0XSBvcGFjaXR5OjEuMCBmaWx0ZXI6a0NBRmlsdGVyTm9y
bWFsQmxlbmRNb2RlXTsKLSAgICBbW3Zpc3VhbEVmZmVjdFZpZXcgY29udGVudFZpZXddIGFkZFN1
YnZpZXc6dG9wTGF5ZXJUaW50Vmlldy5nZXQoKV07Ci0KLSAgICBbc2VsZiBfdXBkYXRlVHJhbnNw
YXJlbmN5T2ZWaXN1YWxFZmZlY3RWaWV3OnZpc3VhbEVmZmVjdFZpZXcuZ2V0KCldOwotCi0gICAg
cmV0dXJuIHZpc3VhbEVmZmVjdFZpZXcuYXV0b3JlbGVhc2UoKTsKLX0KLQotc3RhdGljIFVJRWRn
ZUluc2V0cyBtaXJyb3JFZGdlSW5zZXRzKFVJRWRnZUluc2V0cyBpbnNldHMpCi17Ci0gICAgcmV0
dXJuIFVJRWRnZUluc2V0c01ha2UoaW5zZXRzLnRvcCwgaW5zZXRzLnJpZ2h0LCBpbnNldHMuYm90
dG9tLCBpbnNldHMubGVmdCk7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUxheW91dE1hcmdpbnMKLXsK
LSAgICBVSVZpZXcgKnZpZXcgPSBbc2VsZiB2aWV3XTsKLSAgICBbdmlldyBzZXRQcmVzZXJ2ZXNT
dXBlcnZpZXdMYXlvdXRNYXJnaW5zOk5PXTsKLQotICAgIFVJRWRnZUluc2V0cyB0YXJnZXRJbnNl
dHMgPSBbdmlldyBzYWZlQXJlYUluc2V0c107Ci0gICAgdGFyZ2V0SW5zZXRzLnRvcCA9IHN0ZDo6
bWF4KHRhcmdldEluc2V0cy50b3AsIDIwLjApOwotICAgIFt2aWV3IHNldExheW91dE1hcmdpbnM6
dGFyZ2V0SW5zZXRzXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKLXsKLSAg
ICBbc2VsZiBfdXBkYXRlTGF5b3V0TWFyZ2luc107Ci19Ci0KLS0gICh2b2lkKXNldExvY2F0aW9u
OihOU1N0cmluZyAqKWxvY2F0aW9uTmFtZSBzZWN1cmU6KEJPT0wpc2VjdXJlIHRydXN0ZWROYW1l
OihCT09MKXRydXN0ZWROYW1lIHRydXN0ZWRTaXRlOihCT09MKXRydXN0ZWRTaXRlCi17Ci0gICAg
VUlDb2xvciAqZ3JlZW5UaW50ID0gW1VJQ29sb3IgY29sb3JXaXRoUmVkOjEwMCAvIDI1NS4wIGdy
ZWVuOjE3NSAvIDI1NS4wIGJsdWU6OTkgLyAyNTUuMCBhbHBoYToxLjBdOwotICAgIFVJQ29sb3Ig
KndoaXRlVGludCA9IFtVSUNvbG9yIHdoaXRlQ29sb3JdOwotCi0gICAgZmxvYXQgaFBhZGRpbmcg
PSAxNDsKLSAgICBOU1N0cmluZyAqbG9ja0ltYWdlTmFtZSA9IEAiTG9ja01pbmkiOwotCi0gICAg
ZmxvYXQgbG9ja1NwYWNpbmcgPSBzZWN1cmUgPyAxMCA6IDA7Ci0KLSAgICBVSUVkZ2VJbnNldHMg
bG9jYXRpb25Db250ZW50RWRnZUluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgaFBhZGRpbmcr
bG9ja1NwYWNpbmcsIDAsIGhQYWRkaW5nKTsKLSAgICBVSUVkZ2VJbnNldHMgbG9jYXRpb25JbWFn
ZUVkZ2VJbnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIC1sb2NrU3BhY2luZywgMCwgMCk7Ci0K
LSAgICBpZiAoW1VJVmlldyB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uRm9yU2VtYW50aWND
b250ZW50QXR0cmlidXRlOltbc2VsZiB2aWV3XSBzZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGVdXSA9
PSBVSVVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdCkgewotICAgICAgICBs
b2NhdGlvbkNvbnRlbnRFZGdlSW5zZXRzID0gbWlycm9yRWRnZUluc2V0cyhsb2NhdGlvbkNvbnRl
bnRFZGdlSW5zZXRzKTsKLSAgICAgICAgbG9jYXRpb25JbWFnZUVkZ2VJbnNldHMgPSBtaXJyb3JF
ZGdlSW5zZXRzKGxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzKTsKLSAgICAgICAgW19sb2NhdGlvbkJ1
dHRvbiBzZXRDb250ZW50SG9yaXpvbnRhbEFsaWdubWVudDpVSUNvbnRyb2xDb250ZW50SG9yaXpv
bnRhbEFsaWdubWVudFJpZ2h0XTsKLSAgICB9Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldFRp
dGxlQ29sb3I6KHRydXN0ZWROYW1lID8gZ3JlZW5UaW50IDogd2hpdGVUaW50KSBmb3JTdGF0ZTpV
SUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBpZiAoc2VjdXJlKSB7Ci0gICAgICAgIE5TQnVu
ZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgY2xhc3NdXTsKLSAgICAgICAgVUlJbWFnZSAqbG9ja0ltYWdlID0gW1VJSW1h
Z2UgaW1hZ2VOYW1lZDpsb2NrSW1hZ2VOYW1lIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0
aFRyYWl0Q29sbGVjdGlvbjpuaWxdOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdl
Oltsb2NrSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFs
d2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgICAgIFtb
X2xvY2F0aW9uQnV0dG9uIGltYWdlVmlld10gc2V0VGludENvbG9yOnRydXN0ZWRTaXRlID8gZ3Jl
ZW5UaW50IDogd2hpdGVUaW50XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUaW50Q29s
b3I6dHJ1c3RlZFNpdGUgPyBncmVlblRpbnQgOiB3aGl0ZVRpbnRdOwotICAgIH0gZWxzZQotICAg
ICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdlOm5pbCBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0
ZU5vcm1hbF07Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldENvbnRlbnRFZGdlSW5zZXRzOmxv
Y2F0aW9uQ29udGVudEVkZ2VJbnNldHNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SW1hZ2VF
ZGdlSW5zZXRzOmxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9u
IHNldFRpdGxlOmxvY2F0aW9uTmFtZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci19
Ci0KLS0gKHZvaWQpY3JlYXRlU3Vidmlld3MKLXsKLSAgICBfdmlzdWFsRWZmZWN0VmlldyA9IFtz
ZWxmIHZpc3VhbEVmZmVjdFZpZXdXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAyMCwgMjApXTsK
LQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0lu
dG9Db25zdHJhaW50czpOT107Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X3Zpc3VhbEVm
ZmVjdFZpZXcuZ2V0KCldOwotCi0gICAgX2NhbmNlbEJ1dHRvbiA9IFtVSUJ1dHRvbiBidXR0b25X
aXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldFRyYW5z
bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKLSAgICBbX2NhbmNlbEJ1
dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfY2FuY2VsQnV0
dG9uIHNldEJhY2tncm91bmRDb2xvcjogW1VJQ29sb3IgYmxhY2tDb2xvcl1dOwotICAgIFtbX2Nh
bmNlbEJ1dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldp
dGhUeXBlOmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0VGl0bGU6V0VC
X1VJX1NUUklORygiRG9uZSIsICJUZXh0IG9mIGJ1dHRvbiB0aGF0IGV4aXRzIGVsZW1lbnQgZnVs
bHNjcmVlbi4iKSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgW19jYW5jZWxC
dXR0b24gc2V0VGludENvbG9yOltVSUNvbG9yIHdoaXRlQ29sb3JdXTsKLSAgICBbW19jYW5jZWxC
dXR0b24gdGl0bGVMYWJlbF0gc2V0Rm9udDpbVUlGb250IHN5c3RlbUZvbnRPZlNpemU6Zm9udFNp
emVdXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9y
KGNhbmNlbEFjdGlvbjopIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRUb3VjaFVwSW5z
aWRlXTsKLQotICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2aWV3Ol9jYW5jZWxCdXR0b24uZ2V0KCld
OwotCi0gICAgX2xvY2F0aW9uQnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0
dG9uVHlwZVN5c3RlbV07Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jl
c2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRB
ZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0
QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGJsYWNrQ29sb3JdXTsKLSAgICBbW19sb2NhdGlvbkJ1
dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBl
OmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW1tfbG9jYXRpb25CdXR0b24gdGl0bGVMYWJlbF0gc2V0
TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOwotICAgIFtbX2xvY2F0
aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEFkanVzdHNGb250U2l6ZVRvRml0V2lkdGg6Tk9dOwot
ICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEZvbnQ6W1VJRm9udCBzeXN0ZW1G
b250T2ZTaXplOmZvbnRTaXplXV07Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X2xvY2F0
aW9uQnV0dG9uLmdldCgpXTsKLQotICAgIFVJTGF5b3V0R3VpZGUqIGNvbnRhaW5lckd1aWRlID0g
W1tzZWxmIHZpZXddIGxheW91dE1hcmdpbnNHdWlkZV07Ci0KLSAgICBbW1tfdmlzdWFsRWZmZWN0
VmlldyBsZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gbGVm
dEFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtbW192aXN1YWxFZmZlY3RWaWV3IHJpZ2h0
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gcmlnaHRBbmNob3Jd
XSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyB0b3BBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRBY3RpdmU6
WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyBoZWlnaHRBbmNob3JdIGNvbnN0cmFpbnRH
cmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50OjIwXSBzZXRBY3RpdmU6WUVTXTsKLQotICAgIE5T
TGF5b3V0Q29uc3RyYWludCAqYm90dG9tID0gW1tfdmlzdWFsRWZmZWN0VmlldyBib3R0b21BbmNo
b3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSB0b3BBbmNob3JdXTsK
LSAgICBbYm90dG9tIHNldFByaW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCAtIDFdOwot
ICAgIFtib3R0b20gc2V0QWN0aXZlOllFU107Ci0KLSAgICBbW1tfY2FuY2VsQnV0dG9uIGxlYWRp
bmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSBsZWFkaW5n
QW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2NhbmNlbEJ1dHRvbiB0b3BBbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRBY3Rp
dmU6WUVTXTsKLSAgICBbW1tfY2FuY2VsQnV0dG9uIGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZ
RVNdOwotCi0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIGhlaWdodEFuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9Db25zdGFudDoyMF0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2xvY2F0aW9uQnV0dG9u
IGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3
IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtbW19sb2NhdGlvbkJ1dHRvbiBs
ZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFsVG9BbmNob3I6W19jYW5j
ZWxCdXR0b24gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfbG9jYXRp
b25CdXR0b24gdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hv
cjpbW3NlbGYgdmlld10gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBOU0xh
eW91dENvbnN0cmFpbnQgKmNlbnRlcmluZ0NvbnN0cmFpbnQgPSBbW19sb2NhdGlvbkJ1dHRvbiBj
ZW50ZXJYQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gY2VudGVy
WEFuY2hvcl1dOwotICAgIFtjZW50ZXJpbmdDb25zdHJhaW50IHNldFByaW9yaXR5OlVJTGF5b3V0
UHJpb3JpdHlEZWZhdWx0TG93XTsKLSAgICBbY2VudGVyaW5nQ29uc3RyYWludCBzZXRBY3RpdmU6
WUVTXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRBbHBoYTowXTsKLSAgICBbX2NhbmNl
bEJ1dHRvbiBzZXRBbHBoYTowXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhhOjBdOwot
Ci0gICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEhpZGRlbjpZRVNdOwotICAgIFtfY2FuY2VsQnV0
dG9uIHNldEhpZGRlbjpZRVNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOllFU107
Ci19Ci0KLS0gKHZvaWQpbG9hZFZpZXcKLXsKLSAgICBbc2VsZiBzZXRWaWV3OmFkb3B0TlMoW1tV
SVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCldKS5n
ZXQoKV07Ci0gICAgW1tzZWxmIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9y
ZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCld
OwotCi0gICAgX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVj
dG9yKHNob3dDYW5jZWxCdXR0b246KV0pOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBz
ZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0Q2FuY2Vs
c1RvdWNoZXNJblZpZXc6Tk9dOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXRNaW5p
bXVtUHJlc3NEdXJhdGlvbjowXTsKLSAgICBbW3NlbGYgdmlld10gYWRkR2VzdHVyZVJlY29nbml6
ZXI6X3RvdWNoR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotICAgIFtzZWxmIGNyZWF0ZVN1YnZp
ZXdzXTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbEFwcGVhcjooQk9PTClhbmltYXRlZAotewotICAg
IFtbc2VsZiBjb250ZW50Vmlld10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07Ci0g
ICAgW1tzZWxmIGNvbnRlbnRWaWV3XSBzZXRGcmFtZTpbW3NlbGYgdmlld10gYm91bmRzXV07Ci0g
ICAgW1tzZWxmIHZpZXddIGluc2VydFN1YnZpZXc6W3NlbGYgY29udGVudFZpZXddIGF0SW5kZXg6
MF07Ci19Ci0KLS0gKHZvaWQpdmlld0RpZEFwcGVhcjooQk9PTClhbmltYXRlZAotewotICAgIFtz
ZWxmIF91cGRhdGVMYXlvdXRNYXJnaW5zXTsKLX0KLQotLSAodm9pZCljYW5jZWxBY3Rpb246KGlk
KXNlbmRlcgotewotICAgIFtbc2VsZiB0YXJnZXRdIHBlcmZvcm1TZWxlY3Rvcjpbc2VsZiBhY3Rp
b25dXTsKLX0KLQotLSAodm9pZCloaWRlQ2FuY2VsQnV0dG9uCi17Ci0gICAgW05TT2JqZWN0IGNh
bmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxl
Y3RvcihoaWRlQ2FuY2VsQnV0dG9uKSBvYmplY3Q6bmlsXTsKLSAgICBbVUlWaWV3IGFuaW1hdGVX
aXRoRHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOl57Ci0gICAg
ICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRBbHBoYTowXTsKLSAgICAgICAgW19jYW5jZWxCdXR0
b24gc2V0QWxwaGE6MF07Ci0gICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0QWxwaGE6MF07Ci0g
ICAgfSBjb21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCl7Ci0gICAgICAgIGlmIChmaW5pc2hlZCkg
ewotICAgICAgICAgICAgW19jYW5jZWxCdXR0b24gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAg
ICBbX2xvY2F0aW9uQnV0dG9uIHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW192aXN1YWxF
ZmZlY3RWaWV3IHNldEhpZGRlbjpZRVNdOwotICAgICAgICB9Ci0gICAgfV07Ci19Ci0KLS0gKHZv
aWQpc2hvd0NhbmNlbEJ1dHRvbjooaWQpc2VuZGVyCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFBy
ZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvciho
aWRlQ2FuY2VsQnV0dG9uKSBvYmplY3Q6bmlsXTsKLSAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6
QHNlbGVjdG9yKGhpZGVDYW5jZWxCdXR0b24pIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YXV0
b0hpZGVEZWxheV07Ci0gICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOnNob3dIaWRlQW5p
bWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uczogXnsKLSAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3
IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtfY2FuY2VsQnV0dG9uIHNldEhpZGRlbjpOT107Ci0g
ICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW192aXN1YWxF
ZmZlY3RWaWV3IHNldEFscGhhOjFdOwotICAgICAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBbHBoYTox
XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRBbHBoYToxXTsKLSAgICB9XTsKLX0KLQot
LSAodm9pZClzZXRUYXJnZXQ6KGlkKXRhcmdldCBhY3Rpb246KFNFTClhY3Rpb24KLXsKLSAgICBb
c2VsZiBzZXRUYXJnZXQ6dGFyZ2V0XTsKLSAgICBbc2VsZiBzZXRBY3Rpb246YWN0aW9uXTsKLX0K
LQotLy8gTUFSSyAtIFVJR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZQotCi0tIChCT09MKWdlc3R1
cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hv
dWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCi17Ci0gICAgcmV0dXJuIFlFUzsK
LX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIF9XS0Z1bGxzY3JlZW5Sb290Vmlld0NvbnRyb2xsZXIg
OiBVSVZpZXdDb250cm9sbGVyCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBfV0tGdWxsc2NyZWVu
Um9vdFZpZXdDb250cm9sbGVyIHsKLSAgICBCT09MIF9zaG93c1N0YXR1c0JhcjsKLX0KLQotLSAo
dm9pZClzZXRTaG93c1N0YXR1c0JhcjooQk9PTCl2YWx1ZQotewotICAgIF9zaG93c1N0YXR1c0Jh
ciA9IHZhbHVlOwotICAgIFtzZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5jZVVwZGF0ZV07
Ci19Ci0KLS0gKEJPT0wpcHJlZmVyc1N0YXR1c0JhckhpZGRlbgotewotICAgIHJldHVybiAhX3No
b3dzU3RhdHVzQmFyOwotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tGdWxsc2NyZWVuQW5pbWF0
aW9uQ29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0
aW9uaW5nPgotQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3Q29udHJvbGxlciog
dmlld0NvbnRyb2xsZXI7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IGluaXRpYWxGcmFt
ZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZmluYWxGcmFtZTsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBnZXR0ZXI9aXNBbmltYXRpbmdJbikgQk9PTCBhbmltYXRpbmdJbjsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIKLQotLSAo
TlNUaW1lSW50ZXJ2YWwpdHJhbnNpdGlvbkR1cmF0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29u
dGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Ci17Ci0gICAgY29uc3QgTlNUaW1l
SW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbkR1
cmF0aW9uOwotfQotCi0tICh2b2lkKWFuaW1hdGVUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9s
bGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Ci17Ci0gICAgVUlWaWV3
ICpjb250YWluZXJWaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IGNvbnRhaW5lclZpZXddOwotICAg
IFVJVmlldyAqZnJvbVZpZXcgPSBbdHJhbnNpdGlvbkNvbnRleHQgdmlld0ZvcktleTpVSVRyYW5z
aXRpb25Db250ZXh0RnJvbVZpZXdLZXldOwotICAgIFVJVmlldyAqdG9WaWV3ID0gW3RyYW5zaXRp
b25Db250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dFRvVmlld0tleV07Ci0KLSAg
ICBDR1JlY3QgaW5saW5lRnJhbWUgPSBfYW5pbWF0aW5nSW4gPyBfaW5pdGlhbEZyYW1lIDogX2Zp
bmFsRnJhbWU7Ci0gICAgQ0dSZWN0IGZ1bGxzY3JlZW5GcmFtZSA9IF9hbmltYXRpbmdJbiA/IF9m
aW5hbEZyYW1lIDogX2luaXRpYWxGcmFtZTsKLSAgICBVSVZpZXcgKmFuaW1hdGluZ1ZpZXcgPSBf
YW5pbWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsKLSAgICAKLSAgICBDR1JlY3QgYm91bmRz
UmVjdCA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdChGbG9hdFJlY3QoaW5s
aW5lRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBmdWxsc2NyZWVuRnJhbWUpOwotICAgIGJv
dW5kc1JlY3Qub3JpZ2luID0gQ0dQb2ludFplcm87Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbWFz
a1ZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgW21hc2tWaWV3IHNl
dEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBibGFja0NvbG9yXV07Ci0gICAgW21hc2tWaWV3IHNl
dEJvdW5kczpfYW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0IDogW2FuaW1hdGluZ1ZpZXcgYm91bmRz
XV07Ci0gICAgW21hc2tWaWV3IHNldENlbnRlcjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFth
bmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFthbmltYXRpbmdWaWV3IGJvdW5k
c10pKV07Ci0gICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bWFza1ZpZXcuZ2V0KCldOwot
ICAgIAotICAgIEZsb2F0UmVjdCBzY2FsZVJlY3QgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0
aW9Bcm91bmRSZWN0KEZsb2F0UmVjdChmdWxsc2NyZWVuRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRp
bygpLCBpbmxpbmVGcmFtZSk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2NhbGVUcmFuc2Zvcm0g
PSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZVJlY3Qud2lkdGgoKSAvIGZ1bGxzY3Jl
ZW5GcmFtZS5zaXplLndpZHRoLCBzY2FsZVJlY3QuaGVpZ2h0KCkgLyBmdWxsc2NyZWVuRnJhbWUu
c2l6ZS5oZWlnaHQpOwotICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0ZVRyYW5zZm9ybSA9
IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKENHUmVjdEdldE1pZFgoaW5saW5lRnJh
bWUpIC0gQ0dSZWN0R2V0TWlkWChmdWxsc2NyZWVuRnJhbWUpLCBDR1JlY3RHZXRNaWRZKGlubGlu
ZUZyYW1lKSAtIENHUmVjdEdldE1pZFkoZnVsbHNjcmVlbkZyYW1lKSk7Ci0gICAgCi0gICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gZmluYWxUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChz
Y2FsZVRyYW5zZm9ybSwgdHJhbnNsYXRlVHJhbnNmb3JtKTsKLQotICAgIFthbmltYXRpbmdWaWV3
IHNldFRyYW5zZm9ybTpfYW5pbWF0aW5nSW4gPyBmaW5hbFRyYW5zZm9ybSA6IENHQWZmaW5lVHJh
bnNmb3JtSWRlbnRpdHldOwotICAgIAotICAgIFtjb250YWluZXJWaWV3IGFkZFN1YnZpZXc6YW5p
bWF0aW5nVmlld107Ci0KLSAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246W3NlbGYgdHJh
bnNpdGlvbkR1cmF0aW9uOnRyYW5zaXRpb25Db250ZXh0XSBkZWxheTowIG9wdGlvbnM6VUlWaWV3
QW5pbWF0aW9uT3B0aW9uQ3VydmVFYXNlSW5PdXQgYW5pbWF0aW9uczpeewotICAgICAgICBbYW5p
bWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2FuaW1hdGluZ0luID8gQ0dBZmZpbmVUcmFuc2Zvcm1J
ZGVudGl0eSA6IGZpbmFsVHJhbnNmb3JtXTsKLSAgICAgICAgW21hc2tWaWV3IHNldEJvdW5kczpf
YW5pbWF0aW5nSW4gPyBhbmltYXRpbmdWaWV3LmJvdW5kcyA6IGJvdW5kc1JlY3RdOwotICAgICAg
ICBbbWFza1ZpZXcgc2V0Q2VudGVyOkNHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW2FuaW1hdGlu
Z1ZpZXcgYm91bmRzXSksIENHUmVjdEdldE1pZFkoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpXTsK
LSAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKXsKLSAgICAgICAgQk9PTCBzdWNjZXNz
ID0gIVt0cmFuc2l0aW9uQ29udGV4dCB0cmFuc2l0aW9uV2FzQ2FuY2VsbGVkXTsKLQotICAgICAg
ICBpZiAoKFtzZWxmIGlzQW5pbWF0aW5nSW5dICYmICFzdWNjZXNzKSB8fCAoIVtzZWxmIGlzQW5p
bWF0aW5nSW5dICYmIHN1Y2Nlc3MpKQotICAgICAgICAgICAgW2FuaW1hdGluZ1ZpZXcgcmVtb3Zl
RnJvbVN1cGVydmlld107Ci0KLSAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJh
bnNpdGlvbjpzdWNjZXNzXTsKLSAgICAgICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bmls
XTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClhbmltYXRpb25FbmRlZDooQk9PTCl0cmFuc2l0aW9u
Q29tcGxldGVkCi17Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgewotICAgIFdLV2ViVmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSBy
ZXRhaW5lZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS8xNDg4NDY2Nj4uCi0gICAgUmV0YWluUHRyPFVJ
Vmlldz4gX3dlYlZpZXdQbGFjZWhvbGRlcjsKLQotICAgIEZ1bGxTY3JlZW5TdGF0ZSBfZnVsbFNj
cmVlblN0YXRlOwotICAgIFdLV2ViVmlld1N0YXRlIF92aWV3U3RhdGU7Ci0KLSAgICBSZXRhaW5Q
dHI8VUlXaW5kb3c+IF93aW5kb3c7Ci0gICAgUmV0YWluUHRyPF9XS0Z1bGxzY3JlZW5Sb290Vmll
d0NvbnRyb2xsZXI+IF9yb290Vmlld0NvbnRyb2xsZXI7Ci0KLSAgICBSZWZQdHI8V2ViS2l0OjpW
b2lkQ2FsbGJhY2s+IF9yZXBhaW50Q2FsbGJhY2s7Ci0gICAgUmV0YWluUHRyPFVJVmlld0NvbnRy
b2xsZXI+IF92aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbjsKLSAgICBSZXRhaW5QdHI8X1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyPiBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyOwotCi0g
ICAgQ0dSZWN0IF9pbml0aWFsRnJhbWU7Ci0gICAgQ0dSZWN0IF9maW5hbEZyYW1lOwotCi0gICAg
UmV0YWluUHRyPE5TU3RyaW5nPiBfRVZPcmdhbml6YXRpb25OYW1lOwotICAgIEJPT0wgX0VWT3Jn
YW5pemF0aW9uTmFtZUlzVmFsaWQ7Ci0KLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFy
ayBJbml0aWFsaXphdGlvbgotLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJW
aWV3Ci17Ci0gICAgaWYgKCFbc3VwZXIgaW5pdF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
X3dlYlZpZXcgPSB3ZWJWaWV3OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVh
bGxvYwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhU
YXJnZXQ6c2VsZl07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBy
ZW1vdmVPYnNlcnZlcjpzZWxmXTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotI3ByYWdt
YSBtYXJrIC0KLSNwcmFnbWEgbWFyayBBY2Nlc3NvcnMKLQotLSAoQk9PTClpc0Z1bGxTY3JlZW4K
LXsKLSAgICByZXR1cm4gX2Z1bGxTY3JlZW5TdGF0ZSA9PSBXYWl0aW5nVG9FbnRlckZ1bGxTY3Jl
ZW4KLSAgICAgICAgfHwgX2Z1bGxTY3JlZW5TdGF0ZSA9PSBFbnRlcmluZ0Z1bGxTY3JlZW4KLSAg
ICAgICAgfHwgX2Z1bGxTY3JlZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW47Ci19Ci0KLS0gKFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3ICopd2ViVmlld1BsYWNlaG9sZGVyCi17Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBFeHBvc2VkIElu
dGVyZmFjZQotCi0tICh2b2lkKV9pbnZhbGlkYXRlRVZPcmdhbml6YXRpb25OYW1lCi17Ci0gICAg
X0VWT3JnYW5pemF0aW9uTmFtZSA9IG5pbDsKLSAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxp
ZCA9IE5POwotfQotCi0tIChCT09MKWlzU2VjdXJlCi17Ci0gICAgcmV0dXJuIF93ZWJWaWV3Lmhh
c09ubHlTZWN1cmVDb250ZW50OwotfQotCi0tIChTZWNUcnVzdFJlZilfc2VydmVyVHJ1c3QKLXsK
LSAgICByZXR1cm4gX3dlYlZpZXcuc2VydmVyVHJ1c3Q7Ci19Ci0KLS0gKE5TU3RyaW5nICopX0VW
T3JnYW5pemF0aW9uTmFtZQotewotICAgIGlmICghc2VsZi5pc1NlY3VyZSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLQotICAgIGlmIChfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCkKLSAgICAgICAg
cmV0dXJuIF9FVk9yZ2FuaXphdGlvbk5hbWUuZ2V0KCk7Ci0KLSAgICBBU1NFUlQoIV9FVk9yZ2Fu
aXphdGlvbk5hbWUuZ2V0KCkpOwotICAgIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkID0gWUVT
OwotCi0gICAgU2VjVHJ1c3RSZWYgdHJ1c3QgPSBbc2VsZiBfc2VydmVyVHJ1c3RdOwotICAgIGlm
ICghdHJ1c3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU0RpY3Rpb25hcnkgKmluZm9E
aWN0aW9uYXJ5ID0gWyhfX2JyaWRnZSBOU0RpY3Rpb25hcnkgKilTZWNUcnVzdENvcHlJbmZvKHRy
dXN0KSBhdXRvcmVsZWFzZV07Ci0gICAgLy8gSWYgU2VjVHJ1c3RDb3B5SW5mbyByZXR1cm5lZCBO
VUxMIHRoZW4gaXQncyBsaWtlbHkgdGhhdCB0aGUgU2VjVHJ1c3RSZWYgaGFzIG5vdCBiZWVuIGV2
YWx1YXRlZAotICAgIC8vIGFuZCB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB3
ZSBuZWVkIGlzIHRvIGNhbGwgU2VjVHJ1c3RFdmFsdWF0ZSBvdXJzZWx2ZXMuCi0gICAgaWYgKCFp
bmZvRGljdGlvbmFyeSkgewotICAgICAgICBTZWNUcnVzdFJlc3VsdFR5cGUgcmVzdWx0ID0ga1Nl
Y1RydXN0UmVzdWx0UHJvY2VlZDsKLSAgICAgICAgT1NTdGF0dXMgZXJyID0gU2VjVHJ1c3RFdmFs
dWF0ZSh0cnVzdCwgJnJlc3VsdCk7Ci0gICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgcmVzdWx0
ID09IGtTZWNUcnVzdFJlc3VsdFByb2NlZWQpCi0gICAgICAgICAgICBpbmZvRGljdGlvbmFyeSA9
IFsoX19icmlkZ2UgTlNEaWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3Jl
bGVhc2VdOwotICAgICAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KQotICAgICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgRVYgY2VydGlmaWNhdGUg
aXMgdmFsaWQgYWdhaW5zdCBvdXIgY2VydGlmaWNhdGUgY2hhaW4uCi0gICAgaWQgaGFzRVYgPSBb
aW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVz
dEluZm9FeHRlbmRlZFZhbGlkYXRpb25LZXldOwotICAgIGlmICghW2hhc0VWIGlzS2luZE9mQ2xh
c3M6W05TVmFsdWUgY2xhc3NdXSB8fCAhW2hhc0VWIGJvb2xWYWx1ZV0pCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjb3VsZCBjb250YWN0IHJldm9jYXRp
b24gc2VydmVyIGFuZCBpdCBpcyBzdGlsbCB2YWxpZC4KLSAgICBpZCBpc05vdFJldm9rZWQgPSBb
aW5mb0RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVz
dEluZm9SZXZvY2F0aW9uS2V5XTsKLSAgICBpZiAoIVtpc05vdFJldm9rZWQgaXNLaW5kT2ZDbGFz
czpbTlNWYWx1ZSBjbGFzc11dIHx8ICFbaXNOb3RSZXZva2VkIGJvb2xWYWx1ZV0pCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBfRVZPcmdhbml6YXRpb25OYW1lID0gW2luZm9EaWN0aW9uYXJ5
IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvQ29tcGFueU5h
bWVLZXldOwotICAgIHJldHVybiBfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpOwotfQotCi0tICh2
b2lkKXVwZGF0ZUxvY2F0aW9uSW5mbwotewotICAgIE5TVVJMKiB1cmwgPSBfd2ViVmlldy5fY29t
bWl0dGVkVVJMOwotCi0gICAgTlNTdHJpbmcgKkVWT3JnYW5pemF0aW9uTmFtZSA9IFtzZWxmIF9F
Vk9yZ2FuaXphdGlvbk5hbWVdOwotICAgIEJPT0wgc2hvd3NFVk9yZ2FuaXphdGlvbk5hbWUgPSBb
RVZPcmdhbml6YXRpb25OYW1lIGxlbmd0aF0gPiAwOwotCi0gICAgTlNTdHJpbmcgKmRvbWFpbiA9
IG5pbDsKLQotICAgIGlmIChMaW5rUHJlc2VudGF0aW9uTGlicmFyeSgpKQotICAgICAgICBkb21h
aW4gPSBbdXJsIF9scF9zaW1wbGlmaWVkRGlzcGxheVN0cmluZ107Ci0gICAgZWxzZQotICAgICAg
ICBkb21haW4gPSB1c2VyVmlzaWJsZVN0cmluZyh1cmwpOwotCi0gICAgTlNTdHJpbmcgKnRleHQg
PSBuaWw7Ci0gICAgaWYgKFtbdXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImRh
dGEiXSA9PSBOU09yZGVyZWRTYW1lKQotICAgICAgICB0ZXh0ID0gQCJkYXRhOiI7Ci0gICAgZWxz
ZSBpZiAoc2hvd3NFVk9yZ2FuaXphdGlvbk5hbWUpCi0gICAgICAgIHRleHQgPSBFVk9yZ2FuaXph
dGlvbk5hbWU7Ci0gICAgZWxzZQotICAgICAgICB0ZXh0ID0gZG9tYWluOwotCi0gICAgW19mdWxs
c2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0TG9jYXRpb246dGV4dCBzZWN1cmU6c2VsZi5pc1NlY3Vy
ZSB0cnVzdGVkTmFtZTpzaG93c0VWT3JnYW5pemF0aW9uTmFtZSB0cnVzdGVkU2l0ZTohIUVWT3Jn
YW5pemF0aW9uTmFtZV07Ci19Ci0KLS0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuCi17Ci0gICAgaWYg
KFtzZWxmIGlzRnVsbFNjcmVlbl0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9pbnZh
bGlkYXRlRVZPcmdhbml6YXRpb25OYW1lXTsKLQotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBXYWl0
aW5nVG9FbnRlckZ1bGxTY3JlZW47Ci0KLSAgICBfd2luZG93ID0gYWRvcHROUyhbW1VJV2luZG93
IGFsbG9jXSBpbml0XSk7Ci0gICAgW193aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9y
IGNsZWFyQ29sb3JdXTsKLSAgICBfcm9vdFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XS0Z1
bGxzY3JlZW5Sb290Vmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX3dpbmRvdyBz
ZXRSb290Vmlld0NvbnRyb2xsZXI6X3Jvb3RWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgW1tf
d2luZG93IHJvb3RWaWV3Q29udHJvbGxlcl0gc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOltfd2luZG93IGJvdW5kc11dKS5nZXQoKV07Ci0gICAgW1tbX3dpbmRv
dyByb290Vmlld0NvbnRyb2xsZXJdIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBj
bGVhckNvbG9yXV07Ci0gICAgW1tbX3dpbmRvdyByb290Vmlld0NvbnRyb2xsZXJdIHZpZXddIHNl
dEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZp
ZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOwotICAgIFtfd2luZG93IHNldFdpbmRvd0xl
dmVsOlVJV2luZG93TGV2ZWxOb3JtYWwgLSAxXTsKLSAgICBbX3dpbmRvdyBzZXRIaWRkZW46Tk9d
OwotICAgIF92aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbiA9IFtfd2luZG93IHJvb3RWaWV3
Q29udHJvbGxlcl07Ci0KLSAgICBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyID0gYWRvcHROUyhb
W19XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtfZnVsbHNj
cmVlblZpZXdDb250cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsKLSAgICBb
X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9k
YWxQcmVzZW50YXRpb25DdXN0b21dOwotICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNl
dFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07Ci0g
ICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOltbX3ZpZXdDb250
cm9sbGVyRm9yUHJlc2VudGF0aW9uIHZpZXddIGJvdW5kc11dOwotICAgIFtzZWxmIHVwZGF0ZUxv
Y2F0aW9uSW5mb107Ci0KLSAgICBbc2VsZiBfbWFuYWdlcl0tPnNhdmVTY3JvbGxQb3NpdGlvbigp
OwotCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyh0
cnVlKTsKLQotICAgIF92aWV3U3RhdGUuc3RvcmUoX3dlYlZpZXcpOwotCi0gICAgX3dlYlZpZXdQ
bGFjZWhvbGRlciA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICBbW193ZWJW
aWV3UGxhY2Vob2xkZXIgbGF5ZXJdIHNldE5hbWU6QCJGdWxsc2NyZWVuIFBsYWNlaG9sZGVyIFZm
aWV3Il07Ci0KLSAgICBXS1NuYXBzaG90Q29uZmlndXJhdGlvbiogY29uZmlnID0gbmlsOwotICAg
IFtfd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb25maWcgY29tcGxldGlv
bkhhbmRsZXI6XihVSUltYWdlICogc25hcHNob3RJbWFnZSwgTlNFcnJvciAqIGVycm9yKXsKLSAg
ICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlz
YWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgCi0gICAgICAgIFtbX3dlYlZpZXdQbGFjZWhvbGRl
ciBsYXllcl0gc2V0Q29udGVudHM6KGlkKVtzbmFwc2hvdEltYWdlIENHSW1hZ2VdXTsKLSAgICAg
ICAgcmVwbGFjZVZpZXdXaXRoVmlldyhfd2ViVmlldywgX3dlYlZpZXdQbGFjZWhvbGRlci5nZXQo
KSk7Ci0KLSAgICAgICAgV0tXZWJWaWV3U3RhdGUoKS5hcHBseVRvKF93ZWJWaWV3KTsKLSAgICAg
ICAgCi0gICAgICAgIFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVz
aXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpXTsK
LSAgICAgICAgW193ZWJWaWV3IHNldEZyYW1lOltfd2luZG93IGJvdW5kc11dOwotICAgICAgICBb
X3dpbmRvdyBpbnNlcnRTdWJ2aWV3Ol93ZWJWaWV3IGF0SW5kZXg6MF07Ci0gICAgICAgIFtfd2Vi
VmlldyBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOltfd2lu
ZG93IGJvdW5kc10uc2l6ZSBtYXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTpbX3dpbmRvdyBi
b3VuZHNdLnNpemVdOwotCi0gICAgICAgIFtfd2ViVmlldyBzZXROZWVkc0xheW91dF07Ci0gICAg
ICAgIFtfd2ViVmlldyBsYXlvdXRJZk5lZWRlZF07Ci0gICAgICAgIAotICAgICAgICBbc2VsZiBf
bWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7Ci0KLSAgICAgICAgX3JlcGFp
bnRDYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWlu
UHRyKHNlbGYpLCBzZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKLSAgICAgICAg
ICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFbX3dlYlZp
ZXcgX3BhZ2VdKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgW3Byb3Rl
Y3RlZFNlbGYgX21hbmFnZXJdLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgICAgIH0pOwot
ICAgICAgICBbX3dlYlZpZXcgX3BhZ2VdLT5mb3JjZVJlcGFpbnQoX3JlcGFpbnRDYWxsYmFjay5j
b3B5UmVmKCkpOwotCi0gICAgICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0gICAgfV07Ci19
Ci0KLS0gKHZvaWQpYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3Qp
aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCi17Ci0gICAgaWYgKF9m
dWxsU2NyZWVuU3RhdGUgIT0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuKQotICAgICAgICByZXR1
cm47Ci0gICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEVudGVyaW5nRnVsbFNjcmVlbjsKLQotICAgIF9p
bml0aWFsRnJhbWUgPSBpbml0aWFsRnJhbWU7Ci0gICAgX2ZpbmFsRnJhbWUgPSBmaW5hbEZyYW1l
OwotCi0gICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERp
c2FibGVBY3Rpb25zOllFU107Ci0KLSAgICBbX3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
Ci0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0Q29udGVudFZpZXc6X3dlYlZpZXdd
OwotCi0gICAgW193aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbF07Ci0g
ICAgW193aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAgIFtfcm9vdFZpZXdDb250cm9sbGVy
IHNldFNob3dzU3RhdHVzQmFyOllFU107Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwot
Ci0gICAgW192aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xs
ZXI6X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlci5nZXQoKSBhbmltYXRlZDpZRVMgY29tcGxldGlv
bjpeewotICAgICAgICBbc2VsZiBjb21wbGV0ZWRFbnRlckZ1bGxTY3JlZW5dOwotICAgICAgICBb
X3Jvb3RWaWV3Q29udHJvbGxlciBzZXRTaG93c1N0YXR1c0JhcjpOT107Ci0gICAgfV07Ci19Ci0K
LS0gKHZvaWQpY29tcGxldGVkRW50ZXJGdWxsU2NyZWVuCi17Ci0gICAgaWYgKCFbX3dlYlZpZXcg
X3BhZ2VdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZnVsbFNjcmVlblN0YXRlID0gSW5GdWxs
U2NyZWVuOwotCi0gICAgW3NlbGYgX21hbmFnZXJdLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsKLSAg
ICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotCi0gICAg
W193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci19
Ci0KLS0gKHZvaWQpZXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBpZiAoIVtzZWxmIGlzRnVsbFNjcmVl
bl0pCi0gICAgICAgIHJldHVybjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRXhp
dEZ1bGxTY3JlZW47Ci0KLSAgICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3Jl
ZW4odHJ1ZSk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKLX0K
LQotLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBbc2VsZiBfbWFuYWdlcl0t
PnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOwotfQotCi0tICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3Jl
ZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVj
dClmaW5hbEZyYW1lCi17Ci0gICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0gV2FpdGluZ1RvRXhp
dEZ1bGxTY3JlZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gRXhp
dGluZ0Z1bGxTY3JlZW47Ci0KLSAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOwotICAg
IF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLSAgICAKLSAgICBbX3dlYlZpZXcgX3BhZ2VdLT5z
ZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKHRydWUpOwotCi0gICAgW19yb290Vmlld0NvbnRy
b2xsZXIgc2V0U2hvd3NTdGF0dXNCYXI6WUVTXTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJv
bGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXJBbmltYXRlZDpZRVMgY29tcGxldGlvbjpeewotICAg
ICAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgW3NlbGYgY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dOwotICAgICAgICBbX3Jvb3RWaWV3Q29u
dHJvbGxlciBzZXRTaG93c1N0YXR1c0JhcjpOT107Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpY29t
cGxldGVkRXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSAhPSBFeGl0
aW5nRnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBO
b3RJbkZ1bGxTY3JlZW47Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJh
bnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLQotICAgIFtbX3dlYlZpZXdQbGFjZWhv
bGRlciBzdXBlcnZpZXddIGluc2VydFN1YnZpZXc6X3dlYlZpZXcgYmVsb3dTdWJ2aWV3Ol93ZWJW
aWV3UGxhY2Vob2xkZXIuZ2V0KCldOwotICAgIFtfd2ViVmlldyBzZXRGcmFtZTpbX3dlYlZpZXdQ
bGFjZWhvbGRlciBmcmFtZV1dOwotICAgIFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOltf
d2ViVmlld1BsYWNlaG9sZGVyIGF1dG9yZXNpemluZ01hc2tdXTsKLQotICAgIFtbX3dlYlZpZXcg
d2luZG93XSBtYWtlS2V5QW5kVmlzaWJsZV07Ci0KLSAgICBfdmlld1N0YXRlLmFwcGx5VG8oX3dl
YlZpZXcpOwotCi0gICAgW193ZWJWaWV3IHNldE5lZWRzTGF5b3V0XTsKLSAgICBbX3dlYlZpZXcg
bGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFtf
d2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgIF93aW5kb3cgPSBuaWw7Ci0KLSAgICBbc2VsZiBf
bWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgIFtzZWxmIF9tYW5h
Z2VyXS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKLQotICAgIGlmIChfcmVwYWludENhbGxiYWNrKSB7
Ci0gICAgICAgIF9yZXBhaW50Q2FsbGJhY2stPmludmFsaWRhdGUoV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKLSAgICAgICAgQVNTRVJUKCFfcmVwYWlu
dENhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNr
OjpjcmVhdGUoW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZiksIHNlbGZdKFdlYktpdDo6
Q2FsbGJhY2tCYXNlOjpFcnJvcikgewotICAgICAgICBfcmVwYWludENhbGxiYWNrID0gbnVsbHB0
cjsKLSAgICAgICAgW193ZWJWaWV3UGxhY2Vob2xkZXIgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0K
LSAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFs
c2UpOwotICAgIH0pOwotCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBh
aW50Q2FsbGJhY2suY29weVJlZigpKTsKLX0KLQotLSAodm9pZClleGl0RnVsbHNjcmVlbkltbWVk
aWF0ZWx5Ci17Ci0gICAgaWYgKCFbc2VsZiBpc0Z1bGxTY3JlZW5dKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtz
ZWxmIF9tYW5hZ2VyXS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgW3NlbGYgZXhpdEZ1
bGxTY3JlZW5dOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBFeGl0aW5nRnVsbFNjcmVlbjsKLSAg
ICBbc2VsZiBjb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl07Ci0gICAgcmVwbGFjZVZpZXdXaXRoVmll
dyhfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpLCBfd2ViVmlldyk7Ci0gICAgW193ZWJWaWV3IF9w
YWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci0gICAgW3NlbGYgX21h
bmFnZXJdLT5kaWRFeGl0RnVsbFNjcmVlbigpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5p
bWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IG5pbDsK
LX0KLQotLSAodm9pZCljbG9zZQotewotICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuSW1tZWRpYXRl
bHldOwotICAgIF93ZWJWaWV3ID0gbmlsOwotfQotCi0tICh2b2lkKXdlYlZpZXdEaWRSZW1vdmVG
cm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW4KLXsKLSAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0
ZSA9PSBJbkZ1bGxTY3JlZW4gJiYgX3dlYlZpZXcud2luZG93ICE9IF93aW5kb3cuZ2V0KCkpCi0g
ICAgICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwotfQotCi0tICh2b2lkKXZp
ZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlCi17Ci19Ci0KLSNwcmFnbWEgbWFyayAtCi0jcHJh
Z21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCi0KLS0gKFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHkqKV9tYW5hZ2VyCi17Ci0gICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW193ZWJWaWV3IF9wYWdlXS0+ZnVsbFNjcmVlbk1hbmFn
ZXIoKTsKLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBVSVZpZXdDb250cm9sbGVy
VHJhbnNpdGlvbmluZ0RlbGVnYXRlCi0KLS0gKGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRy
YW5zaXRpb25pbmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250cm9sbGVyOihV
SVZpZXdDb250cm9sbGVyICopcHJlc2VudGVkIHByZXNlbnRpbmdDb250cm9sbGVyOihVSVZpZXdD
b250cm9sbGVyICopcHJlc2VudGluZyBzb3VyY2VDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVy
ICopc291cmNlCi17Ci0gICAgUmV0YWluUHRyPFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+IGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxsc2NyZWVuQW5pbWF0aW9u
Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldFZp
ZXdDb250cm9sbGVyOnByZXNlbnRlZF07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0SW5p
dGlhbEZyYW1lOl9pbml0aWFsRnJhbWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEZp
bmFsRnJhbWU6X2ZpbmFsRnJhbWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1h
dGluZ0luOllFU107Ci0gICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXIuYXV0b3JlbGVhc2Uo
KTsKLX0KLQotLSAoaWQ8VUlWaWV3Q29udHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4pYW5p
bWF0aW9uQ29udHJvbGxlckZvckRpc21pc3NlZENvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIg
KilkaXNtaXNzZWQKLXsKLSAgICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJv
bGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5BbmltYXRp
b25Db250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0
Vmlld0NvbnRyb2xsZXI6ZGlzbWlzc2VkXTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJ
bml0aWFsRnJhbWU6X2luaXRpYWxGcmFtZV07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0
RmluYWxGcmFtZTpfZmluYWxGcmFtZV07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0QW5p
bWF0aW5nSW46Tk9dOwotICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLmF1dG9yZWxlYXNl
KCk7Ci19Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxz
Y3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWU5MDcwMTE1OGFlMjEyY2Q2YWM3NzhiMDNjZGQ1YTcxZWUzMzNhOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxz
Y3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWMuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Rv
dWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNjb3JlT2ZOZXh0VG91Y2goQ0dQb2lu
dCBsb2NhdGlvbikKK3sKKyAgICBTZWNvbmRzIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCk7CisKKyAgICBpZiAoIW1fbGFzdFRvdWNoVGltZSkgeworICAgICAg
ICBtX2xhc3RUb3VjaFRpbWUgPSBXVEZNb3ZlKG5vdyk7CisgICAgICAgIG1fbGFzdFRvdWNoTG9j
YXRpb24gPSBXVEZNb3ZlKGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgU2Vjb25kcyBkZWx0YVRpbWUgPSBub3cgLSBtX2xhc3RUb3VjaFRpbWU7CisKKyAgICBkb3Vi
bGUgY29lZmZpY2llbnQgPSBhdHRlbnVhdGlvbkZhY3RvcihkZWx0YVRpbWUpOworICAgIG1fbGFz
dFNjb3JlID0gY29lZmZpY2llbnQgKiBkaXN0YW5jZVNjb3JlKGxvY2F0aW9uLCBtX2xhc3RUb3Vj
aExvY2F0aW9uLCBkZWx0YVRpbWUpICsgKDEgLSBjb2VmZmljaWVudCkgKiBtX2xhc3RTY29yZTsK
KworICAgIG1fbGFzdFRvdWNoVGltZSA9IG5vdzsKKyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0g
bG9jYXRpb247CisgICAgcmV0dXJuIG1fbGFzdFNjb3JlOworfQorCit2b2lkIEZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYzo6cmVzZXQoKQoreworICAgIG1fbGFzdFRvdWNoVGltZSA9IDBfczsK
KyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0geyB9OworICAgIG1fbGFzdFNjb3JlID0gMDsKK30K
KworZG91YmxlIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VTY29yZShjb25z
dCBDR1BvaW50JiBuZXh0TG9jYXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwgY29u
c3QgU2Vjb25kcyYgZGVsdGFUaW1lKQoreworICAgIGRvdWJsZSBkaXN0YW5jZSA9IHNxcnQoCisg
ICAgICAgIG1feFdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueCAtIGxhc3RMb2NhdGlvbi54LCAy
KSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueSAtIGxhc3RMb2NhdGlv
bi55LCAyKSk7CisgICAgZG91YmxlIHNpemVGYWN0b3IgPSBzcXJ0KAorICAgICAgICBtX3hXZWln
aHQgKiBwb3cobV9zaXplLndpZHRoLCAyKSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhtX3Np
emUuaGVpZ2h0LCAyKSk7CisgICAgZG91YmxlIHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2UgLyBz
aXplRmFjdG9yOworICAgIGlmIChzY2FsZWREaXN0YW5jZSA8PSBtX2N1dG9mZikKKyAgICAgICAg
cmV0dXJuIHNjYWxlZERpc3RhbmNlICogKG1fcmFtcFVwU3BlZWQgLyBkZWx0YVRpbWUpOworCisg
ICAgZG91YmxlIGV4cG9uZW50aWFsRGlzdGFuY2UgPSBtX2N1dG9mZiArIHBvdygoc2NhbGVkRGlz
dGFuY2UgLSBtX2N1dG9mZikgLyAoMSAtIG1fY3V0b2ZmKSwgbV9nYW1tYSk7CisgICAgcmV0dXJu
IGV4cG9uZW50aWFsRGlzdGFuY2UgKiAobV9yYW1wVXBTcGVlZCAvIGRlbHRhVGltZSk7Cit9CisK
K2RvdWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OmF0dGVudWF0aW9uRmFjdG9yKFNl
Y29uZHMgZGVsdGEpCit7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRUaW1lRGVsdGEgPSBkZWx0YSAv
IG1fcmFtcERvd25TcGVlZDsKKyAgICByZXR1cm4gbm9ybWFsaXplZFRpbWVEZWx0YSAqIG1fd2Vp
Z2h0OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjNjZGNhM2Q3YzAzMTZhOGY0NTc3OWQyMWQ4MTA4ZmFjM2Q1OGFmNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisj
aW5jbHVkZSA8d3RmL1NlY29uZHMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEZ1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYyB7CitwdWJsaWM6CisgICAgZG91YmxlIHNjb3JlT2ZO
ZXh0VG91Y2goQ0dQb2ludCBsb2NhdGlvbik7CisgICAgdm9pZCByZXNldCgpOworCisgICAgdm9p
ZCBzZXRSYW1wVXBTcGVlZChTZWNvbmRzIHNwZWVkKSB7IG1fcmFtcFVwU3BlZWQgPSBzcGVlZDsg
fQorICAgIHZvaWQgc2V0UmFtcERvd25TcGVlZChTZWNvbmRzIHNwZWVkKSB7IG1fcmFtcERvd25T
cGVlZCA9IHNwZWVkOyB9CisgICAgdm9pZCBzZXRYV2VpZ2h0KGRvdWJsZSB3ZWlnaHQpIHsgbV94
V2VpZ2h0ID0gd2VpZ2h0OyB9CisgICAgdm9pZCBzZXRZV2VpZ2h0KGRvdWJsZSB3ZWlnaHQpIHsg
bV95V2VpZ2h0ID0gd2VpZ2h0OyB9CisgICAgdm9pZCBzZXRTaXplKENHU2l6ZSBzaXplKSB7IG1f
c2l6ZSA9IHNpemU7IH0KKyAgICB2b2lkIHNldEdhbW1hKGRvdWJsZSBnYW1tYSkgeyBtX2dhbW1h
ID0gZ2FtbWE7IH0KKyAgICB2b2lkIHNldEdhbW1hQ3V0b2ZmKGRvdWJsZSBjdXRvZmYpIHsgbV9j
dXRvZmYgPSBjdXRvZmY7IH0KKworcHJpdmF0ZToKKyAgICBkb3VibGUgZGlzdGFuY2VTY29yZShj
b25zdCBDR1BvaW50JiBuZXh0TG9jYXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwg
Y29uc3QgU2Vjb25kcyYgZGVsdGFUaW1lKTsKKyAgICBkb3VibGUgYXR0ZW51YXRpb25GYWN0b3Io
U2Vjb25kcyBkZWx0YSk7CisKKyAgICBkb3VibGUgbV93ZWlnaHQgeyAwLjEgfTsKKyAgICBTZWNv
bmRzIG1fcmFtcFVwU3BlZWQgeyAxIH07CisgICAgU2Vjb25kcyBtX3JhbXBEb3duU3BlZWQgeyAx
IH07CisgICAgZG91YmxlIG1feFdlaWdodCB7IDEgfTsKKyAgICBkb3VibGUgbV95V2VpZ2h0IHsg
MSB9OworICAgIGRvdWJsZSBtX2dhbW1hIHsgMSB9OworICAgIGRvdWJsZSBtX2N1dG9mZiB7IDEg
fTsKKyAgICBDR1NpemUgbV9zaXplIHsgfTsKKyAgICBTZWNvbmRzIG1fbGFzdFRvdWNoVGltZSB7
IDAgfTsKKyAgICBDR1BvaW50IG1fbGFzdFRvdWNoTG9jYXRpb24geyB9OworICAgIGRvdWJsZSBt
X2xhc3RTY29yZSB7IDAgfTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGY4M2IyYzUzN2YxMGExNjdlZmU1ZGEwZDZhYzc4MWE4ZDk2ZDI0ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVu
L1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9S
TShJT1MpCisKKyNpbXBvcnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXIuaD4KKworQGNsYXNzIFdL
V2ViVmlldzsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisK
K05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuVmlld0Nv
bnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyCitAcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWlj
KSBpZCB0YXJnZXQ7CitAcHJvcGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOwor
QHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgTlNTdHJpbmcgKmxvY2F0aW9uOworQHByb3Bl
cnR5IChhc3NpZ24sIG5vbmF0b21pYykgQk9PTCBwcmVmZXJzU3RhdHVzQmFySGlkZGVuOworQHBy
b3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5n
OworQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGljdHVyZUluUGljdHVy
ZUFjdGl2ZSkgQk9PTCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlOworCistIChpZClpbml0V2l0aFdl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXc7CistICh2b2lkKXNob3dVSTsKKy0gKHZvaWQpaGlk
ZVVJOworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZTsKK0BlbmQKKworTlNf
QVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYm
IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9m
dWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGRhMWViOWY0YzM3ZmRlZDdjYWI4ZDQzZGUzYTRkMWY4NWMyOTA5MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIldLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgiCisKKyNpbXBv
cnQgIkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tGdWxs
c2NyZWVuU3RhY2tWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIHNo
b3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjE7CitzdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2
YWwgYXV0b0hpZGVEZWxheSA9IDQuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcmVxdWlyZWRTY29y
ZSA9IDAuMTsKKworQGNsYXNzIFdLRnVsbHNjcmVlblN0YWNrVmlldzsKKworY2xhc3MgV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCA6IFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldFBhcmVudChXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlciAqcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKKyAg
ICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1fcGFyZW50LnBsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAgfQorCisgICAgdm9p
ZCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlQ2hhbmdlZChib29sIGFjdGl2ZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fcGFyZW50LnBpY3R1cmVJblBpY3R1cmVBY3RpdmUgPSBhY3RpdmU7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRJbnRlcmZhY2UoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQqIGludGVyZmFjZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVy
ZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgbV9pbnRl
cmZhY2UgPSBpbnRlcmZhY2U7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVyZmFj
ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKS0+YWRkQ2xpZW50KCp0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgKm1fcGFyZW50IHsgbnVsbHB0ciB9OworICAg
IFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7Cit9Owor
CisjcHJhZ21hIG1hcmsgLSBfV0tFeHRyaW5zaWNCdXR0b24KKworQGludGVyZmFjZSBfV0tFeHRy
aW5zaWNCdXR0b24gOiBVSUJ1dHRvbgorQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYykgQ0dT
aXplIGV4dHJpbnNpY0NvbnRlbnRTaXplOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLRXh0
cmluc2ljQnV0dG9uCistICh2b2lkKXNldEV4dHJpbnNpY0NvbnRlbnRTaXplOihDR1NpemUpc2l6
ZQoreworICAgIF9leHRyaW5zaWNDb250ZW50U2l6ZSA9IHNpemU7CisgICAgW3NlbGYgaW52YWxp
ZGF0ZUludHJpbnNpY0NvbnRlbnRTaXplXTsKK30KKworLSAoQ0dTaXplKWludHJpbnNpY0NvbnRl
bnRTaXplCit7CisgICAgcmV0dXJuIF9leHRyaW5zaWNDb250ZW50U2l6ZTsKK30KK0BlbmQKKwor
I3ByYWdtYSBtYXJrIC0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIKKworQGludGVyZmFjZSBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciAoKSA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRl
LCBVSVRvb2xiYXJEZWxlZ2F0ZT4KK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIFdLV2Vi
VmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSByZXRhaW5lZCwgc2VlIDxyZGFyOi8vcHJvYmxl
bS8xNDg4NDY2Nj4uCitAcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkqIF9tYW5hZ2VyOworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWlj
KSBDR0Zsb2F0IF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3A7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB7CisgICAgUmV0YWluUHRyPFVJTG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyOworICAgIFJl
dGFpblB0cjxXS0Z1bGxzY3JlZW5TdGFja1ZpZXc+IF9zdGFja1ZpZXc7CisgICAgUmV0YWluUHRy
PF9XS0V4dHJpbnNpY0J1dHRvbj4gX2NhbmNlbEJ1dHRvbjsKKyAgICBSZXRhaW5QdHI8X1dLRXh0
cmluc2ljQnV0dG9uPiBfcGlwQnV0dG9uOworICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2xvY2F0
aW9uQnV0dG9uOworICAgIFJldGFpblB0cjxVSUxheW91dEd1aWRlPiBfdG9wR3VpZGU7CisgICAg
UmV0YWluUHRyPE5TTGF5b3V0Q29uc3RyYWludD4gX3RvcENvbnN0cmFpbnQ7CisgICAgV2ViS2l0
OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMgX3NlY2hldXJpc3RpYzsKKyAgICBXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IF9wbGF5YmFja0Ns
aWVudDsKKyAgICBCT09MIF9oYXNDb250cm9sc01hbmFnZXI7CisgICAgQ0dGbG9hdCBfbm9uWmVy
b1N0YXR1c0JhckhlaWdodDsKK30KKworI3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJmYWNl
CisKKy0gKGlkKWluaXRXaXRoV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJlZEFwcGxp
Y2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X3N0YXR1c0JhckZyYW1lRGlkQ2hhbmdlOikgbmFtZTpVSUFwcGxpY2F0aW9uRGlkQ2hhbmdlU3Rh
dHVzQmFyRnJhbWVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgX3NlY2hldXJpc3RpYy5z
ZXRSYW1wVXBTcGVlZChTZWNvbmRzKDAuMjUpKTsKKyAgICBfc2VjaGV1cmlzdGljLnNldFJhbXBE
b3duU3BlZWQoU2Vjb25kcygxLikpOworICAgIF9zZWNoZXVyaXN0aWMuc2V0WFdlaWdodCgwKTsK
KyAgICBfc2VjaGV1cmlzdGljLnNldEdhbW1hKDAuMSk7CisgICAgX3NlY2hldXJpc3RpYy5zZXRH
YW1tYUN1dG9mZigwLjA4KTsKKworICAgIHNlbGYuX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAg
X3BsYXliYWNrQ2xpZW50LnNldFBhcmVudChzZWxmKTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3Jt
UmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisKKyAgICBfcGxheWJhY2tDbGllbnQu
c2V0UGFyZW50KG51bGxwdHIpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KXNob3dVSQoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dp
dGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKwor
ICAgIGlmIChfcGxheWluZykgeworICAgICAgICBOU1RpbWVJbnRlcnZhbCBoaWRlRGVsYXkgPSBh
dXRvSGlkZURlbGF5OworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGhp
ZGVVSSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpoaWRlRGVsYXldOworICAgIH0KKyAgICBb
VUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmlt
YXRpb25zOiBeeworICAgICAgICBbX3N0YWNrVmlldyBzZXRIaWRkZW46Tk9dOworICAgICAgICBb
X3N0YWNrVmlldyBzZXRBbHBoYToxXTsKKyAgICAgICAgc2VsZi5wcmVmZXJzU3RhdHVzQmFySGlk
ZGVuID0gTk87CisgICAgfV07Cit9CisKKy0gKHZvaWQpaGlkZVVJCit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihoaWRlVUkpIG9iamVjdDpuaWxdOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJh
dGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3Nl
bGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAg
ICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1
YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3IgY29uc3Rh
bnQ6c2VsZi52aWV3LnNhZmVBcmVhSW5zZXRzLnRvcF07CisgICAgICAgIFtfdG9wQ29uc3RyYWlu
dCBzZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgW19zdGFja1ZpZXcgc2V0QWxwaGE6MF07CisgICAg
ICAgIHNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbiA9IFlFUzsKKyAgICB9IGNvbXBsZXRpb246
XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgIGlmICghZmluaXNoZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25z
dHJhaW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9w
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRH
dWlkZS50b3BBbmNob3JdOworICAgICAgICBbX3RvcENvbnN0cmFpbnQgc2V0QWN0aXZlOllFU107
CisgICAgICAgIFtfc3RhY2tWaWV3IHNldEhpZGRlbjpZRVNdOworICAgIH1dOworfQorCistICh2
b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlCit7CisgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gW3NlbGYuX3dlYlZpZXcgX3BhZ2VdOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IHBhZ2UgPyBwYWdlLT5wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCkgOiBOVUxMOworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID8gcGxh
eWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkgOiBOVUxMOwor
ICAgIF9wbGF5YmFja0NsaWVudC5zZXRJbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KTsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSA/IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSA6IE5VTEw7CisgICAgX2hhc0NvbnRyb2xzTWFuYWdlciA9IHBsYXli
YWNrU2Vzc2lvbk1vZGVsOworICAgIHNlbGYucGxheWluZyA9IHBsYXliYWNrU2Vzc2lvbk1vZGVs
ID8gcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpIDogTk87CisgICAgW19waXBCdXR0
b24gc2V0SGlkZGVuOiFwbGF5YmFja1Nlc3Npb25Nb2RlbF07Cit9CisKK0BzeW50aGVzaXplIHBy
ZWZlcnNTdGF0dXNCYXJIaWRkZW49X3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47CistICh2b2lkKXNl
dFByZWZlcnNTdGF0dXNCYXJIaWRkZW46KEJPT0wpdmFsdWUKK3sKKyAgICBfcHJlZmVyc1N0YXR1
c0JhckhpZGRlbiA9IHZhbHVlOworICAgIFtzZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5j
ZVVwZGF0ZV07CisgICAgW3NlbGYgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30K
KworLSAodm9pZClzZXRQbGF5aW5nOihCT09MKWlzUGxheWluZworeworICAgIGlmIChfcGxheWlu
ZyA9PSBpc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIF9wbGF5aW5nID0gaXNQbGF5
aW5nOworICAgIGlmICghX3BsYXlpbmcpCisgICAgICAgIFtzZWxmIHNob3dVSV07CisgICAgZWxz
ZSB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhU
YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKyAgICAg
ICAgTlNUaW1lSW50ZXJ2YWwgaGlkZURlbGF5ID0gYXV0b0hpZGVEZWxheTsKKyAgICAgICAgW3Nl
bGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIHdpdGhPYmplY3Q6bmlsIGFmdGVy
RGVsYXk6aGlkZURlbGF5XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0UGljdHVyZUluUGljdHVy
ZUFjdGl2ZTooQk9PTClhY3RpdmUKK3sKKyAgICBpZiAoX3BpY3R1cmVJblBpY3R1cmVBY3RpdmUg
PT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBfcGljdHVyZUluUGljdHVyZUFjdGl2
ZSA9IGFjdGl2ZTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRTZWxlY3RlZDphY3RpdmVdOworfQorCisj
cHJhZ21hIG1hcmsgLSBVSVZpZXdDb250cm9sbGVyIE92ZXJyaWRlcworCistICh2b2lkKWxvYWRW
aWV3Cit7CisgICAgW3NlbGYgc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApXSkuZ2V0KCldOworICAgIHNlbGYudmll
dy5hdXRvcmVzaXppbmdNYXNrID0gVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0OworCisgICAgX2NhbmNlbEJ1dHRvbiA9IFtf
V0tFeHRyaW5zaWNCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsKKyAg
ICBbX2NhbmNlbEJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJh
aW50czpOT107CisgICAgW19jYW5jZWxCdXR0b24gc2V0QWRqdXN0c0ltYWdlV2hlbkhpZ2hsaWdo
dGVkOk5PXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRFeHRyaW5zaWNDb250ZW50U2l6ZTpDR1Np
emVNYWtlKDYwLjAsIDQ3LjApXTsKKyAgICBbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJp
bWFyeUdseXBoVGludFRvVmlldzpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBOU0J1bmRsZSAq
YnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOnNlbGYuY2xhc3NdOworICAgIFVJSW1h
Z2UgKmRvbmVJbWFnZSA9IFtVSUltYWdlIGltYWdlTmFtZWQ6QCJEb25lIiBpbkJ1bmRsZTpidW5k
bGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBbX2NhbmNlbEJ1dHRv
biBzZXRJbWFnZTpbZG9uZUltYWdlIGltYWdlV2l0aFJlbmRlcmluZ01vZGU6VUlJbWFnZVJlbmRl
cmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwor
ICAgIFtfY2FuY2VsQnV0dG9uIHNldFRpbnRDb2xvcjpbVUlDb2xvciB3aGl0ZUNvbG9yXV07Cisg
ICAgW19jYW5jZWxCdXR0b24gc2l6ZVRvRml0XTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJn
ZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9jYW5jZWxBY3Rpb246KSBmb3JDb250cm9sRXZlbnRz
OlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07CisKKyAgICBfcGlwQnV0dG9uID0gW19XS0V4
dHJpbnNpY0J1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOworICAgIFtf
cGlwQnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5P
XTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwor
ICAgIFtfcGlwQnV0dG9uIHNldEV4dHJpbnNpY0NvbnRlbnRTaXplOkNHU2l6ZU1ha2UoNjAuMCwg
NDcuMCldOworICAgIFtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5cGhUaW50
VG9WaWV3Ol9waXBCdXR0b24uZ2V0KCldOworICAgIFVJSW1hZ2UgKnN0YXJ0UGlQSW1hZ2UgPSBb
VUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RhcnRQaWN0dXJlSW5QaWN0dXJlQnV0dG9uIiBpbkJ1bmRs
ZTpidW5kbGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBVSUltYWdl
ICpzdG9wUGlQSW1hZ2UgPSBbVUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RvcFBpY3R1cmVJblBpY3R1
cmVCdXR0b24iIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpu
aWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdGFydFBpUEltYWdlIGltYWdlV2l0aFJl
bmRlcmluZ01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6
VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdG9wUGlQ
SW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1Rl
bXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZVNlbGVjdGVkXTsKKyAgICBbX3BpcEJ1dHRv
biBzZXRUaW50Q29sb3I6W1VJQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFtfcGlwQnV0dG9uIHNp
emVUb0ZpdF07CisgICAgW19waXBCdXR0b24gYWRkVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rv
cihfdG9nZ2xlUGlQQWN0aW9uOikgZm9yQ29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNo
VXBJbnNpZGVdOworCisgICAgX3N0YWNrVmlldyA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5TdGFj
a1ZpZXcgYWxsb2NdIGluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czpAW19jYW5jZWxCdXR0b24uZ2V0
KCksIF9waXBCdXR0b24uZ2V0KCldIGF4aXM6VUlMYXlvdXRDb25zdHJhaW50QXhpc0hvcml6b250
YWxdKTsKKyAgICBbX3N0YWNrVmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9D
b25zdHJhaW50czpOT107CisgICAgW19zdGFja1ZpZXcgc2V0VGFyZ2V0Vmlld0ZvclNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheTpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBbW3NlbGYgdmlld10g
YWRkU3Vidmlldzpfc3RhY2tWaWV3LmdldCgpXTsKKworICAgIFVJTGF5b3V0R3VpZGUqIHNhZmVB
cmVhID0gc2VsZi52aWV3LnNhZmVBcmVhTGF5b3V0R3VpZGU7CisgICAgVUlMYXlvdXRHdWlkZSog
bWFyZ2lucyA9IHNlbGYudmlldy5sYXlvdXRNYXJnaW5zR3VpZGU7CisKKyAgICBfdG9wR3VpZGUg
PSBhZG9wdE5TKFtbVUlMYXlvdXRHdWlkZSBhbGxvY10gaW5pdF0pOworICAgIFtzZWxmLnZpZXcg
YWRkTGF5b3V0R3VpZGU6X3RvcEd1aWRlLmdldCgpXTsKKyAgICBOU0xheW91dEFuY2hvciogdG9w
QW5jaG9yID0gW190b3BHdWlkZSB0b3BBbmNob3JdOworICAgIF90b3BDb25zdHJhaW50ID0gW3Rv
cEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzYWZlQXJlYS50b3BBbmNob3JdOworICAg
IFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBfdG9w
Q29uc3RyYWludC5nZXQoKSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IHRvcEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6dG9wQW5jaG9yXSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IGxlYWRp
bmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOm1hcmdpbnMubGVhZGluZ0FuY2hvcl0s
CisgICAgXV07CisKKyAgICBbX3N0YWNrVmlldyBzZXRBbHBoYTowXTsKKyAgICBbX3N0YWNrVmll
dyBzZXRIaWRkZW46WUVTXTsKKyAgICBbc2VsZiB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZV07CisKKyAgICBfdG91Y2hHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUxvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3RvdWNoRGV0ZWN0ZWQ6KV0pOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBz
ZXRDYW5jZWxzVG91Y2hlc0luVmlldzpOT107CisgICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVy
IHNldE1pbmltdW1QcmVzc0R1cmF0aW9uOjBdOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZi52aWV3IGFkZEdlc3R1cmVSZWNvZ25pemVy
Ol90b3VjaEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKK30KKworLSAodm9pZCl2aWV3V2lsbEFw
cGVhcjooQk9PTClhbmltYXRlZAoreworICAgIHNlbGYuX3dlYlZpZXcuYXV0b3Jlc2l6aW5nTWFz
ayA9IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdG
bGV4aWJsZUhlaWdodDsKKyAgICBzZWxmLl93ZWJWaWV3LmZyYW1lID0gc2VsZi52aWV3LmJvdW5k
czsKKyAgICBbc2VsZi52aWV3IGluc2VydFN1YnZpZXc6c2VsZi5fd2ViVmlldyBhdEluZGV4OjBd
OworCisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKQorICAgICAgICBtYW5h
Z2VyLT5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEZWxheShhdXRvSGlkZURlbGF5KTsKK30KKworLSAo
dm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc2VsZiBfdXBkYXRlV2ViVmlld0Z1
bGxzY3JlZW5JbnNldHNdOworICAgIF9zZWNoZXVyaXN0aWMuc2V0U2l6ZShzZWxmLnZpZXcuYm91
bmRzLnNpemUpOworfQorCistICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXpl
KXNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5z
aXRpb25Db29yZGluYXRvcj4pY29vcmRpbmF0b3IKK3sKKyAgICBbc3VwZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07
CisgICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmll
d0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7CisgICAg
ICAgIHZvaWQgKF53ZWJWaWV3VXBkYXRlQmxvY2spKCkgPSBeeworICAgICAgICAgICAgW3NlbGYu
X3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpz
aXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVdOworICAgICAgICB9OworCisg
ICAgICAgIFtzZWxmLl93ZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6d2Vi
Vmlld1VwZGF0ZUJsb2NrXTsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX3NldEludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU6W1VJQXBwIHN0YXR1c0Jhck9yaWVudGF0aW9uXV07CisgICAgfSBj
b21wbGV0aW9uOl4oaWQgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250
ZXh0PmNvbnRleHQpIHsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXpl
XTsKKyAgICB9XTsKK30KKworLSAoVUlTdGF0dXNCYXJTdHlsZSlwcmVmZXJyZWRTdGF0dXNCYXJT
dHlsZQoreworICAgIHJldHVybiBVSVN0YXR1c0JhclN0eWxlTGlnaHRDb250ZW50OworfQorCist
IChCT09MKXByZWZlcnNTdGF0dXNCYXJIaWRkZW4KK3sKKyAgICByZXR1cm4gX3ByZWZlcnNTdGF0
dXNCYXJIaWRkZW47Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJl
UmVjb2duaXplckRlbGVnYXRlCisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2Vz
dHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKWdlc3R1cmVS
ZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxk
UmVjZWl2ZVRvdWNoOihVSVRvdWNoICopdG91Y2gKK3sKKyAgICBbc2VsZiBzaG93VUldOworICAg
IHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKyNwcmFnbWEgbWFyayAtCisjcHJh
Z21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCisKK0BkeW5hbWljIF9tYW5hZ2VyOworLSAoV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoYXV0byogcGFnZSA9
IFtzZWxmLl93ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0BkeW5hbWljIF9lZmZlY3RpdmVG
dWxsc2NyZWVuSW5zZXRUb3A7CistIChDR0Zsb2F0KV9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRU
b3AKK3sKKyAgICBpZiAoIXNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBDR1JlY3QgY2FuY2VsRnJhbWUgPSBfY2FuY2VsQnV0dG9uLmdldCgpLmZy
YW1lOworICAgIENHUG9pbnQgbWF4WFkgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKGNhbmNl
bEZyYW1lKSwgQ0dSZWN0R2V0TWF4WShjYW5jZWxGcmFtZSkpOworICAgIHJldHVybiBbX2NhbmNl
bEJ1dHRvbiBjb252ZXJ0UG9pbnQ6bWF4WFkgdG9WaWV3OnNlbGYudmlld10ueTsKK30KKworLSAo
dm9pZClfY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgdGFyZ2V0XSBwZXJm
b3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Cit9CisKKy0gKHZvaWQpX3RvZ2dsZVBpUEFjdGlv
bjooaWQpc2VuZGVyCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZpZXcg
X3BhZ2VdOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gcGFnZS0+cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpOworICAgIGlmICghcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNvbnRyb2xz
TWFuYWdlckludGVyZmFjZSgpOworICAgIGlmICghcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7CisgICAgaWYgKCFwbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwor
LSAodm9pZClfdG91Y2hEZXRlY3RlZDooaWQpc2VuZGVyCit7CisgICAgaWYgKFtfdG91Y2hHZXN0
dXJlUmVjb2duaXplciBzdGF0ZV0gIT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4gfHwg
W190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVFbmRlZCkgeworICAgICAgICBkb3VibGUgc2NvcmUgPSBfc2VjaGV1cmlzdGljLnNjb3JlT2ZO
ZXh0VG91Y2goW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGYudmll
d10pOworICAgICAgICBpZiAoc2NvcmUgPiByZXF1aXJlZFNjb3JlKQorICAgICAgICAgICAgW3Nl
bGYgX3Nob3dQaGlzaGluZ0FsZXJ0XTsKKyAgICB9CisgICAgW3NlbGYgc2hvd1VJXTsKK30KKwor
LSAodm9pZClfc3RhdHVzQmFyRnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uQ2VudGVyICop
bm90aWZpY2F0aW9uCit7CisgICAgQ0dGbG9hdCBoZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJl
ZEFwcGxpY2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIGlmICghaGVpZ2h0
IHx8IGhlaWdodCA9PSBfbm9uWmVyb1N0YXR1c0JhckhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBoZWlnaHQ7CisgICAgW3NlbGYgX3VwZGF0
ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30KKworLSAodm9pZClfdXBkYXRlV2ViVmlld0Z1
bGxzY3JlZW5JbnNldHMKK3sKKyAgICBpZiAoYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXIp
CisgICAgICAgIG1hbmFnZXItPnNldEZ1bGxzY3JlZW5JbnNldFRvcChzZWxmLl9lZmZlY3RpdmVG
dWxsc2NyZWVuSW5zZXRUb3ApOworfQorCistICh2b2lkKV9zaG93UGhpc2hpbmdBbGVydAorewor
ICAgIE5TU3RyaW5nICphbGVydFRpdGxlID0gQCJEZWNlcHRpdmUgV2Vic2l0ZSBXYXJuaW5nIjsK
KyAgICBOU1N0cmluZyAqYWxlcnRNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJUaGUgd2Vic2l0ZSBcIiVAXCIgbWF5IGJlIGEgZGVjZXB0aXZlIHdlYnNpdGUuIFdvdWxkIHlv
dSBsaWtlIHRvIGV4aXQgZnVsbHNjcmVlbj8iLCAoTlNTdHJpbmcgKilzZWxmLmxvY2F0aW9uXTsK
KyAgICBVSUFsZXJ0Q29udHJvbGxlciogYWxlcnQgPSBbVUlBbGVydENvbnRyb2xsZXIgYWxlcnRD
b250cm9sbGVyV2l0aFRpdGxlOmFsZXJ0VGl0bGUgbWVzc2FnZTphbGVydE1lc3NhZ2UgcHJlZmVy
cmVkU3R5bGU6VUlBbGVydENvbnRyb2xsZXJTdHlsZUFsZXJ0XTsKKworICAgIFVJQWxlcnRBY3Rp
b24qIGRlZmF1bHRBY3Rpb24gPSBbVUlBbGVydEFjdGlvbiBhY3Rpb25XaXRoVGl0bGU6QCJFeGl0
IEZ1bGxzY3JlZW4iIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZURlZmF1bHQgaGFuZGxlcjpeKFVJ
QWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgW3NlbGYgX2NhbmNlbEFjdGlvbjphY3Rp
b25dOworICAgIH1dOworCisgICAgVUlBbGVydEFjdGlvbiogY2FuY2VsQWN0aW9uID0gW1VJQWxl
cnRBY3Rpb24gYWN0aW9uV2l0aFRpdGxlOkAiU3RheSBpbiBGdWxsc2NyZWVuIiBzdHlsZTpVSUFs
ZXJ0QWN0aW9uU3R5bGVDYW5jZWwgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsK
KyAgICAgICAgX3NlY2hldXJpc3RpYy5yZXNldCgpOworICAgIH1dOworCisgICAgW2FsZXJ0IGFk
ZEFjdGlvbjpkZWZhdWx0QWN0aW9uXTsKKyAgICBbYWxlcnQgYWRkQWN0aW9uOmNhbmNlbEFjdGlv
bl07CisgICAgW3NlbGYgcHJlc2VudFZpZXdDb250cm9sbGVyOmFsZXJ0IGFuaW1hdGVkOllFUyBj
b21wbGV0aW9uOm5pbF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcklPUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiZWYyYTEyODhiZTZmY2Q0NmE0MGFiYTE3MWVlZDA4
MDMwOTNhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JN
KElPUykKKworI2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmcuaD4K
KworQGNsYXNzIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3OworQGNsYXNzIFdLV2Vi
VmlldzsKKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIDogTlNPYmpl
Y3QgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGU+CitAcHJvcGVydHkgKHJl
YWRvbmx5LCByZXRhaW4sIG5vbmF0b21pYykgV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZp
ZXcgKndlYlZpZXdQbGFjZWhvbGRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGFzc2lnbiwgbm9u
YXRvbWljKSBCT09MIGlzRnVsbFNjcmVlbjsKKworLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3OworLSAodm9pZCllbnRlckZ1bGxTY3JlZW47CistICh2b2lkKWJlZ2Fu
RW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5h
bEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZTsKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsU2NyZWVu
OworLSAodm9pZClleGl0RnVsbFNjcmVlbjsKKy0gKHZvaWQpYmVnYW5FeGl0RnVsbFNjcmVlbldp
dGhJbml0aWFsRnJhbWU6KENHUmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZp
bmFsRnJhbWU7CistICh2b2lkKWNsb3NlOworLSAodm9pZCl3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1
cGVydmlld1doaWxlSW5GdWxsc2NyZWVuOworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZTsKKworQGVuZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVySU9TLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkYzQyNjJkNTk1N2MzMzNiZTYyZTk2NjRl
ZTM0YjdmMmVjMGEzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCkBAIC0w
LDAgKzEsODY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFU
Rk9STShJT1MpICYmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbXBvcnQgIldLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJJT1MuaCIKKworI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQg
IldLRnVsbHNjcmVlblN0YWNrVmlldy5oIgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuVmlld0NvbnRy
b2xsZXIuaCIKKyNpbXBvcnQgIldLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisjaW1wb3J0IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5o
PgorI2ltcG9ydCA8U2VjdXJpdHkvU2VjVHJ1c3QuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmlzdWFs
RWZmZWN0Vmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVOU1VSTEV4dHJhcy5oPgorI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4K
KyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGlua1ByZXNlbnRhdGlvblNQSS5oPgorI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9OU1N0cmluZ1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFy
dHpDb3JlU1BJLmg+CisjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi9z
cGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9O
QUwoTGlua1ByZXNlbnRhdGlvbikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lk
IHJlcGxhY2VWaWV3V2l0aFZpZXcoVUlWaWV3ICp2aWV3LCBVSVZpZXcgKm90aGVyVmlldykKK3sK
KyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKKyAgICBbb3RoZXJWaWV3IHNldEZyYW1lOlt2aWV3IGZyYW1lXV07Cisg
ICAgW290aGVyVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOlt2aWV3IGF1dG9yZXNpemluZ01hc2td
XTsKKyAgICBbW3ZpZXcgc3VwZXJ2aWV3XSBpbnNlcnRTdWJ2aWV3Om90aGVyVmlldyBhYm92ZVN1
YnZpZXc6dmlld107CisgICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW0NBVHJh
bnNhY3Rpb24gY29tbWl0XTsKK30KKworZW51bSBGdWxsU2NyZWVuU3RhdGUgOiBOU0ludGVnZXIg
eworICAgIE5vdEluRnVsbFNjcmVlbiwKKyAgICBXYWl0aW5nVG9FbnRlckZ1bGxTY3JlZW4sCisg
ICAgRW50ZXJpbmdGdWxsU2NyZWVuLAorICAgIEluRnVsbFNjcmVlbiwKKyAgICBXYWl0aW5nVG9F
eGl0RnVsbFNjcmVlbiwKKyAgICBFeGl0aW5nRnVsbFNjcmVlbiwKK307CisKK3N0cnVjdCBXS1dl
YlZpZXdTdGF0ZSB7CisgICAgZmxvYXQgX3NhdmVkVG9wQ29udGVudEluc2V0ID0gMC4wOworICAg
IENHRmxvYXQgX3NhdmVkUGFnZVNjYWxlID0gMTsKKyAgICBDR0Zsb2F0IF9zYXZlZFZpZXdTY2Fs
ZSA9IDEuMDsKKyAgICBDR0Zsb2F0IF9zYXZlZFpvb21TY2FsZSA9IDE7CisgICAgVUlFZGdlSW5z
ZXRzIF9zYXZlZEVkZ2VJbnNldCA9IFVJRWRnZUluc2V0c1plcm87CisgICAgVUlFZGdlSW5zZXRz
IF9zYXZlZE9ic2N1cmVkSW5zZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBVSUVkZ2VJbnNl
dHMgX3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBD
R1BvaW50IF9zYXZlZENvbnRlbnRPZmZzZXQgPSBDR1BvaW50WmVybzsKKworICAgIHZvaWQgYXBw
bHlUbyhXS1dlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBbd2ViVmlldyBfc2V0UGFn
ZVNjYWxlOl9zYXZlZFBhZ2VTY2FsZSB3aXRoT3JpZ2luOkNHUG9pbnRNYWtlKDAsIDApXTsKKyAg
ICAgICAgW3dlYlZpZXcgX3NldE9ic2N1cmVkSW5zZXRzOl9zYXZlZE9ic2N1cmVkSW5zZXRzXTsK
KyAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldENvbnRlbnRJbnNldDpfc2F2ZWRFZGdl
SW5zZXRdOworICAgICAgICBbW3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Q29udGVudE9mZnNldDpf
c2F2ZWRDb250ZW50T2Zmc2V0XTsKKyAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldFNj
cm9sbEluZGljYXRvckluc2V0czpfc2F2ZWRTY3JvbGxJbmRpY2F0b3JJbnNldHNdOworICAgICAg
ICBbd2ViVmlldyBfcGFnZV0tPnNldFRvcENvbnRlbnRJbnNldChfc2F2ZWRUb3BDb250ZW50SW5z
ZXQpOworICAgICAgICBbd2ViVmlldyBfc2V0Vmlld1NjYWxlOl9zYXZlZFZpZXdTY2FsZV07Cisg
ICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRab29tU2NhbGU6X3NhdmVkWm9vbVNjYWxl
XTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdG9yZShXS1dlYlZpZXcqIHdlYlZpZXcpCisgICAg
eworICAgICAgICBfc2F2ZWRQYWdlU2NhbGUgPSBbd2ViVmlldyBfcGFnZVNjYWxlXTsKKyAgICAg
ICAgX3NhdmVkT2JzY3VyZWRJbnNldHMgPSBbd2ViVmlldyBfb2JzY3VyZWRJbnNldHNdOworICAg
ICAgICBfc2F2ZWRFZGdlSW5zZXQgPSBbW3dlYlZpZXcgc2Nyb2xsVmlld10gY29udGVudEluc2V0
XTsKKyAgICAgICAgX3NhdmVkQ29udGVudE9mZnNldCA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBj
b250ZW50T2Zmc2V0XTsKKyAgICAgICAgX3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRzID0gW1t3
ZWJWaWV3IHNjcm9sbFZpZXddIHNjcm9sbEluZGljYXRvckluc2V0c107CisgICAgICAgIF9zYXZl
ZFRvcENvbnRlbnRJbnNldCA9IFt3ZWJWaWV3IF9wYWdlXS0+dG9wQ29udGVudEluc2V0KCk7Cisg
ICAgICAgIF9zYXZlZFZpZXdTY2FsZSA9IFt3ZWJWaWV3IF92aWV3U2NhbGVdOworICAgICAgICBf
c2F2ZWRab29tU2NhbGUgPSBbW3dlYlZpZXcgc2Nyb2xsVmlld10gem9vbVNjYWxlXTsKKyAgICB9
Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNwcmFnbWEgbWFyayAtCisKK0Bp
bnRlcmZhY2UgV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZp
ZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nLCBVSVZpZXdDb250cm9sbGVySW50ZXJh
Y3RpdmVUcmFuc2l0aW9uaW5nPgorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3
Q29udHJvbGxlciogdmlld0NvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0
IGluaXRpYWxGcmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZmluYWxGcmFtZTsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNBbmltYXRpbmdJbikgQk9PTCBhbmltYXRp
bmdJbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRy
b2xsZXIgeworICAgIENHUmVjdCBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzOworICAgIENHUmVjdCBf
ZmluYWxNYXNrVmlld0JvdW5kczsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBfaW5pdGlhbEFuaW1h
dGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX2ZpbmFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybTsKKyAgICBDR1BvaW50IF9pbml0aWFsTWFza1ZpZXdDZW50ZXI7CisgICAg
Q0dQb2ludCBfZmluYWxNYXNrVmlld0NlbnRlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfbWFz
a1ZpZXc7CisgICAgUmV0YWluUHRyPFVJVmlldz4gX2FuaW1hdGluZ1ZpZXc7CisgICAgUmV0YWlu
UHRyPGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0Owor
ICAgIENHRmxvYXQgX2luaXRpYWxCYWNrZ3JvdW5kQWxwaGE7CisgICAgQ0dGbG9hdCBfZmluYWxC
YWNrZ3JvdW5kQWxwaGE7Cit9CisKKy0gKE5TVGltZUludGVydmFsKXRyYW5zaXRpb25EdXJhdGlv
bjooaWQ8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0aW9uQ29u
dGV4dAoreworICAgIGNvbnN0IE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gMC4y
OworICAgIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjsKK30KKworLSAodm9pZCljb25maWd1cmVJ
bml0aWFsQW5kRmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29u
dGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQgPSB0
cmFuc2l0aW9uQ29udGV4dDsKKyAgICBVSVZpZXcgKmZyb21WaWV3ID0gW3RyYW5zaXRpb25Db250
ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dEZyb21WaWV3S2V5XTsKKyAgICBVSVZp
ZXcgKnRvVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCB2aWV3Rm9yS2V5OlVJVHJhbnNpdGlvbkNv
bnRleHRUb1ZpZXdLZXldOworCisgICAgQ0dSZWN0IGlubGluZUZyYW1lID0gX2FuaW1hdGluZ0lu
ID8gX2luaXRpYWxGcmFtZSA6IF9maW5hbEZyYW1lOworICAgIENHUmVjdCBmdWxsc2NyZWVuRnJh
bWUgPSBfYW5pbWF0aW5nSW4gPyBfZmluYWxGcmFtZSA6IF9pbml0aWFsRnJhbWU7CisgICAgX2Fu
aW1hdGluZ1ZpZXcgPSBfYW5pbWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsKKworICAgIENH
UmVjdCBib3VuZHNSZWN0ID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KEZs
b2F0UmVjdChpbmxpbmVGcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGZ1bGxzY3JlZW5GcmFt
ZSk7CisgICAgYm91bmRzUmVjdC5vcmlnaW4gPSBDR1BvaW50WmVybzsKKworICAgIF9pbml0aWFs
TWFza1ZpZXdCb3VuZHMgPSBfYW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0IDogW19hbmltYXRpbmdW
aWV3IGJvdW5kc107CisgICAgX2luaXRpYWxNYXNrVmlld0NlbnRlciA9IENHUG9pbnRNYWtlKENH
UmVjdEdldE1pZFgoW19hbmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFtfYW5p
bWF0aW5nVmlldyBib3VuZHNdKSk7CisgICAgX2ZpbmFsTWFza1ZpZXdCb3VuZHMgPSBfYW5pbWF0
aW5nSW4gPyBbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSA6IGJvdW5kc1JlY3Q7CisgICAgX2ZpbmFs
TWFza1ZpZXdDZW50ZXIgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFtfYW5pbWF0aW5nVmll
dyBib3VuZHNdKSwgQ0dSZWN0R2V0TWlkWShbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpOworCisg
ICAgRmxvYXRSZWN0IHNjYWxlUmVjdCA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3Vu
ZFJlY3QoRmxvYXRSZWN0KGZ1bGxzY3JlZW5GcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGlu
bGluZUZyYW1lKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBzY2FsZVRyYW5zZm9ybSA9IENHQWZm
aW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlUmVjdC53aWR0aCgpIC8gZnVsbHNjcmVlbkZyYW1l
LnNpemUud2lkdGgsIHNjYWxlUmVjdC5oZWlnaHQoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLmhl
aWdodCk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRlVHJhbnNmb3JtID0gQ0dBZmZp
bmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oQ0dSZWN0R2V0TWlkWChpbmxpbmVGcmFtZSkgLSBD
R1JlY3RHZXRNaWRYKGZ1bGxzY3JlZW5GcmFtZSksIENHUmVjdEdldE1pZFkoaW5saW5lRnJhbWUp
IC0gQ0dSZWN0R2V0TWlkWShmdWxsc2NyZWVuRnJhbWUpKTsKKworICAgIENHQWZmaW5lVHJhbnNm
b3JtIGZpbmFsVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2NhbGVUcmFuc2Zv
cm0sIHRyYW5zbGF0ZVRyYW5zZm9ybSk7CisgICAgX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtID0gX2FuaW1hdGluZ0luID8gZmluYWxUcmFuc2Zvcm0gOiBDR0FmZmluZVRyYW5zZm9ybUlk
ZW50aXR5OworICAgIF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0gPSBfYW5pbWF0aW5nSW4g
PyBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5IDogZmluYWxUcmFuc2Zvcm07CisKKyAgICBfaW5p
dGlhbEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDAgOiAxOworICAgIF9maW5hbEJh
Y2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDEgOiAwOworfQorCistICh2b2lkKWFuaW1h
dGVUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRy
YW5zaXRpb25Db250ZXh0Cit7CisgICAgW3NlbGYgY29uZmlndXJlSW5pdGlhbEFuZEZpbmFsU3Rh
dGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dF07CisKKyAgICBfbWFza1ZpZXcgPSBh
ZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3Jv
dW5kQ29sb3I6W1VJQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRz
Ol9pbml0aWFsTWFza1ZpZXdCb3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0
aWFsTWFza1ZpZXdDZW50ZXJdOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFz
a1ZpZXcuZ2V0KCldOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtXTsKKyAgICAKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcg
PSBbdHJhbnNpdGlvbkNvbnRleHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcg
YWRkU3VidmlldzpfYW5pbWF0aW5nVmlldy5nZXQoKV07CisKKyAgICBVSVdpbmRvdyAqd2luZG93
ID0gY29udGFpbmVyVmlldy53aW5kb3c7CisgICAgd2luZG93LmJhY2tncm91bmRDb2xvciA9IFtV
SUNvbG9yIGNvbG9yV2l0aFdoaXRlOjAgYWxwaGE6X2luaXRpYWxCYWNrZ3JvdW5kQWxwaGFdOwor
CisgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlv
bjp0cmFuc2l0aW9uQ29udGV4dF0gZGVsYXk6MCBvcHRpb25zOlVJVmlld0FuaW1hdGlvbk9wdGlv
bkN1cnZlRWFzZUluT3V0IGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBl
cmNlbnQ6MV07CisgICAgfSBjb21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCkgeworICAgICAgICBb
c2VsZiBhbmltYXRpb25FbmRlZDohW3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRpb25XYXNDYW5j
ZWxsZWRdXTsKKyAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjoh
W3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRpb25XYXNDYW5jZWxsZWRdXTsKKyAgICB9XTsKK30K
KworLSAodm9pZClhbmltYXRpb25FbmRlZDooQk9PTCl0cmFuc2l0aW9uQ29tcGxldGVkCit7Cisg
ICAgaWYgKChbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiAhdHJhbnNpdGlvbkNvbXBsZXRlZCkgfHwg
KCFbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiB0cmFuc2l0aW9uQ29tcGxldGVkKSkKKyAgICAgICAg
W19hbmltYXRpbmdWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW19hbmltYXRpbmdW
aWV3IHNldE1hc2tWaWV3Om5pbF07CisgICAgX21hc2tWaWV3ID0gbmlsOworICAgIF9hbmltYXRp
bmdWaWV3ID0gbmlsOworfQorCistICh2b2lkKXN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOihp
ZCA8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0aW9uQ29udGV4
dAoreworICAgIFtzZWxmIGNvbmZpZ3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0ZvclRyYW5zaXRp
b246dHJhbnNpdGlvbkNvbnRleHRdOworCisgICAgX21hc2tWaWV3ID0gYWRvcHROUyhbW1VJVmll
dyBhbGxvY10gaW5pdF0pOworICAgIFtfbWFza1ZpZXcgc2V0QmFja2dyb3VuZENvbG9yOltVSUNv
bG9yIGJsYWNrQ29sb3JdXTsKKyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpfaW5pdGlhbE1hc2tW
aWV3Qm91bmRzXTsKKyAgICBbX21hc2tWaWV3IHNldENlbnRlcjpfaW5pdGlhbE1hc2tWaWV3Q2Vu
dGVyXTsKKyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6X21hc2tWaWV3LmdldCgpXTsK
KyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0VHJhbnNmb3JtOl9pbml0aWFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybV07CisKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcgPSBbdHJhbnNpdGlvbkNvbnRl
eHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcgYWRkU3VidmlldzpfYW5pbWF0
aW5nVmlldy5nZXQoKV07Cit9CisKKy0gKHZvaWQpdXBkYXRlV2l0aFBlcmNlbnQ6KENHRmxvYXQp
cGVyY2VudAoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIHBlcmNlbnRUcmFuc2Zvcm0gPSBfaW5p
dGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgcGVyY2VudFRyYW5zZm9ybS5hICs9IHBl
cmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hIC0gX2luaXRpYWxBbmltYXRp
bmdWaWV3VHJhbnNmb3JtLmEpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYiArPSBwZXJjZW50ICog
KF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybS5iKTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmMgKz0gcGVyY2VudCAqIChfZmluYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLmMgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0u
Yyk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5kICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS5kIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQpOworICAg
IHBlcmNlbnRUcmFuc2Zvcm0udHggKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJh
bnNmb3JtLnR4IC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4KTsKKyAgICBwZXJj
ZW50VHJhbnNmb3JtLnR5ICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9y
bS50eSAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS50eSk7CisgICAgW19hbmltYXRp
bmdWaWV3IHNldFRyYW5zZm9ybTpwZXJjZW50VHJhbnNmb3JtXTsKKworICAgIENHUmVjdCBwZXJj
ZW50Qm91bmRzID0gX2luaXRpYWxNYXNrVmlld0JvdW5kczsKKyAgICBwZXJjZW50Qm91bmRzLm9y
aWdpbi54ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnggLSBfaW5p
dGlhbE1hc2tWaWV3Qm91bmRzLm9yaWdpbi54KTsKKyAgICBwZXJjZW50Qm91bmRzLm9yaWdpbi55
ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnkgLSBfaW5pdGlhbE1h
c2tWaWV3Qm91bmRzLm9yaWdpbi55KTsKKyAgICBwZXJjZW50Qm91bmRzLnNpemUud2lkdGggKz0g
cGVyY2VudCAqIChfZmluYWxNYXNrVmlld0JvdW5kcy5zaXplLndpZHRoIC0gX2luaXRpYWxNYXNr
Vmlld0JvdW5kcy5zaXplLndpZHRoKTsKKyAgICBwZXJjZW50Qm91bmRzLnNpemUuaGVpZ2h0ICs9
IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQgLSBfaW5pdGlhbE1h
c2tWaWV3Qm91bmRzLnNpemUuaGVpZ2h0KTsKKyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpwZXJj
ZW50Qm91bmRzXTsKKworICAgIENHUG9pbnQgcGVyY2VudENlbnRlciA9IF9pbml0aWFsTWFza1Zp
ZXdDZW50ZXI7CisgICAgcGVyY2VudENlbnRlci54ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1Zp
ZXdDZW50ZXIueCAtIF9maW5hbE1hc2tWaWV3Q2VudGVyLngpOworICAgIHBlcmNlbnRDZW50ZXIu
eSArPSBwZXJjZW50ICogKF9maW5hbE1hc2tWaWV3Q2VudGVyLnkgLSBfZmluYWxNYXNrVmlld0Nl
bnRlci55KTsKKyAgICBbX21hc2tWaWV3IHNldENlbnRlcjpwZXJjZW50Q2VudGVyXTsKKworICAg
IFVJV2luZG93ICp3aW5kb3cgPSBbX2FuaW1hdGluZ1ZpZXcgd2luZG93XTsKKyAgICB3aW5kb3cu
YmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlh
bEJhY2tncm91bmRBbHBoYSArIHBlcmNlbnQgKiAoX2ZpbmFsQmFja2dyb3VuZEFscGhhIC0gX2lu
aXRpYWxCYWNrZ3JvdW5kQWxwaGEpXTsKK30KKworLSAodm9pZCl1cGRhdGVXaXRoUGVyY2VudDoo
Q0dGbG9hdClwZXJjZW50IHRyYW5zbGF0aW9uOihDR1NpemUpdHJhbnNsYXRpb24gYW5jaG9yOihD
R1BvaW50KWFuY2hvcgoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIHBlcmNlbnRUcmFuc2Zvcm0g
PSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgcGVyY2VudFRyYW5zZm9ybS5h
ICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hIC0gX2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLmEpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYiArPSBwZXJj
ZW50ICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS5iKTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmMgKz0gcGVyY2VudCAqIChf
ZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmMgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFu
c2Zvcm0uYyk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5kICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5p
bWF0aW5nVmlld1RyYW5zZm9ybS5kIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQp
OworICAgIHBlcmNlbnRUcmFuc2Zvcm0udHggKz0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtLnR4ICsgdHJhbnNsYXRpb24ud2lkdGg7CisgICAgcGVyY2VudFRyYW5zZm9ybS50eSArPSBf
aW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHkgKyB0cmFuc2xhdGlvbi5oZWlnaHQ7Cisg
ICAgW19hbmltYXRpbmdWaWV3IHNldFRyYW5zZm9ybTpwZXJjZW50VHJhbnNmb3JtXTsKKworICAg
IFVJV2luZG93ICp3aW5kb3cgPSBbX2FuaW1hdGluZ1ZpZXcgd2luZG93XTsKKyAgICB3aW5kb3cu
YmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlh
bEJhY2tncm91bmRBbHBoYSArIHBlcmNlbnQgKiAoX2ZpbmFsQmFja2dyb3VuZEFscGhhIC0gX2lu
aXRpYWxCYWNrZ3JvdW5kQWxwaGEpXTsKK30KKworLSh2b2lkKWVuZDooQk9PTCljYW5jZWxsZWQg
eworICAgIGlmIChjYW5jZWxsZWQpIHsKKyAgICAgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0
aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlvbjpfY29udGV4dC5nZXQoKV0gYW5pbWF0aW9uczpe
eworICAgICAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBlcmNlbnQ6MF07CisgICAgICAgIH0gY29t
cGxldGlvbjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAgICAgICAgIFtfY29udGV4dCBjYW5jZWxJ
bnRlcmFjdGl2ZVRyYW5zaXRpb25dOworICAgICAgICAgICAgW19jb250ZXh0IGNvbXBsZXRlVHJh
bnNpdGlvbjpOT107CisgICAgICAgIH1dOworICAgIH0gZWxzZSB7CisgICAgICAgIFtVSVZpZXcg
YW5pbWF0ZVdpdGhEdXJhdGlvbjpbc2VsZiB0cmFuc2l0aW9uRHVyYXRpb246X2NvbnRleHQuZ2V0
KCldIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZVdpdGhQZXJjZW50OjFd
OworICAgICAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgICAgICBb
X2NvbnRleHQgZmluaXNoSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgICAgIFtfY29u
dGV4dCBjb21wbGV0ZVRyYW5zaXRpb246WUVTXTsKKyAgICAgICAgfV07CisgICAgfQorfQorCitA
ZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuSW50ZXJhY3Rp
dmVUcmFuc2l0aW9uIDogTlNPYmplY3Q8VUlWaWV3Q29udHJvbGxlckludGVyYWN0aXZlVHJhbnNp
dGlvbmluZz4KKy0gKGlkKWluaXRXaXRoQW5pbWF0b3I6KFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNv
bnRyb2xsZXIgKilhbmltYXRvciBhbmNob3I6KENHUG9pbnQpcG9pbnQ7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24geworICAgIFJldGFp
blB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyPiBfYW5pbWF0b3I7CisgICAgUmV0
YWluUHRyPGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0
OworICAgIENHUG9pbnQgX2FuY2hvcjsKK30KKworLSAoaWQpaW5pdFdpdGhBbmltYXRvcjooV0tG
dWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciAqKWFuaW1hdG9yIGFuY2hvcjooQ0dQb2ludClw
b2ludAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgX2FuaW1hdG9yID0gYW5pbWF0b3I7CisgICAgX2FuY2hvciA9
IHBvaW50OworICAgIHJldHVybiBzZWxmOworfQorCistIChCT09MKXdhbnRzSW50ZXJhY3RpdmVT
dGFydAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpc3RhcnRJbnRlcmFjdGl2ZVRy
YW5zaXRpb246KGlkIDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5z
aXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQgPSB0cmFuc2l0aW9uQ29udGV4dDsKKyAgICBb
X2FuaW1hdG9yIHN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOnRyYW5zaXRpb25Db250ZXh0XTsK
K30KKworLSAodm9pZCl1cGRhdGVJbnRlcmFjdGl2ZVRyYW5zaXRpb246KENHRmxvYXQpcGVyY2Vu
dENvbXBsZXRlIHdpdGhUcmFuc2xhdGlvbjooQ0dTaXplKXRyYW5zbGF0aW9uCit7CisgICAgW19h
bmltYXRvciB1cGRhdGVXaXRoUGVyY2VudDpwZXJjZW50Q29tcGxldGUgdHJhbnNsYXRpb246dHJh
bnNsYXRpb24gYW5jaG9yOl9hbmNob3JdOworICAgIFtfY29udGV4dCB1cGRhdGVJbnRlcmFjdGl2
ZVRyYW5zaXRpb246cGVyY2VudENvbXBsZXRlXTsKK30KKworLSAodm9pZCljYW5jZWxJbnRlcmFj
dGl2ZVRyYW5zaXRpb24KK3sKKyAgICBbX2FuaW1hdG9yIGVuZDpZRVNdOworfQorCistICh2b2lk
KWZpbmlzaEludGVyYWN0aXZlVHJhbnNpdGlvbgoreworICAgIFtfYW5pbWF0b3IgZW5kOk5PXTsK
K30KK0BlbmQKKworI3ByYWdtYSBtYXJrIC0KKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyICgpIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGU+CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKKyAgICBXS1dlYlZp
ZXcgKl93ZWJWaWV3OyAvLyBDYW5ub3QgYmUgcmV0YWluZWQsIHNlZSA8cmRhcjovL3Byb2JsZW0v
MTQ4ODQ2NjY+LgorICAgIFJldGFpblB0cjxVSVZpZXc+IF93ZWJWaWV3UGxhY2Vob2xkZXI7CisK
KyAgICBGdWxsU2NyZWVuU3RhdGUgX2Z1bGxTY3JlZW5TdGF0ZTsKKyAgICBXS1dlYlZpZXdTdGF0
ZSBfdmlld1N0YXRlOworCisgICAgUmV0YWluUHRyPFVJV2luZG93PiBfd2luZG93OworICAgIFJl
dGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBfcm9vdFZpZXdDb250cm9sbGVyOworCisgICAgUmVm
UHRyPFdlYktpdDo6Vm9pZENhbGxiYWNrPiBfcmVwYWludENhbGxiYWNrOworICAgIFJldGFpblB0
cjxVSVZpZXdDb250cm9sbGVyPiBfdmlld0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb247CisgICAg
UmV0YWluUHRyPFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyPiBfZnVsbHNjcmVlblZpZXdDb250
cm9sbGVyOworICAgIFJldGFpblB0cjxVSVN3aXBlR2VzdHVyZVJlY29nbml6ZXI+IF9zdGFydERp
c21pc3NHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8VUlQYW5HZXN0dXJlUmVjb2du
aXplcj4gX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0
cjxXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24+IF9pbnRlcmFjdGl2ZURpc21pc3NU
cmFuc2l0aW9uQ29vcmRpbmF0b3I7CisKKyAgICBDR1JlY3QgX2luaXRpYWxGcmFtZTsKKyAgICBD
R1JlY3QgX2ZpbmFsRnJhbWU7CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9FVk9yZ2FuaXph
dGlvbk5hbWU7CisgICAgQk9PTCBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZDsKKyAgICBCT09M
IF9pbkludGVyYWN0aXZlRGlzbWlzczsKKworICAgIFJldGFpblB0cjxpZD4gX25vdGlmaWNhdGlv
bkxpc3RlbmVyOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEluaXRpYWxpemF0
aW9uCistIChpZClpbml0V2l0aFdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBp
ZiAoIVtzdXBlciBpbml0XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfd2ViVmlldyA9IHdl
YlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
W05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsK
KyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
OnNlbGZdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgLQorI3By
YWdtYSBtYXJrIEFjY2Vzc29ycworCistIChCT09MKWlzRnVsbFNjcmVlbgoreworICAgIHJldHVy
biBfZnVsbFNjcmVlblN0YXRlID09IFdhaXRpbmdUb0VudGVyRnVsbFNjcmVlbgorICAgICAgICB8
fCBfZnVsbFNjcmVlblN0YXRlID09IEVudGVyaW5nRnVsbFNjcmVlbgorICAgICAgICB8fCBfZnVs
bFNjcmVlblN0YXRlID09IEluRnVsbFNjcmVlbjsKK30KKworLSAoV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcgKil3ZWJWaWV3UGxhY2Vob2xkZXIKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4dGVybmFsIEludGVyZmFjZQorCist
ICh2b2lkKWVudGVyRnVsbFNjcmVlbgoreworICAgIGlmIChbc2VsZiBpc0Z1bGxTY3JlZW5dKQor
ICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFt
ZV07CisKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuOwor
CisgICAgX3dpbmRvdyA9IGFkb3B0TlMoW1tVSVdpbmRvdyBhbGxvY10gaW5pdF0pOworICAgIFtf
d2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBjbGVhckNvbG9yXV07CisgICAgW193
aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbCAtIDFdOworICAgIFtfd2lu
ZG93IHNldEhpZGRlbjpOT107CisKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyID0gW1tVSVZpZXdD
b250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpLnZp
ZXcgPSBbW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6X3dpbmRvdy5nZXQoKS5ib3VuZHNd
IGF1dG9yZWxlYXNlXTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYmFja2dy
b3VuZENvbG9yID0gW1VJQ29sb3IgY2xlYXJDb2xvcl07CisgICAgX3Jvb3RWaWV3Q29udHJvbGxl
ci5nZXQoKS52aWV3LmF1dG9yZXNpemluZ01hc2sgPSAoVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGli
bGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KTsKKyAgICBbX3Jvb3RW
aWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRp
b25DdXN0b21dOworICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxl
Z2F0ZTpzZWxmXTsKKworICAgIF93aW5kb3cuZ2V0KCkucm9vdFZpZXdDb250cm9sbGVyID0gX3Jv
b3RWaWV3Q29udHJvbGxlci5nZXQoKTsKKworICAgIF9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIg
PSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzpfd2ViVmlld10pOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldE1vZGFs
UHJlc2VudGF0aW9uU3R5bGU6VUlNb2RhbFByZXNlbnRhdGlvbkN1c3RvbV07CisgICAgW19mdWxs
c2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0VHJhbnNpdGlvbmluZ0RlbGVnYXRlOnNlbGZdOworICAg
IFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uQ2FwdHVyZXNT
dGF0dXNCYXJBcHBlYXJhbmNlOllFU107CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIg
c2V0VGFyZ2V0OnNlbGZdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldEFjdGlv
bjpAc2VsZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07CisgICAgW1tfZnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOltbX3Jvb3RWaWV3Q29udHJvbGxlciB2aWV3XSBi
b3VuZHNdXTsKKyAgICBbc2VsZiBfdXBkYXRlTG9jYXRpb25JbmZvXTsKKworICAgIF9zdGFydERp
c21pc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVN3aXBlR2VzdHVyZVJlY29nbml6
ZXIgYWxsb2NdICBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3N0YXJ0VG9E
aXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6KV0pOworICAgIFtfc3RhcnREaXNtaXNzR2VzdHVyZVJl
Y29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19zdGFydERpc21pc3NHZXN0dXJlUmVj
b2duaXplciBzZXRDYW5jZWxzVG91Y2hlc0luVmlldzpZRVNdOworICAgIFtfc3RhcnREaXNtaXNz
R2VzdHVyZVJlY29nbml6ZXIgc2V0TnVtYmVyT2ZUb3VjaGVzUmVxdWlyZWQ6MV07CisgICAgW19z
dGFydERpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXREaXJlY3Rpb246VUlTd2lwZUdlc3R1cmVS
ZWNvZ25pemVyRGlyZWN0aW9uRG93bl07CisgICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVy
IHZpZXddIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9zdGFydERpc21pc3NHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CisKKyAgICBfaW50ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgPSBh
ZG9wdE5TKFtbVUlQYW5HZXN0dXJlUmVjb2duaXplciBhbGxvY10gIGluaXRXaXRoVGFyZ2V0OnNl
bGYgYWN0aW9uOkBzZWxlY3RvcihfaW50ZXJhY3RpdmVEaXNtaXNzQ2hhbmdlZDopXSk7CisgICAg
W19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsK
KyAgICBbX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHNldENhbmNlbHNUb3Vj
aGVzSW5WaWV3Ok5PXTsKKyAgICBbW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld10gYWRk
R2VzdHVyZVJlY29nbml6ZXI6X2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyLmdl
dCgpXTsKKworICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2F2ZVNjcm9sbFBvc2l0aW9uKCk7CisKKyAg
ICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKHRydWUpOwor
CisgICAgX3ZpZXdTdGF0ZS5zdG9yZShfd2ViVmlldyk7CisKKyAgICBfd2ViVmlld1BsYWNlaG9s
ZGVyID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOworICAgIFtbX3dlYlZpZXdQbGFj
ZWhvbGRlciBsYXllcl0gc2V0TmFtZTpAIkZ1bGxzY3JlZW4gUGxhY2Vob2xkZXIgVmlldyJdOwor
CisgICAgV0tTbmFwc2hvdENvbmZpZ3VyYXRpb24qIGNvbmZpZyA9IG5pbDsKKyAgICBbX3dlYlZp
ZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29uZmlnIGNvbXBsZXRpb25IYW5kbGVy
Ol4oVUlJbWFnZSAqIHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKiBlcnJvcikgeworICAgICAgICBp
ZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOworICAgICAgICAKKyAgICAgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIGxheWVy
XSBzZXRDb250ZW50czooaWQpW3NuYXBzaG90SW1hZ2UgQ0dJbWFnZV1dOworICAgICAgICByZXBs
YWNlVmlld1dpdGhWaWV3KF93ZWJWaWV3LCBfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpKTsKKwor
ICAgICAgICBXS1dlYlZpZXdTdGF0ZSgpLmFwcGx5VG8oX3dlYlZpZXcpOworICAgICAgICAKKyAg
ICAgICAgW193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOworICAgICAg
ICBbX3dlYlZpZXcgc2V0RnJhbWU6W193aW5kb3cgYm91bmRzXV07CisgICAgICAgIFtfd2luZG93
IGluc2VydFN1YnZpZXc6X3dlYlZpZXcgYXRJbmRleDowXTsKKyAgICAgICAgW193ZWJWaWV3IHNl
dE5lZWRzTGF5b3V0XTsKKyAgICAgICAgW193ZWJWaWV3IGxheW91dElmTmVlZGVkXTsKKyAgICAg
ICAgCisgICAgICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVl
KTsKKworICAgICAgICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoW3By
b3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZiksIHNlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNl
OjpFcnJvcikgeworICAgICAgICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IG51bGxwdHI7CisgICAg
ICAgICAgICBpZiAoYXV0byogbWFuYWdlciA9IFtwcm90ZWN0ZWRTZWxmIF9tYW5hZ2VyXSkKKyAg
ICAgICAgICAgICAgICBtYW5hZ2VyLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CisKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgW3NlbGYgX2V4aXRGdWxsc2Ny
ZWVuSW1tZWRpYXRlbHldOworICAgICAgICB9KTsKKyAgICAgICAgW193ZWJWaWV3IF9wYWdlXS0+
Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKKworICAgICAgICBbQ0FU
cmFuc2FjdGlvbiBjb21taXRdOworICAgIH1dOworfQorCistICh2b2lkKWJlZ2FuRW50ZXJGdWxs
U2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihD
R1JlY3QpZmluYWxGcmFtZQoreworICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IFdhaXRpbmdU
b0VudGVyRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIF9mdWxsU2NyZWVuU3RhdGUg
PSBFbnRlcmluZ0Z1bGxTY3JlZW47CisKKyAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1l
OworICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJl
Z2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworCisgICAg
W193ZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW193aW5kb3cgc2V0V2luZG93
TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbF07CisgICAgW193aW5kb3cgbWFrZUtleUFuZFZpc2li
bGVdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJI
aWRkZW46Tk9dOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNob3dVSV07CisKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgW19yb290Vmlld0NvbnRyb2xsZXIgcHJl
c2VudFZpZXdDb250cm9sbGVyOl9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0
ZWQ6WUVTIGNvbXBsZXRpb246XnsKKyAgICAgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEluRnVsbFNj
cmVlbjsKKworICAgICAgICBhdXRvKiBwYWdlID0gW193ZWJWaWV3IF9wYWdlXTsKKyAgICAgICAg
YXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXI7CisgICAgICAgIGlmIChwYWdlICYmIG1hbmFn
ZXIpIHsKKyAgICAgICAgICAgIG1hbmFnZXItPmRpZEVudGVyRnVsbFNjcmVlbigpOworICAgICAg
ICAgICAgbWFuYWdlci0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7CisgICAgICAgICAg
ICBwYWdlLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKGZhbHNlKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAgfV07Cit9CisKKy0g
KHZvaWQpcmVxdWVzdEV4aXRGdWxsU2NyZWVuCit7CisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBz
ZWxmLl9tYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOworfQorCistICh2b2lkKWV4aXRG
dWxsU2NyZWVuCit7CisgICAgaWYgKCFzZWxmLmlzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJu
OworICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBXYWl0aW5nVG9FeGl0RnVsbFNjcmVlbjsKKworICAg
IGlmIChhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdlcikgeworICAgICAgICBtYW5hZ2VyLT5z
ZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOworICAgICAgICBtYW5hZ2VyLT53aWxsRXhpdEZ1
bGxTY3JlZW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIFtzZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKK30KKworLSAo
dm9pZCliZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxG
cmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZQoreworICAgIGlmIChfZnVsbFNjcmVl
blN0YXRlICE9IFdhaXRpbmdUb0V4aXRGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAg
X2Z1bGxTY3JlZW5TdGF0ZSA9IEV4aXRpbmdGdWxsU2NyZWVuOworCisgICAgX2luaXRpYWxGcmFt
ZSA9IGluaXRpYWxGcmFtZTsKKyAgICBfZmluYWxGcmFtZSA9IGZpbmFsRnJhbWU7CisgICAgCisg
ICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyh0cnVlKTsK
KworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRk
ZW46Tk9dOworCisgICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0
b3IpIHsKKyAgICAgICAgW19pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3Ig
ZmluaXNoSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgX2ludGVyYWN0aXZlRGlzbWlz
c1RyYW5zaXRpb25Db29yZGluYXRvciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1h
dGVkOllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3Jl
ZW5dOworICAgIH1dOworfQorCistICh2b2lkKV9jb21wbGV0ZWRFeGl0RnVsbFNjcmVlbgorewor
ICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IEV4aXRpbmdGdWxsU2NyZWVuKQorICAgICAgICBy
ZXR1cm47CisgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IE5vdEluRnVsbFNjcmVlbjsKKworICAgIFtD
QVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9u
czpZRVNdOworCisgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIHN1cGVydmlld10gaW5zZXJ0U3Vi
dmlldzpfd2ViVmlldyBiZWxvd1N1YnZpZXc6X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKV07Cisg
ICAgW193ZWJWaWV3IHNldEZyYW1lOltfd2ViVmlld1BsYWNlaG9sZGVyIGZyYW1lXV07CisgICAg
W193ZWJWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6W193ZWJWaWV3UGxhY2Vob2xkZXIgYXV0b3Jl
c2l6aW5nTWFza11dOworCisgICAgW1tfd2ViVmlldyB3aW5kb3ddIG1ha2VLZXlBbmRWaXNpYmxl
XTsKKworICAgIF92aWV3U3RhdGUuYXBwbHlUbyhfd2ViVmlldyk7CisKKyAgICBbX3dlYlZpZXcg
c2V0TmVlZHNMYXlvdXRdOworICAgIFtfd2ViVmlldyBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBb
Q0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgW193aW5kb3cgc2V0SGlkZGVuOllFU107Cisg
ICAgX3dpbmRvdyA9IG5pbDsKKworICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdl
cikgeworICAgICAgICBtYW5hZ2VyLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKKyAg
ICAgICAgbWFuYWdlci0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB9CisKKyAgICBpZiAoX3Jl
cGFpbnRDYWxsYmFjaykgeworICAgICAgICBfcmVwYWludENhbGxiYWNrLT5pbnZhbGlkYXRlKFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAg
IEFTU0VSVCghX3JlcGFpbnRDYWxsYmFjayk7CisgICAgfQorCisgICAgX3JlcGFpbnRDYWxsYmFj
ayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYp
LCBzZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgX3JlcGFpbnRD
YWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgIFtfd2ViVmlld1BsYWNlaG9sZGVyIHJlbW92ZUZy
b21TdXBlcnZpZXddOworCisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2li
aWxpdHlVcGRhdGVzKGZhbHNlKTsKKyAgICB9KTsKKworICAgIGlmIChhdXRvKiBwYWdlID0gW193
ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9y
ZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKKyAgICBlbHNlCisgICAgICAgIF9yZXBhaW50Q2Fs
bGJhY2stPnBlcmZvcm1DYWxsYmFjaygpOworCisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xs
ZXIgc2V0UHJlZmVyc1N0YXR1c0JhckhpZGRlbjpZRVNdOworfQorCistICh2b2lkKWNsb3NlCit7
CisgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOworICAgIF93ZWJWaWV3ID0g
bmlsOworfQorCistICh2b2lkKXdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1
bGxzY3JlZW4KK3sKKyAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW4gJiYg
X3dlYlZpZXcud2luZG93ICE9IF93aW5kb3cuZ2V0KCkpCisgICAgICAgIFtzZWxmIF9leGl0RnVs
bHNjcmVlbkltbWVkaWF0ZWx5XTsKK30KKworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZQoreworICAgIGlmIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyKQorICAgICAgICBb
X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV07
Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRl
bGVnYXRlCisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIg
KilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0
dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6
ZXIKK3sKKyAgICByZXR1cm4gWUVTOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJr
IFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGUKKworLSAoaWQ8VUlWaWV3Q29u
dHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4pYW5pbWF0aW9uQ29udHJvbGxlckZvclByZXNl
bnRlZENvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKilwcmVzZW50ZWQgcHJlc2VudGluZ0Nv
bnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKilwcmVzZW50aW5nIHNvdXJjZUNvbnRyb2xsZXI6
KFVJVmlld0NvbnRyb2xsZXIgKilzb3VyY2UKK3sKKyAgICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVu
QW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1
bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2FuaW1hdGlv
bkNvbnRyb2xsZXIgc2V0Vmlld0NvbnRyb2xsZXI6cHJlc2VudGVkXTsKKyAgICBbYW5pbWF0aW9u
Q29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6X2luaXRpYWxGcmFtZV07CisgICAgW2FuaW1hdGlv
bkNvbnRyb2xsZXIgc2V0RmluYWxGcmFtZTpfZmluYWxGcmFtZV07CisgICAgW2FuaW1hdGlvbkNv
bnRyb2xsZXIgc2V0QW5pbWF0aW5nSW46WUVTXTsKKyAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJv
bGxlci5hdXRvcmVsZWFzZSgpOworfQorCistIChpZDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRU
cmFuc2l0aW9uaW5nPilhbmltYXRpb25Db250cm9sbGVyRm9yRGlzbWlzc2VkQ29udHJvbGxlcjoo
VUlWaWV3Q29udHJvbGxlciAqKWRpc21pc3NlZAoreworICAgIENHUmVjdCBpbml0aWFsRnJhbWUg
PSBfaW5pdGlhbEZyYW1lOworICAgIENHUmVjdCBmaW5hbEZyYW1lID0gX2ZpbmFsRnJhbWU7CisK
KyAgICAvLyBCZWNhdXNlIHdlJ3JlIG5vdCBjYWxsaW5nICJyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4o
KSIgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBpbnRlcmFjdGl2ZSBhbmltYXRpb24sCisgICAgLy8g
dGhlIF9pbml0aWFsRnJhbWUgYW5kIF9maW5hbEZyYW1lIHZhbHVlcyBhcmUgbGVmdCBvdmVyIGZy
b20gd2hlbiB3ZSBlbnRlcmVkIGZ1bGxzY3JlZW4uCisgICAgaWYgKF9pbkludGVyYWN0aXZlRGlz
bWlzcykKKyAgICAgICAgc3RkOjpzd2FwKGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7CisKKyAg
ICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFsbG9j
XSBpbml0XSk7CisgICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0Vmlld0NvbnRyb2xsZXI6ZGlz
bWlzc2VkXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6aW5pdGlh
bEZyYW1lXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRGaW5hbEZyYW1lOmZpbmFsRnJh
bWVdOworICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1hdGluZ0luOk5PXTsKKyAgICBy
ZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci5hdXRvcmVsZWFzZSgpOworfQorCistIChpZDxVSVZp
ZXdDb250cm9sbGVySW50ZXJhY3RpdmVUcmFuc2l0aW9uaW5nPilpbnRlcmFjdGlvbkNvbnRyb2xs
ZXJGb3JEaXNtaXNzYWw6KGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+
KWFuaW1hdG9yCit7CisgICAgaWYgKCFfaW5JbnRlcmFjdGl2ZURpc21pc3MpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBpZiAoIVthbmltYXRvciBpc0tpbmRPZkNsYXNzOltXS0Z1bGxzY3Jl
ZW5BbmltYXRpb25Db250cm9sbGVyIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICBpZiAoIV9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IpCisgICAgICAg
IF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgPSBhZG9wdE5TKFtbV0tG
dWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIGFsbG9jXSBpbml0V2l0aEFuaW1hdG9yOihX
S0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyICopYW5pbWF0b3IgYW5jaG9yOkNHUG9pbnRa
ZXJvXSk7CisKKyAgICByZXR1cm4gX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGlu
YXRvci5nZXQoKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJbnRlcm5hbCBJ
bnRlcmZhY2UKKworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseQoreworICAgIGlm
ICghW3NlbGYgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogbWFu
YWdlciA9IHNlbGYuX21hbmFnZXI7CisgICAgaWYgKG1hbmFnZXIpCisgICAgICAgIG1hbmFnZXIt
PnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworICAgIFtzZWxmIGV4aXRGdWxsU2NyZWVuXTsKKyAg
ICBfZnVsbFNjcmVlblN0YXRlID0gRXhpdGluZ0Z1bGxTY3JlZW47CisgICAgW3NlbGYgX2NvbXBs
ZXRlZEV4aXRGdWxsU2NyZWVuXTsKKyAgICByZXBsYWNlVmlld1dpdGhWaWV3KF93ZWJWaWV3UGxh
Y2Vob2xkZXIuZ2V0KCksIF93ZWJWaWV3KTsKKyAgICBpZiAoYXV0byogcGFnZSA9IFtfd2ViVmll
dyBfcGFnZV0pCisgICAgICAgIHBhZ2UtPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFs
c2UpOworICAgIGlmIChtYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPmRpZEV4aXRGdWxsU2Ny
ZWVuKCk7CisgICAgICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwor
ICAgIH0KKyAgICBfd2ViVmlld1BsYWNlaG9sZGVyID0gbmlsOworfQorCistICh2b2lkKV9pbnZh
bGlkYXRlRVZPcmdhbml6YXRpb25OYW1lCit7CisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IG5p
bDsKKyAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IE5POworfQorCistIChCT09MKV9p
c1NlY3VyZQoreworICAgIHJldHVybiBfd2ViVmlldy5oYXNPbmx5U2VjdXJlQ29udGVudDsKK30K
KworLSAoU2VjVHJ1c3RSZWYpX3NlcnZlclRydXN0Cit7CisgICAgcmV0dXJuIF93ZWJWaWV3LnNl
cnZlclRydXN0OworfQorCistIChOU1N0cmluZyAqKV9FVk9yZ2FuaXphdGlvbk5hbWUKK3sKKyAg
ICBpZiAoIXNlbGYuX2lzU2VjdXJlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKF9F
Vk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkKQorICAgICAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9u
TmFtZS5nZXQoKTsKKworICAgIEFTU0VSVCghX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKSk7Cisg
ICAgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQgPSBZRVM7CisKKyAgICBTZWNUcnVzdFJlZiB0
cnVzdCA9IFtzZWxmIF9zZXJ2ZXJUcnVzdF07CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIE5TRGljdGlvbmFyeSAqaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdl
IE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKKyAg
ICAvLyBJZiBTZWNUcnVzdENvcHlJbmZvIHJldHVybmVkIE5VTEwgdGhlbiBpdCdzIGxpa2VseSB0
aGF0IHRoZSBTZWNUcnVzdFJlZiBoYXMgbm90IGJlZW4gZXZhbHVhdGVkCisgICAgLy8gYW5kIHRo
ZSBvbmx5IHdheSB0byBnZXQgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgaXMgdG8gY2FsbCBTZWNU
cnVzdEV2YWx1YXRlIG91cnNlbHZlcy4KKyAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KSB7CisgICAg
ICAgIE9TU3RhdHVzIGVyciA9IFNlY1RydXN0RXZhbHVhdGUodHJ1c3QsIE5VTEwpOworICAgICAg
ICBpZiAoZXJyID09IG5vRXJyKQorICAgICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJp
ZGdlIE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgaWYgKCFpbmZvRGljdGlvbmFyeSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlk
IGFnYWluc3Qgb3VyIGNlcnRpZmljYXRlIGNoYWluLgorICAgIGlkIGhhc0VWID0gW2luZm9EaWN0
aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0
ZW5kZWRWYWxpZGF0aW9uS2V5XTsKKyAgICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1Zh
bHVlIGNsYXNzXV0gfHwgIVtoYXNFViBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZl
ciBhbmQgaXQgaXMgc3RpbGwgdmFsaWQuCisgICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0
aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2
b2NhdGlvbktleV07CisgICAgaWYgKCFbaXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFs
dWUgY2xhc3NdXSB8fCAhW2lzTm90UmV2b2tlZCBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RG
b3JLZXk6KF9fYnJpZGdlIE5TU3RyaW5nICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsK
KyAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKK30KKworLSAodm9pZClfdXBk
YXRlTG9jYXRpb25JbmZvCit7CisgICAgTlNVUkwqIHVybCA9IF93ZWJWaWV3Ll9jb21taXR0ZWRV
Ukw7CisKKyAgICBOU1N0cmluZyAqRVZPcmdhbml6YXRpb25OYW1lID0gW3NlbGYgX0VWT3JnYW5p
emF0aW9uTmFtZV07CisgICAgQk9PTCBzaG93c0VWT3JnYW5pemF0aW9uTmFtZSA9IFtFVk9yZ2Fu
aXphdGlvbk5hbWUgbGVuZ3RoXSA+IDA7CisKKyAgICBOU1N0cmluZyAqZG9tYWluID0gbmlsOwor
CisgICAgaWYgKExpbmtQcmVzZW50YXRpb25MaWJyYXJ5KCkpCisgICAgICAgIGRvbWFpbiA9IFt1
cmwgX2xwX3NpbXBsaWZpZWREaXNwbGF5U3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIGRvbWFp
biA9IHVzZXJWaXNpYmxlU3RyaW5nKHVybCk7CisKKyAgICBOU1N0cmluZyAqdGV4dCA9IG5pbDsK
KyAgICBpZiAoW1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiZGF0YSJdID09
IE5TT3JkZXJlZFNhbWUpCisgICAgICAgIHRleHQgPSBAImRhdGE6IjsKKyAgICBlbHNlIGlmIChz
aG93c0VWT3JnYW5pemF0aW9uTmFtZSkKKyAgICAgICAgdGV4dCA9IEVWT3JnYW5pemF0aW9uTmFt
ZTsKKyAgICBlbHNlCisgICAgICAgIHRleHQgPSBkb21haW47CisKKyAgICBbX2Z1bGxzY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRMb2NhdGlvbjp0ZXh0XTsKK30KKworLSAoV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBbX3dlYlZpZXcgX3BhZ2VdLT5mdWxsU2Ny
ZWVuTWFuYWdlcigpOworfQorCistICh2b2lkKV9zdGFydFRvRGlzbWlzc0Z1bGxzY3JlZW5DaGFu
Z2VkOihpZClzZW5kZXIKK3sKKyAgICBfaW5JbnRlcmFjdGl2ZURpc21pc3MgPSB0cnVlOworICAg
IFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVk
OllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5d
OworICAgICAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3RhdHVzQmFy
SGlkZGVuOllFU107CisgICAgfV07Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0aXZlRGlzbWlzc0No
YW5nZWQ6KGlkKXNlbmRlcgoreworICAgIGlmICghX2luSW50ZXJhY3RpdmVEaXNtaXNzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR1BvaW50IHRyYW5zbGF0aW9uID0gW19pbnRlcmFjdGl2ZURp
c21pc3NHZXN0dXJlUmVjb2duaXplciB0cmFuc2xhdGlvbkluVmlldzpfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyLmdldCgpLnZpZXddOworICAgIENHUG9pbnQgdmVsb2NpdHkgPSBbX2ludGVyYWN0
aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHZlbG9jaXR5SW5WaWV3Ol9mdWxsc2NyZWVuVmll
d0NvbnRyb2xsZXIuZ2V0KCkudmlld107CisgICAgQ0dGbG9hdCBwZXJjZW50ID0gdHJhbnNsYXRp
b24ueSAvIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYm91bmRzLnNpemUu
aGVpZ2h0IC8gMik7CisgICAgcGVyY2VudCA9IHN0ZDo6bWluKDEuLCBzdGQ6Om1heCgwLiwgcGVy
Y2VudCkpOworCisgICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplci5n
ZXQoKS5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCkgeworICAgICAgICBf
aW5JbnRlcmFjdGl2ZURpc21pc3MgPSBmYWxzZTsKKworICAgICAgICBpZiAocGVyY2VudCA+IDAu
MjUgfHwgKHBlcmNlbnQgPiAwICYmIHZlbG9jaXR5LnkgPiA1KSkKKyAgICAgICAgICAgIFtzZWxm
IHJlcXVlc3RFeGl0RnVsbFNjcmVlbl07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgW19p
bnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgY2FuY2VsSW50ZXJhY3RpdmVU
cmFuc2l0aW9uXTsKKyAgICAgICAgICAgIF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29v
cmRpbmF0b3IgPSBuaWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFtfaW50ZXJhY3RpdmVEaXNtaXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9yIHVwZGF0ZUludGVyYWN0
aXZlVHJhbnNpdGlvbjpwZXJjZW50IHdpdGhUcmFuc2xhdGlvbjpDR1NpemVNYWtlKHRyYW5zbGF0
aW9uLngsIHRyYW5zbGF0aW9uLnkpXTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKSAmJiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmZDJhZjY3NTNmNGViNWQwZTM4ZTI1NzUwZmRkMmRlMDdhNDgzNGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9X
S0Z1bGxzY3JlZW5TdGFja1ZpZXcuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykK
KworI2ltcG9ydCA8VUlLaXQvVUlWaWV3Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisK
K0BpbnRlcmZhY2UgV0tGdWxsc2NyZWVuU3RhY2tWaWV3IDogVUlWaWV3CisrICh2b2lkKWFwcGx5
UHJpbWFyeUdseXBoVGludFRvVmlldzooVUlWaWV3ICopdmlldzsKKysgKHZvaWQpYXBwbHlTZWNv
bmRhcnlHbHlwaFRpbnRUb1ZpZXc6KFVJVmlldyAqKXZpZXc7CisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+ICopYXJyYW5nZWRTdWJ2
aWV3cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXM7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgcmV0YWluLCBudWxsYWJsZSkgVUlWaWV3ICp0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0
ZXJpYWxPdmVybGF5OworQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKmNv
bnRlbnRWaWV3OworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYTExYjVhMjcwMzgzOTg3NGJhMjZlNGY4N2JkMDc3MDlm
MDMwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVs
bHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0KQEAgLTAsMCArMSwyMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
ICYmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCIKKwor
I2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FGaWx0ZXIuaD4KKyNp
bXBvcnQgPFVJS2l0L1VJVmlzdWFsRWZmZWN0Vmlldy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBOU0FycmF5PFVJ
VmlzdWFsRWZmZWN0ICo+KiByZWR1Y2VkVHJhbnNwYXJlbmN5RWZmZWN0cygpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+Pj4g
ZWZmZWN0czsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGVmZmVjdHMuZ2V0KCkgPSBAW1tVSVZp
c3VhbEVmZmVjdCBlZmZlY3RDb21wb3NpdGluZ0NvbG9yOltVSUNvbG9yIGNvbG9yV2l0aFJlZDoo
NDMuMCAvIDI1NS4wKSBncmVlbjooNDYuMCAvIDI1NS4wKSBibHVlOig0OC4wIC8gMjU1LjApIGFs
cGhhOjEuMF0gd2l0aE1vZGU6VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxwaGE6MS4wXV07Cisg
ICAgfSk7CisgICAgcmV0dXJuIGVmZmVjdHMuZ2V0KCkuZ2V0KCk7Cit9CisKK3N0YXRpYyBOU0Fy
cmF5PFVJVmlzdWFsRWZmZWN0ICo+KiBub3JtYWxUcmFuc3BhcmVuY3lFZmZlY3RzKCkKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TQXJyYXk8VUlWaXN1YWxFZmZlY3Qg
Kj4+PiBlZmZlY3RzOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAg
IGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgZWZmZWN0cy5nZXQoKSA9IEBb
CisgICAgICAgICAgICBbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlD
b2xvciBibGFja0NvbG9yXSB3aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZU5vcm1hbCBhbHBoYTow
LjU1XSwKKyAgICAgICAgICAgIFtVSUJsdXJFZmZlY3QgZWZmZWN0V2l0aEJsdXJSYWRpdXM6VUlS
b3VuZFRvU2NyZWVuU2NhbGUoMTcuNSwgW1VJU2NyZWVuIG1haW5TY3JlZW5dKV0sCisgICAgICAg
ICAgICBbVUlDb2xvckVmZmVjdCBjb2xvckVmZmVjdFNhdHVyYXRlOjEuOF0sCisgICAgICAgICAg
ICBbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciB3aGl0ZUNv
bG9yXSB3aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZU5vcm1hbCBhbHBoYTowLjE0XQorICAgICAg
ICBdOworICAgIH0pOworICAgIHJldHVybiBlZmZlY3RzLmdldCgpLmdldCgpOworfQorCitAaW50
ZXJmYWNlIFVJVmlzdWFsRWZmZWN0VmlldyAoV2ViS2l0UHJpdmF0ZSkKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkd3JpdGUsIGNvcHkpIE5TQXJyYXk8VUlWaXN1YWxFZmZlY3QgKj4gKmJhY2tn
cm91bmRFZmZlY3RzOworQGVuZAorCitAaW50ZXJmYWNlIFdLRnVsbHNjcmVlblN0YWNrVmlldyAo
KQorQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVN0YWNrVmlldyAqX3N0YWNrVmll
dzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlWaXN1YWxFZmZlY3RWaWV3ICpf
dmlzdWFsRWZmZWN0VmlldzsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBVSVZpc3VhbEVmZmVjdFZp
ZXcgKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYykg
TlNBcnJheTxOU0xheW91dENvbnN0cmFpbnQgKj4gKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXdDb25zdHJhaW50czsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlblN0YWNr
VmlldworCisjcHJhZ21hIG1hcmsgLSBDbGFzcyBNZXRob2RzCisrIChOU0FycmF5PFVJVmlzdWFs
RWZmZWN0ICo+ICopYmFzZUVmZmVjdHMKK3sKKyAgICBpZiAoVUlBY2Nlc3NpYmlsaXR5SXNSZWR1
Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpCisgICAgICAgIHJldHVybiByZWR1Y2VkVHJhbnNwYXJl
bmN5RWZmZWN0cygpOworICAgIHJldHVybiBub3JtYWxUcmFuc3BhcmVuY3lFZmZlY3RzKCk7Cit9
CisKKysgKHZvaWQpY29uZmlndXJlVmlldzooVUlWaWV3ICopdmlldyBmb3JUaW50RWZmZWN0V2l0
aENvbG9yOihVSUNvbG9yICopdGludENvbG9yIGZpbHRlclR5cGU6KE5TU3RyaW5nICopZmlsdGVy
VHlwZQoreworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltVSUxhYmVsIGNsYXNzXV0pIHsK
KyAgICAgICAgWyhVSUxhYmVsICopdmlldyBzZXRUZXh0Q29sb3I6dGludENvbG9yXTsKKyAgICAg
ICAgW3ZpZXcgc2V0VGludENvbG9yOnRpbnRDb2xvcl07CisgICAgICAgIFtbdmlldyBsYXllcl0g
c2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBs
dXNMXV07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBfVUlWaXN1YWxFZmZlY3RUaW50
TGF5ZXJDb25maWcgKnRpbnRMYXllckNvbmZpZyA9IFtfVUlWaXN1YWxFZmZlY3RUaW50TGF5ZXJD
b25maWcgbGF5ZXJXaXRoVGludENvbG9yOnRpbnRDb2xvciBmaWx0ZXJUeXBlOmZpbHRlclR5cGVd
OworICAgIFtbW19VSVZpc3VhbEVmZmVjdENvbmZpZyBjb25maWdXaXRoQ29udGVudENvbmZpZzp0
aW50TGF5ZXJDb25maWddIGNvbnRlbnRDb25maWddIGNvbmZpZ3VyZUxheWVyVmlldzp2aWV3XTsK
K30KKworKyAodm9pZCljb25maWd1cmVWaWV3OihVSVZpZXcgKil2aWV3IHdpdGhCYWNrZ3JvdW5k
RmlsbE9mQ29sb3I6KFVJQ29sb3IgKilmaWxsQ29sb3Igb3BhY2l0eTooQ0dGbG9hdClvcGFjaXR5
IGZpbHRlcjooTlNTdHJpbmcgKilmaWx0ZXIKK3sKKyAgICBfVUlWaXN1YWxFZmZlY3RMYXllckNv
bmZpZyAqYmFzZUxheWVyQ29uZmlnID0gW19VSVZpc3VhbEVmZmVjdExheWVyQ29uZmlnIGxheWVy
V2l0aEZpbGxDb2xvcjpmaWxsQ29sb3Igb3BhY2l0eTpvcGFjaXR5IGZpbHRlclR5cGU6ZmlsdGVy
XTsKKyAgICBbW1tfVUlWaXN1YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENvbnRlbnRDb25maWc6
YmFzZUxheWVyQ29uZmlnXSBjb250ZW50Q29uZmlnXSBjb25maWd1cmVMYXllclZpZXc6dmlld107
Cit9CisKKysgKFVJVmlzdWFsRWZmZWN0VmlldyAqKXNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXcKK3sKKyAgICBVSVZpc3VhbEVmZmVjdFZpZXcgKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXcgPSBbW1VJVmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6bmlsXTsKKyAg
ICBbc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVk
Ok5PXTsKKyAgICBbc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBzZXRCYWNrZ3JvdW5kRWZm
ZWN0czpAW1tVSVZpc3VhbEVmZmVjdCBlZmZlY3RDb21wb3NpdGluZ0NvbG9yOltVSUNvbG9yIGJs
YWNrQ29sb3JdIHdpdGhNb2RlOlVJQ29tcG9zaXRpbmdNb2RlUGx1c0RhcmtlciBhbHBoYTowLjA2
XV1dOworICAgIHJldHVybiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3OworfQorCisjcHJh
Z21hIG1hcmsgLSBFeHRlcm5hbCBJbnRlcmZhY2UKKworKyAodm9pZClhcHBseVByaW1hcnlHbHlw
aFRpbnRUb1ZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICBbc2VsZiBjb25maWd1cmVWaWV3OnZp
ZXcgZm9yVGludEVmZmVjdFdpdGhDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZToxLjAgYWxw
aGE6MC43NV0gZmlsdGVyVHlwZTprQ0FGaWx0ZXJQbHVzTF07Cit9CisKKysgKHZvaWQpYXBwbHlT
ZWNvbmRhcnlHbHlwaFRpbnRUb1ZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICBbc2VsZiBjb25m
aWd1cmVWaWV3OnZpZXcgZm9yVGludEVmZmVjdFdpdGhDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhX
aGl0ZToxLjAgYWxwaGE6MC41NV0gZmlsdGVyVHlwZTprQ0FGaWx0ZXJQbHVzTF07Cit9CisKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+
ICopYXJyYW5nZWRTdWJ2aWV3cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXMKK3sK
KyAgICBzZWxmID0gW3NlbGYgaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAw
KV07CisKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBbc2VsZiBz
ZXRDbGlwc1RvQm91bmRzOllFU107CisKKyAgICBfdmlzdWFsRWZmZWN0VmlldyA9IFtbVUlWaXN1
YWxFZmZlY3RWaWV3IGFsbG9jXSBpbml0V2l0aEVmZmVjdDpuaWxdOworICAgIFtzZWxmIGFkZFN1
YnZpZXc6X3Zpc3VhbEVmZmVjdFZpZXddOworICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRCYWNr
Z3JvdW5kRWZmZWN0czpbW3NlbGYgY2xhc3NdIGJhc2VFZmZlY3RzXV07CisKKyAgICBfc3RhY2tW
aWV3ID0gW1tVSVN0YWNrVmlldyBhbGxvY10gaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdzOmFycmFu
Z2VkU3Vidmlld3NdOworICAgIFtfc3RhY2tWaWV3IHNldEF4aXM6YXhpc107CisgICAgW19zdGFj
a1ZpZXcgc2V0TGF5b3V0TWFyZ2luc1JlbGF0aXZlQXJyYW5nZW1lbnQ6WUVTXTsKKyAgICBbX3N0
YWNrVmlldyBzZXRJbnNldHNMYXlvdXRNYXJnaW5zRnJvbVNhZmVBcmVhOk5PXTsKKyAgICBbc2Vs
ZiBpbnNlcnRTdWJ2aWV3Ol9zdGFja1ZpZXcgYWJvdmU6X3Zpc3VhbEVmZmVjdFZpZXddOworCisg
ICAgW3NlbGYgX3NldEFycmFuZ2VkU3Vidmlld3M6YXJyYW5nZWRTdWJ2aWV3cyBheGlzOmF4aXNd
OworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2V0VGFyZ2V0Vmlld0ZvclNlY29u
ZGFyeU1hdGVyaWFsT3ZlcmxheTooVUlWaWV3ICopdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVy
aWFsT3ZlcmxheQoreworICAgIGlmIChfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3Zl
cmxheSA9PSB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSA9IHRh
cmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk7CisgICAgW3NlbGYgc2V0TmVlZHNV
cGRhdGVDb25zdHJhaW50c107Cit9CisKKy0gKFVJVmlldyAqKWNvbnRlbnRWaWV3Cit7CisgICAg
cmV0dXJuIFtfdmlzdWFsRWZmZWN0VmlldyBjb250ZW50Vmlld107Cit9CisKKyNwcmFnbWEgbWFy
ayAtIEludGVybmFsIEludGVyZmFjZQorCitAc3ludGhlc2l6ZSBfc3RhY2tWaWV3PV9zdGFja1Zp
ZXc7CitAc3ludGhlc2l6ZSBfdmlzdWFsRWZmZWN0Vmlldz1fdmlzdWFsRWZmZWN0VmlldzsKKwor
LSAodm9pZClfc2V0QXJyYW5nZWRTdWJ2aWV3czooTlNBcnJheTxVSVZpZXcgKj4gKilhcnJhbmdl
ZFN1YnZpZXdzIGF4aXM6KFVJTGF5b3V0Q29uc3RyYWludEF4aXMpYXhpcworeworICAgIGZvciAo
VUlWaWV3ICp2aWV3IGluIFtfc3RhY2tWaWV3IGFycmFuZ2VkU3Vidmlld3NdKQorICAgICAgICBb
dmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIGZvciAoVUlWaWV3ICp2aWV3IGluIGFy
cmFuZ2VkU3Vidmlld3MpCisgICAgICAgIFtfc3RhY2tWaWV3IGFkZEFycmFuZ2VkU3Vidmlldzp2
aWV3XTsKKworICAgIFtfc3RhY2tWaWV3IHNldEF4aXM6YXhpc107Cit9CisKKyNwcmFnbWEgbWFy
ayAtIFVJVmlldyBPdmVycmlkZXMKKworLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdClib3VuZHMK
K3sKKyAgICBDR1NpemUgb2xkU2l6ZSA9IFtzZWxmIGJvdW5kc10uc2l6ZTsKKworICAgIFtzdXBl
ciBzZXRCb3VuZHM6Ym91bmRzXTsKKworICAgIGlmICghQ0dTaXplRXF1YWxUb1NpemUob2xkU2l6
ZSwgYm91bmRzLnNpemUpKQorICAgICAgICBbc2VsZiBfc2V0Q29udGludW91c0Nvcm5lclJhZGl1
czooKENHUmVjdEdldEhlaWdodChib3VuZHMpID4gNDAuMCkgPyAxNi4wIDogOC4wKV07Cit9CisK
Ky0gKHZvaWQpdXBkYXRlQ29uc3RyYWludHMKK3sKKyAgICBpZiAoW19zdGFja1ZpZXcgdHJhbnNs
YXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHNdIHx8IFtfdmlzdWFsRWZmZWN0Vmll
dyB0cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50c10pIHsKKyAgICAgICAg
W192aXN1YWxFZmZlY3RWaWV3IHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0
cmFpbnRzOk5PXTsKKyAgICAgICAgW19zdGFja1ZpZXcgc2V0VHJhbnNsYXRlc0F1dG9yZXNpemlu
Z01hc2tJbnRvQ29uc3RyYWludHM6Tk9dOworCisgICAgICAgIE5TQXJyYXk8TlNMYXlvdXRDb25z
dHJhaW50ICo+ICpjb25zdHJhaW50cyA9IEBbCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RW
aWV3IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGxlYWRpbmdB
bmNob3JdXSwKKyAgICAgICAgICAgIFtbX3Zpc3VhbEVmZmVjdFZpZXcgdG9wQW5jaG9yXSBjb25z
dHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiB0b3BBbmNob3JdXSwKKyAgICAgICAgICAgIFtbX3Zp
c3VhbEVmZmVjdFZpZXcgdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltz
ZWxmIHRyYWlsaW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IGJv
dHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgYm90dG9tQW5jaG9yXV0s
CisgICAgICAgICAgICBbW19zdGFja1ZpZXcgbGVhZGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFs
VG9BbmNob3I6W3NlbGYgbGVhZGluZ0FuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3
IHRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgdG9wQW5jaG9yXV0sCisg
ICAgICAgICAgICBbW19zdGFja1ZpZXcgdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRv
QW5jaG9yOltzZWxmIHRyYWlsaW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW19zdGFja1ZpZXcg
Ym90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiBib3R0b21BbmNob3Jd
XSwKKyAgICAgICAgXTsKKworICAgICAgICBmb3IgKE5TTGF5b3V0Q29uc3RyYWludCAqY29uc3Ry
YWludCBpbiBjb25zdHJhaW50cykKKyAgICAgICAgICAgIFtjb25zdHJhaW50IHNldFByaW9yaXR5
OihVSUxheW91dFByaW9yaXR5UmVxdWlyZWQgLSAxKV07CisKKyAgICAgICAgW05TTGF5b3V0Q29u
c3RyYWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOmNvbnN0cmFpbnRzXTsKKyAgICB9CisKKyAgICBp
ZiAoW1tzZWxmIHRhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXldIGlzRGVzY2Vu
ZGFudE9mVmlldzpzZWxmXSkgeworICAgICAgICBpZiAoIV9zZWNvbmRhcnlNYXRlcmlhbE92ZXJs
YXlWaWV3KSB7CisgICAgICAgICAgICBbc2VsZiBzZXRTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlW
aWV3Oltbc2VsZiBjbGFzc10gc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld11dOworICAgICAg
ICAgICAgW3NlbGYgYWRkU3Vidmlldzpbc2VsZiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3
XV07CisgICAgICAgIH0KKworICAgICAgICBpZiAoW1tzZWxmIHNlY29uZGFyeU1hdGVyaWFsT3Zl
cmxheVZpZXddIGlzRGVzY2VuZGFudE9mVmlldzpzZWxmXSAmJiAhX3NlY29uZGFyeU1hdGVyaWFs
T3ZlcmxheVZpZXdDb25zdHJhaW50cykgeworICAgICAgICAgICAgW1tzZWxmIHNlY29uZGFyeU1h
dGVyaWFsT3ZlcmxheVZpZXddIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0
cmFpbnRzOk5PXTsKKyAgICAgICAgICAgIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50ICo+ICpj
b25zdHJhaW50cyA9IEBbCisgICAgICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5VmlldyBjZW50ZXJYQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbX3RhcmdldFZp
ZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkgY2VudGVyWEFuY2hvcl1dLAorICAgICAgICAg
ICAgICAgIFtbX3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgY2VudGVyWUFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5IGNlbnRlcllBbmNob3JdXSwKKyAgICAgICAgICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlh
bE92ZXJsYXlWaWV3IHdpZHRoQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbX3Rhcmdl
dFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkgd2lkdGhBbmNob3JdXSwKKyAgICAgICAg
ICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3IGhlaWdodEFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5IGhlaWdodEFuY2hvcl1dCisgICAgICAgICAgICBdOworICAgICAgICAgICAgW3NlbGYgc2V0
U2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld0NvbnN0cmFpbnRzOmNvbnN0cmFpbnRzXTsKKyAg
ICAgICAgICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpbc2VsZiBz
ZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHNdXTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBbX3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107CisKKyAgICBbc3VwZXIgdXBkYXRlQ29uc3RyYWludHNdOworfQorCitAZW5k
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc1
ODcwMjk2YWRkYTYwZDAxYmQ1OGZiNzE2OTVmYWY2MjNkYmE5OTkuLjM1MzY1OWUzNzkxNWRkODNh
NDU2Mzk3N2FiODUzYjZmMmU5YmZjYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAyNSw4ICsyMDI1LDEyIEBACiAJCUM5Q0Q0MzlF
MUI0QjAyNTMwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM5Q0Q0Mzk5MUI0QjAyNDIwMDIz
OUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNwcCAqLzsgfTsKIAkJQ0QwMDNBNTIxOUQ0
OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTAxOUQ0OUI1RDAwNUFC
Q0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwICovOyB9OwogCQlDRDAwM0E1MzE5
RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTExOUQ0OUI1RDAwNUFC
Q0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzEyMDFG
RDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDBDNjgyRjIwMUZEMTAxMDBBNTk0
MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzIyMDFG
RDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwQzY4MzAyMDFGRDEwMTAwQTU5
NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tICovOyB9OwogCQlDRDE5QTI2RDFB
MTNFODJBMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNjkxQTEzRTgyMDAw
OEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJQ0QxOUEy
NkUxQTEzRTgzNDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDE5QTI2QTFBMTNFODIx
MDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKKwkJQ0QxOUQy
RUEyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUQyRTgyMDQ2NDA2
RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICovOyB9OworCQlDRDE5
RDJFQjIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMTlEMkU5MjA0
NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovOyB9Owog
CQlDRDQ5MUIwNzFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q0OTFCMDUx
RTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJ
Q0Q0OTFCMDgxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDQ5MUIwNjFFNzBE
MDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLzsgfTsKIAkJQ0Q0OTFC
MEQxRTczMkU0RDAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
NDkxQjBCMUU3MzJFNEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi87IH07CkBAIC0yMDU2LDYgKzIwNjAsOCBAQAogCQlDREEyOUEyOTFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CiAJCUNEQTI5
QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCUNEQzI4MzFE
MjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzI4MzFCMjAxQkQ3OUQwMEU2RTc0
NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCAqLzsgfTsKKwkJQ0RDMjgzMUUyMDFCRDc5RDAw
RTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1
bGxzY3JlZW5TdGFja1ZpZXcubW0gKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3OTkwMDhBMkZDMyAv
KiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJy
YXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3MjExN0REMDA4QTJGQzMgLyogQ29va2llU3RvcmFn
ZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJh
cnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyogQ29va2llU3RvcmFn
ZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5
LmggKi87IH07CkBAIC0zMjg3LDggKzMyOTMsOCBAQAogCQkzRjg3QjlCQTE1ODkzRjYzMDA5MEZG
NjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyog
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgcGF0
aCA9IGlvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzRjkxNUMwRjFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVySU9TLmg7IHBhdGggPSBpb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklP
Uy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjkxNUMwRTFGNTY0REVEMDAxODND
RTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5t
bTsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGOTE1QzBGMUY1NjRERUQwMDE4M0NF
OSAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJM0ZCMDhFNDIxRjYwQjI0MDAwNUU1MzEyIC8qIGlPUy54Y2Fzc2V0cyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlci5hc3NldGNhdGFs
b2c7IHBhdGggPSBpT1MueGNhc3NldHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQx
MDQ4MkNCMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ05ldHdvcmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MTA0ODJDQzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENOZXR3b3JrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NTMzLDggKzQ1MzksMTIgQEAKIAkJQzlDRDQzOUExQjRCMDI0MjAw
MjM5RTMzIC8qIFdLTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tNZWRpYVNlc3Npb25NZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDAwM0E1MDE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdl
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJNZWRp
YUtleVN0b3JhZ2VNYW5hZ2VyLmNwcDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9y
YWdlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMDAzQTUxMTlE
NDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaDsgcGF0aCA9
IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIu
aDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMEM2ODMwMjAxRkQxMDEwMEE1OTQwOSAvKiBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyLm1tOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlB
MjY5MUExM0U4MjAwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlBMjZBMUExM0U4MjEw
MDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVl
blRvdWNoU2VjaGV1cmlzdGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYy5oOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlz
dGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMTlEMkU5MjA0NjQwNkYwMDE3
MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVu
L0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA2MUU3
MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYgLyogVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIu
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTc0LDYgKzQ1ODQs
OCBAQAogCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
ck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEy
OUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRnVsbHNjcmVlblN0YWNrVmlldy5oOyBwYXRoID0g
aW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFj
a1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07
IHBhdGggPSBpb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MkY3MTcyMTE1MDYwMDhBMkZDMyAvKiBDRk5ldHdv
cmsuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDRk5ldHdvcmsuZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1ld29yazsgc291cmNl
VHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENv
b2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb29raWVTdG9y
YWdlU2hpbUxpYnJhcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODMw
NjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIi
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTU3NjUsNiArNTc3Nyw3IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1NDI1NkFFMThCRUMxNjEwMERF
NDE3OSAvKiBmb3JtcyAqLywKKwkJCQlDREMyODMxQTIwMUJENzU2MDBFNkU3NDUgLyogZnVsbHNj
cmVlbiAqLywKIAkJCQlBMTE1REM2RTE5MUQ4MkFCMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50
Rm9ybWF0dGVyLmggKi8sCiAJCQkJQTExNURDNkQxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZp
ZXdQcmludEZvcm1hdHRlci5tbSAqLywKIAkJCQlBMTlERDNCRjFEMDdEMTY4MDBBQzgyM0IgLyog
X1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCAqLywKQEAgLTU3OTYsOCArNTgwOSw2
IEBACiAJCQkJMEZDQjRFM0QxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXcubW0gKi8s
CiAJCQkJMEZDQjRFNkExOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5oICovLAogCQkJCTBGQ0I0RTZCMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0gKi8sCi0JCQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLywKLQkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODND
RTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLywKIAkJCQkwRkNCNEUz
RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggKi8sCiAJCQkJ
MEZDQjRFNDAxOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSAq
LywKIAkJCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVy
SU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovLApAQCAtODQ3OCw2ICs4NDg5LDIxIEBACiAJCQlu
YW1lID0gRnVsbFNjcmVlbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUNE
QzI4MzFBMjAxQkQ3NTYwMEU2RTc0NSAvKiBmdWxsc2NyZWVuICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyog
V0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi8sCisJCQkJQ0RDMjgzMUMyMDFCRDc5RDAwRTZFNzQ1
IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5tbSAqLywKKwkJCQlDRDBDNjgyRjIwMUZEMTAxMDBB
NTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLywKKwkJCQlDRDBDNjgzMDIw
MUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gKi8sCisJCQkJ
M0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MuaCAqLywKKwkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5tbSAqLywKKwkJCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyog
RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggKi8sCisJCQkJQ0QxOUQyRTkyMDQ2NDA2RjAw
MTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAgKi8sCisJCQkpOworCQkJ
bmFtZSA9IGZ1bGxzY3JlZW47CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlD
RENBODVFNDEzMkFEMzMwMDBFOTYxREYgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTg4MDMsNiArODgyOSw3IEBACiAJCQkJOTk1NUE2RjUxQzc5
ODZFMDAwRUI2QTkzIC8qIEF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5QzgxRDVBMUMyMEU3RTIwMDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OTI0OUFENjFGMUYxRTVGMDBCNjJGQkIgLyogQXV0b21hdGlv
bkZyb250ZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEMTlEMkVBMjA0NjQw
NkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk5NTVBNkY3MUM3OTg2RTUwMEVCNkE5MyAvKiBBdXRvbWF0aW9uUHJvdG9jb2xPYmpl
Y3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTBEMjhCQjFDNjUzOUQzMDA5ODY5NzcgLyogQXV0
b21hdGlvblNlc3Npb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTA0MUY0MUFDRTIx
MDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODE4LDYgKzg4NDUsNyBAQAogCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDk1NkYxMjg0ODU2NDAwMUVCOTYyIC8qIENo
aWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGQUVDM0ExQjA2NTc2MzAwMDlDNEU3
IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREMyODMxRDIw
MUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTUxM0M2NzE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI5MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NT
dXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTExQUQ1MjFDQkM0ODJGMDA2ODFFRTUg
LyogQ29kZVNpZ25pbmcuaCBpbiBIZWFkZXJzICovLApAQCAtOTM2Miw2ICs5MzkwLDcgQEAKIAkJ
CQk5MzRCNzI0NDE5RjVCOUJFMDBBRTk2RDYgLyogV0tBY3Rpb25NZW51SXRlbVR5cGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzlGNDAxQzE5RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rpb25NZW51
VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTQ4MThCQkUwNDQwMDBGQ0ZDOSAvKiBX
S0FjdGlvblNoZWV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDBDNjgzMTIwMUZEMTAxMDBBNTk0
MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
Q0I0RTRBMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDNUZBMUVEMzE4RTEwNjIyMDBCM0Y0MDIgLyogV0tBaXJQbGF5Um91dGVQ
aWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRERCMzJEMTI0RUMyRTEwMDQ4RDEzQyAvKiBX
S0FQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0NTQsNiArMTA0ODMsNyBAQAogCQkJCTk5
MEQyOEJDMUM2NTM5REEwMDk4Njk3NyAvKiBBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTQ2QTJCNjA4MUU1Njc2QTYwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJv
Y2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2NEEyRjEx
OTFBRjE0RTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5z
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEMTlEMkVCMjA0NjQwNkYwMDE3MDc0QSAvKiBG
dWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3MDg3
NkIxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyeVByb3h5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRjE4NjM4MTY3RDA3MUUwMEExQTg1QSAvKiBDYWNoZU1vZGVsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQxODk3RUQ3MUY0MTVEOEEwMDE2RkE0MiAvKiBDYWNoZVN0b3JhZ2VFbmdp
bmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDU0MSw2ICsxMDU3MSw3IEBACiAJCQkJMUFFNDk4
NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkwRjBDMzY1RTE4QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRh
dGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQzI4MzFFMjAxQkQ3OUQwMEU2RTc0NSAvKiBX
S0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTkyREMxMzEyRjhC
QUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUZERTY0NTE5NTEwQjU1MDBDNDhGRkEgLyogTGVnYWN5QnVuZGxlRm9yQ2xhc3MubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1Q0ZFQ0IwNDFFMUVEMUNDMDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTEwMzksNiArMTEwNzAsNyBAQAog
CQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRTREMjFBMUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQ
cm9jZXNzUG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0U0RDIxNjFBNDkxNDg0MDBDN0Yx
NTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEMEM2ODMy
MjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDRTREMjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUIxMTExMkY1RTRGMDAz
MzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDRGNjE5
MUE0QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICov
LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335479</attachid>
            <date>2018-03-09 15:36:09 -0800</date>
            <delta_ts>2018-03-09 16:14:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Improvements-to-fullscreen-new-UI-and-security-featu.patch</filename>
            <type>text/plain</type>
            <size>122081</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBjMzJkNzA3NTBmYTBhNDkxOTJkOGQxNzAwMzMzNGRmY2MyYjdlOTM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IEZyaSwgMiBNYXIgMjAxOCAyMTo0MTozMyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEltcHJvdmVt
ZW50cyB0byBmdWxsc2NyZWVuOyBuZXcgVUkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzNTAzCgpSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KCk5vdyB0aGF0IHRoZSBpT1MgRnVsbHNjcmVlbiBjb2RlIGhhcyBtb3JlIHRo
YW4gb25lIG1ham9yIGNsYXNzLCBtb3ZlIGl0IGludG8gYW4gaW9zLwpkaXJlY3RvcnkuCgpDbGVh
biB1cCB0aGUgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUyBjbGFzcyB0byBtb3JlIGNs
ZWFybHkgc2VwYXJhdGUgZXh0ZXJuYWwKZmFjaW5nIEFQSSBmcm9tIHB1cmVseSBpbnRlcm5hbCBm
dW5jdGlvbnMuCgpNb3ZlIHRoZSBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBp
dHMgb3duIGZpbGUuIEFkZCBzdXBwb3J0IGZvciBmdWxsc2NyZWVuCnRvcCBpbnNldCBhbmQgZnVs
bHNjcmVlbiBhdXRvaGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgoKQWRkIGEgaGV1cmlzdGlj
IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbWVkaWEgY29udHJvbCByZWxhdGVkIHRvdWNoZXMgYW5k
IG9uZXMgdGhhdCBsb29rCm1vcmUga2V5Ym9hcmQgaW50ZXJhY3Rpb25zLgoKQWRkIGEgbmV3IFVJ
U3RhY2tWaWV3IGJhc2VkIGNvbnRyb2wgdG8gaG9sZCB0aGUgZnVsbHNjcmVlbiBjb250cm9scy4K
CiogVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1v
dmVkLgoqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWMuY3BwOiBBZGRlZC4KKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzY29y
ZU9mTmV4dFRvdWNoKToKKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpyZXNl
dCk6CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VTY29yZSk6
CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6YXR0ZW51YXRpb25GYWN0b3Ip
OgoqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
aDoKKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRSYW1wVXBTcGVlZCk6
CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcERvd25TcGVlZCk6
CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0WFdlaWdodCk6CihXZWJL
aXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0WVdlaWdodCk6CihXZWJLaXQ6OkZ1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0U2l6ZSk6CihXZWJLaXQ6OkZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYzo6c2V0R2FtbWEpOgooV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNo
ZXVyaXN0aWM6OnNldEdhbW1hQ3V0b2ZmKToKKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaDoKKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW06IEFkZGVkLgooV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDo6c2V0UGFyZW50KToKKFdLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldEludGVyZmFjZSk6
CigtW19XS0V4dHJpbnNpY0J1dHRvbiBzZXRFeHRyaW5zaWNDb250ZW50U2l6ZTpdKToKKC1bX1dL
RXh0cmluc2ljQnV0dG9uIGludHJpbnNpY0NvbnRlbnRTaXplXSk6CigtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgZGVhbGxvY10pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBzaG93VUldKToK
KC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgaGlkZVVJXSk6CigtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIHZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXSk6CigtW1dLRnVsbFNj
cmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRkZW46XSk6CigtW1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6XSk6CigtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6XSk6CigtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGxvYWRWaWV3XSk6CigtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHZp
ZXdXaWxsQXBwZWFyOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWV3RGlkTGF5
b3V0U3Vidmlld3NdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOndpdGhUcmFuc2l0aW9uQ29vcmRpbmF0b3I6XSk6CigtW1dLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyIHByZWZlcnJlZFN0YXR1c0JhclN0eWxlXSk6CigtW1dLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyIHByZWZlcnNTdGF0dXNCYXJIaWRkZW5dKToKKC1bV0tGdWxsU2NyZWVu
Vmlld0NvbnRyb2xsZXIgZ2VzdHVyZVJlY29nbml6ZXI6c2hvdWxkUmVjb2duaXplU2ltdWx0YW5l
b3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6CigtW1dLRnVsbFNjcmVlblZpZXdDb250cm9s
bGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY2VpdmVUb3VjaDpdKToKKC1bV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIgX21hbmFnZXJdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIgX2VmZmVjdGl2ZUZ1bGxzY3JlZW5JbnNldFRvcF0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBfY2FuY2VsQWN0aW9uOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBf
dG9nZ2xlUGlQQWN0aW9uOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfdG91Y2hE
ZXRlY3RlZDpdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3N0YXR1c0JhckZyYW1l
RGlkQ2hhbmdlOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfdXBkYXRlV2ViVmll
d0Z1bGxzY3JlZW5JbnNldHNdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3Nob3dQ
aGlzaGluZ0FsZXJ0XSk6CiogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaC4KKiBVSVByb2Nlc3MvaW9zL2Z1
bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTogQWRkZWQuCihXZWJL
aXQ6OnJlcGxhY2VWaWV3V2l0aFZpZXcpOgooV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6YXBwbHlU
byk6CihXZWJLaXQ6OldLV2ViVmlld1N0YXRlOjpzdG9yZSk6CigtW1dLRnVsbHNjcmVlbkFuaW1h
dGlvbkNvbnRyb2xsZXIgdHJhbnNpdGlvbkR1cmF0aW9uOl0pOgooLVtXS0Z1bGxzY3JlZW5Bbmlt
YXRpb25Db250cm9sbGVyIGNvbmZpZ3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0ZvclRyYW5zaXRp
b246XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYW5pbWF0ZVRyYW5zaXRp
b246XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYW5pbWF0aW9uRW5kZWQ6
XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgc3RhcnRJbnRlcmFjdGl2ZVRy
YW5zaXRpb246XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgdXBkYXRlV2l0
aFBlcmNlbnQ6XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgdXBkYXRlV2l0
aFBlcmNlbnQ6dHJhbnNsYXRpb246YW5jaG9yOl0pOgooLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyIGVuZDpdKToKKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIGlu
aXRXaXRoQW5pbWF0b3I6YW5jaG9yOl0pOgooLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5z
aXRpb24gd2FudHNJbnRlcmFjdGl2ZVN0YXJ0XSk6CigtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZl
VHJhbnNpdGlvbiBzdGFydEludGVyYWN0aXZlVHJhbnNpdGlvbjpdKToKKC1bV0tGdWxsU2NyZWVu
SW50ZXJhY3RpdmVUcmFuc2l0aW9uIHVwZGF0ZUludGVyYWN0aXZlVHJhbnNpdGlvbjp3aXRoVHJh
bnNsYXRpb246XSk6CigtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBjYW5jZWxJ
bnRlcmFjdGl2ZVRyYW5zaXRpb25dKToKKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0
aW9uIGZpbmlzaEludGVyYWN0aXZlVHJhbnNpdGlvbl0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBkZWFsbG9jXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2Ny
ZWVuXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNlaG9sZGVy
XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuXSk6Cigt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5p
dGlhbEZyYW1lOmZpbmFsRnJhbWU6XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
cmVxdWVzdEV4aXRGdWxsU2NyZWVuXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
ZXhpdEZ1bGxTY3JlZW5dKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBiZWdhbkV4
aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgooLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9jb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl0pOgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIGNsb3NlXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIgd2ViVmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbl0pOgoo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hh
bmdlXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cigt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvclByZXNl
bnRlZENvbnRyb2xsZXI6cHJlc2VudGluZ0NvbnRyb2xsZXI6c291cmNlQ29udHJvbGxlcjpdKToK
KC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBhbmltYXRpb25Db250cm9sbGVyRm9yRGlz
bWlzc2VkQ29udHJvbGxlcjpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbnRl
cmFjdGlvbkNvbnRyb2xsZXJGb3JEaXNtaXNzYWw6XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldKToKKC1bV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlciBfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFtZV0pOgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIF9pc1NlY3VyZV0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIF9zZXJ2ZXJUcnVzdF0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IF9FVk9yZ2FuaXphdGlvbk5hbWVdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
dXBkYXRlTG9jYXRpb25JbmZvXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX21h
bmFnZXJdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfc3RhcnRUb0Rpc21pc3NG
dWxsc2NyZWVuQ2hhbmdlZDpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfaW50
ZXJhY3RpdmVEaXNtaXNzQ2hhbmdlZDpdKToKKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsc2NyZWVuU3RhY2tWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oLgoqIFVJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW06IEFkZGVkLgooK1tXS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXcgYmFzZUVmZmVjdHNdKToKKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZp
Z3VyZVZpZXc6Zm9yVGludEVmZmVjdFdpdGhDb2xvcjpmaWx0ZXJUeXBlOl0pOgooK1tXS0Z1bGxz
Y3JlZW5TdGFja1ZpZXcgY29uZmlndXJlVmlldzp3aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOm9w
YWNpdHk6ZmlsdGVyOl0pOgooK1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgc2Vjb25kYXJ5TWF0ZXJp
YWxPdmVybGF5Vmlld10pOgooK1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5
cGhUaW50VG9WaWV3Ol0pOgooK1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlTZWNvbmRhcnlH
bHlwaFRpbnRUb1ZpZXc6XSk6CigtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBpbml0V2l0aEFycmFu
Z2VkU3Vidmlld3M6YXhpczpdKToKKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNldFRhcmdldFZp
ZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk6XSk6CigtW1dLRnVsbHNjcmVlblN0YWNrVmll
dyBjb250ZW50Vmlld10pOgooLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgX3NldEFycmFuZ2VkU3Vi
dmlld3M6YXhpczpdKToKKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNldEJvdW5kczpdKToKKC1b
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IHVwZGF0ZUNvbnN0cmFpbnRzXSk6CiogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6Ci0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAxMjYgKysrCiAuLi4vaW9zL2Z1bGxzY3JlZW4vRnVsbHNj
cmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCB8ICA4NiArKwogLi4uL2lvcy9mdWxsc2NyZWVuL0Z1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICAgfCAgNjYgKysKIC4uLi9pb3MvZnVsbHNjcmVl
bi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oICAgIHwgIDU2ICsrCiAuLi4vaW9zL2Z1bGxz
Y3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gICB8IDQ0NCArKysrKysrKysrCiAu
Li4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICAgICAgICAgICAgICB8ICAyMSAr
LQogLi4uL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gICAgICAgICAgICAgfCA5
MDAgKysrKysrKysrKy0tLS0tLS0tLS0tCiAuLi4vaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVu
U3RhY2tWaWV3LmggICAgICAgICB8ICA0NSArKwogLi4uL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNj
cmVlblN0YWNrVmlldy5tbSAgICAgICAgfCAyMzYgKysrKysrCiBTb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICB8ICA0MCArLQogMTAgZmlsZXMgY2hhbmdl
ZCwgMTUzOSBpbnNlcnRpb25zKCspLCA0ODEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNo
U2VjaGV1cmlzdGljLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tCiBy
ZW5hbWUgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL3sgPT4gZnVsbHNjcmVlbn0vV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICg5MiUpCiByZW5hbWUgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL3sgPT4gZnVsbHNjcmVlbn0vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cklPUy5tbSAoNDclKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3Lm1tCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBiYjVhNTBjZWIzNS4uMDQ0Y2M0ZGNiYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTI5IEBACisyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgorCisgICAgICAgIEltcHJvdmVtZW50cyB0byBmdWxsc2NyZWVuOyBuZXcgVUkgYW5k
IHNlY3VyaXR5IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODM1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOb3cgdGhhdCB0aGUgaU9TIEZ1bGxzY3JlZW4gY29kZSBoYXMgbW9yZSB0aGFu
IG9uZSBtYWpvciBjbGFzcywgbW92ZSBpdCBpbnRvIGFuIGlvcy8KKyAgICAgICAgZGlyZWN0b3J5
LgorCisgICAgICAgIENsZWFuIHVwIHRoZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9T
IGNsYXNzIHRvIG1vcmUgY2xlYXJseSBzZXBhcmF0ZSBleHRlcm5hbAorICAgICAgICBmYWNpbmcg
QVBJIGZyb20gcHVyZWx5IGludGVybmFsIGZ1bmN0aW9ucy4KKworICAgICAgICBNb3ZlIHRoZSBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBpdHMgb3duIGZpbGUuIEFkZCBzdXBw
b3J0IGZvciBmdWxsc2NyZWVuCisgICAgICAgIHRvcCBpbnNldCBhbmQgZnVsbHNjcmVlbiBhdXRv
aGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgorCisgICAgICAgIEFkZCBhIGhldXJpc3RpYyB0
byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGNvbnRyb2wgcmVsYXRlZCB0b3VjaGVzIGFuZCBv
bmVzIHRoYXQgbG9vaworICAgICAgICBtb3JlIGtleWJvYXJkIGludGVyYWN0aW9ucy4KKworICAg
ICAgICBBZGQgYSBuZXcgVUlTdGFja1ZpZXcgYmFzZWQgY29udHJvbCB0byBob2xkIHRoZSBmdWxs
c2NyZWVuIGNvbnRyb2xzLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzY29yZU9mTmV4dFRvdWNo
KToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpyZXNldCk6
CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VT
Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6YXR0
ZW51YXRpb25GYWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxs
c2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaDogCisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcFVwU3BlZWQpOgorICAgICAgICAoV2ViS2l0OjpGdWxs
c2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFJhbXBEb3duU3BlZWQpOgorICAgICAgICAoV2Vi
S2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFhXZWlnaHQpOgorICAgICAgICAo
V2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFlXZWlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFNpemUpOgorICAgICAg
ICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldEdhbW1hKToKKyAgICAg
ICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRHYW1tYUN1dG9mZik6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldFBhcmVudCk6CisgICAgICAgIChX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50OjpzZXRJ
bnRlcmZhY2UpOgorICAgICAgICAoLVtfV0tFeHRyaW5zaWNCdXR0b24gc2V0RXh0cmluc2ljQ29u
dGVudFNpemU6XSk6CisgICAgICAgICgtW19XS0V4dHJpbnNpY0J1dHRvbiBpbnRyaW5zaWNDb250
ZW50U2l6ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBpbml0V2l0
aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGRlYWxs
b2NdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgc2hvd1VJXSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGhpZGVVSV0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3Rh
dHVzQmFySGlkZGVuOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBz
ZXRQbGF5aW5nOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQ
aWN0dXJlSW5QaWN0dXJlQWN0aXZlOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBsb2FkVmlld10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxl
ciB2aWV3V2lsbEFwcGVhcjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIgdmlld0RpZExheW91dFN1YnZpZXdzXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIHZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTp3aXRoVHJhbnNpdGlvbkNvb3JkaW5h
dG9yOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBwcmVmZXJyZWRT
dGF0dXNCYXJTdHlsZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBw
cmVmZXJzU3RhdHVzQmFySGlkZGVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0
aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJv
bGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNlaXZlVG91Y2g6XSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyIF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3BdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX2NhbmNlbEFjdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3RvZ2dsZVBpUEFjdGlvbjpdKToK
KyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3RvdWNoRGV0ZWN0ZWQ6XSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9zdGF0dXNCYXJGcmFtZURp
ZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3VwZGF0
ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIF9zaG93UGhpc2hpbmdBbGVydF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpyZXBsYWNlVmll
d1dpdGhWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V0tXZWJWaWV3U3RhdGU6OmFwcGx5VG8pOgor
ICAgICAgICAoV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6c3RvcmUpOgorICAgICAgICAoLVtXS0Z1
bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHRyYW5zaXRpb25EdXJhdGlvbjpdKToKKyAgICAg
ICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBjb25maWd1cmVJbml0aWFsQW5k
RmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5Bbmlt
YXRpb25Db250cm9sbGVyIGFuaW1hdGVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxz
Y3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGlvbkVuZGVkOl0pOgorICAgICAgICAoLVtX
S0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9u
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHVwZGF0ZVdp
dGhQZXJjZW50Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVy
IHVwZGF0ZVdpdGhQZXJjZW50OnRyYW5zbGF0aW9uOmFuY2hvcjpdKToKKyAgICAgICAgKC1bV0tG
dWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBlbmQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNj
cmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBpbml0V2l0aEFuaW1hdG9yOmFuY2hvcjpdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIHdhbnRzSW50ZXJhY3Rp
dmVTdGFydF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24g
c3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbklu
dGVyYWN0aXZlVHJhbnNpdGlvbiB1cGRhdGVJbnRlcmFjdGl2ZVRyYW5zaXRpb246d2l0aFRyYW5z
bGF0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24g
Y2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbklu
dGVyYWN0aXZlVHJhbnNpdGlvbiBmaW5pc2hJbnRlcmFjdGl2ZVRyYW5zaXRpb25dKToKKyAgICAg
ICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZGVhbGxvY10pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQbGFjZWhvbGRlcl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbl0p
OgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGJlZ2FuRW50ZXJGdWxs
U2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIHJlcXVlc3RFeGl0RnVsbFNjcmVlbl0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuXSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJ
bml0aWFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBjbG9zZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxz
Y3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB2aWRlb0Nv
bnRyb2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5
V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250cm9sbGVyOnByZXNl
bnRpbmdDb250cm9sbGVyOnNvdXJjZUNvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvckRpc21pc3NlZENvbnRy
b2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaW50ZXJh
Y3Rpb25Db250cm9sbGVyRm9yRGlzbWlzc2FsOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludmFsaWRhdGVFVk9yZ2FuaXphdGlvbk5h
bWVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfaXNTZWN1cmVd
KToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfc2VydmVyVHJ1c3Rd
KToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfRVZPcmdhbml6YXRp
b25OYW1lXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3VwZGF0
ZUxvY2F0aW9uSW5mb10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3N0
YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIgX2ludGVyYWN0aXZlRGlzbWlzc0NoYW5nZWQ6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxs
c2NyZWVuU3RhY2tWaWV3Lm1tOiBBZGRlZC4KKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tW
aWV3IGJhc2VFZmZlY3RzXSk6CisgICAgICAgICgrW1dLRnVsbHNjcmVlblN0YWNrVmlldyBjb25m
aWd1cmVWaWV3OmZvclRpbnRFZmZlY3RXaXRoQ29sb3I6ZmlsdGVyVHlwZTpdKToKKyAgICAgICAg
KCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZpZ3VyZVZpZXc6d2l0aEJhY2tncm91bmRGaWxs
T2ZDb2xvcjpvcGFjaXR5OmZpbHRlcjpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tW
aWV3IHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddKToKKyAgICAgICAgKCtbV0tGdWxsc2Ny
ZWVuU3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmlldzpdKToKKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5U2Vjb25kYXJ5R2x5cGhUaW50VG9WaWV3Ol0pOgor
ICAgICAgICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdz
OmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBzZXRUYXJnZXRWaWV3
Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5T
dGFja1ZpZXcgY29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3
IF9zZXRBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0
YWNrVmlldyBzZXRCb3VuZHM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyB1
cGRhdGVDb25zdHJhaW50c10pOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIFVuY29uZGl0aW9uYWxpemUgbW9yZSBtZXRob2RzIGluIFZpZGVvRnVsbHNjcmVl
bkludGVyZmFjZSAoYW5kIHJlbGF0ZWQgY2xhc3NlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91
Y2hTZWNoZXVyaXN0aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45ZTkwNzAxMTU4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKQEAgLTAsMCAr
MSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdWxs
c2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkg
JiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2RvdWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNj
b3JlT2ZOZXh0VG91Y2goQ0dQb2ludCBsb2NhdGlvbikKK3sKKyAgICBTZWNvbmRzIG5vdyA9IE1v
bm90b25pY1RpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisKKyAgICBpZiAoIW1fbGFz
dFRvdWNoVGltZSkgeworICAgICAgICBtX2xhc3RUb3VjaFRpbWUgPSBXVEZNb3ZlKG5vdyk7Cisg
ICAgICAgIG1fbGFzdFRvdWNoTG9jYXRpb24gPSBXVEZNb3ZlKGxvY2F0aW9uKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgU2Vjb25kcyBkZWx0YVRpbWUgPSBub3cgLSBtX2xhc3RU
b3VjaFRpbWU7CisKKyAgICBkb3VibGUgY29lZmZpY2llbnQgPSBhdHRlbnVhdGlvbkZhY3Rvcihk
ZWx0YVRpbWUpOworICAgIG1fbGFzdFNjb3JlID0gY29lZmZpY2llbnQgKiBkaXN0YW5jZVNjb3Jl
KGxvY2F0aW9uLCBtX2xhc3RUb3VjaExvY2F0aW9uLCBkZWx0YVRpbWUpICsgKDEgLSBjb2VmZmlj
aWVudCkgKiBtX2xhc3RTY29yZTsKKworICAgIG1fbGFzdFRvdWNoVGltZSA9IG5vdzsKKyAgICBt
X2xhc3RUb3VjaExvY2F0aW9uID0gbG9jYXRpb247CisgICAgcmV0dXJuIG1fbGFzdFNjb3JlOwor
fQorCit2b2lkIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6cmVzZXQoKQoreworICAgIG1f
bGFzdFRvdWNoVGltZSA9IDBfczsKKyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0geyB9OworICAg
IG1fbGFzdFNjb3JlID0gMDsKK30KKworZG91YmxlIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3Rp
Yzo6ZGlzdGFuY2VTY29yZShjb25zdCBDR1BvaW50JiBuZXh0TG9jYXRpb24sIGNvbnN0IENHUG9p
bnQmIGxhc3RMb2NhdGlvbiwgY29uc3QgU2Vjb25kcyYgZGVsdGFUaW1lKQoreworICAgIGRvdWJs
ZSBkaXN0YW5jZSA9IHNxcnQoCisgICAgICAgIG1feFdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24u
eCAtIGxhc3RMb2NhdGlvbi54LCAyKSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhuZXh0TG9j
YXRpb24ueSAtIGxhc3RMb2NhdGlvbi55LCAyKSk7CisgICAgZG91YmxlIHNpemVGYWN0b3IgPSBz
cXJ0KAorICAgICAgICBtX3hXZWlnaHQgKiBwb3cobV9zaXplLndpZHRoLCAyKSArCisgICAgICAg
IG1feVdlaWdodCAqIHBvdyhtX3NpemUuaGVpZ2h0LCAyKSk7CisgICAgZG91YmxlIHNjYWxlZERp
c3RhbmNlID0gZGlzdGFuY2UgLyBzaXplRmFjdG9yOworICAgIGlmIChzY2FsZWREaXN0YW5jZSA8
PSBtX2N1dG9mZikKKyAgICAgICAgcmV0dXJuIHNjYWxlZERpc3RhbmNlICogKG1fcmFtcFVwU3Bl
ZWQgLyBkZWx0YVRpbWUpOworCisgICAgZG91YmxlIGV4cG9uZW50aWFsRGlzdGFuY2UgPSBtX2N1
dG9mZiArIHBvdygoc2NhbGVkRGlzdGFuY2UgLSBtX2N1dG9mZikgLyAoMSAtIG1fY3V0b2ZmKSwg
bV9nYW1tYSk7CisgICAgcmV0dXJuIGV4cG9uZW50aWFsRGlzdGFuY2UgKiAobV9yYW1wVXBTcGVl
ZCAvIGRlbHRhVGltZSk7Cit9CisKK2RvdWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OmF0dGVudWF0aW9uRmFjdG9yKFNlY29uZHMgZGVsdGEpCit7CisgICAgZG91YmxlIG5vcm1hbGl6
ZWRUaW1lRGVsdGEgPSBkZWx0YSAvIG1fcmFtcERvd25TcGVlZDsKKyAgICByZXR1cm4gbm9ybWFs
aXplZFRpbWVEZWx0YSAqIG1fd2VpZ2h0OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2Vj
aGV1cmlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIzY2Rj
YTNkN2MwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1
bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmgKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAm
JiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljIHsKK3B1YmxpYzoK
KyAgICBkb3VibGUgc2NvcmVPZk5leHRUb3VjaChDR1BvaW50IGxvY2F0aW9uKTsKKyAgICB2b2lk
IHJlc2V0KCk7CisKKyAgICB2b2lkIHNldFJhbXBVcFNwZWVkKFNlY29uZHMgc3BlZWQpIHsgbV9y
YW1wVXBTcGVlZCA9IHNwZWVkOyB9CisgICAgdm9pZCBzZXRSYW1wRG93blNwZWVkKFNlY29uZHMg
c3BlZWQpIHsgbV9yYW1wRG93blNwZWVkID0gc3BlZWQ7IH0KKyAgICB2b2lkIHNldFhXZWlnaHQo
ZG91YmxlIHdlaWdodCkgeyBtX3hXZWlnaHQgPSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFlXZWln
aHQoZG91YmxlIHdlaWdodCkgeyBtX3lXZWlnaHQgPSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFNp
emUoQ0dTaXplIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIHZvaWQgc2V0R2FtbWEoZG91
YmxlIGdhbW1hKSB7IG1fZ2FtbWEgPSBnYW1tYTsgfQorICAgIHZvaWQgc2V0R2FtbWFDdXRvZmYo
ZG91YmxlIGN1dG9mZikgeyBtX2N1dG9mZiA9IGN1dG9mZjsgfQorCitwcml2YXRlOgorICAgIGRv
dWJsZSBkaXN0YW5jZVNjb3JlKGNvbnN0IENHUG9pbnQmIG5leHRMb2NhdGlvbiwgY29uc3QgQ0dQ
b2ludCYgbGFzdExvY2F0aW9uLCBjb25zdCBTZWNvbmRzJiBkZWx0YVRpbWUpOworICAgIGRvdWJs
ZSBhdHRlbnVhdGlvbkZhY3RvcihTZWNvbmRzIGRlbHRhKTsKKworICAgIGRvdWJsZSBtX3dlaWdo
dCB7IDAuMSB9OworICAgIFNlY29uZHMgbV9yYW1wVXBTcGVlZCB7IDEgfTsKKyAgICBTZWNvbmRz
IG1fcmFtcERvd25TcGVlZCB7IDEgfTsKKyAgICBkb3VibGUgbV94V2VpZ2h0IHsgMSB9OworICAg
IGRvdWJsZSBtX3lXZWlnaHQgeyAxIH07CisgICAgZG91YmxlIG1fZ2FtbWEgeyAxIH07CisgICAg
ZG91YmxlIG1fY3V0b2ZmIHsgMSB9OworICAgIENHU2l6ZSBtX3NpemUgeyB9OworICAgIFNlY29u
ZHMgbV9sYXN0VG91Y2hUaW1lIHsgMCB9OworICAgIENHUG9pbnQgbV9sYXN0VG91Y2hMb2NhdGlv
biB7IH07CisgICAgZG91YmxlIG1fbGFzdFNjb3JlIHsgMCB9OworfTsKKworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZGY4M2IyYzUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9s
bGVyLmg+CisKK0BjbGFzcyBXS1dlYlZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViUGFnZVByb3h5OworfQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNl
IFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgorQHByb3BlcnR5
IChyZXRhaW4sIG5vbmF0b21pYykgaWQgdGFyZ2V0OworQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0
b21pYykgU0VMIGFjdGlvbjsKK0Bwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIE5TU3RyaW5n
ICpsb2NhdGlvbjsKK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIEJPT0wgcHJlZmVyc1N0
YXR1c0JhckhpZGRlbjsKK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMsIGdldHRlcj1pc1Bs
YXlpbmcpIEJPT0wgcGxheWluZzsKK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMsIGdldHRl
cj1pc1BpY3R1cmVJblBpY3R1cmVBY3RpdmUpIEJPT0wgcGljdHVyZUluUGljdHVyZUFjdGl2ZTsK
KworLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OworLSAodm9pZClz
aG93VUk7CistICh2b2lkKWhpZGVVSTsKKy0gKHZvaWQpdmlkZW9Db250cm9sc01hbmFnZXJEaWRD
aGFuZ2U7CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4w
ZGExZWI5ZjRjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgIldLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyLmgiCisKKyNpbXBvcnQgIkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIgorI2lt
cG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJVSUtpdFNQSS5o
IgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9y
dCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0
IE5TVGltZUludGVydmFsIHNob3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjE7CitzdGF0aWMg
Y29uc3QgTlNUaW1lSW50ZXJ2YWwgYXV0b0hpZGVEZWxheSA9IDQuMDsKK3N0YXRpYyBjb25zdCBk
b3VibGUgcmVxdWlyZWRTY29yZSA9IDAuMTsKKworQGNsYXNzIFdLRnVsbHNjcmVlblN0YWNrVmll
dzsKKworY2xhc3MgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXJQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudCA6IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2b2lk
IHNldFBhcmVudChXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciAqcGFyZW50KSB7IG1fcGFyZW50
ID0gcGFyZW50OyB9CisKKyAgICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9h
dCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fcGFyZW50LnBsYXlpbmcgPSBpc1BsYXlpbmc7
CisgICAgfQorCisgICAgdm9pZCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlQ2hhbmdlZChib29sIGFj
dGl2ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fcGFyZW50LnBpY3R1cmVJblBpY3R1cmVB
Y3RpdmUgPSBhY3RpdmU7CisgICAgfQorCisgICAgdm9pZCBzZXRJbnRlcmZhY2UoUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlQVZLaXQqIGludGVyZmFjZSkKKyAgICB7CisgICAgICAgIGlmIChtX2lu
dGVyZmFjZSAmJiBtX2ludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAg
ICAgIGludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlz
KTsKKyAgICAgICAgbV9pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisgICAgICAgIGlmIChtX2ludGVy
ZmFjZSAmJiBtX2ludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAg
IGludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+YWRkQ2xpZW50KCp0aGlzKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgKm1fcGFyZW50
IHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4g
bV9pbnRlcmZhY2U7Cit9OworCisjcHJhZ21hIG1hcmsgLSBfV0tFeHRyaW5zaWNCdXR0b24KKwor
QGludGVyZmFjZSBfV0tFeHRyaW5zaWNCdXR0b24gOiBVSUJ1dHRvbgorQHByb3BlcnR5IChhc3Np
Z24sIG5vbmF0b21pYykgQ0dTaXplIGV4dHJpbnNpY0NvbnRlbnRTaXplOworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gX1dLRXh0cmluc2ljQnV0dG9uCistICh2b2lkKXNldEV4dHJpbnNpY0NvbnRl
bnRTaXplOihDR1NpemUpc2l6ZQoreworICAgIF9leHRyaW5zaWNDb250ZW50U2l6ZSA9IHNpemU7
CisgICAgW3NlbGYgaW52YWxpZGF0ZUludHJpbnNpY0NvbnRlbnRTaXplXTsKK30KKworLSAoQ0dT
aXplKWludHJpbnNpY0NvbnRlbnRTaXplCit7CisgICAgcmV0dXJuIF9leHRyaW5zaWNDb250ZW50
U2l6ZTsKK30KK0BlbmQKKworI3ByYWdtYSBtYXJrIC0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIKKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciAoKSA8VUlHZXN0dXJl
UmVjb2duaXplckRlbGVnYXRlLCBVSVRvb2xiYXJEZWxlZ2F0ZT4KK0Bwcm9wZXJ0eSAoYXNzaWdu
LCBub25hdG9taWMpIFdLV2ViVmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSByZXRhaW5lZCwg
c2VlIDxyZGFyOi8vcHJvYmxlbS8xNDg4NDY2Nj4uCitAcHJvcGVydHkgKHJlYWRvbmx5LCBub25h
dG9taWMpIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqIF9tYW5hZ2VyOworQHByb3BlcnR5IChy
ZWFkb25seSwgbm9uYXRvbWljKSBDR0Zsb2F0IF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3A7
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB7Cisg
ICAgUmV0YWluUHRyPFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF90b3VjaEdlc3R1cmVS
ZWNvZ25pemVyOworICAgIFJldGFpblB0cjxXS0Z1bGxzY3JlZW5TdGFja1ZpZXc+IF9zdGFja1Zp
ZXc7CisgICAgUmV0YWluUHRyPF9XS0V4dHJpbnNpY0J1dHRvbj4gX2NhbmNlbEJ1dHRvbjsKKyAg
ICBSZXRhaW5QdHI8X1dLRXh0cmluc2ljQnV0dG9uPiBfcGlwQnV0dG9uOworICAgIFJldGFpblB0
cjxVSUJ1dHRvbj4gX2xvY2F0aW9uQnV0dG9uOworICAgIFJldGFpblB0cjxVSUxheW91dEd1aWRl
PiBfdG9wR3VpZGU7CisgICAgUmV0YWluUHRyPE5TTGF5b3V0Q29uc3RyYWludD4gX3RvcENvbnN0
cmFpbnQ7CisgICAgV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMgX3NlY2hldXJp
c3RpYzsKKyAgICBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVs
Q2xpZW50IF9wbGF5YmFja0NsaWVudDsKKyAgICBCT09MIF9oYXNDb250cm9sc01hbmFnZXI7Cisg
ICAgQ0dGbG9hdCBfbm9uWmVyb1N0YXR1c0JhckhlaWdodDsKK30KKworI3ByYWdtYSBtYXJrIC0g
RXh0ZXJuYWwgSW50ZXJmYWNlCisKKy0gKGlkKWluaXRXaXRoV2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBVSUFwcGxp
Y2F0aW9uLnNoYXJlZEFwcGxpY2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3IoX3N0YXR1c0JhckZyYW1lRGlkQ2hhbmdlOikgbmFtZTpVSUFwcGxp
Y2F0aW9uRGlkQ2hhbmdlU3RhdHVzQmFyRnJhbWVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Cisg
ICAgX3NlY2hldXJpc3RpYy5zZXRSYW1wVXBTcGVlZChTZWNvbmRzKDAuMjUpKTsKKyAgICBfc2Vj
aGV1cmlzdGljLnNldFJhbXBEb3duU3BlZWQoU2Vjb25kcygxLikpOworICAgIF9zZWNoZXVyaXN0
aWMuc2V0WFdlaWdodCgwKTsKKyAgICBfc2VjaGV1cmlzdGljLnNldEdhbW1hKDAuMSk7CisgICAg
X3NlY2hldXJpc3RpYy5zZXRHYW1tYUN1dG9mZigwLjA4KTsKKworICAgIHNlbGYuX3dlYlZpZXcg
PSB3ZWJWaWV3OworCisgICAgX3BsYXliYWNrQ2xpZW50LnNldFBhcmVudChzZWxmKTsKKworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbTlNPYmplY3QgY2Fu
Y2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisKKyAg
ICBfcGxheWJhY2tDbGllbnQuc2V0UGFyZW50KG51bGxwdHIpOworCisgICAgW3N1cGVyIGRlYWxs
b2NdOworfQorCistICh2b2lkKXNob3dVSQoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91
c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJ
KSBvYmplY3Q6bmlsXTsKKworICAgIGlmIChfcGxheWluZykgeworICAgICAgICBOU1RpbWVJbnRl
cnZhbCBoaWRlRGVsYXkgPSBhdXRvSGlkZURlbGF5OworICAgICAgICBbc2VsZiBwZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKGhpZGVVSSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpoaWRlRGVs
YXldOworICAgIH0KKyAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246c2hvd0hpZGVBbmlt
YXRpb25EdXJhdGlvbiBhbmltYXRpb25zOiBeeworICAgICAgICBbX3N0YWNrVmlldyBzZXRIaWRk
ZW46Tk9dOworICAgICAgICBbX3N0YWNrVmlldyBzZXRBbHBoYToxXTsKKyAgICAgICAgc2VsZi5w
cmVmZXJzU3RhdHVzQmFySGlkZGVuID0gTk87CisgICAgfV07Cit9CisKKy0gKHZvaWQpaGlkZVVJ
Cit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdl
dDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIG9iamVjdDpuaWxdOworICAgIFtVSVZp
ZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlv
bnM6XnsKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25zdHJh
aW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9wQW5j
aG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlk
ZS50b3BBbmNob3IgY29uc3RhbnQ6c2VsZi52aWV3LnNhZmVBcmVhSW5zZXRzLnRvcF07CisgICAg
ICAgIFtfdG9wQ29uc3RyYWludCBzZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgW19zdGFja1ZpZXcg
c2V0QWxwaGE6MF07CisgICAgICAgIHNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbiA9IFlFUzsK
KyAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgIGlmICghZmluaXNo
ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25z
dHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50
ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZp
ZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3JdOworICAgICAgICBbX3RvcENvbnN0cmFp
bnQgc2V0QWN0aXZlOllFU107CisgICAgICAgIFtfc3RhY2tWaWV3IHNldEhpZGRlbjpZRVNdOwor
ICAgIH1dOworfQorCistICh2b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlCit7Cisg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZpZXcgX3BhZ2VdOworICAgIFBsYXli
YWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IHBhZ2UgPyBw
YWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkgOiBOVUxMOworICAgIFBsYXRmb3JtUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBwbGF5YmFja1Nl
c3Npb25NYW5hZ2VyID8gcGxheWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udHJvbHNNYW5hZ2VySW50
ZXJmYWNlKCkgOiBOVUxMOworICAgIF9wbGF5YmFja0NsaWVudC5zZXRJbnRlcmZhY2UocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKTsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFj
a1Nlc3Npb25Nb2RlbCA9IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA/IHBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSA6IE5VTEw7CisgICAgX2hhc0NvbnRy
b2xzTWFuYWdlciA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsOworICAgIHNlbGYucGxheWluZyA9IHBs
YXliYWNrU2Vzc2lvbk1vZGVsID8gcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpIDog
Tk87CisgICAgW19waXBCdXR0b24gc2V0SGlkZGVuOiFwbGF5YmFja1Nlc3Npb25Nb2RlbF07Cit9
CisKK0BzeW50aGVzaXplIHByZWZlcnNTdGF0dXNCYXJIaWRkZW49X3ByZWZlcnNTdGF0dXNCYXJI
aWRkZW47CistICh2b2lkKXNldFByZWZlcnNTdGF0dXNCYXJIaWRkZW46KEJPT0wpdmFsdWUKK3sK
KyAgICBfcHJlZmVyc1N0YXR1c0JhckhpZGRlbiA9IHZhbHVlOworICAgIFtzZWxmIHNldE5lZWRz
U3RhdHVzQmFyQXBwZWFyYW5jZVVwZGF0ZV07CisgICAgW3NlbGYgX3VwZGF0ZVdlYlZpZXdGdWxs
c2NyZWVuSW5zZXRzXTsKK30KKworLSAodm9pZClzZXRQbGF5aW5nOihCT09MKWlzUGxheWluZwor
eworICAgIGlmIChfcGxheWluZyA9PSBpc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IF9wbGF5aW5nID0gaXNQbGF5aW5nOworICAgIGlmICghX3BsYXlpbmcpCisgICAgICAgIFtzZWxm
IHNob3dVSV07CisgICAgZWxzZSB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1Bl
cmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBv
YmplY3Q6bmlsXTsKKyAgICAgICAgTlNUaW1lSW50ZXJ2YWwgaGlkZURlbGF5ID0gYXV0b0hpZGVE
ZWxheTsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIHdp
dGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6aGlkZURlbGF5XTsKKyAgICB9Cit9CisKKy0gKHZvaWQp
c2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTooQk9PTClhY3RpdmUKK3sKKyAgICBpZiAoX3BpY3R1
cmVJblBpY3R1cmVBY3RpdmUgPT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBfcGlj
dHVyZUluUGljdHVyZUFjdGl2ZSA9IGFjdGl2ZTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRTZWxlY3Rl
ZDphY3RpdmVdOworfQorCisjcHJhZ21hIG1hcmsgLSBVSVZpZXdDb250cm9sbGVyIE92ZXJyaWRl
cworCistICh2b2lkKWxvYWRWaWV3Cit7CisgICAgW3NlbGYgc2V0VmlldzphZG9wdE5TKFtbVUlW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApXSkuZ2V0
KCldOworICAgIHNlbGYudmlldy5hdXRvcmVzaXppbmdNYXNrID0gVUlWaWV3QXV0b3Jlc2l6aW5n
RmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0OworCisgICAg
X2NhbmNlbEJ1dHRvbiA9IFtfV0tFeHRyaW5zaWNCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0
b25UeXBlU3lzdGVtXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6
aW5nTWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgW19jYW5jZWxCdXR0b24gc2V0QWRqdXN0
c0ltYWdlV2hlbkhpZ2hsaWdodGVkOk5PXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRFeHRyaW5z
aWNDb250ZW50U2l6ZTpDR1NpemVNYWtlKDYwLjAsIDQ3LjApXTsKKyAgICBbV0tGdWxsc2NyZWVu
U3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmlldzpfY2FuY2VsQnV0dG9uLmdldCgp
XTsKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOnNlbGYu
Y2xhc3NdOworICAgIFVJSW1hZ2UgKmRvbmVJbWFnZSA9IFtVSUltYWdlIGltYWdlTmFtZWQ6QCJE
b25lIiBpbkJ1bmRsZTpidW5kbGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsK
KyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRJbWFnZTpbZG9uZUltYWdlIGltYWdlV2l0aFJlbmRlcmlu
Z01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6VUlDb250
cm9sU3RhdGVOb3JtYWxdOworICAgIFtfY2FuY2VsQnV0dG9uIHNldFRpbnRDb2xvcjpbVUlDb2xv
ciB3aGl0ZUNvbG9yXV07CisgICAgW19jYW5jZWxCdXR0b24gc2l6ZVRvRml0XTsKKyAgICBbX2Nh
bmNlbEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9jYW5jZWxBY3Rpb246
KSBmb3JDb250cm9sRXZlbnRzOlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07CisKKyAgICBf
cGlwQnV0dG9uID0gW19XS0V4dHJpbnNpY0J1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5
cGVTeXN0ZW1dOworICAgIFtfcGlwQnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNr
SW50b0NvbnN0cmFpbnRzOk5PXTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVu
SGlnaGxpZ2h0ZWQ6Tk9dOworICAgIFtfcGlwQnV0dG9uIHNldEV4dHJpbnNpY0NvbnRlbnRTaXpl
OkNHU2l6ZU1ha2UoNjAuMCwgNDcuMCldOworICAgIFtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBw
bHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3Ol9waXBCdXR0b24uZ2V0KCldOworICAgIFVJSW1hZ2Ug
KnN0YXJ0UGlQSW1hZ2UgPSBbVUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RhcnRQaWN0dXJlSW5QaWN0
dXJlQnV0dG9uIiBpbkJ1bmRsZTpidW5kbGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246
bmlsXTsKKyAgICBVSUltYWdlICpzdG9wUGlQSW1hZ2UgPSBbVUlJbWFnZSBpbWFnZU5hbWVkOkAi
U3RvcFBpY3R1cmVJblBpY3R1cmVCdXR0b24iIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0
aFRyYWl0Q29sbGVjdGlvbjpuaWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdGFydFBp
UEltYWdlIGltYWdlV2l0aFJlbmRlcmluZ01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNU
ZW1wbGF0ZV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtfcGlwQnV0dG9u
IHNldEltYWdlOltzdG9wUGlQSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVu
ZGVyaW5nTW9kZUFsd2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZVNlbGVjdGVk
XTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRUaW50Q29sb3I6W1VJQ29sb3Igd2hpdGVDb2xvcl1dOwor
ICAgIFtfcGlwQnV0dG9uIHNpemVUb0ZpdF07CisgICAgW19waXBCdXR0b24gYWRkVGFyZ2V0OnNl
bGYgYWN0aW9uOkBzZWxlY3RvcihfdG9nZ2xlUGlQQWN0aW9uOikgZm9yQ29udHJvbEV2ZW50czpV
SUNvbnRyb2xFdmVudFRvdWNoVXBJbnNpZGVdOworCisgICAgX3N0YWNrVmlldyA9IGFkb3B0TlMo
W1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYWxsb2NdIGluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czpA
W19jYW5jZWxCdXR0b24uZ2V0KCksIF9waXBCdXR0b24uZ2V0KCldIGF4aXM6VUlMYXlvdXRDb25z
dHJhaW50QXhpc0hvcml6b250YWxdKTsKKyAgICBbX3N0YWNrVmlldyBzZXRUcmFuc2xhdGVzQXV0
b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgW19zdGFja1ZpZXcgc2V0VGFy
Z2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheTpfY2FuY2VsQnV0dG9uLmdldCgpXTsK
KyAgICBbW3NlbGYgdmlld10gYWRkU3Vidmlldzpfc3RhY2tWaWV3LmdldCgpXTsKKworICAgIFVJ
TGF5b3V0R3VpZGUqIHNhZmVBcmVhID0gc2VsZi52aWV3LnNhZmVBcmVhTGF5b3V0R3VpZGU7Cisg
ICAgVUlMYXlvdXRHdWlkZSogbWFyZ2lucyA9IHNlbGYudmlldy5sYXlvdXRNYXJnaW5zR3VpZGU7
CisKKyAgICBfdG9wR3VpZGUgPSBhZG9wdE5TKFtbVUlMYXlvdXRHdWlkZSBhbGxvY10gaW5pdF0p
OworICAgIFtzZWxmLnZpZXcgYWRkTGF5b3V0R3VpZGU6X3RvcEd1aWRlLmdldCgpXTsKKyAgICBO
U0xheW91dEFuY2hvciogdG9wQW5jaG9yID0gW190b3BHdWlkZSB0b3BBbmNob3JdOworICAgIF90
b3BDb25zdHJhaW50ID0gW3RvcEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzYWZlQXJl
YS50b3BBbmNob3JdOworICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50
czpAWworICAgICAgICBfdG9wQ29uc3RyYWludC5nZXQoKSwKKyAgICAgICAgW1tfc3RhY2tWaWV3
IHRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6dG9wQW5jaG9yXSwKKyAgICAgICAg
W1tfc3RhY2tWaWV3IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOm1hcmdp
bnMubGVhZGluZ0FuY2hvcl0sCisgICAgXV07CisKKyAgICBbX3N0YWNrVmlldyBzZXRBbHBoYTow
XTsKKyAgICBbX3N0YWNrVmlldyBzZXRIaWRkZW46WUVTXTsKKyAgICBbc2VsZiB2aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZV07CisKKyAgICBfdG91Y2hHZXN0dXJlUmVjb2duaXplciA9IGFk
b3B0TlMoW1tVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdl
dDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3RvdWNoRGV0ZWN0ZWQ6KV0pOworICAgIFtfdG91Y2hH
ZXN0dXJlUmVjb2duaXplciBzZXRDYW5jZWxzVG91Y2hlc0luVmlldzpOT107CisgICAgW190b3Vj
aEdlc3R1cmVSZWNvZ25pemVyIHNldE1pbmltdW1QcmVzc0R1cmF0aW9uOjBdOworICAgIFtfdG91
Y2hHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZi52aWV3IGFk
ZEdlc3R1cmVSZWNvZ25pemVyOl90b3VjaEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKK30KKwor
LSAodm9pZCl2aWV3V2lsbEFwcGVhcjooQk9PTClhbmltYXRlZAoreworICAgIHNlbGYuX3dlYlZp
ZXcuYXV0b3Jlc2l6aW5nTWFzayA9IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBV
SVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodDsKKyAgICBzZWxmLl93ZWJWaWV3LmZyYW1l
ID0gc2VsZi52aWV3LmJvdW5kczsKKyAgICBbc2VsZi52aWV3IGluc2VydFN1YnZpZXc6c2VsZi5f
d2ViVmlldyBhdEluZGV4OjBdOworCisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5h
Z2VyKQorICAgICAgICBtYW5hZ2VyLT5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEZWxheShhdXRvSGlk
ZURlbGF5KTsKK30KKworLSAodm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc2Vs
ZiBfdXBkYXRlV2ViVmlld0Z1bGxzY3JlZW5JbnNldHNdOworICAgIF9zZWNoZXVyaXN0aWMuc2V0
U2l6ZShzZWxmLnZpZXcuYm91bmRzLnNpemUpOworfQorCistICh2b2lkKXZpZXdXaWxsVHJhbnNp
dGlvblRvU2l6ZTooQ0dTaXplKXNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjooaWQ8VUlW
aWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvcj4pY29vcmRpbmF0b3IKK3sKKyAgICBb
c3VwZXIgdmlld1dpbGxUcmFuc2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGlu
YXRvcjpjb29yZGluYXRvcl07CisgICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFu
c2l0aW9uOiBeKGlkPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0
PiBjb250ZXh0KSB7CisgICAgICAgIHZvaWQgKF53ZWJWaWV3VXBkYXRlQmxvY2spKCkgPSBeewor
ICAgICAgICAgICAgW3NlbGYuX3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhN
aW5pbXVtTGF5b3V0U2l6ZTpzaXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVd
OworICAgICAgICB9OworCisgICAgICAgIFtzZWxmLl93ZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVz
aXplV2l0aFVwZGF0ZXM6d2ViVmlld1VwZGF0ZUJsb2NrXTsKKyAgICAgICAgW3NlbGYuX3dlYlZp
ZXcgX3NldEludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6W1VJQXBwIHN0YXR1c0Jhck9yaWVu
dGF0aW9uXV07CisgICAgfSBjb21wbGV0aW9uOl4oaWQgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0
aW9uQ29vcmRpbmF0b3JDb250ZXh0PmNvbnRleHQpIHsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcg
X2VuZEFuaW1hdGVkUmVzaXplXTsKKyAgICB9XTsKK30KKworLSAoVUlTdGF0dXNCYXJTdHlsZSlw
cmVmZXJyZWRTdGF0dXNCYXJTdHlsZQoreworICAgIHJldHVybiBVSVN0YXR1c0JhclN0eWxlTGln
aHRDb250ZW50OworfQorCistIChCT09MKXByZWZlcnNTdGF0dXNCYXJIaWRkZW4KK3sKKyAgICBy
ZXR1cm4gX3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJh
Z21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlCisKKy0gKEJPT0wpZ2VzdHVyZVJl
Y29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRS
ZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVj
b2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4gWUVTOworfQor
CistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVy
ZVJlY29nbml6ZXIgc2hvdWxkUmVjZWl2ZVRvdWNoOihVSVRvdWNoICopdG91Y2gKK3sKKyAgICBb
c2VsZiBzaG93VUldOworICAgIHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKyNw
cmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCisKK0BkeW5hbWlj
IF9tYW5hZ2VyOworLSAoV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAg
ICBpZiAoYXV0byogcGFnZSA9IFtzZWxmLl93ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgcmV0dXJu
IHBhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0Bk
eW5hbWljIF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3A7CistIChDR0Zsb2F0KV9lZmZlY3Rp
dmVGdWxsc2NyZWVuSW5zZXRUb3AKK3sKKyAgICBpZiAoIXNlbGYucHJlZmVyc1N0YXR1c0Jhckhp
ZGRlbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDR1JlY3QgY2FuY2VsRnJhbWUgPSBfY2Fu
Y2VsQnV0dG9uLmdldCgpLmZyYW1lOworICAgIENHUG9pbnQgbWF4WFkgPSBDR1BvaW50TWFrZShD
R1JlY3RHZXRNYXhYKGNhbmNlbEZyYW1lKSwgQ0dSZWN0R2V0TWF4WShjYW5jZWxGcmFtZSkpOwor
ICAgIHJldHVybiBbX2NhbmNlbEJ1dHRvbiBjb252ZXJ0UG9pbnQ6bWF4WFkgdG9WaWV3OnNlbGYu
dmlld10ueTsKK30KKworLSAodm9pZClfY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBb
W3NlbGYgdGFyZ2V0XSBwZXJmb3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Cit9CisKKy0gKHZv
aWQpX3RvZ2dsZVBpUEFjdGlvbjooaWQpc2VuZGVyCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gW3NlbGYuX3dlYlZpZXcgX3BhZ2VdOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5h
Z2VyID0gcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigpOworICAgIGlmICghcGxheWJhY2tT
ZXNzaW9uTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1QbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2UqIHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IHBsYXliYWNrU2Vzc2lv
bk1hbmFnZXItPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgpOworICAgIGlmICghcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF5YmFja1Nlc3Npb25N
b2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBs
YXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgaWYgKCFwbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnRvZ2dsZVBpY3R1cmVJ
blBpY3R1cmUoKTsKK30KKworLSAodm9pZClfdG91Y2hEZXRlY3RlZDooaWQpc2VuZGVyCit7Cisg
ICAgaWYgKFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzdGF0ZV0gIT0gVUlHZXN0dXJlUmVjb2du
aXplclN0YXRlQmVnYW4gfHwgW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCkgeworICAgICAgICBkb3VibGUgc2NvcmUgPSBfc2Vj
aGV1cmlzdGljLnNjb3JlT2ZOZXh0VG91Y2goW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIGxvY2F0
aW9uSW5WaWV3OnNlbGYudmlld10pOworICAgICAgICBpZiAoc2NvcmUgPiByZXF1aXJlZFNjb3Jl
KQorICAgICAgICAgICAgW3NlbGYgX3Nob3dQaGlzaGluZ0FsZXJ0XTsKKyAgICB9CisgICAgW3Nl
bGYgc2hvd1VJXTsKK30KKworLSAodm9pZClfc3RhdHVzQmFyRnJhbWVEaWRDaGFuZ2U6KE5TTm90
aWZpY2F0aW9uQ2VudGVyICopbm90aWZpY2F0aW9uCit7CisgICAgQ0dGbG9hdCBoZWlnaHQgPSBV
SUFwcGxpY2F0aW9uLnNoYXJlZEFwcGxpY2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0
OworICAgIGlmICghaGVpZ2h0IHx8IGhlaWdodCA9PSBfbm9uWmVyb1N0YXR1c0JhckhlaWdodCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBoZWlnaHQ7
CisgICAgW3NlbGYgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30KKworLSAodm9p
ZClfdXBkYXRlV2ViVmlld0Z1bGxzY3JlZW5JbnNldHMKK3sKKyAgICBpZiAoYXV0byogbWFuYWdl
ciA9IHNlbGYuX21hbmFnZXIpCisgICAgICAgIG1hbmFnZXItPnNldEZ1bGxzY3JlZW5JbnNldFRv
cChzZWxmLl9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3ApOworfQorCistICh2b2lkKV9zaG93
UGhpc2hpbmdBbGVydAoreworICAgIE5TU3RyaW5nICphbGVydFRpdGxlID0gQCJEZWNlcHRpdmUg
V2Vic2l0ZSBXYXJuaW5nIjsKKyAgICBOU1N0cmluZyAqYWxlcnRNZXNzYWdlID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJUaGUgd2Vic2l0ZSBcIiVAXCIgbWF5IGJlIGEgZGVjZXB0aXZl
IHdlYnNpdGUuIFdvdWxkIHlvdSBsaWtlIHRvIGV4aXQgZnVsbHNjcmVlbj8iLCAoTlNTdHJpbmcg
KilzZWxmLmxvY2F0aW9uXTsKKyAgICBVSUFsZXJ0Q29udHJvbGxlciogYWxlcnQgPSBbVUlBbGVy
dENvbnRyb2xsZXIgYWxlcnRDb250cm9sbGVyV2l0aFRpdGxlOmFsZXJ0VGl0bGUgbWVzc2FnZTph
bGVydE1lc3NhZ2UgcHJlZmVycmVkU3R5bGU6VUlBbGVydENvbnRyb2xsZXJTdHlsZUFsZXJ0XTsK
KworICAgIFVJQWxlcnRBY3Rpb24qIGRlZmF1bHRBY3Rpb24gPSBbVUlBbGVydEFjdGlvbiBhY3Rp
b25XaXRoVGl0bGU6QCJFeGl0IEZ1bGxzY3JlZW4iIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZURl
ZmF1bHQgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgW3NlbGYg
X2NhbmNlbEFjdGlvbjphY3Rpb25dOworICAgIH1dOworCisgICAgVUlBbGVydEFjdGlvbiogY2Fu
Y2VsQWN0aW9uID0gW1VJQWxlcnRBY3Rpb24gYWN0aW9uV2l0aFRpdGxlOkAiU3RheSBpbiBGdWxs
c2NyZWVuIiBzdHlsZTpVSUFsZXJ0QWN0aW9uU3R5bGVDYW5jZWwgaGFuZGxlcjpeKFVJQWxlcnRB
Y3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgX3NlY2hldXJpc3RpYy5yZXNldCgpOworICAgIH1d
OworCisgICAgW2FsZXJ0IGFkZEFjdGlvbjpkZWZhdWx0QWN0aW9uXTsKKyAgICBbYWxlcnQgYWRk
QWN0aW9uOmNhbmNlbEFjdGlvbl07CisgICAgW3NlbGYgcHJlc2VudFZpZXdDb250cm9sbGVyOmFs
ZXJ0IGFuaW1hdGVkOllFUyBjb21wbGV0aW9uOm5pbF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8v
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1Mu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJJT1MuaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5o
CnJlbmFtZSB0byBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgKaW5kZXggOWVhYjYyMzQ1MjguLmJiZWYyYTEyODhi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxs
c2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaApAQCAtMjcsMzEgKzI3LDIw
IEBACiAKICNpbXBvcnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nLmg+CiAK
LW5hbWVzcGFjZSBXZWJLaXQgeyAKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLX0KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLX0KLQogQGNsYXNzIFdlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3OwogQGNsYXNzIFdLV2ViVmlldzsKIAogQGludGVyZmFjZSBXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIDogTlNPYmplY3QgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0
aW9uaW5nRGVsZWdhdGU+CitAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4sIG5vbmF0b21pYykg
V2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgKndlYlZpZXdQbGFjZWhvbGRlcjsKK0Bw
cm9wZXJ0eSAocmVhZG9ubHksIGFzc2lnbiwgbm9uYXRvbWljKSBCT09MIGlzRnVsbFNjcmVlbjsK
IAogLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OwotCi0tIChXZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyopd2ViVmlld1BsYWNlaG9sZGVyOwotCi0tIChC
T09MKWlzRnVsbFNjcmVlbjsKLQogLSAodm9pZCllbnRlckZ1bGxTY3JlZW47Ci0tICh2b2lkKWV4
aXRGdWxsU2NyZWVuOwotLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW47Ci0tICh2b2lkKWNs
b3NlOwogLSAodm9pZCliZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVj
dClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7CistICh2b2lkKXJl
cXVlc3RFeGl0RnVsbFNjcmVlbjsKKy0gKHZvaWQpZXhpdEZ1bGxTY3JlZW47CiAtICh2b2lkKWJl
Z2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZp
bmFsRnJhbWU6KENHUmVjdClmaW5hbEZyYW1lOworLSAodm9pZCljbG9zZTsKIC0gKHZvaWQpd2Vi
Vmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbjsKIC0gKHZvaWQpdmlk
ZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcklPUy5tbQpzaW1pbGFyaXR5IGluZGV4IDQ3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQpyZW5hbWUg
dG8gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5tbQppbmRleCAwM2E1NTgyZTBmMy4uOWRjNDI2MmQ1OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVu
L1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0KQEAgLTI5LDYgKzI5LDggQEAKICNp
bXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCIKIAogI2ltcG9ydCAiVUlL
aXRTUEkuaCIKKyNpbXBvcnQgIldLRnVsbHNjcmVlblN0YWNrVmlldy5oIgorI2ltcG9ydCAiV0tG
dWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLV2ViVmlldy5oIgogI2ltcG9y
dCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKQEAg
LTU3LDEwICs1OSw2IEBAIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChMaW5r
UHJlc2VudGF0aW9uKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIGNvbnN0IE5TVGlt
ZUludGVydmFsIHNob3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjE7Ci1zdGF0aWMgY29uc3Qg
TlNUaW1lSW50ZXJ2YWwgYXV0b0hpZGVEZWxheSA9IDQuMDsKLXN0YXRpYyBjb25zdCBDR0Zsb2F0
IGZvbnRTaXplID0gMTI7Ci0KIHN0YXRpYyB2b2lkIHJlcGxhY2VWaWV3V2l0aFZpZXcoVUlWaWV3
ICp2aWV3LCBVSVZpZXcgKm90aGVyVmlldykKIHsKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07
CkBAIC0xMTgsMzY1ICsxMTYsMjMxIEBAIHN0cnVjdCBXS1dlYlZpZXdTdGF0ZSB7CiAgICAgCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI3ByYWdtYSBtYXJrIC0KIAotQGludGVyZmFjZSBfV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVyIDxVSUdlc3R1cmVSZWNv
Z25pemVyRGVsZWdhdGU+Ci1AcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBOU0FycmF5ICpz
YXZlZENvbnN0cmFpbnRzOwotQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3ICpj
b250ZW50VmlldzsKLUBwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIGlkIHRhcmdldDsKLUBw
cm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIFNFTCBhY3Rpb247CitAaW50ZXJmYWNlIFdLRnVs
bHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgOiBOU09iamVjdCA8VUlWaWV3Q29udHJvbGxlckFu
aW1hdGVkVHJhbnNpdGlvbmluZywgVUlWaWV3Q29udHJvbGxlckludGVyYWN0aXZlVHJhbnNpdGlv
bmluZz4KK0Bwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIFVJVmlld0NvbnRyb2xsZXIqIHZp
ZXdDb250cm9sbGVyOworQHByb3BlcnR5IChub25hdG9taWMpIENHUmVjdCBpbml0aWFsRnJhbWU7
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IGZpbmFsRnJhbWU7CitAcHJvcGVydHkgKG5v
bmF0b21pYywgZ2V0dGVyPWlzQW5pbWF0aW5nSW4pIEJPT0wgYW5pbWF0aW5nSW47CiBAZW5kCiAK
LUBpbXBsZW1lbnRhdGlvbiBfV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgewotICAgIFJldGFp
blB0cjxVSVZpZXc+IF9iYWNrZ3JvdW5kVmlldzsKLSAgICBSZXRhaW5QdHI8VUlMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcj4gX3RvdWNoR2VzdHVyZVJlY29nbml6ZXI7Ci0gICAgUmV0YWluUHRy
PFVJQnV0dG9uPiBfY2FuY2VsQnV0dG9uOwotICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2xvY2F0
aW9uQnV0dG9uOwotICAgIFJldGFpblB0cjxVSVZpc3VhbEVmZmVjdFZpZXc+IF92aXN1YWxFZmZl
Y3RWaWV3OworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIg
eworICAgIENHUmVjdCBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzOworICAgIENHUmVjdCBfZmluYWxN
YXNrVmlld0JvdW5kczsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBfaW5pdGlhbEFuaW1hdGluZ1Zp
ZXdUcmFuc2Zvcm07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX2ZpbmFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybTsKKyAgICBDR1BvaW50IF9pbml0aWFsTWFza1ZpZXdDZW50ZXI7CisgICAgQ0dQb2lu
dCBfZmluYWxNYXNrVmlld0NlbnRlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfbWFza1ZpZXc7
CisgICAgUmV0YWluUHRyPFVJVmlldz4gX2FuaW1hdGluZ1ZpZXc7CisgICAgUmV0YWluUHRyPGlk
PFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0OworICAgIENH
RmxvYXQgX2luaXRpYWxCYWNrZ3JvdW5kQWxwaGE7CisgICAgQ0dGbG9hdCBfZmluYWxCYWNrZ3Jv
dW5kQWxwaGE7CiB9CiAKLS0gKHZvaWQpZGVhbGxvYworLSAoTlNUaW1lSW50ZXJ2YWwpdHJhbnNp
dGlvbkR1cmF0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRy
YW5zaXRpb25Db250ZXh0CiB7Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJl
cXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwor
ICAgIGNvbnN0IE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOworICAgIHJl
dHVybiBhbmltYXRpb25EdXJhdGlvbjsKIH0KIAotLSAodm9pZCl2aWV3V2lsbFRyYW5zaXRpb25U
b1NpemU6KENHU2l6ZSlzaXplIHdpdGhUcmFuc2l0aW9uQ29vcmRpbmF0b3I6KGlkPFVJVmlld0Nv
bnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3I+KWNvb3JkaW5hdG9yCistICh2b2lkKWNvbmZp
Z3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0ZvclRyYW5zaXRpb246KGlkPFVJVmlld0NvbnRyb2xs
ZXJDb250ZXh0VHJhbnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKIHsKLSAgICBbc3VwZXIg
dmlld1dpbGxUcmFuc2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpj
b29yZGluYXRvcl07Ci0gICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9u
OiBeKGlkPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250
ZXh0KSB7CisgICAgX2NvbnRleHQgPSB0cmFuc2l0aW9uQ29udGV4dDsKKyAgICBVSVZpZXcgKmZy
b21WaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4
dEZyb21WaWV3S2V5XTsKKyAgICBVSVZpZXcgKnRvVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCB2
aWV3Rm9yS2V5OlVJVHJhbnNpdGlvbkNvbnRleHRUb1ZpZXdLZXldOwogCi0gICAgICAgIHZvaWQg
KF53ZWJWaWV3VXBkYXRlQmxvY2spKCkgPSBeewotICAgICAgICAgICAgWyhXS1dlYlZpZXcgKilb
c2VsZiBjb250ZW50Vmlld10gX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5
b3V0U2l6ZTpzaXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVdOwotICAgICAg
ICB9OworICAgIENHUmVjdCBpbmxpbmVGcmFtZSA9IF9hbmltYXRpbmdJbiA/IF9pbml0aWFsRnJh
bWUgOiBfZmluYWxGcmFtZTsKKyAgICBDR1JlY3QgZnVsbHNjcmVlbkZyYW1lID0gX2FuaW1hdGlu
Z0luID8gX2ZpbmFsRnJhbWUgOiBfaW5pdGlhbEZyYW1lOworICAgIF9hbmltYXRpbmdWaWV3ID0g
X2FuaW1hdGluZ0luID8gdG9WaWV3IDogZnJvbVZpZXc7CiAKLSAgICAgICAgWyhXS1dlYlZpZXcg
Kilbc2VsZiBjb250ZW50Vmlld10gX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp3ZWJW
aWV3VXBkYXRlQmxvY2tdOwotICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3
XSBfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTpbVUlBcHAgc3RhdHVzQmFyT3JpZW50
YXRpb25dXTsKLSAgICB9IGNvbXBsZXRpb246XihpZCA8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRp
b25Db29yZGluYXRvckNvbnRleHQ+Y29udGV4dCkgewotICAgICAgICBbKFdLV2ViVmlldyAqKVtz
ZWxmIGNvbnRlbnRWaWV3XSBfZW5kQW5pbWF0ZWRSZXNpemVdOwotICAgIH1dOwotfQorICAgIENH
UmVjdCBib3VuZHNSZWN0ID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KEZs
b2F0UmVjdChpbmxpbmVGcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGZ1bGxzY3JlZW5GcmFt
ZSk7CisgICAgYm91bmRzUmVjdC5vcmlnaW4gPSBDR1BvaW50WmVybzsKIAotKyAodm9pZCljb25m
aWd1cmVWaWV3OihVSVZpZXcgKil2aWV3IHdpdGhCYWNrZ3JvdW5kRmlsbE9mQ29sb3I6KFVJQ29s
b3IgKilmaWxsQ29sb3Igb3BhY2l0eTooQ0dGbG9hdClvcGFjaXR5IGZpbHRlcjooTlNTdHJpbmcg
KilmaWx0ZXIKLXsKLSAgICBfVUlWaXN1YWxFZmZlY3RMYXllckNvbmZpZyAqYmFzZUxheWVyQ29u
ZmlnID0gW19VSVZpc3VhbEVmZmVjdExheWVyQ29uZmlnIGxheWVyV2l0aEZpbGxDb2xvcjpmaWxs
Q29sb3Igb3BhY2l0eTpvcGFjaXR5IGZpbHRlclR5cGU6ZmlsdGVyXTsKLSAgICBbW1tfVUlWaXN1
YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENvbnRlbnRDb25maWc6YmFzZUxheWVyQ29uZmlnXSBj
b250ZW50Q29uZmlnXSBjb25maWd1cmVMYXllclZpZXc6dmlld107Ci19CisgICAgX2luaXRpYWxN
YXNrVmlld0JvdW5kcyA9IF9hbmltYXRpbmdJbiA/IGJvdW5kc1JlY3QgOiBbX2FuaW1hdGluZ1Zp
ZXcgYm91bmRzXTsKKyAgICBfaW5pdGlhbE1hc2tWaWV3Q2VudGVyID0gQ0dQb2ludE1ha2UoQ0dS
ZWN0R2V0TWlkWChbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSksIENHUmVjdEdldE1pZFkoW19hbmlt
YXRpbmdWaWV3IGJvdW5kc10pKTsKKyAgICBfZmluYWxNYXNrVmlld0JvdW5kcyA9IF9hbmltYXRp
bmdJbiA/IFtfYW5pbWF0aW5nVmlldyBib3VuZHNdIDogYm91bmRzUmVjdDsKKyAgICBfZmluYWxN
YXNrVmlld0NlbnRlciA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW19hbmltYXRpbmdWaWV3
IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFtfYW5pbWF0aW5nVmlldyBib3VuZHNdKSk7CiAKLS0g
KHZvaWQpX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlzdWFsRWZmZWN0VmlldzooVUlWaXN1YWxFZmZl
Y3RWaWV3ICopdmlzdWFsRWZmZWN0VmlldwotewotICAgIFJldGFpblB0cjxVSVZpc3VhbEVmZmVj
dD4gdmlzdWFsRWZmZWN0OworICAgIEZsb2F0UmVjdCBzY2FsZVJlY3QgPSBzbWFsbGVzdFJlY3RX
aXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KEZsb2F0UmVjdChmdWxsc2NyZWVuRnJhbWUpLnNpemUo
KS5hc3BlY3RSYXRpbygpLCBpbmxpbmVGcmFtZSk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2Nh
bGVUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZVJlY3Qud2lkdGgo
KSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLndpZHRoLCBzY2FsZVJlY3QuaGVpZ2h0KCkgLyBmdWxs
c2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0
ZVRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKENHUmVjdEdldE1p
ZFgoaW5saW5lRnJhbWUpIC0gQ0dSZWN0R2V0TWlkWChmdWxsc2NyZWVuRnJhbWUpLCBDR1JlY3RH
ZXRNaWRZKGlubGluZUZyYW1lKSAtIENHUmVjdEdldE1pZFkoZnVsbHNjcmVlbkZyYW1lKSk7CiAK
LSAgICBpZiAoVUlBY2Nlc3NpYmlsaXR5SXNSZWR1Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpIHsK
LSAgICAgICAgdmlzdWFsRWZmZWN0ID0gW1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0XTsKLSAg
ICAgICAgW1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6
W1VJQ29sb3IgY29sb3JXaXRoUmVkOig0My4wIC8gMjU1LjApIGdyZWVuOig0Ni4wIC8gMjU1LjAp
IGJsdWU6KDQ4LjAgLyAyNTUuMCkgYWxwaGE6MS4wXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
UmV0YWluUHRyPFVJQ29sb3JFZmZlY3Q+IHNhdHVyYXRpb25FZmZlY3QgPSBbVUlDb2xvckVmZmVj
dCBjb2xvckVmZmVjdFNhdHVyYXRlOjEuOF07Ci0gICAgICAgIFJldGFpblB0cjxVSUJsdXJFZmZl
Y3Q+IGJsdXJFZmZlY3QgPSBbVUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVzOlVJUm91
bmRUb1NjcmVlblNjYWxlKDE3LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVuXSldOwotICAgICAgICBS
ZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3Q+IGNvbWJpbmVkRWZmZWN0cyA9IFtVSVZpc3VhbEVmZmVj
dCBlZmZlY3RDb21iaW5pbmdFZmZlY3RzOkBbYmx1ckVmZmVjdC5nZXQoKSwgc2F0dXJhdGlvbkVm
ZmVjdC5nZXQoKV1dOwotICAgICAgICB2aXN1YWxFZmZlY3QgPSBjb21iaW5lZEVmZmVjdHM7Ci0g
ICAgICAgIFtbdmlzdWFsRWZmZWN0VmlldyBjb250ZW50Vmlld10gc2V0QmFja2dyb3VuZENvbG9y
Om5pbF07Ci0gICAgfQorICAgIENHQWZmaW5lVHJhbnNmb3JtIGZpbmFsVHJhbnNmb3JtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2NhbGVUcmFuc2Zvcm0sIHRyYW5zbGF0ZVRyYW5zZm9ybSk7
CisgICAgX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtID0gX2FuaW1hdGluZ0luID8gZmlu
YWxUcmFuc2Zvcm0gOiBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIF9maW5hbEFuaW1h
dGluZ1ZpZXdUcmFuc2Zvcm0gPSBfYW5pbWF0aW5nSW4gPyBDR0FmZmluZVRyYW5zZm9ybUlkZW50
aXR5IDogZmluYWxUcmFuc2Zvcm07CiAKLSAgICBbdmlzdWFsRWZmZWN0VmlldyBzZXRFZmZlY3Q6
dmlzdWFsRWZmZWN0LmdldCgpXTsKKyAgICBfaW5pdGlhbEJhY2tncm91bmRBbHBoYSA9IF9hbmlt
YXRpbmdJbiA/IDAgOiAxOworICAgIF9maW5hbEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJ
biA/IDEgOiAwOwogfQogCi0tIChVSVZpc3VhbEVmZmVjdFZpZXcgKil2aXN1YWxFZmZlY3RWaWV3
V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUKKy0gKHZvaWQpYW5pbWF0ZVRyYW5zaXRpb246KGlkPFVJ
Vmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKIHsK
LSAgICBSZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3RWaWV3PiB2aXN1YWxFZmZlY3RWaWV3ID0gYWRv
cHROUyhbW1VJVmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6W1VJVmlzdWFs
RWZmZWN0IGVtcHR5RWZmZWN0XV0pOwotICAgIFtzZWxmIF91cGRhdGVUcmFuc3BhcmVuY3lPZlZp
c3VhbEVmZmVjdFZpZXc6dmlzdWFsRWZmZWN0Vmlldy5nZXQoKV07Ci0KLSAgICBSZXRhaW5QdHI8
VUlWaWV3PiBiYWNrTGF5ZXJUaW50VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6W3Zpc3VhbEVmZmVjdFZpZXcgYm91bmRzXV0pOwotICAgIFtiYWNrTGF5ZXJUaW50
VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRo
IHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpXTsKLSAgICBbYmFja0xheWVyVGlu
dFZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5hYmxlZDpOT107Ci0gICAgW1tzZWxmIGNsYXNzXSBj
b25maWd1cmVWaWV3OmJhY2tMYXllclRpbnRWaWV3LmdldCgpIHdpdGhCYWNrZ3JvdW5kRmlsbE9m
Q29sb3I6W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MC4wIGFscGhhOjAuNTVdIG9wYWNpdHk6MS4w
IGZpbHRlcjprQ0FGaWx0ZXJOb3JtYWxCbGVuZE1vZGVdOwotICAgIFtbdmlzdWFsRWZmZWN0Vmll
dyBjb250ZW50Vmlld10gYWRkU3VidmlldzpiYWNrTGF5ZXJUaW50Vmlldy5nZXQoKV07CisgICAg
W3NlbGYgY29uZmlndXJlSW5pdGlhbEFuZEZpbmFsU3RhdGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0
aW9uQ29udGV4dF07CiAKLSAgICBSZXRhaW5QdHI8VUlWaWV3PiB0b3BMYXllclRpbnRWaWV3ID0g
YWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbdmlzdWFsRWZmZWN0VmlldyBi
b3VuZHNdXSk7Ci0gICAgW3RvcExheWVyVGludFZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlW
aWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxl
SGVpZ2h0KV07Ci0gICAgW3RvcExheWVyVGludFZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5hYmxl
ZDpOT107Ci0gICAgW1tzZWxmIGNsYXNzXSBjb25maWd1cmVWaWV3OnRvcExheWVyVGludFZpZXcu
Z2V0KCkgd2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZTox
LjAgYWxwaGE6MC4xNF0gb3BhY2l0eToxLjAgZmlsdGVyOmtDQUZpbHRlck5vcm1hbEJsZW5kTW9k
ZV07Ci0gICAgW1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OnRvcExh
eWVyVGludFZpZXcuZ2V0KCldOwotCi0gICAgW3NlbGYgX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlz
dWFsRWZmZWN0Vmlldzp2aXN1YWxFZmZlY3RWaWV3LmdldCgpXTsKKyAgICBfbWFza1ZpZXcgPSBh
ZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3Jv
dW5kQ29sb3I6W1VJQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRz
Ol9pbml0aWFsTWFza1ZpZXdCb3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0
aWFsTWFza1ZpZXdDZW50ZXJdOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFz
a1ZpZXcuZ2V0KCldOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtXTsKKyAgICAKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcg
PSBbdHJhbnNpdGlvbkNvbnRleHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcg
YWRkU3VidmlldzpfYW5pbWF0aW5nVmlldy5nZXQoKV07CiAKLSAgICByZXR1cm4gdmlzdWFsRWZm
ZWN0Vmlldy5hdXRvcmVsZWFzZSgpOwotfQorICAgIFVJV2luZG93ICp3aW5kb3cgPSBjb250YWlu
ZXJWaWV3LndpbmRvdzsKKyAgICB3aW5kb3cuYmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29s
b3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlhbEJhY2tncm91bmRBbHBoYV07CiAKLXN0YXRpYyBV
SUVkZ2VJbnNldHMgbWlycm9yRWRnZUluc2V0cyhVSUVkZ2VJbnNldHMgaW5zZXRzKQotewotICAg
IHJldHVybiBVSUVkZ2VJbnNldHNNYWtlKGluc2V0cy50b3AsIGluc2V0cy5yaWdodCwgaW5zZXRz
LmJvdHRvbSwgaW5zZXRzLmxlZnQpOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpb
c2VsZiB0cmFuc2l0aW9uRHVyYXRpb246dHJhbnNpdGlvbkNvbnRleHRdIGRlbGF5OjAgb3B0aW9u
czpVSVZpZXdBbmltYXRpb25PcHRpb25DdXJ2ZUVhc2VJbk91dCBhbmltYXRpb25zOl57CisgICAg
ICAgIFtzZWxmIHVwZGF0ZVdpdGhQZXJjZW50OjFdOworICAgIH0gY29tcGxldGlvbjpeKEJPT0wg
ZmluaXNoZWQpIHsKKyAgICAgICAgW3NlbGYgYW5pbWF0aW9uRW5kZWQ6IVt0cmFuc2l0aW9uQ29u
dGV4dCB0cmFuc2l0aW9uV2FzQ2FuY2VsbGVkXV07CisgICAgICAgIFt0cmFuc2l0aW9uQ29udGV4
dCBjb21wbGV0ZVRyYW5zaXRpb246IVt0cmFuc2l0aW9uQ29udGV4dCB0cmFuc2l0aW9uV2FzQ2Fu
Y2VsbGVkXV07CisgICAgfV07CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZUxheW91dE1hcmdpbnMKKy0g
KHZvaWQpYW5pbWF0aW9uRW5kZWQ6KEJPT0wpdHJhbnNpdGlvbkNvbXBsZXRlZAogewotICAgIFVJ
VmlldyAqdmlldyA9IFtzZWxmIHZpZXddOwotICAgIFt2aWV3IHNldFByZXNlcnZlc1N1cGVydmll
d0xheW91dE1hcmdpbnM6Tk9dOwotCi0gICAgVUlFZGdlSW5zZXRzIHRhcmdldEluc2V0cyA9IFt2
aWV3IHNhZmVBcmVhSW5zZXRzXTsKLSAgICB0YXJnZXRJbnNldHMudG9wID0gc3RkOjptYXgodGFy
Z2V0SW5zZXRzLnRvcCwgMjAuMCk7Ci0gICAgW3ZpZXcgc2V0TGF5b3V0TWFyZ2luczp0YXJnZXRJ
bnNldHNdOwotfQorICAgIGlmICgoW3NlbGYgaXNBbmltYXRpbmdJbl0gJiYgIXRyYW5zaXRpb25D
b21wbGV0ZWQpIHx8ICghW3NlbGYgaXNBbmltYXRpbmdJbl0gJiYgdHJhbnNpdGlvbkNvbXBsZXRl
ZCkpCisgICAgICAgIFtfYW5pbWF0aW5nVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKIAotLSAo
dm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKLXsKLSAgICBbc2VsZiBfdXBkYXRlTGF5b3V0TWFy
Z2luc107CisgICAgW19hbmltYXRpbmdWaWV3IHNldE1hc2tWaWV3Om5pbF07CisgICAgX21hc2tW
aWV3ID0gbmlsOworICAgIF9hbmltYXRpbmdWaWV3ID0gbmlsOwogfQogCi0tICAodm9pZClzZXRM
b2NhdGlvbjooTlNTdHJpbmcgKilsb2NhdGlvbk5hbWUgc2VjdXJlOihCT09MKXNlY3VyZSB0cnVz
dGVkTmFtZTooQk9PTCl0cnVzdGVkTmFtZSB0cnVzdGVkU2l0ZTooQk9PTCl0cnVzdGVkU2l0ZQor
LSAodm9pZClzdGFydEludGVyYWN0aXZlVHJhbnNpdGlvbjooaWQgPFVJVmlld0NvbnRyb2xsZXJD
b250ZXh0VHJhbnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKIHsKLSAgICBVSUNvbG9yICpn
cmVlblRpbnQgPSBbVUlDb2xvciBjb2xvcldpdGhSZWQ6MTAwIC8gMjU1LjAgZ3JlZW46MTc1IC8g
MjU1LjAgYmx1ZTo5OSAvIDI1NS4wIGFscGhhOjEuMF07Ci0gICAgVUlDb2xvciAqd2hpdGVUaW50
ID0gW1VJQ29sb3Igd2hpdGVDb2xvcl07Ci0KLSAgICBmbG9hdCBoUGFkZGluZyA9IDE0OwotICAg
IE5TU3RyaW5nICpsb2NrSW1hZ2VOYW1lID0gQCJMb2NrTWluaSI7CisgICAgW3NlbGYgY29uZmln
dXJlSW5pdGlhbEFuZEZpbmFsU3RhdGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dF07
CiAKLSAgICBmbG9hdCBsb2NrU3BhY2luZyA9IHNlY3VyZSA/IDEwIDogMDsKKyAgICBfbWFza1Zp
ZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRC
YWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3IgYmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0
Qm91bmRzOl9pbml0aWFsTWFza1ZpZXdCb3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVy
Ol9pbml0aWFsTWFza1ZpZXdDZW50ZXJdOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmll
dzpfbWFza1ZpZXcuZ2V0KCldOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2lu
aXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtXTsKIAotICAgIFVJRWRnZUluc2V0cyBsb2NhdGlv
bkNvbnRlbnRFZGdlSW5zZXRzID0gVUlFZGdlSW5zZXRzTWFrZSgwLCBoUGFkZGluZytsb2NrU3Bh
Y2luZywgMCwgaFBhZGRpbmcpOwotICAgIFVJRWRnZUluc2V0cyBsb2NhdGlvbkltYWdlRWRnZUlu
c2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgLWxvY2tTcGFjaW5nLCAwLCAwKTsKLQotICAgIGlm
IChbVUlWaWV3IHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25Gb3JTZW1hbnRpY0NvbnRlbnRB
dHRyaWJ1dGU6W1tzZWxmIHZpZXddIHNlbWFudGljQ29udGVudEF0dHJpYnV0ZV1dID09IFVJVXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvblJpZ2h0VG9MZWZ0KSB7Ci0gICAgICAgIGxvY2F0aW9u
Q29udGVudEVkZ2VJbnNldHMgPSBtaXJyb3JFZGdlSW5zZXRzKGxvY2F0aW9uQ29udGVudEVkZ2VJ
bnNldHMpOwotICAgICAgICBsb2NhdGlvbkltYWdlRWRnZUluc2V0cyA9IG1pcnJvckVkZ2VJbnNl
dHMobG9jYXRpb25JbWFnZUVkZ2VJbnNldHMpOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNl
dENvbnRlbnRIb3Jpem9udGFsQWxpZ25tZW50OlVJQ29udHJvbENvbnRlbnRIb3Jpem9udGFsQWxp
Z25tZW50UmlnaHRdOworICAgIFVJVmlldyAqY29udGFpbmVyVmlldyA9IFt0cmFuc2l0aW9uQ29u
dGV4dCBjb250YWluZXJWaWV3XTsKKyAgICBbY29udGFpbmVyVmlldyBhZGRTdWJ2aWV3Ol9hbmlt
YXRpbmdWaWV3LmdldCgpXTsKK30KKworLSAodm9pZCl1cGRhdGVXaXRoUGVyY2VudDooQ0dGbG9h
dClwZXJjZW50Cit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcGVyY2VudFRyYW5zZm9ybSA9IF9p
bml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmEgKz0g
cGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmEgLSBfaW5pdGlhbEFuaW1h
dGluZ1ZpZXdUcmFuc2Zvcm0uYSk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5iICs9IHBlcmNlbnQg
KiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5iIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3
VHJhbnNmb3JtLmIpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYyArPSBwZXJjZW50ICogKF9maW5h
bEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYyAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9y
bS5jKTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmQgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRp
bmdWaWV3VHJhbnNmb3JtLmQgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uZCk7Cisg
ICAgcGVyY2VudFRyYW5zZm9ybS50eCArPSBwZXJjZW50ICogKF9maW5hbEFuaW1hdGluZ1ZpZXdU
cmFuc2Zvcm0udHggLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHgpOworICAgIHBl
cmNlbnRUcmFuc2Zvcm0udHkgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtLnR5IC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR5KTsKKyAgICBbX2FuaW1h
dGluZ1ZpZXcgc2V0VHJhbnNmb3JtOnBlcmNlbnRUcmFuc2Zvcm1dOworCisgICAgQ0dSZWN0IHBl
cmNlbnRCb3VuZHMgPSBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzOworICAgIHBlcmNlbnRCb3VuZHMu
b3JpZ2luLnggKz0gcGVyY2VudCAqIChfZmluYWxNYXNrVmlld0JvdW5kcy5vcmlnaW4ueCAtIF9p
bml0aWFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLngpOworICAgIHBlcmNlbnRCb3VuZHMub3JpZ2lu
LnkgKz0gcGVyY2VudCAqIChfZmluYWxNYXNrVmlld0JvdW5kcy5vcmlnaW4ueSAtIF9pbml0aWFs
TWFza1ZpZXdCb3VuZHMub3JpZ2luLnkpOworICAgIHBlcmNlbnRCb3VuZHMuc2l6ZS53aWR0aCAr
PSBwZXJjZW50ICogKF9maW5hbE1hc2tWaWV3Qm91bmRzLnNpemUud2lkdGggLSBfaW5pdGlhbE1h
c2tWaWV3Qm91bmRzLnNpemUud2lkdGgpOworICAgIHBlcmNlbnRCb3VuZHMuc2l6ZS5oZWlnaHQg
Kz0gcGVyY2VudCAqIChfZmluYWxNYXNrVmlld0JvdW5kcy5zaXplLmhlaWdodCAtIF9pbml0aWFs
TWFza1ZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQpOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRzOnBl
cmNlbnRCb3VuZHNdOworCisgICAgQ0dQb2ludCBwZXJjZW50Q2VudGVyID0gX2luaXRpYWxNYXNr
Vmlld0NlbnRlcjsKKyAgICBwZXJjZW50Q2VudGVyLnggKz0gcGVyY2VudCAqIChfZmluYWxNYXNr
Vmlld0NlbnRlci54IC0gX2ZpbmFsTWFza1ZpZXdDZW50ZXIueCk7CisgICAgcGVyY2VudENlbnRl
ci55ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdDZW50ZXIueSAtIF9maW5hbE1hc2tWaWV3
Q2VudGVyLnkpOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOnBlcmNlbnRDZW50ZXJdOworCisg
ICAgVUlXaW5kb3cgKndpbmRvdyA9IFtfYW5pbWF0aW5nVmlldyB3aW5kb3ddOworICAgIHdpbmRv
dy5iYWNrZ3JvdW5kQ29sb3IgPSBbVUlDb2xvciBjb2xvcldpdGhXaGl0ZTowIGFscGhhOl9pbml0
aWFsQmFja2dyb3VuZEFscGhhICsgcGVyY2VudCAqIChfZmluYWxCYWNrZ3JvdW5kQWxwaGEgLSBf
aW5pdGlhbEJhY2tncm91bmRBbHBoYSldOworfQorCistICh2b2lkKXVwZGF0ZVdpdGhQZXJjZW50
OihDR0Zsb2F0KXBlcmNlbnQgdHJhbnNsYXRpb246KENHU2l6ZSl0cmFuc2xhdGlvbiBhbmNob3I6
KENHUG9pbnQpYW5jaG9yCit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcGVyY2VudFRyYW5zZm9y
bSA9IF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAgICBwZXJjZW50VHJhbnNmb3Jt
LmEgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmEgLSBfaW5pdGlh
bEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYSk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5iICs9IHBl
cmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5iIC0gX2luaXRpYWxBbmltYXRp
bmdWaWV3VHJhbnNmb3JtLmIpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYyArPSBwZXJjZW50ICog
KF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYyAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybS5jKTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmQgKz0gcGVyY2VudCAqIChfZmluYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLmQgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0u
ZCk7CisgICAgcGVyY2VudFRyYW5zZm9ybS50eCArPSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFu
c2Zvcm0udHggKyB0cmFuc2xhdGlvbi53aWR0aDsKKyAgICBwZXJjZW50VHJhbnNmb3JtLnR5ICs9
IF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS50eSArIHRyYW5zbGF0aW9uLmhlaWdodDsK
KyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0VHJhbnNmb3JtOnBlcmNlbnRUcmFuc2Zvcm1dOworCisg
ICAgVUlXaW5kb3cgKndpbmRvdyA9IFtfYW5pbWF0aW5nVmlldyB3aW5kb3ddOworICAgIHdpbmRv
dy5iYWNrZ3JvdW5kQ29sb3IgPSBbVUlDb2xvciBjb2xvcldpdGhXaGl0ZTowIGFscGhhOl9pbml0
aWFsQmFja2dyb3VuZEFscGhhICsgcGVyY2VudCAqIChfZmluYWxCYWNrZ3JvdW5kQWxwaGEgLSBf
aW5pdGlhbEJhY2tncm91bmRBbHBoYSldOworfQorCistKHZvaWQpZW5kOihCT09MKWNhbmNlbGxl
ZCB7CisgICAgaWYgKGNhbmNlbGxlZCkgeworICAgICAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVy
YXRpb246W3NlbGYgdHJhbnNpdGlvbkR1cmF0aW9uOl9jb250ZXh0LmdldCgpXSBhbmltYXRpb25z
Ol57CisgICAgICAgICAgICBbc2VsZiB1cGRhdGVXaXRoUGVyY2VudDowXTsKKyAgICAgICAgfSBj
b21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCkgeworICAgICAgICAgICAgW19jb250ZXh0IGNhbmNl
bEludGVyYWN0aXZlVHJhbnNpdGlvbl07CisgICAgICAgICAgICBbX2NvbnRleHQgY29tcGxldGVU
cmFuc2l0aW9uOk5PXTsKKyAgICAgICAgfV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW1VJVmll
dyBhbmltYXRlV2l0aER1cmF0aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlvbjpfY29udGV4dC5n
ZXQoKV0gYW5pbWF0aW9uczpeeworICAgICAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBlcmNlbnQ6
MV07CisgICAgICAgIH0gY29tcGxldGlvbjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAgICAgICAg
IFtfY29udGV4dCBmaW5pc2hJbnRlcmFjdGl2ZVRyYW5zaXRpb25dOworICAgICAgICAgICAgW19j
b250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjpZRVNdOworICAgICAgICB9XTsKICAgICB9Ci0KLSAg
ICBbX2xvY2F0aW9uQnV0dG9uIHNldFRpdGxlQ29sb3I6KHRydXN0ZWROYW1lID8gZ3JlZW5UaW50
IDogd2hpdGVUaW50KSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBpZiAo
c2VjdXJlKSB7Ci0gICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9y
Q2xhc3M6W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgY2xhc3NdXTsKLSAgICAgICAgVUlJ
bWFnZSAqbG9ja0ltYWdlID0gW1VJSW1hZ2UgaW1hZ2VOYW1lZDpsb2NrSW1hZ2VOYW1lIGluQnVu
ZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpuaWxdOwotICAgICAgICBb
X2xvY2F0aW9uQnV0dG9uIHNldEltYWdlOltsb2NrSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9k
ZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xT
dGF0ZU5vcm1hbF07Ci0gICAgICAgIFtbX2xvY2F0aW9uQnV0dG9uIGltYWdlVmlld10gc2V0VGlu
dENvbG9yOnRydXN0ZWRTaXRlID8gZ3JlZW5UaW50IDogd2hpdGVUaW50XTsKLSAgICAgICAgW19s
b2NhdGlvbkJ1dHRvbiBzZXRUaW50Q29sb3I6dHJ1c3RlZFNpdGUgPyBncmVlblRpbnQgOiB3aGl0
ZVRpbnRdOwotICAgIH0gZWxzZQotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdlOm5p
bCBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9u
IHNldENvbnRlbnRFZGdlSW5zZXRzOmxvY2F0aW9uQ29udGVudEVkZ2VJbnNldHNdOwotICAgIFtf
bG9jYXRpb25CdXR0b24gc2V0SW1hZ2VFZGdlSW5zZXRzOmxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRz
XTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldFRpdGxlOmxvY2F0aW9uTmFtZSBmb3JTdGF0ZTpV
SUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlU3Vidmlld3MKLXsKLSAg
ICBfdmlzdWFsRWZmZWN0VmlldyA9IFtzZWxmIHZpc3VhbEVmZmVjdFZpZXdXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAyMCwgMjApXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFu
c2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107Ci0gICAgW1tzZWxmIHZp
ZXddIGFkZFN1YnZpZXc6X3Zpc3VhbEVmZmVjdFZpZXcuZ2V0KCldOwotCi0gICAgX2NhbmNlbEJ1
dHRvbiA9IFtVSUJ1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOwotICAg
IFtfY2FuY2VsQnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFp
bnRzOk5PXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0
ZWQ6Tk9dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldEJhY2tncm91bmRDb2xvcjogW1VJQ29sb3Ig
YmxhY2tDb2xvcl1dOwotICAgIFtbX2NhbmNlbEJ1dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdG
aWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW19j
YW5jZWxCdXR0b24gc2V0VGl0bGU6V0VCX1VJX1NUUklORygiRG9uZSIsICJUZXh0IG9mIGJ1dHRv
biB0aGF0IGV4aXRzIGVsZW1lbnQgZnVsbHNjcmVlbi4iKSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0
ZU5vcm1hbF07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0VGludENvbG9yOltVSUNvbG9yIHdoaXRl
Q29sb3JdXTsKLSAgICBbW19jYW5jZWxCdXR0b24gdGl0bGVMYWJlbF0gc2V0Rm9udDpbVUlGb250
IHN5c3RlbUZvbnRPZlNpemU6Zm9udFNpemVdXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJn
ZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKGNhbmNlbEFjdGlvbjopIGZvckNvbnRyb2xFdmVudHM6
VUlDb250cm9sRXZlbnRUb3VjaFVwSW5zaWRlXTsKLQotICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2
aWV3Ol9jYW5jZWxCdXR0b24uZ2V0KCldOwotCi0gICAgX2xvY2F0aW9uQnV0dG9uID0gW1VJQnV0
dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0dG9uVHlwZVN5c3RlbV07Ci0gICAgW19sb2NhdGlvbkJ1
dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107Ci0g
ICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwot
ICAgIFtfbG9jYXRpb25CdXR0b24gc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGJsYWNrQ29s
b3JdXTsKLSAgICBbW19sb2NhdGlvbkJ1dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6
W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW1tfbG9jYXRp
b25CdXR0b24gdGl0bGVMYWJlbF0gc2V0TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNh
dGluZ1RhaWxdOwotICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEFkanVzdHNG
b250U2l6ZVRvRml0V2lkdGg6Tk9dOwotICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxd
IHNldEZvbnQ6W1VJRm9udCBzeXN0ZW1Gb250T2ZTaXplOmZvbnRTaXplXV07Ci0gICAgW1tzZWxm
IHZpZXddIGFkZFN1YnZpZXc6X2xvY2F0aW9uQnV0dG9uLmdldCgpXTsKLQotICAgIFVJTGF5b3V0
R3VpZGUqIGNvbnRhaW5lckd1aWRlID0gW1tzZWxmIHZpZXddIGxheW91dE1hcmdpbnNHdWlkZV07
Ci0KLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyBsZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxU
b0FuY2hvcjpbW3NlbGYgdmlld10gbGVmdEFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtb
W192aXN1YWxFZmZlY3RWaWV3IHJpZ2h0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpb
W3NlbGYgdmlld10gcmlnaHRBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfdmlzdWFs
RWZmZWN0VmlldyB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3
XSB0b3BBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyBo
ZWlnaHRBbmNob3JdIGNvbnN0cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50OjIwXSBz
ZXRBY3RpdmU6WUVTXTsKLQotICAgIE5TTGF5b3V0Q29uc3RyYWludCAqYm90dG9tID0gW1tfdmlz
dWFsRWZmZWN0VmlldyBib3R0b21BbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250
YWluZXJHdWlkZSB0b3BBbmNob3JdXTsKLSAgICBbYm90dG9tIHNldFByaW9yaXR5OlVJTGF5b3V0
UHJpb3JpdHlSZXF1aXJlZCAtIDFdOwotICAgIFtib3R0b20gc2V0QWN0aXZlOllFU107Ci0KLSAg
ICBbW1tfY2FuY2VsQnV0dG9uIGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9y
Oltjb250YWluZXJHdWlkZSBsZWFkaW5nQW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tb
X2NhbmNlbEJ1dHRvbiB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2
aWV3XSB0b3BBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfY2FuY2VsQnV0dG9uIGJv
dHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3IGJv
dHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotCi0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIGhl
aWdodEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDoyMF0gc2V0QWN0aXZlOllFU107
Ci0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9B
bmNob3I6W192aXN1YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwot
ICAgIFtbW19sb2NhdGlvbkJ1dHRvbiBsZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRo
YW5PckVxdWFsVG9BbmNob3I6W19jYW5jZWxCdXR0b24gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3Rp
dmU6WUVTXTsKLSAgICBbW1tfbG9jYXRpb25CdXR0b24gdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFp
bnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gdHJhaWxpbmdBbmNob3JdXSBz
ZXRBY3RpdmU6WUVTXTsKLSAgICBOU0xheW91dENvbnN0cmFpbnQgKmNlbnRlcmluZ0NvbnN0cmFp
bnQgPSBbW19sb2NhdGlvbkJ1dHRvbiBjZW50ZXJYQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0Fu
Y2hvcjpbW3NlbGYgdmlld10gY2VudGVyWEFuY2hvcl1dOwotICAgIFtjZW50ZXJpbmdDb25zdHJh
aW50IHNldFByaW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlEZWZhdWx0TG93XTsKLSAgICBbY2VudGVy
aW5nQ29uc3RyYWludCBzZXRBY3RpdmU6WUVTXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBz
ZXRBbHBoYTowXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBbHBoYTowXTsKLSAgICBbX2xvY2F0
aW9uQnV0dG9uIHNldEFscGhhOjBdOwotCi0gICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEhpZGRl
bjpZRVNdOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldEhpZGRlbjpZRVNdOwotICAgIFtfbG9jYXRp
b25CdXR0b24gc2V0SGlkZGVuOllFU107Ci19Ci0KLS0gKHZvaWQpbG9hZFZpZXcKLXsKLSAgICBb
c2VsZiBzZXRWaWV3OmFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAxMDAsIDEwMCldKS5nZXQoKV07Ci0gICAgW1tzZWxmIHZpZXddIHNldEF1dG9y
ZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRv
cmVzaXppbmdGbGV4aWJsZUhlaWdodCldOwotCi0gICAgX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIg
PSBhZG9wdE5TKFtbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhU
YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHNob3dDYW5jZWxCdXR0b246KV0pOwotICAgIFtf
dG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3RvdWNoR2Vz
dHVyZVJlY29nbml6ZXIgc2V0Q2FuY2Vsc1RvdWNoZXNJblZpZXc6Tk9dOwotICAgIFtfdG91Y2hH
ZXN0dXJlUmVjb2duaXplciBzZXRNaW5pbXVtUHJlc3NEdXJhdGlvbjowXTsKLSAgICBbW3NlbGYg
dmlld10gYWRkR2VzdHVyZVJlY29nbml6ZXI6X3RvdWNoR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCld
OwotICAgIFtzZWxmIGNyZWF0ZVN1YnZpZXdzXTsKIH0KIAotLSAodm9pZCl2aWV3V2lsbEFwcGVh
cjooQk9PTClhbmltYXRlZAotewotICAgIFtbc2VsZiBjb250ZW50Vmlld10gc2V0QXV0b3Jlc2l6
aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNp
emluZ0ZsZXhpYmxlSGVpZ2h0KV07Ci0gICAgW1tzZWxmIGNvbnRlbnRWaWV3XSBzZXRGcmFtZTpb
W3NlbGYgdmlld10gYm91bmRzXV07Ci0gICAgW1tzZWxmIHZpZXddIGluc2VydFN1YnZpZXc6W3Nl
bGYgY29udGVudFZpZXddIGF0SW5kZXg6MF07Ci19CitAZW5kCiAKLS0gKHZvaWQpdmlld0RpZEFw
cGVhcjooQk9PTClhbmltYXRlZAotewotICAgIFtzZWxmIF91cGRhdGVMYXlvdXRNYXJnaW5zXTsK
LX0KKyNwcmFnbWEgbWFyayAtCiAKLS0gKHZvaWQpY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKLXsK
LSAgICBbW3NlbGYgdGFyZ2V0XSBwZXJmb3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Ci19CitA
aW50ZXJmYWNlIFdLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiA6IE5TT2JqZWN0PFVJ
Vmlld0NvbnRyb2xsZXJJbnRlcmFjdGl2ZVRyYW5zaXRpb25pbmc+CistIChpZClpbml0V2l0aEFu
aW1hdG9yOihXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyICopYW5pbWF0b3IgYW5jaG9y
OihDR1BvaW50KXBvaW50OworQGVuZAogCi0tICh2b2lkKWhpZGVDYW5jZWxCdXR0b24KLXsKLSAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKGhpZGVDYW5jZWxCdXR0b24pIG9iamVjdDpuaWxdOwotICAgIFtV
SVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1h
dGlvbnM6XnsKLSAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEFscGhhOjBdOwotICAgICAg
ICBbX2NhbmNlbEJ1dHRvbiBzZXRBbHBoYTowXTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBz
ZXRBbHBoYTowXTsKLSAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKXsKLSAgICAgICAg
aWYgKGZpbmlzaGVkKSB7Ci0gICAgICAgICAgICBbX2NhbmNlbEJ1dHRvbiBzZXRIaWRkZW46WUVT
XTsKLSAgICAgICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOllFU107Ci0gICAgICAg
ICAgICBbX3Zpc3VhbEVmZmVjdFZpZXcgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIH0KLSAgICB9
XTsKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24gewor
ICAgIFJldGFpblB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyPiBfYW5pbWF0b3I7
CisgICAgUmV0YWluUHRyPGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+
IF9jb250ZXh0OworICAgIENHUG9pbnQgX2FuY2hvcjsKIH0KIAotLSAodm9pZClzaG93Q2FuY2Vs
QnV0dG9uOihpZClzZW5kZXIKKy0gKGlkKWluaXRXaXRoQW5pbWF0b3I6KFdLRnVsbHNjcmVlbkFu
aW1hdGlvbkNvbnRyb2xsZXIgKilhbmltYXRvciBhbmNob3I6KENHUG9pbnQpcG9pbnQKIHsKLSAg
ICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKGhpZGVDYW5jZWxCdXR0b24pIG9iamVjdDpuaWxdOwotICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoaGlkZUNhbmNlbEJ1dHRvbikgd2l0aE9iamVj
dDpuaWwgYWZ0ZXJEZWxheTphdXRvSGlkZURlbGF5XTsKLSAgICBbVUlWaWV3IGFuaW1hdGVXaXRo
RHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOiBeewotICAgICAg
ICBbX3Zpc3VhbEVmZmVjdFZpZXcgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW19jYW5jZWxCdXR0
b24gc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRIaWRkZW46Tk9d
OwotICAgICAgICBbX3Zpc3VhbEVmZmVjdFZpZXcgc2V0QWxwaGE6MV07Ci0gICAgICAgIFtfY2Fu
Y2VsQnV0dG9uIHNldEFscGhhOjFdOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhh
OjFdOwotICAgIH1dOwotfQorICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOwogCi0tICh2b2lkKXNldFRhcmdldDooaWQpdGFyZ2V0IGFj
dGlvbjooU0VMKWFjdGlvbgotewotICAgIFtzZWxmIHNldFRhcmdldDp0YXJnZXRdOwotICAgIFtz
ZWxmIHNldEFjdGlvbjphY3Rpb25dOworICAgIF9hbmltYXRvciA9IGFuaW1hdG9yOworICAgIF9h
bmNob3IgPSBwb2ludDsKKyAgICByZXR1cm4gc2VsZjsKIH0KIAotLy8gTUFSSyAtIFVJR2VzdHVy
ZVJlY29nbml6ZXJEZWxlZ2F0ZQotCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1
cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaXplU2ltdWx0YW5l
b3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilvdGhlckdl
c3R1cmVSZWNvZ25pemVyCistIChCT09MKXdhbnRzSW50ZXJhY3RpdmVTdGFydAogewogICAgIHJl
dHVybiBZRVM7CiB9CiAKLUBlbmQKLQotQGludGVyZmFjZSBfV0tGdWxsc2NyZWVuUm9vdFZpZXdD
b250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gX1dL
RnVsbHNjcmVlblJvb3RWaWV3Q29udHJvbGxlciB7Ci0gICAgQk9PTCBfc2hvd3NTdGF0dXNCYXI7
Ci19Ci0KLS0gKHZvaWQpc2V0U2hvd3NTdGF0dXNCYXI6KEJPT0wpdmFsdWUKKy0gKHZvaWQpc3Rh
cnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246KGlkIDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5z
aXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0CiB7Ci0gICAgX3Nob3dzU3RhdHVzQmFyID0gdmFs
dWU7Ci0gICAgW3NlbGYgc2V0TmVlZHNTdGF0dXNCYXJBcHBlYXJhbmNlVXBkYXRlXTsKKyAgICBf
Y29udGV4dCA9IHRyYW5zaXRpb25Db250ZXh0OworICAgIFtfYW5pbWF0b3Igc3RhcnRJbnRlcmFj
dGl2ZVRyYW5zaXRpb246dHJhbnNpdGlvbkNvbnRleHRdOwogfQogCi0tIChCT09MKXByZWZlcnNT
dGF0dXNCYXJIaWRkZW4KKy0gKHZvaWQpdXBkYXRlSW50ZXJhY3RpdmVUcmFuc2l0aW9uOihDR0Zs
b2F0KXBlcmNlbnRDb21wbGV0ZSB3aXRoVHJhbnNsYXRpb246KENHU2l6ZSl0cmFuc2xhdGlvbgog
ewotICAgIHJldHVybiAhX3Nob3dzU3RhdHVzQmFyOworICAgIFtfYW5pbWF0b3IgdXBkYXRlV2l0
aFBlcmNlbnQ6cGVyY2VudENvbXBsZXRlIHRyYW5zbGF0aW9uOnRyYW5zbGF0aW9uIGFuY2hvcjpf
YW5jaG9yXTsKKyAgICBbX2NvbnRleHQgdXBkYXRlSW50ZXJhY3RpdmVUcmFuc2l0aW9uOnBlcmNl
bnRDb21wbGV0ZV07CiB9CiAKLUBlbmQKLQotQGludGVyZmFjZSBXS0Z1bGxzY3JlZW5BbmltYXRp
b25Db250cm9sbGVyIDogTlNPYmplY3QgPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRp
b25pbmc+Ci1AcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBVSVZpZXdDb250cm9sbGVyKiB2
aWV3Q29udHJvbGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgaW5pdGlhbEZyYW1l
OwotQHByb3BlcnR5IChub25hdG9taWMpIENHUmVjdCBmaW5hbEZyYW1lOwotQHByb3BlcnR5IChu
b25hdG9taWMsIGdldHRlcj1pc0FuaW1hdGluZ0luKSBCT09MIGFuaW1hdGluZ0luOwotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlcgotCi0tIChO
U1RpbWVJbnRlcnZhbCl0cmFuc2l0aW9uRHVyYXRpb246KGlkPFVJVmlld0NvbnRyb2xsZXJDb250
ZXh0VHJhbnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKKy0gKHZvaWQpY2FuY2VsSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uCiB7Ci0gICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVy
YXRpb24gPSAwLjI7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbkR1cmF0aW9uOworICAgIFtfYW5pbWF0
b3IgZW5kOllFU107CiB9CiAKLS0gKHZvaWQpYW5pbWF0ZVRyYW5zaXRpb246KGlkPFVJVmlld0Nv
bnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKKy0gKHZvaWQp
ZmluaXNoSW50ZXJhY3RpdmVUcmFuc2l0aW9uCiB7Ci0gICAgVUlWaWV3ICpjb250YWluZXJWaWV3
ID0gW3RyYW5zaXRpb25Db250ZXh0IGNvbnRhaW5lclZpZXddOwotICAgIFVJVmlldyAqZnJvbVZp
ZXcgPSBbdHJhbnNpdGlvbkNvbnRleHQgdmlld0ZvcktleTpVSVRyYW5zaXRpb25Db250ZXh0RnJv
bVZpZXdLZXldOwotICAgIFVJVmlldyAqdG9WaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IHZpZXdG
b3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dFRvVmlld0tleV07Ci0KLSAgICBDR1JlY3QgaW5saW5l
RnJhbWUgPSBfYW5pbWF0aW5nSW4gPyBfaW5pdGlhbEZyYW1lIDogX2ZpbmFsRnJhbWU7Ci0gICAg
Q0dSZWN0IGZ1bGxzY3JlZW5GcmFtZSA9IF9hbmltYXRpbmdJbiA/IF9maW5hbEZyYW1lIDogX2lu
aXRpYWxGcmFtZTsKLSAgICBVSVZpZXcgKmFuaW1hdGluZ1ZpZXcgPSBfYW5pbWF0aW5nSW4gPyB0
b1ZpZXcgOiBmcm9tVmlldzsKLSAgICAKLSAgICBDR1JlY3QgYm91bmRzUmVjdCA9IGxhcmdlc3RS
ZWN0V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdChGbG9hdFJlY3QoaW5saW5lRnJhbWUpLnNpemUo
KS5hc3BlY3RSYXRpbygpLCBmdWxsc2NyZWVuRnJhbWUpOwotICAgIGJvdW5kc1JlY3Qub3JpZ2lu
ID0gQ0dQb2ludFplcm87Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbWFza1ZpZXcgPSBhZG9wdE5T
KFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgW21hc2tWaWV3IHNldEJhY2tncm91bmRDb2xv
cjpbVUlDb2xvciBibGFja0NvbG9yXV07Ci0gICAgW21hc2tWaWV3IHNldEJvdW5kczpfYW5pbWF0
aW5nSW4gPyBib3VuZHNSZWN0IDogW2FuaW1hdGluZ1ZpZXcgYm91bmRzXV07Ci0gICAgW21hc2tW
aWV3IHNldENlbnRlcjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFthbmltYXRpbmdWaWV3IGJv
dW5kc10pLCBDR1JlY3RHZXRNaWRZKFthbmltYXRpbmdWaWV3IGJvdW5kc10pKV07Ci0gICAgW2Fu
aW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bWFza1ZpZXcuZ2V0KCldOwotICAgIAotICAgIEZsb2F0
UmVjdCBzY2FsZVJlY3QgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KEZs
b2F0UmVjdChmdWxsc2NyZWVuRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBpbmxpbmVGcmFt
ZSk7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2NhbGVUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5z
Zm9ybU1ha2VTY2FsZShzY2FsZVJlY3Qud2lkdGgoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLndp
ZHRoLCBzY2FsZVJlY3QuaGVpZ2h0KCkgLyBmdWxsc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQpOwot
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0ZVRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNm
b3JtTWFrZVRyYW5zbGF0aW9uKENHUmVjdEdldE1pZFgoaW5saW5lRnJhbWUpIC0gQ0dSZWN0R2V0
TWlkWChmdWxsc2NyZWVuRnJhbWUpLCBDR1JlY3RHZXRNaWRZKGlubGluZUZyYW1lKSAtIENHUmVj
dEdldE1pZFkoZnVsbHNjcmVlbkZyYW1lKSk7Ci0gICAgCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
ZmluYWxUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChzY2FsZVRyYW5zZm9ybSwg
dHJhbnNsYXRlVHJhbnNmb3JtKTsKLQotICAgIFthbmltYXRpbmdWaWV3IHNldFRyYW5zZm9ybTpf
YW5pbWF0aW5nSW4gPyBmaW5hbFRyYW5zZm9ybSA6IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHld
OwotICAgIAotICAgIFtjb250YWluZXJWaWV3IGFkZFN1YnZpZXc6YW5pbWF0aW5nVmlld107Ci0K
LSAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246W3NlbGYgdHJhbnNpdGlvbkR1cmF0aW9u
OnRyYW5zaXRpb25Db250ZXh0XSBkZWxheTowIG9wdGlvbnM6VUlWaWV3QW5pbWF0aW9uT3B0aW9u
Q3VydmVFYXNlSW5PdXQgYW5pbWF0aW9uczpeewotICAgICAgICBbYW5pbWF0aW5nVmlldyBzZXRU
cmFuc2Zvcm06X2FuaW1hdGluZ0luID8gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSA6IGZpbmFs
VHJhbnNmb3JtXTsKLSAgICAgICAgW21hc2tWaWV3IHNldEJvdW5kczpfYW5pbWF0aW5nSW4gPyBh
bmltYXRpbmdWaWV3LmJvdW5kcyA6IGJvdW5kc1JlY3RdOwotICAgICAgICBbbWFza1ZpZXcgc2V0
Q2VudGVyOkNHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSks
IENHUmVjdEdldE1pZFkoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpXTsKLSAgICB9IGNvbXBsZXRp
b246XihCT09MIGZpbmlzaGVkKXsKLSAgICAgICAgQk9PTCBzdWNjZXNzID0gIVt0cmFuc2l0aW9u
Q29udGV4dCB0cmFuc2l0aW9uV2FzQ2FuY2VsbGVkXTsKLQotICAgICAgICBpZiAoKFtzZWxmIGlz
QW5pbWF0aW5nSW5dICYmICFzdWNjZXNzKSB8fCAoIVtzZWxmIGlzQW5pbWF0aW5nSW5dICYmIHN1
Y2Nlc3MpKQotICAgICAgICAgICAgW2FuaW1hdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
Ci0KLSAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjpzdWNjZXNz
XTsKLSAgICAgICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bmlsXTsKLSAgICB9XTsKKyAg
ICBbX2FuaW1hdG9yIGVuZDpOT107CiB9CitAZW5kCiAKLS0gKHZvaWQpYW5pbWF0aW9uRW5kZWQ6
KEJPT0wpdHJhbnNpdGlvbkNvbXBsZXRlZAotewotfQorI3ByYWdtYSBtYXJrIC0KIAorQGludGVy
ZmFjZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyICgpIDxVSUdlc3R1cmVSZWNvZ25pemVy
RGVsZWdhdGU+CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyIHsKQEAgLTQ4NywxOCArMzUxLDIzIEBAIEBpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIHsKICAgICBXS1dlYlZpZXdTdGF0ZSBfdmlld1N0YXRlOwogCiAg
ICAgUmV0YWluUHRyPFVJV2luZG93PiBfd2luZG93OwotICAgIFJldGFpblB0cjxfV0tGdWxsc2Ny
ZWVuUm9vdFZpZXdDb250cm9sbGVyPiBfcm9vdFZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0
cjxVSVZpZXdDb250cm9sbGVyPiBfcm9vdFZpZXdDb250cm9sbGVyOwogCiAgICAgUmVmUHRyPFdl
YktpdDo6Vm9pZENhbGxiYWNrPiBfcmVwYWludENhbGxiYWNrOwogICAgIFJldGFpblB0cjxVSVZp
ZXdDb250cm9sbGVyPiBfdmlld0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb247Ci0gICAgUmV0YWlu
UHRyPF9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlcj4gX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxl
cjsKKyAgICBSZXRhaW5QdHI8V0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXI+IF9mdWxsc2NyZWVu
Vmlld0NvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFVJU3dpcGVHZXN0dXJlUmVjb2duaXplcj4g
X3N0YXJ0RGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxVSVBhbkdlc3R1
cmVSZWNvZ25pemVyPiBfaW50ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXI7CisgICAg
UmV0YWluUHRyPFdLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbj4gX2ludGVyYWN0aXZl
RGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvcjsKIAogICAgIENHUmVjdCBfaW5pdGlhbEZyYW1l
OwogICAgIENHUmVjdCBfZmluYWxGcmFtZTsKIAogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX0VW
T3JnYW5pemF0aW9uTmFtZTsKICAgICBCT09MIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkOwor
ICAgIEJPT0wgX2luSW50ZXJhY3RpdmVEaXNtaXNzOwogCisgICAgUmV0YWluUHRyPGlkPiBfbm90
aWZpY2F0aW9uTGlzdGVuZXI7CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC01MzYsODkgKzQwNSw3
IEBAIC0gKFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3ICopd2ViVmlld1BsYWNlaG9s
ZGVyCiB9CiAKICNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UK
LQotLSAodm9pZClfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFtZQotewotICAgIF9FVk9yZ2Fu
aXphdGlvbk5hbWUgPSBuaWw7Ci0gICAgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQgPSBOTzsK
LX0KLQotLSAoQk9PTClpc1NlY3VyZQotewotICAgIHJldHVybiBfd2ViVmlldy5oYXNPbmx5U2Vj
dXJlQ29udGVudDsKLX0KLQotLSAoU2VjVHJ1c3RSZWYpX3NlcnZlclRydXN0Ci17Ci0gICAgcmV0
dXJuIF93ZWJWaWV3LnNlcnZlclRydXN0OwotfQotCi0tIChOU1N0cmluZyAqKV9FVk9yZ2FuaXph
dGlvbk5hbWUKLXsKLSAgICBpZiAoIXNlbGYuaXNTZWN1cmUpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBpZiAoX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQpCi0gICAgICAgIHJldHVybiBf
RVZPcmdhbml6YXRpb25OYW1lLmdldCgpOwotCi0gICAgQVNTRVJUKCFfRVZPcmdhbml6YXRpb25O
YW1lLmdldCgpKTsKLSAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IFlFUzsKLQotICAg
IFNlY1RydXN0UmVmIHRydXN0ID0gW3NlbGYgX3NlcnZlclRydXN0XTsKLSAgICBpZiAoIXRydXN0
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNEaWN0aW9uYXJ5ICppbmZvRGljdGlvbmFy
eSA9IFsoX19icmlkZ2UgTlNEaWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0
b3JlbGVhc2VdOwotICAgIC8vIElmIFNlY1RydXN0Q29weUluZm8gcmV0dXJuZWQgTlVMTCB0aGVu
IGl0J3MgbGlrZWx5IHRoYXQgdGhlIFNlY1RydXN0UmVmIGhhcyBub3QgYmVlbiBldmFsdWF0ZWQK
LSAgICAvLyBhbmQgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCBp
cyB0byBjYWxsIFNlY1RydXN0RXZhbHVhdGUgb3Vyc2VsdmVzLgotICAgIGlmICghaW5mb0RpY3Rp
b25hcnkpIHsKLSAgICAgICAgU2VjVHJ1c3RSZXN1bHRUeXBlIHJlc3VsdCA9IGtTZWNUcnVzdFJl
c3VsdFByb2NlZWQ7Ci0gICAgICAgIE9TU3RhdHVzIGVyciA9IFNlY1RydXN0RXZhbHVhdGUodHJ1
c3QsICZyZXN1bHQpOwotICAgICAgICBpZiAoZXJyID09IG5vRXJyICYmIHJlc3VsdCA9PSBrU2Vj
VHJ1c3RSZXN1bHRQcm9jZWVkKQotICAgICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJp
ZGdlIE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsK
LSAgICAgICAgaWYgKCFpbmZvRGljdGlvbmFyeSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlk
IGFnYWluc3Qgb3VyIGNlcnRpZmljYXRlIGNoYWluLgotICAgIGlkIGhhc0VWID0gW2luZm9EaWN0
aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0
ZW5kZWRWYWxpZGF0aW9uS2V5XTsKLSAgICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1Zh
bHVlIGNsYXNzXV0gfHwgIVtoYXNFViBib29sVmFsdWVdKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZl
ciBhbmQgaXQgaXMgc3RpbGwgdmFsaWQuCi0gICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0
aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2
b2NhdGlvbktleV07Ci0gICAgaWYgKCFbaXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFs
dWUgY2xhc3NdXSB8fCAhW2lzTm90UmV2b2tlZCBib29sVmFsdWVdKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RG
b3JLZXk6KF9fYnJpZGdlIE5TU3RyaW5nICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsK
LSAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKLX0KLQotLSAodm9pZCl1cGRh
dGVMb2NhdGlvbkluZm8KLXsKLSAgICBOU1VSTCogdXJsID0gX3dlYlZpZXcuX2NvbW1pdHRlZFVS
TDsKLQotICAgIE5TU3RyaW5nICpFVk9yZ2FuaXphdGlvbk5hbWUgPSBbc2VsZiBfRVZPcmdhbml6
YXRpb25OYW1lXTsKLSAgICBCT09MIHNob3dzRVZPcmdhbml6YXRpb25OYW1lID0gW0VWT3JnYW5p
emF0aW9uTmFtZSBsZW5ndGhdID4gMDsKLQotICAgIE5TU3RyaW5nICpkb21haW4gPSBuaWw7Ci0K
LSAgICBpZiAoTGlua1ByZXNlbnRhdGlvbkxpYnJhcnkoKSkKLSAgICAgICAgZG9tYWluID0gW3Vy
bCBfbHBfc2ltcGxpZmllZERpc3BsYXlTdHJpbmddOwotICAgIGVsc2UKLSAgICAgICAgZG9tYWlu
ID0gdXNlclZpc2libGVTdHJpbmcodXJsKTsKLQotICAgIE5TU3RyaW5nICp0ZXh0ID0gbmlsOwot
ICAgIGlmIChbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJkYXRhIl0gPT0g
TlNPcmRlcmVkU2FtZSkKLSAgICAgICAgdGV4dCA9IEAiZGF0YToiOwotICAgIGVsc2UgaWYgKHNo
b3dzRVZPcmdhbml6YXRpb25OYW1lKQotICAgICAgICB0ZXh0ID0gRVZPcmdhbml6YXRpb25OYW1l
OwotICAgIGVsc2UKLSAgICAgICAgdGV4dCA9IGRvbWFpbjsKLQotICAgIFtfZnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyIHNldExvY2F0aW9uOnRleHQgc2VjdXJlOnNlbGYuaXNTZWN1cmUgdHJ1c3Rl
ZE5hbWU6c2hvd3NFVk9yZ2FuaXphdGlvbk5hbWUgdHJ1c3RlZFNpdGU6ISFFVk9yZ2FuaXphdGlv
bk5hbWVdOwotfQorI3ByYWdtYSBtYXJrIEV4dGVybmFsIEludGVyZmFjZQogCiAtICh2b2lkKWVu
dGVyRnVsbFNjcmVlbgogewpAQCAtNjMxLDIxICs0MTgsMzggQEAgLSAodm9pZCllbnRlckZ1bGxT
Y3JlZW4KIAogICAgIF93aW5kb3cgPSBhZG9wdE5TKFtbVUlXaW5kb3cgYWxsb2NdIGluaXRdKTsK
ICAgICBbX3dpbmRvdyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3IgY2xlYXJDb2xvcl1dOwot
ICAgIF9yb290Vmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbX1dLRnVsbHNjcmVlblJvb3RWaWV3
Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtfd2luZG93IHNldFJvb3RWaWV3Q29udHJv
bGxlcjpfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpXTsKLSAgICBbW193aW5kb3cgcm9vdFZpZXdD
b250cm9sbGVyXSBzZXRWaWV3OmFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
W193aW5kb3cgYm91bmRzXV0pLmdldCgpXTsKLSAgICBbW1tfd2luZG93IHJvb3RWaWV3Q29udHJv
bGxlcl0gdmlld10gc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGNsZWFyQ29sb3JdXTsKLSAg
ICBbW1tfd2luZG93IHJvb3RWaWV3Q29udHJvbGxlcl0gdmlld10gc2V0QXV0b3Jlc2l6aW5nTWFz
azooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlSGVpZ2h0KV07CiAgICAgW193aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZl
bE5vcm1hbCAtIDFdOwogICAgIFtfd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgX3ZpZXdDb250
cm9sbGVyRm9yUHJlc2VudGF0aW9uID0gW193aW5kb3cgcm9vdFZpZXdDb250cm9sbGVyXTsKIAot
ICAgIF9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbX1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xs
ZXIgc2V0VHJhbnNpdGlvbmluZ0RlbGVnYXRlOnNlbGZdOworICAgIF9yb290Vmlld0NvbnRyb2xs
ZXIgPSBbW1VJVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRdOworICAgIF9yb290Vmlld0NvbnRy
b2xsZXIuZ2V0KCkudmlldyA9IFtbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpfd2luZG93
LmdldCgpLmJvdW5kc10gYXV0b3JlbGVhc2VdOworICAgIF9yb290Vmlld0NvbnRyb2xsZXIuZ2V0
KCkudmlldy5iYWNrZ3JvdW5kQ29sb3IgPSBbVUlDb2xvciBjbGVhckNvbG9yXTsKKyAgICBfcm9v
dFZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IChVSVZpZXdBdXRv
cmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQp
OworICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uU3R5bGU6VUlN
b2RhbFByZXNlbnRhdGlvbkN1c3RvbV07CisgICAgW19yb290Vmlld0NvbnRyb2xsZXIgc2V0VHJh
bnNpdGlvbmluZ0RlbGVnYXRlOnNlbGZdOworCisgICAgX3dpbmRvdy5nZXQoKS5yb290Vmlld0Nv
bnRyb2xsZXIgPSBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpOworCisgICAgX2Z1bGxzY3JlZW5W
aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3Ol93ZWJWaWV3XSk7CiAgICAgW19mdWxsc2NyZWVuVmlld0NvbnRy
b2xsZXIgc2V0TW9kYWxQcmVzZW50YXRpb25TdHlsZTpVSU1vZGFsUHJlc2VudGF0aW9uQ3VzdG9t
XTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRUYXJnZXQ6c2VsZiBhY3Rpb246
QHNlbGVjdG9yKHJlcXVlc3RFeGl0RnVsbFNjcmVlbildOwotICAgIFtbX2Z1bGxzY3JlZW5WaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbW192aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlv
biB2aWV3XSBib3VuZHNdXTsKLSAgICBbc2VsZiB1cGRhdGVMb2NhdGlvbkluZm9dOworICAgIFtf
ZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsK
KyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvbkNhcHR1
cmVzU3RhdHVzQmFyQXBwZWFyYW5jZTpZRVNdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9s
bGVyIHNldFRhcmdldDpzZWxmXTsKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRB
Y3Rpb246QHNlbGVjdG9yKHJlcXVlc3RFeGl0RnVsbFNjcmVlbildOworICAgIFtbX2Z1bGxzY3Jl
ZW5WaWV3Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbW19yb290Vmlld0NvbnRyb2xsZXIgdmll
d10gYm91bmRzXV07CisgICAgW3NlbGYgX3VwZGF0ZUxvY2F0aW9uSW5mb107CisKKyAgICBfc3Rh
cnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlTd2lwZUdlc3R1cmVSZWNv
Z25pemVyIGFsbG9jXSAgaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9zdGFy
dFRvRGlzbWlzc0Z1bGxzY3JlZW5DaGFuZ2VkOildKTsKKyAgICBbX3N0YXJ0RGlzbWlzc0dlc3R1
cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfc3RhcnREaXNtaXNzR2VzdHVy
ZVJlY29nbml6ZXIgc2V0Q2FuY2Vsc1RvdWNoZXNJblZpZXc6WUVTXTsKKyAgICBbX3N0YXJ0RGlz
bWlzc0dlc3R1cmVSZWNvZ25pemVyIHNldE51bWJlck9mVG91Y2hlc1JlcXVpcmVkOjFdOworICAg
IFtfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGlyZWN0aW9uOlVJU3dpcGVHZXN0
dXJlUmVjb2duaXplckRpcmVjdGlvbkRvd25dOworICAgIFtbX2Z1bGxzY3JlZW5WaWV3Q29udHJv
bGxlciB2aWV3XSBhZGRHZXN0dXJlUmVjb2duaXplcjpfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29n
bml6ZXIuZ2V0KCldOworCisgICAgX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVy
ID0gYWRvcHROUyhbW1VJUGFuR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdICBpbml0V2l0aFRhcmdl
dDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2ludGVyYWN0aXZlRGlzbWlzc0NoYW5nZWQ6KV0pOwor
ICAgIFtfaW50ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2Vs
Zl07CisgICAgW19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXRDYW5jZWxz
VG91Y2hlc0luVmlldzpOT107CisgICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHZpZXdd
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl9pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXpl
ci5nZXQoKV07CiAKICAgICBbc2VsZiBfbWFuYWdlcl0tPnNhdmVTY3JvbGxQb3NpdGlvbigpOwog
CkBAIC02NTQsMTAgKzQ1OCwxMCBAQCAtICh2b2lkKWVudGVyRnVsbFNjcmVlbgogICAgIF92aWV3
U3RhdGUuc3RvcmUoX3dlYlZpZXcpOwogCiAgICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IGFkb3B0
TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICBbW193ZWJWaWV3UGxhY2Vob2xkZXIgbGF5
ZXJdIHNldE5hbWU6QCJGdWxsc2NyZWVuIFBsYWNlaG9sZGVyIFZmaWV3Il07CisgICAgW1tfd2Vi
Vmlld1BsYWNlaG9sZGVyIGxheWVyXSBzZXROYW1lOkAiRnVsbHNjcmVlbiBQbGFjZWhvbGRlciBW
aWV3Il07CiAKICAgICBXS1NuYXBzaG90Q29uZmlndXJhdGlvbiogY29uZmlnID0gbmlsOwotICAg
IFtfd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb25maWcgY29tcGxldGlv
bkhhbmRsZXI6XihVSUltYWdlICogc25hcHNob3RJbWFnZSwgTlNFcnJvciAqIGVycm9yKXsKKyAg
ICBbX3dlYlZpZXcgdGFrZVNuYXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29uZmlnIGNvbXBsZXRp
b25IYW5kbGVyOl4oVUlJbWFnZSAqIHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKiBlcnJvcikgewog
ICAgICAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCiAgICAgICAgICAgICByZXR1cm47CiAKQEAg
LTY3Miw4ICs0NzYsNiBAQCAtICh2b2lkKWVudGVyRnVsbFNjcmVlbgogICAgICAgICBbX3dlYlZp
ZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8
IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07CiAgICAgICAgIFtfd2ViVmlldyBz
ZXRGcmFtZTpbX3dpbmRvdyBib3VuZHNdXTsKICAgICAgICAgW193aW5kb3cgaW5zZXJ0U3Vidmll
dzpfd2ViVmlldyBhdEluZGV4OjBdOwotICAgICAgICBbX3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0
UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpbX3dpbmRvdyBib3VuZHNdLnNpemUgbWF4
aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6W193aW5kb3cgYm91bmRzXS5zaXplXTsKLQogICAg
ICAgICBbX3dlYlZpZXcgc2V0TmVlZHNMYXlvdXRdOwogICAgICAgICBbX3dlYlZpZXcgbGF5b3V0
SWZOZWVkZWRdOwogICAgICAgICAKQEAgLTY4MSwxMCArNDgzLDExIEBAIC0gKHZvaWQpZW50ZXJG
dWxsU2NyZWVuCiAKICAgICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3Jl
YXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpLCBzZWxmXShXZWJLaXQ6OkNhbGxi
YWNrQmFzZTo6RXJyb3IpIHsKICAgICAgICAgICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBudWxscHRy
OwotICAgICAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gW3Byb3RlY3RlZFNlbGYgX21h
bmFnZXJdKQorICAgICAgICAgICAgICAgIG1hbmFnZXItPndpbGxFbnRlckZ1bGxTY3JlZW4oKTsK
IAotICAgICAgICAgICAgW3Byb3RlY3RlZFNlbGYgX21hbmFnZXJdLT53aWxsRW50ZXJGdWxsU2Ny
ZWVuKCk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIFtz
ZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKICAgICAgICAgfSk7CiAgICAgICAgIFtf
d2ViVmlldyBfcGFnZV0tPmZvcmNlUmVwYWludChfcmVwYWludENhbGxiYWNrLmNvcHlSZWYoKSk7
CiAKQEAgLTcwNSw0NiArNTA4LDU2IEBAIC0gKHZvaWQpYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRo
SW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHCiAgICAgW0NB
VHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKIAogICAgIFtfd2ViVmlldyByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRDb250
ZW50Vmlldzpfd2ViVmlld107CiAKICAgICBbX3dpbmRvdyBzZXRXaW5kb3dMZXZlbDpVSVdpbmRv
d0xldmVsTm9ybWFsXTsKICAgICBbX3dpbmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgW19y
b290Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NTdGF0dXNCYXI6WUVTXTsKKyAgICBbX2Z1bGxzY3Jl
ZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOk5PXTsKKyAgICBbX2Z1
bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzaG93VUldOwogCiAgICAgW0NBVHJhbnNhY3Rpb24gY29t
bWl0XTsKIAotICAgIFtfdmlld0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb24gcHJlc2VudFZpZXdD
b250cm9sbGVyOl9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTIGNv
bXBsZXRpb246XnsKLSAgICAgICAgW3NlbGYgY29tcGxldGVkRW50ZXJGdWxsU2NyZWVuXTsKLSAg
ICAgICAgW19yb290Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NTdGF0dXNCYXI6Tk9dOworICAgIFtf
cm9vdFZpZXdDb250cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlcjpfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyLmdldCgpIGFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIF9mdWxs
U2NyZWVuU3RhdGUgPSBJbkZ1bGxTY3JlZW47CisKKyAgICAgICAgYXV0byogcGFnZSA9IFtfd2Vi
VmlldyBfcGFnZV07CisgICAgICAgIGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyOworICAg
ICAgICBpZiAocGFnZSAmJiBtYW5hZ2VyKSB7CisgICAgICAgICAgICBtYW5hZ2VyLT5kaWRFbnRl
ckZ1bGxTY3JlZW4oKTsKKyAgICAgICAgICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3Jl
ZW4oZmFsc2UpOworICAgICAgICAgICAgcGFnZS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRl
cyhmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRl
bHldOwogICAgIH1dOwogfQogCi0tICh2b2lkKWNvbXBsZXRlZEVudGVyRnVsbFNjcmVlbgorLSAo
dm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4KIHsKLSAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0p
CisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKSB7CisgICAgICAgIG1hbmFn
ZXItPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEluRnVsbFNjcmVlbjsKLQotICAgIFtzZWxmIF9tYW5hZ2Vy
XS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRp
bmdGdWxsU2NyZWVuKGZhbHNlKTsKLQotICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNz
VmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IFtzZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKIH0KIAogLSAodm9pZClleGl0RnVs
bFNjcmVlbgogewotICAgIGlmICghW3NlbGYgaXNGdWxsU2NyZWVuXSkKKyAgICBpZiAoIXNlbGYu
aXNGdWxsU2NyZWVuKQogICAgICAgICByZXR1cm47CiAgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IFdh
aXRpbmdUb0V4aXRGdWxsU2NyZWVuOwogCi0gICAgW3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRp
bmdGdWxsU2NyZWVuKHRydWUpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+d2lsbEV4aXRGdWxsU2Ny
ZWVuKCk7Ci19CisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKSB7CisgICAg
ICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CisgICAgICAgIG1hbmFn
ZXItPndpbGxFeGl0RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0tICh2
b2lkKXJlcXVlc3RFeGl0RnVsbFNjcmVlbgotewotICAgIFtzZWxmIF9tYW5hZ2VyXS0+cmVxdWVz
dEV4aXRGdWxsU2NyZWVuKCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgW3NlbGYg
X2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwogfQogCiAtICh2b2lkKWJlZ2FuRXhpdEZ1bGxT
Y3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENH
UmVjdClmaW5hbEZyYW1lCkBAIC03NTgsMTcgKzU3MSwyMyBAQCAtICh2b2lkKWJlZ2FuRXhpdEZ1
bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6
KENHUgogICAgIAogICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVw
ZGF0ZXModHJ1ZSk7CiAKLSAgICBbX3Jvb3RWaWV3Q29udHJvbGxlciBzZXRTaG93c1N0YXR1c0Jh
cjpZRVNdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNC
YXJIaWRkZW46Tk9dOworCisgICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29v
cmRpbmF0b3IpIHsKKyAgICAgICAgW19pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRp
bmF0b3IgZmluaXNoSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgX2ludGVyYWN0aXZl
RGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxl
ckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57CiAgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdl
XSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBbc2VsZiBjb21wbGV0ZWRFeGl0RnVs
bFNjcmVlbl07Ci0gICAgICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFNob3dzU3RhdHVzQmFy
Ok5PXTsKKyAgICAgICAgW3NlbGYgX2NvbXBsZXRlZEV4aXRGdWxsU2NyZWVuXTsKICAgICB9XTsK
IH0KIAotLSAodm9pZCljb21wbGV0ZWRFeGl0RnVsbFNjcmVlbgorLSAodm9pZClfY29tcGxldGVk
RXhpdEZ1bGxTY3JlZW4KIHsKICAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSAhPSBFeGl0aW5nRnVs
bFNjcmVlbikKICAgICAgICAgcmV0dXJuOwpAQCAtNzkzLDggKzYxMiwxMCBAQCAtICh2b2lkKWNv
bXBsZXRlZEV4aXRGdWxsU2NyZWVuCiAgICAgW193aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAg
X3dpbmRvdyA9IG5pbDsKIAotICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNj
cmVlbihmYWxzZSk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5kaWRFeGl0RnVsbFNjcmVlbigpOwor
ICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdlcikgeworICAgICAgICBtYW5hZ2Vy
LT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKKyAgICAgICAgbWFuYWdlci0+ZGlkRXhp
dEZ1bGxTY3JlZW4oKTsKKyAgICB9CiAKICAgICBpZiAoX3JlcGFpbnRDYWxsYmFjaykgewogICAg
ICAgICBfcmVwYWludENhbGxiYWNrLT5pbnZhbGlkYXRlKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpF
cnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CkBAIC04MTEsNTIgKzYzMiwzOCBAQCAtICh2b2lk
KWNvbXBsZXRlZEV4aXRGdWxsU2NyZWVuCiAgICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1
cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOwogICAgIH0pOwogCi0gICAgW193ZWJWaWV3
IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKLX0KLQot
LSAodm9pZClleGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5Ci17Ci0gICAgaWYgKCFbc2VsZiBpc0Z1
bGxTY3JlZW5dKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0p
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoYXV0byogcGFnZSA9IFtfd2ViVmlldyBfcGFnZV0p
CisgICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPmZvcmNlUmVwYWludChfcmVwYWludENhbGxiYWNr
LmNvcHlSZWYoKSk7CisgICAgZWxzZQorICAgICAgICBfcmVwYWludENhbGxiYWNrLT5wZXJmb3Jt
Q2FsbGJhY2soKTsKIAotICAgIFtzZWxmIF9tYW5hZ2VyXS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVu
KCk7Ci0gICAgW3NlbGYgZXhpdEZ1bGxTY3JlZW5dOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBF
eGl0aW5nRnVsbFNjcmVlbjsKLSAgICBbc2VsZiBjb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl07Ci0g
ICAgcmVwbGFjZVZpZXdXaXRoVmlldyhfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpLCBfd2ViVmll
dyk7Ci0gICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhm
YWxzZSk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5kaWRFeGl0RnVsbFNjcmVlbigpOwotICAgIFtz
ZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgX3dlYlZp
ZXdQbGFjZWhvbGRlciA9IG5pbDsKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQ
cmVmZXJzU3RhdHVzQmFySGlkZGVuOllFU107CiB9CiAKIC0gKHZvaWQpY2xvc2UKIHsKLSAgICBb
c2VsZiBleGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKKyAgICBbc2VsZiBfZXhpdEZ1bGxzY3Jl
ZW5JbW1lZGlhdGVseV07CiAgICAgX3dlYlZpZXcgPSBuaWw7CiB9CiAKIC0gKHZvaWQpd2ViVmll
d0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbgogewogICAgIGlmIChfZnVs
bFNjcmVlblN0YXRlID09IEluRnVsbFNjcmVlbiAmJiBfd2ViVmlldy53aW5kb3cgIT0gX3dpbmRv
dy5nZXQoKSkKLSAgICAgICAgW3NlbGYgZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAg
ICAgIFtzZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKIH0KIAogLSAodm9pZCl2aWRl
b0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZQogeworICAgIGlmIChfZnVsbHNjcmVlblZpZXdDb250
cm9sbGVyKQorICAgICAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRyb2xz
TWFuYWdlckRpZENoYW5nZV07CiB9CiAKICNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgSW50
ZXJuYWwgSW50ZXJmYWNlCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRl
CiAKLS0gKFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqKV9tYW5hZ2VyCistIChCT09MKWdlc3R1
cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hv
dWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCiB7Ci0gICAgaWYgKCFbX3dlYlZp
ZXcgX3BhZ2VdKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW193ZWJWaWV3
IF9wYWdlXS0+ZnVsbFNjcmVlbk1hbmFnZXIoKTsKKyAgICByZXR1cm4gWUVTOwogfQogCiAjcHJh
Z21hIG1hcmsgLQpAQCAtODc0LDE0ICs2ODEsMTg1IEBAIC0gKGlkPFVJVmlld0NvbnRyb2xsZXJB
bmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250
CiAKIC0gKGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JEaXNtaXNzZWRDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopZGlz
bWlzc2VkCiB7CisgICAgQ0dSZWN0IGluaXRpYWxGcmFtZSA9IF9pbml0aWFsRnJhbWU7CisgICAg
Q0dSZWN0IGZpbmFsRnJhbWUgPSBfZmluYWxGcmFtZTsKKworICAgIC8vIEJlY2F1c2Ugd2UncmUg
bm90IGNhbGxpbmcgInJlcXVlc3RFeGl0RnVsbHNjcmVlbigpIiBhdCB0aGUgYmVnaW5uaW5nIG9m
IGFuIGludGVyYWN0aXZlIGFuaW1hdGlvbiwKKyAgICAvLyB0aGUgX2luaXRpYWxGcmFtZSBhbmQg
X2ZpbmFsRnJhbWUgdmFsdWVzIGFyZSBsZWZ0IG92ZXIgZnJvbSB3aGVuIHdlIGVudGVyZWQgZnVs
bHNjcmVlbi4KKyAgICBpZiAoX2luSW50ZXJhY3RpdmVEaXNtaXNzKQorICAgICAgICBzdGQ6OnN3
YXAoaW5pdGlhbEZyYW1lLCBmaW5hbEZyYW1lKTsKKwogICAgIFJldGFpblB0cjxXS0Z1bGxzY3Jl
ZW5BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbW1dL
RnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKICAgICBbYW5pbWF0
aW9uQ29udHJvbGxlciBzZXRWaWV3Q29udHJvbGxlcjpkaXNtaXNzZWRdOwotICAgIFthbmltYXRp
b25Db250cm9sbGVyIHNldEluaXRpYWxGcmFtZTpfaW5pdGlhbEZyYW1lXTsKLSAgICBbYW5pbWF0
aW9uQ29udHJvbGxlciBzZXRGaW5hbEZyYW1lOl9maW5hbEZyYW1lXTsKKyAgICBbYW5pbWF0aW9u
Q29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6aW5pdGlhbEZyYW1lXTsKKyAgICBbYW5pbWF0aW9u
Q29udHJvbGxlciBzZXRGaW5hbEZyYW1lOmZpbmFsRnJhbWVdOwogICAgIFthbmltYXRpb25Db250
cm9sbGVyIHNldEFuaW1hdGluZ0luOk5PXTsKICAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxl
ci5hdXRvcmVsZWFzZSgpOwogfQogCistIChpZDxVSVZpZXdDb250cm9sbGVySW50ZXJhY3RpdmVU
cmFuc2l0aW9uaW5nPilpbnRlcmFjdGlvbkNvbnRyb2xsZXJGb3JEaXNtaXNzYWw6KGlkPFVJVmll
d0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1hdG9yCit7CisgICAgaWYgKCFf
aW5JbnRlcmFjdGl2ZURpc21pc3MpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVth
bmltYXRvciBpc0tpbmRPZkNsYXNzOltXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGNs
YXNzXV0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIV9pbnRlcmFjdGl2ZURpc21p
c3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IpCisgICAgICAgIF9pbnRlcmFjdGl2ZURpc21pc3NUcmFu
c2l0aW9uQ29vcmRpbmF0b3IgPSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFu
c2l0aW9uIGFsbG9jXSBpbml0V2l0aEFuaW1hdG9yOihXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250
cm9sbGVyICopYW5pbWF0b3IgYW5jaG9yOkNHUG9pbnRaZXJvXSk7CisKKyAgICByZXR1cm4gX2lu
dGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvci5nZXQoKTsKK30KKworI3ByYWdt
YSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJbnRlcm5hbCBJbnRlcmZhY2UKKworLSAodm9pZClfZXhp
dEZ1bGxzY3JlZW5JbW1lZGlhdGVseQoreworICAgIGlmICghW3NlbGYgaXNGdWxsU2NyZWVuXSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXI7Cisg
ICAgaWYgKG1hbmFnZXIpCisgICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigp
OworICAgIFtzZWxmIGV4aXRGdWxsU2NyZWVuXTsKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gRXhp
dGluZ0Z1bGxTY3JlZW47CisgICAgW3NlbGYgX2NvbXBsZXRlZEV4aXRGdWxsU2NyZWVuXTsKKyAg
ICByZXBsYWNlVmlld1dpdGhWaWV3KF93ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCksIF93ZWJWaWV3
KTsKKyAgICBpZiAoYXV0byogcGFnZSA9IFtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgIHBhZ2Ut
PnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOworICAgIGlmIChtYW5hZ2VyKSB7
CisgICAgICAgIG1hbmFnZXItPmRpZEV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgIG1hbmFnZXIt
PnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOworICAgIH0KKyAgICBfd2ViVmlld1BsYWNl
aG9sZGVyID0gbmlsOworfQorCistICh2b2lkKV9pbnZhbGlkYXRlRVZPcmdhbml6YXRpb25OYW1l
Cit7CisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IG5pbDsKKyAgICBfRVZPcmdhbml6YXRpb25O
YW1lSXNWYWxpZCA9IE5POworfQorCistIChCT09MKV9pc1NlY3VyZQoreworICAgIHJldHVybiBf
d2ViVmlldy5oYXNPbmx5U2VjdXJlQ29udGVudDsKK30KKworLSAoU2VjVHJ1c3RSZWYpX3NlcnZl
clRydXN0Cit7CisgICAgcmV0dXJuIF93ZWJWaWV3LnNlcnZlclRydXN0OworfQorCistIChOU1N0
cmluZyAqKV9FVk9yZ2FuaXphdGlvbk5hbWUKK3sKKyAgICBpZiAoIXNlbGYuX2lzU2VjdXJlKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlk
KQorICAgICAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKKworICAgIEFTU0VS
VCghX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKSk7CisgICAgX0VWT3JnYW5pemF0aW9uTmFtZUlz
VmFsaWQgPSBZRVM7CisKKyAgICBTZWNUcnVzdFJlZiB0cnVzdCA9IFtzZWxmIF9zZXJ2ZXJUcnVz
dF07CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TRGljdGlv
bmFyeSAqaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAqKVNlY1RydXN0
Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKKyAgICAvLyBJZiBTZWNUcnVzdENvcHlJbmZv
IHJldHVybmVkIE5VTEwgdGhlbiBpdCdzIGxpa2VseSB0aGF0IHRoZSBTZWNUcnVzdFJlZiBoYXMg
bm90IGJlZW4gZXZhbHVhdGVkCisgICAgLy8gYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlIGlu
Zm9ybWF0aW9uIHdlIG5lZWQgaXMgdG8gY2FsbCBTZWNUcnVzdEV2YWx1YXRlIG91cnNlbHZlcy4K
KyAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KSB7CisgICAgICAgIE9TU3RhdHVzIGVyciA9IFNlY1Ry
dXN0RXZhbHVhdGUodHJ1c3QsIE5VTEwpOworICAgICAgICBpZiAoZXJyID09IG5vRXJyKQorICAg
ICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAqKVNlY1Ry
dXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKCFpbmZvRGljdGlv
bmFyeSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlkIGFnYWluc3Qgb3VyIGNlcnRpZmljYXRl
IGNoYWluLgorICAgIGlkIGhhc0VWID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktleTooX19i
cmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0ZW5kZWRWYWxpZGF0aW9uS2V5XTsKKyAg
ICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gfHwgIVtoYXNFViBi
b29sVmFsdWVdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQg
d2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZlciBhbmQgaXQgaXMgc3RpbGwgdmFsaWQu
CisgICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktleTooX19i
cmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2b2NhdGlvbktleV07CisgICAgaWYgKCFb
aXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSB8fCAhW2lzTm90UmV2
b2tlZCBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX0VWT3JnYW5pemF0
aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6KF9fYnJpZGdlIE5TU3RyaW5n
ICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsKKyAgICByZXR1cm4gX0VWT3JnYW5pemF0
aW9uTmFtZS5nZXQoKTsKK30KKworLSAodm9pZClfdXBkYXRlTG9jYXRpb25JbmZvCit7CisgICAg
TlNVUkwqIHVybCA9IF93ZWJWaWV3Ll9jb21taXR0ZWRVUkw7CisKKyAgICBOU1N0cmluZyAqRVZP
cmdhbml6YXRpb25OYW1lID0gW3NlbGYgX0VWT3JnYW5pemF0aW9uTmFtZV07CisgICAgQk9PTCBz
aG93c0VWT3JnYW5pemF0aW9uTmFtZSA9IFtFVk9yZ2FuaXphdGlvbk5hbWUgbGVuZ3RoXSA+IDA7
CisKKyAgICBOU1N0cmluZyAqZG9tYWluID0gbmlsOworCisgICAgaWYgKExpbmtQcmVzZW50YXRp
b25MaWJyYXJ5KCkpCisgICAgICAgIGRvbWFpbiA9IFt1cmwgX2xwX3NpbXBsaWZpZWREaXNwbGF5
U3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIGRvbWFpbiA9IHVzZXJWaXNpYmxlU3RyaW5nKHVy
bCk7CisKKyAgICBOU1N0cmluZyAqdGV4dCA9IG5pbDsKKyAgICBpZiAoW1t1cmwgc2NoZW1lXSBj
YXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiZGF0YSJdID09IE5TT3JkZXJlZFNhbWUpCisgICAgICAg
IHRleHQgPSBAImRhdGE6IjsKKyAgICBlbHNlIGlmIChzaG93c0VWT3JnYW5pemF0aW9uTmFtZSkK
KyAgICAgICAgdGV4dCA9IEVWT3JnYW5pemF0aW9uTmFtZTsKKyAgICBlbHNlCisgICAgICAgIHRl
eHQgPSBkb21haW47CisKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRMb2NhdGlv
bjp0ZXh0XTsKK30KKworLSAoV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXIKK3sK
KyAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBbX3dlYlZpZXcgX3BhZ2VdLT5mdWxsU2NyZWVuTWFuYWdlcigpOworfQorCistICh2
b2lkKV9zdGFydFRvRGlzbWlzc0Z1bGxzY3JlZW5DaGFuZ2VkOihpZClzZW5kZXIKK3sKKyAgICBf
aW5JbnRlcmFjdGl2ZURpc21pc3MgPSB0cnVlOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9s
bGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57CisgICAg
ICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dOworICAgICAgICBbX2Z1bGxzY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOllFU107CisgICAgfV07Cit9
CisKKy0gKHZvaWQpX2ludGVyYWN0aXZlRGlzbWlzc0NoYW5nZWQ6KGlkKXNlbmRlcgoreworICAg
IGlmICghX2luSW50ZXJhY3RpdmVEaXNtaXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBDR1Bv
aW50IHRyYW5zbGF0aW9uID0gW19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplciB0
cmFuc2xhdGlvbkluVmlldzpfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZpZXddOwor
ICAgIENHUG9pbnQgdmVsb2NpdHkgPSBbX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25p
emVyIHZlbG9jaXR5SW5WaWV3Ol9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkudmlld107
CisgICAgQ0dGbG9hdCBwZXJjZW50ID0gdHJhbnNsYXRpb24ueSAvIChfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyLmdldCgpLnZpZXcuYm91bmRzLnNpemUuaGVpZ2h0IC8gMik7CisgICAgcGVyY2Vu
dCA9IHN0ZDo6bWluKDEuLCBzdGQ6Om1heCgwLiwgcGVyY2VudCkpOworCisgICAgaWYgKF9pbnRl
cmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKS5zdGF0ZSA9PSBVSUdlc3R1cmVS
ZWNvZ25pemVyU3RhdGVFbmRlZCkgeworICAgICAgICBfaW5JbnRlcmFjdGl2ZURpc21pc3MgPSBm
YWxzZTsKKworICAgICAgICBpZiAocGVyY2VudCA+IDAuMjUgfHwgKHBlcmNlbnQgPiAwICYmIHZl
bG9jaXR5LnkgPiA1KSkKKyAgICAgICAgICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbFNjcmVlbl07
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgW19pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0
aW9uQ29vcmRpbmF0b3IgY2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgICAg
IF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgPSBuaWw7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtfaW50ZXJhY3RpdmVEaXNtaXNzVHJh
bnNpdGlvbkNvb3JkaW5hdG9yIHVwZGF0ZUludGVyYWN0aXZlVHJhbnNpdGlvbjpwZXJjZW50IHdp
dGhUcmFuc2xhdGlvbjpDR1NpemVNYWtlKHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnkpXTsK
K30KKwogQGVuZAogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVl
bi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9m
dWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5jZmQyYWY2NzUzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxVSUtpdC9VSVZpZXcu
aD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworQGludGVyZmFjZSBXS0Z1bGxzY3JlZW5T
dGFja1ZpZXcgOiBVSVZpZXcKKysgKHZvaWQpYXBwbHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3OihV
SVZpZXcgKil2aWV3OworKyAodm9pZClhcHBseVNlY29uZGFyeUdseXBoVGludFRvVmlldzooVUlW
aWV3ICopdmlldzsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czoo
TlNBcnJheTxVSVZpZXcgKj4gKilhcnJhbmdlZFN1YnZpZXdzIGF4aXM6KFVJTGF5b3V0Q29uc3Ry
YWludEF4aXMpYXhpczsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIG51bGxhYmxlKSBV
SVZpZXcgKnRhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlldyAqY29udGVudFZpZXc7CitAZW5kCisKK05TX0FT
U1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQ
TEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVs
bHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYxYTExYjVhMjcwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tW
aWV3Lm1tCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCisjaW5jbHVk
ZSAiV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmgiCisKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1w
b3J0IDxRdWFydHpDb3JlL0NBRmlsdGVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpc3VhbEVmZmVj
dFZpZXcuaD4KKyNpbXBvcnQgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorCitzdGF0aWMgTlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPiogcmVkdWNlZFRy
YW5zcGFyZW5jeUVmZmVjdHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5Q
dHI8TlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPj4+IGVmZmVjdHM7CisgICAgc3RhdGljIGRpc3Bh
dGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeewor
ICAgICAgICBlZmZlY3RzLmdldCgpID0gQFtbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRp
bmdDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhSZWQ6KDQzLjAgLyAyNTUuMCkgZ3JlZW46KDQ2LjAg
LyAyNTUuMCkgYmx1ZTooNDguMCAvIDI1NS4wKSBhbHBoYToxLjBdIHdpdGhNb2RlOlVJQ29tcG9z
aXRpbmdNb2RlTm9ybWFsIGFscGhhOjEuMF1dOworICAgIH0pOworICAgIHJldHVybiBlZmZlY3Rz
LmdldCgpLmdldCgpOworfQorCitzdGF0aWMgTlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPiogbm9y
bWFsVHJhbnNwYXJlbmN5RWZmZWN0cygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJl
dGFpblB0cjxOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+Pj4gZWZmZWN0czsKKyAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4s
IF57CisgICAgICAgIGVmZmVjdHMuZ2V0KCkgPSBAWworICAgICAgICAgICAgW1VJVmlzdWFsRWZm
ZWN0IGVmZmVjdENvbXBvc2l0aW5nQ29sb3I6W1VJQ29sb3IgYmxhY2tDb2xvcl0gd2l0aE1vZGU6
VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxwaGE6MC41NV0sCisgICAgICAgICAgICBbVUlCbHVy
RWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVzOlVJUm91bmRUb1NjcmVlblNjYWxlKDE3LjUsIFtV
SVNjcmVlbiBtYWluU2NyZWVuXSldLAorICAgICAgICAgICAgW1VJQ29sb3JFZmZlY3QgY29sb3JF
ZmZlY3RTYXR1cmF0ZToxLjhdLAorICAgICAgICAgICAgW1VJVmlzdWFsRWZmZWN0IGVmZmVjdENv
bXBvc2l0aW5nQ29sb3I6W1VJQ29sb3Igd2hpdGVDb2xvcl0gd2l0aE1vZGU6VUlDb21wb3NpdGlu
Z01vZGVOb3JtYWwgYWxwaGE6MC4xNF0KKyAgICAgICAgXTsKKyAgICB9KTsKKyAgICByZXR1cm4g
ZWZmZWN0cy5nZXQoKS5nZXQoKTsKK30KKworQGludGVyZmFjZSBVSVZpc3VhbEVmZmVjdFZpZXcg
KFdlYktpdFByaXZhdGUpCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5KSBO
U0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+ICpiYWNrZ3JvdW5kRWZmZWN0czsKK0BlbmQKKworQGlu
dGVyZmFjZSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgVUlTdGFja1ZpZXcgKl9zdGFja1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFVJVmlzdWFsRWZmZWN0VmlldyAqX3Zpc3VhbEVmZmVjdFZpZXc7CitAcHJvcGVy
dHkgKG5vbmF0b21pYykgVUlWaXN1YWxFZmZlY3RWaWV3ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJs
YXlWaWV3OworQHByb3BlcnR5IChub25hdG9taWMpIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50
ICo+ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHM7CitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcKKworI3ByYWdtYSBtYXJrIC0gQ2xh
c3MgTWV0aG9kcworKyAoTlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPiAqKWJhc2VFZmZlY3RzCit7
CisgICAgaWYgKFVJQWNjZXNzaWJpbGl0eUlzUmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm4gcmVkdWNlZFRyYW5zcGFyZW5jeUVmZmVjdHMoKTsKKyAgICByZXR1cm4g
bm9ybWFsVHJhbnNwYXJlbmN5RWZmZWN0cygpOworfQorCisrICh2b2lkKWNvbmZpZ3VyZVZpZXc6
KFVJVmlldyAqKXZpZXcgZm9yVGludEVmZmVjdFdpdGhDb2xvcjooVUlDb2xvciAqKXRpbnRDb2xv
ciBmaWx0ZXJUeXBlOihOU1N0cmluZyAqKWZpbHRlclR5cGUKK3sKKyAgICBpZiAoW3ZpZXcgaXNL
aW5kT2ZDbGFzczpbVUlMYWJlbCBjbGFzc11dKSB7CisgICAgICAgIFsoVUlMYWJlbCAqKXZpZXcg
c2V0VGV4dENvbG9yOnRpbnRDb2xvcl07CisgICAgICAgIFt2aWV3IHNldFRpbnRDb2xvcjp0aW50
Q29sb3JdOworICAgICAgICBbW3ZpZXcgbGF5ZXJdIHNldENvbXBvc2l0aW5nRmlsdGVyOltDQUZp
bHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJQbHVzTF1dOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgX1VJVmlzdWFsRWZmZWN0VGludExheWVyQ29uZmlnICp0aW50TGF5ZXJDb25m
aWcgPSBbX1VJVmlzdWFsRWZmZWN0VGludExheWVyQ29uZmlnIGxheWVyV2l0aFRpbnRDb2xvcjp0
aW50Q29sb3IgZmlsdGVyVHlwZTpmaWx0ZXJUeXBlXTsKKyAgICBbW1tfVUlWaXN1YWxFZmZlY3RD
b25maWcgY29uZmlnV2l0aENvbnRlbnRDb25maWc6dGludExheWVyQ29uZmlnXSBjb250ZW50Q29u
ZmlnXSBjb25maWd1cmVMYXllclZpZXc6dmlld107Cit9CisKKysgKHZvaWQpY29uZmlndXJlVmll
dzooVUlWaWV3ICopdmlldyB3aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOihVSUNvbG9yICopZmls
bENvbG9yIG9wYWNpdHk6KENHRmxvYXQpb3BhY2l0eSBmaWx0ZXI6KE5TU3RyaW5nICopZmlsdGVy
Cit7CisgICAgX1VJVmlzdWFsRWZmZWN0TGF5ZXJDb25maWcgKmJhc2VMYXllckNvbmZpZyA9IFtf
VUlWaXN1YWxFZmZlY3RMYXllckNvbmZpZyBsYXllcldpdGhGaWxsQ29sb3I6ZmlsbENvbG9yIG9w
YWNpdHk6b3BhY2l0eSBmaWx0ZXJUeXBlOmZpbHRlcl07CisgICAgW1tbX1VJVmlzdWFsRWZmZWN0
Q29uZmlnIGNvbmZpZ1dpdGhDb250ZW50Q29uZmlnOmJhc2VMYXllckNvbmZpZ10gY29udGVudENv
bmZpZ10gY29uZmlndXJlTGF5ZXJWaWV3OnZpZXddOworfQorCisrIChVSVZpc3VhbEVmZmVjdFZp
ZXcgKilzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Cit7CisgICAgVUlWaXN1YWxFZmZlY3RW
aWV3ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3ID0gW1tVSVZpc3VhbEVmZmVjdFZpZXcg
YWxsb2NdIGluaXRXaXRoRWZmZWN0Om5pbF07CisgICAgW3NlY29uZGFyeU1hdGVyaWFsT3Zlcmxh
eVZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5hYmxlZDpOT107CisgICAgW3NlY29uZGFyeU1hdGVy
aWFsT3ZlcmxheVZpZXcgc2V0QmFja2dyb3VuZEVmZmVjdHM6QFtbVUlWaXN1YWxFZmZlY3QgZWZm
ZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciBibGFja0NvbG9yXSB3aXRoTW9kZTpVSUNvbXBv
c2l0aW5nTW9kZVBsdXNEYXJrZXIgYWxwaGE6MC4wNl1dXTsKKyAgICByZXR1cm4gc2Vjb25kYXJ5
TWF0ZXJpYWxPdmVybGF5VmlldzsKK30KKworI3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJm
YWNlCisKKysgKHZvaWQpYXBwbHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3
Cit7CisgICAgW3NlbGYgY29uZmlndXJlVmlldzp2aWV3IGZvclRpbnRFZmZlY3RXaXRoQ29sb3I6
W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MS4wIGFscGhhOjAuNzVdIGZpbHRlclR5cGU6a0NBRmls
dGVyUGx1c0xdOworfQorCisrICh2b2lkKWFwcGx5U2Vjb25kYXJ5R2x5cGhUaW50VG9WaWV3OihV
SVZpZXcgKil2aWV3Cit7CisgICAgW3NlbGYgY29uZmlndXJlVmlldzp2aWV3IGZvclRpbnRFZmZl
Y3RXaXRoQ29sb3I6W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MS4wIGFscGhhOjAuNTVdIGZpbHRl
clR5cGU6a0NBRmlsdGVyUGx1c0xdOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBcnJh
bmdlZFN1YnZpZXdzOihOU0FycmF5PFVJVmlldyAqPiAqKWFycmFuZ2VkU3Vidmlld3MgYXhpczoo
VUlMYXlvdXRDb25zdHJhaW50QXhpcylheGlzCit7CisgICAgc2VsZiA9IFtzZWxmIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCldOworCisgICAgaWYgKCFzZWxmKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgW3NlbGYgc2V0Q2xpcHNUb0JvdW5kczpZRVNdOworCisg
ICAgX3Zpc3VhbEVmZmVjdFZpZXcgPSBbW1VJVmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdp
dGhFZmZlY3Q6bmlsXTsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3Ol92aXN1YWxFZmZlY3RWaWV3XTsK
KyAgICBbX3Zpc3VhbEVmZmVjdFZpZXcgc2V0QmFja2dyb3VuZEVmZmVjdHM6W1tzZWxmIGNsYXNz
XSBiYXNlRWZmZWN0c11dOworCisgICAgX3N0YWNrVmlldyA9IFtbVUlTdGFja1ZpZXcgYWxsb2Nd
IGluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czphcnJhbmdlZFN1YnZpZXdzXTsKKyAgICBbX3N0YWNr
VmlldyBzZXRBeGlzOmF4aXNdOworICAgIFtfc3RhY2tWaWV3IHNldExheW91dE1hcmdpbnNSZWxh
dGl2ZUFycmFuZ2VtZW50OllFU107CisgICAgW19zdGFja1ZpZXcgc2V0SW5zZXRzTGF5b3V0TWFy
Z2luc0Zyb21TYWZlQXJlYTpOT107CisgICAgW3NlbGYgaW5zZXJ0U3Vidmlldzpfc3RhY2tWaWV3
IGFib3ZlOl92aXN1YWxFZmZlY3RWaWV3XTsKKworICAgIFtzZWxmIF9zZXRBcnJhbmdlZFN1YnZp
ZXdzOmFycmFuZ2VkU3Vidmlld3MgYXhpczpheGlzXTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNldFRhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk6KFVJVmll
dyAqKXRhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkKK3sKKyAgICBpZiAoX3Rh
cmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkgPT0gdGFyZ2V0Vmlld0ZvclNlY29u
ZGFyeU1hdGVyaWFsT3ZlcmxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3RhcmdldFZpZXdG
b3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkgPSB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJp
YWxPdmVybGF5OworICAgIFtzZWxmIHNldE5lZWRzVXBkYXRlQ29uc3RyYWludHNdOworfQorCist
IChVSVZpZXcgKiljb250ZW50VmlldworeworICAgIHJldHVybiBbX3Zpc3VhbEVmZmVjdFZpZXcg
Y29udGVudFZpZXddOworfQorCisjcHJhZ21hIG1hcmsgLSBJbnRlcm5hbCBJbnRlcmZhY2UKKwor
QHN5bnRoZXNpemUgX3N0YWNrVmlldz1fc3RhY2tWaWV3OworQHN5bnRoZXNpemUgX3Zpc3VhbEVm
ZmVjdFZpZXc9X3Zpc3VhbEVmZmVjdFZpZXc7CisKKy0gKHZvaWQpX3NldEFycmFuZ2VkU3Vidmll
d3M6KE5TQXJyYXk8VUlWaWV3ICo+ICopYXJyYW5nZWRTdWJ2aWV3cyBheGlzOihVSUxheW91dENv
bnN0cmFpbnRBeGlzKWF4aXMKK3sKKyAgICBmb3IgKFVJVmlldyAqdmlldyBpbiBbX3N0YWNrVmll
dyBhcnJhbmdlZFN1YnZpZXdzXSkKKyAgICAgICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107
CisKKyAgICBmb3IgKFVJVmlldyAqdmlldyBpbiBhcnJhbmdlZFN1YnZpZXdzKQorICAgICAgICBb
X3N0YWNrVmlldyBhZGRBcnJhbmdlZFN1YnZpZXc6dmlld107CisKKyAgICBbX3N0YWNrVmlldyBz
ZXRBeGlzOmF4aXNdOworfQorCisjcHJhZ21hIG1hcmsgLSBVSVZpZXcgT3ZlcnJpZGVzCisKKy0g
KHZvaWQpc2V0Qm91bmRzOihDR1JlY3QpYm91bmRzCit7CisgICAgQ0dTaXplIG9sZFNpemUgPSBb
c2VsZiBib3VuZHNdLnNpemU7CisKKyAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5kc107CisKKyAg
ICBpZiAoIUNHU2l6ZUVxdWFsVG9TaXplKG9sZFNpemUsIGJvdW5kcy5zaXplKSkKKyAgICAgICAg
W3NlbGYgX3NldENvbnRpbnVvdXNDb3JuZXJSYWRpdXM6KChDR1JlY3RHZXRIZWlnaHQoYm91bmRz
KSA+IDQwLjApID8gMTYuMCA6IDguMCldOworfQorCistICh2b2lkKXVwZGF0ZUNvbnN0cmFpbnRz
Cit7CisgICAgaWYgKFtfc3RhY2tWaWV3IHRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0Nv
bnN0cmFpbnRzXSB8fCBbX3Zpc3VhbEVmZmVjdFZpZXcgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01h
c2tJbnRvQ29uc3RyYWludHNdKSB7CisgICAgICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFu
c2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgICAgIFtfc3Rh
Y2tWaWV3IHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsK
KworICAgICAgICBOU0FycmF5PE5TTGF5b3V0Q29uc3RyYWludCAqPiAqY29uc3RyYWludHMgPSBA
WworICAgICAgICAgICAgW1tfdmlzdWFsRWZmZWN0VmlldyBsZWFkaW5nQW5jaG9yXSBjb25zdHJh
aW50RXF1YWxUb0FuY2hvcjpbc2VsZiBsZWFkaW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW192
aXN1YWxFZmZlY3RWaWV3IHRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYg
dG9wQW5jaG9yXV0sCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IHRyYWlsaW5nQW5j
aG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiB0cmFpbGluZ0FuY2hvcl1dLAorICAg
ICAgICAgICAgW1tfdmlzdWFsRWZmZWN0VmlldyBib3R0b21BbmNob3JdIGNvbnN0cmFpbnRFcXVh
bFRvQW5jaG9yOltzZWxmIGJvdHRvbUFuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3
IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGxlYWRpbmdBbmNo
b3JdXSwKKyAgICAgICAgICAgIFtbX3N0YWNrVmlldyB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVh
bFRvQW5jaG9yOltzZWxmIHRvcEFuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IHRy
YWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiB0cmFpbGluZ0FuY2hv
cl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9BbmNob3I6W3NlbGYgYm90dG9tQW5jaG9yXV0sCisgICAgICAgIF07CisKKyAgICAgICAg
Zm9yIChOU0xheW91dENvbnN0cmFpbnQgKmNvbnN0cmFpbnQgaW4gY29uc3RyYWludHMpCisgICAg
ICAgICAgICBbY29uc3RyYWludCBzZXRQcmlvcml0eTooVUlMYXlvdXRQcmlvcml0eVJlcXVpcmVk
IC0gMSldOworCisgICAgICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50
czpjb25zdHJhaW50c107CisgICAgfQorCisgICAgaWYgKFtbc2VsZiB0YXJnZXRWaWV3Rm9yU2Vj
b25kYXJ5TWF0ZXJpYWxPdmVybGF5XSBpc0Rlc2NlbmRhbnRPZlZpZXc6c2VsZl0pIHsKKyAgICAg
ICAgaWYgKCFfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldykgeworICAgICAgICAgICAgW3Nl
bGYgc2V0U2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldzpbW3NlbGYgY2xhc3NdIHNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheVZpZXddXTsKKyAgICAgICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6W3Nl
bGYgc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld11dOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKFtbc2VsZiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3XSBpc0Rlc2NlbmRhbnRPZlZp
ZXc6c2VsZl0gJiYgIV9zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHMpIHsK
KyAgICAgICAgICAgIFtbc2VsZiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3XSBzZXRUcmFu
c2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgICAgICAgICBO
U0FycmF5PE5TTGF5b3V0Q29uc3RyYWludCAqPiAqY29uc3RyYWludHMgPSBAWworICAgICAgICAg
ICAgICAgIFtbX3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgY2VudGVyWEFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5IGNlbnRlclhBbmNob3JdXSwKKyAgICAgICAgICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlh
bE92ZXJsYXlWaWV3IGNlbnRlcllBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdGFy
Z2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSBjZW50ZXJZQW5jaG9yXV0sCisgICAg
ICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyB3aWR0aEFuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9BbmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxP
dmVybGF5IHdpZHRoQW5jaG9yXV0sCisgICAgICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJp
YWxPdmVybGF5VmlldyBoZWlnaHRBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdGFy
Z2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSBoZWlnaHRBbmNob3JdXQorICAgICAg
ICAgICAgXTsKKyAgICAgICAgICAgIFtzZWxmIHNldFNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXdDb25zdHJhaW50czpjb25zdHJhaW50c107CisgICAgICAgICAgICBbTlNMYXlvdXRDb25zdHJh
aW50IGFjdGl2YXRlQ29uc3RyYWludHM6W3NlbGYgc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmll
d0NvbnN0cmFpbnRzXV07CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgW19zZWNvbmRh
cnlNYXRlcmlhbE92ZXJsYXlWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW3N1cGVy
IHVwZGF0ZUNvbnN0cmFpbnRzXTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3NTg3MDI5NmFkZC4uMzUzNjU5ZTM3OTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjAyNSw4ICsyMDI1LDEyIEBACiAJCUM5Q0Q0MzlFMUI0QjAyNTMwMDIzOUUzMyAvKiBXS01lZGlh
U2Vzc2lvbk1ldGFkYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM5Q0Q0Mzk5MUI0QjAyNDIwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFk
YXRhLmNwcCAqLzsgfTsKIAkJQ0QwMDNBNTIxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5
U3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0QwMDNBNTAxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1h
bmFnZXIuY3BwICovOyB9OwogCQlDRDAwM0E1MzE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFL
ZXlTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0QwMDNBNTExOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1h
bmFnZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzEyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzIyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0QwQzY4MzAyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyLm1tICovOyB9OwogCQlDRDE5QTI2RDFBMTNFODJBMDA4RDY1MEUgLyogV2ViRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0QxOUEyNjkxQTEzRTgyMDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJQ0QxOUEyNkUxQTEzRTgzNDAwOEQ2NTBFIC8qIFdlYkRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRDE5QTI2QTFBMTNFODIxMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaCAqLzsgfTsKKwkJQ0QxOUQyRUEyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxz
Y3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0QxOUQyRTgyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYy5oICovOyB9OworCQlDRDE5RDJFQjIwNDY0MDZGMDAxNzA3NEEgLyogRnVs
bHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEMTlEMkU5MjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVu
VG91Y2hTZWNoZXVyaXN0aWMuY3BwICovOyB9OwogCQlDRDQ5MUIwNzFFNzBEMDVGMDAwMDkwNjYg
LyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJQ0Q0OTFCMDgxRTcwRDA1RjAwMDA5MDY2IC8q
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXIuaCAqLzsgfTsKIAkJQ0Q0OTFCMEQxRTczMkU0RDAwMDA5MDY2IC8qIFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENDkxQjBCMUU3MzJFNEQwMDAwOTA2NiAvKiBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0yMDU2
LDYgKzIwNjAsOCBAQAogCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlck1lc3NhZ2VzLmggKi87IH07CiAJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5
YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NG
IC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CiAJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eU1lc3NhZ2VzLmggKi87IH07CisJCUNEQzI4MzFEMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxz
Y3JlZW5TdGFja1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzI4MzFCMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcu
aCAqLzsgfTsKKwkJQ0RDMjgzMUUyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNr
Vmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENE
QzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gKi87IH07
CiAJCUNEQzM4MkZFMTcyMTE3OTkwMDhBMkZDMyAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0
NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3
MjExN0REMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhB
MkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3
MjEyMjgyMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJG
QzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggKi87IH07CkBAIC0zMjg3LDggKzMyOTMs
OCBAQAogCQkzRjg3QjlCQTE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAv
KiBXZWJDb2xvckNob29zZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29sb3JDaG9vc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJGMTU4
OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb2xvclBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9XS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjkxNUMwRjFG
NTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg7IHBhdGggPSBpb3Mv
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTNGOTE1QzBGMUY1NjRERUQwMDE4M0NFOSAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCMDhFNDIxRjYwQjI0MDAwNUU1
MzEyIC8qIGlPUy54Y2Fzc2V0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGZvbGRlci5hc3NldGNhdGFsb2c7IHBhdGggPSBpT1MueGNhc3NldHM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNCMURERDJGQjUwMEYwMDZEMCAvKiBS
VENOZXR3b3JrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ05l
dHdvcmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA0ODJDQzFEREQyRkI1
MDBGMDA2RDAgLyogUlRDTmV0d29yay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSVENOZXR3b3JrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTMzLDggKzQ1
MzksMTIgQEAKIAkJQzlDRDQzOUExQjRCMDI0MjAwMjM5RTMzIC8qIFdLTWVkaWFTZXNzaW9uTWV0
YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tNZWRpYVNlc3Npb25N
ZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDAwM0E1MDE5RDQ5QjVE
MDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcDsgcGF0
aCA9IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNEMDAzQTUxMTlENDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtl
eVN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1l
ZGlhS2V5U3RvcmFnZU1hbmFnZXIuaDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9y
YWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDBDNjgyRjIwMUZE
MTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUNEMEM2ODMwMjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tOyBw
YXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlBMjY5MUExM0U4MjAwMDhENjUwRSAvKiBXZWJE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNEMTlBMjZBMUExM0U4MjEwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDE5RDJF
ODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oOyBwYXRoID0gaW9zL2Z1bGxz
Y3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEMTlEMkU5MjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNo
ZXVyaXN0aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlz
dGljLmNwcDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3Rp
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA1MUU3MEQwNUYwMDAw
OTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA2MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDQ5MUIw
QTFFNzMyRDEyMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NTc0LDYgKzQ1ODQsOCBAQAogCQlDREEyOUEyNTFDQkVCNjdBMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTI3MUNC
RUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREMyODMxQjIwMUJE
NzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdL
RnVsbHNjcmVlblN0YWNrVmlldy5oOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVu
U3RhY2tWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzI4MzFDMjAxQkQ3
OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07IHBhdGggPSBpb3MvZnVsbHNjcmVlbi9XS0Z1
bGxzY3JlZW5TdGFja1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4
MkY3MTcyMTE1MDYwMDhBMkZDMyAvKiBDRk5ldHdvcmsuZnJhbWV3b3JrICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5h
bWUgPSBDRk5ldHdvcmsuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ0ZOZXR3b3JrLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
Q0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJv
Y2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKQEAgLTU3NjUsNiArNTc3Nyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCUM1NDI1NkFFMThCRUMxNjEwMERFNDE3OSAvKiBmb3JtcyAqLywKKwkJCQlDREMy
ODMxQTIwMUJENzU2MDBFNkU3NDUgLyogZnVsbHNjcmVlbiAqLywKIAkJCQlBMTE1REM2RTE5MUQ4
MkFCMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyLmggKi8sCiAJCQkJQTExNURD
NkQxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5tbSAqLywKIAkJ
CQlBMTlERDNCRjFEMDdEMTY4MDBBQzgyM0IgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50
ZXJuYWwuaCAqLywKQEAgLTU3OTYsOCArNTgwOSw2IEBACiAJCQkJMEZDQjRFM0QxOEJCRTA0NDAw
MEZDRkM5IC8qIFdLQ29udGVudFZpZXcubW0gKi8sCiAJCQkJMEZDQjRFNkExOEJCRjI2QTAwMEZD
RkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oICovLAogCQkJCTBGQ0I0RTZCMThCQkYy
NkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gKi8sCi0JCQkJM0Y5MTVD
MEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAq
LywKLQkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcklPUy5tbSAqLywKIAkJCQkwRkNCNEUzRjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TLmggKi8sCiAJCQkJMEZDQjRFNDAxOEJCRTA0NDAwMEZDRkM5IC8q
IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSAqLywKIAkJCQkwRkNCNEU0MTE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICov
LApAQCAtODQ3OCw2ICs4NDg5LDIxIEBACiAJCQluYW1lID0gRnVsbFNjcmVlbjsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUNEQzI4MzFBMjAxQkQ3NTYwMEU2RTc0NSAvKiBm
dWxsc2NyZWVuICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi8s
CisJCQkJQ0RDMjgzMUMyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5t
bSAqLywKKwkJCQlDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0Nv
bnRyb2xsZXIuaCAqLywKKwkJCQlDRDBDNjgzMDIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIubW0gKi8sCisJCQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8q
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLywKKwkJCQkzRjkxNUMwRTFGNTY0
REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLywKKwkJ
CQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
LmggKi8sCisJCQkJQ0QxOUQyRTkyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNl
Y2hldXJpc3RpYy5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGZ1bGxzY3JlZW47CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlDRENBODVFNDEzMkFEMzMwMDBFOTYxREYgLyog
bWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTg4MDMs
NiArODgyOSw3IEBACiAJCQkJOTk1NUE2RjUxQzc5ODZFMDAwRUI2QTkzIC8qIEF1dG9tYXRpb25C
YWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5QzgxRDVBMUMyMEU3RTIw
MDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTI0OUFE
NjFGMUYxRTVGMDBCNjJGQkIgLyogQXV0b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hlcnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUNEMTlEMkVBMjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91
Y2hTZWNoZXVyaXN0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NTVBNkY3MUM3OTg2RTUwMEVC
NkE5MyAvKiBBdXRvbWF0aW9uUHJvdG9jb2xPYmplY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTBEMjhCQjFDNjUzOUQzMDA5ODY5NzcgLyogQXV0b21hdGlvblNlc3Npb25DbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2
aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODE4LDYgKzg4NDUsNyBAQAogCQkJCTFBQTJF
NTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEyRDk1NkYxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFGQUVDM0ExQjA2NTc2MzAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDREMyODMxRDIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2Ny
ZWVuU3RhY2tWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTUxM0M2NzE2NkVBQkIyMDAxNDlG
Q0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5MEY0MjcyMTcy
QTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlDRTExQUQ1MjFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmcuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTM2Miw2ICs5MzkwLDcgQEAKIAkJCQk5MzRCNzI0NDE5RjVCOUJFMDBBRTk2RDYg
LyogV0tBY3Rpb25NZW51SXRlbVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzlGNDAxQzE5
RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rpb25NZW51VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQ0I0RTQ4MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggaW4gSGVhZGVycyAq
LywKKwkJCQlDRDBDNjgzMTIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTRBMThCQkUwNDQwMDBGQ0ZDOSAvKiBX
S0FjdGlvblNoZWV0QXNzaXN0YW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUZBMUVEMzE4RTEw
NjIyMDBCM0Y0MDIgLyogV0tBaXJQbGF5Um91dGVQaWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRERCMzJEMTI0RUMyRTEwMDQ4RDEzQyAvKiBXS0FQSUNhc3QuaCBpbiBIZWFkZXJzICovLApA
QCAtMTA0NTQsNiArMTA0ODMsNyBAQAogCQkJCTk5MEQyOEJDMUM2NTM5REEwMDk4Njk3NyAvKiBB
dXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2QTJCNjA4MUU1
Njc2QTYwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2NEEyRjExOTFBRjE0RTAwMTA3MzdEIC8qIEJsb2JEYXRh
RmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUNEMTlEMkVCMjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3MDg3NkIxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JS
ZWdpc3RyeVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRjE4NjM4MTY3RDA3MUUwMEEx
QTg1QSAvKiBDYWNoZU1vZGVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxODk3RUQ3MUY0MTVE
OEEwMDE2RkE0MiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDU0MSw2ICsxMDU3MSw3IEBACiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8q
IExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjBDMzY1RTE4QzEx
MEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUNEQzI4MzFFMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxQTkyREMxMzEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29u
dGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZERTY0NTE5NTEwQjU1MDBDNDhGRkEgLyog
TGVnYWN5QnVuZGxlRm9yQ2xhc3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0ZFQ0IwNDFFMUVE
MUNDMDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMTEwMzksNiArMTEwNzAsNyBAQAogCQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3
OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
RTREMjFBMUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0U0RDIxNjFBNDkxNDg0MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUNEMEM2ODMyMjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDRTREMjI3MUE0OTE2
QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzExMUIxMTExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDRGNjE5MUE0QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9j
ZXNzUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICovLAotLSAKMi4xNS4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335483</attachid>
            <date>2018-03-09 16:15:00 -0800</date>
            <delta_ts>2018-03-09 16:15:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183503-20180309161459.patch</filename>
            <type>text/plain</type>
            <size>135986</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJjZTI3M2Q2NmIxYmViM2Ey
NWU1ZTQxY2E3YzRiMGM0YzNmOWEwOTcuLjk4YTIxNDA3YjU4YzA0OWQ5MTcxYjM3ZjY1YmFkYjgw
YTJkZDA1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDE4LTAzLTA4ICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmVtZW50cyB0byBmdWxs
c2NyZWVuOyBuZXcgVUkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM1MDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3cgdGhhdCB0aGUgaU9TIEZ1bGxzY3JlZW4g
Y29kZSBoYXMgbW9yZSB0aGFuIG9uZSBtYWpvciBjbGFzcywgbW92ZSBpdCBpbnRvIGFuIGlvcy8K
KyAgICAgICAgZGlyZWN0b3J5LgorCisgICAgICAgIENsZWFuIHVwIHRoZSBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVySU9TIGNsYXNzIHRvIG1vcmUgY2xlYXJseSBzZXBhcmF0ZSBleHRlcm5h
bAorICAgICAgICBmYWNpbmcgQVBJIGZyb20gcHVyZWx5IGludGVybmFsIGZ1bmN0aW9ucy4KKwor
ICAgICAgICBNb3ZlIHRoZSBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBpdHMg
b3duIGZpbGUuIEFkZCBzdXBwb3J0IGZvciBmdWxsc2NyZWVuCisgICAgICAgIHRvcCBpbnNldCBh
bmQgZnVsbHNjcmVlbiBhdXRvaGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgorCisgICAgICAg
IEFkZCBhIGhldXJpc3RpYyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGNvbnRyb2wgcmVs
YXRlZCB0b3VjaGVzIGFuZCBvbmVzIHRoYXQgbG9vaworICAgICAgICBtb3JlIGtleWJvYXJkIGlu
dGVyYWN0aW9ucy4KKworICAgICAgICBBZGQgYSBuZXcgVUlTdGFja1ZpZXcgYmFzZWQgY29udHJv
bCB0byBob2xkIHRoZSBmdWxsc2NyZWVuIGNvbnRyb2xzLgorCisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
OjpzY29yZU9mTmV4dFRvdWNoKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2Vj
aGV1cmlzdGljOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYzo6ZGlzdGFuY2VTY29yZSk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYzo6YXR0ZW51YXRpb25GYWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaDogCisgICAgICAgIChX
ZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcFVwU3BlZWQpOgorICAg
ICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFJhbXBEb3duU3Bl
ZWQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFhX
ZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNl
dFlXZWlnaHQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OnNldFNpemUpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6
OnNldEdhbW1hKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
OjpzZXRHYW1tYUN1dG9mZik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxs
c2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldFBh
cmVudCk6CisgICAgICAgIChXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lv
bk1vZGVsQ2xpZW50OjpzZXRJbnRlcmZhY2UpOgorICAgICAgICAoLVtfV0tFeHRyaW5zaWNCdXR0
b24gc2V0RXh0cmluc2ljQ29udGVudFNpemU6XSk6CisgICAgICAgICgtW19XS0V4dHJpbnNpY0J1
dHRvbiBpbnRyaW5zaWNDb250ZW50U2l6ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3
Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgc2hvd1VJXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGhp
ZGVVSV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRy
b2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJv
bGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciBzZXRQbGF5aW5nOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOl0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBsb2FkVmlld10pOgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlciB2aWV3V2lsbEFwcGVhcjpdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld0RpZExheW91dFN1YnZpZXdzXSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTp3aXRo
VHJhbnNpdGlvbkNvb3JkaW5hdG9yOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBwcmVmZXJyZWRTdGF0dXNCYXJTdHlsZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciBwcmVmZXJzU3RhdHVzQmFySGlkZGVuXSk6CisgICAgICAgICgtW1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6
ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNlaXZlVG91
Y2g6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9tYW5hZ2VyXSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9lZmZlY3RpdmVGdWxsc2Ny
ZWVuSW5zZXRUb3BdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX2Nh
bmNlbEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3Rv
Z2dsZVBpUEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIg
X3RvdWNoRGV0ZWN0ZWQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVy
IF9zdGF0dXNCYXJGcmFtZURpZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9zaG93UGhpc2hpbmdBbGVydF0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVySU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpyZXBsYWNlVmlld1dpdGhWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V0tXZWJWaWV3
U3RhdGU6OmFwcGx5VG8pOgorICAgICAgICAoV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6c3RvcmUp
OgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHRyYW5zaXRpb25E
dXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBj
b25maWd1cmVJbml0aWFsQW5kRmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOl0pOgorICAgICAgICAo
LVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGVUcmFuc2l0aW9uOl0pOgor
ICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGlvbkVuZGVk
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHN0YXJ0SW50
ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyIHVwZGF0ZVdpdGhQZXJjZW50Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5B
bmltYXRpb25Db250cm9sbGVyIHVwZGF0ZVdpdGhQZXJjZW50OnRyYW5zbGF0aW9uOmFuY2hvcjpd
KToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBlbmQ6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBpbml0V2l0aEFuaW1h
dG9yOmFuY2hvcjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0
aW9uIHdhbnRzSW50ZXJhY3RpdmVTdGFydF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24gc3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246XSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiB1cGRhdGVJbnRlcmFjdGl2ZVRy
YW5zaXRpb246d2l0aFRyYW5zbGF0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24gY2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBmaW5pc2hJbnRlcmFjdGl2ZVRy
YW5zaXRpb25dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbml0
V2l0aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
ZGVhbGxvY10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVs
bFNjcmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZp
ZXdQbGFjZWhvbGRlcl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIGJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHJlcXVlc3RFeGl0RnVsbFNj
cmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGV4aXRGdWxs
U2NyZWVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5F
eGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAgICAgICAgKC1b
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dKToK
KyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBjbG9zZV0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRSZW1vdmVGcm9tU3Vw
ZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29n
bml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50
ZWRDb250cm9sbGVyOnByZXNlbnRpbmdDb250cm9sbGVyOnNvdXJjZUNvbnRyb2xsZXI6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxl
ckZvckRpc21pc3NlZENvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgaW50ZXJhY3Rpb25Db250cm9sbGVyRm9yRGlzbWlzc2FsOl0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0
ZWx5XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludmFsaWRh
dGVFVk9yZ2FuaXphdGlvbk5hbWVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlciBfaXNTZWN1cmVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBfc2VydmVyVHJ1c3RdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBfRVZPcmdhbml6YXRpb25OYW1lXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIgX3VwZGF0ZUxvY2F0aW9uSW5mb10pOgorICAgICAgICAoLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIgX3N0YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6XSk6CisgICAg
ICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludGVyYWN0aXZlRGlzbWlzc0No
YW5nZWQ6XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVl
blN0YWNrVmlldy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tOiBBZGRlZC4KKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IGJhc2VFZmZlY3RzXSk6CisgICAgICAgICgrW1dLRnVsbHNj
cmVlblN0YWNrVmlldyBjb25maWd1cmVWaWV3OmZvclRpbnRFZmZlY3RXaXRoQ29sb3I6ZmlsdGVy
VHlwZTpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZpZ3VyZVZpZXc6
d2l0aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpvcGFjaXR5OmZpbHRlcjpdKToKKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddKToKKyAg
ICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmll
dzpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5U2Vjb25kYXJ5R2x5
cGhUaW50VG9WaWV3Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgaW5pdFdp
dGhBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNr
VmlldyBzZXRUYXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Ol0pOgorICAgICAg
ICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgY29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tG
dWxsc2NyZWVuU3RhY2tWaWV3IF9zZXRBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAg
ICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBzZXRCb3VuZHM6XSk6CisgICAgICAgICgtW1dLRnVs
bHNjcmVlblN0YWNrVmlldyB1cGRhdGVDb25zdHJhaW50c10pOgorICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIu
bm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IHBhc3MgTlVMTCB0byB0aGUgcmVzdWx0
IHBhcmFtZXRlciBvZiBTZWNUcnVzdEV2YWx1YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWFiNjIzNDUyOGM1M2Y1NGZhMjk4NDMz
ZDQ0OWY0MGE3MWVlYjFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVySU9TLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0IDxV
SUtpdC9VSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsgCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNz
IEludFJlY3Q7Ci19Ci0KLUBjbGFzcyBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldzsK
LUBjbGFzcyBXS1dlYlZpZXc7Ci0KLUBpbnRlcmZhY2UgV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZ0RlbGVnYXRlPgot
Ci0tIChpZClpbml0V2l0aFdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXc7Ci0KLS0gKFdlYkNv
cmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Kil3ZWJWaWV3UGxhY2Vob2xkZXI7Ci0KLS0gKEJP
T0wpaXNGdWxsU2NyZWVuOwotCi0tICh2b2lkKWVudGVyRnVsbFNjcmVlbjsKLS0gKHZvaWQpZXhp
dEZ1bGxTY3JlZW47Ci0tICh2b2lkKXJlcXVlc3RFeGl0RnVsbFNjcmVlbjsKLS0gKHZvaWQpY2xv
c2U7Ci0tICh2b2lkKWJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0
KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZTsKLS0gKHZvaWQpYmVn
YW5FeGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVjdClpbml0aWFsRnJhbWUgZmlu
YWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7Ci0tICh2b2lkKXdlYlZpZXdEaWRSZW1vdmVGcm9t
U3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW47Ci0tICh2b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlOwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhNTU4MmUwZjNiMWZiNTE4NWEyNWUyY2U0
NzA3YjU1MDJjMmZhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcklPUy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDg4NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBQTEFURk9STShJT1MpICYmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKLSNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCIKLQot
I2ltcG9ydCAiVUlLaXRTUEkuaCIKLSNpbXBvcnQgIldLV2ViVmlldy5oIgotI2ltcG9ydCAiV0tX
ZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKLSNpbXBvcnQg
IldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW1wb3J0IDxTZWN1cml0eS9TZWND
ZXJ0aWZpY2F0ZS5oPgotI2ltcG9ydCA8U2VjdXJpdHkvU2VjVHJ1c3QuaD4KLSNpbXBvcnQgPFVJ
S2l0L1VJVmlzdWFsRWZmZWN0Vmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
SW50UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1dlYkNvcmVOU1VSTEV4dHJhcy5oPgotI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5l
dHdvcmtTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTGlua1ByZXNlbnRhdGlvblNQSS5o
PgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU1N0cmluZ1NQSS5oPgotI2ltcG9ydCA8cGFsL3Nw
aS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+Ci0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLSNp
bXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlTUEkuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1TT0ZUX0xJTktfUFJJVkFURV9GUkFN
RVdPUktfT1BUSU9OQUwoTGlua1ByZXNlbnRhdGlvbikKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LXN0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uID0g
MC4xOwotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIGF1dG9IaWRlRGVsYXkgPSA0LjA7Ci1z
dGF0aWMgY29uc3QgQ0dGbG9hdCBmb250U2l6ZSA9IDEyOwotCi1zdGF0aWMgdm9pZCByZXBsYWNl
Vmlld1dpdGhWaWV3KFVJVmlldyAqdmlldywgVUlWaWV3ICpvdGhlclZpZXcpCi17Ci0gICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107Ci0gICAgW290aGVyVmlldyBzZXRGcmFtZTpbdmlldyBmcmFtZV1dOwotICAgIFtvdGhl
clZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbdmlldyBhdXRvcmVzaXppbmdNYXNrXV07Ci0gICAg
W1t2aWV3IHN1cGVydmlld10gaW5zZXJ0U3VidmlldzpvdGhlclZpZXcgYWJvdmVTdWJ2aWV3OnZp
ZXddOwotICAgIFt2aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtDQVRyYW5zYWN0aW9u
IGNvbW1pdF07Ci19Ci0KLWVudW0gRnVsbFNjcmVlblN0YXRlIDogTlNJbnRlZ2VyIHsKLSAgICBO
b3RJbkZ1bGxTY3JlZW4sCi0gICAgV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuLAotICAgIEVudGVy
aW5nRnVsbFNjcmVlbiwKLSAgICBJbkZ1bGxTY3JlZW4sCi0gICAgV2FpdGluZ1RvRXhpdEZ1bGxT
Y3JlZW4sCi0gICAgRXhpdGluZ0Z1bGxTY3JlZW4sCi19OwotCi1zdHJ1Y3QgV0tXZWJWaWV3U3Rh
dGUgewotICAgIGZsb2F0IF9zYXZlZFRvcENvbnRlbnRJbnNldCA9IDAuMDsKLSAgICBDR0Zsb2F0
IF9zYXZlZFBhZ2VTY2FsZSA9IDE7Ci0gICAgQ0dGbG9hdCBfc2F2ZWRWaWV3U2NhbGUgPSAxLjA7
Ci0gICAgQ0dGbG9hdCBfc2F2ZWRab29tU2NhbGUgPSAxOwotICAgIFVJRWRnZUluc2V0cyBfc2F2
ZWRFZGdlSW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOwotICAgIFVJRWRnZUluc2V0cyBfc2F2ZWRP
YnNjdXJlZEluc2V0cyA9IFVJRWRnZUluc2V0c1plcm87Ci0gICAgVUlFZGdlSW5zZXRzIF9zYXZl
ZFNjcm9sbEluZGljYXRvckluc2V0cyA9IFVJRWRnZUluc2V0c1plcm87Ci0gICAgQ0dQb2ludCBf
c2F2ZWRDb250ZW50T2Zmc2V0ID0gQ0dQb2ludFplcm87Ci0KLSAgICB2b2lkIGFwcGx5VG8oV0tX
ZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgW3dlYlZpZXcgX3NldFBhZ2VTY2FsZTpf
c2F2ZWRQYWdlU2NhbGUgd2l0aE9yaWdpbjpDR1BvaW50TWFrZSgwLCAwKV07Ci0gICAgICAgIFt3
ZWJWaWV3IF9zZXRPYnNjdXJlZEluc2V0czpfc2F2ZWRPYnNjdXJlZEluc2V0c107Ci0gICAgICAg
IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRDb250ZW50SW5zZXQ6X3NhdmVkRWRnZUluc2V0XTsK
LSAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldENvbnRlbnRPZmZzZXQ6X3NhdmVkQ29u
dGVudE9mZnNldF07Ci0gICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRTY3JvbGxJbmRp
Y2F0b3JJbnNldHM6X3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRzXTsKLSAgICAgICAgW3dlYlZp
ZXcgX3BhZ2VdLT5zZXRUb3BDb250ZW50SW5zZXQoX3NhdmVkVG9wQ29udGVudEluc2V0KTsKLSAg
ICAgICAgW3dlYlZpZXcgX3NldFZpZXdTY2FsZTpfc2F2ZWRWaWV3U2NhbGVdOwotICAgICAgICBb
W3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Wm9vbVNjYWxlOl9zYXZlZFpvb21TY2FsZV07Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc3RvcmUoV0tXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAg
ICAgX3NhdmVkUGFnZVNjYWxlID0gW3dlYlZpZXcgX3BhZ2VTY2FsZV07Ci0gICAgICAgIF9zYXZl
ZE9ic2N1cmVkSW5zZXRzID0gW3dlYlZpZXcgX29ic2N1cmVkSW5zZXRzXTsKLSAgICAgICAgX3Nh
dmVkRWRnZUluc2V0ID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIGNvbnRlbnRJbnNldF07Ci0gICAg
ICAgIF9zYXZlZENvbnRlbnRPZmZzZXQgPSBbW3dlYlZpZXcgc2Nyb2xsVmlld10gY29udGVudE9m
ZnNldF07Ci0gICAgICAgIF9zYXZlZFNjcm9sbEluZGljYXRvckluc2V0cyA9IFtbd2ViVmlldyBz
Y3JvbGxWaWV3XSBzY3JvbGxJbmRpY2F0b3JJbnNldHNdOwotICAgICAgICBfc2F2ZWRUb3BDb250
ZW50SW5zZXQgPSBbd2ViVmlldyBfcGFnZV0tPnRvcENvbnRlbnRJbnNldCgpOwotICAgICAgICBf
c2F2ZWRWaWV3U2NhbGUgPSBbd2ViVmlldyBfdmlld1NjYWxlXTsKLSAgICAgICAgX3NhdmVkWm9v
bVNjYWxlID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHpvb21TY2FsZV07Ci0gICAgfQotfTsKLSAg
ICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0KLUBpbnRlcmZhY2UgX1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlciA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVn
YXRlPgotQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgTlNBcnJheSAqc2F2ZWRDb25zdHJh
aW50czsKLUBwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIFVJVmlldyAqY29udGVudFZpZXc7
Ci1AcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBpZCB0YXJnZXQ7Ci1AcHJvcGVydHkgKGFz
c2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gX1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHsKLSAgICBSZXRhaW5QdHI8VUlWaWV3PiBfYmFja2dy
b3VuZFZpZXc7Ci0gICAgUmV0YWluUHRyPFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF90
b3VjaEdlc3R1cmVSZWNvZ25pemVyOwotICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2NhbmNlbEJ1
dHRvbjsKLSAgICBSZXRhaW5QdHI8VUlCdXR0b24+IF9sb2NhdGlvbkJ1dHRvbjsKLSAgICBSZXRh
aW5QdHI8VUlWaXN1YWxFZmZlY3RWaWV3PiBfdmlzdWFsRWZmZWN0VmlldzsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3Rz
V2l0aFRhcmdldDpzZWxmXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0t
ICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXplKXNpemUgd2l0aFRyYW5zaXRp
b25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvcj4p
Y29vcmRpbmF0b3IKLXsKLSAgICBbc3VwZXIgdmlld1dpbGxUcmFuc2l0aW9uVG9TaXplOnNpemUg
d2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07Ci0gICAgW2Nvb3JkaW5hdG9y
IGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0
aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7Ci0KLSAgICAgICAgdm9pZCAoXndlYlZp
ZXdVcGRhdGVCbG9jaykoKSA9IF57Ci0gICAgICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNv
bnRlbnRWaWV3XSBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXpl
OnNpemUgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6c2l6ZV07Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250ZW50Vmlld10gX2JlZ2luQW5pbWF0ZWRS
ZXNpemVXaXRoVXBkYXRlczp3ZWJWaWV3VXBkYXRlQmxvY2tdOwotICAgICAgICBbKFdLV2ViVmll
dyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlkZTpb
VUlBcHAgc3RhdHVzQmFyT3JpZW50YXRpb25dXTsKLSAgICB9IGNvbXBsZXRpb246XihpZCA8VUlW
aWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvckNvbnRleHQ+Y29udGV4dCkgewotICAg
ICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfZW5kQW5pbWF0ZWRSZXNpemVd
OwotICAgIH1dOwotfQotCi0rICh2b2lkKWNvbmZpZ3VyZVZpZXc6KFVJVmlldyAqKXZpZXcgd2l0
aEJhY2tncm91bmRGaWxsT2ZDb2xvcjooVUlDb2xvciAqKWZpbGxDb2xvciBvcGFjaXR5OihDR0Zs
b2F0KW9wYWNpdHkgZmlsdGVyOihOU1N0cmluZyAqKWZpbHRlcgotewotICAgIF9VSVZpc3VhbEVm
ZmVjdExheWVyQ29uZmlnICpiYXNlTGF5ZXJDb25maWcgPSBbX1VJVmlzdWFsRWZmZWN0TGF5ZXJD
b25maWcgbGF5ZXJXaXRoRmlsbENvbG9yOmZpbGxDb2xvciBvcGFjaXR5Om9wYWNpdHkgZmlsdGVy
VHlwZTpmaWx0ZXJdOwotICAgIFtbW19VSVZpc3VhbEVmZmVjdENvbmZpZyBjb25maWdXaXRoQ29u
dGVudENvbmZpZzpiYXNlTGF5ZXJDb25maWddIGNvbnRlbnRDb25maWddIGNvbmZpZ3VyZUxheWVy
Vmlldzp2aWV3XTsKLX0KLQotLSAodm9pZClfdXBkYXRlVHJhbnNwYXJlbmN5T2ZWaXN1YWxFZmZl
Y3RWaWV3OihVSVZpc3VhbEVmZmVjdFZpZXcgKil2aXN1YWxFZmZlY3RWaWV3Ci17Ci0gICAgUmV0
YWluUHRyPFVJVmlzdWFsRWZmZWN0PiB2aXN1YWxFZmZlY3Q7Ci0KLSAgICBpZiAoVUlBY2Nlc3Np
YmlsaXR5SXNSZWR1Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpIHsKLSAgICAgICAgdmlzdWFsRWZm
ZWN0ID0gW1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0XTsKLSAgICAgICAgW1t2aXN1YWxFZmZl
Y3RWaWV3IGNvbnRlbnRWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3IgY29sb3JXaXRo
UmVkOig0My4wIC8gMjU1LjApIGdyZWVuOig0Ni4wIC8gMjU1LjApIGJsdWU6KDQ4LjAgLyAyNTUu
MCkgYWxwaGE6MS4wXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmV0YWluUHRyPFVJQ29sb3JF
ZmZlY3Q+IHNhdHVyYXRpb25FZmZlY3QgPSBbVUlDb2xvckVmZmVjdCBjb2xvckVmZmVjdFNhdHVy
YXRlOjEuOF07Ci0gICAgICAgIFJldGFpblB0cjxVSUJsdXJFZmZlY3Q+IGJsdXJFZmZlY3QgPSBb
VUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVzOlVJUm91bmRUb1NjcmVlblNjYWxlKDE3
LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVuXSldOwotICAgICAgICBSZXRhaW5QdHI8VUlWaXN1YWxF
ZmZlY3Q+IGNvbWJpbmVkRWZmZWN0cyA9IFtVSVZpc3VhbEVmZmVjdCBlZmZlY3RDb21iaW5pbmdF
ZmZlY3RzOkBbYmx1ckVmZmVjdC5nZXQoKSwgc2F0dXJhdGlvbkVmZmVjdC5nZXQoKV1dOwotICAg
ICAgICB2aXN1YWxFZmZlY3QgPSBjb21iaW5lZEVmZmVjdHM7Ci0gICAgICAgIFtbdmlzdWFsRWZm
ZWN0VmlldyBjb250ZW50Vmlld10gc2V0QmFja2dyb3VuZENvbG9yOm5pbF07Ci0gICAgfQotCi0g
ICAgW3Zpc3VhbEVmZmVjdFZpZXcgc2V0RWZmZWN0OnZpc3VhbEVmZmVjdC5nZXQoKV07Ci19Ci0K
LS0gKFVJVmlzdWFsRWZmZWN0VmlldyAqKXZpc3VhbEVmZmVjdFZpZXdXaXRoRnJhbWU6KENHUmVj
dClmcmFtZQotewotICAgIFJldGFpblB0cjxVSVZpc3VhbEVmZmVjdFZpZXc+IHZpc3VhbEVmZmVj
dFZpZXcgPSBhZG9wdE5TKFtbVUlWaXN1YWxFZmZlY3RWaWV3IGFsbG9jXSBpbml0V2l0aEVmZmVj
dDpbVUlWaXN1YWxFZmZlY3QgZW1wdHlFZmZlY3RdXSk7Ci0gICAgW3NlbGYgX3VwZGF0ZVRyYW5z
cGFyZW5jeU9mVmlzdWFsRWZmZWN0Vmlldzp2aXN1YWxFZmZlY3RWaWV3LmdldCgpXTsKLQotICAg
IFJldGFpblB0cjxVSVZpZXc+IGJhY2tMYXllclRpbnRWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpbdmlzdWFsRWZmZWN0VmlldyBib3VuZHNdXSk7Ci0gICAgW2Jh
Y2tMYXllclRpbnRWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOwotICAgIFti
YWNrTGF5ZXJUaW50VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVkOk5PXTsKLSAgICBbW3Nl
bGYgY2xhc3NdIGNvbmZpZ3VyZVZpZXc6YmFja0xheWVyVGludFZpZXcuZ2V0KCkgd2l0aEJhY2tn
cm91bmRGaWxsT2ZDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZTowLjAgYWxwaGE6MC41NV0g
b3BhY2l0eToxLjAgZmlsdGVyOmtDQUZpbHRlck5vcm1hbEJsZW5kTW9kZV07Ci0gICAgW1t2aXN1
YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OmJhY2tMYXllclRpbnRWaWV3Lmdl
dCgpXTsKLQotICAgIFJldGFpblB0cjxVSVZpZXc+IHRvcExheWVyVGludFZpZXcgPSBhZG9wdE5T
KFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOlt2aXN1YWxFZmZlY3RWaWV3IGJvdW5kc11d
KTsKLSAgICBbdG9wTGF5ZXJUaW50VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRv
cmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQp
XTsKLSAgICBbdG9wTGF5ZXJUaW50VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVkOk5PXTsK
LSAgICBbW3NlbGYgY2xhc3NdIGNvbmZpZ3VyZVZpZXc6dG9wTGF5ZXJUaW50Vmlldy5nZXQoKSB3
aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOltVSUNvbG9yIGNvbG9yV2l0aFdoaXRlOjEuMCBhbHBo
YTowLjE0XSBvcGFjaXR5OjEuMCBmaWx0ZXI6a0NBRmlsdGVyTm9ybWFsQmxlbmRNb2RlXTsKLSAg
ICBbW3Zpc3VhbEVmZmVjdFZpZXcgY29udGVudFZpZXddIGFkZFN1YnZpZXc6dG9wTGF5ZXJUaW50
Vmlldy5nZXQoKV07Ci0KLSAgICBbc2VsZiBfdXBkYXRlVHJhbnNwYXJlbmN5T2ZWaXN1YWxFZmZl
Y3RWaWV3OnZpc3VhbEVmZmVjdFZpZXcuZ2V0KCldOwotCi0gICAgcmV0dXJuIHZpc3VhbEVmZmVj
dFZpZXcuYXV0b3JlbGVhc2UoKTsKLX0KLQotc3RhdGljIFVJRWRnZUluc2V0cyBtaXJyb3JFZGdl
SW5zZXRzKFVJRWRnZUluc2V0cyBpbnNldHMpCi17Ci0gICAgcmV0dXJuIFVJRWRnZUluc2V0c01h
a2UoaW5zZXRzLnRvcCwgaW5zZXRzLnJpZ2h0LCBpbnNldHMuYm90dG9tLCBpbnNldHMubGVmdCk7
Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUxheW91dE1hcmdpbnMKLXsKLSAgICBVSVZpZXcgKnZpZXcg
PSBbc2VsZiB2aWV3XTsKLSAgICBbdmlldyBzZXRQcmVzZXJ2ZXNTdXBlcnZpZXdMYXlvdXRNYXJn
aW5zOk5PXTsKLQotICAgIFVJRWRnZUluc2V0cyB0YXJnZXRJbnNldHMgPSBbdmlldyBzYWZlQXJl
YUluc2V0c107Ci0gICAgdGFyZ2V0SW5zZXRzLnRvcCA9IHN0ZDo6bWF4KHRhcmdldEluc2V0cy50
b3AsIDIwLjApOwotICAgIFt2aWV3IHNldExheW91dE1hcmdpbnM6dGFyZ2V0SW5zZXRzXTsKLX0K
LQotLSAodm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKLXsKLSAgICBbc2VsZiBfdXBkYXRlTGF5
b3V0TWFyZ2luc107Ci19Ci0KLS0gICh2b2lkKXNldExvY2F0aW9uOihOU1N0cmluZyAqKWxvY2F0
aW9uTmFtZSBzZWN1cmU6KEJPT0wpc2VjdXJlIHRydXN0ZWROYW1lOihCT09MKXRydXN0ZWROYW1l
IHRydXN0ZWRTaXRlOihCT09MKXRydXN0ZWRTaXRlCi17Ci0gICAgVUlDb2xvciAqZ3JlZW5UaW50
ID0gW1VJQ29sb3IgY29sb3JXaXRoUmVkOjEwMCAvIDI1NS4wIGdyZWVuOjE3NSAvIDI1NS4wIGJs
dWU6OTkgLyAyNTUuMCBhbHBoYToxLjBdOwotICAgIFVJQ29sb3IgKndoaXRlVGludCA9IFtVSUNv
bG9yIHdoaXRlQ29sb3JdOwotCi0gICAgZmxvYXQgaFBhZGRpbmcgPSAxNDsKLSAgICBOU1N0cmlu
ZyAqbG9ja0ltYWdlTmFtZSA9IEAiTG9ja01pbmkiOwotCi0gICAgZmxvYXQgbG9ja1NwYWNpbmcg
PSBzZWN1cmUgPyAxMCA6IDA7Ci0KLSAgICBVSUVkZ2VJbnNldHMgbG9jYXRpb25Db250ZW50RWRn
ZUluc2V0cyA9IFVJRWRnZUluc2V0c01ha2UoMCwgaFBhZGRpbmcrbG9ja1NwYWNpbmcsIDAsIGhQ
YWRkaW5nKTsKLSAgICBVSUVkZ2VJbnNldHMgbG9jYXRpb25JbWFnZUVkZ2VJbnNldHMgPSBVSUVk
Z2VJbnNldHNNYWtlKDAsIC1sb2NrU3BhY2luZywgMCwgMCk7Ci0KLSAgICBpZiAoW1VJVmlldyB1
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uRm9yU2VtYW50aWNDb250ZW50QXR0cmlidXRlOltb
c2VsZiB2aWV3XSBzZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGVdXSA9PSBVSVVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25SaWdodFRvTGVmdCkgewotICAgICAgICBsb2NhdGlvbkNvbnRlbnRFZGdl
SW5zZXRzID0gbWlycm9yRWRnZUluc2V0cyhsb2NhdGlvbkNvbnRlbnRFZGdlSW5zZXRzKTsKLSAg
ICAgICAgbG9jYXRpb25JbWFnZUVkZ2VJbnNldHMgPSBtaXJyb3JFZGdlSW5zZXRzKGxvY2F0aW9u
SW1hZ2VFZGdlSW5zZXRzKTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRDb250ZW50SG9y
aXpvbnRhbEFsaWdubWVudDpVSUNvbnRyb2xDb250ZW50SG9yaXpvbnRhbEFsaWdubWVudFJpZ2h0
XTsKLSAgICB9Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldFRpdGxlQ29sb3I6KHRydXN0ZWRO
YW1lID8gZ3JlZW5UaW50IDogd2hpdGVUaW50KSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1h
bF07Ci0KLSAgICBpZiAoc2VjdXJlKSB7Ci0gICAgICAgIE5TQnVuZGxlICpidW5kbGUgPSBbTlNC
dW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgY2xhc3Nd
XTsKLSAgICAgICAgVUlJbWFnZSAqbG9ja0ltYWdlID0gW1VJSW1hZ2UgaW1hZ2VOYW1lZDpsb2Nr
SW1hZ2VOYW1lIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpu
aWxdOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdlOltsb2NrSW1hZ2UgaW1hZ2VX
aXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1RlbXBsYXRlXSBmb3JT
dGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgICAgIFtbX2xvY2F0aW9uQnV0dG9uIGlt
YWdlVmlld10gc2V0VGludENvbG9yOnRydXN0ZWRTaXRlID8gZ3JlZW5UaW50IDogd2hpdGVUaW50
XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUaW50Q29sb3I6dHJ1c3RlZFNpdGUgPyBn
cmVlblRpbnQgOiB3aGl0ZVRpbnRdOwotICAgIH0gZWxzZQotICAgICAgICBbX2xvY2F0aW9uQnV0
dG9uIHNldEltYWdlOm5pbCBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBb
X2xvY2F0aW9uQnV0dG9uIHNldENvbnRlbnRFZGdlSW5zZXRzOmxvY2F0aW9uQ29udGVudEVkZ2VJ
bnNldHNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SW1hZ2VFZGdlSW5zZXRzOmxvY2F0aW9u
SW1hZ2VFZGdlSW5zZXRzXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldFRpdGxlOmxvY2F0aW9u
TmFtZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRl
U3Vidmlld3MKLXsKLSAgICBfdmlzdWFsRWZmZWN0VmlldyA9IFtzZWxmIHZpc3VhbEVmZmVjdFZp
ZXdXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAyMCwgMjApXTsKLQotICAgIFtfdmlzdWFsRWZm
ZWN0VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107
Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X3Zpc3VhbEVmZmVjdFZpZXcuZ2V0KCldOwot
Ci0gICAgX2NhbmNlbEJ1dHRvbiA9IFtVSUJ1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5
cGVTeXN0ZW1dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdN
YXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBZGp1c3RzSW1h
Z2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldEJhY2tncm91bmRD
b2xvcjogW1VJQ29sb3IgYmxhY2tDb2xvcl1dOwotICAgIFtbX2NhbmNlbEJ1dHRvbiBsYXllcl0g
c2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBs
dXNMXV07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0VGl0bGU6V0VCX1VJX1NUUklORygiRG9uZSIs
ICJUZXh0IG9mIGJ1dHRvbiB0aGF0IGV4aXRzIGVsZW1lbnQgZnVsbHNjcmVlbi4iKSBmb3JTdGF0
ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0VGludENvbG9y
OltVSUNvbG9yIHdoaXRlQ29sb3JdXTsKLSAgICBbW19jYW5jZWxCdXR0b24gdGl0bGVMYWJlbF0g
c2V0Rm9udDpbVUlGb250IHN5c3RlbUZvbnRPZlNpemU6Zm9udFNpemVdXTsKLSAgICBbX2NhbmNl
bEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKGNhbmNlbEFjdGlvbjopIGZv
ckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRUb3VjaFVwSW5zaWRlXTsKLQotICAgIFtbc2Vs
ZiB2aWV3XSBhZGRTdWJ2aWV3Ol9jYW5jZWxCdXR0b24uZ2V0KCldOwotCi0gICAgX2xvY2F0aW9u
QnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0dG9uVHlwZVN5c3RlbV07Ci0g
ICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25z
dHJhaW50czpOT107Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGln
aGxpZ2h0ZWQ6Tk9dOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0QmFja2dyb3VuZENvbG9yOltV
SUNvbG9yIGJsYWNrQ29sb3JdXTsKLSAgICBbW19sb2NhdGlvbkJ1dHRvbiBsYXllcl0gc2V0Q29t
cG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNMXV07
Ci0gICAgW1tfbG9jYXRpb25CdXR0b24gdGl0bGVMYWJlbF0gc2V0TGluZUJyZWFrTW9kZTpOU0xp
bmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOwotICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFi
ZWxdIHNldEFkanVzdHNGb250U2l6ZVRvRml0V2lkdGg6Tk9dOwotICAgIFtbX2xvY2F0aW9uQnV0
dG9uIHRpdGxlTGFiZWxdIHNldEZvbnQ6W1VJRm9udCBzeXN0ZW1Gb250T2ZTaXplOmZvbnRTaXpl
XV07Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X2xvY2F0aW9uQnV0dG9uLmdldCgpXTsK
LQotICAgIFVJTGF5b3V0R3VpZGUqIGNvbnRhaW5lckd1aWRlID0gW1tzZWxmIHZpZXddIGxheW91
dE1hcmdpbnNHdWlkZV07Ci0KLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyBsZWZ0QW5jaG9yXSBj
b25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gbGVmdEFuY2hvcl1dIHNldEFjdGl2
ZTpZRVNdOwotICAgIFtbW192aXN1YWxFZmZlY3RWaWV3IHJpZ2h0QW5jaG9yXSBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gcmlnaHRBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsK
LSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5j
aG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfdmlz
dWFsRWZmZWN0VmlldyBoZWlnaHRBbmNob3JdIGNvbnN0cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxU
b0NvbnN0YW50OjIwXSBzZXRBY3RpdmU6WUVTXTsKLQotICAgIE5TTGF5b3V0Q29uc3RyYWludCAq
Ym90dG9tID0gW1tfdmlzdWFsRWZmZWN0VmlldyBib3R0b21BbmNob3JdIGNvbnN0cmFpbnRFcXVh
bFRvQW5jaG9yOltjb250YWluZXJHdWlkZSB0b3BBbmNob3JdXTsKLSAgICBbYm90dG9tIHNldFBy
aW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCAtIDFdOwotICAgIFtib3R0b20gc2V0QWN0
aXZlOllFU107Ci0KLSAgICBbW1tfY2FuY2VsQnV0dG9uIGxlYWRpbmdBbmNob3JdIGNvbnN0cmFp
bnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSBsZWFkaW5nQW5jaG9yXV0gc2V0QWN0aXZl
OllFU107Ci0gICAgW1tbX2NhbmNlbEJ1dHRvbiB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRv
QW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tf
Y2FuY2VsQnV0dG9uIGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W192aXN1
YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotCi0gICAgW1tbX2xv
Y2F0aW9uQnV0dG9uIGhlaWdodEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDoyMF0g
c2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIGJvdHRvbUFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNl
dEFjdGl2ZTpZRVNdOwotICAgIFtbW19sb2NhdGlvbkJ1dHRvbiBsZWFkaW5nQW5jaG9yXSBjb25z
dHJhaW50R3JlYXRlclRoYW5PckVxdWFsVG9BbmNob3I6W19jYW5jZWxCdXR0b24gdHJhaWxpbmdB
bmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfbG9jYXRpb25CdXR0b24gdHJhaWxpbmdB
bmNob3JdIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gdHJh
aWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBOU0xheW91dENvbnN0cmFpbnQgKmNl
bnRlcmluZ0NvbnN0cmFpbnQgPSBbW19sb2NhdGlvbkJ1dHRvbiBjZW50ZXJYQW5jaG9yXSBjb25z
dHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gY2VudGVyWEFuY2hvcl1dOwotICAgIFtj
ZW50ZXJpbmdDb25zdHJhaW50IHNldFByaW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlEZWZhdWx0TG93
XTsKLSAgICBbY2VudGVyaW5nQ29uc3RyYWludCBzZXRBY3RpdmU6WUVTXTsKLQotICAgIFtfdmlz
dWFsRWZmZWN0VmlldyBzZXRBbHBoYTowXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBbHBoYTow
XTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhhOjBdOwotCi0gICAgW192aXN1YWxFZmZl
Y3RWaWV3IHNldEhpZGRlbjpZRVNdOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldEhpZGRlbjpZRVNd
OwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOllFU107Ci19Ci0KLS0gKHZvaWQpbG9h
ZFZpZXcKLXsKLSAgICBbc2VsZiBzZXRWaWV3OmFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCldKS5nZXQoKV07Ci0gICAgW1tzZWxm
IHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lk
dGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOwotCi0gICAgX3RvdWNoR2Vz
dHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBh
bGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHNob3dDYW5jZWxCdXR0
b246KV0pOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0Q2FuY2Vsc1RvdWNoZXNJblZpZXc6Tk9d
OwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXRNaW5pbXVtUHJlc3NEdXJhdGlvbjow
XTsKLSAgICBbW3NlbGYgdmlld10gYWRkR2VzdHVyZVJlY29nbml6ZXI6X3RvdWNoR2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCldOwotICAgIFtzZWxmIGNyZWF0ZVN1YnZpZXdzXTsKLX0KLQotLSAodm9p
ZCl2aWV3V2lsbEFwcGVhcjooQk9PTClhbmltYXRlZAotewotICAgIFtbc2VsZiBjb250ZW50Vmll
d10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8
IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07Ci0gICAgW1tzZWxmIGNvbnRlbnRW
aWV3XSBzZXRGcmFtZTpbW3NlbGYgdmlld10gYm91bmRzXV07Ci0gICAgW1tzZWxmIHZpZXddIGlu
c2VydFN1YnZpZXc6W3NlbGYgY29udGVudFZpZXddIGF0SW5kZXg6MF07Ci19Ci0KLS0gKHZvaWQp
dmlld0RpZEFwcGVhcjooQk9PTClhbmltYXRlZAotewotICAgIFtzZWxmIF91cGRhdGVMYXlvdXRN
YXJnaW5zXTsKLX0KLQotLSAodm9pZCljYW5jZWxBY3Rpb246KGlkKXNlbmRlcgotewotICAgIFtb
c2VsZiB0YXJnZXRdIHBlcmZvcm1TZWxlY3Rvcjpbc2VsZiBhY3Rpb25dXTsKLX0KLQotLSAodm9p
ZCloaWRlQ2FuY2VsQnV0dG9uCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihoaWRlQ2FuY2VsQnV0
dG9uKSBvYmplY3Q6bmlsXTsKLSAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246c2hvd0hp
ZGVBbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOl57Ci0gICAgICAgIFtfdmlzdWFsRWZmZWN0
VmlldyBzZXRBbHBoYTowXTsKLSAgICAgICAgW19jYW5jZWxCdXR0b24gc2V0QWxwaGE6MF07Ci0g
ICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0QWxwaGE6MF07Ci0gICAgfSBjb21wbGV0aW9uOl4o
Qk9PTCBmaW5pc2hlZCl7Ci0gICAgICAgIGlmIChmaW5pc2hlZCkgewotICAgICAgICAgICAgW19j
YW5jZWxCdXR0b24gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICBbX2xvY2F0aW9uQnV0dG9u
IHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEhpZGRl
bjpZRVNdOwotICAgICAgICB9Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpc2hvd0NhbmNlbEJ1dHRv
bjooaWQpc2VuZGVyCi17Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVl
c3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihoaWRlQ2FuY2VsQnV0dG9uKSBv
YmplY3Q6bmlsXTsKLSAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGhpZGVDYW5j
ZWxCdXR0b24pIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6YXV0b0hpZGVEZWxheV07Ci0gICAg
W1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOnNob3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gYW5p
bWF0aW9uczogXnsKLSAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEhpZGRlbjpOT107Ci0g
ICAgICAgIFtfY2FuY2VsQnV0dG9uIHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtfbG9jYXRpb25C
dXR0b24gc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEFscGhh
OjFdOwotICAgICAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBbHBoYToxXTsKLSAgICAgICAgW19sb2Nh
dGlvbkJ1dHRvbiBzZXRBbHBoYToxXTsKLSAgICB9XTsKLX0KLQotLSAodm9pZClzZXRUYXJnZXQ6
KGlkKXRhcmdldCBhY3Rpb246KFNFTClhY3Rpb24KLXsKLSAgICBbc2VsZiBzZXRUYXJnZXQ6dGFy
Z2V0XTsKLSAgICBbc2VsZiBzZXRBY3Rpb246YWN0aW9uXTsKLX0KLQotLy8gTUFSSyAtIFVJR2Vz
dHVyZVJlY29nbml6ZXJEZWxlZ2F0ZQotCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdl
c3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaXplU2ltdWx0
YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilvdGhl
ckdlc3R1cmVSZWNvZ25pemVyCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotQGVuZAotCi1AaW50
ZXJmYWNlIF9XS0Z1bGxzY3JlZW5Sb290Vmlld0NvbnRyb2xsZXIgOiBVSVZpZXdDb250cm9sbGVy
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBfV0tGdWxsc2NyZWVuUm9vdFZpZXdDb250cm9sbGVy
IHsKLSAgICBCT09MIF9zaG93c1N0YXR1c0JhcjsKLX0KLQotLSAodm9pZClzZXRTaG93c1N0YXR1
c0JhcjooQk9PTCl2YWx1ZQotewotICAgIF9zaG93c1N0YXR1c0JhciA9IHZhbHVlOwotICAgIFtz
ZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5jZVVwZGF0ZV07Ci19Ci0KLS0gKEJPT0wpcHJl
ZmVyc1N0YXR1c0JhckhpZGRlbgotewotICAgIHJldHVybiAhX3Nob3dzU3RhdHVzQmFyOwotfQot
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciA6IE5T
T2JqZWN0IDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nPgotQHByb3BlcnR5
IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3Q29udHJvbGxlciogdmlld0NvbnRyb2xsZXI7Ci1A
cHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IGluaXRpYWxGcmFtZTsKLUBwcm9wZXJ0eSAobm9u
YXRvbWljKSBDR1JlY3QgZmluYWxGcmFtZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9
aXNBbmltYXRpbmdJbikgQk9PTCBhbmltYXRpbmdJbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIKLQotLSAoTlNUaW1lSW50ZXJ2YWwpdHJh
bnNpdGlvbkR1cmF0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+
KXRyYW5zaXRpb25Db250ZXh0Ci17Ci0gICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9u
RHVyYXRpb24gPSAwLjI7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbkR1cmF0aW9uOwotfQotCi0tICh2
b2lkKWFuaW1hdGVUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRp
b25pbmc+KXRyYW5zaXRpb25Db250ZXh0Ci17Ci0gICAgVUlWaWV3ICpjb250YWluZXJWaWV3ID0g
W3RyYW5zaXRpb25Db250ZXh0IGNvbnRhaW5lclZpZXddOwotICAgIFVJVmlldyAqZnJvbVZpZXcg
PSBbdHJhbnNpdGlvbkNvbnRleHQgdmlld0ZvcktleTpVSVRyYW5zaXRpb25Db250ZXh0RnJvbVZp
ZXdLZXldOwotICAgIFVJVmlldyAqdG9WaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IHZpZXdGb3JL
ZXk6VUlUcmFuc2l0aW9uQ29udGV4dFRvVmlld0tleV07Ci0KLSAgICBDR1JlY3QgaW5saW5lRnJh
bWUgPSBfYW5pbWF0aW5nSW4gPyBfaW5pdGlhbEZyYW1lIDogX2ZpbmFsRnJhbWU7Ci0gICAgQ0dS
ZWN0IGZ1bGxzY3JlZW5GcmFtZSA9IF9hbmltYXRpbmdJbiA/IF9maW5hbEZyYW1lIDogX2luaXRp
YWxGcmFtZTsKLSAgICBVSVZpZXcgKmFuaW1hdGluZ1ZpZXcgPSBfYW5pbWF0aW5nSW4gPyB0b1Zp
ZXcgOiBmcm9tVmlldzsKLSAgICAKLSAgICBDR1JlY3QgYm91bmRzUmVjdCA9IGxhcmdlc3RSZWN0
V2l0aEFzcGVjdFJhdGlvSW5zaWRlUmVjdChGbG9hdFJlY3QoaW5saW5lRnJhbWUpLnNpemUoKS5h
c3BlY3RSYXRpbygpLCBmdWxsc2NyZWVuRnJhbWUpOwotICAgIGJvdW5kc1JlY3Qub3JpZ2luID0g
Q0dQb2ludFplcm87Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbWFza1ZpZXcgPSBhZG9wdE5TKFtb
VUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgW21hc2tWaWV3IHNldEJhY2tncm91bmRDb2xvcjpb
VUlDb2xvciBibGFja0NvbG9yXV07Ci0gICAgW21hc2tWaWV3IHNldEJvdW5kczpfYW5pbWF0aW5n
SW4gPyBib3VuZHNSZWN0IDogW2FuaW1hdGluZ1ZpZXcgYm91bmRzXV07Ci0gICAgW21hc2tWaWV3
IHNldENlbnRlcjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFthbmltYXRpbmdWaWV3IGJvdW5k
c10pLCBDR1JlY3RHZXRNaWRZKFthbmltYXRpbmdWaWV3IGJvdW5kc10pKV07Ci0gICAgW2FuaW1h
dGluZ1ZpZXcgc2V0TWFza1ZpZXc6bWFza1ZpZXcuZ2V0KCldOwotICAgIAotICAgIEZsb2F0UmVj
dCBzY2FsZVJlY3QgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KEZsb2F0
UmVjdChmdWxsc2NyZWVuRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBpbmxpbmVGcmFtZSk7
Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2NhbGVUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9y
bU1ha2VTY2FsZShzY2FsZVJlY3Qud2lkdGgoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLndpZHRo
LCBzY2FsZVJlY3QuaGVpZ2h0KCkgLyBmdWxsc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQpOwotICAg
IENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0ZVRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3Jt
TWFrZVRyYW5zbGF0aW9uKENHUmVjdEdldE1pZFgoaW5saW5lRnJhbWUpIC0gQ0dSZWN0R2V0TWlk
WChmdWxsc2NyZWVuRnJhbWUpLCBDR1JlY3RHZXRNaWRZKGlubGluZUZyYW1lKSAtIENHUmVjdEdl
dE1pZFkoZnVsbHNjcmVlbkZyYW1lKSk7Ci0gICAgCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZmlu
YWxUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChzY2FsZVRyYW5zZm9ybSwgdHJh
bnNsYXRlVHJhbnNmb3JtKTsKLQotICAgIFthbmltYXRpbmdWaWV3IHNldFRyYW5zZm9ybTpfYW5p
bWF0aW5nSW4gPyBmaW5hbFRyYW5zZm9ybSA6IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHldOwot
ICAgIAotICAgIFtjb250YWluZXJWaWV3IGFkZFN1YnZpZXc6YW5pbWF0aW5nVmlld107Ci0KLSAg
ICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246W3NlbGYgdHJhbnNpdGlvbkR1cmF0aW9uOnRy
YW5zaXRpb25Db250ZXh0XSBkZWxheTowIG9wdGlvbnM6VUlWaWV3QW5pbWF0aW9uT3B0aW9uQ3Vy
dmVFYXNlSW5PdXQgYW5pbWF0aW9uczpeewotICAgICAgICBbYW5pbWF0aW5nVmlldyBzZXRUcmFu
c2Zvcm06X2FuaW1hdGluZ0luID8gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSA6IGZpbmFsVHJh
bnNmb3JtXTsKLSAgICAgICAgW21hc2tWaWV3IHNldEJvdW5kczpfYW5pbWF0aW5nSW4gPyBhbmlt
YXRpbmdWaWV3LmJvdW5kcyA6IGJvdW5kc1JlY3RdOwotICAgICAgICBbbWFza1ZpZXcgc2V0Q2Vu
dGVyOkNHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSksIENH
UmVjdEdldE1pZFkoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpXTsKLSAgICB9IGNvbXBsZXRpb246
XihCT09MIGZpbmlzaGVkKXsKLSAgICAgICAgQk9PTCBzdWNjZXNzID0gIVt0cmFuc2l0aW9uQ29u
dGV4dCB0cmFuc2l0aW9uV2FzQ2FuY2VsbGVkXTsKLQotICAgICAgICBpZiAoKFtzZWxmIGlzQW5p
bWF0aW5nSW5dICYmICFzdWNjZXNzKSB8fCAoIVtzZWxmIGlzQW5pbWF0aW5nSW5dICYmIHN1Y2Nl
c3MpKQotICAgICAgICAgICAgW2FuaW1hdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0K
LSAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjpzdWNjZXNzXTsK
LSAgICAgICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFza1ZpZXc6bmlsXTsKLSAgICB9XTsKLX0KLQot
LSAodm9pZClhbmltYXRpb25FbmRlZDooQk9PTCl0cmFuc2l0aW9uQ29tcGxldGVkCi17Ci19Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgewot
ICAgIFdLV2ViVmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSByZXRhaW5lZCwgc2VlIDxyZGFy
Oi8vcHJvYmxlbS8xNDg4NDY2Nj4uCi0gICAgUmV0YWluUHRyPFVJVmlldz4gX3dlYlZpZXdQbGFj
ZWhvbGRlcjsKLQotICAgIEZ1bGxTY3JlZW5TdGF0ZSBfZnVsbFNjcmVlblN0YXRlOwotICAgIFdL
V2ViVmlld1N0YXRlIF92aWV3U3RhdGU7Ci0KLSAgICBSZXRhaW5QdHI8VUlXaW5kb3c+IF93aW5k
b3c7Ci0gICAgUmV0YWluUHRyPF9XS0Z1bGxzY3JlZW5Sb290Vmlld0NvbnRyb2xsZXI+IF9yb290
Vmlld0NvbnRyb2xsZXI7Ci0KLSAgICBSZWZQdHI8V2ViS2l0OjpWb2lkQ2FsbGJhY2s+IF9yZXBh
aW50Q2FsbGJhY2s7Ci0gICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IF92aWV3Q29udHJv
bGxlckZvclByZXNlbnRhdGlvbjsKLSAgICBSZXRhaW5QdHI8X1dLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyPiBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyOwotCi0gICAgQ0dSZWN0IF9pbml0aWFs
RnJhbWU7Ci0gICAgQ0dSZWN0IF9maW5hbEZyYW1lOwotCi0gICAgUmV0YWluUHRyPE5TU3RyaW5n
PiBfRVZPcmdhbml6YXRpb25OYW1lOwotICAgIEJPT0wgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFs
aWQ7Ci0KLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBJbml0aWFsaXphdGlvbgot
LSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Ci17Ci0gICAgaWYgKCFb
c3VwZXIgaW5pdF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgX3dlYlZpZXcgPSB3ZWJWaWV3
OwotCi0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtOU09i
amVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZl07Ci0gICAg
W1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxm
XTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotI3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEg
bWFyayBBY2Nlc3NvcnMKLQotLSAoQk9PTClpc0Z1bGxTY3JlZW4KLXsKLSAgICByZXR1cm4gX2Z1
bGxTY3JlZW5TdGF0ZSA9PSBXYWl0aW5nVG9FbnRlckZ1bGxTY3JlZW4KLSAgICAgICAgfHwgX2Z1
bGxTY3JlZW5TdGF0ZSA9PSBFbnRlcmluZ0Z1bGxTY3JlZW4KLSAgICAgICAgfHwgX2Z1bGxTY3Jl
ZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW47Ci19Ci0KLS0gKFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vo
b2xkZXJWaWV3ICopd2ViVmlld1BsYWNlaG9sZGVyCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQot
I3ByYWdtYSBtYXJrIC0KLSNwcmFnbWEgbWFyayBFeHBvc2VkIEludGVyZmFjZQotCi0tICh2b2lk
KV9pbnZhbGlkYXRlRVZPcmdhbml6YXRpb25OYW1lCi17Ci0gICAgX0VWT3JnYW5pemF0aW9uTmFt
ZSA9IG5pbDsKLSAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IE5POwotfQotCi0tIChC
T09MKWlzU2VjdXJlCi17Ci0gICAgcmV0dXJuIF93ZWJWaWV3Lmhhc09ubHlTZWN1cmVDb250ZW50
OwotfQotCi0tIChTZWNUcnVzdFJlZilfc2VydmVyVHJ1c3QKLXsKLSAgICByZXR1cm4gX3dlYlZp
ZXcuc2VydmVyVHJ1c3Q7Ci19Ci0KLS0gKE5TU3RyaW5nICopX0VWT3JnYW5pemF0aW9uTmFtZQot
ewotICAgIGlmICghc2VsZi5pc1NlY3VyZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlm
IChfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIF9FVk9yZ2FuaXph
dGlvbk5hbWUuZ2V0KCk7Ci0KLSAgICBBU1NFUlQoIV9FVk9yZ2FuaXphdGlvbk5hbWUuZ2V0KCkp
OwotICAgIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkID0gWUVTOwotCi0gICAgU2VjVHJ1c3RS
ZWYgdHJ1c3QgPSBbc2VsZiBfc2VydmVyVHJ1c3RdOwotICAgIGlmICghdHJ1c3QpCi0gICAgICAg
IHJldHVybiBuaWw7Ci0KLSAgICBOU0RpY3Rpb25hcnkgKmluZm9EaWN0aW9uYXJ5ID0gWyhfX2Jy
aWRnZSBOU0RpY3Rpb25hcnkgKilTZWNUcnVzdENvcHlJbmZvKHRydXN0KSBhdXRvcmVsZWFzZV07
Ci0gICAgLy8gSWYgU2VjVHJ1c3RDb3B5SW5mbyByZXR1cm5lZCBOVUxMIHRoZW4gaXQncyBsaWtl
bHkgdGhhdCB0aGUgU2VjVHJ1c3RSZWYgaGFzIG5vdCBiZWVuIGV2YWx1YXRlZAotICAgIC8vIGFu
ZCB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGlzIHRvIGNhbGwg
U2VjVHJ1c3RFdmFsdWF0ZSBvdXJzZWx2ZXMuCi0gICAgaWYgKCFpbmZvRGljdGlvbmFyeSkgewot
ICAgICAgICBTZWNUcnVzdFJlc3VsdFR5cGUgcmVzdWx0ID0ga1NlY1RydXN0UmVzdWx0UHJvY2Vl
ZDsKLSAgICAgICAgT1NTdGF0dXMgZXJyID0gU2VjVHJ1c3RFdmFsdWF0ZSh0cnVzdCwgJnJlc3Vs
dCk7Ci0gICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgcmVzdWx0ID09IGtTZWNUcnVzdFJlc3Vs
dFByb2NlZWQpCi0gICAgICAgICAgICBpbmZvRGljdGlvbmFyeSA9IFsoX19icmlkZ2UgTlNEaWN0
aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3JlbGVhc2VdOwotICAgICAgICBp
ZiAoIWluZm9EaWN0aW9uYXJ5KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgRVYgY2VydGlmaWNhdGUgaXMgdmFsaWQgYWdhaW5zdCBv
dXIgY2VydGlmaWNhdGUgY2hhaW4uCi0gICAgaWQgaGFzRVYgPSBbaW5mb0RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVzdEluZm9FeHRlbmRlZFZhbGlk
YXRpb25LZXldOwotICAgIGlmICghW2hhc0VWIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3Nd
XSB8fCAhW2hhc0VWIGJvb2xWYWx1ZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBN
YWtlIHN1cmUgdGhhdCB3ZSBjb3VsZCBjb250YWN0IHJldm9jYXRpb24gc2VydmVyIGFuZCBpdCBp
cyBzdGlsbCB2YWxpZC4KLSAgICBpZCBpc05vdFJldm9rZWQgPSBbaW5mb0RpY3Rpb25hcnkgb2Jq
ZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVzdEluZm9SZXZvY2F0aW9uS2V5
XTsKLSAgICBpZiAoIVtpc05vdFJldm9rZWQgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBjbGFzc11d
IHx8ICFbaXNOb3RSZXZva2VkIGJvb2xWYWx1ZV0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBfRVZPcmdhbml6YXRpb25OYW1lID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktleTooX19i
cmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvQ29tcGFueU5hbWVLZXldOwotICAgIHJldHVy
biBfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpOwotfQotCi0tICh2b2lkKXVwZGF0ZUxvY2F0aW9u
SW5mbwotewotICAgIE5TVVJMKiB1cmwgPSBfd2ViVmlldy5fY29tbWl0dGVkVVJMOwotCi0gICAg
TlNTdHJpbmcgKkVWT3JnYW5pemF0aW9uTmFtZSA9IFtzZWxmIF9FVk9yZ2FuaXphdGlvbk5hbWVd
OwotICAgIEJPT0wgc2hvd3NFVk9yZ2FuaXphdGlvbk5hbWUgPSBbRVZPcmdhbml6YXRpb25OYW1l
IGxlbmd0aF0gPiAwOwotCi0gICAgTlNTdHJpbmcgKmRvbWFpbiA9IG5pbDsKLQotICAgIGlmIChM
aW5rUHJlc2VudGF0aW9uTGlicmFyeSgpKQotICAgICAgICBkb21haW4gPSBbdXJsIF9scF9zaW1w
bGlmaWVkRGlzcGxheVN0cmluZ107Ci0gICAgZWxzZQotICAgICAgICBkb21haW4gPSB1c2VyVmlz
aWJsZVN0cmluZyh1cmwpOwotCi0gICAgTlNTdHJpbmcgKnRleHQgPSBuaWw7Ci0gICAgaWYgKFtb
dXJsIHNjaGVtZV0gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImRhdGEiXSA9PSBOU09yZGVyZWRT
YW1lKQotICAgICAgICB0ZXh0ID0gQCJkYXRhOiI7Ci0gICAgZWxzZSBpZiAoc2hvd3NFVk9yZ2Fu
aXphdGlvbk5hbWUpCi0gICAgICAgIHRleHQgPSBFVk9yZ2FuaXphdGlvbk5hbWU7Ci0gICAgZWxz
ZQotICAgICAgICB0ZXh0ID0gZG9tYWluOwotCi0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xs
ZXIgc2V0TG9jYXRpb246dGV4dCBzZWN1cmU6c2VsZi5pc1NlY3VyZSB0cnVzdGVkTmFtZTpzaG93
c0VWT3JnYW5pemF0aW9uTmFtZSB0cnVzdGVkU2l0ZTohIUVWT3JnYW5pemF0aW9uTmFtZV07Ci19
Ci0KLS0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuCi17Ci0gICAgaWYgKFtzZWxmIGlzRnVsbFNjcmVl
bl0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9pbnZhbGlkYXRlRVZPcmdhbml6YXRp
b25OYW1lXTsKLQotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBXYWl0aW5nVG9FbnRlckZ1bGxTY3Jl
ZW47Ci0KLSAgICBfd2luZG93ID0gYWRvcHROUyhbW1VJV2luZG93IGFsbG9jXSBpbml0XSk7Ci0g
ICAgW193aW5kb3cgc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGNsZWFyQ29sb3JdXTsKLSAg
ICBfcm9vdFZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XS0Z1bGxzY3JlZW5Sb290Vmlld0Nv
bnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xs
ZXI6X3Jvb3RWaWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgW1tfd2luZG93IHJvb3RWaWV3Q29u
dHJvbGxlcl0gc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltf
d2luZG93IGJvdW5kc11dKS5nZXQoKV07Ci0gICAgW1tbX3dpbmRvdyByb290Vmlld0NvbnRyb2xs
ZXJdIHZpZXddIHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBjbGVhckNvbG9yXV07Ci0gICAg
W1tbX3dpbmRvdyByb290Vmlld0NvbnRyb2xsZXJdIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6
KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4
aWJsZUhlaWdodCldOwotICAgIFtfd2luZG93IHNldFdpbmRvd0xldmVsOlVJV2luZG93TGV2ZWxO
b3JtYWwgLSAxXTsKLSAgICBbX3dpbmRvdyBzZXRIaWRkZW46Tk9dOwotICAgIF92aWV3Q29udHJv
bGxlckZvclByZXNlbnRhdGlvbiA9IFtfd2luZG93IHJvb3RWaWV3Q29udHJvbGxlcl07Ci0KLSAg
ICBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyID0gYWRvcHROUyhbW19XS0Z1bGxTY3JlZW5WaWV3
Q29udHJvbGxlciBhbGxvY10gaW5pdF0pOwotICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVy
IHNldFRyYW5zaXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29u
dHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRpb25DdXN0
b21dOwotICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFRhcmdldDpzZWxmIGFjdGlv
bjpAc2VsZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07Ci0gICAgW1tfZnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyIHZpZXddIHNldEZyYW1lOltbX3ZpZXdDb250cm9sbGVyRm9yUHJlc2VudGF0
aW9uIHZpZXddIGJvdW5kc11dOwotICAgIFtzZWxmIHVwZGF0ZUxvY2F0aW9uSW5mb107Ci0KLSAg
ICBbc2VsZiBfbWFuYWdlcl0tPnNhdmVTY3JvbGxQb3NpdGlvbigpOwotCi0gICAgW193ZWJWaWV3
IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyh0cnVlKTsKLQotICAgIF92aWV3
U3RhdGUuc3RvcmUoX3dlYlZpZXcpOwotCi0gICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IGFkb3B0
TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICBbW193ZWJWaWV3UGxhY2Vob2xkZXIgbGF5
ZXJdIHNldE5hbWU6QCJGdWxsc2NyZWVuIFBsYWNlaG9sZGVyIFZmaWV3Il07Ci0KLSAgICBXS1Nu
YXBzaG90Q29uZmlndXJhdGlvbiogY29uZmlnID0gbmlsOwotICAgIFtfd2ViVmlldyB0YWtlU25h
cHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb25maWcgY29tcGxldGlvbkhhbmRsZXI6XihVSUltYWdl
ICogc25hcHNob3RJbWFnZSwgTlNFcnJvciAqIGVycm9yKXsKLSAgICAgICAgaWYgKCFbX3dlYlZp
ZXcgX3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFtDQVRyYW5zYWN0aW9u
IGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsK
LSAgICAgICAgCi0gICAgICAgIFtbX3dlYlZpZXdQbGFjZWhvbGRlciBsYXllcl0gc2V0Q29udGVu
dHM6KGlkKVtzbmFwc2hvdEltYWdlIENHSW1hZ2VdXTsKLSAgICAgICAgcmVwbGFjZVZpZXdXaXRo
Vmlldyhfd2ViVmlldywgX3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKSk7Ci0KLSAgICAgICAgV0tX
ZWJWaWV3U3RhdGUoKS5hcHBseVRvKF93ZWJWaWV3KTsKLSAgICAgICAgCi0gICAgICAgIFtfd2Vi
VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRo
IHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpXTsKLSAgICAgICAgW193ZWJWaWV3
IHNldEZyYW1lOltfd2luZG93IGJvdW5kc11dOwotICAgICAgICBbX3dpbmRvdyBpbnNlcnRTdWJ2
aWV3Ol93ZWJWaWV3IGF0SW5kZXg6MF07Ci0gICAgICAgIFtfd2ViVmlldyBfb3ZlcnJpZGVMYXlv
dXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRTaXplOltfd2luZG93IGJvdW5kc10uc2l6ZSBt
YXhpbXVtVW5vYnNjdXJlZFNpemVPdmVycmlkZTpbX3dpbmRvdyBib3VuZHNdLnNpemVdOwotCi0g
ICAgICAgIFtfd2ViVmlldyBzZXROZWVkc0xheW91dF07Ci0gICAgICAgIFtfd2ViVmlldyBsYXlv
dXRJZk5lZWRlZF07Ci0gICAgICAgIAotICAgICAgICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1h
dGluZ0Z1bGxTY3JlZW4odHJ1ZSk7Ci0KLSAgICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IFZvaWRD
YWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpLCBzZWxmXShX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKLSAgICAgICAgICAgIF9yZXBhaW50Q2FsbGJh
Y2sgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgW3Byb3RlY3RlZFNlbGYgX21hbmFnZXJd
LT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgICAgIH0pOwotICAgICAgICBbX3dlYlZpZXcg
X3BhZ2VdLT5mb3JjZVJlcGFpbnQoX3JlcGFpbnRDYWxsYmFjay5jb3B5UmVmKCkpOwotCi0gICAg
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpYmVnYW5F
bnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFs
RnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCi17Ci0gICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0g
V2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuKQotICAgICAgICByZXR1cm47Ci0gICAgX2Z1bGxTY3Jl
ZW5TdGF0ZSA9IEVudGVyaW5nRnVsbFNjcmVlbjsKLQotICAgIF9pbml0aWFsRnJhbWUgPSBpbml0
aWFsRnJhbWU7Ci0gICAgX2ZpbmFsRnJhbWUgPSBmaW5hbEZyYW1lOwotCi0gICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
Ci0KLSAgICBbX3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgW19mdWxsc2NyZWVu
Vmlld0NvbnRyb2xsZXIgc2V0Q29udGVudFZpZXc6X3dlYlZpZXddOwotCi0gICAgW193aW5kb3cg
c2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbF07Ci0gICAgW193aW5kb3cgbWFrZUtl
eUFuZFZpc2libGVdOwotICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFNob3dzU3RhdHVzQmFy
OllFU107Ci0KLSAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotCi0gICAgW192aWV3Q29udHJv
bGxlckZvclByZXNlbnRhdGlvbiBwcmVzZW50Vmlld0NvbnRyb2xsZXI6X2Z1bGxzY3JlZW5WaWV3
Q29udHJvbGxlci5nZXQoKSBhbmltYXRlZDpZRVMgY29tcGxldGlvbjpeewotICAgICAgICBbc2Vs
ZiBjb21wbGV0ZWRFbnRlckZ1bGxTY3JlZW5dOwotICAgICAgICBbX3Jvb3RWaWV3Q29udHJvbGxl
ciBzZXRTaG93c1N0YXR1c0JhcjpOT107Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpY29tcGxldGVk
RW50ZXJGdWxsU2NyZWVuCi17Ci0gICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBfZnVsbFNjcmVlblN0YXRlID0gSW5GdWxsU2NyZWVuOwotCi0gICAgW3Nl
bGYgX21hbmFnZXJdLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsKLSAgICBbc2VsZiBfbWFuYWdlcl0t
PnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+
c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci19Ci0KLS0gKHZvaWQpZXhpdEZ1
bGxTY3JlZW4KLXsKLSAgICBpZiAoIVtzZWxmIGlzRnVsbFNjcmVlbl0pCi0gICAgICAgIHJldHVy
bjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRXhpdEZ1bGxTY3JlZW47Ci0KLSAg
ICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7Ci0gICAgW3Nl
bGYgX21hbmFnZXJdLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKLX0KLQotLSAodm9pZClyZXF1ZXN0
RXhpdEZ1bGxTY3JlZW4KLXsKLSAgICBbc2VsZiBfbWFuYWdlcl0tPnJlcXVlc3RFeGl0RnVsbFNj
cmVlbigpOwotfQotCi0tICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1l
OihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCi17Ci0g
ICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0gV2FpdGluZ1RvRXhpdEZ1bGxTY3JlZW4pCi0gICAg
ICAgIHJldHVybjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gRXhpdGluZ0Z1bGxTY3JlZW47Ci0K
LSAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOwotICAgIF9maW5hbEZyYW1lID0gZmlu
YWxGcmFtZTsKLSAgICAKLSAgICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2liaWxp
dHlVcGRhdGVzKHRydWUpOwotCi0gICAgW19yb290Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NTdGF0
dXNCYXI6WUVTXTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBkaXNtaXNzVmlld0Nv
bnRyb2xsZXJBbmltYXRlZDpZRVMgY29tcGxldGlvbjpeewotICAgICAgICBpZiAoIVtfd2ViVmll
dyBfcGFnZV0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgW3NlbGYgY29tcGxldGVk
RXhpdEZ1bGxTY3JlZW5dOwotICAgICAgICBbX3Jvb3RWaWV3Q29udHJvbGxlciBzZXRTaG93c1N0
YXR1c0JhcjpOT107Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpY29tcGxldGVkRXhpdEZ1bGxTY3Jl
ZW4KLXsKLSAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSAhPSBFeGl0aW5nRnVsbFNjcmVlbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBOb3RJbkZ1bGxTY3JlZW47Ci0K
LSAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJs
ZUFjdGlvbnM6WUVTXTsKLQotICAgIFtbX3dlYlZpZXdQbGFjZWhvbGRlciBzdXBlcnZpZXddIGlu
c2VydFN1YnZpZXc6X3dlYlZpZXcgYmVsb3dTdWJ2aWV3Ol93ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0
KCldOwotICAgIFtfd2ViVmlldyBzZXRGcmFtZTpbX3dlYlZpZXdQbGFjZWhvbGRlciBmcmFtZV1d
OwotICAgIFtfd2ViVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOltfd2ViVmlld1BsYWNlaG9sZGVy
IGF1dG9yZXNpemluZ01hc2tdXTsKLQotICAgIFtbX3dlYlZpZXcgd2luZG93XSBtYWtlS2V5QW5k
VmlzaWJsZV07Ci0KLSAgICBfdmlld1N0YXRlLmFwcGx5VG8oX3dlYlZpZXcpOwotCi0gICAgW193
ZWJWaWV3IHNldE5lZWRzTGF5b3V0XTsKLSAgICBbX3dlYlZpZXcgbGF5b3V0SWZOZWVkZWRdOwot
Ci0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFtfd2luZG93IHNldEhpZGRlbjpZ
RVNdOwotICAgIF93aW5kb3cgPSBuaWw7Ci0KLSAgICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1h
dGluZ0Z1bGxTY3JlZW4oZmFsc2UpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+ZGlkRXhpdEZ1bGxT
Y3JlZW4oKTsKLQotICAgIGlmIChfcmVwYWludENhbGxiYWNrKSB7Ci0gICAgICAgIF9yZXBhaW50
Q2FsbGJhY2stPmludmFsaWRhdGUoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldh
c0ludmFsaWRhdGVkKTsKLSAgICAgICAgQVNTRVJUKCFfcmVwYWludENhbGxiYWNrKTsKLSAgICB9
Ci0KLSAgICBfcmVwYWludENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoW3Byb3RlY3Rl
ZFNlbGYgPSByZXRhaW5QdHIoc2VsZiksIHNlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
cikgewotICAgICAgICBfcmVwYWludENhbGxiYWNrID0gbnVsbHB0cjsKLSAgICAgICAgW193ZWJW
aWV3UGxhY2Vob2xkZXIgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICAgICAgaWYgKCFbX3dl
YlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFtfd2ViVmlldyBf
cGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOwotICAgIH0pOwotCi0g
ICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2suY29weVJl
ZigpKTsKLX0KLQotLSAodm9pZClleGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5Ci17Ci0gICAgaWYg
KCFbc2VsZiBpc0Z1bGxTY3JlZW5dKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVtfd2Vi
VmlldyBfcGFnZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIF9tYW5hZ2VyXS0+cmVx
dWVzdEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgW3NlbGYgZXhpdEZ1bGxTY3JlZW5dOwotICAgIF9m
dWxsU2NyZWVuU3RhdGUgPSBFeGl0aW5nRnVsbFNjcmVlbjsKLSAgICBbc2VsZiBjb21wbGV0ZWRF
eGl0RnVsbFNjcmVlbl07Ci0gICAgcmVwbGFjZVZpZXdXaXRoVmlldyhfd2ViVmlld1BsYWNlaG9s
ZGVyLmdldCgpLCBfd2ViVmlldyk7Ci0gICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NW
aXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5kaWRFeGl0RnVs
bFNjcmVlbigpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihm
YWxzZSk7Ci0gICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IG5pbDsKLX0KLQotLSAodm9pZCljbG9z
ZQotewotICAgIFtzZWxmIGV4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwotICAgIF93ZWJWaWV3
ID0gbmlsOwotfQotCi0tICh2b2lkKXdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJ
bkZ1bGxzY3JlZW4KLXsKLSAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW4g
JiYgX3dlYlZpZXcud2luZG93ICE9IF93aW5kb3cuZ2V0KCkpCi0gICAgICAgIFtzZWxmIGV4aXRG
dWxsc2NyZWVuSW1tZWRpYXRlbHldOwotfQotCi0tICh2b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2Vy
RGlkQ2hhbmdlCi17Ci19Ci0KLSNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgSW50ZXJuYWwg
SW50ZXJmYWNlCi0KLS0gKFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqKV9tYW5hZ2VyCi17Ci0g
ICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gW193ZWJWaWV3IF9wYWdlXS0+ZnVsbFNjcmVlbk1hbmFnZXIoKTsKLX0KLQotI3ByYWdt
YSBtYXJrIC0KLSNwcmFnbWEgbWFyayBVSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZ0RlbGVn
YXRlCi0KLS0gKGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1h
dGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICop
cHJlc2VudGVkIHByZXNlbnRpbmdDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopcHJlc2Vu
dGluZyBzb3VyY2VDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopc291cmNlCi17Ci0gICAg
UmV0YWluUHRyPFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBhbGxvY10g
aW5pdF0pOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldFZpZXdDb250cm9sbGVyOnByZXNl
bnRlZF07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0SW5pdGlhbEZyYW1lOl9pbml0aWFs
RnJhbWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEZpbmFsRnJhbWU6X2ZpbmFsRnJh
bWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1hdGluZ0luOllFU107Ci0gICAg
cmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXIuYXV0b3JlbGVhc2UoKTsKLX0KLQotLSAoaWQ8VUlW
aWV3Q29udHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4pYW5pbWF0aW9uQ29udHJvbGxlckZv
ckRpc21pc3NlZENvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIgKilkaXNtaXNzZWQKLXsKLSAg
ICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFsbG9j
XSBpbml0XSk7Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0Vmlld0NvbnRyb2xsZXI6ZGlz
bWlzc2VkXTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6X2luaXRp
YWxGcmFtZV07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0RmluYWxGcmFtZTpfZmluYWxG
cmFtZV07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0QW5pbWF0aW5nSW46Tk9dOwotICAg
IHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLmF1dG9yZWxlYXNlKCk7Ci19Ci0KLUBlbmQKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykgJiYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRv
dWNoU2VjaGV1cmlzdGljLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5MDcwMTE1
OGFlMjEyY2Q2YWM3NzhiMDNjZGQ1YTcxZWUzMzNhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJp
c3RpYy5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCIKKworI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8d3RmL01vbm90
b25pY1RpbWUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2RvdWJsZSBGdWxsc2NyZWVuVG91
Y2hTZWNoZXVyaXN0aWM6OnNjb3JlT2ZOZXh0VG91Y2goQ0dQb2ludCBsb2NhdGlvbikKK3sKKyAg
ICBTZWNvbmRzIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7
CisKKyAgICBpZiAoIW1fbGFzdFRvdWNoVGltZSkgeworICAgICAgICBtX2xhc3RUb3VjaFRpbWUg
PSBXVEZNb3ZlKG5vdyk7CisgICAgICAgIG1fbGFzdFRvdWNoTG9jYXRpb24gPSBXVEZNb3ZlKGxv
Y2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgU2Vjb25kcyBkZWx0YVRp
bWUgPSBub3cgLSBtX2xhc3RUb3VjaFRpbWU7CisKKyAgICBkb3VibGUgY29lZmZpY2llbnQgPSBh
dHRlbnVhdGlvbkZhY3RvcihkZWx0YVRpbWUpOworICAgIG1fbGFzdFNjb3JlID0gY29lZmZpY2ll
bnQgKiBkaXN0YW5jZVNjb3JlKGxvY2F0aW9uLCBtX2xhc3RUb3VjaExvY2F0aW9uLCBkZWx0YVRp
bWUpICsgKDEgLSBjb2VmZmljaWVudCkgKiBtX2xhc3RTY29yZTsKKworICAgIG1fbGFzdFRvdWNo
VGltZSA9IG5vdzsKKyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0gbG9jYXRpb247CisgICAgcmV0
dXJuIG1fbGFzdFNjb3JlOworfQorCit2b2lkIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6
cmVzZXQoKQoreworICAgIG1fbGFzdFRvdWNoVGltZSA9IDBfczsKKyAgICBtX2xhc3RUb3VjaExv
Y2F0aW9uID0geyB9OworICAgIG1fbGFzdFNjb3JlID0gMDsKK30KKworZG91YmxlIEZ1bGxzY3Jl
ZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VTY29yZShjb25zdCBDR1BvaW50JiBuZXh0TG9j
YXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwgY29uc3QgU2Vjb25kcyYgZGVsdGFU
aW1lKQoreworICAgIGRvdWJsZSBkaXN0YW5jZSA9IHNxcnQoCisgICAgICAgIG1feFdlaWdodCAq
IHBvdyhuZXh0TG9jYXRpb24ueCAtIGxhc3RMb2NhdGlvbi54LCAyKSArCisgICAgICAgIG1feVdl
aWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueSAtIGxhc3RMb2NhdGlvbi55LCAyKSk7CisgICAgZG91
YmxlIHNpemVGYWN0b3IgPSBzcXJ0KAorICAgICAgICBtX3hXZWlnaHQgKiBwb3cobV9zaXplLndp
ZHRoLCAyKSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhtX3NpemUuaGVpZ2h0LCAyKSk7Cisg
ICAgZG91YmxlIHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2UgLyBzaXplRmFjdG9yOworICAgIGlm
IChzY2FsZWREaXN0YW5jZSA8PSBtX2N1dG9mZikKKyAgICAgICAgcmV0dXJuIHNjYWxlZERpc3Rh
bmNlICogKG1fcmFtcFVwU3BlZWQgLyBkZWx0YVRpbWUpOworCisgICAgZG91YmxlIGV4cG9uZW50
aWFsRGlzdGFuY2UgPSBtX2N1dG9mZiArIHBvdygoc2NhbGVkRGlzdGFuY2UgLSBtX2N1dG9mZikg
LyAoMSAtIG1fY3V0b2ZmKSwgbV9nYW1tYSk7CisgICAgcmV0dXJuIGV4cG9uZW50aWFsRGlzdGFu
Y2UgKiAobV9yYW1wVXBTcGVlZCAvIGRlbHRhVGltZSk7Cit9CisKK2RvdWJsZSBGdWxsc2NyZWVu
VG91Y2hTZWNoZXVyaXN0aWM6OmF0dGVudWF0aW9uRmFjdG9yKFNlY29uZHMgZGVsdGEpCit7Cisg
ICAgZG91YmxlIG5vcm1hbGl6ZWRUaW1lRGVsdGEgPSBkZWx0YSAvIG1fcmFtcERvd25TcGVlZDsK
KyAgICByZXR1cm4gbm9ybWFsaXplZFRpbWVEZWx0YSAqIG1fd2VpZ2h0OworfQorCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4v
RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjNjZGNhM2Q3YzAzMTZh
OGY0NTc3OWQyMWQ4MTA4ZmFjM2Q1OGFmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5o
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8d3RmL1NlY29u
ZHMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYyB7CitwdWJsaWM6CisgICAgZG91YmxlIHNjb3JlT2ZOZXh0VG91Y2goQ0dQb2ludCBs
b2NhdGlvbik7CisgICAgdm9pZCByZXNldCgpOworCisgICAgdm9pZCBzZXRSYW1wVXBTcGVlZChT
ZWNvbmRzIHNwZWVkKSB7IG1fcmFtcFVwU3BlZWQgPSBzcGVlZDsgfQorICAgIHZvaWQgc2V0UmFt
cERvd25TcGVlZChTZWNvbmRzIHNwZWVkKSB7IG1fcmFtcERvd25TcGVlZCA9IHNwZWVkOyB9Cisg
ICAgdm9pZCBzZXRYV2VpZ2h0KGRvdWJsZSB3ZWlnaHQpIHsgbV94V2VpZ2h0ID0gd2VpZ2h0OyB9
CisgICAgdm9pZCBzZXRZV2VpZ2h0KGRvdWJsZSB3ZWlnaHQpIHsgbV95V2VpZ2h0ID0gd2VpZ2h0
OyB9CisgICAgdm9pZCBzZXRTaXplKENHU2l6ZSBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKyAg
ICB2b2lkIHNldEdhbW1hKGRvdWJsZSBnYW1tYSkgeyBtX2dhbW1hID0gZ2FtbWE7IH0KKyAgICB2
b2lkIHNldEdhbW1hQ3V0b2ZmKGRvdWJsZSBjdXRvZmYpIHsgbV9jdXRvZmYgPSBjdXRvZmY7IH0K
KworcHJpdmF0ZToKKyAgICBkb3VibGUgZGlzdGFuY2VTY29yZShjb25zdCBDR1BvaW50JiBuZXh0
TG9jYXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwgY29uc3QgU2Vjb25kcyYgZGVs
dGFUaW1lKTsKKyAgICBkb3VibGUgYXR0ZW51YXRpb25GYWN0b3IoU2Vjb25kcyBkZWx0YSk7CisK
KyAgICBkb3VibGUgbV93ZWlnaHQgeyAwLjEgfTsKKyAgICBTZWNvbmRzIG1fcmFtcFVwU3BlZWQg
eyAxIH07CisgICAgU2Vjb25kcyBtX3JhbXBEb3duU3BlZWQgeyAxIH07CisgICAgZG91YmxlIG1f
eFdlaWdodCB7IDEgfTsKKyAgICBkb3VibGUgbV95V2VpZ2h0IHsgMSB9OworICAgIGRvdWJsZSBt
X2dhbW1hIHsgMSB9OworICAgIGRvdWJsZSBtX2N1dG9mZiB7IDEgfTsKKyAgICBDR1NpemUgbV9z
aXplIHsgfTsKKyAgICBTZWNvbmRzIG1fbGFzdFRvdWNoVGltZSB7IDAgfTsKKyAgICBDR1BvaW50
IG1fbGFzdFRvdWNoTG9jYXRpb24geyB9OworICAgIGRvdWJsZSBtX2xhc3RTY29yZSB7IDAgfTsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4v
V0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY4
M2IyYzUzN2YxMGExNjdlZmU1ZGEwZDZhYzc4MWE4ZDk2ZDI0ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQg
PFVJS2l0L1VJVmlld0NvbnRyb2xsZXIuaD4KKworQGNsYXNzIFdLV2ViVmlldzsKKworbmFtZXNw
YWNlIFdlYktpdCB7CitjbGFzcyBXZWJQYWdlUHJveHk7Cit9CisKK05TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgOiBVSVZpZXdD
b250cm9sbGVyCitAcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBpZCB0YXJnZXQ7CitAcHJv
cGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOworQHByb3BlcnR5IChyZXRhaW4s
IG5vbmF0b21pYykgTlNTdHJpbmcgKmxvY2F0aW9uOworQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0
b21pYykgQk9PTCBwcmVmZXJzU3RhdHVzQmFySGlkZGVuOworQHByb3BlcnR5IChhc3NpZ24sIG5v
bmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5nOworQHByb3BlcnR5IChhc3Np
Z24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGljdHVyZUluUGljdHVyZUFjdGl2ZSkgQk9PTCBwaWN0
dXJlSW5QaWN0dXJlQWN0aXZlOworCistIChpZClpbml0V2l0aFdlYlZpZXc6KFdLV2ViVmlldyAq
KXdlYlZpZXc7CistICh2b2lkKXNob3dVSTsKKy0gKHZvaWQpaGlkZVVJOworLSAodm9pZCl2aWRl
b0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZTsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5E
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNj
cmVlblZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxz
Y3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRhMWViOWY0
YzM3ZmRlZDdjYWI4ZDQzZGUzYTRkMWY4NWMyOTA5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9s
bGVyLm1tCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQg
IldLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgiCisKKyNpbXBvcnQgIkZ1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lmgi
CisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lmgi
CisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnVsbFNjcmVlbk1h
bmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIHNob3dIaWRlQW5pbWF0aW9uRHVy
YXRpb24gPSAwLjE7CitzdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgYXV0b0hpZGVEZWxheSA9
IDQuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcmVxdWlyZWRTY29yZSA9IDAuMTsKKworQGNsYXNz
IFdLRnVsbHNjcmVlblN0YWNrVmlldzsKKworY2xhc3MgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCA6IFBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldFBhcmVudChXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxl
ciAqcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKKyAgICB2b2lkIHJhdGVDaGFuZ2Vk
KGJvb2wgaXNQbGF5aW5nLCBmbG9hdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fcGFyZW50
LnBsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAgfQorCisgICAgdm9pZCBwaWN0dXJlSW5QaWN0dXJl
QWN0aXZlQ2hhbmdlZChib29sIGFjdGl2ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fcGFy
ZW50LnBpY3R1cmVJblBpY3R1cmVBY3RpdmUgPSBhY3RpdmU7CisgICAgfQorCisgICAgdm9pZCBz
ZXRJbnRlcmZhY2UoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQqIGludGVyZmFjZSkKKyAg
ICB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVyZmFjZS0+cGxheWJhY2tTZXNz
aW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwo
KS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgbV9pbnRlcmZhY2UgPSBpbnRlcmZhY2U7
CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9u
TW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKS0+
YWRkQ2xpZW50KCp0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIgKm1fcGFyZW50IHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxQbGF5YmFja1Nl
c3Npb25JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7Cit9OworCisjcHJhZ21hIG1hcmsgLSBf
V0tFeHRyaW5zaWNCdXR0b24KKworQGludGVyZmFjZSBfV0tFeHRyaW5zaWNCdXR0b24gOiBVSUJ1
dHRvbgorQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYykgQ0dTaXplIGV4dHJpbnNpY0NvbnRl
bnRTaXplOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLRXh0cmluc2ljQnV0dG9uCistICh2
b2lkKXNldEV4dHJpbnNpY0NvbnRlbnRTaXplOihDR1NpemUpc2l6ZQoreworICAgIF9leHRyaW5z
aWNDb250ZW50U2l6ZSA9IHNpemU7CisgICAgW3NlbGYgaW52YWxpZGF0ZUludHJpbnNpY0NvbnRl
bnRTaXplXTsKK30KKworLSAoQ0dTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCit7CisgICAgcmV0
dXJuIF9leHRyaW5zaWNDb250ZW50U2l6ZTsKK30KK0BlbmQKKworI3ByYWdtYSBtYXJrIC0gV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIKKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciAoKSA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRvb2xiYXJEZWxlZ2F0
ZT4KK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIFdLV2ViVmlldyAqX3dlYlZpZXc7IC8v
IENhbm5vdCBiZSByZXRhaW5lZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS8xNDg4NDY2Nj4uCitAcHJv
cGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqIF9t
YW5hZ2VyOworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBDR0Zsb2F0IF9lZmZlY3Rp
dmVGdWxsc2NyZWVuSW5zZXRUb3A7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlciB7CisgICAgUmV0YWluUHRyPFVJTG9uZ1ByZXNzR2VzdHVyZVJlY29n
bml6ZXI+IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxXS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXc+IF9zdGFja1ZpZXc7CisgICAgUmV0YWluUHRyPF9XS0V4dHJpbnNpY0J1dHRv
bj4gX2NhbmNlbEJ1dHRvbjsKKyAgICBSZXRhaW5QdHI8X1dLRXh0cmluc2ljQnV0dG9uPiBfcGlw
QnV0dG9uOworICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2xvY2F0aW9uQnV0dG9uOworICAgIFJl
dGFpblB0cjxVSUxheW91dEd1aWRlPiBfdG9wR3VpZGU7CisgICAgUmV0YWluUHRyPE5TTGF5b3V0
Q29uc3RyYWludD4gX3RvcENvbnN0cmFpbnQ7CisgICAgV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hT
ZWNoZXVyaXN0aWMgX3NlY2hldXJpc3RpYzsKKyAgICBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxl
clBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IF9wbGF5YmFja0NsaWVudDsKKyAgICBCT09MIF9o
YXNDb250cm9sc01hbmFnZXI7CisgICAgQ0dGbG9hdCBfbm9uWmVyb1N0YXR1c0JhckhlaWdodDsK
K30KKworI3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJmYWNlCisKKy0gKGlkKWluaXRXaXRo
V2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX25vblplcm9TdGF0
dXNCYXJIZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJlZEFwcGxpY2F0aW9uLnN0YXR1c0JhckZy
YW1lLnNpemUuaGVpZ2h0OworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3N0YXR1c0JhckZyYW1lRGlk
Q2hhbmdlOikgbmFtZTpVSUFwcGxpY2F0aW9uRGlkQ2hhbmdlU3RhdHVzQmFyRnJhbWVOb3RpZmlj
YXRpb24gb2JqZWN0Om5pbF07CisgICAgX3NlY2hldXJpc3RpYy5zZXRSYW1wVXBTcGVlZChTZWNv
bmRzKDAuMjUpKTsKKyAgICBfc2VjaGV1cmlzdGljLnNldFJhbXBEb3duU3BlZWQoU2Vjb25kcygx
LikpOworICAgIF9zZWNoZXVyaXN0aWMuc2V0WFdlaWdodCgwKTsKKyAgICBfc2VjaGV1cmlzdGlj
LnNldEdhbW1hKDAuMSk7CisgICAgX3NlY2hldXJpc3RpYy5zZXRHYW1tYUN1dG9mZigwLjA4KTsK
KworICAgIHNlbGYuX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAgX3BsYXliYWNrQ2xpZW50LnNl
dFBhcmVudChzZWxmKTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0
OnNlbGZdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3Zl
T2JzZXJ2ZXI6c2VsZl07CisKKyAgICBfcGxheWJhY2tDbGllbnQuc2V0UGFyZW50KG51bGxwdHIp
OworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKXNob3dVSQoreworICAgIFtO
U09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKworICAgIGlmIChfcGxheWluZykg
eworICAgICAgICBOU1RpbWVJbnRlcnZhbCBoaWRlRGVsYXkgPSBhdXRvSGlkZURlbGF5OworICAg
ICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGhpZGVVSSkgd2l0aE9iamVjdDpu
aWwgYWZ0ZXJEZWxheTpoaWRlRGVsYXldOworICAgIH0KKyAgICBbVUlWaWV3IGFuaW1hdGVXaXRo
RHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOiBeeworICAgICAg
ICBbX3N0YWNrVmlldyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbX3N0YWNrVmlldyBzZXRBbHBo
YToxXTsKKyAgICAgICAgc2VsZi5wcmVmZXJzU3RhdHVzQmFySGlkZGVuID0gTk87CisgICAgfV07
Cit9CisKKy0gKHZvaWQpaGlkZVVJCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVy
Zm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIG9i
amVjdDpuaWxdOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpzaG93SGlkZUFuaW1h
dGlvbkR1cmF0aW9uIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25z
dHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50
ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZp
ZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3IgY29uc3RhbnQ6c2VsZi52aWV3LnNhZmVB
cmVhSW5zZXRzLnRvcF07CisgICAgICAgIFtfdG9wQ29uc3RyYWludCBzZXRBY3RpdmU6WUVTXTsK
KyAgICAgICAgW19zdGFja1ZpZXcgc2V0QWxwaGE6MF07CisgICAgICAgIHNlbGYucHJlZmVyc1N0
YXR1c0JhckhpZGRlbiA9IFlFUzsKKyAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKSB7
CisgICAgICAgIGlmICghZmluaXNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
W3NlbGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07Cisg
ICAgICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3JdOwor
ICAgICAgICBbX3RvcENvbnN0cmFpbnQgc2V0QWN0aXZlOllFU107CisgICAgICAgIFtfc3RhY2tW
aWV3IHNldEhpZGRlbjpZRVNdOworICAgIH1dOworfQorCistICh2b2lkKXZpZGVvQ29udHJvbHNN
YW5hZ2VyRGlkQ2hhbmdlCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZp
ZXcgX3BhZ2VdOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNz
aW9uTWFuYWdlciA9IHBhZ2UgPyBwYWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkgOiBOVUxM
OworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UgPSBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID8gcGxheWJhY2tTZXNzaW9uTWFuYWdl
ci0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkgOiBOVUxMOworICAgIF9wbGF5YmFja0NsaWVu
dC5zZXRJbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKKworICAgIFBsYXliYWNr
U2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IHBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSA/IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSA6
IE5VTEw7CisgICAgX2hhc0NvbnRyb2xzTWFuYWdlciA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsOwor
ICAgIHNlbGYucGxheWluZyA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsID8gcGxheWJhY2tTZXNzaW9u
TW9kZWwtPmlzUGxheWluZygpIDogTk87CisgICAgW19waXBCdXR0b24gc2V0SGlkZGVuOiFwbGF5
YmFja1Nlc3Npb25Nb2RlbF07Cit9CisKK0BzeW50aGVzaXplIHByZWZlcnNTdGF0dXNCYXJIaWRk
ZW49X3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47CistICh2b2lkKXNldFByZWZlcnNTdGF0dXNCYXJI
aWRkZW46KEJPT0wpdmFsdWUKK3sKKyAgICBfcHJlZmVyc1N0YXR1c0JhckhpZGRlbiA9IHZhbHVl
OworICAgIFtzZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5jZVVwZGF0ZV07CisgICAgW3Nl
bGYgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30KKworLSAodm9pZClzZXRQbGF5
aW5nOihCT09MKWlzUGxheWluZworeworICAgIGlmIChfcGxheWluZyA9PSBpc1BsYXlpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIF9wbGF5aW5nID0gaXNQbGF5aW5nOworICAgIGlmICghX3Bs
YXlpbmcpCisgICAgICAgIFtzZWxmIHNob3dVSV07CisgICAgZWxzZSB7CisgICAgICAgIFtOU09i
amVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKyAgICAgICAgTlNUaW1lSW50ZXJ2YWwg
aGlkZURlbGF5ID0gYXV0b0hpZGVEZWxheTsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3RvcihoaWRlVUkpIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6aGlkZURlbGF5XTsK
KyAgICB9Cit9CisKKy0gKHZvaWQpc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTooQk9PTClhY3Rp
dmUKK3sKKyAgICBpZiAoX3BpY3R1cmVJblBpY3R1cmVBY3RpdmUgPT0gYWN0aXZlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBfcGljdHVyZUluUGljdHVyZUFjdGl2ZSA9IGFjdGl2ZTsKKyAgICBb
X3BpcEJ1dHRvbiBzZXRTZWxlY3RlZDphY3RpdmVdOworfQorCisjcHJhZ21hIG1hcmsgLSBVSVZp
ZXdDb250cm9sbGVyIE92ZXJyaWRlcworCistICh2b2lkKWxvYWRWaWV3Cit7CisgICAgW3NlbGYg
c2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgMTAwLCAxMDApXSkuZ2V0KCldOworICAgIHNlbGYudmlldy5hdXRvcmVzaXppbmdNYXNr
ID0gVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlSGVpZ2h0OworCisgICAgX2NhbmNlbEJ1dHRvbiA9IFtfV0tFeHRyaW5zaWNCdXR0b24g
YnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBz
ZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgW19j
YW5jZWxCdXR0b24gc2V0QWRqdXN0c0ltYWdlV2hlbkhpZ2hsaWdodGVkOk5PXTsKKyAgICBbX2Nh
bmNlbEJ1dHRvbiBzZXRFeHRyaW5zaWNDb250ZW50U2l6ZTpDR1NpemVNYWtlKDYwLjAsIDQ3LjAp
XTsKKyAgICBbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmll
dzpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxl
IGJ1bmRsZUZvckNsYXNzOnNlbGYuY2xhc3NdOworICAgIFVJSW1hZ2UgKmRvbmVJbWFnZSA9IFtV
SUltYWdlIGltYWdlTmFtZWQ6QCJEb25lIiBpbkJ1bmRsZTpidW5kbGUgY29tcGF0aWJsZVdpdGhU
cmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRJbWFnZTpbZG9uZUlt
YWdlIGltYWdlV2l0aFJlbmRlcmluZ01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNUZW1w
bGF0ZV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtfY2FuY2VsQnV0dG9u
IHNldFRpbnRDb2xvcjpbVUlDb2xvciB3aGl0ZUNvbG9yXV07CisgICAgW19jYW5jZWxCdXR0b24g
c2l6ZVRvRml0XTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKF9jYW5jZWxBY3Rpb246KSBmb3JDb250cm9sRXZlbnRzOlVJQ29udHJvbEV2ZW50VG91
Y2hVcEluc2lkZV07CisKKyAgICBfcGlwQnV0dG9uID0gW19XS0V4dHJpbnNpY0J1dHRvbiBidXR0
b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOworICAgIFtfcGlwQnV0dG9uIHNldFRyYW5z
bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKKyAgICBbX3BpcEJ1dHRv
biBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOworICAgIFtfcGlwQnV0dG9uIHNl
dEV4dHJpbnNpY0NvbnRlbnRTaXplOkNHU2l6ZU1ha2UoNjAuMCwgNDcuMCldOworICAgIFtXS0Z1
bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3Ol9waXBCdXR0b24u
Z2V0KCldOworICAgIFVJSW1hZ2UgKnN0YXJ0UGlQSW1hZ2UgPSBbVUlJbWFnZSBpbWFnZU5hbWVk
OkAiU3RhcnRQaWN0dXJlSW5QaWN0dXJlQnV0dG9uIiBpbkJ1bmRsZTpidW5kbGUgY29tcGF0aWJs
ZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBVSUltYWdlICpzdG9wUGlQSW1hZ2UgPSBb
VUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RvcFBpY3R1cmVJblBpY3R1cmVCdXR0b24iIGluQnVuZGxl
OmJ1bmRsZSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpuaWxdOworICAgIFtfcGlwQnV0
dG9uIHNldEltYWdlOltzdGFydFBpUEltYWdlIGltYWdlV2l0aFJlbmRlcmluZ01vZGU6VUlJbWFn
ZVJlbmRlcmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3Jt
YWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdG9wUGlQSW1hZ2UgaW1hZ2VXaXRoUmVu
ZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpV
SUNvbnRyb2xTdGF0ZVNlbGVjdGVkXTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRUaW50Q29sb3I6W1VJ
Q29sb3Igd2hpdGVDb2xvcl1dOworICAgIFtfcGlwQnV0dG9uIHNpemVUb0ZpdF07CisgICAgW19w
aXBCdXR0b24gYWRkVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfdG9nZ2xlUGlQQWN0aW9u
OikgZm9yQ29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNoVXBJbnNpZGVdOworCisgICAg
X3N0YWNrVmlldyA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYWxsb2NdIGluaXRX
aXRoQXJyYW5nZWRTdWJ2aWV3czpAW19jYW5jZWxCdXR0b24uZ2V0KCksIF9waXBCdXR0b24uZ2V0
KCldIGF4aXM6VUlMYXlvdXRDb25zdHJhaW50QXhpc0hvcml6b250YWxdKTsKKyAgICBbX3N0YWNr
VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107Cisg
ICAgW19zdGFja1ZpZXcgc2V0VGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheTpf
Y2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBbW3NlbGYgdmlld10gYWRkU3Vidmlldzpfc3RhY2tW
aWV3LmdldCgpXTsKKworICAgIFVJTGF5b3V0R3VpZGUqIHNhZmVBcmVhID0gc2VsZi52aWV3LnNh
ZmVBcmVhTGF5b3V0R3VpZGU7CisgICAgVUlMYXlvdXRHdWlkZSogbWFyZ2lucyA9IHNlbGYudmll
dy5sYXlvdXRNYXJnaW5zR3VpZGU7CisKKyAgICBfdG9wR3VpZGUgPSBhZG9wdE5TKFtbVUlMYXlv
dXRHdWlkZSBhbGxvY10gaW5pdF0pOworICAgIFtzZWxmLnZpZXcgYWRkTGF5b3V0R3VpZGU6X3Rv
cEd1aWRlLmdldCgpXTsKKyAgICBOU0xheW91dEFuY2hvciogdG9wQW5jaG9yID0gW190b3BHdWlk
ZSB0b3BBbmNob3JdOworICAgIF90b3BDb25zdHJhaW50ID0gW3RvcEFuY2hvciBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpzYWZlQXJlYS50b3BBbmNob3JdOworICAgIFtOU0xheW91dENvbnN0cmFp
bnQgYWN0aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBfdG9wQ29uc3RyYWludC5nZXQoKSwK
KyAgICAgICAgW1tfc3RhY2tWaWV3IHRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6
dG9wQW5jaG9yXSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFp
bnRFcXVhbFRvQW5jaG9yOm1hcmdpbnMubGVhZGluZ0FuY2hvcl0sCisgICAgXV07CisKKyAgICBb
X3N0YWNrVmlldyBzZXRBbHBoYTowXTsKKyAgICBbX3N0YWNrVmlldyBzZXRIaWRkZW46WUVTXTsK
KyAgICBbc2VsZiB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV07CisKKyAgICBfdG91Y2hH
ZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
IGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3RvdWNoRGV0ZWN0
ZWQ6KV0pOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXRDYW5jZWxzVG91Y2hlc0lu
VmlldzpOT107CisgICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHNldE1pbmltdW1QcmVzc0R1
cmF0aW9uOjBdOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxm
XTsKKyAgICBbc2VsZi52aWV3IGFkZEdlc3R1cmVSZWNvZ25pemVyOl90b3VjaEdlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKK30KKworLSAodm9pZCl2aWV3V2lsbEFwcGVhcjooQk9PTClhbmltYXRl
ZAoreworICAgIHNlbGYuX3dlYlZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IFVJVmlld0F1dG9yZXNp
emluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodDsKKyAg
ICBzZWxmLl93ZWJWaWV3LmZyYW1lID0gc2VsZi52aWV3LmJvdW5kczsKKyAgICBbc2VsZi52aWV3
IGluc2VydFN1YnZpZXc6c2VsZi5fd2ViVmlldyBhdEluZGV4OjBdOworCisgICAgaWYgKGF1dG8q
IG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKQorICAgICAgICBtYW5hZ2VyLT5zZXRGdWxsc2NyZWVu
QXV0b0hpZGVEZWxheShhdXRvSGlkZURlbGF5KTsKK30KKworLSAodm9pZCl2aWV3RGlkTGF5b3V0
U3Vidmlld3MKK3sKKyAgICBbc2VsZiBfdXBkYXRlV2ViVmlld0Z1bGxzY3JlZW5JbnNldHNdOwor
ICAgIF9zZWNoZXVyaXN0aWMuc2V0U2l6ZShzZWxmLnZpZXcuYm91bmRzLnNpemUpOworfQorCist
ICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXplKXNpemUgd2l0aFRyYW5zaXRp
b25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvcj4p
Y29vcmRpbmF0b3IKK3sKKyAgICBbc3VwZXIgdmlld1dpbGxUcmFuc2l0aW9uVG9TaXplOnNpemUg
d2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07CisgICAgW2Nvb3JkaW5hdG9y
IGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0
aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7CisgICAgICAgIHZvaWQgKF53ZWJWaWV3
VXBkYXRlQmxvY2spKCkgPSBeeworICAgICAgICAgICAgW3NlbGYuX3dlYlZpZXcgX292ZXJyaWRl
TGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpzaXplIG1heGltdW1Vbm9ic2N1
cmVkU2l6ZU92ZXJyaWRlOnNpemVdOworICAgICAgICB9OworCisgICAgICAgIFtzZWxmLl93ZWJW
aWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6d2ViVmlld1VwZGF0ZUJsb2NrXTsK
KyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX3NldEludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6
W1VJQXBwIHN0YXR1c0Jhck9yaWVudGF0aW9uXV07CisgICAgfSBjb21wbGV0aW9uOl4oaWQgPFVJ
Vmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PmNvbnRleHQpIHsKKyAg
ICAgICAgW3NlbGYuX3dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXplXTsKKyAgICB9XTsKK30KKwor
LSAoVUlTdGF0dXNCYXJTdHlsZSlwcmVmZXJyZWRTdGF0dXNCYXJTdHlsZQoreworICAgIHJldHVy
biBVSVN0YXR1c0JhclN0eWxlTGlnaHRDb250ZW50OworfQorCistIChCT09MKXByZWZlcnNTdGF0
dXNCYXJIaWRkZW4KK3sKKyAgICByZXR1cm4gX3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47Cit9CisK
KyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRl
CisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0
dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVj
b2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6ZXIKK3sK
KyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1
cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjZWl2ZVRvdWNoOihVSVRv
dWNoICopdG91Y2gKK3sKKyAgICBbc2VsZiBzaG93VUldOworICAgIHJldHVybiBZRVM7Cit9CisK
KyNwcmFnbWEgbWFyayAtCisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgSW50ZXJuYWwg
SW50ZXJmYWNlCisKK0BkeW5hbWljIF9tYW5hZ2VyOworLSAoV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoYXV0byogcGFnZSA9IFtzZWxmLl93ZWJWaWV3IF9w
YWdlXSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0BkeW5hbWljIF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3A7
CistIChDR0Zsb2F0KV9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3AKK3sKKyAgICBpZiAoIXNl
bGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDR1Jl
Y3QgY2FuY2VsRnJhbWUgPSBfY2FuY2VsQnV0dG9uLmdldCgpLmZyYW1lOworICAgIENHUG9pbnQg
bWF4WFkgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKGNhbmNlbEZyYW1lKSwgQ0dSZWN0R2V0
TWF4WShjYW5jZWxGcmFtZSkpOworICAgIHJldHVybiBbX2NhbmNlbEJ1dHRvbiBjb252ZXJ0UG9p
bnQ6bWF4WFkgdG9WaWV3OnNlbGYudmlld10ueTsKK30KKworLSAodm9pZClfY2FuY2VsQWN0aW9u
OihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgdGFyZ2V0XSBwZXJmb3JtU2VsZWN0b3I6W3NlbGYg
YWN0aW9uXV07Cit9CisKKy0gKHZvaWQpX3RvZ2dsZVBpUEFjdGlvbjooaWQpc2VuZGVyCit7Cisg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZpZXcgX3BhZ2VdOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gcGFnZS0+cGxheWJhY2tTZXNzaW9uTWFuYWdlcigp
OworICAgIGlmICghcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIHBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZSA9IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNvbnRyb2xzTWFuYWdlckludGVyZmFjZSgp
OworICAgIGlmICghcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNzaW9uTW9kZWwgPSBwbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCk7CisgICAgaWYgKCFwbGF5
YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcGxheWJhY2tTZXNzaW9u
TW9kZWwtPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClfdG91Y2hEZXRl
Y3RlZDooaWQpc2VuZGVyCit7CisgICAgaWYgKFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBzdGF0
ZV0gIT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4gfHwgW190b3VjaEdlc3R1cmVSZWNv
Z25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCkgeworICAgICAg
ICBkb3VibGUgc2NvcmUgPSBfc2VjaGV1cmlzdGljLnNjb3JlT2ZOZXh0VG91Y2goW190b3VjaEdl
c3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGYudmlld10pOworICAgICAgICBpZiAo
c2NvcmUgPiByZXF1aXJlZFNjb3JlKQorICAgICAgICAgICAgW3NlbGYgX3Nob3dQaGlzaGluZ0Fs
ZXJ0XTsKKyAgICB9CisgICAgW3NlbGYgc2hvd1VJXTsKK30KKworLSAodm9pZClfc3RhdHVzQmFy
RnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uQ2VudGVyICopbm90aWZpY2F0aW9uCit7Cisg
ICAgQ0dGbG9hdCBoZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJlZEFwcGxpY2F0aW9uLnN0YXR1
c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIGlmICghaGVpZ2h0IHx8IGhlaWdodCA9PSBfbm9u
WmVyb1N0YXR1c0JhckhlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgX25vblplcm9TdGF0
dXNCYXJIZWlnaHQgPSBoZWlnaHQ7CisgICAgW3NlbGYgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVu
SW5zZXRzXTsKK30KKworLSAodm9pZClfdXBkYXRlV2ViVmlld0Z1bGxzY3JlZW5JbnNldHMKK3sK
KyAgICBpZiAoYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXIpCisgICAgICAgIG1hbmFnZXIt
PnNldEZ1bGxzY3JlZW5JbnNldFRvcChzZWxmLl9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3Ap
OworfQorCistICh2b2lkKV9zaG93UGhpc2hpbmdBbGVydAoreworICAgIE5TU3RyaW5nICphbGVy
dFRpdGxlID0gQCJEZWNlcHRpdmUgV2Vic2l0ZSBXYXJuaW5nIjsKKyAgICBOU1N0cmluZyAqYWxl
cnRNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJUaGUgd2Vic2l0ZSBcIiVA
XCIgbWF5IGJlIGEgZGVjZXB0aXZlIHdlYnNpdGUuIFdvdWxkIHlvdSBsaWtlIHRvIGV4aXQgZnVs
bHNjcmVlbj8iLCAoTlNTdHJpbmcgKilzZWxmLmxvY2F0aW9uXTsKKyAgICBVSUFsZXJ0Q29udHJv
bGxlciogYWxlcnQgPSBbVUlBbGVydENvbnRyb2xsZXIgYWxlcnRDb250cm9sbGVyV2l0aFRpdGxl
OmFsZXJ0VGl0bGUgbWVzc2FnZTphbGVydE1lc3NhZ2UgcHJlZmVycmVkU3R5bGU6VUlBbGVydENv
bnRyb2xsZXJTdHlsZUFsZXJ0XTsKKworICAgIFVJQWxlcnRBY3Rpb24qIGRlZmF1bHRBY3Rpb24g
PSBbVUlBbGVydEFjdGlvbiBhY3Rpb25XaXRoVGl0bGU6QCJFeGl0IEZ1bGxzY3JlZW4iIHN0eWxl
OlVJQWxlcnRBY3Rpb25TdHlsZURlZmF1bHQgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rp
b24pIHsKKyAgICAgICAgW3NlbGYgX2NhbmNlbEFjdGlvbjphY3Rpb25dOworICAgIH1dOworCisg
ICAgVUlBbGVydEFjdGlvbiogY2FuY2VsQWN0aW9uID0gW1VJQWxlcnRBY3Rpb24gYWN0aW9uV2l0
aFRpdGxlOkAiU3RheSBpbiBGdWxsc2NyZWVuIiBzdHlsZTpVSUFsZXJ0QWN0aW9uU3R5bGVDYW5j
ZWwgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgX3NlY2hldXJp
c3RpYy5yZXNldCgpOworICAgIH1dOworCisgICAgW2FsZXJ0IGFkZEFjdGlvbjpkZWZhdWx0QWN0
aW9uXTsKKyAgICBbYWxlcnQgYWRkQWN0aW9uOmNhbmNlbEFjdGlvbl07CisgICAgW3NlbGYgcHJl
c2VudFZpZXdDb250cm9sbGVyOmFsZXJ0IGFuaW1hdGVkOllFUyBjb21wbGV0aW9uOm5pbF07Cit9
CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4v
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJiZWYyYTEyODhiZTZmY2Q0NmE0MGFiYTE3MWVlZDA4MDMwOTNhM2YKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCA8
VUlLaXQvVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmcuaD4KKworQGNsYXNzIFdlYkNvcmVG
dWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3OworQGNsYXNzIFdLV2ViVmlldzsKKworQGludGVyZmFj
ZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIDogTlNPYmplY3QgPFVJVmlld0NvbnRyb2xs
ZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGU+CitAcHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4sIG5v
bmF0b21pYykgV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgKndlYlZpZXdQbGFjZWhv
bGRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIGFzc2lnbiwgbm9uYXRvbWljKSBCT09MIGlzRnVs
bFNjcmVlbjsKKworLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Owor
LSAodm9pZCllbnRlckZ1bGxTY3JlZW47CistICh2b2lkKWJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0
aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmlu
YWxGcmFtZTsKKy0gKHZvaWQpcmVxdWVzdEV4aXRGdWxsU2NyZWVuOworLSAodm9pZClleGl0RnVs
bFNjcmVlbjsKKy0gKHZvaWQpYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENH
UmVjdClpbml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7CistICh2b2lk
KWNsb3NlOworLSAodm9pZCl3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1cGVydmlld1doaWxlSW5GdWxs
c2NyZWVuOworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZTsKKworQGVuZAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2Ny
ZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlkYzQyNjJkNTk1N2MzMzNiZTYyZTk2NjRlZTM0YjdmMmVjMGEzYzMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9X
S0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCkBAIC0wLDAgKzEsODY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBQTEFURk9STShJT1MpICYmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKKyNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MuaCIKKworI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgIldLRnVsbHNjcmVlblN0YWNr
Vmlldy5oIgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuaCIKKyNpbXBvcnQg
IldLV2ViVmlldy5oIgorI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldL
V2ViVmlld1ByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+CisjaW1wb3J0IDxTZWN1cml0eS9TZWNDZXJ0aWZpY2F0ZS5oPgorI2ltcG9ydCA8U2VjdXJp
dHkvU2VjVHJ1c3QuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmlzdWFsRWZmZWN0Vmlldy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGls
aXRpZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9M
b2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1VSTEV4dHJhcy5o
PgorI2ltcG9ydCA8cGFsL3NwaS9jZi9DRk5ldHdvcmtTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkv
Y29jb2EvTGlua1ByZXNlbnRhdGlvblNQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU1N0
cmluZ1NQSS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9RdWFydHpDb3JlU1BJLmg+CisjaW1w
b3J0IDx3dGYvU29mdExpbmtpbmcuaD4KKyNpbXBvcnQgPHd0Zi9zcGkvY29jb2EvU2VjdXJpdHlT
UEkuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitTT0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUktfT1BUSU9OQUwoTGlua1ByZXNlbnRhdGlv
bikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VWaWV3V2l0aFZp
ZXcoVUlWaWV3ICp2aWV3LCBVSVZpZXcgKm90aGVyVmlldykKK3sKKyAgICBbQ0FUcmFuc2FjdGlv
biBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAg
ICBbb3RoZXJWaWV3IHNldEZyYW1lOlt2aWV3IGZyYW1lXV07CisgICAgW290aGVyVmlldyBzZXRB
dXRvcmVzaXppbmdNYXNrOlt2aWV3IGF1dG9yZXNpemluZ01hc2tdXTsKKyAgICBbW3ZpZXcgc3Vw
ZXJ2aWV3XSBpbnNlcnRTdWJ2aWV3Om90aGVyVmlldyBhYm92ZVN1YnZpZXc6dmlld107CisgICAg
W3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsK
K30KKworZW51bSBGdWxsU2NyZWVuU3RhdGUgOiBOU0ludGVnZXIgeworICAgIE5vdEluRnVsbFNj
cmVlbiwKKyAgICBXYWl0aW5nVG9FbnRlckZ1bGxTY3JlZW4sCisgICAgRW50ZXJpbmdGdWxsU2Ny
ZWVuLAorICAgIEluRnVsbFNjcmVlbiwKKyAgICBXYWl0aW5nVG9FeGl0RnVsbFNjcmVlbiwKKyAg
ICBFeGl0aW5nRnVsbFNjcmVlbiwKK307CisKK3N0cnVjdCBXS1dlYlZpZXdTdGF0ZSB7CisgICAg
ZmxvYXQgX3NhdmVkVG9wQ29udGVudEluc2V0ID0gMC4wOworICAgIENHRmxvYXQgX3NhdmVkUGFn
ZVNjYWxlID0gMTsKKyAgICBDR0Zsb2F0IF9zYXZlZFZpZXdTY2FsZSA9IDEuMDsKKyAgICBDR0Zs
b2F0IF9zYXZlZFpvb21TY2FsZSA9IDE7CisgICAgVUlFZGdlSW5zZXRzIF9zYXZlZEVkZ2VJbnNl
dCA9IFVJRWRnZUluc2V0c1plcm87CisgICAgVUlFZGdlSW5zZXRzIF9zYXZlZE9ic2N1cmVkSW5z
ZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBVSUVkZ2VJbnNldHMgX3NhdmVkU2Nyb2xsSW5k
aWNhdG9ySW5zZXRzID0gVUlFZGdlSW5zZXRzWmVybzsKKyAgICBDR1BvaW50IF9zYXZlZENvbnRl
bnRPZmZzZXQgPSBDR1BvaW50WmVybzsKKworICAgIHZvaWQgYXBwbHlUbyhXS1dlYlZpZXcqIHdl
YlZpZXcpCisgICAgeworICAgICAgICBbd2ViVmlldyBfc2V0UGFnZVNjYWxlOl9zYXZlZFBhZ2VT
Y2FsZSB3aXRoT3JpZ2luOkNHUG9pbnRNYWtlKDAsIDApXTsKKyAgICAgICAgW3dlYlZpZXcgX3Nl
dE9ic2N1cmVkSW5zZXRzOl9zYXZlZE9ic2N1cmVkSW5zZXRzXTsKKyAgICAgICAgW1t3ZWJWaWV3
IHNjcm9sbFZpZXddIHNldENvbnRlbnRJbnNldDpfc2F2ZWRFZGdlSW5zZXRdOworICAgICAgICBb
W3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Q29udGVudE9mZnNldDpfc2F2ZWRDb250ZW50T2Zmc2V0
XTsKKyAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldFNjcm9sbEluZGljYXRvckluc2V0
czpfc2F2ZWRTY3JvbGxJbmRpY2F0b3JJbnNldHNdOworICAgICAgICBbd2ViVmlldyBfcGFnZV0t
PnNldFRvcENvbnRlbnRJbnNldChfc2F2ZWRUb3BDb250ZW50SW5zZXQpOworICAgICAgICBbd2Vi
VmlldyBfc2V0Vmlld1NjYWxlOl9zYXZlZFZpZXdTY2FsZV07CisgICAgICAgIFtbd2ViVmlldyBz
Y3JvbGxWaWV3XSBzZXRab29tU2NhbGU6X3NhdmVkWm9vbVNjYWxlXTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzdG9yZShXS1dlYlZpZXcqIHdlYlZpZXcpCisgICAgeworICAgICAgICBfc2F2ZWRQ
YWdlU2NhbGUgPSBbd2ViVmlldyBfcGFnZVNjYWxlXTsKKyAgICAgICAgX3NhdmVkT2JzY3VyZWRJ
bnNldHMgPSBbd2ViVmlldyBfb2JzY3VyZWRJbnNldHNdOworICAgICAgICBfc2F2ZWRFZGdlSW5z
ZXQgPSBbW3dlYlZpZXcgc2Nyb2xsVmlld10gY29udGVudEluc2V0XTsKKyAgICAgICAgX3NhdmVk
Q29udGVudE9mZnNldCA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBjb250ZW50T2Zmc2V0XTsKKyAg
ICAgICAgX3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5zZXRzID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXdd
IHNjcm9sbEluZGljYXRvckluc2V0c107CisgICAgICAgIF9zYXZlZFRvcENvbnRlbnRJbnNldCA9
IFt3ZWJWaWV3IF9wYWdlXS0+dG9wQ29udGVudEluc2V0KCk7CisgICAgICAgIF9zYXZlZFZpZXdT
Y2FsZSA9IFt3ZWJWaWV3IF92aWV3U2NhbGVdOworICAgICAgICBfc2F2ZWRab29tU2NhbGUgPSBb
W3dlYlZpZXcgc2Nyb2xsVmlld10gem9vbVNjYWxlXTsKKyAgICB9Cit9OworICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV0tGdWxsc2Ny
ZWVuQW5pbWF0aW9uQ29udHJvbGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyQW5pbWF0
ZWRUcmFuc2l0aW9uaW5nLCBVSVZpZXdDb250cm9sbGVySW50ZXJhY3RpdmVUcmFuc2l0aW9uaW5n
PgorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3Q29udHJvbGxlciogdmlld0Nv
bnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IGluaXRpYWxGcmFtZTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZmluYWxGcmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBnZXR0ZXI9aXNBbmltYXRpbmdJbikgQk9PTCBhbmltYXRpbmdJbjsKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgeworICAgIENHUmVj
dCBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzOworICAgIENHUmVjdCBfZmluYWxNYXNrVmlld0JvdW5k
czsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07
CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAg
ICBDR1BvaW50IF9pbml0aWFsTWFza1ZpZXdDZW50ZXI7CisgICAgQ0dQb2ludCBfZmluYWxNYXNr
Vmlld0NlbnRlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfbWFza1ZpZXc7CisgICAgUmV0YWlu
UHRyPFVJVmlldz4gX2FuaW1hdGluZ1ZpZXc7CisgICAgUmV0YWluUHRyPGlkPFVJVmlld0NvbnRy
b2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0OworICAgIENHRmxvYXQgX2luaXRp
YWxCYWNrZ3JvdW5kQWxwaGE7CisgICAgQ0dGbG9hdCBfZmluYWxCYWNrZ3JvdW5kQWxwaGE7Cit9
CisKKy0gKE5TVGltZUludGVydmFsKXRyYW5zaXRpb25EdXJhdGlvbjooaWQ8VUlWaWV3Q29udHJv
bGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0aW9uQ29udGV4dAoreworICAgIGNvbnN0
IE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOworICAgIHJldHVybiBhbmlt
YXRpb25EdXJhdGlvbjsKK30KKworLSAodm9pZCljb25maWd1cmVJbml0aWFsQW5kRmluYWxTdGF0
ZXNGb3JUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+
KXRyYW5zaXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQgPSB0cmFuc2l0aW9uQ29udGV4dDsK
KyAgICBVSVZpZXcgKmZyb21WaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IHZpZXdGb3JLZXk6VUlU
cmFuc2l0aW9uQ29udGV4dEZyb21WaWV3S2V5XTsKKyAgICBVSVZpZXcgKnRvVmlldyA9IFt0cmFu
c2l0aW9uQ29udGV4dCB2aWV3Rm9yS2V5OlVJVHJhbnNpdGlvbkNvbnRleHRUb1ZpZXdLZXldOwor
CisgICAgQ0dSZWN0IGlubGluZUZyYW1lID0gX2FuaW1hdGluZ0luID8gX2luaXRpYWxGcmFtZSA6
IF9maW5hbEZyYW1lOworICAgIENHUmVjdCBmdWxsc2NyZWVuRnJhbWUgPSBfYW5pbWF0aW5nSW4g
PyBfZmluYWxGcmFtZSA6IF9pbml0aWFsRnJhbWU7CisgICAgX2FuaW1hdGluZ1ZpZXcgPSBfYW5p
bWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsKKworICAgIENHUmVjdCBib3VuZHNSZWN0ID0g
bGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KEZsb2F0UmVjdChpbmxpbmVGcmFt
ZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGZ1bGxzY3JlZW5GcmFtZSk7CisgICAgYm91bmRzUmVj
dC5vcmlnaW4gPSBDR1BvaW50WmVybzsKKworICAgIF9pbml0aWFsTWFza1ZpZXdCb3VuZHMgPSBf
YW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0IDogW19hbmltYXRpbmdWaWV3IGJvdW5kc107CisgICAg
X2luaXRpYWxNYXNrVmlld0NlbnRlciA9IENHUG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW19hbmlt
YXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFtfYW5pbWF0aW5nVmlldyBib3VuZHNd
KSk7CisgICAgX2ZpbmFsTWFza1ZpZXdCb3VuZHMgPSBfYW5pbWF0aW5nSW4gPyBbX2FuaW1hdGlu
Z1ZpZXcgYm91bmRzXSA6IGJvdW5kc1JlY3Q7CisgICAgX2ZpbmFsTWFza1ZpZXdDZW50ZXIgPSBD
R1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFtfYW5pbWF0aW5nVmlldyBib3VuZHNdKSwgQ0dSZWN0
R2V0TWlkWShbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpOworCisgICAgRmxvYXRSZWN0IHNjYWxl
UmVjdCA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fyb3VuZFJlY3QoRmxvYXRSZWN0KGZ1
bGxzY3JlZW5GcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGlubGluZUZyYW1lKTsKKyAgICBD
R0FmZmluZVRyYW5zZm9ybSBzY2FsZVRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNj
YWxlKHNjYWxlUmVjdC53aWR0aCgpIC8gZnVsbHNjcmVlbkZyYW1lLnNpemUud2lkdGgsIHNjYWxl
UmVjdC5oZWlnaHQoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLmhlaWdodCk7CisgICAgQ0dBZmZp
bmVUcmFuc2Zvcm0gdHJhbnNsYXRlVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJh
bnNsYXRpb24oQ0dSZWN0R2V0TWlkWChpbmxpbmVGcmFtZSkgLSBDR1JlY3RHZXRNaWRYKGZ1bGxz
Y3JlZW5GcmFtZSksIENHUmVjdEdldE1pZFkoaW5saW5lRnJhbWUpIC0gQ0dSZWN0R2V0TWlkWShm
dWxsc2NyZWVuRnJhbWUpKTsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIGZpbmFsVHJhbnNmb3Jt
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2NhbGVUcmFuc2Zvcm0sIHRyYW5zbGF0ZVRyYW5z
Zm9ybSk7CisgICAgX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtID0gX2FuaW1hdGluZ0lu
ID8gZmluYWxUcmFuc2Zvcm0gOiBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIF9maW5h
bEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0gPSBfYW5pbWF0aW5nSW4gPyBDR0FmZmluZVRyYW5zZm9y
bUlkZW50aXR5IDogZmluYWxUcmFuc2Zvcm07CisKKyAgICBfaW5pdGlhbEJhY2tncm91bmRBbHBo
YSA9IF9hbmltYXRpbmdJbiA/IDAgOiAxOworICAgIF9maW5hbEJhY2tncm91bmRBbHBoYSA9IF9h
bmltYXRpbmdJbiA/IDEgOiAwOworfQorCistICh2b2lkKWFuaW1hdGVUcmFuc2l0aW9uOihpZDxV
SVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Cit7
CisgICAgW3NlbGYgY29uZmlndXJlSW5pdGlhbEFuZEZpbmFsU3RhdGVzRm9yVHJhbnNpdGlvbjp0
cmFuc2l0aW9uQ29udGV4dF07CisKKyAgICBfbWFza1ZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFs
bG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3Ig
YmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRzOl9pbml0aWFsTWFza1ZpZXdC
b3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0aWFsTWFza1ZpZXdDZW50ZXJd
OworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFza1ZpZXcuZ2V0KCldOworICAg
IFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtXTsKKyAgICAKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcgPSBbdHJhbnNpdGlvbkNvbnRl
eHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcgYWRkU3VidmlldzpfYW5pbWF0
aW5nVmlldy5nZXQoKV07CisKKyAgICBVSVdpbmRvdyAqd2luZG93ID0gY29udGFpbmVyVmlldy53
aW5kb3c7CisgICAgd2luZG93LmJhY2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGNvbG9yV2l0aFdo
aXRlOjAgYWxwaGE6X2luaXRpYWxCYWNrZ3JvdW5kQWxwaGFdOworCisgICAgW1VJVmlldyBhbmlt
YXRlV2l0aER1cmF0aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlvbjp0cmFuc2l0aW9uQ29udGV4
dF0gZGVsYXk6MCBvcHRpb25zOlVJVmlld0FuaW1hdGlvbk9wdGlvbkN1cnZlRWFzZUluT3V0IGFu
aW1hdGlvbnM6XnsKKyAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBlcmNlbnQ6MV07CisgICAgfSBj
b21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCkgeworICAgICAgICBbc2VsZiBhbmltYXRpb25FbmRl
ZDohW3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRpb25XYXNDYW5jZWxsZWRdXTsKKyAgICAgICAg
W3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjohW3RyYW5zaXRpb25Db250ZXh0
IHRyYW5zaXRpb25XYXNDYW5jZWxsZWRdXTsKKyAgICB9XTsKK30KKworLSAodm9pZClhbmltYXRp
b25FbmRlZDooQk9PTCl0cmFuc2l0aW9uQ29tcGxldGVkCit7CisgICAgaWYgKChbc2VsZiBpc0Fu
aW1hdGluZ0luXSAmJiAhdHJhbnNpdGlvbkNvbXBsZXRlZCkgfHwgKCFbc2VsZiBpc0FuaW1hdGlu
Z0luXSAmJiB0cmFuc2l0aW9uQ29tcGxldGVkKSkKKyAgICAgICAgW19hbmltYXRpbmdWaWV3IHJl
bW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW19hbmltYXRpbmdWaWV3IHNldE1hc2tWaWV3Om5p
bF07CisgICAgX21hc2tWaWV3ID0gbmlsOworICAgIF9hbmltYXRpbmdWaWV3ID0gbmlsOworfQor
CistICh2b2lkKXN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOihpZCA8VUlWaWV3Q29udHJvbGxl
ckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0aW9uQ29udGV4dAoreworICAgIFtzZWxmIGNv
bmZpZ3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0ZvclRyYW5zaXRpb246dHJhbnNpdGlvbkNvbnRl
eHRdOworCisgICAgX21hc2tWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdF0pOwor
ICAgIFtfbWFza1ZpZXcgc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGJsYWNrQ29sb3JdXTsK
KyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpfaW5pdGlhbE1hc2tWaWV3Qm91bmRzXTsKKyAgICBb
X21hc2tWaWV3IHNldENlbnRlcjpfaW5pdGlhbE1hc2tWaWV3Q2VudGVyXTsKKyAgICBbX2FuaW1h
dGluZ1ZpZXcgc2V0TWFza1ZpZXc6X21hc2tWaWV3LmdldCgpXTsKKyAgICBbX2FuaW1hdGluZ1Zp
ZXcgc2V0VHJhbnNmb3JtOl9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybV07CisKKyAgICBV
SVZpZXcgKmNvbnRhaW5lclZpZXcgPSBbdHJhbnNpdGlvbkNvbnRleHQgY29udGFpbmVyVmlld107
CisgICAgW2NvbnRhaW5lclZpZXcgYWRkU3VidmlldzpfYW5pbWF0aW5nVmlldy5nZXQoKV07Cit9
CisKKy0gKHZvaWQpdXBkYXRlV2l0aFBlcmNlbnQ6KENHRmxvYXQpcGVyY2VudAoreworICAgIENH
QWZmaW5lVHJhbnNmb3JtIHBlcmNlbnRUcmFuc2Zvcm0gPSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdU
cmFuc2Zvcm07CisgICAgcGVyY2VudFRyYW5zZm9ybS5hICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5p
bWF0aW5nVmlld1RyYW5zZm9ybS5hIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmEp
OworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYiArPSBwZXJjZW50ICogKF9maW5hbEFuaW1hdGluZ1Zp
ZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5iKTsKKyAgICBw
ZXJjZW50VHJhbnNmb3JtLmMgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtLmMgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYyk7CisgICAgcGVyY2VudFRy
YW5zZm9ybS5kICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5kIC0g
X2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0u
dHggKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4IC0gX2luaXRp
YWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4KTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLnR5ICs9
IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS50eSAtIF9pbml0aWFsQW5p
bWF0aW5nVmlld1RyYW5zZm9ybS50eSk7CisgICAgW19hbmltYXRpbmdWaWV3IHNldFRyYW5zZm9y
bTpwZXJjZW50VHJhbnNmb3JtXTsKKworICAgIENHUmVjdCBwZXJjZW50Qm91bmRzID0gX2luaXRp
YWxNYXNrVmlld0JvdW5kczsKKyAgICBwZXJjZW50Qm91bmRzLm9yaWdpbi54ICs9IHBlcmNlbnQg
KiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnggLSBfaW5pdGlhbE1hc2tWaWV3Qm91bmRz
Lm9yaWdpbi54KTsKKyAgICBwZXJjZW50Qm91bmRzLm9yaWdpbi55ICs9IHBlcmNlbnQgKiAoX2Zp
bmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnkgLSBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzLm9yaWdp
bi55KTsKKyAgICBwZXJjZW50Qm91bmRzLnNpemUud2lkdGggKz0gcGVyY2VudCAqIChfZmluYWxN
YXNrVmlld0JvdW5kcy5zaXplLndpZHRoIC0gX2luaXRpYWxNYXNrVmlld0JvdW5kcy5zaXplLndp
ZHRoKTsKKyAgICBwZXJjZW50Qm91bmRzLnNpemUuaGVpZ2h0ICs9IHBlcmNlbnQgKiAoX2ZpbmFs
TWFza1ZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQgLSBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzLnNpemUu
aGVpZ2h0KTsKKyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpwZXJjZW50Qm91bmRzXTsKKworICAg
IENHUG9pbnQgcGVyY2VudENlbnRlciA9IF9pbml0aWFsTWFza1ZpZXdDZW50ZXI7CisgICAgcGVy
Y2VudENlbnRlci54ICs9IHBlcmNlbnQgKiAoX2ZpbmFsTWFza1ZpZXdDZW50ZXIueCAtIF9maW5h
bE1hc2tWaWV3Q2VudGVyLngpOworICAgIHBlcmNlbnRDZW50ZXIueSArPSBwZXJjZW50ICogKF9m
aW5hbE1hc2tWaWV3Q2VudGVyLnkgLSBfZmluYWxNYXNrVmlld0NlbnRlci55KTsKKyAgICBbX21h
c2tWaWV3IHNldENlbnRlcjpwZXJjZW50Q2VudGVyXTsKKworICAgIFVJV2luZG93ICp3aW5kb3cg
PSBbX2FuaW1hdGluZ1ZpZXcgd2luZG93XTsKKyAgICB3aW5kb3cuYmFja2dyb3VuZENvbG9yID0g
W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlhbEJhY2tncm91bmRBbHBoYSAr
IHBlcmNlbnQgKiAoX2ZpbmFsQmFja2dyb3VuZEFscGhhIC0gX2luaXRpYWxCYWNrZ3JvdW5kQWxw
aGEpXTsKK30KKworLSAodm9pZCl1cGRhdGVXaXRoUGVyY2VudDooQ0dGbG9hdClwZXJjZW50IHRy
YW5zbGF0aW9uOihDR1NpemUpdHJhbnNsYXRpb24gYW5jaG9yOihDR1BvaW50KWFuY2hvcgorewor
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHBlcmNlbnRUcmFuc2Zvcm0gPSBfaW5pdGlhbEFuaW1hdGlu
Z1ZpZXdUcmFuc2Zvcm07CisgICAgcGVyY2VudFRyYW5zZm9ybS5hICs9IHBlcmNlbnQgKiAoX2Zp
bmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtLmEpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYiArPSBwZXJjZW50ICogKF9maW5hbEFuaW1h
dGluZ1ZpZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5iKTsK
KyAgICBwZXJjZW50VHJhbnNmb3JtLmMgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3
VHJhbnNmb3JtLmMgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYyk7CisgICAgcGVy
Y2VudFRyYW5zZm9ybS5kICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9y
bS5kIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQpOworICAgIHBlcmNlbnRUcmFu
c2Zvcm0udHggKz0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4ICsgdHJhbnNsYXRp
b24ud2lkdGg7CisgICAgcGVyY2VudFRyYW5zZm9ybS50eSArPSBfaW5pdGlhbEFuaW1hdGluZ1Zp
ZXdUcmFuc2Zvcm0udHkgKyB0cmFuc2xhdGlvbi5oZWlnaHQ7CisgICAgW19hbmltYXRpbmdWaWV3
IHNldFRyYW5zZm9ybTpwZXJjZW50VHJhbnNmb3JtXTsKKworICAgIFVJV2luZG93ICp3aW5kb3cg
PSBbX2FuaW1hdGluZ1ZpZXcgd2luZG93XTsKKyAgICB3aW5kb3cuYmFja2dyb3VuZENvbG9yID0g
W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBoYTpfaW5pdGlhbEJhY2tncm91bmRBbHBoYSAr
IHBlcmNlbnQgKiAoX2ZpbmFsQmFja2dyb3VuZEFscGhhIC0gX2luaXRpYWxCYWNrZ3JvdW5kQWxw
aGEpXTsKK30KKworLSh2b2lkKWVuZDooQk9PTCljYW5jZWxsZWQgeworICAgIGlmIChjYW5jZWxs
ZWQpIHsKKyAgICAgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOltzZWxmIHRyYW5zaXRp
b25EdXJhdGlvbjpfY29udGV4dC5nZXQoKV0gYW5pbWF0aW9uczpeeworICAgICAgICAgICAgW3Nl
bGYgdXBkYXRlV2l0aFBlcmNlbnQ6MF07CisgICAgICAgIH0gY29tcGxldGlvbjpeKEJPT0wgZmlu
aXNoZWQpIHsKKyAgICAgICAgICAgIFtfY29udGV4dCBjYW5jZWxJbnRlcmFjdGl2ZVRyYW5zaXRp
b25dOworICAgICAgICAgICAgW19jb250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjpOT107CisgICAg
ICAgIH1dOworICAgIH0gZWxzZSB7CisgICAgICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlv
bjpbc2VsZiB0cmFuc2l0aW9uRHVyYXRpb246X2NvbnRleHQuZ2V0KCldIGFuaW1hdGlvbnM6XnsK
KyAgICAgICAgICAgIFtzZWxmIHVwZGF0ZVdpdGhQZXJjZW50OjFdOworICAgICAgICB9IGNvbXBs
ZXRpb246XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgICAgICBbX2NvbnRleHQgZmluaXNoSW50
ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgICAgIFtfY29udGV4dCBjb21wbGV0ZVRyYW5z
aXRpb246WUVTXTsKKyAgICAgICAgfV07CisgICAgfQorfQorCitAZW5kCisKKyNwcmFnbWEgbWFy
ayAtCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIDogTlNP
YmplY3Q8VUlWaWV3Q29udHJvbGxlckludGVyYWN0aXZlVHJhbnNpdGlvbmluZz4KKy0gKGlkKWlu
aXRXaXRoQW5pbWF0b3I6KFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgKilhbmltYXRv
ciBhbmNob3I6KENHUG9pbnQpcG9pbnQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxT
Y3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24geworICAgIFJldGFpblB0cjxXS0Z1bGxzY3JlZW5B
bmltYXRpb25Db250cm9sbGVyPiBfYW5pbWF0b3I7CisgICAgUmV0YWluUHRyPGlkPFVJVmlld0Nv
bnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0OworICAgIENHUG9pbnQgX2Fu
Y2hvcjsKK30KKworLSAoaWQpaW5pdFdpdGhBbmltYXRvcjooV0tGdWxsc2NyZWVuQW5pbWF0aW9u
Q29udHJvbGxlciAqKWFuaW1hdG9yIGFuY2hvcjooQ0dQb2ludClwb2ludAoreworICAgIHNlbGYg
PSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX2FuaW1hdG9yID0gYW5pbWF0b3I7CisgICAgX2FuY2hvciA9IHBvaW50OworICAgIHJldHVy
biBzZWxmOworfQorCistIChCT09MKXdhbnRzSW50ZXJhY3RpdmVTdGFydAoreworICAgIHJldHVy
biBZRVM7Cit9CisKKy0gKHZvaWQpc3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246KGlkIDxVSVZp
ZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Cit7Cisg
ICAgX2NvbnRleHQgPSB0cmFuc2l0aW9uQ29udGV4dDsKKyAgICBbX2FuaW1hdG9yIHN0YXJ0SW50
ZXJhY3RpdmVUcmFuc2l0aW9uOnRyYW5zaXRpb25Db250ZXh0XTsKK30KKworLSAodm9pZCl1cGRh
dGVJbnRlcmFjdGl2ZVRyYW5zaXRpb246KENHRmxvYXQpcGVyY2VudENvbXBsZXRlIHdpdGhUcmFu
c2xhdGlvbjooQ0dTaXplKXRyYW5zbGF0aW9uCit7CisgICAgW19hbmltYXRvciB1cGRhdGVXaXRo
UGVyY2VudDpwZXJjZW50Q29tcGxldGUgdHJhbnNsYXRpb246dHJhbnNsYXRpb24gYW5jaG9yOl9h
bmNob3JdOworICAgIFtfY29udGV4dCB1cGRhdGVJbnRlcmFjdGl2ZVRyYW5zaXRpb246cGVyY2Vu
dENvbXBsZXRlXTsKK30KKworLSAodm9pZCljYW5jZWxJbnRlcmFjdGl2ZVRyYW5zaXRpb24KK3sK
KyAgICBbX2FuaW1hdG9yIGVuZDpZRVNdOworfQorCistICh2b2lkKWZpbmlzaEludGVyYWN0aXZl
VHJhbnNpdGlvbgoreworICAgIFtfYW5pbWF0b3IgZW5kOk5PXTsKK30KK0BlbmQKKworI3ByYWdt
YSBtYXJrIC0KKworQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyICgpIDxV
SUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGU+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKKyAgICBXS1dlYlZpZXcgKl93ZWJWaWV3OyAvLyBD
YW5ub3QgYmUgcmV0YWluZWQsIHNlZSA8cmRhcjovL3Byb2JsZW0vMTQ4ODQ2NjY+LgorICAgIFJl
dGFpblB0cjxVSVZpZXc+IF93ZWJWaWV3UGxhY2Vob2xkZXI7CisKKyAgICBGdWxsU2NyZWVuU3Rh
dGUgX2Z1bGxTY3JlZW5TdGF0ZTsKKyAgICBXS1dlYlZpZXdTdGF0ZSBfdmlld1N0YXRlOworCisg
ICAgUmV0YWluUHRyPFVJV2luZG93PiBfd2luZG93OworICAgIFJldGFpblB0cjxVSVZpZXdDb250
cm9sbGVyPiBfcm9vdFZpZXdDb250cm9sbGVyOworCisgICAgUmVmUHRyPFdlYktpdDo6Vm9pZENh
bGxiYWNrPiBfcmVwYWludENhbGxiYWNrOworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVy
PiBfdmlld0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb247CisgICAgUmV0YWluUHRyPFdLRnVsbFNj
cmVlblZpZXdDb250cm9sbGVyPiBfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyOworICAgIFJldGFp
blB0cjxVSVN3aXBlR2VzdHVyZVJlY29nbml6ZXI+IF9zdGFydERpc21pc3NHZXN0dXJlUmVjb2du
aXplcjsKKyAgICBSZXRhaW5QdHI8VUlQYW5HZXN0dXJlUmVjb2duaXplcj4gX2ludGVyYWN0aXZl
RGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24+IF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0
b3I7CisKKyAgICBDR1JlY3QgX2luaXRpYWxGcmFtZTsKKyAgICBDR1JlY3QgX2ZpbmFsRnJhbWU7
CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IF9FVk9yZ2FuaXphdGlvbk5hbWU7CisgICAgQk9P
TCBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZDsKKyAgICBCT09MIF9pbkludGVyYWN0aXZlRGlz
bWlzczsKKworICAgIFJldGFpblB0cjxpZD4gX25vdGlmaWNhdGlvbkxpc3RlbmVyOworfQorCisj
cHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEluaXRpYWxpemF0aW9uCistIChpZClpbml0V2l0
aFdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBpZiAoIVtzdXBlciBpbml0XSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfd2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFBy
ZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmXTsKKyAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGZdOworCisgICAgW3N1
cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEFjY2Vzc29y
cworCistIChCT09MKWlzRnVsbFNjcmVlbgoreworICAgIHJldHVybiBfZnVsbFNjcmVlblN0YXRl
ID09IFdhaXRpbmdUb0VudGVyRnVsbFNjcmVlbgorICAgICAgICB8fCBfZnVsbFNjcmVlblN0YXRl
ID09IEVudGVyaW5nRnVsbFNjcmVlbgorICAgICAgICB8fCBfZnVsbFNjcmVlblN0YXRlID09IElu
RnVsbFNjcmVlbjsKK30KKworLSAoV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgKil3
ZWJWaWV3UGxhY2Vob2xkZXIKK3sKKyAgICByZXR1cm4gbmlsOworfQorCisjcHJhZ21hIG1hcmsg
LQorI3ByYWdtYSBtYXJrIEV4dGVybmFsIEludGVyZmFjZQorCistICh2b2lkKWVudGVyRnVsbFNj
cmVlbgoreworICAgIGlmIChbc2VsZiBpc0Z1bGxTY3JlZW5dKQorICAgICAgICByZXR1cm47CisK
KyAgICBbc2VsZiBfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFtZV07CisKKyAgICBfZnVsbFNj
cmVlblN0YXRlID0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuOworCisgICAgX3dpbmRvdyA9IGFk
b3B0TlMoW1tVSVdpbmRvdyBhbGxvY10gaW5pdF0pOworICAgIFtfd2luZG93IHNldEJhY2tncm91
bmRDb2xvcjpbVUlDb2xvciBjbGVhckNvbG9yXV07CisgICAgW193aW5kb3cgc2V0V2luZG93TGV2
ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbCAtIDFdOworICAgIFtfd2luZG93IHNldEhpZGRlbjpOT107
CisKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyID0gW1tVSVZpZXdDb250cm9sbGVyIGFsbG9jXSBp
bml0XTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcgPSBbW1tVSVZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6X3dpbmRvdy5nZXQoKS5ib3VuZHNdIGF1dG9yZWxlYXNlXTsKKyAg
ICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYmFja2dyb3VuZENvbG9yID0gW1VJQ29s
b3IgY2xlYXJDb2xvcl07CisgICAgX3Jvb3RWaWV3Q29udHJvbGxlci5nZXQoKS52aWV3LmF1dG9y
ZXNpemluZ01hc2sgPSAoVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1
dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KTsKKyAgICBbX3Jvb3RWaWV3Q29udHJvbGxlciBzZXRN
b2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9kYWxQcmVzZW50YXRpb25DdXN0b21dOworICAgIFtf
cm9vdFZpZXdDb250cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsKKworICAg
IF93aW5kb3cuZ2V0KCkucm9vdFZpZXdDb250cm9sbGVyID0gX3Jvb3RWaWV3Q29udHJvbGxlci5n
ZXQoKTsKKworICAgIF9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpfd2ViVmlld10pOwor
ICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uU3R5bGU6
VUlNb2RhbFByZXNlbnRhdGlvbkN1c3RvbV07CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xs
ZXIgc2V0VHJhbnNpdGlvbmluZ0RlbGVnYXRlOnNlbGZdOworICAgIFtfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uQ2FwdHVyZXNTdGF0dXNCYXJBcHBlYXJhbmNl
OllFU107CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0VGFyZ2V0OnNlbGZdOwor
ICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldEFjdGlvbjpAc2VsZWN0b3IocmVxdWVz
dEV4aXRGdWxsU2NyZWVuKV07CisgICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEZyYW1lOltbX3Jvb3RWaWV3Q29udHJvbGxlciB2aWV3XSBib3VuZHNdXTsKKyAgICBbc2Vs
ZiBfdXBkYXRlTG9jYXRpb25JbmZvXTsKKworICAgIF9zdGFydERpc21pc3NHZXN0dXJlUmVjb2du
aXplciA9IGFkb3B0TlMoW1tVSVN3aXBlR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdICBpbml0V2l0
aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3N0YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNo
YW5nZWQ6KV0pOworICAgIFtfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdh
dGU6c2VsZl07CisgICAgW19zdGFydERpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXRDYW5jZWxz
VG91Y2hlc0luVmlldzpZRVNdOworICAgIFtfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIg
c2V0TnVtYmVyT2ZUb3VjaGVzUmVxdWlyZWQ6MV07CisgICAgW19zdGFydERpc21pc3NHZXN0dXJl
UmVjb2duaXplciBzZXREaXJlY3Rpb246VUlTd2lwZUdlc3R1cmVSZWNvZ25pemVyRGlyZWN0aW9u
RG93bl07CisgICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHZpZXddIGFkZEdlc3R1cmVS
ZWNvZ25pemVyOl9zdGFydERpc21pc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CisKKyAgICBf
aW50ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlQYW5HZXN0
dXJlUmVjb2duaXplciBhbGxvY10gIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rv
cihfaW50ZXJhY3RpdmVEaXNtaXNzQ2hhbmdlZDopXSk7CisgICAgW19pbnRlcmFjdGl2ZURpc21p
c3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX2ludGVyYWN0aXZl
RGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHNldENhbmNlbHNUb3VjaGVzSW5WaWV3Ok5PXTsKKyAg
ICBbW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld10gYWRkR2VzdHVyZVJlY29nbml6ZXI6
X2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKworICAgIFtzZWxm
IF9tYW5hZ2VyXS0+c2F2ZVNjcm9sbFBvc2l0aW9uKCk7CisKKyAgICBbX3dlYlZpZXcgX3BhZ2Vd
LT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKHRydWUpOworCisgICAgX3ZpZXdTdGF0ZS5z
dG9yZShfd2ViVmlldyk7CisKKyAgICBfd2ViVmlld1BsYWNlaG9sZGVyID0gYWRvcHROUyhbW1VJ
VmlldyBhbGxvY10gaW5pdF0pOworICAgIFtbX3dlYlZpZXdQbGFjZWhvbGRlciBsYXllcl0gc2V0
TmFtZTpAIkZ1bGxzY3JlZW4gUGxhY2Vob2xkZXIgVmlldyJdOworCisgICAgV0tTbmFwc2hvdENv
bmZpZ3VyYXRpb24qIGNvbmZpZyA9IG5pbDsKKyAgICBbX3dlYlZpZXcgdGFrZVNuYXBzaG90V2l0
aENvbmZpZ3VyYXRpb246Y29uZmlnIGNvbXBsZXRpb25IYW5kbGVyOl4oVUlJbWFnZSAqIHNuYXBz
aG90SW1hZ2UsIE5TRXJyb3IgKiBlcnJvcikgeworICAgICAgICBpZiAoIVtfd2ViVmlldyBfcGFn
ZV0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5d
OworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgICAg
ICAKKyAgICAgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIGxheWVyXSBzZXRDb250ZW50czooaWQp
W3NuYXBzaG90SW1hZ2UgQ0dJbWFnZV1dOworICAgICAgICByZXBsYWNlVmlld1dpdGhWaWV3KF93
ZWJWaWV3LCBfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpKTsKKworICAgICAgICBXS1dlYlZpZXdT
dGF0ZSgpLmFwcGx5VG8oX3dlYlZpZXcpOworICAgICAgICAKKyAgICAgICAgW193ZWJWaWV3IHNl
dEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZp
ZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOworICAgICAgICBbX3dlYlZpZXcgc2V0RnJh
bWU6W193aW5kb3cgYm91bmRzXV07CisgICAgICAgIFtfd2luZG93IGluc2VydFN1YnZpZXc6X3dl
YlZpZXcgYXRJbmRleDowXTsKKyAgICAgICAgW193ZWJWaWV3IHNldE5lZWRzTGF5b3V0XTsKKyAg
ICAgICAgW193ZWJWaWV3IGxheW91dElmTmVlZGVkXTsKKyAgICAgICAgCisgICAgICAgIFtzZWxm
IF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbih0cnVlKTsKKworICAgICAgICBfcmVw
YWludENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoW3Byb3RlY3RlZFNlbGYgPSByZXRh
aW5QdHIoc2VsZiksIHNlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAg
ICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoYXV0byog
bWFuYWdlciA9IFtwcm90ZWN0ZWRTZWxmIF9tYW5hZ2VyXSkKKyAgICAgICAgICAgICAgICBtYW5h
Z2VyLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CisKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwor
ICAgICAgICB9KTsKKyAgICAgICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBh
aW50Q2FsbGJhY2suY29weVJlZigpKTsKKworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRd
OworICAgIH1dOworfQorCistICh2b2lkKWJlZ2FuRW50ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxG
cmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZQor
eworICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IFdhaXRpbmdUb0VudGVyRnVsbFNjcmVlbikK
KyAgICAgICAgcmV0dXJuOworICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBFbnRlcmluZ0Z1bGxTY3Jl
ZW47CisKKyAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOworICAgIF9maW5hbEZyYW1l
ID0gZmluYWxGcmFtZTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFu
c2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworCisgICAgW193ZWJWaWV3IHJlbW92ZUZy
b21TdXBlcnZpZXddOworCisgICAgW193aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZl
bE5vcm1hbF07CisgICAgW193aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOworICAgIFtfZnVsbHNj
cmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRkZW46Tk9dOworICAgIFtf
ZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNob3dVSV07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOworCisgICAgW19yb290Vmlld0NvbnRyb2xsZXIgcHJlc2VudFZpZXdDb250cm9sbGVy
Ol9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246
XnsKKyAgICAgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEluRnVsbFNjcmVlbjsKKworICAgICAgICBh
dXRvKiBwYWdlID0gW193ZWJWaWV3IF9wYWdlXTsKKyAgICAgICAgYXV0byogbWFuYWdlciA9IHNl
bGYuX21hbmFnZXI7CisgICAgICAgIGlmIChwYWdlICYmIG1hbmFnZXIpIHsKKyAgICAgICAgICAg
IG1hbmFnZXItPmRpZEVudGVyRnVsbFNjcmVlbigpOworICAgICAgICAgICAgbWFuYWdlci0+c2V0
QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5zZXRTdXBwcmVz
c1Zpc2liaWxpdHlVcGRhdGVzKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBbc2VsZiBfZXhpdEZ1
bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAgfV07Cit9CisKKy0gKHZvaWQpcmVxdWVzdEV4aXRG
dWxsU2NyZWVuCit7CisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKSB7Cisg
ICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgW3NlbGYgX2V4aXRGdWxs
c2NyZWVuSW1tZWRpYXRlbHldOworfQorCistICh2b2lkKWV4aXRGdWxsU2NyZWVuCit7CisgICAg
aWYgKCFzZWxmLmlzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIF9mdWxsU2NyZWVu
U3RhdGUgPSBXYWl0aW5nVG9FeGl0RnVsbFNjcmVlbjsKKworICAgIGlmIChhdXRvKiBtYW5hZ2Vy
ID0gc2VsZi5fbWFuYWdlcikgeworICAgICAgICBtYW5hZ2VyLT5zZXRBbmltYXRpbmdGdWxsU2Ny
ZWVuKHRydWUpOworICAgICAgICBtYW5hZ2VyLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFtzZWxm
IF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKK30KKworLSAodm9pZCliZWdhbkV4aXRGdWxs
U2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihD
R1JlY3QpZmluYWxGcmFtZQoreworICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IFdhaXRpbmdU
b0V4aXRGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9
IEV4aXRpbmdGdWxsU2NyZWVuOworCisgICAgX2luaXRpYWxGcmFtZSA9IGluaXRpYWxGcmFtZTsK
KyAgICBfZmluYWxGcmFtZSA9IGZpbmFsRnJhbWU7CisgICAgCisgICAgW193ZWJWaWV3IF9wYWdl
XS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyh0cnVlKTsKKworICAgIFtfZnVsbHNjcmVl
blZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRkZW46Tk9dOworCisgICAgaWYg
KF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IpIHsKKyAgICAgICAgW19p
bnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgZmluaXNoSW50ZXJhY3RpdmVU
cmFuc2l0aW9uXTsKKyAgICAgICAgX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGlu
YXRvciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtfZnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9u
Ol57CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dOworICAgIH1dOworfQor
CistICh2b2lkKV9jb21wbGV0ZWRFeGl0RnVsbFNjcmVlbgoreworICAgIGlmIChfZnVsbFNjcmVl
blN0YXRlICE9IEV4aXRpbmdGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgX2Z1bGxT
Y3JlZW5TdGF0ZSA9IE5vdEluRnVsbFNjcmVlbjsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworCisgICAgW1tf
d2ViVmlld1BsYWNlaG9sZGVyIHN1cGVydmlld10gaW5zZXJ0U3Vidmlldzpfd2ViVmlldyBiZWxv
d1N1YnZpZXc6X3dlYlZpZXdQbGFjZWhvbGRlci5nZXQoKV07CisgICAgW193ZWJWaWV3IHNldEZy
YW1lOltfd2ViVmlld1BsYWNlaG9sZGVyIGZyYW1lXV07CisgICAgW193ZWJWaWV3IHNldEF1dG9y
ZXNpemluZ01hc2s6W193ZWJWaWV3UGxhY2Vob2xkZXIgYXV0b3Jlc2l6aW5nTWFza11dOworCisg
ICAgW1tfd2ViVmlldyB3aW5kb3ddIG1ha2VLZXlBbmRWaXNpYmxlXTsKKworICAgIF92aWV3U3Rh
dGUuYXBwbHlUbyhfd2ViVmlldyk7CisKKyAgICBbX3dlYlZpZXcgc2V0TmVlZHNMYXlvdXRdOwor
ICAgIFtfd2ViVmlldyBsYXlvdXRJZk5lZWRlZF07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBjb21t
aXRdOworCisgICAgW193aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgX3dpbmRvdyA9IG5pbDsK
KworICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdlcikgeworICAgICAgICBtYW5h
Z2VyLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKKyAgICAgICAgbWFuYWdlci0+ZGlk
RXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB9CisKKyAgICBpZiAoX3JlcGFpbnRDYWxsYmFjaykgewor
ICAgICAgICBfcmVwYWludENhbGxiYWNrLT5pbnZhbGlkYXRlKFdlYktpdDo6Q2FsbGJhY2tCYXNl
OjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAgIEFTU0VSVCghX3JlcGFpbnRD
YWxsYmFjayk7CisgICAgfQorCisgICAgX3JlcGFpbnRDYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6
Y3JlYXRlKFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpLCBzZWxmXShXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IG51bGxwdHI7
CisgICAgICAgIFtfd2ViVmlld1BsYWNlaG9sZGVyIHJlbW92ZUZyb21TdXBlcnZpZXddOworCisg
ICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKGZhbHNl
KTsKKyAgICB9KTsKKworICAgIGlmIChhdXRvKiBwYWdlID0gW193ZWJWaWV3IF9wYWdlXSkKKyAg
ICAgICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2suY29w
eVJlZigpKTsKKyAgICBlbHNlCisgICAgICAgIF9yZXBhaW50Q2FsbGJhY2stPnBlcmZvcm1DYWxs
YmFjaygpOworCisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0UHJlZmVyc1N0YXR1
c0JhckhpZGRlbjpZRVNdOworfQorCistICh2b2lkKWNsb3NlCit7CisgICAgW3NlbGYgX2V4aXRG
dWxsc2NyZWVuSW1tZWRpYXRlbHldOworICAgIF93ZWJWaWV3ID0gbmlsOworfQorCistICh2b2lk
KXdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxzY3JlZW4KK3sKKyAgICBp
ZiAoX2Z1bGxTY3JlZW5TdGF0ZSA9PSBJbkZ1bGxTY3JlZW4gJiYgX3dlYlZpZXcud2luZG93ICE9
IF93aW5kb3cuZ2V0KCkpCisgICAgICAgIFtzZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5
XTsKK30KKworLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZQoreworICAgIGlm
IChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyKQorICAgICAgICBbX2Z1bGxzY3JlZW5WaWV3Q29u
dHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV07Cit9CisKKyNwcmFnbWEgbWFy
ayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlCisKKy0gKEJPT0wp
Z2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXpl
ciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlH
ZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4g
WUVTOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIFVJVmlld0NvbnRyb2xsZXJU
cmFuc2l0aW9uaW5nRGVsZWdhdGUKKworLSAoaWQ8VUlWaWV3Q29udHJvbGxlckFuaW1hdGVkVHJh
bnNpdGlvbmluZz4pYW5pbWF0aW9uQ29udHJvbGxlckZvclByZXNlbnRlZENvbnRyb2xsZXI6KFVJ
Vmlld0NvbnRyb2xsZXIgKilwcmVzZW50ZWQgcHJlc2VudGluZ0NvbnRyb2xsZXI6KFVJVmlld0Nv
bnRyb2xsZXIgKilwcmVzZW50aW5nIHNvdXJjZUNvbnRyb2xsZXI6KFVJVmlld0NvbnRyb2xsZXIg
Kilzb3VyY2UKK3sKKyAgICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxl
cj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0Vmll
d0NvbnRyb2xsZXI6cHJlc2VudGVkXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJbml0
aWFsRnJhbWU6X2luaXRpYWxGcmFtZV07CisgICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0Rmlu
YWxGcmFtZTpfZmluYWxGcmFtZV07CisgICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0QW5pbWF0
aW5nSW46WUVTXTsKKyAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci5hdXRvcmVsZWFzZSgp
OworfQorCistIChpZDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nPilhbmlt
YXRpb25Db250cm9sbGVyRm9yRGlzbWlzc2VkQ29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAq
KWRpc21pc3NlZAoreworICAgIENHUmVjdCBpbml0aWFsRnJhbWUgPSBfaW5pdGlhbEZyYW1lOwor
ICAgIENHUmVjdCBmaW5hbEZyYW1lID0gX2ZpbmFsRnJhbWU7CisKKyAgICAvLyBCZWNhdXNlIHdl
J3JlIG5vdCBjYWxsaW5nICJyZXF1ZXN0RXhpdEZ1bGxzY3JlZW4oKSIgYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhbiBpbnRlcmFjdGl2ZSBhbmltYXRpb24sCisgICAgLy8gdGhlIF9pbml0aWFsRnJhbWUg
YW5kIF9maW5hbEZyYW1lIHZhbHVlcyBhcmUgbGVmdCBvdmVyIGZyb20gd2hlbiB3ZSBlbnRlcmVk
IGZ1bGxzY3JlZW4uCisgICAgaWYgKF9pbkludGVyYWN0aXZlRGlzbWlzcykKKyAgICAgICAgc3Rk
Ojpzd2FwKGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7CisKKyAgICBSZXRhaW5QdHI8V0tGdWxs
c2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlcj4gYW5pbWF0aW9uQ29udHJvbGxlciA9IGFkb3B0TlMo
W1tXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2Fu
aW1hdGlvbkNvbnRyb2xsZXIgc2V0Vmlld0NvbnRyb2xsZXI6ZGlzbWlzc2VkXTsKKyAgICBbYW5p
bWF0aW9uQ29udHJvbGxlciBzZXRJbml0aWFsRnJhbWU6aW5pdGlhbEZyYW1lXTsKKyAgICBbYW5p
bWF0aW9uQ29udHJvbGxlciBzZXRGaW5hbEZyYW1lOmZpbmFsRnJhbWVdOworICAgIFthbmltYXRp
b25Db250cm9sbGVyIHNldEFuaW1hdGluZ0luOk5PXTsKKyAgICByZXR1cm4gYW5pbWF0aW9uQ29u
dHJvbGxlci5hdXRvcmVsZWFzZSgpOworfQorCistIChpZDxVSVZpZXdDb250cm9sbGVySW50ZXJh
Y3RpdmVUcmFuc2l0aW9uaW5nPilpbnRlcmFjdGlvbkNvbnRyb2xsZXJGb3JEaXNtaXNzYWw6KGlk
PFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1hdG9yCit7CisgICAg
aWYgKCFfaW5JbnRlcmFjdGl2ZURpc21pc3MpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBp
ZiAoIVthbmltYXRvciBpc0tpbmRPZkNsYXNzOltXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9s
bGVyIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIV9pbnRlcmFjdGl2
ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IpCisgICAgICAgIF9pbnRlcmFjdGl2ZURpc21p
c3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgPSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVuSW50ZXJhY3Rp
dmVUcmFuc2l0aW9uIGFsbG9jXSBpbml0V2l0aEFuaW1hdG9yOihXS0Z1bGxzY3JlZW5BbmltYXRp
b25Db250cm9sbGVyICopYW5pbWF0b3IgYW5jaG9yOkNHUG9pbnRaZXJvXSk7CisKKyAgICByZXR1
cm4gX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvci5nZXQoKTsKK30KKwor
I3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJbnRlcm5hbCBJbnRlcmZhY2UKKworLSAodm9p
ZClfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseQoreworICAgIGlmICghW3NlbGYgaXNGdWxsU2Ny
ZWVuXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFn
ZXI7CisgICAgaWYgKG1hbmFnZXIpCisgICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVsbFNj
cmVlbigpOworICAgIFtzZWxmIGV4aXRGdWxsU2NyZWVuXTsKKyAgICBfZnVsbFNjcmVlblN0YXRl
ID0gRXhpdGluZ0Z1bGxTY3JlZW47CisgICAgW3NlbGYgX2NvbXBsZXRlZEV4aXRGdWxsU2NyZWVu
XTsKKyAgICByZXBsYWNlVmlld1dpdGhWaWV3KF93ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCksIF93
ZWJWaWV3KTsKKyAgICBpZiAoYXV0byogcGFnZSA9IFtfd2ViVmlldyBfcGFnZV0pCisgICAgICAg
IHBhZ2UtPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOworICAgIGlmIChtYW5h
Z2VyKSB7CisgICAgICAgIG1hbmFnZXItPmRpZEV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgIG1h
bmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOworICAgIH0KKyAgICBfd2ViVmll
d1BsYWNlaG9sZGVyID0gbmlsOworfQorCistICh2b2lkKV9pbnZhbGlkYXRlRVZPcmdhbml6YXRp
b25OYW1lCit7CisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IG5pbDsKKyAgICBfRVZPcmdhbml6
YXRpb25OYW1lSXNWYWxpZCA9IE5POworfQorCistIChCT09MKV9pc1NlY3VyZQoreworICAgIHJl
dHVybiBfd2ViVmlldy5oYXNPbmx5U2VjdXJlQ29udGVudDsKK30KKworLSAoU2VjVHJ1c3RSZWYp
X3NlcnZlclRydXN0Cit7CisgICAgcmV0dXJuIF93ZWJWaWV3LnNlcnZlclRydXN0OworfQorCist
IChOU1N0cmluZyAqKV9FVk9yZ2FuaXphdGlvbk5hbWUKK3sKKyAgICBpZiAoIXNlbGYuX2lzU2Vj
dXJlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgaWYgKF9FVk9yZ2FuaXphdGlvbk5hbWVJ
c1ZhbGlkKQorICAgICAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKKworICAg
IEFTU0VSVCghX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKSk7CisgICAgX0VWT3JnYW5pemF0aW9u
TmFtZUlzVmFsaWQgPSBZRVM7CisKKyAgICBTZWNUcnVzdFJlZiB0cnVzdCA9IFtzZWxmIF9zZXJ2
ZXJUcnVzdF07CisgICAgaWYgKCF0cnVzdCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5T
RGljdGlvbmFyeSAqaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAqKVNl
Y1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKKyAgICAvLyBJZiBTZWNUcnVzdENv
cHlJbmZvIHJldHVybmVkIE5VTEwgdGhlbiBpdCdzIGxpa2VseSB0aGF0IHRoZSBTZWNUcnVzdFJl
ZiBoYXMgbm90IGJlZW4gZXZhbHVhdGVkCisgICAgLy8gYW5kIHRoZSBvbmx5IHdheSB0byBnZXQg
dGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgaXMgdG8gY2FsbCBTZWNUcnVzdEV2YWx1YXRlIG91cnNl
bHZlcy4KKyAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KSB7CisgICAgICAgIE9TU3RhdHVzIGVyciA9
IFNlY1RydXN0RXZhbHVhdGUodHJ1c3QsIE5VTEwpOworICAgICAgICBpZiAoZXJyID09IG5vRXJy
KQorICAgICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAq
KVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKCFpbmZv
RGljdGlvbmFyeSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlkIGFnYWluc3Qgb3VyIGNlcnRp
ZmljYXRlIGNoYWluLgorICAgIGlkIGhhc0VWID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0ZW5kZWRWYWxpZGF0aW9uS2V5
XTsKKyAgICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gfHwgIVto
YXNFViBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gTWFrZSBzdXJl
IHRoYXQgd2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZlciBhbmQgaXQgaXMgc3RpbGwg
dmFsaWQuCisgICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2b2NhdGlvbktleV07CisgICAg
aWYgKCFbaXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSB8fCAhW2lz
Tm90UmV2b2tlZCBib29sVmFsdWVdKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX0VWT3Jn
YW5pemF0aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6KF9fYnJpZGdlIE5T
U3RyaW5nICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsKKyAgICByZXR1cm4gX0VWT3Jn
YW5pemF0aW9uTmFtZS5nZXQoKTsKK30KKworLSAodm9pZClfdXBkYXRlTG9jYXRpb25JbmZvCit7
CisgICAgTlNVUkwqIHVybCA9IF93ZWJWaWV3Ll9jb21taXR0ZWRVUkw7CisKKyAgICBOU1N0cmlu
ZyAqRVZPcmdhbml6YXRpb25OYW1lID0gW3NlbGYgX0VWT3JnYW5pemF0aW9uTmFtZV07CisgICAg
Qk9PTCBzaG93c0VWT3JnYW5pemF0aW9uTmFtZSA9IFtFVk9yZ2FuaXphdGlvbk5hbWUgbGVuZ3Ro
XSA+IDA7CisKKyAgICBOU1N0cmluZyAqZG9tYWluID0gbmlsOworCisgICAgaWYgKExpbmtQcmVz
ZW50YXRpb25MaWJyYXJ5KCkpCisgICAgICAgIGRvbWFpbiA9IFt1cmwgX2xwX3NpbXBsaWZpZWRE
aXNwbGF5U3RyaW5nXTsKKyAgICBlbHNlCisgICAgICAgIGRvbWFpbiA9IHVzZXJWaXNpYmxlU3Ry
aW5nKHVybCk7CisKKyAgICBOU1N0cmluZyAqdGV4dCA9IG5pbDsKKyAgICBpZiAoW1t1cmwgc2No
ZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiZGF0YSJdID09IE5TT3JkZXJlZFNhbWUpCisg
ICAgICAgIHRleHQgPSBAImRhdGE6IjsKKyAgICBlbHNlIGlmIChzaG93c0VWT3JnYW5pemF0aW9u
TmFtZSkKKyAgICAgICAgdGV4dCA9IEVWT3JnYW5pemF0aW9uTmFtZTsKKyAgICBlbHNlCisgICAg
ICAgIHRleHQgPSBkb21haW47CisKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRM
b2NhdGlvbjp0ZXh0XTsKK30KKworLSAoV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFn
ZXIKK3sKKyAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBbX3dlYlZpZXcgX3BhZ2VdLT5mdWxsU2NyZWVuTWFuYWdlcigpOworfQor
CistICh2b2lkKV9zdGFydFRvRGlzbWlzc0Z1bGxzY3JlZW5DaGFuZ2VkOihpZClzZW5kZXIKK3sK
KyAgICBfaW5JbnRlcmFjdGl2ZURpc21pc3MgPSB0cnVlOworICAgIFtfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57
CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBbc2VsZiBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dOworICAgICAgICBbX2Z1bGxz
Y3JlZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOllFU107CisgICAg
fV07Cit9CisKKy0gKHZvaWQpX2ludGVyYWN0aXZlRGlzbWlzc0NoYW5nZWQ6KGlkKXNlbmRlcgor
eworICAgIGlmICghX2luSW50ZXJhY3RpdmVEaXNtaXNzKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDR1BvaW50IHRyYW5zbGF0aW9uID0gW19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2du
aXplciB0cmFuc2xhdGlvbkluVmlldzpfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZp
ZXddOworICAgIENHUG9pbnQgdmVsb2NpdHkgPSBbX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVS
ZWNvZ25pemVyIHZlbG9jaXR5SW5WaWV3Ol9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCku
dmlld107CisgICAgQ0dGbG9hdCBwZXJjZW50ID0gdHJhbnNsYXRpb24ueSAvIChfZnVsbHNjcmVl
blZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYm91bmRzLnNpemUuaGVpZ2h0IC8gMik7CisgICAg
cGVyY2VudCA9IHN0ZDo6bWluKDEuLCBzdGQ6Om1heCgwLiwgcGVyY2VudCkpOworCisgICAgaWYg
KF9pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKS5zdGF0ZSA9PSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZCkgeworICAgICAgICBfaW5JbnRlcmFjdGl2ZURpc21p
c3MgPSBmYWxzZTsKKworICAgICAgICBpZiAocGVyY2VudCA+IDAuMjUgfHwgKHBlcmNlbnQgPiAw
ICYmIHZlbG9jaXR5LnkgPiA1KSkKKyAgICAgICAgICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbFNj
cmVlbl07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgW19pbnRlcmFjdGl2ZURpc21pc3NU
cmFuc2l0aW9uQ29vcmRpbmF0b3IgY2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAg
ICAgICAgIF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgPSBuaWw7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtfaW50ZXJhY3RpdmVEaXNt
aXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9yIHVwZGF0ZUludGVyYWN0aXZlVHJhbnNpdGlvbjpwZXJj
ZW50IHdpdGhUcmFuc2xhdGlvbjpDR1NpemVNYWtlKHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9u
LnkpXTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVs
bHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmZDJh
ZjY3NTNmNGViNWQwZTM4ZTI1NzUwZmRkMmRlMDdhNDgzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1Zp
ZXcuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCA8VUlLaXQv
VUlWaWV3Lmg+CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tGdWxs
c2NyZWVuU3RhY2tWaWV3IDogVUlWaWV3CisrICh2b2lkKWFwcGx5UHJpbWFyeUdseXBoVGludFRv
VmlldzooVUlWaWV3ICopdmlldzsKKysgKHZvaWQpYXBwbHlTZWNvbmRhcnlHbHlwaFRpbnRUb1Zp
ZXc6KFVJVmlldyAqKXZpZXc7CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEFycmFuZ2VkU3Vi
dmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+ICopYXJyYW5nZWRTdWJ2aWV3cyBheGlzOihVSUxheW91
dENvbnN0cmFpbnRBeGlzKWF4aXM7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCBudWxs
YWJsZSkgVUlWaWV3ICp0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5OworQHBy
b3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBVSVZpZXcgKmNvbnRlbnRWaWV3OworQGVuZAor
CitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYxYTExYjVhMjcwMzgzOTg3NGJhMjZlNGY4N2JkMDc3MDlmMDMwNDkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXcubW0KQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykK
KyNpbmNsdWRlICJXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCIKKworI2ltcG9ydCAiVUlLaXRTUEku
aCIKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvQ0FGaWx0ZXIuaD4KKyNpbXBvcnQgPFVJS2l0L1VJVmlz
dWFsRWZmZWN0Vmlldy5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+CisKK3N0YXRpYyBOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+KiBy
ZWR1Y2VkVHJhbnNwYXJlbmN5RWZmZWN0cygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFJldGFpblB0cjxOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+Pj4gZWZmZWN0czsKKyAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9r
ZW4sIF57CisgICAgICAgIGVmZmVjdHMuZ2V0KCkgPSBAW1tVSVZpc3VhbEVmZmVjdCBlZmZlY3RD
b21wb3NpdGluZ0NvbG9yOltVSUNvbG9yIGNvbG9yV2l0aFJlZDooNDMuMCAvIDI1NS4wKSBncmVl
bjooNDYuMCAvIDI1NS4wKSBibHVlOig0OC4wIC8gMjU1LjApIGFscGhhOjEuMF0gd2l0aE1vZGU6
VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxwaGE6MS4wXV07CisgICAgfSk7CisgICAgcmV0dXJu
IGVmZmVjdHMuZ2V0KCkuZ2V0KCk7Cit9CisKK3N0YXRpYyBOU0FycmF5PFVJVmlzdWFsRWZmZWN0
ICo+KiBub3JtYWxUcmFuc3BhcmVuY3lFZmZlY3RzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UmV0YWluUHRyPE5TQXJyYXk8VUlWaXN1YWxFZmZlY3QgKj4+PiBlZmZlY3RzOworICAg
IHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2VUb2tlbiwgXnsKKyAgICAgICAgZWZmZWN0cy5nZXQoKSA9IEBbCisgICAgICAgICAgICBbVUlW
aXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciBibGFja0NvbG9yXSB3
aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZU5vcm1hbCBhbHBoYTowLjU1XSwKKyAgICAgICAgICAg
IFtVSUJsdXJFZmZlY3QgZWZmZWN0V2l0aEJsdXJSYWRpdXM6VUlSb3VuZFRvU2NyZWVuU2NhbGUo
MTcuNSwgW1VJU2NyZWVuIG1haW5TY3JlZW5dKV0sCisgICAgICAgICAgICBbVUlDb2xvckVmZmVj
dCBjb2xvckVmZmVjdFNhdHVyYXRlOjEuOF0sCisgICAgICAgICAgICBbVUlWaXN1YWxFZmZlY3Qg
ZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciB3aGl0ZUNvbG9yXSB3aXRoTW9kZTpVSUNv
bXBvc2l0aW5nTW9kZU5vcm1hbCBhbHBoYTowLjE0XQorICAgICAgICBdOworICAgIH0pOworICAg
IHJldHVybiBlZmZlY3RzLmdldCgpLmdldCgpOworfQorCitAaW50ZXJmYWNlIFVJVmlzdWFsRWZm
ZWN0VmlldyAoV2ViS2l0UHJpdmF0ZSkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkd3JpdGUs
IGNvcHkpIE5TQXJyYXk8VUlWaXN1YWxFZmZlY3QgKj4gKmJhY2tncm91bmRFZmZlY3RzOworQGVu
ZAorCitAaW50ZXJmYWNlIFdLRnVsbHNjcmVlblN0YWNrVmlldyAoKQorQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBVSVN0YWNrVmlldyAqX3N0YWNrVmlldzsKK0Bwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgVUlWaXN1YWxFZmZlY3RWaWV3ICpfdmlzdWFsRWZmZWN0VmlldzsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBVSVZpc3VhbEVmZmVjdFZpZXcgKnNlY29uZGFyeU1hdGVy
aWFsT3ZlcmxheVZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYykgTlNBcnJheTxOU0xheW91dENv
bnN0cmFpbnQgKj4gKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXdDb25zdHJhaW50czsKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlblN0YWNrVmlldworCisjcHJhZ21hIG1h
cmsgLSBDbGFzcyBNZXRob2RzCisrIChOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+ICopYmFzZUVm
ZmVjdHMKK3sKKyAgICBpZiAoVUlBY2Nlc3NpYmlsaXR5SXNSZWR1Y2VUcmFuc3BhcmVuY3lFbmFi
bGVkKCkpCisgICAgICAgIHJldHVybiByZWR1Y2VkVHJhbnNwYXJlbmN5RWZmZWN0cygpOworICAg
IHJldHVybiBub3JtYWxUcmFuc3BhcmVuY3lFZmZlY3RzKCk7Cit9CisKKysgKHZvaWQpY29uZmln
dXJlVmlldzooVUlWaWV3ICopdmlldyBmb3JUaW50RWZmZWN0V2l0aENvbG9yOihVSUNvbG9yICop
dGludENvbG9yIGZpbHRlclR5cGU6KE5TU3RyaW5nICopZmlsdGVyVHlwZQoreworICAgIGlmIChb
dmlldyBpc0tpbmRPZkNsYXNzOltVSUxhYmVsIGNsYXNzXV0pIHsKKyAgICAgICAgWyhVSUxhYmVs
ICopdmlldyBzZXRUZXh0Q29sb3I6dGludENvbG9yXTsKKyAgICAgICAgW3ZpZXcgc2V0VGludENv
bG9yOnRpbnRDb2xvcl07CisgICAgICAgIFtbdmlldyBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0
ZXI6W0NBRmlsdGVyIGZpbHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNMXV07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBfVUlWaXN1YWxFZmZlY3RUaW50TGF5ZXJDb25maWcgKnRpbnRM
YXllckNvbmZpZyA9IFtfVUlWaXN1YWxFZmZlY3RUaW50TGF5ZXJDb25maWcgbGF5ZXJXaXRoVGlu
dENvbG9yOnRpbnRDb2xvciBmaWx0ZXJUeXBlOmZpbHRlclR5cGVdOworICAgIFtbW19VSVZpc3Vh
bEVmZmVjdENvbmZpZyBjb25maWdXaXRoQ29udGVudENvbmZpZzp0aW50TGF5ZXJDb25maWddIGNv
bnRlbnRDb25maWddIGNvbmZpZ3VyZUxheWVyVmlldzp2aWV3XTsKK30KKworKyAodm9pZCljb25m
aWd1cmVWaWV3OihVSVZpZXcgKil2aWV3IHdpdGhCYWNrZ3JvdW5kRmlsbE9mQ29sb3I6KFVJQ29s
b3IgKilmaWxsQ29sb3Igb3BhY2l0eTooQ0dGbG9hdClvcGFjaXR5IGZpbHRlcjooTlNTdHJpbmcg
KilmaWx0ZXIKK3sKKyAgICBfVUlWaXN1YWxFZmZlY3RMYXllckNvbmZpZyAqYmFzZUxheWVyQ29u
ZmlnID0gW19VSVZpc3VhbEVmZmVjdExheWVyQ29uZmlnIGxheWVyV2l0aEZpbGxDb2xvcjpmaWxs
Q29sb3Igb3BhY2l0eTpvcGFjaXR5IGZpbHRlclR5cGU6ZmlsdGVyXTsKKyAgICBbW1tfVUlWaXN1
YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENvbnRlbnRDb25maWc6YmFzZUxheWVyQ29uZmlnXSBj
b250ZW50Q29uZmlnXSBjb25maWd1cmVMYXllclZpZXc6dmlld107Cit9CisKKysgKFVJVmlzdWFs
RWZmZWN0VmlldyAqKXNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcKK3sKKyAgICBVSVZpc3Vh
bEVmZmVjdFZpZXcgKnNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgPSBbW1VJVmlzdWFsRWZm
ZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6bmlsXTsKKyAgICBbc2Vjb25kYXJ5TWF0ZXJp
YWxPdmVybGF5VmlldyBzZXRVc2VySW50ZXJhY3Rpb25FbmFibGVkOk5PXTsKKyAgICBbc2Vjb25k
YXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBzZXRCYWNrZ3JvdW5kRWZmZWN0czpAW1tVSVZpc3VhbEVm
ZmVjdCBlZmZlY3RDb21wb3NpdGluZ0NvbG9yOltVSUNvbG9yIGJsYWNrQ29sb3JdIHdpdGhNb2Rl
OlVJQ29tcG9zaXRpbmdNb2RlUGx1c0RhcmtlciBhbHBoYTowLjA2XV1dOworICAgIHJldHVybiBz
ZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3OworfQorCisjcHJhZ21hIG1hcmsgLSBFeHRlcm5h
bCBJbnRlcmZhY2UKKworKyAodm9pZClhcHBseVByaW1hcnlHbHlwaFRpbnRUb1ZpZXc6KFVJVmll
dyAqKXZpZXcKK3sKKyAgICBbc2VsZiBjb25maWd1cmVWaWV3OnZpZXcgZm9yVGludEVmZmVjdFdp
dGhDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZToxLjAgYWxwaGE6MC43NV0gZmlsdGVyVHlw
ZTprQ0FGaWx0ZXJQbHVzTF07Cit9CisKKysgKHZvaWQpYXBwbHlTZWNvbmRhcnlHbHlwaFRpbnRU
b1ZpZXc6KFVJVmlldyAqKXZpZXcKK3sKKyAgICBbc2VsZiBjb25maWd1cmVWaWV3OnZpZXcgZm9y
VGludEVmZmVjdFdpdGhDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZToxLjAgYWxwaGE6MC41
NV0gZmlsdGVyVHlwZTprQ0FGaWx0ZXJQbHVzTF07Cit9CisKKy0gKGluc3RhbmNldHlwZSlpbml0
V2l0aEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+ICopYXJyYW5nZWRTdWJ2aWV3
cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXMKK3sKKyAgICBzZWxmID0gW3NlbGYg
aW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAwKV07CisKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBbc2VsZiBzZXRDbGlwc1RvQm91bmRzOllF
U107CisKKyAgICBfdmlzdWFsRWZmZWN0VmlldyA9IFtbVUlWaXN1YWxFZmZlY3RWaWV3IGFsbG9j
XSBpbml0V2l0aEVmZmVjdDpuaWxdOworICAgIFtzZWxmIGFkZFN1YnZpZXc6X3Zpc3VhbEVmZmVj
dFZpZXddOworICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRCYWNrZ3JvdW5kRWZmZWN0czpbW3Nl
bGYgY2xhc3NdIGJhc2VFZmZlY3RzXV07CisKKyAgICBfc3RhY2tWaWV3ID0gW1tVSVN0YWNrVmll
dyBhbGxvY10gaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdzOmFycmFuZ2VkU3Vidmlld3NdOworICAg
IFtfc3RhY2tWaWV3IHNldEF4aXM6YXhpc107CisgICAgW19zdGFja1ZpZXcgc2V0TGF5b3V0TWFy
Z2luc1JlbGF0aXZlQXJyYW5nZW1lbnQ6WUVTXTsKKyAgICBbX3N0YWNrVmlldyBzZXRJbnNldHNM
YXlvdXRNYXJnaW5zRnJvbVNhZmVBcmVhOk5PXTsKKyAgICBbc2VsZiBpbnNlcnRTdWJ2aWV3Ol9z
dGFja1ZpZXcgYWJvdmU6X3Zpc3VhbEVmZmVjdFZpZXddOworCisgICAgW3NlbGYgX3NldEFycmFu
Z2VkU3Vidmlld3M6YXJyYW5nZWRTdWJ2aWV3cyBheGlzOmF4aXNdOworCisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpc2V0VGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3Zlcmxh
eTooVUlWaWV3ICopdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheQoreworICAg
IGlmIChfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSA9PSB0YXJnZXRWaWV3
Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5KQorICAgICAgICByZXR1cm47CisKKyAgICBfdGFy
Z2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSA9IHRhcmdldFZpZXdGb3JTZWNvbmRh
cnlNYXRlcmlhbE92ZXJsYXk7CisgICAgW3NlbGYgc2V0TmVlZHNVcGRhdGVDb25zdHJhaW50c107
Cit9CisKKy0gKFVJVmlldyAqKWNvbnRlbnRWaWV3Cit7CisgICAgcmV0dXJuIFtfdmlzdWFsRWZm
ZWN0VmlldyBjb250ZW50Vmlld107Cit9CisKKyNwcmFnbWEgbWFyayAtIEludGVybmFsIEludGVy
ZmFjZQorCitAc3ludGhlc2l6ZSBfc3RhY2tWaWV3PV9zdGFja1ZpZXc7CitAc3ludGhlc2l6ZSBf
dmlzdWFsRWZmZWN0Vmlldz1fdmlzdWFsRWZmZWN0VmlldzsKKworLSAodm9pZClfc2V0QXJyYW5n
ZWRTdWJ2aWV3czooTlNBcnJheTxVSVZpZXcgKj4gKilhcnJhbmdlZFN1YnZpZXdzIGF4aXM6KFVJ
TGF5b3V0Q29uc3RyYWludEF4aXMpYXhpcworeworICAgIGZvciAoVUlWaWV3ICp2aWV3IGluIFtf
c3RhY2tWaWV3IGFycmFuZ2VkU3Vidmlld3NdKQorICAgICAgICBbdmlldyByZW1vdmVGcm9tU3Vw
ZXJ2aWV3XTsKKworICAgIGZvciAoVUlWaWV3ICp2aWV3IGluIGFycmFuZ2VkU3Vidmlld3MpCisg
ICAgICAgIFtfc3RhY2tWaWV3IGFkZEFycmFuZ2VkU3Vidmlldzp2aWV3XTsKKworICAgIFtfc3Rh
Y2tWaWV3IHNldEF4aXM6YXhpc107Cit9CisKKyNwcmFnbWEgbWFyayAtIFVJVmlldyBPdmVycmlk
ZXMKKworLSAodm9pZClzZXRCb3VuZHM6KENHUmVjdClib3VuZHMKK3sKKyAgICBDR1NpemUgb2xk
U2l6ZSA9IFtzZWxmIGJvdW5kc10uc2l6ZTsKKworICAgIFtzdXBlciBzZXRCb3VuZHM6Ym91bmRz
XTsKKworICAgIGlmICghQ0dTaXplRXF1YWxUb1NpemUob2xkU2l6ZSwgYm91bmRzLnNpemUpKQor
ICAgICAgICBbc2VsZiBfc2V0Q29udGludW91c0Nvcm5lclJhZGl1czooKENHUmVjdEdldEhlaWdo
dChib3VuZHMpID4gNDAuMCkgPyAxNi4wIDogOC4wKV07Cit9CisKKy0gKHZvaWQpdXBkYXRlQ29u
c3RyYWludHMKK3sKKyAgICBpZiAoW19zdGFja1ZpZXcgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01h
c2tJbnRvQ29uc3RyYWludHNdIHx8IFtfdmlzdWFsRWZmZWN0VmlldyB0cmFuc2xhdGVzQXV0b3Jl
c2l6aW5nTWFza0ludG9Db25zdHJhaW50c10pIHsKKyAgICAgICAgW192aXN1YWxFZmZlY3RWaWV3
IHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKKyAgICAg
ICAgW19zdGFja1ZpZXcgc2V0VHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWlu
dHM6Tk9dOworCisgICAgICAgIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50ICo+ICpjb25zdHJh
aW50cyA9IEBbCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IGxlYWRpbmdBbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGxlYWRpbmdBbmNob3JdXSwKKyAgICAgICAg
ICAgIFtbX3Zpc3VhbEVmZmVjdFZpZXcgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hv
cjpbc2VsZiB0b3BBbmNob3JdXSwKKyAgICAgICAgICAgIFtbX3Zpc3VhbEVmZmVjdFZpZXcgdHJh
aWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIHRyYWlsaW5nQW5jaG9y
XV0sCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6W3NlbGYgYm90dG9tQW5jaG9yXV0sCisgICAgICAgICAgICBbW19z
dGFja1ZpZXcgbGVhZGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgbGVh
ZGluZ0FuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IHRvcEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6W3NlbGYgdG9wQW5jaG9yXV0sCisgICAgICAgICAgICBbW19zdGFj
a1ZpZXcgdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIHRyYWls
aW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW19zdGFja1ZpZXcgYm90dG9tQW5jaG9yXSBjb25z
dHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiBib3R0b21BbmNob3JdXSwKKyAgICAgICAgXTsKKwor
ICAgICAgICBmb3IgKE5TTGF5b3V0Q29uc3RyYWludCAqY29uc3RyYWludCBpbiBjb25zdHJhaW50
cykKKyAgICAgICAgICAgIFtjb25zdHJhaW50IHNldFByaW9yaXR5OihVSUxheW91dFByaW9yaXR5
UmVxdWlyZWQgLSAxKV07CisKKyAgICAgICAgW05TTGF5b3V0Q29uc3RyYWludCBhY3RpdmF0ZUNv
bnN0cmFpbnRzOmNvbnN0cmFpbnRzXTsKKyAgICB9CisKKyAgICBpZiAoW1tzZWxmIHRhcmdldFZp
ZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXldIGlzRGVzY2VuZGFudE9mVmlldzpzZWxmXSkg
eworICAgICAgICBpZiAoIV9zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3KSB7CisgICAgICAg
ICAgICBbc2VsZiBzZXRTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Oltbc2VsZiBjbGFzc10g
c2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld11dOworICAgICAgICAgICAgW3NlbGYgYWRkU3Vi
dmlldzpbc2VsZiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3XV07CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoW1tzZWxmIHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddIGlzRGVzY2Vu
ZGFudE9mVmlldzpzZWxmXSAmJiAhX3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXdDb25zdHJh
aW50cykgeworICAgICAgICAgICAgW1tzZWxmIHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXdd
IHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKKyAgICAg
ICAgICAgIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50ICo+ICpjb25zdHJhaW50cyA9IEBbCisg
ICAgICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBjZW50ZXJYQW5j
aG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbX3RhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRl
cmlhbE92ZXJsYXkgY2VudGVyWEFuY2hvcl1dLAorICAgICAgICAgICAgICAgIFtbX3NlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheVZpZXcgY2VudGVyWUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNo
b3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5IGNlbnRlcllBbmNob3Jd
XSwKKyAgICAgICAgICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3IHdpZHRo
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbX3RhcmdldFZpZXdGb3JTZWNvbmRhcnlN
YXRlcmlhbE92ZXJsYXkgd2lkdGhBbmNob3JdXSwKKyAgICAgICAgICAgICAgICBbW19zZWNvbmRh
cnlNYXRlcmlhbE92ZXJsYXlWaWV3IGhlaWdodEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNo
b3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5IGhlaWdodEFuY2hvcl1d
CisgICAgICAgICAgICBdOworICAgICAgICAgICAgW3NlbGYgc2V0U2Vjb25kYXJ5TWF0ZXJpYWxP
dmVybGF5Vmlld0NvbnN0cmFpbnRzOmNvbnN0cmFpbnRzXTsKKyAgICAgICAgICAgIFtOU0xheW91
dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpbc2VsZiBzZWNvbmRhcnlNYXRlcmlhbE92
ZXJsYXlWaWV3Q29uc3RyYWludHNdXTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBb
X3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAg
ICBbc3VwZXIgdXBkYXRlQ29uc3RyYWludHNdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc1ODcwMjk2YWRkYTYwZDAxYmQ1
OGZiNzE2OTVmYWY2MjNkYmE5OTkuLjM1MzY1OWUzNzkxNWRkODNhNDU2Mzk3N2FiODUzYjZmMmU5
YmZjYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjAyNSw4ICsyMDI1LDEyIEBACiAJCUM5Q0Q0MzlFMUI0QjAyNTMwMDIzOUUzMyAv
KiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM5Q0Q0Mzk5MUI0QjAyNDIwMDIzOUUzMyAvKiBXS01lZGlhU2Vz
c2lvbk1ldGFkYXRhLmNwcCAqLzsgfTsKIAkJQ0QwMDNBNTIxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdl
Yk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTAxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5
U3RvcmFnZU1hbmFnZXIuY3BwICovOyB9OwogCQlDRDAwM0E1MzE5RDQ5QjVEMDA1QUJDRTAgLyog
V2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTExOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5
U3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzEyMDFGRDEwMTAwQTU5NDA5IC8qIFdL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVu
Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJQ0QwQzY4MzIyMDFGRDEwMTAwQTU5NDA5IC8qIFdL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQ0QwQzY4MzAyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyLm1tICovOyB9OwogCQlDRDE5QTI2RDFBMTNFODJBMDA4RDY1MEUgLyog
V2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNjkxQTEzRTgyMDAwOEQ2NTBFIC8qIFdlYkRpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsgfTsKIAkJQ0QxOUEyNkUxQTEzRTgzNDAwOEQ2NTBF
IC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDE5QTI2QTFBMTNFODIxMDA4RDY1MEUgLyogV2ViRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsgfTsKKwkJQ0QxOUQyRUEyMDQ2NDA2RjAwMTcwNzRB
IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUQyRTgyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxz
Y3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICovOyB9OworCQlDRDE5RDJFQjIwNDY0MDZGMDAxNzA3
NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMTlEMkU5MjA0NjQwNkYwMDE3MDc0QSAvKiBG
dWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovOyB9OwogCQlDRDQ5MUIwNzFFNzBEMDVG
MDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8q
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJQ0Q0OTFCMDgxRTcwRDA1RjAw
MDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyogVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLzsgfTsKIAkJQ0Q0OTFCMEQxRTczMkU0RDAwMDA5MDY2
IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENDkxQjBCMUU3MzJFNEQwMDAw
OTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CkBAIC0yMDU2LDYgKzIwNjAsOCBAQAogCQlDREEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxh
eWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87IH07CiAJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CiAJCUNEQTI5QTJCMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCUNEQzI4MzFEMjAxQkQ3OUQwMEU2RTc0NSAv
KiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQzI4MzFCMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5T
dGFja1ZpZXcuaCAqLzsgfTsKKwkJQ0RDMjgzMUUyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNj
cmVlblN0YWNrVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcu
bW0gKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3OTkwMDhBMkZDMyAvKiBTZWNJdGVtU2hpbUxpYnJh
cnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFG
OEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tICovOyB9OwogCQlD
REMzODMwNzE3MjExN0REMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MkY5MTcy
MTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlD
REMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwQjE3MjEy
MUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggKi87IH07CkBAIC0zMjg3
LDggKzMyOTMsOCBAQAogCQkzRjg3QjlCQTE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9v
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbG9yQ2hv
b3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJCMTU4OTNGNjMw
MDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNG
ODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBXZWJDb2xvclBpY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9XS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
RjkxNUMwRjFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklP
Uy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg7IHBh
dGggPSBpb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9mdWxs
c2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTNGOTE1QzBGMUY1NjRERUQwMDE4M0NFOSAvKiBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVySU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCMDhFNDIxRjYw
QjI0MDAwNUU1MzEyIC8qIGlPUy54Y2Fzc2V0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlci5hc3NldGNhdGFsb2c7IHBhdGggPSBpT1MueGNh
c3NldHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMDQ4MkNCMURERDJGQjUwMEYw
MDZEMCAvKiBSVENOZXR3b3JrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJUQ05ldHdvcmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA0ODJD
QzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSVENOZXR3b3JrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
NTMzLDggKzQ1MzksMTIgQEAKIAkJQzlDRDQzOUExQjRCMDI0MjAwMjM5RTMzIC8qIFdLTWVkaWFT
ZXNzaW9uTWV0YWRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tNZWRp
YVNlc3Npb25NZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDAwM0E1
MDE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2Vy
LmNwcDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMDAzQTUxMTlENDlCNUQwMDVBQkNFMCAvKiBX
ZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2ViTWVk
aWFLZXlTdG9yYWdlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDBD
NjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaDsgcGF0aCA9IGlvcy9mdWxs
c2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUNEMEM2ODMwMjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRnVsbFNjcmVlblZpZXdDb250cm9s
bGVyLm1tOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlBMjY5MUExM0U4MjAwMDhENjUw
RSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlBMjZBMUExM0U4MjEwMDhENjUwRSAvKiBXZWJEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGlj
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oOyBwYXRoID0g
aW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNEMTlEMkU5MjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVu
VG91Y2hTZWNoZXVyaXN0aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRnVsbHNjcmVlblRvdWNo
U2VjaGV1cmlzdGljLmNwcDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNl
Y2hldXJpc3RpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA1MUU3
MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA2MUU3MEQwNUYwMDAwOTA2NiAvKiBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTc0LDYgKzQ1ODQsOCBAQAogCQlDREEyOUEyNTFD
QkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNE
QTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNz
YWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREMy
ODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdLRnVsbHNjcmVlblN0YWNrVmlldy5oOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsc2NyZWVuU3RhY2tWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzI4
MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07IHBhdGggPSBpb3MvZnVsbHNj
cmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQzM4MkY3MTcyMTE1MDYwMDhBMkZDMyAvKiBDRk5ldHdvcmsuZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IG5hbWUgPSBDRk5ldHdvcmsuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+
IjsgfTsKIAkJQ0RDMzgyRjkxNzIxMTZEMzAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGli
cmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODMwNjE3MjExNzk5MDA4QTJGQzMg
LyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKQEAgLTU3NjUsNiArNTc3Nyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCUM1NDI1NkFFMThCRUMxNjEwMERFNDE3OSAvKiBmb3JtcyAqLywK
KwkJCQlDREMyODMxQTIwMUJENzU2MDBFNkU3NDUgLyogZnVsbHNjcmVlbiAqLywKIAkJCQlBMTE1
REM2RTE5MUQ4MkFCMDBEQTgwNzIgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVyLmggKi8sCiAJ
CQkJQTExNURDNkQxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5t
bSAqLywKIAkJCQlBMTlERDNCRjFEMDdEMTY4MDBBQzgyM0IgLyogX1dLV2ViVmlld1ByaW50Rm9y
bWF0dGVySW50ZXJuYWwuaCAqLywKQEAgLTU3OTYsOCArNTgwOSw2IEBACiAJCQkJMEZDQjRFM0Qx
OEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXcubW0gKi8sCiAJCQkJMEZDQjRFNkExOEJC
RjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oICovLAogCQkJCTBGQ0I0
RTZCMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gKi8sCi0J
CQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MuaCAqLywKLQkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcklPUy5tbSAqLywKIAkJCQkwRkNCNEUzRjE4QkJFMDQ0MDAwRkNGQzkg
LyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggKi8sCiAJCQkJMEZDQjRFNDAxOEJCRTA0NDAw
MEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSAqLywKIAkJCQkwRkNCNEU0MTE4
QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3Jp
Z2luLm1tICovLApAQCAtODQ3OCw2ICs4NDg5LDIxIEBACiAJCQluYW1lID0gRnVsbFNjcmVlbjsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUNEQzI4MzFBMjAxQkQ3NTYwMEU2
RTc0NSAvKiBmdWxsc2NyZWVuICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tW
aWV3LmggKi8sCisJCQkJQ0RDMjgzMUMyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0
YWNrVmlldy5tbSAqLywKKwkJCQlDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIuaCAqLywKKwkJCQlDRDBDNjgzMDIwMUZEMTAxMDBBNTk0MDkgLyog
V0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gKi8sCisJCQkJM0Y5MTVDMEYxRjU2NERFRDAw
MTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLywKKwkJCQkzRjkx
NUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5t
bSAqLywKKwkJCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2Vj
aGV1cmlzdGljLmggKi8sCisJCQkJQ0QxOUQyRTkyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3Jl
ZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGZ1bGxzY3JlZW47
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlDRENBODVFNDEzMkFEMzMwMDBF
OTYxREYgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
QEAgLTg4MDMsNiArODgyOSw3IEBACiAJCQkJOTk1NUE2RjUxQzc5ODZFMDAwRUI2QTkzIC8qIEF1
dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5QzgxRDVB
MUMyMEU3RTIwMDVDNEM4MiAvKiBBdXRvbWF0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OTI0OUFENjFGMUYxRTVGMDBCNjJGQkIgLyogQXV0b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hl
cnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEMTlEMkVBMjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxs
c2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NTVBNkY3MUM3
OTg2RTUwMEVCNkE5MyAvKiBBdXRvbWF0aW9uUHJvdG9jb2xPYmplY3RzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5OTBEMjhCQjFDNjUzOUQzMDA5ODY5NzcgLyogQXV0b21hdGlvblNlc3Npb25DbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNr
Qm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODE4LDYgKzg4NDUsNyBAQAog
CQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEyRDk1NkYxMjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFGQUVDM0ExQjA2NTc2MzAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDREMyODMxRDIwMUJENzlEMDBFNkU3NDUgLyog
V0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTUxM0M2NzE2NkVB
QkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5
MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBDaGlsZFByb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRTExQUQ1MjFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmcuaCBp
biBIZWFkZXJzICovLApAQCAtOTM2Miw2ICs5MzkwLDcgQEAKIAkJCQk5MzRCNzI0NDE5RjVCOUJF
MDBBRTk2RDYgLyogV0tBY3Rpb25NZW51SXRlbVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzlGNDAxQzE5RkIwQkJDMDAyQjJCNDIgLyogV0tBY3Rpb25NZW51VHlwZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0I0RTQ4MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggaW4g
SGVhZGVycyAqLywKKwkJCQlDRDBDNjgzMTIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVu
Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTRBMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUZB
MUVEMzE4RTEwNjIyMDBCM0Y0MDIgLyogV0tBaXJQbGF5Um91dGVQaWNrZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRERCMzJEMTI0RUMyRTEwMDQ4RDEzQyAvKiBXS0FQSUNhc3QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTA0NTQsNiArMTA0ODMsNyBAQAogCQkJCTk5MEQyOEJDMUM2NTM5REEwMDk4
Njk3NyAvKiBBdXRvbWF0aW9uU2Vzc2lvbkNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2
QTJCNjA4MUU1Njc2QTYwMEMzREVEQSAvKiBCYWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNz
VGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2NEEyRjExOTFBRjE0RTAwMTA3MzdEIC8q
IEJsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhTYW5kYm94RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUNEMTlEMkVCMjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNo
ZXVyaXN0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE3MDg3NkIxNkQ2Q0E2OTAwRjk5MjI2
IC8qIEJsb2JSZWdpc3RyeVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRjE4NjM4MTY3
RDA3MUUwMEExQTg1QSAvKiBDYWNoZU1vZGVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxODk3
RUQ3MUY0MTVEOEEwMDE2RkE0MiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMDU0MSw2ICsxMDU3MSw3IEBACiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0
IC8qIEpTTlBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAw
MTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjBD
MzY1RTE4QzExMEE1MDBGNjA3RDcgLyogTGF5ZXJSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCUNEQzI4MzFFMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1Zp
ZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTkyREMxMzEyRjhCQUI5MDAxN0FGNjUgLyogTGF5
ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUZERTY0NTE5NTEwQjU1MDBD
NDhGRkEgLyogTGVnYWN5QnVuZGxlRm9yQ2xhc3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0ZF
Q0IwNDFFMUVEMUNDMDBGODg1MDQgLyogTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTEwMzksNiArMTEwNzAsNyBAQAogCQkJCUJDMzA2NkJFMTI1QTQ0
MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDRTREMjFBMUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3Q0U0RDIxNjFBNDkxNDg0MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEMEM2ODMyMjAxRkQxMDEwMEE1OTQwOSAv
KiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDRTRE
MjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzExMUIxMTExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vz
c1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMDRGNjE5MUE0QTNBN0EwMEEyMUI2RSAv
KiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335484</attachid>
            <date>2018-03-09 16:15:39 -0800</date>
            <delta_ts>2018-03-10 00:02:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Improvements-to-fullscreen-new-UI-and-security-featu.patch</filename>
            <type>text/plain</type>
            <size>122063</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSA0ZmEwZTFmYTA1MjE3YmQ3YzJkMGJiMWRiNDJmNGU1OTg2MzBiNzNkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBhcHBsZS5jb20+CkRhdGU6
IEZyaSwgMiBNYXIgMjAxOCAyMTo0MTozMyAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEltcHJvdmVt
ZW50cyB0byBmdWxsc2NyZWVuOyBuZXcgVUkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzNTAzCgpSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KCk5vdyB0aGF0IHRoZSBpT1MgRnVsbHNjcmVlbiBjb2RlIGhhcyBtb3JlIHRo
YW4gb25lIG1ham9yIGNsYXNzLCBtb3ZlIGl0IGludG8gYW4gaW9zLwpkaXJlY3RvcnkuCgpDbGVh
biB1cCB0aGUgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUyBjbGFzcyB0byBtb3JlIGNs
ZWFybHkgc2VwYXJhdGUgZXh0ZXJuYWwKZmFjaW5nIEFQSSBmcm9tIHB1cmVseSBpbnRlcm5hbCBm
dW5jdGlvbnMuCgpNb3ZlIHRoZSBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBp
dHMgb3duIGZpbGUuIEFkZCBzdXBwb3J0IGZvciBmdWxsc2NyZWVuCnRvcCBpbnNldCBhbmQgZnVs
bHNjcmVlbiBhdXRvaGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgoKQWRkIGEgaGV1cmlzdGlj
IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbWVkaWEgY29udHJvbCByZWxhdGVkIHRvdWNoZXMgYW5k
IG9uZXMgdGhhdCBsb29rCm1vcmUga2V5Ym9hcmQgaW50ZXJhY3Rpb25zLgoKQWRkIGEgbmV3IFVJ
U3RhY2tWaWV3IGJhc2VkIGNvbnRyb2wgdG8gaG9sZCB0aGUgZnVsbHNjcmVlbiBjb250cm9scy4K
CiogVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1v
dmVkLgoqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWMuY3BwOiBBZGRlZC4KKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzY29y
ZU9mTmV4dFRvdWNoKToKKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpyZXNl
dCk6CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VTY29yZSk6
CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6YXR0ZW51YXRpb25GYWN0b3Ip
OgoqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
aDoKKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRSYW1wVXBTcGVlZCk6
CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcERvd25TcGVlZCk6
CihXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0WFdlaWdodCk6CihXZWJL
aXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0WVdlaWdodCk6CihXZWJLaXQ6OkZ1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6c2V0U2l6ZSk6CihXZWJLaXQ6OkZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYzo6c2V0R2FtbWEpOgooV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNo
ZXVyaXN0aWM6OnNldEdhbW1hQ3V0b2ZmKToKKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaDoKKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW06IEFkZGVkLgooV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudDo6c2V0UGFyZW50KToKKFdLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldEludGVyZmFjZSk6
CigtW19XS0V4dHJpbnNpY0J1dHRvbiBzZXRFeHRyaW5zaWNDb250ZW50U2l6ZTpdKToKKC1bX1dL
RXh0cmluc2ljQnV0dG9uIGludHJpbnNpY0NvbnRlbnRTaXplXSk6CigtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgZGVhbGxvY10pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBzaG93VUldKToK
KC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgaGlkZVVJXSk6CigtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIHZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXSk6CigtW1dLRnVsbFNj
cmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRkZW46XSk6CigtW1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyIHNldFBsYXlpbmc6XSk6CigtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIHNldFBpY3R1cmVJblBpY3R1cmVBY3RpdmU6XSk6CigtW1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyIGxvYWRWaWV3XSk6CigtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIHZp
ZXdXaWxsQXBwZWFyOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWV3RGlkTGF5
b3V0U3Vidmlld3NdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOndpdGhUcmFuc2l0aW9uQ29vcmRpbmF0b3I6XSk6CigtW1dLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyIHByZWZlcnJlZFN0YXR1c0JhclN0eWxlXSk6CigtW1dLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyIHByZWZlcnNTdGF0dXNCYXJIaWRkZW5dKToKKC1bV0tGdWxsU2NyZWVu
Vmlld0NvbnRyb2xsZXIgZ2VzdHVyZVJlY29nbml6ZXI6c2hvdWxkUmVjb2duaXplU2ltdWx0YW5l
b3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6CigtW1dLRnVsbFNjcmVlblZpZXdDb250cm9s
bGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY2VpdmVUb3VjaDpdKToKKC1bV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIgX21hbmFnZXJdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIgX2VmZmVjdGl2ZUZ1bGxzY3JlZW5JbnNldFRvcF0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBfY2FuY2VsQWN0aW9uOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBf
dG9nZ2xlUGlQQWN0aW9uOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfdG91Y2hE
ZXRlY3RlZDpdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3N0YXR1c0JhckZyYW1l
RGlkQ2hhbmdlOl0pOgooLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfdXBkYXRlV2ViVmll
d0Z1bGxzY3JlZW5JbnNldHNdKToKKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3Nob3dQ
aGlzaGluZ0FsZXJ0XSk6CiogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJJT1MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaC4KKiBVSVByb2Nlc3MvaW9zL2Z1
bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTogQWRkZWQuCihXZWJL
aXQ6OnJlcGxhY2VWaWV3V2l0aFZpZXcpOgooV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6YXBwbHlU
byk6CihXZWJLaXQ6OldLV2ViVmlld1N0YXRlOjpzdG9yZSk6CigtW1dLRnVsbHNjcmVlbkFuaW1h
dGlvbkNvbnRyb2xsZXIgdHJhbnNpdGlvbkR1cmF0aW9uOl0pOgooLVtXS0Z1bGxzY3JlZW5Bbmlt
YXRpb25Db250cm9sbGVyIGNvbmZpZ3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0ZvclRyYW5zaXRp
b246XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYW5pbWF0ZVRyYW5zaXRp
b246XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYW5pbWF0aW9uRW5kZWQ6
XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgc3RhcnRJbnRlcmFjdGl2ZVRy
YW5zaXRpb246XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgdXBkYXRlV2l0
aFBlcmNlbnQ6XSk6CigtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgdXBkYXRlV2l0
aFBlcmNlbnQ6dHJhbnNsYXRpb246YW5jaG9yOl0pOgooLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyIGVuZDpdKToKKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIGlu
aXRXaXRoQW5pbWF0b3I6YW5jaG9yOl0pOgooLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5z
aXRpb24gd2FudHNJbnRlcmFjdGl2ZVN0YXJ0XSk6CigtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZl
VHJhbnNpdGlvbiBzdGFydEludGVyYWN0aXZlVHJhbnNpdGlvbjpdKToKKC1bV0tGdWxsU2NyZWVu
SW50ZXJhY3RpdmVUcmFuc2l0aW9uIHVwZGF0ZUludGVyYWN0aXZlVHJhbnNpdGlvbjp3aXRoVHJh
bnNsYXRpb246XSk6CigtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBjYW5jZWxJ
bnRlcmFjdGl2ZVRyYW5zaXRpb25dKToKKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0
aW9uIGZpbmlzaEludGVyYWN0aXZlVHJhbnNpdGlvbl0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGluaXRXaXRoV2ViVmlldzpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciBkZWFsbG9jXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaXNGdWxsU2Ny
ZWVuXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgd2ViVmlld1BsYWNlaG9sZGVy
XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuXSk6Cigt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5p
dGlhbEZyYW1lOmZpbmFsRnJhbWU6XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
cmVxdWVzdEV4aXRGdWxsU2NyZWVuXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIg
ZXhpdEZ1bGxTY3JlZW5dKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBiZWdhbkV4
aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgooLVtXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyIF9jb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl0pOgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIGNsb3NlXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIgd2ViVmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbl0pOgoo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hh
bmdlXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZ2VzdHVyZVJlY29nbml6ZXI6
c2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6XSk6Cigt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvclByZXNl
bnRlZENvbnRyb2xsZXI6cHJlc2VudGluZ0NvbnRyb2xsZXI6c291cmNlQ29udHJvbGxlcjpdKToK
KC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBhbmltYXRpb25Db250cm9sbGVyRm9yRGlz
bWlzc2VkQ29udHJvbGxlcjpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbnRl
cmFjdGlvbkNvbnRyb2xsZXJGb3JEaXNtaXNzYWw6XSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldKToKKC1bV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlciBfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFtZV0pOgooLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIF9pc1NlY3VyZV0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIF9zZXJ2ZXJUcnVzdF0pOgooLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IF9FVk9yZ2FuaXphdGlvbk5hbWVdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBf
dXBkYXRlTG9jYXRpb25JbmZvXSk6CigtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX21h
bmFnZXJdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfc3RhcnRUb0Rpc21pc3NG
dWxsc2NyZWVuQ2hhbmdlZDpdKToKKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfaW50
ZXJhY3RpdmVEaXNtaXNzQ2hhbmdlZDpdKToKKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsc2NyZWVuU3RhY2tWaWV3Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oLgoqIFVJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW06IEFkZGVkLgooK1tXS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXcgYmFzZUVmZmVjdHNdKToKKCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZp
Z3VyZVZpZXc6Zm9yVGludEVmZmVjdFdpdGhDb2xvcjpmaWx0ZXJUeXBlOl0pOgooK1tXS0Z1bGxz
Y3JlZW5TdGFja1ZpZXcgY29uZmlndXJlVmlldzp3aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOm9w
YWNpdHk6ZmlsdGVyOl0pOgooK1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgc2Vjb25kYXJ5TWF0ZXJp
YWxPdmVybGF5Vmlld10pOgooK1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5
cGhUaW50VG9WaWV3Ol0pOgooK1tXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlTZWNvbmRhcnlH
bHlwaFRpbnRUb1ZpZXc6XSk6CigtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBpbml0V2l0aEFycmFu
Z2VkU3Vidmlld3M6YXhpczpdKToKKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNldFRhcmdldFZp
ZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk6XSk6CigtW1dLRnVsbHNjcmVlblN0YWNrVmll
dyBjb250ZW50Vmlld10pOgooLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgX3NldEFycmFuZ2VkU3Vi
dmlld3M6YXhpczpdKToKKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3IHNldEJvdW5kczpdKToKKC1b
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IHVwZGF0ZUNvbnN0cmFpbnRzXSk6CiogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6Ci0tLQogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAxMjYgKysrCiAuLi4vaW9zL2Z1bGxzY3JlZW4vRnVsbHNj
cmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCB8ICA4NiArKwogLi4uL2lvcy9mdWxsc2NyZWVuL0Z1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICAgfCAgNjYgKysKIC4uLi9pb3MvZnVsbHNjcmVl
bi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oICAgIHwgIDU2ICsrCiAuLi4vaW9zL2Z1bGxz
Y3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gICB8IDQ0NCArKysrKysrKysrCiAu
Li4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICAgICAgICAgICAgICB8ICAyMSAr
LQogLi4uL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gICAgICAgICAgICAgfCA5
MDAgKysrKysrKysrKy0tLS0tLS0tLS0tCiAuLi4vaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVu
U3RhY2tWaWV3LmggICAgICAgICB8ICA0NSArKwogLi4uL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNj
cmVlblN0YWNrVmlldy5tbSAgICAgICAgfCAyMzYgKysrKysrCiBTb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICB8ICA0MCArLQogMTAgZmlsZXMgY2hhbmdl
ZCwgMTUzOSBpbnNlcnRpb25zKCspLCA0ODEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNo
U2VjaGV1cmlzdGljLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tCiBy
ZW5hbWUgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL3sgPT4gZnVsbHNjcmVlbn0vV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICg5MiUpCiByZW5hbWUgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL3sgPT4gZnVsbHNjcmVlbn0vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cklPUy5tbSAoNDclKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3Lm1tCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCAyY2UyNzNkNjZiMS4uOThhMjE0MDdiNTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTI5IEBACisyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgorCisgICAgICAgIEltcHJvdmVtZW50cyB0byBmdWxsc2NyZWVuOyBuZXcgVUkgYW5k
IHNlY3VyaXR5IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODM1MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOb3cgdGhhdCB0aGUgaU9TIEZ1bGxzY3JlZW4gY29kZSBoYXMgbW9yZSB0aGFu
IG9uZSBtYWpvciBjbGFzcywgbW92ZSBpdCBpbnRvIGFuIGlvcy8KKyAgICAgICAgZGlyZWN0b3J5
LgorCisgICAgICAgIENsZWFuIHVwIHRoZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9T
IGNsYXNzIHRvIG1vcmUgY2xlYXJseSBzZXBhcmF0ZSBleHRlcm5hbAorICAgICAgICBmYWNpbmcg
QVBJIGZyb20gcHVyZWx5IGludGVybmFsIGZ1bmN0aW9ucy4KKworICAgICAgICBNb3ZlIHRoZSBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBvdXQgaW50byBpdHMgb3duIGZpbGUuIEFkZCBzdXBw
b3J0IGZvciBmdWxsc2NyZWVuCisgICAgICAgIHRvcCBpbnNldCBhbmQgZnVsbHNjcmVlbiBhdXRv
aGlkZSBkdXJhdGlvbiBDU1MgY29uc3RhbnRzLgorCisgICAgICAgIEFkZCBhIGhldXJpc3RpYyB0
byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1lZGlhIGNvbnRyb2wgcmVsYXRlZCB0b3VjaGVzIGFuZCBv
bmVzIHRoYXQgbG9vaworICAgICAgICBtb3JlIGtleWJvYXJkIGludGVyYWN0aW9ucy4KKworICAg
ICAgICBBZGQgYSBuZXcgVUlTdGFja1ZpZXcgYmFzZWQgY29udHJvbCB0byBob2xkIHRoZSBmdWxs
c2NyZWVuIGNvbnRyb2xzLgorCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVySU9TLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzY29yZU9mTmV4dFRvdWNo
KToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpyZXNldCk6
CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VT
Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6YXR0
ZW51YXRpb25GYWN0b3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxs
c2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaDogCisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5U
b3VjaFNlY2hldXJpc3RpYzo6c2V0UmFtcFVwU3BlZWQpOgorICAgICAgICAoV2ViS2l0OjpGdWxs
c2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFJhbXBEb3duU3BlZWQpOgorICAgICAgICAoV2Vi
S2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFhXZWlnaHQpOgorICAgICAgICAo
V2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFlXZWlnaHQpOgorICAgICAg
ICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFNpemUpOgorICAgICAg
ICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldEdhbW1hKToKKyAgICAg
ICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRHYW1tYUN1dG9mZik6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQ6OnNldFBhcmVudCk6CisgICAgICAgIChX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50OjpzZXRJ
bnRlcmZhY2UpOgorICAgICAgICAoLVtfV0tFeHRyaW5zaWNCdXR0b24gc2V0RXh0cmluc2ljQ29u
dGVudFNpemU6XSk6CisgICAgICAgICgtW19XS0V4dHJpbnNpY0J1dHRvbiBpbnRyaW5zaWNDb250
ZW50U2l6ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBpbml0V2l0
aFdlYlZpZXc6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGRlYWxs
b2NdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgc2hvd1VJXSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGhpZGVVSV0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3Rh
dHVzQmFySGlkZGVuOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBz
ZXRQbGF5aW5nOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQ
aWN0dXJlSW5QaWN0dXJlQWN0aXZlOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlciBsb2FkVmlld10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxl
ciB2aWV3V2lsbEFwcGVhcjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIgdmlld0RpZExheW91dFN1YnZpZXdzXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIHZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTp3aXRoVHJhbnNpdGlvbkNvb3JkaW5h
dG9yOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBwcmVmZXJyZWRT
dGF0dXNCYXJTdHlsZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBw
cmVmZXJzU3RhdHVzQmFySGlkZGVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0
aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJv
bGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNlaXZlVG91Y2g6XSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyIF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3BdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX2NhbmNlbEFjdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3RvZ2dsZVBpUEFjdGlvbjpdKToK
KyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3RvdWNoRGV0ZWN0ZWQ6XSk6
CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9zdGF0dXNCYXJGcmFtZURp
ZENoYW5nZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgX3VwZGF0
ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIF9zaG93UGhpc2hpbmdBbGVydF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXJJT1MubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpyZXBsYWNlVmll
d1dpdGhWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V0tXZWJWaWV3U3RhdGU6OmFwcGx5VG8pOgor
ICAgICAgICAoV2ViS2l0OjpXS1dlYlZpZXdTdGF0ZTo6c3RvcmUpOgorICAgICAgICAoLVtXS0Z1
bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHRyYW5zaXRpb25EdXJhdGlvbjpdKToKKyAgICAg
ICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBjb25maWd1cmVJbml0aWFsQW5k
RmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5Bbmlt
YXRpb25Db250cm9sbGVyIGFuaW1hdGVUcmFuc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxz
Y3JlZW5BbmltYXRpb25Db250cm9sbGVyIGFuaW1hdGlvbkVuZGVkOl0pOgorICAgICAgICAoLVtX
S0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9u
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIHVwZGF0ZVdp
dGhQZXJjZW50Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVy
IHVwZGF0ZVdpdGhQZXJjZW50OnRyYW5zbGF0aW9uOmFuY2hvcjpdKToKKyAgICAgICAgKC1bV0tG
dWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBlbmQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNj
cmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiBpbml0V2l0aEFuaW1hdG9yOmFuY2hvcjpdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIHdhbnRzSW50ZXJhY3Rp
dmVTdGFydF0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24g
c3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbklu
dGVyYWN0aXZlVHJhbnNpdGlvbiB1cGRhdGVJbnRlcmFjdGl2ZVRyYW5zaXRpb246d2l0aFRyYW5z
bGF0aW9uOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24g
Y2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbklu
dGVyYWN0aXZlVHJhbnNpdGlvbiBmaW5pc2hJbnRlcmFjdGl2ZVRyYW5zaXRpb25dKToKKyAgICAg
ICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpbml0V2l0aFdlYlZpZXc6XSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgZGVhbGxvY10pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGlzRnVsbFNjcmVlbl0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHdlYlZpZXdQbGFjZWhvbGRlcl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbl0p
OgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGJlZ2FuRW50ZXJGdWxs
U2NyZWVuV2l0aEluaXRpYWxGcmFtZTpmaW5hbEZyYW1lOl0pOgorICAgICAgICAoLVtXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyIHJlcXVlc3RFeGl0RnVsbFNjcmVlbl0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuXSk6CisgICAgICAg
ICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgYmVnYW5FeGl0RnVsbFNjcmVlbldpdGhJ
bml0aWFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlciBfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlciBjbG9zZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIHdlYlZpZXdEaWRSZW1vdmVGcm9tU3VwZXJ2aWV3V2hpbGVJbkZ1bGxz
Y3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB2aWRlb0Nv
bnRyb2xzTWFuYWdlckRpZENoYW5nZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5
V2l0aEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250cm9sbGVyOnByZXNl
bnRpbmdDb250cm9sbGVyOnNvdXJjZUNvbnRyb2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIgYW5pbWF0aW9uQ29udHJvbGxlckZvckRpc21pc3NlZENvbnRy
b2xsZXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaW50ZXJh
Y3Rpb25Db250cm9sbGVyRm9yRGlzbWlzc2FsOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XSk6CisgICAgICAgICgt
W1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2ludmFsaWRhdGVFVk9yZ2FuaXphdGlvbk5h
bWVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfaXNTZWN1cmVd
KToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfc2VydmVyVHJ1c3Rd
KToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfRVZPcmdhbml6YXRp
b25OYW1lXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3VwZGF0
ZUxvY2F0aW9uSW5mb10pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IF9tYW5hZ2VyXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX3N0
YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIgX2ludGVyYWN0aXZlRGlzbWlzc0NoYW5nZWQ6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxs
c2NyZWVuU3RhY2tWaWV3Lm1tOiBBZGRlZC4KKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tW
aWV3IGJhc2VFZmZlY3RzXSk6CisgICAgICAgICgrW1dLRnVsbHNjcmVlblN0YWNrVmlldyBjb25m
aWd1cmVWaWV3OmZvclRpbnRFZmZlY3RXaXRoQ29sb3I6ZmlsdGVyVHlwZTpdKToKKyAgICAgICAg
KCtbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbmZpZ3VyZVZpZXc6d2l0aEJhY2tncm91bmRGaWxs
T2ZDb2xvcjpvcGFjaXR5OmZpbHRlcjpdKToKKyAgICAgICAgKCtbV0tGdWxsc2NyZWVuU3RhY2tW
aWV3IHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddKToKKyAgICAgICAgKCtbV0tGdWxsc2Ny
ZWVuU3RhY2tWaWV3IGFwcGx5UHJpbWFyeUdseXBoVGludFRvVmlldzpdKToKKyAgICAgICAgKCtb
V0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5U2Vjb25kYXJ5R2x5cGhUaW50VG9WaWV3Ol0pOgor
ICAgICAgICAoLVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdz
OmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyBzZXRUYXJnZXRWaWV3
Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Ol0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5T
dGFja1ZpZXcgY29udGVudFZpZXddKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3
IF9zZXRBcnJhbmdlZFN1YnZpZXdzOmF4aXM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0
YWNrVmlldyBzZXRCb3VuZHM6XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlblN0YWNrVmlldyB1
cGRhdGVDb25zdHJhaW50c10pOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDE4LTAzLTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIERvbid0IHBhc3MgTlVMTCB0byB0aGUgcmVzdWx0IHBhcmFtZXRlciBvZiBTZWNU
cnVzdEV2YWx1YXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9m
dWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZTkwNzAxMTU4YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGdWxsc2NyZWVuVG91Y2hTZWNoZXVy
aXN0aWMuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQor
CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2RvdWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNjb3JlT2ZOZXh0VG91Y2goQ0dQ
b2ludCBsb2NhdGlvbikKK3sKKyAgICBTZWNvbmRzIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCk7CisKKyAgICBpZiAoIW1fbGFzdFRvdWNoVGltZSkgeworICAg
ICAgICBtX2xhc3RUb3VjaFRpbWUgPSBXVEZNb3ZlKG5vdyk7CisgICAgICAgIG1fbGFzdFRvdWNo
TG9jYXRpb24gPSBXVEZNb3ZlKGxvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgU2Vjb25kcyBkZWx0YVRpbWUgPSBub3cgLSBtX2xhc3RUb3VjaFRpbWU7CisKKyAgICBk
b3VibGUgY29lZmZpY2llbnQgPSBhdHRlbnVhdGlvbkZhY3RvcihkZWx0YVRpbWUpOworICAgIG1f
bGFzdFNjb3JlID0gY29lZmZpY2llbnQgKiBkaXN0YW5jZVNjb3JlKGxvY2F0aW9uLCBtX2xhc3RU
b3VjaExvY2F0aW9uLCBkZWx0YVRpbWUpICsgKDEgLSBjb2VmZmljaWVudCkgKiBtX2xhc3RTY29y
ZTsKKworICAgIG1fbGFzdFRvdWNoVGltZSA9IG5vdzsKKyAgICBtX2xhc3RUb3VjaExvY2F0aW9u
ID0gbG9jYXRpb247CisgICAgcmV0dXJuIG1fbGFzdFNjb3JlOworfQorCit2b2lkIEZ1bGxzY3Jl
ZW5Ub3VjaFNlY2hldXJpc3RpYzo6cmVzZXQoKQoreworICAgIG1fbGFzdFRvdWNoVGltZSA9IDBf
czsKKyAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0geyB9OworICAgIG1fbGFzdFNjb3JlID0gMDsK
K30KKworZG91YmxlIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6ZGlzdGFuY2VTY29yZShj
b25zdCBDR1BvaW50JiBuZXh0TG9jYXRpb24sIGNvbnN0IENHUG9pbnQmIGxhc3RMb2NhdGlvbiwg
Y29uc3QgU2Vjb25kcyYgZGVsdGFUaW1lKQoreworICAgIGRvdWJsZSBkaXN0YW5jZSA9IHNxcnQo
CisgICAgICAgIG1feFdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueCAtIGxhc3RMb2NhdGlvbi54
LCAyKSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyhuZXh0TG9jYXRpb24ueSAtIGxhc3RMb2Nh
dGlvbi55LCAyKSk7CisgICAgZG91YmxlIHNpemVGYWN0b3IgPSBzcXJ0KAorICAgICAgICBtX3hX
ZWlnaHQgKiBwb3cobV9zaXplLndpZHRoLCAyKSArCisgICAgICAgIG1feVdlaWdodCAqIHBvdyht
X3NpemUuaGVpZ2h0LCAyKSk7CisgICAgZG91YmxlIHNjYWxlZERpc3RhbmNlID0gZGlzdGFuY2Ug
LyBzaXplRmFjdG9yOworICAgIGlmIChzY2FsZWREaXN0YW5jZSA8PSBtX2N1dG9mZikKKyAgICAg
ICAgcmV0dXJuIHNjYWxlZERpc3RhbmNlICogKG1fcmFtcFVwU3BlZWQgLyBkZWx0YVRpbWUpOwor
CisgICAgZG91YmxlIGV4cG9uZW50aWFsRGlzdGFuY2UgPSBtX2N1dG9mZiArIHBvdygoc2NhbGVk
RGlzdGFuY2UgLSBtX2N1dG9mZikgLyAoMSAtIG1fY3V0b2ZmKSwgbV9nYW1tYSk7CisgICAgcmV0
dXJuIGV4cG9uZW50aWFsRGlzdGFuY2UgKiAobV9yYW1wVXBTcGVlZCAvIGRlbHRhVGltZSk7Cit9
CisKK2RvdWJsZSBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OmF0dGVudWF0aW9uRmFjdG9y
KFNlY29uZHMgZGVsdGEpCit7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRUaW1lRGVsdGEgPSBkZWx0
YSAvIG1fcmFtcERvd25TcGVlZDsKKyAgICByZXR1cm4gbm9ybWFsaXplZFRpbWVEZWx0YSAqIG1f
d2VpZ2h0OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBM
QVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxs
c2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIzY2RjYTNkN2MwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVl
blRvdWNoU2VjaGV1cmlzdGljLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCisK
KyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljIHsKK3B1YmxpYzoKKyAgICBkb3VibGUgc2NvcmVP
Zk5leHRUb3VjaChDR1BvaW50IGxvY2F0aW9uKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICB2
b2lkIHNldFJhbXBVcFNwZWVkKFNlY29uZHMgc3BlZWQpIHsgbV9yYW1wVXBTcGVlZCA9IHNwZWVk
OyB9CisgICAgdm9pZCBzZXRSYW1wRG93blNwZWVkKFNlY29uZHMgc3BlZWQpIHsgbV9yYW1wRG93
blNwZWVkID0gc3BlZWQ7IH0KKyAgICB2b2lkIHNldFhXZWlnaHQoZG91YmxlIHdlaWdodCkgeyBt
X3hXZWlnaHQgPSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFlXZWlnaHQoZG91YmxlIHdlaWdodCkg
eyBtX3lXZWlnaHQgPSB3ZWlnaHQ7IH0KKyAgICB2b2lkIHNldFNpemUoQ0dTaXplIHNpemUpIHsg
bV9zaXplID0gc2l6ZTsgfQorICAgIHZvaWQgc2V0R2FtbWEoZG91YmxlIGdhbW1hKSB7IG1fZ2Ft
bWEgPSBnYW1tYTsgfQorICAgIHZvaWQgc2V0R2FtbWFDdXRvZmYoZG91YmxlIGN1dG9mZikgeyBt
X2N1dG9mZiA9IGN1dG9mZjsgfQorCitwcml2YXRlOgorICAgIGRvdWJsZSBkaXN0YW5jZVNjb3Jl
KGNvbnN0IENHUG9pbnQmIG5leHRMb2NhdGlvbiwgY29uc3QgQ0dQb2ludCYgbGFzdExvY2F0aW9u
LCBjb25zdCBTZWNvbmRzJiBkZWx0YVRpbWUpOworICAgIGRvdWJsZSBhdHRlbnVhdGlvbkZhY3Rv
cihTZWNvbmRzIGRlbHRhKTsKKworICAgIGRvdWJsZSBtX3dlaWdodCB7IDAuMSB9OworICAgIFNl
Y29uZHMgbV9yYW1wVXBTcGVlZCB7IDEgfTsKKyAgICBTZWNvbmRzIG1fcmFtcERvd25TcGVlZCB7
IDEgfTsKKyAgICBkb3VibGUgbV94V2VpZ2h0IHsgMSB9OworICAgIGRvdWJsZSBtX3lXZWlnaHQg
eyAxIH07CisgICAgZG91YmxlIG1fZ2FtbWEgeyAxIH07CisgICAgZG91YmxlIG1fY3V0b2ZmIHsg
MSB9OworICAgIENHU2l6ZSBtX3NpemUgeyB9OworICAgIFNlY29uZHMgbV9sYXN0VG91Y2hUaW1l
IHsgMCB9OworICAgIENHUG9pbnQgbV9sYXN0VG91Y2hMb2NhdGlvbiB7IH07CisgICAgZG91Ymxl
IG1fbGFzdFNjb3JlIHsgMCB9OworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGY4M2IyYzUzN2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVl
bi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZP
Uk0oSU9TKQorCisjaW1wb3J0IDxVSUtpdC9VSVZpZXdDb250cm9sbGVyLmg+CisKK0BjbGFzcyBX
S1dlYlZpZXc7CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViUGFnZVByb3h5OworfQor
CitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitAaW50ZXJmYWNlIFdLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21p
YykgaWQgdGFyZ2V0OworQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYykgU0VMIGFjdGlvbjsK
K0Bwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIE5TU3RyaW5nICpsb2NhdGlvbjsKK0Bwcm9w
ZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIEJPT0wgcHJlZmVyc1N0YXR1c0JhckhpZGRlbjsKK0Bw
cm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMsIGdldHRlcj1pc1BsYXlpbmcpIEJPT0wgcGxheWlu
ZzsKK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMsIGdldHRlcj1pc1BpY3R1cmVJblBpY3R1
cmVBY3RpdmUpIEJPT0wgcGljdHVyZUluUGljdHVyZUFjdGl2ZTsKKworLSAoaWQpaW5pdFdpdGhX
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OworLSAodm9pZClzaG93VUk7CistICh2b2lkKWhp
ZGVVSTsKKy0gKHZvaWQpdmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2U7CitAZW5kCisKK05T
X0FTU1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAm
JiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZGExZWI5ZjRjMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRG
T1JNKElPUykKKyNpbXBvcnQgIldLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgiCisKKyNpbXBv
cnQgIkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tGdWxs
c2NyZWVuU3RhY2tWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIHNo
b3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjE7CitzdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2
YWwgYXV0b0hpZGVEZWxheSA9IDQuMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcmVxdWlyZWRTY29y
ZSA9IDAuMTsKKworQGNsYXNzIFdLRnVsbHNjcmVlblN0YWNrVmlldzsKKworY2xhc3MgV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXJQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudCA6IFBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldFBhcmVudChXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlciAqcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKKyAg
ICB2b2lkIHJhdGVDaGFuZ2VkKGJvb2wgaXNQbGF5aW5nLCBmbG9hdCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG1fcGFyZW50LnBsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAgfQorCisgICAgdm9p
ZCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlQ2hhbmdlZChib29sIGFjdGl2ZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fcGFyZW50LnBpY3R1cmVJblBpY3R1cmVBY3RpdmUgPSBhY3RpdmU7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRJbnRlcmZhY2UoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZL
aXQqIGludGVyZmFjZSkKKyAgICB7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVy
ZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgbV9pbnRl
cmZhY2UgPSBpbnRlcmZhY2U7CisgICAgICAgIGlmIChtX2ludGVyZmFjZSAmJiBtX2ludGVyZmFj
ZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAgICAgICAgICAgIGludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKS0+YWRkQ2xpZW50KCp0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgKm1fcGFyZW50IHsgbnVsbHB0ciB9OworICAg
IFJlZlB0cjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4gbV9pbnRlcmZhY2U7Cit9Owor
CisjcHJhZ21hIG1hcmsgLSBfV0tFeHRyaW5zaWNCdXR0b24KKworQGludGVyZmFjZSBfV0tFeHRy
aW5zaWNCdXR0b24gOiBVSUJ1dHRvbgorQHByb3BlcnR5IChhc3NpZ24sIG5vbmF0b21pYykgQ0dT
aXplIGV4dHJpbnNpY0NvbnRlbnRTaXplOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gX1dLRXh0
cmluc2ljQnV0dG9uCistICh2b2lkKXNldEV4dHJpbnNpY0NvbnRlbnRTaXplOihDR1NpemUpc2l6
ZQoreworICAgIF9leHRyaW5zaWNDb250ZW50U2l6ZSA9IHNpemU7CisgICAgW3NlbGYgaW52YWxp
ZGF0ZUludHJpbnNpY0NvbnRlbnRTaXplXTsKK30KKworLSAoQ0dTaXplKWludHJpbnNpY0NvbnRl
bnRTaXplCit7CisgICAgcmV0dXJuIF9leHRyaW5zaWNDb250ZW50U2l6ZTsKK30KK0BlbmQKKwor
I3ByYWdtYSBtYXJrIC0gV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIKKworQGludGVyZmFjZSBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciAoKSA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRl
LCBVSVRvb2xiYXJEZWxlZ2F0ZT4KK0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIFdLV2Vi
VmlldyAqX3dlYlZpZXc7IC8vIENhbm5vdCBiZSByZXRhaW5lZCwgc2VlIDxyZGFyOi8vcHJvYmxl
bS8xNDg4NDY2Nj4uCitAcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkqIF9tYW5hZ2VyOworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWlj
KSBDR0Zsb2F0IF9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRUb3A7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB7CisgICAgUmV0YWluUHRyPFVJTG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyOworICAgIFJl
dGFpblB0cjxXS0Z1bGxzY3JlZW5TdGFja1ZpZXc+IF9zdGFja1ZpZXc7CisgICAgUmV0YWluUHRy
PF9XS0V4dHJpbnNpY0J1dHRvbj4gX2NhbmNlbEJ1dHRvbjsKKyAgICBSZXRhaW5QdHI8X1dLRXh0
cmluc2ljQnV0dG9uPiBfcGlwQnV0dG9uOworICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2xvY2F0
aW9uQnV0dG9uOworICAgIFJldGFpblB0cjxVSUxheW91dEd1aWRlPiBfdG9wR3VpZGU7CisgICAg
UmV0YWluUHRyPE5TTGF5b3V0Q29uc3RyYWludD4gX3RvcENvbnN0cmFpbnQ7CisgICAgV2ViS2l0
OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMgX3NlY2hldXJpc3RpYzsKKyAgICBXS0Z1bGxT
Y3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50IF9wbGF5YmFja0Ns
aWVudDsKKyAgICBCT09MIF9oYXNDb250cm9sc01hbmFnZXI7CisgICAgQ0dGbG9hdCBfbm9uWmVy
b1N0YXR1c0JhckhlaWdodDsKK30KKworI3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJmYWNl
CisKKy0gKGlkKWluaXRXaXRoV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldworeworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJlZEFwcGxp
Y2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIFtbTlNOb3RpZmljYXRpb25D
ZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X3N0YXR1c0JhckZyYW1lRGlkQ2hhbmdlOikgbmFtZTpVSUFwcGxpY2F0aW9uRGlkQ2hhbmdlU3Rh
dHVzQmFyRnJhbWVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgX3NlY2hldXJpc3RpYy5z
ZXRSYW1wVXBTcGVlZChTZWNvbmRzKDAuMjUpKTsKKyAgICBfc2VjaGV1cmlzdGljLnNldFJhbXBE
b3duU3BlZWQoU2Vjb25kcygxLikpOworICAgIF9zZWNoZXVyaXN0aWMuc2V0WFdlaWdodCgwKTsK
KyAgICBfc2VjaGV1cmlzdGljLnNldEdhbW1hKDAuMSk7CisgICAgX3NlY2hldXJpc3RpYy5zZXRH
YW1tYUN1dG9mZigwLjA4KTsKKworICAgIHNlbGYuX3dlYlZpZXcgPSB3ZWJWaWV3OworCisgICAg
X3BsYXliYWNrQ2xpZW50LnNldFBhcmVudChzZWxmKTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3Jt
UmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07CisKKyAgICBfcGxheWJhY2tDbGllbnQu
c2V0UGFyZW50KG51bGxwdHIpOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lk
KXNob3dVSQoreworICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dp
dGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKwor
ICAgIGlmIChfcGxheWluZykgeworICAgICAgICBOU1RpbWVJbnRlcnZhbCBoaWRlRGVsYXkgPSBh
dXRvSGlkZURlbGF5OworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGhp
ZGVVSSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpoaWRlRGVsYXldOworICAgIH0KKyAgICBb
VUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246c2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiBhbmlt
YXRpb25zOiBeeworICAgICAgICBbX3N0YWNrVmlldyBzZXRIaWRkZW46Tk9dOworICAgICAgICBb
X3N0YWNrVmlldyBzZXRBbHBoYToxXTsKKyAgICAgICAgc2VsZi5wcmVmZXJzU3RhdHVzQmFySGlk
ZGVuID0gTk87CisgICAgfV07Cit9CisKKy0gKHZvaWQpaGlkZVVJCit7CisgICAgW05TT2JqZWN0
IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihoaWRlVUkpIG9iamVjdDpuaWxdOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJh
dGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3Nl
bGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAg
ICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1
YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3IgY29uc3Rh
bnQ6c2VsZi52aWV3LnNhZmVBcmVhSW5zZXRzLnRvcF07CisgICAgICAgIFtfdG9wQ29uc3RyYWlu
dCBzZXRBY3RpdmU6WUVTXTsKKyAgICAgICAgW19zdGFja1ZpZXcgc2V0QWxwaGE6MF07CisgICAg
ICAgIHNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbiA9IFlFUzsKKyAgICB9IGNvbXBsZXRpb246
XihCT09MIGZpbmlzaGVkKSB7CisgICAgICAgIGlmICghZmluaXNoZWQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25z
dHJhaW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9w
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRH
dWlkZS50b3BBbmNob3JdOworICAgICAgICBbX3RvcENvbnN0cmFpbnQgc2V0QWN0aXZlOllFU107
CisgICAgICAgIFtfc3RhY2tWaWV3IHNldEhpZGRlbjpZRVNdOworICAgIH1dOworfQorCistICh2
b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlCit7CisgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gW3NlbGYuX3dlYlZpZXcgX3BhZ2VdOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQ
cm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IHBhZ2UgPyBwYWdlLT5wbGF5YmFja1Nlc3Np
b25NYW5hZ2VyKCkgOiBOVUxMOworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UgPSBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID8gcGxh
eWJhY2tTZXNzaW9uTWFuYWdlci0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkgOiBOVUxMOwor
ICAgIF9wbGF5YmFja0NsaWVudC5zZXRJbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KTsKKworICAgIFBsYXliYWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSA/IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJh
Y2tTZXNzaW9uTW9kZWwoKSA6IE5VTEw7CisgICAgX2hhc0NvbnRyb2xzTWFuYWdlciA9IHBsYXli
YWNrU2Vzc2lvbk1vZGVsOworICAgIHNlbGYucGxheWluZyA9IHBsYXliYWNrU2Vzc2lvbk1vZGVs
ID8gcGxheWJhY2tTZXNzaW9uTW9kZWwtPmlzUGxheWluZygpIDogTk87CisgICAgW19waXBCdXR0
b24gc2V0SGlkZGVuOiFwbGF5YmFja1Nlc3Npb25Nb2RlbF07Cit9CisKK0BzeW50aGVzaXplIHBy
ZWZlcnNTdGF0dXNCYXJIaWRkZW49X3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47CistICh2b2lkKXNl
dFByZWZlcnNTdGF0dXNCYXJIaWRkZW46KEJPT0wpdmFsdWUKK3sKKyAgICBfcHJlZmVyc1N0YXR1
c0JhckhpZGRlbiA9IHZhbHVlOworICAgIFtzZWxmIHNldE5lZWRzU3RhdHVzQmFyQXBwZWFyYW5j
ZVVwZGF0ZV07CisgICAgW3NlbGYgX3VwZGF0ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30K
KworLSAodm9pZClzZXRQbGF5aW5nOihCT09MKWlzUGxheWluZworeworICAgIGlmIChfcGxheWlu
ZyA9PSBpc1BsYXlpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIF9wbGF5aW5nID0gaXNQbGF5
aW5nOworICAgIGlmICghX3BsYXlpbmcpCisgICAgICAgIFtzZWxmIHNob3dVSV07CisgICAgZWxz
ZSB7CisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhU
YXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZVVJKSBvYmplY3Q6bmlsXTsKKyAgICAg
ICAgTlNUaW1lSW50ZXJ2YWwgaGlkZURlbGF5ID0gYXV0b0hpZGVEZWxheTsKKyAgICAgICAgW3Nl
bGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIHdpdGhPYmplY3Q6bmlsIGFmdGVy
RGVsYXk6aGlkZURlbGF5XTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0UGljdHVyZUluUGljdHVy
ZUFjdGl2ZTooQk9PTClhY3RpdmUKK3sKKyAgICBpZiAoX3BpY3R1cmVJblBpY3R1cmVBY3RpdmUg
PT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBfcGljdHVyZUluUGljdHVyZUFjdGl2
ZSA9IGFjdGl2ZTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRTZWxlY3RlZDphY3RpdmVdOworfQorCisj
cHJhZ21hIG1hcmsgLSBVSVZpZXdDb250cm9sbGVyIE92ZXJyaWRlcworCistICh2b2lkKWxvYWRW
aWV3Cit7CisgICAgW3NlbGYgc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApXSkuZ2V0KCldOworICAgIHNlbGYudmll
dy5hdXRvcmVzaXppbmdNYXNrID0gVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJ
Vmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0OworCisgICAgX2NhbmNlbEJ1dHRvbiA9IFtf
V0tFeHRyaW5zaWNCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsKKyAg
ICBbX2NhbmNlbEJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJh
aW50czpOT107CisgICAgW19jYW5jZWxCdXR0b24gc2V0QWRqdXN0c0ltYWdlV2hlbkhpZ2hsaWdo
dGVkOk5PXTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRFeHRyaW5zaWNDb250ZW50U2l6ZTpDR1Np
emVNYWtlKDYwLjAsIDQ3LjApXTsKKyAgICBbV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGFwcGx5UHJp
bWFyeUdseXBoVGludFRvVmlldzpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBOU0J1bmRsZSAq
YnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOnNlbGYuY2xhc3NdOworICAgIFVJSW1h
Z2UgKmRvbmVJbWFnZSA9IFtVSUltYWdlIGltYWdlTmFtZWQ6QCJEb25lIiBpbkJ1bmRsZTpidW5k
bGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBbX2NhbmNlbEJ1dHRv
biBzZXRJbWFnZTpbZG9uZUltYWdlIGltYWdlV2l0aFJlbmRlcmluZ01vZGU6VUlJbWFnZVJlbmRl
cmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwor
ICAgIFtfY2FuY2VsQnV0dG9uIHNldFRpbnRDb2xvcjpbVUlDb2xvciB3aGl0ZUNvbG9yXV07Cisg
ICAgW19jYW5jZWxCdXR0b24gc2l6ZVRvRml0XTsKKyAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJn
ZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9jYW5jZWxBY3Rpb246KSBmb3JDb250cm9sRXZlbnRz
OlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07CisKKyAgICBfcGlwQnV0dG9uID0gW19XS0V4
dHJpbnNpY0J1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOworICAgIFtf
cGlwQnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5P
XTsKKyAgICBbX3BpcEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwor
ICAgIFtfcGlwQnV0dG9uIHNldEV4dHJpbnNpY0NvbnRlbnRTaXplOkNHU2l6ZU1ha2UoNjAuMCwg
NDcuMCldOworICAgIFtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5cGhUaW50
VG9WaWV3Ol9waXBCdXR0b24uZ2V0KCldOworICAgIFVJSW1hZ2UgKnN0YXJ0UGlQSW1hZ2UgPSBb
VUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RhcnRQaWN0dXJlSW5QaWN0dXJlQnV0dG9uIiBpbkJ1bmRs
ZTpidW5kbGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsKKyAgICBVSUltYWdl
ICpzdG9wUGlQSW1hZ2UgPSBbVUlJbWFnZSBpbWFnZU5hbWVkOkAiU3RvcFBpY3R1cmVJblBpY3R1
cmVCdXR0b24iIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpu
aWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdGFydFBpUEltYWdlIGltYWdlV2l0aFJl
bmRlcmluZ01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3RhdGU6
VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtfcGlwQnV0dG9uIHNldEltYWdlOltzdG9wUGlQ
SW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1Rl
bXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZVNlbGVjdGVkXTsKKyAgICBbX3BpcEJ1dHRv
biBzZXRUaW50Q29sb3I6W1VJQ29sb3Igd2hpdGVDb2xvcl1dOworICAgIFtfcGlwQnV0dG9uIHNp
emVUb0ZpdF07CisgICAgW19waXBCdXR0b24gYWRkVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rv
cihfdG9nZ2xlUGlQQWN0aW9uOikgZm9yQ29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNo
VXBJbnNpZGVdOworCisgICAgX3N0YWNrVmlldyA9IGFkb3B0TlMoW1tXS0Z1bGxzY3JlZW5TdGFj
a1ZpZXcgYWxsb2NdIGluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czpAW19jYW5jZWxCdXR0b24uZ2V0
KCksIF9waXBCdXR0b24uZ2V0KCldIGF4aXM6VUlMYXlvdXRDb25zdHJhaW50QXhpc0hvcml6b250
YWxdKTsKKyAgICBbX3N0YWNrVmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9D
b25zdHJhaW50czpOT107CisgICAgW19zdGFja1ZpZXcgc2V0VGFyZ2V0Vmlld0ZvclNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheTpfY2FuY2VsQnV0dG9uLmdldCgpXTsKKyAgICBbW3NlbGYgdmlld10g
YWRkU3Vidmlldzpfc3RhY2tWaWV3LmdldCgpXTsKKworICAgIFVJTGF5b3V0R3VpZGUqIHNhZmVB
cmVhID0gc2VsZi52aWV3LnNhZmVBcmVhTGF5b3V0R3VpZGU7CisgICAgVUlMYXlvdXRHdWlkZSog
bWFyZ2lucyA9IHNlbGYudmlldy5sYXlvdXRNYXJnaW5zR3VpZGU7CisKKyAgICBfdG9wR3VpZGUg
PSBhZG9wdE5TKFtbVUlMYXlvdXRHdWlkZSBhbGxvY10gaW5pdF0pOworICAgIFtzZWxmLnZpZXcg
YWRkTGF5b3V0R3VpZGU6X3RvcEd1aWRlLmdldCgpXTsKKyAgICBOU0xheW91dEFuY2hvciogdG9w
QW5jaG9yID0gW190b3BHdWlkZSB0b3BBbmNob3JdOworICAgIF90b3BDb25zdHJhaW50ID0gW3Rv
cEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzYWZlQXJlYS50b3BBbmNob3JdOworICAg
IFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBfdG9w
Q29uc3RyYWludC5nZXQoKSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IHRvcEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6dG9wQW5jaG9yXSwKKyAgICAgICAgW1tfc3RhY2tWaWV3IGxlYWRp
bmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOm1hcmdpbnMubGVhZGluZ0FuY2hvcl0s
CisgICAgXV07CisKKyAgICBbX3N0YWNrVmlldyBzZXRBbHBoYTowXTsKKyAgICBbX3N0YWNrVmll
dyBzZXRIaWRkZW46WUVTXTsKKyAgICBbc2VsZiB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5n
ZV07CisKKyAgICBfdG91Y2hHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSUxvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3RvdWNoRGV0ZWN0ZWQ6KV0pOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBz
ZXRDYW5jZWxzVG91Y2hlc0luVmlldzpOT107CisgICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVy
IHNldE1pbmltdW1QcmVzc0R1cmF0aW9uOjBdOworICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZi52aWV3IGFkZEdlc3R1cmVSZWNvZ25pemVy
Ol90b3VjaEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKK30KKworLSAodm9pZCl2aWV3V2lsbEFw
cGVhcjooQk9PTClhbmltYXRlZAoreworICAgIHNlbGYuX3dlYlZpZXcuYXV0b3Jlc2l6aW5nTWFz
ayA9IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdG
bGV4aWJsZUhlaWdodDsKKyAgICBzZWxmLl93ZWJWaWV3LmZyYW1lID0gc2VsZi52aWV3LmJvdW5k
czsKKyAgICBbc2VsZi52aWV3IGluc2VydFN1YnZpZXc6c2VsZi5fd2ViVmlldyBhdEluZGV4OjBd
OworCisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKQorICAgICAgICBtYW5h
Z2VyLT5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEZWxheShhdXRvSGlkZURlbGF5KTsKK30KKworLSAo
dm9pZCl2aWV3RGlkTGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc2VsZiBfdXBkYXRlV2ViVmlld0Z1
bGxzY3JlZW5JbnNldHNdOworICAgIF9zZWNoZXVyaXN0aWMuc2V0U2l6ZShzZWxmLnZpZXcuYm91
bmRzLnNpemUpOworfQorCistICh2b2lkKXZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTooQ0dTaXpl
KXNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjooaWQ8VUlWaWV3Q29udHJvbGxlclRyYW5z
aXRpb25Db29yZGluYXRvcj4pY29vcmRpbmF0b3IKK3sKKyAgICBbc3VwZXIgdmlld1dpbGxUcmFu
c2l0aW9uVG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07
CisgICAgW2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmll
d0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7CisgICAg
ICAgIHZvaWQgKF53ZWJWaWV3VXBkYXRlQmxvY2spKCkgPSBeeworICAgICAgICAgICAgW3NlbGYu
X3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpz
aXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVdOworICAgICAgICB9OworCisg
ICAgICAgIFtzZWxmLl93ZWJWaWV3IF9iZWdpbkFuaW1hdGVkUmVzaXplV2l0aFVwZGF0ZXM6d2Vi
Vmlld1VwZGF0ZUJsb2NrXTsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX3NldEludGVyZmFjZU9y
aWVudGF0aW9uT3ZlcnJpZGU6W1VJQXBwIHN0YXR1c0Jhck9yaWVudGF0aW9uXV07CisgICAgfSBj
b21wbGV0aW9uOl4oaWQgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250
ZXh0PmNvbnRleHQpIHsKKyAgICAgICAgW3NlbGYuX3dlYlZpZXcgX2VuZEFuaW1hdGVkUmVzaXpl
XTsKKyAgICB9XTsKK30KKworLSAoVUlTdGF0dXNCYXJTdHlsZSlwcmVmZXJyZWRTdGF0dXNCYXJT
dHlsZQoreworICAgIHJldHVybiBVSVN0YXR1c0JhclN0eWxlTGlnaHRDb250ZW50OworfQorCist
IChCT09MKXByZWZlcnNTdGF0dXNCYXJIaWRkZW4KK3sKKyAgICByZXR1cm4gX3ByZWZlcnNTdGF0
dXNCYXJIaWRkZW47Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlHZXN0dXJl
UmVjb2duaXplckRlbGVnYXRlCisKKy0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVy
ZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVv
dXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2Vz
dHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKWdlc3R1cmVS
ZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxk
UmVjZWl2ZVRvdWNoOihVSVRvdWNoICopdG91Y2gKK3sKKyAgICBbc2VsZiBzaG93VUldOworICAg
IHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFyayAtCisKKyNwcmFnbWEgbWFyayAtCisjcHJh
Z21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCisKK0BkeW5hbWljIF9tYW5hZ2VyOworLSAoV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoYXV0byogcGFnZSA9
IFtzZWxmLl93ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0BkeW5hbWljIF9lZmZlY3RpdmVG
dWxsc2NyZWVuSW5zZXRUb3A7CistIChDR0Zsb2F0KV9lZmZlY3RpdmVGdWxsc2NyZWVuSW5zZXRU
b3AKK3sKKyAgICBpZiAoIXNlbGYucHJlZmVyc1N0YXR1c0JhckhpZGRlbikKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBDR1JlY3QgY2FuY2VsRnJhbWUgPSBfY2FuY2VsQnV0dG9uLmdldCgpLmZy
YW1lOworICAgIENHUG9pbnQgbWF4WFkgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNYXhYKGNhbmNl
bEZyYW1lKSwgQ0dSZWN0R2V0TWF4WShjYW5jZWxGcmFtZSkpOworICAgIHJldHVybiBbX2NhbmNl
bEJ1dHRvbiBjb252ZXJ0UG9pbnQ6bWF4WFkgdG9WaWV3OnNlbGYudmlld10ueTsKK30KKworLSAo
dm9pZClfY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgdGFyZ2V0XSBwZXJm
b3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Cit9CisKKy0gKHZvaWQpX3RvZ2dsZVBpUEFjdGlv
bjooaWQpc2VuZGVyCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZpZXcg
X3BhZ2VdOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5KiBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID0gcGFnZS0+cGxheWJh
Y2tTZXNzaW9uTWFuYWdlcigpOworICAgIGlmICghcGxheWJhY2tTZXNzaW9uTWFuYWdlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1QbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UqIHBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZSA9IHBsYXliYWNrU2Vzc2lvbk1hbmFnZXItPmNvbnRyb2xz
TWFuYWdlckludGVyZmFjZSgpOworICAgIGlmICghcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQbGF5YmFja1Nlc3Npb25Nb2RlbCogcGxheWJhY2tTZXNz
aW9uTW9kZWwgPSBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCk7CisgICAgaWYgKCFwbGF5YmFja1Nlc3Npb25Nb2RlbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcGxheWJhY2tTZXNzaW9uTW9kZWwtPnRvZ2dsZVBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwor
LSAodm9pZClfdG91Y2hEZXRlY3RlZDooaWQpc2VuZGVyCit7CisgICAgaWYgKFtfdG91Y2hHZXN0
dXJlUmVjb2duaXplciBzdGF0ZV0gIT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQmVnYW4gfHwg
W190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3Rh
dGVFbmRlZCkgeworICAgICAgICBkb3VibGUgc2NvcmUgPSBfc2VjaGV1cmlzdGljLnNjb3JlT2ZO
ZXh0VG91Y2goW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIGxvY2F0aW9uSW5WaWV3OnNlbGYudmll
d10pOworICAgICAgICBpZiAoc2NvcmUgPiByZXF1aXJlZFNjb3JlKQorICAgICAgICAgICAgW3Nl
bGYgX3Nob3dQaGlzaGluZ0FsZXJ0XTsKKyAgICB9CisgICAgW3NlbGYgc2hvd1VJXTsKK30KKwor
LSAodm9pZClfc3RhdHVzQmFyRnJhbWVEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uQ2VudGVyICop
bm90aWZpY2F0aW9uCit7CisgICAgQ0dGbG9hdCBoZWlnaHQgPSBVSUFwcGxpY2F0aW9uLnNoYXJl
ZEFwcGxpY2F0aW9uLnN0YXR1c0JhckZyYW1lLnNpemUuaGVpZ2h0OworICAgIGlmICghaGVpZ2h0
IHx8IGhlaWdodCA9PSBfbm9uWmVyb1N0YXR1c0JhckhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgX25vblplcm9TdGF0dXNCYXJIZWlnaHQgPSBoZWlnaHQ7CisgICAgW3NlbGYgX3VwZGF0
ZVdlYlZpZXdGdWxsc2NyZWVuSW5zZXRzXTsKK30KKworLSAodm9pZClfdXBkYXRlV2ViVmlld0Z1
bGxzY3JlZW5JbnNldHMKK3sKKyAgICBpZiAoYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXIp
CisgICAgICAgIG1hbmFnZXItPnNldEZ1bGxzY3JlZW5JbnNldFRvcChzZWxmLl9lZmZlY3RpdmVG
dWxsc2NyZWVuSW5zZXRUb3ApOworfQorCistICh2b2lkKV9zaG93UGhpc2hpbmdBbGVydAorewor
ICAgIE5TU3RyaW5nICphbGVydFRpdGxlID0gQCJEZWNlcHRpdmUgV2Vic2l0ZSBXYXJuaW5nIjsK
KyAgICBOU1N0cmluZyAqYWxlcnRNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJUaGUgd2Vic2l0ZSBcIiVAXCIgbWF5IGJlIGEgZGVjZXB0aXZlIHdlYnNpdGUuIFdvdWxkIHlv
dSBsaWtlIHRvIGV4aXQgZnVsbHNjcmVlbj8iLCAoTlNTdHJpbmcgKilzZWxmLmxvY2F0aW9uXTsK
KyAgICBVSUFsZXJ0Q29udHJvbGxlciogYWxlcnQgPSBbVUlBbGVydENvbnRyb2xsZXIgYWxlcnRD
b250cm9sbGVyV2l0aFRpdGxlOmFsZXJ0VGl0bGUgbWVzc2FnZTphbGVydE1lc3NhZ2UgcHJlZmVy
cmVkU3R5bGU6VUlBbGVydENvbnRyb2xsZXJTdHlsZUFsZXJ0XTsKKworICAgIFVJQWxlcnRBY3Rp
b24qIGRlZmF1bHRBY3Rpb24gPSBbVUlBbGVydEFjdGlvbiBhY3Rpb25XaXRoVGl0bGU6QCJFeGl0
IEZ1bGxzY3JlZW4iIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZURlZmF1bHQgaGFuZGxlcjpeKFVJ
QWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgW3NlbGYgX2NhbmNlbEFjdGlvbjphY3Rp
b25dOworICAgIH1dOworCisgICAgVUlBbGVydEFjdGlvbiogY2FuY2VsQWN0aW9uID0gW1VJQWxl
cnRBY3Rpb24gYWN0aW9uV2l0aFRpdGxlOkAiU3RheSBpbiBGdWxsc2NyZWVuIiBzdHlsZTpVSUFs
ZXJ0QWN0aW9uU3R5bGVDYW5jZWwgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsK
KyAgICAgICAgX3NlY2hldXJpc3RpYy5yZXNldCgpOworICAgIH1dOworCisgICAgW2FsZXJ0IGFk
ZEFjdGlvbjpkZWZhdWx0QWN0aW9uXTsKKyAgICBbYWxlcnQgYWRkQWN0aW9uOmNhbmNlbEFjdGlv
bl07CisgICAgW3NlbGYgcHJlc2VudFZpZXdDb250cm9sbGVyOmFsZXJ0IGFuaW1hdGVkOllFUyBj
b21wbGV0aW9uOm5pbF07Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkgJiYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1Mu
aApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oCnJlbmFtZSB0byBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVySU9TLmgKaW5kZXggOWVhYjYyMzQ1MjguLmJiZWYyYTEyODhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJJT1MuaApAQCAtMjcsMzEgKzI3LDIwIEBACiAKICNpbXBvcnQgPFVJ
S2l0L1VJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQg
eyAKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
SW50UmVjdDsKLX0KLQogQGNsYXNzIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Owog
QGNsYXNzIFdLV2ViVmlldzsKIAogQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyIDogTlNPYmplY3QgPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uaW5nRGVsZWdhdGU+CitA
cHJvcGVydHkgKHJlYWRvbmx5LCByZXRhaW4sIG5vbmF0b21pYykgV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcgKndlYlZpZXdQbGFjZWhvbGRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHks
IGFzc2lnbiwgbm9uYXRvbWljKSBCT09MIGlzRnVsbFNjcmVlbjsKIAogLSAoaWQpaW5pdFdpdGhX
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OwotCi0tIChXZWJDb3JlRnVsbFNjcmVlblBsYWNl
aG9sZGVyVmlldyopd2ViVmlld1BsYWNlaG9sZGVyOwotCi0tIChCT09MKWlzRnVsbFNjcmVlbjsK
LQogLSAodm9pZCllbnRlckZ1bGxTY3JlZW47Ci0tICh2b2lkKWV4aXRGdWxsU2NyZWVuOwotLSAo
dm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW47Ci0tICh2b2lkKWNsb3NlOwogLSAodm9pZCliZWdh
bkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVjdClpbml0aWFsRnJhbWUgZmlu
YWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7CistICh2b2lkKXJlcXVlc3RFeGl0RnVsbFNjcmVl
bjsKKy0gKHZvaWQpZXhpdEZ1bGxTY3JlZW47CiAtICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5X
aXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVjdClm
aW5hbEZyYW1lOworLSAodm9pZCljbG9zZTsKIC0gKHZvaWQpd2ViVmlld0RpZFJlbW92ZUZyb21T
dXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbjsKIC0gKHZvaWQpdmlkZW9Db250cm9sc01hbmFnZXJE
aWRDaGFuZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQpzaW1pbGFy
aXR5IGluZGV4IDQ3JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQpyZW5hbWUgdG8gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5t
bQppbmRleCAwM2E1NTgyZTBmMy4uOWRjNDI2MmQ1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXJJT1MubW0KQEAgLTI5LDYgKzI5LDggQEAKICNpbXBvcnQgIldLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJJT1MuaCIKIAogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQg
IldLRnVsbHNjcmVlblN0YWNrVmlldy5oIgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuVmlld0NvbnRy
b2xsZXIuaCIKICNpbXBvcnQgIldLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJu
YWwuaCIKICNpbXBvcnQgIldLV2ViVmlld1ByaXZhdGUuaCIKQEAgLTU3LDEwICs1OSw2IEBAIFNP
RlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJT05BTChMaW5rUHJlc2VudGF0aW9uKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIGNvbnN0IE5TVGltZUludGVydmFsIHNob3dIaWRl
QW5pbWF0aW9uRHVyYXRpb24gPSAwLjE7Ci1zdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgYXV0
b0hpZGVEZWxheSA9IDQuMDsKLXN0YXRpYyBjb25zdCBDR0Zsb2F0IGZvbnRTaXplID0gMTI7Ci0K
IHN0YXRpYyB2b2lkIHJlcGxhY2VWaWV3V2l0aFZpZXcoVUlWaWV3ICp2aWV3LCBVSVZpZXcgKm90
aGVyVmlldykKIHsKICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CkBAIC0xMTgsMzY1ICsxMTYs
MjMxIEBAIHN0cnVjdCBXS1dlYlZpZXdTdGF0ZSB7CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAorI3ByYWdtYSBtYXJrIC0KIAotQGludGVyZmFjZSBfV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgOiBVSVZpZXdDb250cm9sbGVyIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGU+Ci1A
cHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBOU0FycmF5ICpzYXZlZENvbnN0cmFpbnRzOwot
QHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgVUlWaWV3ICpjb250ZW50VmlldzsKLUBwcm9w
ZXJ0eSAocmV0YWluLCBub25hdG9taWMpIGlkIHRhcmdldDsKLUBwcm9wZXJ0eSAoYXNzaWduLCBu
b25hdG9taWMpIFNFTCBhY3Rpb247CitAaW50ZXJmYWNlIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNv
bnRyb2xsZXIgOiBOU09iamVjdCA8VUlWaWV3Q29udHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmlu
ZywgVUlWaWV3Q29udHJvbGxlckludGVyYWN0aXZlVHJhbnNpdGlvbmluZz4KK0Bwcm9wZXJ0eSAo
cmV0YWluLCBub25hdG9taWMpIFVJVmlld0NvbnRyb2xsZXIqIHZpZXdDb250cm9sbGVyOworQHBy
b3BlcnR5IChub25hdG9taWMpIENHUmVjdCBpbml0aWFsRnJhbWU7CitAcHJvcGVydHkgKG5vbmF0
b21pYykgQ0dSZWN0IGZpbmFsRnJhbWU7CitAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlz
QW5pbWF0aW5nSW4pIEJPT0wgYW5pbWF0aW5nSW47CiBAZW5kCiAKLUBpbXBsZW1lbnRhdGlvbiBf
V0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgewotICAgIFJldGFpblB0cjxVSVZpZXc+IF9iYWNr
Z3JvdW5kVmlldzsKLSAgICBSZXRhaW5QdHI8VUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcj4g
X3RvdWNoR2VzdHVyZVJlY29nbml6ZXI7Ci0gICAgUmV0YWluUHRyPFVJQnV0dG9uPiBfY2FuY2Vs
QnV0dG9uOwotICAgIFJldGFpblB0cjxVSUJ1dHRvbj4gX2xvY2F0aW9uQnV0dG9uOwotICAgIFJl
dGFpblB0cjxVSVZpc3VhbEVmZmVjdFZpZXc+IF92aXN1YWxFZmZlY3RWaWV3OworQGltcGxlbWVu
dGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgeworICAgIENHUmVjdCBfaW5p
dGlhbE1hc2tWaWV3Qm91bmRzOworICAgIENHUmVjdCBfZmluYWxNYXNrVmlld0JvdW5kczsKKyAg
ICBDR0FmZmluZVRyYW5zZm9ybSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07CisgICAg
Q0dBZmZpbmVUcmFuc2Zvcm0gX2ZpbmFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAgICBDR1Bv
aW50IF9pbml0aWFsTWFza1ZpZXdDZW50ZXI7CisgICAgQ0dQb2ludCBfZmluYWxNYXNrVmlld0Nl
bnRlcjsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfbWFza1ZpZXc7CisgICAgUmV0YWluUHRyPFVJ
Vmlldz4gX2FuaW1hdGluZ1ZpZXc7CisgICAgUmV0YWluUHRyPGlkPFVJVmlld0NvbnRyb2xsZXJD
b250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0OworICAgIENHRmxvYXQgX2luaXRpYWxCYWNr
Z3JvdW5kQWxwaGE7CisgICAgQ0dGbG9hdCBfZmluYWxCYWNrZ3JvdW5kQWxwaGE7CiB9CiAKLS0g
KHZvaWQpZGVhbGxvYworLSAoTlNUaW1lSW50ZXJ2YWwpdHJhbnNpdGlvbkR1cmF0aW9uOihpZDxV
SVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0CiB7
Ci0gICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpz
ZWxmXTsKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9i
c2VydmVyOnNlbGZdOwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOworICAgIGNvbnN0IE5TVGltZUlu
dGVydmFsIGFuaW1hdGlvbkR1cmF0aW9uID0gMC4yOworICAgIHJldHVybiBhbmltYXRpb25EdXJh
dGlvbjsKIH0KIAotLSAodm9pZCl2aWV3V2lsbFRyYW5zaXRpb25Ub1NpemU6KENHU2l6ZSlzaXpl
IHdpdGhUcmFuc2l0aW9uQ29vcmRpbmF0b3I6KGlkPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9u
Q29vcmRpbmF0b3I+KWNvb3JkaW5hdG9yCistICh2b2lkKWNvbmZpZ3VyZUluaXRpYWxBbmRGaW5h
bFN0YXRlc0ZvclRyYW5zaXRpb246KGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlv
bmluZz4pdHJhbnNpdGlvbkNvbnRleHQKIHsKLSAgICBbc3VwZXIgdmlld1dpbGxUcmFuc2l0aW9u
VG9TaXplOnNpemUgd2l0aFRyYW5zaXRpb25Db29yZGluYXRvcjpjb29yZGluYXRvcl07Ci0gICAg
W2Nvb3JkaW5hdG9yIGFuaW1hdGVBbG9uZ3NpZGVUcmFuc2l0aW9uOiBeKGlkPFVJVmlld0NvbnRy
b2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PiBjb250ZXh0KSB7CisgICAgX2NvbnRl
eHQgPSB0cmFuc2l0aW9uQ29udGV4dDsKKyAgICBVSVZpZXcgKmZyb21WaWV3ID0gW3RyYW5zaXRp
b25Db250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dEZyb21WaWV3S2V5XTsKKyAg
ICBVSVZpZXcgKnRvVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCB2aWV3Rm9yS2V5OlVJVHJhbnNp
dGlvbkNvbnRleHRUb1ZpZXdLZXldOwogCi0gICAgICAgIHZvaWQgKF53ZWJWaWV3VXBkYXRlQmxv
Y2spKCkgPSBeewotICAgICAgICAgICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250ZW50Vmlld10g
X292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpzaXplIG1heGlt
dW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVdOwotICAgICAgICB9OworICAgIENHUmVjdCBp
bmxpbmVGcmFtZSA9IF9hbmltYXRpbmdJbiA/IF9pbml0aWFsRnJhbWUgOiBfZmluYWxGcmFtZTsK
KyAgICBDR1JlY3QgZnVsbHNjcmVlbkZyYW1lID0gX2FuaW1hdGluZ0luID8gX2ZpbmFsRnJhbWUg
OiBfaW5pdGlhbEZyYW1lOworICAgIF9hbmltYXRpbmdWaWV3ID0gX2FuaW1hdGluZ0luID8gdG9W
aWV3IDogZnJvbVZpZXc7CiAKLSAgICAgICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250ZW50Vmll
d10gX2JlZ2luQW5pbWF0ZWRSZXNpemVXaXRoVXBkYXRlczp3ZWJWaWV3VXBkYXRlQmxvY2tdOwot
ICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBfc2V0SW50ZXJmYWNlT3Jp
ZW50YXRpb25PdmVycmlkZTpbVUlBcHAgc3RhdHVzQmFyT3JpZW50YXRpb25dXTsKLSAgICB9IGNv
bXBsZXRpb246XihpZCA8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvckNvbnRl
eHQ+Y29udGV4dCkgewotICAgICAgICBbKFdLV2ViVmlldyAqKVtzZWxmIGNvbnRlbnRWaWV3XSBf
ZW5kQW5pbWF0ZWRSZXNpemVdOwotICAgIH1dOwotfQorICAgIENHUmVjdCBib3VuZHNSZWN0ID0g
bGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0KEZsb2F0UmVjdChpbmxpbmVGcmFt
ZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGZ1bGxzY3JlZW5GcmFtZSk7CisgICAgYm91bmRzUmVj
dC5vcmlnaW4gPSBDR1BvaW50WmVybzsKIAotKyAodm9pZCljb25maWd1cmVWaWV3OihVSVZpZXcg
Kil2aWV3IHdpdGhCYWNrZ3JvdW5kRmlsbE9mQ29sb3I6KFVJQ29sb3IgKilmaWxsQ29sb3Igb3Bh
Y2l0eTooQ0dGbG9hdClvcGFjaXR5IGZpbHRlcjooTlNTdHJpbmcgKilmaWx0ZXIKLXsKLSAgICBf
VUlWaXN1YWxFZmZlY3RMYXllckNvbmZpZyAqYmFzZUxheWVyQ29uZmlnID0gW19VSVZpc3VhbEVm
ZmVjdExheWVyQ29uZmlnIGxheWVyV2l0aEZpbGxDb2xvcjpmaWxsQ29sb3Igb3BhY2l0eTpvcGFj
aXR5IGZpbHRlclR5cGU6ZmlsdGVyXTsKLSAgICBbW1tfVUlWaXN1YWxFZmZlY3RDb25maWcgY29u
ZmlnV2l0aENvbnRlbnRDb25maWc6YmFzZUxheWVyQ29uZmlnXSBjb250ZW50Q29uZmlnXSBjb25m
aWd1cmVMYXllclZpZXc6dmlld107Ci19CisgICAgX2luaXRpYWxNYXNrVmlld0JvdW5kcyA9IF9h
bmltYXRpbmdJbiA/IGJvdW5kc1JlY3QgOiBbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXTsKKyAgICBf
aW5pdGlhbE1hc2tWaWV3Q2VudGVyID0gQ0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChbX2FuaW1h
dGluZ1ZpZXcgYm91bmRzXSksIENHUmVjdEdldE1pZFkoW19hbmltYXRpbmdWaWV3IGJvdW5kc10p
KTsKKyAgICBfZmluYWxNYXNrVmlld0JvdW5kcyA9IF9hbmltYXRpbmdJbiA/IFtfYW5pbWF0aW5n
VmlldyBib3VuZHNdIDogYm91bmRzUmVjdDsKKyAgICBfZmluYWxNYXNrVmlld0NlbnRlciA9IENH
UG9pbnRNYWtlKENHUmVjdEdldE1pZFgoW19hbmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RH
ZXRNaWRZKFtfYW5pbWF0aW5nVmlldyBib3VuZHNdKSk7CiAKLS0gKHZvaWQpX3VwZGF0ZVRyYW5z
cGFyZW5jeU9mVmlzdWFsRWZmZWN0VmlldzooVUlWaXN1YWxFZmZlY3RWaWV3ICopdmlzdWFsRWZm
ZWN0VmlldwotewotICAgIFJldGFpblB0cjxVSVZpc3VhbEVmZmVjdD4gdmlzdWFsRWZmZWN0Owor
ICAgIEZsb2F0UmVjdCBzY2FsZVJlY3QgPSBzbWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91
bmRSZWN0KEZsb2F0UmVjdChmdWxsc2NyZWVuRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBp
bmxpbmVGcmFtZSk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2NhbGVUcmFuc2Zvcm0gPSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZVJlY3Qud2lkdGgoKSAvIGZ1bGxzY3JlZW5GcmFt
ZS5zaXplLndpZHRoLCBzY2FsZVJlY3QuaGVpZ2h0KCkgLyBmdWxsc2NyZWVuRnJhbWUuc2l6ZS5o
ZWlnaHQpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zbGF0ZVRyYW5zZm9ybSA9IENHQWZm
aW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKENHUmVjdEdldE1pZFgoaW5saW5lRnJhbWUpIC0g
Q0dSZWN0R2V0TWlkWChmdWxsc2NyZWVuRnJhbWUpLCBDR1JlY3RHZXRNaWRZKGlubGluZUZyYW1l
KSAtIENHUmVjdEdldE1pZFkoZnVsbHNjcmVlbkZyYW1lKSk7CiAKLSAgICBpZiAoVUlBY2Nlc3Np
YmlsaXR5SXNSZWR1Y2VUcmFuc3BhcmVuY3lFbmFibGVkKCkpIHsKLSAgICAgICAgdmlzdWFsRWZm
ZWN0ID0gW1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0XTsKLSAgICAgICAgW1t2aXN1YWxFZmZl
Y3RWaWV3IGNvbnRlbnRWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3IgY29sb3JXaXRo
UmVkOig0My4wIC8gMjU1LjApIGdyZWVuOig0Ni4wIC8gMjU1LjApIGJsdWU6KDQ4LjAgLyAyNTUu
MCkgYWxwaGE6MS4wXV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmV0YWluUHRyPFVJQ29sb3JF
ZmZlY3Q+IHNhdHVyYXRpb25FZmZlY3QgPSBbVUlDb2xvckVmZmVjdCBjb2xvckVmZmVjdFNhdHVy
YXRlOjEuOF07Ci0gICAgICAgIFJldGFpblB0cjxVSUJsdXJFZmZlY3Q+IGJsdXJFZmZlY3QgPSBb
VUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVzOlVJUm91bmRUb1NjcmVlblNjYWxlKDE3
LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVuXSldOwotICAgICAgICBSZXRhaW5QdHI8VUlWaXN1YWxF
ZmZlY3Q+IGNvbWJpbmVkRWZmZWN0cyA9IFtVSVZpc3VhbEVmZmVjdCBlZmZlY3RDb21iaW5pbmdF
ZmZlY3RzOkBbYmx1ckVmZmVjdC5nZXQoKSwgc2F0dXJhdGlvbkVmZmVjdC5nZXQoKV1dOwotICAg
ICAgICB2aXN1YWxFZmZlY3QgPSBjb21iaW5lZEVmZmVjdHM7Ci0gICAgICAgIFtbdmlzdWFsRWZm
ZWN0VmlldyBjb250ZW50Vmlld10gc2V0QmFja2dyb3VuZENvbG9yOm5pbF07Ci0gICAgfQorICAg
IENHQWZmaW5lVHJhbnNmb3JtIGZpbmFsVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQoc2NhbGVUcmFuc2Zvcm0sIHRyYW5zbGF0ZVRyYW5zZm9ybSk7CisgICAgX2luaXRpYWxBbmlt
YXRpbmdWaWV3VHJhbnNmb3JtID0gX2FuaW1hdGluZ0luID8gZmluYWxUcmFuc2Zvcm0gOiBDR0Fm
ZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0g
PSBfYW5pbWF0aW5nSW4gPyBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5IDogZmluYWxUcmFuc2Zv
cm07CiAKLSAgICBbdmlzdWFsRWZmZWN0VmlldyBzZXRFZmZlY3Q6dmlzdWFsRWZmZWN0LmdldCgp
XTsKKyAgICBfaW5pdGlhbEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDAgOiAxOwor
ICAgIF9maW5hbEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDEgOiAwOwogfQogCi0t
IChVSVZpc3VhbEVmZmVjdFZpZXcgKil2aXN1YWxFZmZlY3RWaWV3V2l0aEZyYW1lOihDR1JlY3Qp
ZnJhbWUKKy0gKHZvaWQpYW5pbWF0ZVRyYW5zaXRpb246KGlkPFVJVmlld0NvbnRyb2xsZXJDb250
ZXh0VHJhbnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKIHsKLSAgICBSZXRhaW5QdHI8VUlW
aXN1YWxFZmZlY3RWaWV3PiB2aXN1YWxFZmZlY3RWaWV3ID0gYWRvcHROUyhbW1VJVmlzdWFsRWZm
ZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6W1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0
XV0pOwotICAgIFtzZWxmIF91cGRhdGVUcmFuc3BhcmVuY3lPZlZpc3VhbEVmZmVjdFZpZXc6dmlz
dWFsRWZmZWN0Vmlldy5nZXQoKV07Ci0KLSAgICBSZXRhaW5QdHI8VUlWaWV3PiBiYWNrTGF5ZXJU
aW50VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3Zpc3VhbEVm
ZmVjdFZpZXcgYm91bmRzXV0pOwotICAgIFtiYWNrTGF5ZXJUaW50VmlldyBzZXRBdXRvcmVzaXpp
bmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVIZWlnaHQpXTsKLSAgICBbYmFja0xheWVyVGludFZpZXcgc2V0VXNlckludGVy
YWN0aW9uRW5hYmxlZDpOT107Ci0gICAgW1tzZWxmIGNsYXNzXSBjb25maWd1cmVWaWV3OmJhY2tM
YXllclRpbnRWaWV3LmdldCgpIHdpdGhCYWNrZ3JvdW5kRmlsbE9mQ29sb3I6W1VJQ29sb3IgY29s
b3JXaXRoV2hpdGU6MC4wIGFscGhhOjAuNTVdIG9wYWNpdHk6MS4wIGZpbHRlcjprQ0FGaWx0ZXJO
b3JtYWxCbGVuZE1vZGVdOwotICAgIFtbdmlzdWFsRWZmZWN0VmlldyBjb250ZW50Vmlld10gYWRk
U3VidmlldzpiYWNrTGF5ZXJUaW50Vmlldy5nZXQoKV07CisgICAgW3NlbGYgY29uZmlndXJlSW5p
dGlhbEFuZEZpbmFsU3RhdGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dF07CiAKLSAg
ICBSZXRhaW5QdHI8VUlWaWV3PiB0b3BMYXllclRpbnRWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpbdmlzdWFsRWZmZWN0VmlldyBib3VuZHNdXSk7Ci0gICAgW3Rv
cExheWVyVGludFZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxl
eGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07Ci0gICAgW3Rv
cExheWVyVGludFZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5hYmxlZDpOT107Ci0gICAgW1tzZWxm
IGNsYXNzXSBjb25maWd1cmVWaWV3OnRvcExheWVyVGludFZpZXcuZ2V0KCkgd2l0aEJhY2tncm91
bmRGaWxsT2ZDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZToxLjAgYWxwaGE6MC4xNF0gb3Bh
Y2l0eToxLjAgZmlsdGVyOmtDQUZpbHRlck5vcm1hbEJsZW5kTW9kZV07Ci0gICAgW1t2aXN1YWxF
ZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OnRvcExheWVyVGludFZpZXcuZ2V0KCld
OwotCi0gICAgW3NlbGYgX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlzdWFsRWZmZWN0Vmlldzp2aXN1
YWxFZmZlY3RWaWV3LmdldCgpXTsKKyAgICBfbWFza1ZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFs
bG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3Ig
YmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRzOl9pbml0aWFsTWFza1ZpZXdC
b3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0aWFsTWFza1ZpZXdDZW50ZXJd
OworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFza1ZpZXcuZ2V0KCldOworICAg
IFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtXTsKKyAgICAKKyAgICBVSVZpZXcgKmNvbnRhaW5lclZpZXcgPSBbdHJhbnNpdGlvbkNvbnRl
eHQgY29udGFpbmVyVmlld107CisgICAgW2NvbnRhaW5lclZpZXcgYWRkU3VidmlldzpfYW5pbWF0
aW5nVmlldy5nZXQoKV07CiAKLSAgICByZXR1cm4gdmlzdWFsRWZmZWN0Vmlldy5hdXRvcmVsZWFz
ZSgpOwotfQorICAgIFVJV2luZG93ICp3aW5kb3cgPSBjb250YWluZXJWaWV3LndpbmRvdzsKKyAg
ICB3aW5kb3cuYmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MCBhbHBo
YTpfaW5pdGlhbEJhY2tncm91bmRBbHBoYV07CiAKLXN0YXRpYyBVSUVkZ2VJbnNldHMgbWlycm9y
RWRnZUluc2V0cyhVSUVkZ2VJbnNldHMgaW5zZXRzKQotewotICAgIHJldHVybiBVSUVkZ2VJbnNl
dHNNYWtlKGluc2V0cy50b3AsIGluc2V0cy5yaWdodCwgaW5zZXRzLmJvdHRvbSwgaW5zZXRzLmxl
ZnQpOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpbc2VsZiB0cmFuc2l0aW9uRHVy
YXRpb246dHJhbnNpdGlvbkNvbnRleHRdIGRlbGF5OjAgb3B0aW9uczpVSVZpZXdBbmltYXRpb25P
cHRpb25DdXJ2ZUVhc2VJbk91dCBhbmltYXRpb25zOl57CisgICAgICAgIFtzZWxmIHVwZGF0ZVdp
dGhQZXJjZW50OjFdOworICAgIH0gY29tcGxldGlvbjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAg
ICAgW3NlbGYgYW5pbWF0aW9uRW5kZWQ6IVt0cmFuc2l0aW9uQ29udGV4dCB0cmFuc2l0aW9uV2Fz
Q2FuY2VsbGVkXV07CisgICAgICAgIFt0cmFuc2l0aW9uQ29udGV4dCBjb21wbGV0ZVRyYW5zaXRp
b246IVt0cmFuc2l0aW9uQ29udGV4dCB0cmFuc2l0aW9uV2FzQ2FuY2VsbGVkXV07CisgICAgfV07
CiB9CiAKLS0gKHZvaWQpX3VwZGF0ZUxheW91dE1hcmdpbnMKKy0gKHZvaWQpYW5pbWF0aW9uRW5k
ZWQ6KEJPT0wpdHJhbnNpdGlvbkNvbXBsZXRlZAogewotICAgIFVJVmlldyAqdmlldyA9IFtzZWxm
IHZpZXddOwotICAgIFt2aWV3IHNldFByZXNlcnZlc1N1cGVydmlld0xheW91dE1hcmdpbnM6Tk9d
OwotCi0gICAgVUlFZGdlSW5zZXRzIHRhcmdldEluc2V0cyA9IFt2aWV3IHNhZmVBcmVhSW5zZXRz
XTsKLSAgICB0YXJnZXRJbnNldHMudG9wID0gc3RkOjptYXgodGFyZ2V0SW5zZXRzLnRvcCwgMjAu
MCk7Ci0gICAgW3ZpZXcgc2V0TGF5b3V0TWFyZ2luczp0YXJnZXRJbnNldHNdOwotfQorICAgIGlm
ICgoW3NlbGYgaXNBbmltYXRpbmdJbl0gJiYgIXRyYW5zaXRpb25Db21wbGV0ZWQpIHx8ICghW3Nl
bGYgaXNBbmltYXRpbmdJbl0gJiYgdHJhbnNpdGlvbkNvbXBsZXRlZCkpCisgICAgICAgIFtfYW5p
bWF0aW5nVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKIAotLSAodm9pZCl2aWV3RGlkTGF5b3V0
U3Vidmlld3MKLXsKLSAgICBbc2VsZiBfdXBkYXRlTGF5b3V0TWFyZ2luc107CisgICAgW19hbmlt
YXRpbmdWaWV3IHNldE1hc2tWaWV3Om5pbF07CisgICAgX21hc2tWaWV3ID0gbmlsOworICAgIF9h
bmltYXRpbmdWaWV3ID0gbmlsOwogfQogCi0tICAodm9pZClzZXRMb2NhdGlvbjooTlNTdHJpbmcg
Kilsb2NhdGlvbk5hbWUgc2VjdXJlOihCT09MKXNlY3VyZSB0cnVzdGVkTmFtZTooQk9PTCl0cnVz
dGVkTmFtZSB0cnVzdGVkU2l0ZTooQk9PTCl0cnVzdGVkU2l0ZQorLSAodm9pZClzdGFydEludGVy
YWN0aXZlVHJhbnNpdGlvbjooaWQgPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmlu
Zz4pdHJhbnNpdGlvbkNvbnRleHQKIHsKLSAgICBVSUNvbG9yICpncmVlblRpbnQgPSBbVUlDb2xv
ciBjb2xvcldpdGhSZWQ6MTAwIC8gMjU1LjAgZ3JlZW46MTc1IC8gMjU1LjAgYmx1ZTo5OSAvIDI1
NS4wIGFscGhhOjEuMF07Ci0gICAgVUlDb2xvciAqd2hpdGVUaW50ID0gW1VJQ29sb3Igd2hpdGVD
b2xvcl07Ci0KLSAgICBmbG9hdCBoUGFkZGluZyA9IDE0OwotICAgIE5TU3RyaW5nICpsb2NrSW1h
Z2VOYW1lID0gQCJMb2NrTWluaSI7CisgICAgW3NlbGYgY29uZmlndXJlSW5pdGlhbEFuZEZpbmFs
U3RhdGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dF07CiAKLSAgICBmbG9hdCBsb2Nr
U3BhY2luZyA9IHNlY3VyZSA/IDEwIDogMDsKKyAgICBfbWFza1ZpZXcgPSBhZG9wdE5TKFtbVUlW
aWV3IGFsbG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJ
Q29sb3IgYmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRzOl9pbml0aWFsTWFz
a1ZpZXdCb3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0aWFsTWFza1ZpZXdD
ZW50ZXJdOworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFza1ZpZXcuZ2V0KCld
OworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxBbmltYXRpbmdWaWV3
VHJhbnNmb3JtXTsKIAotICAgIFVJRWRnZUluc2V0cyBsb2NhdGlvbkNvbnRlbnRFZGdlSW5zZXRz
ID0gVUlFZGdlSW5zZXRzTWFrZSgwLCBoUGFkZGluZytsb2NrU3BhY2luZywgMCwgaFBhZGRpbmcp
OwotICAgIFVJRWRnZUluc2V0cyBsb2NhdGlvbkltYWdlRWRnZUluc2V0cyA9IFVJRWRnZUluc2V0
c01ha2UoMCwgLWxvY2tTcGFjaW5nLCAwLCAwKTsKLQotICAgIGlmIChbVUlWaWV3IHVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb25Gb3JTZW1hbnRpY0NvbnRlbnRBdHRyaWJ1dGU6W1tzZWxmIHZp
ZXddIHNlbWFudGljQ29udGVudEF0dHJpYnV0ZV1dID09IFVJVXNlckludGVyZmFjZUxheW91dERp
cmVjdGlvblJpZ2h0VG9MZWZ0KSB7Ci0gICAgICAgIGxvY2F0aW9uQ29udGVudEVkZ2VJbnNldHMg
PSBtaXJyb3JFZGdlSW5zZXRzKGxvY2F0aW9uQ29udGVudEVkZ2VJbnNldHMpOwotICAgICAgICBs
b2NhdGlvbkltYWdlRWRnZUluc2V0cyA9IG1pcnJvckVkZ2VJbnNldHMobG9jYXRpb25JbWFnZUVk
Z2VJbnNldHMpOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldENvbnRlbnRIb3Jpem9udGFs
QWxpZ25tZW50OlVJQ29udHJvbENvbnRlbnRIb3Jpem9udGFsQWxpZ25tZW50UmlnaHRdOworICAg
IFVJVmlldyAqY29udGFpbmVyVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCBjb250YWluZXJWaWV3
XTsKKyAgICBbY29udGFpbmVyVmlldyBhZGRTdWJ2aWV3Ol9hbmltYXRpbmdWaWV3LmdldCgpXTsK
K30KKworLSAodm9pZCl1cGRhdGVXaXRoUGVyY2VudDooQ0dGbG9hdClwZXJjZW50Cit7CisgICAg
Q0dBZmZpbmVUcmFuc2Zvcm0gcGVyY2VudFRyYW5zZm9ybSA9IF9pbml0aWFsQW5pbWF0aW5nVmll
d1RyYW5zZm9ybTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmEgKz0gcGVyY2VudCAqIChfZmluYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLmEgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0u
YSk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5iICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS5iIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmIpOworICAg
IHBlcmNlbnRUcmFuc2Zvcm0uYyArPSBwZXJjZW50ICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFu
c2Zvcm0uYyAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5jKTsKKyAgICBwZXJjZW50
VHJhbnNmb3JtLmQgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmQg
LSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uZCk7CisgICAgcGVyY2VudFRyYW5zZm9y
bS50eCArPSBwZXJjZW50ICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHggLSBfaW5p
dGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHgpOworICAgIHBlcmNlbnRUcmFuc2Zvcm0udHkg
Kz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR5IC0gX2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLnR5KTsKKyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0VHJhbnNm
b3JtOnBlcmNlbnRUcmFuc2Zvcm1dOworCisgICAgQ0dSZWN0IHBlcmNlbnRCb3VuZHMgPSBfaW5p
dGlhbE1hc2tWaWV3Qm91bmRzOworICAgIHBlcmNlbnRCb3VuZHMub3JpZ2luLnggKz0gcGVyY2Vu
dCAqIChfZmluYWxNYXNrVmlld0JvdW5kcy5vcmlnaW4ueCAtIF9pbml0aWFsTWFza1ZpZXdCb3Vu
ZHMub3JpZ2luLngpOworICAgIHBlcmNlbnRCb3VuZHMub3JpZ2luLnkgKz0gcGVyY2VudCAqIChf
ZmluYWxNYXNrVmlld0JvdW5kcy5vcmlnaW4ueSAtIF9pbml0aWFsTWFza1ZpZXdCb3VuZHMub3Jp
Z2luLnkpOworICAgIHBlcmNlbnRCb3VuZHMuc2l6ZS53aWR0aCArPSBwZXJjZW50ICogKF9maW5h
bE1hc2tWaWV3Qm91bmRzLnNpemUud2lkdGggLSBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzLnNpemUu
d2lkdGgpOworICAgIHBlcmNlbnRCb3VuZHMuc2l6ZS5oZWlnaHQgKz0gcGVyY2VudCAqIChfZmlu
YWxNYXNrVmlld0JvdW5kcy5zaXplLmhlaWdodCAtIF9pbml0aWFsTWFza1ZpZXdCb3VuZHMuc2l6
ZS5oZWlnaHQpOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRzOnBlcmNlbnRCb3VuZHNdOworCisg
ICAgQ0dQb2ludCBwZXJjZW50Q2VudGVyID0gX2luaXRpYWxNYXNrVmlld0NlbnRlcjsKKyAgICBw
ZXJjZW50Q2VudGVyLnggKz0gcGVyY2VudCAqIChfZmluYWxNYXNrVmlld0NlbnRlci54IC0gX2Zp
bmFsTWFza1ZpZXdDZW50ZXIueCk7CisgICAgcGVyY2VudENlbnRlci55ICs9IHBlcmNlbnQgKiAo
X2ZpbmFsTWFza1ZpZXdDZW50ZXIueSAtIF9maW5hbE1hc2tWaWV3Q2VudGVyLnkpOworICAgIFtf
bWFza1ZpZXcgc2V0Q2VudGVyOnBlcmNlbnRDZW50ZXJdOworCisgICAgVUlXaW5kb3cgKndpbmRv
dyA9IFtfYW5pbWF0aW5nVmlldyB3aW5kb3ddOworICAgIHdpbmRvdy5iYWNrZ3JvdW5kQ29sb3Ig
PSBbVUlDb2xvciBjb2xvcldpdGhXaGl0ZTowIGFscGhhOl9pbml0aWFsQmFja2dyb3VuZEFscGhh
ICsgcGVyY2VudCAqIChfZmluYWxCYWNrZ3JvdW5kQWxwaGEgLSBfaW5pdGlhbEJhY2tncm91bmRB
bHBoYSldOworfQorCistICh2b2lkKXVwZGF0ZVdpdGhQZXJjZW50OihDR0Zsb2F0KXBlcmNlbnQg
dHJhbnNsYXRpb246KENHU2l6ZSl0cmFuc2xhdGlvbiBhbmNob3I6KENHUG9pbnQpYW5jaG9yCit7
CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcGVyY2VudFRyYW5zZm9ybSA9IF9pbml0aWFsQW5pbWF0
aW5nVmlld1RyYW5zZm9ybTsKKyAgICBwZXJjZW50VHJhbnNmb3JtLmEgKz0gcGVyY2VudCAqIChf
ZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmEgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFu
c2Zvcm0uYSk7CisgICAgcGVyY2VudFRyYW5zZm9ybS5iICs9IHBlcmNlbnQgKiAoX2ZpbmFsQW5p
bWF0aW5nVmlld1RyYW5zZm9ybS5iIC0gX2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLmIp
OworICAgIHBlcmNlbnRUcmFuc2Zvcm0uYyArPSBwZXJjZW50ICogKF9maW5hbEFuaW1hdGluZ1Zp
ZXdUcmFuc2Zvcm0uYyAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5jKTsKKyAgICBw
ZXJjZW50VHJhbnNmb3JtLmQgKz0gcGVyY2VudCAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtLmQgLSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uZCk7CisgICAgcGVyY2VudFRy
YW5zZm9ybS50eCArPSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHggKyB0cmFuc2xh
dGlvbi53aWR0aDsKKyAgICBwZXJjZW50VHJhbnNmb3JtLnR5ICs9IF9pbml0aWFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS50eSArIHRyYW5zbGF0aW9uLmhlaWdodDsKKyAgICBbX2FuaW1hdGluZ1Zp
ZXcgc2V0VHJhbnNmb3JtOnBlcmNlbnRUcmFuc2Zvcm1dOworCisgICAgVUlXaW5kb3cgKndpbmRv
dyA9IFtfYW5pbWF0aW5nVmlldyB3aW5kb3ddOworICAgIHdpbmRvdy5iYWNrZ3JvdW5kQ29sb3Ig
PSBbVUlDb2xvciBjb2xvcldpdGhXaGl0ZTowIGFscGhhOl9pbml0aWFsQmFja2dyb3VuZEFscGhh
ICsgcGVyY2VudCAqIChfZmluYWxCYWNrZ3JvdW5kQWxwaGEgLSBfaW5pdGlhbEJhY2tncm91bmRB
bHBoYSldOworfQorCistKHZvaWQpZW5kOihCT09MKWNhbmNlbGxlZCB7CisgICAgaWYgKGNhbmNl
bGxlZCkgeworICAgICAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246W3NlbGYgdHJhbnNp
dGlvbkR1cmF0aW9uOl9jb250ZXh0LmdldCgpXSBhbmltYXRpb25zOl57CisgICAgICAgICAgICBb
c2VsZiB1cGRhdGVXaXRoUGVyY2VudDowXTsKKyAgICAgICAgfSBjb21wbGV0aW9uOl4oQk9PTCBm
aW5pc2hlZCkgeworICAgICAgICAgICAgW19jb250ZXh0IGNhbmNlbEludGVyYWN0aXZlVHJhbnNp
dGlvbl07CisgICAgICAgICAgICBbX2NvbnRleHQgY29tcGxldGVUcmFuc2l0aW9uOk5PXTsKKyAg
ICAgICAgfV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0
aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlvbjpfY29udGV4dC5nZXQoKV0gYW5pbWF0aW9uczpe
eworICAgICAgICAgICAgW3NlbGYgdXBkYXRlV2l0aFBlcmNlbnQ6MV07CisgICAgICAgIH0gY29t
cGxldGlvbjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAgICAgICAgIFtfY29udGV4dCBmaW5pc2hJ
bnRlcmFjdGl2ZVRyYW5zaXRpb25dOworICAgICAgICAgICAgW19jb250ZXh0IGNvbXBsZXRlVHJh
bnNpdGlvbjpZRVNdOworICAgICAgICB9XTsKICAgICB9Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9u
IHNldFRpdGxlQ29sb3I6KHRydXN0ZWROYW1lID8gZ3JlZW5UaW50IDogd2hpdGVUaW50KSBmb3JT
dGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBpZiAoc2VjdXJlKSB7Ci0gICAgICAg
IE5TQnVuZGxlICpidW5kbGUgPSBbTlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6W1dLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIgY2xhc3NdXTsKLSAgICAgICAgVUlJbWFnZSAqbG9ja0ltYWdlID0g
W1VJSW1hZ2UgaW1hZ2VOYW1lZDpsb2NrSW1hZ2VOYW1lIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRp
YmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpuaWxdOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNl
dEltYWdlOltsb2NrSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5n
TW9kZUFsd2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAg
ICAgIFtbX2xvY2F0aW9uQnV0dG9uIGltYWdlVmlld10gc2V0VGludENvbG9yOnRydXN0ZWRTaXRl
ID8gZ3JlZW5UaW50IDogd2hpdGVUaW50XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRU
aW50Q29sb3I6dHJ1c3RlZFNpdGUgPyBncmVlblRpbnQgOiB3aGl0ZVRpbnRdOwotICAgIH0gZWxz
ZQotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdlOm5pbCBmb3JTdGF0ZTpVSUNvbnRy
b2xTdGF0ZU5vcm1hbF07Ci0KLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldENvbnRlbnRFZGdlSW5z
ZXRzOmxvY2F0aW9uQ29udGVudEVkZ2VJbnNldHNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0
SW1hZ2VFZGdlSW5zZXRzOmxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzXTsKLSAgICBbX2xvY2F0aW9u
QnV0dG9uIHNldFRpdGxlOmxvY2F0aW9uTmFtZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1h
bF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlU3Vidmlld3MKLXsKLSAgICBfdmlzdWFsRWZmZWN0Vmll
dyA9IFtzZWxmIHZpc3VhbEVmZmVjdFZpZXdXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAyMCwg
MjApXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5n
TWFza0ludG9Db25zdHJhaW50czpOT107Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6X3Zp
c3VhbEVmZmVjdFZpZXcuZ2V0KCldOwotCi0gICAgX2NhbmNlbEJ1dHRvbiA9IFtVSUJ1dHRvbiBi
dXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNl
dFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKLSAgICBbX2Nh
bmNlbEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfY2Fu
Y2VsQnV0dG9uIHNldEJhY2tncm91bmRDb2xvcjogW1VJQ29sb3IgYmxhY2tDb2xvcl1dOwotICAg
IFtbX2NhbmNlbEJ1dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZp
bHRlcldpdGhUeXBlOmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0VGl0
bGU6V0VCX1VJX1NUUklORygiRG9uZSIsICJUZXh0IG9mIGJ1dHRvbiB0aGF0IGV4aXRzIGVsZW1l
bnQgZnVsbHNjcmVlbi4iKSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07Ci0gICAgW19j
YW5jZWxCdXR0b24gc2V0VGludENvbG9yOltVSUNvbG9yIHdoaXRlQ29sb3JdXTsKLSAgICBbW19j
YW5jZWxCdXR0b24gdGl0bGVMYWJlbF0gc2V0Rm9udDpbVUlGb250IHN5c3RlbUZvbnRPZlNpemU6
Zm9udFNpemVdXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKGNhbmNlbEFjdGlvbjopIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRUb3Vj
aFVwSW5zaWRlXTsKLQotICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2aWV3Ol9jYW5jZWxCdXR0b24u
Z2V0KCldOwotCi0gICAgX2xvY2F0aW9uQnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBl
OlVJQnV0dG9uVHlwZVN5c3RlbV07Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUcmFuc2xhdGVz
QXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50czpOT107Ci0gICAgW19sb2NhdGlvbkJ1dHRv
biBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwotICAgIFtfbG9jYXRpb25CdXR0
b24gc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGJsYWNrQ29sb3JdXTsKLSAgICBbW19sb2Nh
dGlvbkJ1dHRvbiBsYXllcl0gc2V0Q29tcG9zaXRpbmdGaWx0ZXI6W0NBRmlsdGVyIGZpbHRlcldp
dGhUeXBlOmtDQUZpbHRlclBsdXNMXV07Ci0gICAgW1tfbG9jYXRpb25CdXR0b24gdGl0bGVMYWJl
bF0gc2V0TGluZUJyZWFrTW9kZTpOU0xpbmVCcmVha0J5VHJ1bmNhdGluZ1RhaWxdOwotICAgIFtb
X2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEFkanVzdHNGb250U2l6ZVRvRml0V2lkdGg6
Tk9dOwotICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldEZvbnQ6W1VJRm9udCBz
eXN0ZW1Gb250T2ZTaXplOmZvbnRTaXplXV07Ci0gICAgW1tzZWxmIHZpZXddIGFkZFN1YnZpZXc6
X2xvY2F0aW9uQnV0dG9uLmdldCgpXTsKLQotICAgIFVJTGF5b3V0R3VpZGUqIGNvbnRhaW5lckd1
aWRlID0gW1tzZWxmIHZpZXddIGxheW91dE1hcmdpbnNHdWlkZV07Ci0KLSAgICBbW1tfdmlzdWFs
RWZmZWN0VmlldyBsZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmll
d10gbGVmdEFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtbW192aXN1YWxFZmZlY3RWaWV3
IHJpZ2h0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10gcmlnaHRB
bmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyB0b3BBbmNo
b3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBzZXRB
Y3RpdmU6WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyBoZWlnaHRBbmNob3JdIGNvbnN0
cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50OjIwXSBzZXRBY3RpdmU6WUVTXTsKLQot
ICAgIE5TTGF5b3V0Q29uc3RyYWludCAqYm90dG9tID0gW1tfdmlzdWFsRWZmZWN0VmlldyBib3R0
b21BbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSB0b3BBbmNo
b3JdXTsKLSAgICBbYm90dG9tIHNldFByaW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCAt
IDFdOwotICAgIFtib3R0b20gc2V0QWN0aXZlOllFU107Ci0KLSAgICBbW1tfY2FuY2VsQnV0dG9u
IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltjb250YWluZXJHdWlkZSBs
ZWFkaW5nQW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2NhbmNlbEJ1dHRvbiB0b3BB
bmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltbc2VsZiB2aWV3XSB0b3BBbmNob3JdXSBz
ZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tfY2FuY2VsQnV0dG9uIGJvdHRvbUFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6W192aXN1YWxFZmZlY3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNldEFj
dGl2ZTpZRVNdOwotCi0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIGhlaWdodEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9Db25zdGFudDoyMF0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2xvY2F0aW9u
QnV0dG9uIGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W192aXN1YWxFZmZl
Y3RWaWV3IGJvdHRvbUFuY2hvcl1dIHNldEFjdGl2ZTpZRVNdOwotICAgIFtbW19sb2NhdGlvbkJ1
dHRvbiBsZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFsVG9BbmNob3I6
W19jYW5jZWxCdXR0b24gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAgICBbW1tf
bG9jYXRpb25CdXR0b24gdHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxU
b0FuY2hvcjpbW3NlbGYgdmlld10gdHJhaWxpbmdBbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLSAg
ICBOU0xheW91dENvbnN0cmFpbnQgKmNlbnRlcmluZ0NvbnN0cmFpbnQgPSBbW19sb2NhdGlvbkJ1
dHRvbiBjZW50ZXJYQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbW3NlbGYgdmlld10g
Y2VudGVyWEFuY2hvcl1dOwotICAgIFtjZW50ZXJpbmdDb25zdHJhaW50IHNldFByaW9yaXR5OlVJ
TGF5b3V0UHJpb3JpdHlEZWZhdWx0TG93XTsKLSAgICBbY2VudGVyaW5nQ29uc3RyYWludCBzZXRB
Y3RpdmU6WUVTXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRBbHBoYTowXTsKLSAgICBb
X2NhbmNlbEJ1dHRvbiBzZXRBbHBoYTowXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhh
OjBdOwotCi0gICAgW192aXN1YWxFZmZlY3RWaWV3IHNldEhpZGRlbjpZRVNdOwotICAgIFtfY2Fu
Y2VsQnV0dG9uIHNldEhpZGRlbjpZRVNdOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0SGlkZGVu
OllFU107Ci19Ci0KLS0gKHZvaWQpbG9hZFZpZXcKLXsKLSAgICBbc2VsZiBzZXRWaWV3OmFkb3B0
TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEw
MCldKS5nZXQoKV07Ci0gICAgW1tzZWxmIHZpZXddIHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmll
d0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhl
aWdodCldOwotCi0gICAgX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlMb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246
QHNlbGVjdG9yKHNob3dDYW5jZWxCdXR0b246KV0pOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2du
aXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0
Q2FuY2Vsc1RvdWNoZXNJblZpZXc6Tk9dOwotICAgIFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBz
ZXRNaW5pbXVtUHJlc3NEdXJhdGlvbjowXTsKLSAgICBbW3NlbGYgdmlld10gYWRkR2VzdHVyZVJl
Y29nbml6ZXI6X3RvdWNoR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotICAgIFtzZWxmIGNyZWF0
ZVN1YnZpZXdzXTsKIH0KIAotLSAodm9pZCl2aWV3V2lsbEFwcGVhcjooQk9PTClhbmltYXRlZAot
ewotICAgIFtbc2VsZiBjb250ZW50Vmlld10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0
b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0
KV07Ci0gICAgW1tzZWxmIGNvbnRlbnRWaWV3XSBzZXRGcmFtZTpbW3NlbGYgdmlld10gYm91bmRz
XV07Ci0gICAgW1tzZWxmIHZpZXddIGluc2VydFN1YnZpZXc6W3NlbGYgY29udGVudFZpZXddIGF0
SW5kZXg6MF07Ci19CitAZW5kCiAKLS0gKHZvaWQpdmlld0RpZEFwcGVhcjooQk9PTClhbmltYXRl
ZAotewotICAgIFtzZWxmIF91cGRhdGVMYXlvdXRNYXJnaW5zXTsKLX0KKyNwcmFnbWEgbWFyayAt
CiAKLS0gKHZvaWQpY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgdGFyZ2V0
XSBwZXJmb3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Ci19CitAaW50ZXJmYWNlIFdLRnVsbFNj
cmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbiA6IE5TT2JqZWN0PFVJVmlld0NvbnRyb2xsZXJJbnRl
cmFjdGl2ZVRyYW5zaXRpb25pbmc+CistIChpZClpbml0V2l0aEFuaW1hdG9yOihXS0Z1bGxzY3Jl
ZW5BbmltYXRpb25Db250cm9sbGVyICopYW5pbWF0b3IgYW5jaG9yOihDR1BvaW50KXBvaW50Owor
QGVuZAogCi0tICh2b2lkKWhpZGVDYW5jZWxCdXR0b24KLXsKLSAgICBbTlNPYmplY3QgY2FuY2Vs
UHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGhpZGVDYW5jZWxCdXR0b24pIG9iamVjdDpuaWxdOwotICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhE
dXJhdGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvbnM6XnsKLSAgICAgICAg
W192aXN1YWxFZmZlY3RWaWV3IHNldEFscGhhOjBdOwotICAgICAgICBbX2NhbmNlbEJ1dHRvbiBz
ZXRBbHBoYTowXTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRBbHBoYTowXTsKLSAgICB9
IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKXsKLSAgICAgICAgaWYgKGZpbmlzaGVkKSB7Ci0g
ICAgICAgICAgICBbX2NhbmNlbEJ1dHRvbiBzZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgIFtf
bG9jYXRpb25CdXR0b24gc2V0SGlkZGVuOllFU107Ci0gICAgICAgICAgICBbX3Zpc3VhbEVmZmVj
dFZpZXcgc2V0SGlkZGVuOllFU107Ci0gICAgICAgIH0KLSAgICB9XTsKK0BpbXBsZW1lbnRhdGlv
biBXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24geworICAgIFJldGFpblB0cjxXS0Z1
bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyPiBfYW5pbWF0b3I7CisgICAgUmV0YWluUHRyPGlk
PFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0OworICAgIENH
UG9pbnQgX2FuY2hvcjsKIH0KIAotLSAodm9pZClzaG93Q2FuY2VsQnV0dG9uOihpZClzZW5kZXIK
Ky0gKGlkKWluaXRXaXRoQW5pbWF0b3I6KFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIg
KilhbmltYXRvciBhbmNob3I6KENHUG9pbnQpcG9pbnQKIHsKLSAgICBbTlNPYmplY3QgY2FuY2Vs
UHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KGhpZGVDYW5jZWxCdXR0b24pIG9iamVjdDpuaWxdOwotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpAc2VsZWN0b3IoaGlkZUNhbmNlbEJ1dHRvbikgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTph
dXRvSGlkZURlbGF5XTsKLSAgICBbVUlWaWV3IGFuaW1hdGVXaXRoRHVyYXRpb246c2hvd0hpZGVB
bmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOiBeewotICAgICAgICBbX3Zpc3VhbEVmZmVjdFZp
ZXcgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW19jYW5jZWxCdXR0b24gc2V0SGlkZGVuOk5PXTsK
LSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRIaWRkZW46Tk9dOwotICAgICAgICBbX3Zpc3Vh
bEVmZmVjdFZpZXcgc2V0QWxwaGE6MV07Ci0gICAgICAgIFtfY2FuY2VsQnV0dG9uIHNldEFscGhh
OjFdOwotICAgICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhhOjFdOwotICAgIH1dOwotfQor
ICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4g
bmlsOwogCi0tICh2b2lkKXNldFRhcmdldDooaWQpdGFyZ2V0IGFjdGlvbjooU0VMKWFjdGlvbgot
ewotICAgIFtzZWxmIHNldFRhcmdldDp0YXJnZXRdOwotICAgIFtzZWxmIHNldEFjdGlvbjphY3Rp
b25dOworICAgIF9hbmltYXRvciA9IGFuaW1hdG9yOworICAgIF9hbmNob3IgPSBwb2ludDsKKyAg
ICByZXR1cm4gc2VsZjsKIH0KIAotLy8gTUFSSyAtIFVJR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0
ZQotCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopZ2Vz
dHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaXplU2ltdWx0YW5lb3VzbHlXaXRoR2VzdHVyZVJl
Y29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilvdGhlckdlc3R1cmVSZWNvZ25pemVyCist
IChCT09MKXdhbnRzSW50ZXJhY3RpdmVTdGFydAogewogICAgIHJldHVybiBZRVM7CiB9CiAKLUBl
bmQKLQotQGludGVyZmFjZSBfV0tGdWxsc2NyZWVuUm9vdFZpZXdDb250cm9sbGVyIDogVUlWaWV3
Q29udHJvbGxlcgotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gX1dLRnVsbHNjcmVlblJvb3RWaWV3
Q29udHJvbGxlciB7Ci0gICAgQk9PTCBfc2hvd3NTdGF0dXNCYXI7Ci19Ci0KLS0gKHZvaWQpc2V0
U2hvd3NTdGF0dXNCYXI6KEJPT0wpdmFsdWUKKy0gKHZvaWQpc3RhcnRJbnRlcmFjdGl2ZVRyYW5z
aXRpb246KGlkIDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRp
b25Db250ZXh0CiB7Ci0gICAgX3Nob3dzU3RhdHVzQmFyID0gdmFsdWU7Ci0gICAgW3NlbGYgc2V0
TmVlZHNTdGF0dXNCYXJBcHBlYXJhbmNlVXBkYXRlXTsKKyAgICBfY29udGV4dCA9IHRyYW5zaXRp
b25Db250ZXh0OworICAgIFtfYW5pbWF0b3Igc3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246dHJh
bnNpdGlvbkNvbnRleHRdOwogfQogCi0tIChCT09MKXByZWZlcnNTdGF0dXNCYXJIaWRkZW4KKy0g
KHZvaWQpdXBkYXRlSW50ZXJhY3RpdmVUcmFuc2l0aW9uOihDR0Zsb2F0KXBlcmNlbnRDb21wbGV0
ZSB3aXRoVHJhbnNsYXRpb246KENHU2l6ZSl0cmFuc2xhdGlvbgogewotICAgIHJldHVybiAhX3No
b3dzU3RhdHVzQmFyOworICAgIFtfYW5pbWF0b3IgdXBkYXRlV2l0aFBlcmNlbnQ6cGVyY2VudENv
bXBsZXRlIHRyYW5zbGF0aW9uOnRyYW5zbGF0aW9uIGFuY2hvcjpfYW5jaG9yXTsKKyAgICBbX2Nv
bnRleHQgdXBkYXRlSW50ZXJhY3RpdmVUcmFuc2l0aW9uOnBlcmNlbnRDb21wbGV0ZV07CiB9CiAK
LUBlbmQKLQotQGludGVyZmFjZSBXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIDogTlNP
YmplY3QgPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+Ci1AcHJvcGVydHkg
KHJldGFpbiwgbm9uYXRvbWljKSBVSVZpZXdDb250cm9sbGVyKiB2aWV3Q29udHJvbGxlcjsKLUBw
cm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgaW5pdGlhbEZyYW1lOwotQHByb3BlcnR5IChub25h
dG9taWMpIENHUmVjdCBmaW5hbEZyYW1lOwotQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1p
c0FuaW1hdGluZ0luKSBCT09MIGFuaW1hdGluZ0luOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlcgotCi0tIChOU1RpbWVJbnRlcnZhbCl0cmFu
c2l0aW9uRHVyYXRpb246KGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4p
dHJhbnNpdGlvbkNvbnRleHQKKy0gKHZvaWQpY2FuY2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uCiB7
Ci0gICAgY29uc3QgTlNUaW1lSW50ZXJ2YWwgYW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7Ci0gICAg
cmV0dXJuIGFuaW1hdGlvbkR1cmF0aW9uOworICAgIFtfYW5pbWF0b3IgZW5kOllFU107CiB9CiAK
LS0gKHZvaWQpYW5pbWF0ZVRyYW5zaXRpb246KGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJh
bnNpdGlvbmluZz4pdHJhbnNpdGlvbkNvbnRleHQKKy0gKHZvaWQpZmluaXNoSW50ZXJhY3RpdmVU
cmFuc2l0aW9uCiB7Ci0gICAgVUlWaWV3ICpjb250YWluZXJWaWV3ID0gW3RyYW5zaXRpb25Db250
ZXh0IGNvbnRhaW5lclZpZXddOwotICAgIFVJVmlldyAqZnJvbVZpZXcgPSBbdHJhbnNpdGlvbkNv
bnRleHQgdmlld0ZvcktleTpVSVRyYW5zaXRpb25Db250ZXh0RnJvbVZpZXdLZXldOwotICAgIFVJ
VmlldyAqdG9WaWV3ID0gW3RyYW5zaXRpb25Db250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9u
Q29udGV4dFRvVmlld0tleV07Ci0KLSAgICBDR1JlY3QgaW5saW5lRnJhbWUgPSBfYW5pbWF0aW5n
SW4gPyBfaW5pdGlhbEZyYW1lIDogX2ZpbmFsRnJhbWU7Ci0gICAgQ0dSZWN0IGZ1bGxzY3JlZW5G
cmFtZSA9IF9hbmltYXRpbmdJbiA/IF9maW5hbEZyYW1lIDogX2luaXRpYWxGcmFtZTsKLSAgICBV
SVZpZXcgKmFuaW1hdGluZ1ZpZXcgPSBfYW5pbWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsK
LSAgICAKLSAgICBDR1JlY3QgYm91bmRzUmVjdCA9IGxhcmdlc3RSZWN0V2l0aEFzcGVjdFJhdGlv
SW5zaWRlUmVjdChGbG9hdFJlY3QoaW5saW5lRnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBm
dWxsc2NyZWVuRnJhbWUpOwotICAgIGJvdW5kc1JlY3Qub3JpZ2luID0gQ0dQb2ludFplcm87Ci0g
ICAgUmV0YWluUHRyPFVJVmlldz4gbWFza1ZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBp
bml0XSk7Ci0gICAgW21hc2tWaWV3IHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBibGFja0Nv
bG9yXV07Ci0gICAgW21hc2tWaWV3IHNldEJvdW5kczpfYW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0
IDogW2FuaW1hdGluZ1ZpZXcgYm91bmRzXV07Ci0gICAgW21hc2tWaWV3IHNldENlbnRlcjpDR1Bv
aW50TWFrZShDR1JlY3RHZXRNaWRYKFthbmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRN
aWRZKFthbmltYXRpbmdWaWV3IGJvdW5kc10pKV07Ci0gICAgW2FuaW1hdGluZ1ZpZXcgc2V0TWFz
a1ZpZXc6bWFza1ZpZXcuZ2V0KCldOwotICAgIAotICAgIEZsb2F0UmVjdCBzY2FsZVJlY3QgPSBz
bWFsbGVzdFJlY3RXaXRoQXNwZWN0UmF0aW9Bcm91bmRSZWN0KEZsb2F0UmVjdChmdWxsc2NyZWVu
RnJhbWUpLnNpemUoKS5hc3BlY3RSYXRpbygpLCBpbmxpbmVGcmFtZSk7Ci0gICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gc2NhbGVUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2Fs
ZVJlY3Qud2lkdGgoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXplLndpZHRoLCBzY2FsZVJlY3QuaGVp
Z2h0KCkgLyBmdWxsc2NyZWVuRnJhbWUuc2l6ZS5oZWlnaHQpOwotICAgIENHQWZmaW5lVHJhbnNm
b3JtIHRyYW5zbGF0ZVRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9u
KENHUmVjdEdldE1pZFgoaW5saW5lRnJhbWUpIC0gQ0dSZWN0R2V0TWlkWChmdWxsc2NyZWVuRnJh
bWUpLCBDR1JlY3RHZXRNaWRZKGlubGluZUZyYW1lKSAtIENHUmVjdEdldE1pZFkoZnVsbHNjcmVl
bkZyYW1lKSk7Ci0gICAgCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gZmluYWxUcmFuc2Zvcm0gPSBD
R0FmZmluZVRyYW5zZm9ybUNvbmNhdChzY2FsZVRyYW5zZm9ybSwgdHJhbnNsYXRlVHJhbnNmb3Jt
KTsKLQotICAgIFthbmltYXRpbmdWaWV3IHNldFRyYW5zZm9ybTpfYW5pbWF0aW5nSW4gPyBmaW5h
bFRyYW5zZm9ybSA6IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHldOwotICAgIAotICAgIFtjb250
YWluZXJWaWV3IGFkZFN1YnZpZXc6YW5pbWF0aW5nVmlld107Ci0KLSAgICBbVUlWaWV3IGFuaW1h
dGVXaXRoRHVyYXRpb246W3NlbGYgdHJhbnNpdGlvbkR1cmF0aW9uOnRyYW5zaXRpb25Db250ZXh0
XSBkZWxheTowIG9wdGlvbnM6VUlWaWV3QW5pbWF0aW9uT3B0aW9uQ3VydmVFYXNlSW5PdXQgYW5p
bWF0aW9uczpeewotICAgICAgICBbYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2FuaW1hdGlu
Z0luID8gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSA6IGZpbmFsVHJhbnNmb3JtXTsKLSAgICAg
ICAgW21hc2tWaWV3IHNldEJvdW5kczpfYW5pbWF0aW5nSW4gPyBhbmltYXRpbmdWaWV3LmJvdW5k
cyA6IGJvdW5kc1JlY3RdOwotICAgICAgICBbbWFza1ZpZXcgc2V0Q2VudGVyOkNHUG9pbnRNYWtl
KENHUmVjdEdldE1pZFgoW2FuaW1hdGluZ1ZpZXcgYm91bmRzXSksIENHUmVjdEdldE1pZFkoW2Fu
aW1hdGluZ1ZpZXcgYm91bmRzXSkpXTsKLSAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVk
KXsKLSAgICAgICAgQk9PTCBzdWNjZXNzID0gIVt0cmFuc2l0aW9uQ29udGV4dCB0cmFuc2l0aW9u
V2FzQ2FuY2VsbGVkXTsKLQotICAgICAgICBpZiAoKFtzZWxmIGlzQW5pbWF0aW5nSW5dICYmICFz
dWNjZXNzKSB8fCAoIVtzZWxmIGlzQW5pbWF0aW5nSW5dICYmIHN1Y2Nlc3MpKQotICAgICAgICAg
ICAgW2FuaW1hdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICAgICAgW3RyYW5z
aXRpb25Db250ZXh0IGNvbXBsZXRlVHJhbnNpdGlvbjpzdWNjZXNzXTsKLSAgICAgICAgW2FuaW1h
dGluZ1ZpZXcgc2V0TWFza1ZpZXc6bmlsXTsKLSAgICB9XTsKKyAgICBbX2FuaW1hdG9yIGVuZDpO
T107CiB9CitAZW5kCiAKLS0gKHZvaWQpYW5pbWF0aW9uRW5kZWQ6KEJPT0wpdHJhbnNpdGlvbkNv
bXBsZXRlZAotewotfQorI3ByYWdtYSBtYXJrIC0KIAorQGludGVyZmFjZSBXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyICgpIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGU+CiBAZW5kCiAK
IEBpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKQEAgLTQ4Nywx
OCArMzUxLDIzIEBAIEBpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
IHsKICAgICBXS1dlYlZpZXdTdGF0ZSBfdmlld1N0YXRlOwogCiAgICAgUmV0YWluUHRyPFVJV2lu
ZG93PiBfd2luZG93OwotICAgIFJldGFpblB0cjxfV0tGdWxsc2NyZWVuUm9vdFZpZXdDb250cm9s
bGVyPiBfcm9vdFZpZXdDb250cm9sbGVyOworICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVy
PiBfcm9vdFZpZXdDb250cm9sbGVyOwogCiAgICAgUmVmUHRyPFdlYktpdDo6Vm9pZENhbGxiYWNr
PiBfcmVwYWludENhbGxiYWNrOwogICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBfdmll
d0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb247Ci0gICAgUmV0YWluUHRyPF9XS0Z1bGxTY3JlZW5W
aWV3Q29udHJvbGxlcj4gX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8
V0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXI+IF9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXI7Cisg
ICAgUmV0YWluUHRyPFVJU3dpcGVHZXN0dXJlUmVjb2duaXplcj4gX3N0YXJ0RGlzbWlzc0dlc3R1
cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxVSVBhbkdlc3R1cmVSZWNvZ25pemVyPiBfaW50
ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPFdLRnVsbFNj
cmVlbkludGVyYWN0aXZlVHJhbnNpdGlvbj4gX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25D
b29yZGluYXRvcjsKIAogICAgIENHUmVjdCBfaW5pdGlhbEZyYW1lOwogICAgIENHUmVjdCBfZmlu
YWxGcmFtZTsKIAogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX0VWT3JnYW5pemF0aW9uTmFtZTsK
ICAgICBCT09MIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkOworICAgIEJPT0wgX2luSW50ZXJh
Y3RpdmVEaXNtaXNzOwogCisgICAgUmV0YWluUHRyPGlkPiBfbm90aWZpY2F0aW9uTGlzdGVuZXI7
CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC01MzYsODkgKzQwNSw3IEBAIC0gKFdlYkNvcmVGdWxs
U2NyZWVuUGxhY2Vob2xkZXJWaWV3ICopd2ViVmlld1BsYWNlaG9sZGVyCiB9CiAKICNwcmFnbWEg
bWFyayAtCi0jcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UKLQotLSAodm9pZClfaW52YWxp
ZGF0ZUVWT3JnYW5pemF0aW9uTmFtZQotewotICAgIF9FVk9yZ2FuaXphdGlvbk5hbWUgPSBuaWw7
Ci0gICAgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQgPSBOTzsKLX0KLQotLSAoQk9PTClpc1Nl
Y3VyZQotewotICAgIHJldHVybiBfd2ViVmlldy5oYXNPbmx5U2VjdXJlQ29udGVudDsKLX0KLQot
LSAoU2VjVHJ1c3RSZWYpX3NlcnZlclRydXN0Ci17Ci0gICAgcmV0dXJuIF93ZWJWaWV3LnNlcnZl
clRydXN0OwotfQotCi0tIChOU1N0cmluZyAqKV9FVk9yZ2FuaXphdGlvbk5hbWUKLXsKLSAgICBp
ZiAoIXNlbGYuaXNTZWN1cmUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAoX0VWT3Jn
YW5pemF0aW9uTmFtZUlzVmFsaWQpCi0gICAgICAgIHJldHVybiBfRVZPcmdhbml6YXRpb25OYW1l
LmdldCgpOwotCi0gICAgQVNTRVJUKCFfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpKTsKLSAgICBf
RVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IFlFUzsKLQotICAgIFNlY1RydXN0UmVmIHRydXN0
ID0gW3NlbGYgX3NlcnZlclRydXN0XTsKLSAgICBpZiAoIXRydXN0KQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgTlNEaWN0aW9uYXJ5ICppbmZvRGljdGlvbmFyeSA9IFsoX19icmlkZ2UgTlNE
aWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3JlbGVhc2VdOwotICAgIC8v
IElmIFNlY1RydXN0Q29weUluZm8gcmV0dXJuZWQgTlVMTCB0aGVuIGl0J3MgbGlrZWx5IHRoYXQg
dGhlIFNlY1RydXN0UmVmIGhhcyBub3QgYmVlbiBldmFsdWF0ZWQKLSAgICAvLyBhbmQgdGhlIG9u
bHkgd2F5IHRvIGdldCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB0byBjYWxsIFNlY1RydXN0
RXZhbHVhdGUgb3Vyc2VsdmVzLgotICAgIGlmICghaW5mb0RpY3Rpb25hcnkpIHsKLSAgICAgICAg
U2VjVHJ1c3RSZXN1bHRUeXBlIHJlc3VsdCA9IGtTZWNUcnVzdFJlc3VsdFByb2NlZWQ7Ci0gICAg
ICAgIE9TU3RhdHVzIGVyciA9IFNlY1RydXN0RXZhbHVhdGUodHJ1c3QsICZyZXN1bHQpOwotICAg
ICAgICBpZiAoZXJyID09IG5vRXJyICYmIHJlc3VsdCA9PSBrU2VjVHJ1c3RSZXN1bHRQcm9jZWVk
KQotICAgICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAq
KVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgaWYgKCFpbmZv
RGljdGlvbmFyeSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgLy8gTWFr
ZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlkIGFnYWluc3Qgb3VyIGNlcnRp
ZmljYXRlIGNoYWluLgotICAgIGlkIGhhc0VWID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0ZW5kZWRWYWxpZGF0aW9uS2V5
XTsKLSAgICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gfHwgIVto
YXNFViBib29sVmFsdWVdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gTWFrZSBzdXJl
IHRoYXQgd2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZlciBhbmQgaXQgaXMgc3RpbGwg
dmFsaWQuCi0gICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2b2NhdGlvbktleV07Ci0gICAg
aWYgKCFbaXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSB8fCAhW2lz
Tm90UmV2b2tlZCBib29sVmFsdWVdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX0VWT3Jn
YW5pemF0aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6KF9fYnJpZGdlIE5T
U3RyaW5nICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsKLSAgICByZXR1cm4gX0VWT3Jn
YW5pemF0aW9uTmFtZS5nZXQoKTsKLX0KLQotLSAodm9pZCl1cGRhdGVMb2NhdGlvbkluZm8KLXsK
LSAgICBOU1VSTCogdXJsID0gX3dlYlZpZXcuX2NvbW1pdHRlZFVSTDsKLQotICAgIE5TU3RyaW5n
ICpFVk9yZ2FuaXphdGlvbk5hbWUgPSBbc2VsZiBfRVZPcmdhbml6YXRpb25OYW1lXTsKLSAgICBC
T09MIHNob3dzRVZPcmdhbml6YXRpb25OYW1lID0gW0VWT3JnYW5pemF0aW9uTmFtZSBsZW5ndGhd
ID4gMDsKLQotICAgIE5TU3RyaW5nICpkb21haW4gPSBuaWw7Ci0KLSAgICBpZiAoTGlua1ByZXNl
bnRhdGlvbkxpYnJhcnkoKSkKLSAgICAgICAgZG9tYWluID0gW3VybCBfbHBfc2ltcGxpZmllZERp
c3BsYXlTdHJpbmddOwotICAgIGVsc2UKLSAgICAgICAgZG9tYWluID0gdXNlclZpc2libGVTdHJp
bmcodXJsKTsKLQotICAgIE5TU3RyaW5nICp0ZXh0ID0gbmlsOwotICAgIGlmIChbW3VybCBzY2hl
bWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJkYXRhIl0gPT0gTlNPcmRlcmVkU2FtZSkKLSAg
ICAgICAgdGV4dCA9IEAiZGF0YToiOwotICAgIGVsc2UgaWYgKHNob3dzRVZPcmdhbml6YXRpb25O
YW1lKQotICAgICAgICB0ZXh0ID0gRVZPcmdhbml6YXRpb25OYW1lOwotICAgIGVsc2UKLSAgICAg
ICAgdGV4dCA9IGRvbWFpbjsKLQotICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldExv
Y2F0aW9uOnRleHQgc2VjdXJlOnNlbGYuaXNTZWN1cmUgdHJ1c3RlZE5hbWU6c2hvd3NFVk9yZ2Fu
aXphdGlvbk5hbWUgdHJ1c3RlZFNpdGU6ISFFVk9yZ2FuaXphdGlvbk5hbWVdOwotfQorI3ByYWdt
YSBtYXJrIEV4dGVybmFsIEludGVyZmFjZQogCiAtICh2b2lkKWVudGVyRnVsbFNjcmVlbgogewpA
QCAtNjMxLDIxICs0MTgsMzggQEAgLSAodm9pZCllbnRlckZ1bGxTY3JlZW4KIAogICAgIF93aW5k
b3cgPSBhZG9wdE5TKFtbVUlXaW5kb3cgYWxsb2NdIGluaXRdKTsKICAgICBbX3dpbmRvdyBzZXRC
YWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3IgY2xlYXJDb2xvcl1dOwotICAgIF9yb290Vmlld0NvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbX1dLRnVsbHNjcmVlblJvb3RWaWV3Q29udHJvbGxlciBhbGxvY10g
aW5pdF0pOwotICAgIFtfd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpfcm9vdFZpZXdDb250
cm9sbGVyLmdldCgpXTsKLSAgICBbW193aW5kb3cgcm9vdFZpZXdDb250cm9sbGVyXSBzZXRWaWV3
OmFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W193aW5kb3cgYm91bmRzXV0p
LmdldCgpXTsKLSAgICBbW1tfd2luZG93IHJvb3RWaWV3Q29udHJvbGxlcl0gdmlld10gc2V0QmFj
a2dyb3VuZENvbG9yOltVSUNvbG9yIGNsZWFyQ29sb3JdXTsKLSAgICBbW1tfd2luZG93IHJvb3RW
aWV3Q29udHJvbGxlcl0gdmlld10gc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6
aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07CiAg
ICAgW193aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbCAtIDFdOwogICAg
IFtfd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgX3ZpZXdDb250cm9sbGVyRm9yUHJlc2VudGF0
aW9uID0gW193aW5kb3cgcm9vdFZpZXdDb250cm9sbGVyXTsKIAotICAgIF9mdWxsc2NyZWVuVmll
d0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbX1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIGFsbG9j
XSBpbml0XSk7Ci0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0VHJhbnNpdGlvbmlu
Z0RlbGVnYXRlOnNlbGZdOworICAgIF9yb290Vmlld0NvbnRyb2xsZXIgPSBbW1VJVmlld0NvbnRy
b2xsZXIgYWxsb2NdIGluaXRdOworICAgIF9yb290Vmlld0NvbnRyb2xsZXIuZ2V0KCkudmlldyA9
IFtbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpfd2luZG93LmdldCgpLmJvdW5kc10gYXV0
b3JlbGVhc2VdOworICAgIF9yb290Vmlld0NvbnRyb2xsZXIuZ2V0KCkudmlldy5iYWNrZ3JvdW5k
Q29sb3IgPSBbVUlDb2xvciBjbGVhckNvbG9yXTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdl
dCgpLnZpZXcuYXV0b3Jlc2l6aW5nTWFzayA9IChVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdp
ZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpOworICAgIFtfcm9vdFZpZXdD
b250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uU3R5bGU6VUlNb2RhbFByZXNlbnRhdGlvbkN1
c3RvbV07CisgICAgW19yb290Vmlld0NvbnRyb2xsZXIgc2V0VHJhbnNpdGlvbmluZ0RlbGVnYXRl
OnNlbGZdOworCisgICAgX3dpbmRvdy5nZXQoKS5yb290Vmlld0NvbnRyb2xsZXIgPSBfcm9vdFZp
ZXdDb250cm9sbGVyLmdldCgpOworCisgICAgX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciA9IGFk
b3B0TlMoW1tXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
Ol93ZWJWaWV3XSk7CiAgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0TW9kYWxQcmVz
ZW50YXRpb25TdHlsZTpVSU1vZGFsUHJlc2VudGF0aW9uQ3VzdG9tXTsKLSAgICBbX2Z1bGxzY3Jl
ZW5WaWV3Q29udHJvbGxlciBzZXRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHJlcXVlc3RF
eGl0RnVsbFNjcmVlbildOwotICAgIFtbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2aWV3XSBz
ZXRGcmFtZTpbW192aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlvbiB2aWV3XSBib3VuZHNdXTsK
LSAgICBbc2VsZiB1cGRhdGVMb2NhdGlvbkluZm9dOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250
cm9sbGVyIHNldFRyYW5zaXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX2Z1bGxzY3JlZW5W
aWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvbkNhcHR1cmVzU3RhdHVzQmFyQXBwZWFy
YW5jZTpZRVNdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFRhcmdldDpzZWxm
XTsKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRBY3Rpb246QHNlbGVjdG9yKHJl
cXVlc3RFeGl0RnVsbFNjcmVlbildOworICAgIFtbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRGcmFtZTpbW19yb290Vmlld0NvbnRyb2xsZXIgdmlld10gYm91bmRzXV07CisgICAg
W3NlbGYgX3VwZGF0ZUxvY2F0aW9uSW5mb107CisKKyAgICBfc3RhcnREaXNtaXNzR2VzdHVyZVJl
Y29nbml6ZXIgPSBhZG9wdE5TKFtbVUlTd2lwZUdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSAgaW5p
dFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF9zdGFydFRvRGlzbWlzc0Z1bGxzY3Jl
ZW5DaGFuZ2VkOildKTsKKyAgICBbX3N0YXJ0RGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHNldERl
bGVnYXRlOnNlbGZdOworICAgIFtfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0Q2Fu
Y2Vsc1RvdWNoZXNJblZpZXc6WUVTXTsKKyAgICBbX3N0YXJ0RGlzbWlzc0dlc3R1cmVSZWNvZ25p
emVyIHNldE51bWJlck9mVG91Y2hlc1JlcXVpcmVkOjFdOworICAgIFtfc3RhcnREaXNtaXNzR2Vz
dHVyZVJlY29nbml6ZXIgc2V0RGlyZWN0aW9uOlVJU3dpcGVHZXN0dXJlUmVjb2duaXplckRpcmVj
dGlvbkRvd25dOworICAgIFtbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2aWV3XSBhZGRHZXN0
dXJlUmVjb2duaXplcjpfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisg
ICAgX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJUGFu
R2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdICBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX2ludGVyYWN0aXZlRGlzbWlzc0NoYW5nZWQ6KV0pOworICAgIFtfaW50ZXJhY3RpdmVE
aXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19pbnRlcmFj
dGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXRDYW5jZWxzVG91Y2hlc0luVmlldzpOT107
CisgICAgW1tfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHZpZXddIGFkZEdlc3R1cmVSZWNvZ25p
emVyOl9pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKV07CiAKICAgICBb
c2VsZiBfbWFuYWdlcl0tPnNhdmVTY3JvbGxQb3NpdGlvbigpOwogCkBAIC02NTQsMTAgKzQ1OCwx
MCBAQCAtICh2b2lkKWVudGVyRnVsbFNjcmVlbgogICAgIF92aWV3U3RhdGUuc3RvcmUoX3dlYlZp
ZXcpOwogCiAgICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IGFkb3B0TlMoW1tVSVZpZXcgYWxsb2Nd
IGluaXRdKTsKLSAgICBbW193ZWJWaWV3UGxhY2Vob2xkZXIgbGF5ZXJdIHNldE5hbWU6QCJGdWxs
c2NyZWVuIFBsYWNlaG9sZGVyIFZmaWV3Il07CisgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIGxh
eWVyXSBzZXROYW1lOkAiRnVsbHNjcmVlbiBQbGFjZWhvbGRlciBWaWV3Il07CiAKICAgICBXS1Nu
YXBzaG90Q29uZmlndXJhdGlvbiogY29uZmlnID0gbmlsOwotICAgIFtfd2ViVmlldyB0YWtlU25h
cHNob3RXaXRoQ29uZmlndXJhdGlvbjpjb25maWcgY29tcGxldGlvbkhhbmRsZXI6XihVSUltYWdl
ICogc25hcHNob3RJbWFnZSwgTlNFcnJvciAqIGVycm9yKXsKKyAgICBbX3dlYlZpZXcgdGFrZVNu
YXBzaG90V2l0aENvbmZpZ3VyYXRpb246Y29uZmlnIGNvbXBsZXRpb25IYW5kbGVyOl4oVUlJbWFn
ZSAqIHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKiBlcnJvcikgewogICAgICAgICBpZiAoIVtfd2Vi
VmlldyBfcGFnZV0pCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTY3Miw4ICs0NzYsNiBAQCAt
ICh2b2lkKWVudGVyRnVsbFNjcmVlbgogICAgICAgICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5n
TWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemlu
Z0ZsZXhpYmxlSGVpZ2h0KV07CiAgICAgICAgIFtfd2ViVmlldyBzZXRGcmFtZTpbX3dpbmRvdyBi
b3VuZHNdXTsKICAgICAgICAgW193aW5kb3cgaW5zZXJ0U3Vidmlldzpfd2ViVmlldyBhdEluZGV4
OjBdOwotICAgICAgICBbX3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5p
bXVtTGF5b3V0U2l6ZTpbX3dpbmRvdyBib3VuZHNdLnNpemUgbWF4aW11bVVub2JzY3VyZWRTaXpl
T3ZlcnJpZGU6W193aW5kb3cgYm91bmRzXS5zaXplXTsKLQogICAgICAgICBbX3dlYlZpZXcgc2V0
TmVlZHNMYXlvdXRdOwogICAgICAgICBbX3dlYlZpZXcgbGF5b3V0SWZOZWVkZWRdOwogICAgICAg
ICAKQEAgLTY4MSwxMCArNDgzLDExIEBAIC0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuCiAKICAgICAg
ICAgX3JlcGFpbnRDYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRTZWxm
ID0gcmV0YWluUHRyKHNlbGYpLCBzZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsK
ICAgICAgICAgICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBudWxscHRyOwotICAgICAgICAgICAgaWYg
KCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGlmIChhdXRvKiBtYW5hZ2VyID0gW3Byb3RlY3RlZFNlbGYgX21hbmFnZXJdKQorICAgICAgICAg
ICAgICAgIG1hbmFnZXItPndpbGxFbnRlckZ1bGxTY3JlZW4oKTsKIAotICAgICAgICAgICAgW3By
b3RlY3RlZFNlbGYgX21hbmFnZXJdLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIFtzZWxmIF9leGl0RnVsbHNjcmVl
bkltbWVkaWF0ZWx5XTsKICAgICAgICAgfSk7CiAgICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPmZv
cmNlUmVwYWludChfcmVwYWludENhbGxiYWNrLmNvcHlSZWYoKSk7CiAKQEAgLTcwNSw0NiArNTA4
LDU2IEBAIC0gKHZvaWQpYmVnYW5FbnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1Jl
Y3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHCiAgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlz
YWJsZUFjdGlvbnM6WUVTXTsKIAogICAgIFtfd2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
LSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRDb250ZW50Vmlldzpfd2ViVmlld107
CiAKICAgICBbX3dpbmRvdyBzZXRXaW5kb3dMZXZlbDpVSVdpbmRvd0xldmVsTm9ybWFsXTsKICAg
ICBbX3dpbmRvdyBtYWtlS2V5QW5kVmlzaWJsZV07Ci0gICAgW19yb290Vmlld0NvbnRyb2xsZXIg
c2V0U2hvd3NTdGF0dXNCYXI6WUVTXTsKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBz
ZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOk5PXTsKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJv
bGxlciBzaG93VUldOwogCiAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKIAotICAgIFtfdmll
d0NvbnRyb2xsZXJGb3JQcmVzZW50YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOl9mdWxsc2Ny
ZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246XnsKLSAgICAg
ICAgW3NlbGYgY29tcGxldGVkRW50ZXJGdWxsU2NyZWVuXTsKLSAgICAgICAgW19yb290Vmlld0Nv
bnRyb2xsZXIgc2V0U2hvd3NTdGF0dXNCYXI6Tk9dOworICAgIFtfcm9vdFZpZXdDb250cm9sbGVy
IHByZXNlbnRWaWV3Q29udHJvbGxlcjpfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpIGFu
aW1hdGVkOllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBJbkZ1
bGxTY3JlZW47CisKKyAgICAgICAgYXV0byogcGFnZSA9IFtfd2ViVmlldyBfcGFnZV07CisgICAg
ICAgIGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyOworICAgICAgICBpZiAocGFnZSAmJiBt
YW5hZ2VyKSB7CisgICAgICAgICAgICBtYW5hZ2VyLT5kaWRFbnRlckZ1bGxTY3JlZW4oKTsKKyAg
ICAgICAgICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFsc2UpOworICAgICAg
ICAgICAgcGFnZS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwogICAgIH1dOwogfQog
Ci0tICh2b2lkKWNvbXBsZXRlZEVudGVyRnVsbFNjcmVlbgorLSAodm9pZClyZXF1ZXN0RXhpdEZ1
bGxTY3JlZW4KIHsKLSAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCisgICAgaWYgKGF1dG8qIG1h
bmFnZXIgPSBzZWxmLl9tYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVs
bFNjcmVlbigpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgX2Z1bGxTY3JlZW5TdGF0
ZSA9IEluRnVsbFNjcmVlbjsKLQotICAgIFtzZWxmIF9tYW5hZ2VyXS0+ZGlkRW50ZXJGdWxsU2Ny
ZWVuKCk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNl
KTsKLQotICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMo
ZmFsc2UpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFtzZWxmIF9leGl0RnVsbHNj
cmVlbkltbWVkaWF0ZWx5XTsKIH0KIAogLSAodm9pZClleGl0RnVsbFNjcmVlbgogewotICAgIGlm
ICghW3NlbGYgaXNGdWxsU2NyZWVuXSkKKyAgICBpZiAoIXNlbGYuaXNGdWxsU2NyZWVuKQogICAg
ICAgICByZXR1cm47CiAgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IFdhaXRpbmdUb0V4aXRGdWxsU2Ny
ZWVuOwogCi0gICAgW3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUp
OwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Ci19CisgICAgaWYg
KGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPnNldEFu
aW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CisgICAgICAgIG1hbmFnZXItPndpbGxFeGl0RnVsbFNj
cmVlbigpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0tICh2b2lkKXJlcXVlc3RFeGl0RnVs
bFNjcmVlbgotewotICAgIFtzZWxmIF9tYW5hZ2VyXS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1t
ZWRpYXRlbHldOwogfQogCiAtICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZy
YW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCkBA
IC03NTgsMTcgKzU3MSwyMyBAQCAtICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlh
bEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUgogICAgIAogICAgIFtf
d2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXModHJ1ZSk7CiAKLSAg
ICBbX3Jvb3RWaWV3Q29udHJvbGxlciBzZXRTaG93c1N0YXR1c0JhcjpZRVNdOworICAgIFtfZnVs
bHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRkZW46Tk9dOworCisg
ICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IpIHsKKyAgICAg
ICAgW19pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgZmluaXNoSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25D
b29yZGluYXRvciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFtfZnVsbHNj
cmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOllFUyBjb21w
bGV0aW9uOl57CiAgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBbc2VsZiBjb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl07Ci0gICAgICAg
IFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFNob3dzU3RhdHVzQmFyOk5PXTsKKyAgICAgICAgW3Nl
bGYgX2NvbXBsZXRlZEV4aXRGdWxsU2NyZWVuXTsKICAgICB9XTsKIH0KIAotLSAodm9pZCljb21w
bGV0ZWRFeGl0RnVsbFNjcmVlbgorLSAodm9pZClfY29tcGxldGVkRXhpdEZ1bGxTY3JlZW4KIHsK
ICAgICBpZiAoX2Z1bGxTY3JlZW5TdGF0ZSAhPSBFeGl0aW5nRnVsbFNjcmVlbikKICAgICAgICAg
cmV0dXJuOwpAQCAtNzkzLDggKzYxMiwxMCBAQCAtICh2b2lkKWNvbXBsZXRlZEV4aXRGdWxsU2Ny
ZWVuCiAgICAgW193aW5kb3cgc2V0SGlkZGVuOllFU107CiAgICAgX3dpbmRvdyA9IG5pbDsKIAot
ICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAg
W3NlbGYgX21hbmFnZXJdLT5kaWRFeGl0RnVsbFNjcmVlbigpOworICAgIGlmIChhdXRvKiBtYW5h
Z2VyID0gc2VsZi5fbWFuYWdlcikgeworICAgICAgICBtYW5hZ2VyLT5zZXRBbmltYXRpbmdGdWxs
U2NyZWVuKGZhbHNlKTsKKyAgICAgICAgbWFuYWdlci0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICB9CiAKICAgICBpZiAoX3JlcGFpbnRDYWxsYmFjaykgewogICAgICAgICBfcmVwYWludENhbGxi
YWNrLT5pbnZhbGlkYXRlKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZh
bGlkYXRlZCk7CkBAIC04MTEsNTIgKzYzMiwzOCBAQCAtICh2b2lkKWNvbXBsZXRlZEV4aXRGdWxs
U2NyZWVuCiAgICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVw
ZGF0ZXMoZmFsc2UpOwogICAgIH0pOwogCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+Zm9yY2VSZXBh
aW50KF9yZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKLX0KLQotLSAodm9pZClleGl0RnVsbHNj
cmVlbkltbWVkaWF0ZWx5Ci17Ci0gICAgaWYgKCFbc2VsZiBpc0Z1bGxTY3JlZW5dKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIVtfd2ViVmlldyBfcGFnZV0pCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoYXV0byogcGFnZSA9IFtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgIFtfd2ViVmll
dyBfcGFnZV0tPmZvcmNlUmVwYWludChfcmVwYWludENhbGxiYWNrLmNvcHlSZWYoKSk7CisgICAg
ZWxzZQorICAgICAgICBfcmVwYWludENhbGxiYWNrLT5wZXJmb3JtQ2FsbGJhY2soKTsKIAotICAg
IFtzZWxmIF9tYW5hZ2VyXS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgW3NlbGYgZXhp
dEZ1bGxTY3JlZW5dOwotICAgIF9mdWxsU2NyZWVuU3RhdGUgPSBFeGl0aW5nRnVsbFNjcmVlbjsK
LSAgICBbc2VsZiBjb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl07Ci0gICAgcmVwbGFjZVZpZXdXaXRo
Vmlldyhfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgpLCBfd2ViVmlldyk7Ci0gICAgW193ZWJWaWV3
IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7Ci0gICAgW3NlbGYg
X21hbmFnZXJdLT5kaWRFeGl0RnVsbFNjcmVlbigpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+c2V0
QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7Ci0gICAgX3dlYlZpZXdQbGFjZWhvbGRlciA9IG5p
bDsKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQcmVmZXJzU3RhdHVzQmFySGlk
ZGVuOllFU107CiB9CiAKIC0gKHZvaWQpY2xvc2UKIHsKLSAgICBbc2VsZiBleGl0RnVsbHNjcmVl
bkltbWVkaWF0ZWx5XTsKKyAgICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CiAg
ICAgX3dlYlZpZXcgPSBuaWw7CiB9CiAKIC0gKHZvaWQpd2ViVmlld0RpZFJlbW92ZUZyb21TdXBl
cnZpZXdXaGlsZUluRnVsbHNjcmVlbgogewogICAgIGlmIChfZnVsbFNjcmVlblN0YXRlID09IElu
RnVsbFNjcmVlbiAmJiBfd2ViVmlldy53aW5kb3cgIT0gX3dpbmRvdy5nZXQoKSkKLSAgICAgICAg
W3NlbGYgZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAgICAgIFtzZWxmIF9leGl0RnVs
bHNjcmVlbkltbWVkaWF0ZWx5XTsKIH0KIAogLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZQogeworICAgIGlmIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyKQorICAgICAgICBb
X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciB2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZV07
CiB9CiAKICNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgSW50ZXJuYWwgSW50ZXJmYWNlCisj
cHJhZ21hIG1hcmsgVUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlCiAKLS0gKFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHkqKV9tYW5hZ2VyCistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdl
c3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjb2duaXplU2ltdWx0
YW5lb3VzbHlXaXRoR2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilvdGhl
ckdlc3R1cmVSZWNvZ25pemVyCiB7Ci0gICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW193ZWJWaWV3IF9wYWdlXS0+ZnVsbFNjcmVl
bk1hbmFnZXIoKTsKKyAgICByZXR1cm4gWUVTOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtODc0
LDE0ICs2ODEsMTg1IEBAIC0gKGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25p
bmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JQcmVzZW50ZWRDb250CiAKIC0gKGlkPFVJVmlld0Nv
bnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JEaXNt
aXNzZWRDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopZGlzbWlzc2VkCiB7CisgICAgQ0dS
ZWN0IGluaXRpYWxGcmFtZSA9IF9pbml0aWFsRnJhbWU7CisgICAgQ0dSZWN0IGZpbmFsRnJhbWUg
PSBfZmluYWxGcmFtZTsKKworICAgIC8vIEJlY2F1c2Ugd2UncmUgbm90IGNhbGxpbmcgInJlcXVl
c3RFeGl0RnVsbHNjcmVlbigpIiBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGludGVyYWN0aXZlIGFu
aW1hdGlvbiwKKyAgICAvLyB0aGUgX2luaXRpYWxGcmFtZSBhbmQgX2ZpbmFsRnJhbWUgdmFsdWVz
IGFyZSBsZWZ0IG92ZXIgZnJvbSB3aGVuIHdlIGVudGVyZWQgZnVsbHNjcmVlbi4KKyAgICBpZiAo
X2luSW50ZXJhY3RpdmVEaXNtaXNzKQorICAgICAgICBzdGQ6OnN3YXAoaW5pdGlhbEZyYW1lLCBm
aW5hbEZyYW1lKTsKKwogICAgIFJldGFpblB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9s
bGVyPiBhbmltYXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbW1dLRnVsbHNjcmVlbkFuaW1hdGlv
bkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKICAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRW
aWV3Q29udHJvbGxlcjpkaXNtaXNzZWRdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldElu
aXRpYWxGcmFtZTpfaW5pdGlhbEZyYW1lXTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRG
aW5hbEZyYW1lOl9maW5hbEZyYW1lXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRJbml0
aWFsRnJhbWU6aW5pdGlhbEZyYW1lXTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRGaW5h
bEZyYW1lOmZpbmFsRnJhbWVdOwogICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1hdGlu
Z0luOk5PXTsKICAgICByZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci5hdXRvcmVsZWFzZSgpOwog
fQogCistIChpZDxVSVZpZXdDb250cm9sbGVySW50ZXJhY3RpdmVUcmFuc2l0aW9uaW5nPilpbnRl
cmFjdGlvbkNvbnRyb2xsZXJGb3JEaXNtaXNzYWw6KGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRl
ZFRyYW5zaXRpb25pbmc+KWFuaW1hdG9yCit7CisgICAgaWYgKCFfaW5JbnRlcmFjdGl2ZURpc21p
c3MpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoIVthbmltYXRvciBpc0tpbmRPZkNs
YXNzOltXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyIGNsYXNzXV0pCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICBpZiAoIV9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRp
bmF0b3IpCisgICAgICAgIF9pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3Ig
PSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIGFsbG9jXSBpbml0
V2l0aEFuaW1hdG9yOihXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyICopYW5pbWF0b3Ig
YW5jaG9yOkNHUG9pbnRaZXJvXSk7CisKKyAgICByZXR1cm4gX2ludGVyYWN0aXZlRGlzbWlzc1Ry
YW5zaXRpb25Db29yZGluYXRvci5nZXQoKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEg
bWFyayBJbnRlcm5hbCBJbnRlcmZhY2UKKworLSAodm9pZClfZXhpdEZ1bGxzY3JlZW5JbW1lZGlh
dGVseQoreworICAgIGlmICghW3NlbGYgaXNGdWxsU2NyZWVuXSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXI7CisgICAgaWYgKG1hbmFnZXIpCisg
ICAgICAgIG1hbmFnZXItPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworICAgIFtzZWxmIGV4aXRG
dWxsU2NyZWVuXTsKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gRXhpdGluZ0Z1bGxTY3JlZW47Cisg
ICAgW3NlbGYgX2NvbXBsZXRlZEV4aXRGdWxsU2NyZWVuXTsKKyAgICByZXBsYWNlVmlld1dpdGhW
aWV3KF93ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCksIF93ZWJWaWV3KTsKKyAgICBpZiAoYXV0byog
cGFnZSA9IFtfd2ViVmlldyBfcGFnZV0pCisgICAgICAgIHBhZ2UtPnNldFN1cHByZXNzVmlzaWJp
bGl0eVVwZGF0ZXMoZmFsc2UpOworICAgIGlmIChtYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXIt
PmRpZEV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxT
Y3JlZW4oZmFsc2UpOworICAgIH0KKyAgICBfd2ViVmlld1BsYWNlaG9sZGVyID0gbmlsOworfQor
CistICh2b2lkKV9pbnZhbGlkYXRlRVZPcmdhbml6YXRpb25OYW1lCit7CisgICAgX0VWT3JnYW5p
emF0aW9uTmFtZSA9IG5pbDsKKyAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IE5POwor
fQorCistIChCT09MKV9pc1NlY3VyZQoreworICAgIHJldHVybiBfd2ViVmlldy5oYXNPbmx5U2Vj
dXJlQ29udGVudDsKK30KKworLSAoU2VjVHJ1c3RSZWYpX3NlcnZlclRydXN0Cit7CisgICAgcmV0
dXJuIF93ZWJWaWV3LnNlcnZlclRydXN0OworfQorCistIChOU1N0cmluZyAqKV9FVk9yZ2FuaXph
dGlvbk5hbWUKK3sKKyAgICBpZiAoIXNlbGYuX2lzU2VjdXJlKQorICAgICAgICByZXR1cm4gbmls
OworCisgICAgaWYgKF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkKQorICAgICAgICByZXR1cm4g
X0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKKworICAgIEFTU0VSVCghX0VWT3JnYW5pemF0aW9u
TmFtZS5nZXQoKSk7CisgICAgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQgPSBZRVM7CisKKyAg
ICBTZWNUcnVzdFJlZiB0cnVzdCA9IFtzZWxmIF9zZXJ2ZXJUcnVzdF07CisgICAgaWYgKCF0cnVz
dCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIE5TRGljdGlvbmFyeSAqaW5mb0RpY3Rpb25h
cnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1
dG9yZWxlYXNlXTsKKyAgICAvLyBJZiBTZWNUcnVzdENvcHlJbmZvIHJldHVybmVkIE5VTEwgdGhl
biBpdCdzIGxpa2VseSB0aGF0IHRoZSBTZWNUcnVzdFJlZiBoYXMgbm90IGJlZW4gZXZhbHVhdGVk
CisgICAgLy8gYW5kIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQg
aXMgdG8gY2FsbCBTZWNUcnVzdEV2YWx1YXRlIG91cnNlbHZlcy4KKyAgICBpZiAoIWluZm9EaWN0
aW9uYXJ5KSB7CisgICAgICAgIE9TU3RhdHVzIGVyciA9IFNlY1RydXN0RXZhbHVhdGUodHJ1c3Qs
IE5VTEwpOworICAgICAgICBpZiAoZXJyID09IG5vRXJyKQorICAgICAgICAgICAgaW5mb0RpY3Rp
b25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlvbmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3Qp
IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKCFpbmZvRGljdGlvbmFyeSkKKyAgICAgICAgICAg
IHJldHVybiBuaWw7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRp
ZmljYXRlIGlzIHZhbGlkIGFnYWluc3Qgb3VyIGNlcnRpZmljYXRlIGNoYWluLgorICAgIGlkIGhh
c0VWID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilr
U2VjVHJ1c3RJbmZvRXh0ZW5kZWRWYWxpZGF0aW9uS2V5XTsKKyAgICBpZiAoIVtoYXNFViBpc0tp
bmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0gfHwgIVtoYXNFViBib29sVmFsdWVdKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY291bGQgY29udGFjdCBy
ZXZvY2F0aW9uIHNlcnZlciBhbmQgaXQgaXMgc3RpbGwgdmFsaWQuCisgICAgaWQgaXNOb3RSZXZv
a2VkID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilr
U2VjVHJ1c3RJbmZvUmV2b2NhdGlvbktleV07CisgICAgaWYgKCFbaXNOb3RSZXZva2VkIGlzS2lu
ZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSB8fCAhW2lzTm90UmV2b2tlZCBib29sVmFsdWVdKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgX0VWT3JnYW5pemF0aW9uTmFtZSA9IFtpbmZvRGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6KF9fYnJpZGdlIE5TU3RyaW5nICopa1NlY1RydXN0SW5mb0Nv
bXBhbnlOYW1lS2V5XTsKKyAgICByZXR1cm4gX0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKK30K
KworLSAodm9pZClfdXBkYXRlTG9jYXRpb25JbmZvCit7CisgICAgTlNVUkwqIHVybCA9IF93ZWJW
aWV3Ll9jb21taXR0ZWRVUkw7CisKKyAgICBOU1N0cmluZyAqRVZPcmdhbml6YXRpb25OYW1lID0g
W3NlbGYgX0VWT3JnYW5pemF0aW9uTmFtZV07CisgICAgQk9PTCBzaG93c0VWT3JnYW5pemF0aW9u
TmFtZSA9IFtFVk9yZ2FuaXphdGlvbk5hbWUgbGVuZ3RoXSA+IDA7CisKKyAgICBOU1N0cmluZyAq
ZG9tYWluID0gbmlsOworCisgICAgaWYgKExpbmtQcmVzZW50YXRpb25MaWJyYXJ5KCkpCisgICAg
ICAgIGRvbWFpbiA9IFt1cmwgX2xwX3NpbXBsaWZpZWREaXNwbGF5U3RyaW5nXTsKKyAgICBlbHNl
CisgICAgICAgIGRvbWFpbiA9IHVzZXJWaXNpYmxlU3RyaW5nKHVybCk7CisKKyAgICBOU1N0cmlu
ZyAqdGV4dCA9IG5pbDsKKyAgICBpZiAoW1t1cmwgc2NoZW1lXSBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlOkAiZGF0YSJdID09IE5TT3JkZXJlZFNhbWUpCisgICAgICAgIHRleHQgPSBAImRhdGE6IjsK
KyAgICBlbHNlIGlmIChzaG93c0VWT3JnYW5pemF0aW9uTmFtZSkKKyAgICAgICAgdGV4dCA9IEVW
T3JnYW5pemF0aW9uTmFtZTsKKyAgICBlbHNlCisgICAgICAgIHRleHQgPSBkb21haW47CisKKyAg
ICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRMb2NhdGlvbjp0ZXh0XTsKK30KKworLSAo
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eSopX21hbmFnZXIKK3sKKyAgICBpZiAoIVtfd2ViVmll
dyBfcGFnZV0pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBbX3dlYlZpZXcg
X3BhZ2VdLT5mdWxsU2NyZWVuTWFuYWdlcigpOworfQorCistICh2b2lkKV9zdGFydFRvRGlzbWlz
c0Z1bGxzY3JlZW5DaGFuZ2VkOihpZClzZW5kZXIKK3sKKyAgICBfaW5JbnRlcmFjdGl2ZURpc21p
c3MgPSB0cnVlOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIGRpc21pc3NWaWV3Q29u
dHJvbGxlckFuaW1hdGVkOllFUyBjb21wbGV0aW9uOl57CisgICAgICAgIGlmICghW193ZWJWaWV3
IF9wYWdlXSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBbc2VsZiBfY29tcGxldGVk
RXhpdEZ1bGxTY3JlZW5dOworICAgICAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRQ
cmVmZXJzU3RhdHVzQmFySGlkZGVuOllFU107CisgICAgfV07Cit9CisKKy0gKHZvaWQpX2ludGVy
YWN0aXZlRGlzbWlzc0NoYW5nZWQ6KGlkKXNlbmRlcgoreworICAgIGlmICghX2luSW50ZXJhY3Rp
dmVEaXNtaXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BvaW50IHRyYW5zbGF0aW9uID0g
W19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplciB0cmFuc2xhdGlvbkluVmlldzpf
ZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZpZXddOworICAgIENHUG9pbnQgdmVsb2Np
dHkgPSBbX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyIHZlbG9jaXR5SW5WaWV3
Ol9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIuZ2V0KCkudmlld107CisgICAgQ0dGbG9hdCBwZXJj
ZW50ID0gdHJhbnNsYXRpb24ueSAvIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZp
ZXcuYm91bmRzLnNpemUuaGVpZ2h0IC8gMik7CisgICAgcGVyY2VudCA9IHN0ZDo6bWluKDEuLCBz
dGQ6Om1heCgwLiwgcGVyY2VudCkpOworCisgICAgaWYgKF9pbnRlcmFjdGl2ZURpc21pc3NHZXN0
dXJlUmVjb2duaXplci5nZXQoKS5zdGF0ZSA9PSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVFbmRl
ZCkgeworICAgICAgICBfaW5JbnRlcmFjdGl2ZURpc21pc3MgPSBmYWxzZTsKKworICAgICAgICBp
ZiAocGVyY2VudCA+IDAuMjUgfHwgKHBlcmNlbnQgPiAwICYmIHZlbG9jaXR5LnkgPiA1KSkKKyAg
ICAgICAgICAgIFtzZWxmIHJlcXVlc3RFeGl0RnVsbFNjcmVlbl07CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgW19pbnRlcmFjdGl2ZURpc21pc3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgY2Fu
Y2VsSW50ZXJhY3RpdmVUcmFuc2l0aW9uXTsKKyAgICAgICAgICAgIF9pbnRlcmFjdGl2ZURpc21p
c3NUcmFuc2l0aW9uQ29vcmRpbmF0b3IgPSBuaWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFtfaW50ZXJhY3RpdmVEaXNtaXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9y
IHVwZGF0ZUludGVyYWN0aXZlVHJhbnNpdGlvbjpwZXJjZW50IHdpdGhUcmFuc2xhdGlvbjpDR1Np
emVNYWtlKHRyYW5zbGF0aW9uLngsIHRyYW5zbGF0aW9uLnkpXTsKK30KKwogQGVuZAogCiAjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFj
a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNj
cmVlblN0YWNrVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5j
ZmQyYWY2NzUzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYg
UExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KKworTlNfQVNTVU1FX05P
Tk5VTExfQkVHSU4KKworQGludGVyZmFjZSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgOiBVSVZpZXcK
KysgKHZvaWQpYXBwbHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3OworKyAo
dm9pZClhcHBseVNlY29uZGFyeUdseXBoVGludFRvVmlldzooVUlWaWV3ICopdmlldzsKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czooTlNBcnJheTxVSVZpZXcgKj4g
KilhcnJhbmdlZFN1YnZpZXdzIGF4aXM6KFVJTGF5b3V0Q29uc3RyYWludEF4aXMpYXhpczsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIG51bGxhYmxlKSBVSVZpZXcgKnRhcmdldFZpZXdG
b3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIFVJVmlldyAqY29udGVudFZpZXc7CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAor
CisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9X
S0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmYxYTExYjVhMjcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tCkBAIC0wLDAgKzEs
MjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3LmgiCisKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NB
RmlsdGVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpc3VhbEVmZmVjdFZpZXcuaD4KKyNpbXBvcnQg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitzdGF0
aWMgTlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPiogcmVkdWNlZFRyYW5zcGFyZW5jeUVmZmVjdHMo
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNBcnJheTxVSVZpc3Vh
bEVmZmVjdCAqPj4+IGVmZmVjdHM7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9r
ZW47CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBlZmZlY3RzLmdl
dCgpID0gQFtbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciBj
b2xvcldpdGhSZWQ6KDQzLjAgLyAyNTUuMCkgZ3JlZW46KDQ2LjAgLyAyNTUuMCkgYmx1ZTooNDgu
MCAvIDI1NS4wKSBhbHBoYToxLjBdIHdpdGhNb2RlOlVJQ29tcG9zaXRpbmdNb2RlTm9ybWFsIGFs
cGhhOjEuMF1dOworICAgIH0pOworICAgIHJldHVybiBlZmZlY3RzLmdldCgpLmdldCgpOworfQor
CitzdGF0aWMgTlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPiogbm9ybWFsVHJhbnNwYXJlbmN5RWZm
ZWN0cygpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5PFVJ
VmlzdWFsRWZmZWN0ICo+Pj4gZWZmZWN0czsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGVmZmVj
dHMuZ2V0KCkgPSBAWworICAgICAgICAgICAgW1VJVmlzdWFsRWZmZWN0IGVmZmVjdENvbXBvc2l0
aW5nQ29sb3I6W1VJQ29sb3IgYmxhY2tDb2xvcl0gd2l0aE1vZGU6VUlDb21wb3NpdGluZ01vZGVO
b3JtYWwgYWxwaGE6MC41NV0sCisgICAgICAgICAgICBbVUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhC
bHVyUmFkaXVzOlVJUm91bmRUb1NjcmVlblNjYWxlKDE3LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVu
XSldLAorICAgICAgICAgICAgW1VJQ29sb3JFZmZlY3QgY29sb3JFZmZlY3RTYXR1cmF0ZToxLjhd
LAorICAgICAgICAgICAgW1VJVmlzdWFsRWZmZWN0IGVmZmVjdENvbXBvc2l0aW5nQ29sb3I6W1VJ
Q29sb3Igd2hpdGVDb2xvcl0gd2l0aE1vZGU6VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxwaGE6
MC4xNF0KKyAgICAgICAgXTsKKyAgICB9KTsKKyAgICByZXR1cm4gZWZmZWN0cy5nZXQoKS5nZXQo
KTsKK30KKworQGludGVyZmFjZSBVSVZpc3VhbEVmZmVjdFZpZXcgKFdlYktpdFByaXZhdGUpCitA
cHJvcGVydHkgKG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5KSBOU0FycmF5PFVJVmlzdWFsRWZm
ZWN0ICo+ICpiYWNrZ3JvdW5kRWZmZWN0czsKK0BlbmQKKworQGludGVyZmFjZSBXS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXcgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlTdGFja1Zp
ZXcgKl9zdGFja1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlzdWFs
RWZmZWN0VmlldyAqX3Zpc3VhbEVmZmVjdFZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYykgVUlW
aXN1YWxFZmZlY3RWaWV3ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3OworQHByb3BlcnR5
IChub25hdG9taWMpIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50ICo+ICpzZWNvbmRhcnlNYXRl
cmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHM7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1
bGxzY3JlZW5TdGFja1ZpZXcKKworI3ByYWdtYSBtYXJrIC0gQ2xhc3MgTWV0aG9kcworKyAoTlNB
cnJheTxVSVZpc3VhbEVmZmVjdCAqPiAqKWJhc2VFZmZlY3RzCit7CisgICAgaWYgKFVJQWNjZXNz
aWJpbGl0eUlzUmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gcmVk
dWNlZFRyYW5zcGFyZW5jeUVmZmVjdHMoKTsKKyAgICByZXR1cm4gbm9ybWFsVHJhbnNwYXJlbmN5
RWZmZWN0cygpOworfQorCisrICh2b2lkKWNvbmZpZ3VyZVZpZXc6KFVJVmlldyAqKXZpZXcgZm9y
VGludEVmZmVjdFdpdGhDb2xvcjooVUlDb2xvciAqKXRpbnRDb2xvciBmaWx0ZXJUeXBlOihOU1N0
cmluZyAqKWZpbHRlclR5cGUKK3sKKyAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbVUlMYWJl
bCBjbGFzc11dKSB7CisgICAgICAgIFsoVUlMYWJlbCAqKXZpZXcgc2V0VGV4dENvbG9yOnRpbnRD
b2xvcl07CisgICAgICAgIFt2aWV3IHNldFRpbnRDb2xvcjp0aW50Q29sb3JdOworICAgICAgICBb
W3ZpZXcgbGF5ZXJdIHNldENvbXBvc2l0aW5nRmlsdGVyOltDQUZpbHRlciBmaWx0ZXJXaXRoVHlw
ZTprQ0FGaWx0ZXJQbHVzTF1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX1VJVmlz
dWFsRWZmZWN0VGludExheWVyQ29uZmlnICp0aW50TGF5ZXJDb25maWcgPSBbX1VJVmlzdWFsRWZm
ZWN0VGludExheWVyQ29uZmlnIGxheWVyV2l0aFRpbnRDb2xvcjp0aW50Q29sb3IgZmlsdGVyVHlw
ZTpmaWx0ZXJUeXBlXTsKKyAgICBbW1tfVUlWaXN1YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENv
bnRlbnRDb25maWc6dGludExheWVyQ29uZmlnXSBjb250ZW50Q29uZmlnXSBjb25maWd1cmVMYXll
clZpZXc6dmlld107Cit9CisKKysgKHZvaWQpY29uZmlndXJlVmlldzooVUlWaWV3ICopdmlldyB3
aXRoQmFja2dyb3VuZEZpbGxPZkNvbG9yOihVSUNvbG9yICopZmlsbENvbG9yIG9wYWNpdHk6KENH
RmxvYXQpb3BhY2l0eSBmaWx0ZXI6KE5TU3RyaW5nICopZmlsdGVyCit7CisgICAgX1VJVmlzdWFs
RWZmZWN0TGF5ZXJDb25maWcgKmJhc2VMYXllckNvbmZpZyA9IFtfVUlWaXN1YWxFZmZlY3RMYXll
ckNvbmZpZyBsYXllcldpdGhGaWxsQ29sb3I6ZmlsbENvbG9yIG9wYWNpdHk6b3BhY2l0eSBmaWx0
ZXJUeXBlOmZpbHRlcl07CisgICAgW1tbX1VJVmlzdWFsRWZmZWN0Q29uZmlnIGNvbmZpZ1dpdGhD
b250ZW50Q29uZmlnOmJhc2VMYXllckNvbmZpZ10gY29udGVudENvbmZpZ10gY29uZmlndXJlTGF5
ZXJWaWV3OnZpZXddOworfQorCisrIChVSVZpc3VhbEVmZmVjdFZpZXcgKilzZWNvbmRhcnlNYXRl
cmlhbE92ZXJsYXlWaWV3Cit7CisgICAgVUlWaXN1YWxFZmZlY3RWaWV3ICpzZWNvbmRhcnlNYXRl
cmlhbE92ZXJsYXlWaWV3ID0gW1tVSVZpc3VhbEVmZmVjdFZpZXcgYWxsb2NdIGluaXRXaXRoRWZm
ZWN0Om5pbF07CisgICAgW3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgc2V0VXNlckludGVy
YWN0aW9uRW5hYmxlZDpOT107CisgICAgW3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgc2V0
QmFja2dyb3VuZEVmZmVjdHM6QFtbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xv
cjpbVUlDb2xvciBibGFja0NvbG9yXSB3aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZVBsdXNEYXJr
ZXIgYWxwaGE6MC4wNl1dXTsKKyAgICByZXR1cm4gc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmll
dzsKK30KKworI3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJmYWNlCisKKysgKHZvaWQpYXBw
bHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3Cit7CisgICAgW3NlbGYgY29u
ZmlndXJlVmlldzp2aWV3IGZvclRpbnRFZmZlY3RXaXRoQ29sb3I6W1VJQ29sb3IgY29sb3JXaXRo
V2hpdGU6MS4wIGFscGhhOjAuNzVdIGZpbHRlclR5cGU6a0NBRmlsdGVyUGx1c0xdOworfQorCisr
ICh2b2lkKWFwcGx5U2Vjb25kYXJ5R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3Cit7Cisg
ICAgW3NlbGYgY29uZmlndXJlVmlldzp2aWV3IGZvclRpbnRFZmZlY3RXaXRoQ29sb3I6W1VJQ29s
b3IgY29sb3JXaXRoV2hpdGU6MS4wIGFscGhhOjAuNTVdIGZpbHRlclR5cGU6a0NBRmlsdGVyUGx1
c0xdOworfQorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdzOihOU0Fy
cmF5PFVJVmlldyAqPiAqKWFycmFuZ2VkU3Vidmlld3MgYXhpczooVUlMYXlvdXRDb25zdHJhaW50
QXhpcylheGlzCit7CisgICAgc2VsZiA9IFtzZWxmIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAxMDAsIDEwMCldOworCisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOwor
CisgICAgW3NlbGYgc2V0Q2xpcHNUb0JvdW5kczpZRVNdOworCisgICAgX3Zpc3VhbEVmZmVjdFZp
ZXcgPSBbW1VJVmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6bmlsXTsKKyAg
ICBbc2VsZiBhZGRTdWJ2aWV3Ol92aXN1YWxFZmZlY3RWaWV3XTsKKyAgICBbX3Zpc3VhbEVmZmVj
dFZpZXcgc2V0QmFja2dyb3VuZEVmZmVjdHM6W1tzZWxmIGNsYXNzXSBiYXNlRWZmZWN0c11dOwor
CisgICAgX3N0YWNrVmlldyA9IFtbVUlTdGFja1ZpZXcgYWxsb2NdIGluaXRXaXRoQXJyYW5nZWRT
dWJ2aWV3czphcnJhbmdlZFN1YnZpZXdzXTsKKyAgICBbX3N0YWNrVmlldyBzZXRBeGlzOmF4aXNd
OworICAgIFtfc3RhY2tWaWV3IHNldExheW91dE1hcmdpbnNSZWxhdGl2ZUFycmFuZ2VtZW50OllF
U107CisgICAgW19zdGFja1ZpZXcgc2V0SW5zZXRzTGF5b3V0TWFyZ2luc0Zyb21TYWZlQXJlYTpO
T107CisgICAgW3NlbGYgaW5zZXJ0U3Vidmlldzpfc3RhY2tWaWV3IGFib3ZlOl92aXN1YWxFZmZl
Y3RWaWV3XTsKKworICAgIFtzZWxmIF9zZXRBcnJhbmdlZFN1YnZpZXdzOmFycmFuZ2VkU3Vidmll
d3MgYXhpczpheGlzXTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldFRhcmdl
dFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk6KFVJVmlldyAqKXRhcmdldFZpZXdGb3JT
ZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkKK3sKKyAgICBpZiAoX3RhcmdldFZpZXdGb3JTZWNvbmRh
cnlNYXRlcmlhbE92ZXJsYXkgPT0gdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3Zlcmxh
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3RhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlh
bE92ZXJsYXkgPSB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5OworICAgIFtz
ZWxmIHNldE5lZWRzVXBkYXRlQ29uc3RyYWludHNdOworfQorCistIChVSVZpZXcgKiljb250ZW50
VmlldworeworICAgIHJldHVybiBbX3Zpc3VhbEVmZmVjdFZpZXcgY29udGVudFZpZXddOworfQor
CisjcHJhZ21hIG1hcmsgLSBJbnRlcm5hbCBJbnRlcmZhY2UKKworQHN5bnRoZXNpemUgX3N0YWNr
Vmlldz1fc3RhY2tWaWV3OworQHN5bnRoZXNpemUgX3Zpc3VhbEVmZmVjdFZpZXc9X3Zpc3VhbEVm
ZmVjdFZpZXc7CisKKy0gKHZvaWQpX3NldEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3
ICo+ICopYXJyYW5nZWRTdWJ2aWV3cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXMK
K3sKKyAgICBmb3IgKFVJVmlldyAqdmlldyBpbiBbX3N0YWNrVmlldyBhcnJhbmdlZFN1YnZpZXdz
XSkKKyAgICAgICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBmb3IgKFVJVmll
dyAqdmlldyBpbiBhcnJhbmdlZFN1YnZpZXdzKQorICAgICAgICBbX3N0YWNrVmlldyBhZGRBcnJh
bmdlZFN1YnZpZXc6dmlld107CisKKyAgICBbX3N0YWNrVmlldyBzZXRBeGlzOmF4aXNdOworfQor
CisjcHJhZ21hIG1hcmsgLSBVSVZpZXcgT3ZlcnJpZGVzCisKKy0gKHZvaWQpc2V0Qm91bmRzOihD
R1JlY3QpYm91bmRzCit7CisgICAgQ0dTaXplIG9sZFNpemUgPSBbc2VsZiBib3VuZHNdLnNpemU7
CisKKyAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5kc107CisKKyAgICBpZiAoIUNHU2l6ZUVxdWFs
VG9TaXplKG9sZFNpemUsIGJvdW5kcy5zaXplKSkKKyAgICAgICAgW3NlbGYgX3NldENvbnRpbnVv
dXNDb3JuZXJSYWRpdXM6KChDR1JlY3RHZXRIZWlnaHQoYm91bmRzKSA+IDQwLjApID8gMTYuMCA6
IDguMCldOworfQorCistICh2b2lkKXVwZGF0ZUNvbnN0cmFpbnRzCit7CisgICAgaWYgKFtfc3Rh
Y2tWaWV3IHRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzXSB8fCBbX3Zp
c3VhbEVmZmVjdFZpZXcgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHNd
KSB7CisgICAgICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5n
TWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgICAgIFtfc3RhY2tWaWV3IHNldFRyYW5zbGF0
ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKKworICAgICAgICBOU0FycmF5
PE5TTGF5b3V0Q29uc3RyYWludCAqPiAqY29uc3RyYWludHMgPSBAWworICAgICAgICAgICAgW1tf
dmlzdWFsRWZmZWN0VmlldyBsZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpb
c2VsZiBsZWFkaW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IHRv
cEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgdG9wQW5jaG9yXV0sCisgICAg
ICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IHRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1
YWxUb0FuY2hvcjpbc2VsZiB0cmFpbGluZ0FuY2hvcl1dLAorICAgICAgICAgICAgW1tfdmlzdWFs
RWZmZWN0VmlldyBib3R0b21BbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGJv
dHRvbUFuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IGxlYWRpbmdBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGxlYWRpbmdBbmNob3JdXSwKKyAgICAgICAgICAg
IFtbX3N0YWNrVmlldyB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIHRv
cEFuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IHRyYWlsaW5nQW5jaG9yXSBjb25z
dHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiB0cmFpbGluZ0FuY2hvcl1dLAorICAgICAgICAgICAg
W1tfc3RhY2tWaWV3IGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYg
Ym90dG9tQW5jaG9yXV0sCisgICAgICAgIF07CisKKyAgICAgICAgZm9yIChOU0xheW91dENvbnN0
cmFpbnQgKmNvbnN0cmFpbnQgaW4gY29uc3RyYWludHMpCisgICAgICAgICAgICBbY29uc3RyYWlu
dCBzZXRQcmlvcml0eTooVUlMYXlvdXRQcmlvcml0eVJlcXVpcmVkIC0gMSldOworCisgICAgICAg
IFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpjb25zdHJhaW50c107Cisg
ICAgfQorCisgICAgaWYgKFtbc2VsZiB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5XSBpc0Rlc2NlbmRhbnRPZlZpZXc6c2VsZl0pIHsKKyAgICAgICAgaWYgKCFfc2Vjb25kYXJ5
TWF0ZXJpYWxPdmVybGF5VmlldykgeworICAgICAgICAgICAgW3NlbGYgc2V0U2Vjb25kYXJ5TWF0
ZXJpYWxPdmVybGF5VmlldzpbW3NlbGYgY2xhc3NdIHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZp
ZXddXTsKKyAgICAgICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6W3NlbGYgc2Vjb25kYXJ5TWF0ZXJp
YWxPdmVybGF5Vmlld11dOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtbc2VsZiBzZWNvbmRh
cnlNYXRlcmlhbE92ZXJsYXlWaWV3XSBpc0Rlc2NlbmRhbnRPZlZpZXc6c2VsZl0gJiYgIV9zZWNv
bmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHMpIHsKKyAgICAgICAgICAgIFtbc2Vs
ZiBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3XSBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5n
TWFza0ludG9Db25zdHJhaW50czpOT107CisgICAgICAgICAgICBOU0FycmF5PE5TTGF5b3V0Q29u
c3RyYWludCAqPiAqY29uc3RyYWludHMgPSBAWworICAgICAgICAgICAgICAgIFtbX3NlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheVZpZXcgY2VudGVyWEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNo
b3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5IGNlbnRlclhBbmNob3Jd
XSwKKyAgICAgICAgICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3IGNlbnRl
cllBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdGFyZ2V0Vmlld0ZvclNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheSBjZW50ZXJZQW5jaG9yXV0sCisgICAgICAgICAgICAgICAgW1tfc2Vj
b25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyB3aWR0aEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9B
bmNob3I6W190YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5IHdpZHRoQW5jaG9y
XV0sCisgICAgICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBoZWln
aHRBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdGFyZ2V0Vmlld0ZvclNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheSBoZWlnaHRBbmNob3JdXQorICAgICAgICAgICAgXTsKKyAgICAgICAg
ICAgIFtzZWxmIHNldFNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXdDb25zdHJhaW50czpjb25z
dHJhaW50c107CisgICAgICAgICAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3Ry
YWludHM6W3NlbGYgc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld0NvbnN0cmFpbnRzXV07Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW3N1cGVyIHVwZGF0ZUNvbnN0cmFpbnRz
XTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFU
Rk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA3NTg3MDI5NmFkZC4uMzUzNjU5ZTM3OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAyNSw4ICsyMDI1LDEyIEBA
CiAJCUM5Q0Q0MzlFMUI0QjAyNTMwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM5Q0Q0Mzk5
MUI0QjAyNDIwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmNwcCAqLzsgfTsKIAkJ
Q0QwMDNBNTIxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTAx
OUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuY3BwICovOyB9Owog
CQlDRDAwM0E1MzE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwMDNBNTEx
OUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaCAqLzsgfTsKKwkJ
Q0QwQzY4MzEyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDBDNjgyRjIw
MUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKKwkJ
Q0QwQzY4MzIyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwQzY4MzAy
MDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tICovOyB9Owog
CQlDRDE5QTI2RDFBMTNFODJBMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEy
NjkxQTEzRTgyMDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLzsg
fTsKIAkJQ0QxOUEyNkUxQTEzRTgzNDAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDE5
QTI2QTFBMTNFODIxMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLzsg
fTsKKwkJQ0QxOUQyRUEyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJp
c3RpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Qx
OUQyRTgyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICov
OyB9OworCQlDRDE5RDJFQjIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1
cmlzdGljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEMTlEMkU5MjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMu
Y3BwICovOyB9OwogCQlDRDQ5MUIwNzFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0Q0OTFCMDUxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmNw
cCAqLzsgfTsKIAkJQ0Q0OTFCMDgxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RDQ5MUIwNjFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLzsg
fTsKIAkJQ0Q0OTFCMEQxRTczMkU0RDAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENENDkxQjBCMUU3MzJFNEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0yMDU2LDYgKzIwNjAsOCBAQAogCQlD
REEyOUEyOTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREEyOUEy
NTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi87
IH07CiAJCUNEQTI5QTJBMUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCUNEQTI5QTJCMUNCRUI2
N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjcxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07
CisJCUNEQzI4MzFEMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzI4MzFCMjAx
QkQ3OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCAqLzsgfTsKKwkJQ0RDMjgz
MUUyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzI4MzFDMjAxQkQ3OUQwMEU2
RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gKi87IH07CiAJCUNEQzM4MkZFMTcyMTE3
OTkwMDhBMkZDMyAvKiBTZWNJdGVtU2hpbUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGOEE3ODEzOEI0NjA5MDBBOTVGNDQgLyogU2Vj
SXRlbVNoaW1MaWJyYXJ5Lm1tICovOyB9OwogCQlDREMzODMwNzE3MjExN0REMDA4QTJGQzMgLyog
Q29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAvKiBDb29raWVTdG9y
YWdlU2hpbUxpYnJhcnkuY3BwICovOyB9OwogCQlDREMzODMwQzE3MjEyMjgyMDA4QTJGQzMgLyog
Q29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwQjE3MjEyMUNFMDA4QTJGQzMgLyogQ29va2llU3RvcmFn
ZVNoaW1MaWJyYXJ5LmggKi87IH07CkBAIC0zMjg3LDggKzMyOTMsOCBAQAogCQkzRjg3QjlCQTE1
ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTNGODdCOUJCMTU4OTNGNjMwMDkwRkY2MiAvKiBXZWJDb2xvckNob29zZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JDaG9vc2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTNGODdCOUJGMTU4OTQwRDgwMDkwRkY2MiAvKiBX
ZWJDb2xvclBpY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xv
clBpY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjkxNUMwRTFGNTY0REVE
MDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cklPUy5tbTsgcGF0aCA9IGlvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzRjkxNUMwRjFGNTY0REVEMDAxODNDRTkgLyog
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg7IHBhdGggPSBpb3MvV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlcklPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjkxNUMwRTFG
NTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlcklPUy5tbTsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTNGOTE1QzBGMUY1
NjRERUQwMDE4M0NFOSAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaDsgcGF0aCA9IGlvcy9m
dWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJM0ZCMDhFNDIxRjYwQjI0MDAwNUU1MzEyIC8qIGlPUy54Y2Fzc2V0
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRl
ci5hc3NldGNhdGFsb2c7IHBhdGggPSBpT1MueGNhc3NldHM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxMDQ4MkNCMURERDJGQjUwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJUQ05ldHdvcmsuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTA0ODJDQzFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0
d29yay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENOZXR3b3JrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTMzLDggKzQ1MzksMTIgQEAKIAkJQzlDRDQz
OUExQjRCMDI0MjAwMjM5RTMzIC8qIFdLTWVkaWFTZXNzaW9uTWV0YWRhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tNZWRpYVNlc3Npb25NZXRhZGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDRDAwM0E1MDE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVk
aWFLZXlTdG9yYWdlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2Vi
TWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEMDAzQTUxMTlENDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFn
ZXIuaDsgcGF0aCA9IE1lZGlhQ2FjaGUvV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDBDNjgyRjIwMUZEMTAxMDBBNTk0MDkgLyogV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMEM2ODMwMjAxRkQxMDEw
MEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tOyBwYXRoID0gaW9zL2Z1bGxzY3Jl
ZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEMTlBMjY5MUExM0U4MjAwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEMTlB
MjZBMUExM0U4MjEwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDE5RDJFODIwNDY0MDZGMDAxNzA3NEEg
LyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZ1bGxzY3Jl
ZW5Ub3VjaFNlY2hldXJpc3RpYy5oOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRv
dWNoU2VjaGV1cmlzdGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEMTlEMkU5
MjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcDsgcGF0aCA9IGlv
cy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUNENDkxQjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNENDkxQjA2MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDQ5MUIwQTFFNzMyRDEyMDAwMDkwNjYg
LyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
NTc0LDYgKzQ1ODQsOCBAQAogCQlDREEyOUEyNTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREEyOUEyNjFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQTI5QTI3MUNCRUI2N0EwMDkwMUNDRiAvKiBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREMyODMxQjIwMUJENzlEMDBFNkU3NDUgLyogV0tG
dWxsc2NyZWVuU3RhY2tWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRnVsbHNjcmVlblN0YWNrVmll
dy5oOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQzI4MzFDMjAxQkQ3OUQwMEU2RTc0NSAvKiBXS0Z1
bGxzY3JlZW5TdGFja1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0Z1bGxzY3JlZW5T
dGFja1ZpZXcubW07IHBhdGggPSBpb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5TdGFja1ZpZXcu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzM4MkY3MTcyMTE1MDYwMDhBMkZD
MyAvKiBDRk5ldHdvcmsuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDRk5ldHdvcmsuZnJh
bWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ0ZOZXR3b3JrLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJQ0RDMzgyRjkxNzIxMTZEMzAw
OEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGlicmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDREMzODMwNjE3MjExNzk5MDA4QTJGQzMgLyogV2ViUHJvY2Vzc1NoaW0uZHlsaWIgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5t
YWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJQcm9jZXNzU2hpbS5k
eWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTU3NjUsNiArNTc3
Nyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUM1NDI1NkFF
MThCRUMxNjEwMERFNDE3OSAvKiBmb3JtcyAqLywKKwkJCQlDREMyODMxQTIwMUJENzU2MDBFNkU3
NDUgLyogZnVsbHNjcmVlbiAqLywKIAkJCQlBMTE1REM2RTE5MUQ4MkFCMDBEQTgwNzIgLyogX1dL
V2ViVmlld1ByaW50Rm9ybWF0dGVyLmggKi8sCiAJCQkJQTExNURDNkQxOTFEODJBQjAwREE4MDcy
IC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlci5tbSAqLywKIAkJCQlBMTlERDNCRjFEMDdEMTY4
MDBBQzgyM0IgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50ZXJuYWwuaCAqLywKQEAgLTU3
OTYsOCArNTgwOSw2IEBACiAJCQkJMEZDQjRFM0QxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVu
dFZpZXcubW0gKi8sCiAJCQkJMEZDQjRFNkExOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oICovLAogCQkJCTBGQ0I0RTZCMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gKi8sCi0JCQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5
IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLywKLQkJCQkzRjkxNUMwRTFG
NTY0REVEMDAxODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLywK
IAkJCQkwRkNCNEUzRjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9T
LmggKi8sCiAJCQkJMEZDQjRFNDAxOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92
aWRlcklPUy5tbSAqLywKIAkJCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2Nh
dGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovLApAQCAtODQ3OCw2ICs4NDg5
LDIxIEBACiAJCQluYW1lID0gRnVsbFNjcmVlbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCUNEQzI4MzFBMjAxQkQ3NTYwMEU2RTc0NSAvKiBmdWxsc2NyZWVuICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDREMyODMxQjIwMUJENzlE
MDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi8sCisJCQkJQ0RDMjgzMUMyMDFC
RDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5tbSAqLywKKwkJCQlDRDBDNjgy
RjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCAqLywKKwkJ
CQlDRDBDNjgzMDIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIu
bW0gKi8sCisJCQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXJJT1MuaCAqLywKKwkJCQkzRjkxNUMwRTFGNTY0REVEMDAxODNDRTkgLyogV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbSAqLywKKwkJCQlDRDE5RDJFODIwNDY0MDZG
MDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggKi8sCisJCQkJQ0QxOUQy
RTkyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHAgKi8s
CisJCQkpOworCQkJbmFtZSA9IGZ1bGxzY3JlZW47CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQlDRENBODVFNDEzMkFEMzMwMDBFOTYxREYgLyogbWFjICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTg4MDMsNiArODgyOSw3IEBACiAJCQkJ
OTk1NUE2RjUxQzc5ODZFMDAwRUI2QTkzIC8qIEF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk5QzgxRDVBMUMyMEU3RTIwMDVDNEM4MiAvKiBBdXRvbWF0
aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTI0OUFENjFGMUYxRTVGMDBCNjJGQkIg
LyogQXV0b21hdGlvbkZyb250ZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNE
MTlEMkVBMjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NTVBNkY3MUM3OTg2RTUwMEVCNkE5MyAvKiBBdXRvbWF0aW9u
UHJvdG9jb2xPYmplY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTBEMjhCQjFDNjUzOUQzMDA5
ODY5NzcgLyogQXV0b21hdGlvblNlc3Npb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
QTA0MUY0MUFDRTIxMDUwMDRBMTNFQyAvKiBCYWNrQm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRl
cnMgKi8sCkBAIC04ODE4LDYgKzg4NDUsNyBAQAogCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2
NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRDk1NkYxMjg0ODU2NDAw
MUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGQUVDM0ExQjA2
NTc2MzAwMDlDNEU3IC8qIENoaWxkUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDREMyODMxRDIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMTUxM0M2NzE2NkVBQkIyMDAxNDlGQ0IgLyogQ2hpbGRQcm9jZXNz
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5MEY0MjcyMTcyQTBDNzQwMDkzOUZGMCAvKiBD
aGlsZFByb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTExQUQ1MjFDQkM0
ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmcuaCBpbiBIZWFkZXJzICovLApAQCAtOTM2Miw2ICs5
MzkwLDcgQEAKIAkJCQk5MzRCNzI0NDE5RjVCOUJFMDBBRTk2RDYgLyogV0tBY3Rpb25NZW51SXRl
bVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzlGNDAxQzE5RkIwQkJDMDAyQjJCNDIgLyog
V0tBY3Rpb25NZW51VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTQ4MThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDBDNjgzMTIw
MUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0I0RTRBMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0
YW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUZBMUVEMzE4RTEwNjIyMDBCM0Y0MDIgLyogV0tB
aXJQbGF5Um91dGVQaWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRERCMzJEMTI0RUMyRTEw
MDQ4RDEzQyAvKiBXS0FQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTA0NTQsNiArMTA0ODMs
NyBAQAogCQkJCTk5MEQyOEJDMUM2NTM5REEwMDk4Njk3NyAvKiBBdXRvbWF0aW9uU2Vzc2lvbkNs
aWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQ2QTJCNjA4MUU1Njc2QTYwMEMzREVEQSAvKiBC
YWNrZ3JvdW5kUHJvY2Vzc1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTE2NEEyRjExOTFBRjE0RTAwMTA3MzdEIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZVdpdGhT
YW5kYm94RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEMTlEMkVCMjA0NjQwNkYw
MDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE3MDg3NkIxNkQ2Q0E2OTAwRjk5MjI2IC8qIEJsb2JSZWdpc3RyeVByb3h5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDRjE4NjM4MTY3RDA3MUUwMEExQTg1QSAvKiBDYWNoZU1vZGVs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxODk3RUQ3MUY0MTVEOEEwMDE2RkE0MiAvKiBDYWNo
ZVN0b3JhZ2VFbmdpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDU0MSw2ICsxMDU3MSw3IEBA
CiAJCQkJMUFFNDk4NzkxMUZGN0ZBQTAwNDhCNDY0IC8qIEpTTlBPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNFMDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRl
eHQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjBDMzY1RTE4QzExMEE1MDBGNjA3RDcgLyogTGF5
ZXJSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUNEQzI4MzFFMjAxQkQ3OUQw
MEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTkyREMxMzEyRjhCQUI5MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUZERTY0NTE5NTEwQjU1MDBDNDhGRkEgLyogTGVnYWN5QnVuZGxlRm9yQ2xh
c3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0ZFQ0IwNDFFMUVEMUNDMDBGODg1MDQgLyogTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTEwMzksNiAr
MTEwNzAsNyBAQAogCQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRTREMjFBMUE0OTE0QTMwMEM3
RjE1MiAvKiBXZWJQcm9jZXNzUG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0U0RDIxNjFB
NDkxNDg0MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovLAor
CQkJCUNEMEM2ODMyMjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxl
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDRTREMjI3MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQ
cm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzExMUIx
MTExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFBMDRGNjE5MUE0QTNBN0EwMEEyMUI2RSAvKiBXZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBp
biBTb3VyY2VzICovLAotLSAKMi4xNS4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335504</attachid>
            <date>2018-03-10 00:02:38 -0800</date>
            <delta_ts>2018-03-10 17:49:05 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-183503-20180310000237.patch</filename>
            <type>text/plain</type>
            <size>136008</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5NDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhjNzcyYzhmMWIyMTAxYmQy
NzI3ZmJhMTJjZWFkZmQ2NDczZmE0ZmEuLjhlYWEzYzY5NTIzNDZlMjdjZjRhZWQ5ODEwYjQ2MjU5
ZTlhYzZlYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI5IEBACisyMDE4LTAzLTA4ICBKZXIgTm9i
bGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIEltcHJvdmVtZW50cyB0byBmdWxs
c2NyZWVuOyBuZXcgVUkgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM1MDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgTm93IHRoYXQgdGhlIGlPUyBGdWxsc2NyZWVuIGNv
ZGUgaGFzIG1vcmUgdGhhbiBvbmUgbWFqb3IgY2xhc3MsIG1vdmUgaXQgaW50byBhbiBpb3MvCisg
ICAgICAgIGRpcmVjdG9yeS4KKworICAgICAgICBDbGVhbiB1cCB0aGUgV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUyBjbGFzcyB0byBtb3JlIGNsZWFybHkgc2VwYXJhdGUgZXh0ZXJuYWwK
KyAgICAgICAgZmFjaW5nIEFQSSBmcm9tIHB1cmVseSBpbnRlcm5hbCBmdW5jdGlvbnMuCisKKyAg
ICAgICAgTW92ZSB0aGUgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgb3V0IGludG8gaXRzIG93
biBmaWxlLiBBZGQgc3VwcG9ydCBmb3IgZnVsbHNjcmVlbgorICAgICAgICB0b3AgaW5zZXQgYW5k
IGZ1bGxzY3JlZW4gYXV0b2hpZGUgZHVyYXRpb24gQ1NTIGNvbnN0YW50cy4KKworICAgICAgICBB
ZGQgYSBoZXVyaXN0aWMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtZWRpYSBjb250cm9sIHJlbGF0
ZWQgdG91Y2hlcyBhbmQgb25lcyB0aGF0IGxvb2sKKyAgICAgICAgbW9yZSBrZXlib2FyZCBpbnRl
cmFjdGlvbnMuCisKKyAgICAgICAgQWRkIGEgbmV3IFVJU3RhY2tWaWV3IGJhc2VkIGNvbnRyb2wg
dG8gaG9sZCB0aGUgZnVsbHNjcmVlbiBjb250cm9scy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTogUmVtb3ZlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6
c2NvcmVPZk5leHRUb3VjaCk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYzo6cmVzZXQpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVy
aXN0aWM6OmRpc3RhbmNlU2NvcmUpOgorICAgICAgICAoV2ViS2l0OjpGdWxsc2NyZWVuVG91Y2hT
ZWNoZXVyaXN0aWM6OmF0dGVudWF0aW9uRmFjdG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9z
L2Z1bGxzY3JlZW4vRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmg6IAorICAgICAgICAoV2Vi
S2l0OjpGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnNldFJhbXBVcFNwZWVkKToKKyAgICAg
ICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRSYW1wRG93blNwZWVk
KToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRYV2Vp
Z2h0KToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpzZXRZ
V2VpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpz
ZXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljOjpz
ZXRHYW1tYSk6CisgICAgICAgIChXZWJLaXQ6OkZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYzo6
c2V0R2FtbWFDdXRvZmYpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNj
cmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbTogQWRkZWQuCisgICAgICAgIChXS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNrU2Vzc2lvbk1vZGVsQ2xpZW50OjpzZXRQYXJl
bnQpOgorICAgICAgICAoV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXJQbGF5YmFja1Nlc3Npb25N
b2RlbENsaWVudDo6c2V0SW50ZXJmYWNlKToKKyAgICAgICAgKC1bX1dLRXh0cmluc2ljQnV0dG9u
IHNldEV4dHJpbnNpY0NvbnRlbnRTaXplOl0pOgorICAgICAgICAoLVtfV0tFeHRyaW5zaWNCdXR0
b24gaW50cmluc2ljQ29udGVudFNpemVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0Nv
bnRyb2xsZXIgaW5pdFdpdGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3
Q29udHJvbGxlciBkZWFsbG9jXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9s
bGVyIHNob3dVSV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBoaWRl
VUldKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgdmlkZW9Db250cm9s
c01hbmFnZXJEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIgc2V0UHJlZmVyc1N0YXR1c0JhckhpZGRlbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVu
Vmlld0NvbnRyb2xsZXIgc2V0UGxheWluZzpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIgc2V0UGljdHVyZUluUGljdHVyZUFjdGl2ZTpdKToKKyAgICAgICAgKC1bV0tG
dWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgbG9hZFZpZXddKToKKyAgICAgICAgKC1bV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIgdmlld1dpbGxBcHBlYXI6XSk6CisgICAgICAgICgtW1dLRnVsbFNj
cmVlblZpZXdDb250cm9sbGVyIHZpZXdEaWRMYXlvdXRTdWJ2aWV3c10pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciB2aWV3V2lsbFRyYW5zaXRpb25Ub1NpemU6d2l0aFRy
YW5zaXRpb25Db29yZGluYXRvcjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuVmlld0NvbnRy
b2xsZXIgcHJlZmVycmVkU3RhdHVzQmFyU3R5bGVdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVu
Vmlld0NvbnRyb2xsZXIgcHJlZmVyc1N0YXR1c0JhckhpZGRlbl0pOgorICAgICAgICAoLVtXS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25pemVT
aW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tGdWxs
U2NyZWVuVmlld0NvbnRyb2xsZXIgZ2VzdHVyZVJlY29nbml6ZXI6c2hvdWxkUmVjZWl2ZVRvdWNo
Ol0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfbWFuYWdlcl0pOgor
ICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfZWZmZWN0aXZlRnVsbHNjcmVl
bkluc2V0VG9wXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF9jYW5j
ZWxBY3Rpb246XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF90b2dn
bGVQaVBBY3Rpb246XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyIF90
b3VjaERldGVjdGVkOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBf
c3RhdHVzQmFyRnJhbWVEaWRDaGFuZ2U6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlblZpZXdD
b250cm9sbGVyIF91cGRhdGVXZWJWaWV3RnVsbHNjcmVlbkluc2V0c10pOgorICAgICAgICAoLVtX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlciBfc2hvd1BoaXNoaW5nQWxlcnRdKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklP
Uy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlcklPUy5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVl
bi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6cmVwbGFjZVZpZXdXaXRoVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldLV2ViVmlld1N0
YXRlOjphcHBseVRvKToKKyAgICAgICAgKFdlYktpdDo6V0tXZWJWaWV3U3RhdGU6OnN0b3JlKToK
KyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciB0cmFuc2l0aW9uRHVy
YXRpb246XSk6CisgICAgICAgICgtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgY29u
ZmlndXJlSW5pdGlhbEFuZEZpbmFsU3RhdGVzRm9yVHJhbnNpdGlvbjpdKToKKyAgICAgICAgKC1b
V0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBhbmltYXRlVHJhbnNpdGlvbjpdKToKKyAg
ICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBhbmltYXRpb25FbmRlZDpd
KToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBzdGFydEludGVy
YWN0aXZlVHJhbnNpdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29u
dHJvbGxlciB1cGRhdGVXaXRoUGVyY2VudDpdKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuQW5p
bWF0aW9uQ29udHJvbGxlciB1cGRhdGVXaXRoUGVyY2VudDp0cmFuc2xhdGlvbjphbmNob3I6XSk6
CisgICAgICAgICgtW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgZW5kOl0pOgorICAg
ICAgICAoLVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24gaW5pdFdpdGhBbmltYXRv
cjphbmNob3I6XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbkludGVyYWN0aXZlVHJhbnNpdGlv
biB3YW50c0ludGVyYWN0aXZlU3RhcnRdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uIHN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9uOl0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24gdXBkYXRlSW50ZXJhY3RpdmVUcmFu
c2l0aW9uOndpdGhUcmFuc2xhdGlvbjpdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uIGNhbmNlbEludGVyYWN0aXZlVHJhbnNpdGlvbl0pOgorICAgICAgICAo
LVtXS0Z1bGxTY3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24gZmluaXNoSW50ZXJhY3RpdmVUcmFu
c2l0aW9uXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgaW5pdFdp
dGhXZWJWaWV3Ol0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGRl
YWxsb2NdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBpc0Z1bGxT
Y3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3
UGxhY2Vob2xkZXJdKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBl
bnRlckZ1bGxTY3JlZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ciBiZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6ZmluYWxGcmFtZTpdKToKKyAg
ICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciByZXF1ZXN0RXhpdEZ1bGxTY3Jl
ZW5dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBleGl0RnVsbFNj
cmVlbl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGJlZ2FuRXhp
dEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOmZpbmFsRnJhbWU6XSk6CisgICAgICAgICgtW1dL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgX2NvbXBsZXRlZEV4aXRGdWxsU2NyZWVuXSk6Cisg
ICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIgY2xvc2VdKToKKyAgICAgICAg
KC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1cGVy
dmlld1doaWxlSW5GdWxsc2NyZWVuXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIgdmlkZW9Db250cm9sc01hbmFnZXJEaWRDaGFuZ2VdKToKKyAgICAgICAgKC1bV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBnZXN0dXJlUmVjb2duaXplcjpzaG91bGRSZWNvZ25p
emVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjpdKToKKyAgICAgICAgKC1bV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBhbmltYXRpb25Db250cm9sbGVyRm9yUHJlc2VudGVk
Q29udHJvbGxlcjpwcmVzZW50aW5nQ29udHJvbGxlcjpzb3VyY2VDb250cm9sbGVyOl0pOgorICAg
ICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGFuaW1hdGlvbkNvbnRyb2xsZXJG
b3JEaXNtaXNzZWRDb250cm9sbGVyOl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIGludGVyYWN0aW9uQ29udHJvbGxlckZvckRpc21pc3NhbDpdKToKKyAgICAgICAg
KC1bV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciBfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVs
eV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9pbnZhbGlkYXRl
RVZPcmdhbml6YXRpb25OYW1lXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXIgX2lzU2VjdXJlXSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgX3NlcnZlclRydXN0XSk6CisgICAgICAgICgtW1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgX0VWT3JnYW5pemF0aW9uTmFtZV0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyIF91cGRhdGVMb2NhdGlvbkluZm9dKToKKyAgICAgICAgKC1bV0tGdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlciBfbWFuYWdlcl0pOgorICAgICAgICAoLVtXS0Z1bGxTY3JlZW5XaW5k
b3dDb250cm9sbGVyIF9zdGFydFRvRGlzbWlzc0Z1bGxzY3JlZW5DaGFuZ2VkOl0pOgorICAgICAg
ICAoLVtXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIF9pbnRlcmFjdGl2ZURpc21pc3NDaGFu
Z2VkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxzY3JlZW5T
dGFja1ZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmguCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9m
dWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5tbTogQWRkZWQuCisgICAgICAgICgrW1dL
RnVsbHNjcmVlblN0YWNrVmlldyBiYXNlRWZmZWN0c10pOgorICAgICAgICAoK1tXS0Z1bGxzY3Jl
ZW5TdGFja1ZpZXcgY29uZmlndXJlVmlldzpmb3JUaW50RWZmZWN0V2l0aENvbG9yOmZpbHRlclR5
cGU6XSk6CisgICAgICAgICgrW1dLRnVsbHNjcmVlblN0YWNrVmlldyBjb25maWd1cmVWaWV3Ondp
dGhCYWNrZ3JvdW5kRmlsbE9mQ29sb3I6b3BhY2l0eTpmaWx0ZXI6XSk6CisgICAgICAgICgrW1dL
RnVsbHNjcmVlblN0YWNrVmlldyBzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3XSk6CisgICAg
ICAgICgrW1dLRnVsbHNjcmVlblN0YWNrVmlldyBhcHBseVByaW1hcnlHbHlwaFRpbnRUb1ZpZXc6
XSk6CisgICAgICAgICgrW1dLRnVsbHNjcmVlblN0YWNrVmlldyBhcHBseVNlY29uZGFyeUdseXBo
VGludFRvVmlldzpdKToKKyAgICAgICAgKC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGluaXRXaXRo
QXJyYW5nZWRTdWJ2aWV3czpheGlzOl0pOgorICAgICAgICAoLVtXS0Z1bGxzY3JlZW5TdGFja1Zp
ZXcgc2V0VGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheTpdKToKKyAgICAgICAg
KC1bV0tGdWxsc2NyZWVuU3RhY2tWaWV3IGNvbnRlbnRWaWV3XSk6CisgICAgICAgICgtW1dLRnVs
bHNjcmVlblN0YWNrVmlldyBfc2V0QXJyYW5nZWRTdWJ2aWV3czpheGlzOl0pOgorICAgICAgICAo
LVtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgc2V0Qm91bmRzOl0pOgorICAgICAgICAoLVtXS0Z1bGxz
Y3JlZW5TdGFja1ZpZXcgdXBkYXRlQ29uc3RyYWludHNdKToKKyAgICAgICAgKiBXZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOC0wMy0wOCAgSmVyIE5vYmxlICA8amVyLm5v
YmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBEb24ndCBwYXNzIE5VTEwgdG8gdGhlIHJlc3VsdCBw
YXJhbWV0ZXIgb2YgU2VjVHJ1c3RFdmFsdWF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVhYjYyMzQ1MjhjNTNmNTRmYTI5ODQzM2Q0
NDlmNDBhNzFlZWIxZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcklPUy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKLQotI2ltcG9ydCA8VUlL
aXQvVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
IAotY2xhc3MgV2ViUGFnZVByb3h5OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bnRSZWN0OwotfQotCi1AY2xhc3MgV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXc7Ci1A
Y2xhc3MgV0tXZWJWaWV3OwotCi1AaW50ZXJmYWNlIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIgOiBOU09iamVjdCA8VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmdEZWxlZ2F0ZT4KLQot
LSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3OwotCi0tIChXZWJDb3Jl
RnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldyopd2ViVmlld1BsYWNlaG9sZGVyOwotCi0tIChCT09M
KWlzRnVsbFNjcmVlbjsKLQotLSAodm9pZCllbnRlckZ1bGxTY3JlZW47Ci0tICh2b2lkKWV4aXRG
dWxsU2NyZWVuOwotLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW47Ci0tICh2b2lkKWNsb3Nl
OwotLSAodm9pZCliZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVjdClp
bml0aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7Ci0tICh2b2lkKWJlZ2Fu
RXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFs
RnJhbWU6KENHUmVjdClmaW5hbEZyYW1lOwotLSAodm9pZCl3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1
cGVydmlld1doaWxlSW5GdWxsc2NyZWVuOwotLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZTsKLQotQGVuZAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0KZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYTU1ODJlMGYzYjFmYjUxODVhMjVlMmNlNDcw
N2I1NTAyYzJmYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4ODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCi0jaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgiCi0KLSNp
bXBvcnQgIlVJS2l0U1BJLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXcuaCIKLSNpbXBvcnQgIldLV2Vi
Vmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCi0jaW1wb3J0ICJX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCi0jaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9ydCA8U2VjdXJpdHkvU2VjQ2Vy
dGlmaWNhdGUuaD4KLSNpbXBvcnQgPFNlY3VyaXR5L1NlY1RydXN0Lmg+Ci0jaW1wb3J0IDxVSUtp
dC9VSVZpc3VhbEVmZmVjdFZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0lu
dFJlY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9XZWJDb3JlTlNVUkxFeHRyYXMuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZOZXR3
b3JrU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0xpbmtQcmVzZW50YXRpb25TUEkuaD4K
LSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNTdHJpbmdTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
Y29jb2EvUXVhcnR6Q29yZVNQSS5oPgotI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Ci0jaW1w
b3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVX
T1JLX09QVElPTkFMKExpbmtQcmVzZW50YXRpb24pCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1z
dGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgc2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiA9IDAu
MTsKLXN0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBhdXRvSGlkZURlbGF5ID0gNC4wOwotc3Rh
dGljIGNvbnN0IENHRmxvYXQgZm9udFNpemUgPSAxMjsKLQotc3RhdGljIHZvaWQgcmVwbGFjZVZp
ZXdXaXRoVmlldyhVSVZpZXcgKnZpZXcsIFVJVmlldyAqb3RoZXJWaWV3KQotewotICAgIFtDQVRy
YW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZ
RVNdOwotICAgIFtvdGhlclZpZXcgc2V0RnJhbWU6W3ZpZXcgZnJhbWVdXTsKLSAgICBbb3RoZXJW
aWV3IHNldEF1dG9yZXNpemluZ01hc2s6W3ZpZXcgYXV0b3Jlc2l6aW5nTWFza11dOwotICAgIFtb
dmlldyBzdXBlcnZpZXddIGluc2VydFN1YnZpZXc6b3RoZXJWaWV3IGFib3ZlU3Vidmlldzp2aWV3
XTsKLSAgICBbdmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBj
b21taXRdOwotfQotCi1lbnVtIEZ1bGxTY3JlZW5TdGF0ZSA6IE5TSW50ZWdlciB7Ci0gICAgTm90
SW5GdWxsU2NyZWVuLAotICAgIFdhaXRpbmdUb0VudGVyRnVsbFNjcmVlbiwKLSAgICBFbnRlcmlu
Z0Z1bGxTY3JlZW4sCi0gICAgSW5GdWxsU2NyZWVuLAotICAgIFdhaXRpbmdUb0V4aXRGdWxsU2Ny
ZWVuLAotICAgIEV4aXRpbmdGdWxsU2NyZWVuLAotfTsKLQotc3RydWN0IFdLV2ViVmlld1N0YXRl
IHsKLSAgICBmbG9hdCBfc2F2ZWRUb3BDb250ZW50SW5zZXQgPSAwLjA7Ci0gICAgQ0dGbG9hdCBf
c2F2ZWRQYWdlU2NhbGUgPSAxOwotICAgIENHRmxvYXQgX3NhdmVkVmlld1NjYWxlID0gMS4wOwot
ICAgIENHRmxvYXQgX3NhdmVkWm9vbVNjYWxlID0gMTsKLSAgICBVSUVkZ2VJbnNldHMgX3NhdmVk
RWRnZUluc2V0ID0gVUlFZGdlSW5zZXRzWmVybzsKLSAgICBVSUVkZ2VJbnNldHMgX3NhdmVkT2Jz
Y3VyZWRJbnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwotICAgIFVJRWRnZUluc2V0cyBfc2F2ZWRT
Y3JvbGxJbmRpY2F0b3JJbnNldHMgPSBVSUVkZ2VJbnNldHNaZXJvOwotICAgIENHUG9pbnQgX3Nh
dmVkQ29udGVudE9mZnNldCA9IENHUG9pbnRaZXJvOwotCi0gICAgdm9pZCBhcHBseVRvKFdLV2Vi
Vmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIFt3ZWJWaWV3IF9zZXRQYWdlU2NhbGU6X3Nh
dmVkUGFnZVNjYWxlIHdpdGhPcmlnaW46Q0dQb2ludE1ha2UoMCwgMCldOwotICAgICAgICBbd2Vi
VmlldyBfc2V0T2JzY3VyZWRJbnNldHM6X3NhdmVkT2JzY3VyZWRJbnNldHNdOwotICAgICAgICBb
W3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Q29udGVudEluc2V0Ol9zYXZlZEVkZ2VJbnNldF07Ci0g
ICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRDb250ZW50T2Zmc2V0Ol9zYXZlZENvbnRl
bnRPZmZzZXRdOwotICAgICAgICBbW3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0U2Nyb2xsSW5kaWNh
dG9ySW5zZXRzOl9zYXZlZFNjcm9sbEluZGljYXRvckluc2V0c107Ci0gICAgICAgIFt3ZWJWaWV3
IF9wYWdlXS0+c2V0VG9wQ29udGVudEluc2V0KF9zYXZlZFRvcENvbnRlbnRJbnNldCk7Ci0gICAg
ICAgIFt3ZWJWaWV3IF9zZXRWaWV3U2NhbGU6X3NhdmVkVmlld1NjYWxlXTsKLSAgICAgICAgW1t3
ZWJWaWV3IHNjcm9sbFZpZXddIHNldFpvb21TY2FsZTpfc2F2ZWRab29tU2NhbGVdOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIHN0b3JlKFdLV2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAg
IF9zYXZlZFBhZ2VTY2FsZSA9IFt3ZWJWaWV3IF9wYWdlU2NhbGVdOwotICAgICAgICBfc2F2ZWRP
YnNjdXJlZEluc2V0cyA9IFt3ZWJWaWV3IF9vYnNjdXJlZEluc2V0c107Ci0gICAgICAgIF9zYXZl
ZEVkZ2VJbnNldCA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBjb250ZW50SW5zZXRdOwotICAgICAg
ICBfc2F2ZWRDb250ZW50T2Zmc2V0ID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIGNvbnRlbnRPZmZz
ZXRdOwotICAgICAgICBfc2F2ZWRTY3JvbGxJbmRpY2F0b3JJbnNldHMgPSBbW3dlYlZpZXcgc2Ny
b2xsVmlld10gc2Nyb2xsSW5kaWNhdG9ySW5zZXRzXTsKLSAgICAgICAgX3NhdmVkVG9wQ29udGVu
dEluc2V0ID0gW3dlYlZpZXcgX3BhZ2VdLT50b3BDb250ZW50SW5zZXQoKTsKLSAgICAgICAgX3Nh
dmVkVmlld1NjYWxlID0gW3dlYlZpZXcgX3ZpZXdTY2FsZV07Ci0gICAgICAgIF9zYXZlZFpvb21T
Y2FsZSA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSB6b29tU2NhbGVdOwotICAgIH0KLX07Ci0gICAg
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotCi1AaW50ZXJmYWNlIF9XS0Z1bGxTY3JlZW5WaWV3
Q29udHJvbGxlciA6IFVJVmlld0NvbnRyb2xsZXIgPFVJR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0
ZT4KLUBwcm9wZXJ0eSAocmV0YWluLCBub25hdG9taWMpIE5TQXJyYXkgKnNhdmVkQ29uc3RyYWlu
dHM7Ci1AcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBVSVZpZXcgKmNvbnRlbnRWaWV3Owot
QHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21pYykgaWQgdGFyZ2V0OwotQHByb3BlcnR5IChhc3Np
Z24sIG5vbmF0b21pYykgU0VMIGFjdGlvbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIF9XS0Z1
bGxTY3JlZW5WaWV3Q29udHJvbGxlciB7Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gX2JhY2tncm91
bmRWaWV3OwotICAgIFJldGFpblB0cjxVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyPiBfdG91
Y2hHZXN0dXJlUmVjb2duaXplcjsKLSAgICBSZXRhaW5QdHI8VUlCdXR0b24+IF9jYW5jZWxCdXR0
b247Ci0gICAgUmV0YWluUHRyPFVJQnV0dG9uPiBfbG9jYXRpb25CdXR0b247Ci0gICAgUmV0YWlu
UHRyPFVJVmlzdWFsRWZmZWN0Vmlldz4gX3Zpc3VhbEVmZmVjdFZpZXc7Ci19Ci0KLS0gKHZvaWQp
ZGVhbGxvYwotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dp
dGhUYXJnZXQ6c2VsZl07Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSByZW1vdmVPYnNlcnZlcjpzZWxmXTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAo
dm9pZCl2aWV3V2lsbFRyYW5zaXRpb25Ub1NpemU6KENHU2l6ZSlzaXplIHdpdGhUcmFuc2l0aW9u
Q29vcmRpbmF0b3I6KGlkPFVJVmlld0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3I+KWNv
b3JkaW5hdG9yCi17Ci0gICAgW3N1cGVyIHZpZXdXaWxsVHJhbnNpdGlvblRvU2l6ZTpzaXplIHdp
dGhUcmFuc2l0aW9uQ29vcmRpbmF0b3I6Y29vcmRpbmF0b3JdOwotICAgIFtjb29yZGluYXRvciBh
bmltYXRlQWxvbmdzaWRlVHJhbnNpdGlvbjogXihpZDxVSVZpZXdDb250cm9sbGVyVHJhbnNpdGlv
bkNvb3JkaW5hdG9yQ29udGV4dD4gY29udGV4dCkgewotCi0gICAgICAgIHZvaWQgKF53ZWJWaWV3
VXBkYXRlQmxvY2spKCkgPSBeewotICAgICAgICAgICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250
ZW50Vmlld10gX292ZXJyaWRlTGF5b3V0UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpz
aXplIG1heGltdW1Vbm9ic2N1cmVkU2l6ZU92ZXJyaWRlOnNpemVdOwotICAgICAgICB9OwotCi0g
ICAgICAgIFsoV0tXZWJWaWV3ICopW3NlbGYgY29udGVudFZpZXddIF9iZWdpbkFuaW1hdGVkUmVz
aXplV2l0aFVwZGF0ZXM6d2ViVmlld1VwZGF0ZUJsb2NrXTsKLSAgICAgICAgWyhXS1dlYlZpZXcg
Kilbc2VsZiBjb250ZW50Vmlld10gX3NldEludGVyZmFjZU9yaWVudGF0aW9uT3ZlcnJpZGU6W1VJ
QXBwIHN0YXR1c0Jhck9yaWVudGF0aW9uXV07Ci0gICAgfSBjb21wbGV0aW9uOl4oaWQgPFVJVmll
d0NvbnRyb2xsZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3JDb250ZXh0PmNvbnRleHQpIHsKLSAgICAg
ICAgWyhXS1dlYlZpZXcgKilbc2VsZiBjb250ZW50Vmlld10gX2VuZEFuaW1hdGVkUmVzaXplXTsK
LSAgICB9XTsKLX0KLQotKyAodm9pZCljb25maWd1cmVWaWV3OihVSVZpZXcgKil2aWV3IHdpdGhC
YWNrZ3JvdW5kRmlsbE9mQ29sb3I6KFVJQ29sb3IgKilmaWxsQ29sb3Igb3BhY2l0eTooQ0dGbG9h
dClvcGFjaXR5IGZpbHRlcjooTlNTdHJpbmcgKilmaWx0ZXIKLXsKLSAgICBfVUlWaXN1YWxFZmZl
Y3RMYXllckNvbmZpZyAqYmFzZUxheWVyQ29uZmlnID0gW19VSVZpc3VhbEVmZmVjdExheWVyQ29u
ZmlnIGxheWVyV2l0aEZpbGxDb2xvcjpmaWxsQ29sb3Igb3BhY2l0eTpvcGFjaXR5IGZpbHRlclR5
cGU6ZmlsdGVyXTsKLSAgICBbW1tfVUlWaXN1YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENvbnRl
bnRDb25maWc6YmFzZUxheWVyQ29uZmlnXSBjb250ZW50Q29uZmlnXSBjb25maWd1cmVMYXllclZp
ZXc6dmlld107Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlzdWFsRWZmZWN0
VmlldzooVUlWaXN1YWxFZmZlY3RWaWV3ICopdmlzdWFsRWZmZWN0VmlldwotewotICAgIFJldGFp
blB0cjxVSVZpc3VhbEVmZmVjdD4gdmlzdWFsRWZmZWN0OwotCi0gICAgaWYgKFVJQWNjZXNzaWJp
bGl0eUlzUmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZCgpKSB7Ci0gICAgICAgIHZpc3VhbEVmZmVj
dCA9IFtVSVZpc3VhbEVmZmVjdCBlbXB0eUVmZmVjdF07Ci0gICAgICAgIFtbdmlzdWFsRWZmZWN0
VmlldyBjb250ZW50Vmlld10gc2V0QmFja2dyb3VuZENvbG9yOltVSUNvbG9yIGNvbG9yV2l0aFJl
ZDooNDMuMCAvIDI1NS4wKSBncmVlbjooNDYuMCAvIDI1NS4wKSBibHVlOig0OC4wIC8gMjU1LjAp
IGFscGhhOjEuMF1dOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJldGFpblB0cjxVSUNvbG9yRWZm
ZWN0PiBzYXR1cmF0aW9uRWZmZWN0ID0gW1VJQ29sb3JFZmZlY3QgY29sb3JFZmZlY3RTYXR1cmF0
ZToxLjhdOwotICAgICAgICBSZXRhaW5QdHI8VUlCbHVyRWZmZWN0PiBibHVyRWZmZWN0ID0gW1VJ
Qmx1ckVmZmVjdCBlZmZlY3RXaXRoQmx1clJhZGl1czpVSVJvdW5kVG9TY3JlZW5TY2FsZSgxNy41
LCBbVUlTY3JlZW4gbWFpblNjcmVlbl0pXTsKLSAgICAgICAgUmV0YWluUHRyPFVJVmlzdWFsRWZm
ZWN0PiBjb21iaW5lZEVmZmVjdHMgPSBbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tYmluaW5nRWZm
ZWN0czpAW2JsdXJFZmZlY3QuZ2V0KCksIHNhdHVyYXRpb25FZmZlY3QuZ2V0KCldXTsKLSAgICAg
ICAgdmlzdWFsRWZmZWN0ID0gY29tYmluZWRFZmZlY3RzOwotICAgICAgICBbW3Zpc3VhbEVmZmVj
dFZpZXcgY29udGVudFZpZXddIHNldEJhY2tncm91bmRDb2xvcjpuaWxdOwotICAgIH0KLQotICAg
IFt2aXN1YWxFZmZlY3RWaWV3IHNldEVmZmVjdDp2aXN1YWxFZmZlY3QuZ2V0KCldOwotfQotCi0t
IChVSVZpc3VhbEVmZmVjdFZpZXcgKil2aXN1YWxFZmZlY3RWaWV3V2l0aEZyYW1lOihDR1JlY3Qp
ZnJhbWUKLXsKLSAgICBSZXRhaW5QdHI8VUlWaXN1YWxFZmZlY3RWaWV3PiB2aXN1YWxFZmZlY3RW
aWV3ID0gYWRvcHROUyhbW1VJVmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6
W1VJVmlzdWFsRWZmZWN0IGVtcHR5RWZmZWN0XV0pOwotICAgIFtzZWxmIF91cGRhdGVUcmFuc3Bh
cmVuY3lPZlZpc3VhbEVmZmVjdFZpZXc6dmlzdWFsRWZmZWN0Vmlldy5nZXQoKV07Ci0KLSAgICBS
ZXRhaW5QdHI8VUlWaWV3PiBiYWNrTGF5ZXJUaW50VmlldyA9IGFkb3B0TlMoW1tVSVZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6W3Zpc3VhbEVmZmVjdFZpZXcgYm91bmRzXV0pOwotICAgIFtiYWNr
TGF5ZXJUaW50VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4
aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpXTsKLSAgICBbYmFj
a0xheWVyVGludFZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5hYmxlZDpOT107Ci0gICAgW1tzZWxm
IGNsYXNzXSBjb25maWd1cmVWaWV3OmJhY2tMYXllclRpbnRWaWV3LmdldCgpIHdpdGhCYWNrZ3Jv
dW5kRmlsbE9mQ29sb3I6W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MC4wIGFscGhhOjAuNTVdIG9w
YWNpdHk6MS4wIGZpbHRlcjprQ0FGaWx0ZXJOb3JtYWxCbGVuZE1vZGVdOwotICAgIFtbdmlzdWFs
RWZmZWN0VmlldyBjb250ZW50Vmlld10gYWRkU3VidmlldzpiYWNrTGF5ZXJUaW50Vmlldy5nZXQo
KV07Ci0KLSAgICBSZXRhaW5QdHI8VUlWaWV3PiB0b3BMYXllclRpbnRWaWV3ID0gYWRvcHROUyhb
W1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbdmlzdWFsRWZmZWN0VmlldyBib3VuZHNdXSk7
Ci0gICAgW3RvcExheWVyVGludFZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jl
c2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07
Ci0gICAgW3RvcExheWVyVGludFZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5hYmxlZDpOT107Ci0g
ICAgW1tzZWxmIGNsYXNzXSBjb25maWd1cmVWaWV3OnRvcExheWVyVGludFZpZXcuZ2V0KCkgd2l0
aEJhY2tncm91bmRGaWxsT2ZDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhXaGl0ZToxLjAgYWxwaGE6
MC4xNF0gb3BhY2l0eToxLjAgZmlsdGVyOmtDQUZpbHRlck5vcm1hbEJsZW5kTW9kZV07Ci0gICAg
W1t2aXN1YWxFZmZlY3RWaWV3IGNvbnRlbnRWaWV3XSBhZGRTdWJ2aWV3OnRvcExheWVyVGludFZp
ZXcuZ2V0KCldOwotCi0gICAgW3NlbGYgX3VwZGF0ZVRyYW5zcGFyZW5jeU9mVmlzdWFsRWZmZWN0
Vmlldzp2aXN1YWxFZmZlY3RWaWV3LmdldCgpXTsKLQotICAgIHJldHVybiB2aXN1YWxFZmZlY3RW
aWV3LmF1dG9yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBVSUVkZ2VJbnNldHMgbWlycm9yRWRnZUlu
c2V0cyhVSUVkZ2VJbnNldHMgaW5zZXRzKQotewotICAgIHJldHVybiBVSUVkZ2VJbnNldHNNYWtl
KGluc2V0cy50b3AsIGluc2V0cy5yaWdodCwgaW5zZXRzLmJvdHRvbSwgaW5zZXRzLmxlZnQpOwot
fQotCi0tICh2b2lkKV91cGRhdGVMYXlvdXRNYXJnaW5zCi17Ci0gICAgVUlWaWV3ICp2aWV3ID0g
W3NlbGYgdmlld107Ci0gICAgW3ZpZXcgc2V0UHJlc2VydmVzU3VwZXJ2aWV3TGF5b3V0TWFyZ2lu
czpOT107Ci0KLSAgICBVSUVkZ2VJbnNldHMgdGFyZ2V0SW5zZXRzID0gW3ZpZXcgc2FmZUFyZWFJ
bnNldHNdOwotICAgIHRhcmdldEluc2V0cy50b3AgPSBzdGQ6Om1heCh0YXJnZXRJbnNldHMudG9w
LCAyMC4wKTsKLSAgICBbdmlldyBzZXRMYXlvdXRNYXJnaW5zOnRhcmdldEluc2V0c107Ci19Ci0K
LS0gKHZvaWQpdmlld0RpZExheW91dFN1YnZpZXdzCi17Ci0gICAgW3NlbGYgX3VwZGF0ZUxheW91
dE1hcmdpbnNdOwotfQotCi0tICAodm9pZClzZXRMb2NhdGlvbjooTlNTdHJpbmcgKilsb2NhdGlv
bk5hbWUgc2VjdXJlOihCT09MKXNlY3VyZSB0cnVzdGVkTmFtZTooQk9PTCl0cnVzdGVkTmFtZSB0
cnVzdGVkU2l0ZTooQk9PTCl0cnVzdGVkU2l0ZQotewotICAgIFVJQ29sb3IgKmdyZWVuVGludCA9
IFtVSUNvbG9yIGNvbG9yV2l0aFJlZDoxMDAgLyAyNTUuMCBncmVlbjoxNzUgLyAyNTUuMCBibHVl
Ojk5IC8gMjU1LjAgYWxwaGE6MS4wXTsKLSAgICBVSUNvbG9yICp3aGl0ZVRpbnQgPSBbVUlDb2xv
ciB3aGl0ZUNvbG9yXTsKLQotICAgIGZsb2F0IGhQYWRkaW5nID0gMTQ7Ci0gICAgTlNTdHJpbmcg
KmxvY2tJbWFnZU5hbWUgPSBAIkxvY2tNaW5pIjsKLQotICAgIGZsb2F0IGxvY2tTcGFjaW5nID0g
c2VjdXJlID8gMTAgOiAwOwotCi0gICAgVUlFZGdlSW5zZXRzIGxvY2F0aW9uQ29udGVudEVkZ2VJ
bnNldHMgPSBVSUVkZ2VJbnNldHNNYWtlKDAsIGhQYWRkaW5nK2xvY2tTcGFjaW5nLCAwLCBoUGFk
ZGluZyk7Ci0gICAgVUlFZGdlSW5zZXRzIGxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzID0gVUlFZGdl
SW5zZXRzTWFrZSgwLCAtbG9ja1NwYWNpbmcsIDAsIDApOwotCi0gICAgaWYgKFtVSVZpZXcgdXNl
ckludGVyZmFjZUxheW91dERpcmVjdGlvbkZvclNlbWFudGljQ29udGVudEF0dHJpYnV0ZTpbW3Nl
bGYgdmlld10gc2VtYW50aWNDb250ZW50QXR0cmlidXRlXV0gPT0gVUlVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uUmlnaHRUb0xlZnQpIHsKLSAgICAgICAgbG9jYXRpb25Db250ZW50RWRnZUlu
c2V0cyA9IG1pcnJvckVkZ2VJbnNldHMobG9jYXRpb25Db250ZW50RWRnZUluc2V0cyk7Ci0gICAg
ICAgIGxvY2F0aW9uSW1hZ2VFZGdlSW5zZXRzID0gbWlycm9yRWRnZUluc2V0cyhsb2NhdGlvbklt
YWdlRWRnZUluc2V0cyk7Ci0gICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0Q29udGVudEhvcml6
b250YWxBbGlnbm1lbnQ6VUlDb250cm9sQ29udGVudEhvcml6b250YWxBbGlnbm1lbnRSaWdodF07
Ci0gICAgfQotCi0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUaXRsZUNvbG9yOih0cnVzdGVkTmFt
ZSA/IGdyZWVuVGludCA6IHdoaXRlVGludCkgZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxd
OwotCi0gICAgaWYgKHNlY3VyZSkgewotICAgICAgICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOltXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIGNsYXNzXV07
Ci0gICAgICAgIFVJSW1hZ2UgKmxvY2tJbWFnZSA9IFtVSUltYWdlIGltYWdlTmFtZWQ6bG9ja0lt
YWdlTmFtZSBpbkJ1bmRsZTpidW5kbGUgY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmls
XTsKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRJbWFnZTpbbG9ja0ltYWdlIGltYWdlV2l0
aFJlbmRlcmluZ01vZGU6VUlJbWFnZVJlbmRlcmluZ01vZGVBbHdheXNUZW1wbGF0ZV0gZm9yU3Rh
dGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwotICAgICAgICBbW19sb2NhdGlvbkJ1dHRvbiBpbWFn
ZVZpZXddIHNldFRpbnRDb2xvcjp0cnVzdGVkU2l0ZSA/IGdyZWVuVGludCA6IHdoaXRlVGludF07
Ci0gICAgICAgIFtfbG9jYXRpb25CdXR0b24gc2V0VGludENvbG9yOnRydXN0ZWRTaXRlID8gZ3Jl
ZW5UaW50IDogd2hpdGVUaW50XTsKLSAgICB9IGVsc2UKLSAgICAgICAgW19sb2NhdGlvbkJ1dHRv
biBzZXRJbWFnZTpuaWwgZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwotCi0gICAgW19s
b2NhdGlvbkJ1dHRvbiBzZXRDb250ZW50RWRnZUluc2V0czpsb2NhdGlvbkNvbnRlbnRFZGdlSW5z
ZXRzXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEltYWdlRWRnZUluc2V0czpsb2NhdGlvbklt
YWdlRWRnZUluc2V0c107Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRUaXRsZTpsb2NhdGlvbk5h
bWUgZm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOwotfQotCi0tICh2b2lkKWNyZWF0ZVN1
YnZpZXdzCi17Ci0gICAgX3Zpc3VhbEVmZmVjdFZpZXcgPSBbc2VsZiB2aXN1YWxFZmZlY3RWaWV3
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMjAsIDIwKV07Ci0KLSAgICBbX3Zpc3VhbEVmZmVj
dFZpZXcgc2V0VHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHM6Tk9dOwot
ICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2aWV3Ol92aXN1YWxFZmZlY3RWaWV3LmdldCgpXTsKLQot
ICAgIF9jYW5jZWxCdXR0b24gPSBbVUlCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBl
U3lzdGVtXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFz
a0ludG9Db25zdHJhaW50czpOT107Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0QWRqdXN0c0ltYWdl
V2hlbkhpZ2hsaWdodGVkOk5PXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRCYWNrZ3JvdW5kQ29s
b3I6IFtVSUNvbG9yIGJsYWNrQ29sb3JdXTsKLSAgICBbW19jYW5jZWxCdXR0b24gbGF5ZXJdIHNl
dENvbXBvc2l0aW5nRmlsdGVyOltDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJQbHVz
TF1dOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldFRpdGxlOldFQl9VSV9TVFJJTkcoIkRvbmUiLCAi
VGV4dCBvZiBidXR0b24gdGhhdCBleGl0cyBlbGVtZW50IGZ1bGxzY3JlZW4uIikgZm9yU3RhdGU6
VUlDb250cm9sU3RhdGVOb3JtYWxdOwotICAgIFtfY2FuY2VsQnV0dG9uIHNldFRpbnRDb2xvcjpb
VUlDb2xvciB3aGl0ZUNvbG9yXV07Ci0gICAgW1tfY2FuY2VsQnV0dG9uIHRpdGxlTGFiZWxdIHNl
dEZvbnQ6W1VJRm9udCBzeXN0ZW1Gb250T2ZTaXplOmZvbnRTaXplXV07Ci0gICAgW19jYW5jZWxC
dXR0b24gYWRkVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihjYW5jZWxBY3Rpb246KSBmb3JD
b250cm9sRXZlbnRzOlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07Ci0KLSAgICBbW3NlbGYg
dmlld10gYWRkU3VidmlldzpfY2FuY2VsQnV0dG9uLmdldCgpXTsKLQotICAgIF9sb2NhdGlvbkJ1
dHRvbiA9IFtVSUJ1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOwotICAg
IFtfbG9jYXRpb25CdXR0b24gc2V0VHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3Ry
YWludHM6Tk9dOwotICAgIFtfbG9jYXRpb25CdXR0b24gc2V0QWRqdXN0c0ltYWdlV2hlbkhpZ2hs
aWdodGVkOk5PXTsKLSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEJhY2tncm91bmRDb2xvcjpbVUlD
b2xvciBibGFja0NvbG9yXV07Ci0gICAgW1tfbG9jYXRpb25CdXR0b24gbGF5ZXJdIHNldENvbXBv
c2l0aW5nRmlsdGVyOltDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0ZXJQbHVzTF1dOwot
ICAgIFtbX2xvY2F0aW9uQnV0dG9uIHRpdGxlTGFiZWxdIHNldExpbmVCcmVha01vZGU6TlNMaW5l
QnJlYWtCeVRydW5jYXRpbmdUYWlsXTsKLSAgICBbW19sb2NhdGlvbkJ1dHRvbiB0aXRsZUxhYmVs
XSBzZXRBZGp1c3RzRm9udFNpemVUb0ZpdFdpZHRoOk5PXTsKLSAgICBbW19sb2NhdGlvbkJ1dHRv
biB0aXRsZUxhYmVsXSBzZXRGb250OltVSUZvbnQgc3lzdGVtRm9udE9mU2l6ZTpmb250U2l6ZV1d
OwotICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2aWV3Ol9sb2NhdGlvbkJ1dHRvbi5nZXQoKV07Ci0K
LSAgICBVSUxheW91dEd1aWRlKiBjb250YWluZXJHdWlkZSA9IFtbc2VsZiB2aWV3XSBsYXlvdXRN
YXJnaW5zR3VpZGVdOwotCi0gICAgW1tbX3Zpc3VhbEVmZmVjdFZpZXcgbGVmdEFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9BbmNob3I6W1tzZWxmIHZpZXddIGxlZnRBbmNob3JdXSBzZXRBY3RpdmU6
WUVTXTsKLSAgICBbW1tfdmlzdWFsRWZmZWN0VmlldyByaWdodEFuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9BbmNob3I6W1tzZWxmIHZpZXddIHJpZ2h0QW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0g
ICAgW1tbX3Zpc3VhbEVmZmVjdFZpZXcgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hv
cjpbW3NlbGYgdmlld10gdG9wQW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX3Zpc3Vh
bEVmZmVjdFZpZXcgaGVpZ2h0QW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFsVG9D
b25zdGFudDoyMF0gc2V0QWN0aXZlOllFU107Ci0KLSAgICBOU0xheW91dENvbnN0cmFpbnQgKmJv
dHRvbSA9IFtbX3Zpc3VhbEVmZmVjdFZpZXcgYm90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxU
b0FuY2hvcjpbY29udGFpbmVyR3VpZGUgdG9wQW5jaG9yXV07Ci0gICAgW2JvdHRvbSBzZXRQcmlv
cml0eTpVSUxheW91dFByaW9yaXR5UmVxdWlyZWQgLSAxXTsKLSAgICBbYm90dG9tIHNldEFjdGl2
ZTpZRVNdOwotCi0gICAgW1tbX2NhbmNlbEJ1dHRvbiBsZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpbY29udGFpbmVyR3VpZGUgbGVhZGluZ0FuY2hvcl1dIHNldEFjdGl2ZTpZ
RVNdOwotICAgIFtbW19jYW5jZWxCdXR0b24gdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0Fu
Y2hvcjpbW3NlbGYgdmlld10gdG9wQW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2Nh
bmNlbEJ1dHRvbiBib3R0b21BbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdmlzdWFs
RWZmZWN0VmlldyBib3R0b21BbmNob3JdXSBzZXRBY3RpdmU6WUVTXTsKLQotICAgIFtbW19sb2Nh
dGlvbkJ1dHRvbiBoZWlnaHRBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6MjBdIHNl
dEFjdGl2ZTpZRVNdOwotICAgIFtbW19sb2NhdGlvbkJ1dHRvbiBib3R0b21BbmNob3JdIGNvbnN0
cmFpbnRFcXVhbFRvQW5jaG9yOltfdmlzdWFsRWZmZWN0VmlldyBib3R0b21BbmNob3JdXSBzZXRB
Y3RpdmU6WUVTXTsKLSAgICBbW1tfbG9jYXRpb25CdXR0b24gbGVhZGluZ0FuY2hvcl0gY29uc3Ry
YWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQW5jaG9yOltfY2FuY2VsQnV0dG9uIHRyYWlsaW5nQW5j
aG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgW1tbX2xvY2F0aW9uQnV0dG9uIHRyYWlsaW5nQW5j
aG9yXSBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9BbmNob3I6W1tzZWxmIHZpZXddIHRyYWls
aW5nQW5jaG9yXV0gc2V0QWN0aXZlOllFU107Ci0gICAgTlNMYXlvdXRDb25zdHJhaW50ICpjZW50
ZXJpbmdDb25zdHJhaW50ID0gW1tfbG9jYXRpb25CdXR0b24gY2VudGVyWEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6W1tzZWxmIHZpZXddIGNlbnRlclhBbmNob3JdXTsKLSAgICBbY2Vu
dGVyaW5nQ29uc3RyYWludCBzZXRQcmlvcml0eTpVSUxheW91dFByaW9yaXR5RGVmYXVsdExvd107
Ci0gICAgW2NlbnRlcmluZ0NvbnN0cmFpbnQgc2V0QWN0aXZlOllFU107Ci0KLSAgICBbX3Zpc3Vh
bEVmZmVjdFZpZXcgc2V0QWxwaGE6MF07Ci0gICAgW19jYW5jZWxCdXR0b24gc2V0QWxwaGE6MF07
Ci0gICAgW19sb2NhdGlvbkJ1dHRvbiBzZXRBbHBoYTowXTsKLQotICAgIFtfdmlzdWFsRWZmZWN0
VmlldyBzZXRIaWRkZW46WUVTXTsKLSAgICBbX2NhbmNlbEJ1dHRvbiBzZXRIaWRkZW46WUVTXTsK
LSAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEhpZGRlbjpZRVNdOwotfQotCi0tICh2b2lkKWxvYWRW
aWV3Ci17Ci0gICAgW3NlbGYgc2V0VmlldzphZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMTAwLCAxMDApXSkuZ2V0KCldOwotICAgIFtbc2VsZiB2
aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRo
IHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVIZWlnaHQpXTsKLQotICAgIF90b3VjaEdlc3R1
cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgYWxs
b2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihzaG93Q2FuY2VsQnV0dG9u
OildKTsKLSAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0g
ICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHNldENhbmNlbHNUb3VjaGVzSW5WaWV3Ok5PXTsK
LSAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0TWluaW11bVByZXNzRHVyYXRpb246MF07
Ci0gICAgW1tzZWxmIHZpZXddIGFkZEdlc3R1cmVSZWNvZ25pemVyOl90b3VjaEdlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKLSAgICBbc2VsZiBjcmVhdGVTdWJ2aWV3c107Ci19Ci0KLS0gKHZvaWQp
dmlld1dpbGxBcHBlYXI6KEJPT0wpYW5pbWF0ZWQKLXsKLSAgICBbW3NlbGYgY29udGVudFZpZXdd
IHNldEF1dG9yZXNpemluZ01hc2s6KFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlV2lkdGggfCBV
SVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZUhlaWdodCldOwotICAgIFtbc2VsZiBjb250ZW50Vmll
d10gc2V0RnJhbWU6W1tzZWxmIHZpZXddIGJvdW5kc11dOwotICAgIFtbc2VsZiB2aWV3XSBpbnNl
cnRTdWJ2aWV3OltzZWxmIGNvbnRlbnRWaWV3XSBhdEluZGV4OjBdOwotfQotCi0tICh2b2lkKXZp
ZXdEaWRBcHBlYXI6KEJPT0wpYW5pbWF0ZWQKLXsKLSAgICBbc2VsZiBfdXBkYXRlTGF5b3V0TWFy
Z2luc107Ci19Ci0KLS0gKHZvaWQpY2FuY2VsQWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3Nl
bGYgdGFyZ2V0XSBwZXJmb3JtU2VsZWN0b3I6W3NlbGYgYWN0aW9uXV07Ci19Ci0KLS0gKHZvaWQp
aGlkZUNhbmNlbEJ1dHRvbgotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1S
ZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZUNhbmNlbEJ1dHRv
bikgb2JqZWN0Om5pbF07Ci0gICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOnNob3dIaWRl
QW5pbWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uczpeewotICAgICAgICBbX3Zpc3VhbEVmZmVjdFZp
ZXcgc2V0QWxwaGE6MF07Ci0gICAgICAgIFtfY2FuY2VsQnV0dG9uIHNldEFscGhhOjBdOwotICAg
ICAgICBbX2xvY2F0aW9uQnV0dG9uIHNldEFscGhhOjBdOwotICAgIH0gY29tcGxldGlvbjpeKEJP
T0wgZmluaXNoZWQpewotICAgICAgICBpZiAoZmluaXNoZWQpIHsKLSAgICAgICAgICAgIFtfY2Fu
Y2VsQnV0dG9uIHNldEhpZGRlbjpZRVNdOwotICAgICAgICAgICAgW19sb2NhdGlvbkJ1dHRvbiBz
ZXRIaWRkZW46WUVTXTsKLSAgICAgICAgICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRIaWRkZW46
WUVTXTsKLSAgICAgICAgfQotICAgIH1dOwotfQotCi0tICh2b2lkKXNob3dDYW5jZWxCdXR0b246
KGlkKXNlbmRlcgotewotICAgIFtOU09iamVjdCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0
c1dpdGhUYXJnZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoaGlkZUNhbmNlbEJ1dHRvbikgb2Jq
ZWN0Om5pbF07Ci0gICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihoaWRlQ2FuY2Vs
QnV0dG9uKSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OmF1dG9IaWRlRGVsYXldOwotICAgIFtV
SVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpzaG93SGlkZUFuaW1hdGlvbkR1cmF0aW9uIGFuaW1h
dGlvbnM6IF57Ci0gICAgICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRIaWRkZW46Tk9dOwotICAg
ICAgICBbX2NhbmNlbEJ1dHRvbiBzZXRIaWRkZW46Tk9dOwotICAgICAgICBbX2xvY2F0aW9uQnV0
dG9uIHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRBbHBoYTox
XTsKLSAgICAgICAgW19jYW5jZWxCdXR0b24gc2V0QWxwaGE6MV07Ci0gICAgICAgIFtfbG9jYXRp
b25CdXR0b24gc2V0QWxwaGE6MV07Ci0gICAgfV07Ci19Ci0KLS0gKHZvaWQpc2V0VGFyZ2V0Oihp
ZCl0YXJnZXQgYWN0aW9uOihTRUwpYWN0aW9uCi17Ci0gICAgW3NlbGYgc2V0VGFyZ2V0OnRhcmdl
dF07Ci0gICAgW3NlbGYgc2V0QWN0aW9uOmFjdGlvbl07Ci19Ci0KLS8vIE1BUksgLSBVSUdlc3R1
cmVSZWNvZ25pemVyRGVsZWdhdGUKLQotLSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0
dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY29nbml6ZVNpbXVsdGFu
ZW91c2x5V2l0aEdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopb3RoZXJH
ZXN0dXJlUmVjb2duaXplcgotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKLQotQGludGVy
ZmFjZSBfV0tGdWxsc2NyZWVuUm9vdFZpZXdDb250cm9sbGVyIDogVUlWaWV3Q29udHJvbGxlcgot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gX1dLRnVsbHNjcmVlblJvb3RWaWV3Q29udHJvbGxlciB7
Ci0gICAgQk9PTCBfc2hvd3NTdGF0dXNCYXI7Ci19Ci0KLS0gKHZvaWQpc2V0U2hvd3NTdGF0dXNC
YXI6KEJPT0wpdmFsdWUKLXsKLSAgICBfc2hvd3NTdGF0dXNCYXIgPSB2YWx1ZTsKLSAgICBbc2Vs
ZiBzZXROZWVkc1N0YXR1c0JhckFwcGVhcmFuY2VVcGRhdGVdOwotfQotCi0tIChCT09MKXByZWZl
cnNTdGF0dXNCYXJIaWRkZW4KLXsKLSAgICByZXR1cm4gIV9zaG93c1N0YXR1c0JhcjsKLX0KLQot
QGVuZAotCi1AaW50ZXJmYWNlIFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgOiBOU09i
amVjdCA8VUlWaWV3Q29udHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4KLUBwcm9wZXJ0eSAo
cmV0YWluLCBub25hdG9taWMpIFVJVmlld0NvbnRyb2xsZXIqIHZpZXdDb250cm9sbGVyOwotQHBy
b3BlcnR5IChub25hdG9taWMpIENHUmVjdCBpbml0aWFsRnJhbWU7Ci1AcHJvcGVydHkgKG5vbmF0
b21pYykgQ0dSZWN0IGZpbmFsRnJhbWU7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVyPWlz
QW5pbWF0aW5nSW4pIEJPT0wgYW5pbWF0aW5nSW47Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
S0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyCi0KLS0gKE5TVGltZUludGVydmFsKXRyYW5z
aXRpb25EdXJhdGlvbjooaWQ8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0
cmFuc2l0aW9uQ29udGV4dAotewotICAgIGNvbnN0IE5TVGltZUludGVydmFsIGFuaW1hdGlvbkR1
cmF0aW9uID0gMC4yOwotICAgIHJldHVybiBhbmltYXRpb25EdXJhdGlvbjsKLX0KLQotLSAodm9p
ZClhbmltYXRlVHJhbnNpdGlvbjooaWQ8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9u
aW5nPil0cmFuc2l0aW9uQ29udGV4dAotewotICAgIFVJVmlldyAqY29udGFpbmVyVmlldyA9IFt0
cmFuc2l0aW9uQ29udGV4dCBjb250YWluZXJWaWV3XTsKLSAgICBVSVZpZXcgKmZyb21WaWV3ID0g
W3RyYW5zaXRpb25Db250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dEZyb21WaWV3
S2V5XTsKLSAgICBVSVZpZXcgKnRvVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCB2aWV3Rm9yS2V5
OlVJVHJhbnNpdGlvbkNvbnRleHRUb1ZpZXdLZXldOwotCi0gICAgQ0dSZWN0IGlubGluZUZyYW1l
ID0gX2FuaW1hdGluZ0luID8gX2luaXRpYWxGcmFtZSA6IF9maW5hbEZyYW1lOwotICAgIENHUmVj
dCBmdWxsc2NyZWVuRnJhbWUgPSBfYW5pbWF0aW5nSW4gPyBfZmluYWxGcmFtZSA6IF9pbml0aWFs
RnJhbWU7Ci0gICAgVUlWaWV3ICphbmltYXRpbmdWaWV3ID0gX2FuaW1hdGluZ0luID8gdG9WaWV3
IDogZnJvbVZpZXc7Ci0gICAgCi0gICAgQ0dSZWN0IGJvdW5kc1JlY3QgPSBsYXJnZXN0UmVjdFdp
dGhBc3BlY3RSYXRpb0luc2lkZVJlY3QoRmxvYXRSZWN0KGlubGluZUZyYW1lKS5zaXplKCkuYXNw
ZWN0UmF0aW8oKSwgZnVsbHNjcmVlbkZyYW1lKTsKLSAgICBib3VuZHNSZWN0Lm9yaWdpbiA9IENH
UG9pbnRaZXJvOwotICAgIFJldGFpblB0cjxVSVZpZXc+IG1hc2tWaWV3ID0gYWRvcHROUyhbW1VJ
VmlldyBhbGxvY10gaW5pdF0pOwotICAgIFttYXNrVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJ
Q29sb3IgYmxhY2tDb2xvcl1dOwotICAgIFttYXNrVmlldyBzZXRCb3VuZHM6X2FuaW1hdGluZ0lu
ID8gYm91bmRzUmVjdCA6IFthbmltYXRpbmdWaWV3IGJvdW5kc11dOwotICAgIFttYXNrVmlldyBz
ZXRDZW50ZXI6Q0dQb2ludE1ha2UoQ0dSZWN0R2V0TWlkWChbYW5pbWF0aW5nVmlldyBib3VuZHNd
KSwgQ0dSZWN0R2V0TWlkWShbYW5pbWF0aW5nVmlldyBib3VuZHNdKSldOwotICAgIFthbmltYXRp
bmdWaWV3IHNldE1hc2tWaWV3Om1hc2tWaWV3LmdldCgpXTsKLSAgICAKLSAgICBGbG9hdFJlY3Qg
c2NhbGVSZWN0ID0gc21hbGxlc3RSZWN0V2l0aEFzcGVjdFJhdGlvQXJvdW5kUmVjdChGbG9hdFJl
Y3QoZnVsbHNjcmVlbkZyYW1lKS5zaXplKCkuYXNwZWN0UmF0aW8oKSwgaW5saW5lRnJhbWUpOwot
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHNjYWxlVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlU2NhbGUoc2NhbGVSZWN0LndpZHRoKCkgLyBmdWxsc2NyZWVuRnJhbWUuc2l6ZS53aWR0aCwg
c2NhbGVSZWN0LmhlaWdodCgpIC8gZnVsbHNjcmVlbkZyYW1lLnNpemUuaGVpZ2h0KTsKLSAgICBD
R0FmZmluZVRyYW5zZm9ybSB0cmFuc2xhdGVUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1h
a2VUcmFuc2xhdGlvbihDR1JlY3RHZXRNaWRYKGlubGluZUZyYW1lKSAtIENHUmVjdEdldE1pZFgo
ZnVsbHNjcmVlbkZyYW1lKSwgQ0dSZWN0R2V0TWlkWShpbmxpbmVGcmFtZSkgLSBDR1JlY3RHZXRN
aWRZKGZ1bGxzY3JlZW5GcmFtZSkpOwotICAgIAotICAgIENHQWZmaW5lVHJhbnNmb3JtIGZpbmFs
VHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2NhbGVUcmFuc2Zvcm0sIHRyYW5z
bGF0ZVRyYW5zZm9ybSk7Ci0KLSAgICBbYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2FuaW1h
dGluZ0luID8gZmluYWxUcmFuc2Zvcm0gOiBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5XTsKLSAg
ICAKLSAgICBbY29udGFpbmVyVmlldyBhZGRTdWJ2aWV3OmFuaW1hdGluZ1ZpZXddOwotCi0gICAg
W1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOltzZWxmIHRyYW5zaXRpb25EdXJhdGlvbjp0cmFu
c2l0aW9uQ29udGV4dF0gZGVsYXk6MCBvcHRpb25zOlVJVmlld0FuaW1hdGlvbk9wdGlvbkN1cnZl
RWFzZUluT3V0IGFuaW1hdGlvbnM6XnsKLSAgICAgICAgW2FuaW1hdGluZ1ZpZXcgc2V0VHJhbnNm
b3JtOl9hbmltYXRpbmdJbiA/IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHkgOiBmaW5hbFRyYW5z
Zm9ybV07Ci0gICAgICAgIFttYXNrVmlldyBzZXRCb3VuZHM6X2FuaW1hdGluZ0luID8gYW5pbWF0
aW5nVmlldy5ib3VuZHMgOiBib3VuZHNSZWN0XTsKLSAgICAgICAgW21hc2tWaWV3IHNldENlbnRl
cjpDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFthbmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1Jl
Y3RHZXRNaWRZKFthbmltYXRpbmdWaWV3IGJvdW5kc10pKV07Ci0gICAgfSBjb21wbGV0aW9uOl4o
Qk9PTCBmaW5pc2hlZCl7Ci0gICAgICAgIEJPT0wgc3VjY2VzcyA9ICFbdHJhbnNpdGlvbkNvbnRl
eHQgdHJhbnNpdGlvbldhc0NhbmNlbGxlZF07Ci0KLSAgICAgICAgaWYgKChbc2VsZiBpc0FuaW1h
dGluZ0luXSAmJiAhc3VjY2VzcykgfHwgKCFbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiBzdWNjZXNz
KSkKLSAgICAgICAgICAgIFthbmltYXRpbmdWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0g
ICAgICAgIFt0cmFuc2l0aW9uQ29udGV4dCBjb21wbGV0ZVRyYW5zaXRpb246c3VjY2Vzc107Ci0g
ICAgICAgIFthbmltYXRpbmdWaWV3IHNldE1hc2tWaWV3Om5pbF07Ci0gICAgfV07Ci19Ci0KLS0g
KHZvaWQpYW5pbWF0aW9uRW5kZWQ6KEJPT0wpdHJhbnNpdGlvbkNvbXBsZXRlZAotewotfQotCi1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKLSAg
ICBXS1dlYlZpZXcgKl93ZWJWaWV3OyAvLyBDYW5ub3QgYmUgcmV0YWluZWQsIHNlZSA8cmRhcjov
L3Byb2JsZW0vMTQ4ODQ2NjY+LgotICAgIFJldGFpblB0cjxVSVZpZXc+IF93ZWJWaWV3UGxhY2Vo
b2xkZXI7Ci0KLSAgICBGdWxsU2NyZWVuU3RhdGUgX2Z1bGxTY3JlZW5TdGF0ZTsKLSAgICBXS1dl
YlZpZXdTdGF0ZSBfdmlld1N0YXRlOwotCi0gICAgUmV0YWluUHRyPFVJV2luZG93PiBfd2luZG93
OwotICAgIFJldGFpblB0cjxfV0tGdWxsc2NyZWVuUm9vdFZpZXdDb250cm9sbGVyPiBfcm9vdFZp
ZXdDb250cm9sbGVyOwotCi0gICAgUmVmUHRyPFdlYktpdDo6Vm9pZENhbGxiYWNrPiBfcmVwYWlu
dENhbGxiYWNrOwotICAgIFJldGFpblB0cjxVSVZpZXdDb250cm9sbGVyPiBfdmlld0NvbnRyb2xs
ZXJGb3JQcmVzZW50YXRpb247Ci0gICAgUmV0YWluUHRyPF9XS0Z1bGxTY3JlZW5WaWV3Q29udHJv
bGxlcj4gX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlcjsKLQotICAgIENHUmVjdCBfaW5pdGlhbEZy
YW1lOwotICAgIENHUmVjdCBfZmluYWxGcmFtZTsKLQotICAgIFJldGFpblB0cjxOU1N0cmluZz4g
X0VWT3JnYW5pemF0aW9uTmFtZTsKLSAgICBCT09MIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlk
OwotCi19Ci0KLSNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgSW5pdGlhbGl6YXRpb24KLS0g
KGlkKWluaXRXaXRoV2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldwotewotICAgIGlmICghW3N1
cGVyIGluaXRdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIF93ZWJWaWV3ID0gd2ViVmlldzsK
LQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbTlNPYmpl
Y3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOwotICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZl07
Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLSNwcmFnbWEgbWFyayAtCi0jcHJhZ21hIG1h
cmsgQWNjZXNzb3JzCi0KLS0gKEJPT0wpaXNGdWxsU2NyZWVuCi17Ci0gICAgcmV0dXJuIF9mdWxs
U2NyZWVuU3RhdGUgPT0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuCi0gICAgICAgIHx8IF9mdWxs
U2NyZWVuU3RhdGUgPT0gRW50ZXJpbmdGdWxsU2NyZWVuCi0gICAgICAgIHx8IF9mdWxsU2NyZWVu
U3RhdGUgPT0gSW5GdWxsU2NyZWVuOwotfQotCi0tIChXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9s
ZGVyVmlldyAqKXdlYlZpZXdQbGFjZWhvbGRlcgotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLSNw
cmFnbWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgRXhwb3NlZCBJbnRlcmZhY2UKLQotLSAodm9pZClf
aW52YWxpZGF0ZUVWT3JnYW5pemF0aW9uTmFtZQotewotICAgIF9FVk9yZ2FuaXphdGlvbk5hbWUg
PSBuaWw7Ci0gICAgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQgPSBOTzsKLX0KLQotLSAoQk9P
TClpc1NlY3VyZQotewotICAgIHJldHVybiBfd2ViVmlldy5oYXNPbmx5U2VjdXJlQ29udGVudDsK
LX0KLQotLSAoU2VjVHJ1c3RSZWYpX3NlcnZlclRydXN0Ci17Ci0gICAgcmV0dXJuIF93ZWJWaWV3
LnNlcnZlclRydXN0OwotfQotCi0tIChOU1N0cmluZyAqKV9FVk9yZ2FuaXphdGlvbk5hbWUKLXsK
LSAgICBpZiAoIXNlbGYuaXNTZWN1cmUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAo
X0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQpCi0gICAgICAgIHJldHVybiBfRVZPcmdhbml6YXRp
b25OYW1lLmdldCgpOwotCi0gICAgQVNTRVJUKCFfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpKTsK
LSAgICBfRVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IFlFUzsKLQotICAgIFNlY1RydXN0UmVm
IHRydXN0ID0gW3NlbGYgX3NlcnZlclRydXN0XTsKLSAgICBpZiAoIXRydXN0KQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgTlNEaWN0aW9uYXJ5ICppbmZvRGljdGlvbmFyeSA9IFsoX19icmlk
Z2UgTlNEaWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3JlbGVhc2VdOwot
ICAgIC8vIElmIFNlY1RydXN0Q29weUluZm8gcmV0dXJuZWQgTlVMTCB0aGVuIGl0J3MgbGlrZWx5
IHRoYXQgdGhlIFNlY1RydXN0UmVmIGhhcyBub3QgYmVlbiBldmFsdWF0ZWQKLSAgICAvLyBhbmQg
dGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB0byBjYWxsIFNl
Y1RydXN0RXZhbHVhdGUgb3Vyc2VsdmVzLgotICAgIGlmICghaW5mb0RpY3Rpb25hcnkpIHsKLSAg
ICAgICAgU2VjVHJ1c3RSZXN1bHRUeXBlIHJlc3VsdCA9IGtTZWNUcnVzdFJlc3VsdFByb2NlZWQ7
Ci0gICAgICAgIE9TU3RhdHVzIGVyciA9IFNlY1RydXN0RXZhbHVhdGUodHJ1c3QsICZyZXN1bHQp
OwotICAgICAgICBpZiAoZXJyID09IG5vRXJyICYmIHJlc3VsdCA9PSBrU2VjVHJ1c3RSZXN1bHRQ
cm9jZWVkKQotICAgICAgICAgICAgaW5mb0RpY3Rpb25hcnkgPSBbKF9fYnJpZGdlIE5TRGljdGlv
bmFyeSAqKVNlY1RydXN0Q29weUluZm8odHJ1c3QpIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgaWYg
KCFpbmZvRGljdGlvbmFyeSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIEVWIGNlcnRpZmljYXRlIGlzIHZhbGlkIGFnYWluc3Qgb3Vy
IGNlcnRpZmljYXRlIGNoYWluLgotICAgIGlkIGhhc0VWID0gW2luZm9EaWN0aW9uYXJ5IG9iamVj
dEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvRXh0ZW5kZWRWYWxpZGF0
aW9uS2V5XTsKLSAgICBpZiAoIVtoYXNFViBpc0tpbmRPZkNsYXNzOltOU1ZhbHVlIGNsYXNzXV0g
fHwgIVtoYXNFViBib29sVmFsdWVdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gTWFr
ZSBzdXJlIHRoYXQgd2UgY291bGQgY29udGFjdCByZXZvY2F0aW9uIHNlcnZlciBhbmQgaXQgaXMg
c3RpbGwgdmFsaWQuCi0gICAgaWQgaXNOb3RSZXZva2VkID0gW2luZm9EaWN0aW9uYXJ5IG9iamVj
dEZvcktleTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvUmV2b2NhdGlvbktleV07
Ci0gICAgaWYgKCFbaXNOb3RSZXZva2VkIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUgY2xhc3NdXSB8
fCAhW2lzTm90UmV2b2tlZCBib29sVmFsdWVdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
X0VWT3JnYW5pemF0aW9uTmFtZSA9IFtpbmZvRGljdGlvbmFyeSBvYmplY3RGb3JLZXk6KF9fYnJp
ZGdlIE5TU3RyaW5nICopa1NlY1RydXN0SW5mb0NvbXBhbnlOYW1lS2V5XTsKLSAgICByZXR1cm4g
X0VWT3JnYW5pemF0aW9uTmFtZS5nZXQoKTsKLX0KLQotLSAodm9pZCl1cGRhdGVMb2NhdGlvbklu
Zm8KLXsKLSAgICBOU1VSTCogdXJsID0gX3dlYlZpZXcuX2NvbW1pdHRlZFVSTDsKLQotICAgIE5T
U3RyaW5nICpFVk9yZ2FuaXphdGlvbk5hbWUgPSBbc2VsZiBfRVZPcmdhbml6YXRpb25OYW1lXTsK
LSAgICBCT09MIHNob3dzRVZPcmdhbml6YXRpb25OYW1lID0gW0VWT3JnYW5pemF0aW9uTmFtZSBs
ZW5ndGhdID4gMDsKLQotICAgIE5TU3RyaW5nICpkb21haW4gPSBuaWw7Ci0KLSAgICBpZiAoTGlu
a1ByZXNlbnRhdGlvbkxpYnJhcnkoKSkKLSAgICAgICAgZG9tYWluID0gW3VybCBfbHBfc2ltcGxp
ZmllZERpc3BsYXlTdHJpbmddOwotICAgIGVsc2UKLSAgICAgICAgZG9tYWluID0gdXNlclZpc2li
bGVTdHJpbmcodXJsKTsKLQotICAgIE5TU3RyaW5nICp0ZXh0ID0gbmlsOwotICAgIGlmIChbW3Vy
bCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJkYXRhIl0gPT0gTlNPcmRlcmVkU2Ft
ZSkKLSAgICAgICAgdGV4dCA9IEAiZGF0YToiOwotICAgIGVsc2UgaWYgKHNob3dzRVZPcmdhbml6
YXRpb25OYW1lKQotICAgICAgICB0ZXh0ID0gRVZPcmdhbml6YXRpb25OYW1lOwotICAgIGVsc2UK
LSAgICAgICAgdGV4dCA9IGRvbWFpbjsKLQotICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVy
IHNldExvY2F0aW9uOnRleHQgc2VjdXJlOnNlbGYuaXNTZWN1cmUgdHJ1c3RlZE5hbWU6c2hvd3NF
Vk9yZ2FuaXphdGlvbk5hbWUgdHJ1c3RlZFNpdGU6ISFFVk9yZ2FuaXphdGlvbk5hbWVdOwotfQot
Ci0tICh2b2lkKWVudGVyRnVsbFNjcmVlbgotewotICAgIGlmIChbc2VsZiBpc0Z1bGxTY3JlZW5d
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfaW52YWxpZGF0ZUVWT3JnYW5pemF0aW9u
TmFtZV07Ci0KLSAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVu
OwotCi0gICAgX3dpbmRvdyA9IGFkb3B0TlMoW1tVSVdpbmRvdyBhbGxvY10gaW5pdF0pOwotICAg
IFtfd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBjbGVhckNvbG9yXV07Ci0gICAg
X3Jvb3RWaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tfV0tGdWxsc2NyZWVuUm9vdFZpZXdDb250
cm9sbGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW193aW5kb3cgc2V0Um9vdFZpZXdDb250cm9sbGVy
Ol9yb290Vmlld0NvbnRyb2xsZXIuZ2V0KCldOwotICAgIFtbX3dpbmRvdyByb290Vmlld0NvbnRy
b2xsZXJdIHNldFZpZXc6YWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbX3dp
bmRvdyBib3VuZHNdXSkuZ2V0KCldOwotICAgIFtbW193aW5kb3cgcm9vdFZpZXdDb250cm9sbGVy
XSB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3IgY2xlYXJDb2xvcl1dOwotICAgIFtb
W193aW5kb3cgcm9vdFZpZXdDb250cm9sbGVyXSB2aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihV
SVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGli
bGVIZWlnaHQpXTsKLSAgICBbX3dpbmRvdyBzZXRXaW5kb3dMZXZlbDpVSVdpbmRvd0xldmVsTm9y
bWFsIC0gMV07Ci0gICAgW193aW5kb3cgc2V0SGlkZGVuOk5PXTsKLSAgICBfdmlld0NvbnRyb2xs
ZXJGb3JQcmVzZW50YXRpb24gPSBbX3dpbmRvdyByb290Vmlld0NvbnRyb2xsZXJdOwotCi0gICAg
X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW1tfV0tGdWxsU2NyZWVuVmlld0Nv
bnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBz
ZXRUcmFuc2l0aW9uaW5nRGVsZWdhdGU6c2VsZl07Ci0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRy
b2xsZXIgc2V0TW9kYWxQcmVzZW50YXRpb25TdHlsZTpVSU1vZGFsUHJlc2VudGF0aW9uQ3VzdG9t
XTsKLSAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBzZXRUYXJnZXQ6c2VsZiBhY3Rpb246
QHNlbGVjdG9yKHJlcXVlc3RFeGl0RnVsbFNjcmVlbildOwotICAgIFtbX2Z1bGxzY3JlZW5WaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRGcmFtZTpbW192aWV3Q29udHJvbGxlckZvclByZXNlbnRhdGlv
biB2aWV3XSBib3VuZHNdXTsKLSAgICBbc2VsZiB1cGRhdGVMb2NhdGlvbkluZm9dOwotCi0gICAg
W3NlbGYgX21hbmFnZXJdLT5zYXZlU2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIFtfd2ViVmlldyBf
cGFnZV0tPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXModHJ1ZSk7Ci0KLSAgICBfdmlld1N0
YXRlLnN0b3JlKF93ZWJWaWV3KTsKLQotICAgIF93ZWJWaWV3UGxhY2Vob2xkZXIgPSBhZG9wdE5T
KFtbVUlWaWV3IGFsbG9jXSBpbml0XSk7Ci0gICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIGxheWVy
XSBzZXROYW1lOkAiRnVsbHNjcmVlbiBQbGFjZWhvbGRlciBWZmlldyJdOwotCi0gICAgV0tTbmFw
c2hvdENvbmZpZ3VyYXRpb24qIGNvbmZpZyA9IG5pbDsKLSAgICBbX3dlYlZpZXcgdGFrZVNuYXBz
aG90V2l0aENvbmZpZ3VyYXRpb246Y29uZmlnIGNvbXBsZXRpb25IYW5kbGVyOl4oVUlJbWFnZSAq
IHNuYXBzaG90SW1hZ2UsIE5TRXJyb3IgKiBlcnJvcil7Ci0gICAgICAgIGlmICghW193ZWJWaWV3
IF9wYWdlXSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBi
ZWdpbl07Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0g
ICAgICAgIAotICAgICAgICBbW193ZWJWaWV3UGxhY2Vob2xkZXIgbGF5ZXJdIHNldENvbnRlbnRz
OihpZClbc25hcHNob3RJbWFnZSBDR0ltYWdlXV07Ci0gICAgICAgIHJlcGxhY2VWaWV3V2l0aFZp
ZXcoX3dlYlZpZXcsIF93ZWJWaWV3UGxhY2Vob2xkZXIuZ2V0KCkpOwotCi0gICAgICAgIFdLV2Vi
Vmlld1N0YXRlKCkuYXBwbHlUbyhfd2ViVmlldyk7Ci0gICAgICAgIAotICAgICAgICBbX3dlYlZp
ZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8
IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KV07Ci0gICAgICAgIFtfd2ViVmlldyBz
ZXRGcmFtZTpbX3dpbmRvdyBib3VuZHNdXTsKLSAgICAgICAgW193aW5kb3cgaW5zZXJ0U3Vidmll
dzpfd2ViVmlldyBhdEluZGV4OjBdOwotICAgICAgICBbX3dlYlZpZXcgX292ZXJyaWRlTGF5b3V0
UGFyYW1ldGVyc1dpdGhNaW5pbXVtTGF5b3V0U2l6ZTpbX3dpbmRvdyBib3VuZHNdLnNpemUgbWF4
aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6W193aW5kb3cgYm91bmRzXS5zaXplXTsKLQotICAg
ICAgICBbX3dlYlZpZXcgc2V0TmVlZHNMYXlvdXRdOwotICAgICAgICBbX3dlYlZpZXcgbGF5b3V0
SWZOZWVkZWRdOwotICAgICAgICAKLSAgICAgICAgW3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRp
bmdGdWxsU2NyZWVuKHRydWUpOwotCi0gICAgICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBWb2lkQ2Fs
bGJhY2s6OmNyZWF0ZShbcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKSwgc2VsZl0oV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7Ci0gICAgICAgICAgICBfcmVwYWludENhbGxiYWNr
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIFtwcm90ZWN0ZWRTZWxmIF9tYW5hZ2VyXS0+
d2lsbEVudGVyRnVsbFNjcmVlbigpOwotICAgICAgICB9KTsKLSAgICAgICAgW193ZWJWaWV3IF9w
YWdlXS0+Zm9yY2VSZXBhaW50KF9yZXBhaW50Q2FsbGJhY2suY29weVJlZigpKTsKLQotICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOwotICAgIH1dOwotfQotCi0tICh2b2lkKWJlZ2FuRW50
ZXJGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZTooQ0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZy
YW1lOihDR1JlY3QpZmluYWxGcmFtZQotewotICAgIGlmIChfZnVsbFNjcmVlblN0YXRlICE9IFdh
aXRpbmdUb0VudGVyRnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIF9mdWxsU2NyZWVu
U3RhdGUgPSBFbnRlcmluZ0Z1bGxTY3JlZW47Ci0KLSAgICBfaW5pdGlhbEZyYW1lID0gaW5pdGlh
bEZyYW1lOwotICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsKLQotICAgIFtDQVRyYW5zYWN0
aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwot
Ci0gICAgW193ZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgIFtfZnVsbHNjcmVlblZp
ZXdDb250cm9sbGVyIHNldENvbnRlbnRWaWV3Ol93ZWJWaWV3XTsKLQotICAgIFtfd2luZG93IHNl
dFdpbmRvd0xldmVsOlVJV2luZG93TGV2ZWxOb3JtYWxdOwotICAgIFtfd2luZG93IG1ha2VLZXlB
bmRWaXNpYmxlXTsKLSAgICBbX3Jvb3RWaWV3Q29udHJvbGxlciBzZXRTaG93c1N0YXR1c0JhcjpZ
RVNdOwotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIFtfdmlld0NvbnRyb2xs
ZXJGb3JQcmVzZW50YXRpb24gcHJlc2VudFZpZXdDb250cm9sbGVyOl9mdWxsc2NyZWVuVmlld0Nv
bnRyb2xsZXIuZ2V0KCkgYW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246XnsKLSAgICAgICAgW3NlbGYg
Y29tcGxldGVkRW50ZXJGdWxsU2NyZWVuXTsKLSAgICAgICAgW19yb290Vmlld0NvbnRyb2xsZXIg
c2V0U2hvd3NTdGF0dXNCYXI6Tk9dOwotICAgIH1dOwotfQotCi0tICh2b2lkKWNvbXBsZXRlZEVu
dGVyRnVsbFNjcmVlbgotewotICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEluRnVsbFNjcmVlbjsKLQotICAgIFtzZWxm
IF9tYW5hZ2VyXS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5z
ZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKLQotICAgIFtfd2ViVmlldyBfcGFnZV0tPnNl
dFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOwotfQotCi0tICh2b2lkKWV4aXRGdWxs
U2NyZWVuCi17Ci0gICAgaWYgKCFbc2VsZiBpc0Z1bGxTY3JlZW5dKQotICAgICAgICByZXR1cm47
Ci0gICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IFdhaXRpbmdUb0V4aXRGdWxsU2NyZWVuOwotCi0gICAg
W3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOwotICAgIFtzZWxm
IF9tYW5hZ2VyXS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Ci19Ci0KLS0gKHZvaWQpcmVxdWVzdEV4
aXRGdWxsU2NyZWVuCi17Ci0gICAgW3NlbGYgX21hbmFnZXJdLT5yZXF1ZXN0RXhpdEZ1bGxTY3Jl
ZW4oKTsKLX0KLQotLSAodm9pZCliZWdhbkV4aXRGdWxsU2NyZWVuV2l0aEluaXRpYWxGcmFtZToo
Q0dSZWN0KWluaXRpYWxGcmFtZSBmaW5hbEZyYW1lOihDR1JlY3QpZmluYWxGcmFtZQotewotICAg
IGlmIChfZnVsbFNjcmVlblN0YXRlICE9IFdhaXRpbmdUb0V4aXRGdWxsU2NyZWVuKQotICAgICAg
ICByZXR1cm47Ci0gICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IEV4aXRpbmdGdWxsU2NyZWVuOwotCi0g
ICAgX2luaXRpYWxGcmFtZSA9IGluaXRpYWxGcmFtZTsKLSAgICBfZmluYWxGcmFtZSA9IGZpbmFs
RnJhbWU7Ci0gICAgCi0gICAgW193ZWJWaWV3IF9wYWdlXS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5
VXBkYXRlcyh0cnVlKTsKLQotICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFNob3dzU3RhdHVz
QmFyOllFU107Ci0gICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250
cm9sbGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246XnsKLSAgICAgICAgaWYgKCFbX3dlYlZpZXcg
X3BhZ2VdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFtzZWxmIGNvbXBsZXRlZEV4
aXRGdWxsU2NyZWVuXTsKLSAgICAgICAgW19yb290Vmlld0NvbnRyb2xsZXIgc2V0U2hvd3NTdGF0
dXNCYXI6Tk9dOwotICAgIH1dOwotfQotCi0tICh2b2lkKWNvbXBsZXRlZEV4aXRGdWxsU2NyZWVu
Ci17Ci0gICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0gRXhpdGluZ0Z1bGxTY3JlZW4pCi0gICAg
ICAgIHJldHVybjsKLSAgICBfZnVsbFNjcmVlblN0YXRlID0gTm90SW5GdWxsU2NyZWVuOwotCi0g
ICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107Ci0KLSAgICBbW193ZWJWaWV3UGxhY2Vob2xkZXIgc3VwZXJ2aWV3XSBpbnNl
cnRTdWJ2aWV3Ol93ZWJWaWV3IGJlbG93U3Vidmlldzpfd2ViVmlld1BsYWNlaG9sZGVyLmdldCgp
XTsKLSAgICBbX3dlYlZpZXcgc2V0RnJhbWU6W193ZWJWaWV3UGxhY2Vob2xkZXIgZnJhbWVdXTsK
LSAgICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbX3dlYlZpZXdQbGFjZWhvbGRlciBh
dXRvcmVzaXppbmdNYXNrXV07Ci0KLSAgICBbW193ZWJWaWV3IHdpbmRvd10gbWFrZUtleUFuZFZp
c2libGVdOwotCi0gICAgX3ZpZXdTdGF0ZS5hcHBseVRvKF93ZWJWaWV3KTsKLQotICAgIFtfd2Vi
VmlldyBzZXROZWVkc0xheW91dF07Ci0gICAgW193ZWJWaWV3IGxheW91dElmTmVlZGVkXTsKLQot
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0KLSAgICBbX3dpbmRvdyBzZXRIaWRkZW46WUVT
XTsKLSAgICBfd2luZG93ID0gbmlsOwotCi0gICAgW3NlbGYgX21hbmFnZXJdLT5zZXRBbmltYXRp
bmdGdWxsU2NyZWVuKGZhbHNlKTsKLSAgICBbc2VsZiBfbWFuYWdlcl0tPmRpZEV4aXRGdWxsU2Ny
ZWVuKCk7Ci0KLSAgICBpZiAoX3JlcGFpbnRDYWxsYmFjaykgewotICAgICAgICBfcmVwYWludENh
bGxiYWNrLT5pbnZhbGlkYXRlKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJ
bnZhbGlkYXRlZCk7Ci0gICAgICAgIEFTU0VSVCghX3JlcGFpbnRDYWxsYmFjayk7Ci0gICAgfQot
Ci0gICAgX3JlcGFpbnRDYWxsYmFjayA9IFZvaWRDYWxsYmFjazo6Y3JlYXRlKFtwcm90ZWN0ZWRT
ZWxmID0gcmV0YWluUHRyKHNlbGYpLCBzZWxmXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3Ip
IHsKLSAgICAgICAgX3JlcGFpbnRDYWxsYmFjayA9IG51bGxwdHI7Ci0gICAgICAgIFtfd2ViVmll
d1BsYWNlaG9sZGVyIHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgICAgIGlmICghW193ZWJW
aWV3IF9wYWdlXSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBbX3dlYlZpZXcgX3Bh
Z2VdLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVzKGZhbHNlKTsKLSAgICB9KTsKLQotICAg
IFtfd2ViVmlldyBfcGFnZV0tPmZvcmNlUmVwYWludChfcmVwYWludENhbGxiYWNrLmNvcHlSZWYo
KSk7Ci19Ci0KLS0gKHZvaWQpZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseQotewotICAgIGlmICgh
W3NlbGYgaXNGdWxsU2NyZWVuXSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFbX3dlYlZp
ZXcgX3BhZ2VdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiBfbWFuYWdlcl0tPnJlcXVl
c3RFeGl0RnVsbFNjcmVlbigpOwotICAgIFtzZWxmIGV4aXRGdWxsU2NyZWVuXTsKLSAgICBfZnVs
bFNjcmVlblN0YXRlID0gRXhpdGluZ0Z1bGxTY3JlZW47Ci0gICAgW3NlbGYgY29tcGxldGVkRXhp
dEZ1bGxTY3JlZW5dOwotICAgIHJlcGxhY2VWaWV3V2l0aFZpZXcoX3dlYlZpZXdQbGFjZWhvbGRl
ci5nZXQoKSwgX3dlYlZpZXcpOwotICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlz
aWJpbGl0eVVwZGF0ZXMoZmFsc2UpOwotICAgIFtzZWxmIF9tYW5hZ2VyXS0+ZGlkRXhpdEZ1bGxT
Y3JlZW4oKTsKLSAgICBbc2VsZiBfbWFuYWdlcl0tPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFs
c2UpOwotICAgIF93ZWJWaWV3UGxhY2Vob2xkZXIgPSBuaWw7Ci19Ci0KLS0gKHZvaWQpY2xvc2UK
LXsKLSAgICBbc2VsZiBleGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKLSAgICBfd2ViVmlldyA9
IG5pbDsKLX0KLQotLSAodm9pZCl3ZWJWaWV3RGlkUmVtb3ZlRnJvbVN1cGVydmlld1doaWxlSW5G
dWxsc2NyZWVuCi17Ci0gICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgPT0gSW5GdWxsU2NyZWVuICYm
IF93ZWJWaWV3LndpbmRvdyAhPSBfd2luZG93LmdldCgpKQotICAgICAgICBbc2VsZiBleGl0RnVs
bHNjcmVlbkltbWVkaWF0ZWx5XTsKLX0KLQotLSAodm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRp
ZENoYW5nZQotewotfQotCi0jcHJhZ21hIG1hcmsgLQotI3ByYWdtYSBtYXJrIEludGVybmFsIElu
dGVyZmFjZQotCi0tIChXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5KilfbWFuYWdlcgotewotICAg
IGlmICghW193ZWJWaWV3IF9wYWdlXSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIFtfd2ViVmlldyBfcGFnZV0tPmZ1bGxTY3JlZW5NYW5hZ2VyKCk7Ci19Ci0KLSNwcmFnbWEg
bWFyayAtCi0jcHJhZ21hIG1hcmsgVUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmdEZWxlZ2F0
ZQotCi0tIChpZDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nPilhbmltYXRp
b25Db250cm9sbGVyRm9yUHJlc2VudGVkQ29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKXBy
ZXNlbnRlZCBwcmVzZW50aW5nQ29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKXByZXNlbnRp
bmcgc291cmNlQ29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKXNvdXJjZQotewotICAgIFJl
dGFpblB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9s
bGVyID0gYWRvcHROUyhbW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGlu
aXRdKTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRWaWV3Q29udHJvbGxlcjpwcmVzZW50
ZWRdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEluaXRpYWxGcmFtZTpfaW5pdGlhbEZy
YW1lXTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRGaW5hbEZyYW1lOl9maW5hbEZyYW1l
XTsKLSAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRBbmltYXRpbmdJbjpZRVNdOwotICAgIHJl
dHVybiBhbmltYXRpb25Db250cm9sbGVyLmF1dG9yZWxlYXNlKCk7Ci19Ci0KLS0gKGlkPFVJVmll
d0NvbnRyb2xsZXJBbmltYXRlZFRyYW5zaXRpb25pbmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JE
aXNtaXNzZWRDb250cm9sbGVyOihVSVZpZXdDb250cm9sbGVyICopZGlzbWlzc2VkCi17Ci0gICAg
UmV0YWluUHRyPFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXI+IGFuaW1hdGlvbkNvbnRy
b2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciBhbGxvY10g
aW5pdF0pOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldFZpZXdDb250cm9sbGVyOmRpc21p
c3NlZF07Ci0gICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0SW5pdGlhbEZyYW1lOl9pbml0aWFs
RnJhbWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEZpbmFsRnJhbWU6X2ZpbmFsRnJh
bWVdOwotICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEFuaW1hdGluZ0luOk5PXTsKLSAgICBy
ZXR1cm4gYW5pbWF0aW9uQ29udHJvbGxlci5hdXRvcmVsZWFzZSgpOwotfQotCi1AZW5kCi0KLSNl
bmRpZiAvLyBQTEFURk9STShJT1MpICYmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3Vj
aFNlY2hldXJpc3RpYy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVl
bi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllOTA3MDExNThh
ZTIxMmNkNmFjNzc4YjAzY2RkNWE3MWVlMzMzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0
aWMuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmgiCisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgPHd0Zi9Nb25vdG9u
aWNUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitkb3VibGUgRnVsbHNjcmVlblRvdWNo
U2VjaGV1cmlzdGljOjpzY29yZU9mTmV4dFRvdWNoKENHUG9pbnQgbG9jYXRpb24pCit7CisgICAg
U2Vjb25kcyBub3cgPSBNb25vdG9uaWNUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpOwor
CisgICAgaWYgKCFtX2xhc3RUb3VjaFRpbWUpIHsKKyAgICAgICAgbV9sYXN0VG91Y2hUaW1lID0g
V1RGTW92ZShub3cpOworICAgICAgICBtX2xhc3RUb3VjaExvY2F0aW9uID0gV1RGTW92ZShsb2Nh
dGlvbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFNlY29uZHMgZGVsdGFUaW1l
ID0gbm93IC0gbV9sYXN0VG91Y2hUaW1lOworCisgICAgZG91YmxlIGNvZWZmaWNpZW50ID0gYXR0
ZW51YXRpb25GYWN0b3IoZGVsdGFUaW1lKTsKKyAgICBtX2xhc3RTY29yZSA9IGNvZWZmaWNpZW50
ICogZGlzdGFuY2VTY29yZShsb2NhdGlvbiwgbV9sYXN0VG91Y2hMb2NhdGlvbiwgZGVsdGFUaW1l
KSArICgxIC0gY29lZmZpY2llbnQpICogbV9sYXN0U2NvcmU7CisKKyAgICBtX2xhc3RUb3VjaFRp
bWUgPSBub3c7CisgICAgbV9sYXN0VG91Y2hMb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIHJldHVy
biBtX2xhc3RTY29yZTsKK30KKwordm9pZCBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWM6OnJl
c2V0KCkKK3sKKyAgICBtX2xhc3RUb3VjaFRpbWUgPSAwX3M7CisgICAgbV9sYXN0VG91Y2hMb2Nh
dGlvbiA9IHsgfTsKKyAgICBtX2xhc3RTY29yZSA9IDA7Cit9CisKK2RvdWJsZSBGdWxsc2NyZWVu
VG91Y2hTZWNoZXVyaXN0aWM6OmRpc3RhbmNlU2NvcmUoY29uc3QgQ0dQb2ludCYgbmV4dExvY2F0
aW9uLCBjb25zdCBDR1BvaW50JiBsYXN0TG9jYXRpb24sIGNvbnN0IFNlY29uZHMmIGRlbHRhVGlt
ZSkKK3sKKyAgICBkb3VibGUgZGlzdGFuY2UgPSBzcXJ0KAorICAgICAgICBtX3hXZWlnaHQgKiBw
b3cobmV4dExvY2F0aW9uLnggLSBsYXN0TG9jYXRpb24ueCwgMikgKworICAgICAgICBtX3lXZWln
aHQgKiBwb3cobmV4dExvY2F0aW9uLnkgLSBsYXN0TG9jYXRpb24ueSwgMikpOworICAgIGRvdWJs
ZSBzaXplRmFjdG9yID0gc3FydCgKKyAgICAgICAgbV94V2VpZ2h0ICogcG93KG1fc2l6ZS53aWR0
aCwgMikgKworICAgICAgICBtX3lXZWlnaHQgKiBwb3cobV9zaXplLmhlaWdodCwgMikpOworICAg
IGRvdWJsZSBzY2FsZWREaXN0YW5jZSA9IGRpc3RhbmNlIC8gc2l6ZUZhY3RvcjsKKyAgICBpZiAo
c2NhbGVkRGlzdGFuY2UgPD0gbV9jdXRvZmYpCisgICAgICAgIHJldHVybiBzY2FsZWREaXN0YW5j
ZSAqIChtX3JhbXBVcFNwZWVkIC8gZGVsdGFUaW1lKTsKKworICAgIGRvdWJsZSBleHBvbmVudGlh
bERpc3RhbmNlID0gbV9jdXRvZmYgKyBwb3coKHNjYWxlZERpc3RhbmNlIC0gbV9jdXRvZmYpIC8g
KDEgLSBtX2N1dG9mZiksIG1fZ2FtbWEpOworICAgIHJldHVybiBleHBvbmVudGlhbERpc3RhbmNl
ICogKG1fcmFtcFVwU3BlZWQgLyBkZWx0YVRpbWUpOworfQorCitkb3VibGUgRnVsbHNjcmVlblRv
dWNoU2VjaGV1cmlzdGljOjphdHRlbnVhdGlvbkZhY3RvcihTZWNvbmRzIGRlbHRhKQoreworICAg
IGRvdWJsZSBub3JtYWxpemVkVGltZURlbHRhID0gZGVsdGEgLyBtX3JhbXBEb3duU3BlZWQ7Cisg
ICAgcmV0dXJuIG5vcm1hbGl6ZWRUaW1lRGVsdGEgKiBtX3dlaWdodDsKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hT
ZWNoZXVyaXN0aWMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL0Z1
bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzY2RjYTNkN2MwMzE2YThm
NDU3NzlkMjFkODEwOGZhYzNkNThhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgPHd0Zi9TZWNvbmRz
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBGdWxsc2NyZWVuVG91Y2hTZWNoZXVy
aXN0aWMgeworcHVibGljOgorICAgIGRvdWJsZSBzY29yZU9mTmV4dFRvdWNoKENHUG9pbnQgbG9j
YXRpb24pOworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHZvaWQgc2V0UmFtcFVwU3BlZWQoU2Vj
b25kcyBzcGVlZCkgeyBtX3JhbXBVcFNwZWVkID0gc3BlZWQ7IH0KKyAgICB2b2lkIHNldFJhbXBE
b3duU3BlZWQoU2Vjb25kcyBzcGVlZCkgeyBtX3JhbXBEb3duU3BlZWQgPSBzcGVlZDsgfQorICAg
IHZvaWQgc2V0WFdlaWdodChkb3VibGUgd2VpZ2h0KSB7IG1feFdlaWdodCA9IHdlaWdodDsgfQor
ICAgIHZvaWQgc2V0WVdlaWdodChkb3VibGUgd2VpZ2h0KSB7IG1feVdlaWdodCA9IHdlaWdodDsg
fQorICAgIHZvaWQgc2V0U2l6ZShDR1NpemUgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAg
dm9pZCBzZXRHYW1tYShkb3VibGUgZ2FtbWEpIHsgbV9nYW1tYSA9IGdhbW1hOyB9CisgICAgdm9p
ZCBzZXRHYW1tYUN1dG9mZihkb3VibGUgY3V0b2ZmKSB7IG1fY3V0b2ZmID0gY3V0b2ZmOyB9CisK
K3ByaXZhdGU6CisgICAgZG91YmxlIGRpc3RhbmNlU2NvcmUoY29uc3QgQ0dQb2ludCYgbmV4dExv
Y2F0aW9uLCBjb25zdCBDR1BvaW50JiBsYXN0TG9jYXRpb24sIGNvbnN0IFNlY29uZHMmIGRlbHRh
VGltZSk7CisgICAgZG91YmxlIGF0dGVudWF0aW9uRmFjdG9yKFNlY29uZHMgZGVsdGEpOworCisg
ICAgZG91YmxlIG1fd2VpZ2h0IHsgMC4xIH07CisgICAgU2Vjb25kcyBtX3JhbXBVcFNwZWVkIHsg
MSB9OworICAgIFNlY29uZHMgbV9yYW1wRG93blNwZWVkIHsgMSB9OworICAgIGRvdWJsZSBtX3hX
ZWlnaHQgeyAxIH07CisgICAgZG91YmxlIG1feVdlaWdodCB7IDEgfTsKKyAgICBkb3VibGUgbV9n
YW1tYSB7IDEgfTsKKyAgICBkb3VibGUgbV9jdXRvZmYgeyAxIH07CisgICAgQ0dTaXplIG1fc2l6
ZSB7IH07CisgICAgU2Vjb25kcyBtX2xhc3RUb3VjaFRpbWUgeyAwIH07CisgICAgQ0dQb2ludCBt
X2xhc3RUb3VjaExvY2F0aW9uIHsgfTsKKyAgICBkb3VibGUgbV9sYXN0U2NvcmUgeyAwIH07Cit9
OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dL
RnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
ZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNWE0
ZDcyNDhhZDAxNDVmMTRiZjU2MzIxNWQ4Nzk2YWZkYzc0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29u
dHJvbGxlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9TKQorCisjaW1wb3J0IDxV
SUtpdC9VSVZpZXdDb250cm9sbGVyLmg+CisKK0BjbGFzcyBXS1dlYlZpZXc7CisKK05TX0FTU1VN
RV9OT05OVUxMX0JFR0lOCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIg
OiBVSVZpZXdDb250cm9sbGVyCitAcHJvcGVydHkgKHJldGFpbiwgbm9uYXRvbWljKSBpZCB0YXJn
ZXQ7CitAcHJvcGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBTRUwgYWN0aW9uOworQHByb3BlcnR5
IChyZXRhaW4sIG5vbmF0b21pYykgTlNTdHJpbmcgKmxvY2F0aW9uOworQHByb3BlcnR5IChhc3Np
Z24sIG5vbmF0b21pYykgQk9PTCBwcmVmZXJzU3RhdHVzQmFySGlkZGVuOworQHByb3BlcnR5IChh
c3NpZ24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5nOworQHByb3Bl
cnR5IChhc3NpZ24sIG5vbmF0b21pYywgZ2V0dGVyPWlzUGljdHVyZUluUGljdHVyZUFjdGl2ZSkg
Qk9PTCBwaWN0dXJlSW5QaWN0dXJlQWN0aXZlOworCistIChpZClpbml0V2l0aFdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXc7CistICh2b2lkKXNob3dVSTsKKy0gKHZvaWQpaGlkZVVJOworLSAo
dm9pZCl2aWRlb0NvbnRyb2xzTWFuYWdlckRpZENoYW5nZTsKK0BlbmQKKworTlNfQVNTVU1FX05P
Tk5VTExfRU5ECisKKyNlbmRpZiAvLyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVu
L1dLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmRmZjQxMTlkMjBjYTIwY2VjYjc5NmE3MzM0MzM3OTE0NWZmNzA3NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlblZp
ZXdDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykK
KyNpbXBvcnQgIldLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmgiCisKKyNpbXBvcnQgIkZ1bGxz
Y3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oIgorI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmgiCisjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiV0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3LmgiCisjaW1wb3J0ICJXS1dlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1wb3J0
IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitz
dGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgc2hvd0hpZGVBbmltYXRpb25EdXJhdGlvbiA9IDAu
MTsKK3N0YXRpYyBjb25zdCBOU1RpbWVJbnRlcnZhbCBhdXRvSGlkZURlbGF5ID0gNC4wOworc3Rh
dGljIGNvbnN0IGRvdWJsZSByZXF1aXJlZFNjb3JlID0gMC4xOworCitAY2xhc3MgV0tGdWxsc2Ny
ZWVuU3RhY2tWaWV3OworCitjbGFzcyBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlclBsYXliYWNr
U2Vzc2lvbk1vZGVsQ2xpZW50IDogUGxheWJhY2tTZXNzaW9uTW9kZWxDbGllbnQgeworcHVibGlj
OgorICAgIHZvaWQgc2V0UGFyZW50KFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyICpwYXJlbnQp
IHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KKworICAgIHZvaWQgcmF0ZUNoYW5nZWQoYm9vbCBpc1Bs
YXlpbmcsIGZsb2F0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9wYXJlbnQucGxheWluZyA9
IGlzUGxheWluZzsKKyAgICB9CisKKyAgICB2b2lkIHBpY3R1cmVJblBpY3R1cmVBY3RpdmVDaGFu
Z2VkKGJvb2wgYWN0aXZlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9wYXJlbnQucGljdHVy
ZUluUGljdHVyZUFjdGl2ZSA9IGFjdGl2ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldEludGVyZmFj
ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCogaW50ZXJmYWNlKQorICAgIHsKKyAgICAg
ICAgaWYgKG1faW50ZXJmYWNlID09IGludGVyZmFjZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAobV9pbnRlcmZhY2UgJiYgbV9pbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1v
ZGVsKCkpCisgICAgICAgICAgICBpbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnJl
bW92ZUNsaWVudCgqdGhpcyk7CisgICAgICAgIG1faW50ZXJmYWNlID0gaW50ZXJmYWNlOworICAg
ICAgICBpZiAobV9pbnRlcmZhY2UgJiYgbV9pbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVs
KCkpCisgICAgICAgICAgICBpbnRlcmZhY2UtPnBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPmFkZENs
aWVudCgqdGhpcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdLRnVsbFNjcmVlblZpZXdDb250
cm9sbGVyICptX3BhcmVudCB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8UGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ+IG1faW50ZXJmYWNlOworfTsKKworI3ByYWdtYSBtYXJrIC0gX1dLRXh0
cmluc2ljQnV0dG9uCisKK0BpbnRlcmZhY2UgX1dLRXh0cmluc2ljQnV0dG9uIDogVUlCdXR0b24K
K0Bwcm9wZXJ0eSAoYXNzaWduLCBub25hdG9taWMpIENHU2l6ZSBleHRyaW5zaWNDb250ZW50U2l6
ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0V4dHJpbnNpY0J1dHRvbgorLSAodm9pZClz
ZXRFeHRyaW5zaWNDb250ZW50U2l6ZTooQ0dTaXplKXNpemUKK3sKKyAgICBfZXh0cmluc2ljQ29u
dGVudFNpemUgPSBzaXplOworICAgIFtzZWxmIGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6
ZV07Cit9CisKKy0gKENHU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQoreworICAgIHJldHVybiBf
ZXh0cmluc2ljQ29udGVudFNpemU7Cit9CitAZW5kCisKKyNwcmFnbWEgbWFyayAtIFdLRnVsbFNj
cmVlblZpZXdDb250cm9sbGVyCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIgKCkgPFVJR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSwgVUlUb29sYmFyRGVsZWdhdGU+CitA
cHJvcGVydHkgKGFzc2lnbiwgbm9uYXRvbWljKSBXS1dlYlZpZXcgKl93ZWJWaWV3OyAvLyBDYW5u
b3QgYmUgcmV0YWluZWQsIHNlZSA8cmRhcjovL3Byb2JsZW0vMTQ4ODQ2NjY+LgorQHByb3BlcnR5
IChyZWFkb25seSwgbm9uYXRvbWljKSBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5KiBfbWFuYWdl
cjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgQ0dGbG9hdCBfZWZmZWN0aXZlRnVs
bHNjcmVlbkluc2V0VG9wOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tGdWxsU2NyZWVuVmll
d0NvbnRyb2xsZXIgeworICAgIFJldGFpblB0cjxVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVy
PiBfdG91Y2hHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8V0tGdWxsc2NyZWVuU3Rh
Y2tWaWV3PiBfc3RhY2tWaWV3OworICAgIFJldGFpblB0cjxfV0tFeHRyaW5zaWNCdXR0b24+IF9j
YW5jZWxCdXR0b247CisgICAgUmV0YWluUHRyPF9XS0V4dHJpbnNpY0J1dHRvbj4gX3BpcEJ1dHRv
bjsKKyAgICBSZXRhaW5QdHI8VUlCdXR0b24+IF9sb2NhdGlvbkJ1dHRvbjsKKyAgICBSZXRhaW5Q
dHI8VUlMYXlvdXRHdWlkZT4gX3RvcEd1aWRlOworICAgIFJldGFpblB0cjxOU0xheW91dENvbnN0
cmFpbnQ+IF90b3BDb25zdHJhaW50OworICAgIFdlYktpdDo6RnVsbHNjcmVlblRvdWNoU2VjaGV1
cmlzdGljIF9zZWNoZXVyaXN0aWM7CisgICAgV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXJQbGF5
YmFja1Nlc3Npb25Nb2RlbENsaWVudCBfcGxheWJhY2tDbGllbnQ7CisgICAgQk9PTCBfaGFzQ29u
dHJvbHNNYW5hZ2VyOworICAgIENHRmxvYXQgX25vblplcm9TdGF0dXNCYXJIZWlnaHQ7Cit9CisK
KyNwcmFnbWEgbWFyayAtIEV4dGVybmFsIEludGVyZmFjZQorCistIChpZClpbml0V2l0aFdlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAg
IGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIF9ub25aZXJvU3RhdHVzQmFy
SGVpZ2h0ID0gVUlBcHBsaWNhdGlvbi5zaGFyZWRBcHBsaWNhdGlvbi5zdGF0dXNCYXJGcmFtZS5z
aXplLmhlaWdodDsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9zdGF0dXNCYXJGcmFtZURpZENoYW5n
ZTopIG5hbWU6VUlBcHBsaWNhdGlvbkRpZENoYW5nZVN0YXR1c0JhckZyYW1lTm90aWZpY2F0aW9u
IG9iamVjdDpuaWxdOworICAgIF9zZWNoZXVyaXN0aWMuc2V0UmFtcFVwU3BlZWQoU2Vjb25kcygw
LjI1KSk7CisgICAgX3NlY2hldXJpc3RpYy5zZXRSYW1wRG93blNwZWVkKFNlY29uZHMoMS4pKTsK
KyAgICBfc2VjaGV1cmlzdGljLnNldFhXZWlnaHQoMCk7CisgICAgX3NlY2hldXJpc3RpYy5zZXRH
YW1tYSgwLjEpOworICAgIF9zZWNoZXVyaXN0aWMuc2V0R2FtbWFDdXRvZmYoMC4wOCk7CisKKyAg
ICBzZWxmLl93ZWJWaWV3ID0gd2ViVmlldzsKKworICAgIF9wbGF5YmFja0NsaWVudC5zZXRQYXJl
bnQoc2VsZik7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
XTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2Vy
dmVyOnNlbGZdOworCisgICAgX3BsYXliYWNrQ2xpZW50LnNldEludGVyZmFjZShudWxscHRyKTsK
KworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzaG93VUkKK3sKKyAgICBbTlNP
YmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYgc2VsZWN0
b3I6QHNlbGVjdG9yKGhpZGVVSSkgb2JqZWN0Om5pbF07CisKKyAgICBpZiAoX3BsYXlpbmcpIHsK
KyAgICAgICAgTlNUaW1lSW50ZXJ2YWwgaGlkZURlbGF5ID0gYXV0b0hpZGVEZWxheTsKKyAgICAg
ICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIHdpdGhPYmplY3Q6bmls
IGFmdGVyRGVsYXk6aGlkZURlbGF5XTsKKyAgICB9CisgICAgW1VJVmlldyBhbmltYXRlV2l0aER1
cmF0aW9uOnNob3dIaWRlQW5pbWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uczpeeworICAgICAgICBb
X3N0YWNrVmlldyBzZXRIaWRkZW46Tk9dOworICAgICAgICBbX3N0YWNrVmlldyBzZXRBbHBoYTox
XTsKKyAgICAgICAgc2VsZi5wcmVmZXJzU3RhdHVzQmFySGlkZGVuID0gTk87CisgICAgfV07Cit9
CisKKy0gKHZvaWQpaGlkZVVJCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9y
bVJlcXVlc3RzV2l0aFRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIG9iamVj
dDpuaWxdOworICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjpzaG93SGlkZUFuaW1hdGlv
bkR1cmF0aW9uIGFuaW1hdGlvbnM6XnsKKyAgICAgICAgW3NlbGYudmlldyByZW1vdmVDb25zdHJh
aW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAgICAgIF90b3BDb25zdHJhaW50ID0g
W1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzZWxmLnZpZXcu
c2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3IgY29uc3RhbnQ6c2VsZi52aWV3LnNhZmVBcmVh
SW5zZXRzLnRvcF07CisgICAgICAgIFtfdG9wQ29uc3RyYWludCBzZXRBY3RpdmU6WUVTXTsKKyAg
ICAgICAgW19zdGFja1ZpZXcgc2V0QWxwaGE6MF07CisgICAgICAgIHNlbGYucHJlZmVyc1N0YXR1
c0JhckhpZGRlbiA9IFlFUzsKKyAgICB9IGNvbXBsZXRpb246XihCT09MIGZpbmlzaGVkKSB7Cisg
ICAgICAgIGlmICghZmluaXNoZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgW3Nl
bGYudmlldyByZW1vdmVDb25zdHJhaW50czpAW190b3BDb25zdHJhaW50LmdldCgpXV07CisgICAg
ICAgIF90b3BDb25zdHJhaW50ID0gW1tfdG9wR3VpZGUgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1
YWxUb0FuY2hvcjpzZWxmLnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlkZS50b3BBbmNob3JdOworICAg
ICAgICBbX3RvcENvbnN0cmFpbnQgc2V0QWN0aXZlOllFU107CisgICAgICAgIFtfc3RhY2tWaWV3
IHNldEhpZGRlbjpZRVNdOworICAgIH1dOworfQorCistICh2b2lkKXZpZGVvQ29udHJvbHNNYW5h
Z2VyRGlkQ2hhbmdlCit7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gW3NlbGYuX3dlYlZpZXcg
X3BhZ2VdOworICAgIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNzaW9u
TWFuYWdlciA9IHBhZ2UgPyBwYWdlLT5wbGF5YmFja1Nlc3Npb25NYW5hZ2VyKCkgOiBudWxscHRy
OworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBwbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2UgPSBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyID8gcGxheWJhY2tTZXNzaW9uTWFuYWdl
ci0+Y29udHJvbHNNYW5hZ2VySW50ZXJmYWNlKCkgOiBudWxscHRyOworICAgIF9wbGF5YmFja0Ns
aWVudC5zZXRJbnRlcmZhY2UocGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKTsKKworICAgIFBsYXli
YWNrU2Vzc2lvbk1vZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCA9IHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSA/IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZS0+cGxheWJhY2tTZXNzaW9uTW9kZWwo
KSA6IG51bGxwdHI7CisgICAgX2hhc0NvbnRyb2xzTWFuYWdlciA9IHBsYXliYWNrU2Vzc2lvbk1v
ZGVsOworICAgIHNlbGYucGxheWluZyA9IHBsYXliYWNrU2Vzc2lvbk1vZGVsID8gcGxheWJhY2tT
ZXNzaW9uTW9kZWwtPmlzUGxheWluZygpIDogTk87CisgICAgW19waXBCdXR0b24gc2V0SGlkZGVu
OiFwbGF5YmFja1Nlc3Npb25Nb2RlbF07Cit9CisKK0BzeW50aGVzaXplIHByZWZlcnNTdGF0dXNC
YXJIaWRkZW49X3ByZWZlcnNTdGF0dXNCYXJIaWRkZW47CisKKy0gKHZvaWQpc2V0UHJlZmVyc1N0
YXR1c0JhckhpZGRlbjooQk9PTCl2YWx1ZQoreworICAgIF9wcmVmZXJzU3RhdHVzQmFySGlkZGVu
ID0gdmFsdWU7CisgICAgW3NlbGYgc2V0TmVlZHNTdGF0dXNCYXJBcHBlYXJhbmNlVXBkYXRlXTsK
KyAgICBbc2VsZiBfdXBkYXRlV2ViVmlld0Z1bGxzY3JlZW5JbnNldHNdOworfQorCistICh2b2lk
KXNldFBsYXlpbmc6KEJPT0wpaXNQbGF5aW5nCit7CisgICAgaWYgKF9wbGF5aW5nID09IGlzUGxh
eWluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgX3BsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAg
aWYgKCFfcGxheWluZykKKyAgICAgICAgW3NlbGYgc2hvd1VJXTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
IHNlbGVjdG9yOkBzZWxlY3RvcihoaWRlVUkpIG9iamVjdDpuaWxdOworICAgICAgICBOU1RpbWVJ
bnRlcnZhbCBoaWRlRGVsYXkgPSBhdXRvSGlkZURlbGF5OworICAgICAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKGhpZGVVSSkgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTpoaWRl
RGVsYXldOworICAgIH0KK30KKworLSAodm9pZClzZXRQaWN0dXJlSW5QaWN0dXJlQWN0aXZlOihC
T09MKWFjdGl2ZQoreworICAgIGlmIChfcGljdHVyZUluUGljdHVyZUFjdGl2ZSA9PSBhY3RpdmUp
CisgICAgICAgIHJldHVybjsKKworICAgIF9waWN0dXJlSW5QaWN0dXJlQWN0aXZlID0gYWN0aXZl
OworICAgIFtfcGlwQnV0dG9uIHNldFNlbGVjdGVkOmFjdGl2ZV07Cit9CisKKyNwcmFnbWEgbWFy
ayAtIFVJVmlld0NvbnRyb2xsZXIgT3ZlcnJpZGVzCisKKy0gKHZvaWQpbG9hZFZpZXcKK3sKKyAg
ICBbc2VsZiBzZXRWaWV3OmFkb3B0TlMoW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCldKS5nZXQoKV07CisgICAgc2VsZi52aWV3LmF1dG9yZXNp
emluZ01hc2sgPSBVSVZpZXdBdXRvcmVzaXppbmdGbGV4aWJsZVdpZHRoIHwgVUlWaWV3QXV0b3Jl
c2l6aW5nRmxleGlibGVIZWlnaHQ7CisKKyAgICBfY2FuY2VsQnV0dG9uID0gW19XS0V4dHJpbnNp
Y0J1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1dHRvblR5cGVTeXN0ZW1dOworICAgIFtfY2FuY2Vs
QnV0dG9uIHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsK
KyAgICBbX2NhbmNlbEJ1dHRvbiBzZXRBZGp1c3RzSW1hZ2VXaGVuSGlnaGxpZ2h0ZWQ6Tk9dOwor
ICAgIFtfY2FuY2VsQnV0dG9uIHNldEV4dHJpbnNpY0NvbnRlbnRTaXplOkNHU2l6ZU1ha2UoNjAu
MCwgNDcuMCldOworICAgIFtXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgYXBwbHlQcmltYXJ5R2x5cGhU
aW50VG9WaWV3Ol9jYW5jZWxCdXR0b24uZ2V0KCldOworICAgIE5TQnVuZGxlICpidW5kbGUgPSBb
TlNCdW5kbGUgYnVuZGxlRm9yQ2xhc3M6c2VsZi5jbGFzc107CisgICAgVUlJbWFnZSAqZG9uZUlt
YWdlID0gW1VJSW1hZ2UgaW1hZ2VOYW1lZDpAIkRvbmUiIGluQnVuZGxlOmJ1bmRsZSBjb21wYXRp
YmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpuaWxdOworICAgIFtfY2FuY2VsQnV0dG9uIHNldEltYWdl
Oltkb25lSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9kZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFs
d2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07CisgICAgW19jYW5j
ZWxCdXR0b24gc2V0VGludENvbG9yOltVSUNvbG9yIHdoaXRlQ29sb3JdXTsKKyAgICBbX2NhbmNl
bEJ1dHRvbiBzaXplVG9GaXRdOworICAgIFtfY2FuY2VsQnV0dG9uIGFkZFRhcmdldDpzZWxmIGFj
dGlvbjpAc2VsZWN0b3IoX2NhbmNlbEFjdGlvbjopIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9s
RXZlbnRUb3VjaFVwSW5zaWRlXTsKKworICAgIF9waXBCdXR0b24gPSBbX1dLRXh0cmluc2ljQnV0
dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0dG9uVHlwZVN5c3RlbV07CisgICAgW19waXBCdXR0b24g
c2V0VHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHM6Tk9dOworICAgIFtf
cGlwQnV0dG9uIHNldEFkanVzdHNJbWFnZVdoZW5IaWdobGlnaHRlZDpOT107CisgICAgW19waXBC
dXR0b24gc2V0RXh0cmluc2ljQ29udGVudFNpemU6Q0dTaXplTWFrZSg2MC4wLCA0Ny4wKV07Cisg
ICAgW1dLRnVsbHNjcmVlblN0YWNrVmlldyBhcHBseVByaW1hcnlHbHlwaFRpbnRUb1ZpZXc6X3Bp
cEJ1dHRvbi5nZXQoKV07CisgICAgVUlJbWFnZSAqc3RhcnRQaVBJbWFnZSA9IFtVSUltYWdlIGlt
YWdlTmFtZWQ6QCJTdGFydFBpY3R1cmVJblBpY3R1cmVCdXR0b24iIGluQnVuZGxlOmJ1bmRsZSBj
b21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpuaWxdOworICAgIFVJSW1hZ2UgKnN0b3BQaVBJ
bWFnZSA9IFtVSUltYWdlIGltYWdlTmFtZWQ6QCJTdG9wUGljdHVyZUluUGljdHVyZUJ1dHRvbiIg
aW5CdW5kbGU6YnVuZGxlIGNvbXBhdGlibGVXaXRoVHJhaXRDb2xsZWN0aW9uOm5pbF07CisgICAg
W19waXBCdXR0b24gc2V0SW1hZ2U6W3N0YXJ0UGlQSW1hZ2UgaW1hZ2VXaXRoUmVuZGVyaW5nTW9k
ZTpVSUltYWdlUmVuZGVyaW5nTW9kZUFsd2F5c1RlbXBsYXRlXSBmb3JTdGF0ZTpVSUNvbnRyb2xT
dGF0ZU5vcm1hbF07CisgICAgW19waXBCdXR0b24gc2V0SW1hZ2U6W3N0b3BQaVBJbWFnZSBpbWFn
ZVdpdGhSZW5kZXJpbmdNb2RlOlVJSW1hZ2VSZW5kZXJpbmdNb2RlQWx3YXlzVGVtcGxhdGVdIGZv
clN0YXRlOlVJQ29udHJvbFN0YXRlU2VsZWN0ZWRdOworICAgIFtfcGlwQnV0dG9uIHNldFRpbnRD
b2xvcjpbVUlDb2xvciB3aGl0ZUNvbG9yXV07CisgICAgW19waXBCdXR0b24gc2l6ZVRvRml0XTsK
KyAgICBbX3BpcEJ1dHRvbiBhZGRUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF90b2dnbGVQ
aVBBY3Rpb246KSBmb3JDb250cm9sRXZlbnRzOlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07
CisKKyAgICBfc3RhY2tWaWV3ID0gYWRvcHROUyhbW1dLRnVsbHNjcmVlblN0YWNrVmlldyBhbGxv
Y10gaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdzOkBbX2NhbmNlbEJ1dHRvbi5nZXQoKSwgX3BpcEJ1
dHRvbi5nZXQoKV0gYXhpczpVSUxheW91dENvbnN0cmFpbnRBeGlzSG9yaXpvbnRhbF0pOworICAg
IFtfc3RhY2tWaWV3IHNldFRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz
Ok5PXTsKKyAgICBbX3N0YWNrVmlldyBzZXRUYXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxP
dmVybGF5Ol9jYW5jZWxCdXR0b24uZ2V0KCldOworICAgIFtbc2VsZiB2aWV3XSBhZGRTdWJ2aWV3
Ol9zdGFja1ZpZXcuZ2V0KCldOworCisgICAgVUlMYXlvdXRHdWlkZSAqc2FmZUFyZWEgPSBzZWxm
LnZpZXcuc2FmZUFyZWFMYXlvdXRHdWlkZTsKKyAgICBVSUxheW91dEd1aWRlICptYXJnaW5zID0g
c2VsZi52aWV3LmxheW91dE1hcmdpbnNHdWlkZTsKKworICAgIF90b3BHdWlkZSA9IGFkb3B0TlMo
W1tVSUxheW91dEd1aWRlIGFsbG9jXSBpbml0XSk7CisgICAgW3NlbGYudmlldyBhZGRMYXlvdXRH
dWlkZTpfdG9wR3VpZGUuZ2V0KCldOworICAgIE5TTGF5b3V0QW5jaG9yICp0b3BBbmNob3IgPSBb
X3RvcEd1aWRlIHRvcEFuY2hvcl07CisgICAgX3RvcENvbnN0cmFpbnQgPSBbdG9wQW5jaG9yIGNv
bnN0cmFpbnRFcXVhbFRvQW5jaG9yOnNhZmVBcmVhLnRvcEFuY2hvcl07CisgICAgW05TTGF5b3V0
Q29uc3RyYWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIF90b3BDb25zdHJhaW50
LmdldCgpLAorICAgICAgICBbW19zdGFja1ZpZXcgdG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxU
b0FuY2hvcjp0b3BBbmNob3JdLAorICAgICAgICBbW19zdGFja1ZpZXcgbGVhZGluZ0FuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9BbmNob3I6bWFyZ2lucy5sZWFkaW5nQW5jaG9yXSwKKyAgICBdXTsK
KworICAgIFtfc3RhY2tWaWV3IHNldEFscGhhOjBdOworICAgIFtfc3RhY2tWaWV3IHNldEhpZGRl
bjpZRVNdOworICAgIFtzZWxmIHZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXTsKKworICAg
IF90b3VjaEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJTG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfdG91
Y2hEZXRlY3RlZDopXSk7CisgICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHNldENhbmNlbHNU
b3VjaGVzSW5WaWV3Ok5PXTsKKyAgICBbX3RvdWNoR2VzdHVyZVJlY29nbml6ZXIgc2V0TWluaW11
bVByZXNzRHVyYXRpb246MF07CisgICAgW190b3VjaEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVn
YXRlOnNlbGZdOworICAgIFtzZWxmLnZpZXcgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3RvdWNoR2Vz
dHVyZVJlY29nbml6ZXIuZ2V0KCldOworfQorCistICh2b2lkKXZpZXdXaWxsQXBwZWFyOihCT09M
KWFuaW1hdGVkCit7CisgICAgc2VsZi5fd2ViVmlldy5hdXRvcmVzaXppbmdNYXNrID0gVUlWaWV3
QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVp
Z2h0OworICAgIHNlbGYuX3dlYlZpZXcuZnJhbWUgPSBzZWxmLnZpZXcuYm91bmRzOworICAgIFtz
ZWxmLnZpZXcgaW5zZXJ0U3VidmlldzpzZWxmLl93ZWJWaWV3IGF0SW5kZXg6MF07CisKKyAgICBp
ZiAoYXV0byogbWFuYWdlciA9IHNlbGYuX21hbmFnZXIpCisgICAgICAgIG1hbmFnZXItPnNldEZ1
bGxzY3JlZW5BdXRvSGlkZURlbGF5KGF1dG9IaWRlRGVsYXkpOworfQorCistICh2b2lkKXZpZXdE
aWRMYXlvdXRTdWJ2aWV3cworeworICAgIFtzZWxmIF91cGRhdGVXZWJWaWV3RnVsbHNjcmVlbklu
c2V0c107CisgICAgX3NlY2hldXJpc3RpYy5zZXRTaXplKHNlbGYudmlldy5ib3VuZHMuc2l6ZSk7
Cit9CisKKy0gKHZvaWQpdmlld1dpbGxUcmFuc2l0aW9uVG9TaXplOihDR1NpemUpc2l6ZSB3aXRo
VHJhbnNpdGlvbkNvb3JkaW5hdG9yOihpZDxVSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbkNvb3Jk
aW5hdG9yPiljb29yZGluYXRvcgoreworICAgIFtzdXBlciB2aWV3V2lsbFRyYW5zaXRpb25Ub1Np
emU6c2l6ZSB3aXRoVHJhbnNpdGlvbkNvb3JkaW5hdG9yOmNvb3JkaW5hdG9yXTsKKyAgICBbY29v
cmRpbmF0b3IgYW5pbWF0ZUFsb25nc2lkZVRyYW5zaXRpb246XihpZDxVSVZpZXdDb250cm9sbGVy
VHJhbnNpdGlvbkNvb3JkaW5hdG9yQ29udGV4dD4gY29udGV4dCkgeworICAgICAgICBbc2VsZi5f
d2ViVmlldyBfYmVnaW5BbmltYXRlZFJlc2l6ZVdpdGhVcGRhdGVzOl57CisgICAgICAgICAgICBb
c2VsZi5fd2ViVmlldyBfb3ZlcnJpZGVMYXlvdXRQYXJhbWV0ZXJzV2l0aE1pbmltdW1MYXlvdXRT
aXplOnNpemUgbWF4aW11bVVub2JzY3VyZWRTaXplT3ZlcnJpZGU6c2l6ZV07CisgICAgICAgIH1d
OworICAgICAgICBbc2VsZi5fd2ViVmlldyBfc2V0SW50ZXJmYWNlT3JpZW50YXRpb25PdmVycmlk
ZTpbVUlBcHAgc3RhdHVzQmFyT3JpZW50YXRpb25dXTsKKyAgICB9IGNvbXBsZXRpb246XihpZCA8
VUlWaWV3Q29udHJvbGxlclRyYW5zaXRpb25Db29yZGluYXRvckNvbnRleHQ+Y29udGV4dCkgewor
ICAgICAgICBbc2VsZi5fd2ViVmlldyBfZW5kQW5pbWF0ZWRSZXNpemVdOworICAgIH1dOworfQor
CistIChVSVN0YXR1c0JhclN0eWxlKXByZWZlcnJlZFN0YXR1c0JhclN0eWxlCit7CisgICAgcmV0
dXJuIFVJU3RhdHVzQmFyU3R5bGVMaWdodENvbnRlbnQ7Cit9CisKKy0gKEJPT0wpcHJlZmVyc1N0
YXR1c0JhckhpZGRlbgoreworICAgIHJldHVybiBfcHJlZmVyc1N0YXR1c0JhckhpZGRlbjsKK30K
KworI3ByYWdtYSBtYXJrIC0gVUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlCisKKy0gKEJPT0wp
Z2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXpl
ciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjooVUlH
ZXN0dXJlUmVjb2duaXplciAqKW90aGVyR2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICByZXR1cm4g
WUVTOworfQorCistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVy
ICopZ2VzdHVyZVJlY29nbml6ZXIgc2hvdWxkUmVjZWl2ZVRvdWNoOihVSVRvdWNoICopdG91Y2gK
K3sKKyAgICBbc2VsZiBzaG93VUldOworICAgIHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFy
ayAtIEludGVybmFsIEludGVyZmFjZQorCitAZHluYW1pYyBfbWFuYWdlcjsKKy0gKFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHkqKV9tYW5hZ2VyCit7CisgICAgaWYgKGF1dG8qIHBhZ2UgPSBbc2Vs
Zi5fd2ViVmlldyBfcGFnZV0pCisgICAgICAgIHJldHVybiBwYWdlLT5mdWxsU2NyZWVuTWFuYWdl
cigpOworICAgIHJldHVybiBudWxscHRyOworfQorCitAZHluYW1pYyBfZWZmZWN0aXZlRnVsbHNj
cmVlbkluc2V0VG9wOworLSAoQ0dGbG9hdClfZWZmZWN0aXZlRnVsbHNjcmVlbkluc2V0VG9wCit7
CisgICAgaWYgKCFzZWxmLnByZWZlcnNTdGF0dXNCYXJIaWRkZW4pCisgICAgICAgIHJldHVybiAw
OworCisgICAgQ0dSZWN0IGNhbmNlbEZyYW1lID0gX2NhbmNlbEJ1dHRvbi5nZXQoKS5mcmFtZTsK
KyAgICBDR1BvaW50IG1heFhZID0gQ0dQb2ludE1ha2UoQ0dSZWN0R2V0TWF4WChjYW5jZWxGcmFt
ZSksIENHUmVjdEdldE1heFkoY2FuY2VsRnJhbWUpKTsKKyAgICByZXR1cm4gW19jYW5jZWxCdXR0
b24gY29udmVydFBvaW50Om1heFhZIHRvVmlldzpzZWxmLnZpZXddLnk7Cit9CisKKy0gKHZvaWQp
X2NhbmNlbEFjdGlvbjooaWQpc2VuZGVyCit7CisgICAgW1tzZWxmIHRhcmdldF0gcGVyZm9ybVNl
bGVjdG9yOltzZWxmIGFjdGlvbl1dOworfQorCistICh2b2lkKV90b2dnbGVQaVBBY3Rpb246KGlk
KXNlbmRlcgoreworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IFtzZWxmLl93ZWJWaWV3IF9wYWdl
XTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFBsYXliYWNrU2Vzc2lv
bk1hbmFnZXJQcm94eSogcGxheWJhY2tTZXNzaW9uTWFuYWdlciA9IHBhZ2UtPnBsYXliYWNrU2Vz
c2lvbk1hbmFnZXIoKTsKKyAgICBpZiAoIXBsYXliYWNrU2Vzc2lvbk1hbmFnZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIFBsYXRmb3JtUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlKiBwbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2UgPSBwbGF5YmFja1Nlc3Npb25NYW5hZ2VyLT5jb250cm9sc01hbmFn
ZXJJbnRlcmZhY2UoKTsKKyAgICBpZiAoIXBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGxheWJhY2tTZXNzaW9uTW9kZWwqIHBsYXliYWNrU2Vzc2lvbk1v
ZGVsID0gcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOwor
ICAgIGlmICghcGxheWJhY2tTZXNzaW9uTW9kZWwpCisgICAgICAgIHJldHVybjsKKworICAgIHBs
YXliYWNrU2Vzc2lvbk1vZGVsLT50b2dnbGVQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZv
aWQpX3RvdWNoRGV0ZWN0ZWQ6KGlkKXNlbmRlcgoreworICAgIGlmIChbX3RvdWNoR2VzdHVyZVJl
Y29nbml6ZXIgc3RhdGVdICE9IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJlZ2FuIHx8IFtfdG91
Y2hHZXN0dXJlUmVjb2duaXplciBzdGF0ZV0gPT0gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRW5k
ZWQpIHsKKyAgICAgICAgZG91YmxlIHNjb3JlID0gX3NlY2hldXJpc3RpYy5zY29yZU9mTmV4dFRv
dWNoKFtfdG91Y2hHZXN0dXJlUmVjb2duaXplciBsb2NhdGlvbkluVmlldzpzZWxmLnZpZXddKTsK
KyAgICAgICAgaWYgKHNjb3JlID4gcmVxdWlyZWRTY29yZSkKKyAgICAgICAgICAgIFtzZWxmIF9z
aG93UGhpc2hpbmdBbGVydF07CisgICAgfQorICAgIFtzZWxmIHNob3dVSV07Cit9CisKKy0gKHZv
aWQpX3N0YXR1c0JhckZyYW1lRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbkNlbnRlciAqKW5vdGlm
aWNhdGlvbgoreworICAgIENHRmxvYXQgaGVpZ2h0ID0gVUlBcHBsaWNhdGlvbi5zaGFyZWRBcHBs
aWNhdGlvbi5zdGF0dXNCYXJGcmFtZS5zaXplLmhlaWdodDsKKyAgICBpZiAoIWhlaWdodCB8fCBo
ZWlnaHQgPT0gX25vblplcm9TdGF0dXNCYXJIZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAg
IF9ub25aZXJvU3RhdHVzQmFySGVpZ2h0ID0gaGVpZ2h0OworICAgIFtzZWxmIF91cGRhdGVXZWJW
aWV3RnVsbHNjcmVlbkluc2V0c107Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVdlYlZpZXdGdWxsc2Ny
ZWVuSW5zZXRzCit7CisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKQorICAg
ICAgICBtYW5hZ2VyLT5zZXRGdWxsc2NyZWVuSW5zZXRUb3Aoc2VsZi5fZWZmZWN0aXZlRnVsbHNj
cmVlbkluc2V0VG9wKTsKK30KKworLSAodm9pZClfc2hvd1BoaXNoaW5nQWxlcnQKK3sKKyAgICBO
U1N0cmluZyAqYWxlcnRUaXRsZSA9IFdFQl9VSV9TVFJJTkcoIkRlY2VwdGl2ZSBXZWJzaXRlIFdh
cm5pbmciLCAiRnVsbHNjcmVlbiBEZWNlcHRpdmUgV2Vic2l0ZSBXYXJuaW5nIFNoZWV0IFRpdGxl
Iik7CisgICAgTlNTdHJpbmcgKmFsZXJ0TWVzc2FnZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OldFQl9VSV9TVFJJTkcoIlRoZSB3ZWJzaXRlIFwiJUBcIiBtYXkgYmUgYSBkZWNlcHRpdmUg
d2Vic2l0ZS4gV291bGQgeW91IGxpa2UgdG8gZXhpdCBmdWxsc2NyZWVuPyIsICJGdWxsc2NyZWVu
IERlY2VwdGl2ZSBXZWJzaXRlIFdhcm5pbmcgU2hlZXQgQ29udGVudCBUZXh0IikgLCAoTlNTdHJp
bmcgKilzZWxmLmxvY2F0aW9uXTsKKyAgICBVSUFsZXJ0Q29udHJvbGxlciogYWxlcnQgPSBbVUlB
bGVydENvbnRyb2xsZXIgYWxlcnRDb250cm9sbGVyV2l0aFRpdGxlOmFsZXJ0VGl0bGUgbWVzc2Fn
ZTphbGVydE1lc3NhZ2UgcHJlZmVycmVkU3R5bGU6VUlBbGVydENvbnRyb2xsZXJTdHlsZUFsZXJ0
XTsKKworICAgIFVJQWxlcnRBY3Rpb24qIGV4aXRBY3Rpb24gPSBbVUlBbGVydEFjdGlvbiBhY3Rp
b25XaXRoVGl0bGU6V0VCX1VJX1NUUklORygiRXhpdCBGdWxsc2NyZWVuIiwgIkZ1bGxzY3JlZW4g
RGVjZXB0aXZlIFdlYnNpdGUgRXhpdCBBY3Rpb24iKSBzdHlsZTpVSUFsZXJ0QWN0aW9uU3R5bGVD
YW5jZWwgaGFuZGxlcjpeKFVJQWxlcnRBY3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgW3NlbGYg
X2NhbmNlbEFjdGlvbjphY3Rpb25dOworICAgIH1dOworCisgICAgVUlBbGVydEFjdGlvbiogc3Rh
eUFjdGlvbiA9IFtVSUFsZXJ0QWN0aW9uIGFjdGlvbldpdGhUaXRsZTpXRUJfVUlfU1RSSU5HKCJT
dGF5IGluIEZ1bGxzY3JlZW4iLCAiRnVsbHNjcmVlbiBEZWNlcHRpdmUgV2Vic2l0ZSBTdGF5IEFj
dGlvbiIpIHN0eWxlOlVJQWxlcnRBY3Rpb25TdHlsZURlZmF1bHQgaGFuZGxlcjpeKFVJQWxlcnRB
Y3Rpb24gKiBhY3Rpb24pIHsKKyAgICAgICAgX3NlY2hldXJpc3RpYy5yZXNldCgpOworICAgIH1d
OworCisgICAgW2FsZXJ0IGFkZEFjdGlvbjpleGl0QWN0aW9uXTsKKyAgICBbYWxlcnQgYWRkQWN0
aW9uOnN0YXlBY3Rpb25dOworICAgIFtzZWxmIHByZXNlbnRWaWV3Q29udHJvbGxlcjphbGVydCBh
bmltYXRlZDpZRVMgY29tcGxldGlvbjpuaWxdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmVmMmExMjg4YmU2ZmNkNDZh
NDBhYmExNzFlZWQwODAzMDkzYTNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5o
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KSAmJiBQTEFURk9STShJT1MpCisKKyNpbXBvcnQgPFVJS2l0L1VJVmlld0NvbnRyb2xsZXJUcmFu
c2l0aW9uaW5nLmg+CisKK0BjbGFzcyBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldzsK
K0BjbGFzcyBXS1dlYlZpZXc7CisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciA6IE5TT2JqZWN0IDxVSVZpZXdDb250cm9sbGVyVHJhbnNpdGlvbmluZ0RlbGVnYXRlPgor
QHByb3BlcnR5IChyZWFkb25seSwgcmV0YWluLCBub25hdG9taWMpIFdlYkNvcmVGdWxsU2NyZWVu
UGxhY2Vob2xkZXJWaWV3ICp3ZWJWaWV3UGxhY2Vob2xkZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5
LCBhc3NpZ24sIG5vbmF0b21pYykgQk9PTCBpc0Z1bGxTY3JlZW47CisKKy0gKGlkKWluaXRXaXRo
V2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldzsKKy0gKHZvaWQpZW50ZXJGdWxsU2NyZWVuOwor
LSAodm9pZCliZWdhbkVudGVyRnVsbFNjcmVlbldpdGhJbml0aWFsRnJhbWU6KENHUmVjdClpbml0
aWFsRnJhbWUgZmluYWxGcmFtZTooQ0dSZWN0KWZpbmFsRnJhbWU7CistICh2b2lkKXJlcXVlc3RF
eGl0RnVsbFNjcmVlbjsKKy0gKHZvaWQpZXhpdEZ1bGxTY3JlZW47CistICh2b2lkKWJlZ2FuRXhp
dEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFsRnJh
bWU6KENHUmVjdClmaW5hbEZyYW1lOworLSAodm9pZCljbG9zZTsKKy0gKHZvaWQpd2ViVmlld0Rp
ZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNjcmVlbjsKKy0gKHZvaWQpdmlkZW9Db250
cm9sc01hbmFnZXJEaWRDaGFuZ2U7CisKK0BlbmQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVySU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tG
dWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjlkNTRjNWU1NWU5
Yjk1MDQzNDE3MTA2ZjEyZjhlMjVmMmQwYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
cklPUy5tbQpAQCAtMCwwICsxLDg2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5o
IgorCisjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW1wb3J0
ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmgiCisKKyNpbXBvcnQgIlVJS2l0U1BJ
LmgiCisjaW1wb3J0ICJXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaCIKKyNpbXBvcnQgIldLRnVsbHNj
cmVlblZpZXdDb250cm9sbGVyLmgiCisjaW1wb3J0ICJXS1dlYlZpZXcuaCIKKyNpbXBvcnQgIldL
V2ViVmlld0ludGVybmFsLmgiCisjaW1wb3J0ICJXS1dlYlZpZXdQcml2YXRlLmgiCisjaW1wb3J0
ICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8U2VjdXJpdHkvU2Vj
Q2VydGlmaWNhdGUuaD4KKyNpbXBvcnQgPFNlY3VyaXR5L1NlY1RydXN0Lmg+CisjaW1wb3J0IDxV
SUtpdC9VSVZpc3VhbEVmZmVjdFZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0ludFJlY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlTlNVUkxFeHRyYXMuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY2YvQ0ZO
ZXR3b3JrU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0xpbmtQcmVzZW50YXRpb25TUEku
aD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvTlNTdHJpbmdTUEkuaD4KKyNpbXBvcnQgPHBhbC9z
cGkvY29jb2EvUXVhcnR6Q29yZVNQSS5oPgorI2ltcG9ydCA8d3RmL1NvZnRMaW5raW5nLmg+Cisj
aW1wb3J0IDx3dGYvc3BpL2NvY29hL1NlY3VyaXR5U1BJLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworU09GVF9MSU5LX1BSSVZBVEVfRlJB
TUVXT1JLX09QVElPTkFMKExpbmtQcmVzZW50YXRpb24pCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitzdGF0aWMgdm9pZCByZXBsYWNlVmlld1dpdGhWaWV3KFVJVmlldyAqdmlldywgVUlWaWV3ICpv
dGhlclZpZXcpCit7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0
aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgW290aGVyVmlldyBzZXRGcmFtZTpbdmll
dyBmcmFtZV1dOworICAgIFtvdGhlclZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbdmlldyBhdXRv
cmVzaXppbmdNYXNrXV07CisgICAgW1t2aWV3IHN1cGVydmlld10gaW5zZXJ0U3VidmlldzpvdGhl
clZpZXcgYWJvdmVTdWJ2aWV3OnZpZXddOworICAgIFt2aWV3IHJlbW92ZUZyb21TdXBlcnZpZXdd
OworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK2VudW0gRnVsbFNjcmVlblN0YXRl
IDogTlNJbnRlZ2VyIHsKKyAgICBOb3RJbkZ1bGxTY3JlZW4sCisgICAgV2FpdGluZ1RvRW50ZXJG
dWxsU2NyZWVuLAorICAgIEVudGVyaW5nRnVsbFNjcmVlbiwKKyAgICBJbkZ1bGxTY3JlZW4sCisg
ICAgV2FpdGluZ1RvRXhpdEZ1bGxTY3JlZW4sCisgICAgRXhpdGluZ0Z1bGxTY3JlZW4sCit9Owor
CitzdHJ1Y3QgV0tXZWJWaWV3U3RhdGUgeworICAgIGZsb2F0IF9zYXZlZFRvcENvbnRlbnRJbnNl
dCA9IDAuMDsKKyAgICBDR0Zsb2F0IF9zYXZlZFBhZ2VTY2FsZSA9IDE7CisgICAgQ0dGbG9hdCBf
c2F2ZWRWaWV3U2NhbGUgPSAxLjA7CisgICAgQ0dGbG9hdCBfc2F2ZWRab29tU2NhbGUgPSAxOwor
ICAgIFVJRWRnZUluc2V0cyBfc2F2ZWRFZGdlSW5zZXQgPSBVSUVkZ2VJbnNldHNaZXJvOworICAg
IFVJRWRnZUluc2V0cyBfc2F2ZWRPYnNjdXJlZEluc2V0cyA9IFVJRWRnZUluc2V0c1plcm87Cisg
ICAgVUlFZGdlSW5zZXRzIF9zYXZlZFNjcm9sbEluZGljYXRvckluc2V0cyA9IFVJRWRnZUluc2V0
c1plcm87CisgICAgQ0dQb2ludCBfc2F2ZWRDb250ZW50T2Zmc2V0ID0gQ0dQb2ludFplcm87CisK
KyAgICB2b2lkIGFwcGx5VG8oV0tXZWJWaWV3KiB3ZWJWaWV3KQorICAgIHsKKyAgICAgICAgW3dl
YlZpZXcgX3NldFBhZ2VTY2FsZTpfc2F2ZWRQYWdlU2NhbGUgd2l0aE9yaWdpbjpDR1BvaW50TWFr
ZSgwLCAwKV07CisgICAgICAgIFt3ZWJWaWV3IF9zZXRPYnNjdXJlZEluc2V0czpfc2F2ZWRPYnNj
dXJlZEluc2V0c107CisgICAgICAgIFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzZXRDb250ZW50SW5z
ZXQ6X3NhdmVkRWRnZUluc2V0XTsKKyAgICAgICAgW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHNldENv
bnRlbnRPZmZzZXQ6X3NhdmVkQ29udGVudE9mZnNldF07CisgICAgICAgIFtbd2ViVmlldyBzY3Jv
bGxWaWV3XSBzZXRTY3JvbGxJbmRpY2F0b3JJbnNldHM6X3NhdmVkU2Nyb2xsSW5kaWNhdG9ySW5z
ZXRzXTsKKyAgICAgICAgW3dlYlZpZXcgX3BhZ2VdLT5zZXRUb3BDb250ZW50SW5zZXQoX3NhdmVk
VG9wQ29udGVudEluc2V0KTsKKyAgICAgICAgW3dlYlZpZXcgX3NldFZpZXdTY2FsZTpfc2F2ZWRW
aWV3U2NhbGVdOworICAgICAgICBbW3dlYlZpZXcgc2Nyb2xsVmlld10gc2V0Wm9vbVNjYWxlOl9z
YXZlZFpvb21TY2FsZV07CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmUoV0tXZWJWaWV3KiB3
ZWJWaWV3KQorICAgIHsKKyAgICAgICAgX3NhdmVkUGFnZVNjYWxlID0gW3dlYlZpZXcgX3BhZ2VT
Y2FsZV07CisgICAgICAgIF9zYXZlZE9ic2N1cmVkSW5zZXRzID0gW3dlYlZpZXcgX29ic2N1cmVk
SW5zZXRzXTsKKyAgICAgICAgX3NhdmVkRWRnZUluc2V0ID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXdd
IGNvbnRlbnRJbnNldF07CisgICAgICAgIF9zYXZlZENvbnRlbnRPZmZzZXQgPSBbW3dlYlZpZXcg
c2Nyb2xsVmlld10gY29udGVudE9mZnNldF07CisgICAgICAgIF9zYXZlZFNjcm9sbEluZGljYXRv
ckluc2V0cyA9IFtbd2ViVmlldyBzY3JvbGxWaWV3XSBzY3JvbGxJbmRpY2F0b3JJbnNldHNdOwor
ICAgICAgICBfc2F2ZWRUb3BDb250ZW50SW5zZXQgPSBbd2ViVmlldyBfcGFnZV0tPnRvcENvbnRl
bnRJbnNldCgpOworICAgICAgICBfc2F2ZWRWaWV3U2NhbGUgPSBbd2ViVmlldyBfdmlld1NjYWxl
XTsKKyAgICAgICAgX3NhdmVkWm9vbVNjYWxlID0gW1t3ZWJWaWV3IHNjcm9sbFZpZXddIHpvb21T
Y2FsZV07CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3N0YXRpYyBjb25z
dCBOU1RpbWVJbnRlcnZhbCBrQW5pbWF0aW9uRHVyYXRpb24gPSAwLjI7CisKKyNwcmFnbWEgbWFy
ayAtCisKK0BpbnRlcmZhY2UgV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxlciA6IE5TT2Jq
ZWN0IDxVSVZpZXdDb250cm9sbGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nLCBVSVZpZXdDb250cm9s
bGVySW50ZXJhY3RpdmVUcmFuc2l0aW9uaW5nPgorQHByb3BlcnR5IChyZXRhaW4sIG5vbmF0b21p
YykgVUlWaWV3Q29udHJvbGxlciogdmlld0NvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21p
YykgQ0dSZWN0IGluaXRpYWxGcmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZmlu
YWxGcmFtZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBnZXR0ZXI9aXNBbmltYXRpbmdJbikgQk9P
TCBhbmltYXRpbmdJbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLRnVsbHNjcmVlbkFuaW1h
dGlvbkNvbnRyb2xsZXIgeworICAgIENHUmVjdCBfaW5pdGlhbE1hc2tWaWV3Qm91bmRzOworICAg
IENHUmVjdCBfZmluYWxNYXNrVmlld0JvdW5kczsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBfaW5p
dGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm07CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX2ZpbmFs
QW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAgICBDR1BvaW50IF9pbml0aWFsTWFza1ZpZXdDZW50
ZXI7CisgICAgQ0dQb2ludCBfZmluYWxNYXNrVmlld0NlbnRlcjsKKyAgICBSZXRhaW5QdHI8VUlW
aWV3PiBfbWFza1ZpZXc7CisgICAgUmV0YWluUHRyPFVJVmlldz4gX2FuaW1hdGluZ1ZpZXc7Cisg
ICAgUmV0YWluUHRyPGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4+IF9j
b250ZXh0OworICAgIENHRmxvYXQgX2luaXRpYWxCYWNrZ3JvdW5kQWxwaGE7CisgICAgQ0dGbG9h
dCBfZmluYWxCYWNrZ3JvdW5kQWxwaGE7Cit9CisKKy0gKHZvaWQpX2NyZWF0ZVZpZXdzRm9yVHJh
bnNpdGlvbkNvbnRleHQ6KGlkPFVJVmlld0NvbnRyb2xsZXJDb250ZXh0VHJhbnNpdGlvbmluZz4p
dHJhbnNpdGlvbkNvbnRleHQKK3sKKyAgICBfbWFza1ZpZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFs
bG9jXSBpbml0XSk7CisgICAgW19tYXNrVmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6W1VJQ29sb3Ig
YmxhY2tDb2xvcl1dOworICAgIFtfbWFza1ZpZXcgc2V0Qm91bmRzOl9pbml0aWFsTWFza1ZpZXdC
b3VuZHNdOworICAgIFtfbWFza1ZpZXcgc2V0Q2VudGVyOl9pbml0aWFsTWFza1ZpZXdDZW50ZXJd
OworICAgIFtfYW5pbWF0aW5nVmlldyBzZXRNYXNrVmlldzpfbWFza1ZpZXcuZ2V0KCldOworICAg
IFtfYW5pbWF0aW5nVmlldyBzZXRUcmFuc2Zvcm06X2luaXRpYWxBbmltYXRpbmdWaWV3VHJhbnNm
b3JtXTsKKworICAgIFVJVmlldyAqY29udGFpbmVyVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCBj
b250YWluZXJWaWV3XTsKKyAgICBbY29udGFpbmVyVmlldyBhZGRTdWJ2aWV3Ol9hbmltYXRpbmdW
aWV3LmdldCgpXTsKK30KKworLSAoTlNUaW1lSW50ZXJ2YWwpdHJhbnNpdGlvbkR1cmF0aW9uOihp
ZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0
Cit7CisgICAgcmV0dXJuIGtBbmltYXRpb25EdXJhdGlvbjsKK30KKworLSAodm9pZCljb25maWd1
cmVJbml0aWFsQW5kRmluYWxTdGF0ZXNGb3JUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVy
Q29udGV4dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQg
PSB0cmFuc2l0aW9uQ29udGV4dDsKKyAgICBVSVZpZXcgKmZyb21WaWV3ID0gW3RyYW5zaXRpb25D
b250ZXh0IHZpZXdGb3JLZXk6VUlUcmFuc2l0aW9uQ29udGV4dEZyb21WaWV3S2V5XTsKKyAgICBV
SVZpZXcgKnRvVmlldyA9IFt0cmFuc2l0aW9uQ29udGV4dCB2aWV3Rm9yS2V5OlVJVHJhbnNpdGlv
bkNvbnRleHRUb1ZpZXdLZXldOworCisgICAgQ0dSZWN0IGlubGluZUZyYW1lID0gX2FuaW1hdGlu
Z0luID8gX2luaXRpYWxGcmFtZSA6IF9maW5hbEZyYW1lOworICAgIENHUmVjdCBmdWxsc2NyZWVu
RnJhbWUgPSBfYW5pbWF0aW5nSW4gPyBfZmluYWxGcmFtZSA6IF9pbml0aWFsRnJhbWU7CisgICAg
X2FuaW1hdGluZ1ZpZXcgPSBfYW5pbWF0aW5nSW4gPyB0b1ZpZXcgOiBmcm9tVmlldzsKKworICAg
IENHUmVjdCBib3VuZHNSZWN0ID0gbGFyZ2VzdFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0
KEZsb2F0UmVjdChpbmxpbmVGcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCksIGZ1bGxzY3JlZW5G
cmFtZSk7CisgICAgYm91bmRzUmVjdC5vcmlnaW4gPSBDR1BvaW50WmVybzsKKworICAgIF9pbml0
aWFsTWFza1ZpZXdCb3VuZHMgPSBfYW5pbWF0aW5nSW4gPyBib3VuZHNSZWN0IDogW19hbmltYXRp
bmdWaWV3IGJvdW5kc107CisgICAgX2luaXRpYWxNYXNrVmlld0NlbnRlciA9IENHUG9pbnRNYWtl
KENHUmVjdEdldE1pZFgoW19hbmltYXRpbmdWaWV3IGJvdW5kc10pLCBDR1JlY3RHZXRNaWRZKFtf
YW5pbWF0aW5nVmlldyBib3VuZHNdKSk7CisgICAgX2ZpbmFsTWFza1ZpZXdCb3VuZHMgPSBfYW5p
bWF0aW5nSW4gPyBbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSA6IGJvdW5kc1JlY3Q7CisgICAgX2Zp
bmFsTWFza1ZpZXdDZW50ZXIgPSBDR1BvaW50TWFrZShDR1JlY3RHZXRNaWRYKFtfYW5pbWF0aW5n
VmlldyBib3VuZHNdKSwgQ0dSZWN0R2V0TWlkWShbX2FuaW1hdGluZ1ZpZXcgYm91bmRzXSkpOwor
CisgICAgRmxvYXRSZWN0IHNjYWxlUmVjdCA9IHNtYWxsZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0Fy
b3VuZFJlY3QoRmxvYXRSZWN0KGZ1bGxzY3JlZW5GcmFtZSkuc2l6ZSgpLmFzcGVjdFJhdGlvKCks
IGlubGluZUZyYW1lKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBzY2FsZVRyYW5zZm9ybSA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlUmVjdC53aWR0aCgpIC8gZnVsbHNjcmVlbkZy
YW1lLnNpemUud2lkdGgsIHNjYWxlUmVjdC5oZWlnaHQoKSAvIGZ1bGxzY3JlZW5GcmFtZS5zaXpl
LmhlaWdodCk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNsYXRlVHJhbnNmb3JtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oQ0dSZWN0R2V0TWlkWChpbmxpbmVGcmFtZSkg
LSBDR1JlY3RHZXRNaWRYKGZ1bGxzY3JlZW5GcmFtZSksIENHUmVjdEdldE1pZFkoaW5saW5lRnJh
bWUpIC0gQ0dSZWN0R2V0TWlkWShmdWxsc2NyZWVuRnJhbWUpKTsKKworICAgIENHQWZmaW5lVHJh
bnNmb3JtIGZpbmFsVHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQoc2NhbGVUcmFu
c2Zvcm0sIHRyYW5zbGF0ZVRyYW5zZm9ybSk7CisgICAgX2luaXRpYWxBbmltYXRpbmdWaWV3VHJh
bnNmb3JtID0gX2FuaW1hdGluZ0luID8gZmluYWxUcmFuc2Zvcm0gOiBDR0FmZmluZVRyYW5zZm9y
bUlkZW50aXR5OworICAgIF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0gPSBfYW5pbWF0aW5n
SW4gPyBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5IDogZmluYWxUcmFuc2Zvcm07CisKKyAgICBf
aW5pdGlhbEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDAgOiAxOworICAgIF9maW5h
bEJhY2tncm91bmRBbHBoYSA9IF9hbmltYXRpbmdJbiA/IDEgOiAwOworfQorCistICh2b2lkKWFu
aW1hdGVUcmFuc2l0aW9uOihpZDxVSVZpZXdDb250cm9sbGVyQ29udGV4dFRyYW5zaXRpb25pbmc+
KXRyYW5zaXRpb25Db250ZXh0Cit7CisgICAgW3NlbGYgY29uZmlndXJlSW5pdGlhbEFuZEZpbmFs
U3RhdGVzRm9yVHJhbnNpdGlvbjp0cmFuc2l0aW9uQ29udGV4dF07CisgICAgW3NlbGYgX2NyZWF0
ZVZpZXdzRm9yVHJhbnNpdGlvbkNvbnRleHQ6dHJhbnNpdGlvbkNvbnRleHRdOworCisgICAgVUlX
aW5kb3cgKndpbmRvdyA9IFt0cmFuc2l0aW9uQ29udGV4dCBjb250YWluZXJWaWV3XS53aW5kb3c7
CisgICAgd2luZG93LmJhY2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGNvbG9yV2l0aFdoaXRlOjAg
YWxwaGE6X2luaXRpYWxCYWNrZ3JvdW5kQWxwaGFdOworCisgICAgW1VJVmlldyBhbmltYXRlV2l0
aER1cmF0aW9uOmtBbmltYXRpb25EdXJhdGlvbiBkZWxheTowIG9wdGlvbnM6VUlWaWV3QW5pbWF0
aW9uT3B0aW9uQ3VydmVFYXNlSW5PdXQgYW5pbWF0aW9uczpeeworICAgICAgICBbc2VsZiB1cGRh
dGVXaXRoUHJvZ3Jlc3M6MV07CisgICAgfSBjb21wbGV0aW9uOl4oQk9PTCBmaW5pc2hlZCkgewor
ICAgICAgICBbc2VsZiBhbmltYXRpb25FbmRlZDohW3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRp
b25XYXNDYW5jZWxsZWRdXTsKKyAgICAgICAgW3RyYW5zaXRpb25Db250ZXh0IGNvbXBsZXRlVHJh
bnNpdGlvbjohW3RyYW5zaXRpb25Db250ZXh0IHRyYW5zaXRpb25XYXNDYW5jZWxsZWRdXTsKKyAg
ICB9XTsKK30KKworLSAodm9pZClhbmltYXRpb25FbmRlZDooQk9PTCl0cmFuc2l0aW9uQ29tcGxl
dGVkCit7CisgICAgaWYgKChbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiAhdHJhbnNpdGlvbkNvbXBs
ZXRlZCkgfHwgKCFbc2VsZiBpc0FuaW1hdGluZ0luXSAmJiB0cmFuc2l0aW9uQ29tcGxldGVkKSkK
KyAgICAgICAgW19hbmltYXRpbmdWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgW19h
bmltYXRpbmdWaWV3IHNldE1hc2tWaWV3Om5pbF07CisgICAgX21hc2tWaWV3ID0gbmlsOworICAg
IF9hbmltYXRpbmdWaWV3ID0gbmlsOworfQorCistICh2b2lkKXN0YXJ0SW50ZXJhY3RpdmVUcmFu
c2l0aW9uOihpZCA8VUlWaWV3Q29udHJvbGxlckNvbnRleHRUcmFuc2l0aW9uaW5nPil0cmFuc2l0
aW9uQ29udGV4dAoreworICAgIFtzZWxmIGNvbmZpZ3VyZUluaXRpYWxBbmRGaW5hbFN0YXRlc0Zv
clRyYW5zaXRpb246dHJhbnNpdGlvbkNvbnRleHRdOworICAgIFtzZWxmIF9jcmVhdGVWaWV3c0Zv
clRyYW5zaXRpb25Db250ZXh0OnRyYW5zaXRpb25Db250ZXh0XTsKK30KKworLSAodm9pZCl1cGRh
dGVXaXRoUHJvZ3Jlc3M6KENHRmxvYXQpcHJvZ3Jlc3MKK3sKKyAgICBDR0FmZmluZVRyYW5zZm9y
bSBwcm9ncmVzc1RyYW5zZm9ybSA9IF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAg
ICBwcm9ncmVzc1RyYW5zZm9ybS5hICs9IHByb2dyZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdU
cmFuc2Zvcm0uYSAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hKTsKKyAgICBwcm9n
cmVzc1RyYW5zZm9ybS5iICs9IHByb2dyZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zv
cm0uYiAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5iKTsKKyAgICBwcm9ncmVzc1Ry
YW5zZm9ybS5jICs9IHByb2dyZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYyAt
IF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5jKTsKKyAgICBwcm9ncmVzc1RyYW5zZm9y
bS5kICs9IHByb2dyZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uZCAtIF9pbml0
aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5kKTsKKyAgICBwcm9ncmVzc1RyYW5zZm9ybS50eCAr
PSBwcm9ncmVzcyAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4IC0gX2luaXRpYWxB
bmltYXRpbmdWaWV3VHJhbnNmb3JtLnR4KTsKKyAgICBwcm9ncmVzc1RyYW5zZm9ybS50eSArPSBw
cm9ncmVzcyAqIChfZmluYWxBbmltYXRpbmdWaWV3VHJhbnNmb3JtLnR5IC0gX2luaXRpYWxBbmlt
YXRpbmdWaWV3VHJhbnNmb3JtLnR5KTsKKyAgICBbX2FuaW1hdGluZ1ZpZXcgc2V0VHJhbnNmb3Jt
OnByb2dyZXNzVHJhbnNmb3JtXTsKKworICAgIENHUmVjdCBwcm9ncmVzc0JvdW5kcyA9IF9pbml0
aWFsTWFza1ZpZXdCb3VuZHM7CisgICAgcHJvZ3Jlc3NCb3VuZHMub3JpZ2luLnggKz0gcHJvZ3Jl
c3MgKiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMub3JpZ2luLnggLSBfaW5pdGlhbE1hc2tWaWV3Qm91
bmRzLm9yaWdpbi54KTsKKyAgICBwcm9ncmVzc0JvdW5kcy5vcmlnaW4ueSArPSBwcm9ncmVzcyAq
IChfZmluYWxNYXNrVmlld0JvdW5kcy5vcmlnaW4ueSAtIF9pbml0aWFsTWFza1ZpZXdCb3VuZHMu
b3JpZ2luLnkpOworICAgIHByb2dyZXNzQm91bmRzLnNpemUud2lkdGggKz0gcHJvZ3Jlc3MgKiAo
X2ZpbmFsTWFza1ZpZXdCb3VuZHMuc2l6ZS53aWR0aCAtIF9pbml0aWFsTWFza1ZpZXdCb3VuZHMu
c2l6ZS53aWR0aCk7CisgICAgcHJvZ3Jlc3NCb3VuZHMuc2l6ZS5oZWlnaHQgKz0gcHJvZ3Jlc3Mg
KiAoX2ZpbmFsTWFza1ZpZXdCb3VuZHMuc2l6ZS5oZWlnaHQgLSBfaW5pdGlhbE1hc2tWaWV3Qm91
bmRzLnNpemUuaGVpZ2h0KTsKKyAgICBbX21hc2tWaWV3IHNldEJvdW5kczpwcm9ncmVzc0JvdW5k
c107CisKKyAgICBDR1BvaW50IHByb2dyZXNzQ2VudGVyID0gX2luaXRpYWxNYXNrVmlld0NlbnRl
cjsKKyAgICBwcm9ncmVzc0NlbnRlci54ICs9IHByb2dyZXNzICogKF9maW5hbE1hc2tWaWV3Q2Vu
dGVyLnggLSBfZmluYWxNYXNrVmlld0NlbnRlci54KTsKKyAgICBwcm9ncmVzc0NlbnRlci55ICs9
IHByb2dyZXNzICogKF9maW5hbE1hc2tWaWV3Q2VudGVyLnkgLSBfZmluYWxNYXNrVmlld0NlbnRl
ci55KTsKKyAgICBbX21hc2tWaWV3IHNldENlbnRlcjpwcm9ncmVzc0NlbnRlcl07CisKKyAgICBV
SVdpbmRvdyAqd2luZG93ID0gW19hbmltYXRpbmdWaWV3IHdpbmRvd107CisgICAgd2luZG93LmJh
Y2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGNvbG9yV2l0aFdoaXRlOjAgYWxwaGE6X2luaXRpYWxC
YWNrZ3JvdW5kQWxwaGEgKyBwcm9ncmVzcyAqIChfZmluYWxCYWNrZ3JvdW5kQWxwaGEgLSBfaW5p
dGlhbEJhY2tncm91bmRBbHBoYSldOworfQorCistICh2b2lkKXVwZGF0ZVdpdGhQcm9ncmVzczoo
Q0dGbG9hdClwcm9ncmVzcyB0cmFuc2xhdGlvbjooQ0dTaXplKXRyYW5zbGF0aW9uIGFuY2hvcjoo
Q0dQb2ludClhbmNob3IKK3sKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBwcm9ncmVzc1RyYW5zZm9y
bSA9IF9pbml0aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybTsKKyAgICBwcm9ncmVzc1RyYW5zZm9y
bS5hICs9IHByb2dyZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYSAtIF9pbml0
aWFsQW5pbWF0aW5nVmlld1RyYW5zZm9ybS5hKTsKKyAgICBwcm9ncmVzc1RyYW5zZm9ybS5iICs9
IHByb2dyZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYiAtIF9pbml0aWFsQW5p
bWF0aW5nVmlld1RyYW5zZm9ybS5iKTsKKyAgICBwcm9ncmVzc1RyYW5zZm9ybS5jICs9IHByb2dy
ZXNzICogKF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uYyAtIF9pbml0aWFsQW5pbWF0aW5n
Vmlld1RyYW5zZm9ybS5jKTsKKyAgICBwcm9ncmVzc1RyYW5zZm9ybS5kICs9IHByb2dyZXNzICog
KF9maW5hbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0uZCAtIF9pbml0aWFsQW5pbWF0aW5nVmlld1Ry
YW5zZm9ybS5kKTsKKyAgICBwcm9ncmVzc1RyYW5zZm9ybS50eCArPSBfaW5pdGlhbEFuaW1hdGlu
Z1ZpZXdUcmFuc2Zvcm0udHggKyB0cmFuc2xhdGlvbi53aWR0aDsKKyAgICBwcm9ncmVzc1RyYW5z
Zm9ybS50eSArPSBfaW5pdGlhbEFuaW1hdGluZ1ZpZXdUcmFuc2Zvcm0udHkgKyB0cmFuc2xhdGlv
bi5oZWlnaHQ7CisgICAgW19hbmltYXRpbmdWaWV3IHNldFRyYW5zZm9ybTpwcm9ncmVzc1RyYW5z
Zm9ybV07CisKKyAgICBVSVdpbmRvdyAqd2luZG93ID0gW19hbmltYXRpbmdWaWV3IHdpbmRvd107
CisgICAgd2luZG93LmJhY2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGNvbG9yV2l0aFdoaXRlOjAg
YWxwaGE6X2luaXRpYWxCYWNrZ3JvdW5kQWxwaGEgKyBwcm9ncmVzcyAqIChfZmluYWxCYWNrZ3Jv
dW5kQWxwaGEgLSBfaW5pdGlhbEJhY2tncm91bmRBbHBoYSldOworfQorCistICh2b2lkKWVuZDoo
Qk9PTCljYW5jZWxsZWQgeworICAgIGlmIChjYW5jZWxsZWQpIHsKKyAgICAgICAgW1VJVmlldyBh
bmltYXRlV2l0aER1cmF0aW9uOmtBbmltYXRpb25EdXJhdGlvbiBhbmltYXRpb25zOl57CisgICAg
ICAgICAgICBbc2VsZiB1cGRhdGVXaXRoUHJvZ3Jlc3M6MF07CisgICAgICAgIH0gY29tcGxldGlv
bjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAgICAgICAgIFtfY29udGV4dCBjYW5jZWxJbnRlcmFj
dGl2ZVRyYW5zaXRpb25dOworICAgICAgICAgICAgW19jb250ZXh0IGNvbXBsZXRlVHJhbnNpdGlv
bjpOT107CisgICAgICAgIH1dOworICAgIH0gZWxzZSB7CisgICAgICAgIFtVSVZpZXcgYW5pbWF0
ZVdpdGhEdXJhdGlvbjprQW5pbWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uczpeeworICAgICAgICAg
ICAgW3NlbGYgdXBkYXRlV2l0aFByb2dyZXNzOjFdOworICAgICAgICB9IGNvbXBsZXRpb246XihC
T09MIGZpbmlzaGVkKSB7CisgICAgICAgICAgICBbX2NvbnRleHQgZmluaXNoSW50ZXJhY3RpdmVU
cmFuc2l0aW9uXTsKKyAgICAgICAgICAgIFtfY29udGV4dCBjb21wbGV0ZVRyYW5zaXRpb246WUVT
XTsKKyAgICAgICAgfV07CisgICAgfQorfQorCitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0Bp
bnRlcmZhY2UgV0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uIDogTlNPYmplY3Q8VUlW
aWV3Q29udHJvbGxlckludGVyYWN0aXZlVHJhbnNpdGlvbmluZz4KKy0gKGlkKWluaXRXaXRoQW5p
bWF0b3I6KFdLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgKilhbmltYXRvciBhbmNob3I6
KENHUG9pbnQpcG9pbnQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxTY3JlZW5JbnRl
cmFjdGl2ZVRyYW5zaXRpb24geworICAgIFJldGFpblB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25D
b250cm9sbGVyPiBfYW5pbWF0b3I7CisgICAgUmV0YWluUHRyPGlkPFVJVmlld0NvbnRyb2xsZXJD
b250ZXh0VHJhbnNpdGlvbmluZz4+IF9jb250ZXh0OworICAgIENHUG9pbnQgX2FuY2hvcjsKK30K
KworLSAoaWQpaW5pdFdpdGhBbmltYXRvcjooV0tGdWxsc2NyZWVuQW5pbWF0aW9uQ29udHJvbGxl
ciAqKWFuaW1hdG9yIGFuY2hvcjooQ0dQb2ludClwb2ludAoreworICAgIGlmICghKHNlbGYgPSBb
c3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2FuaW1hdG9yID0gYW5p
bWF0b3I7CisgICAgX2FuY2hvciA9IHBvaW50OworICAgIHJldHVybiBzZWxmOworfQorCistIChC
T09MKXdhbnRzSW50ZXJhY3RpdmVTdGFydAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZv
aWQpc3RhcnRJbnRlcmFjdGl2ZVRyYW5zaXRpb246KGlkIDxVSVZpZXdDb250cm9sbGVyQ29udGV4
dFRyYW5zaXRpb25pbmc+KXRyYW5zaXRpb25Db250ZXh0Cit7CisgICAgX2NvbnRleHQgPSB0cmFu
c2l0aW9uQ29udGV4dDsKKyAgICBbX2FuaW1hdG9yIHN0YXJ0SW50ZXJhY3RpdmVUcmFuc2l0aW9u
OnRyYW5zaXRpb25Db250ZXh0XTsKK30KKworLSAodm9pZCl1cGRhdGVJbnRlcmFjdGl2ZVRyYW5z
aXRpb246KENHRmxvYXQpcHJvZ3Jlc3Mgd2l0aFRyYW5zbGF0aW9uOihDR1NpemUpdHJhbnNsYXRp
b24KK3sKKyAgICBbX2FuaW1hdG9yIHVwZGF0ZVdpdGhQcm9ncmVzczpwcm9ncmVzcyB0cmFuc2xh
dGlvbjp0cmFuc2xhdGlvbiBhbmNob3I6X2FuY2hvcl07CisgICAgW19jb250ZXh0IHVwZGF0ZUlu
dGVyYWN0aXZlVHJhbnNpdGlvbjpwcm9ncmVzc107Cit9CisKKy0gKHZvaWQpY2FuY2VsSW50ZXJh
Y3RpdmVUcmFuc2l0aW9uCit7CisgICAgW19hbmltYXRvciBlbmQ6WUVTXTsKK30KKworLSAodm9p
ZClmaW5pc2hJbnRlcmFjdGl2ZVRyYW5zaXRpb24KK3sKKyAgICBbX2FuaW1hdG9yIGVuZDpOT107
Cit9CitAZW5kCisKKyNwcmFnbWEgbWFyayAtCisKK0BpbnRlcmZhY2UgV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlciAoKSA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlPgorQGVuZAorCitA
aW1wbGVtZW50YXRpb24gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciB7CisgICAgV0tXZWJW
aWV3ICpfd2ViVmlldzsgLy8gQ2Fubm90IGJlIHJldGFpbmVkLCBzZWUgPHJkYXI6Ly9wcm9ibGVt
LzE0ODg0NjY2Pi4KKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBfd2ViVmlld1BsYWNlaG9sZGVyOwor
CisgICAgRnVsbFNjcmVlblN0YXRlIF9mdWxsU2NyZWVuU3RhdGU7CisgICAgV0tXZWJWaWV3U3Rh
dGUgX3ZpZXdTdGF0ZTsKKworICAgIFJldGFpblB0cjxVSVdpbmRvdz4gX3dpbmRvdzsKKyAgICBS
ZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gX3Jvb3RWaWV3Q29udHJvbGxlcjsKKworICAgIFJl
ZlB0cjxXZWJLaXQ6OlZvaWRDYWxsYmFjaz4gX3JlcGFpbnRDYWxsYmFjazsKKyAgICBSZXRhaW5Q
dHI8VUlWaWV3Q29udHJvbGxlcj4gX3ZpZXdDb250cm9sbGVyRm9yUHJlc2VudGF0aW9uOworICAg
IFJldGFpblB0cjxXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlcj4gX2Z1bGxzY3JlZW5WaWV3Q29u
dHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8VUlTd2lwZUdlc3R1cmVSZWNvZ25pemVyPiBfc3RhcnRE
aXNtaXNzR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPFVJUGFuR2VzdHVyZVJlY29n
bml6ZXI+IF9pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5Q
dHI8V0tGdWxsU2NyZWVuSW50ZXJhY3RpdmVUcmFuc2l0aW9uPiBfaW50ZXJhY3RpdmVEaXNtaXNz
VHJhbnNpdGlvbkNvb3JkaW5hdG9yOworCisgICAgQ0dSZWN0IF9pbml0aWFsRnJhbWU7CisgICAg
Q0dSZWN0IF9maW5hbEZyYW1lOworCisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBfRVZPcmdhbml6
YXRpb25OYW1lOworICAgIEJPT0wgX0VWT3JnYW5pemF0aW9uTmFtZUlzVmFsaWQ7CisgICAgQk9P
TCBfaW5JbnRlcmFjdGl2ZURpc21pc3M7CisKKyAgICBSZXRhaW5QdHI8aWQ+IF9ub3RpZmljYXRp
b25MaXN0ZW5lcjsKK30KKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBJbml0aWFsaXph
dGlvbgorLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3Cit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBf
d2ViVmlldyA9IHdlYlZpZXc7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRh
cmdldDpzZWxmXTsKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGZdOworCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCisjcHJhZ21h
IG1hcmsgLQorI3ByYWdtYSBtYXJrIEFjY2Vzc29ycworCistIChCT09MKWlzRnVsbFNjcmVlbgor
eworICAgIHJldHVybiBfZnVsbFNjcmVlblN0YXRlID09IFdhaXRpbmdUb0VudGVyRnVsbFNjcmVl
bgorICAgICAgICB8fCBfZnVsbFNjcmVlblN0YXRlID09IEVudGVyaW5nRnVsbFNjcmVlbgorICAg
ICAgICB8fCBfZnVsbFNjcmVlblN0YXRlID09IEluRnVsbFNjcmVlbjsKK30KKworLSAoV2ViQ29y
ZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcgKil3ZWJWaWV3UGxhY2Vob2xkZXIKK3sKKyAgICBy
ZXR1cm4gbmlsOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEV4dGVybmFsIElu
dGVyZmFjZQorCistICh2b2lkKWVudGVyRnVsbFNjcmVlbgoreworICAgIGlmIChbc2VsZiBpc0Z1
bGxTY3JlZW5dKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiBfaW52YWxpZGF0ZUVWT3Jn
YW5pemF0aW9uTmFtZV07CisKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gV2FpdGluZ1RvRW50ZXJG
dWxsU2NyZWVuOworCisgICAgX3dpbmRvdyA9IGFkb3B0TlMoW1tVSVdpbmRvdyBhbGxvY10gaW5p
dF0pOworICAgIFtfd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpbVUlDb2xvciBjbGVhckNvbG9y
XV07CisgICAgW193aW5kb3cgc2V0V2luZG93TGV2ZWw6VUlXaW5kb3dMZXZlbE5vcm1hbCAtIDFd
OworICAgIFtfd2luZG93IHNldEhpZGRlbjpOT107CisKKyAgICBfcm9vdFZpZXdDb250cm9sbGVy
ID0gW1tVSVZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICBfcm9vdFZpZXdDb250cm9s
bGVyLmdldCgpLnZpZXcgPSBbW1tVSVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6X3dpbmRvdy5n
ZXQoKS5ib3VuZHNdIGF1dG9yZWxlYXNlXTsKKyAgICBfcm9vdFZpZXdDb250cm9sbGVyLmdldCgp
LnZpZXcuYmFja2dyb3VuZENvbG9yID0gW1VJQ29sb3IgY2xlYXJDb2xvcl07CisgICAgX3Jvb3RW
aWV3Q29udHJvbGxlci5nZXQoKS52aWV3LmF1dG9yZXNpemluZ01hc2sgPSAoVUlWaWV3QXV0b3Jl
c2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlSGVpZ2h0KTsK
KyAgICBbX3Jvb3RWaWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJTW9k
YWxQcmVzZW50YXRpb25DdXN0b21dOworICAgIFtfcm9vdFZpZXdDb250cm9sbGVyIHNldFRyYW5z
aXRpb25pbmdEZWxlZ2F0ZTpzZWxmXTsKKworICAgIF93aW5kb3cuZ2V0KCkucm9vdFZpZXdDb250
cm9sbGVyID0gX3Jvb3RWaWV3Q29udHJvbGxlci5nZXQoKTsKKworICAgIF9mdWxsc2NyZWVuVmll
d0NvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIgYWxsb2Nd
IGluaXRXaXRoV2ViVmlldzpfd2ViVmlld10pOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9s
bGVyIHNldE1vZGFsUHJlc2VudGF0aW9uU3R5bGU6VUlNb2RhbFByZXNlbnRhdGlvbkN1c3RvbV07
CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0VHJhbnNpdGlvbmluZ0RlbGVnYXRl
OnNlbGZdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0
aW9uQ2FwdHVyZXNTdGF0dXNCYXJBcHBlYXJhbmNlOllFU107CisgICAgW19mdWxsc2NyZWVuVmll
d0NvbnRyb2xsZXIgc2V0VGFyZ2V0OnNlbGZdOworICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9s
bGVyIHNldEFjdGlvbjpAc2VsZWN0b3IocmVxdWVzdEV4aXRGdWxsU2NyZWVuKV07CisgICAgX2Z1
bGxzY3JlZW5WaWV3Q29udHJvbGxlci5nZXQoKS52aWV3LmZyYW1lID0gX3Jvb3RWaWV3Q29udHJv
bGxlci5nZXQoKS52aWV3LmJvdW5kczsKKyAgICBbc2VsZiBfdXBkYXRlTG9jYXRpb25JbmZvXTsK
KworICAgIF9zdGFydERpc21pc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVN3aXBl
R2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdICBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2Vs
ZWN0b3IoX3N0YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6KV0pOworICAgIFtfc3RhcnRE
aXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19zdGFydERp
c21pc3NHZXN0dXJlUmVjb2duaXplciBzZXRDYW5jZWxzVG91Y2hlc0luVmlldzpZRVNdOworICAg
IFtfc3RhcnREaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0TnVtYmVyT2ZUb3VjaGVzUmVxdWly
ZWQ6MV07CisgICAgW19zdGFydERpc21pc3NHZXN0dXJlUmVjb2duaXplciBzZXREaXJlY3Rpb246
VUlTd2lwZUdlc3R1cmVSZWNvZ25pemVyRGlyZWN0aW9uRG93bl07CisgICAgW19mdWxsc2NyZWVu
Vmlld0NvbnRyb2xsZXIuZ2V0KCkudmlldyBhZGRHZXN0dXJlUmVjb2duaXplcjpfc3RhcnREaXNt
aXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisgICAgX2ludGVyYWN0aXZlRGlzbWlzc0dl
c3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW1VJUGFuR2VzdHVyZVJlY29nbml6ZXIgYWxsb2Nd
ICBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2ludGVyYWN0aXZlRGlzbWlz
c0NoYW5nZWQ6KV0pOworICAgIFtfaW50ZXJhY3RpdmVEaXNtaXNzR2VzdHVyZVJlY29nbml6ZXIg
c2V0RGVsZWdhdGU6c2VsZl07CisgICAgW19pbnRlcmFjdGl2ZURpc21pc3NHZXN0dXJlUmVjb2du
aXplciBzZXRDYW5jZWxzVG91Y2hlc0luVmlldzpOT107CisgICAgW19mdWxsc2NyZWVuVmlld0Nv
bnRyb2xsZXIuZ2V0KCkudmlldyBhZGRHZXN0dXJlUmVjb2duaXplcjpfaW50ZXJhY3RpdmVEaXNt
aXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisgICAgW3NlbGYgX21hbmFnZXJdLT5zYXZl
U2Nyb2xsUG9zaXRpb24oKTsKKworICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHByZXNzVmlz
aWJpbGl0eVVwZGF0ZXModHJ1ZSk7CisKKyAgICBfdmlld1N0YXRlLnN0b3JlKF93ZWJWaWV3KTsK
KworICAgIF93ZWJWaWV3UGxhY2Vob2xkZXIgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0
XSk7CisgICAgW1tfd2ViVmlld1BsYWNlaG9sZGVyIGxheWVyXSBzZXROYW1lOkAiRnVsbHNjcmVl
biBQbGFjZWhvbGRlciBWaWV3Il07CisKKyAgICBXS1NuYXBzaG90Q29uZmlndXJhdGlvbiogY29u
ZmlnID0gbmlsOworICAgIFtfd2ViVmlldyB0YWtlU25hcHNob3RXaXRoQ29uZmlndXJhdGlvbjpj
b25maWcgY29tcGxldGlvbkhhbmRsZXI6XihVSUltYWdlICogc25hcHNob3RJbWFnZSwgTlNFcnJv
ciAqIGVycm9yKSB7CisgICAgICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgICAgIFtDQVRy
YW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgICAgIAorICAgICAgICBbW193
ZWJWaWV3UGxhY2Vob2xkZXIgbGF5ZXJdIHNldENvbnRlbnRzOihpZClbc25hcHNob3RJbWFnZSBD
R0ltYWdlXV07CisgICAgICAgIHJlcGxhY2VWaWV3V2l0aFZpZXcoX3dlYlZpZXcsIF93ZWJWaWV3
UGxhY2Vob2xkZXIuZ2V0KCkpOworCisgICAgICAgIFdLV2ViVmlld1N0YXRlKCkuYXBwbHlUbyhf
d2ViVmlldyk7CisgICAgICAgIAorICAgICAgICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azooVUlWaWV3QXV0b3Jlc2l6aW5nRmxleGlibGVXaWR0aCB8IFVJVmlld0F1dG9yZXNpemluZ0Zs
ZXhpYmxlSGVpZ2h0KV07CisgICAgICAgIFtfd2ViVmlldyBzZXRGcmFtZTpbX3dpbmRvdyBib3Vu
ZHNdXTsKKyAgICAgICAgW193aW5kb3cgaW5zZXJ0U3Vidmlldzpfd2ViVmlldyBhdEluZGV4OjBd
OworICAgICAgICBbX3dlYlZpZXcgc2V0TmVlZHNMYXlvdXRdOworICAgICAgICBbX3dlYlZpZXcg
bGF5b3V0SWZOZWVkZWRdOworICAgICAgICAKKyAgICAgICAgW3NlbGYgX21hbmFnZXJdLT5zZXRB
bmltYXRpbmdGdWxsU2NyZWVuKHRydWUpOworCisgICAgICAgIF9yZXBhaW50Q2FsbGJhY2sgPSBW
b2lkQ2FsbGJhY2s6OmNyZWF0ZShbcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKSwgc2Vs
Zl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgICAgICAgICBfcmVwYWludENh
bGxiYWNrID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtYW5hZ2VyID0gW3Byb3Rl
Y3RlZFNlbGYgX21hbmFnZXJdKSB7CisgICAgICAgICAgICAgICAgbWFuYWdlci0+d2lsbEVudGVy
RnVsbFNjcmVlbigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBbc2VsZiBfZXhp
dEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAgICAgIH0pOworICAgICAgICBbX3dlYlZpZXcg
X3BhZ2VdLT5mb3JjZVJlcGFpbnQoX3JlcGFpbnRDYWxsYmFjay5jb3B5UmVmKCkpOworCisgICAg
ICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgfV07Cit9CisKKy0gKHZvaWQpYmVnYW5F
bnRlckZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3QpaW5pdGlhbEZyYW1lIGZpbmFs
RnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCit7CisgICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0g
V2FpdGluZ1RvRW50ZXJGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgX2Z1bGxTY3Jl
ZW5TdGF0ZSA9IEVudGVyaW5nRnVsbFNjcmVlbjsKKworICAgIF9pbml0aWFsRnJhbWUgPSBpbml0
aWFsRnJhbWU7CisgICAgX2ZpbmFsRnJhbWUgPSBmaW5hbEZyYW1lOworCisgICAgW0NBVHJhbnNh
Y3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107
CisKKyAgICBbX3dlYlZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBbX3dpbmRvdyBz
ZXRXaW5kb3dMZXZlbDpVSVdpbmRvd0xldmVsTm9ybWFsXTsKKyAgICBbX3dpbmRvdyBtYWtlS2V5
QW5kVmlzaWJsZV07CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0UHJlZmVyc1N0
YXR1c0JhckhpZGRlbjpOT107CisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2hvd1VJ
XTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBbX3Jvb3RWaWV3Q29udHJv
bGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXI6X2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlci5nZXQo
KSBhbmltYXRlZDpZRVMgY29tcGxldGlvbjpeeworICAgICAgICBfZnVsbFNjcmVlblN0YXRlID0g
SW5GdWxsU2NyZWVuOworCisgICAgICAgIGF1dG8qIHBhZ2UgPSBbX3dlYlZpZXcgX3BhZ2VdOwor
ICAgICAgICBhdXRvKiBtYW5hZ2VyID0gc2VsZi5fbWFuYWdlcjsKKyAgICAgICAgaWYgKHBhZ2Ug
JiYgbWFuYWdlcikgeworICAgICAgICAgICAgbWFuYWdlci0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7
CisgICAgICAgICAgICBtYW5hZ2VyLT5zZXRBbmltYXRpbmdGdWxsU2NyZWVuKGZhbHNlKTsKKyAg
ICAgICAgICAgIHBhZ2UtPnNldFN1cHByZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIFtzZWxmIF9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5XTsKKyAgICB9XTsK
K30KKworLSAodm9pZClyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4KK3sKKyAgICBpZiAoYXV0byogbWFu
YWdlciA9IHNlbGYuX21hbmFnZXIpIHsKKyAgICAgICAgbWFuYWdlci0+cmVxdWVzdEV4aXRGdWxs
U2NyZWVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07Cit9CisKKy0gKHZv
aWQpZXhpdEZ1bGxTY3JlZW4KK3sKKyAgICBpZiAoIXNlbGYuaXNGdWxsU2NyZWVuKQorICAgICAg
ICByZXR1cm47CisgICAgX2Z1bGxTY3JlZW5TdGF0ZSA9IFdhaXRpbmdUb0V4aXRGdWxsU2NyZWVu
OworCisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxmLl9tYW5hZ2VyKSB7CisgICAgICAgIG1h
bmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4odHJ1ZSk7CisgICAgICAgIG1hbmFnZXItPndp
bGxFeGl0RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgW3NlbGYgX2V4aXRGdWxsc2NyZWVuSW1tZWRpYXRlbHldOwor
fQorCistICh2b2lkKWJlZ2FuRXhpdEZ1bGxTY3JlZW5XaXRoSW5pdGlhbEZyYW1lOihDR1JlY3Qp
aW5pdGlhbEZyYW1lIGZpbmFsRnJhbWU6KENHUmVjdClmaW5hbEZyYW1lCit7CisgICAgaWYgKF9m
dWxsU2NyZWVuU3RhdGUgIT0gV2FpdGluZ1RvRXhpdEZ1bGxTY3JlZW4pCisgICAgICAgIHJldHVy
bjsKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gRXhpdGluZ0Z1bGxTY3JlZW47CisKKyAgICBfaW5p
dGlhbEZyYW1lID0gaW5pdGlhbEZyYW1lOworICAgIF9maW5hbEZyYW1lID0gZmluYWxGcmFtZTsK
KyAgICAKKyAgICBbX3dlYlZpZXcgX3BhZ2VdLT5zZXRTdXBwcmVzc1Zpc2liaWxpdHlVcGRhdGVz
KHRydWUpOworCisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgc2V0UHJlZmVyc1N0YXR1
c0JhckhpZGRlbjpOT107CisKKyAgICBpZiAoX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25D
b29yZGluYXRvcikgeworICAgICAgICBbX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29y
ZGluYXRvciBmaW5pc2hJbnRlcmFjdGl2ZVRyYW5zaXRpb25dOworICAgICAgICBfaW50ZXJhY3Rp
dmVEaXNtaXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9yID0gbmlsOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgW19mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9s
bGVyQW5pbWF0ZWQ6WUVTIGNvbXBsZXRpb246XnsKKyAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3Bh
Z2VdKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFtzZWxmIF9jb21wbGV0ZWRFeGl0
RnVsbFNjcmVlbl07CisgICAgfV07Cit9CisKKy0gKHZvaWQpX2NvbXBsZXRlZEV4aXRGdWxsU2Ny
ZWVuCit7CisgICAgaWYgKF9mdWxsU2NyZWVuU3RhdGUgIT0gRXhpdGluZ0Z1bGxTY3JlZW4pCisg
ICAgICAgIHJldHVybjsKKyAgICBfZnVsbFNjcmVlblN0YXRlID0gTm90SW5GdWxsU2NyZWVuOwor
CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107CisKKyAgICBbW193ZWJWaWV3UGxhY2Vob2xkZXIgc3VwZXJ2aWV3XSBp
bnNlcnRTdWJ2aWV3Ol93ZWJWaWV3IGJlbG93U3Vidmlldzpfd2ViVmlld1BsYWNlaG9sZGVyLmdl
dCgpXTsKKyAgICBbX3dlYlZpZXcgc2V0RnJhbWU6W193ZWJWaWV3UGxhY2Vob2xkZXIgZnJhbWVd
XTsKKyAgICBbX3dlYlZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpbX3dlYlZpZXdQbGFjZWhvbGRl
ciBhdXRvcmVzaXppbmdNYXNrXV07CisKKyAgICBbW193ZWJWaWV3IHdpbmRvd10gbWFrZUtleUFu
ZFZpc2libGVdOworCisgICAgX3ZpZXdTdGF0ZS5hcHBseVRvKF93ZWJWaWV3KTsKKworICAgIFtf
d2ViVmlldyBzZXROZWVkc0xheW91dF07CisgICAgW193ZWJWaWV3IGxheW91dElmTmVlZGVkXTsK
KworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBbX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKKyAgICBfd2luZG93ID0gbmlsOworCisgICAgaWYgKGF1dG8qIG1hbmFnZXIgPSBzZWxm
Ll9tYW5hZ2VyKSB7CisgICAgICAgIG1hbmFnZXItPnNldEFuaW1hdGluZ0Z1bGxTY3JlZW4oZmFs
c2UpOworICAgICAgICBtYW5hZ2VyLT5kaWRFeGl0RnVsbFNjcmVlbigpOworICAgIH0KKworICAg
IGlmIChfcmVwYWludENhbGxiYWNrKSB7CisgICAgICAgIF9yZXBhaW50Q2FsbGJhY2stPmludmFs
aWRhdGUoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsK
KyAgICAgICAgQVNTRVJUKCFfcmVwYWludENhbGxiYWNrKTsKKyAgICB9CisKKyAgICBfcmVwYWlu
dENhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5Q
dHIoc2VsZiksIHNlbGZdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgICAgICBf
cmVwYWludENhbGxiYWNrID0gbnVsbHB0cjsKKyAgICAgICAgW193ZWJWaWV3UGxhY2Vob2xkZXIg
cmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFtfd2ViVmlldyBfcGFnZV0tPnNldFN1cHBy
ZXNzVmlzaWJpbGl0eVVwZGF0ZXMoZmFsc2UpOworICAgIH0pOworCisgICAgaWYgKGF1dG8qIHBh
Z2UgPSBbX3dlYlZpZXcgX3BhZ2VdKQorICAgICAgICBwYWdlLT5mb3JjZVJlcGFpbnQoX3JlcGFp
bnRDYWxsYmFjay5jb3B5UmVmKCkpOworICAgIGVsc2UKKyAgICAgICAgX3JlcGFpbnRDYWxsYmFj
ay0+cGVyZm9ybUNhbGxiYWNrKCk7CisKKyAgICBbX2Z1bGxzY3JlZW5WaWV3Q29udHJvbGxlciBz
ZXRQcmVmZXJzU3RhdHVzQmFySGlkZGVuOllFU107Cit9CisKKy0gKHZvaWQpY2xvc2UKK3sKKyAg
ICBbc2VsZiBfZXhpdEZ1bGxzY3JlZW5JbW1lZGlhdGVseV07CisgICAgX3dlYlZpZXcgPSBuaWw7
Cit9CisKKy0gKHZvaWQpd2ViVmlld0RpZFJlbW92ZUZyb21TdXBlcnZpZXdXaGlsZUluRnVsbHNj
cmVlbgoreworICAgIGlmIChfZnVsbFNjcmVlblN0YXRlID09IEluRnVsbFNjcmVlbiAmJiBfd2Vi
Vmlldy53aW5kb3cgIT0gX3dpbmRvdy5nZXQoKSkKKyAgICAgICAgW3NlbGYgX2V4aXRGdWxsc2Ny
ZWVuSW1tZWRpYXRlbHldOworfQorCistICh2b2lkKXZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hh
bmdlCit7CisgICAgaWYgKF9mdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIpCisgICAgICAgIFtfZnVs
bHNjcmVlblZpZXdDb250cm9sbGVyIHZpZGVvQ29udHJvbHNNYW5hZ2VyRGlkQ2hhbmdlXTsKK30K
KworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdh
dGUKKworLSAoQk9PTClnZXN0dXJlUmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdl
c3R1cmVSZWNvZ25pemVyIHNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1cmVS
ZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopb3RoZXJHZXN0dXJlUmVjb2duaXplcgor
eworICAgIHJldHVybiBZRVM7Cit9CisKKyNwcmFnbWEgbWFyayAtCisjcHJhZ21hIG1hcmsgVUlW
aWV3Q29udHJvbGxlclRyYW5zaXRpb25pbmdEZWxlZ2F0ZQorCistIChpZDxVSVZpZXdDb250cm9s
bGVyQW5pbWF0ZWRUcmFuc2l0aW9uaW5nPilhbmltYXRpb25Db250cm9sbGVyRm9yUHJlc2VudGVk
Q29udHJvbGxlcjooVUlWaWV3Q29udHJvbGxlciAqKXByZXNlbnRlZCBwcmVzZW50aW5nQ29udHJv
bGxlcjooVUlWaWV3Q29udHJvbGxlciAqKXByZXNlbnRpbmcgc291cmNlQ29udHJvbGxlcjooVUlW
aWV3Q29udHJvbGxlciAqKXNvdXJjZQoreworICAgIFJldGFpblB0cjxXS0Z1bGxzY3JlZW5Bbmlt
YXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9sbGVyID0gYWRvcHROUyhbW1dLRnVsbHNj
cmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbYW5pbWF0aW9uQ29u
dHJvbGxlciBzZXRWaWV3Q29udHJvbGxlcjpwcmVzZW50ZWRdOworICAgIFthbmltYXRpb25Db250
cm9sbGVyIHNldEluaXRpYWxGcmFtZTpfaW5pdGlhbEZyYW1lXTsKKyAgICBbYW5pbWF0aW9uQ29u
dHJvbGxlciBzZXRGaW5hbEZyYW1lOl9maW5hbEZyYW1lXTsKKyAgICBbYW5pbWF0aW9uQ29udHJv
bGxlciBzZXRBbmltYXRpbmdJbjpZRVNdOworICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVy
LmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKGlkPFVJVmlld0NvbnRyb2xsZXJBbmltYXRlZFRyYW5z
aXRpb25pbmc+KWFuaW1hdGlvbkNvbnRyb2xsZXJGb3JEaXNtaXNzZWRDb250cm9sbGVyOihVSVZp
ZXdDb250cm9sbGVyICopZGlzbWlzc2VkCit7CisgICAgQ0dSZWN0IGluaXRpYWxGcmFtZSA9IF9p
bml0aWFsRnJhbWU7CisgICAgQ0dSZWN0IGZpbmFsRnJhbWUgPSBfZmluYWxGcmFtZTsKKworICAg
IC8vIEJlY2F1c2Ugd2UncmUgbm90IGNhbGxpbmcgInJlcXVlc3RFeGl0RnVsbHNjcmVlbigpIiBh
dCB0aGUgYmVnaW5uaW5nIG9mIGFuIGludGVyYWN0aXZlIGFuaW1hdGlvbiwKKyAgICAvLyB0aGUg
X2luaXRpYWxGcmFtZSBhbmQgX2ZpbmFsRnJhbWUgdmFsdWVzIGFyZSBsZWZ0IG92ZXIgZnJvbSB3
aGVuIHdlIGVudGVyZWQgZnVsbHNjcmVlbi4KKyAgICBpZiAoX2luSW50ZXJhY3RpdmVEaXNtaXNz
KQorICAgICAgICBzdGQ6OnN3YXAoaW5pdGlhbEZyYW1lLCBmaW5hbEZyYW1lKTsKKworICAgIFJl
dGFpblB0cjxXS0Z1bGxzY3JlZW5BbmltYXRpb25Db250cm9sbGVyPiBhbmltYXRpb25Db250cm9s
bGVyID0gYWRvcHROUyhbW1dLRnVsbHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBbYW5pbWF0aW9uQ29udHJvbGxlciBzZXRWaWV3Q29udHJvbGxlcjpkaXNtaXNz
ZWRdOworICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEluaXRpYWxGcmFtZTppbml0aWFsRnJh
bWVdOworICAgIFthbmltYXRpb25Db250cm9sbGVyIHNldEZpbmFsRnJhbWU6ZmluYWxGcmFtZV07
CisgICAgW2FuaW1hdGlvbkNvbnRyb2xsZXIgc2V0QW5pbWF0aW5nSW46Tk9dOworICAgIHJldHVy
biBhbmltYXRpb25Db250cm9sbGVyLmF1dG9yZWxlYXNlKCk7Cit9CisKKy0gKGlkPFVJVmlld0Nv
bnRyb2xsZXJJbnRlcmFjdGl2ZVRyYW5zaXRpb25pbmc+KWludGVyYWN0aW9uQ29udHJvbGxlckZv
ckRpc21pc3NhbDooaWQ8VUlWaWV3Q29udHJvbGxlckFuaW1hdGVkVHJhbnNpdGlvbmluZz4pYW5p
bWF0b3IKK3sKKyAgICBpZiAoIV9pbkludGVyYWN0aXZlRGlzbWlzcykKKyAgICAgICAgcmV0dXJu
IG5pbDsKKworICAgIGlmICghW2FuaW1hdG9yIGlzS2luZE9mQ2xhc3M6W1dLRnVsbHNjcmVlbkFu
aW1hdGlvbkNvbnRyb2xsZXIgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIGlm
ICghX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvcikKKyAgICAgICAgX2lu
dGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvciA9IGFkb3B0TlMoW1tXS0Z1bGxT
Y3JlZW5JbnRlcmFjdGl2ZVRyYW5zaXRpb24gYWxsb2NdIGluaXRXaXRoQW5pbWF0b3I6KFdLRnVs
bHNjcmVlbkFuaW1hdGlvbkNvbnRyb2xsZXIgKilhbmltYXRvciBhbmNob3I6Q0dQb2ludFplcm9d
KTsKKworICAgIHJldHVybiBfaW50ZXJhY3RpdmVEaXNtaXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9y
LmdldCgpOworfQorCisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIEludGVybmFsIEludGVy
ZmFjZQorCistICh2b2lkKV9leGl0RnVsbHNjcmVlbkltbWVkaWF0ZWx5Cit7CisgICAgaWYgKCFb
c2VsZiBpc0Z1bGxTY3JlZW5dKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBtYW5hZ2Vy
ID0gc2VsZi5fbWFuYWdlcjsKKyAgICBpZiAobWFuYWdlcikKKyAgICAgICAgbWFuYWdlci0+cmVx
dWVzdEV4aXRGdWxsU2NyZWVuKCk7CisgICAgW3NlbGYgZXhpdEZ1bGxTY3JlZW5dOworICAgIF9m
dWxsU2NyZWVuU3RhdGUgPSBFeGl0aW5nRnVsbFNjcmVlbjsKKyAgICBbc2VsZiBfY29tcGxldGVk
RXhpdEZ1bGxTY3JlZW5dOworICAgIHJlcGxhY2VWaWV3V2l0aFZpZXcoX3dlYlZpZXdQbGFjZWhv
bGRlci5nZXQoKSwgX3dlYlZpZXcpOworICAgIGlmIChhdXRvKiBwYWdlID0gW193ZWJWaWV3IF9w
YWdlXSkKKyAgICAgICAgcGFnZS0+c2V0U3VwcHJlc3NWaXNpYmlsaXR5VXBkYXRlcyhmYWxzZSk7
CisgICAgaWYgKG1hbmFnZXIpIHsKKyAgICAgICAgbWFuYWdlci0+ZGlkRXhpdEZ1bGxTY3JlZW4o
KTsKKyAgICAgICAgbWFuYWdlci0+c2V0QW5pbWF0aW5nRnVsbFNjcmVlbihmYWxzZSk7CisgICAg
fQorICAgIF93ZWJWaWV3UGxhY2Vob2xkZXIgPSBuaWw7Cit9CisKKy0gKHZvaWQpX2ludmFsaWRh
dGVFVk9yZ2FuaXphdGlvbk5hbWUKK3sKKyAgICBfRVZPcmdhbml6YXRpb25OYW1lID0gbmlsOwor
ICAgIF9FVk9yZ2FuaXphdGlvbk5hbWVJc1ZhbGlkID0gTk87Cit9CisKKy0gKEJPT0wpX2lzU2Vj
dXJlCit7CisgICAgcmV0dXJuIF93ZWJWaWV3Lmhhc09ubHlTZWN1cmVDb250ZW50OworfQorCist
IChTZWNUcnVzdFJlZilfc2VydmVyVHJ1c3QKK3sKKyAgICByZXR1cm4gX3dlYlZpZXcuc2VydmVy
VHJ1c3Q7Cit9CisKKy0gKE5TU3RyaW5nICopX0VWT3JnYW5pemF0aW9uTmFtZQoreworICAgIGlm
ICghc2VsZi5faXNTZWN1cmUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBpZiAoX0VWT3Jn
YW5pemF0aW9uTmFtZUlzVmFsaWQpCisgICAgICAgIHJldHVybiBfRVZPcmdhbml6YXRpb25OYW1l
LmdldCgpOworCisgICAgQVNTRVJUKCFfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpKTsKKyAgICBf
RVZPcmdhbml6YXRpb25OYW1lSXNWYWxpZCA9IFlFUzsKKworICAgIFNlY1RydXN0UmVmIHRydXN0
ID0gW3NlbGYgX3NlcnZlclRydXN0XTsKKyAgICBpZiAoIXRydXN0KQorICAgICAgICByZXR1cm4g
bmlsOworCisgICAgTlNEaWN0aW9uYXJ5ICppbmZvRGljdGlvbmFyeSA9IFsoX19icmlkZ2UgTlNE
aWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3JlbGVhc2VdOworICAgIC8v
IElmIFNlY1RydXN0Q29weUluZm8gcmV0dXJuZWQgTlVMTCB0aGVuIGl0J3MgbGlrZWx5IHRoYXQg
dGhlIFNlY1RydXN0UmVmIGhhcyBub3QgYmVlbiBldmFsdWF0ZWQKKyAgICAvLyBhbmQgdGhlIG9u
bHkgd2F5IHRvIGdldCB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB0byBjYWxsIFNlY1RydXN0
RXZhbHVhdGUgb3Vyc2VsdmVzLgorICAgIGlmICghaW5mb0RpY3Rpb25hcnkpIHsKKyAgICAgICAg
T1NTdGF0dXMgZXJyID0gU2VjVHJ1c3RFdmFsdWF0ZSh0cnVzdCwgTlVMTCk7CisgICAgICAgIGlm
IChlcnIgPT0gbm9FcnIpCisgICAgICAgICAgICBpbmZvRGljdGlvbmFyeSA9IFsoX19icmlkZ2Ug
TlNEaWN0aW9uYXJ5ICopU2VjVHJ1c3RDb3B5SW5mbyh0cnVzdCkgYXV0b3JlbGVhc2VdOworICAg
ICAgICBpZiAoIWluZm9EaWN0aW9uYXJ5KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgRVYgY2VydGlmaWNhdGUgaXMgdmFsaWQgYWdh
aW5zdCBvdXIgY2VydGlmaWNhdGUgY2hhaW4uCisgICAgaWQgaGFzRVYgPSBbaW5mb0RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVzdEluZm9FeHRlbmRl
ZFZhbGlkYXRpb25LZXldOworICAgIGlmICghW2hhc0VWIGlzS2luZE9mQ2xhc3M6W05TVmFsdWUg
Y2xhc3NdXSB8fCAhW2hhc0VWIGJvb2xWYWx1ZV0pCisgICAgICAgIHJldHVybiBuaWw7CisKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjb3VsZCBjb250YWN0IHJldm9jYXRpb24gc2VydmVyIGFu
ZCBpdCBpcyBzdGlsbCB2YWxpZC4KKyAgICBpZCBpc05vdFJldm9rZWQgPSBbaW5mb0RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5OihfX2JyaWRnZSBOU1N0cmluZyAqKWtTZWNUcnVzdEluZm9SZXZvY2F0
aW9uS2V5XTsKKyAgICBpZiAoIVtpc05vdFJldm9rZWQgaXNLaW5kT2ZDbGFzczpbTlNWYWx1ZSBj
bGFzc11dIHx8ICFbaXNOb3RSZXZva2VkIGJvb2xWYWx1ZV0pCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBfRVZPcmdhbml6YXRpb25OYW1lID0gW2luZm9EaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTooX19icmlkZ2UgTlNTdHJpbmcgKilrU2VjVHJ1c3RJbmZvQ29tcGFueU5hbWVLZXldOworICAg
IHJldHVybiBfRVZPcmdhbml6YXRpb25OYW1lLmdldCgpOworfQorCistICh2b2lkKV91cGRhdGVM
b2NhdGlvbkluZm8KK3sKKyAgICBOU1VSTCogdXJsID0gX3dlYlZpZXcuX2NvbW1pdHRlZFVSTDsK
KworICAgIE5TU3RyaW5nICpFVk9yZ2FuaXphdGlvbk5hbWUgPSBbc2VsZiBfRVZPcmdhbml6YXRp
b25OYW1lXTsKKyAgICBCT09MIHNob3dzRVZPcmdhbml6YXRpb25OYW1lID0gW0VWT3JnYW5pemF0
aW9uTmFtZSBsZW5ndGhdID4gMDsKKworICAgIE5TU3RyaW5nICpkb21haW4gPSBuaWw7CisKKyAg
ICBpZiAoTGlua1ByZXNlbnRhdGlvbkxpYnJhcnkoKSkKKyAgICAgICAgZG9tYWluID0gW3VybCBf
bHBfc2ltcGxpZmllZERpc3BsYXlTdHJpbmddOworICAgIGVsc2UKKyAgICAgICAgZG9tYWluID0g
dXNlclZpc2libGVTdHJpbmcodXJsKTsKKworICAgIE5TU3RyaW5nICp0ZXh0ID0gbmlsOworICAg
IGlmIChbW3VybCBzY2hlbWVdIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJkYXRhIl0gPT0gTlNP
cmRlcmVkU2FtZSkKKyAgICAgICAgdGV4dCA9IEAiZGF0YToiOworICAgIGVsc2UgaWYgKHNob3dz
RVZPcmdhbml6YXRpb25OYW1lKQorICAgICAgICB0ZXh0ID0gRVZPcmdhbml6YXRpb25OYW1lOwor
ICAgIGVsc2UKKyAgICAgICAgdGV4dCA9IGRvbWFpbjsKKworICAgIFtfZnVsbHNjcmVlblZpZXdD
b250cm9sbGVyIHNldExvY2F0aW9uOnRleHRdOworfQorCistIChXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5KilfbWFuYWdlcgoreworICAgIGlmICghW193ZWJWaWV3IF9wYWdlXSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFtfd2ViVmlldyBfcGFnZV0tPmZ1bGxTY3JlZW5N
YW5hZ2VyKCk7Cit9CisKKy0gKHZvaWQpX3N0YXJ0VG9EaXNtaXNzRnVsbHNjcmVlbkNoYW5nZWQ6
KGlkKXNlbmRlcgoreworICAgIF9pbkludGVyYWN0aXZlRGlzbWlzcyA9IHRydWU7CisgICAgW19m
dWxsc2NyZWVuVmlld0NvbnRyb2xsZXIgZGlzbWlzc1ZpZXdDb250cm9sbGVyQW5pbWF0ZWQ6WUVT
IGNvbXBsZXRpb246XnsKKyAgICAgICAgaWYgKCFbX3dlYlZpZXcgX3BhZ2VdKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIFtzZWxmIF9jb21wbGV0ZWRFeGl0RnVsbFNjcmVlbl07Cisg
ICAgICAgIFtfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyIHNldFByZWZlcnNTdGF0dXNCYXJIaWRk
ZW46WUVTXTsKKyAgICB9XTsKK30KKworLSAodm9pZClfaW50ZXJhY3RpdmVEaXNtaXNzQ2hhbmdl
ZDooaWQpc2VuZGVyCit7CisgICAgaWYgKCFfaW5JbnRlcmFjdGl2ZURpc21pc3MpCisgICAgICAg
IHJldHVybjsKKworICAgIENHUG9pbnQgdHJhbnNsYXRpb24gPSBbX2ludGVyYWN0aXZlRGlzbWlz
c0dlc3R1cmVSZWNvZ25pemVyIHRyYW5zbGF0aW9uSW5WaWV3Ol9mdWxsc2NyZWVuVmlld0NvbnRy
b2xsZXIuZ2V0KCkudmlld107CisgICAgQ0dQb2ludCB2ZWxvY2l0eSA9IFtfaW50ZXJhY3RpdmVE
aXNtaXNzR2VzdHVyZVJlY29nbml6ZXIgdmVsb2NpdHlJblZpZXc6X2Z1bGxzY3JlZW5WaWV3Q29u
dHJvbGxlci5nZXQoKS52aWV3XTsKKyAgICBDR0Zsb2F0IHByb2dyZXNzID0gdHJhbnNsYXRpb24u
eSAvIChfZnVsbHNjcmVlblZpZXdDb250cm9sbGVyLmdldCgpLnZpZXcuYm91bmRzLnNpemUuaGVp
Z2h0IC8gMik7CisgICAgcHJvZ3Jlc3MgPSBzdGQ6Om1pbigxLiwgc3RkOjptYXgoMC4sIHByb2dy
ZXNzKSk7CisKKyAgICBpZiAoX2ludGVyYWN0aXZlRGlzbWlzc0dlc3R1cmVSZWNvZ25pemVyLmdl
dCgpLnN0YXRlID09IFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUVuZGVkKSB7CisgICAgICAgIF9p
bkludGVyYWN0aXZlRGlzbWlzcyA9IGZhbHNlOworCisgICAgICAgIGlmIChwcm9ncmVzcyA+IDAu
MjUgfHwgKHByb2dyZXNzID4gMCAmJiB2ZWxvY2l0eS55ID4gNSkpCisgICAgICAgICAgICBbc2Vs
ZiByZXF1ZXN0RXhpdEZ1bGxTY3JlZW5dOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFtf
aW50ZXJhY3RpdmVEaXNtaXNzVHJhbnNpdGlvbkNvb3JkaW5hdG9yIGNhbmNlbEludGVyYWN0aXZl
VHJhbnNpdGlvbl07CisgICAgICAgICAgICBfaW50ZXJhY3RpdmVEaXNtaXNzVHJhbnNpdGlvbkNv
b3JkaW5hdG9yID0gbmlsOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBbX2ludGVyYWN0aXZlRGlzbWlzc1RyYW5zaXRpb25Db29yZGluYXRvciB1cGRhdGVJbnRlcmFj
dGl2ZVRyYW5zaXRpb246cHJvZ3Jlc3Mgd2l0aFRyYW5zbGF0aW9uOkNHU2l6ZU1ha2UodHJhbnNs
YXRpb24ueCwgdHJhbnNsYXRpb24ueSldOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpICYmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjdiODJjNWIzNjQ3OGVhNjM1ZWFmMWRkYWQ2ODQyZjAzM2NkODMwMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVu
L1dLRnVsbHNjcmVlblN0YWNrVmlldy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYgUExBVEZPUk0oSU9T
KQorCisjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4K
KworQGludGVyZmFjZSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcgOiBVSVZpZXcKKysgKHZvaWQpYXBw
bHlQcmltYXJ5R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3OworKyAodm9pZClhcHBseVNl
Y29uZGFyeUdseXBoVGludFRvVmlldzooVUlWaWV3ICopdmlldzsKKworLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czooTlNBcnJheTxVSVZpZXcgKj4gKilhcnJhbmdlZFN1
YnZpZXdzIGF4aXM6KFVJTGF5b3V0Q29uc3RyYWludEF4aXMpYXhpczsKKworQHByb3BlcnR5IChu
b25hdG9taWMsIHJldGFpbiwgbnVsbGFibGUpIFVJVmlldyAqdGFyZ2V0Vmlld0ZvclNlY29uZGFy
eU1hdGVyaWFsT3ZlcmxheTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlWaWV3
ICpjb250ZW50VmlldzsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAv
LyBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpICYmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmll
dy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVl
blN0YWNrVmlldy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWExMWI1YTI3MDM4Mzk4NzRiYTI2ZTRmODdiZDA3
NzA5ZjAzMDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tCkBAIC0wLDAgKzEsMjM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKSAmJiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lmgi
CisKKyNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0IDxRdWFydHpDb3JlL0NBRmlsdGVyLmg+
CisjaW1wb3J0IDxVSUtpdC9VSVZpc3VhbEVmZmVjdFZpZXcuaD4KKyNpbXBvcnQgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitzdGF0aWMgTlNBcnJh
eTxVSVZpc3VhbEVmZmVjdCAqPiogcmVkdWNlZFRyYW5zcGFyZW5jeUVmZmVjdHMoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8TlNBcnJheTxVSVZpc3VhbEVmZmVjdCAq
Pj4+IGVmZmVjdHM7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAg
ZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBlZmZlY3RzLmdldCgpID0gQFtb
VUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xvciBjb2xvcldpdGhS
ZWQ6KDQzLjAgLyAyNTUuMCkgZ3JlZW46KDQ2LjAgLyAyNTUuMCkgYmx1ZTooNDguMCAvIDI1NS4w
KSBhbHBoYToxLjBdIHdpdGhNb2RlOlVJQ29tcG9zaXRpbmdNb2RlTm9ybWFsIGFscGhhOjEuMF1d
OworICAgIH0pOworICAgIHJldHVybiBlZmZlY3RzLmdldCgpLmdldCgpOworfQorCitzdGF0aWMg
TlNBcnJheTxVSVZpc3VhbEVmZmVjdCAqPiogbm9ybWFsVHJhbnNwYXJlbmN5RWZmZWN0cygpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJldGFpblB0cjxOU0FycmF5PFVJVmlzdWFsRWZm
ZWN0ICo+Pj4gZWZmZWN0czsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsK
KyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGVmZmVjdHMuZ2V0KCkg
PSBAWworICAgICAgICAgICAgW1VJVmlzdWFsRWZmZWN0IGVmZmVjdENvbXBvc2l0aW5nQ29sb3I6
W1VJQ29sb3IgYmxhY2tDb2xvcl0gd2l0aE1vZGU6VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxw
aGE6MC41NV0sCisgICAgICAgICAgICBbVUlCbHVyRWZmZWN0IGVmZmVjdFdpdGhCbHVyUmFkaXVz
OlVJUm91bmRUb1NjcmVlblNjYWxlKDE3LjUsIFtVSVNjcmVlbiBtYWluU2NyZWVuXSldLAorICAg
ICAgICAgICAgW1VJQ29sb3JFZmZlY3QgY29sb3JFZmZlY3RTYXR1cmF0ZToxLjhdLAorICAgICAg
ICAgICAgW1VJVmlzdWFsRWZmZWN0IGVmZmVjdENvbXBvc2l0aW5nQ29sb3I6W1VJQ29sb3Igd2hp
dGVDb2xvcl0gd2l0aE1vZGU6VUlDb21wb3NpdGluZ01vZGVOb3JtYWwgYWxwaGE6MC4xNF0KKyAg
ICAgICAgXTsKKyAgICB9KTsKKyAgICByZXR1cm4gZWZmZWN0cy5nZXQoKS5nZXQoKTsKK30KKwor
QGludGVyZmFjZSBVSVZpc3VhbEVmZmVjdFZpZXcgKFdlYktpdFByaXZhdGUpCitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZHdyaXRlLCBjb3B5KSBOU0FycmF5PFVJVmlzdWFsRWZmZWN0ICo+ICpi
YWNrZ3JvdW5kRWZmZWN0czsKK0BlbmQKKworQGludGVyZmFjZSBXS0Z1bGxzY3JlZW5TdGFja1Zp
ZXcgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgVUlTdGFja1ZpZXcgKl9zdGFj
a1ZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFVJVmlzdWFsRWZmZWN0Vmll
dyAqX3Zpc3VhbEVmZmVjdFZpZXc7CitAcHJvcGVydHkgKG5vbmF0b21pYykgVUlWaXN1YWxFZmZl
Y3RWaWV3ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3OworQHByb3BlcnR5IChub25hdG9t
aWMpIE5TQXJyYXk8TlNMYXlvdXRDb25zdHJhaW50ICo+ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJs
YXlWaWV3Q29uc3RyYWludHM7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0Z1bGxzY3JlZW5T
dGFja1ZpZXcKKworI3ByYWdtYSBtYXJrIC0gQ2xhc3MgTWV0aG9kcworKyAoTlNBcnJheTxVSVZp
c3VhbEVmZmVjdCAqPiAqKWJhc2VFZmZlY3RzCit7CisgICAgaWYgKFVJQWNjZXNzaWJpbGl0eUlz
UmVkdWNlVHJhbnNwYXJlbmN5RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gcmVkdWNlZFRyYW5z
cGFyZW5jeUVmZmVjdHMoKTsKKyAgICByZXR1cm4gbm9ybWFsVHJhbnNwYXJlbmN5RWZmZWN0cygp
OworfQorCisrICh2b2lkKWNvbmZpZ3VyZVZpZXc6KFVJVmlldyAqKXZpZXcgZm9yVGludEVmZmVj
dFdpdGhDb2xvcjooVUlDb2xvciAqKXRpbnRDb2xvciBmaWx0ZXJUeXBlOihOU1N0cmluZyAqKWZp
bHRlclR5cGUKK3sKKyAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbVUlMYWJlbCBjbGFzc11d
KSB7CisgICAgICAgIFsoVUlMYWJlbCAqKXZpZXcgc2V0VGV4dENvbG9yOnRpbnRDb2xvcl07Cisg
ICAgICAgIFt2aWV3IHNldFRpbnRDb2xvcjp0aW50Q29sb3JdOworICAgICAgICBbW3ZpZXcgbGF5
ZXJdIHNldENvbXBvc2l0aW5nRmlsdGVyOltDQUZpbHRlciBmaWx0ZXJXaXRoVHlwZTprQ0FGaWx0
ZXJQbHVzTF1dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX1VJVmlzdWFsRWZmZWN0
VGludExheWVyQ29uZmlnICp0aW50TGF5ZXJDb25maWcgPSBbX1VJVmlzdWFsRWZmZWN0VGludExh
eWVyQ29uZmlnIGxheWVyV2l0aFRpbnRDb2xvcjp0aW50Q29sb3IgZmlsdGVyVHlwZTpmaWx0ZXJU
eXBlXTsKKyAgICBbW1tfVUlWaXN1YWxFZmZlY3RDb25maWcgY29uZmlnV2l0aENvbnRlbnRDb25m
aWc6dGludExheWVyQ29uZmlnXSBjb250ZW50Q29uZmlnXSBjb25maWd1cmVMYXllclZpZXc6dmll
d107Cit9CisKKysgKHZvaWQpY29uZmlndXJlVmlldzooVUlWaWV3ICopdmlldyB3aXRoQmFja2dy
b3VuZEZpbGxPZkNvbG9yOihVSUNvbG9yICopZmlsbENvbG9yIG9wYWNpdHk6KENHRmxvYXQpb3Bh
Y2l0eSBmaWx0ZXI6KE5TU3RyaW5nICopZmlsdGVyCit7CisgICAgX1VJVmlzdWFsRWZmZWN0TGF5
ZXJDb25maWcgKmJhc2VMYXllckNvbmZpZyA9IFtfVUlWaXN1YWxFZmZlY3RMYXllckNvbmZpZyBs
YXllcldpdGhGaWxsQ29sb3I6ZmlsbENvbG9yIG9wYWNpdHk6b3BhY2l0eSBmaWx0ZXJUeXBlOmZp
bHRlcl07CisgICAgW1tbX1VJVmlzdWFsRWZmZWN0Q29uZmlnIGNvbmZpZ1dpdGhDb250ZW50Q29u
ZmlnOmJhc2VMYXllckNvbmZpZ10gY29udGVudENvbmZpZ10gY29uZmlndXJlTGF5ZXJWaWV3OnZp
ZXddOworfQorCisrIChVSVZpc3VhbEVmZmVjdFZpZXcgKilzZWNvbmRhcnlNYXRlcmlhbE92ZXJs
YXlWaWV3Cit7CisgICAgVUlWaXN1YWxFZmZlY3RWaWV3ICpzZWNvbmRhcnlNYXRlcmlhbE92ZXJs
YXlWaWV3ID0gW1tVSVZpc3VhbEVmZmVjdFZpZXcgYWxsb2NdIGluaXRXaXRoRWZmZWN0Om5pbF07
CisgICAgW3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgc2V0VXNlckludGVyYWN0aW9uRW5h
YmxlZDpOT107CisgICAgW3NlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXcgc2V0QmFja2dyb3Vu
ZEVmZmVjdHM6QFtbVUlWaXN1YWxFZmZlY3QgZWZmZWN0Q29tcG9zaXRpbmdDb2xvcjpbVUlDb2xv
ciBibGFja0NvbG9yXSB3aXRoTW9kZTpVSUNvbXBvc2l0aW5nTW9kZVBsdXNEYXJrZXIgYWxwaGE6
MC4wNl1dXTsKKyAgICByZXR1cm4gc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldzsKK30KKwor
I3ByYWdtYSBtYXJrIC0gRXh0ZXJuYWwgSW50ZXJmYWNlCisKKysgKHZvaWQpYXBwbHlQcmltYXJ5
R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3Cit7CisgICAgW3NlbGYgY29uZmlndXJlVmll
dzp2aWV3IGZvclRpbnRFZmZlY3RXaXRoQ29sb3I6W1VJQ29sb3IgY29sb3JXaXRoV2hpdGU6MS4w
IGFscGhhOjAuNzVdIGZpbHRlclR5cGU6a0NBRmlsdGVyUGx1c0xdOworfQorCisrICh2b2lkKWFw
cGx5U2Vjb25kYXJ5R2x5cGhUaW50VG9WaWV3OihVSVZpZXcgKil2aWV3Cit7CisgICAgW3NlbGYg
Y29uZmlndXJlVmlldzp2aWV3IGZvclRpbnRFZmZlY3RXaXRoQ29sb3I6W1VJQ29sb3IgY29sb3JX
aXRoV2hpdGU6MS4wIGFscGhhOjAuNTVdIGZpbHRlclR5cGU6a0NBRmlsdGVyUGx1c0xdOworfQor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhBcnJhbmdlZFN1YnZpZXdzOihOU0FycmF5PFVJVmll
dyAqPiAqKWFycmFuZ2VkU3Vidmlld3MgYXhpczooVUlMYXlvdXRDb25zdHJhaW50QXhpcylheGlz
Cit7CisgICAgc2VsZiA9IFtzZWxmIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAs
IDEwMCldOworCisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgW3Nl
bGYgc2V0Q2xpcHNUb0JvdW5kczpZRVNdOworCisgICAgX3Zpc3VhbEVmZmVjdFZpZXcgPSBbW1VJ
VmlzdWFsRWZmZWN0VmlldyBhbGxvY10gaW5pdFdpdGhFZmZlY3Q6bmlsXTsKKyAgICBbc2VsZiBh
ZGRTdWJ2aWV3Ol92aXN1YWxFZmZlY3RWaWV3XTsKKyAgICBbX3Zpc3VhbEVmZmVjdFZpZXcgc2V0
QmFja2dyb3VuZEVmZmVjdHM6W1tzZWxmIGNsYXNzXSBiYXNlRWZmZWN0c11dOworCisgICAgX3N0
YWNrVmlldyA9IFtbVUlTdGFja1ZpZXcgYWxsb2NdIGluaXRXaXRoQXJyYW5nZWRTdWJ2aWV3czph
cnJhbmdlZFN1YnZpZXdzXTsKKyAgICBbX3N0YWNrVmlldyBzZXRBeGlzOmF4aXNdOworICAgIFtf
c3RhY2tWaWV3IHNldExheW91dE1hcmdpbnNSZWxhdGl2ZUFycmFuZ2VtZW50OllFU107CisgICAg
W19zdGFja1ZpZXcgc2V0SW5zZXRzTGF5b3V0TWFyZ2luc0Zyb21TYWZlQXJlYTpOT107CisgICAg
W3NlbGYgaW5zZXJ0U3Vidmlldzpfc3RhY2tWaWV3IGFib3ZlOl92aXN1YWxFZmZlY3RWaWV3XTsK
KworICAgIFtzZWxmIF9zZXRBcnJhbmdlZFN1YnZpZXdzOmFycmFuZ2VkU3Vidmlld3MgYXhpczph
eGlzXTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNldFRhcmdldFZpZXdGb3JT
ZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXk6KFVJVmlldyAqKXRhcmdldFZpZXdGb3JTZWNvbmRhcnlN
YXRlcmlhbE92ZXJsYXkKK3sKKyAgICBpZiAoX3RhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlh
bE92ZXJsYXkgPT0gdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgX3RhcmdldFZpZXdGb3JTZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXkg
PSB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5OworICAgIFtzZWxmIHNldE5l
ZWRzVXBkYXRlQ29uc3RyYWludHNdOworfQorCistIChVSVZpZXcgKiljb250ZW50Vmlldworewor
ICAgIHJldHVybiBbX3Zpc3VhbEVmZmVjdFZpZXcgY29udGVudFZpZXddOworfQorCisjcHJhZ21h
IG1hcmsgLSBJbnRlcm5hbCBJbnRlcmZhY2UKKworQHN5bnRoZXNpemUgX3N0YWNrVmlldz1fc3Rh
Y2tWaWV3OworQHN5bnRoZXNpemUgX3Zpc3VhbEVmZmVjdFZpZXc9X3Zpc3VhbEVmZmVjdFZpZXc7
CisKKy0gKHZvaWQpX3NldEFycmFuZ2VkU3Vidmlld3M6KE5TQXJyYXk8VUlWaWV3ICo+ICopYXJy
YW5nZWRTdWJ2aWV3cyBheGlzOihVSUxheW91dENvbnN0cmFpbnRBeGlzKWF4aXMKK3sKKyAgICBm
b3IgKFVJVmlldyAqdmlldyBpbiBbX3N0YWNrVmlldyBhcnJhbmdlZFN1YnZpZXdzXSkKKyAgICAg
ICAgW3ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBmb3IgKFVJVmlldyAqdmlldyBp
biBhcnJhbmdlZFN1YnZpZXdzKQorICAgICAgICBbX3N0YWNrVmlldyBhZGRBcnJhbmdlZFN1YnZp
ZXc6dmlld107CisKKyAgICBbX3N0YWNrVmlldyBzZXRBeGlzOmF4aXNdOworfQorCisjcHJhZ21h
IG1hcmsgLSBVSVZpZXcgT3ZlcnJpZGVzCisKKy0gKHZvaWQpc2V0Qm91bmRzOihDR1JlY3QpYm91
bmRzCit7CisgICAgQ0dTaXplIG9sZFNpemUgPSBbc2VsZiBib3VuZHNdLnNpemU7CisKKyAgICBb
c3VwZXIgc2V0Qm91bmRzOmJvdW5kc107CisKKyAgICBpZiAoIUNHU2l6ZUVxdWFsVG9TaXplKG9s
ZFNpemUsIGJvdW5kcy5zaXplKSkKKyAgICAgICAgW3NlbGYgX3NldENvbnRpbnVvdXNDb3JuZXJS
YWRpdXM6KChDR1JlY3RHZXRIZWlnaHQoYm91bmRzKSA+IDQwLjApID8gMTYuMCA6IDguMCldOwor
fQorCistICh2b2lkKXVwZGF0ZUNvbnN0cmFpbnRzCit7CisgICAgaWYgKFtfc3RhY2tWaWV3IHRy
YW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzXSB8fCBbX3Zpc3VhbEVmZmVj
dFZpZXcgdHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHNdKSB7CisgICAg
ICAgIFtfdmlzdWFsRWZmZWN0VmlldyBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9D
b25zdHJhaW50czpOT107CisgICAgICAgIFtfc3RhY2tWaWV3IHNldFRyYW5zbGF0ZXNBdXRvcmVz
aXppbmdNYXNrSW50b0NvbnN0cmFpbnRzOk5PXTsKKworICAgICAgICBOU0FycmF5PE5TTGF5b3V0
Q29uc3RyYWludCAqPiAqY29uc3RyYWludHMgPSBAWworICAgICAgICAgICAgW1tfdmlzdWFsRWZm
ZWN0VmlldyBsZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbc2VsZiBsZWFk
aW5nQW5jaG9yXV0sCisgICAgICAgICAgICBbW192aXN1YWxFZmZlY3RWaWV3IHRvcEFuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgdG9wQW5jaG9yXV0sCisgICAgICAgICAgICBb
W192aXN1YWxFZmZlY3RWaWV3IHRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hv
cjpbc2VsZiB0cmFpbGluZ0FuY2hvcl1dLAorICAgICAgICAgICAgW1tfdmlzdWFsRWZmZWN0Vmll
dyBib3R0b21BbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIGJvdHRvbUFuY2hv
cl1dLAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IGxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRF
cXVhbFRvQW5jaG9yOltzZWxmIGxlYWRpbmdBbmNob3JdXSwKKyAgICAgICAgICAgIFtbX3N0YWNr
VmlldyB0b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltzZWxmIHRvcEFuY2hvcl1d
LAorICAgICAgICAgICAgW1tfc3RhY2tWaWV3IHRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1
YWxUb0FuY2hvcjpbc2VsZiB0cmFpbGluZ0FuY2hvcl1dLAorICAgICAgICAgICAgW1tfc3RhY2tW
aWV3IGJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W3NlbGYgYm90dG9tQW5j
aG9yXV0sCisgICAgICAgIF07CisKKyAgICAgICAgZm9yIChOU0xheW91dENvbnN0cmFpbnQgKmNv
bnN0cmFpbnQgaW4gY29uc3RyYWludHMpCisgICAgICAgICAgICBbY29uc3RyYWludCBzZXRQcmlv
cml0eTooVUlMYXlvdXRQcmlvcml0eVJlcXVpcmVkIC0gMSldOworCisgICAgICAgIFtOU0xheW91
dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpjb25zdHJhaW50c107CisgICAgfQorCisg
ICAgaWYgKFtbc2VsZiB0YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5XSBpc0Rl
c2NlbmRhbnRPZlZpZXc6c2VsZl0pIHsKKyAgICAgICAgaWYgKCFfc2Vjb25kYXJ5TWF0ZXJpYWxP
dmVybGF5VmlldykgeworICAgICAgICAgICAgW3NlbGYgc2V0U2Vjb25kYXJ5TWF0ZXJpYWxPdmVy
bGF5VmlldzpbW3NlbGYgY2xhc3NdIHNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXddXTsKKyAg
ICAgICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6W3NlbGYgc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5
Vmlld11dOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFtbc2VsZiBzZWNvbmRhcnlNYXRlcmlh
bE92ZXJsYXlWaWV3XSBpc0Rlc2NlbmRhbnRPZlZpZXc6c2VsZl0gJiYgIV9zZWNvbmRhcnlNYXRl
cmlhbE92ZXJsYXlWaWV3Q29uc3RyYWludHMpIHsKKyAgICAgICAgICAgIFtbc2VsZiBzZWNvbmRh
cnlNYXRlcmlhbE92ZXJsYXlWaWV3XSBzZXRUcmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9D
b25zdHJhaW50czpOT107CisgICAgICAgICAgICBOU0FycmF5PE5TTGF5b3V0Q29uc3RyYWludCAq
PiAqY29uc3RyYWludHMgPSBAWworICAgICAgICAgICAgICAgIFtbX3NlY29uZGFyeU1hdGVyaWFs
T3ZlcmxheVZpZXcgY2VudGVyWEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W190YXJn
ZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5IGNlbnRlclhBbmNob3JdXSwKKyAgICAg
ICAgICAgICAgICBbW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3IGNlbnRlcllBbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFs
T3ZlcmxheSBjZW50ZXJZQW5jaG9yXV0sCisgICAgICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0
ZXJpYWxPdmVybGF5VmlldyB3aWR0aEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W190
YXJnZXRWaWV3Rm9yU2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5IHdpZHRoQW5jaG9yXV0sCisgICAg
ICAgICAgICAgICAgW1tfc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5VmlldyBoZWlnaHRBbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltfdGFyZ2V0Vmlld0ZvclNlY29uZGFyeU1hdGVyaWFs
T3ZlcmxheSBoZWlnaHRBbmNob3JdXQorICAgICAgICAgICAgXTsKKyAgICAgICAgICAgIFtzZWxm
IHNldFNlY29uZGFyeU1hdGVyaWFsT3ZlcmxheVZpZXdDb25zdHJhaW50czpjb25zdHJhaW50c107
CisgICAgICAgICAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWludHM6W3Nl
bGYgc2Vjb25kYXJ5TWF0ZXJpYWxPdmVybGF5Vmlld0NvbnN0cmFpbnRzXV07CisgICAgICAgIH0K
KyAgICB9IGVsc2UKKyAgICAgICAgW19zZWNvbmRhcnlNYXRlcmlhbE92ZXJsYXlWaWV3IHJlbW92
ZUZyb21TdXBlcnZpZXddOworCisgICAgW3N1cGVyIHVwZGF0ZUNvbnN0cmFpbnRzXTsKK30KKwor
QGVuZAorCisjZW5kaWYgLy8gRU5BQkxFKEZVTExTQ1JFRU5fQVBJKSAmJiBQTEFURk9STShJT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA3NTg3MDI5NmFkZGE2MGQwMWJkNThmYjcxNjk1ZmFmNjIzZGJhOTk5Li4zNTM2NTllMzc5MTVk
ZDgzYTQ1NjM5NzdhYjg1M2I2ZjJlOWJmY2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwMjUsOCArMjAyNSwxMiBAQAogCQlDOUNE
NDM5RTFCNEIwMjUzMDAyMzlFMzMgLyogV0tNZWRpYVNlc3Npb25NZXRhZGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDOUNENDM5OTFCNEIwMjQy
MDAyMzlFMzMgLyogV0tNZWRpYVNlc3Npb25NZXRhZGF0YS5jcHAgKi87IH07CiAJCUNEMDAzQTUy
MTlENDlCNUQwMDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMDAzQTUwMTlENDlCNUQw
MDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJQ0QwMDNB
NTMxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMDAzQTUxMTlENDlCNUQw
MDVBQkNFMCAvKiBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmggKi87IH07CisJCUNEMEM2ODMx
MjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QwQzY4MkYyMDFGRDEwMTAw
QTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggKi87IH07CisJCUNEMEM2ODMy
MjAxRkQxMDEwMEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMEM2ODMwMjAxRkQxMDEw
MEE1OTQwOSAvKiBXS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJQ0QxOUEy
NkQxQTEzRTgyQTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMTlBMjY5MUExM0U4
MjAwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi87IH07CiAJCUNE
MTlBMjZFMUExM0U4MzQwMDhENjUwRSAvKiBXZWJEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0QxOUEyNkExQTEz
RTgyMTAwOEQ2NTBFIC8qIFdlYkRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi87IH07CisJCUNE
MTlEMkVBMjA0NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEMTlEMkU4MjA0
NjQwNkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuaCAqLzsgfTsKKwkJ
Q0QxOUQyRUIyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDE5RDJF
OTIwNDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCAqLzsg
fTsKIAkJQ0Q0OTFCMDcxRTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENDkx
QjA1MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5jcHAgKi87IH07
CiAJCUNENDkxQjA4MUU3MEQwNUYwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q0OTFCMDYx
RTcwRDA1RjAwMDA5MDY2IC8qIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyLmggKi87IH07CiAJCUNE
NDkxQjBEMUU3MzJFNEQwMDAwOTA2NiAvKiBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDQ5MUIwQjFFNzMyRTREMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OwpAQCAtMjA1Niw2ICsyMDYwLDggQEAKIAkJQ0RBMjlBMjkx
Q0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RBMjlBMjUxQ0JFQjY3
QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJNZXNzYWdlcy5oICovOyB9OwogCQlD
REEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQTI5QTI2MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlDREEyOUEyQjFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQTI5QTI3MUNCRUI2N0EwMDkwMUND
RiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovOyB9OworCQlDREMy
ODMxRDIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMyODMxQjIwMUJENzlEMDBF
NkU3NDUgLyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3LmggKi87IH07CisJCUNEQzI4MzFFMjAxQkQ3
OUQwMEU2RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMyODMxQzIwMUJENzlEMDBFNkU3NDUgLyog
V0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tICovOyB9OwogCQlDREMzODJGRTE3MjExNzk5MDA4QTJG
QzMgLyogU2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGlt
TGlicmFyeS5tbSAqLzsgfTsKIAkJQ0RDMzgzMDcxNzIxMTdERDAwOEEyRkMzIC8qIENvb2tpZVN0
b3JhZ2VTaGltTGlicmFyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDREMzODJGOTE3MjExNkQzMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW1M
aWJyYXJ5LmNwcCAqLzsgfTsKIAkJQ0RDMzgzMEMxNzIxMjI4MjAwOEEyRkMzIC8qIENvb2tpZVN0
b3JhZ2VTaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RDMzgzMEIxNzIxMjFDRTAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltTGli
cmFyeS5oICovOyB9OwpAQCAtMzI4Nyw4ICszMjkzLDggQEAKIAkJM0Y4N0I5QkExNTg5M0Y2MzAw
OTBGRjYyIC8qIFdlYkNvbG9yQ2hvb3Nlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJDb2xvckNob29zZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzRjg3QjlCQjE1ODkzRjYzMDA5MEZGNjIgLyogV2ViQ29sb3JDaG9vc2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yQ2hvb3Nlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzRjg3QjlCRjE1ODk0MEQ4MDA5MEZGNjIgLyogV2ViQ29sb3JQ
aWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y5MTVDMEUxRjU2NERFRDAwMTgzQ0U5
IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW07
IHBhdGggPSBpb3MvV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJM0Y5MTVDMEYxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXJJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5oOyBwYXRoID0gaW9zL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJM0Y5MTVDMEUxRjU2NERFRDAw
MTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJ
T1MubW07IHBhdGggPSBpb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzRjkxNUMwRjFGNTY0REVEMDAx
ODNDRTkgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcklPUy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg7IHBhdGggPSBpb3MvZnVsbHNjcmVl
bi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTNGQjA4RTQyMUY2MEIyNDAwMDVFNTMxMiAvKiBpT1MueGNhc3NldHMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXIuYXNzZXRj
YXRhbG9nOyBwYXRoID0gaU9TLnhjYXNzZXRzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTA0ODJDQjFEREQyRkI1MDBGMDA2RDAgLyogUlRDTmV0d29yay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSVENOZXR3b3JrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDEwNDgyQ0MxREREMkZCNTAwRjAwNkQwIC8qIFJUQ05ldHdvcmsuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDTmV0d29yay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDUzMyw4ICs0NTM5LDEyIEBACiAJCUM5Q0Q0MzlBMUI0QjAy
NDIwMDIzOUUzMyAvKiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLTWVkaWFTZXNzaW9uTWV0YWRhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0QwMDNBNTAxOUQ0OUI1RDAwNUFCQ0UwIC8qIFdlYk1lZGlhS2V5U3Rv
cmFnZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
TWVkaWFLZXlTdG9yYWdlTWFuYWdlci5jcHA7IHBhdGggPSBNZWRpYUNhY2hlL1dlYk1lZGlhS2V5
U3RvcmFnZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDAwM0E1
MTE5RDQ5QjVEMDA1QUJDRTAgLyogV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyLmg7IHBh
dGggPSBNZWRpYUNhY2hlL1dlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0QwQzY4MkYyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVl
blZpZXdDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLRnVsbFNjcmVlblZpZXdDb250cm9s
bGVyLmg7IHBhdGggPSBpb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDBDNjgzMDIwMUZEMTAxMDBBNTk0MDkg
LyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S0Z1bGxTY3JlZW5WaWV3Q29udHJvbGxlci5tbTsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVs
bFNjcmVlblZpZXdDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDE5QTI2OTFBMTNFODIwMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDE5QTI2QTFBMTNF
ODIxMDA4RDY1MEUgLyogV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0QxOUQyRTgyMDQ2NDA2RjAwMTcwNzRBIC8qIEZ1bGxz
Y3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGdWxsc2NyZWVuVG91Y2hT
ZWNoZXVyaXN0aWMuaDsgcGF0aCA9IGlvcy9mdWxsc2NyZWVuL0Z1bGxzY3JlZW5Ub3VjaFNlY2hl
dXJpc3RpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRDE5RDJFOTIwNDY0MDZG
MDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5jcHA7IHBhdGggPSBpb3MvZnVsbHNj
cmVlbi9GdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDRDQ5MUIwNTFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDQ5MUIw
NjFFNzBEMDVGMDAwMDkwNjYgLyogVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q0OTFCMEExRTczMkQxMjAwMDA5MDY2IC8qIFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU3NCw2ICs0
NTg0LDggQEAKIAkJQ0RBMjlBMjUxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFj
a1Nlc3Npb25NYW5hZ2VyTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RBMjlBMjYxQ0JFQjY3QTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
bGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDREEyOUEyNzFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDMjgzMUIyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVl
blN0YWNrVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcuaDsgcGF0
aCA9IGlvcy9mdWxsc2NyZWVuL1dLRnVsbHNjcmVlblN0YWNrVmlldy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDREMyODMxQzIwMUJENzlEMDBFNkU3NDUgLyogV0tGdWxsc2NyZWVu
U3RhY2tWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tGdWxsc2NyZWVuU3RhY2tWaWV3
Lm1tOyBwYXRoID0gaW9zL2Z1bGxzY3JlZW4vV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREMzODJGNzE3MjExNTA2MDA4QTJGQzMgLyogQ0ZO
ZXR3b3JrLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ0ZOZXR3b3JrLmZyYW1ld29yazsg
cGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NGTmV0d29yay5mcmFtZXdvcms7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCUNEQzM4MkY5MTcyMTE2RDMwMDhBMkZDMyAv
KiBDb29raWVTdG9yYWdlU2hpbUxpYnJhcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29va2ll
U3RvcmFnZVNoaW1MaWJyYXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RD
MzgzMDYxNzIxMTc5OTAwOEEyRkMzIC8qIFdlYlByb2Nlc3NTaGltLmR5bGliICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5
bGliIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViUHJvY2Vzc1NoaW0uZHlsaWI7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC01NzY1LDYgKzU3NzcsNyBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDNTQyNTZBRTE4QkVDMTYx
MDBERTQxNzkgLyogZm9ybXMgKi8sCisJCQkJQ0RDMjgzMUEyMDFCRDc1NjAwRTZFNzQ1IC8qIGZ1
bGxzY3JlZW4gKi8sCiAJCQkJQTExNURDNkUxOTFEODJBQjAwREE4MDcyIC8qIF9XS1dlYlZpZXdQ
cmludEZvcm1hdHRlci5oICovLAogCQkJCUExMTVEQzZEMTkxRDgyQUIwMERBODA3MiAvKiBfV0tX
ZWJWaWV3UHJpbnRGb3JtYXR0ZXIubW0gKi8sCiAJCQkJQTE5REQzQkYxRDA3RDE2ODAwQUM4MjNC
IC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmggKi8sCkBAIC01Nzk2LDggKzU4
MDksNiBAQAogCQkJCTBGQ0I0RTNEMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3Lm1t
ICovLAogCQkJCTBGQ0I0RTZBMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24uaCAqLywKIAkJCQkwRkNCNEU2QjE4QkJGMjZBMDAwRkNGQzkgLyogV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLm1tICovLAotCQkJCTNGOTE1QzBGMUY1NjRERUQwMDE4M0NFOSAvKiBXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLmggKi8sCi0JCQkJM0Y5MTVDMEUxRjU2NERFRDAw
MTgzQ0U5IC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXJJT1MubW0gKi8sCiAJCQkJMEZD
QjRFM0YxOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oICovLAog
CQkJCTBGQ0I0RTQwMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1Mu
bW0gKi8sCiAJCQkJMEZDQjRFNDExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92
aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbSAqLywKQEAgLTg0NzgsNiArODQ4OSwyMSBAQAog
CQkJbmFtZSA9IEZ1bGxTY3JlZW47CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQlDREMyODMxQTIwMUJENzU2MDBFNkU3NDUgLyogZnVsbHNjcmVlbiAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQ0RDMjgzMUIyMDFCRDc5RDAwRTZFNzQ1
IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5oICovLAorCQkJCUNEQzI4MzFDMjAxQkQ3OUQwMEU2
RTc0NSAvKiBXS0Z1bGxzY3JlZW5TdGFja1ZpZXcubW0gKi8sCisJCQkJQ0QwQzY4MkYyMDFGRDEw
MTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggKi8sCisJCQkJQ0QwQzY4
MzAyMDFGRDEwMTAwQTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLm1tICovLAor
CQkJCTNGOTE1QzBGMUY1NjRERUQwMDE4M0NFOSAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVySU9TLmggKi8sCisJCQkJM0Y5MTVDMEUxRjU2NERFRDAwMTgzQ0U5IC8qIFdLRnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXJJT1MubW0gKi8sCisJCQkJQ0QxOUQyRTgyMDQ2NDA2RjAwMTcwNzRB
IC8qIEZ1bGxzY3JlZW5Ub3VjaFNlY2hldXJpc3RpYy5oICovLAorCQkJCUNEMTlEMkU5MjA0NjQw
NkYwMDE3MDc0QSAvKiBGdWxsc2NyZWVuVG91Y2hTZWNoZXVyaXN0aWMuY3BwICovLAorCQkJKTsK
KwkJCW5hbWUgPSBmdWxsc2NyZWVuOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJQ0RDQTg1RTQxMzJBRDMzMDAwRTk2MURGIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC04ODAzLDYgKzg4MjksNyBAQAogCQkJCTk5NTVBNkY1
MUM3OTg2RTAwMEVCNkE5MyAvKiBBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OUM4MUQ1QTFDMjBFN0UyMDA1QzRDODIgLyogQXV0b21hdGlvbkNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTkyNDlBRDYxRjFGMUU1RjAwQjYyRkJCIC8qIEF1dG9t
YXRpb25Gcm9udGVuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDE5RDJFQTIw
NDY0MDZGMDAxNzA3NEEgLyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5OTU1QTZGNzFDNzk4NkU1MDBFQjZBOTMgLyogQXV0b21hdGlvblByb3RvY29s
T2JqZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTkwRDI4QkIxQzY1MzlEMzAwOTg2OTc3IC8q
IEF1dG9tYXRpb25TZXNzaW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREEwNDFGNDFB
Q0UyMTA1MDA0QTEzRUMgLyogQmFja0JvYXJkU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLApA
QCAtODgxOCw2ICs4ODQ1LDcgQEAKIAkJCQkxQUEyRTUxRDEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dV
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkQ5NTZGMTI4NDg1NjQwMDFFQjk2MiAv
KiBDaGlsZFByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRkFFQzNBMUIwNjU3NjMwMDA5
QzRFNyAvKiBDaGlsZFByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RDMjgz
MUQyMDFCRDc5RDAwRTZFNzQ1IC8qIFdLRnVsbHNjcmVlblN0YWNrVmlldy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE1MTNDNjcxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyOTBGNDI3MjE3MkEwQzc0MDA5MzlGRjAgLyogQ2hpbGRQcm9j
ZXNzU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UxMUFENTIxQ0JDNDgyRjAwNjgx
RUU1IC8qIENvZGVTaWduaW5nLmggaW4gSGVhZGVycyAqLywKQEAgLTkzNjIsNiArOTM5MCw3IEBA
CiAJCQkJOTM0QjcyNDQxOUY1QjlCRTAwQUU5NkQ2IC8qIFdLQWN0aW9uTWVudUl0ZW1UeXBlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5RjQwMUMxOUZCMEJCQzAwMkIyQjQyIC8qIFdLQWN0aW9u
TWVudVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNCNEU0ODE4QkJFMDQ0MDAwRkNGQzkg
LyogV0tBY3Rpb25TaGVldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0QwQzY4MzEyMDFGRDEwMTAw
QTU5NDA5IC8qIFdLRnVsbFNjcmVlblZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkNCNEU0QTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzVGQTFFRDMxOEUxMDYyMjAwQjNGNDAyIC8qIFdLQWlyUGxheVJv
dXRlUGlja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0REQjMyRDEyNEVDMkUxMDA0OEQxM0Mg
LyogV0tBUElDYXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTEwNDU0LDYgKzEwNDgzLDcgQEAKIAkJ
CQk5OTBEMjhCQzFDNjUzOURBMDA5ODY5NzcgLyogQXV0b21hdGlvblNlc3Npb25DbGllbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0NkEyQjYwODFFNTY3NkE2MDBDM0RFREEgLyogQmFja2dyb3Vu
ZFByb2Nlc3NSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNjRB
MkYxMTkxQUYxNEUwMDEwNzM3RCAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2VXaXRoU2FuZGJveEV4
dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRDE5RDJFQjIwNDY0MDZGMDAxNzA3NEEg
LyogRnVsbHNjcmVlblRvdWNoU2VjaGV1cmlzdGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
NzA4NzZCMTZENkNBNjkwMEY5OTIyNiAvKiBCbG9iUmVnaXN0cnlQcm94eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0YxODYzODE2N0QwNzFFMDBBMUE4NUEgLyogQ2FjaGVNb2RlbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MTg5N0VENzFGNDE1RDhBMDAxNkZBNDIgLyogQ2FjaGVTdG9yYWdl
RW5naW5lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA1NDEsNiArMTA1NzEsNyBAQAogCQkJCTFB
RTQ5ODc5MTFGRjdGQUEwMDQ4QjQ2NCAvKiBKU05QT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRTA5Mzc3MTRGQjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYwQzM2NUUxOEMxMTBBNTAwRjYwN0Q3IC8qIExheWVyUmVwcmVz
ZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQlDREMyODMxRTIwMUJENzlEMDBFNkU3NDUg
LyogV0tGdWxsc2NyZWVuU3RhY2tWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE5MkRDMTMx
MkY4QkFCOTAwMTdBRjY1IC8qIExheWVyVHJlZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFGREU2NDUxOTUxMEI1NTAwQzQ4RkZBIC8qIExlZ2FjeUJ1bmRsZUZvckNsYXNzLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNGRUNCMDQxRTFFRDFDQzAwRjg4NTA0IC8qIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTExMDM5LDYgKzExMDcwLDcg
QEAKIAkJCQlCQzMwNjZCRTEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0U0RDIxQTFBNDkxNEEzMDBDN0YxNTIgLyog
V2ViUHJvY2Vzc1Bvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NFNEQyMTYxQTQ5MTQ4NDAw
QzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQlDRDBD
NjgzMjIwMUZEMTAxMDBBNTk0MDkgLyogV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQk3Q0U0RDIyNzFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bv
b2xNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFCMTExMTJGNUU0
RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTA0
RjYxOTFBNEEzQTdBMDBBMjFCNkUgLyogV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0gaW4gU291cmNl
cyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>