<?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>129275</bug_id>
          
          <creation_ts>2014-02-24 16:08:43 -0800</creation_ts>
          <short_desc>Remove WKInteractionView, move code into WKContentView</short_desc>
          <delta_ts>2014-02-24 18:35:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>benjamin</cc>
    
    <cc>enrica</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>984100</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 16:08:43 -0800</bug_when>
    <thetext>Remove WKInteractionView, move code into WKContentView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984102</commentid>
    <comment_count>1</comment_count>
      <attachid>225102</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 16:22:32 -0800</bug_when>
    <thetext>Created attachment 225102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984110</commentid>
    <comment_count>2</comment_count>
      <attachid>225102</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-02-24 16:49:17 -0800</bug_when>
    <thetext>Comment on attachment 225102
Patch

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

&gt; Source/WebKit2/ChangeLog:16
&gt; +        have implementaiton-related data members. WKContentViewInternal.h is removed.

Typo: implementation.

&gt; Source/WebKit2/ChangeLog:23
&gt; +        WKAutoCorrectionData and InteractionInformationAtPosition are store via unique_ptr

Typo: stored.

&gt; Source/WebKit2/UIProcess/ios/WKContentView.h:99
&gt; +    RefPtr&lt;WebKit::WebPageProxy&gt; _page;
&gt; +
&gt; +    RetainPtr&lt;UIWebTouchEventsGestureRecognizer&gt; _touchEventGestureRecognizer;
&gt; +    BOOL _canSendTouchEventsAsynchronously;
&gt; +    unsigned _nativeWebTouchEventUniqueIdBeingSentSynchronously;
&gt; +
&gt; +    RetainPtr&lt;UITapGestureRecognizer&gt; _singleTapGestureRecognizer;
&gt; +    RetainPtr&lt;_UIWebHighlightLongPressGestureRecognizer&gt; _highlightLongPressGestureRecognizer;
&gt; +    RetainPtr&lt;UILongPressGestureRecognizer&gt; _longPressGestureRecognizer;
&gt; +    RetainPtr&lt;UITapGestureRecognizer&gt; _doubleTapGestureRecognizer;
&gt; +    RetainPtr&lt;UITapGestureRecognizer&gt; _twoFingerDoubleTapGestureRecognizer;
&gt; +    RetainPtr&lt;UIPanGestureRecognizer&gt; _twoFingerPanGestureRecognizer;
&gt; +
&gt; +    RetainPtr&lt;UIWKTextInteractionAssistant&gt; _textSelectionAssistant;
&gt; +    RetainPtr&lt;UIWKSelectionAssistant&gt; _webSelectionAssistant;
&gt; +
&gt; +    UITextInputTraits *_traits;
&gt; +    BOOL _isEditable;
&gt; +    UIWebFormAccessory *_accessory;
&gt; +    id &lt;UITextInputDelegate&gt; _inputDelegate;
&gt; +    BOOL _showingTextStyleOptions;
&gt; +
&gt; +    __weak UIWebScrollView *_scrollView;
&gt; +
&gt; +    RetainPtr&lt;_UIHighlightView&gt; _highlightView;
&gt; +    uint64_t _latestTapHighlightID;
&gt; +    BOOL _isTapHighlightIDValid;
&gt; +    std::unique_ptr&lt;WebKit::WKAutoCorrectionData&gt; _autocorrectionData;
&gt; +    RetainPtr&lt;NSString&gt; _markedText;
&gt; +    std::unique_ptr&lt;WebKit::InteractionInformationAtPosition&gt; _positionInformation;
&gt; +    BOOL _hasValidPositionInformation;
&gt; +    RetainPtr&lt;WKActionSheetAssistant&gt; _actionSheetAssistant;

Those should be in the @implementation, not in the header.
(And you could put back WKAutoCorrectionData and InteractionInformationAtPosition as member instead of pointers.

&gt; Source/WebKit2/UIProcess/ios/WKContentView.mm:153
&gt;  - (BOOL)isAssistingNode
&gt;  {
&gt; -    return [_interactionView isEditable];
&gt; +    return [self isEditable];
&gt;  }

We could get rid of isAssistingNode, expose isEditable, and use that from WKWebView.

&gt; Source/WebKit2/UIProcess/ios/WKContentView.mm:220
&gt;  {
&gt;      [self _updateFixedPositionRect];
&gt; -    [_interactionView _didEndScrollingOrZooming];
&gt; +    [self _didEndScrollingOrZooming];
&gt;  }
&gt;  
&gt;  - (void)willStartZoomOrScroll
&gt;  {
&gt; -    [_interactionView _willStartScrollingOrZooming];
&gt; +    [self _willStartScrollingOrZooming];
&gt;  }
&gt;  
&gt;  - (void)willStartUserTriggeredScroll
&gt;  {
&gt; -    [_interactionView _willStartUserTriggeredScrollingOrZooming];
&gt; +    [self _willStartUserTriggeredScrollingOrZooming];
&gt;  }
&gt;  
&gt;  - (void)willStartUserTriggeredZoom
&gt;  {
&gt; -    [_interactionView _willStartUserTriggeredScrollingOrZooming];
&gt; +    [self _willStartUserTriggeredScrollingOrZooming];
&gt;      _page-&gt;willStartUserTriggeredZooming();
&gt;  }
&gt;  
&gt;  - (void)didZoomToScale:(CGFloat)scale
&gt;  {
&gt;      _page-&gt;didFinishZooming(scale);
&gt; -    [_interactionView _didEndScrollingOrZooming];
&gt; +    [self _didEndScrollingOrZooming];

We should get rid of those internal calls. Don&apos;t they only exist because InteractionView used different names?

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:2
&gt; + * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.

2012-2014

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:130
&gt; +//@synthesize inputDelegate = _inputDelegate;

???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984139</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-24 18:35:28 -0800</bug_when>
    <thetext>https://trac.webkit.org/r164621</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225102</attachid>
            <date>2014-02-24 16:22:32 -0800</date>
            <delta_ts>2014-02-24 16:49:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129275-20140224162227.patch</filename>
            <type>text/plain</type>
            <size>207395</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0NjA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzE0YTRhNjdiNjQ1N2Jj
OGFhNmVjODg1NDkzZmMxODMzN2M4MTY0NC4uOWJjYzFkZTZmZGQ4MGI0NTJiZGVkMjBjZDc0Y2Fk
YjMwOGU5MDI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2NCBAQAogMjAxNC0wMi0yNCAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgV0tJ
bnRlcmFjdGlvblZpZXcsIG1vdmUgY29kZSBpbnRvIFdLQ29udGVudFZpZXcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTI3NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV0tJbnRlcmFjdGlv
blZpZXcgYXMgYW4gaW50ZXJpbSBzb2x1dGlvbiBhcyBXZWJLaXQyIG9uIGlPUyB3YXMgYmVpbmcK
KyAgICAgICAgYnJvdWdodCB1cCwgYW5kIHNob3VsZCBiZSByZW1vdmVkLgorICAgICAgICAKKyAg
ICAgICAgTW92ZSBpdHMgY29kZSBpbnRvIGEgY2F0ZWdvcnkgb24gV0tDb250ZW50VmlldywgbW9z
dGx5IHVuY2hhbmdlZC4gVGhlCisgICAgICAgIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24p
IGNhdGVncm95IG5vdyBpbXBsZW1lbnRzIHRoZSB2YXJpb3VzIHByb3RvY29scworICAgICAgICB0
aGF0IFdLSW50ZXJhY3Rpb25WaWV3IGltcGxlbWVudGVkLgorICAgICAgICAKKyAgICAgICAgV0tD
b250ZW50VmlldyBpcyBub3QgYW4gQVBJIGNsYXNzLCBzbyBubyBsb25nZXIgaGFzIFdLX0FQSV9D
TEFTUywgYW5kIGNhbgorICAgICAgICBoYXZlIGltcGxlbWVudGFpdG9uLXJlbGF0ZWQgZGF0YSBt
ZW1iZXJzLiBXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCBpcyByZW1vdmVkLgorICAgICAgICAKKyAg
ICAgICAgV0tDb250ZW50VmlldyBub3cgZXhwb3NlcyBhIFdlYlBhZ2VQcm94eSogcmF0aGVyIHRo
YW4gYSBXS1BhZ2VSZWYuCisgICAgICAgIAorICAgICAgICBPdGhlciBjaGFuZ2VzOiBXS0FjdGlv
blNoZWV0QXNzaXN0YW50IG5vIGxvbmdlciBzdG9yZXMgYSBXZWJQYWdlUHJveHksCisgICAgICAg
IGdldHRpbmcgaXQgZnJvbSB0aGUgV0tDb250ZW50VmlldyBpbnN0ZWFkLgorICAgICAgICAKKyAg
ICAgICAgV0tBdXRvQ29ycmVjdGlvbkRhdGEgYW5kIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uIGFyZSBzdG9yZSB2aWEgdW5pcXVlX3B0cgorICAgICAgICB0byByZWR1Y2UgY2xhc3Mg
c2l6ZSwgYW5kIGF2b2lkIGhhdmluZyB0byBleHBvc2UgdGhlaXIgZGV0YWlscyBpbiB0aGUgaGVh
ZGVyLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV2ViS2l0Mi54Y2NvbmZpZzoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9pb3MvV0tWaWV3SU9TLm1tOgorICAgICAgICAoLVtXS1ZpZXcgc2V0QWxs
b3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM6XSk6CisgICAgICAgICgtW1dLVmlldyBw
YWdlUmVmXSk6CisgICAgICAgICgtW1dLVmlldyBfcGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9y
XSk6CisgICAgICAgICgtW1dLVmlldyBfc2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlOl0p
OgorICAgICAgICAoLVtXS1ZpZXcgX2JhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZV0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Fj
dGlvblNoZWV0Lm1tOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0IGluaXRXaXRoVmlldzpdKToK
KyAgICAgICAgKCtbV0tFbGVtZW50QWN0aW9uIGN1c3RvbUVsZW1lbnRBY3Rpb25XaXRoVGl0bGU6
YWN0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKGNvcHlFbGVtZW50KToKKyAgICAgICAgKHNhdmVJ
bWFnZSk6CisgICAgICAgICgrW1dLRWxlbWVudEFjdGlvbiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25X
aXRoVHlwZTpjdXN0b21UaXRsZTpdKToKKyAgICAgICAgKC1bV0tFbGVtZW50QWN0aW9uIHJ1bkFj
dGlvbldpdGhFbGVtZW50SW5mbzp2aWV3Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tB
Y3Rpb25TaGVldEFzc2lzdGFudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tBY3Rpb25T
aGVldEFzc2lzdGFudC5tbToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBpbml0
V2l0aFZpZXc6XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQgZGVhbGxvY10p
OgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IGluaXRpYWxQcmVzZW50YXRpb25S
ZWN0SW5Ib3N0Vmlld0ZvclNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3Rh
bnQgcHJlc2VudGF0aW9uUmVjdEluSG9zdFZpZXdGb3JTaGVldF0pOgorICAgICAgICAoLVtXS0Fj
dGlvblNoZWV0QXNzaXN0YW50IGFjdGlvblNoZWV0OmNsaWNrZWRCdXR0b25BdEluZGV4Ol0pOgor
ICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IF9jcmVhdGVTaGVldFdpdGhFbGVtZW50
QWN0aW9uczpzaG93TGlua1RpdGxlOl0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0
YW50IHNob3dJbWFnZVNoZWV0XSk6CisgICAgICAgICgtW1dLQWN0aW9uU2hlZXRBc3Npc3RhbnQg
c2hvd0xpbmtTaGVldF0pOgorICAgICAgICAoLVtXS0FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dE
YXRhRGV0ZWN0b3JzU2hlZXRdKToKKyAgICAgICAgKC1bV0tBY3Rpb25TaGVldEFzc2lzdGFudCBj
bGVhbnVwU2hlZXRdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgaW5pdFdpdGhGcmFtZTpjb250ZXh0OldlYktpdDo6Y29uZmlndXJhdGlvbjpX
ZWJLaXQ6Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBwYWdlXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaXNBc3Np
c3RpbmdOb2RlXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZGlkRmluaXNoU2Nyb2xsaW5n
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgd2lsbFN0YXJ0Wm9vbU9yU2Nyb2xsXSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgd2lsbFN0YXJ0VXNlclRyaWdnZXJlZFNjcm9sbF0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHdpbGxTdGFydFVzZXJUcmlnZ2VyZWRab29tXSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgZGlkWm9vbVRvU2NhbGU6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgX2RpZENvbW1pdExvYWRGb3JNYWluRnJhbWVdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBfZGlkQ29tbWl0TGF5ZXJUcmVlOldlYktpdDo6XSk6CisgICAgICAgICogVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tJbnRlcmFjdGlvblZpZXcuaC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0uCisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgc2V0dXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGNsZWFudXBJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHBv
c2l0aW9uSW5mb3JtYXRpb25dKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXRJbnB1dERl
bGVnYXRlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGlucHV0RGVsZWdhdGVdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBpc0VkaXRhYmxlXSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgY2FuQmVjb21lRmlyc3RSZXNwb25kZXJdKToKKyAgICAgICAgKC1bV0tDb250ZW50Vmll
dyByZXNpZ25GaXJzdFJlc3BvbmRlcl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF93ZWJU
b3VjaEV2ZW50c1JlY29nbml6ZWQ6XSk6CisgICAgICAgIChpbmZsYXRlUXVhZCk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3dlYlRvdWNoRXZlbnQ6V2ViS2l0OjpwcmV2ZW50c05hdGl2ZUdl
c3R1cmVzOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaWRHZXRUYXBIaWdobGlnaHRG
b3JSZXF1ZXN0OmNvbG9yOldlYkNvcmU6OnF1YWRzOldlYkNvcmU6OnRvcExlZnRSYWRpdXM6V2Vi
Q29yZTo6dG9wUmlnaHRSYWRpdXM6V2ViQ29yZTo6Ym90dG9tTGVmdFJhZGl1czpXZWJDb3JlOjpi
b3R0b21SaWdodFJhZGl1czpXZWJDb3JlOjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
Y2FuY2VsTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBfZGlkU2Nyb2xsXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlcXVpcmVzS2V5
Ym9hcmRSZXNldE9uUmVsb2FkXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZ2VzdHVyZVJl
Y29nbml6ZXI6Y2FuUHJldmVudEdlc3R1cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IGdlc3R1cmVSZWNvZ25pemVyOmNhbkJlUHJldmVudGVkQnlHZXN0dXJlUmVjb2du
aXplcjpdKToKKyAgICAgICAgKGlzU2FtZVBhaXIpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGdlc3R1cmVSZWNvZ25pemVyOnNob3VsZFJlY29nbml6ZVNpbXVsdGFuZW91c2x5V2l0aEdlc3R1
cmVSZWNvZ25pemVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaG93SW1hZ2VTaGVl
dF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaG93TGlua1NoZWV0XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3Nob3dEYXRhRGV0ZWN0b3JzU2hlZXRdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBfYWN0aW9uRm9yTG9uZ1ByZXNzXSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6XSk6CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb25dKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBnZXN0dXJlUmVjb2duaXplclNob3VsZEJlZ2luOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF9jYW5jZWxJbnRlcmFjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRl
bnRWaWV3IGhhc1NlbGVjdGFibGVQb3NpdGlvbkF0UG9pbnQ6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgcG9pbnRJc0luQXNzaXN0ZWROb2RlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHdlYlNlbGVjdGlvblJlY3RzXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2hpZ2hs
aWdodExvbmdQcmVzc1JlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2xv
bmdQcmVzc1JlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NpbmdsZVRh
cFJlY29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RvdWJsZVRhcFJlY29n
bml6ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3R3b0ZpbmdlckRvdWJsZVRhcFJl
Y29nbml6ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3R3b0ZpbmdlclBhblJlY29n
bml6ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2F0dGVtcHRDbGlja0F0TG9jYXRp
b246XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgdXNlU2VsZWN0aW9uQXNzaXN0YW50V2l0
aE1vZGU6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xlYXJTZWxlY3Rpb25dKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3JvbGxp
bmdPclpvb21pbmddKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfZGlkRW5kU2Nyb2xsaW5n
T3Jab29taW5nXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaW5wdXRBY2Nlc3NvcnlWaWV3
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9y
Q3VycmVudFNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9hZGRTaG9ydGN1
dDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJvbXB0Rm9yUmVwbGFjZTpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyByZXBsYWNlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IGNhblBlcmZvcm1BY3Rpb246d2l0aFNlbmRlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBfcmVzZXRTaG93aW5nVGV4dFN0eWxlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9wZXJmb3JtQWN0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNvcHk6XSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgY3V0Ol0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IHBhc3RlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdDpdKToKKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBzZWxlY3RBbGw6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcg
dG9nZ2xlQm9sZGZhY2U6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgdG9nZ2xlSXRhbGlj
czpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0b2dnbGVVbmRlcmxpbmU6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgX3Nob3dUZXh0U3R5bGVPcHRpb25zOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IF9zaG93RGljdGlvbmFyeTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBfZGVmaW5lOl0pOgorICAgICAgICAodG9XS0dlc3R1cmVUeXBlKToKKyAgICAgICAgKHRv
VUlXS0dlc3R1cmVUeXBlKToKKyAgICAgICAgKHRvV0tTZWxlY3Rpb25Ub3VjaCk6CisgICAgICAg
ICh0b1VJV0tTZWxlY3Rpb25Ub3VjaCk6CisgICAgICAgICh0b1dLR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZSk6CisgICAgICAgICh0b1VJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSk6CisgICAgICAgICh0
b1VJV0tTZWxlY3Rpb25GbGFncyk6CisgICAgICAgICh0b1dLSGFuZGxlUG9zaXRpb24pOgorICAg
ICAgICAoc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKToKKyAgICAgICAgKHNlbGVjdGlvbkNo
YW5nZWRXaXRoVG91Y2gpOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaWRVcGRhdGVCbG9j
a1NlbGVjdGlvbldpdGhUb3VjaDpXZWJLaXQ6OndpdGhGbGFnczpXZWJLaXQ6Omdyb3dUaHJlc2hv
bGQ6c2hyaW5rVGhyZXNob2xkOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNoYW5nZVNl
bGVjdGlvbldpdGhHZXN0dXJlQXQ6d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNoYW5nZVNlbGVjdGlvbldpdGhUb3VjaEF0OndpdGhTZWxlY3Rpb25U
b3VjaDpiYXNlSXNTdGFydDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VTZWxl
Y3Rpb25XaXRoVG91Y2hlc0Zyb206dG86d2l0aEdlc3R1cmU6d2l0aFN0YXRlOl0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IGNoYW5nZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoQXQ6d2l0aFNl
bGVjdGlvblRvdWNoOmZvckhhbmRsZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhdXRv
Y29ycmVjdGlvbkRhdGFdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXF1ZXN0QXV0b2Nv
cnJlY3Rpb25SZWN0c0ZvclN0cmluZzp3aXRoQ29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgdGV4dEZpcnN0UmVjdF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHRleHRMYXN0UmVjdF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFwcGx5QXV0b2Nv
cnJlY3Rpb246dG9TdHJpbmc6d2l0aENvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtX
S0NvbnRlbnRWaWV3IHJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoQ29tcGxldGlvbkhh
bmRsZXI6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgYWNjZXNzb3J5RG9uZV0pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IGFjY2Vzc29yeVRhYjpdKToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBhY2Nlc3NvcnlBdXRvRmlsbF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGFj
Y2Vzc29yeUNsZWFyXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3VwZGF0ZUFjY2Vzc29y
eV0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHRleHRJblJhbmdlOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IHJlcGxhY2VSYW5nZTp3aXRoVGV4dDpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBzZWxlY3RlZFRleHRSYW5nZV0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGNhcmV0UmVjdEZvclBvc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVj
dGlvblJlY3RzRm9yUmFuZ2U6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0U2VsZWN0
ZWRUZXh0UmFuZ2U6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaGFzTWFya2VkVGV4dF0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1hcmtlZFRleHRdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBtYXJrZWRUZXh0UmFuZ2VdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBt
YXJrZWRUZXh0U3R5bGVdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZXRNYXJrZWRUZXh0
U3R5bGU6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3Rl
ZFJhbmdlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHVubWFya1RleHRdKToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBiZWdpbm5pbmdPZkRvY3VtZW50XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZW5kT2ZEb2N1bWVudF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHRl
eHRSYW5nZUZyb21Qb3NpdGlvbjp0b1Bvc2l0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHBvc2l0aW9uRnJvbVBvc2l0aW9uOm9mZnNldDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBwb3NpdGlvbkZyb21Qb3NpdGlvbjppbkRpcmVjdGlvbjpvZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgY29tcGFyZVBvc2l0aW9uOnRvUG9zaXRpb246XSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgb2Zmc2V0RnJvbVBvc2l0aW9uOnRvUG9zaXRpb246XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgdG9rZW5pemVyXSk6CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgcG9zaXRpb25XaXRoaW5SYW5nZTpmYXJ0aGVzdEluRGlyZWN0aW9uOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IGNoYXJhY3RlclJhbmdlQnlFeHRlbmRpbmdQb3NpdGlvbjppbkRpcmVj
dGlvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBiYXNlV3JpdGluZ0RpcmVjdGlvbkZv
clBvc2l0aW9uOmluRGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldEJh
c2VXcml0aW5nRGlyZWN0aW9uOmZvclJhbmdlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGZpcnN0UmVjdEZvclJhbmdlOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNsb3Nlc3RQ
b3NpdGlvblRvUG9pbnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2xvc2VzdFBvc2l0
aW9uVG9Qb2ludDp3aXRoaW5SYW5nZTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBjaGFy
YWN0ZXJSYW5nZUF0UG9pbnQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgZGVsZXRlQmFj
a3dhcmRdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbnNlcnRUZXh0Ol0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IGhhc1RleHRdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0
ZXh0SW5wdXRUcmFpdHNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBpbnRlcmFjdGlvbkFz
c2lzdGFudF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFu
dF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdGlvblJhbmdlXSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgcmVjdEZvck5TUmFuZ2U6XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgX21hcmtlZFRleHROU1JhbmdlXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2Vs
ZWN0ZWRET01SYW5nZV0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNldFNlbGVjdGVkRE9N
UmFuZ2U6YWZmaW5pdHlEb3duc3RyZWFtOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJl
cGxhY2VSYW5nZVdpdGhUZXh0V2l0aG91dENsb3NpbmdUeXBpbmc6cmVwbGFjZW1lbnRUZXh0Ol0p
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHJlY3RDb250YWluaW5nQ2FyZXRTZWxlY3Rpb25d
KToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyByZXF1aXJlc0tleUV2ZW50c10pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IGhhbmRsZUtleVdlYkV2ZW50Ol0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IF9pbnRlcnByZXRLZXlFdmVudDppc0NoYXJFdmVudDpdKToKKyAgICAgICAgKC1b
V0tDb250ZW50VmlldyBzZXRCb3R0b21CdWZmZXJIZWlnaHQ6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgYXV0b21hdGljYWxseVNlbGVjdGVkT3ZlcmxheV0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IHNlbGVjdGlvbkdyYW51bGFyaXR5XSk6CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgaW5zZXJ0RGljdGF0aW9uUmVzdWx0OndpdGhDb3JyZWN0aW9uSWRlbnRpZmllcjpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBtZXRhZGF0YURpY3Rpb25hcmllc0ZvckRpY3RhdGlvblJl
c3VsdHNdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBwcmV2aW91c1VucGVydHVyYmVkRGlj
dGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgICgtW1dLQ29udGVu
dFZpZXcgbmV4dFVucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246
XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgbW92ZUJhY2t3YXJkOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IG1vdmVGb3J3YXJkOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgd29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IHNldE1hcmtlZFRleHQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaGFz
Q29udGVudF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdEFsbF0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHRleHRDb2xvckZvckNhcmV0U2VsZWN0aW9uXSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgZm9udEZvckNhcmV0U2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgaGFzU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgaXNQ
b3NpdGlvbjphdEJvdW5kYXJ5OmluRGlyZWN0aW9uOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IHBvc2l0aW9uRnJvbVBvc2l0aW9uOnRvQm91bmRhcnk6aW5EaXJlY3Rpb246XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgaXNQb3NpdGlvbjp3aXRoaW5UZXh0VW5pdDppbkRpcmVjdGlv
bjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyByYW5nZUVuY2xvc2luZ1Bvc2l0aW9uOndp
dGhHcmFudWxhcml0eTppbkRpcmVjdGlvbjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyB0
YWtlVHJhaXRzRnJvbTpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc3RhcnRBc3Npc3Rp
bmdLZXlib2FyZF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zdG9wQXNzaXN0aW5nS2V5
Ym9hcmRdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc3RhcnRBc3Npc3RpbmdOb2RlXSk6
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXSk6CisgICAgICAg
ICgtW1dLQ29udGVudFZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdKToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBzaG91bGRJZ25vcmVXZWJUb3VjaF0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IGlzQW55VG91Y2hPdmVyQWN0aXZlQXJlYTpdKToKKyAgICAgICAgKC1bV0tUZXh0UmFuZ2UgX2lz
Q2FyZXRdKToKKyAgICAgICAgKC1bV0tUZXh0UmFuZ2UgX2lzUmFuZ2VkXSk6CisgICAgICAgICgr
W1dLVGV4dFJhbmdlIHRleHRSYW5nZVdpdGhTdGF0ZTppc1JhbmdlOmlzRWRpdGFibGU6c3RhcnRS
ZWN0OmVuZFJlY3Q6c2VsZWN0aW9uUmVjdHM6c2VsZWN0ZWRUZXh0TGVuZ3RoOl0pOgorICAgICAg
ICAoLVtXS1RleHRSYW5nZSBkZWFsbG9jXSk6CisgICAgICAgICgtW1dLVGV4dFJhbmdlIGRlc2Ny
aXB0aW9uXSk6CisgICAgICAgICgtW1dLVGV4dFJhbmdlIHN0YXJ0XSk6CisgICAgICAgICgtW1dL
VGV4dFJhbmdlIGVuZF0pOgorICAgICAgICAoLVtXS1RleHRSYW5nZSBpc0VtcHR5XSk6CisgICAg
ICAgICgtW1dLVGV4dFJhbmdlIGlzRXF1YWw6XSk6CisgICAgICAgICgrW1dLVGV4dFBvc2l0aW9u
IHRleHRQb3NpdGlvbldpdGhSZWN0Ol0pOgorICAgICAgICAoLVtXS1RleHRQb3NpdGlvbiBpc0Vx
dWFsOl0pOgorICAgICAgICAoLVtXS1RleHRQb3NpdGlvbiBkZXNjcmlwdGlvbl0pOgorICAgICAg
ICAoLVtXS1RleHRTZWxlY3Rpb25SZWN0IGluaXRXaXRoV2ViUmVjdDpdKToKKyAgICAgICAgKC1b
V0tUZXh0U2VsZWN0aW9uUmVjdCBkZWFsbG9jXSk6CisgICAgICAgICgrW1dLVGV4dFNlbGVjdGlv
blJlY3QgdGV4dFNlbGVjdGlvblJlY3RzV2l0aFdlYlJlY3RzOl0pOgorICAgICAgICAoLVtXS1Rl
eHRTZWxlY3Rpb25SZWN0IHJlY3RdKToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdCB3
cml0aW5nRGlyZWN0aW9uXSk6CisgICAgICAgICgtW1dLVGV4dFNlbGVjdGlvblJlY3QgcmFuZ2Vd
KToKKyAgICAgICAgKC1bV0tUZXh0U2VsZWN0aW9uUmVjdCBjb250YWluc1N0YXJ0XSk6CisgICAg
ICAgICgtW1dLVGV4dFNlbGVjdGlvblJlY3QgY29udGFpbnNFbmRdKToKKyAgICAgICAgKC1bV0tU
ZXh0U2VsZWN0aW9uUmVjdCBpc1ZlcnRpY2FsXSk6CisgICAgICAgICgrW1dLQXV0b2NvcnJlY3Rp
b25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOmxhc3RSZWN0Ol0pOgorICAgICAg
ICAoK1tXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0
YTptYXJrZWRUZXh0OnNlbGVjdGVkVGV4dDphZnRlclRleHQ6c2VsZWN0ZWRSYW5nZUluTWFya2Vk
VGV4dDpdKToKKyAgICAgICAgKC1bV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgZGVhbGxvY10pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVybmFsLmg6IFJlbW92ZWQu
CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTAy
LTI0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFJl
bW92ZSBQREZWaWV3Q29udHJvbGxlci4qLCB3aGljaCBpcyB1bnVzZWQKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTI3MAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9XZWJLaXQyLnhjY29uZmlnIGIvU291cmNlL1dl
YktpdDIvQ29uZmlndXJhdGlvbnMvV2ViS2l0Mi54Y2NvbmZpZwppbmRleCBiZWExMzYxM2NjMTdl
ZjBjYmExZmYwMGVmNGIzNThjZTFhZDI1NmQ5Li5lZjFhYzc4NmFkNzE0MjFjNTFjOWZkOTk2Y2Y5
OWMwM2JiMjA0ZGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9X
ZWJLaXQyLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL1dlYktp
dDIueGNjb25maWcKQEAgLTQ1LDYgKzQ1LDYgQEAgT1RIRVJfTERGTEFHU19tYWNvc3ggPSAkKEFT
QU5fT1RIRVJfTERGTEFHUykgJChGUkFNRVdPUktfQU5EX0xJQlJBUllfTERGTEFHUyk7CiBFWENM
VURFRF9TT1VSQ0VfRklMRV9OQU1FUyA9ICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfJChQ
TEFURk9STV9OQU1FKSk7CiBFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19pcGhvbmVvcyA9IEJ1
aWx0SW5QREZWaWV3Lm1tIERvd25sb2FkTWFjLm1tIEZpbmRJbmRpY2F0b3JXaW5kb3cubW0gTmV0
d29ya1Byb2Nlc3NNYWMubW0gUERGVmlld0NvbnRyb2xsZXIubW0gUGFnZUNsaWVudEltcGwubW0g
UGFzdGVib2FyZFR5cGVzLm1tIFBsdWdpbkluZm9TdG9yZU1hYy5tbSBQcmludEluZm9NYWMubW0g
U2VjSXRlbVNoaW1NZXRob2RzLm1tIFRleHRDaGVja2VyTWFjLm1tIFdLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3QubW0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tIFdLSW5zcGVjdG9y
LmNwcCBXS1ByaW50aW5nVmlldy5tbSBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gV0tUaHVt
Ym5haWxWaWV3Lm1tIFdlYkNvbnRleHRNZW51UHJveHlNYWMubW0gV2ViRWRpdG9yQ2xpZW50TWFj
Lm1tIFdlYkluc3BlY3RvclByb3h5TWFjLm1tIFdlYlBhZ2VNYWMubW0gV2ViUGFnZVByb3h5TWFj
Lm1tIFdlYlBsYXRmb3JtVG91Y2hQb2ludC5jcHAgV2ViUHJvY2Vzc01hYy5tbSBXZWJQcm9jZXNz
UHJveHlNYWMubW0gV2ViVG91Y2hFdmVudC5jcHAgKi5wZGYgY29tLmFwcGxlLldlYktpdC5OZXR3
b3JrUHJvY2Vzcy5zYiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsKIEVYQ0xVREVEX1NPVVJDRV9G
SUxFX05BTUVTX2lwaG9uZXNpbXVsYXRvciA9ICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNf
aXBob25lb3MpOwotRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfbWFjb3N4ID0gKklPUy5tbSBX
S0NvbnRlbnRWaWV3Lm1tIFdLU2Nyb2xsVmlldy5tbSBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NP
YmpDU2VjdXJpdHlPcmlnaW4ubW0gV0tJbnRlcmFjdGlvblZpZXcubW0gV2ViSU9TRXZlbnRGYWN0
b3J5Lm1tIFdLQWN0aW9uU2hlZXQubW0gV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbTsKK0VYQ0xV
REVEX1NPVVJDRV9GSUxFX05BTUVTX21hY29zeCA9ICpJT1MubW0gV0tDb250ZW50Vmlldy5tbSBX
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gV0tTY3JvbGxWaWV3Lm1tIFdLR2VvbG9jYXRpb25Q
cm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbSBXZWJJT1NFdmVudEZhY3RvcnkubW0gV0tB
Y3Rpb25TaGVldC5tbSBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tOwogCiBJTlNUQUxMSERSU19T
Q1JJUFRfUEhBU0UgPSBZRVM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCmluZGV4IDg2NzNjZDEyOWU2MjRmOTQ5ZDFlN2I2NmE2MTY0ZDhmYzQw
OGEwNWEuLmQyMjljMzcwNjI2NDExOGQ5MGI5NDdjNjYxNTg4M2YyMjEwZWEwYWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xMzks
NyArMTM5LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBj
b25maWd1cmF0aW9uOihXS1dlYlZpZXdDb25maWd1cmF0aW8KICAgICBbc2VsZiBhZGRTdWJ2aWV3
Ol9zY3JvbGxWaWV3LmdldCgpXTsKIAogICAgIF9jb250ZW50VmlldyA9IGFkb3B0TlMoW1tXS0Nv
bnRlbnRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmJvdW5kcyBjb250ZXh0OmNvbnRleHQgY29u
ZmlndXJhdGlvbjpzdGQ6Om1vdmUod2ViUGFnZUNvbmZpZ3VyYXRpb24pXSk7Ci0gICAgX3BhZ2Ug
PSBfY29udGVudFZpZXctPl9wYWdlOworICAgIF9wYWdlID0gW19jb250ZW50VmlldyBwYWdlXTsK
ICAgICBbX2NvbnRlbnRWaWV3IHNldERlbGVnYXRlOnNlbGZdOwogICAgIFtfY29udGVudFZpZXcg
bGF5ZXJdLmFuY2hvclBvaW50ID0gQ0dQb2ludFplcm87CiAgICAgW19jb250ZW50VmlldyBzZXRG
cmFtZTpib3VuZHNdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IDE1NmVhYTc4ZTc1ZjRjYjk0Yzk1MmRiYTA2
MWVkMjU5YzE5Y2JiMDUuLjMxNzZiNjcwYjk5ODhhYWJhMjI4MTIyN2Y1MTdjYjMwODQ4MTM2MWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
Vmlld0ludGVybmFsLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4K
IAogI2lmIFBMQVRGT1JNKElPUykKLSNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcm5hbC5oIgor
I2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgogI2ltcG9ydCA8VUlLaXQvVUlTY3JvbGxWaWV3X1By
aXZhdGUuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2lvcy9XS1ZpZXdJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2lvcy9X
S1ZpZXdJT1MubW0KaW5kZXggNThkNDExNWVkMzMyZDMyMjllZmM1ZTI1ZTYxMzJmM2VmYmM0Zjc4
Yi4uZDVlY2M0NzFkOGY2NmIzNjE4ZWRmNmRhOTU1OTA1M2I5YTkxZTE1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9pb3MvV0tWaWV3SU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvaW9zL1dLVmlld0lPUy5tbQpAQCAtMTI5LDcgKzEyOSw3
IEBAIC0gKHZvaWQpc2V0QWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXM6KEJPT0wp
YWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uCiAKICAgICBfYWxsb3dzQmFja0ZvcndhcmROYXZp
Z2F0aW9uR2VzdHVyZXMgPSBhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlczsKICAg
ICAKLSAgICBXZWJQYWdlUHJveHkgKndlYlBhZ2VQcm94eSA9IHRvSW1wbChbX2NvbnRlbnRWaWV3
IF9wYWdlUmVmXSk7CisgICAgV2ViUGFnZVByb3h5ICp3ZWJQYWdlUHJveHkgPSBbX2NvbnRlbnRW
aWV3IHBhZ2VdOwogICAgIAogICAgIGlmIChhbGxvd3NCYWNrRm9yd2FyZE5hdmlnYXRpb25HZXN0
dXJlcykgewogICAgICAgICBpZiAoIV9nZXN0dXJlQ29udHJvbGxlcikgewpAQCAtMzA3LDcgKzMw
Nyw3IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXcgKFByaXZhdGUpCiAKIC0gKFdLUGFnZVJlZilw
YWdlUmVmCiB7Ci0gICAgcmV0dXJuIFtfY29udGVudFZpZXcgX3BhZ2VSZWZdOworICAgIHJldHVy
biB0b0FQSShbX2NvbnRlbnRWaWV3IHBhZ2VdKTsKIH0KIAogLSAoaWQpaW5pdFdpdGhGcmFtZToo
Q0dSZWN0KWZyYW1lIGNvbnRleHRSZWY6KFdLQ29udGV4dFJlZiljb250ZXh0UmVmIHBhZ2VHcm91
cFJlZjooV0tQYWdlR3JvdXBSZWYpcGFnZUdyb3VwUmVmCkBAIC0zNjYsOCArMzY2LDcgQEAgLSAo
dm9pZClfZW5kSW50ZXJhY3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZQogCiAtIChVSUNvbG9yICop
X3BhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcgogewotICAgIFdlYlBhZ2VQcm94eSogd2ViUGFn
ZVByb3h5ID0gdG9JbXBsKFtfY29udGVudFZpZXcgX3BhZ2VSZWZdKTsKLSAgICBXZWJDb3JlOjpD
b2xvciBjb2xvciA9IHdlYlBhZ2VQcm94eS0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7
CisgICAgV2ViQ29yZTo6Q29sb3IgY29sb3IgPSBbX2NvbnRlbnRWaWV3IHBhZ2VdLT5wYWdlRXh0
ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKTsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKIApAQCAtMzc2LDE0ICszNzUsMTIgQEAgLSAoVUlDb2xvciAqKV9wYWdl
RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IKIAogLSAodm9pZClfc2V0QmFja2dyb3VuZEV4dGVuZHNC
ZXlvbmRQYWdlOihCT09MKWJhY2tncm91bmRFeHRlbmRzCiB7Ci0gICAgV2ViUGFnZVByb3h5KiB3
ZWJQYWdlUHJveHkgPSB0b0ltcGwoW19jb250ZW50VmlldyBfcGFnZVJlZl0pOwotICAgIHdlYlBh
Z2VQcm94eS0+c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tncm91bmRFeHRlbmRz
KTsKKyAgICBbX2NvbnRlbnRWaWV3IHBhZ2VdLT5zZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBh
Z2UoYmFja2dyb3VuZEV4dGVuZHMpOwogfQogCiAtIChCT09MKV9iYWNrZ3JvdW5kRXh0ZW5kc0Jl
eW9uZFBhZ2UKIHsKLSAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSA9IHRvSW1wbChbX2Nv
bnRlbnRWaWV3IF9wYWdlUmVmXSk7Ci0gICAgcmV0dXJuIHdlYlBhZ2VQcm94eS0+YmFja2dyb3Vu
ZEV4dGVuZHNCZXlvbmRQYWdlKCk7CisgICAgcmV0dXJuIFtfY29udGVudFZpZXcgcGFnZV0tPmJh
Y2tncm91bmRFeHRlbmRzQmV5b25kUGFnZSgpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQppbmRleCA4NWY1MTA3ZjE0
N2FmNzJjZDE3NWFlMzBkMmI3NDlmYzk4NjE2ZmRmLi40MTIyOGZlZmEwMTJkOTk4MTRjMzNiMDg4
NTZmNzUyNDgwZTMwNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
UGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTI4LDcgKzI4LDggQEAKIAogI2ltcG9ydCAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24uaCIKLSNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tD
b250ZW50Vmlldy5oIgorI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1w
b3J0ICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5
LmgiCiAjaW1wb3J0IDxVSUtpdC9VSUltYWdlUGlja2VyQ29udHJvbGxlcl9Qcml2YXRlLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXQuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVldC5oCmluZGV4IDU5Zjc0
MWY4ODFkZDNhNWUxNWVlMGRhMGFjM2E3MjlkOWNhNzMwZDkuLmY0MjY4Y2IzNzFmYzM1ZDRmNmMw
ZmRhOTJmOTg0YmJjODljZWQ4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tBY3Rpb25TaGVldC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tBY3Rpb25TaGVldC5oCkBAIC0yOCwxMyArMjgsMTMgQEAKICNpbXBvcnQgPFdlYktpdDIvV0tE
ZWNsYXJhdGlvblNwZWNpZmllcnMuaD4KIAogQHByb3RvY29sIFdLQWN0aW9uU2hlZXREZWxlZ2F0
ZTsKLUBjbGFzcyBXS0ludGVyYWN0aW9uVmlldzsKK0BjbGFzcyBXS0NvbnRlbnRWaWV3OwogCiBA
aW50ZXJmYWNlIFdLQWN0aW9uU2hlZXQgOiBVSUFjdGlvblNoZWV0CiAKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBhc3NpZ24pIGlkIDxXS0FjdGlvblNoZWV0RGVsZWdhdGU+IHNoZWV0RGVsZWdhdGU7
CiBAcHJvcGVydHkgKG5vbmF0b21pYykgVUlQb3BvdmVyQXJyb3dEaXJlY3Rpb24gYXJyb3dEaXJl
Y3Rpb25zOwotLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXc7Cist
IChpZClpbml0V2l0aFZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3OwogLSAodm9pZClkb25lV2l0
aFNoZWV0OwogLSAoQk9PTClwcmVzZW50U2hlZXQ7CiAtIChCT09MKXByZXNlbnRTaGVldEZyb21S
ZWN0OihDR1JlY3QpcHJlc2VudGF0aW9uUmVjdDsKQEAgLTYxLDcgKzYxLDcgQEAgV0tfRVhQT1JU
IEBpbnRlcmZhY2UgV0tFbGVtZW50QWN0aW9uSW5mbyA6IE5TT2JqZWN0CiBAZW5kCiAKIHR5cGVk
ZWYgdm9pZCAoXldLRWxlbWVudEFjdGlvbkhhbmRsZXIpKFdLRWxlbWVudEFjdGlvbkluZm8gKik7
Ci10eXBlZGVmIHZvaWQgKF5XS0VsZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJuYWwpKFdLSW50ZXJh
Y3Rpb25WaWV3ICosIFdLRWxlbWVudEFjdGlvbkluZm8gKik7Cit0eXBlZGVmIHZvaWQgKF5XS0Vs
ZW1lbnRBY3Rpb25IYW5kbGVySW50ZXJuYWwpKFdLQ29udGVudFZpZXcgKiwgV0tFbGVtZW50QWN0
aW9uSW5mbyAqKTsKIAogdHlwZWRlZiBlbnVtIHsKICAgICBXS0VsZW1lbnRBY3Rpb25UeXBlQ3Vz
dG9tID0gMCwKQEAgLTc4LDYgKzc4LDYgQEAgV0tfRVhQT1JUIEBpbnRlcmZhY2UgV0tFbGVtZW50
QWN0aW9uIDogTlNPYmplY3QKICsgKFdLRWxlbWVudEFjdGlvbiAqKWN1c3RvbUVsZW1lbnRBY3Rp
b25XaXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgYWN0aW9uSGFuZGxlcjooV0tFbGVtZW50QWN0
aW9uSGFuZGxlciloYW5kbGVyOwogKyAoV0tFbGVtZW50QWN0aW9uICopc3RhbmRhcmRFbGVtZW50
QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlwZTsKICsgKFdLRWxlbWVudEFj
dGlvbiAqKXN0YW5kYXJkRWxlbWVudEFjdGlvbldpdGhUeXBlOihXS0VsZW1lbnRBY3Rpb25UeXBl
KXR5cGUgY3VzdG9tVGl0bGU6KE5TU3RyaW5nICopdGl0bGU7Ci0tICh2b2lkKXJ1bkFjdGlvbldp
dGhFbGVtZW50SW5mbzooV0tFbGVtZW50QWN0aW9uSW5mbyAqKWluZm8gdmlldzooV0tJbnRlcmFj
dGlvblZpZXcgKil2aWV3OworLSAodm9pZClydW5BY3Rpb25XaXRoRWxlbWVudEluZm86KFdLRWxl
bWVudEFjdGlvbkluZm8gKilpbmZvIHZpZXc6KFdLQ29udGVudFZpZXcgKil2aWV3OwogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXQu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXQubW0KaW5kZXgg
MGNhNjI1MmUzYjI3OTliMGEzYTFmODI5ZTgwNWM4NmFiNTQ5MzkwMy4uNWU3MzllMjRiMjNmOTY1
ZjMzOGJhZWRlYWE4MjBjYTZlZmM1YzNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tBY3Rpb25TaGVldC5tbQpAQCAtMjcsNyArMjcsNyBAQAogI2ltcG9ydCAiV0tBY3Rp
b25TaGVldC5oIgogCiAjaW1wb3J0ICJXS0dlc3R1cmVUeXBlcy5oIgotI2ltcG9ydCAiV0tJbnRl
cmFjdGlvblZpZXcuaCIKKyNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIgogI2lt
cG9ydCA8U2FmYXJpU2VydmljZXMvU1NSZWFkaW5nTGlzdC5oPgogI2ltcG9ydCA8VUlLaXQvVUlB
Y3Rpb25TaGVldF9Qcml2YXRlLmg+CiAjaW1wb3J0IDxVSUtpdC9VSVZpZXcuaD4KQEAgLTQxLDE4
ICs0MSwxOCBAQCBTT0ZUX0xJTktfRlJBTUVXT1JLKFNhZmFyaVNlcnZpY2VzKTsKIFNPRlRfTElO
S19DTEFTUyhTYWZhcmlTZXJ2aWNlcywgU1NSZWFkaW5nTGlzdCk7CiAKIEBpbnRlcmZhY2UgV0tF
bGVtZW50QWN0aW9uKFByaXZhdGUpCi0tICh2b2lkKV9ydW5BY3Rpb25XaXRoRWxlbWVudDooTlNV
UkwgKil0YXJnZXRVUkwgZG9jdW1lbnRWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcgaW50
ZXJhY3Rpb25Mb2NhdGlvbjooQ0dQb2ludClpbnRlcmFjdGlvbkxvY2F0aW9uOworLSAodm9pZClf
cnVuQWN0aW9uV2l0aEVsZW1lbnQ6KE5TVVJMICopdGFyZ2V0VVJMIGRvY3VtZW50VmlldzooV0tD
b250ZW50VmlldyAqKXZpZXcgaW50ZXJhY3Rpb25Mb2NhdGlvbjooQ0dQb2ludClpbnRlcmFjdGlv
bkxvY2F0aW9uOwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tBY3Rpb25TaGVldCB7CiAgICAg
aWQ8V0tBY3Rpb25TaGVldERlbGVnYXRlPiBfc2hlZXREZWxlZ2F0ZTsKICAgICBpZDxVSUFjdGlv
blNoZWV0RGVsZWdhdGU+IF9kZWxlZ2F0ZVdoaWxlUm90YXRpbmc7Ci0gICAgV0tJbnRlcmFjdGlv
blZpZXcgKl92aWV3OworICAgIFdLQ29udGVudFZpZXcgKl92aWV3OwogICAgIFVJUG9wb3ZlckFy
cm93RGlyZWN0aW9uIF9hcnJvd0RpcmVjdGlvbnM7CiAgICAgQk9PTCBfaXNSb3RhdGluZzsKIH0K
IAotLSAoaWQpaW5pdFdpdGhWaWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcKKy0gKGlkKWlu
aXRXaXRoVmlldzooV0tDb250ZW50VmlldyAqKXZpZXcKIHsKICAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwogICAgIGlmICghc2VsZikKQEAgLTIyNiwxNiArMjI2LDE2IEBAIC0gKHZvaWQpZGVhbGxv
YwogKyAoV0tFbGVtZW50QWN0aW9uICopY3VzdG9tRWxlbWVudEFjdGlvbldpdGhUaXRsZTooTlNT
dHJpbmcgKil0aXRsZSBhY3Rpb25IYW5kbGVyOihXS0VsZW1lbnRBY3Rpb25IYW5kbGVyKWhhbmRs
ZXIKIHsKICAgICByZXR1cm4gW1tbc2VsZiBhbGxvY10gaW5pdFdpdGhUaXRsZTp0aXRsZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25IYW5kbGVyOl4oV0tJbnRlcmFjdGlvblZpZXcg
KnZpZXcsIFdLRWxlbWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsgaGFuZGxlcihhY3Rpb25J
bmZvKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25IYW5kbGVyOl4oV0tDb250
ZW50VmlldyAqdmlldywgV0tFbGVtZW50QWN0aW9uSW5mbyAqYWN0aW9uSW5mbykgeyBoYW5kbGVy
KGFjdGlvbkluZm8pOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6
V0tFbGVtZW50QWN0aW9uVHlwZUN1c3RvbV0gYXV0b3JlbGVhc2VdOwogfQogCi1zdGF0aWMgdm9p
ZCBjb3B5RWxlbWVudChXS0ludGVyYWN0aW9uVmlldyAqdmlldykKK3N0YXRpYyB2b2lkIGNvcHlF
bGVtZW50KFdLQ29udGVudFZpZXcgKnZpZXcpCiB7CiAgICAgW3ZpZXcgX3BlcmZvcm1BY3Rpb246
V2ViS2l0OjpXS1NoZWV0QWN0aW9uQ29weV07CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVJbWFnZShX
S0ludGVyYWN0aW9uVmlldyAqdmlldykKK3N0YXRpYyB2b2lkIHNhdmVJbWFnZShXS0NvbnRlbnRW
aWV3ICp2aWV3KQogewogICAgIFt2aWV3IF9wZXJmb3JtQWN0aW9uOldlYktpdDo6V0tTaGVldEFj
dGlvblNhdmVJbWFnZV07CiB9CkBAIC0yNTUsMjUgKzI1NSwyNSBAQCArIChXS0VsZW1lbnRBY3Rp
b24gKilzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTooV0tFbGVtZW50QWN0aW9uVHlwZSl0
eXBlIGN1cwogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlw
ZUNvcHk6CiAgICAgICAgIHRpdGxlID0gV0VCX1VJX1NUUklOR19LRVkoIkNvcHkiLCAiQ29weSBB
Y3Rpb25TaGVldCBMaW5rIiwgIlRpdGxlIGZvciBDb3B5IExpbmsgb3IgSW1hZ2UgYWN0aW9uIGJ1
dHRvbiIpOwotICAgICAgICBoYW5kbGVyID0gXihXS0ludGVyYWN0aW9uVmlldyAqdmlldywgV0tF
bGVtZW50QWN0aW9uSW5mbyAqYWN0aW9uSW5mbykgeworICAgICAgICBoYW5kbGVyID0gXihXS0Nv
bnRlbnRWaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CiAgICAg
ICAgICAgICBjb3B5RWxlbWVudCh2aWV3KTsKICAgICAgICAgfTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBXS0VsZW1lbnRBY3Rpb25UeXBlT3BlbjoKICAgICAgICAgdGl0bGUgPSBXRUJfVUlf
U1RSSU5HX0tFWSgiT3BlbiIsICJPcGVuIEFjdGlvblNoZWV0IExpbmsiLCAiVGl0bGUgZm9yIE9w
ZW4gTGluayBhY3Rpb24gYnV0dG9uIik7Ci0gICAgICAgIGhhbmRsZXIgPSBeKFdLSW50ZXJhY3Rp
b25WaWV3ICp2aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CisgICAgICAg
IGhhbmRsZXIgPSBeKFdLQ29udGVudFZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbkluZm8gKmFj
dGlvbkluZm8pIHsKICAgICAgICAgICAgIFt2aWV3IF9hdHRlbXB0Q2xpY2tBdExvY2F0aW9uOmFj
dGlvbkluZm8uaW50ZXJhY3Rpb25Mb2NhdGlvbl07CiAgICAgICAgIH07CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgV0tFbGVtZW50QWN0aW9uVHlwZVNhdmVJbWFnZToKICAgICAgICAgdGl0bGUg
PSBXRUJfVUlfU1RSSU5HX0tFWSgiU2F2ZSBJbWFnZSIsICJTYXZlIEltYWdlIiwgIlRpdGxlIGZv
ciBTYXZlIEltYWdlIGFjdGlvbiBidXR0b24iKTsKLSAgICAgICAgaGFuZGxlciA9IF4oV0tJbnRl
cmFjdGlvblZpZXcgKnZpZXcsIFdLRWxlbWVudEFjdGlvbkluZm8gKmFjdGlvbkluZm8pIHsKKyAg
ICAgICAgaGFuZGxlciA9IF4oV0tDb250ZW50VmlldyAqdmlldywgV0tFbGVtZW50QWN0aW9uSW5m
byAqYWN0aW9uSW5mbykgewogICAgICAgICAgICAgc2F2ZUltYWdlKHZpZXcpOwogICAgICAgICB9
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdLRWxlbWVudEFjdGlvblR5cGVBZGRUb1JlYWRp
bmdMaXN0OgogICAgICAgICB0aXRsZSA9IFdFQl9VSV9TVFJJTkcoIkFkZCB0byBSZWFkaW5nIExp
c3QiLCAiVGl0bGUgZm9yIEFkZCB0byBSZWFkaW5nIExpc3QgYWN0aW9uIGJ1dHRvbiIpOwotICAg
ICAgICBoYW5kbGVyID0gXihXS0ludGVyYWN0aW9uVmlldyAqdmlldywgV0tFbGVtZW50QWN0aW9u
SW5mbyAqYWN0aW9uSW5mbykgeworICAgICAgICBoYW5kbGVyID0gXihXS0NvbnRlbnRWaWV3ICp2
aWV3LCBXS0VsZW1lbnRBY3Rpb25JbmZvICphY3Rpb25JbmZvKSB7CiAgICAgICAgICAgICBhZGRU
b1JlYWRpbmdMaXN0KGFjdGlvbkluZm8udXJsLCBhY3Rpb25JbmZvLnRpdGxlKTsKICAgICAgICAg
fTsKICAgICAgICAgYnJlYWs7CkBAIC0yODksNyArMjg5LDcgQEAgKyAoV0tFbGVtZW50QWN0aW9u
ICopc3RhbmRhcmRFbGVtZW50QWN0aW9uV2l0aFR5cGU6KFdLRWxlbWVudEFjdGlvblR5cGUpdHlw
ZQogICAgIHJldHVybiBbc2VsZiBzdGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTp0eXBlIGN1
c3RvbVRpdGxlOm5pbF07CiB9CiAKLS0gKHZvaWQpcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOihX
S0VsZW1lbnRBY3Rpb25JbmZvICopaW5mbyB2aWV3OihXS0ludGVyYWN0aW9uVmlldyAqKXZpZXcK
Ky0gKHZvaWQpcnVuQWN0aW9uV2l0aEVsZW1lbnRJbmZvOihXS0VsZW1lbnRBY3Rpb25JbmZvICop
aW5mbyB2aWV3OihXS0NvbnRlbnRWaWV3ICopdmlldwogewogICAgIF9hY3Rpb25IYW5kbGVyKHZp
ZXcsIGluZm8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0FjdGlvblNoZWV0QXNzaXN0YW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
QWN0aW9uU2hlZXRBc3Npc3RhbnQuaAppbmRleCA3ZjY3MTEwZjdlY2M2YTVmMWE4YjI4MzYzYjY1
OTQ5MDVjNzcyMzBhLi5hZDJkMzUzNDNkYmFjNWE4OTA2NDczZWNkNmFhMmU0NTUyOTRmZmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRBc3Np
c3RhbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQWN0aW9uU2hlZXRB
c3Npc3RhbnQuaApAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
CiBAcHJvdG9jb2wgV0tBY3Rpb25TaGVldERlbGVnYXRlOwotQGNsYXNzIFdLSW50ZXJhY3Rpb25W
aWV3OworQGNsYXNzIFdLQ29udGVudFZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
V2ViUGFnZVByb3h5OwpAQCAtMzksOCArMzksNyBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIEBp
bnRlcmZhY2UgV0tBY3Rpb25TaGVldEFzc2lzdGFudCA6IE5TT2JqZWN0IDxXS0FjdGlvblNoZWV0
RGVsZWdhdGU+CiAKLS0gKGlkKWluaXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3
OwotLSAodm9pZClzZXRQYWdlOihQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PilwYWdl
OworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICopdmlldzsKIC0gKHZvaWQpc2hv
d0xpbmtTaGVldDsKIC0gKHZvaWQpc2hvd0ltYWdlU2hlZXQ7CiAtICh2b2lkKXNob3dEYXRhRGV0
ZWN0b3JzU2hlZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
QWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
QWN0aW9uU2hlZXRBc3Npc3RhbnQubW0KaW5kZXggNDI4YjM0NTViNDVhODAzYmI0ODY5YmE5YWY3
ZWQ5MTVjZWRmNTAwMy4uM2JkNDZjYmM4ZDY0MjhhYjk0ZmNjYjRjZTBlZWU3ZWJhMjExY2I4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0FjdGlvblNoZWV0QXNz
aXN0YW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tBY3Rpb25TaGVl
dEFzc2lzdGFudC5tbQpAQCAtMjcsNyArMjcsNyBAQAogI2ltcG9ydCAiV0tBY3Rpb25TaGVldEFz
c2lzdGFudC5oIgogCiAjaW1wb3J0ICJXS0FjdGlvblNoZWV0LmgiCi0jaW1wb3J0ICJXS0ludGVy
YWN0aW9uVmlldy5oIgorI2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCiAjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFRDQy9UQ0MuaD4KICNpbXBvcnQgPERhdGFE
ZXRlY3RvcnNVSS9ERERldGVjdGlvbkNvbnRyb2xsZXIuaD4KQEAgLTUyLDE3ICs1MiwxNiBAQCBT
T0ZUX0xJTktfUFJJVkFURV9GUkFNRVdPUksoRGF0YURldGVjdG9yc1VJKQogU09GVF9MSU5LX0NM
QVNTKERhdGFEZXRlY3RvcnNVSSwgREREZXRlY3Rpb25Db250cm9sbGVyKQogCiBAaW50ZXJmYWNl
IFdLRWxlbWVudEFjdGlvbihQcml2YXRlKQotLSAodm9pZClfcnVuQWN0aW9uV2l0aEVsZW1lbnQ6
KE5TVVJMICopdGFyZ2V0VVJMIGRvY3VtZW50VmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3
IGludGVyYWN0aW9uTG9jYXRpb246KENHUG9pbnQpaW50ZXJhY3Rpb25Mb2NhdGlvbjsKKy0gKHZv
aWQpX3J1bkFjdGlvbldpdGhFbGVtZW50OihOU1VSTCAqKXRhcmdldFVSTCBkb2N1bWVudFZpZXc6
KFdLQ29udGVudFZpZXcgKil2aWV3IGludGVyYWN0aW9uTG9jYXRpb246KENHUG9pbnQpaW50ZXJh
Y3Rpb25Mb2NhdGlvbjsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLQWN0aW9uU2hlZXRBc3Np
c3RhbnQgewogICAgIFJldGFpblB0cjxXS0FjdGlvblNoZWV0PiBfaW50ZXJhY3Rpb25TaGVldDsK
LSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IF9wYWdlOwogICAgIFJldGFpblB0cjxO
U0FycmF5PiBfZWxlbWVudEFjdGlvbnM7Ci0gICAgV0tJbnRlcmFjdGlvblZpZXcgKl92aWV3Owor
ICAgIFdLQ29udGVudFZpZXcgKl92aWV3OwogfQogCi0tIChpZClpbml0V2l0aFZpZXc6KFdLSW50
ZXJhY3Rpb25WaWV3ICopdmlldworLSAoaWQpaW5pdFdpdGhWaWV3OihXS0NvbnRlbnRWaWV3ICop
dmlldwogewogICAgIF92aWV3ID0gdmlldzsKICAgICByZXR1cm4gc2VsZjsKQEAgLTcxLDE1ICs3
MCw5IEBAIC0gKGlkKWluaXRXaXRoVmlldzooV0tJbnRlcmFjdGlvblZpZXcgKil2aWV3CiAtICh2
b2lkKWRlYWxsb2MKIHsKICAgICBbc2VsZiBjbGVhbnVwU2hlZXRdOwotICAgIF9wYWdlID0gbnVs
bHB0cjsKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKLS0gKHZvaWQpc2V0UGFnZTooUGFzc1Jl
ZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4pcGFnZQotewotICAgIF9wYWdlID0gcGFnZTsKLX0K
LQogLSAoVUlWaWV3ICopc3VwZXJ2aWV3Rm9yU2hlZXQKIHsKICAgICBVSVZpZXcgKnZpZXcgPSBb
X3ZpZXcgd2luZG93XTsKQEAgLTEyMiw3ICsxMTUsNyBAQCAtIChDR1JlY3QpaW5pdGlhbFByZXNl
bnRhdGlvblJlY3RJbkhvc3RWaWV3Rm9yU2hlZXQKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJl
dHVybiBDR1JlY3RaZXJvOwogCi0gICAgcmV0dXJuIFtzZWxmIF9wcmVzZW50YXRpb25SZWN0Rm9y
U2hlZXRHaXZlblBvaW50Ol92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24ucG9pbnQgaW5Ib3N0Vmll
dzp2aWV3XTsKKyAgICByZXR1cm4gW3NlbGYgX3ByZXNlbnRhdGlvblJlY3RGb3JTaGVldEdpdmVu
UG9pbnQ6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi0+cG9pbnQgaW5Ib3N0Vmlldzp2aWV3XTsK
IAogfQogCkBAIC0xMzIsOCArMTI1LDggQEAgLSAoQ0dSZWN0KXByZXNlbnRhdGlvblJlY3RJbkhv
c3RWaWV3Rm9yU2hlZXQKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJv
OwogCi0gICAgQ0dSZWN0IGJvdW5kaW5nUmVjdCA9IF92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24u
Ym91bmRzOwotICAgIENHUG9pbnQgZnJvbVBvaW50ID0gX3ZpZXcucG9zaXRpb25JbmZvcm1hdGlv
bi5wb2ludDsKKyAgICBDR1JlY3QgYm91bmRpbmdSZWN0ID0gX3ZpZXcucG9zaXRpb25JbmZvcm1h
dGlvbi0+Ym91bmRzOworICAgIENHUG9pbnQgZnJvbVBvaW50ID0gX3ZpZXcucG9zaXRpb25JbmZv
cm1hdGlvbi0+cG9pbnQ7CiAKICAgICAvLyBGSVhNRTogV2UgbXVzdCBhZGp1c3Qgb3VyIHByZXNl
bnRhdGlvbiBwb2ludCB0byB0YWtlIGludG8gYWNjb3VudCBhIGNoYW5nZSBpbiBkb2N1bWVudCBz
Y2FsZS4KIApAQCAtMTY0LDEwICsxNTcsMTAgQEAgLSAodm9pZClhY3Rpb25TaGVldDooVUlBY3Rp
b25TaGVldCAqKWFjdGlvblNoZWV0IGNsaWNrZWRCdXR0b25BdEluZGV4OihOU0ludGVnZXIKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKF9lbGVtZW50QWN0aW9ucyAmJiBidXR0b25JbmRleCA8
IChOU0ludGVnZXIpW19lbGVtZW50QWN0aW9ucyBjb3VudF0pIHsKLSAgICAgICAgV0tFbGVtZW50
QWN0aW9uSW5mbyogYWN0aW9uSW5mbyA9IFtbV0tFbGVtZW50QWN0aW9uSW5mbyBhbGxvY10gaW5p
dFdpdGhJbmZvOltOU1VSTCBVUkxXaXRoU3RyaW5nOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24u
dXJsXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlv
bi5wb2ludAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6X3ZpZXcucG9zaXRpb25JbmZvcm1h
dGlvbi50aXRsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Q6X3ZpZXcucG9zaXRpb25JbmZv
cm1hdGlvbi5ib3VuZHNdOworICAgICAgICBXS0VsZW1lbnRBY3Rpb25JbmZvKiBhY3Rpb25JbmZv
ID0gW1tXS0VsZW1lbnRBY3Rpb25JbmZvIGFsbG9jXSBpbml0V2l0aEluZm86W05TVVJMIFVSTFdp
dGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi0+dXJsXQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jYXRpb246X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlvbi0+cG9pbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpdGxlOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24tPnRpdGxlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjdDpfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLT5ib3VuZHNdOwog
ICAgICAgICBbW19lbGVtZW50QWN0aW9ucyBvYmplY3RBdEluZGV4OmJ1dHRvbkluZGV4XSBydW5B
Y3Rpb25XaXRoRWxlbWVudEluZm86YWN0aW9uSW5mbyB2aWV3Ol92aWV3XTsKICAgICAgICAgW2Fj
dGlvbkluZm8gcmVsZWFzZV07CiAgICAgfQpAQCAtMTg0LDcgKzE3Nyw3IEBAIC0gKHZvaWQpX2Ny
ZWF0ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25zOihOU0FycmF5ICopYWN0aW9ucyBzaG93TGlua1Rp
dGxlOihCT09MKXNoCiB7CiAgICAgQVNTRVJUKCFfaW50ZXJhY3Rpb25TaGVldCk7CiAKLSAgICBO
U1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZv
cm1hdGlvbi51cmxdOworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmlu
Zzpfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLT51cmxdOwogICAgIE5TU3RyaW5nICp1cmxTY2hl
bWUgPSBbdGFyZ2V0VVJMIHNjaGVtZV07CiAgICAgQk9PTCBpc0phdmFTY3JpcHRVUkwgPSBbdXJs
U2NoZW1lIGxlbmd0aF0gJiYgW3VybFNjaGVtZSBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiamF2
YXNjcmlwdCJdID09IE5TT3JkZXJlZFNhbWU7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVj
ayBpZiBKYXZhc2NyaXB0IGlzIGVuYWJsZWQgaW4gdGhlIHByZWZlcmVuY2VzLgpAQCAtMjA0LDcg
KzE5Nyw3IEBAIC0gKHZvaWQpX2NyZWF0ZVNoZWV0V2l0aEVsZW1lbnRBY3Rpb25zOihOU0FycmF5
ICopYWN0aW9ucyBzaG93TGlua1RpdGxlOihCT09MKXNoCiAgICAgICAgICAgICB0aXRsZUlzVVJM
ID0gWUVTOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHRpdGxlU3RyaW5nID0gX3Zp
ZXcucG9zaXRpb25JbmZvcm1hdGlvbi50aXRsZTsKKyAgICAgICAgdGl0bGVTdHJpbmcgPSBfdmll
dy5wb3NpdGlvbkluZm9ybWF0aW9uLT50aXRsZTsKIAogICAgIGlmIChbdGl0bGVTdHJpbmcgbGVu
Z3RoXSkgewogICAgICAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0VGl0bGU6dGl0bGVTdHJpbmdd
OwpAQCAtMjIwLDE2ICsyMTMsMTYgQEAgLSAodm9pZClfY3JlYXRlU2hlZXRXaXRoRWxlbWVudEFj
dGlvbnM6KE5TQXJyYXkgKilhY3Rpb25zIHNob3dMaW5rVGl0bGU6KEJPT0wpc2gKICAgICAgICAg
W19pbnRlcmFjdGlvblNoZWV0IGFkZEJ1dHRvbldpdGhUaXRsZTpbYWN0aW9uIHRpdGxlXV07CiAK
ICAgICBbX2ludGVyYWN0aW9uU2hlZXQgc2V0Q2FuY2VsQnV0dG9uSW5kZXg6W19pbnRlcmFjdGlv
blNoZWV0IGFkZEJ1dHRvbldpdGhUaXRsZTpXRUJfVUlfU1RSSU5HX0tFWSgiQ2FuY2VsIiwgIkNh
bmNlbCBidXR0b24gbGFiZWwgaW4gYnV0dG9uIGJhciIsICJUaXRsZSBmb3IgQ2FuY2VsIGJ1dHRv
biBsYWJlbCBpbiBidXR0b24gYmFyIildXTsKLSAgICBfcGFnZS0+c3RhcnRJbnRlcmFjdGlvbldp
dGhFbGVtZW50QXRQb3NpdGlvbihfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLnBvaW50KTsKKyAg
ICBfdmlldy5wYWdlLT5zdGFydEludGVyYWN0aW9uV2l0aEVsZW1lbnRBdFBvc2l0aW9uKF92aWV3
LnBvc2l0aW9uSW5mb3JtYXRpb24tPnBvaW50KTsKIH0KIAogLSAodm9pZClzaG93SW1hZ2VTaGVl
dAogewogICAgIEFTU0VSVCghX2ludGVyYWN0aW9uU2hlZXQpOwogCi0gICAgTlNVUkwgKnRhcmdl
dFVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24udXJs
XTsKKyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9z
aXRpb25JbmZvcm1hdGlvbi0+dXJsXTsKICAgICBOU011dGFibGVBcnJheSAqYWN0aW9ucyA9IFtO
U011dGFibGVBcnJheSBhcnJheV07Ci0gICAgaWYgKCFfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9u
LnVybC5pc0VtcHR5KCkpCisgICAgaWYgKCFfdmlldy5wb3NpdGlvbkluZm9ybWF0aW9uLT51cmwu
aXNFbXB0eSgpKQogICAgICAgICBbYWN0aW9ucyBhZGRPYmplY3Q6W1dLRWxlbWVudEFjdGlvbiBz
dGFuZGFyZEVsZW1lbnRBY3Rpb25XaXRoVHlwZTpXS0VsZW1lbnRBY3Rpb25UeXBlT3Blbl1dOwog
ICAgIGlmIChbZ2V0U1NSZWFkaW5nTGlzdENsYXNzKCkgc3VwcG9ydHNVUkw6dGFyZ2V0VVJMXSkK
ICAgICAgICAgW2FjdGlvbnMgYWRkT2JqZWN0OltXS0VsZW1lbnRBY3Rpb24gc3RhbmRhcmRFbGVt
ZW50QWN0aW9uV2l0aFR5cGU6V0tFbGVtZW50QWN0aW9uVHlwZUFkZFRvUmVhZGluZ0xpc3RdXTsK
QEAgLTI1MSw3ICsyNDQsNyBAQCAtICh2b2lkKXNob3dJbWFnZVNoZWV0CiAtICh2b2lkKXNob3dM
aW5rU2hlZXQKIHsKICAgICBBU1NFUlQoIV9pbnRlcmFjdGlvblNoZWV0KTsKLSAgICBOU1VSTCAq
dGFyZ2V0VVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6X3ZpZXcucG9zaXRpb25JbmZvcm1hdGlv
bi51cmxdOworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmll
dy5wb3NpdGlvbkluZm9ybWF0aW9uLT51cmxdOwogICAgIGlmICghdGFyZ2V0VVJMKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTI3NSw3ICsyNjgsNyBAQCAtICh2b2lkKXNob3dMaW5rU2hlZXQKIC0g
KHZvaWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldAogewogICAgIEFTU0VSVCghX2ludGVyYWN0aW9u
U2hlZXQpOwotICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpfdmll
dy5wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07CisgICAgTlNVUkwgKnRhcmdldFVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOl92aWV3LnBvc2l0aW9uSW5mb3JtYXRpb24tPnVybF07CiAgICAgaWYg
KCF0YXJnZXRVUkwpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzI2LDcgKzMxOSw3IEBAIC0gKHZv
aWQpc2hvd0RhdGFEZXRlY3RvcnNTaGVldAogCiAtICh2b2lkKWNsZWFudXBTaGVldAogewotICAg
IF9wYWdlLT5zdG9wSW50ZXJhY3Rpb24oKTsKKyAgICBfdmlldy5wYWdlLT5zdG9wSW50ZXJhY3Rp
b24oKTsKIAogICAgIFtfaW50ZXJhY3Rpb25TaGVldCBkb25lV2l0aFNoZWV0XTsKICAgICBbX2lu
dGVyYWN0aW9uU2hlZXQgc2V0U2hlZXREZWxlZ2F0ZTpuaWxdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaAppbmRleCA0NWFkOGNmMjM2YThlOTM2MmUzOWU3
MjRjNjMxM2EzMWQwZDhhNzdkLi44NjIwZjk1MmE2MTM1ZGE5YmIxMGM3ZGU4ZDNmN2YwYmE2OWRh
YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaApA
QCAtMzEsMTEgKzMxLDI3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIEBjbGFzcyBX
S0NvbnRlbnRWaWV3OwotQGNsYXNzIFdLV2ViVmlld0NvbmZpZ3VyYXRpb247CisKK0BjbGFzcyBV
SVdlYlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXI7CitAY2xhc3MgVUlUYXBHZXN0dXJlUmVj
b2duaXplcjsKK0BjbGFzcyBfVUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
cjsKK0BjbGFzcyBVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50OworQGNsYXNzIFVJV0tTZWxl
Y3Rpb25Bc3Npc3RhbnQ7CitAY2xhc3MgVUlXZWJGb3JtQWNjZXNzb3J5OworQGNsYXNzIFVJV2Vi
U2Nyb2xsVmlldzsKK0BjbGFzcyBfVUlIaWdobGlnaHRWaWV3OworQGNsYXNzIFdLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgRHJhd2luZ0FyZWFQcm94
eTsKK2NsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eTsKIGNsYXNzIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwogY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYkZyYW1l
UHJveHk7CitjbGFzcyBXZWJQYWdlUHJveHk7CitjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKK3N0
cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YTsKK3N0cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9u
QXRQb3NpdGlvbjsKIHN0cnVjdCBXZWJQYWdlQ29uZmlndXJhdGlvbjsKIH0KIApAQCAtNDcsMTQg
KzYzLDQ3IEBAIHN0cnVjdCBXZWJQYWdlQ29uZmlndXJhdGlvbjsKIC0gKFJldGFpblB0cjxDR0lt
YWdlUmVmPil0YWtlVmlld1NuYXBzaG90Rm9yQ29udGVudFZpZXc6KFdLQ29udGVudFZpZXcgKilj
b250ZW50VmlldzsKIEBlbmQKIAotV0tfQVBJX0NMQVNTCi1AaW50ZXJmYWNlIFdLQ29udGVudFZp
ZXcgOiBVSVZpZXcKK0BpbnRlcmZhY2UgV0tDb250ZW50VmlldyA6IFVJVmlldyB7CitAcHJpdmF0
ZQorICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gX3BhZ2U7CisKKyAgICBSZXRhaW5Q
dHI8VUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyPiBfdG91Y2hFdmVudEdlc3R1cmVS
ZWNvZ25pemVyOworICAgIEJPT0wgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91c2x5Owor
ICAgIHVuc2lnbmVkIF9uYXRpdmVXZWJUb3VjaEV2ZW50VW5pcXVlSWRCZWluZ1NlbnRTeW5jaHJv
bm91c2x5OworCisgICAgUmV0YWluUHRyPFVJVGFwR2VzdHVyZVJlY29nbml6ZXI+IF9zaW5nbGVU
YXBHZXN0dXJlUmVjb2duaXplcjsKKyAgICBSZXRhaW5QdHI8X1VJV2ViSGlnaGxpZ2h0TG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXI+IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXpl
cjsKKyAgICBSZXRhaW5QdHI8VUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcj4gX2xvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyOworICAgIFJldGFpblB0cjxVSVRhcEdlc3R1cmVSZWNvZ25pemVy
PiBfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXI7CisgICAgUmV0YWluUHRyPFVJVGFwR2VzdHVy
ZVJlY29nbml6ZXI+IF90d29GaW5nZXJEb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcjsKKyAgICBS
ZXRhaW5QdHI8VUlQYW5HZXN0dXJlUmVjb2duaXplcj4gX3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNv
Z25pemVyOworCisgICAgUmV0YWluUHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQ+IF90
ZXh0U2VsZWN0aW9uQXNzaXN0YW50OworICAgIFJldGFpblB0cjxVSVdLU2VsZWN0aW9uQXNzaXN0
YW50PiBfd2ViU2VsZWN0aW9uQXNzaXN0YW50OworCisgICAgVUlUZXh0SW5wdXRUcmFpdHMgKl90
cmFpdHM7CisgICAgQk9PTCBfaXNFZGl0YWJsZTsKKyAgICBVSVdlYkZvcm1BY2Nlc3NvcnkgKl9h
Y2Nlc3Nvcnk7CisgICAgaWQgPFVJVGV4dElucHV0RGVsZWdhdGU+IF9pbnB1dERlbGVnYXRlOwor
ICAgIEJPT0wgX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOworCisgICAgX193ZWFrIFVJV2ViU2Ny
b2xsVmlldyAqX3Njcm9sbFZpZXc7CisKKyAgICBSZXRhaW5QdHI8X1VJSGlnaGxpZ2h0Vmlldz4g
X2hpZ2hsaWdodFZpZXc7CisgICAgdWludDY0X3QgX2xhdGVzdFRhcEhpZ2hsaWdodElEOworICAg
IEJPT0wgX2lzVGFwSGlnaGxpZ2h0SURWYWxpZDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0
OjpXS0F1dG9Db3JyZWN0aW9uRGF0YT4gX2F1dG9jb3JyZWN0aW9uRGF0YTsKKyAgICBSZXRhaW5Q
dHI8TlNTdHJpbmc+IF9tYXJrZWRUZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6Oklu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uPiBfcG9zaXRpb25JbmZvcm1hdGlvbjsKKyAg
ICBCT09MIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb247CisgICAgUmV0YWluUHRyPFdLQWN0
aW9uU2hlZXRBc3Npc3RhbnQ+IF9hY3Rpb25TaGVldEFzc2lzdGFudDsKK30KIAogQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKmJyb3dz
aW5nQ29udGV4dENvbnRyb2xsZXI7CiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24pIGlk
IDxXS0NvbnRlbnRWaWV3RGVsZWdhdGU+IGRlbGVnYXRlOwogCi1AcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIFdLUGFnZVJlZiBfcGFnZVJlZjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSkgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2U7CiBAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgaXNBc3Npc3RpbmdOb2RlOwogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbnRleHQ6KFdlYktpdDo6V2ViQ29udGV4dCYpY29u
dGV4dCBjb25maWd1cmF0aW9uOihXZWJLaXQ6OldlYlBhZ2VDb25maWd1cmF0aW9uKXdlYlBhZ2VD
b25maWd1cmF0aW9uOwpAQCAtNjksNCArMTE4LDE2IEBAIFdLX0FQSV9DTEFTUwogLSAodm9pZCl3
aWxsU3RhcnRVc2VyVHJpZ2dlcmVkU2Nyb2xsOwogLSAodm9pZCl3aWxsU3RhcnRVc2VyVHJpZ2dl
cmVkWm9vbTsKIAorLSAoc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eT4p
X2NyZWF0ZURyYXdpbmdBcmVhUHJveHk7CistICh2b2lkKV9wcm9jZXNzRGlkRXhpdDsKKy0gKHZv
aWQpX2RpZFJlbGF1bmNoUHJvY2VzczsKKy0gKHZvaWQpX3NldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdSb290TGF5ZXI6KENBTGF5ZXIgKilyb290TGF5ZXI7CisKKy0gKHZvaWQpX2RpZENvbW1pdExv
YWRGb3JNYWluRnJhbWU7CistICh2b2lkKV9kaWRDb21taXRMYXllclRyZWU6KGNvbnN0IFdlYktp
dDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZVRyYW5zYWN0aW9uOworCist
ICh2b2lkKV9kZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOihXZWJL
aXQ6OldlYlNlY3VyaXR5T3JpZ2luJilvcmlnaW4gZnJhbWU6KFdlYktpdDo6V2ViRnJhbWVQcm94
eSYpZnJhbWUgcmVxdWVzdDooV2ViS2l0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJv
eHkmKXBlcm1pc3Npb25SZXF1ZXN0OworCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pX3Rha2VW
aWV3U25hcHNob3Q7CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlldy5tbQppbmRleCA3NGJiZGJhYWUxOGViNTZkMWNiMGQ3NDk1YzQ5MDU2OGI2MTVh
NzAxLi43NDk3Y2VmMjM5ODA5NDgzODc3NzMzYTBlNDA2YjJlYmRhMDNhZmYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0yNCw3ICsyNCw3
IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXS0NvbnRlbnRWaWV3SW50
ZXJuYWwuaCIKKyNpbXBvcnQgIldLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oIgogCiAjaW1wb3J0
ICJJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbi5oIgogI2ltcG9ydCAiUGFnZUNsaWVu
dEltcGxJT1MuaCIKQEAgLTM0LDcgKzM0LDYgQEAKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0
Q29udHJvbGxlckludGVybmFsLmgiCiAjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dEdyb3VwUHJp
dmF0ZS5oIgogI2ltcG9ydCAiV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmgiCi0jaW1wb3J0ICJX
S0ludGVyYWN0aW9uVmlldy5oIgogI2ltcG9ydCAiV0tQcmVmZXJlbmNlc0ludGVybmFsLmgiCiAj
aW1wb3J0ICJXS1Byb2Nlc3NHcm91cFByaXZhdGUuaCIKICNpbXBvcnQgIldLUHJvY2Vzc1Bvb2xJ
bnRlcm5hbC5oIgpAQCAtNjcsNyArNjYsNiBAQCBAaW1wbGVtZW50YXRpb24gV0tDb250ZW50Vmll
dyB7CiAgICAgUmV0YWluUHRyPFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlcj4gX2Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXI7CiAKICAgICBSZXRhaW5QdHI8VUlWaWV3PiBfcm9vdENvbnRlbnRW
aWV3OwotICAgIFJldGFpblB0cjxXS0ludGVyYWN0aW9uVmlldz4gX2ludGVyYWN0aW9uVmlldzsK
IH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb250ZXh0
OihXZWJLaXQ6OldlYkNvbnRleHQmKWNvbnRleHQgY29uZmlndXJhdGlvbjooV2ViS2l0OjpXZWJQ
YWdlQ29uZmlndXJhdGlvbil3ZWJQYWdlQ29uZmlndXJhdGlvbgpAQCAtOTMsOSArOTEsOCBAQCAt
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbnRleHQ6KFdlYktp
dDo6V2ViQ29udGV4dCYpY29udGV4dAogCiAgICAgW3NlbGYgYWRkU3Vidmlldzpfcm9vdENvbnRl
bnRWaWV3LmdldCgpXTsKIAotICAgIF9pbnRlcmFjdGlvblZpZXcgPSBhZG9wdE5TKFtbV0tJbnRl
cmFjdGlvblZpZXcgYWxsb2NdIGluaXRdKTsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBzZXRQYWdl
Ol9wYWdlXTsKLSAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9pbnRlcmFjdGlvblZpZXcuZ2V0KCldOwor
ICAgIFtzZWxmIHNldHVwSW50ZXJhY3Rpb25dOworICAgIFtzZWxmIHNldFVzZXJJbnRlcmFjdGlv
bkVuYWJsZWQ6WUVTXTsKIAogICAgIHNlbGYubGF5ZXIuaGl0VGVzdHNBc09wYXF1ZSA9IFlFUzsK
IApAQCAtMTA0LDYgKzEwMSw4IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1Jl
Y3QpZnJhbWUgY29udGV4dDooV2ViS2l0OjpXZWJDb250ZXh0Jiljb250ZXh0CiAKIC0gKHZvaWQp
ZGVhbGxvYwogeworICAgIFtzZWxmIGNsZWFudXBJbnRlcmFjdGlvbl07CisKICAgICBfcGFnZS0+
Y2xvc2UoKTsKIAogICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3VudC0tOwpA
QCAtMTExLDYgKzExMCwxMSBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKKy0gKFdlYlBhZ2VQcm94eSopcGFnZQoreworICAgIHJldHVybiBfcGFnZS5nZXQoKTsK
K30KKwogLSAodm9pZCl3aWxsTW92ZVRvV2luZG93OihVSVdpbmRvdyAqKW5ld1dpbmRvdwogewog
ICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpkZWZhdWx0Q2VudGVyID0gW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdOwpAQCAtMTQ1LDcgKzE0OSw3IEBAIC0gKFdLUGFnZVJlZilf
cGFnZVJlZgogCiAtIChCT09MKWlzQXNzaXN0aW5nTm9kZQogewotICAgIHJldHVybiBbX2ludGVy
YWN0aW9uVmlldyBpc0VkaXRhYmxlXTsKKyAgICByZXR1cm4gW3NlbGYgaXNFZGl0YWJsZV07CiB9
CiAKIC0gKHZvaWQpZGlkVXBkYXRlVmlzaWJsZVJlY3Q6KENHUmVjdCl2aXNpYmxlUmVjdCB1bm9i
c2N1cmVkUmVjdDooQ0dSZWN0KXVub2JzY3VyZWRSZWN0IHNjYWxlOihDR0Zsb2F0KXNjYWxlCkBA
IC0xOTEsMjkgKzE5NSwyOSBAQCAtICh2b2lkKXNldE1pbmltdW1MYXlvdXRTaXplOihDR1NpemUp
c2l6ZQogLSAodm9pZClkaWRGaW5pc2hTY3JvbGxpbmcKIHsKICAgICBbc2VsZiBfdXBkYXRlRml4
ZWRQb3NpdGlvblJlY3RdOwotICAgIFtfaW50ZXJhY3Rpb25WaWV3IF9kaWRFbmRTY3JvbGxpbmdP
clpvb21pbmddOworICAgIFtzZWxmIF9kaWRFbmRTY3JvbGxpbmdPclpvb21pbmddOwogfQogCiAt
ICh2b2lkKXdpbGxTdGFydFpvb21PclNjcm9sbAogewotICAgIFtfaW50ZXJhY3Rpb25WaWV3IF93
aWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmddOworICAgIFtzZWxmIF93aWxsU3RhcnRTY3JvbGxp
bmdPclpvb21pbmddOwogfQogCiAtICh2b2lkKXdpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3JvbGwK
IHsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfd2lsbFN0YXJ0VXNlclRyaWdnZXJlZFNjcm9sbGlu
Z09yWm9vbWluZ107CisgICAgW3NlbGYgX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3JvbGxpbmdP
clpvb21pbmddOwogfQogCiAtICh2b2lkKXdpbGxTdGFydFVzZXJUcmlnZ2VyZWRab29tCiB7Ci0g
ICAgW19pbnRlcmFjdGlvblZpZXcgX3dpbGxTdGFydFVzZXJUcmlnZ2VyZWRTY3JvbGxpbmdPclpv
b21pbmddOworICAgIFtzZWxmIF93aWxsU3RhcnRVc2VyVHJpZ2dlcmVkU2Nyb2xsaW5nT3Jab29t
aW5nXTsKICAgICBfcGFnZS0+d2lsbFN0YXJ0VXNlclRyaWdnZXJlZFpvb21pbmcoKTsKIH0KIAog
LSAodm9pZClkaWRab29tVG9TY2FsZTooQ0dGbG9hdClzY2FsZQogewogICAgIF9wYWdlLT5kaWRG
aW5pc2hab29taW5nKHNjYWxlKTsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfZGlkRW5kU2Nyb2xs
aW5nT3Jab29taW5nXTsKKyAgICBbc2VsZiBfZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nXTsKIH0K
IAogI3ByYWdtYSBtYXJrIEludGVybmFsCkBAIC0yNTMsNyArMjU3LDggQEAgLSAodm9pZClfZGlk
Q29tbWl0TG9hZEZvck1haW5GcmFtZQogewogICAgIGlmIChbX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudFZpZXdEaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lOild
KQogICAgICAgICBbX2RlbGVnYXRlIGNvbnRlbnRWaWV3RGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZTpzZWxmXTsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfc3RvcEFzc2lzdGluZ05vZGVdOworCisg
ICAgW3NlbGYgX3N0b3BBc3Npc3RpbmdOb2RlXTsKIH0KIAogLSAodm9pZClfZGlkQ29tbWl0TGF5
ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRy
ZWVUcmFuc2FjdGlvbgpAQCAtMjYxLDU5ICsyNjYsMTcgQEAgLSAodm9pZClfZGlkQ29tbWl0TGF5
ZXJUcmVlOihjb25zdCBXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJilsYXllclRy
ZWUKICAgICBDR1NpemUgY29udGVudHNTaXplID0gbGF5ZXJUcmVlVHJhbnNhY3Rpb24uY29udGVu
dHNTaXplKCk7CiAKICAgICBbc2VsZiBzZXRCb3VuZHM6e0NHUG9pbnRaZXJvLCBjb250ZW50c1Np
emV9XTsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIGNv
bnRlbnRzU2l6ZS53aWR0aCwgY29udGVudHNTaXplLmhlaWdodCldOwogICAgIFtfcm9vdENvbnRl
bnRWaWV3IHNldEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgY29udGVudHNTaXplLndpZHRoLCBjb250
ZW50c1NpemUuaGVpZ2h0KV07CiAKICAgICBpZiAoW19kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGNvbnRlbnRWaWV3OmRpZENvbW1pdExheWVyVHJlZTopXSkKICAgICAgICAg
W19kZWxlZ2F0ZSBjb250ZW50VmlldzpzZWxmIGRpZENvbW1pdExheWVyVHJlZTpsYXllclRyZWVU
cmFuc2FjdGlvbl07CiB9CiAKLS0gKHZvaWQpX3dlYlRvdWNoRXZlbnQ6KGNvbnN0IFdlYktpdDo6
TmF0aXZlV2ViVG91Y2hFdmVudCYpdG91Y2hFdmVudCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOihC
T09MKXByZXZlbnRzTmF0aXZlR2VzdHVyZQotewotICAgIFtfaW50ZXJhY3Rpb25WaWV3IF93ZWJU
b3VjaEV2ZW50OnRvdWNoRXZlbnQgcHJldmVudHNOYXRpdmVHZXN0dXJlczpwcmV2ZW50c05hdGl2
ZUdlc3R1cmVdOwotfQotCi0tICh2b2lkKV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1
aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IENvbG9yJiljb2xvciBxdWFkczooY29uc3Qg
VmVjdG9yPEZsb2F0UXVhZD4mKWhpZ2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3Qg
SW50U2l6ZSYpdG9wTGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgSW50U2l6ZSYpdG9w
UmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgSW50U2l6ZSYpYm90dG9tTGVmdFJh
ZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgSW50U2l6ZSYpYm90dG9tUmlnaHRSYWRpdXMK
LXsKLSAgICBbX2ludGVyYWN0aW9uVmlldyBfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9yUmVxdWVzdDpy
ZXF1ZXN0SUQgY29sb3I6Y29sb3IgcXVhZHM6aGlnaGxpZ2h0ZWRRdWFkcyB0b3BMZWZ0UmFkaXVz
OnRvcExlZnRSYWRpdXMgdG9wUmlnaHRSYWRpdXM6dG9wUmlnaHRSYWRpdXMgYm90dG9tTGVmdFJh
ZGl1czpib3R0b21MZWZ0UmFkaXVzIGJvdHRvbVJpZ2h0UmFkaXVzOmJvdHRvbVJpZ2h0UmFkaXVz
XTsKLX0KLQogLSAodm9pZClfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcjooQ0FM
YXllciAqKXJvb3RMYXllcgogewogICAgIFtbX3Jvb3RDb250ZW50VmlldyBsYXllcl0gc2V0U3Vi
bGF5ZXJzOkBbcm9vdExheWVyXV07CiB9CiAKLS8vIEZJWE1FOiBjaGFuZ2UgdGhlIG5hbWUuIExl
YXZlIGl0IGZvciBub3cgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXIgdG8gdGhlIFVJS2l0IGlt
cGxlbWVudGF0aW9uLgotLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCi17Ci0gICAgW19pbnRl
cmFjdGlvblZpZXcgX3N0YXJ0QXNzaXN0aW5nTm9kZV07Ci19Ci0KLS0gKHZvaWQpX3N0b3BBc3Np
c3RpbmdOb2RlCi17Ci0gICAgW19pbnRlcmFjdGlvblZpZXcgX3N0b3BBc3Npc3RpbmdOb2RlXTsK
LX0KLQotLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAotewotICAgIFtfaW50ZXJhY3Rpb25WaWV3
IF9zZWxlY3Rpb25DaGFuZ2VkXTsKLX0KLQotLSAodm9pZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rp
b25XaXRoVG91Y2g6KFdLU2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXS1NlbGVjdGlv
bkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtU
aHJlc2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkCi17Ci0gICAgW19pbnRlcmFjdGlvblZp
ZXcgX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOnRvdWNoIHdpdGhGbGFnczpmbGFn
cyBncm93VGhyZXNob2xkOmdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVz
aG9sZF07Ci19Ci0KLS0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRo
ZUV2ZW50IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50Ci17Ci0gICAgcmV0dXJuIFtfaW50
ZXJhY3Rpb25WaWV3IF9pbnRlcnByZXRLZXlFdmVudDp0aGVFdmVudCBpc0NoYXJFdmVudDppc0No
YXJFdmVudF07Ci19Ci0KLS0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNv
bnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvCi17Ci0gICAgW19pbnRl
cmFjdGlvblZpZXcgX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6aW5mb107Ci19Ci0KIC0g
KHZvaWQpX2RlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46KFdlYlNl
Y3VyaXR5T3JpZ2luJilvcmlnaW4gZnJhbWU6KFdlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6
KEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eSYpcGVybWlzc2lvblJlcXVlc3QKIHsK
ICAgICAvLyBGSVhNRTogVGhlIGxpbmUgYmVsb3cgaXMgY29tbWVudGVkIG91dCBzaW5jZSB3cmFw
cGVyKFdlYkNvbnRleHQmKSBub3cgcmV0dXJucyBhIFdLUHJvY2Vzc1Bvb2wuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44YWQ4ZmY2M2I4MWYzNjZkZTIxMzFlMjI5NDRmZWNjYTljOTZlMWYwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24uaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJXS0NvbnRlbnRWaWV3LmgiCisKKyNpbXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCisjaW1w
b3J0IDxVSUtpdC9VSVRleHRJbnB1dF9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSVZpZXcu
aD4KKyNpbXBvcnQgPFVJS2l0L1VJV2ViRm9ybUFjY2Vzc29yeS5oPgorI2ltcG9ydCA8VUlLaXQv
VUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyLmg+CisjaW1wb3J0IDxVSUtpdC9VSVdL
U2VsZWN0aW9uQXNzaXN0YW50Lmg+CisjaW1wb3J0IDxVSUtpdC9VSVdLVGV4dEludGVyYWN0aW9u
QXNzaXN0YW50Lmg+CisjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgorI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIENvbG9yOworY2xhc3MgRmxvYXRRdWFkOworY2xhc3MgSW50U2l6ZTsKK30KKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBOYXRpdmVXZWJUb3VjaEV2ZW50OworY2xhc3MgV2Vi
UGFnZVByb3h5Oworc3RydWN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uOworfQor
CitAY2xhc3MgV2ViSU9TRXZlbnQ7CisKK3R5cGVkZWYgdm9pZCAoXlVJV0tBdXRvY29ycmVjdGlv
bkNvbXBsZXRpb25IYW5kbGVyKShVSVdLQXV0b2NvcnJlY3Rpb25SZWN0cyAqcmVjdHNGb3JJbnB1
dCk7Cit0eXBlZGVmIHZvaWQgKF5VSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlcikoVUlX
S0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqYXV0b2NvcnJlY3Rpb25Db250ZXh0KTsKKworc3RydWN0
IFdlYktpdDo6V0tBdXRvQ29ycmVjdGlvbkRhdGEgeworICAgIFN0cmluZyBmb250TmFtZTsKKyAg
ICBDR0Zsb2F0IGZvbnRTaXplOworICAgIHVpbnQ2NF90IGZvbnRUcmFpdHM7CisgICAgQ0dSZWN0
IHRleHRGaXJzdFJlY3Q7CisgICAgQ0dSZWN0IHRleHRMYXN0UmVjdDsKKyAgICBVSVdLQXV0b2Nv
cnJlY3Rpb25Db21wbGV0aW9uSGFuZGxlciBhdXRvY29ycmVjdGlvbkhhbmRsZXI7CisgICAgVUlX
S0F1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIgYXV0b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxl
cjsKK307CisKK0BpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvbikgPFVJR2Vz
dHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVy
RGVsZWdhdGUsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUs
IFVJV0tJbnRlcmFjdGlvblZpZXdQcm90b2NvbD4KKworQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5KSBCT09MIGlzRWRpdGFibGU7CisKKy0gKHZvaWQpc2V0dXBJbnRlcmFjdGlvbjsKKy0g
KHZvaWQpY2xlYW51cEludGVyYWN0aW9uOworCistICh2b2lkKV93ZWJUb3VjaEV2ZW50Oihjb25z
dCBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQmKXRvdWNoRXZlbnQgcHJldmVudHNOYXRpdmVH
ZXN0dXJlczooQk9PTClwcmV2ZW50c0RlZmF1bHQ7CistICh2b2lkKV9kaWRHZXRUYXBIaWdobGln
aHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IFdlYkNvcmU6OkNv
bG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4mKWhpZ2hs
aWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wTGVm
dFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wUmlnaHRS
YWRpdXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tTGVm
dFJhZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9t
UmlnaHRSYWRpdXM7CisKKy0gKHZvaWQpX3N0YXJ0QXNzaXN0aW5nTm9kZTsKKy0gKHZvaWQpX3N0
b3BBc3Npc3RpbmdOb2RlOworLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZDsKKy0gKEJPT0wpX2lu
dGVycHJldEtleUV2ZW50OihXZWJJT1NFdmVudCAqKXRoZUV2ZW50IGlzQ2hhckV2ZW50OihCT09M
KWlzQ2hhckV2ZW50OworLSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTooY29u
c3QgV2ViS2l0OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpaW5mbzsKKy0gKHZv
aWQpX2F0dGVtcHRDbGlja0F0TG9jYXRpb246KENHUG9pbnQpbG9jYXRpb247CistICh2b2lkKV91
cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uOworLSAodm9pZClfcGVyZm9ybUFjdGlvbjooV2ViS2l0
OjpXS1NoZWV0QWN0aW9ucylhY3Rpb247CistICh2b2lkKV93aWxsU3RhcnRTY3JvbGxpbmdPclpv
b21pbmc7CistICh2b2lkKV93aWxsU3RhcnRVc2VyVHJpZ2dlcmVkU2Nyb2xsaW5nT3Jab29taW5n
OworLSAodm9pZClfZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nOworLSAodm9pZClfZGlkVXBkYXRl
QmxvY2tTZWxlY3Rpb25XaXRoVG91Y2g6KFdlYktpdDo6V0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3
aXRoRmxhZ3M6KFdlYktpdDo6V0tTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOihD
R0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOihDR0Zsb2F0KXNocmlua1RocmVz
aG9sZDsKKworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBXZWJLaXQ6OkludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uKiBwb3NpdGlvbkluZm9ybWF0aW9uOworQHByb3BlcnR5
IChyZWFkb25seSwgbm9uYXRvbWljKSBXZWJLaXQ6OldLQXV0b0NvcnJlY3Rpb25EYXRhICphdXRv
Y29ycmVjdGlvbkRhdGE7CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODk3NjAz
OTFkNjA5NWZjMDRiMzEyZDEzODQ3MWRlMzgzNzI2ZGJkNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBA
IC0wLDAgKzEsMTk3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgiCisKKyNpbXBvcnQgIkludGVyYWN0
aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCisjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2
ZW50LmgiCisjaW1wb3J0ICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCisjaW1wb3J0ICJXZWJFdmVu
dC5oIgorI2ltcG9ydCAiV2ViSU9TRXZlbnRGYWN0b3J5LmgiCisjaW1wb3J0ICJXZWJQYWdlTWVz
c2FnZXMuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCAiV0tBY3Rpb25T
aGVldEFzc2lzdGFudC5oIgorI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8VUlLaXQvX1VJSGlnaGxpZ2h0Vmlldy5oPgorI2ltcG9ydCA8
VUlLaXQvX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuaD4KKyNpbXBv
cnQgPFVJS2l0L1VJRm9udF9Qcml2YXRlLmg+CisjaW1wb3J0IDxVSUtpdC9VSUdlc3R1cmVSZWNv
Z25pemVyX1ByaXZhdGUuaD4KKyNpbXBvcnQgPFVJS2l0L1VJS2V5Ym9hcmRJbXBsLmg+CisjaW1w
b3J0IDxVSUtpdC9VSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyX1ByaXZhdGUuaD4KKyNpbXBv
cnQgPFVJS2l0L1VJVGFwR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlL
aXQvVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnRfUHJpdmF0ZS5oPgorI2ltcG9ydCA8VUlLaXQv
VUlXZWJEb2N1bWVudFZpZXcuaD4gLy8gRklYTUU6IHNob3VsZCBub3QgaW5jbHVkZSB0aGlzIGhl
YWRlci4KKyNpbXBvcnQgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRR
dWFkLmg+CisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1NvZnRMaW5raW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkV2ZW50Lmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViU2VsZWN0aW9uUmVjdC5oPiAvLyBGSVhNRTogV0syIHNob3VsZCBub3QgaW5j
bHVkZSBXZWJLaXQgaGVhZGVycyEKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworU09GVF9M
SU5LX1BSSVZBVEVfRlJBTUVXT1JLKERhdGFEZXRlY3RvcnNVSSkKK1NPRlRfTElOS19DTEFTUyhE
YXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxlcikKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgY29uc3QgZmxvYXQg
aGlnaGxpZ2h0RGVsYXkgPSAwLjEyOworc3RhdGljIGNvbnN0IGZsb2F0IHRhcEFuZEhvbGREZWxh
eSAgPSAwLjc1OworCitAaW50ZXJmYWNlIFdLVGV4dFJhbmdlIDogVUlUZXh0UmFuZ2UgeworICAg
IENHUmVjdCBfc3RhcnRSZWN0OworICAgIENHUmVjdCBfZW5kUmVjdDsKKyAgICBCT09MIF9pc05v
bmU7CisgICAgQk9PTCBfaXNSYW5nZTsKKyAgICBCT09MIF9pc0VkaXRhYmxlOworICAgIE5TQXJy
YXkgKl9zZWxlY3Rpb25SZWN0czsKKyAgICBOU1VJbnRlZ2VyIF9zZWxlY3RlZFRleHRMZW5ndGg7
Cit9CitAcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IHN0YXJ0UmVjdDsKK0Bwcm9wZXJ0eSAo
bm9uYXRvbWljKSBDR1JlY3QgZW5kUmVjdDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGlz
Tm9uZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGlzUmFuZ2U7CitAcHJvcGVydHkgKG5v
bmF0b21pYykgQk9PTCBpc0VkaXRhYmxlOworQHByb3BlcnR5IChub25hdG9taWMpIE5TVUludGVn
ZXIgc2VsZWN0ZWRUZXh0TGVuZ3RoOworQHByb3BlcnR5IChjb3B5LCBub25hdG9taWMpIE5TQXJy
YXkgKnNlbGVjdGlvblJlY3RzOworCisrIChXS1RleHRSYW5nZSAqKXRleHRSYW5nZVdpdGhTdGF0
ZTooQk9PTClpc05vbmUgaXNSYW5nZTooQk9PTClpc1JhbmdlIGlzRWRpdGFibGU6KEJPT0wpaXNF
ZGl0YWJsZSBzdGFydFJlY3Q6KENHUmVjdClzdGFydFJlY3QgZW5kUmVjdDooQ0dSZWN0KWVuZFJl
Y3Qgc2VsZWN0aW9uUmVjdHM6KE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0cyBzZWxlY3RlZFRleHRM
ZW5ndGg6KE5TVUludGVnZXIpc2VsZWN0ZWRUZXh0TGVuZ3RoOworCitAZW5kCisKK0BpbnRlcmZh
Y2UgV0tUZXh0UG9zaXRpb24gOiBVSVRleHRQb3NpdGlvbiB7CisgICAgQ0dSZWN0IF9wb3NpdGlv
blJlY3Q7Cit9CisKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgcG9zaXRpb25SZWN0Owor
CisrIChXS1RleHRQb3NpdGlvbiAqKXRleHRQb3NpdGlvbldpdGhSZWN0OihDR1JlY3QpcG9zaXRp
b25SZWN0OworCitAZW5kCisKK0BpbnRlcmZhY2UgV0tUZXh0U2VsZWN0aW9uUmVjdCA6IFVJVGV4
dFNlbGVjdGlvblJlY3QKKworQHByb3BlcnR5IChub25hdG9taWMsIHJldGFpbikgV2ViU2VsZWN0
aW9uUmVjdCAqd2ViUmVjdDsKKworKyAoTlNBcnJheSAqKXRleHRTZWxlY3Rpb25SZWN0c1dpdGhX
ZWJSZWN0czooTlNBcnJheSAqKXdlYlJlY3RzOworCitAZW5kCisKK0BpbnRlcmZhY2UgV0tBdXRv
Y29ycmVjdGlvblJlY3RzIDogVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgeworICAgIENHUmVjdCBf
Zmlyc3RSZWN0OworICAgIENHUmVjdCBfbGFzdFJlY3Q7Cit9CisrIChXS0F1dG9jb3JyZWN0aW9u
UmVjdHMgKilhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOihDR1JlY3QpZmlyc3RSZWN0IGxh
c3RSZWN0OihDR1JlY3QpbGFzdFJlY3Q7CisKK0BlbmQKKworQGludGVyZmFjZSBXS0F1dG9jb3Jy
ZWN0aW9uQ29udGV4dCA6IFVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgeworICAgIE5TU3RyaW5n
ICpfY29udGV4dEJlZm9yZVNlbGVjdGlvbjsKKyAgICBOU1N0cmluZyAqX3NlbGVjdGVkVGV4dDsK
KyAgICBOU1N0cmluZyAqX21hcmtlZFRleHQ7CisgICAgTlNTdHJpbmcgKl9jb250ZXh0QWZ0ZXJT
ZWxlY3Rpb247CisgICAgTlNSYW5nZSBfcmFuZ2VJbk1hcmtlZFRleHQ7Cit9CisKKysgKFdLQXV0
b2NvcnJlY3Rpb25Db250ZXh0ICopYXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aERhdGE6KE5TU3Ry
aW5nICopYmVmb3JlVGV4dCBtYXJrZWRUZXh0OihOU1N0cmluZyAqKW1hcmtlZFRleHQgc2VsZWN0
ZWRUZXh0OihOU1N0cmluZyAqKXNlbGVjdGVkVGV4dCBhZnRlclRleHQ6KE5TU3RyaW5nICopYWZ0
ZXJUZXh0IHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQ6KE5TUmFuZ2UpcmFuZ2U7CitAZW5kCisK
K0BpbnRlcmZhY2UgVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKFVJVGV4dEludGVyYWN0aW9u
QXNzaXN0YW50X0ludGVybmFsKQorLy8gRklYTUU6IHRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgZnJv
bSB0aGUgaW50ZXJuYWwgaGVhZGVyIHRvIHRoZSBwcml2YXRlLgorLSAoaWQpaW5pdFdpdGhWaWV3
OihVSVJlc3BvbmRlciA8VUlUZXh0SW5wdXQ+ICopdmlldzsKKy0gKHZvaWQpc2VsZWN0V29yZDsK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24pCisK
Ky8vQHN5bnRoZXNpemUgaW5wdXREZWxlZ2F0ZSA9IF9pbnB1dERlbGVnYXRlOworCistICh2b2lk
KXNldHVwSW50ZXJhY3Rpb24KK3sKKyAgICBfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyID0g
YWRvcHROUyhbW1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdp
dGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKF93ZWJUb3VjaEV2ZW50c1JlY29nbml6ZWQ6
KSB0b3VjaERlbGVnYXRlOnNlbGZdKTsKKyAgICBbX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXpl
ciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdG91
Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyLmdldCgpXTsKKworICAgIF9zaW5nbGVUYXBHZXN0dXJl
UmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVRhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0
V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NpbmdsZVRhcFJlY29nbml6ZWQ6KV0p
OworICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgW3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKKworICAgIF9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tV
SVRhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpA
c2VsZWN0b3IoX2RvdWJsZVRhcFJlY29nbml6ZWQ6KV0pOworICAgIFtfZG91YmxlVGFwR2VzdHVy
ZVJlY29nbml6ZXIgc2V0TnVtYmVyT2ZUYXBzUmVxdWlyZWQ6Ml07CisgICAgW19kb3VibGVUYXBH
ZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbc2VsZiBhZGRHZXN0dXJl
UmVjb2duaXplcjpfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworICAgIFtfc2lu
Z2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgcmVxdWlyZU90aGVyR2VzdHVyZVRvRmFpbDpfZG91Ymxl
VGFwR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOworCisgICAgX2hpZ2hsaWdodExvbmdQcmVzc0dl
c3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhbW19VSVdlYkhpZ2hsaWdodExvbmdQcmVzc0dlc3R1
cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Io
X2hpZ2hsaWdodExvbmdQcmVzc1JlY29nbml6ZWQ6KV0pOworICAgIFtfaGlnaGxpZ2h0TG9uZ1By
ZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsYXk6aGlnaGxpZ2h0RGVsYXldOworICAgIFtfaGln
aGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
W3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNv
Z25pemVyLmdldCgpXTsKKworICAgIF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0
TlMoW1tVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpz
ZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2xvbmdQcmVzc1JlY29nbml6ZWQ6KV0pOworICAgIFtfbG9u
Z1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsYXk6dGFwQW5kSG9sZERlbGF5XTsKKyAgICBb
X2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOworICAgIFtzZWxm
IGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKV07
CisKKyAgICBfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9wdE5TKFtbVUlQYW5H
ZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVj
dG9yKF90d29GaW5nZXJQYW5SZWNvZ25pemVkOildKTsKKyAgICBbX3R3b0ZpbmdlclBhbkdlc3R1
cmVSZWNvZ25pemVyIHNldE1pbmltdW1OdW1iZXJPZlRvdWNoZXM6Ml07CisgICAgW190d29GaW5n
ZXJQYW5HZXN0dXJlUmVjb2duaXplciBzZXRNYXhpbXVtTnVtYmVyT2ZUb3VjaGVzOjJdOworICAg
IFtfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07CisgICAg
W3NlbGYgYWRkR2VzdHVyZVJlY29nbml6ZXI6X3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25pemVy
LmdldCgpXTsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3Jlc2V0U2hvd2luZ1RleHRTdHlsZTop
IG5hbWU6VUlNZW51Q29udHJvbGxlckRpZEhpZGVNZW51Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxd
OworICAgIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9ucyA9IE5POworCisgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHdlIGdldCBub3RpZmllZCB0aGF0IGxvYWRpbmcgaGFz
IGNvbXBsZXRlZC4KKyAgICBbc2VsZiB1c2VTZWxlY3Rpb25Bc3Npc3RhbnRXaXRoTW9kZTpVSVdl
YlNlbGVjdGlvbk1vZGVXZWJdOworICAgIAorICAgIC8vIEZJWE1FOiBsYXppbHkgYWxsb2NhdGUg
dGhlc2UgdHdvLgorICAgIF9hdXRvY29ycmVjdGlvbkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFdL
QXV0b0NvcnJlY3Rpb25EYXRhPigpOworICAgIF9wb3NpdGlvbkluZm9ybWF0aW9uID0gc3RkOjpt
YWtlX3VuaXF1ZTxJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbj4oKTsKKworICAgIF9h
Y3Rpb25TaGVldEFzc2lzdGFudCA9IGFkb3B0TlMoW1tXS0FjdGlvblNoZWV0QXNzaXN0YW50IGFs
bG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOworfQorCistICh2b2lkKWNsZWFudXBJbnRlcmFjdGlv
bgoreworICAgIF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgPSBuaWw7CisgICAgX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQgPSBuaWw7CisgICAgX2FjdGlvblNoZWV0QXNzaXN0YW50ID0gbmlsOworICAg
IFtfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW19z
aW5nbGVUYXBHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfZG91Ymxl
VGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbX2hpZ2hsaWdodExv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07CisgICAgW19sb25nUHJl
c3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFtfdHdvRmluZ2VyUGFu
R2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKworICAgIFtfYWNjZXNzb3J5IHJl
bGVhc2VdOworfQorCistIChJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiopcG9zaXRp
b25JbmZvcm1hdGlvbgoreworICAgIHJldHVybiBfcG9zaXRpb25JbmZvcm1hdGlvbi5nZXQoKTsK
K30KKworLSAodm9pZClzZXRJbnB1dERlbGVnYXRlOihpZCA8VUlUZXh0SW5wdXREZWxlZ2F0ZT4p
aW5wdXREZWxlZ2F0ZQoreworICAgIF9pbnB1dERlbGVnYXRlID0gaW5wdXREZWxlZ2F0ZTsKK30K
KworLSAoaWQgPFVJVGV4dElucHV0RGVsZWdhdGU+KWlucHV0RGVsZWdhdGUKK3sKKyAgICByZXR1
cm4gX2lucHV0RGVsZWdhdGU7Cit9CisKKy0gKEJPT0wpaXNFZGl0YWJsZQoreworICAgIHJldHVy
biBfaXNFZGl0YWJsZTsKK30KKworLSAoQk9PTCljYW5CZWNvbWVGaXJzdFJlc3BvbmRlcgorewor
ICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gcmV0dXJuIHNvbWV0aGluZyBlbHNlCisgICAgLy8gaWYg
d2UgZGVjaWRlIHRvIGVuYWJsZS9kaXNhYmxlIGludGVyYWN0aW9uIHByb2dyYW1tYXRpY2FsbHku
CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgorewor
ICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgY2FsbCByZXNpZ25GaXJzdFJlc3BvbmRlciBv
biB0aGUgc3VwZXJjbGFzcworICAgIC8vIGFuZCBkbyBub3RoaW5nIGlmIHRoZSByZXR1cm4gdmFs
dWUgaXMgTk8uCisgICAgX3BhZ2UtPmJsdXJBc3Npc3RlZE5vZGUoKTsKKyAgICBbc2VsZiBfY2Fu
Y2VsSW50ZXJhY3Rpb25dOworICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IHJlc2lnbmVkRmly
c3RSZXNwb25kZXJdOworCisgICAgcmV0dXJuIFtzdXBlciByZXNpZ25GaXJzdFJlc3BvbmRlcl07
Cit9CisKKy0gKHZvaWQpX3dlYlRvdWNoRXZlbnRzUmVjb2duaXplZDooVUlXZWJUb3VjaEV2ZW50
c0dlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBOYXRpdmVXZWJU
b3VjaEV2ZW50IG5hdGl2ZVdlYlRvdWNoRXZlbnQoZ2VzdHVyZVJlY29nbml6ZXIpOworCisgICAg
aWYgKG5hdGl2ZVdlYlRvdWNoRXZlbnQudHlwZSgpID09IFdlYktpdDo6V2ViRXZlbnQ6OlRvdWNo
U3RhcnQpCisgICAgICAgIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSA9IE5POwor
CisgICAgaWYgKCFfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkpCisgICAgICAgIF9u
YXRpdmVXZWJUb3VjaEV2ZW50VW5pcXVlSWRCZWluZ1NlbnRTeW5jaHJvbm91c2x5ID0gbmF0aXZl
V2ViVG91Y2hFdmVudC51bmlxdWVJZCgpOworCisgICAgX3BhZ2UtPnNldFNob3VsZFNlbmRFdmVu
dHNTeW5jaHJvbm91c2x5KCFfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkpOworICAg
IF9wYWdlLT5oYW5kbGVUb3VjaEV2ZW50KG5hdGl2ZVdlYlRvdWNoRXZlbnQpOworICAgIF9wYWdl
LT5zZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShmYWxzZSk7Cit9CisKK3N0YXRpYyBG
bG9hdFF1YWQgaW5mbGF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBmbG9hdCBpbmZsYXRl
U2l6ZSkKK3sKKyAgICAvLyBXZSBzb3J0IHRoZSBvdXRwdXQgcG9pbnRzIGxpa2UgdGhpcyAoYXMg
ZXhwZWN0ZWQgYnkgdGhlIGhpZ2hsaWdodCB2aWV3KToKKyAgICAvLyAgcDItLS0tLS1wMworICAg
IC8vICB8ICAgICAgIHwKKyAgICAvLyAgcDEtLS0tLS1wNAorCisgICAgLy8gMSkgU29ydCB0aGUg
cG9pbnRzIGhvcml6b250YWxseS4KKyAgICBGbG9hdFBvaW50IHBvaW50c1s0XSA9IHsgcXVhZC5w
MSgpLCBxdWFkLnA0KCksIHF1YWQucDIoKSwgcXVhZC5wMygpIH07CisgICAgaWYgKHBvaW50c1sw
XS54KCkgPiBwb2ludHNbMV0ueCgpKQorICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzBdLCBwb2lu
dHNbMV0pOworICAgIGlmIChwb2ludHNbMl0ueCgpID4gcG9pbnRzWzNdLngoKSkKKyAgICAgICAg
c3RkOjpzd2FwKHBvaW50c1syXSwgcG9pbnRzWzNdKTsKKworICAgIGlmIChwb2ludHNbMF0ueCgp
ID4gcG9pbnRzWzJdLngoKSkKKyAgICAgICAgc3RkOjpzd2FwKHBvaW50c1swXSwgcG9pbnRzWzJd
KTsKKyAgICBpZiAocG9pbnRzWzFdLngoKSA+IHBvaW50c1szXS54KCkpCisgICAgICAgIHN0ZDo6
c3dhcChwb2ludHNbMV0sIHBvaW50c1szXSk7CisKKyAgICBpZiAocG9pbnRzWzFdLngoKSA+IHBv
aW50c1syXS54KCkpCisgICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMV0sIHBvaW50c1syXSk7CisK
KyAgICAvLyAyKSBTd2FwIHRoZW0gdmVydGljYWxseSB0byBoYXZlIHRoZSBvdXRwdXQgcG9pbnRz
IFtwMiwgcDEsIHAzLCBwNF0uCisgICAgaWYgKHBvaW50c1sxXS55KCkgPCBwb2ludHNbMF0ueSgp
KQorICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzBdLCBwb2ludHNbMV0pOworICAgIGlmIChwb2lu
dHNbM10ueSgpIDwgcG9pbnRzWzJdLnkoKSkKKyAgICAgICAgc3RkOjpzd2FwKHBvaW50c1syXSwg
cG9pbnRzWzNdKTsKKworICAgIC8vIDMpIEFkanVzdCB0aGUgcG9zaXRpb25zLgorICAgIHBvaW50
c1swXS5tb3ZlKC1pbmZsYXRlU2l6ZSwgLWluZmxhdGVTaXplKTsKKyAgICBwb2ludHNbMV0ubW92
ZSgtaW5mbGF0ZVNpemUsIGluZmxhdGVTaXplKTsKKyAgICBwb2ludHNbMl0ubW92ZShpbmZsYXRl
U2l6ZSwgLWluZmxhdGVTaXplKTsKKyAgICBwb2ludHNbM10ubW92ZShpbmZsYXRlU2l6ZSwgaW5m
bGF0ZVNpemUpOworCisgICAgcmV0dXJuIEZsb2F0UXVhZChwb2ludHNbMV0sIHBvaW50c1swXSwg
cG9pbnRzWzJdLCBwb2ludHNbM10pOworfQorCistICh2b2lkKV93ZWJUb3VjaEV2ZW50Oihjb25z
dCBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQmKXRvdWNoRXZlbnQgcHJldmVudHNOYXRpdmVH
ZXN0dXJlczooQk9PTClwcmV2ZW50c05hdGl2ZUdlc3R1cmUKK3sKKyAgICBpZiAocHJldmVudHNO
YXRpdmVHZXN0dXJlKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBkaXNwYXRjaGluZyBldmVudHMg
c3luY2hyb25vdXNseSBhbmQgdGhlIGV2ZW50IGNvbWluZyBiYWNrIGlzIG5vdCB0aGUgb25lIHdl
IGFyZSBzZW5kaW5nLCBpdCBpcyBhIGNhbGxiYWNrCisgICAgICAgIC8vIGZyb20gYW4gZXZlbnQg
c2VudCBhc3luY2hyb25vdXNseSBwcmlvciB0byB0aGUgc3luY2hyb25vdXMgZXZlbnQuIEluIHRo
YXQgY2FzZSwgaXQgc2hvdWxkIG5vdCB1c2UgdGhhdCBpbmZvcm1hdGlvbgorICAgICAgICAvLyB0
byB1cGRhdGUgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyLgorICAgICAgICBpZiAo
IV9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSAmJiBfbmF0aXZlV2ViVG91Y2hFdmVu
dFVuaXF1ZUlkQmVpbmdTZW50U3luY2hyb25vdXNseSAhPSB0b3VjaEV2ZW50LnVuaXF1ZUlkKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5j
aHJvbm91c2x5ID0gWUVTOworICAgICAgICBbX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXplciBz
ZXREZWZhdWx0UHJldmVudGVkOllFU107CisgICAgfQorfQorCistICh2b2lkKV9kaWRHZXRUYXBI
aWdobGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4m
KWhpZ2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
dG9wTGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9w
UmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90
dG9tTGVmdFJhZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
Ym90dG9tUmlnaHRSYWRpdXMKK3sKKyAgICBpZiAoIV9pc1RhcEhpZ2hsaWdodElEVmFsaWQgfHwg
X2xhdGVzdFRhcEhpZ2hsaWdodElEICE9IHJlcXVlc3RJRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29uc3QgQ0dGbG9hdCBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzID0gMi4wOwor
ICAgIGlmICghX2hpZ2hsaWdodFZpZXcpIHsKKyAgICAgICAgX2hpZ2hsaWdodFZpZXcgPSBhZG9w
dE5TKFtbX1VJSGlnaGxpZ2h0VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvXSk7
CisgICAgICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRPcGFxdWU6Tk9dOworICAgICAgICBbX2hpZ2hs
aWdodFZpZXcgc2V0Q29ybmVyUmFkaXVzOlVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXNd
OworICAgIH0KKyAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9oaWdobGlnaHRWaWV3LmdldCgpXTsKKwor
ICAgIFJldGFpblB0cjxVSUNvbG9yPiBoaWdobGlnaHRVSUtpdENvbG9yID0gYWRvcHROUyhbW1VJ
Q29sb3IgYWxsb2NdIGluaXRXaXRoUmVkOihjb2xvci5yZWQoKSAvIDI1NS4wKSBncmVlbjooY29s
b3IuZ3JlZW4oKSAvIDI1NS4wKSBibHVlOihjb2xvci5ibHVlKCkgLyAyNTUuMCkgYWxwaGE6KGNv
bG9yLmFscGhhKCkgLyAyNTUuMCldKTsKKyAgICBbX2hpZ2hsaWdodFZpZXcgc2V0Q29sb3I6aGln
aGxpZ2h0VUlLaXRDb2xvci5nZXQoKV07CisKKyAgICBib29sIGFsbEhpZ2hsaWdodFJlY3RzQXJl
UmVjdGlsaW5lYXIgPSB0cnVlOworICAgIGNvbnN0IHNpemVfdCBxdWFkQ291bnQgPSBoaWdobGln
aHRlZFF1YWRzLnNpemUoKTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RzID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OnN0YXRpY19j
YXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHF1YWRDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCA9
IGhpZ2hsaWdodGVkUXVhZHNbaV07CisgICAgICAgIGlmIChxdWFkLmlzUmVjdGlsaW5lYXIoKSkg
eworICAgICAgICAgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RJbnNldChxdWFkLmJvdW5kaW5nQm94
KCksIC1VSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCAtVUlXZWJWaWV3TWluaW11bUhp
Z2hsaWdodFJhZGl1cyk7CisgICAgICAgICAgICBbcmVjdHMgYWRkT2JqZWN0OltOU1ZhbHVlIHZh
bHVlV2l0aENHUmVjdDpyZWN0XV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbGxI
aWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gZmFsc2U7CisgICAgICAgICAgICByZWN0cy5j
bGVhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBG
SVhNRTogV2ViS2l0MSB1c2VzIHRoZSB2aXNpYmxlUmVjdC4gVXNpbmcgdGhlIHdob2xlIGZyYW1l
IGZyb20gdGhlIHBhZ2Ugc2VlbXMgb3ZlcmtpbGwuCisgICAgQ0dSZWN0IGJvdW5kYXJ5UmVjdCA9
IFtzZWxmIGZyYW1lXTsKKyAgICBpZiAoYWxsSGlnaGxpZ2h0UmVjdHNBcmVSZWN0aWxpbmVhcikK
KyAgICAgICAgW19oaWdobGlnaHRWaWV3IHNldEZyYW1lczpyZWN0cy5nZXQoKSBib3VuZGFyeVJl
Y3Q6Ym91bmRhcnlSZWN0XTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiBxdWFkcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhD
YXBhY2l0eTpzdGF0aWNfY2FzdDxjb25zdCBOU1VJbnRlZ2VyPihxdWFkQ291bnQpXSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZENvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IEZsb2F0UXVhZCYgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07CisgICAgICAgICAg
ICBGbG9hdFF1YWQgZXh0ZW5kZWRRdWFkID0gaW5mbGF0ZVF1YWQocXVhZCwgVUlXZWJWaWV3TWlu
aW11bUhpZ2hsaWdodFJhZGl1cyk7CisgICAgICAgICAgICBbcXVhZHMgYWRkT2JqZWN0OltOU1Zh
bHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnAxKCldXTsKKyAgICAgICAgICAgIFtx
dWFkcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpleHRlbmRlZFF1YWQucDIo
KV1dOworICAgICAgICAgICAgW3F1YWRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1Bv
aW50OmV4dGVuZGVkUXVhZC5wMygpXV07CisgICAgICAgICAgICBbcXVhZHMgYWRkT2JqZWN0OltO
U1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnA0KCldXTsKKyAgICAgICAgfQor
ICAgICAgICBbX2hpZ2hsaWdodFZpZXcgc2V0UXVhZHM6cXVhZHMuZ2V0KCkgYm91bmRhcnlSZWN0
OmJvdW5kYXJ5UmVjdF07CisgICAgfQorCisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBi
b3JkZXJSYWRpaSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBh
Y2l0eTo0XSk7CisgICAgW2JvcmRlclJhZGlpIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhD
R1NpemU6Q0dTaXplTWFrZSh0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKyBVSVdlYlZpZXdNaW5pbXVt
SGlnaGxpZ2h0UmFkaXVzLCB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICsgVUlXZWJWaWV3TWluaW11
bUhpZ2hsaWdodFJhZGl1cyldXTsKKyAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0OltOU1ZhbHVl
IHZhbHVlV2l0aENHU2l6ZTpDR1NpemVNYWtlKHRvcFJpZ2h0UmFkaXVzLndpZHRoKCkgKyBVSVdl
YlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCB0b3BSaWdodFJhZGl1cy5oZWlnaHQoKSArIFVJ
V2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMpXV07CisgICAgW2JvcmRlclJhZGlpIGFkZE9i
amVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1NpemU6Q0dTaXplTWFrZShib3R0b21MZWZ0UmFkaXVz
LndpZHRoKCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFk
aXVzLmhlaWdodCgpICsgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyldXTsKKyAgICBb
Ym9yZGVyUmFkaWkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHU2l6ZTpDR1NpemVNYWtl
KGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFk
aXVzLCBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSArIFVJV2ViVmlld01pbmltdW1IaWdobGln
aHRSYWRpdXMpXV07CisgICAgW19oaWdobGlnaHRWaWV3IHNldENvcm5lclJhZGlpOmJvcmRlclJh
ZGlpLmdldCgpXTsKK30KKworLSAodm9pZClfY2FuY2VsTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXIKK3sKKyAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGNhbmNlbF07
Cit9CisKKy0gKHZvaWQpX2RpZFNjcm9sbAoreworICAgIFtzZWxmIF9jYW5jZWxMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplcl07CisgICAgW3NlbGYgX2NhbmNlbEludGVyYWN0aW9uXTsKK30KKwor
LSAoQk9PTClfcmVxdWlyZXNLZXlib2FyZFJlc2V0T25SZWxvYWQKK3sKKyAgICByZXR1cm4gWUVT
OworfQorCistIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICop
cHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIGNhblByZXZlbnRHZXN0dXJlUmVjb2duaXplcjoo
VUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRlZEdlc3R1cmVSZWNvZ25pemVyCit7CisgICAg
Ly8gQSBsb25nLXByZXNzIGdlc3R1cmUgY2FuIG5vdCBiZSByZWNvZ25pemVkIHdoaWxlIHBhbm5p
bmcsIGJ1dCBhIHBhbiBjYW4gYmUgcmVjb2duaXplZAorICAgIC8vIGR1cmluZyBhIGxvbmctcHJl
c3MgZ2VzdHVyZS4KKyAgICBCT09MIHNob3VsZE5vdFByZXZlbnRQYW5HZXN0dXJlID0gcHJldmVu
dGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2du
aXplciB8fCBwcmV2ZW50aW5nR2VzdHVyZVJlY29nbml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVS
ZWNvZ25pemVyOworICAgIHJldHVybiAhKHNob3VsZE5vdFByZXZlbnRQYW5HZXN0dXJlICYmIFtw
cmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5n
KEAiVUlTY3JvbGxWaWV3UGFuR2VzdHVyZVJlY29nbml6ZXIiKV0pOworfQorCistIChCT09MKWdl
c3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcHJldmVudGVkR2VzdHVyZVJl
Y29nbml6ZXIgY2FuQmVQcmV2ZW50ZWRCeUdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNv
Z25pemVyICopcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIHsKKyAgICAvLyBEb24ndCBhbGxv
dyB0aGUgaGlnaGxpZ2h0IHRvIGJlIHByZXZlbnRlZCBieSBhIHNlbGVjdGlvbiBnZXN0dXJlLiBQ
cmVzcy1hbmQtaG9sZCBvbiBhIGxpbmsgc2hvdWxkIGhpZ2hsaWdodCB0aGUgbGluaywgbm90IHNl
bGVjdCBpdC4KKyAgICBpZiAoKHByZXZlbnRpbmdHZXN0dXJlUmVjb2duaXplciA9PSBfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudC5nZXQoKS5sb3VwZUdlc3R1cmUgfHwgW193ZWJTZWxlY3Rpb25Bc3Np
c3RhbnQgaXNTZWxlY3Rpb25HZXN0dXJlUmVjb2duaXplcjpwcmV2ZW50aW5nR2VzdHVyZVJlY29n
bml6ZXJdKQorICAgICAgICAmJiAocHJldmVudGVkR2VzdHVyZVJlY29nbml6ZXIgPT0gX2hpZ2hs
aWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHx8IHByZXZlbnRlZEdlc3R1cmVSZWNvZ25p
emVyID09IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikpIHsKKyAgICAgICAgcmV0dXJuIE5P
OworICAgIH0KKworICAgIHJldHVybiBZRVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Nh
bWVQYWlyKFVJR2VzdHVyZVJlY29nbml6ZXIgKmEsIFVJR2VzdHVyZVJlY29nbml6ZXIgKmIsIFVJ
R2VzdHVyZVJlY29nbml6ZXIgKngsIFVJR2VzdHVyZVJlY29nbml6ZXIgKnkpCit7CisgICAgcmV0
dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYiA9PSB4ICYmIGEgPT0geSk7Cit9CisKKy0gKEJP
T0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2du
aXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJlUmVjb2duaXplcjoo
VUlHZXN0dXJlUmVjb2duaXplciopb3RoZXJHZXN0dXJlUmVjb2duaXplcgoreworICAgIGlmIChp
c1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNvZ25pemVyLCBfaGln
aGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF9sb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplci5nZXQoKSkpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBpZiAoaXNTYW1l
UGFpcihnZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXplciwgX2hpZ2hsaWdo
dExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfd2ViU2VsZWN0aW9uQXNzaXN0YW50
LmdldCgpLnNlbGVjdGlvbkxvbmdQcmVzc1JlY29nbml6ZXIpKQorICAgICAgICByZXR1cm4gWUVT
OworCisgICAgaWYgKGlzU2FtZVBhaXIoZ2VzdHVyZVJlY29nbml6ZXIsIG90aGVyR2VzdHVyZVJl
Y29nbml6ZXIsIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKSwgX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQuZ2V0KCkuc2luZ2xlVGFwR2VzdHVyZSkpCisgICAgICAgIHJldHVybiBZRVM7
CisKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpX3Nob3dJbWFnZVNoZWV0Cit7CisgICAg
W19hY3Rpb25TaGVldEFzc2lzdGFudCBzaG93SW1hZ2VTaGVldF07Cit9CisKKy0gKHZvaWQpX3No
b3dMaW5rU2hlZXQKK3sKKyAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNob3dMaW5rU2hlZXRd
OworfQorCistICh2b2lkKV9zaG93RGF0YURldGVjdG9yc1NoZWV0Cit7CisgICAgW19hY3Rpb25T
aGVldEFzc2lzdGFudCBzaG93RGF0YURldGVjdG9yc1NoZWV0XTsKK30KKworLSAoU0VMKV9hY3Rp
b25Gb3JMb25nUHJlc3MKK3sKKyAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24tPmNsaWNrYWJs
ZUVsZW1lbnROYW1lID09ICJJTUciKQorICAgICAgICByZXR1cm4gQHNlbGVjdG9yKF9zaG93SW1h
Z2VTaGVldCk7CisgICAgZWxzZSBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRpb24tPmNsaWNrYWJsZUVs
ZW1lbnROYW1lID09ICJBIikgeworICAgICAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW05TVVJMIFVS
TFdpdGhTdHJpbmc6X3Bvc2l0aW9uSW5mb3JtYXRpb24tPnVybF07CisgICAgICAgIGlmIChbW2dl
dERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgdGFwQW5kSG9sZFNjaGVtZXNdIGNvbnRhaW5z
T2JqZWN0Olt0YXJnZXRVUkwgc2NoZW1lXV0pCisgICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9y
KF9zaG93RGF0YURldGVjdG9yc1NoZWV0KTsKKyAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfc2hv
d0xpbmtTaGVldCk7CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpZW5zdXJl
UG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6KENHUG9pbnQpcG9pbnQKK3sKKyAgICBpZiAo
IV9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gfHwgcm91bmRlZEludFBvaW50KHBvaW50KSAh
PSBfcG9zaXRpb25JbmZvcm1hdGlvbi0+cG9pbnQpIHsKKyAgICAgICAgX3BhZ2UtPmdldFBvc2l0
aW9uSW5mb3JtYXRpb24ocm91bmRlZEludFBvaW50KHBvaW50KSwgKl9wb3NpdGlvbkluZm9ybWF0
aW9uKTsKKyAgICAgICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IFlFUzsKKyAgICB9
Cit9CisKKy0gKHZvaWQpX3VwZGF0ZVBvc2l0aW9uSW5mb3JtYXRpb24KK3sKKyAgICBfaGFzVmFs
aWRQb3NpdGlvbkluZm9ybWF0aW9uID0gTk87CisgICAgX3BhZ2UtPnJlcXVlc3RQb3NpdGlvbklu
Zm9ybWF0aW9uKF9wb3NpdGlvbkluZm9ybWF0aW9uLT5wb2ludCk7Cit9CisKKy0gKEJPT0wpZ2Vz
dHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVS
ZWNvZ25pemVyCit7CisgICAgQ0dQb2ludCBwb2ludCA9IFtnZXN0dXJlUmVjb2duaXplciBsb2Nh
dGlvbkluVmlldzpzZWxmXTsKKworICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfaGlnaGxp
Z2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIKKyAgICAgICAgfHwgZ2VzdHVyZVJlY29nbml6
ZXIgPT0gX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyCisgICAgICAgIHx8IGdlc3R1cmVSZWNv
Z25pemVyID09IF90d29GaW5nZXJEb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcgorICAgICAgICB8
fCBnZXN0dXJlUmVjb2duaXplciA9PSBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIpIHsKKwor
ICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAgICAgICAgIC8vIFJl
cXVlc3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvc2l0aW9uIHdpdGggc3luYyBtZXNzYWdlLgor
ICAgICAgICAgICAgLy8gSWYgdGhlIGFzc2lzdGVkIG5vZGUgaXMgdGhlIHNhbWUsIHByZXZlbnQg
dGhlIGdlc3R1cmUuCisgICAgICAgICAgICBfcGFnZS0+Z2V0UG9zaXRpb25JbmZvcm1hdGlvbihy
b3VuZGVkSW50UG9pbnQocG9pbnQpLCAqX3Bvc2l0aW9uSW5mb3JtYXRpb24pOworICAgICAgICAg
ICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IFlFUzsKKyAgICAgICAgICAgIGlmIChf
cG9zaXRpb25JbmZvcm1hdGlvbi0+bm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ2VzdHVy
ZVJlY29nbml6ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKSB7Cisg
ICAgICAgIGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkgeworICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIGRpZmZlcmVudCBub2RlIHRoYW4gdGhlIGFzc2lzdGVkIG9uZS4KKyAgICAgICAgICAg
IC8vIFByZXZlbnQgdGhlIGdlc3R1cmUgaWYgdGhlcmUgaXMgbm8gbm9kZS4KKyAgICAgICAgICAg
IC8vIEFsbG93IHRoZSBnZXN0dXJlIGlmIGl0IGlzIGEgbm9kZSB0aGF0IHdhbnRzIGhpZ2hsaWdo
dCBvciBpZiB0aGVyZSBpcyBhbiBhY3Rpb24gZm9yIGl0LgorICAgICAgICAgICAgaWYgKF9wb3Np
dGlvbkluZm9ybWF0aW9uLT5jbGlja2FibGVFbGVtZW50TmFtZS5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTk87CisgICAgICAgICAgICByZXR1cm4gW3NlbGYgX2FjdGlvbkZvckxv
bmdQcmVzc10gIT0gbmlsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugc3Rp
bGwgaGF2ZSBubyBpZGVhIGFib3V0IHdoYXQgaXMgYXQgdGhlIGxvY2F0aW9uLgorICAgICAgICAg
ICAgLy8gU2VuZCBhbmQgYXN5bmMgbWVzc2FnZSB0byBmaW5kIG91dC4KKyAgICAgICAgICAgIF9o
YXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBOTzsKKyAgICAgICAgICAgIF9wYWdlLT5yZXF1
ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihyb3VuZGVkSW50UG9pbnQocG9pbnQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBZRVM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZ2VzdHVyZVJlY29n
bml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKSB7CisgICAgICAgIC8vIFVzZSB0
aGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIHdpdGggb25lIG9mIHRoZSBwcmV2aW91cyBjYWxscwor
ICAgICAgICAvLyB0byBnZXN0dXJlUmVjb2duaXplclNob3VsZEJlZ2luLgorICAgICAgICAvLyBG
b3JjZSBhIHN5bmMgY2FsbCBpZiBub3QgcmVhZHkgeWV0LgorICAgICAgICBbc2VsZiBlbnN1cmVQ
b3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZTpwb2ludF07CisKKyAgICAgICAgaWYgKF90ZXh0
U2VsZWN0aW9uQXNzaXN0YW50KSB7CisgICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBnZXN0dXJl
IGlmIGl0IGlzIHRoZSBzYW1lIG5vZGUuCisgICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5mb3Jt
YXRpb24tPm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgZ2Vz
dHVyZSBpZiB0aGVyZSBpcyBubyBhY3Rpb24gZm9yIHRoZSBub2RlLgorICAgICAgICAgICAgcmV0
dXJuIFtzZWxmIF9hY3Rpb25Gb3JMb25nUHJlc3NdICE9IG5pbDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBfdHdvRmluZ2VyUGFuR2VzdHVyZVJlY29n
bml6ZXIpIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
WUVTOworfQorCistICh2b2lkKV9jYW5jZWxJbnRlcmFjdGlvbgoreworICAgIF9pc1RhcEhpZ2hs
aWdodElEVmFsaWQgPSBOTzsKKyAgICBbX2hpZ2hsaWdodFZpZXcgcmVtb3ZlRnJvbVN1cGVydmll
d107Cit9CisKKy0gKEJPT0wpaGFzU2VsZWN0YWJsZVBvc2l0aW9uQXRQb2ludDooQ0dQb2ludClw
b2ludAoreworICAgIFtzZWxmIGVuc3VyZVBvc2l0aW9uSW5mb3JtYXRpb25Jc1VwVG9EYXRlOnBv
aW50XTsKKyAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBuZWVkcyB0byBiZSBleHRlbmRlZCB0byBp
bmNsdWRlIG90aGVyIGVsZW1lbnRzLgorICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlamVjdCBw
b3NpdGlvbnMgdGhhdCB3aWxsIGxlYWQgdG8gYSB2ZXJ5IGxhcmdlIHNlbGVjdGlvbi4KKyAgICBy
ZXR1cm4gX3Bvc2l0aW9uSW5mb3JtYXRpb24tPmNsaWNrYWJsZUVsZW1lbnROYW1lICE9ICJJTUci
ICYmIF9wb3NpdGlvbkluZm9ybWF0aW9uLT5jbGlja2FibGVFbGVtZW50TmFtZSAhPSAiQSIgJiYg
IV9wb3NpdGlvbkluZm9ybWF0aW9uLT5zZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCk7Cit9CisKKy0g
KEJPT0wpcG9pbnRJc0luQXNzaXN0ZWROb2RlOihDR1BvaW50KXBvaW50Cit7CisgICAgW3NlbGYg
ZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6cG9pbnRdOworICAgIHJldHVybiBf
cG9zaXRpb25JbmZvcm1hdGlvbi0+bm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZTsKK30KKwor
LSAoTlNBcnJheSAqKXdlYlNlbGVjdGlvblJlY3RzCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvblJlY3RzLnNpemUoKTsKKyAgICBpZiAoIXNpemUp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU011dGFibGVBcnJheSAqd2ViUmVjdHMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBXZWJDb3JlOjpTZWxlY3Rp
b25SZWN0JiBjb3JlUmVjdCA9IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvblJlY3RzW2ld
OworICAgICAgICBXZWJTZWxlY3Rpb25SZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qg
c2VsZWN0aW9uUmVjdF07CisgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsK
KyAgICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkg
PT0gTFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rp
b25SaWdodFRvTGVmdDsKKyAgICAgICAgd2ViUmVjdC5pc0xpbmVCcmVhayA9IGNvcmVSZWN0Lmlz
TGluZUJyZWFrKCk7CisgICAgICAgIHdlYlJlY3QuaXNGaXJzdE9uTGluZSA9IGNvcmVSZWN0Lmlz
Rmlyc3RPbkxpbmUoKTsKKyAgICAgICAgd2ViUmVjdC5pc0xhc3RPbkxpbmUgPSBjb3JlUmVjdC5p
c0xhc3RPbkxpbmUoKTsKKyAgICAgICAgd2ViUmVjdC5jb250YWluc1N0YXJ0ID0gY29yZVJlY3Qu
Y29udGFpbnNTdGFydCgpOworICAgICAgICB3ZWJSZWN0LmNvbnRhaW5zRW5kID0gY29yZVJlY3Qu
Y29udGFpbnNFbmQoKTsKKyAgICAgICAgd2ViUmVjdC5pc0luRml4ZWRQb3NpdGlvbiA9IGNvcmVS
ZWN0LmlzSW5GaXhlZFBvc2l0aW9uKCk7CisgICAgICAgIHdlYlJlY3QuaXNIb3Jpem9udGFsID0g
Y29yZVJlY3QuaXNIb3Jpem9udGFsKCk7CisgICAgICAgIFt3ZWJSZWN0cyBhZGRPYmplY3Q6d2Vi
UmVjdF07CisgICAgfQorCisgICAgcmV0dXJuIHdlYlJlY3RzOworfQorCistICh2b2lkKV9oaWdo
bGlnaHRMb25nUHJlc3NSZWNvZ25pemVkOihVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyICop
Z2VzdHVyZVJlY29nbml6ZXIKK3sKKyAgICBBU1NFUlQoZ2VzdHVyZVJlY29nbml6ZXIgPT0gX2hp
Z2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKTsKKworICAgIHN3aXRjaCAoW2dlc3R1
cmVSZWNvZ25pemVyIHN0YXRlXSkgeworICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRl
QmVnYW46CisgICAgICAgIF9wYWdlLT50YXBIaWdobGlnaHRBdFBvc2l0aW9uKFtnZXN0dXJlUmVj
b2duaXplciBzdGFydFBvaW50XSwgX2xhdGVzdFRhcEhpZ2hsaWdodElEKTsKKyAgICAgICAgX2lz
VGFwSGlnaGxpZ2h0SURWYWxpZCA9IFlFUzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVFbmRlZDoKKyAgICAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1h
dGlvbi0+Y2xpY2thYmxlRWxlbWVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgW3NlbGYg
X2F0dGVtcHRDbGlja0F0TG9jYXRpb246W2dlc3R1cmVSZWNvZ25pemVyIHN0YXJ0UG9pbnRdXTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxs
ZWQ6CisgICAgICAgIFtzZWxmIF9jYW5jZWxJbnRlcmFjdGlvbl07CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLSAodm9pZClfbG9uZ1By
ZXNzUmVjb2duaXplZDooVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNv
Z25pemVyCit7CisgICAgQVNTRVJUKGdlc3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NHZXN0
dXJlUmVjb2duaXplcik7CisKKyAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikgeworICAgICAgICBTRUwgYWN0aW9uID0gW3Nl
bGYgX2FjdGlvbkZvckxvbmdQcmVzc107CisgICAgICAgIGlmIChhY3Rpb24pCisgICAgICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6YWN0aW9uXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3Np
bmdsZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2du
aXplcgoreworICAgIEFTU0VSVChnZXN0dXJlUmVjb2duaXplciA9PSBfc2luZ2xlVGFwR2VzdHVy
ZVJlY29nbml6ZXIpOworCisgICAgaWYgKF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgJiYgIVtfd2Vi
U2VsZWN0aW9uQXNzaXN0YW50IHNob3VsZEhhbmRsZVNpbmdsZVRhcEF0UG9pbnQ6Z2VzdHVyZVJl
Y29nbml6ZXIubG9jYXRpb25dKQorICAgICAgICByZXR1cm47CisKKyAgICBbX3dlYlNlbGVjdGlv
bkFzc2lzdGFudCBjbGVhclNlbGVjdGlvbl07CisKKyAgICBbc2VsZiBfYXR0ZW1wdENsaWNrQXRM
b2NhdGlvbjpbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25dXTsKK30KKworLSAodm9pZClfZG91
YmxlVGFwUmVjb2duaXplZDooVUlUYXBHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25p
emVyCit7CisgICAgLy8gRklYTUU6IEFkZCBpbXBsZW1lbnRhdGlvbi4KK30KKworLSAodm9pZClf
dHdvRmluZ2VyRG91YmxlVGFwUmVjb2duaXplZDooVUlUYXBHZXN0dXJlUmVjb2duaXplciAqKWdl
c3R1cmVSZWNvZ25pemVyCit7CisgICAgLy8gRklYTUU6IEFkZCBpbXBsZW1lbnRhdGlvbi4KK30K
KworLSAodm9pZClfdHdvRmluZ2VyUGFuUmVjb2duaXplZDooVUlQYW5HZXN0dXJlUmVjb2duaXpl
ciAqKWdlc3R1cmVSZWNvZ25pemVyCit7CisgICAgLy8gRklYTUU6IEFkZCBpbXBsZW1lbnRhdGlv
bi4KK30KKworLSAodm9pZClfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlv
bgoreworICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgYWx3YXlzIHByb3ZpZGUgc29t
ZSB2aXN1YWwgZmVlZGJhY2sgb24gY2xpY2suIElmIGEgc2hvcnQgdGFwIGRpZCBub3QgdHJpZ2dl
ciB0aGUKKyAgICAvLyB0YXAgaGlnaGxpZ2h0LCB3ZSBzaG91bGQgc2hvdyBvbmUgYmFzZWQgb24g
YSB0aW1lciBpZiB3ZSBjb21taXQgdGhlIHN5bnRoZXRpYyBtb3VzZSBldmVudHMuCisgICAgW3Nl
bGYgX2NhbmNlbEludGVyYWN0aW9uXTsKKworICAgIGlmICghW3NlbGYgaXNGaXJzdFJlc3BvbmRl
cl0pCisgICAgICAgIFtzZWxmIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKKworICAgIF9wYWdlLT5w
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlVGFwKEludFBvaW50KGxvY2F0
aW9uKSksIF9wYWdlLT5wYWdlSUQoKSk7Cit9CisKKy0gKHZvaWQpdXNlU2VsZWN0aW9uQXNzaXN0
YW50V2l0aE1vZGU6KFVJV2ViU2VsZWN0aW9uTW9kZSlzZWxlY3Rpb25Nb2RlCit7CisgICAgaWYg
KHNlbGVjdGlvbk1vZGUgPT0gVUlXZWJTZWxlY3Rpb25Nb2RlV2ViKSB7CisgICAgICAgIGlmIChf
dGV4dFNlbGVjdGlvbkFzc2lzdGFudCkgeworICAgICAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNz
aXN0YW50IGRlYWN0aXZhdGVTZWxlY3Rpb25dOworICAgICAgICAgICAgX3RleHRTZWxlY3Rpb25B
c3Npc3RhbnQgPSBuaWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFfd2ViU2VsZWN0aW9uQXNz
aXN0YW50KQorICAgICAgICAgICAgX3dlYlNlbGVjdGlvbkFzc2lzdGFudCA9IGFkb3B0TlMoW1tV
SVdLU2VsZWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOworICAgIH0g
ZWxzZSBpZiAoc2VsZWN0aW9uTW9kZSA9PSBVSVdlYlNlbGVjdGlvbk1vZGVUZXh0T25seSkgewor
ICAgICAgICBpZiAoX3dlYlNlbGVjdGlvbkFzc2lzdGFudCkKKyAgICAgICAgICAgIF93ZWJTZWxl
Y3Rpb25Bc3Npc3RhbnQgPSBuaWw7CisKKyAgICAgICAgaWYgKCFfdGV4dFNlbGVjdGlvbkFzc2lz
dGFudCkKKyAgICAgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gYWRvcHROUyhbW1VJ
V0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgYWxsb2NdIGluaXRXaXRoVmlldzpzZWxmXSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGdlc3R1cmUgcmVjb2duaXpl
cnMgaW4gY2FzZSBlZGl0aWJpbGl0eSBoYXMgY2hhbmdlZC4KKyAgICAgICAgICAgIFtfdGV4dFNl
bGVjdGlvbkFzc2lzdGFudCBzZXRHZXN0dXJlUmVjb2duaXplcnNdOworICAgICAgICB9CisKKyAg
ICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IGFjdGl2YXRlU2VsZWN0aW9uXTsKKyAgICB9
Cit9CisKKy0gKHZvaWQpY2xlYXJTZWxlY3Rpb24KK3sKKyAgICBfcGFnZS0+Y2xlYXJTZWxlY3Rp
b24oKTsKK30KKworLSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTooY29uc3Qg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm8KK3sKKyAgICBfcG9zaXRpb25J
bmZvcm1hdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9z
aXRpb24+KGluZm8pOworICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBZRVM7Cisg
ICAgaWYgKF9hY3Rpb25TaGVldEFzc2lzdGFudCkKKyAgICAgICAgW19hY3Rpb25TaGVldEFzc2lz
dGFudCB1cGRhdGVTaGVldFBvc2l0aW9uXTsKK30KKworLSAodm9pZClfd2lsbFN0YXJ0U2Nyb2xs
aW5nT3Jab29taW5nCit7CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgd2lsbFN0YXJ0U2Ny
b2xsaW5nT3Jab29taW5nUGFnZV07CisgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHdpbGxT
dGFydFNjcm9sbGluZ092ZXJmbG93XTsKK30KKworLSAodm9pZClfd2lsbFN0YXJ0VXNlclRyaWdn
ZXJlZFNjcm9sbGluZ09yWm9vbWluZworeworICAgIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hy
b25vdXNseSA9IFlFUzsKK30KKworLSAodm9pZClfZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nCit7
CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nUGFn
ZV07CisgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IGRpZEVuZFNjcm9sbGluZ092ZXJmbG93
XTsKK30KKworLSAoVUlWaWV3ICopaW5wdXRBY2Nlc3NvcnlWaWV3Cit7CisgICAgaWYgKCFfaXNF
ZGl0YWJsZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBpZiAoIV9hY2Nlc3Nvcnkp
IHsKKyAgICAgICAgX2FjY2Vzc29yeSA9IFtbVUlXZWJGb3JtQWNjZXNzb3J5IGFsbG9jXSBpbml0
XTsKKyAgICAgICAgX2FjY2Vzc29yeS5kZWxlZ2F0ZSA9IHNlbGY7CisgICAgfQorICAgIAorICAg
IHJldHVybiBfYWNjZXNzb3J5OworfQorCistIChOU0FycmF5ICopc3VwcG9ydGVkUGFzdGVib2Fy
ZFR5cGVzRm9yQ3VycmVudFNlbGVjdGlvbgoreworICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5zZWxlY3Rpb25Jc05vbmUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgc3RhdGlj
IE5TTXV0YWJsZUFycmF5ICpyaWNoVHlwZXMgPSBuaWw7CisgICAgc3RhdGljIE5TTXV0YWJsZUFy
cmF5ICpwbGFpblRleHRUeXBlcyA9IG5pbDsKKyAgICBpZiAoIXBsYWluVGV4dFR5cGVzKSB7Cisg
ICAgICAgIHBsYWluVGV4dFR5cGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Cisg
ICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYWRkIFtwbGFpblRleHRUeXBlcyBhZGRPYmplY3Q6KGlk
KWtVVFR5cGVVUkxdOworICAgICAgICAvLyB3aGVuIHdlIGZpZ3VyZSBvdXQgaG93IHRvIHNoYXJl
IHRoaXMgdHlwZSBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdDIKKyAgICAgICAgW3BsYWluVGV4
dFR5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6VUlQYXN0ZWJvYXJkVHlwZUxpc3RTdHJpbmddOwor
CisgICAgICAgIHJpY2hUeXBlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAg
ICAgICAvLyBGSVhNRTogc2hvdWxkIGFkZCBbcmljaFR5cGVzIGFkZE9iamVjdDooUGFzdGVib2Fy
ZFR5cGVzOjpXZWJBcmNoaXZlUGJvYXJkVHlwZSldOworICAgICAgICAvLyB3aGVuIHdlIGZpZ3Vy
ZSBvdXQgaG93IHRvIHNoYXJlIHRoaXMgdHlwZSBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktpdDIK
KyAgICAgICAgW3JpY2hUeXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OlVJUGFzdGVib2FyZFR5cGVM
aXN0SW1hZ2VdOworICAgICAgICBbcmljaFR5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6cGxhaW5U
ZXh0VHlwZXNdOworICAgIH0KKworICAgIHJldHVybiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUpID8gcmljaFR5cGVzIDogcGxhaW5UZXh0VHlwZXM7Cit9CisK
Ky0gKHZvaWQpX2FkZFNob3J0Y3V0OihpZClzZW5kZXIKK3sKKyAgICAvLyBGSVhNRTogVG8gYmUg
aW1wbGVtZW50ZWQuCit9CisKKy0gKHZvaWQpX3Byb21wdEZvclJlcGxhY2U6KGlkKXNlbmRlcgor
eworICAgIC8vIEZJWE1FOiBUbyBiZSBpbXBsZW1lbnRlZC4KK30KKworLSAodm9pZClyZXBsYWNl
OihpZClzZW5kZXIKK3sKKyAgICAvLyBGSVhNRTogVG8gYmUgaW1wbGVtZW50ZWQuCit9CisKKy0g
KEJPT0wpY2FuUGVyZm9ybUFjdGlvbjooU0VMKWFjdGlvbiB3aXRoU2VuZGVyOihpZClzZW5kZXIK
K3sKKyAgICBCT09MIGhhc1dlYlNlbGVjdGlvbiA9IF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgJiYg
IUNHUmVjdElzRW1wdHkoX3dlYlNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5zZWxlY3Rpb25GcmFt
ZSk7CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihfc2hvd1RleHRTdHlsZU9wdGlvbnM6
KSkKKyAgICAgICAgcmV0dXJuIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVk
aXRhYmxlICYmIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UgJiYgIV9zaG93
aW5nVGV4dFN0eWxlT3B0aW9uczsKKyAgICBpZiAoX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zKQor
ICAgICAgICByZXR1cm4gKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQm9sZGZhY2U6KSB8fCBh
Y3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUl0YWxpY3M6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KHRvZ2dsZVVuZGVybGluZTopKTsKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjdXQ6KSkK
KyAgICAgICAgcmV0dXJuICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAm
JiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSAmJiBfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKHBhc3RlOikpIHsKKyAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlv
bklzTm9uZSB8fCAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUpCisgICAg
ICAgICAgICByZXR1cm4gTk87CisgICAgICAgIFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtV
SVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOworICAgICAgICBOU0FycmF5ICp0eXBlcyA9
IFtzZWxmIHN1cHBvcnRlZFBhc3RlYm9hcmRUeXBlc0ZvckN1cnJlbnRTZWxlY3Rpb25dOworICAg
ICAgICBOU0luZGV4U2V0ICppbmRpY2VzID0gW05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXhl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3Bhc3RlYm9hcmQgbnVtYmVyT2ZJdGVtc10pXTsKKyAg
ICAgICAgcmV0dXJuIFtwYXN0ZWJvYXJkIGNvbnRhaW5zUGFzdGVib2FyZFR5cGVzOnR5cGVzIGlu
SXRlbVNldDppbmRpY2VzXTsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihj
b3B5OikpIHsKKyAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZp
ZWxkKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICByZXR1cm4gaGFzV2ViU2VsZWN0
aW9uIHx8IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2U7CisgICAgfQorCisg
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2RlZmluZTopKSB7CisgICAgICAgIGlmIChfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCB8fCAhKGhhc1dlYlNlbGVjdGlvbiB8
fCBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlKSkKKyAgICAgICAgICAgIHJl
dHVybiBOTzsKKworICAgICAgICBOU1VJbnRlZ2VyIHRleHRMZW5ndGggPSBfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgY2FsbGluZyBVSVJlZmVyZW5jZUxpYnJhcnlWaWV3Q29udHJvbGxlciB0byBjaGVjayBpZiB0
aGUgbGVuZ3RoIGlzCisgICAgICAgIC8vIGFjY2VwdGFibGUsIGJ1dCB0aGUgaW50ZXJmYWNlIHRh
a2VzIGEgc3RyaW5nLgorICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vMTUyNTQ0MDY+CisgICAg
ICAgIGlmICghdGV4dExlbmd0aCB8fCB0ZXh0TGVuZ3RoID4gMjAwKQorICAgICAgICAgICAgcmV0
dXJuIE5POworCisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IoX2FkZFNob3J0Y3V0OikpIHsKKyAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JT
dGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkIHx8ICEoaGFzV2ViU2VsZWN0aW9uIHx8IF9wYWdlLT5l
ZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIE5POwor
ICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQsIHJldHVybmluZyBOTyBhbHdheXMg
Zm9yIG5vdy4KKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKF9wcm9tcHRGb3JSZXBsYWNlOikpIHsKKyAgICAgICAgLy8gRklYTUU6IG5lZWQg
dG8gaW1wbGVtZW50CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihzZWxlY3Q6KSkgeworICAgICAgICAvLyBEaXNhYmxlIHNlbGVjdCBpbiBw
YXNzd29yZCBmaWVsZHMgc28gdGhhdCB5b3UgY2FuJ3Qgc2VlIHdvcmQgYm91bmRhcmllcy4KKyAg
ICAgICAgcmV0dXJuICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0luUGFzc3dvcmRGaWVsZCAmJiBb
c2VsZiBoYXNDb250ZW50XSAmJiAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNOb25l
ICYmICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIH0KKworICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNlbGVjdEFsbDopKSB7CisgICAgICAgIGlmIChfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUgfHwgIVtzZWxmIGhhc0NvbnRlbnRdKQor
ICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LnNlbGVjdGlvbklzUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICAvLyBF
bmFibGUgc2VsZWN0QWxsIGZvciBub24tZWRpdGFibGUgdGV4dCwgd2hlcmUgdGhlIHVzZXIgY2Fu
J3QgYWNjZXNzCisgICAgICAgIC8vIHRoaXMgY29tbWFuZCB2aWEgbG9uZy1wcmVzcyB0byBnZXQg
YSBjYXJldC4KKyAgICAgICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRh
YmxlKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHNl
bGVjdEFsbCB3aXRoIGdlbmVyYWwgd2ViIGNvbnRlbnQuCisgICAgICAgIGlmIChoYXNXZWJTZWxl
Y3Rpb24pCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIC8vIEZJWE1FOiBPbmx5IGVu
YWJsZSBpZiB0aGUgc2VsZWN0aW9uIGRvZXNuJ3QgYWxyZWFkeSBzcGFuIHRoZSBlbnRpcmUgZG9j
dW1lbnQuCisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBA
c2VsZWN0b3IocmVwbGFjZTopKQorICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCku
aXNDb250ZW50RWRpdGFibGUgJiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZp
ZWxkOworCisgICAgcmV0dXJuIFtzdXBlciBjYW5QZXJmb3JtQWN0aW9uOmFjdGlvbiB3aXRoU2Vu
ZGVyOnNlbmRlcl07Cit9CisKKy0gKHZvaWQpX3Jlc2V0U2hvd2luZ1RleHRTdHlsZTooTlNOb3Rp
ZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMg
PSBOTzsKKyAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgaGlkZVRleHRTdHlsZU9wdGlvbnNd
OworfQorCistICh2b2lkKV9wZXJmb3JtQWN0aW9uOihXS1NoZWV0QWN0aW9ucylhY3Rpb24KK3sK
KyAgICBfcGFnZS0+cGVyZm9ybUFjdGlvbk9uRWxlbWVudCgodWludDMyX3QpYWN0aW9uKTsKK30K
KworLSAodm9pZCljb3B5OihpZClzZW5kZXIKK3sKKyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21t
YW5kKEFTQ0lJTGl0ZXJhbCgiY29weSIpKTsKK30KKworLSAodm9pZCljdXQ6KGlkKXNlbmRlcgor
eworICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgdGV4dFdpbGxDaGFuZ2U6c2VsZl07CisKKyAgICBf
cGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgiY3V0IikpOworCisgICAgW3Nl
bGYuaW5wdXREZWxlZ2F0ZSB0ZXh0RGlkQ2hhbmdlOnNlbGZdOworfQorCistICh2b2lkKXBhc3Rl
OihpZClzZW5kZXIKK3sKKyAgICBbc2VsZi5pbnB1dERlbGVnYXRlIHRleHRXaWxsQ2hhbmdlOnNl
bGZdOworICAgIAorICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJw
YXN0ZSIpKTsKKyAgICAKKyAgICBbc2VsZi5pbnB1dERlbGVnYXRlIHRleHREaWRDaGFuZ2U6c2Vs
Zl07Cit9CisKKy0gKHZvaWQpc2VsZWN0OihpZClzZW5kZXIKK3sKKyAgICBbX3RleHRTZWxlY3Rp
b25Bc3Npc3RhbnQgc2VsZWN0V29yZF07CisgICAgLy8gV2UgY2Fubm90IHVzZSBzZWxlY3RXb3Jk
IGNvbW1hbmQsIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIHNlbGVjdCB0aGUgd29yZCBl
dmVuIHdoZW4gaXQgaXMgdGhlIGxhc3QgaW4gdGhlIHBhcmFncmFwaC4KKyAgICBfcGFnZS0+ZXh0
ZW5kU2VsZWN0aW9uKFdvcmRHcmFudWxhcml0eSk7Cit9CisKKy0gKHZvaWQpc2VsZWN0QWxsOihp
ZClzZW5kZXIKK3sKKyAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2VsZWN0QWxsOnNlbmRl
cl07CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoInNlbGVjdEFs
bCIpKTsKK30KKworLSAodm9pZCl0b2dnbGVCb2xkZmFjZTooaWQpc2VuZGVyCit7CisgICAgaWYg
KCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwoInRv
Z2dsZUJvbGQiKSk7Cit9CisKKy0gKHZvaWQpdG9nZ2xlSXRhbGljczooaWQpc2VuZGVyCit7Cisg
ICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVy
YWwoInRvZ2dsZUl0YWxpYyIpKTsKK30KKworLSAodm9pZCl0b2dnbGVVbmRlcmxpbmU6KGlkKXNl
bmRlcgoreworICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQo
QVNDSUlMaXRlcmFsKCJ0b2dnbGVVbmRlcmxpbmUiKSk7Cit9CisKKy0gKHZvaWQpX3Nob3dUZXh0
U3R5bGVPcHRpb25zOihpZClzZW5kZXIKK3sKKyAgICBfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMg
PSBZRVM7CisgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNob3dUZXh0U3R5bGVPcHRpb25z
XTsKK30KKworLSAodm9pZClfc2hvd0RpY3Rpb25hcnk6KE5TU3RyaW5nICopdGV4dAoreworICAg
IENHUmVjdCBwcmVzZW50YXRpb25SZWN0ID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9u
UmVjdHNbMF0ucmVjdCgpOworICAgIGlmIChfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkKKyAgICAg
ICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNob3dEaWN0aW9uYXJ5Rm9yOnRleHQgZnJvbVJl
Y3Q6cHJlc2VudGF0aW9uUmVjdF07CisgICAgZWxzZQorICAgICAgICBbX3dlYlNlbGVjdGlvbkFz
c2lzdGFudCBzaG93RGljdGlvbmFyeUZvcjp0ZXh0IGZyb21SZWN0OnByZXNlbnRhdGlvblJlY3Rd
OworfQorCistICh2b2lkKV9kZWZpbmU6KGlkKXNlbmRlcgoreworICAgIF9wYWdlLT5nZXRTZWxl
Y3Rpb25PckNvbnRlbnRzQXNTdHJpbmcoU3RyaW5nQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9v
bCBlcnJvciwgU3RyaW5nSW1wbCogc3RyaW5nKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFzdHJpbmcpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgTlNTdHJpbmcgKmNvbnZlcnRlZFN0cmluZyA9ICpzdHJpbmc7CisgICAgICAg
IFtzZWxmIF9zaG93RGljdGlvbmFyeTpjb252ZXJ0ZWRTdHJpbmddOworICAgIH0pKTsKK30KKwor
Ly8gVUlXS0ludGVyYWN0aW9uVmlld1Byb3RvY29sCisKK3N0YXRpYyBpbmxpbmUgV0tHZXN0dXJl
VHlwZSB0b1dLR2VzdHVyZVR5cGUoVUlXS0dlc3R1cmVUeXBlIGdlc3R1cmVUeXBlKQoreworICAg
IHN3aXRjaCAoZ2VzdHVyZVR5cGUpIHsKKyAgICBjYXNlIFVJV0tHZXN0dXJlTG91cGU6CisgICAg
ICAgIHJldHVybiBXS0dlc3R1cmVMb3VwZTsKKyAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2Vy
VGFwOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlT25lRmluZ2VyVGFwOworICAgIGNhc2UgVUlX
S0dlc3R1cmVUYXBBbmRBSGFsZjoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVRhcEFuZEFIYWxm
OworICAgIGNhc2UgVUlXS0dlc3R1cmVEb3VibGVUYXA6CisgICAgICAgIHJldHVybiBXS0dlc3R1
cmVEb3VibGVUYXA7CisgICAgY2FzZSBVSVdLR2VzdHVyZVRhcEFuZEhhbGY6CisgICAgICAgIHJl
dHVybiBXS0dlc3R1cmVUYXBBbmRIYWxmOworICAgIGNhc2UgVUlXS0dlc3R1cmVEb3VibGVUYXBJ
blVuZWRpdGFibGU6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFi
bGU7CisgICAgY2FzZSBVSVdLR2VzdHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZToKKyAgICAg
ICAgcmV0dXJuIFdLR2VzdHVyZU9uZUZpbmdlclRhcEluVW5lZGl0YWJsZTsKKyAgICBjYXNlIFVJ
V0tHZXN0dXJlT25lRmluZ2VyVGFwU2VsZWN0c0FsbDoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVy
ZU9uZUZpbmdlclRhcFNlbGVjdHNBbGw7CisgICAgY2FzZSBVSVdLR2VzdHVyZU9uZUZpbmdlckRv
dWJsZVRhcDoKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDsKKyAg
ICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2VyVHJpcGxlVGFwOgorICAgICAgICByZXR1cm4gV0tH
ZXN0dXJlT25lRmluZ2VyVHJpcGxlVGFwOworICAgIGNhc2UgVUlXS0dlc3R1cmVUd29GaW5nZXJT
aW5nbGVUYXA6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA7Cisg
ICAgY2FzZSBVSVdLR2VzdHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU6CisgICAgICAg
IHJldHVybiBXS0dlc3R1cmVUd29GaW5nZXJSYW5nZWRTZWxlY3RHZXN0dXJlOworICAgIGNhc2Ug
VUlXS0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVyZToKKyAgICAgICAgcmV0dXJuIFdLR2VzdHVy
ZVRhcE9uTGlua1dpdGhHZXN0dXJlOworICAgIGNhc2UgVUlXS0dlc3R1cmVNYWtlV2ViU2VsZWN0
aW9uOgorICAgICAgICByZXR1cm4gV0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdLR2VzdHVyZUxvdXBlOworfQor
CitzdGF0aWMgaW5saW5lIFVJV0tHZXN0dXJlVHlwZSB0b1VJV0tHZXN0dXJlVHlwZShXS0dlc3R1
cmVUeXBlIGdlc3R1cmVUeXBlKQoreworICAgIHN3aXRjaCAoZ2VzdHVyZVR5cGUpIHsKKyAgICBj
YXNlIFdLR2VzdHVyZUxvdXBlOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVMb3VwZTsKKyAg
ICBjYXNlIFdLR2VzdHVyZU9uZUZpbmdlclRhcDoKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJl
T25lRmluZ2VyVGFwOworICAgIGNhc2UgV0tHZXN0dXJlVGFwQW5kQUhhbGY6CisgICAgICAgIHJl
dHVybiBVSVdLR2VzdHVyZVRhcEFuZEFIYWxmOworICAgIGNhc2UgV0tHZXN0dXJlRG91YmxlVGFw
OgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVEb3VibGVUYXA7CisgICAgY2FzZSBXS0dlc3R1
cmVUYXBBbmRIYWxmOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVUYXBBbmRIYWxmOworICAg
IGNhc2UgV0tHZXN0dXJlRG91YmxlVGFwSW5VbmVkaXRhYmxlOgorICAgICAgICByZXR1cm4gVUlX
S0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU7CisgICAgY2FzZSBXS0dlc3R1cmVPbmVGaW5n
ZXJUYXBJblVuZWRpdGFibGU6CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZU9uZUZpbmdlclRh
cEluVW5lZGl0YWJsZTsKKyAgICBjYXNlIFdLR2VzdHVyZU9uZUZpbmdlclRhcFNlbGVjdHNBbGw6
CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZU9uZUZpbmdlclRhcFNlbGVjdHNBbGw7CisgICAg
Y2FzZSBXS0dlc3R1cmVPbmVGaW5nZXJEb3VibGVUYXA6CisgICAgICAgIHJldHVybiBVSVdLR2Vz
dHVyZU9uZUZpbmdlckRvdWJsZVRhcDsKKyAgICBjYXNlIFdLR2VzdHVyZU9uZUZpbmdlclRyaXBs
ZVRhcDoKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlT25lRmluZ2VyVHJpcGxlVGFwOworICAg
IGNhc2UgV0tHZXN0dXJlVHdvRmluZ2VyU2luZ2xlVGFwOgorICAgICAgICByZXR1cm4gVUlXS0dl
c3R1cmVUd29GaW5nZXJTaW5nbGVUYXA7CisgICAgY2FzZSBXS0dlc3R1cmVUd29GaW5nZXJSYW5n
ZWRTZWxlY3RHZXN0dXJlOgorICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVUd29GaW5nZXJSYW5n
ZWRTZWxlY3RHZXN0dXJlOworICAgIGNhc2UgV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdlc3R1cmU6
CisgICAgICAgIHJldHVybiBVSVdLR2VzdHVyZVRhcE9uTGlua1dpdGhHZXN0dXJlOworICAgIGNh
c2UgV0tHZXN0dXJlTWFrZVdlYlNlbGVjdGlvbjoKKyAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJl
TWFrZVdlYlNlbGVjdGlvbjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgV0tTZWxlY3Rpb25U
b3VjaCB0b1dLU2VsZWN0aW9uVG91Y2goVUlXS1NlbGVjdGlvblRvdWNoIHRvdWNoKQoreworICAg
IHN3aXRjaCAodG91Y2gpIHsKKyAgICBjYXNlIFVJV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ6Cisg
ICAgICAgIHJldHVybiBXS1NlbGVjdGlvblRvdWNoU3RhcnRlZDsKKyAgICBjYXNlIFVJV0tTZWxl
Y3Rpb25Ub3VjaE1vdmVkOgorICAgICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaE1vdmVkOwor
ICAgIGNhc2UgVUlXS1NlbGVjdGlvblRvdWNoRW5kZWQ6CisgICAgICAgIHJldHVybiBXS1NlbGVj
dGlvblRvdWNoRW5kZWQ7CisgICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0Zv
cndhcmQ6CisgICAgICAgIHJldHVybiBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdGb3J3YXJk
OworICAgIGNhc2UgVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNrd2FyZDoKKyAgICAg
ICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0JhY2t3YXJkOworICAgIGNhc2Ug
VUlXS1NlbGVjdGlvblRvdWNoRW5kZWROb3RNb3Zpbmc6CisgICAgICAgIHJldHVybiBXS1NlbGVj
dGlvblRvdWNoRW5kZWROb3RNb3Zpbmc7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBXS1NlbGVjdGlvblRvdWNoRW5kZWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUg
VUlXS1NlbGVjdGlvblRvdWNoIHRvVUlXS1NlbGVjdGlvblRvdWNoKFdLU2VsZWN0aW9uVG91Y2gg
dG91Y2gpCit7CisgICAgc3dpdGNoICh0b3VjaCkgeworICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3Vj
aFN0YXJ0ZWQ6CisgICAgICAgIHJldHVybiBVSVdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOworICAg
IGNhc2UgV0tTZWxlY3Rpb25Ub3VjaE1vdmVkOgorICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlv
blRvdWNoTW92ZWQ7CisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5kZWQ6CisgICAgICAgIHJl
dHVybiBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZDsKKyAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hF
bmRlZE1vdmluZ0ZvcndhcmQ6CisgICAgICAgIHJldHVybiBVSVdLU2VsZWN0aW9uVG91Y2hFbmRl
ZE1vdmluZ0ZvcndhcmQ7CisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNr
d2FyZDoKKyAgICAgICAgcmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dh
cmQ7CisgICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoRW5kZWROb3RNb3Zpbmc6CisgICAgICAgIHJl
dHVybiBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE5vdE1vdmluZzsKKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlIHRvV0tHZXN0dXJlUmVjb2duaXplclN0
YXRlKFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRl
KSB7CisgICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZToKKyAgICAgICAg
cmV0dXJuIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlOworICAgIGNhc2UgVUlHZXN0
dXJlUmVjb2duaXplclN0YXRlQmVnYW46CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVSZWNvZ25p
emVyU3RhdGVCZWdhbjsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWQ6
CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOworICAgIGNh
c2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOgorICAgICAgICByZXR1cm4gV0tH
ZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOworICAgIGNhc2UgVUlHZXN0dXJlUmVjb2du
aXplclN0YXRlRW5kZWQ6CisgICAgICAgIHJldHVybiBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVF
bmRlZDsKKyAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUZhaWxlZDoKKyAgICAgICAg
cmV0dXJuIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUZhaWxlZDsKKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlIHRvVUlHZXN0dXJlUmVjb2duaXplclN0
YXRlKFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRl
KSB7CisgICAgY2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVQb3NzaWJsZToKKyAgICAgICAg
cmV0dXJuIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlOworICAgIGNhc2UgV0tHZXN0
dXJlUmVjb2duaXplclN0YXRlQmVnYW46CisgICAgICAgIHJldHVybiBVSUdlc3R1cmVSZWNvZ25p
emVyU3RhdGVCZWdhbjsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWQ6
CisgICAgICAgIHJldHVybiBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDaGFuZ2VkOworICAgIGNh
c2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOgorICAgICAgICByZXR1cm4gVUlH
ZXN0dXJlUmVjb2duaXplclN0YXRlQ2FuY2VsbGVkOworICAgIGNhc2UgV0tHZXN0dXJlUmVjb2du
aXplclN0YXRlRW5kZWQ6CisgICAgICAgIHJldHVybiBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVF
bmRlZDsKKyAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUZhaWxlZDoKKyAgICAgICAg
cmV0dXJuIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUZhaWxlZDsKKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgVUlXS1NlbGVjdGlvbkZsYWdzIHRvVUlXS1NlbGVjdGlvbkZsYWdzKFdLU2VsZWN0
aW9uRmxhZ3MgZmxhZykKK3sKKyAgICBzd2l0Y2ggKGZsYWcpIHsKKyAgICBjYXNlIFdLTm9uZToK
KyAgICAgICAgcmV0dXJuIFVJV0tOb25lOworICAgIGNhc2UgV0tXb3JkSXNOZWFyVGFwOgorICAg
ICAgICByZXR1cm4gVUlXS1dvcmRJc05lYXJUYXA7CisgICAgY2FzZSBXS0lzQmxvY2tTZWxlY3Rp
b246CisgICAgICAgIHJldHVybiBVSVdLSXNCbG9ja1NlbGVjdGlvbjsKKyAgICB9Cit9CisKK3N0
YXRpYyBpbmxpbmUgV0tIYW5kbGVQb3NpdGlvbiB0b1dLSGFuZGxlUG9zaXRpb24oVUlXS0hhbmRs
ZVBvc2l0aW9uIHBvc2l0aW9uKQoreworICAgIHN3aXRjaCAocG9zaXRpb24pIHsKKyAgICBjYXNl
IFVJV0tIYW5kbGVUb3A6CisgICAgICAgIHJldHVybiBXS0hhbmRsZVRvcDsKKyAgICBjYXNlIFVJ
V0tIYW5kbGVSaWdodDoKKyAgICAgICAgcmV0dXJuIFdLSGFuZGxlUmlnaHQ7CisgICAgY2FzZSBV
SVdLSGFuZGxlQm90dG9tOgorICAgICAgICByZXR1cm4gV0tIYW5kbGVCb3R0b207CisgICAgY2Fz
ZSBVSVdLSGFuZGxlTGVmdDoKKyAgICAgICAgcmV0dXJuIFdLSGFuZGxlTGVmdDsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZShib29sIGVycm9yLCBX
S0NvbnRlbnRWaWV3ICp2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQz
Ml90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzKQor
eworICAgIGlmIChlcnJvcikgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSkK
KyAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNz
aXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRo
R2VzdHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkgd2l0
aFN0YXRlOnRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJl
Y29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0b1VJV0tTZWxlY3Rpb25G
bGFncygoV0tTZWxlY3Rpb25GbGFncylmbGFncykpXTsKKyAgICBlbHNlCisgICAgICAgIFsoVUlX
S1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBz
ZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZTp0
b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkgd2l0aFN0YXRlOnRv
VUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29nbml6ZXJT
dGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0b1VJV0tTZWxlY3Rpb25GbGFncygoV0tT
ZWxlY3Rpb25GbGFncylmbGFncykpXTsKK30KKworc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdl
ZFdpdGhUb3VjaChib29sIGVycm9yLCBXS0NvbnRlbnRWaWV3ICp2aWV3LCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoKQoreworICAgIGlmIChlcnJvcikgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSkKKyAgICAgICAgWyhVSVdLU2VsZWN0
aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFu
Z2VkV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1Nl
bGVjdGlvblRvdWNoKChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKV07CisgICAgZWxzZQorICAgICAg
ICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlvbkFzc2lz
dGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxl
Y3Rpb25Ub3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCld
OworfQorCistICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooV2ViS2l0
OjpXS1NlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooV2ViS2l0OjpXS1NlbGVjdGlvbkZs
YWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJl
c2hvbGQ6KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkCit7CisgICAgW193ZWJTZWxlY3Rpb25Bc3Np
c3RhbnQgYmxvY2tTZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNo
KChXS1NlbGVjdGlvblRvdWNoKXRvdWNoKSB3aXRoRmxhZ3M6dG9VSVdLU2VsZWN0aW9uRmxhZ3Mo
KFdLU2VsZWN0aW9uRmxhZ3MpZmxhZ3MpIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJp
bmtUaHJlc2hvbGQ6c2hyaW5rVGhyZXNob2xkXTsKK30KKworLSAodm9pZCljaGFuZ2VTZWxlY3Rp
b25XaXRoR2VzdHVyZUF0OihDR1BvaW50KXBvaW50IHdpdGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5
cGUpZ2VzdHVyZVR5cGUgd2l0aFN0YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpc3RhdGUK
K3sKKyAgICBfcGFnZS0+c2VsZWN0V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQp
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgdG9XS0dlc3R1cmVUeXBlKGdlc3R1cmVUeXBlKSwgdG9X
S0dlc3R1cmVSZWNvZ25pemVyU3RhdGUoc3RhdGUpLCBHZXN0dXJlQ2FsbGJhY2s6OmNyZWF0ZShb
c2VsZl0oYm9vbCBlcnJvciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJf
dCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFncykgewor
ICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoZXJyb3IsIHNlbGYsIHBvaW50LCBn
ZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBmbGFncyk7CisgICAgfSkpOworfQorCistICh2b2lk
KWNoYW5nZVNlbGVjdGlvbldpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25U
b3VjaDooVUlXS1NlbGVjdGlvblRvdWNoKXRvdWNoIGJhc2VJc1N0YXJ0OihCT09MKWJhc2VJc1N0
YXJ0Cit7CisgICAgX3BhZ2UtPnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNvcmU6Oklu
dFBvaW50KHBvaW50KSwgdG9XS1NlbGVjdGlvblRvdWNoKHRvdWNoKSwgYmFzZUlzU3RhcnQsIFRv
dWNoZXNDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShib29sIGVycm9yLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoKSB7CisgICAgICAgIHNlbGVjdGlvbkNoYW5n
ZWRXaXRoVG91Y2goZXJyb3IsIHNlbGYsIHBvaW50LCB0b3VjaCk7CisgICAgfSkpOworfQorCist
ICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhUb3VjaGVzRnJvbTooQ0dQb2ludClmcm9tIHRvOihD
R1BvaW50KXRvIHdpdGhHZXN0dXJlOihVSVdLR2VzdHVyZVR5cGUpZ2VzdHVyZVR5cGUgd2l0aFN0
YXRlOihVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUpZ2VzdHVyZVN0YXRlCit7CisgICAgX3BhZ2Ut
PnNlbGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50KGZyb20pLCBXZWJDb3JlOjpJ
bnRQb2ludCh0byksIHRvV0tHZXN0dXJlVHlwZShnZXN0dXJlVHlwZSksIHRvV0tHZXN0dXJlUmVj
b2duaXplclN0YXRlKGdlc3R1cmVTdGF0ZSksIEdlc3R1cmVDYWxsYmFjazo6Y3JlYXRlKFtzZWxm
XShib29sIGVycm9yLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdl
c3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZsYWdzKSB7CisgICAg
ICAgIHNlbGVjdGlvbkNoYW5nZWRXaXRoR2VzdHVyZShlcnJvciwgc2VsZiwgcG9pbnQsIGdlc3R1
cmVUeXBlLCBnZXN0dXJlU3RhdGUsIGZsYWdzKTsKKyAgICB9KSk7Cit9CisKKy0gKHZvaWQpY2hh
bmdlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9u
VG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5kbGU6KFVJV0tIYW5kbGVQb3Np
dGlvbiloYW5kbGUKK3sKKyAgICBfcGFnZS0+dXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2go
V2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCB0b1dLU2VsZWN0aW9uVG91Y2godG91Y2gpLCB0b1dL
SGFuZGxlUG9zaXRpb24oaGFuZGxlKSk7Cit9CisKKy0gKFdLQXV0b0NvcnJlY3Rpb25EYXRhICop
YXV0b2NvcnJlY3Rpb25EYXRhCit7CisgICAgcmV0dXJuIF9hdXRvY29ycmVjdGlvbkRhdGEuZ2V0
KCk7Cit9CisKKy8vIFRoZSBjb21wbGV0aW9uIGhhbmRsZXIgY2FuIHBhc3MgbmlsIGlmIGlucHV0
IGRvZXMgbm90IG1hdGNoIHRoZSBhY3R1YWwgdGV4dCBwcmVjZWRpbmcgdGhlIGluc2VydGlvbiBw
b2ludC4KKy0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uUmVjdHNGb3JTdHJpbmc6KE5TU3Ry
aW5nICopaW5wdXQgd2l0aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLQXV0b2NvcnJl
Y3Rpb25SZWN0cyAqcmVjdHNGb3JJbnB1dCkpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBpZiAo
IWlucHV0IHx8ICFbaW5wdXQgbGVuZ3RoXSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihu
aWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgX2F1dG9jb3JyZWN0aW9uRGF0YSA9
IHN0ZDo6bWFrZV91bmlxdWU8V0tBdXRvQ29ycmVjdGlvbkRhdGE+KCk7CisgICAgX2F1dG9jb3Jy
ZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyIGNv
cHldOworICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKGlucHV0LCBBdXRvY29y
cmVjdGlvbkRhdGFDYWxsYmFjazo6Y3JlYXRlKFtzZWxmLCBjb21wbGV0aW9uSGFuZGxlcl0oYm9v
bCwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBjb25zdCBTdHJpbmcmIGZvbnROYW1l
LCBkb3VibGUgZm9udFNpemUsIHVpbnQ2NF90IHRyYWl0cykgeworICAgICAgICBDR1JlY3QgZmly
c3RSZWN0ID0gQ0dSZWN0WmVybzsKKyAgICAgICAgQ0dSZWN0IGxhc3RSZWN0ID0gQ0dSZWN0WmVy
bzsKKyAgICAgICAgaWYgKHJlY3RzLnNpemUoKSkgeworICAgICAgICAgICAgZmlyc3RSZWN0ID0g
cmVjdHNbMF07CisgICAgICAgICAgICBsYXN0UmVjdCA9IHJlY3RzW3JlY3RzLnNpemUoKSAtIDFd
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250
TmFtZSA9IGZvbnROYW1lOworICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250U2l6ZSA9
IGZvbnRTaXplOworICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250VHJhaXRzID0gdHJh
aXRzOworICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0Rmlyc3RSZWN0ID0gZmlyc3RS
ZWN0OworICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3QgPSBsYXN0UmVj
dDsKKworICAgICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIo
cmVjdHMuc2l6ZSgpID8gW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhdXRvY29ycmVjdGlvblJlY3Rz
V2l0aFJlY3RzOmZpcnN0UmVjdCBsYXN0UmVjdDpsYXN0UmVjdF0gOiBuaWwpOworICAgICAgICBb
X2F1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOworICAg
ICAgICBfYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBuaWw7Cisg
ICAgfSkpOworfQorCistIChDR1JlY3QpdGV4dEZpcnN0UmVjdAoreworICAgIHJldHVybiAoX3Bh
Z2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pID8gX3BhZ2UtPmVkaXRvclN0YXRlKCku
Zmlyc3RNYXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dEZpcnN0UmVjdDsKK30K
KworLSAoQ0dSZWN0KXRleHRMYXN0UmVjdAoreworICAgIHJldHVybiAoX3BhZ2UtPmVkaXRvclN0
YXRlKCkuaGFzQ29tcG9zaXRpb24pID8gX3BhZ2UtPmVkaXRvclN0YXRlKCkubGFzdE1hcmtlZFJl
Y3QgOiBfYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3Q7Cit9CisKKy8vIFRoZSBjb21w
bGV0aW9uIGhhbmRsZXIgc2hvdWxkIHBhc3MgdGhlIHJlY3Qgb2YgdGhlIGNvcnJlY3Rpb24gdGV4
dCBhZnRlciByZXBsYWNpbmcgdGhlIGlucHV0IHRleHQsIG9yIG5pbCBpZiB0aGUgcmVwbGFjZW1l
bnQgY291bGQgbm90IGJlIHBlcmZvcm1lZC4KKy0gKHZvaWQpYXBwbHlBdXRvY29ycmVjdGlvbjoo
TlNTdHJpbmcgKiljb3JyZWN0aW9uIHRvU3RyaW5nOihOU1N0cmluZyAqKWlucHV0IHdpdGhDb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJlY3RzRm9y
Q29ycmVjdGlvbikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfYXV0b2NvcnJlY3Rpb25EYXRh
LT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CisgICAg
X3BhZ2UtPmFwcGx5QXV0b2NvcnJlY3Rpb24oY29ycmVjdGlvbiwgaW5wdXQsIFN0cmluZ0NhbGxi
YWNrOjpjcmVhdGUoW3NlbGZdKGJvb2wgLyplcnJvciovLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsK
KyAgICAgICAgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHNlbGYu
YXV0b2NvcnJlY3Rpb25EYXRhOworCisgICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2Nv
cnJlY3Rpb25IYW5kbGVyKHN0cmluZyA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJl
Y3Rpb25SZWN0c1dpdGhSZWN0czphdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgbGFz
dFJlY3Q6YXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3RdIDogbmlsKTsKKyAgICAgICAg
W2F1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOworICAg
ICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IG5pbDsKKyAg
ICB9KSk7Cit9CisKKy0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhDb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqYXV0b2Nv
cnJlY3Rpb25Db250ZXh0KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhlIHN5bmNocm9ub3VzIGNhbGwgYXMgc29vbiBhcyBLZXlib2FyZCByZW1vdmVzIGxvY2tp
bmcgb2YgdGhlIG1haW4gdGhyZWFkLgorICAgIGNvbnN0IGJvb2wgdXNlU3luY1JlcXVlc3QgPSB0
cnVlOworCisgICAgaWYgKHVzZVN5bmNSZXF1ZXN0KSB7CisgICAgICAgIFN0cmluZyBiZWZvcmVU
ZXh0OworICAgICAgICBTdHJpbmcgbWFya2VkVGV4dDsKKyAgICAgICAgU3RyaW5nIHNlbGVjdGVk
VGV4dDsKKyAgICAgICAgU3RyaW5nIGFmdGVyVGV4dDsKKyAgICAgICAgdWludDY0X3QgbG9jYXRp
b247CisgICAgICAgIHVpbnQ2NF90IGxlbmd0aDsKKyAgICAgICAgX3BhZ2UtPmdldEF1dG9jb3Jy
ZWN0aW9uQ29udGV4dChiZWZvcmVUZXh0LCBtYXJrZWRUZXh0LCBzZWxlY3RlZFRleHQsIGFmdGVy
VGV4dCwgbG9jYXRpb24sIGxlbmd0aCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtXS0F1
dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0YTpiZWZvcmVU
ZXh0IG1hcmtlZFRleHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRleHQ6c2VsZWN0ZWRUZXh0IGFmdGVy
VGV4dDphZnRlclRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDpOU01ha2VSYW5nZShsb2Nh
dGlvbiwgbGVuZ3RoKV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIF9hdXRvY29ycmVjdGlvbkRh
dGEtPmF1dG9jb3JyZWN0aW9uQ29udGV4dEhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29w
eV07CisgICAgICAgIF9wYWdlLT5yZXF1ZXN0QXV0b2NvcnJlY3Rpb25Db250ZXh0KEF1dG9jb3Jy
ZWN0aW9uQ29udGV4dENhbGxiYWNrOjpjcmVhdGUoW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVyXShi
b29sIC8qZXJyb3IqLywgY29uc3QgU3RyaW5nJiBiZWZvcmVUZXh0LCBjb25zdCBTdHJpbmcmIG1h
cmtlZFRleHQsIGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRUZXh0LCBjb25zdCBTdHJpbmcmIGFmdGVy
VGV4dCwgdWludDY0X3QgbG9jYXRpb24sIHVpbnQ2NF90IGxlbmd0aCkgeworICAgICAgICAgICAg
V0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHNlbGYuYXV0b2NvcnJl
Y3Rpb25EYXRhOworICAgICAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlv
bkNvbnRleHRIYW5kbGVyKFtXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNv
bnRleHRXaXRoRGF0YTpiZWZvcmVUZXh0IG1hcmtlZFRleHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRl
eHQ6c2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDphZnRlclRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2Vk
VGV4dDpOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVuZ3RoKV0pOworICAgICAgICB9KSk7CisgICAg
fQorfQorCisvLyBVSVdlYkZvcm1BY2Nlc3NvcnlEZWxlZ2F0ZQorLSAodm9pZClhY2Nlc3NvcnlE
b25lCit7CisgICAgW3NlbGYgcmVzaWduRmlyc3RSZXNwb25kZXJdOworfQorCistICh2b2lkKWFj
Y2Vzc29yeVRhYjooQk9PTClpc05leHQKK3sKK30KKworLSAodm9pZClhY2Nlc3NvcnlBdXRvRmls
bAoreworfQorCistICh2b2lkKWFjY2Vzc29yeUNsZWFyCit7Cit9CisKKy0gKHZvaWQpX3VwZGF0
ZUFjY2Vzc29yeQoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGluaXRpYWxpemUgd2l0aCB2
YWx1ZXMgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICBfYWNjZXNzb3J5Lm5leHRFbmFibGVkID0g
WUVTOworICAgIF9hY2Nlc3NvcnkucHJldmlvdXNFbmFibGVkID0gWUVTOworICAgIAorICAgIFtf
YWNjZXNzb3J5IHNldENsZWFyVmlzaWJsZTpOT107CisKKyAgICAvLyBGSVhNRTogaGlkZSBvciBz
aG93IHRoZSBBdXRvRmlsbCBidXR0b24gYXMgbmVlZGVkLgorfQorCisvLyBLZXlib2FyZCBpbnRl
cmFjdGlvbgorLy8gVUlUZXh0SW5wdXQgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KKworLSAoTlNT
dHJpbmcgKil0ZXh0SW5SYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5nZQoreworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKHZvaWQpcmVwbGFjZVJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlIHdpdGhU
ZXh0OihOU1N0cmluZyAqKXRleHQKK3sKK30KKworLSAoVUlUZXh0UmFuZ2UgKilzZWxlY3RlZFRl
eHRSYW5nZQoreworICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOl9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc1JhbmdlOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFu
Z2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0YWJsZTpfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnRSZWN0Ol9wYWdlLT5lZGl0b3JTdGF0ZSgpLmNhcmV0UmVjdEF0U3RhcnQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVjdDpfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5jYXJldFJlY3RBdEVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlv
blJlY3RzOltzZWxmIHdlYlNlbGVjdGlvblJlY3RzXQorICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZWN0ZWRUZXh0TGVuZ3RoOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGVkVGV4dExlbmd0
aF07Cit9CisKKy0gKENHUmVjdCljYXJldFJlY3RGb3JQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24g
Kilwb3NpdGlvbgoreworICAgIHJldHVybiAoKFdLVGV4dFBvc2l0aW9uICopcG9zaXRpb24pLnBv
c2l0aW9uUmVjdDsKK30KKworLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KFVJ
VGV4dFJhbmdlICopcmFuZ2UKK3sKKyAgICByZXR1cm4gW1dLVGV4dFNlbGVjdGlvblJlY3QgdGV4
dFNlbGVjdGlvblJlY3RzV2l0aFdlYlJlY3RzOigoV0tUZXh0UmFuZ2UgKilyYW5nZSkuc2VsZWN0
aW9uUmVjdHNdOworfQorCistICh2b2lkKXNldFNlbGVjdGVkVGV4dFJhbmdlOihVSVRleHRSYW5n
ZSAqKXJhbmdlCit7Cit9CisKKy0gKEJPT0wpaGFzTWFya2VkVGV4dAoreworICAgIHJldHVybiBb
X21hcmtlZFRleHQgbGVuZ3RoXTsKK30KKworLSAoTlNTdHJpbmcgKiltYXJrZWRUZXh0Cit7Cisg
ICAgcmV0dXJuIF9tYXJrZWRUZXh0LmdldCgpOworfQorCistIChVSVRleHRSYW5nZSAqKW1hcmtl
ZFRleHRSYW5nZQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TRGljdGlvbmFyeSAqKW1h
cmtlZFRleHRTdHlsZQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpc2V0TWFya2Vk
VGV4dFN0eWxlOihOU0RpY3Rpb25hcnkgKilzdHlsZURpY3Rpb25hcnkKK3sKK30KKworLSAodm9p
ZClzZXRNYXJrZWRUZXh0OihOU1N0cmluZyAqKW1hcmtlZFRleHQgc2VsZWN0ZWRSYW5nZTooTlNS
YW5nZSlzZWxlY3RlZFJhbmdlCit7CisgICAgX21hcmtlZFRleHQgPSBtYXJrZWRUZXh0OworICAg
IF9wYWdlLT5zZXRDb21wb3NpdGlvbihtYXJrZWRUZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmU+KCksIHNlbGVjdGVkUmFuZ2UubG9jYXRpb24sIHNlbGVjdGVkUmFuZ2Uu
bGVuZ3RoLCAwLCAwKTsKK30KKworLSAodm9pZCl1bm1hcmtUZXh0Cit7CisgICAgX21hcmtlZFRl
eHQgPSBuaWw7CisgICAgX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbigpOworfQorCistIChVSVRl
eHRQb3NpdGlvbiAqKWJlZ2lubmluZ09mRG9jdW1lbnQKK3sKKyAgICByZXR1cm4gbmlsOworfQor
CistIChVSVRleHRQb3NpdGlvbiAqKWVuZE9mRG9jdW1lbnQKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCistIChVSVRleHRSYW5nZSAqKXRleHRSYW5nZUZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRp
b24gKilmcm9tUG9zaXRpb24gdG9Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKil0b1Bvc2l0aW9u
Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbkZy
b21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiBvZmZzZXQ6KE5TSW50ZWdlcilv
ZmZzZXQKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRleHRQb3NpdGlvbiAqKXBvc2l0
aW9uRnJvbVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uIGluRGlyZWN0aW9uOihV
SVRleHRMYXlvdXREaXJlY3Rpb24pZGlyZWN0aW9uIG9mZnNldDooTlNJbnRlZ2VyKW9mZnNldAor
eworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TQ29tcGFyaXNvblJlc3VsdCljb21wYXJlUG9z
aXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24gdG9Qb3NpdGlvbjooVUlUZXh0UG9zaXRp
b24gKilvdGhlcgoreworICAgIHJldHVybiBOU09yZGVyZWRTYW1lOworfQorCistIChOU0ludGVn
ZXIpb2Zmc2V0RnJvbVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKWZyb20gdG9Qb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKil0b1Bvc2l0aW9uCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy0gKGlk
IDxVSVRleHRJbnB1dFRva2VuaXplcj4pdG9rZW5pemVyCit7CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAoVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbldpdGhpblJhbmdlOihVSVRleHRSYW5nZSAq
KXJhbmdlIGZhcnRoZXN0SW5EaXJlY3Rpb246KFVJVGV4dExheW91dERpcmVjdGlvbilkaXJlY3Rp
b24KK3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChVSVRleHRSYW5nZSAqKWNoYXJhY3RlclJh
bmdlQnlFeHRlbmRpbmdQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiBpbkRpcmVj
dGlvbjooVUlUZXh0TGF5b3V0RGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAgIHJldHVybiBuaWw7
Cit9CisKKy0gKFVJVGV4dFdyaXRpbmdEaXJlY3Rpb24pYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JQ
b3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiBpbkRpcmVjdGlvbjooVUlUZXh0U3Rv
cmFnZURpcmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICByZXR1cm4gVUlUZXh0V3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OworfQorCistICh2b2lkKXNldEJhc2VXcml0aW5nRGlyZWN0aW9uOihV
SVRleHRXcml0aW5nRGlyZWN0aW9uKXdyaXRpbmdEaXJlY3Rpb24gZm9yUmFuZ2U6KFVJVGV4dFJh
bmdlICopcmFuZ2UKK3sKK30KKworLSAoQ0dSZWN0KWZpcnN0UmVjdEZvclJhbmdlOihVSVRleHRS
YW5nZSAqKXJhbmdlCit7CisgICAgcmV0dXJuIENHUmVjdFplcm87Cit9CisKKy8qIEhpdCB0ZXN0
aW5nLiAqLworLSAoVUlUZXh0UG9zaXRpb24gKiljbG9zZXN0UG9zaXRpb25Ub1BvaW50OihDR1Bv
aW50KXBvaW50Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKilj
bG9zZXN0UG9zaXRpb25Ub1BvaW50OihDR1BvaW50KXBvaW50IHdpdGhpblJhbmdlOihVSVRleHRS
YW5nZSAqKXJhbmdlCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoVUlUZXh0UmFuZ2UgKilj
aGFyYWN0ZXJSYW5nZUF0UG9pbnQ6KENHUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1cm4gbmlsOwor
fQorCistICh2b2lkKWRlbGV0ZUJhY2t3YXJkCit7CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29t
bWFuZChBU0NJSUxpdGVyYWwoImRlbGV0ZUJhY2t3YXJkIikpOworfQorCisvLyBJbnNlcnRzIHRo
ZSBnaXZlbiBzdHJpbmcsIHJlcGxhY2luZyBhbnkgc2VsZWN0ZWQgb3IgbWFya2VkIHRleHQuCist
ICh2b2lkKWluc2VydFRleHQ6KE5TU3RyaW5nICopYVN0cmluZ1ZhbHVlCit7CisgICAgX3BhZ2Ut
Pmluc2VydFRleHQoYVN0cmluZ1ZhbHVlLCBOU05vdEZvdW5kLCAwKTsKK30KKworLSAoQk9PTClo
YXNUZXh0Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLy8gZW5kIG9mIFVJVGV4dElucHV0IHBy
b3RvY29sIGltcGxlbWVudGF0aW9uCisKKy8vIFVJVGV4dElucHV0UHJpdmF0ZSBwcm90b2NvbAor
Ly8gRGlyZWN0IGFjY2VzcyB0byB0aGUgKHByaXZhdGUpIFVJVGV4dElucHV0VHJhaXRzIG9iamVj
dC4KKy0gKFVJVGV4dElucHV0VHJhaXRzICopdGV4dElucHV0VHJhaXRzCit7CisgICAgaWYgKCFf
dHJhaXRzKQorICAgICAgICBfdHJhaXRzID0gW1tVSVRleHRJbnB1dFRyYWl0cyBhbGxvY10gaW5p
dF07CisgICAgcmV0dXJuIF90cmFpdHM7Cit9CisKKy0gKFVJVGV4dEludGVyYWN0aW9uQXNzaXN0
YW50ICopaW50ZXJhY3Rpb25Bc3Npc3RhbnQKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgd2hlbiB3ZSdyZSBpbiBVSVdlYlNlbGVjdGlvbk1vZGVUZXh0T25seSBo
b3dldmVyIGl0IGlzCisgICAgLy8gcG9zc2libGUgdGhhdCBpdCBjYW4gYmUgY2FsbGVkIHdoaWxl
IHdlIGFyZSB0cmFuc2l0aW9uaW5nIGJldHdlZW4gbW9kZXMuCisgICAgLy8gYXNzZXJ0KCFfd2Vi
U2VsZWN0aW9uQXNzaXN0YW50KTsKKworICAgIGlmICghX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQp
CisgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gW1tVSVdLVGV4dEludGVyYWN0aW9u
QXNzaXN0YW50IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl07CisKKyAgICByZXR1cm4gX3RleHRT
ZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCk7Cit9CisKKy0gKFVJV2ViU2VsZWN0aW9uQXNzaXN0YW50
ICopd2ViU2VsZWN0aW9uQXNzaXN0YW50Cit7CisgICAgcmV0dXJuIF93ZWJTZWxlY3Rpb25Bc3Np
c3RhbnQuZ2V0KCk7Cit9CisKKworLy8gTlNSYW5nZSBzdXBwb3J0LiAgV291bGQgbGlrZSB0byBk
ZXByZWNhdGUgdG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgYWx0aG91Z2ggc29tZSBzdXBwb3J0Cisv
LyAoaS5lLiBzZWxlY3Rpb25SYW5nZSkgaGFzIHNoaXBwZWQgYXMgQVBJLgorLSAoTlNSYW5nZSlz
ZWxlY3Rpb25SYW5nZQoreworICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsK
K30KKworLSAoQ0dSZWN0KXJlY3RGb3JOU1JhbmdlOihOU1JhbmdlKXJhbmdlCit7CisgICAgcmV0
dXJuIENHUmVjdFplcm87Cit9CisKKy0gKE5TUmFuZ2UpX21hcmtlZFRleHROU1JhbmdlCit7Cisg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworfQorCisvLyBET00gcmFuZ2Ug
c3VwcG9ydC4KKy0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQoreworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBh
ZmZpbml0eURvd25zdHJlYW06KEJPT0wpYWZmaW5pdHlEb3duc3RyZWFtCit7Cit9CisKKy8vIE1v
ZGlmeSB0ZXh0IHdpdGhvdXQgc3RhcnRpbmcgYSBuZXcgdW5kbyBncm91cGluZy4KKy0gKHZvaWQp
cmVwbGFjZVJhbmdlV2l0aFRleHRXaXRob3V0Q2xvc2luZ1R5cGluZzooVUlUZXh0UmFuZ2UgKily
YW5nZSByZXBsYWNlbWVudFRleHQ6KE5TU3RyaW5nICopdGV4dAoreworfQorCisvLyBDYXJldCBy
ZWN0IHN1cHBvcnQuICBTaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgZmlyc3RSZWN0Rm9yUmFu
Z2UgZG9lc24ndCBvZmZlciBwcmVjaXNlbHkKKy8vIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuCist
IChDR1JlY3QpcmVjdENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgoreworICAgIHJldHVybiBDR1Jl
Y3RaZXJvOworfQorCisvLyBXZWIgZXZlbnRzLgorLSAoQk9PTClyZXF1aXJlc0tleUV2ZW50cwor
eworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpaGFuZGxlS2V5V2ViRXZlbnQ6KFdlYklP
U0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBfcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2ZW50KSk7Cit9CisKKy0gKEJPT0wpX2ludGVycHJldEtl
eUV2ZW50OihXZWJJT1NFdmVudCAqKWV2ZW50IGlzQ2hhckV2ZW50OihCT09MKWlzQ2hhckV2ZW50
Cit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJFbnRlcktleSA9IDB4MDAwMzsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkJhY2tzcGFjZUtleSA9IDB4MDAwODsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga1dlYlJldHVybktleSA9IDB4MDAwRDsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQga1dlYkRlbGV0ZUtleSA9IDB4MDA3RjsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQga1dlYkxlZnRBcnJvd0tleSA9IDB4MDBBQzsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQga1dlYlVwQXJyb3dLZXkgPSAweDAwQUQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGtXZWJSaWdodEFycm93S2V5ID0gMHgwMEFFOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBr
V2ViRG93bkFycm93S2V5ID0gMHgwMEFGOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrV2Vi
RGVsZXRlRm9yd2FyZEtleSA9IDB4RjcyODsKKworICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRl
KCkuaXNDb250ZW50RWRpdGFibGUgJiYgZXZlbnQuaXNUYWJLZXkpCisgICAgICAgIHJldHVybiBO
TzsKKworICAgIEJPT0wgc2hpZnQgPSBldmVudC5tb2RpZmllckZsYWdzICYgV2ViRXZlbnRGbGFn
TWFza1NoaWZ0OworCisgICAgc3dpdGNoIChldmVudC5jaGFyYWN0ZXJTZXQpIHsKKyAgICBjYXNl
IFdlYkV2ZW50Q2hhcmFjdGVyU2V0U3ltYm9sOiB7CisgICAgICAgIFN0cmluZyBjb21tYW5kOwor
ICAgICAgICBOU1N0cmluZyAqY2hhcmFjdGVycyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnNdOworICAgICAgICBpZiAoW2NoYXJhY3RlcnMgbGVuZ3RoXSA9PSAwKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN3aXRjaCAoW2NoYXJhY3RlcnMgY2hhcmFjdGVyQXRJbmRl
eDowXSkgeworICAgICAgICBjYXNlIGtXZWJMZWZ0QXJyb3dLZXk6CisgICAgICAgICAgICBjb21t
YW5kID0gc2hpZnQgPyBBU0NJSUxpdGVyYWwoIm1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIikg
OiAgQVNDSUlMaXRlcmFsKCJtb3ZlTGVmdCIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBrV2ViVXBBcnJvd0tleToKKyAgICAgICAgICAgIGNvbW1hbmQgPSBzaGlmdCA/IEFT
Q0lJTGl0ZXJhbCgibW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJt
b3ZlVXAiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Uga1dlYlJpZ2h0QXJy
b3dLZXk6CisgICAgICAgICAgICBjb21tYW5kID0gc2hpZnQgPyBBU0NJSUxpdGVyYWwoIm1vdmVS
aWdodEFuZE1vZGlmeVNlbGVjdGlvbiIpIDogIEFTQ0lJTGl0ZXJhbCgibW92ZVJpZ2h0Iik7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGtXZWJEb3duQXJyb3dLZXk6CisgICAg
ICAgICAgICBjb21tYW5kID0gc2hpZnQgPyBBU0NJSUxpdGVyYWwoIm1vdmVEb3duQW5kTW9kaWZ5
U2VsZWN0aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJtb3ZlRG93biIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb21tYW5kLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kKTsKKyAgICAgICAgICAgIHJl
dHVybiBZRVM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2Vi
RXZlbnRDaGFyYWN0ZXJTZXRBU0NJSToKKyAgICBjYXNlIFdlYkV2ZW50Q2hhcmFjdGVyU2V0VW5p
Y29kZTogeworICAgICAgICBOU1N0cmluZyAqY2hhcmFjdGVycyA9IFtldmVudCBjaGFyYWN0ZXJz
XTsKKyAgICAgICAgaWYgKFtjaGFyYWN0ZXJzIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBzd2l0Y2ggKFtjaGFyYWN0ZXJzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsK
KyAgICAgICAgY2FzZSBrV2ViQmFja3NwYWNlS2V5OgorICAgICAgICBjYXNlIGtXZWJEZWxldGVL
ZXk6CisgICAgICAgICAgICBbW1VJS2V5Ym9hcmRJbXBsIHNoYXJlZEluc3RhbmNlXSBkZWxldGVG
cm9tSW5wdXRdOworICAgICAgICAgICAgcmV0dXJuIFlFUzsKKworICAgICAgICBjYXNlIGtXZWJF
bnRlcktleToKKyAgICAgICAgY2FzZSBrV2ViUmV0dXJuS2V5OgorICAgICAgICAgICAgaWYgKGlz
Q2hhckV2ZW50KSB7CisgICAgICAgICAgICAgICAgLy8gTWFwIFxyIGZyb20gSFcga2V5Ym9hcmQg
dG8gXG4gdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzb2Z0IGtleWJvYXJkLgorICAgICAg
ICAgICAgICAgIFtbVUlLZXlib2FyZEltcGwgc2hhcmVkSW5zdGFuY2VdIGFkZElucHV0U3RyaW5n
OkAiXG4iIHdpdGhGbGFnczowXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5POworCisgICAgICAgIGNhc2Uga1dlYkRlbGV0
ZUZvcndhcmRLZXk6CisgICAgICAgICAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJ
TGl0ZXJhbCgiZGVsZXRlRm9yd2FyZCIpKTsKKyAgICAgICAgICAgIHJldHVybiBZRVM7CisKKyAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgaWYgKGlzQ2hhckV2ZW50KSB7CisgICAgICAg
ICAgICAgICAgW1tVSUtleWJvYXJkSW1wbCBzaGFyZWRJbnN0YW5jZV0gYWRkSW5wdXRTdHJpbmc6
ZXZlbnQuY2hhcmFjdGVycyB3aXRoRmxhZ3M6ZXZlbnQua2V5Ym9hcmRGbGFnc107CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBO
TzsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICByZXR1cm4gTk87Cit9CisKKy8vIFNl
dHMgYSBidWZmZXIgdG8gbWFrZSByb29tIGZvciBhdXRvY29ycmVjdGlvbiB2aWV3cworLSAodm9p
ZClzZXRCb3R0b21CdWZmZXJIZWlnaHQ6KENHRmxvYXQpYm90dG9tQnVmZmVyCit7Cit9CisKKy0g
KFVJVmlldyAqKWF1dG9tYXRpY2FsbHlTZWxlY3RlZE92ZXJsYXkKK3sKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoVUlUZXh0R3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHkKK3sKKyAg
ICByZXR1cm4gVUlUZXh0R3JhbnVsYXJpdHlDaGFyYWN0ZXI7Cit9CisKKy0gKHZvaWQpaW5zZXJ0
RGljdGF0aW9uUmVzdWx0OihOU0FycmF5ICopZGljdGF0aW9uUmVzdWx0IHdpdGhDb3JyZWN0aW9u
SWRlbnRpZmllcjooaWQpY29ycmVjdGlvbklkZW50aWZpZXIKK3sKK30KKworLy8gU2hvdWxkIHJl
dHVybiBhbiBhcnJheSBvZiBOU0RpY3Rpb25hcnkgb2JqZWN0cyB0aGF0IGtleS92YWx1ZSBwYXJp
ZXMgZm9yIHRoZSBmaW5hbCB0ZXh0LCBjb3JyZWN0aW9uIGlkZW50aWZpZXIgYW5kCisvLyBhbHRl
cm5hdGl2ZSBzZWxlY3Rpb24gY291bnRzIHVzaW5nIHRoZSBrZXlzIGRlZmluZWQgYXQgdGhlIHRv
cCBvZiB0aGlzIGhlYWRlci4KKy0gKE5TQXJyYXkgKiltZXRhZGF0YURpY3Rpb25hcmllc0ZvckRp
Y3RhdGlvblJlc3VsdHMKK3sKKyAgICByZXR1cm4gbmlsOworfQorCisvLyBSZXR1cm5zIHRoZSBk
aWN0YXRpb24gcmVzdWx0IGJvdW5kYXJpZXMgZnJvbSBwb3NpdGlvbiBzbyB0aGF0IHRleHQgdGhh
dCB3YXMgbm90IGRpY3RhdGVkIGNhbiBiZSBleGNsdWRlZCBmcm9tIGxvZ2dpbmcuCisvLyBJZiB0
aGVzZSBhcmUgbm90IGltcGxlbWVudGVkLCBubyB0ZXh0IHdpbGwgYmUgbG9nZ2VkLgorLSAoVUlU
ZXh0UG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlG
cm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24KK3sKKyAgICByZXR1cm4gbmls
OworfQorCistIChVSVRleHRQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3Vs
dEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uCit7CisgICAg
cmV0dXJuIG5pbDsKK30KKworLy8gVGhlIGNhbiBhbGwgYmUgKGFuZCBoYXZlIGJlZW4pIHRyaXZp
YWxseSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBVSVRleHRJbnB1dC4gIERlcHJlY2F0ZSBhbmQg
cmVtb3ZlLgorLSAodm9pZCltb3ZlQmFja3dhcmQ6KHVuc2lnbmVkKWNvdW50Cit7Cit9CisKKy0g
KHZvaWQpbW92ZUZvcndhcmQ6KHVuc2lnbmVkKWNvdW50Cit7Cit9CisKKy0gKHVuaWNoYXIpY2hh
cmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gMDsKK30KKworLSAoTlNT
dHJpbmcgKil3b3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCit7CisgICAgcmV0dXJuIG5pbDsK
K30KKworLSAoRE9NUmFuZ2UgKil3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KK3sK
KyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXNldE1hcmtlZFRleHQ6KE5TU3RyaW5nICop
dGV4dAoreworfQorCistIChCT09MKWhhc0NvbnRlbnQKK3sKKyAgICByZXR1cm4gWUVTOworfQor
CistICh2b2lkKXNlbGVjdEFsbAoreworfQorCistIChVSUNvbG9yICopdGV4dENvbG9yRm9yQ2Fy
ZXRTZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gW1VJQ29sb3IgYmxhY2tDb2xvcl07Cit9CisKKy0g
KFVJRm9udCAqKWZvbnRGb3JDYXJldFNlbGVjdGlvbgoreworICAgIENHRmxvYXQgem9vbVNjYWxl
ID0gMS4wOyAgICAvLyBGSVhNRTogcmV0cmlldmUgdGhlIGFjdHVhbCBkb2N1bWVudCBzY2FsZSBm
YWN0b3IuCisgICAgQ0dGbG9hdCBzY2FsZWRTaXplID0gX2F1dG9jb3JyZWN0aW9uRGF0YS0+Zm9u
dFNpemU7CisgICAgaWYgKENHRkFicyh6b29tU2NhbGUgLSAxLjApID4gRkxUX0VQU0lMT04pCisg
ICAgICAgIHNjYWxlZFNpemUgKj0gem9vbVNjYWxlOworICAgIHJldHVybiBbVUlGb250IGZvbnRX
aXRoRmFtaWx5TmFtZTpfYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250TmFtZSB0cmFpdHM6KFVJRm9u
dFRyYWl0KV9hdXRvY29ycmVjdGlvbkRhdGEtPmZvbnRUcmFpdHMgc2l6ZTpzY2FsZWRTaXplXTsK
K30KKworLSAoQk9PTCloYXNTZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJP
T0wpaXNQb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiBhdEJvdW5kYXJ5OihVSVRl
eHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbjooVUlUZXh0RGlyZWN0aW9uKWRp
cmVjdGlvbgoreworICAgIHJldHVybiBOTzsKK30KKworLSAoVUlUZXh0UG9zaXRpb24gKilwb3Np
dGlvbkZyb21Qb3NpdGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiB0b0JvdW5kYXJ5OihV
SVRleHRHcmFudWxhcml0eSlncmFudWxhcml0eSBpbkRpcmVjdGlvbjooVUlUZXh0RGlyZWN0aW9u
KWRpcmVjdGlvbgoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKEJPT0wpaXNQb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiB3aXRoaW5UZXh0VW5pdDooVUlUZXh0R3JhbnVsYXJp
dHkpZ3JhbnVsYXJpdHkgaW5EaXJlY3Rpb246KFVJVGV4dERpcmVjdGlvbilkaXJlY3Rpb24KK3sK
KyAgICByZXR1cm4gTk87Cit9CisKKy0gKFVJVGV4dFJhbmdlICopcmFuZ2VFbmNsb3NpbmdQb3Np
dGlvbjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbiB3aXRoR3JhbnVsYXJpdHk6KFVJVGV4dEdy
YW51bGFyaXR5KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uOihVSVRleHREaXJlY3Rpb24pZGlyZWN0
aW9uCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZCl0YWtlVHJhaXRzRnJvbTooVUlU
ZXh0SW5wdXRUcmFpdHMgKil0cmFpdHMKK3sKKyAgICBbW3NlbGYgdGV4dElucHV0VHJhaXRzXSB0
YWtlVHJhaXRzRnJvbTp0cmFpdHNdOworfQorCisvLyBGSVhNRTogSSB3YW50IHRvIGNoYW5nZSB0
aGUgbmFtZSBvZiB0aGVzZSBmdW5jdGlvbnMsIGJ1dCBJJ20gbGVhdmluZyBpdCBmb3Igbm93Cisv
LyB0byBtYWtlIGl0IGVhc2llciB0byBsb29rIHVwIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9u
cyBpbiBVSUtpdC4KKworLSAodm9pZClfc3RhcnRBc3Npc3RpbmdLZXlib2FyZAoreworICAgIFtz
ZWxmIHVzZVNlbGVjdGlvbkFzc2lzdGFudFdpdGhNb2RlOlVJV2ViU2VsZWN0aW9uTW9kZVRleHRP
bmx5XTsKK30KKworLSAodm9pZClfc3RvcEFzc2lzdGluZ0tleWJvYXJkCit7CisgICAgW3NlbGYg
dXNlU2VsZWN0aW9uQXNzaXN0YW50V2l0aE1vZGU6VUlXZWJTZWxlY3Rpb25Nb2RlV2ViXTsKK30K
KworLSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlCit7CisgICAgX2lzRWRpdGFibGUgPSBZRVM7
CisgICAgaWYgKCFbc2VsZiBpc0ZpcnN0UmVzcG9uZGVyXSkKKyAgICAgICAgW3NlbGYgYmVjb21l
Rmlyc3RSZXNwb25kZXJdOworCisgICAgW3NlbGYgX3N0YXJ0QXNzaXN0aW5nS2V5Ym9hcmRdOwor
ICAgIFtzZWxmIHJlbG9hZElucHV0Vmlld3NdOworICAgIFtzZWxmIF91cGRhdGVBY2Nlc3Nvcnld
OworfQorCistICh2b2lkKV9zdG9wQXNzaXN0aW5nTm9kZQoreworICAgIF9pc0VkaXRhYmxlID0g
Tk87CisKKyAgICBbc2VsZiBfc3RvcEFzc2lzdGluZ0tleWJvYXJkXTsKKyAgICBbc2VsZiByZWxv
YWRJbnB1dFZpZXdzXTsKKyAgICBbc2VsZiBfdXBkYXRlQWNjZXNzb3J5XTsKK30KKworLSAodm9p
ZClfc2VsZWN0aW9uQ2hhbmdlZAoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBv
dXQgd2hhdCB0byBkbyBpZiB0aGUgc2VsZWN0aW9uIGlzIGNoYW5nZWQgYnkgSmF2YXNjcmlwdC4K
KyAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKKyAgICAgICAgX21hcmtlZFRleHQg
PSAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pID8gX3BhZ2UtPmVkaXRvclN0
YXRlKCkubWFya2VkVGV4dCA6IFN0cmluZygpOworICAgICAgICBpZiAoIV9zaG93aW5nVGV4dFN0
eWxlT3B0aW9ucykKKyAgICAgICAgICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBzZWxlY3Rp
b25DaGFuZ2VkXTsKKyAgICB9IGVsc2UKKyAgICAgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQg
c2VsZWN0aW9uQ2hhbmdlZF07Cit9CisKKyNwcmFnbWEgbWFyayAtIEltcGxlbWVudGF0aW9uIG9m
IFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLgorCistIChCT09MKXNo
b3VsZElnbm9yZVdlYlRvdWNoCit7CisgICAgcmV0dXJuIE5POworfQorCistIChCT09MKWlzQW55
VG91Y2hPdmVyQWN0aXZlQXJlYTooTlNTZXQgKil0b3VjaGVzCit7CisgICAgcmV0dXJuIFlFUzsK
K30KKworQGVuZAorCisvLyBVSVRleHRSYW5nZSwgVUlUZXh0UG9zaXRpb24gYW5kIFVJVGV4dFNl
bGVjdGlvblJlY3QgaW1wbGVtZW50YXRpb25zIGZvciBXSzIKKworQGltcGxlbWVudGF0aW9uIFdL
VGV4dFJhbmdlIChVSVRleHRJbnB1dEFkZGl0aW9ucykKKworLSAoQk9PTClfaXNDYXJldAorewor
ICAgIHJldHVybiBzZWxmLmVtcHR5OworfQorCistIChCT09MKV9pc1JhbmdlZAoreworICAgIHJl
dHVybiAhc2VsZi5lbXB0eTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tUZXh0UmFu
Z2UKKworKyhXS1RleHRSYW5nZSAqKXRleHRSYW5nZVdpdGhTdGF0ZTooQk9PTClpc05vbmUgaXNS
YW5nZTooQk9PTClpc1JhbmdlIGlzRWRpdGFibGU6KEJPT0wpaXNFZGl0YWJsZSBzdGFydFJlY3Q6
KENHUmVjdClzdGFydFJlY3QgZW5kUmVjdDooQ0dSZWN0KWVuZFJlY3Qgc2VsZWN0aW9uUmVjdHM6
KE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0cyBzZWxlY3RlZFRleHRMZW5ndGg6KE5TVUludGVnZXIp
c2VsZWN0ZWRUZXh0TGVuZ3RoCit7CisgICAgV0tUZXh0UmFuZ2UgKnJhbmdlID0gW1tXS1RleHRS
YW5nZSBhbGxvY10gaW5pdF07CisgICAgcmFuZ2UuaXNOb25lID0gaXNOb25lOworICAgIHJhbmdl
LmlzUmFuZ2UgPSBpc1JhbmdlOworICAgIHJhbmdlLmlzRWRpdGFibGUgPSBpc0VkaXRhYmxlOwor
ICAgIHJhbmdlLnN0YXJ0UmVjdCA9IHN0YXJ0UmVjdDsKKyAgICByYW5nZS5lbmRSZWN0ID0gZW5k
UmVjdDsKKyAgICByYW5nZS5zZWxlY3RlZFRleHRMZW5ndGggPSBzZWxlY3RlZFRleHRMZW5ndGg7
CisgICAgcmFuZ2Uuc2VsZWN0aW9uUmVjdHMgPSBzZWxlY3Rpb25SZWN0czsKKyAgICByZXR1cm4g
W3JhbmdlIGF1dG9yZWxlYXNlXTsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW3NlbGYu
c2VsZWN0aW9uUmVjdHMgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChO
U1N0cmluZyAqKWRlc2NyaXB0aW9uCit7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiJUAoJXApIC0gc3RhcnQ6JUAsIGVuZDolQCIsIFtzZWxmIGNsYXNzXSwgc2VsZiwg
TlNTdHJpbmdGcm9tQ0dSZWN0KHNlbGYuc3RhcnRSZWN0KSwgTlNTdHJpbmdGcm9tQ0dSZWN0KHNl
bGYuZW5kUmVjdCldOworfQorCistIChXS1RleHRQb3NpdGlvbiAqKXN0YXJ0Cit7CisgICAgV0tU
ZXh0UG9zaXRpb24gKnBvcyA9IFtXS1RleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb25XaXRoUmVjdDpz
ZWxmLnN0YXJ0UmVjdF07CisgICAgcmV0dXJuIHBvczsKK30KKworLSAoVUlUZXh0UG9zaXRpb24g
KillbmQKK3sKKyAgICBXS1RleHRQb3NpdGlvbiAqcG9zID0gW1dLVGV4dFBvc2l0aW9uIHRleHRQ
b3NpdGlvbldpdGhSZWN0OnNlbGYuZW5kUmVjdF07CisgICAgcmV0dXJuIHBvczsKK30KKworLSAo
Qk9PTClpc0VtcHR5Cit7CisgICAgcmV0dXJuICFzZWxmLmlzUmFuZ2U7Cit9CisKKy8vIEZJWE1F
OiBPdmVycmlkaW5nIGlzRXF1YWw6IHdpdGhvdXQgb3ZlcnJpZGluZyBoYXNoIHdpbGwgY2F1c2Ug
dHJvdWJsZSBpZiB0aGlzIGV2ZXIgZ29lcyBpbnRvIGFuIE5TU2V0IG9yIGlzIHRoZSBrZXkgaW4g
YW4gTlNEaWN0aW9uYXJ5LAorLy8gc2luY2UgdHdvIGVxdWFsIGl0ZW1zIGNvdWxkIGhhdmUgZGlm
ZmVyZW50IGhhc2hlcy4KKy0gKEJPT0wpaXNFcXVhbDooaWQpb3RoZXIKK3sKKyAgICBpZiAoIVtv
dGhlciBpc0tpbmRPZkNsYXNzOltXS1RleHRSYW5nZSBjbGFzc11dKQorICAgICAgICByZXR1cm4g
Tk87CisKKyAgICBXS1RleHRSYW5nZSAqb3RoZXJSYW5nZSA9IChXS1RleHRSYW5nZSAqKW90aGVy
OworCisgICAgaWYgKHNlbGYgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICAv
LyBGSVhNRTogUHJvYmFibHkgaW5jb3JyZWN0IGZvciBlcXVhbGl0eSB0byBpZ25vcmUgc28gbXVj
aCBvZiB0aGUgb2JqZWN0IHN0YXRlLgorICAgIC8vIEl0IGlnbm9yZXMgaXNOb25lLCBpc0VkaXRh
YmxlLCBzZWxlY3RlZFRleHRMZW5ndGgsIGFuZCBzZWxlY3Rpb25SZWN0cy4KKworICAgIGlmIChz
ZWxmLmlzUmFuZ2UpIHsKKyAgICAgICAgaWYgKCFvdGhlclJhbmdlLmlzUmFuZ2UpCisgICAgICAg
ICAgICByZXR1cm4gTk87CisgICAgICAgIHJldHVybiBDR1JlY3RFcXVhbFRvUmVjdChzZWxmLnN0
YXJ0UmVjdCwgb3RoZXJSYW5nZS5zdGFydFJlY3QpICYmIENHUmVjdEVxdWFsVG9SZWN0KHNlbGYu
ZW5kUmVjdCwgb3RoZXJSYW5nZS5lbmRSZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
b3RoZXJSYW5nZS5pc1JhbmdlKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBpc05vbmUgaGVyZT8KKyAgICAgICAgcmV0dXJuIENH
UmVjdEVxdWFsVG9SZWN0KHNlbGYuc3RhcnRSZWN0LCBvdGhlclJhbmdlLnN0YXJ0UmVjdCk7Cisg
ICAgfQorfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1RleHRQb3NpdGlvbgorCitAc3lu
dGhlc2l6ZSBwb3NpdGlvblJlY3QgPSBfcG9zaXRpb25SZWN0OworCisrIChXS1RleHRQb3NpdGlv
biAqKXRleHRQb3NpdGlvbldpdGhSZWN0OihDR1JlY3QpcG9zaXRpb25SZWN0Cit7CisgICAgV0tU
ZXh0UG9zaXRpb24gKnBvcyA9W1tXS1RleHRQb3NpdGlvbiBhbGxvY10gaW5pdF07CisgICAgcG9z
LnBvc2l0aW9uUmVjdCA9IHBvc2l0aW9uUmVjdDsKKyAgICByZXR1cm4gW3BvcyBhdXRvcmVsZWFz
ZV07Cit9CisKKy8vIEZJWE1FOiBPdmVycmlkaW5nIGlzRXF1YWw6IHdpdGhvdXQgb3ZlcnJpZGlu
ZyBoYXNoIHdpbGwgY2F1c2UgdHJvdWJsZSBpZiB0aGlzIGV2ZXIgZ29lcyBpbnRvIGEgTlNTZXQg
b3IgaXMgdGhlIGtleSBpbiBhbiBOU0RpY3Rpb25hcnksCisvLyBzaW5jZSB0d28gZXF1YWwgaXRl
bXMgY291bGQgaGF2ZSBkaWZmZXJlbnQgaGFzaGVzLgorLSAoQk9PTClpc0VxdWFsOihpZClvdGhl
cgoreworICAgIGlmICghW290aGVyIGlzS2luZE9mQ2xhc3M6W1dLVGV4dFBvc2l0aW9uIGNsYXNz
XV0pCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVybiBDR1JlY3RFcXVhbFRvUmVjdChz
ZWxmLnBvc2l0aW9uUmVjdCwgKChXS1RleHRQb3NpdGlvbiAqKW90aGVyKS5wb3NpdGlvblJlY3Qp
OworfQorCistIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCit7CisgICAgcmV0dXJuIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiPFdLVGV4dFBvc2l0aW9uOiAlcCwgeyVAfT4iLCBzZWxmLCBO
U1N0cmluZ0Zyb21DR1JlY3Qoc2VsZi5wb3NpdGlvblJlY3QpXTsKK30KKworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gV0tUZXh0U2VsZWN0aW9uUmVjdAorCistIChpZClpbml0V2l0aFdlYlJlY3Q6
KFdlYlNlbGVjdGlvblJlY3QgKil3UmVjdAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKHNlbGYpCisgICAgICAgIHNlbGYud2ViUmVjdCA9IHdSZWN0OworCisgICAgcmV0dXJu
IHNlbGY7Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIHNlbGYud2ViUmVjdCA9IG5pbDsK
KyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy8vIEZJWE1FOiB3ZSBhcmUgdXNpbmcgdGhpcyBp
bXBsZW1lbnRhdGlvbiBmb3Igbm93CisvLyB0aGF0IHVzZXMgV2ViU2VsZWN0aW9uUmVjdCwgYnV0
IHdlIHdhbnQgdG8gcHJvdmlkZSBvdXIgb3duCisvLyBiYXNlZCBvbiBXZWJDb3JlOjpTZWxlY3Rp
b25SZWN0LgorCisrIChOU0FycmF5ICopdGV4dFNlbGVjdGlvblJlY3RzV2l0aFdlYlJlY3RzOihO
U0FycmF5ICopd2ViUmVjdHMKK3sKKyAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6d2ViUmVjdHMuY291bnRdOworICAgIGZvciAoV2Vi
U2VsZWN0aW9uUmVjdCAqd2ViUmVjdCBpbiB3ZWJSZWN0cykgeworICAgICAgICBSZXRhaW5QdHI8
V0tUZXh0U2VsZWN0aW9uUmVjdD4gcmVjdCA9IGFkb3B0TlMoW1tXS1RleHRTZWxlY3Rpb25SZWN0
IGFsbG9jXSBpbml0V2l0aFdlYlJlY3Q6d2ViUmVjdF0pOworICAgICAgICBbYXJyYXkgYWRkT2Jq
ZWN0OnJlY3QuZ2V0KCldOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKKy0gKENHUmVj
dClyZWN0Cit7CisgICAgcmV0dXJuIF93ZWJSZWN0LnJlY3Q7Cit9CisKKy0gKFVJVGV4dFdyaXRp
bmdEaXJlY3Rpb24pd3JpdGluZ0RpcmVjdGlvbgoreworICAgIHJldHVybiAoVUlUZXh0V3JpdGlu
Z0RpcmVjdGlvbilfd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uOworfQorCistIChVSVRleHRSYW5n
ZSAqKXJhbmdlCit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoQk9PTCljb250YWluc1N0YXJ0
Cit7CisgICAgcmV0dXJuIF93ZWJSZWN0LmNvbnRhaW5zU3RhcnQ7Cit9CisKKy0gKEJPT0wpY29u
dGFpbnNFbmQKK3sKKyAgICByZXR1cm4gX3dlYlJlY3QuY29udGFpbnNFbmQ7Cit9CisKKy0gKEJP
T0wpaXNWZXJ0aWNhbAoreworICAgIHJldHVybiAhX3dlYlJlY3QuaXNIb3Jpem9udGFsOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS0F1dG9jb3JyZWN0aW9uUmVjdHMKKworKyAoV0tB
dXRvY29ycmVjdGlvblJlY3RzICopYXV0b2NvcnJlY3Rpb25SZWN0c1dpdGhSZWN0czooQ0dSZWN0
KWZpcnN0UmVjdCBsYXN0UmVjdDooQ0dSZWN0KWxhc3RSZWN0Cit7CisgICAgV0tBdXRvY29ycmVj
dGlvblJlY3RzICpyZWN0cyA9W1tXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYWxsb2NdIGluaXRdOwor
ICAgIHJlY3RzLmZpcnN0UmVjdCA9IGZpcnN0UmVjdDsKKyAgICByZWN0cy5sYXN0UmVjdCA9IGxh
c3RSZWN0OworICAgIHJldHVybiBbcmVjdHMgYXV0b3JlbGVhc2VdOworfQorCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBXS0F1dG9jb3JyZWN0aW9uQ29udGV4dAorCisrIChXS0F1dG9jb3JyZWN0
aW9uQ29udGV4dCAqKWF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhEYXRhOihOU1N0cmluZyAqKWJl
Zm9yZVRleHQgbWFya2VkVGV4dDooTlNTdHJpbmcgKiltYXJrZWRUZXh0IHNlbGVjdGVkVGV4dDoo
TlNTdHJpbmcgKilzZWxlY3RlZFRleHQgYWZ0ZXJUZXh0OihOU1N0cmluZyAqKWFmdGVyVGV4dCBz
ZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0OihOU1JhbmdlKXJhbmdlCit7CisgICAgV0tBdXRvY29y
cmVjdGlvbkNvbnRleHQgKmNvbnRleHQgPSBbW1dLQXV0b2NvcnJlY3Rpb25Db250ZXh0IGFsbG9j
XSBpbml0XTsKKworICAgIGlmIChbYmVmb3JlVGV4dCBsZW5ndGhdKQorICAgICAgICBjb250ZXh0
LmNvbnRleHRCZWZvcmVTZWxlY3Rpb24gPSBbYmVmb3JlVGV4dCBjb3B5XTsKKyAgICBpZiAoW3Nl
bGVjdGVkVGV4dCBsZW5ndGhdKQorICAgICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IFtzZWxl
Y3RlZFRleHQgY29weV07CisgICAgaWYgKFttYXJrZWRUZXh0IGxlbmd0aF0pCisgICAgICAgIGNv
bnRleHQubWFya2VkVGV4dCA9IFttYXJrZWRUZXh0IGNvcHldOworICAgIGlmIChbYWZ0ZXJUZXh0
IGxlbmd0aF0pCisgICAgICAgIGNvbnRleHQuY29udGV4dEFmdGVyU2VsZWN0aW9uID0gW2FmdGVy
VGV4dCBjb3B5XTsKKyAgICBjb250ZXh0LnJhbmdlSW5NYXJrZWRUZXh0ID0gcmFuZ2U7CisgICAg
cmV0dXJuIFtjb250ZXh0IGF1dG9yZWxlYXNlXTsKK30KKworLSAodm9pZClkZWFsbG9jCit7Cisg
ICAgW3NlbGYuY29udGV4dEJlZm9yZVNlbGVjdGlvbiByZWxlYXNlXTsKKyAgICBbc2VsZi5tYXJr
ZWRUZXh0IHJlbGVhc2VdOworICAgIFtzZWxmLnNlbGVjdGVkVGV4dCByZWxlYXNlXTsKKyAgICBb
c2VsZi5jb250ZXh0QWZ0ZXJTZWxlY3Rpb24gcmVsZWFzZV07CisKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcm5hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjEx
OGM1ZDYzMDBiYTQ3NGNjZDBlODk4NDZlYzljNDQxZWMzMDRhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVybmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiV0tDb250ZW50Vmlldy5oIgotI2ltcG9ydCAiV0tH
ZXN0dXJlVHlwZXMuaCIKLSNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIENvbG9yOwotY2xhc3MgRmxvYXRRdWFkOwotY2xhc3MgSW50U2l6ZTsKLXN0cnVjdCBW
aWV3cG9ydEFyZ3VtZW50czsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBEcmF3aW5n
QXJlYVByb3h5OwotY2xhc3MgR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5OwotY2xh
c3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7Ci1jbGFzcyBS
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjsKLWNsYXNzIFdlYkZyYW1lUHJveHk7Ci1jbGFzcyBX
ZWJQYWdlUHJveHk7Ci1jbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKLXN0cnVjdCBJbnRlcmFjdGlv
bkluZm9ybWF0aW9uQXRQb3NpdGlvbjsKLX0KLQotQGNsYXNzIFdlYklPU0V2ZW50OwotCi1AaW50
ZXJmYWNlIFdLQ29udGVudFZpZXcgKCkgewotQHBhY2thZ2UKLSAgICBSZWZQdHI8V2ViS2l0OjpX
ZWJQYWdlUHJveHk+IF9wYWdlOwotfQotCi0tIChzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpEcmF3
aW5nQXJlYVByb3h5PilfY3JlYXRlRHJhd2luZ0FyZWFQcm94eTsKLS0gKHZvaWQpX3Byb2Nlc3NE
aWRFeGl0OwotLSAodm9pZClfZGlkUmVsYXVuY2hQcm9jZXNzOwotLSAodm9pZClfc2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcjooQ0FMYXllciAqKXJvb3RMYXllcjsKLQotLSAodm9p
ZClfZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZTsKLS0gKHZvaWQpX2RpZENvbW1pdExheWVyVHJl
ZTooY29uc3QgV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpbGF5ZXJUcmVlVHJh
bnNhY3Rpb247Ci0KLS0gKHZvaWQpX3dlYlRvdWNoRXZlbnQ6KGNvbnN0IFdlYktpdDo6TmF0aXZl
V2ViVG91Y2hFdmVudCYpdG91Y2hFdmVudCBwcmV2ZW50c05hdGl2ZUdlc3R1cmVzOihCT09MKXBy
ZXZlbnRzRGVmYXVsdDsKLS0gKHZvaWQpX2RpZEdldFRhcEhpZ2hsaWdodEZvclJlcXVlc3Q6KHVp
bnQ2NF90KXJlcXVlc3RJRCBjb2xvcjooY29uc3QgV2ViQ29yZTo6Q29sb3ImKWNvbG9yIHF1YWRz
Oihjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRRdWFkPiYpaGlnaGxpZ2h0ZWRRdWFkcyB0b3BM
ZWZ0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJil0b3BMZWZ0UmFkaXVzIHRvcFJpZ2h0
UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJil0b3BSaWdodFJhZGl1cyBib3R0b21MZWZ0
UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJilib3R0b21MZWZ0UmFkaXVzIGJvdHRvbVJp
Z2h0UmFkaXVzOihjb25zdCBXZWJDb3JlOjpJbnRTaXplJilib3R0b21SaWdodFJhZGl1czsKLQot
LSAodm9pZClfc3RhcnRBc3Npc3RpbmdOb2RlOwotLSAodm9pZClfc3RvcEFzc2lzdGluZ05vZGU7
Ci0tICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkOwotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6
KFdlYklPU0V2ZW50ICopdGhlRXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQ7Ci0t
ICh2b2lkKV9wb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdlOihjb25zdCBXZWJLaXQ6OkludGVy
YWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJilpbmZvOwotLSAodm9pZClfZGVjaWRlUG9saWN5
Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjooV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdp
biYpb3JpZ2luIGZyYW1lOihXZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6KFdl
YktpdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9uUmVxdWVz
dDsKLS0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihXZWJLaXQ6OldL
U2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXZWJLaXQ6OldLU2VsZWN0aW9uRmxhZ3Mp
ZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9hdClncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9s
ZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQ7Ci0KLS0gKFJldGFpblB0cjxDR0ltYWdlUmVmPilf
dGFrZVZpZXdTbmFwc2hvdDsKLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0ludGVyYWN0aW9uVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9XS0ludGVyYWN0aW9uVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NmY3YWVhM2Q5NWRiNTQ1NTI5OWJkZjNlYmM1ZmY5OGFhYTI1NzhkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tJbnRlcmFjdGlvblZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgIldLR2VzdHVyZVR5cGVzLmgiCi0jaW1wb3J0IDxVSUtp
dC9VSVdlYkZvcm1BY2Nlc3NvcnkuaD4KLSNpbXBvcnQgPFVJS2l0L1VJVGV4dElucHV0X1ByaXZh
dGUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJVmlldy5oPgotI2ltcG9ydCA8VUlLaXQvVUlXZWJUb3Vj
aEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyLmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVdLU2VsZWN0aW9u
QXNzaXN0YW50Lmg+Ci0jaW1wb3J0IDxVSUtpdC9VSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50
Lmg+Ci0jaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgotCi1A
Y2xhc3MgVUlXZWJTY3JvbGxWaWV3OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDb2xv
cjsKLWNsYXNzIEZsb2F0UXVhZDsKLWNsYXNzIEludFNpemU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotY2xhc3MgTmF0aXZlV2ViVG91Y2hFdmVudDsKLWNsYXNzIFdlYlBhZ2VQcm94eTsKLXN0
cnVjdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbjsKLX0KLQotQGNsYXNzIFdlYklP
U0V2ZW50OwotCi1AaW50ZXJmYWNlIFdLSW50ZXJhY3Rpb25WaWV3IDogVUlWaWV3PFVJR2VzdHVy
ZVJlY29nbml6ZXJEZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVs
ZWdhdGUsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJ
V0tJbnRlcmFjdGlvblZpZXdQcm90b2NvbD4KLQotQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRv
bmx5KSBCT09MIGlzRWRpdGFibGU7Ci0KLS0gKHZvaWQpc2V0U2Nyb2xsVmlldzooVUlXZWJTY3Jv
bGxWaWV3ICopc2Nyb2xsVmlldzsKLS0gKHZvaWQpc2V0UGFnZTooUGFzc1JlZlB0cjxXZWJLaXQ6
OldlYlBhZ2VQcm94eT4pcGFnZTsKLQotLSAodm9pZClfd2ViVG91Y2hFdmVudDooY29uc3QgV2Vi
S2l0OjpOYXRpdmVXZWJUb3VjaEV2ZW50Jil0b3VjaEV2ZW50IHByZXZlbnRzTmF0aXZlR2VzdHVy
ZXM6KEJPT0wpcHJldmVudHNEZWZhdWx0OwotLSAodm9pZClfZGlkR2V0VGFwSGlnaGxpZ2h0Rm9y
UmVxdWVzdDoodWludDY0X3QpcmVxdWVzdElEIGNvbG9yOihjb25zdCBXZWJDb3JlOjpDb2xvciYp
Y29sb3IgcXVhZHM6KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+JiloaWdobGlnaHRl
ZFF1YWRzIHRvcExlZnRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKXRvcExlZnRSYWRp
dXMgdG9wUmlnaHRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKXRvcFJpZ2h0UmFkaXVz
IGJvdHRvbUxlZnRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbUxlZnRSYWRp
dXMgYm90dG9tUmlnaHRSYWRpdXM6KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKWJvdHRvbVJpZ2h0
UmFkaXVzOwotCi0tICh2b2lkKV9zdGFydEFzc2lzdGluZ05vZGU7Ci0tICh2b2lkKV9zdG9wQXNz
aXN0aW5nTm9kZTsKLS0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7Ci0tIChCT09MKV9pbnRlcnBy
ZXRLZXlFdmVudDooV2ViSU9TRXZlbnQgKil0aGVFdmVudCBpc0NoYXJFdmVudDooQk9PTClpc0No
YXJFdmVudDsKLS0gKHZvaWQpX3Bvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2U6KGNvbnN0IFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm87Ci0tICh2b2lkKV9h
dHRlbXB0Q2xpY2tBdExvY2F0aW9uOihDR1BvaW50KWxvY2F0aW9uOwotLSAodm9pZClfdXBkYXRl
UG9zaXRpb25JbmZvcm1hdGlvbjsKLS0gKHZvaWQpX3BlcmZvcm1BY3Rpb246KFdlYktpdDo6V0tT
aGVldEFjdGlvbnMpYWN0aW9uOwotLSAodm9pZClfd2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5n
OwotLSAodm9pZClfd2lsbFN0YXJ0VXNlclRyaWdnZXJlZFNjcm9sbGluZ09yWm9vbWluZzsKLS0g
KHZvaWQpX2RpZEVuZFNjcm9sbGluZ09yWm9vbWluZzsKLS0gKHZvaWQpX2RpZFVwZGF0ZUJsb2Nr
U2VsZWN0aW9uV2l0aFRvdWNoOihXZWJLaXQ6OldLU2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZs
YWdzOihXZWJLaXQ6OldLU2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9h
dClncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQ7
Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdlYktpdDo6SW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24gcG9zaXRpb25JbmZvcm1hdGlvbjsKLUBlbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLSW50ZXJhY3Rpb25WaWV3Lm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2N2U2ZmZlMDJmMDc5ZTJjNThlYTAwYzIzMDMyNjNiMzMxNDJm
MTAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tJbnRlcmFjdGlvblZpZXcubW0KKysrIC9kZXYvbnVs
bApAQCAtMSwyMDIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIldLSW50ZXJhY3Rpb25WaWV3LmgiCi0KLSNpbXBvcnQgIkludGVyYWN0aW9u
SW5mb3JtYXRpb25BdFBvc2l0aW9uLmgiCi0jaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCi0jaW1wb3J0ICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCi0jaW1wb3J0ICJXS0FjdGlvblNo
ZWV0QXNzaXN0YW50LmgiCi0jaW1wb3J0ICJXS0Jhc2UuaCIKLSNpbXBvcnQgIldLR2VzdHVyZVR5
cGVzLmgiCi0jaW1wb3J0ICJXZWJFdmVudC5oIgotI2ltcG9ydCAiV2ViSU9TRXZlbnRGYWN0b3J5
LmgiCi0jaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKLSNpbXBvcnQgIldlYlByb2Nlc3NQcm94
eS5oIgotI2ltcG9ydCA8RGF0YURldGVjdG9yc1VJL0RERGV0ZWN0aW9uQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8VUlLaXQvVUlGb250X1ByaXZhdGUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJR2VzdHVy
ZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgotI2ltcG9ydCA8VUlLaXQvVUlLZXlib2FyZEltcGwuaD4K
LSNpbXBvcnQgPFVJS2l0L1VJTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXJfUHJpdmF0ZS5oPgot
I2ltcG9ydCA8VUlLaXQvVUlUYXBHZXN0dXJlUmVjb2duaXplcl9Qcml2YXRlLmg+Ci0jaW1wb3J0
IDxVSUtpdC9VSVRleHRJbnRlcmFjdGlvbkFzc2lzdGFudF9Qcml2YXRlLmg+Ci0jaW1wb3J0IDxV
SUtpdC9VSVdlYkRvY3VtZW50Vmlldy5oPgotI2ltcG9ydCA8VUlLaXQvVUlXZWJTY3JvbGxWaWV3
Lmg+Ci0jaW1wb3J0IDxVSUtpdC9fVUlIaWdobGlnaHRWaWV3Lmg+Ci0jaW1wb3J0IDxVSUtpdC9f
VUlXZWJIaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvV2ViRXZlbnQuaD4KLSNpbXBvcnQgPFdlYktpdC9XZWJTZWxlY3Rp
b25SZWN0Lmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotU09GVF9MSU5LX1BSSVZBVEVfRlJBTUVXT1JLKERhdGFEZXRlY3RvcnNV
SSkKLVNPRlRfTElOS19DTEFTUyhEYXRhRGV0ZWN0b3JzVUksIERERGV0ZWN0aW9uQ29udHJvbGxl
cikKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
Ci1zdGF0aWMgY29uc3QgZmxvYXQgaGlnaGxpZ2h0RGVsYXkgPSAwLjEyOwotc3RhdGljIGNvbnN0
IGZsb2F0IHRhcEFuZEhvbGREZWxheSAgPSAwLjc1OwotCi1AaW50ZXJmYWNlIFdLVGV4dFJhbmdl
IDogVUlUZXh0UmFuZ2UgewotICAgIENHUmVjdCBfc3RhcnRSZWN0OwotICAgIENHUmVjdCBfZW5k
UmVjdDsKLSAgICBCT09MIF9pc05vbmU7Ci0gICAgQk9PTCBfaXNSYW5nZTsKLSAgICBCT09MIF9p
c0VkaXRhYmxlOwotICAgIE5TQXJyYXkgKl9zZWxlY3Rpb25SZWN0czsKLSAgICBOU1VJbnRlZ2Vy
IF9zZWxlY3RlZFRleHRMZW5ndGg7Ci19Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQ0dSZWN0IHN0
YXJ0UmVjdDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBDR1JlY3QgZW5kUmVjdDsKLUBwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIGlzTm9uZTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGlz
UmFuZ2U7Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBpc0VkaXRhYmxlOwotQHByb3BlcnR5
IChub25hdG9taWMpIE5TVUludGVnZXIgc2VsZWN0ZWRUZXh0TGVuZ3RoOwotQHByb3BlcnR5IChj
b3B5LCBub25hdG9taWMpIE5TQXJyYXkgKnNlbGVjdGlvblJlY3RzOwotCi0rIChXS1RleHRSYW5n
ZSAqKXRleHRSYW5nZVdpdGhTdGF0ZTooQk9PTClpc05vbmUgaXNSYW5nZTooQk9PTClpc1Jhbmdl
IGlzRWRpdGFibGU6KEJPT0wpaXNFZGl0YWJsZSBzdGFydFJlY3Q6KENHUmVjdClzdGFydFJlY3Qg
ZW5kUmVjdDooQ0dSZWN0KWVuZFJlY3Qgc2VsZWN0aW9uUmVjdHM6KE5TQXJyYXkgKilzZWxlY3Rp
b25SZWN0cyBzZWxlY3RlZFRleHRMZW5ndGg6KE5TVUludGVnZXIpc2VsZWN0ZWRUZXh0TGVuZ3Ro
OwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tUZXh0UG9zaXRpb24gOiBVSVRleHRQb3NpdGlvbiB7
Ci0gICAgQ0dSZWN0IF9wb3NpdGlvblJlY3Q7Ci19Ci0KLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBD
R1JlY3QgcG9zaXRpb25SZWN0OwotCi0rIChXS1RleHRQb3NpdGlvbiAqKXRleHRQb3NpdGlvbldp
dGhSZWN0OihDR1JlY3QpcG9zaXRpb25SZWN0OwotCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tUZXh0
U2VsZWN0aW9uUmVjdCA6IFVJVGV4dFNlbGVjdGlvblJlY3QKLQotQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbikgV2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVjdDsKLQotKyAoTlNBcnJheSAqKXRl
eHRTZWxlY3Rpb25SZWN0c1dpdGhXZWJSZWN0czooTlNBcnJheSAqKXdlYlJlY3RzOwotCi1AZW5k
Ci0KLUBpbnRlcmZhY2UgV0tBdXRvY29ycmVjdGlvblJlY3RzIDogVUlXS0F1dG9jb3JyZWN0aW9u
UmVjdHMgewotICAgIENHUmVjdCBfZmlyc3RSZWN0OwotICAgIENHUmVjdCBfbGFzdFJlY3Q7Ci19
Ci0rIChXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKilhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3Rz
OihDR1JlY3QpZmlyc3RSZWN0IGxhc3RSZWN0OihDR1JlY3QpbGFzdFJlY3Q7Ci0KLUBlbmQKLQot
QGludGVyZmFjZSBXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCA6IFVJV0tBdXRvY29ycmVjdGlvbkNv
bnRleHQgewotICAgIE5TU3RyaW5nICpfY29udGV4dEJlZm9yZVNlbGVjdGlvbjsKLSAgICBOU1N0
cmluZyAqX3NlbGVjdGVkVGV4dDsKLSAgICBOU1N0cmluZyAqX21hcmtlZFRleHQ7Ci0gICAgTlNT
dHJpbmcgKl9jb250ZXh0QWZ0ZXJTZWxlY3Rpb247Ci0gICAgTlNSYW5nZSBfcmFuZ2VJbk1hcmtl
ZFRleHQ7Ci19Ci0KLSsgKFdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICopYXV0b2NvcnJlY3Rpb25D
b250ZXh0V2l0aERhdGE6KE5TU3RyaW5nICopYmVmb3JlVGV4dCBtYXJrZWRUZXh0OihOU1N0cmlu
ZyAqKW1hcmtlZFRleHQgc2VsZWN0ZWRUZXh0OihOU1N0cmluZyAqKXNlbGVjdGVkVGV4dCBhZnRl
clRleHQ6KE5TU3RyaW5nICopYWZ0ZXJUZXh0IHNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQ6KE5T
UmFuZ2UpcmFuZ2U7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3Rh
bnQgKFVJVGV4dEludGVyYWN0aW9uQXNzaXN0YW50X0ludGVybmFsKQotLy8gRklYTUU6IHRoaXMg
bmVlZHMgdG8gYmUgbW92ZWQgZnJvbSB0aGUgaW50ZXJuYWwgaGVhZGVyIHRvIHRoZSBwcml2YXRl
LgotLSAoaWQpaW5pdFdpdGhWaWV3OihVSVJlc3BvbmRlciA8VUlUZXh0SW5wdXQ+ICopdmlldzsK
LS0gKHZvaWQpc2VsZWN0V29yZDsKLUBlbmQKLQotdHlwZWRlZiB2b2lkICheVUlXS0F1dG9jb3Jy
ZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIpKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0c0Zv
cklucHV0KTsKLXR5cGVkZWYgdm9pZCAoXlVJV0tBdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVy
KShVSVdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICphdXRvY29ycmVjdGlvbkNvbnRleHQpOwotCi1z
dHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGF7Ci0gICAgU3RyaW5nIGZvbnROYW1lOwotICAgIENH
RmxvYXQgZm9udFNpemU7Ci0gICAgdWludDY0X3QgZm9udFRyYWl0czsKLSAgICBDR1JlY3QgdGV4
dEZpcnN0UmVjdDsKLSAgICBDR1JlY3QgdGV4dExhc3RSZWN0OwotICAgIFVJV0tBdXRvY29ycmVj
dGlvbkNvbXBsZXRpb25IYW5kbGVyIGF1dG9jb3JyZWN0aW9uSGFuZGxlcjsKLSAgICBVSVdLQXV0
b2NvcnJlY3Rpb25Db250ZXh0SGFuZGxlciBhdXRvY29ycmVjdGlvbkNvbnRleHRIYW5kbGVyOwot
fTsKLQotQGludGVyZmFjZSBXS0ludGVyYWN0aW9uVmlldyAoUHJpdmF0ZSkKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIG5vbmF0b21pYykgV0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9u
RGF0YTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLSW50ZXJhY3Rpb25WaWV3IHsKLSAgICBS
ZXRhaW5QdHI8VUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyPiBfdG91Y2hFdmVudEdl
c3R1cmVSZWNvZ25pemVyOwotICAgIEJPT0wgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5jaHJvbm91
c2x5OwotICAgIHVuc2lnbmVkIF9uYXRpdmVXZWJUb3VjaEV2ZW50VW5pcXVlSWRCZWluZ1NlbnRT
eW5jaHJvbm91c2x5OwotCi0gICAgUmV0YWluUHRyPFVJVGFwR2VzdHVyZVJlY29nbml6ZXI+IF9z
aW5nbGVUYXBHZXN0dXJlUmVjb2duaXplcjsKLSAgICBSZXRhaW5QdHI8X1VJV2ViSGlnaGxpZ2h0
TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI+IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVj
b2duaXplcjsKLSAgICBSZXRhaW5QdHI8VUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcj4gX2xv
bmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOwotICAgIFJldGFpblB0cjxVSVRhcEdlc3R1cmVSZWNv
Z25pemVyPiBfZG91YmxlVGFwR2VzdHVyZVJlY29nbml6ZXI7Ci0gICAgUmV0YWluUHRyPFVJVGFw
R2VzdHVyZVJlY29nbml6ZXI+IF90d29GaW5nZXJEb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcjsK
LSAgICBSZXRhaW5QdHI8VUlQYW5HZXN0dXJlUmVjb2duaXplcj4gX3R3b0ZpbmdlclBhbkdlc3R1
cmVSZWNvZ25pemVyOwotCi0gICAgUmV0YWluUHRyPFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3Rh
bnQ+IF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50OwotICAgIFJldGFpblB0cjxVSVdLU2VsZWN0aW9u
QXNzaXN0YW50PiBfd2ViU2VsZWN0aW9uQXNzaXN0YW50OwotCi0gICAgVUlUZXh0SW5wdXRUcmFp
dHMgKl90cmFpdHM7Ci0gICAgQk9PTCBfaXNFZGl0YWJsZTsKLSAgICBVSVdlYkZvcm1BY2Nlc3Nv
cnkgKl9hY2Nlc3Nvcnk7Ci0gICAgaWQgPFVJVGV4dElucHV0RGVsZWdhdGU+IF9pbnB1dERlbGVn
YXRlOwotICAgIEJPT0wgX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zOwotCi0gICAgX193ZWFrIFVJ
V2ViU2Nyb2xsVmlldyAqX3Njcm9sbFZpZXc7Ci0gICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gX3Bh
Z2U7Ci0KLSAgICBSZXRhaW5QdHI8X1VJSGlnaGxpZ2h0Vmlldz4gX2hpZ2hsaWdodFZpZXc7Ci0g
ICAgdWludDY0X3QgX2xhdGVzdFRhcEhpZ2hsaWdodElEOwotICAgIEJPT0wgX2lzVGFwSGlnaGxp
Z2h0SURWYWxpZDsKLSAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSBfYXV0b2NvcnJlY3Rpb25EYXRh
OwotICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21hcmtlZFRleHQ7Ci0gICAgSW50ZXJhY3Rpb25J
bmZvcm1hdGlvbkF0UG9zaXRpb24gX3Bvc2l0aW9uSW5mb3JtYXRpb247Ci0gICAgQk9PTCBfaGFz
VmFsaWRQb3NpdGlvbkluZm9ybWF0aW9uOwotICAgIFJldGFpblB0cjxXS0FjdGlvblNoZWV0QXNz
aXN0YW50PiBfYWN0aW9uU2hlZXRBc3Npc3RhbnQ7Ci19Ci0KLUBzeW50aGVzaXplIGlucHV0RGVs
ZWdhdGUgPSBfaW5wdXREZWxlZ2F0ZTsKLQotLSAoaWQpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZy
YW1lCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXTsKLSAgICBpZiAo
c2VsZikgewotICAgICAgICBfdG91Y2hFdmVudEdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHROUyhb
W1VJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVjb2duaXplciBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6
c2VsZiBhY3Rpb246QHNlbGVjdG9yKF93ZWJUb3VjaEV2ZW50c1JlY29nbml6ZWQ6KSB0b3VjaERl
bGVnYXRlOnNlbGZdKTsKLSAgICAgICAgW190b3VjaEV2ZW50R2VzdHVyZVJlY29nbml6ZXIgc2V0
RGVsZWdhdGU6c2VsZl07Ci0gICAgICAgIFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl90b3Vj
aEV2ZW50R2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotCi0gICAgICAgIF9zaW5nbGVUYXBHZXN0
dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tVSVRhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBp
bml0V2l0aFRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX3NpbmdsZVRhcFJlY29nbml6ZWQ6
KV0pOwotICAgICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNl
bGZdOwotICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfc2luZ2xlVGFwR2VzdHVy
ZVJlY29nbml6ZXIuZ2V0KCldOwotCi0gICAgICAgIF9kb3VibGVUYXBHZXN0dXJlUmVjb2duaXpl
ciA9IGFkb3B0TlMoW1tVSVRhcEdlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdl
dDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoX2RvdWJsZVRhcFJlY29nbml6ZWQ6KV0pOwotICAgICAg
ICBbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldE51bWJlck9mVGFwc1JlcXVpcmVkOjJd
OwotICAgICAgICBbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZd
OwotICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfZG91YmxlVGFwR2VzdHVyZVJl
Y29nbml6ZXIuZ2V0KCldOwotICAgICAgICBbX3NpbmdsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHJl
cXVpcmVPdGhlckdlc3R1cmVUb0ZhaWw6X2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyLmdldCgp
XTsKLQotICAgICAgICBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgPSBhZG9w
dE5TKFtbX1VJV2ViSGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGlu
aXRXaXRoVGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3RvcihfaGlnaGxpZ2h0TG9uZ1ByZXNzUmVj
b2duaXplZDopXSk7Ci0gICAgICAgIFtfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6
ZXIgc2V0RGVsYXk6aGlnaGxpZ2h0RGVsYXldOwotICAgICAgICBbX2hpZ2hsaWdodExvbmdQcmVz
c0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOnNlbGZdOwotICAgICAgICBbc2VsZiBhZGRH
ZXN0dXJlUmVjb2duaXplcjpfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0
KCldOwotCi0gICAgICAgIF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciA9IGFkb3B0TlMoW1tV
SUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIGFsbG9jXSBpbml0V2l0aFRhcmdldDpzZWxmIGFj
dGlvbjpAc2VsZWN0b3IoX2xvbmdQcmVzc1JlY29nbml6ZWQ6KV0pOwotICAgICAgICBbX2xvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyIHNldERlbGF5OnRhcEFuZEhvbGREZWxheV07Ci0gICAgICAg
IFtfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgICAg
IFtzZWxmIGFkZEdlc3R1cmVSZWNvZ25pemVyOl9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplci5n
ZXQoKV07Ci0KLSAgICAgICAgX3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25pemVyID0gYWRvcHRO
UyhbW1VJUGFuR2VzdHVyZVJlY29nbml6ZXIgYWxsb2NdIGluaXRXaXRoVGFyZ2V0OnNlbGYgYWN0
aW9uOkBzZWxlY3RvcihfdHdvRmluZ2VyUGFuUmVjb2duaXplZDopXSk7Ci0gICAgICAgIFtfdHdv
RmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIgc2V0TWluaW11bU51bWJlck9mVG91Y2hlczoyXTsK
LSAgICAgICAgW190d29GaW5nZXJQYW5HZXN0dXJlUmVjb2duaXplciBzZXRNYXhpbXVtTnVtYmVy
T2ZUb3VjaGVzOjJdOwotICAgICAgICBbX3R3b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25pemVyIHNl
dERlbGVnYXRlOnNlbGZdOwotICAgICAgICBbc2VsZiBhZGRHZXN0dXJlUmVjb2duaXplcjpfdHdv
RmluZ2VyUGFuR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCldOwotCi0gICAgICAgIFtzZWxmIHNldFVz
ZXJJbnRlcmFjdGlvbkVuYWJsZWQ6WUVTXTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfcmVz
ZXRTaG93aW5nVGV4dFN0eWxlOikgbmFtZTpVSU1lbnVDb250cm9sbGVyRGlkSGlkZU1lbnVOb3Rp
ZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgICAgIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9ucyA9
IE5POwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB3
ZSBnZXQgbm90aWZpZWQgdGhhdCBsb2FkaW5nIGhhcyBjb21wbGV0ZWQuCi0gICAgW3NlbGYgdXNl
U2VsZWN0aW9uQXNzaXN0YW50V2l0aE1vZGU6VUlXZWJTZWxlY3Rpb25Nb2RlV2ViXTsKLQotICAg
IF9hY3Rpb25TaGVldEFzc2lzdGFudCA9IGFkb3B0TlMoW1tXS0FjdGlvblNoZWV0QXNzaXN0YW50
IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBfd2ViU2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOwotICAgIF90
ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gbmlsOwotICAgIF9hY3Rpb25TaGVldEFzc2lzdGFudCA9
IG5pbDsKLSAgICBbX3RvdWNoRXZlbnRHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxd
OwotICAgIFtfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAg
ICBbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgW19o
aWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciBzZXREZWxlZ2F0ZTpuaWxdOwotICAg
IFtfbG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKLSAgICBbX3R3
b0ZpbmdlclBhbkdlc3R1cmVSZWNvZ25pemVyIHNldERlbGVnYXRlOm5pbF07Ci0KLSAgICBbX2Fj
Y2Vzc29yeSByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpc2V0
U2Nyb2xsVmlldzooVUlXZWJTY3JvbGxWaWV3ICopc2Nyb2xsVmlldwotewotICAgIF9zY3JvbGxW
aWV3ID0gc2Nyb2xsVmlldzsKLX0KLQotLSAodm9pZClzZXRQYWdlOihQYXNzUmVmUHRyPFdlYktp
dDo6V2ViUGFnZVByb3h5PilwYWdlCi17Ci0gICAgX3BhZ2UgPSBwYWdlOwotICAgIFtfYWN0aW9u
U2hlZXRBc3Npc3RhbnQgc2V0UGFnZTpfcGFnZV07Ci19Ci0KLS0gKEJPT0wpaXNFZGl0YWJsZQot
ewotICAgIHJldHVybiBfaXNFZGl0YWJsZTsKLX0KLQotLSAoQk9PTCljYW5CZWNvbWVGaXJzdFJl
c3BvbmRlcgotewotICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gcmV0dXJuIHNvbWV0aGluZyBlbHNl
Ci0gICAgLy8gaWYgd2UgZGVjaWRlIHRvIGVuYWJsZS9kaXNhYmxlIGludGVyYWN0aW9uIHByb2dy
YW1tYXRpY2FsbHkuCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTClyZXNpZ25GaXJzdFJl
c3BvbmRlcgotewotICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgY2FsbCByZXNpZ25GaXJz
dFJlc3BvbmRlciBvbiB0aGUgc3VwZXJjbGFzcwotICAgIC8vIGFuZCBkbyBub3RoaW5nIGlmIHRo
ZSByZXR1cm4gdmFsdWUgaXMgTk8uCi0gICAgX3BhZ2UtPmJsdXJBc3Npc3RlZE5vZGUoKTsKLSAg
ICBbc2VsZiBfY2FuY2VsSW50ZXJhY3Rpb25dOwotICAgIFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50
IHJlc2lnbmVkRmlyc3RSZXNwb25kZXJdOwotCi0gICAgcmV0dXJuIFtzdXBlciByZXNpZ25GaXJz
dFJlc3BvbmRlcl07Ci19Ci0KLS0gKHZvaWQpX3dlYlRvdWNoRXZlbnRzUmVjb2duaXplZDooVUlX
ZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJlY29nbml6ZXIKLXsKLSAg
ICBOYXRpdmVXZWJUb3VjaEV2ZW50IG5hdGl2ZVdlYlRvdWNoRXZlbnQoZ2VzdHVyZVJlY29nbml6
ZXIpOwotCi0gICAgaWYgKG5hdGl2ZVdlYlRvdWNoRXZlbnQudHlwZSgpID09IFdlYktpdDo6V2Vi
RXZlbnQ6OlRvdWNoU3RhcnQpCi0gICAgICAgIF9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25v
dXNseSA9IE5POwotCi0gICAgaWYgKCFfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9ub3VzbHkp
Ci0gICAgICAgIF9uYXRpdmVXZWJUb3VjaEV2ZW50VW5pcXVlSWRCZWluZ1NlbnRTeW5jaHJvbm91
c2x5ID0gbmF0aXZlV2ViVG91Y2hFdmVudC51bmlxdWVJZCgpOwotCi0gICAgX3BhZ2UtPnNldFNo
b3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KCFfY2FuU2VuZFRvdWNoRXZlbnRzQXN5bmNocm9u
b3VzbHkpOwotICAgIF9wYWdlLT5oYW5kbGVUb3VjaEV2ZW50KG5hdGl2ZVdlYlRvdWNoRXZlbnQp
OwotICAgIF9wYWdlLT5zZXRTaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShmYWxzZSk7Ci19
Ci0KLXN0YXRpYyBGbG9hdFF1YWQgaW5mbGF0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBm
bG9hdCBpbmZsYXRlU2l6ZSkKLXsKLSAgICAvLyBXZSBzb3J0IHRoZSBvdXRwdXQgcG9pbnRzIGxp
a2UgdGhpcyAoYXMgZXhwZWN0ZWQgYnkgdGhlIGhpZ2hsaWdodCB2aWV3KToKLSAgICAvLyAgcDIt
LS0tLS1wMwotICAgIC8vICB8ICAgICAgIHwKLSAgICAvLyAgcDEtLS0tLS1wNAotCi0gICAgLy8g
MSkgU29ydCB0aGUgcG9pbnRzIGhvcml6b250YWxseS4KLSAgICBGbG9hdFBvaW50IHBvaW50c1s0
XSA9IHsgcXVhZC5wMSgpLCBxdWFkLnA0KCksIHF1YWQucDIoKSwgcXVhZC5wMygpIH07Ci0gICAg
aWYgKHBvaW50c1swXS54KCkgPiBwb2ludHNbMV0ueCgpKQotICAgICAgICBzdGQ6OnN3YXAocG9p
bnRzWzBdLCBwb2ludHNbMV0pOwotICAgIGlmIChwb2ludHNbMl0ueCgpID4gcG9pbnRzWzNdLngo
KSkKLSAgICAgICAgc3RkOjpzd2FwKHBvaW50c1syXSwgcG9pbnRzWzNdKTsKLQotICAgIGlmIChw
b2ludHNbMF0ueCgpID4gcG9pbnRzWzJdLngoKSkKLSAgICAgICAgc3RkOjpzd2FwKHBvaW50c1sw
XSwgcG9pbnRzWzJdKTsKLSAgICBpZiAocG9pbnRzWzFdLngoKSA+IHBvaW50c1szXS54KCkpCi0g
ICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMV0sIHBvaW50c1szXSk7Ci0KLSAgICBpZiAocG9pbnRz
WzFdLngoKSA+IHBvaW50c1syXS54KCkpCi0gICAgICAgIHN0ZDo6c3dhcChwb2ludHNbMV0sIHBv
aW50c1syXSk7Ci0KLSAgICAvLyAyKSBTd2FwIHRoZW0gdmVydGljYWxseSB0byBoYXZlIHRoZSBv
dXRwdXQgcG9pbnRzIFtwMiwgcDEsIHAzLCBwNF0uCi0gICAgaWYgKHBvaW50c1sxXS55KCkgPCBw
b2ludHNbMF0ueSgpKQotICAgICAgICBzdGQ6OnN3YXAocG9pbnRzWzBdLCBwb2ludHNbMV0pOwot
ICAgIGlmIChwb2ludHNbM10ueSgpIDwgcG9pbnRzWzJdLnkoKSkKLSAgICAgICAgc3RkOjpzd2Fw
KHBvaW50c1syXSwgcG9pbnRzWzNdKTsKLQotICAgIC8vIDMpIEFkanVzdCB0aGUgcG9zaXRpb25z
LgotICAgIHBvaW50c1swXS5tb3ZlKC1pbmZsYXRlU2l6ZSwgLWluZmxhdGVTaXplKTsKLSAgICBw
b2ludHNbMV0ubW92ZSgtaW5mbGF0ZVNpemUsIGluZmxhdGVTaXplKTsKLSAgICBwb2ludHNbMl0u
bW92ZShpbmZsYXRlU2l6ZSwgLWluZmxhdGVTaXplKTsKLSAgICBwb2ludHNbM10ubW92ZShpbmZs
YXRlU2l6ZSwgaW5mbGF0ZVNpemUpOwotCi0gICAgcmV0dXJuIEZsb2F0UXVhZChwb2ludHNbMV0s
IHBvaW50c1swXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pOwotfQotCi0tICh2b2lkKV93ZWJUb3Vj
aEV2ZW50Oihjb25zdCBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQmKXRvdWNoRXZlbnQgcHJl
dmVudHNOYXRpdmVHZXN0dXJlczooQk9PTClwcmV2ZW50c05hdGl2ZUdlc3R1cmUKLXsKLSAgICBp
ZiAocHJldmVudHNOYXRpdmVHZXN0dXJlKSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZSBkaXNwYXRj
aGluZyBldmVudHMgc3luY2hyb25vdXNseSBhbmQgdGhlIGV2ZW50IGNvbWluZyBiYWNrIGlzIG5v
dCB0aGUgb25lIHdlIGFyZSBzZW5kaW5nLCBpdCBpcyBhIGNhbGxiYWNrCi0gICAgICAgIC8vIGZy
b20gYW4gZXZlbnQgc2VudCBhc3luY2hyb25vdXNseSBwcmlvciB0byB0aGUgc3luY2hyb25vdXMg
ZXZlbnQuIEluIHRoYXQgY2FzZSwgaXQgc2hvdWxkIG5vdCB1c2UgdGhhdCBpbmZvcm1hdGlvbgot
ICAgICAgICAvLyB0byB1cGRhdGUgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyLgot
ICAgICAgICBpZiAoIV9jYW5TZW5kVG91Y2hFdmVudHNBc3luY2hyb25vdXNseSAmJiBfbmF0aXZl
V2ViVG91Y2hFdmVudFVuaXF1ZUlkQmVpbmdTZW50U3luY2hyb25vdXNseSAhPSB0b3VjaEV2ZW50
LnVuaXF1ZUlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgX2NhblNlbmRUb3Vj
aEV2ZW50c0FzeW5jaHJvbm91c2x5ID0gWUVTOwotICAgICAgICBbX3RvdWNoRXZlbnRHZXN0dXJl
UmVjb2duaXplciBzZXREZWZhdWx0UHJldmVudGVkOllFU107Ci0gICAgfQotfQotCi0tICh2b2lk
KV9kaWRHZXRUYXBIaWdobGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6
KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkZsb2F0UXVhZD4mKWhpZ2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpdG9wTGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpdG9wUmlnaHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpYm90dG9tTGVmdFJhZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpYm90dG9tUmlnaHRSYWRpdXMKLXsKLSAgICBpZiAoIV9pc1RhcEhpZ2hsaWdo
dElEVmFsaWQgfHwgX2xhdGVzdFRhcEhpZ2hsaWdodElEICE9IHJlcXVlc3RJRCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgQ0dGbG9hdCBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFk
aXVzID0gMi4wOwotICAgIGlmICghX2hpZ2hsaWdodFZpZXcpIHsKLSAgICAgICAgX2hpZ2hsaWdo
dFZpZXcgPSBhZG9wdE5TKFtbX1VJSGlnaGxpZ2h0VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpD
R1JlY3RaZXJvXSk7Ci0gICAgICAgIFtfaGlnaGxpZ2h0VmlldyBzZXRPcGFxdWU6Tk9dOwotICAg
ICAgICBbX2hpZ2hsaWdodFZpZXcgc2V0Q29ybmVyUmFkaXVzOlVJV2ViVmlld01pbmltdW1IaWdo
bGlnaHRSYWRpdXNdOwotICAgIH0KLSAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9oaWdobGlnaHRWaWV3
LmdldCgpXTsKLQotICAgIFJldGFpblB0cjxVSUNvbG9yPiBoaWdobGlnaHRVSUtpdENvbG9yID0g
YWRvcHROUyhbW1VJQ29sb3IgYWxsb2NdIGluaXRXaXRoUmVkOihjb2xvci5yZWQoKSAvIDI1NS4w
KSBncmVlbjooY29sb3IuZ3JlZW4oKSAvIDI1NS4wKSBibHVlOihjb2xvci5ibHVlKCkgLyAyNTUu
MCkgYWxwaGE6KGNvbG9yLmFscGhhKCkgLyAyNTUuMCldKTsKLSAgICBbX2hpZ2hsaWdodFZpZXcg
c2V0Q29sb3I6aGlnaGxpZ2h0VUlLaXRDb2xvci5nZXQoKV07Ci0KLSAgICBib29sIGFsbEhpZ2hs
aWdodFJlY3RzQXJlUmVjdGlsaW5lYXIgPSB0cnVlOwotICAgIGNvbnN0IHNpemVfdCBxdWFkQ291
bnQgPSBoaWdobGlnaHRlZFF1YWRzLnNpemUoKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJy
YXk+IHJlY3RzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OnN0YXRpY19jYXN0PGNvbnN0IE5TVUludGVnZXI+KHF1YWRDb3VudCldKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHF1YWRDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07Ci0gICAgICAgIGlmIChxdWFkLmlzUmVj
dGlsaW5lYXIoKSkgewotICAgICAgICAgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RJbnNldChxdWFk
LmJvdW5kaW5nQm94KCksIC1VSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCAtVUlXZWJW
aWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyk7Ci0gICAgICAgICAgICBbcmVjdHMgYWRkT2JqZWN0
OltOU1ZhbHVlIHZhbHVlV2l0aENHUmVjdDpyZWN0XV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBhbGxIaWdobGlnaHRSZWN0c0FyZVJlY3RpbGluZWFyID0gZmFsc2U7Ci0gICAgICAg
ICAgICByZWN0cy5jbGVhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogV2ViS2l0MSB1c2VzIHRoZSB2aXNpYmxlUmVjdC4gVXNpbmcgdGhl
IHdob2xlIGZyYW1lIGZyb20gdGhlIHBhZ2Ugc2VlbXMgb3ZlcmtpbGwuCi0gICAgQ0dSZWN0IGJv
dW5kYXJ5UmVjdCA9IFtzZWxmIGZyYW1lXTsKLSAgICBpZiAoYWxsSGlnaGxpZ2h0UmVjdHNBcmVS
ZWN0aWxpbmVhcikKLSAgICAgICAgW19oaWdobGlnaHRWaWV3IHNldEZyYW1lczpyZWN0cy5nZXQo
KSBib3VuZGFyeVJlY3Q6Ym91bmRhcnlSZWN0XTsKLSAgICBlbHNlIHsKLSAgICAgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PiBxdWFkcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpzdGF0aWNfY2FzdDxjb25zdCBOU1VJbnRlZ2VyPihxdWFkQ291
bnQpXSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZENvdW50OyArK2kpIHsK
LSAgICAgICAgICAgIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCA9IGhpZ2hsaWdodGVkUXVhZHNbaV07
Ci0gICAgICAgICAgICBGbG9hdFF1YWQgZXh0ZW5kZWRRdWFkID0gaW5mbGF0ZVF1YWQocXVhZCwg
VUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyk7Ci0gICAgICAgICAgICBbcXVhZHMgYWRk
T2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnAxKCldXTsKLSAg
ICAgICAgICAgIFtxdWFkcyBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoQ0dQb2ludDpleHRl
bmRlZFF1YWQucDIoKV1dOwotICAgICAgICAgICAgW3F1YWRzIGFkZE9iamVjdDpbTlNWYWx1ZSB2
YWx1ZVdpdGhDR1BvaW50OmV4dGVuZGVkUXVhZC5wMygpXV07Ci0gICAgICAgICAgICBbcXVhZHMg
YWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHUG9pbnQ6ZXh0ZW5kZWRRdWFkLnA0KCldXTsK
LSAgICAgICAgfQotICAgICAgICBbX2hpZ2hsaWdodFZpZXcgc2V0UXVhZHM6cXVhZHMuZ2V0KCkg
Ym91bmRhcnlSZWN0OmJvdW5kYXJ5UmVjdF07Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPE5TTXV0
YWJsZUFycmF5PiBib3JkZXJSYWRpaSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTo0XSk7Ci0gICAgW2JvcmRlclJhZGlpIGFkZE9iamVjdDpbTlNWYWx1
ZSB2YWx1ZVdpdGhDR1NpemU6Q0dTaXplTWFrZSh0b3BMZWZ0UmFkaXVzLndpZHRoKCkgKyBVSVdl
YlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCB0b3BMZWZ0UmFkaXVzLmhlaWdodCgpICsgVUlX
ZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1cyldXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2Jq
ZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHU2l6ZTpDR1NpemVNYWtlKHRvcFJpZ2h0UmFkaXVzLndp
ZHRoKCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCB0b3BSaWdodFJhZGl1cy5o
ZWlnaHQoKSArIFVJV2ViVmlld01pbmltdW1IaWdobGlnaHRSYWRpdXMpXV07Ci0gICAgW2JvcmRl
clJhZGlpIGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhDR1NpemU6Q0dTaXplTWFrZShib3R0
b21MZWZ0UmFkaXVzLndpZHRoKCkgKyBVSVdlYlZpZXdNaW5pbXVtSGlnaGxpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLmhlaWdodCgpICsgVUlXZWJWaWV3TWluaW11bUhpZ2hsaWdodFJhZGl1
cyldXTsKLSAgICBbYm9yZGVyUmFkaWkgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aENHU2l6
ZTpDR1NpemVNYWtlKGJvdHRvbVJpZ2h0UmFkaXVzLndpZHRoKCkgKyBVSVdlYlZpZXdNaW5pbXVt
SGlnaGxpZ2h0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cy5oZWlnaHQoKSArIFVJV2ViVmlld01p
bmltdW1IaWdobGlnaHRSYWRpdXMpXV07Ci0gICAgW19oaWdobGlnaHRWaWV3IHNldENvcm5lclJh
ZGlpOmJvcmRlclJhZGlpLmdldCgpXTsKLX0KLQotLSAodm9pZClfY2FuY2VsTG9uZ1ByZXNzR2Vz
dHVyZVJlY29nbml6ZXIKLXsKLSAgICBbX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25p
emVyIGNhbmNlbF07Ci19Ci0KLS0gKHZvaWQpX2RpZFNjcm9sbAotewotICAgIFtzZWxmIF9jYW5j
ZWxMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcl07Ci0gICAgW3NlbGYgX2NhbmNlbEludGVyYWN0
aW9uXTsKLX0KLQotLSAoQk9PTClfcmVxdWlyZXNLZXlib2FyZFJlc2V0T25SZWxvYWQKLXsKLSAg
ICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVS
ZWNvZ25pemVyICopcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIGNhblByZXZlbnRHZXN0dXJl
UmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciAqKXByZXZlbnRlZEdlc3R1cmVSZWNvZ25p
emVyCi17Ci0gICAgLy8gQSBsb25nLXByZXNzIGdlc3R1cmUgY2FuIG5vdCBiZSByZWNvZ25pemVk
IHdoaWxlIHBhbm5pbmcsIGJ1dCBhIHBhbiBjYW4gYmUgcmVjb2duaXplZAotICAgIC8vIGR1cmlu
ZyBhIGxvbmctcHJlc3MgZ2VzdHVyZS4KLSAgICBCT09MIHNob3VsZE5vdFByZXZlbnRQYW5HZXN0
dXJlID0gcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NH
ZXN0dXJlUmVjb2duaXplciB8fCBwcmV2ZW50aW5nR2VzdHVyZVJlY29nbml6ZXIgPT0gX2xvbmdQ
cmVzc0dlc3R1cmVSZWNvZ25pemVyOwotICAgIHJldHVybiAhKHNob3VsZE5vdFByZXZlbnRQYW5H
ZXN0dXJlICYmIFtwcmV2ZW50ZWRHZXN0dXJlUmVjb2duaXplciBpc0tpbmRPZkNsYXNzOk5TQ2xh
c3NGcm9tU3RyaW5nKEAiVUlTY3JvbGxWaWV3UGFuR2VzdHVyZVJlY29nbml6ZXIiKV0pOwotfQot
Ci0tIChCT09MKWdlc3R1cmVSZWNvZ25pemVyOihVSUdlc3R1cmVSZWNvZ25pemVyICopcHJldmVu
dGVkR2VzdHVyZVJlY29nbml6ZXIgY2FuQmVQcmV2ZW50ZWRCeUdlc3R1cmVSZWNvZ25pemVyOihV
SUdlc3R1cmVSZWNvZ25pemVyICopcHJldmVudGluZ0dlc3R1cmVSZWNvZ25pemVyIHsKLSAgICAv
LyBEb24ndCBhbGxvdyB0aGUgaGlnaGxpZ2h0IHRvIGJlIHByZXZlbnRlZCBieSBhIHNlbGVjdGlv
biBnZXN0dXJlLiBQcmVzcy1hbmQtaG9sZCBvbiBhIGxpbmsgc2hvdWxkIGhpZ2hsaWdodCB0aGUg
bGluaywgbm90IHNlbGVjdCBpdC4KLSAgICBpZiAoKHByZXZlbnRpbmdHZXN0dXJlUmVjb2duaXpl
ciA9PSBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudC5nZXQoKS5sb3VwZUdlc3R1cmUgfHwgW193ZWJT
ZWxlY3Rpb25Bc3Npc3RhbnQgaXNTZWxlY3Rpb25HZXN0dXJlUmVjb2duaXplcjpwcmV2ZW50aW5n
R2VzdHVyZVJlY29nbml6ZXJdKQotICAgICAgICAmJiAocHJldmVudGVkR2VzdHVyZVJlY29nbml6
ZXIgPT0gX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyIHx8IHByZXZlbnRlZEdl
c3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikpIHsKLSAgICAg
ICAgcmV0dXJuIE5POwotICAgIH0KLQotICAgIHJldHVybiBZRVM7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBpc1NhbWVQYWlyKFVJR2VzdHVyZVJlY29nbml6ZXIgKmEsIFVJR2VzdHVyZVJlY29n
bml6ZXIgKmIsIFVJR2VzdHVyZVJlY29nbml6ZXIgKngsIFVJR2VzdHVyZVJlY29nbml6ZXIgKnkp
Ci17Ci0gICAgcmV0dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYiA9PSB4ICYmIGEgPT0geSk7
Ci19Ci0KLS0gKEJPT0wpZ2VzdHVyZVJlY29nbml6ZXI6KFVJR2VzdHVyZVJlY29nbml6ZXIgKiln
ZXN0dXJlUmVjb2duaXplciBzaG91bGRSZWNvZ25pemVTaW11bHRhbmVvdXNseVdpdGhHZXN0dXJl
UmVjb2duaXplcjooVUlHZXN0dXJlUmVjb2duaXplciopb3RoZXJHZXN0dXJlUmVjb2duaXplcgot
ewotICAgIGlmIChpc1NhbWVQYWlyKGdlc3R1cmVSZWNvZ25pemVyLCBvdGhlckdlc3R1cmVSZWNv
Z25pemVyLCBfaGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIuZ2V0KCksIF9sb25n
UHJlc3NHZXN0dXJlUmVjb2duaXplci5nZXQoKSkpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAg
ICBpZiAoaXNTYW1lUGFpcihnZXN0dXJlUmVjb2duaXplciwgb3RoZXJHZXN0dXJlUmVjb2duaXpl
ciwgX2hpZ2hsaWdodExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyLmdldCgpLCBfd2ViU2VsZWN0
aW9uQXNzaXN0YW50LmdldCgpLnNlbGVjdGlvbkxvbmdQcmVzc1JlY29nbml6ZXIpKQotICAgICAg
ICByZXR1cm4gWUVTOwotCi0gICAgaWYgKGlzU2FtZVBhaXIoZ2VzdHVyZVJlY29nbml6ZXIsIG90
aGVyR2VzdHVyZVJlY29nbml6ZXIsIF9zaW5nbGVUYXBHZXN0dXJlUmVjb2duaXplci5nZXQoKSwg
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQuZ2V0KCkuc2luZ2xlVGFwR2VzdHVyZSkpCi0gICAgICAg
IHJldHVybiBZRVM7Ci0KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZvaWQpX3Nob3dJbWFnZVNo
ZWV0Ci17Ci0gICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzaG93SW1hZ2VTaGVldF07Ci19Ci0K
LS0gKHZvaWQpX3Nob3dMaW5rU2hlZXQKLXsKLSAgICBbX2FjdGlvblNoZWV0QXNzaXN0YW50IHNo
b3dMaW5rU2hlZXRdOwotfQotCi0tICh2b2lkKV9zaG93RGF0YURldGVjdG9yc1NoZWV0Ci17Ci0g
ICAgW19hY3Rpb25TaGVldEFzc2lzdGFudCBzaG93RGF0YURldGVjdG9yc1NoZWV0XTsKLX0KLQot
LSAoU0VMKV9hY3Rpb25Gb3JMb25nUHJlc3MKLXsKLSAgICBpZiAoX3Bvc2l0aW9uSW5mb3JtYXRp
b24uY2xpY2thYmxlRWxlbWVudE5hbWUgPT0gIklNRyIpCi0gICAgICAgIHJldHVybiBAc2VsZWN0
b3IoX3Nob3dJbWFnZVNoZWV0KTsKLSAgICBlbHNlIGlmIChfcG9zaXRpb25JbmZvcm1hdGlvbi5j
bGlja2FibGVFbGVtZW50TmFtZSA9PSAiQSIpIHsKLSAgICAgICAgTlNVUkwgKnRhcmdldFVSTCA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOl9wb3NpdGlvbkluZm9ybWF0aW9uLnVybF07Ci0gICAgICAg
IGlmIChbW2dldERERGV0ZWN0aW9uQ29udHJvbGxlckNsYXNzKCkgdGFwQW5kSG9sZFNjaGVtZXNd
IGNvbnRhaW5zT2JqZWN0Olt0YXJnZXRVUkwgc2NoZW1lXV0pCi0gICAgICAgICAgICByZXR1cm4g
QHNlbGVjdG9yKF9zaG93RGF0YURldGVjdG9yc1NoZWV0KTsKLSAgICAgICAgcmV0dXJuIEBzZWxl
Y3Rvcihfc2hvd0xpbmtTaGVldCk7Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZv
aWQpZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6KENHUG9pbnQpcG9pbnQKLXsK
LSAgICBpZiAoIV9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gfHwgcm91bmRlZEludFBvaW50
KHBvaW50KSAhPSBfcG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCkgewotICAgICAgICBfcGFnZS0+
Z2V0UG9zaXRpb25JbmZvcm1hdGlvbihyb3VuZGVkSW50UG9pbnQocG9pbnQpLCBfcG9zaXRpb25J
bmZvcm1hdGlvbik7Ci0gICAgICAgIF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBZRVM7
Ci0gICAgfQotfQotCi0tICh2b2lkKV91cGRhdGVQb3NpdGlvbkluZm9ybWF0aW9uCi17Ci0gICAg
X2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IE5POwotICAgIF9wYWdlLT5yZXF1ZXN0UG9z
aXRpb25JbmZvcm1hdGlvbihfcG9zaXRpb25JbmZvcm1hdGlvbi5wb2ludCk7Ci19Ci0KLS0gKEJP
T0wpZ2VzdHVyZVJlY29nbml6ZXJTaG91bGRCZWdpbjooVUlHZXN0dXJlUmVjb2duaXplciAqKWdl
c3R1cmVSZWNvZ25pemVyCi17Ci0gICAgQ0dQb2ludCBwb2ludCA9IFtnZXN0dXJlUmVjb2duaXpl
ciBsb2NhdGlvbkluVmlldzpzZWxmXTsKLQotICAgIGlmIChnZXN0dXJlUmVjb2duaXplciA9PSBf
aGlnaGxpZ2h0TG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXIKLSAgICAgICAgfHwgZ2VzdHVyZVJl
Y29nbml6ZXIgPT0gX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyCi0gICAgICAgIHx8IGdlc3R1
cmVSZWNvZ25pemVyID09IF90d29GaW5nZXJEb3VibGVUYXBHZXN0dXJlUmVjb2duaXplcgotICAg
ICAgICB8fCBnZXN0dXJlUmVjb2duaXplciA9PSBfc2luZ2xlVGFwR2VzdHVyZVJlY29nbml6ZXIp
IHsKLQotICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKLSAgICAgICAgICAg
IC8vIFJlcXVlc3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvc2l0aW9uIHdpdGggc3luYyBtZXNz
YWdlLgotICAgICAgICAgICAgLy8gSWYgdGhlIGFzc2lzdGVkIG5vZGUgaXMgdGhlIHNhbWUsIHBy
ZXZlbnQgdGhlIGdlc3R1cmUuCi0gICAgICAgICAgICBfcGFnZS0+Z2V0UG9zaXRpb25JbmZvcm1h
dGlvbihyb3VuZGVkSW50UG9pbnQocG9pbnQpLCBfcG9zaXRpb25JbmZvcm1hdGlvbik7Ci0gICAg
ICAgICAgICBfaGFzVmFsaWRQb3NpdGlvbkluZm9ybWF0aW9uID0gWUVTOwotICAgICAgICAgICAg
aWYgKF9wb3NpdGlvbkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGdl
c3R1cmVSZWNvZ25pemVyID09IF9oaWdobGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcikg
ewotICAgICAgICBpZiAoX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQpIHsKLSAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSBkaWZmZXJlbnQgbm9kZSB0aGFuIHRoZSBhc3Npc3RlZCBvbmUuCi0gICAgICAg
ICAgICAvLyBQcmV2ZW50IHRoZSBnZXN0dXJlIGlmIHRoZXJlIGlzIG5vIG5vZGUuCi0gICAgICAg
ICAgICAvLyBBbGxvdyB0aGUgZ2VzdHVyZSBpZiBpdCBpcyBhIG5vZGUgdGhhdCB3YW50cyBoaWdo
bGlnaHQgb3IgaWYgdGhlcmUgaXMgYW4gYWN0aW9uIGZvciBpdC4KLSAgICAgICAgICAgIGlmIChf
cG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZS5pc051bGwoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgICAgICByZXR1cm4gW3NlbGYgX2FjdGlvbkZv
ckxvbmdQcmVzc10gIT0gbmlsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2Ug
c3RpbGwgaGF2ZSBubyBpZGVhIGFib3V0IHdoYXQgaXMgYXQgdGhlIGxvY2F0aW9uLgotICAgICAg
ICAgICAgLy8gU2VuZCBhbmQgYXN5bmMgbWVzc2FnZSB0byBmaW5kIG91dC4KLSAgICAgICAgICAg
IF9oYXNWYWxpZFBvc2l0aW9uSW5mb3JtYXRpb24gPSBOTzsKLSAgICAgICAgICAgIF9wYWdlLT5y
ZXF1ZXN0UG9zaXRpb25JbmZvcm1hdGlvbihyb3VuZGVkSW50UG9pbnQocG9pbnQpKTsKLSAgICAg
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZ2VzdHVyZVJl
Y29nbml6ZXIgPT0gX2xvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyKSB7Ci0gICAgICAgIC8vIFVz
ZSB0aGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIHdpdGggb25lIG9mIHRoZSBwcmV2aW91cyBjYWxs
cwotICAgICAgICAvLyB0byBnZXN0dXJlUmVjb2duaXplclNob3VsZEJlZ2luLgotICAgICAgICAv
LyBGb3JjZSBhIHN5bmMgY2FsbCBpZiBub3QgcmVhZHkgeWV0LgotICAgICAgICBbc2VsZiBlbnN1
cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZTpwb2ludF07Ci0KLSAgICAgICAgaWYgKF90
ZXh0U2VsZWN0aW9uQXNzaXN0YW50KSB7Ci0gICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBnZXN0
dXJlIGlmIGl0IGlzIHRoZSBzYW1lIG5vZGUuCi0gICAgICAgICAgICBpZiAoX3Bvc2l0aW9uSW5m
b3JtYXRpb24ubm9kZUF0UG9zaXRpb25Jc0Fzc2lzdGVkTm9kZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTk87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBn
ZXN0dXJlIGlmIHRoZXJlIGlzIG5vIGFjdGlvbiBmb3IgdGhlIG5vZGUuCi0gICAgICAgICAgICBy
ZXR1cm4gW3NlbGYgX2FjdGlvbkZvckxvbmdQcmVzc10gIT0gbmlsOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGdlc3R1cmVSZWNvZ25pemVyID09IF90d29GaW5nZXJQYW5HZXN0dXJlUmVj
b2duaXplcikgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIHJldHVy
biBZRVM7Ci19Ci0KLS0gKHZvaWQpX2NhbmNlbEludGVyYWN0aW9uCi17Ci0gICAgX2lzVGFwSGln
aGxpZ2h0SURWYWxpZCA9IE5POwotICAgIFtfaGlnaGxpZ2h0VmlldyByZW1vdmVGcm9tU3VwZXJ2
aWV3XTsKLX0KLQotLSAoQk9PTCloYXNTZWxlY3RhYmxlUG9zaXRpb25BdFBvaW50OihDR1BvaW50
KXBvaW50Ci17Ci0gICAgW3NlbGYgZW5zdXJlUG9zaXRpb25JbmZvcm1hdGlvbklzVXBUb0RhdGU6
cG9pbnRdOwotICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIG5lZWRzIHRvIGJlIGV4dGVuZGVkIHRv
IGluY2x1ZGUgb3RoZXIgZWxlbWVudHMuCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gcmVqZWN0
IHBvc2l0aW9ucyB0aGF0IHdpbGwgbGVhZCB0byBhIHZlcnkgbGFyZ2Ugc2VsZWN0aW9uLgotICAg
IHJldHVybiBfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSAhPSAiSU1H
IiAmJiBfcG9zaXRpb25JbmZvcm1hdGlvbi5jbGlja2FibGVFbGVtZW50TmFtZSAhPSAiQSIgJiYg
IV9wb3NpdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJlY3RzLmlzRW1wdHkoKTsKLX0KLQotLSAo
Qk9PTClwb2ludElzSW5Bc3Npc3RlZE5vZGU6KENHUG9pbnQpcG9pbnQKLXsKLSAgICBbc2VsZiBl
bnN1cmVQb3NpdGlvbkluZm9ybWF0aW9uSXNVcFRvRGF0ZTpwb2ludF07Ci0gICAgcmV0dXJuIF9w
b3NpdGlvbkluZm9ybWF0aW9uLm5vZGVBdFBvc2l0aW9uSXNBc3Npc3RlZE5vZGU7Ci19Ci0KLS0g
KE5TQXJyYXkgKil3ZWJTZWxlY3Rpb25SZWN0cwotewotICAgIHVuc2lnbmVkIHNpemUgPSBfcGFn
ZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0cy5zaXplKCk7Ci0gICAgaWYgKCFzaXplKQot
ICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNNdXRhYmxlQXJyYXkgKndlYlJlY3RzID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6U2VsZWN0aW9u
UmVjdCYgY29yZVJlY3QgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25SZWN0c1tpXTsK
LSAgICAgICAgV2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNl
bGVjdGlvblJlY3RdOwotICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7Ci0g
ICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09
IExUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9u
UmlnaHRUb0xlZnQ7Ci0gICAgICAgIHdlYlJlY3QuaXNMaW5lQnJlYWsgPSBjb3JlUmVjdC5pc0xp
bmVCcmVhaygpOwotICAgICAgICB3ZWJSZWN0LmlzRmlyc3RPbkxpbmUgPSBjb3JlUmVjdC5pc0Zp
cnN0T25MaW5lKCk7Ci0gICAgICAgIHdlYlJlY3QuaXNMYXN0T25MaW5lID0gY29yZVJlY3QuaXNM
YXN0T25MaW5lKCk7Ci0gICAgICAgIHdlYlJlY3QuY29udGFpbnNTdGFydCA9IGNvcmVSZWN0LmNv
bnRhaW5zU3RhcnQoKTsKLSAgICAgICAgd2ViUmVjdC5jb250YWluc0VuZCA9IGNvcmVSZWN0LmNv
bnRhaW5zRW5kKCk7Ci0gICAgICAgIHdlYlJlY3QuaXNJbkZpeGVkUG9zaXRpb24gPSBjb3JlUmVj
dC5pc0luRml4ZWRQb3NpdGlvbigpOwotICAgICAgICB3ZWJSZWN0LmlzSG9yaXpvbnRhbCA9IGNv
cmVSZWN0LmlzSG9yaXpvbnRhbCgpOwotICAgICAgICBbd2ViUmVjdHMgYWRkT2JqZWN0OndlYlJl
Y3RdOwotICAgIH0KLQotICAgIHJldHVybiB3ZWJSZWN0czsKLX0KLQotLSAodm9pZClfaGlnaGxp
Z2h0TG9uZ1ByZXNzUmVjb2duaXplZDooVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciAqKWdl
c3R1cmVSZWNvZ25pemVyCi17Ci0gICAgQVNTRVJUKGdlc3R1cmVSZWNvZ25pemVyID09IF9oaWdo
bGlnaHRMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcik7Ci0KLSAgICBzd2l0Y2ggKFtnZXN0dXJl
UmVjb2duaXplciBzdGF0ZV0pIHsKLSAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUJl
Z2FuOgotICAgICAgICBfcGFnZS0+dGFwSGlnaGxpZ2h0QXRQb3NpdGlvbihbZ2VzdHVyZVJlY29n
bml6ZXIgc3RhcnRQb2ludF0sIF9sYXRlc3RUYXBIaWdobGlnaHRJRCk7Ci0gICAgICAgIF9pc1Rh
cEhpZ2hsaWdodElEVmFsaWQgPSBZRVM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVUlHZXN0
dXJlUmVjb2duaXplclN0YXRlRW5kZWQ6Ci0gICAgICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRp
b24uY2xpY2thYmxlRWxlbWVudE5hbWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgW3NlbGYgX2F0
dGVtcHRDbGlja0F0TG9jYXRpb246W2dlc3R1cmVSZWNvZ25pemVyIHN0YXJ0UG9pbnRdXTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWQ6
Ci0gICAgICAgIFtzZWxmIF9jYW5jZWxJbnRlcmFjdGlvbl07Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLSAodm9pZClfbG9uZ1ByZXNz
UmVjb2duaXplZDooVUlMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25p
emVyCi17Ci0gICAgQVNTRVJUKGdlc3R1cmVSZWNvZ25pemVyID09IF9sb25nUHJlc3NHZXN0dXJl
UmVjb2duaXplcik7Ci0KLSAgICBpZiAoW2dlc3R1cmVSZWNvZ25pemVyIHN0YXRlXSA9PSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbikgewotICAgICAgICBTRUwgYWN0aW9uID0gW3NlbGYg
X2FjdGlvbkZvckxvbmdQcmVzc107Ci0gICAgICAgIGlmIChhY3Rpb24pCi0gICAgICAgICAgICBb
c2VsZiBwZXJmb3JtU2VsZWN0b3I6YWN0aW9uXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX3Npbmds
ZVRhcFJlY29nbml6ZWQ6KFVJVGFwR2VzdHVyZVJlY29nbml6ZXIgKilnZXN0dXJlUmVjb2duaXpl
cgotewotICAgIEFTU0VSVChnZXN0dXJlUmVjb2duaXplciA9PSBfc2luZ2xlVGFwR2VzdHVyZVJl
Y29nbml6ZXIpOwotCi0gICAgaWYgKF93ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgJiYgIVtfd2ViU2Vs
ZWN0aW9uQXNzaXN0YW50IHNob3VsZEhhbmRsZVNpbmdsZVRhcEF0UG9pbnQ6Z2VzdHVyZVJlY29n
bml6ZXIubG9jYXRpb25dKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3dlYlNlbGVjdGlvbkFz
c2lzdGFudCBjbGVhclNlbGVjdGlvbl07Ci0KLSAgICBbc2VsZiBfYXR0ZW1wdENsaWNrQXRMb2Nh
dGlvbjpbZ2VzdHVyZVJlY29nbml6ZXIgbG9jYXRpb25dXTsKLX0KLQotLSAodm9pZClfZG91Ymxl
VGFwUmVjb2duaXplZDooVUlUYXBHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1cmVSZWNvZ25pemVy
Ci17Ci0gICAgLy8gRklYTUU6IEFkZCBpbXBsZW1lbnRhdGlvbi4KLX0KLQotLSAodm9pZClfdHdv
RmluZ2VyRG91YmxlVGFwUmVjb2duaXplZDooVUlUYXBHZXN0dXJlUmVjb2duaXplciAqKWdlc3R1
cmVSZWNvZ25pemVyCi17Ci0gICAgLy8gRklYTUU6IEFkZCBpbXBsZW1lbnRhdGlvbi4KLX0KLQot
LSAodm9pZClfdHdvRmluZ2VyUGFuUmVjb2duaXplZDooVUlQYW5HZXN0dXJlUmVjb2duaXplciAq
KWdlc3R1cmVSZWNvZ25pemVyCi17Ci0gICAgLy8gRklYTUU6IEFkZCBpbXBsZW1lbnRhdGlvbi4K
LX0KLQotLSAodm9pZClfYXR0ZW1wdENsaWNrQXRMb2NhdGlvbjooQ0dQb2ludClsb2NhdGlvbgot
ewotICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB3ZSBzaG91bGQgYWx3YXlzIHByb3ZpZGUgc29tZSB2
aXN1YWwgZmVlZGJhY2sgb24gY2xpY2suIElmIGEgc2hvcnQgdGFwIGRpZCBub3QgdHJpZ2dlciB0
aGUKLSAgICAvLyB0YXAgaGlnaGxpZ2h0LCB3ZSBzaG91bGQgc2hvdyBvbmUgYmFzZWQgb24gYSB0
aW1lciBpZiB3ZSBjb21taXQgdGhlIHN5bnRoZXRpYyBtb3VzZSBldmVudHMuCi0gICAgW3NlbGYg
X2NhbmNlbEludGVyYWN0aW9uXTsKLQotICAgIGlmICghW3NlbGYgaXNGaXJzdFJlc3BvbmRlcl0p
Ci0gICAgICAgIFtzZWxmIGJlY29tZUZpcnN0UmVzcG9uZGVyXTsKLQotICAgIF9wYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlVGFwKEludFBvaW50KGxvY2F0aW9u
KSksIF9wYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLS0gKHZvaWQpdXNlU2VsZWN0aW9uQXNzaXN0YW50
V2l0aE1vZGU6KFVJV2ViU2VsZWN0aW9uTW9kZSlzZWxlY3Rpb25Nb2RlCi17Ci0gICAgaWYgKHNl
bGVjdGlvbk1vZGUgPT0gVUlXZWJTZWxlY3Rpb25Nb2RlV2ViKSB7Ci0gICAgICAgIGlmIChfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudCkgewotICAgICAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0
YW50IGRlYWN0aXZhdGVTZWxlY3Rpb25dOwotICAgICAgICAgICAgX3RleHRTZWxlY3Rpb25Bc3Np
c3RhbnQgPSBuaWw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFfd2ViU2VsZWN0aW9uQXNzaXN0
YW50KQotICAgICAgICAgICAgX3dlYlNlbGVjdGlvbkFzc2lzdGFudCA9IGFkb3B0TlMoW1tVSVdL
U2VsZWN0aW9uQXNzaXN0YW50IGFsbG9jXSBpbml0V2l0aFZpZXc6c2VsZl0pOwotICAgIH0gZWxz
ZSBpZiAoc2VsZWN0aW9uTW9kZSA9PSBVSVdlYlNlbGVjdGlvbk1vZGVUZXh0T25seSkgewotICAg
ICAgICBpZiAoX3dlYlNlbGVjdGlvbkFzc2lzdGFudCkKLSAgICAgICAgICAgIF93ZWJTZWxlY3Rp
b25Bc3Npc3RhbnQgPSBuaWw7Ci0KLSAgICAgICAgaWYgKCFfdGV4dFNlbGVjdGlvbkFzc2lzdGFu
dCkKLSAgICAgICAgICAgIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ID0gYWRvcHROUyhbW1VJV0tU
ZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgYWxsb2NdIGluaXRXaXRoVmlldzpzZWxmXSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGdlc3R1cmUgcmVjb2duaXplcnMg
aW4gY2FzZSBlZGl0aWJpbGl0eSBoYXMgY2hhbmdlZC4KLSAgICAgICAgICAgIFtfdGV4dFNlbGVj
dGlvbkFzc2lzdGFudCBzZXRHZXN0dXJlUmVjb2duaXplcnNdOwotICAgICAgICB9Ci0KLSAgICAg
ICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IGFjdGl2YXRlU2VsZWN0aW9uXTsKLSAgICB9Ci19
Ci0KLS0gKHZvaWQpY2xlYXJTZWxlY3Rpb24KLXsKLSAgICBfcGFnZS0+Y2xlYXJTZWxlY3Rpb24o
KTsKLX0KLQotLSAodm9pZClfcG9zaXRpb25JbmZvcm1hdGlvbkRpZENoYW5nZTooY29uc3QgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKWluZm8KLXsKLSAgICBfcG9zaXRpb25JbmZv
cm1hdGlvbiA9IGluZm87Ci0gICAgX2hhc1ZhbGlkUG9zaXRpb25JbmZvcm1hdGlvbiA9IFlFUzsK
LSAgICBpZiAoX2FjdGlvblNoZWV0QXNzaXN0YW50KQotICAgICAgICBbX2FjdGlvblNoZWV0QXNz
aXN0YW50IHVwZGF0ZVNoZWV0UG9zaXRpb25dOwotfQotCi0tICh2b2lkKV93aWxsU3RhcnRTY3Jv
bGxpbmdPclpvb21pbmcKLXsKLSAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCB3aWxsU3RhcnRT
Y3JvbGxpbmdPclpvb21pbmdQYWdlXTsKLSAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgd2ls
bFN0YXJ0U2Nyb2xsaW5nT3ZlcmZsb3ddOwotfQotCi0tICh2b2lkKV93aWxsU3RhcnRVc2VyVHJp
Z2dlcmVkU2Nyb2xsaW5nT3Jab29taW5nCi17Ci0gICAgX2NhblNlbmRUb3VjaEV2ZW50c0FzeW5j
aHJvbm91c2x5ID0gWUVTOwotfQotCi0tICh2b2lkKV9kaWRFbmRTY3JvbGxpbmdPclpvb21pbmcK
LXsKLSAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBkaWRFbmRTY3JvbGxpbmdPclpvb21pbmdQ
YWdlXTsKLSAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgZGlkRW5kU2Nyb2xsaW5nT3ZlcmZs
b3ddOwotfQotCi0tIChVSVZpZXcgKilpbnB1dEFjY2Vzc29yeVZpZXcKLXsKLSAgICBpZiAoIV9p
c0VkaXRhYmxlKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGlmICghX2FjY2Vzc29y
eSkgewotICAgICAgICBfYWNjZXNzb3J5ID0gW1tVSVdlYkZvcm1BY2Nlc3NvcnkgYWxsb2NdIGlu
aXRdOwotICAgICAgICBfYWNjZXNzb3J5LmRlbGVnYXRlID0gc2VsZjsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIF9hY2Nlc3Nvcnk7Ci19Ci0KLS0gKE5TQXJyYXkgKilzdXBwb3J0ZWRQYXN0ZWJv
YXJkVHlwZXNGb3JDdXJyZW50U2VsZWN0aW9uCi17Ci0gICAgaWYgKF9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnNlbGVjdGlvbklzTm9uZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBzdGF0
aWMgTlNNdXRhYmxlQXJyYXkgKnJpY2hUeXBlcyA9IG5pbDsKLSAgICBzdGF0aWMgTlNNdXRhYmxl
QXJyYXkgKnBsYWluVGV4dFR5cGVzID0gbmlsOwotICAgIGlmICghcGxhaW5UZXh0VHlwZXMpIHsK
LSAgICAgICAgcGxhaW5UZXh0VHlwZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsK
LSAgICAgICAgLy8gRklYTUU6IHNob3VsZCBhZGQgW3BsYWluVGV4dFR5cGVzIGFkZE9iamVjdDoo
aWQpa1VUVHlwZVVSTF07Ci0gICAgICAgIC8vIHdoZW4gd2UgZmlndXJlIG91dCBob3cgdG8gc2hh
cmUgdGhpcyB0eXBlIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0MgotICAgICAgICBbcGxhaW5U
ZXh0VHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpVSVBhc3RlYm9hcmRUeXBlTGlzdFN0cmluZ107
Ci0KLSAgICAgICAgcmljaFR5cGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0g
ICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYWRkIFtyaWNoVHlwZXMgYWRkT2JqZWN0OihQYXN0ZWJv
YXJkVHlwZXM6OldlYkFyY2hpdmVQYm9hcmRUeXBlKV07Ci0gICAgICAgIC8vIHdoZW4gd2UgZmln
dXJlIG91dCBob3cgdG8gc2hhcmUgdGhpcyB0eXBlIGJldHdlZW4gV2ViQ29yZSBhbmQgV2ViS2l0
MgotICAgICAgICBbcmljaFR5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6VUlQYXN0ZWJvYXJkVHlw
ZUxpc3RJbWFnZV07Ci0gICAgICAgIFtyaWNoVHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpwbGFp
blRleHRUeXBlc107Ci0gICAgfQotCi0gICAgcmV0dXJuIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSkgPyByaWNoVHlwZXMgOiBwbGFpblRleHRUeXBlczsKLX0K
LQotLSAodm9pZClfYWRkU2hvcnRjdXQ6KGlkKXNlbmRlcgotewotICAgIC8vIEZJWE1FOiBUbyBi
ZSBpbXBsZW1lbnRlZC4KLX0KLQotLSAodm9pZClfcHJvbXB0Rm9yUmVwbGFjZTooaWQpc2VuZGVy
Ci17Ci0gICAgLy8gRklYTUU6IFRvIGJlIGltcGxlbWVudGVkLgotfQotCi0tICh2b2lkKXJlcGxh
Y2U6KGlkKXNlbmRlcgotewotICAgIC8vIEZJWE1FOiBUbyBiZSBpbXBsZW1lbnRlZC4KLX0KLQot
LSAoQk9PTCljYW5QZXJmb3JtQWN0aW9uOihTRUwpYWN0aW9uIHdpdGhTZW5kZXI6KGlkKXNlbmRl
cgotewotICAgIEJPT0wgaGFzV2ViU2VsZWN0aW9uID0gX3dlYlNlbGVjdGlvbkFzc2lzdGFudCAm
JiAhQ0dSZWN0SXNFbXB0eShfd2ViU2VsZWN0aW9uQXNzaXN0YW50LmdldCgpLnNlbGVjdGlvbkZy
YW1lKTsKLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9zaG93VGV4dFN0eWxlT3B0aW9u
czopKQotICAgICAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUgJiYgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSAmJiAhX3No
b3dpbmdUZXh0U3R5bGVPcHRpb25zOwotICAgIGlmIChfc2hvd2luZ1RleHRTdHlsZU9wdGlvbnMp
Ci0gICAgICAgIHJldHVybiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVCb2xkZmFjZTopIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlSXRhbGljczopIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IodG9nZ2xlVW5kZXJsaW5lOikpOwotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGN1dDop
KQotICAgICAgICByZXR1cm4gIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxk
ICYmIF9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxlICYmIF9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2U7Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2Vs
ZWN0b3IocGFzdGU6KSkgewotICAgICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0
aW9uSXNOb25lIHx8ICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZSkKLSAg
ICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgVUlQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0g
W1VJUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF07Ci0gICAgICAgIE5TQXJyYXkgKnR5cGVz
ID0gW3NlbGYgc3VwcG9ydGVkUGFzdGVib2FyZFR5cGVzRm9yQ3VycmVudFNlbGVjdGlvbl07Ci0g
ICAgICAgIE5TSW5kZXhTZXQgKmluZGljZXMgPSBbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRl
eGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbcGFzdGVib2FyZCBudW1iZXJPZkl0ZW1zXSldOwot
ICAgICAgICByZXR1cm4gW3Bhc3RlYm9hcmQgY29udGFpbnNQYXN0ZWJvYXJkVHlwZXM6dHlwZXMg
aW5JdGVtU2V0OmluZGljZXNdOwotICAgIH0KLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9y
KGNvcHk6KSkgewotICAgICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3Jk
RmllbGQpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIHJldHVybiBoYXNXZWJTZWxl
Y3Rpb24gfHwgX3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZTsKLSAgICB9Ci0K
LSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfZGVmaW5lOikpIHsKLSAgICAgICAgaWYgKF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkIHx8ICEoaGFzV2ViU2VsZWN0aW9u
IHx8IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpKQotICAgICAgICAgICAg
cmV0dXJuIE5POwotCi0gICAgICAgIE5TVUludGVnZXIgdGV4dExlbmd0aCA9IF9wYWdlLT5lZGl0
b3JTdGF0ZSgpLnNlbGVjdGVkVGV4dExlbmd0aDsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBiZSBjYWxsaW5nIFVJUmVmZXJlbmNlTGlicmFyeVZpZXdDb250cm9sbGVyIHRvIGNoZWNrIGlm
IHRoZSBsZW5ndGggaXMKLSAgICAgICAgLy8gYWNjZXB0YWJsZSwgYnV0IHRoZSBpbnRlcmZhY2Ug
dGFrZXMgYSBzdHJpbmcuCi0gICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xNTI1NDQwNj4KLSAg
ICAgICAgaWYgKCF0ZXh0TGVuZ3RoIHx8IHRleHRMZW5ndGggPiAyMDApCi0gICAgICAgICAgICBy
ZXR1cm4gTk87Ci0KLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihfYWRkU2hvcnRjdXQ6KSkgewotICAgICAgICBpZiAoX3BhZ2UtPmVkaXRv
clN0YXRlKCkuaXNJblBhc3N3b3JkRmllbGQgfHwgIShoYXNXZWJTZWxlY3Rpb24gfHwgX3BhZ2Ut
PmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZSkpCi0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCwgcmV0dXJuaW5nIE5PIGFsd2F5
cyBmb3Igbm93LgotICAgICAgICByZXR1cm4gTk87Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IoX3Byb21wdEZvclJlcGxhY2U6KSkgewotICAgICAgICAvLyBGSVhNRTogbmVl
ZCB0byBpbXBsZW1lbnQKLSAgICAgICAgcmV0dXJuIE5POwotICAgIH0KLQotICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKHNlbGVjdDopKSB7Ci0gICAgICAgIC8vIERpc2FibGUgc2VsZWN0IGlu
IHBhc3N3b3JkIGZpZWxkcyBzbyB0aGF0IHlvdSBjYW4ndCBzZWUgd29yZCBib3VuZGFyaWVzLgot
ICAgICAgICByZXR1cm4gIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzSW5QYXNzd29yZEZpZWxkICYm
IFtzZWxmIGhhc0NvbnRlbnRdICYmICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05v
bmUgJiYgIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2U7Ci0gICAgfQotCi0g
ICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc2VsZWN0QWxsOikpIHsKLSAgICAgICAgaWYgKF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCAhW3NlbGYgaGFzQ29udGVudF0p
Ci0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRl
KCkuc2VsZWN0aW9uSXNSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIC8v
IEVuYWJsZSBzZWxlY3RBbGwgZm9yIG5vbi1lZGl0YWJsZSB0ZXh0LCB3aGVyZSB0aGUgdXNlciBj
YW4ndCBhY2Nlc3MKLSAgICAgICAgLy8gdGhpcyBjb21tYW5kIHZpYSBsb25nLXByZXNzIHRvIGdl
dCBhIGNhcmV0LgotICAgICAgICBpZiAoX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRp
dGFibGUpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIC8vIERvbid0IGF0dGVtcHQg
c2VsZWN0QWxsIHdpdGggZ2VuZXJhbCB3ZWIgY29udGVudC4KLSAgICAgICAgaWYgKGhhc1dlYlNl
bGVjdGlvbikKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgLy8gRklYTUU6IE9ubHkg
ZW5hYmxlIGlmIHRoZSBzZWxlY3Rpb24gZG9lc24ndCBhbHJlYWR5IHNwYW4gdGhlIGVudGlyZSBk
b2N1bWVudC4KLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3RvcihyZXBsYWNlOikpCi0gICAgICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUo
KS5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNJblBhc3N3b3Jk
RmllbGQ7Ci0KLSAgICByZXR1cm4gW3N1cGVyIGNhblBlcmZvcm1BY3Rpb246YWN0aW9uIHdpdGhT
ZW5kZXI6c2VuZGVyXTsKLX0KLQotLSAodm9pZClfcmVzZXRTaG93aW5nVGV4dFN0eWxlOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9u
cyA9IE5POwotICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBoaWRlVGV4dFN0eWxlT3B0aW9u
c107Ci19Ci0KLS0gKHZvaWQpX3BlcmZvcm1BY3Rpb246KFdLU2hlZXRBY3Rpb25zKWFjdGlvbgot
ewotICAgIF9wYWdlLT5wZXJmb3JtQWN0aW9uT25FbGVtZW50KCh1aW50MzJfdClhY3Rpb24pOwot
fQotCi0tICh2b2lkKWNvcHk6KGlkKXNlbmRlcgotewotICAgIF9wYWdlLT5leGVjdXRlRWRpdENv
bW1hbmQoQVNDSUlMaXRlcmFsKCJjb3B5IikpOwotfQotCi0tICh2b2lkKWN1dDooaWQpc2VuZGVy
Ci17Ci0gICAgW3NlbGYuaW5wdXREZWxlZ2F0ZSB0ZXh0V2lsbENoYW5nZTpzZWxmXTsKLQotICAg
IF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJjdXQiKSk7Ci0KLSAgICBb
c2VsZi5pbnB1dERlbGVnYXRlIHRleHREaWRDaGFuZ2U6c2VsZl07Ci19Ci0KLS0gKHZvaWQpcGFz
dGU6KGlkKXNlbmRlcgotewotICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgdGV4dFdpbGxDaGFuZ2U6
c2VsZl07Ci0gICAgCi0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChBU0NJSUxpdGVyYWwo
InBhc3RlIikpOwotICAgIAotICAgIFtzZWxmLmlucHV0RGVsZWdhdGUgdGV4dERpZENoYW5nZTpz
ZWxmXTsKLX0KLQotLSAodm9pZClzZWxlY3Q6KGlkKXNlbmRlcgotewotICAgIFtfdGV4dFNlbGVj
dGlvbkFzc2lzdGFudCBzZWxlY3RXb3JkXTsKLSAgICAvLyBXZSBjYW5ub3QgdXNlIHNlbGVjdFdv
cmQgY29tbWFuZCwgYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gc2VsZWN0IHRoZSB3b3Jk
IGV2ZW4gd2hlbiBpdCBpcyB0aGUgbGFzdCBpbiB0aGUgcGFyYWdyYXBoLgotICAgIF9wYWdlLT5l
eHRlbmRTZWxlY3Rpb24oV29yZEdyYW51bGFyaXR5KTsKLX0KLQotLSAodm9pZClzZWxlY3RBbGw6
KGlkKXNlbmRlcgotewotICAgIFtfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCBzZWxlY3RBbGw6c2Vu
ZGVyXTsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgic2VsZWN0
QWxsIikpOwotfQotCi0tICh2b2lkKXRvZ2dsZUJvbGRmYWNlOihpZClzZW5kZXIKLXsKLSAgICBp
ZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0ZXJhbCgi
dG9nZ2xlQm9sZCIpKTsKLX0KLQotLSAodm9pZCl0b2dnbGVJdGFsaWNzOihpZClzZW5kZXIKLXsK
LSAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJTGl0
ZXJhbCgidG9nZ2xlSXRhbGljIikpOwotfQotCi0tICh2b2lkKXRvZ2dsZVVuZGVybGluZTooaWQp
c2VuZGVyCi17Ci0gICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFu
ZChBU0NJSUxpdGVyYWwoInRvZ2dsZVVuZGVybGluZSIpKTsKLX0KLQotLSAodm9pZClfc2hvd1Rl
eHRTdHlsZU9wdGlvbnM6KGlkKXNlbmRlcgotewotICAgIF9zaG93aW5nVGV4dFN0eWxlT3B0aW9u
cyA9IFlFUzsKLSAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvd1RleHRTdHlsZU9wdGlv
bnNdOwotfQotCi0tICh2b2lkKV9zaG93RGljdGlvbmFyeTooTlNTdHJpbmcgKil0ZXh0Ci17Ci0g
ICAgQ0dSZWN0IHByZXNlbnRhdGlvblJlY3QgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rp
b25SZWN0c1swXS5yZWN0KCk7Ci0gICAgaWYgKF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50KQotICAg
ICAgICBbX3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgc2hvd0RpY3Rpb25hcnlGb3I6dGV4dCBmcm9t
UmVjdDpwcmVzZW50YXRpb25SZWN0XTsKLSAgICBlbHNlCi0gICAgICAgIFtfd2ViU2VsZWN0aW9u
QXNzaXN0YW50IHNob3dEaWN0aW9uYXJ5Rm9yOnRleHQgZnJvbVJlY3Q6cHJlc2VudGF0aW9uUmVj
dF07Ci19Ci0KLS0gKHZvaWQpX2RlZmluZTooaWQpc2VuZGVyCi17Ci0gICAgX3BhZ2UtPmdldFNl
bGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyhTdHJpbmdDYWxsYmFjazo6Y3JlYXRlKFtzZWxmXShi
b29sIGVycm9yLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsKLSAgICAgICAgaWYgKGVycm9yKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXN0cmluZykKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBOU1N0cmluZyAqY29udmVydGVkU3RyaW5nID0gKnN0cmluZzsKLSAgICAg
ICAgW3NlbGYgX3Nob3dEaWN0aW9uYXJ5OmNvbnZlcnRlZFN0cmluZ107Ci0gICAgfSkpOwotfQot
Ci0vLyBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wKLQotc3RhdGljIGlubGluZSBXS0dlc3R1
cmVUeXBlIHRvV0tHZXN0dXJlVHlwZShVSVdLR2VzdHVyZVR5cGUgZ2VzdHVyZVR5cGUpCi17Ci0g
ICAgc3dpdGNoIChnZXN0dXJlVHlwZSkgewotICAgIGNhc2UgVUlXS0dlc3R1cmVMb3VwZToKLSAg
ICAgICAgcmV0dXJuIFdLR2VzdHVyZUxvdXBlOwotICAgIGNhc2UgVUlXS0dlc3R1cmVPbmVGaW5n
ZXJUYXA6Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVPbmVGaW5nZXJUYXA7Ci0gICAgY2FzZSBV
SVdLR2VzdHVyZVRhcEFuZEFIYWxmOgotICAgICAgICByZXR1cm4gV0tHZXN0dXJlVGFwQW5kQUhh
bGY7Ci0gICAgY2FzZSBVSVdLR2VzdHVyZURvdWJsZVRhcDoKLSAgICAgICAgcmV0dXJuIFdLR2Vz
dHVyZURvdWJsZVRhcDsKLSAgICBjYXNlIFVJV0tHZXN0dXJlVGFwQW5kSGFsZjoKLSAgICAgICAg
cmV0dXJuIFdLR2VzdHVyZVRhcEFuZEhhbGY7Ci0gICAgY2FzZSBVSVdLR2VzdHVyZURvdWJsZVRh
cEluVW5lZGl0YWJsZToKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZURvdWJsZVRhcEluVW5lZGl0
YWJsZTsKLSAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFwSW5VbmVkaXRhYmxlOgotICAg
ICAgICByZXR1cm4gV0tHZXN0dXJlT25lRmluZ2VyVGFwSW5VbmVkaXRhYmxlOwotICAgIGNhc2Ug
VUlXS0dlc3R1cmVPbmVGaW5nZXJUYXBTZWxlY3RzQWxsOgotICAgICAgICByZXR1cm4gV0tHZXN0
dXJlT25lRmluZ2VyVGFwU2VsZWN0c0FsbDsKLSAgICBjYXNlIFVJV0tHZXN0dXJlT25lRmluZ2Vy
RG91YmxlVGFwOgotICAgICAgICByZXR1cm4gV0tHZXN0dXJlT25lRmluZ2VyRG91YmxlVGFwOwot
ICAgIGNhc2UgVUlXS0dlc3R1cmVPbmVGaW5nZXJUcmlwbGVUYXA6Ci0gICAgICAgIHJldHVybiBX
S0dlc3R1cmVPbmVGaW5nZXJUcmlwbGVUYXA7Ci0gICAgY2FzZSBVSVdLR2VzdHVyZVR3b0Zpbmdl
clNpbmdsZVRhcDoKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVR3b0ZpbmdlclNpbmdsZVRhcDsK
LSAgICBjYXNlIFVJV0tHZXN0dXJlVHdvRmluZ2VyUmFuZ2VkU2VsZWN0R2VzdHVyZToKLSAgICAg
ICAgcmV0dXJuIFdLR2VzdHVyZVR3b0ZpbmdlclJhbmdlZFNlbGVjdEdlc3R1cmU7Ci0gICAgY2Fz
ZSBVSVdLR2VzdHVyZVRhcE9uTGlua1dpdGhHZXN0dXJlOgotICAgICAgICByZXR1cm4gV0tHZXN0
dXJlVGFwT25MaW5rV2l0aEdlc3R1cmU7Ci0gICAgY2FzZSBVSVdLR2VzdHVyZU1ha2VXZWJTZWxl
Y3Rpb246Ci0gICAgICAgIHJldHVybiBXS0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV0tHZXN0dXJlTG91cGU7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgVUlXS0dlc3R1cmVUeXBlIHRvVUlXS0dlc3R1cmVUeXBlKFdLR2Vz
dHVyZVR5cGUgZ2VzdHVyZVR5cGUpCi17Ci0gICAgc3dpdGNoIChnZXN0dXJlVHlwZSkgewotICAg
IGNhc2UgV0tHZXN0dXJlTG91cGU6Ci0gICAgICAgIHJldHVybiBVSVdLR2VzdHVyZUxvdXBlOwot
ICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyVGFwOgotICAgICAgICByZXR1cm4gVUlXS0dlc3R1
cmVPbmVGaW5nZXJUYXA7Ci0gICAgY2FzZSBXS0dlc3R1cmVUYXBBbmRBSGFsZjoKLSAgICAgICAg
cmV0dXJuIFVJV0tHZXN0dXJlVGFwQW5kQUhhbGY7Ci0gICAgY2FzZSBXS0dlc3R1cmVEb3VibGVU
YXA6Ci0gICAgICAgIHJldHVybiBVSVdLR2VzdHVyZURvdWJsZVRhcDsKLSAgICBjYXNlIFdLR2Vz
dHVyZVRhcEFuZEhhbGY6Ci0gICAgICAgIHJldHVybiBVSVdLR2VzdHVyZVRhcEFuZEhhbGY7Ci0g
ICAgY2FzZSBXS0dlc3R1cmVEb3VibGVUYXBJblVuZWRpdGFibGU6Ci0gICAgICAgIHJldHVybiBV
SVdLR2VzdHVyZURvdWJsZVRhcEluVW5lZGl0YWJsZTsKLSAgICBjYXNlIFdLR2VzdHVyZU9uZUZp
bmdlclRhcEluVW5lZGl0YWJsZToKLSAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlT25lRmluZ2Vy
VGFwSW5VbmVkaXRhYmxlOwotICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyVGFwU2VsZWN0c0Fs
bDoKLSAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlT25lRmluZ2VyVGFwU2VsZWN0c0FsbDsKLSAg
ICBjYXNlIFdLR2VzdHVyZU9uZUZpbmdlckRvdWJsZVRhcDoKLSAgICAgICAgcmV0dXJuIFVJV0tH
ZXN0dXJlT25lRmluZ2VyRG91YmxlVGFwOwotICAgIGNhc2UgV0tHZXN0dXJlT25lRmluZ2VyVHJp
cGxlVGFwOgotICAgICAgICByZXR1cm4gVUlXS0dlc3R1cmVPbmVGaW5nZXJUcmlwbGVUYXA7Ci0g
ICAgY2FzZSBXS0dlc3R1cmVUd29GaW5nZXJTaW5nbGVUYXA6Ci0gICAgICAgIHJldHVybiBVSVdL
R2VzdHVyZVR3b0ZpbmdlclNpbmdsZVRhcDsKLSAgICBjYXNlIFdLR2VzdHVyZVR3b0ZpbmdlclJh
bmdlZFNlbGVjdEdlc3R1cmU6Ci0gICAgICAgIHJldHVybiBVSVdLR2VzdHVyZVR3b0ZpbmdlclJh
bmdlZFNlbGVjdEdlc3R1cmU7Ci0gICAgY2FzZSBXS0dlc3R1cmVUYXBPbkxpbmtXaXRoR2VzdHVy
ZToKLSAgICAgICAgcmV0dXJuIFVJV0tHZXN0dXJlVGFwT25MaW5rV2l0aEdlc3R1cmU7Ci0gICAg
Y2FzZSBXS0dlc3R1cmVNYWtlV2ViU2VsZWN0aW9uOgotICAgICAgICByZXR1cm4gVUlXS0dlc3R1
cmVNYWtlV2ViU2VsZWN0aW9uOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBXS1NlbGVjdGlv
blRvdWNoIHRvV0tTZWxlY3Rpb25Ub3VjaChVSVdLU2VsZWN0aW9uVG91Y2ggdG91Y2gpCi17Ci0g
ICAgc3dpdGNoICh0b3VjaCkgewotICAgIGNhc2UgVUlXS1NlbGVjdGlvblRvdWNoU3RhcnRlZDoK
LSAgICAgICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hTdGFydGVkOwotICAgIGNhc2UgVUlXS1Nl
bGVjdGlvblRvdWNoTW92ZWQ6Ci0gICAgICAgIHJldHVybiBXS1NlbGVjdGlvblRvdWNoTW92ZWQ7
Ci0gICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZDoKLSAgICAgICAgcmV0dXJuIFdLU2Vs
ZWN0aW9uVG91Y2hFbmRlZDsKLSAgICBjYXNlIFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5n
Rm9yd2FyZDoKLSAgICAgICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0Zvcndh
cmQ7Ci0gICAgY2FzZSBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0JhY2t3YXJkOgotICAg
ICAgICByZXR1cm4gV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTW92aW5nQmFja3dhcmQ7Ci0gICAgY2Fz
ZSBVSVdLU2VsZWN0aW9uVG91Y2hFbmRlZE5vdE1vdmluZzoKLSAgICAgICAgcmV0dXJuIFdLU2Vs
ZWN0aW9uVG91Y2hFbmRlZE5vdE1vdmluZzsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIFdLU2VsZWN0aW9uVG91Y2hFbmRlZDsKLX0KLQotc3RhdGljIGlubGlu
ZSBVSVdLU2VsZWN0aW9uVG91Y2ggdG9VSVdLU2VsZWN0aW9uVG91Y2goV0tTZWxlY3Rpb25Ub3Vj
aCB0b3VjaCkKLXsKLSAgICBzd2l0Y2ggKHRvdWNoKSB7Ci0gICAgY2FzZSBXS1NlbGVjdGlvblRv
dWNoU3RhcnRlZDoKLSAgICAgICAgcmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaFN0YXJ0ZWQ7Ci0g
ICAgY2FzZSBXS1NlbGVjdGlvblRvdWNoTW92ZWQ6Ci0gICAgICAgIHJldHVybiBVSVdLU2VsZWN0
aW9uVG91Y2hNb3ZlZDsKLSAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZDoKLSAgICAgICAg
cmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOwotICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3Vj
aEVuZGVkTW92aW5nRm9yd2FyZDoKLSAgICAgICAgcmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaEVu
ZGVkTW92aW5nRm9yd2FyZDsKLSAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE1vdmluZ0Jh
Y2t3YXJkOgotICAgICAgICByZXR1cm4gVUlXS1NlbGVjdGlvblRvdWNoRW5kZWRNb3ZpbmdCYWNr
d2FyZDsKLSAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZE5vdE1vdmluZzoKLSAgICAgICAg
cmV0dXJuIFVJV0tTZWxlY3Rpb25Ub3VjaEVuZGVkTm90TW92aW5nOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGUgdG9XS0dlc3R1cmVSZWNvZ25pemVy
U3RhdGUoVUlHZXN0dXJlUmVjb2duaXplclN0YXRlIHN0YXRlKQotewotICAgIHN3aXRjaCAoc3Rh
dGUpIHsKLSAgICBjYXNlIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlOgotICAgICAg
ICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlUG9zc2libGU7Ci0gICAgY2FzZSBVSUdl
c3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbjoKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZUJlZ2FuOwotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdl
ZDoKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWQ7Ci0gICAg
Y2FzZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWQ6Ci0gICAgICAgIHJldHVybiBX
S0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWQ7Ci0gICAgY2FzZSBVSUdlc3R1cmVSZWNv
Z25pemVyU3RhdGVFbmRlZDoKLSAgICAgICAgcmV0dXJuIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUVuZGVkOwotICAgIGNhc2UgVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRmFpbGVkOgotICAgICAg
ICByZXR1cm4gV0tHZXN0dXJlUmVjb2duaXplclN0YXRlRmFpbGVkOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSBVSUdlc3R1cmVSZWNvZ25pemVyU3RhdGUgdG9VSUdlc3R1cmVSZWNvZ25pemVy
U3RhdGUoV0tHZXN0dXJlUmVjb2duaXplclN0YXRlIHN0YXRlKQotewotICAgIHN3aXRjaCAoc3Rh
dGUpIHsKLSAgICBjYXNlIFdLR2VzdHVyZVJlY29nbml6ZXJTdGF0ZVBvc3NpYmxlOgotICAgICAg
ICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlUG9zc2libGU7Ci0gICAgY2FzZSBXS0dl
c3R1cmVSZWNvZ25pemVyU3RhdGVCZWdhbjoKLSAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZUJlZ2FuOwotICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlQ2hhbmdl
ZDoKLSAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0ZUNoYW5nZWQ7Ci0gICAg
Y2FzZSBXS0dlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWQ6Ci0gICAgICAgIHJldHVybiBV
SUdlc3R1cmVSZWNvZ25pemVyU3RhdGVDYW5jZWxsZWQ7Ci0gICAgY2FzZSBXS0dlc3R1cmVSZWNv
Z25pemVyU3RhdGVFbmRlZDoKLSAgICAgICAgcmV0dXJuIFVJR2VzdHVyZVJlY29nbml6ZXJTdGF0
ZUVuZGVkOwotICAgIGNhc2UgV0tHZXN0dXJlUmVjb2duaXplclN0YXRlRmFpbGVkOgotICAgICAg
ICByZXR1cm4gVUlHZXN0dXJlUmVjb2duaXplclN0YXRlRmFpbGVkOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSBVSVdLU2VsZWN0aW9uRmxhZ3MgdG9VSVdLU2VsZWN0aW9uRmxhZ3MoV0tTZWxl
Y3Rpb25GbGFncyBmbGFnKQotewotICAgIHN3aXRjaCAoZmxhZykgewotICAgIGNhc2UgV0tOb25l
OgotICAgICAgICByZXR1cm4gVUlXS05vbmU7Ci0gICAgY2FzZSBXS1dvcmRJc05lYXJUYXA6Ci0g
ICAgICAgIHJldHVybiBVSVdLV29yZElzTmVhclRhcDsKLSAgICBjYXNlIFdLSXNCbG9ja1NlbGVj
dGlvbjoKLSAgICAgICAgcmV0dXJuIFVJV0tJc0Jsb2NrU2VsZWN0aW9uOwotICAgIH0KLX0KLQot
c3RhdGljIGlubGluZSBXS0hhbmRsZVBvc2l0aW9uIHRvV0tIYW5kbGVQb3NpdGlvbihVSVdLSGFu
ZGxlUG9zaXRpb24gcG9zaXRpb24pCi17Ci0gICAgc3dpdGNoIChwb3NpdGlvbikgewotICAgIGNh
c2UgVUlXS0hhbmRsZVRvcDoKLSAgICAgICAgcmV0dXJuIFdLSGFuZGxlVG9wOwotICAgIGNhc2Ug
VUlXS0hhbmRsZVJpZ2h0OgotICAgICAgICByZXR1cm4gV0tIYW5kbGVSaWdodDsKLSAgICBjYXNl
IFVJV0tIYW5kbGVCb3R0b206Ci0gICAgICAgIHJldHVybiBXS0hhbmRsZUJvdHRvbTsKLSAgICBj
YXNlIFVJV0tIYW5kbGVMZWZ0OgotICAgICAgICByZXR1cm4gV0tIYW5kbGVMZWZ0OwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKGJvb2wgZXJyb3Is
IFdLSW50ZXJhY3Rpb25WaWV3ICp2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQs
IHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUsIHVpbnQzMl90IGZs
YWdzKQotewotICAgIGlmIChlcnJvcikgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoW3ZpZXcgd2ViU2VsZWN0aW9uQXNzaXN0
YW50XSkKLSAgICAgICAgWyhVSVdLU2VsZWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgd2ViU2VsZWN0
aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2lu
dCB3aXRoR2VzdHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlw
ZSkgd2l0aFN0YXRlOnRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0b1VJV0tTZWxl
Y3Rpb25GbGFncygoV0tTZWxlY3Rpb25GbGFncylmbGFncykpXTsKLSAgICBlbHNlCi0gICAgICAg
IFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0
YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2Vz
dHVyZTp0b1VJV0tHZXN0dXJlVHlwZSgoV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSkgd2l0aFN0
YXRlOnRvVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRpY19jYXN0PFdLR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZT4oZ2VzdHVyZVN0YXRlKSkgd2l0aEZsYWdzOih0b1VJV0tTZWxlY3Rpb25GbGFn
cygoV0tTZWxlY3Rpb25GbGFncylmbGFncykpXTsKLX0KLQotc3RhdGljIHZvaWQgc2VsZWN0aW9u
Q2hhbmdlZFdpdGhUb3VjaChib29sIGVycm9yLCBXS0ludGVyYWN0aW9uVmlldyAqdmlldywgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCkKLXsKLSAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKFt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0pCi0gICAgICAgIFso
VUlXS1NlbGVjdGlvbkFzc2lzdGFudCAqKVt2aWV3IHdlYlNlbGVjdGlvbkFzc2lzdGFudF0gc2Vs
ZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3Vj
aDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCldOwotICAgIGVs
c2UKLSAgICAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJh
Y3Rpb25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQb2ludClwb2lu
dCB3aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFdLU2VsZWN0aW9uVG91
Y2gpdG91Y2gpXTsKLX0KLQotLSAodm9pZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91
Y2g6KFdlYktpdDo6V0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6KFdlYktpdDo6V0tT
ZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQg
c2hyaW5rVGhyZXNob2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZAotewotICAgIFtfd2ViU2Vs
ZWN0aW9uQXNzaXN0YW50IGJsb2NrU2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaDp0b1VJV0tTZWxl
Y3Rpb25Ub3VjaCgoV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCkgd2l0aEZsYWdzOnRvVUlXS1NlbGVj
dGlvbkZsYWdzKChXS1NlbGVjdGlvbkZsYWdzKWZsYWdzKSBncm93VGhyZXNob2xkOmdyb3dUaHJl
c2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9sZF07Ci19Ci0KLS0gKHZvaWQpY2hh
bmdlU2VsZWN0aW9uV2l0aEdlc3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZTooVUlX
S0dlc3R1cmVUeXBlKWdlc3R1cmVUeXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0
YXRlKXN0YXRlCi17Ci0gICAgX3BhZ2UtPnNlbGVjdFdpdGhHZXN0dXJlKFdlYkNvcmU6OkludFBv
aW50KHBvaW50KSwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRvV0tHZXN0dXJlVHlwZShnZXN0dXJl
VHlwZSksIHRvV0tHZXN0dXJlUmVjb2duaXplclN0YXRlKHN0YXRlKSwgR2VzdHVyZUNhbGxiYWNr
OjpjcmVhdGUoW3NlbGZdKGJvb2wgZXJyb3IsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2lu
dCwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgdWludDMyX3Qg
ZmxhZ3MpIHsKLSAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZFdpdGhHZXN0dXJlKGVycm9yLCBzZWxm
LCBwb2ludCwgZ2VzdHVyZVR5cGUsIGdlc3R1cmVTdGF0ZSwgZmxhZ3MpOwotICAgIH0pKTsKLX0K
LQotLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRo
U2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBiYXNlSXNTdGFydDooQk9P
TCliYXNlSXNTdGFydAotewotICAgIF9wYWdlLT51cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhX
ZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHRvV0tTZWxlY3Rpb25Ub3VjaCh0b3VjaCksIGJhc2VJ
c1N0YXJ0LCBUb3VjaGVzQ2FsbGJhY2s6OmNyZWF0ZShbc2VsZl0oYm9vbCBlcnJvciwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0b3VjaCkgewotICAgICAgICBzZWxl
Y3Rpb25DaGFuZ2VkV2l0aFRvdWNoKGVycm9yLCBzZWxmLCBwb2ludCwgdG91Y2gpOwotICAgIH0p
KTsKLX0KLQotLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRoVG91Y2hlc0Zyb206KENHUG9pbnQp
ZnJvbSB0bzooQ0dQb2ludCl0byB3aXRoR2VzdHVyZTooVUlXS0dlc3R1cmVUeXBlKWdlc3R1cmVU
eXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKWdlc3R1cmVTdGF0ZQotewot
ICAgIF9wYWdlLT5zZWxlY3RXaXRoVHdvVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludChmcm9tKSwg
V2ViQ29yZTo6SW50UG9pbnQodG8pLCB0b1dLR2VzdHVyZVR5cGUoZ2VzdHVyZVR5cGUpLCB0b1dL
R2VzdHVyZVJlY29nbml6ZXJTdGF0ZShnZXN0dXJlU3RhdGUpLCBHZXN0dXJlQ2FsbGJhY2s6OmNy
ZWF0ZShbc2VsZl0oYm9vbCBlcnJvciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1
aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCB1aW50MzJfdCBmbGFn
cykgewotICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkV2l0aEdlc3R1cmUoZXJyb3IsIHNlbGYsIHBv
aW50LCBnZXN0dXJlVHlwZSwgZ2VzdHVyZVN0YXRlLCBmbGFncyk7Ci0gICAgfSkpOwotfQotCi0t
ICh2b2lkKWNoYW5nZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0
aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0aW9uVG91Y2gpdG91Y2ggZm9ySGFuZGxlOihVSVdL
SGFuZGxlUG9zaXRpb24paGFuZGxlCi17Ci0gICAgX3BhZ2UtPnVwZGF0ZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgdG9XS1NlbGVjdGlvblRvdWNoKHRv
dWNoKSwgdG9XS0hhbmRsZVBvc2l0aW9uKGhhbmRsZSkpOwotfQotCi0tIChXS0F1dG9Db3JyZWN0
aW9uRGF0YSAqKWF1dG9jb3JyZWN0aW9uRGF0YQotewotICAgIHJldHVybiAmX2F1dG9jb3JyZWN0
aW9uRGF0YTsKLX0KLQotLy8gVGhlIGNvbXBsZXRpb24gaGFuZGxlciBjYW4gcGFzcyBuaWwgaWYg
aW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGFjdHVhbCB0ZXh0IHByZWNlZGluZyB0aGUgaW5zZXJ0
aW9uIHBvaW50LgotLSAodm9pZClyZXF1ZXN0QXV0b2NvcnJlY3Rpb25SZWN0c0ZvclN0cmluZzoo
TlNTdHJpbmcgKilpbnB1dCB3aXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRv
Y29ycmVjdGlvblJlY3RzICpyZWN0c0ZvcklucHV0KSljb21wbGV0aW9uSGFuZGxlcgotewotICAg
IGlmICghaW5wdXQgfHwgIVtpbnB1dCBsZW5ndGhdKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKG5pbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgX2F1dG9jb3JyZWN0aW9uRGF0
YS5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAg
X3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoaW5wdXQsIEF1dG9jb3JyZWN0aW9uRGF0
YUNhbGxiYWNrOjpjcmVhdGUoW3NlbGYsIGNvbXBsZXRpb25IYW5kbGVyXShib29sLCBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IFN0cmluZyYgZm9udE5hbWUsIGRvdWJsZSBm
b250U2l6ZSwgdWludDY0X3QgdHJhaXRzKSB7Ci0gICAgICAgIENHUmVjdCBmaXJzdFJlY3QgPSBD
R1JlY3RaZXJvOwotICAgICAgICBDR1JlY3QgbGFzdFJlY3QgPSBDR1JlY3RaZXJvOwotICAgICAg
ICBpZiAocmVjdHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBmaXJzdFJlY3QgPSByZWN0c1swXTsK
LSAgICAgICAgICAgIGxhc3RSZWN0ID0gcmVjdHNbcmVjdHMuc2l6ZSgpIC0gMV07Ci0gICAgICAg
IH0KLQotICAgICAgICBXS0F1dG9Db3JyZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRhID0g
c2VsZi5hdXRvY29ycmVjdGlvbkRhdGE7Ci0gICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+Zm9u
dE5hbWUgPSBmb250TmFtZTsKLSAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT5mb250U2l6ZSA9
IGZvbnRTaXplOwotICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmZvbnRUcmFpdHMgPSB0cmFp
dHM7Ci0gICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+dGV4dEZpcnN0UmVjdCA9IGZpcnN0UmVj
dDsKLSAgICAgICAgYXV0b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3QgPSBsYXN0UmVjdDsK
LQotICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlcihyZWN0
cy5zaXplKCkgPyBbV0tBdXRvY29ycmVjdGlvblJlY3RzIGF1dG9jb3JyZWN0aW9uUmVjdHNXaXRo
UmVjdHM6Zmlyc3RSZWN0IGxhc3RSZWN0Omxhc3RSZWN0XSA6IG5pbCk7Ci0gICAgICAgIFthdXRv
Y29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKLSAgICAgICAg
YXV0b2NvcnJlY3Rpb25EYXRhLT5hdXRvY29ycmVjdGlvbkhhbmRsZXIgPSBuaWw7Ci0gICAgfSkp
OwotfQotCi0tIChDR1JlY3QpdGV4dEZpcnN0UmVjdAotewotICAgIHJldHVybiAoX3BhZ2UtPmVk
aXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24pID8gX3BhZ2UtPmVkaXRvclN0YXRlKCkuZmlyc3RN
YXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0OwotfQotCi0tIChD
R1JlY3QpdGV4dExhc3RSZWN0Ci17Ci0gICAgcmV0dXJuIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5o
YXNDb21wb3NpdGlvbikgPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5sYXN0TWFya2VkUmVjdCA6IF9h
dXRvY29ycmVjdGlvbkRhdGEudGV4dExhc3RSZWN0OwotfQotCi0vLyBUaGUgY29tcGxldGlvbiBo
YW5kbGVyIHNob3VsZCBwYXNzIHRoZSByZWN0IG9mIHRoZSBjb3JyZWN0aW9uIHRleHQgYWZ0ZXIg
cmVwbGFjaW5nIHRoZSBpbnB1dCB0ZXh0LCBvciBuaWwgaWYgdGhlIHJlcGxhY2VtZW50IGNvdWxk
IG5vdCBiZSBwZXJmb3JtZWQuCi0tICh2b2lkKWFwcGx5QXV0b2NvcnJlY3Rpb246KE5TU3RyaW5n
ICopY29ycmVjdGlvbiB0b1N0cmluZzooTlNTdHJpbmcgKilpbnB1dCB3aXRoQ29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKFVJV0tBdXRvY29ycmVjdGlvblJlY3RzICpyZWN0c0ZvckNvcnJlY3Rp
b24pKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgX2F1dG9jb3JyZWN0aW9uRGF0YS5hdXRvY29y
cmVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07Ci0gICAgX3BhZ2UtPmFw
cGx5QXV0b2NvcnJlY3Rpb24oY29ycmVjdGlvbiwgaW5wdXQsIFN0cmluZ0NhbGxiYWNrOjpjcmVh
dGUoW3NlbGZdKGJvb2wgLyplcnJvciovLCBTdHJpbmdJbXBsKiBzdHJpbmcpIHsKLSAgICAgICAg
V0tBdXRvQ29ycmVjdGlvbkRhdGEgKmF1dG9jb3JyZWN0aW9uRGF0YSA9IHNlbGYuYXV0b2NvcnJl
Y3Rpb25EYXRhOwotCi0gICAgICAgIGF1dG9jb3JyZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25I
YW5kbGVyKHN0cmluZyA/IFtXS0F1dG9jb3JyZWN0aW9uUmVjdHMgYXV0b2NvcnJlY3Rpb25SZWN0
c1dpdGhSZWN0czphdXRvY29ycmVjdGlvbkRhdGEtPnRleHRGaXJzdFJlY3QgbGFzdFJlY3Q6YXV0
b2NvcnJlY3Rpb25EYXRhLT50ZXh0TGFzdFJlY3RdIDogbmlsKTsKLSAgICAgICAgW2F1dG9jb3Jy
ZWN0aW9uRGF0YS0+YXV0b2NvcnJlY3Rpb25IYW5kbGVyIHJlbGVhc2VdOwotICAgICAgICBhdXRv
Y29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uSGFuZGxlciA9IG5pbDsKLSAgICB9KSk7Ci19
Ci0KLS0gKHZvaWQpcmVxdWVzdEF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhDb21wbGV0aW9uSGFu
ZGxlcjoodm9pZCAoXikoVUlXS0F1dG9jb3JyZWN0aW9uQ29udGV4dCAqYXV0b2NvcnJlY3Rpb25D
b250ZXh0KSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIHN5
bmNocm9ub3VzIGNhbGwgYXMgc29vbiBhcyBLZXlib2FyZCByZW1vdmVzIGxvY2tpbmcgb2YgdGhl
IG1haW4gdGhyZWFkLgotICAgIGNvbnN0IGJvb2wgdXNlU3luY1JlcXVlc3QgPSB0cnVlOwotCi0g
ICAgaWYgKHVzZVN5bmNSZXF1ZXN0KSB7Ci0gICAgICAgIFN0cmluZyBiZWZvcmVUZXh0OwotICAg
ICAgICBTdHJpbmcgbWFya2VkVGV4dDsKLSAgICAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dDsKLSAg
ICAgICAgU3RyaW5nIGFmdGVyVGV4dDsKLSAgICAgICAgdWludDY0X3QgbG9jYXRpb247Ci0gICAg
ICAgIHVpbnQ2NF90IGxlbmd0aDsKLSAgICAgICAgX3BhZ2UtPmdldEF1dG9jb3JyZWN0aW9uQ29u
dGV4dChiZWZvcmVUZXh0LCBtYXJrZWRUZXh0LCBzZWxlY3RlZFRleHQsIGFmdGVyVGV4dCwgbG9j
YXRpb24sIGxlbmd0aCk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFtXS0F1dG9jb3JyZWN0
aW9uQ29udGV4dCBhdXRvY29ycmVjdGlvbkNvbnRleHRXaXRoRGF0YTpiZWZvcmVUZXh0IG1hcmtl
ZFRleHQ6bWFya2VkVGV4dCBzZWxlY3RlZFRleHQ6c2VsZWN0ZWRUZXh0IGFmdGVyVGV4dDphZnRl
clRleHQgc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dDpOU01ha2VSYW5nZShsb2NhdGlvbiwgbGVu
Z3RoKV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9hdXRvY29ycmVjdGlvbkRhdGEuYXV0b2Nv
cnJlY3Rpb25Db250ZXh0SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKLSAgICAg
ICAgX3BhZ2UtPnJlcXVlc3RBdXRvY29ycmVjdGlvbkNvbnRleHQoQXV0b2NvcnJlY3Rpb25Db250
ZXh0Q2FsbGJhY2s6OmNyZWF0ZShbc2VsZiwgY29tcGxldGlvbkhhbmRsZXJdKGJvb2wgLyplcnJv
ciovLCBjb25zdCBTdHJpbmcmIGJlZm9yZVRleHQsIGNvbnN0IFN0cmluZyYgbWFya2VkVGV4dCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RlZFRleHQsIGNvbnN0IFN0cmluZyYgYWZ0ZXJUZXh0LCB1aW50
NjRfdCBsb2NhdGlvbiwgdWludDY0X3QgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBXS0F1dG9Db3Jy
ZWN0aW9uRGF0YSAqYXV0b2NvcnJlY3Rpb25EYXRhID0gc2VsZi5hdXRvY29ycmVjdGlvbkRhdGE7
Ci0gICAgICAgICAgICBhdXRvY29ycmVjdGlvbkRhdGEtPmF1dG9jb3JyZWN0aW9uQ29udGV4dEhh
bmRsZXIoW1dLQXV0b2NvcnJlY3Rpb25Db250ZXh0IGF1dG9jb3JyZWN0aW9uQ29udGV4dFdpdGhE
YXRhOmJlZm9yZVRleHQgbWFya2VkVGV4dDptYXJrZWRUZXh0IHNlbGVjdGVkVGV4dDpzZWxlY3Rl
ZFRleHQgYWZ0ZXJUZXh0OmFmdGVyVGV4dCBzZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0Ok5TTWFr
ZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGgpXSk7Ci0gICAgICAgIH0pKTsKLSAgICB9Ci19Ci0KLS8v
IFVJV2ViRm9ybUFjY2Vzc29yeURlbGVnYXRlCi0tICh2b2lkKWFjY2Vzc29yeURvbmUKLXsKLSAg
ICBbc2VsZiByZXNpZ25GaXJzdFJlc3BvbmRlcl07Ci19Ci0KLS0gKHZvaWQpYWNjZXNzb3J5VGFi
OihCT09MKWlzTmV4dAotewotfQotCi0tICh2b2lkKWFjY2Vzc29yeUF1dG9GaWxsCi17Ci19Ci0K
LS0gKHZvaWQpYWNjZXNzb3J5Q2xlYXIKLXsKLX0KLQotLSAodm9pZClfdXBkYXRlQWNjZXNzb3J5
Ci17Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB3aXRoIHZhbHVlcyBmcm9t
IHRoZSBXZWJQcm9jZXNzLgotICAgIF9hY2Nlc3NvcnkubmV4dEVuYWJsZWQgPSBZRVM7Ci0gICAg
X2FjY2Vzc29yeS5wcmV2aW91c0VuYWJsZWQgPSBZRVM7Ci0gICAgCi0gICAgW19hY2Nlc3Nvcnkg
c2V0Q2xlYXJWaXNpYmxlOk5PXTsKLQotICAgIC8vIEZJWE1FOiBoaWRlIG9yIHNob3cgdGhlIEF1
dG9GaWxsIGJ1dHRvbiBhcyBuZWVkZWQuCi19Ci0KLS8vIEtleWJvYXJkIGludGVyYWN0aW9uCi0v
LyBVSVRleHRJbnB1dCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgotCi0tIChOU1N0cmluZyAqKXRl
eHRJblJhbmdlOihVSVRleHRSYW5nZSAqKXJhbmdlCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQot
LSAodm9pZClyZXBsYWNlUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2Ugd2l0aFRleHQ6KE5TU3Ry
aW5nICopdGV4dAotewotfQotCi0tIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4dFJhbmdlCi17
Ci0gICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0UmFuZ2VXaXRoU3RhdGU6X3BhZ2UtPmVkaXRv
clN0YXRlKCkuc2VsZWN0aW9uSXNOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlzUmFuZ2U6X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0aW9uSXNSYW5nZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRhYmxlOl9wYWdlLT5lZGl0b3JTdGF0ZSgp
LmlzQ29udGVudEVkaXRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFy
dFJlY3Q6X3BhZ2UtPmVkaXRvclN0YXRlKCkuY2FyZXRSZWN0QXRTdGFydAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmRSZWN0Ol9wYWdlLT5lZGl0b3JTdGF0ZSgpLmNhcmV0
UmVjdEF0RW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdHM6W3Nl
bGYgd2ViU2VsZWN0aW9uUmVjdHNdCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRl
eHRMZW5ndGg6X3BhZ2UtPmVkaXRvclN0YXRlKCkuc2VsZWN0ZWRUZXh0TGVuZ3RoXTsKLX0KLQot
LSAoQ0dSZWN0KWNhcmV0UmVjdEZvclBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9u
Ci17Ci0gICAgcmV0dXJuICgoV0tUZXh0UG9zaXRpb24gKilwb3NpdGlvbikucG9zaXRpb25SZWN0
OwotfQotCi0tIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTooVUlUZXh0UmFuZ2Ug
KilyYW5nZQotewotICAgIHJldHVybiBbV0tUZXh0U2VsZWN0aW9uUmVjdCB0ZXh0U2VsZWN0aW9u
UmVjdHNXaXRoV2ViUmVjdHM6KChXS1RleHRSYW5nZSAqKXJhbmdlKS5zZWxlY3Rpb25SZWN0c107
Ci19Ci0KLS0gKHZvaWQpc2V0U2VsZWN0ZWRUZXh0UmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UK
LXsKLX0KLQotLSAoQk9PTCloYXNNYXJrZWRUZXh0Ci17Ci0gICAgcmV0dXJuIFtfbWFya2VkVGV4
dCBsZW5ndGhdOwotfQotCi0tIChOU1N0cmluZyAqKW1hcmtlZFRleHQKLXsKLSAgICByZXR1cm4g
X21hcmtlZFRleHQuZ2V0KCk7Ci19Ci0KLS0gKFVJVGV4dFJhbmdlICopbWFya2VkVGV4dFJhbmdl
Ci17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopbWFya2VkVGV4dFN0
eWxlCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClzZXRNYXJrZWRUZXh0U3R5bGU6
KE5TRGljdGlvbmFyeSAqKXN0eWxlRGljdGlvbmFyeQotewotfQotCi0tICh2b2lkKXNldE1hcmtl
ZFRleHQ6KE5TU3RyaW5nICopbWFya2VkVGV4dCBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKXNlbGVj
dGVkUmFuZ2UKLXsKLSAgICBfbWFya2VkVGV4dCA9IG1hcmtlZFRleHQ7Ci0gICAgX3BhZ2UtPnNl
dENvbXBvc2l0aW9uKG1hcmtlZFRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVy
bGluZT4oKSwgc2VsZWN0ZWRSYW5nZS5sb2NhdGlvbiwgc2VsZWN0ZWRSYW5nZS5sZW5ndGgsIDAs
IDApOwotfQotCi0tICh2b2lkKXVubWFya1RleHQKLXsKLSAgICBfbWFya2VkVGV4dCA9IG5pbDsK
LSAgICBfcGFnZS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7Ci19Ci0KLS0gKFVJVGV4dFBvc2l0aW9u
ICopYmVnaW5uaW5nT2ZEb2N1bWVudAotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKFVJVGV4
dFBvc2l0aW9uICopZW5kT2ZEb2N1bWVudAotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKFVJ
VGV4dFJhbmdlICopdGV4dFJhbmdlRnJvbVBvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKWZyb21Q
b3NpdGlvbiB0b1Bvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXRvUG9zaXRpb24KLXsKLSAgICBy
ZXR1cm4gbmlsOwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uRnJvbVBvc2l0aW9u
OihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uIG9mZnNldDooTlNJbnRlZ2VyKW9mZnNldAotewot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb25Gcm9tUG9z
aXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24gaW5EaXJlY3Rpb246KFVJVGV4dExheW91
dERpcmVjdGlvbilkaXJlY3Rpb24gb2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0Ci17Ci0gICAgcmV0
dXJuIG5pbDsKLX0KLQotLSAoTlNDb21wYXJpc29uUmVzdWx0KWNvbXBhcmVQb3NpdGlvbjooVUlU
ZXh0UG9zaXRpb24gKilwb3NpdGlvbiB0b1Bvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKW90aGVy
Ci17Ci0gICAgcmV0dXJuIE5TT3JkZXJlZFNhbWU7Ci19Ci0KLS0gKE5TSW50ZWdlcilvZmZzZXRG
cm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopZnJvbSB0b1Bvc2l0aW9uOihVSVRleHRQb3Np
dGlvbiAqKXRvUG9zaXRpb24KLXsKLSAgICByZXR1cm4gMDsKLX0KLQotLSAoaWQgPFVJVGV4dElu
cHV0VG9rZW5pemVyPil0b2tlbml6ZXIKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSVRl
eHRQb3NpdGlvbiAqKXBvc2l0aW9uV2l0aGluUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFuZ2UgZmFy
dGhlc3RJbkRpcmVjdGlvbjooVUlUZXh0TGF5b3V0RGlyZWN0aW9uKWRpcmVjdGlvbgotewotICAg
IHJldHVybiBuaWw7Ci19Ci0KLS0gKFVJVGV4dFJhbmdlICopY2hhcmFjdGVyUmFuZ2VCeUV4dGVu
ZGluZ1Bvc2l0aW9uOihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uIGluRGlyZWN0aW9uOihVSVRl
eHRMYXlvdXREaXJlY3Rpb24pZGlyZWN0aW9uCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
VUlUZXh0V3JpdGluZ0RpcmVjdGlvbiliYXNlV3JpdGluZ0RpcmVjdGlvbkZvclBvc2l0aW9uOihV
SVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uIGluRGlyZWN0aW9uOihVSVRleHRTdG9yYWdlRGlyZWN0
aW9uKWRpcmVjdGlvbgotewotICAgIHJldHVybiBVSVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRv
UmlnaHQ7Ci19Ci0KLS0gKHZvaWQpc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246KFVJVGV4dFdyaXRp
bmdEaXJlY3Rpb24pd3JpdGluZ0RpcmVjdGlvbiBmb3JSYW5nZTooVUlUZXh0UmFuZ2UgKilyYW5n
ZQotewotfQotCi0tIChDR1JlY3QpZmlyc3RSZWN0Rm9yUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFu
Z2UKLXsKLSAgICByZXR1cm4gQ0dSZWN0WmVybzsKLX0KLQotLyogSGl0IHRlc3RpbmcuICovCi0t
IChVSVRleHRQb3NpdGlvbiAqKWNsb3Nlc3RQb3NpdGlvblRvUG9pbnQ6KENHUG9pbnQpcG9pbnQK
LXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKWNsb3Nlc3RQb3Np
dGlvblRvUG9pbnQ6KENHUG9pbnQpcG9pbnQgd2l0aGluUmFuZ2U6KFVJVGV4dFJhbmdlICopcmFu
Z2UKLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChVSVRleHRSYW5nZSAqKWNoYXJhY3RlclJh
bmdlQXRQb2ludDooQ0dQb2ludClwb2ludAotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZv
aWQpZGVsZXRlQmFja3dhcmQKLXsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKEFTQ0lJ
TGl0ZXJhbCgiZGVsZXRlQmFja3dhcmQiKSk7Ci19Ci0KLS8vIEluc2VydHMgdGhlIGdpdmVuIHN0
cmluZywgcmVwbGFjaW5nIGFueSBzZWxlY3RlZCBvciBtYXJrZWQgdGV4dC4KLS0gKHZvaWQpaW5z
ZXJ0VGV4dDooTlNTdHJpbmcgKilhU3RyaW5nVmFsdWUKLXsKLSAgICBfcGFnZS0+aW5zZXJ0VGV4
dChhU3RyaW5nVmFsdWUsIE5TTm90Rm91bmQsIDApOwotfQotCi0tIChCT09MKWhhc1RleHQKLXsK
LSAgICByZXR1cm4gWUVTOwotfQotCi0vLyBlbmQgb2YgVUlUZXh0SW5wdXQgcHJvdG9jb2wgaW1w
bGVtZW50YXRpb24KLQotLy8gVUlUZXh0SW5wdXRQcml2YXRlIHByb3RvY29sCi0vLyBEaXJlY3Qg
YWNjZXNzIHRvIHRoZSAocHJpdmF0ZSkgVUlUZXh0SW5wdXRUcmFpdHMgb2JqZWN0LgotLSAoVUlU
ZXh0SW5wdXRUcmFpdHMgKil0ZXh0SW5wdXRUcmFpdHMKLXsKLSAgICBpZiAoIV90cmFpdHMpCi0g
ICAgICAgIF90cmFpdHMgPSBbW1VJVGV4dElucHV0VHJhaXRzIGFsbG9jXSBpbml0XTsKLSAgICBy
ZXR1cm4gX3RyYWl0czsKLX0KLQotLSAoVUlUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilpbnRl
cmFjdGlvbkFzc2lzdGFudAotewotICAgIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCB3aGVuIHdlJ3JlIGluIFVJV2ViU2VsZWN0aW9uTW9kZVRleHRPbmx5IGhvd2V2ZXIgaXQg
aXMKLSAgICAvLyBwb3NzaWJsZSB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgd2hpbGUgd2UgYXJlIHRy
YW5zaXRpb25pbmcgYmV0d2VlbiBtb2Rlcy4KLSAgICAvLyBhc3NlcnQoIV93ZWJTZWxlY3Rpb25B
c3Npc3RhbnQpOwotCi0gICAgaWYgKCFfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCkKLSAgICAgICAg
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgPSBbW1VJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQg
YWxsb2NdIGluaXRXaXRoVmlldzpzZWxmXTsKLQotICAgIHJldHVybiBfdGV4dFNlbGVjdGlvbkFz
c2lzdGFudC5nZXQoKTsKLX0KLQotLSAoVUlXZWJTZWxlY3Rpb25Bc3Npc3RhbnQgKil3ZWJTZWxl
Y3Rpb25Bc3Npc3RhbnQKLXsKLSAgICByZXR1cm4gX3dlYlNlbGVjdGlvbkFzc2lzdGFudC5nZXQo
KTsKLX0KLQotCi0vLyBOU1JhbmdlIHN1cHBvcnQuICBXb3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0
byB0aGUgZXh0ZW50IHBvc3NpYmxlLCBhbHRob3VnaCBzb21lIHN1cHBvcnQKLS8vIChpLmUuIHNl
bGVjdGlvblJhbmdlKSBoYXMgc2hpcHBlZCBhcyBBUEkuCi0tIChOU1JhbmdlKXNlbGVjdGlvblJh
bmdlCi17Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotfQotCi0tIChD
R1JlY3QpcmVjdEZvck5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKLXsKLSAgICByZXR1cm4gQ0dSZWN0
WmVybzsKLX0KLQotLSAoTlNSYW5nZSlfbWFya2VkVGV4dE5TUmFuZ2UKLXsKLSAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci19Ci0KLS8vIERPTSByYW5nZSBzdXBwb3J0Lgot
LSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCi17Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQot
LSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5RG93
bnN0cmVhbTooQk9PTClhZmZpbml0eURvd25zdHJlYW0KLXsKLX0KLQotLy8gTW9kaWZ5IHRleHQg
d2l0aG91dCBzdGFydGluZyBhIG5ldyB1bmRvIGdyb3VwaW5nLgotLSAodm9pZClyZXBsYWNlUmFu
Z2VXaXRoVGV4dFdpdGhvdXRDbG9zaW5nVHlwaW5nOihVSVRleHRSYW5nZSAqKXJhbmdlIHJlcGxh
Y2VtZW50VGV4dDooTlNTdHJpbmcgKil0ZXh0Ci17Ci19Ci0KLS8vIENhcmV0IHJlY3Qgc3VwcG9y
dC4gIFNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCBmaXJzdFJlY3RGb3JSYW5nZSBkb2Vzbid0
IG9mZmVyIHByZWNpc2VseQotLy8gdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KLS0gKENHUmVjdCly
ZWN0Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCi17Ci0gICAgcmV0dXJuIENHUmVjdFplcm87Ci19
Ci0KLS8vIFdlYiBldmVudHMuCi0tIChCT09MKXJlcXVpcmVzS2V5RXZlbnRzCi17Ci0gICAgcmV0
dXJuIFlFUzsKLX0KLQotLSAodm9pZCloYW5kbGVLZXlXZWJFdmVudDooV2ViSU9TRXZlbnQgKil0
aGVFdmVudAotewotICAgIF9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQodGhlRXZlbnQpKTsKLX0KLQotLSAoQk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KFdl
YklPU0V2ZW50ICopZXZlbnQgaXNDaGFyRXZlbnQ6KEJPT0wpaXNDaGFyRXZlbnQKLXsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQga1dlYkVudGVyS2V5ID0gMHgwMDAzOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBrV2ViQmFja3NwYWNlS2V5ID0gMHgwMDA4OwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBrV2ViUmV0dXJuS2V5ID0gMHgwMDBEOwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBrV2ViRGVsZXRlS2V5ID0gMHgwMDdGOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBr
V2ViTGVmdEFycm93S2V5ID0gMHgwMEFDOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrV2Vi
VXBBcnJvd0tleSA9IDB4MDBBRDsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQga1dlYlJpZ2h0
QXJyb3dLZXkgPSAweDAwQUU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJEb3duQXJy
b3dLZXkgPSAweDAwQUY7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGtXZWJEZWxldGVGb3J3
YXJkS2V5ID0gMHhGNzI4OwotCi0gICAgaWYgKCFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5pc0NvbnRl
bnRFZGl0YWJsZSAmJiBldmVudC5pc1RhYktleSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAg
Qk9PTCBzaGlmdCA9IGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBXZWJFdmVudEZsYWdNYXNrU2hpZnQ7
Ci0KLSAgICBzd2l0Y2ggKGV2ZW50LmNoYXJhY3RlclNldCkgewotICAgIGNhc2UgV2ViRXZlbnRD
aGFyYWN0ZXJTZXRTeW1ib2w6IHsKLSAgICAgICAgU3RyaW5nIGNvbW1hbmQ7Ci0gICAgICAgIE5T
U3RyaW5nICpjaGFyYWN0ZXJzID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107
Ci0gICAgICAgIGlmIChbY2hhcmFjdGVycyBsZW5ndGhdID09IDApCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgc3dpdGNoIChbY2hhcmFjdGVycyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7Ci0g
ICAgICAgIGNhc2Uga1dlYkxlZnRBcnJvd0tleToKLSAgICAgICAgICAgIGNvbW1hbmQgPSBzaGlm
dCA/IEFTQ0lJTGl0ZXJhbCgibW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24iKSA6ICBBU0NJSUxp
dGVyYWwoIm1vdmVMZWZ0Iik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGtX
ZWJVcEFycm93S2V5OgotICAgICAgICAgICAgY29tbWFuZCA9IHNoaWZ0ID8gQVNDSUlMaXRlcmFs
KCJtb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iKSA6ICBBU0NJSUxpdGVyYWwoIm1vdmVVcCIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrV2ViUmlnaHRBcnJvd0tleToKLSAg
ICAgICAgICAgIGNvbW1hbmQgPSBzaGlmdCA/IEFTQ0lJTGl0ZXJhbCgibW92ZVJpZ2h0QW5kTW9k
aWZ5U2VsZWN0aW9uIikgOiAgQVNDSUlMaXRlcmFsKCJtb3ZlUmlnaHQiKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2Uga1dlYkRvd25BcnJvd0tleToKLSAgICAgICAgICAgIGNv
bW1hbmQgPSBzaGlmdCA/IEFTQ0lJTGl0ZXJhbCgibW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24i
KSA6ICBBU0NJSUxpdGVyYWwoIm1vdmVEb3duIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWNvbW1hbmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBfcGFn
ZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmQpOwotICAgICAgICAgICAgcmV0dXJuIFlFUzsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJFdmVudENoYXJh
Y3RlclNldEFTQ0lJOgotICAgIGNhc2UgV2ViRXZlbnRDaGFyYWN0ZXJTZXRVbmljb2RlOiB7Ci0g
ICAgICAgIE5TU3RyaW5nICpjaGFyYWN0ZXJzID0gW2V2ZW50IGNoYXJhY3RlcnNdOwotICAgICAg
ICBpZiAoW2NoYXJhY3RlcnMgbGVuZ3RoXSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHN3aXRjaCAoW2NoYXJhY3RlcnMgY2hhcmFjdGVyQXRJbmRleDowXSkgewotICAgICAgICBj
YXNlIGtXZWJCYWNrc3BhY2VLZXk6Ci0gICAgICAgIGNhc2Uga1dlYkRlbGV0ZUtleToKLSAgICAg
ICAgICAgIFtbVUlLZXlib2FyZEltcGwgc2hhcmVkSW5zdGFuY2VdIGRlbGV0ZUZyb21JbnB1dF07
Ci0gICAgICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgICAgIGNhc2Uga1dlYkVudGVyS2V5Ogot
ICAgICAgICBjYXNlIGtXZWJSZXR1cm5LZXk6Ci0gICAgICAgICAgICBpZiAoaXNDaGFyRXZlbnQp
IHsKLSAgICAgICAgICAgICAgICAvLyBNYXAgXHIgZnJvbSBIVyBrZXlib2FyZCB0byBcbiB0byBt
YXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHNvZnQga2V5Ym9hcmQuCi0gICAgICAgICAgICAgICAg
W1tVSUtleWJvYXJkSW1wbCBzaGFyZWRJbnN0YW5jZV0gYWRkSW5wdXRTdHJpbmc6QCJcbiIgd2l0
aEZsYWdzOjBdOwotICAgICAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gTk87Ci0KLSAgICAgICAgY2FzZSBrV2ViRGVsZXRlRm9yd2FyZEtl
eToKLSAgICAgICAgICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoQVNDSUlMaXRlcmFsKCJk
ZWxldGVGb3J3YXJkIikpOwotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICBpZiAoaXNDaGFyRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBb
W1VJS2V5Ym9hcmRJbXBsIHNoYXJlZEluc3RhbmNlXSBhZGRJbnB1dFN0cmluZzpldmVudC5jaGFy
YWN0ZXJzIHdpdGhGbGFnczpldmVudC5rZXlib2FyZEZsYWdzXTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gWUVTOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAg
ICB9Ci0gICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIE5POwotICAgIH0KLQotICAgIHJldHVybiBOTzsKLX0KLQotLy8gU2V0cyBhIGJ1ZmZl
ciB0byBtYWtlIHJvb20gZm9yIGF1dG9jb3JyZWN0aW9uIHZpZXdzCi0tICh2b2lkKXNldEJvdHRv
bUJ1ZmZlckhlaWdodDooQ0dGbG9hdClib3R0b21CdWZmZXIKLXsKLX0KLQotLSAoVUlWaWV3ICop
YXV0b21hdGljYWxseVNlbGVjdGVkT3ZlcmxheQotewotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChVSVRleHRHcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQotewotICAgIHJldHVybiBV
SVRleHRHcmFudWxhcml0eUNoYXJhY3RlcjsKLX0KLQotLSAodm9pZClpbnNlcnREaWN0YXRpb25S
ZXN1bHQ6KE5TQXJyYXkgKilkaWN0YXRpb25SZXN1bHQgd2l0aENvcnJlY3Rpb25JZGVudGlmaWVy
OihpZCljb3JyZWN0aW9uSWRlbnRpZmllcgotewotfQotCi0vLyBTaG91bGQgcmV0dXJuIGFuIGFy
cmF5IG9mIE5TRGljdGlvbmFyeSBvYmplY3RzIHRoYXQga2V5L3ZhbHVlIHBhcmllcyBmb3IgdGhl
IGZpbmFsIHRleHQsIGNvcnJlY3Rpb24gaWRlbnRpZmllciBhbmQKLS8vIGFsdGVybmF0aXZlIHNl
bGVjdGlvbiBjb3VudHMgdXNpbmcgdGhlIGtleXMgZGVmaW5lZCBhdCB0aGUgdG9wIG9mIHRoaXMg
aGVhZGVyLgotLSAoTlNBcnJheSAqKW1ldGFkYXRhRGljdGlvbmFyaWVzRm9yRGljdGF0aW9uUmVz
dWx0cwotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS8vIFJldHVybnMgdGhlIGRpY3RhdGlvbiBy
ZXN1bHQgYm91bmRhcmllcyBmcm9tIHBvc2l0aW9uIHNvIHRoYXQgdGV4dCB0aGF0IHdhcyBub3Qg
ZGljdGF0ZWQgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gbG9nZ2luZy4KLS8vIElmIHRoZXNlIGFyZSBu
b3QgaW1wbGVtZW50ZWQsIG5vIHRleHQgd2lsbCBiZSBsb2dnZWQuCi0tIChVSVRleHRQb3NpdGlv
biAqKXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlv
bjooVUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbgotewotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0g
KFVJVGV4dFBvc2l0aW9uICopbmV4dFVucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlG
cm9tUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24KLXsKLSAgICByZXR1cm4gbmls
OwotfQotCi0vLyBUaGUgY2FuIGFsbCBiZSAoYW5kIGhhdmUgYmVlbikgdHJpdmlhbGx5IGltcGxl
bWVudGVkIGluIHRlcm1zIG9mIFVJVGV4dElucHV0LiAgRGVwcmVjYXRlIGFuZCByZW1vdmUuCi0t
ICh2b2lkKW1vdmVCYWNrd2FyZDoodW5zaWduZWQpY291bnQKLXsKLX0KLQotLSAodm9pZCltb3Zl
Rm9yd2FyZDoodW5zaWduZWQpY291bnQKLXsKLX0KLQotLSAodW5pY2hhciljaGFyYWN0ZXJCZWZv
cmVDYXJldFNlbGVjdGlvbgotewotICAgIHJldHVybiAwOwotfQotCi0tIChOU1N0cmluZyAqKXdv
cmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KLXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChE
T01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgotewotICAgIHJldHVy
biBuaWw7Ci19Ci0KLS0gKHZvaWQpc2V0TWFya2VkVGV4dDooTlNTdHJpbmcgKil0ZXh0Ci17Ci19
Ci0KLS0gKEJPT0wpaGFzQ29udGVudAotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHZvaWQp
c2VsZWN0QWxsCi17Ci19Ci0KLS0gKFVJQ29sb3IgKil0ZXh0Q29sb3JGb3JDYXJldFNlbGVjdGlv
bgotewotICAgIHJldHVybiBbVUlDb2xvciBibGFja0NvbG9yXTsKLX0KLQotLSAoVUlGb250ICop
Zm9udEZvckNhcmV0U2VsZWN0aW9uCi17Ci0gICAgQ0dGbG9hdCB6b29tU2NhbGUgPSAxLjA7ICAg
IC8vIEZJWE1FOiByZXRyaWV2ZSB0aGUgYWN0dWFsIGRvY3VtZW50IHNjYWxlIGZhY3Rvci4KLSAg
ICBDR0Zsb2F0IHNjYWxlZFNpemUgPSBfYXV0b2NvcnJlY3Rpb25EYXRhLmZvbnRTaXplOwotICAg
IGlmIChDR0ZBYnMoem9vbVNjYWxlIC0gMS4wKSA+IEZMVF9FUFNJTE9OKQotICAgICAgICBzY2Fs
ZWRTaXplICo9IHpvb21TY2FsZTsKLSAgICByZXR1cm4gW1VJRm9udCBmb250V2l0aEZhbWlseU5h
bWU6X2F1dG9jb3JyZWN0aW9uRGF0YS5mb250TmFtZSB0cmFpdHM6KFVJRm9udFRyYWl0KV9hdXRv
Y29ycmVjdGlvbkRhdGEuZm9udFRyYWl0cyBzaXplOnNjYWxlZFNpemVdOwotfQotCi0tIChCT09M
KWhhc1NlbGVjdGlvbgotewotICAgIHJldHVybiBOTzsKLX0KLQotLSAoQk9PTClpc1Bvc2l0aW9u
OihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uIGF0Qm91bmRhcnk6KFVJVGV4dEdyYW51bGFyaXR5
KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uOihVSVRleHREaXJlY3Rpb24pZGlyZWN0aW9uCi17Ci0g
ICAgcmV0dXJuIE5POwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uRnJvbVBvc2l0
aW9uOihVSVRleHRQb3NpdGlvbiAqKXBvc2l0aW9uIHRvQm91bmRhcnk6KFVJVGV4dEdyYW51bGFy
aXR5KWdyYW51bGFyaXR5IGluRGlyZWN0aW9uOihVSVRleHREaXJlY3Rpb24pZGlyZWN0aW9uCi17
Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoQk9PTClpc1Bvc2l0aW9uOihVSVRleHRQb3NpdGlv
biAqKXBvc2l0aW9uIHdpdGhpblRleHRVbml0OihVSVRleHRHcmFudWxhcml0eSlncmFudWxhcml0
eSBpbkRpcmVjdGlvbjooVUlUZXh0RGlyZWN0aW9uKWRpcmVjdGlvbgotewotICAgIHJldHVybiBO
TzsKLX0KLQotLSAoVUlUZXh0UmFuZ2UgKilyYW5nZUVuY2xvc2luZ1Bvc2l0aW9uOihVSVRleHRQ
b3NpdGlvbiAqKXBvc2l0aW9uIHdpdGhHcmFudWxhcml0eTooVUlUZXh0R3JhbnVsYXJpdHkpZ3Jh
bnVsYXJpdHkgaW5EaXJlY3Rpb246KFVJVGV4dERpcmVjdGlvbilkaXJlY3Rpb24KLXsKLSAgICBy
ZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKXRha2VUcmFpdHNGcm9tOihVSVRleHRJbnB1dFRyYWl0
cyAqKXRyYWl0cwotewotICAgIFtbc2VsZiB0ZXh0SW5wdXRUcmFpdHNdIHRha2VUcmFpdHNGcm9t
OnRyYWl0c107Ci19Ci0KLS8vIEZJWE1FOiBJIHdhbnQgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRo
ZXNlIGZ1bmN0aW9ucywgYnV0IEknbSBsZWF2aW5nIGl0IGZvciBub3cKLS8vIHRvIG1ha2UgaXQg
ZWFzaWVyIHRvIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zIGluIFVJS2l0Lgot
Ci0tICh2b2lkKV9zdGFydEFzc2lzdGluZ0tleWJvYXJkCi17Ci0gICAgW3NlbGYgdXNlU2VsZWN0
aW9uQXNzaXN0YW50V2l0aE1vZGU6VUlXZWJTZWxlY3Rpb25Nb2RlVGV4dE9ubHldOwotfQotCi0t
ICh2b2lkKV9zdG9wQXNzaXN0aW5nS2V5Ym9hcmQKLXsKLSAgICBbc2VsZiB1c2VTZWxlY3Rpb25B
c3Npc3RhbnRXaXRoTW9kZTpVSVdlYlNlbGVjdGlvbk1vZGVXZWJdOwotfQotCi0tICh2b2lkKV9z
dGFydEFzc2lzdGluZ05vZGUKLXsKLSAgICBfaXNFZGl0YWJsZSA9IFlFUzsKLSAgICBpZiAoIVtz
ZWxmIGlzRmlyc3RSZXNwb25kZXJdKQotICAgICAgICBbc2VsZiBiZWNvbWVGaXJzdFJlc3BvbmRl
cl07Ci0KLSAgICBbc2VsZiBfc3RhcnRBc3Npc3RpbmdLZXlib2FyZF07Ci0gICAgW3NlbGYgcmVs
b2FkSW5wdXRWaWV3c107Ci0gICAgW3NlbGYgX3VwZGF0ZUFjY2Vzc29yeV07Ci19Ci0KLS0gKHZv
aWQpX3N0b3BBc3Npc3RpbmdOb2RlCi17Ci0gICAgX2lzRWRpdGFibGUgPSBOTzsKLQotICAgIFtz
ZWxmIF9zdG9wQXNzaXN0aW5nS2V5Ym9hcmRdOwotICAgIFtzZWxmIHJlbG9hZElucHV0Vmlld3Nd
OwotICAgIFtzZWxmIF91cGRhdGVBY2Nlc3NvcnldOwotfQotCi0tICh2b2lkKV9zZWxlY3Rpb25D
aGFuZ2VkCi17Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRv
IGlmIHRoZSBzZWxlY3Rpb24gaXMgY2hhbmdlZCBieSBKYXZhc2NyaXB0LgotICAgIGlmIChfdGV4
dFNlbGVjdGlvbkFzc2lzdGFudCkgewotICAgICAgICBfbWFya2VkVGV4dCA9IChfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbikgPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5tYXJrZWRU
ZXh0IDogU3RyaW5nKCk7Ci0gICAgICAgIGlmICghX3Nob3dpbmdUZXh0U3R5bGVPcHRpb25zKQot
ICAgICAgICAgICAgW190ZXh0U2VsZWN0aW9uQXNzaXN0YW50IHNlbGVjdGlvbkNoYW5nZWRdOwot
ICAgIH0gZWxzZQotICAgICAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBzZWxlY3Rpb25DaGFu
Z2VkXTsKLX0KLQotI3ByYWdtYSBtYXJrIC0gSW1wbGVtZW50YXRpb24gb2YgVUlXZWJUb3VjaEV2
ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUuCi0KLS0gKEJPT0wpc2hvdWxkSWdub3JlV2Vi
VG91Y2gKLXsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wpaXNBbnlUb3VjaE92ZXJBY3Rp
dmVBcmVhOihOU1NldCAqKXRvdWNoZXMKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi1AZW5kCi0K
LS8vIFVJVGV4dFJhbmdlLCBVSVRleHRQb3NpdGlvbiBhbmQgVUlUZXh0U2VsZWN0aW9uUmVjdCBp
bXBsZW1lbnRhdGlvbnMgZm9yIFdLMgotCi1AaW1wbGVtZW50YXRpb24gV0tUZXh0UmFuZ2UgKFVJ
VGV4dElucHV0QWRkaXRpb25zKQotCi0tIChCT09MKV9pc0NhcmV0Ci17Ci0gICAgcmV0dXJuIHNl
bGYuZW1wdHk7Ci19Ci0KLS0gKEJPT0wpX2lzUmFuZ2VkCi17Ci0gICAgcmV0dXJuICFzZWxmLmVt
cHR5OwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXS1RleHRSYW5nZQotCi0rKFdLVGV4
dFJhbmdlICopdGV4dFJhbmdlV2l0aFN0YXRlOihCT09MKWlzTm9uZSBpc1JhbmdlOihCT09MKWlz
UmFuZ2UgaXNFZGl0YWJsZTooQk9PTClpc0VkaXRhYmxlIHN0YXJ0UmVjdDooQ0dSZWN0KXN0YXJ0
UmVjdCBlbmRSZWN0OihDR1JlY3QpZW5kUmVjdCBzZWxlY3Rpb25SZWN0czooTlNBcnJheSAqKXNl
bGVjdGlvblJlY3RzIHNlbGVjdGVkVGV4dExlbmd0aDooTlNVSW50ZWdlcilzZWxlY3RlZFRleHRM
ZW5ndGgKLXsKLSAgICBXS1RleHRSYW5nZSAqcmFuZ2UgPSBbW1dLVGV4dFJhbmdlIGFsbG9jXSBp
bml0XTsKLSAgICByYW5nZS5pc05vbmUgPSBpc05vbmU7Ci0gICAgcmFuZ2UuaXNSYW5nZSA9IGlz
UmFuZ2U7Ci0gICAgcmFuZ2UuaXNFZGl0YWJsZSA9IGlzRWRpdGFibGU7Ci0gICAgcmFuZ2Uuc3Rh
cnRSZWN0ID0gc3RhcnRSZWN0OwotICAgIHJhbmdlLmVuZFJlY3QgPSBlbmRSZWN0OwotICAgIHJh
bmdlLnNlbGVjdGVkVGV4dExlbmd0aCA9IHNlbGVjdGVkVGV4dExlbmd0aDsKLSAgICByYW5nZS5z
ZWxlY3Rpb25SZWN0cyA9IHNlbGVjdGlvblJlY3RzOwotICAgIHJldHVybiBbcmFuZ2UgYXV0b3Jl
bGVhc2VdOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc2VsZi5zZWxlY3Rpb25SZWN0
cyByZWxlYXNlXTsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKE5TU3RyaW5nICopZGVz
Y3JpcHRpb24KLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCgl
cCkgLSBzdGFydDolQCwgZW5kOiVAIiwgW3NlbGYgY2xhc3NdLCBzZWxmLCBOU1N0cmluZ0Zyb21D
R1JlY3Qoc2VsZi5zdGFydFJlY3QpLCBOU1N0cmluZ0Zyb21DR1JlY3Qoc2VsZi5lbmRSZWN0KV07
Ci19Ci0KLS0gKFdLVGV4dFBvc2l0aW9uICopc3RhcnQKLXsKLSAgICBXS1RleHRQb3NpdGlvbiAq
cG9zID0gW1dLVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbldpdGhSZWN0OnNlbGYuc3RhcnRSZWN0
XTsKLSAgICByZXR1cm4gcG9zOwotfQotCi0tIChVSVRleHRQb3NpdGlvbiAqKWVuZAotewotICAg
IFdLVGV4dFBvc2l0aW9uICpwb3MgPSBbV0tUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uV2l0aFJl
Y3Q6c2VsZi5lbmRSZWN0XTsKLSAgICByZXR1cm4gcG9zOwotfQotCi0tIChCT09MKWlzRW1wdHkK
LXsKLSAgICByZXR1cm4gIXNlbGYuaXNSYW5nZTsKLX0KLQotLy8gRklYTUU6IE92ZXJyaWRpbmcg
aXNFcXVhbDogd2l0aG91dCBvdmVycmlkaW5nIGhhc2ggd2lsbCBjYXVzZSB0cm91YmxlIGlmIHRo
aXMgZXZlciBnb2VzIGludG8gYW4gTlNTZXQgb3IgaXMgdGhlIGtleSBpbiBhbiBOU0RpY3Rpb25h
cnksCi0vLyBzaW5jZSB0d28gZXF1YWwgaXRlbXMgY291bGQgaGF2ZSBkaWZmZXJlbnQgaGFzaGVz
LgotLSAoQk9PTClpc0VxdWFsOihpZClvdGhlcgotewotICAgIGlmICghW290aGVyIGlzS2luZE9m
Q2xhc3M6W1dLVGV4dFJhbmdlIGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIFdL
VGV4dFJhbmdlICpvdGhlclJhbmdlID0gKFdLVGV4dFJhbmdlICopb3RoZXI7Ci0KLSAgICBpZiAo
c2VsZiA9PSBvdGhlcikKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIC8vIEZJWE1FOiBQcm9i
YWJseSBpbmNvcnJlY3QgZm9yIGVxdWFsaXR5IHRvIGlnbm9yZSBzbyBtdWNoIG9mIHRoZSBvYmpl
Y3Qgc3RhdGUuCi0gICAgLy8gSXQgaWdub3JlcyBpc05vbmUsIGlzRWRpdGFibGUsIHNlbGVjdGVk
VGV4dExlbmd0aCwgYW5kIHNlbGVjdGlvblJlY3RzLgotCi0gICAgaWYgKHNlbGYuaXNSYW5nZSkg
ewotICAgICAgICBpZiAoIW90aGVyUmFuZ2UuaXNSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBO
TzsKLSAgICAgICAgcmV0dXJuIENHUmVjdEVxdWFsVG9SZWN0KHNlbGYuc3RhcnRSZWN0LCBvdGhl
clJhbmdlLnN0YXJ0UmVjdCkgJiYgQ0dSZWN0RXF1YWxUb1JlY3Qoc2VsZi5lbmRSZWN0LCBvdGhl
clJhbmdlLmVuZFJlY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChvdGhlclJhbmdlLmlz
UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBu
ZWVkIHRvIGNoZWNrIGlzTm9uZSBoZXJlPwotICAgICAgICByZXR1cm4gQ0dSZWN0RXF1YWxUb1Jl
Y3Qoc2VsZi5zdGFydFJlY3QsIG90aGVyUmFuZ2Uuc3RhcnRSZWN0KTsKLSAgICB9Ci19Ci0KLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIFdLVGV4dFBvc2l0aW9uCi0KLUBzeW50aGVzaXplIHBvc2l0
aW9uUmVjdCA9IF9wb3NpdGlvblJlY3Q7Ci0KLSsgKFdLVGV4dFBvc2l0aW9uICopdGV4dFBvc2l0
aW9uV2l0aFJlY3Q6KENHUmVjdClwb3NpdGlvblJlY3QKLXsKLSAgICBXS1RleHRQb3NpdGlvbiAq
cG9zID1bW1dLVGV4dFBvc2l0aW9uIGFsbG9jXSBpbml0XTsKLSAgICBwb3MucG9zaXRpb25SZWN0
ID0gcG9zaXRpb25SZWN0OwotICAgIHJldHVybiBbcG9zIGF1dG9yZWxlYXNlXTsKLX0KLQotLy8g
RklYTUU6IE92ZXJyaWRpbmcgaXNFcXVhbDogd2l0aG91dCBvdmVycmlkaW5nIGhhc2ggd2lsbCBj
YXVzZSB0cm91YmxlIGlmIHRoaXMgZXZlciBnb2VzIGludG8gYSBOU1NldCBvciBpcyB0aGUga2V5
IGluIGFuIE5TRGljdGlvbmFyeSwKLS8vIHNpbmNlIHR3byBlcXVhbCBpdGVtcyBjb3VsZCBoYXZl
IGRpZmZlcmVudCBoYXNoZXMuCi0tIChCT09MKWlzRXF1YWw6KGlkKW90aGVyCi17Ci0gICAgaWYg
KCFbb3RoZXIgaXNLaW5kT2ZDbGFzczpbV0tUZXh0UG9zaXRpb24gY2xhc3NdXSkKLSAgICAgICAg
cmV0dXJuIE5POwotCi0gICAgcmV0dXJuIENHUmVjdEVxdWFsVG9SZWN0KHNlbGYucG9zaXRpb25S
ZWN0LCAoKFdLVGV4dFBvc2l0aW9uICopb3RoZXIpLnBvc2l0aW9uUmVjdCk7Ci19Ci0KLS0gKE5T
U3RyaW5nICopZGVzY3JpcHRpb24KLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCI8V0tUZXh0UG9zaXRpb246ICVwLCB7JUB9PiIsIHNlbGYsIE5TU3RyaW5nRnJvbUNH
UmVjdChzZWxmLnBvc2l0aW9uUmVjdCldOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
S1RleHRTZWxlY3Rpb25SZWN0Ci0KLS0gKGlkKWluaXRXaXRoV2ViUmVjdDooV2ViU2VsZWN0aW9u
UmVjdCAqKXdSZWN0Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoc2VsZikK
LSAgICAgICAgc2VsZi53ZWJSZWN0ID0gd1JlY3Q7Ci0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClkZWFsbG9jCi17Ci0gICAgc2VsZi53ZWJSZWN0ID0gbmlsOwotICAgIFtzdXBlciBk
ZWFsbG9jXTsKLX0KLQotLy8gRklYTUU6IHdlIGFyZSB1c2luZyB0aGlzIGltcGxlbWVudGF0aW9u
IGZvciBub3cKLS8vIHRoYXQgdXNlcyBXZWJTZWxlY3Rpb25SZWN0LCBidXQgd2Ugd2FudCB0byBw
cm92aWRlIG91ciBvd24KLS8vIGJhc2VkIG9uIFdlYkNvcmU6OlNlbGVjdGlvblJlY3QuCi0KLSsg
KE5TQXJyYXkgKil0ZXh0U2VsZWN0aW9uUmVjdHNXaXRoV2ViUmVjdHM6KE5TQXJyYXkgKil3ZWJS
ZWN0cwotewotICAgIE5TTXV0YWJsZUFycmF5ICphcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTp3ZWJSZWN0cy5jb3VudF07Ci0gICAgZm9yIChXZWJTZWxlY3Rpb25SZWN0
ICp3ZWJSZWN0IGluIHdlYlJlY3RzKSB7Ci0gICAgICAgIFJldGFpblB0cjxXS1RleHRTZWxlY3Rp
b25SZWN0PiByZWN0ID0gYWRvcHROUyhbW1dLVGV4dFNlbGVjdGlvblJlY3QgYWxsb2NdIGluaXRX
aXRoV2ViUmVjdDp3ZWJSZWN0XSk7Ci0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6cmVjdC5nZXQo
KV07Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotLSAoQ0dSZWN0KXJlY3QKLXsKLSAg
ICByZXR1cm4gX3dlYlJlY3QucmVjdDsKLX0KLQotLSAoVUlUZXh0V3JpdGluZ0RpcmVjdGlvbil3
cml0aW5nRGlyZWN0aW9uCi17Ci0gICAgcmV0dXJuIChVSVRleHRXcml0aW5nRGlyZWN0aW9uKV93
ZWJSZWN0LndyaXRpbmdEaXJlY3Rpb247Ci19Ci0KLS0gKFVJVGV4dFJhbmdlICopcmFuZ2UKLXsK
LSAgICByZXR1cm4gbmlsOwotfQotCi0tIChCT09MKWNvbnRhaW5zU3RhcnQKLXsKLSAgICByZXR1
cm4gX3dlYlJlY3QuY29udGFpbnNTdGFydDsKLX0KLQotLSAoQk9PTCljb250YWluc0VuZAotewot
ICAgIHJldHVybiBfd2ViUmVjdC5jb250YWluc0VuZDsKLX0KLQotLSAoQk9PTClpc1ZlcnRpY2Fs
Ci17Ci0gICAgcmV0dXJuICFfd2ViUmVjdC5pc0hvcml6b250YWw7Ci19Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdLQXV0b2NvcnJlY3Rpb25SZWN0cwotCi0rIChXS0F1dG9jb3JyZWN0aW9u
UmVjdHMgKilhdXRvY29ycmVjdGlvblJlY3RzV2l0aFJlY3RzOihDR1JlY3QpZmlyc3RSZWN0IGxh
c3RSZWN0OihDR1JlY3QpbGFzdFJlY3QKLXsKLSAgICBXS0F1dG9jb3JyZWN0aW9uUmVjdHMgKnJl
Y3RzID1bW1dLQXV0b2NvcnJlY3Rpb25SZWN0cyBhbGxvY10gaW5pdF07Ci0gICAgcmVjdHMuZmly
c3RSZWN0ID0gZmlyc3RSZWN0OwotICAgIHJlY3RzLmxhc3RSZWN0ID0gbGFzdFJlY3Q7Ci0gICAg
cmV0dXJuIFtyZWN0cyBhdXRvcmVsZWFzZV07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IFdLQXV0b2NvcnJlY3Rpb25Db250ZXh0Ci0KLSsgKFdLQXV0b2NvcnJlY3Rpb25Db250ZXh0ICop
YXV0b2NvcnJlY3Rpb25Db250ZXh0V2l0aERhdGE6KE5TU3RyaW5nICopYmVmb3JlVGV4dCBtYXJr
ZWRUZXh0OihOU1N0cmluZyAqKW1hcmtlZFRleHQgc2VsZWN0ZWRUZXh0OihOU1N0cmluZyAqKXNl
bGVjdGVkVGV4dCBhZnRlclRleHQ6KE5TU3RyaW5nICopYWZ0ZXJUZXh0IHNlbGVjdGVkUmFuZ2VJ
bk1hcmtlZFRleHQ6KE5TUmFuZ2UpcmFuZ2UKLXsKLSAgICBXS0F1dG9jb3JyZWN0aW9uQ29udGV4
dCAqY29udGV4dCA9IFtbV0tBdXRvY29ycmVjdGlvbkNvbnRleHQgYWxsb2NdIGluaXRdOwotCi0g
ICAgaWYgKFtiZWZvcmVUZXh0IGxlbmd0aF0pCi0gICAgICAgIGNvbnRleHQuY29udGV4dEJlZm9y
ZVNlbGVjdGlvbiA9IFtiZWZvcmVUZXh0IGNvcHldOwotICAgIGlmIChbc2VsZWN0ZWRUZXh0IGxl
bmd0aF0pCi0gICAgICAgIGNvbnRleHQuc2VsZWN0ZWRUZXh0ID0gW3NlbGVjdGVkVGV4dCBjb3B5
XTsKLSAgICBpZiAoW21hcmtlZFRleHQgbGVuZ3RoXSkKLSAgICAgICAgY29udGV4dC5tYXJrZWRU
ZXh0ID0gW21hcmtlZFRleHQgY29weV07Ci0gICAgaWYgKFthZnRlclRleHQgbGVuZ3RoXSkKLSAg
ICAgICAgY29udGV4dC5jb250ZXh0QWZ0ZXJTZWxlY3Rpb24gPSBbYWZ0ZXJUZXh0IGNvcHldOwot
ICAgIGNvbnRleHQucmFuZ2VJbk1hcmtlZFRleHQgPSByYW5nZTsKLSAgICByZXR1cm4gW2NvbnRl
eHQgYXV0b3JlbGVhc2VdOwotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbc2VsZi5jb250
ZXh0QmVmb3JlU2VsZWN0aW9uIHJlbGVhc2VdOwotICAgIFtzZWxmLm1hcmtlZFRleHQgcmVsZWFz
ZV07Ci0gICAgW3NlbGYuc2VsZWN0ZWRUZXh0IHJlbGVhc2VdOwotICAgIFtzZWxmLmNvbnRleHRB
ZnRlclNlbGVjdGlvbiByZWxlYXNlXTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotQGVu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDM4MmI2NjI0YzZjOWMyMzUwNDk0ZjI2MGIxYzU4NzJiODUwNTAwN2MuLjkyOGNmNWY1
YWM3MDJiY2NiYTFkNTMyOTQzNmJkYTVlNDZiYTJmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcyLDEyICs3Miw5IEBACiAJ
CTBGQ0I0RTRCMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0QXNzaXN0YW50Lm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQjRFM0IxOEJC
RTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW0gKi87IH07CiAJCTBGQ0I0
RTRDMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzQzE4QkJFMDQ0MDAwRkNGQzkgLyog
V0tDb250ZW50Vmlldy5oICovOyB9OwogCQkwRkNCNEU0RDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tD
b250ZW50Vmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQ0I0RTNEMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3Lm1tICovOyB9Owot
CQkwRkNCNEU0RTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmlld0ludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEUzRTE4QkJF
MDQ0MDAwRkNGQzkgLyogV0tDb250ZW50Vmlld0ludGVybmFsLmggKi87IH07CiAJCTBGQ0I0RTRG
MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTNGMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAqLzsgfTsKIAkJMEZDQjRFNTAxOEJC
RTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQwMThCQkUwNDQwMDBGQ0ZD
OSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0gKi87IH07CiAJCTBGQ0I0RTUxMThCQkUw
NDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0
MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5
T3JpZ2luLm1tICovOyB9OwotCQkwRkNCNEU1MjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFj
dGlvblZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQ0I0RTQyMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0ludGVyYWN0aW9uVmlldy5oICovOyB9Owot
CQkwRkNCNEU1MzE4QkJFMDQ0MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU0MzE4QkJFMDQ0
MDAwRkNGQzkgLyogV0tJbnRlcmFjdGlvblZpZXcubW0gKi87IH07CiAJCTBGQ0I0RTU0MThCQkUw
NDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQ0MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZp
ZXcuaCAqLzsgfTsKIAkJMEZDQjRFNTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTQ1
MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0gKi87IH07CiAJCTBGQ0I0RTYwMThC
QkUzRDkwMDBGQ0ZDOSAvKiBGaW5kSW5kaWNhdG9yV2luZG93LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1NjE4QkJFM0Q5MDAwRkNGQzkgLyog
RmluZEluZGljYXRvcldpbmRvdy5oICovOyB9OwpAQCAtODgsNiArODUsOCBAQAogCQkwRkNCNEU2
NzE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNEU1RDE4QkJFM0Q5MDAwRkNGQzkgLyog
V0tQcmludGluZ1ZpZXcubW0gKi87IH07CiAJCTBGQ0I0RTY4MThCQkUzRDkwMDBGQ0ZDOSAvKiBX
S1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTVFMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1RleHRJbnB1
dFdpbmRvd0NvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMEZDQjRFNjkxOEJCRTNEOTAwMEZDRkM5IC8q
IFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTVGMThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1RleHRJ
bnB1dFdpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07CisJCTBGQ0I0RTZDMThCQkYyNkEwMDBGQ0ZD
OSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTZBMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24uaCAqLzsgfTsKKwkJMEZDQjRFNkQxOEJCRjI2QTAwMEZDRkM5IC8q
IFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0RTZCMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0gKi87IH07CiAJCTBGRjI0QTJEMTg3OUU0QkMwMDNBQkYwQyAvKiBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjI0QTJCMTg3OUU0QkMw
MDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLzsgfTsKIAkJMEZGMjRBMkUxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGMjRBMkMxODc5RTRCQzAwM0FCRjBDIC8qIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oICovOyB9OwogCQkxQTA0Mzk3NjEyNEQwMzQ4
MDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwNDM5NzQxMjREMDM0ODAwRkZCRkI1IC8qIFBsdWdpblByb2Nl
c3MuaCAqLzsgfTsKQEAgLTE3MzYsMTIgKzE3MzUsOSBAQAogCQkwRkNCNEUzQjE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFdLQWN0aW9uU2hlZXRBc3Npc3RhbnQubW07IHBhdGggPSBpb3Mv
V0tBY3Rpb25TaGVldEFzc2lzdGFudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDQjRFM0MxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV0tDb250ZW50Vmlldy5oOyBwYXRoID0gaW9zL1dLQ29udGVu
dFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFM0QxOEJCRTA0NDAw
MEZDRkM5IC8qIFdLQ29udGVudFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS0NvbnRlbnRWaWV3Lm1tOyBwYXRoID0gaW9zL1dLQ29udGVudFZpZXcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0I0RTNFMThCQkUwNDQwMDBGQ0ZDOSAv
KiBXS0NvbnRlbnRWaWV3SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV0tDb250ZW50Vmlld0ludGVybmFsLmg7IHBhdGggPSBpb3MvV0tDb250ZW50Vmlld0ludGVy
bmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTNGMThCQkUwNDQwMDBG
Q0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmg7IHBhdGggPSBpb3MvV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0
RTQwMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJ
T1MubW07IHBhdGggPSBpb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkNCNEU0MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2Nh
dGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TT2JqQ1NlY3VyaXR5
T3JpZ2luLm1tOyBwYXRoID0gaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0
eU9yaWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDQjRFNDIxOEJCRTA0
NDAwMEZDRkM5IC8qIFdLSW50ZXJhY3Rpb25WaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLSW50ZXJhY3Rpb25WaWV3Lmg7IHBhdGggPSBpb3MvV0tJbnRlcmFjdGlvblZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDQjRFNDMxOEJCRTA0NDAwMEZD
RkM5IC8qIFdLSW50ZXJhY3Rpb25WaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tJbnRlcmFjdGlvblZpZXcubW07IHBhdGggPSBpb3MvV0tJbnRlcmFjdGlv
blZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTQ0MThCQkUwNDQw
MDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV0tTY3JvbGxWaWV3Lmg7IHBhdGggPSBpb3MvV0tTY3JvbGxWaWV3Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQ0I0RTQ1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZp
ZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1Njcm9sbFZp
ZXcubW07IHBhdGggPSBpb3MvV0tTY3JvbGxWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkNCNEU1NjE4QkJFM0Q5MDAwRkNGQzkgLyogRmluZEluZGljYXRvcldpbmRvdy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaW5kSW5kaWNhdG9yV2luZG93Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzUyLDYgKzE3NDgsOCBAQAogCQkwRkNC
NEU1RDE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1ByaW50aW5nVmlldy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjRFNUUxOEJCRTNEOTAwMEZDRkM5IC8qIFdLVGV4dElucHV0
V2luZG93Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1Rl
eHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDQjRFNUYxOEJCRTNEOTAwMEZDRkM5IC8qIFdLVGV4dElucHV0V2luZG93Q29udHJvbGxlci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLVGV4dElucHV0V2lu
ZG93Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDQjRFNkEx
OEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDsgcGF0aCA9
IGlvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZDQjRFNkIxOEJCRjI2QTAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbTsgcGF0aCA9IGlvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjI0QTJCMTg3OUU0QkMwMDNBQkYwQyAv
KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkYyNEEyQzE4NzlFNEJDMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkYyNEEyRjE4NzlFNEZFMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI2MSwxMiAr
NDI1OSwxMSBAQAogCQkJCTBGQ0I0RTNCMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0
QXNzaXN0YW50Lm1tICovLAogCQkJCTBGQ0I0RTNDMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0NvbnRl
bnRWaWV3LmggKi8sCiAJCQkJMEZDQjRFM0QxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZp
ZXcubW0gKi8sCi0JCQkJMEZDQjRFM0UxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZpZXdJ
bnRlcm5hbC5oICovLAorCQkJCTBGQ0I0RTZBMThCQkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24uaCAqLywKKwkJCQkwRkNCNEU2QjE4QkJGMjZBMDAwRkNGQzkgLyogV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tICovLAogCQkJCTBGQ0I0RTNGMThCQkUwNDQwMDBGQ0ZD
OSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCAqLywKIAkJCQkwRkNCNEU0MDE4QkJFMDQ0
MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tICovLAogCQkJCTBGQ0I0RTQx
MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlP
cmlnaW4ubW0gKi8sCi0JCQkJMEZDQjRFNDIxOEJCRTA0NDAwMEZDRkM5IC8qIFdLSW50ZXJhY3Rp
b25WaWV3LmggKi8sCi0JCQkJMEZDQjRFNDMxOEJCRTA0NDAwMEZDRkM5IC8qIFdLSW50ZXJhY3Rp
b25WaWV3Lm1tICovLAogCQkJCTBGQ0I0RTQ0MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZp
ZXcuaCAqLywKIAkJCQkwRkNCNEU0NTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tTY3JvbGxWaWV3Lm1t
ICovLAogCQkJKTsKQEAgLTY0MzgsNyArNjQzNSw2IEBACiAJCQkJNTFGQ0IxODYxN0JCRkUwMzAw
Mzk0Q0Q4IC8qIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBM0NDMTY5MTg5MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJEMUI1RDVFMTg1ODY5QzgwMDZDNjU5NiAvKiBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDQjRFNTIxOEJC
RTA0NDAwMEZDRkM5IC8qIFdLSW50ZXJhY3Rpb25WaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTIzMjhGRjE2MkM4NjZBMDBEODJGN0EgLyogTWVzc2FnZUVuY29kZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBQzRDODI5MTZCODc2QTkwMDY5RENDRCAvKiBNZXNzYWdlRmxhZ3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRTAwRDZDMTgzMjdDMTIwMDA4N0RENyAvKiBTdHJpbmdSZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtNjc4NCw3ICs2NzgwLDYgQEAKIAkJCQkxQUM3NTM3QzE4M0E5
RkRCMDA3MkNCMTUgLyogUGFnZUxvYWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEQjg2
QzExMjAwRkI5NzAwNzI1NEJFIC8qIEFQSVVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFDOTYx
MTkxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEZDQjRFNEUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQ29udGVudFZp
ZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMjMxNUQxMjJDMzBDQTAwRDVDMzVB
IC8qIEFQSVVSTFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTBBMUQyMTIyREQ1NUUw
MENDOEM1MCAvKiBBUElVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYxMTNFMjUx
MjZDRTE4MjAwNTdEMEE3IC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02ODEwLDYgKzY4MDUsNyBAQAogCQkJCUJDMjA0RUVGMTFDODNFQzgwMDhGMzM3NSAv
KiBXS0J1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMDRFRjAxMUM4M0VDODAwOEYzMzc1
IC8qIFdLQnVuZGxlQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RUVCOUYxMjc3NjFB
QzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkNCNEU2QzE4QkJGMjZBMDAwRkNGQzkgLyogV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTdERDVCRjE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQ
cm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUVFQjlCMTI3NzYxN0MwMDMzMjJC
OCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RUZDMUNGMTUyNEU2MjUwMEM5QTkzOCAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MjY1LDcgKzgyNjEsNiBAQAogCQkJCTFBQjdENzhFMTI4OENEOUEw
MENGRDA4QyAvKiBXS0Rvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTk0NzkyMTg3
QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNDA3NUZCMTI0RkYwMjcwMDY4RjIwQSAvKiBXS0Vycm9yLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGQ0I0RTUzMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0ludGVyYWN0aW9uVmll
dy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ1NDhCMTMyRDgyNjgwMDU1RDgxNiAvKiBXS0Vy
cm9yQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNDY5NTkxMjE0RURGNDAwMEI5OEVCIC8q
IFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0QwMTM5
QzExMEZBNDIwMDAzQjhBNjcgLyogV0tGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgzNDAs
NiArODMzNSw3IEBACiAJCQkJRjYxMTNFMjgxMjZDRTE5QjAwNTdEMEE3IC8qIFdLVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDODY5OUI2MTE2QUFEQUEwMDJB
OTI1QiAvKiBXS1ZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlDNUUxQUZFODE2QjIwQjY3MDA2
Q0MxRjIgLyogV0tXZWJBcmNoaXZlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQ0I0RTZEMThC
QkYyNkEwMDBGQ0ZDOSAvKiBXS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDNUUxQUZFQTE2QjIwQjdCMDA2Q0MxRjIgLyogV0tXZWJBcmNoaXZlUmVzb3VyY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzczQ0VBRDUxODU0MTdBRTAwOEMzNjNEIC8qIFdLTlNE
YXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdL
U2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="249222"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>