<?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>44531</bug_id>
          
          <creation_ts>2010-08-24 09:40:15 -0700</creation_ts>
          <short_desc>Web Inspector: Store heap snapshots in InspectorProfilerAgent</short_desc>
          <delta_ts>2010-08-27 02:45:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>268601</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-24 09:40:15 -0700</bug_when>
    <thetext>Currently heap snapshots are retrieved aside from CPU profiles (via getProfilerLogLines). We need to align heap snapshots with CPU profiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268606</commentid>
    <comment_count>1</comment_count>
      <attachid>65286</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-24 09:49:38 -0700</bug_when>
    <thetext>Created attachment 65286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269105</commentid>
    <comment_count>2</comment_count>
      <attachid>65286</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-08-25 02:20:51 -0700</bug_when>
    <thetext>Comment on attachment 65286
Patch

The patch is huge, could you break it down into smaller pieces? Also would be nice to cover this functionality with at least couple of layout tests.

WebCore/bindings/v8/ScriptHeapSnapshot.cpp:70
 +              entry-&gt;setString(&quot;cons&quot;, toWebCoreString(node-&gt;GetName()));
What does &quot;cons&quot; stand for? Is it &quot;constructor&quot;? If so, please use full name for the field.

WebCore/inspector/InspectorProfilerAgent.cpp:70
 +      , m_nextUserInitiatedHeapSnapshotNumber(1)
Shouldn&apos;t it be static to be unique among all instances of the InspectorProfilerAgent in the process?

WebKit/chromium/src/js/HeapProfilerPanel.js:119
 +      this._loadProfile(this.profile, profileCallback);
We usually call profileCallback.bind(this) instead of using var self = this; in Web Inspector code.

WebKit/chromium/src/js/HeapProfilerPanel.js:297
 +          var self = this;
ditto

WebKit/chromium/src/js/HeapProfilerPanel.js:333
 +          var self = this;
dtto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269115</commentid>
    <comment_count>3</comment_count>
      <attachid>65286</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-25 02:45:29 -0700</bug_when>
    <thetext>Comment on attachment 65286
Patch

LayoutTests/platform/chromium-win/http/tests/loading/307-after-303-after-post-expected.txt:127
 +  inspector/ScriptView.js - didFailLoadingWithError: &lt;NSError domain NSURLErrorDomain, code -6, failing URL &quot;file:///C:/b/slave/webkit-rel/build/src/webkit/Release/resources/inspector/ScriptView.js&quot;&gt;
I&apos;d suggest to fix these poor expectations. Test is anyways disabled...

WebCore/inspector/front-end/ProfilesPanel.js:390
 +              if (this._profiles[i].typeId == typeId)
===

WebCore/inspector/front-end/ProfilesPanel.js:399
 +              if (this._profiles[i].typeId == profile.typeId
ditto

WebCore/inspector/front-end/ProfilesPanel.js:400
 +                  &amp;&amp; this._profiles[i].uid == profile.uid) {
ditto

WebKit/chromium/src/js/HeapProfilerPanel.js:35
 +  WebInspector.HeapSnapshotView = function(parent, profile)
Why is this not in WebCore now? r- for this.

WebKit/chromium/src/js/HeapProfilerPanel.js:425
 +                   lastComparator = self.snapshotDataGridList.lastComparator;
bad indent.

WebKit/chromium/src/js/HeapProfilerPanel.js:460
 +              if (title.indexOf(UserInitiatedProfileName) === 0)
if (!title ...)

WebKit/chromium/src/js/DevTools.js:37
 +  devtools.ToolsAgent = function()
Please remove ToolsAgent as a whole since it is no longer used. Once you remove it, please remove override of WebInspector.loaded that was used for the agent.
Just put Preferences overrides in the anonymous inline function there.

WebKit/chromium/src/js/DevTools.js:82
 +      var oldShow = WebInspector.ProfilesPanel.prototype.show;
This code should also be removed as a whole - no need to intercept profiles panel showing anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269292</commentid>
    <comment_count>4</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-25 09:42:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 65286 [details])
&gt; LayoutTests/platform/chromium-win/http/tests/loading/307-after-303-after-post-expected.txt:127
&gt;  +  inspector/ScriptView.js - didFailLoadingWithError: &lt;NSError domain NSURLErrorDomain, code -6, failing URL &quot;file:///C:/b/slave/webkit-rel/build/src/webkit/Release/resources/inspector/ScriptView.js&quot;&gt;
&gt; I&apos;d suggest to fix these poor expectations. Test is anyways disabled...
&gt; 

Fixed in r66011

&gt; WebCore/inspector/front-end/ProfilesPanel.js:390
&gt;  +              if (this._profiles[i].typeId == typeId)
&gt; ===
&gt; 
&gt; WebCore/inspector/front-end/ProfilesPanel.js:399
&gt;  +              if (this._profiles[i].typeId == profile.typeId
&gt; ditto
&gt; 
&gt; WebCore/inspector/front-end/ProfilesPanel.js:400
&gt;  +                  &amp;&amp; this._profiles[i].uid == profile.uid) {
&gt; ditto
&gt; 

All fixed.

&gt; WebKit/chromium/src/js/HeapProfilerPanel.js:35
&gt;  +  WebInspector.HeapSnapshotView = function(parent, profile)
&gt; Why is this not in WebCore now? r- for this.
&gt; 

Moved.

&gt; WebKit/chromium/src/js/HeapProfilerPanel.js:425
&gt;  +                   lastComparator = self.snapshotDataGridList.lastComparator;
&gt; bad indent.
&gt; 

Fixed.

&gt; WebKit/chromium/src/js/HeapProfilerPanel.js:460
&gt;  +              if (title.indexOf(UserInitiatedProfileName) === 0)
&gt; if (!title ...)
&gt; 

Fixed.

&gt; WebKit/chromium/src/js/DevTools.js:37
&gt;  +  devtools.ToolsAgent = function()
&gt; Please remove ToolsAgent as a whole since it is no longer used. Once you remove it, please remove override of WebInspector.loaded that was used for the agent.
&gt; Just put Preferences overrides in the anonymous inline function there.
&gt; 

Done.

&gt; WebKit/chromium/src/js/DevTools.js:82
&gt;  +      var oldShow = WebInspector.ProfilesPanel.prototype.show;
&gt; This code should also be removed as a whole - no need to intercept profiles panel showing anymore.

Removing this code is orthogonal to this change. Will do as a separate issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269293</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-25 09:43:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 65286 [details])
&gt; The patch is huge, could you break it down into smaller pieces? Also would be nice to cover this functionality with at least couple of layout tests.
&gt; 
&gt; WebCore/bindings/v8/ScriptHeapSnapshot.cpp:70
&gt;  +              entry-&gt;setString(&quot;cons&quot;, toWebCoreString(node-&gt;GetName()));
&gt; What does &quot;cons&quot; stand for? Is it &quot;constructor&quot;? If so, please use full name for the field.
&gt; 

Fixed.

&gt; WebCore/inspector/InspectorProfilerAgent.cpp:70
&gt;  +      , m_nextUserInitiatedHeapSnapshotNumber(1)
&gt; Shouldn&apos;t it be static to be unique among all instances of the InspectorProfilerAgent in the process?
&gt; 

No. These numbers are not UIDs (which are indeed static), but rather numbers displayed on UI. Having snapshots started with &quot;Snapshot 3&quot; will confuse users.

&gt; WebKit/chromium/src/js/HeapProfilerPanel.js:119
&gt;  +      this._loadProfile(this.profile, profileCallback);
&gt; We usually call profileCallback.bind(this) instead of using var self = this; in Web Inspector code.
&gt; 
&gt; WebKit/chromium/src/js/HeapProfilerPanel.js:297
&gt;  +          var self = this;
&gt; ditto
&gt; 
&gt; WebKit/chromium/src/js/HeapProfilerPanel.js:333
&gt;  +          var self = this;
&gt; dtto

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269306</commentid>
    <comment_count>6</comment_count>
      <attachid>65431</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-25 09:57:09 -0700</bug_when>
    <thetext>Created attachment 65431
Comments addressed

&apos;cr-linux&apos; bot will be red because the last roll of V8 was reverted, and I&apos;m relying on the updated API. As soon as the next roll will happen, I&apos;ll lift up DEPS in chromium port, and commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269324</commentid>
    <comment_count>7</comment_count>
      <attachid>65431</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-08-25 10:25:09 -0700</bug_when>
    <thetext>Comment on attachment 65431
Comments addressed

I just had some style comments, but I didn&apos;t investigate with great detail since
this has already worked for some time in Chrome.

WebCore/inspector/front-end/HeapSnapshotView.js:81
&gt; +                      &quot;sizeDelta&quot;: { title: WebInspector.UIString(&quot;\xb1 Size&quot;), width: &quot;72px&quot;, sortable: true } };

What is \xb1? Could there be a comment nearby that it is &quot;±&quot;?
Also, a few of these Object Literals use quotes around the keys.
I guess that is fine but its not required and we haven&apos;t used them
elsewhere in the project.


WebCore/inspector/front-end/HeapSnapshotView.js:123
&gt; +  WebInspector.HeapSnapshotView.prototype = {
&gt; +
&gt; +      get statusBarItems()

No newline


WebCore/inspector/front-end/HeapSnapshotView.js:264
&gt; +          var maxDepth = 2;

Could make this &quot;const&quot; since it doesn&apos;t change.


WebCore/inspector/front-end/HeapSnapshotView.js:389
&gt;  +          for (var profileEntry in profile.entries) {
&gt;  +              profile.entries[profileEntry].retainers = {};
&gt;  +          }

Braces not needed for single line 


WebCore/inspector/front-end/HeapSnapshotView.js:401
&gt; +                  if ((item.constructorName == &apos;Object&apos; || item.constructorName == &apos;Array&apos;)) {
WebCore/inspector/front-end/HeapSnapshotView.js:415
&gt; +              if (retainer.constructorName == &apos;Object&apos; || retainer.constructorName == &apos;Array&apos;)

===


WebCore/inspector/front-end/HeapSnapshotView.js:596
&gt; +          if (type === &quot;CODE_TYPE&quot; || type === &quot;SHARED_FUNCTION_INFO_TYPE&quot; || type === &quot;SCRIPT_TYPE&quot;) return &quot;code&quot;;
WebCore/inspector/front-end/HeapSnapshotView.js:597
&gt; +          if (type === &quot;STRING_TYPE&quot; || type === &quot;HEAP_NUMBER_TYPE&quot; || type.match(/^JS_/) || type.match(/_ARRAY_TYPE$/)) return &quot;data&quot;;

Please put the return statement on the next line.


WebCore/inspector/front-end/HeapSnapshotView.js:684
&gt; +          else
&gt; +              // Math minus sign, same width as plus.
&gt; +              return &quot;\u2212&quot;;

Here braces are needed, or put the comment on the same line as the return statement.


WebCore/inspector/front-end/HeapSnapshotView.js:689
&gt; +      showDeltaAsPercent: function(value) {
WebCore/inspector/front-end/HeapSnapshotView.js:699
&gt; +      getTotalCount: function() {
WebCore/inspector/front-end/HeapSnapshotView.js:708
&gt; +      getTotalSize: function() {

Here are a series of functions where the opening brace should go
on the next line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269361</commentid>
    <comment_count>8</comment_count>
      <attachid>65440</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-25 11:08:12 -0700</bug_when>
    <thetext>Created attachment 65440
Style fixes

Thanks, Joe!

I was believing that &apos;check-webkit-style&apos; lints .js files, but apparently it&apos;s not. I walked over the file and fixed other style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269480</commentid>
    <comment_count>9</comment_count>
      <attachid>65440</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-25 13:41:35 -0700</bug_when>
    <thetext>Comment on attachment 65440
Style fixes

More nits before you land. New file is too big to review the logic, but given that it is a WebKit -&gt; WebCore move, I think it is fine.

I think you&apos;ll need to merge with incoming change from Ilya (#44617). WebCore/inspector/front-end/HeapSnapshotView.js:31
 +  /**
nit: no JSDoc in front-end yet.

WebCore/inspector/front-end/HeapSnapshotView.js:124
 +  };
nit: no ;

WebCore/inspector/front-end/HeapSnapshotView.js:278
 +      jumpToFirstSearchResult: WebInspector.CPUProfileView.prototype.jumpToFirstSearchResult,
I personally hate this. Please inherit both from single abstract view instead. Can be done in subsequent patch. (Add FIXME here)

WebCore/inspector/front-end/inspector.css:3915
 +  .heap-snapshot-sidebar-tree-item .icon {
Please introduce a separate file &quot;heap-profiler.css&quot; instead. Can be done in immediate follow-up.

WebKit/chromium/src/js/DevTools.js:41
 +  // Here and below are overrides to existing WebInspector methods only.
This comment no longer applies. Nuke it!

WebKit/chromium/src/js/DevTools.js:65
 +      var oldShow = WebInspector.ProfilesPanel.prototype.show;
Put a FIXME telling it should be upstreamed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270399</commentid>
    <comment_count>10</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-08-27 02:45:19 -0700</bug_when>
    <thetext>Committed http://trac.webkit.org/changeset/66117:


2010-08-26  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: Store heap snapshots in InspectorProfilerAgent.

        Change the way heap snapshots are transported to Inspector
        to be aligned with CPU profiles. As a result, the Heap snapshots
        view of Profiles panel was upstreamed into WebCore.

        https://bugs.webkit.org/show_bug.cgi?id=44531</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65286</attachid>
            <date>2010-08-24 09:49:38 -0700</date>
            <delta_ts>2010-08-25 09:57:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>44531-patch</filename>
            <type>text/plain</type>
            <size>77267</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YmI1ZGFhLi40YjNiMjM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDgt
MjQgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdG9y
ZSBoZWFwIHNuYXBzaG90cyBpbiBJbnNwZWN0b3JQcm9maWxlckFnZW50LgorCisgICAgICAgIENo
YW5nZSB0aGUgd2F5IGhlYXAgc25hcHNob3RzIGFyZSB0cmFuc3BvcnRlZCB0byBJbnNwZWN0b3IK
KyAgICAgICAgdG8gYmUgYWxpZ25lZCB3aXRoIENQVSBwcm9maWxlcy4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1MzEKKworICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtLXdpbi9odHRwL3Rlc3RzL2xvYWRpbmcvMzA3LWFmdGVyLTMwMy1hZnRl
ci1wb3N0LWV4cGVjdGVkLnR4dDoKKwogMjAxMC0wOC0yNCAgS2VudCBUYW11cmEgIDx0a2VudEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdGVzdCBleHBlY3RhdGlvbiB1cGRh
dGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaHR0cC90
ZXN0cy9sb2FkaW5nLzMwNy1hZnRlci0zMDMtYWZ0ZXItcG9zdC1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13aW4vaHR0cC90ZXN0cy9sb2FkaW5nLzMwNy1hZnRl
ci0zMDMtYWZ0ZXItcG9zdC1leHBlY3RlZC50eHQKaW5kZXggMDcyYTIwMS4uNTQzNWZjYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2h0dHAvdGVzdHMvbG9h
ZGluZy8zMDctYWZ0ZXItMzAzLWFmdGVyLXBvc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtLXdpbi9odHRwL3Rlc3RzL2xvYWRpbmcvMzA3LWFmdGVyLTMw
My1hZnRlci1wb3N0LWV4cGVjdGVkLnR4dApAQCAtMTI3LDkgKzEyNyw3IEBAIGluc3BlY3Rvci9E
ZWJ1Z2dlckFnZW50LmpzIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGluc3Bl
Y3Rvci9EZWJ1Z2dlCiBpbnNwZWN0b3IvU2NyaXB0Vmlldy5qcyAtIGRpZEZhaWxMb2FkaW5nV2l0
aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAtNiwgZmFpbGlu
ZyBVUkwgImZpbGU6Ly8vQzovYi9zbGF2ZS93ZWJraXQtcmVsL2J1aWxkL3NyYy93ZWJraXQvUmVs
ZWFzZS9yZXNvdXJjZXMvaW5zcGVjdG9yL1NjcmlwdFZpZXcuanMiPgogaW5zcGVjdG9yL0RlYnVn
Z2VyU2NyaXB0LmpzIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGluc3BlY3Rv
ci9EZWJ1Z2dlclNjcmlwdC5qcywgbWFpbiBkb2N1bWVudCBVUkwgZGV2dG9vbHMuaHRtbCwgaHR0
cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQogaW5zcGVjdG9yL1Byb2ZpbGVE
YXRhR3JpZFRyZWUuanMgLSBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcjogPE5TRXJyb3IgZG9tYWlu
IE5TVVJMRXJyb3JEb21haW4sIGNvZGUgLTYsIGZhaWxpbmcgVVJMICJmaWxlOi8vL0M6L2Ivc2xh
dmUvd2Via2l0LXJlbC9idWlsZC9zcmMvd2Via2l0L1JlbGVhc2UvcmVzb3VyY2VzL2luc3BlY3Rv
ci9Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIj4KLWluc3BlY3Rvci9Qcm9maWxlckFnZW50LmpzIC0g
d2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGluc3BlY3Rvci9Qcm9maWxlckFnZW50
LmpzLCBtYWluIGRvY3VtZW50IFVSTCBkZXZ0b29scy5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJl
ZGlyZWN0UmVzcG9uc2UgKG51bGwpCiBpbnNwZWN0b3IvQm90dG9tVXBQcm9maWxlRGF0YUdyaWRU
cmVlLmpzIC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9yIGRvbWFpbiBOU1VSTEVy
cm9yRG9tYWluLCBjb2RlIC02LCBmYWlsaW5nIFVSTCAiZmlsZTovLy9DOi9iL3NsYXZlL3dlYmtp
dC1yZWwvYnVpbGQvc3JjL3dlYmtpdC9SZWxlYXNlL3Jlc291cmNlcy9pbnNwZWN0b3IvQm90dG9t
VXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIj4KLWluc3BlY3Rvci9Qcm9maWxlclByb2Nlc3Nvci5q
cyAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBpbnNwZWN0b3IvUHJvZmlsZXJQ
cm9jZXNzb3IuanMsIG1haW4gZG9jdW1lbnQgVVJMIGRldnRvb2xzLmh0bWwsIGh0dHAgbWV0aG9k
IEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKIGluc3BlY3Rvci9Ub3BEb3duUHJvZmlsZURh
dGFHcmlkVHJlZS5qcyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4g
TlNVUkxFcnJvckRvbWFpbiwgY29kZSAtNiwgZmFpbGluZyBVUkwgImZpbGU6Ly8vQzovYi9zbGF2
ZS93ZWJraXQtcmVsL2J1aWxkL3NyYy93ZWJraXQvUmVsZWFzZS9yZXNvdXJjZXMvaW5zcGVjdG9y
L1RvcERvd25Qcm9maWxlRGF0YUdyaWRUcmVlLmpzIj4KIGluc3BlY3Rvci9IZWFwUHJvZmlsZXJQ
YW5lbC5qcyAtIHdpbGxTZW5kUmVxdWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBpbnNwZWN0b3IvSGVh
cFByb2ZpbGVyUGFuZWwuanMsIG1haW4gZG9jdW1lbnQgVVJMIGRldnRvb2xzLmh0bWwsIGh0dHAg
bWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKIGluc3BlY3Rvci9Qcm9maWxlVmll
dy5qcyAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJv
ckRvbWFpbiwgY29kZSAtNiwgZmFpbGluZyBVUkwgImZpbGU6Ly8vQzovYi9zbGF2ZS93ZWJraXQt
cmVsL2J1aWxkL3NyYy93ZWJraXQvUmVsZWFzZS9yZXNvdXJjZXMvaW5zcGVjdG9yL1Byb2ZpbGVW
aWV3LmpzIj4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggODZmNjc3Ni4uMzI5YTYyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NCBAQAorMjAxMC0wOC0yNCAgTWlr
aGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0b3JlIGhlYXAg
c25hcHNob3RzIGluIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuCisKKyAgICAgICAgQ2hhbmdlIHRo
ZSB3YXkgaGVhcCBzbmFwc2hvdHMgYXJlIHRyYW5zcG9ydGVkIHRvIEluc3BlY3RvcgorICAgICAg
ICB0byBiZSBhbGlnbmVkIHdpdGggQ1BVIHByb2ZpbGVzLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDUzMQorCisgICAgICAgICogR05VbWFrZWZp
bGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRIZWFwU25hcHNob3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25h
cHNob3Q6On5TY3JpcHRIZWFwU25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0SGVh
cFNuYXBzaG90Ojp0aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6
OnVpZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9ySGVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6
OlNjcmlwdEhlYXBTbmFwc2hvdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmls
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjp0YWtlSGVhcFNuYXBzaG90
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6dGl0bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90Ojp1aWQpOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRJbnNwZWN0b3JPYmplY3RGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBz
aG90OjpidWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1NjcmlwdEhlYXBTbmFwc2hvdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhl
YXBTbmFwc2hvdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFwc2hv
dDo6flNjcmlwdEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25h
cHNob3Q6OlNjcmlwdEhlYXBTbmFwc2hvdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
UHJvZmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvcik6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGVTbmFwc2hvdEhlYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlSGVhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRQcm9maWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVzZXRTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0YWtlSGVhcFNuYXBzaG90KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1BVUHJvZmlsZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnBy
b3RvdHlwZS5jcmVhdGVTaWRlYmFyVHJlZUVsZW1lbnRGb3JQcm9maWxlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuYWRkUHJvZmlsZUhlYWRlcik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUucmVtb3ZlUHJvZmlsZUhlYWRlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuZ2V0UHJvZmls
ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnVwZGF0
ZVByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1l
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQucHJv
dG90eXBlLmdldCBtYWluVGl0bGUpOgorCiAyMDEwLTA4LTI0ICBYYW4gTG9wZXogIDx4bG9wZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpp
bmRleCA2YjdkMzFkLi41OTg0ZTVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTc3Nyw2ICs3NzcsNyBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgg
XAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R0NFdmVudC5jcHAgXAogCVdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0R0NFdmVudC5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhl
YXBTbmFwc2hvdC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEluc3RhbmNlLmggXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRPYmplY3QuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGQyNGI1YzguLmNmZTYwMmQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04NTQs
NiArODU0LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0R0NFdmVudC5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdEdDRXZlbnQuaCcsCisgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
U2NyaXB0SGVhcFNuYXBzaG90LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdElu
c3RhbmNlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0SW5zdGFuY2UuaCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcCcsCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmZmM2Nzlh
Li5hOTZhYTYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KQEAgLTExNTcsNiArMTE1Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIGJpbmRp
bmdzL2pzL1NjcmlwdEV2ZW50TGlzdGVuZXIuaCBcCiAgICAgYmluZGluZ3MvanMvU2NyaXB0RnVu
Y3Rpb25DYWxsLmggXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuaCBcCisgICAgYmlu
ZGluZ3MvanMvU2NyaXB0SGVhcFNuYXBzaG90LmggXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdE9i
amVjdC5oIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlLmggXAogICAgIGJpbmRpbmdz
L2pzL1NjcmlwdFByb2ZpbGVOb2RlLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKaW5kZXggMDc5OTc1MC4uYmRjZjljZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC00OTIxNiw2ICs0OTIxNiwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJ
CQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0SGVhcFNu
YXBzaG90LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0SW5zdGFuY2UuaCINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YzI3YThiNS4uYTllNGRmNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTI3NDksNiArMjc0OSw3IEBACiAJCTk3RUY3REZFMTA3RTU1QjcwMEQ3QzQ5QyAv
KiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5N0VGN0RGRDEwN0U1NUI3MDBEN0M0OUMgLyogU2NyaXB0Q29udHJv
bGxlckJhc2UuY3BwICovOyB9OwogCQk5RjBENkIyRTEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5RjBENkIyQzEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAgKi87IH07CiAJCTlGMEQ2QjJGMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5RjBENkIyRDEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5o
ICovOyB9OworCQk5RjNCOTQ3RTEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0SGVhcFNuYXBzaG90
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjNCOTQ3
RDEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0SGVhcFNuYXBzaG90LmggKi87IH07CiAJCTlGNkZD
MTk2MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjZGQzE5NDExMjJFODJBMDBFODAx
OTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovOyB9OwogCQk5RjZGQzE5NzExMjJFODJBMDBF
ODAxOTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1
Z1NlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTlGNzIzMDRGMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RjcyMzA0QzExMTg0QjQxMDBB
RDAxMjYgLyogU2NyaXB0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC04NjEzLDYgKzg2MTQsNyBAQAogCQk5N0VGN0RGRDEwN0U1NUI3
MDBEN0M0OUMgLyogU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q29udHJvbGxlckJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5RjBENkIyQzEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUYw
RDZCMkQxMjFCRkVCQTAwNkMwMjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5RjNCOTQ3RDEyMjQxNzU4MDA1MzA0RTcgLyogU2Ny
aXB0SGVhcFNuYXBzaG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlw
dEhlYXBTbmFwc2hvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjZGQzE5NDEx
MjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0RGVidWdTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5RjZGQzE5NTExMjJFODJBMDBFODAxOTYgLyogU2NyaXB0RGVidWdT
ZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RGVidWdTZXJ2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUY3MjMwNEMxMTE4NEI0MTAwQUQw
MTI2IC8qIFNjcmlwdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxMTMsNiAr
MTYxMTUsNyBAQAogCQkJCTQxMDAyQ0NCMEY2NkVERUYwMDlFNjYwRCAvKiBTY3JpcHRGdW5jdGlv
bkNhbGwuaCAqLywKIAkJCQk0RkQ4RDBGMDExOUM3MThCMDAyRkE4MjUgLyogU2NyaXB0R0NFdmVu
dC5jcHAgKi8sCiAJCQkJNEZEOEQwRjExMTlDNzE4QjAwMkZBODI1IC8qIFNjcmlwdEdDRXZlbnQu
aCAqLywKKwkJCQk5RjNCOTQ3RDEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0SGVhcFNuYXBzaG90
LmggKi8sCiAJCQkJOTM0Q0MxMTYwRURDQUM3MzAwQTY1OEYyIC8qIFNjcmlwdEluc3RhbmNlLmgg
Ki8sCiAJCQkJNDFGMDY2RTMwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5jcHAgKi8s
CiAJCQkJNDFGMDY2RTIwRjY0QkNGNjAwQTA3RUFDIC8qIFNjcmlwdE9iamVjdC5oICovLApAQCAt
MjAzNjEsNiArMjAzNjQsNyBAQAogCQkJCUNFMDU3RkE2MTIyMDczMTEwMEE0NzZENSAvKiBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGMEQ2QjJGMTIxQkZF
QkEwMDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5RjNCOTQ3RTEyMjQxNzU4MDA1MzA0RTcgLyogU2NyaXB0SGVhcFNuYXBz
aG90LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0SGVhcFNuYXBzaG90LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFwc2hv
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MWM3ODIKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5oCkBAIC0w
LDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRIZWFwU25hcHNob3RfaAorI2RlZmluZSBTY3JpcHRI
ZWFwU25hcHNob3RfaAorCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3JpcHRI
ZWFwU25hcHNob3QgOiBwdWJsaWMgUmVmQ291bnRlZDxTY3JpcHRIZWFwU25hcHNob3Q+IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5TY3JpcHRIZWFwU25hcHNob3QoKSB7fQorCisgICAgU3RyaW5n
IHRpdGxlKCkgY29uc3QgeyByZXR1cm4gIiI7IH0KKyAgICB1bnNpZ25lZCBpbnQgdWlkKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0IHsgcmV0dXJuIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7IH0KKworcHJpdmF0ZToKKyAgICBTY3JpcHRIZWFwU25hcHNob3QoKSB7fQorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0SGVhcFNuYXBzaG90
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaAppbmRleCAxODBjNDlmLi4wNWU3YTI1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
ZGVmaW5lIFNjcmlwdFByb2ZpbGVyX2gKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQorI2luY2x1ZGUgIlNjcmlwdEhlYXBTbmFwc2hvdC5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2Zp
bGUuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogCkBAIC0zOSw4ICs0MCw3IEBAIGNsYXNz
IFNjcmlwdFByb2ZpbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzdGFydChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUqIHN0
YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICBzdGF0aWMgdm9pZCB0YWtlSGVhcFNuYXBz
aG90KCkgeyB9Ci0gICAgc3RhdGljIGxvbmcgZ2V0UHJvZmlsZXJMb2dMaW5lcyhsb25nLCBTdHJp
bmcqKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBz
aG90PiB0YWtlSGVhcFNuYXBzaG90KGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIDA7IH0KICAgICBz
dGF0aWMgYm9vbCBpc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpOwogfTsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRIZWFwU25hcHNob3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZkZmFmNDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEhlYXBTbmFwc2hvdC5jcHAKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2NyaXB0SGVhcFNuYXBzaG90LmgiCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlIDx2OC1wcm9maWxl
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBTY3JpcHRIZWFwU25hcHNob3Q6OnRp
dGxlKCkgY29uc3QKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgcmV0dXJuIHRv
V2ViQ29yZVN0cmluZyhtX3NuYXBzaG90LT5HZXRUaXRsZSgpKTsKK30KKwordW5zaWduZWQgaW50
IFNjcmlwdEhlYXBTbmFwc2hvdDo6dWlkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zbmFwc2hv
dC0+R2V0VWlkKCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRJbnNwZWN0b3JPYmplY3RGb3IoY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIHJvb3QpCit7Cisg
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbG93TGV2ZWxzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBlbnRyaWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZHJlbiA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gcm9vdC0+R2V0Q2hpbGRyZW5Db3Vu
dCgpOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBjb25zdCB2ODo6SGVhcEdyYXBoTm9kZSog
bm9kZSA9IHJvb3QtPkdldENoaWxkKGkpLT5HZXRUb05vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUt
PkdldFR5cGUoKSA9PSB2ODo6SGVhcEdyYXBoTm9kZTo6a0ludGVybmFsKSB7CisgICAgICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb3dMZXZlbCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBsb3dMZXZlbC0+c2V0TnVtYmVyKCJjb3VudCIsIG5vZGUtPkdl
dEluc3RhbmNlc0NvdW50KCkpOworICAgICAgICAgICAgbG93TGV2ZWwtPnNldE51bWJlcigic2l6
ZSIsIG5vZGUtPkdldFNlbGZTaXplKCkpOworICAgICAgICAgICAgbG93TGV2ZWwtPnNldFN0cmlu
ZygidHlwZSIsIHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAg
IGxvd0xldmVscy0+c2V0T2JqZWN0KHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpLCBs
b3dMZXZlbCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+R2V0SW5zdGFuY2VzQ291bnQoKSkg
eworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZW50cnkgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgZW50cnktPnNldFN0cmluZygiY29ucyIsIHRv
V2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRO
dW1iZXIoImNvdW50Iiwgbm9kZS0+R2V0SW5zdGFuY2VzQ291bnQoKSk7CisgICAgICAgICAgICBl
bnRyeS0+c2V0TnVtYmVyKCJzaXplIiwgbm9kZS0+R2V0U2VsZlNpemUoKSk7CisgICAgICAgICAg
ICBlbnRyaWVzLT5zZXRPYmplY3QodG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUoKSksIGVu
dHJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGVudHJ5
LT5zZXRTdHJpbmcoImNvbnMiLCB0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSk7Cisg
ICAgICAgICAgICBmb3IgKGludCBqID0gMCwgY291bnQgPSBub2RlLT5HZXRDaGlsZHJlbkNvdW50
KCk7IGogPCBjb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFw
aEVkZ2UqIHY4RWRnZSA9IG5vZGUtPkdldENoaWxkKGopOworICAgICAgICAgICAgICAgIGNvbnN0
IHY4OjpIZWFwR3JhcGhOb2RlKiB2OENoaWxkID0gdjhFZGdlLT5HZXRUb05vZGUoKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaGlsZCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgY2hpbGQtPnNldFN0cmluZygiY29ucyIsIHRv
V2ViQ29yZVN0cmluZyh2OENoaWxkLT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAgICAgICBjaGls
ZC0+c2V0TnVtYmVyKCJjb3VudCIsIHY4RWRnZS0+R2V0TmFtZSgpLT5Ub0ludGVnZXIoKS0+VmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgZW50cnktPnNldE9iamVjdChTdHJpbmc6Om51bWJlcihy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4odjhDaGlsZCkpLCBjaGlsZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjaGlsZHJlbi0+c2V0T2JqZWN0KFN0cmluZzo6bnVt
YmVyKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihub2RlKSksIGVudHJ5KTsg
ICAKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQtPnNldE9iamVjdCgibG93bGV2ZWxzIiwg
bG93TGV2ZWxzKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgiZW50cmllcyIsIGVudHJpZXMpOwor
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJjaGlsZHJlbiIsIGNoaWxkcmVuKTsKKyAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFNjcmlw
dEhlYXBTbmFwc2hvdDo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3IobV9zbmFwc2hvdC0+R2V0Um9vdCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRIZWFwU25hcHNob3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVh
cFNuYXBzaG90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0YTVhOQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90
LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlwdEhlYXBTbmFwc2hvdF9oCisjZGVmaW5l
IFNjcmlwdEhlYXBTbmFwc2hvdF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCitu
YW1lc3BhY2UgdjggeworY2xhc3MgSGVhcFNuYXBzaG90OworfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKworY2xhc3MgU2NyaXB0SGVhcFNuYXBzaG90
IDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0SGVhcFNuYXBzaG90PiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBjcmVhdGUoY29uc3Qgdjg6Okhl
YXBTbmFwc2hvdCogc25hcHNob3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNjcmlwdEhlYXBTbmFwc2hvdChzbmFwc2hvdCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5TY3Jp
cHRIZWFwU25hcHNob3QoKSB7fQorCisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgaW50IHVpZCgpIGNvbnN0OworCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFNj
cmlwdEhlYXBTbmFwc2hvdChjb25zdCB2ODo6SGVhcFNuYXBzaG90KiBzbmFwc2hvdCkKKyAgICAg
ICAgOiBtX3NuYXBzaG90KHNuYXBzaG90KQorICAgIHt9CisKKyAgICBjb25zdCB2ODo6SGVhcFNu
YXBzaG90KiBtX3NuYXBzaG90OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gU2NyaXB0SGVhcFNuYXBzaG90X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0UHJvZmlsZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGUu
Y3BwCmluZGV4IDk1YWMwZGUuLjI5YmRhZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0UHJvZmlsZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9m
aWxlLmNwcApAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yKGNvbnN0IHY4OjpDcHVQcm9maWxlTgogICAgICAg
ICBjaGlsZHJlbi0+cHVzaE9iamVjdChidWlsZEluc3BlY3Rvck9iamVjdEZvcihjaGlsZCkpOwog
ICAgIH0KICAgICByZXN1bHQtPnNldEFycmF5KCJjaGlsZHJlbiIsIGNoaWxkcmVuKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gU2NyaXB0UHJvZmlsZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RG
b3JIZWFkKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJv
ZmlsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXgg
MGRlNGEyNC4uYWI3Y2ZhNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQ
cm9maWxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAK
QEAgLTI5LDggKzI5LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlci5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAKICNpbmNsdWRlIDx2OC1wcm9maWxlci5oPgpAQCAtNTIs
MjEgKzUzLDExIEBAIFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gU2NyaXB0UHJvZmlsZXI6OnN0
b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIHByb2ZpbGUg
PyBTY3JpcHRQcm9maWxlOjpjcmVhdGUocHJvZmlsZSkgOiAwOwogfQogCi12b2lkIFNjcmlwdFBy
b2ZpbGVyOjp0YWtlSGVhcFNuYXBzaG90KCkKLXsKLSAgICB2ODo6Vjg6OlJlc3VtZVByb2ZpbGVy
RXgodjg6OlBST0ZJTEVSX01PRFVMRV9IRUFQX1NOQVBTSE9UCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgdjg6OlBST0ZJTEVSX01PRFVMRV9IRUFQX1NUQVRTCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgdjg6OlBST0ZJTEVSX01PRFVMRV9KU19DT05TVFJVQ1RPUlMpOwot
fQotCi1sb25nIFNjcmlwdFByb2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9zaXRp
b24sIFN0cmluZyogZGF0YSkKK1Bhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiBTY3JpcHRQ
cm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIHN0
YXRpYyBjaGFyIGJ1ZmZlcls2NTUzNl07Ci0gICAgY29uc3QgaW50IHJlYWRTaXplID0gdjg6OlY4
OjpHZXRMb2dMaW5lcyhwb3NpdGlvbiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEpOwotICAg
IGJ1ZmZlcltyZWFkU2l6ZV0gPSAnXDAnOwotICAgIHBvc2l0aW9uICs9IHJlYWRTaXplOwotICAg
ICpkYXRhID0gYnVmZmVyOwotICAgIHJldHVybiBwb3NpdGlvbjsKKyAgICB2ODo6SGFuZGxlU2Nv
cGUgaHM7CisgICAgY29uc3Qgdjg6OkhlYXBTbmFwc2hvdCogc25hcHNob3QgPSB2ODo6SGVhcFBy
b2ZpbGVyOjpUYWtlU25hcHNob3QodjhTdHJpbmcodGl0bGUpLCB2ODo6SGVhcFNuYXBzaG90Ojpr
QWdncmVnYXRlZCk7CisgICAgcmV0dXJuIHNuYXBzaG90ID8gU2NyaXB0SGVhcFNuYXBzaG90Ojpj
cmVhdGUoc25hcHNob3QpIDogMDsKIH0KIAogYm9vbCBTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxl
ckFsd2F5c0VuYWJsZWQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQ
cm9maWxlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCmluZGV4IGIx
YWIzYjEuLmI3NWEwNTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJv
ZmlsZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNkZWZpbmUgU2NyaXB0UHJvZmlsZXJfaAogCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRIZWFwU25hcHNob3QuaCIKICNpbmNsdWRlICJT
Y3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIApAQCAtMzksMTIgKzQw
LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5zcGVjdG9yT2JqZWN0Owor
CiBjbGFzcyBTY3JpcHRQcm9maWxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0
YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIHZvaWQgdGFrZUhl
YXBTbmFwc2hvdCgpOwotICAgIHN0YXRpYyBsb25nIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBw
b3NpdGlvbiwgU3RyaW5nKiBkYXRhKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRIZWFw
U25hcHNob3Q+IHRha2VIZWFwU25hcHNob3QoY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3Rh
dGljIGJvb2wgaXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKTsKIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuaWRsCmluZGV4IDM5MmQxZGYuLjEwYjllOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApA
QCAtMTQ5LDEzICsxNDksMTIgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1Qcm9m
aWxlcl0gdm9pZCBzdG9wUHJvZmlsaW5nKCk7CiAKICAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJd
IHZvaWQgZ2V0UHJvZmlsZUhlYWRlcnMoaW4gbG9uZyBjYWxsSWQsIG91dCBBcnJheSBoZWFkZXJz
KTsKLSAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgZ2V0UHJvZmlsZShpbiBsb25nIGNh
bGxJZCwgaW4gdW5zaWduZWQgbG9uZyB1aWQsIG91dCBPYmplY3QgcHJvZmlsZSk7CisgICAgICAg
IFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIGdldFByb2ZpbGUoaW4gbG9uZyBjYWxsSWQsIGluIFN0
cmluZyB0eXBlLCBpbiB1bnNpZ25lZCBsb25nIHVpZCwgb3V0IE9iamVjdCBwcm9maWxlKTsKIAot
ICAgICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCByZW1vdmVQcm9maWxlKGluIHVuc2lnbmVk
IGxvbmcgdWlkKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgcmVtb3ZlUHJvZmls
ZShpbiBTdHJpbmcgdHlwZSwgaW4gdW5zaWduZWQgbG9uZyB1aWQpOwogICAgICAgICBbaGFuZGxl
cj1Qcm9maWxlcl0gdm9pZCBjbGVhclByb2ZpbGVzKCk7CiAKLSAgICAgICAgW2hhbmRsZXI9QmFj
a2VuZF0gdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7Ci0gICAgICAgIFtoYW5kbGVyPUJhY2tlbmRd
IHZvaWQgZ2V0UHJvZmlsZXJMb2dMaW5lcyhpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBpblBvc2l0
aW9uLCBvdXQgbG9uZyBvdXRQb3NpdGlvbiwgb3V0IFN0cmluZyBsb2cpOworICAgICAgICBbaGFu
ZGxlcj1Qcm9maWxlcl0gdm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7CiAjZW5kaWYKICAgICAgICAg
W2hhbmRsZXI9QmFja2VuZF0gdm9pZCBzZXRJbmplY3RlZFNjcmlwdFNvdXJjZShpbiBTdHJpbmcg
c2NyaXB0U291cmNlKTsKICAgICAgICAgW2hhbmRsZXI9QmFja2VuZF0gdm9pZCBkaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCwg
aW4gU3RyaW5nIG1ldGhvZE5hbWUsIGluIFN0cmluZyBhcmd1bWVudHMsIG91dCBWYWx1ZSByZXN1
bHQsIG91dCBib29sZWFuIGlzRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKaW5kZXggOTlmNDBhOS4uNzkxZTNhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKQEAgLTY4LDE3ICs2OCw2IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6
ZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYWx3YXlzKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjp0YWtlSGVhcFNuYXBzaG90KCkKLXsKLSAgICBTY3JpcHRQcm9maWxlcjo6dGFr
ZUhlYXBTbmFwc2hvdCgpOwotfQotCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OmdldFByb2ZpbGVy
TG9nTGluZXMobG9uZyBwb3NpdGlvbiwgbG9uZyogb3V0UG9zaXRpb24sIFN0cmluZyogZGF0YSkK
LXsKLSAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIG1ha2UgaW5zcGVjdG9yIGRpc3BhdGNoZXIgcGx1
Z2dhYmxlLCBzbyB0aGF0IGVtYmVkZGVycyBjb3VsZCBjb250cmlidXRlIEFQSXMgaW5zdGVhZCBv
ZiBwb2xsdXRpbmcgdGhlIGNvcmUgb25lCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQzMzU3Ci0gICAgKm91dFBvc2l0aW9uID0gU2NyaXB0UHJvZmlsZXI6
OmdldFByb2ZpbGVyTG9nTGluZXMocG9zaXRpb24sIGRhdGEpOwotfQogI2VuZGlmCiAKIHZvaWQg
SW5zcGVjdG9yQmFja2VuZDo6c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBz
b3VyY2UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKaW5kZXggMjNiMzFhMy4uMWZj
ZWM5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaApAQCAtNjAsOCArNjAsNiBA
QCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICB2b2lkIGVu
YWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKTsKLSAgICB2b2lkIHRha2VIZWFwU25hcHNob3QoKTsK
LSAgICB2b2lkIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZyBwb3NpdGlvbiwgbG9uZyogb3V0UG9z
aXRpb24sIFN0cmluZyogZGF0YSk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2V0SW5qZWN0ZWRTY3Jp
cHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCBhNzM0NjlhLi45MTYxYzNiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcApAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRIZWFwU25hcHNob3QuaCIKICNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CkBAIC01MSw2ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcu
d2Via2l0LnByb2ZpbGVzLnVzZXItaW5pdGlhdGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25z
dCBDUFVQcm9maWxlVHlwZSA9ICJDUFUiOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEhlYXBQ
cm9maWxlVHlwZSA9ICJIRUFQIjsKIAogUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50
PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlcikKIHsKQEAgLTY1LDYgKzY3LDcgQEAgSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb24KICAgICAsIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoZmFsc2UpCiAgICAg
LCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigtMSkKICAgICAsIG1fbmV4dFVz
ZXJJbml0aWF0ZWRQcm9maWxlTnVtYmVyKDEpCisgICAgLCBtX25leHRVc2VySW5pdGlhdGVkSGVh
cFNuYXBzaG90TnVtYmVyKDEpCiB7CiB9CiAKQEAgLTEwNCw2ICsxMDcsMTUgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVByb2ZpbGVI
ZWFkZXIoY29uc3QgU2MKICAgICByZXR1cm4gaGVhZGVyOwogfQogCitQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlU25hcHNob3RIZWFkZXIo
Y29uc3QgU2NyaXB0SGVhcFNuYXBzaG90JiBzbmFwc2hvdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBoZWFkZXIgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGhlYWRl
ci0+c2V0U3RyaW5nKCJ0aXRsZSIsIHNuYXBzaG90LnRpdGxlKCkpOworICAgIGhlYWRlci0+c2V0
TnVtYmVyKCJ1aWQiLCBzbmFwc2hvdC51aWQoKSk7CisgICAgaGVhZGVyLT5zZXRTdHJpbmcoInR5
cGVJZCIsIFN0cmluZyhIZWFwUHJvZmlsZVR5cGUpKTsKKyAgICByZXR1cm4gaGVhZGVyOworfQor
CiB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmRpc2FibGUoKQogewogICAgIGlmICghbV9l
bmFibGVkKQpAQCAtMTM4LDI4ICsxNTAsNDYgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBoZWFkZXJzKQogICAg
IFByb2ZpbGVzTWFwOjppdGVyYXRvciBwcm9maWxlc0VuZCA9IG1fcHJvZmlsZXMuZW5kKCk7CiAg
ICAgZm9yIChQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2ZpbGVzLmJlZ2luKCk7IGl0
ICE9IHByb2ZpbGVzRW5kOyArK2l0KQogICAgICAgICAoKmhlYWRlcnMpLT5wdXNoT2JqZWN0KGNy
ZWF0ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpnZXRQcm9maWxlKHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4qIHByb2ZpbGVPYmplY3QpCi17Ci0gICAgUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9w
cm9maWxlcy5maW5kKHVpZCk7Ci0gICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKLSAg
ICAgICAgKnByb2ZpbGVPYmplY3QgPSBjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKTsK
LSAgICAgICAgKCpwcm9maWxlT2JqZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+
YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKCkpOworICAgIEhlYXBTbmFwc2hvdHNNYXA6Oml0
ZXJhdG9yIHNuYXBzaG90c0VuZCA9IG1fc25hcHNob3RzLmVuZCgpOworICAgIGZvciAoSGVhcFNu
YXBzaG90c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NuYXBzaG90cy5iZWdpbigpOyBpdCAhPSBzbmFw
c2hvdHNFbmQ7ICsraXQpCisgICAgICAgICgqaGVhZGVycyktPnB1c2hPYmplY3QoY3JlYXRlU25h
cHNob3RIZWFkZXIoKml0LT5zZWNvbmQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpnZXRQcm9maWxlKGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCkKK3sKKyAgICBpZiAodHlwZSA9PSBDUFVQ
cm9maWxlVHlwZSkgeworICAgICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2Zp
bGVzLmZpbmQodWlkKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fcHJvZmlsZXMuZW5kKCkpIHsKKyAg
ICAgICAgICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJvZmlsZUhlYWRlcigqaXQtPnNlY29u
ZCk7CisgICAgICAgICAgICAoKnByb2ZpbGVPYmplY3QpLT5zZXRPYmplY3QoImhlYWQiLCBpdC0+
c2Vjb25kLT5idWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gSGVhcFByb2ZpbGVUeXBlKSB7CisgICAgICAgIEhlYXBTbmFwc2hv
dHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFwc2hvdHMuZmluZCh1aWQpOworICAgICAgICBpZiAo
aXQgIT0gbV9zbmFwc2hvdHMuZW5kKCkpIHsKKyAgICAgICAgICAgICpwcm9maWxlT2JqZWN0ID0g
Y3JlYXRlU25hcHNob3RIZWFkZXIoKml0LT5zZWNvbmQpOworICAgICAgICAgICAgKCpwcm9maWxl
T2JqZWN0KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmpl
Y3RGb3JIZWFkKCkpOworICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OnJlbW92ZVByb2ZpbGUodW5zaWduZWQgdWlkKQordm9pZCBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpyZW1vdmVQcm9maWxlKGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlk
KQogewotICAgIGlmIChtX3Byb2ZpbGVzLmNvbnRhaW5zKHVpZCkpCi0gICAgICAgIG1fcHJvZmls
ZXMucmVtb3ZlKHVpZCk7CisgICAgaWYgKHR5cGUgPT0gQ1BVUHJvZmlsZVR5cGUpIHsKKyAgICAg
ICAgaWYgKG1fcHJvZmlsZXMuY29udGFpbnModWlkKSkKKyAgICAgICAgICAgIG1fcHJvZmlsZXMu
cmVtb3ZlKHVpZCk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlwZSkgewor
ICAgICAgICBpZiAobV9zbmFwc2hvdHMuY29udGFpbnModWlkKSkKKyAgICAgICAgICAgIG1fc25h
cHNob3RzLnJlbW92ZSh1aWQpOworICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpyZXNldFN0YXRlKCkKIHsKICAgICBtX3Byb2ZpbGVzLmNsZWFyKCk7CisgICAgbV9zbmFw
c2hvdHMuY2xlYXIoKTsKICAgICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9
IDE7CiAgICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOworICAgIG1fbmV4
dFVzZXJJbml0aWF0ZWRIZWFwU25hcHNob3ROdW1iZXIgPSAxOwogICAgIGlmIChtX2Zyb250ZW5k
KQogICAgICAgICBtX2Zyb250ZW5kLT5yZXNldFByb2ZpbGVzUGFuZWwoKTsKIH0KQEAgLTE5OSw2
ICsyMjksMTcgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRl
ZFByb2ZpbGluZygpCiAgICAgdG9nZ2xlUmVjb3JkQnV0dG9uKGZhbHNlKTsKIH0KIAordm9pZCBJ
bnNwZWN0b3JQcm9maWxlckFnZW50Ojp0YWtlSGVhcFNuYXBzaG90KCkKK3sKKyAgICBTdHJpbmcg
dGl0bGUgPSBTdHJpbmc6OmZvcm1hdCgiJXMuJWQiLCBVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUs
IG1fbmV4dFVzZXJJbml0aWF0ZWRIZWFwU25hcHNob3ROdW1iZXIrKyk7CisgICAgUmVmUHRyPFNj
cmlwdEhlYXBTbmFwc2hvdD4gc25hcHNob3QgPSBTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFw
c2hvdCh0aXRsZSk7CisgICAgaWYgKHNuYXBzaG90KSB7CisgICAgICAgIG1fc25hcHNob3RzLmFk
ZChzbmFwc2hvdC0+dWlkKCksIHNuYXBzaG90KTsKKyAgICAgICAgaWYgKG1fZnJvbnRlbmQpCisg
ICAgICAgICAgICBtX2Zyb250ZW5kLT5hZGRQcm9maWxlSGVhZGVyKGNyZWF0ZVNuYXBzaG90SGVh
ZGVyKCpzbmFwc2hvdCkpOworICAgIH0KK30KKwogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50
Ojp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZykKIHsKICAgICBpZiAobV9mcm9u
dGVuZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaAppbmRleCA5
NTkzZWJhLi40MjFlZmIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVj
dG9yT2JqZWN0OworY2xhc3MgU2NyaXB0SGVhcFNuYXBzaG90OwogY2xhc3MgU2NyaXB0UHJvZmls
ZTsKIAogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CkBAIC02MCwyMiArNjEsMjUgQEAgcHVibGljOgogICAgIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJu
IG1fZW5hYmxlZDsgfQogICAgIFN0cmluZyBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51bWJlciA9IGZhbHNlKTsKICAgICB2b2lkIGdldFBy
b2ZpbGVIZWFkZXJzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGhlYWRlcnMpOwotICAgIHZvaWQg
Z2V0UHJvZmlsZSh1bnNpZ25lZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxl
T2JqZWN0KTsKKyAgICB2b2lkIGdldFByb2ZpbGUoY29uc3QgU3RyaW5nJiB0eXBlLCB1bnNpZ25l
ZCB1aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KTsKICAgICBib29s
IGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSB7IHJldHVybiBtX3JlY29yZGluZ1Vz
ZXJJbml0aWF0ZWRQcm9maWxlOyB9Ci0gICAgdm9pZCByZW1vdmVQcm9maWxlKHVuc2lnbmVkIHVp
ZCk7CisgICAgdm9pZCByZW1vdmVQcm9maWxlKGNvbnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQg
dWlkKTsKICAgICB2b2lkIHJlc2V0U3RhdGUoKTsKICAgICB2b2lkIHNldEZyb250ZW5kKEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCkgeyBtX2Zyb250ZW5kID0gZnJvbnRlbmQ7IH0KICAgICB2
b2lkIHN0YXJ0UHJvZmlsaW5nKCkgeyBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQog
ICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CiAgICAgdm9pZCBzdG9wUHJv
ZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9CiAgICAgdm9pZCBzdG9w
VXNlckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdCgpOwog
ICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9maWxpbmcpOwogCiBwcml2YXRl
OgogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxTY3JpcHRQcm9maWxl
PiA+IFByb2ZpbGVzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0
cjxTY3JpcHRIZWFwU25hcHNob3Q+ID4gSGVhcFNuYXBzaG90c01hcDsKIAogICAgIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciopOwogICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHBy
b2ZpbGUpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTbmFwc2hvdEhl
YWRlcihjb25zdCBTY3JpcHRIZWFwU25hcHNob3QmIHNuYXBzaG90KTsKIAogICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICBJbnNwZWN0b3JGcm9udGVu
ZCogbV9mcm9udGVuZDsKQEAgLTgzLDcgKzg3LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVj
b3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGU7CiAgICAgaW50IG1fY3VycmVudFVzZXJJbml0aWF0
ZWRQcm9maWxlTnVtYmVyOwogICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9maWxl
TnVtYmVyOworICAgIHVuc2lnbmVkIG1fbmV4dFVzZXJJbml0aWF0ZWRIZWFwU25hcHNob3ROdW1i
ZXI7CiAgICAgUHJvZmlsZXNNYXAgbV9wcm9maWxlczsKKyAgICBIZWFwU25hcHNob3RzTWFwIG1f
c25hcHNob3RzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Byb2ZpbGVWaWV3LmpzCmluZGV4IDgxN2YxZjUuLmJhNDJmMGMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlVmlldy5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZVZpZXcuanMKQEAgLTk1LDcgKzk1LDcg
QEAgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3ID0gZnVuY3Rpb24ocHJvZmlsZSkKICAgICB9
CiAKICAgICB2YXIgY2FsbElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAocHJvZmlsZUNh
bGxiYWNrKTsKLSAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFByb2ZpbGUoY2FsbElkLCB0aGlzLnBy
b2ZpbGUudWlkKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFByb2ZpbGUoY2FsbElkLCB0aGlz
LnByb2ZpbGUudHlwZUlkLCB0aGlzLnByb2ZpbGUudWlkKTsKIH0KIAogV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVWaWV3LnByb3RvdHlwZSA9IHsKQEAgLTYxMSw3ICs2MTEsNyBAQCBXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAgICAgY3JlYXRlU2lkZWJhclRyZWVF
bGVtZW50Rm9yUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQocHJvZmlsZSk7Cisg
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQo
cHJvZmlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm9maWxlICVkIiksICJwcm9maWxlLXNp
ZGViYXItdHJlZS1pdGVtIik7CiAgICAgfSwKIAogICAgIGNyZWF0ZVZpZXc6IGZ1bmN0aW9uKHBy
b2ZpbGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQ
YW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzCmlu
ZGV4IGU1ODc3ZDkuLjRjNDc3YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Qcm9maWxlc1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Q
cm9maWxlc1BhbmVsLmpzCkBAIC0zMjYsNiArMzI2LDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy53ZWxjb21lVmlldy5oaWRlKCk7
CiAgICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZVZpZXcpCiAgICAgICAgICAgICAgICAgdGhp
cy5zaG93UHJvZmlsZShwcm9maWxlKTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJwcm9maWxlIGFkZGVkIik7CiAgICAgICAgIH0KICAgICB9LAogCkBAIC0zNTAs
NyArMzUxLDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAgICBzaWRlYmFyUGFyZW50LnJlbW92ZUNoaWxkKHByb2ZpbGUuX3Byb2ZpbGVzVHJlZUVsZW1l
bnQpOwogCiAgICAgICAgIGlmICghcHJvZmlsZS5pc1RlbXBvcmFyeSkKLSAgICAgICAgICAgIElu
c3BlY3RvckJhY2tlbmQucmVtb3ZlUHJvZmlsZShwcm9maWxlLnVpZCk7CisgICAgICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnJlbW92ZVByb2ZpbGUocHJvZmlsZS50eXBlSWQsIHByb2ZpbGUudWlk
KTsKIAogICAgICAgICAvLyBObyBvdGhlciBpdGVtIHdpbGwgYmUgc2VsZWN0ZWQgaWYgdGhlcmUg
YXJlbid0IGFueSBvdGhlciBwcm9maWxlcywgc28KICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQg
dmlldyBnZXRzIGNsZWFyZWQgd2hlbiB0aGUgbGFzdCBwcm9maWxlIGlzIHJlbW92ZWQuCkBAIC0z
ODEsNiArMzgyLDI3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHRoaXMucHJvZmlsZVZpZXdTdGF0dXNCYXJJdGVtc0NvbnRhaW5lci5hcHBl
bmRDaGlsZChzdGF0dXNCYXJJdGVtc1tpXSk7CiAgICAgfSwKIAorICAgIGdldFByb2ZpbGVzOiBm
dW5jdGlvbih0eXBlSWQpCisgICAgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAg
IHZhciBwcm9maWxlc0NvdW50ID0gdGhpcy5fcHJvZmlsZXMubGVuZ3RoOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHByb2ZpbGVzQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9wcm9maWxlc1tpXS50eXBlSWQgPT0gdHlwZUlkKQorICAgICAgICAgICAgICAgIHJlc3VsdC5w
dXNoKHRoaXMuX3Byb2ZpbGVzW2ldKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAor
CisgICAgdXBkYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7CisgICAgICAgIHZh
ciBwcm9maWxlc0NvdW50ID0gdGhpcy5fcHJvZmlsZXMubGVuZ3RoOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHByb2ZpbGVzQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGlmICh0aGlzLl9w
cm9maWxlc1tpXS50eXBlSWQgPT0gcHJvZmlsZS50eXBlSWQKKyAgICAgICAgICAgICAgICAmJiB0
aGlzLl9wcm9maWxlc1tpXS51aWQgPT0gcHJvZmlsZS51aWQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9wcm9maWxlc1tpXSA9IHByb2ZpbGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgfSwKKwogICAgIHNob3dWaWV3OiBmdW5jdGlvbih2aWV3KQogICAgIHsK
ICAgICAgICAgdGhpcy5zaG93UHJvZmlsZSh2aWV3LnByb2ZpbGUpOwpAQCAtNTQ2LDE0ICs1Njgs
MTUgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlID0gewogCiBXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBh
bmVsLnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1lbnQg
PSBmdW5jdGlvbihwcm9maWxlKQorV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVsZW1l
bnQgPSBmdW5jdGlvbihwcm9maWxlLCB0aXRsZUZvcm1hdCwgY2xhc3NOYW1lKQogewogICAgIHRo
aXMucHJvZmlsZSA9IHByb2ZpbGU7CisgICAgdGhpcy5fdGl0bGVGb3JtYXQgPSB0aXRsZUZvcm1h
dDsKIAogICAgIGlmICh0aGlzLnByb2ZpbGUudGl0bGUuaW5kZXhPZihVc2VySW5pdGlhdGVkUHJv
ZmlsZU5hbWUpID09PSAwKQogICAgICAgICB0aGlzLl9wcm9maWxlTnVtYmVyID0gdGhpcy5wcm9m
aWxlLnRpdGxlLnN1YnN0cmluZyhVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUubGVuZ3RoICsgMSk7
CiAKLSAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgInByb2Zp
bGUtc2lkZWJhci10cmVlLWl0ZW0iLCAiIiwgIiIsIHByb2ZpbGUsIGZhbHNlKTsKKyAgICBXZWJJ
bnNwZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgY2xhc3NOYW1lLCAiIiwgIiIs
IHByb2ZpbGUsIGZhbHNlKTsKIAogICAgIHRoaXMucmVmcmVzaFRpdGxlcygpOwogfQpAQCAtNTc1
LDcgKzU5OCw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX21haW5UaXRsZSkKICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9tYWluVGl0bGU7CiAgICAgICAgIGlmICh0aGlzLnByb2ZpbGUudGl0bGUuaW5kZXhP
ZihVc2VySW5pdGlhdGVkUHJvZmlsZU5hbWUpID09PSAwKQotICAgICAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUHJvZmlsZSAlZCIsIHRoaXMuX3Byb2ZpbGVOdW1iZXIpOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZyh0aGlzLl90aXRsZUZvcm1h
dCwgdGhpcy5fcHJvZmlsZU51bWJlcik7CiAgICAgICAgIHJldHVybiB0aGlzLnByb2ZpbGUudGl0
bGU7CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDVmNjA2NC4uZWIwNWZmMCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTAtMDgtMjQgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdh
bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdG9yZSBoZWFwIHNuYXBzaG90cyBpbiBJbnNwZWN0
b3JQcm9maWxlckFnZW50LgorCisgICAgICAgIENoYW5nZSB0aGUgd2F5IGhlYXAgc25hcHNob3Rz
IGFyZSB0cmFuc3BvcnRlZCB0byBJbnNwZWN0b3IKKyAgICAgICAgdG8gYmUgYWxpZ25lZCB3aXRo
IENQVSBwcm9maWxlcy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQ1MzEKKworICAgICAgICAqIERFUFM6CisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogc3JjL2pzL0RldlRvb2xzLmpzOgorICAgICAgICAoZGV2dG9vbHMuVG9vbHNB
Z2VudCk6CisgICAgICAgICgpOgorICAgICAgICAqIHNyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnJlc2V0Q29tcGxldGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb2ZpbGVDYWxsYmFj
ayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2NoYW5nZUJhc2UucmVzZXRD
b21wbGV0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90
eXBlLl9jaGFuZ2VCYXNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3
LnByb3RvdHlwZS5fZ2V0UHJvZmlsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFZpZXcucHJvdG90eXBlLl9sb2FkUHJvZmlsZS5sb2FkZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2xvYWRQcm9maWxlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcHJlcGFy
ZVByb2ZpbGUubWVyZ2VSZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFZpZXcucHJvdG90eXBlLl9wcmVwYXJlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX3Jlc2V0RGF0YUdyaWRMaXN0LnByb2ZpbGVM
b2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBl
Ll9yZXNldERhdGFHcmlkTGlzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUJhc2VPcHRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmNyZWF0
ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGUpOgorICAgICAgICAqIHNyYy9qcy9Qcm9maWxl
ckFnZW50LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9qcy9Qcm9maWxlclByb2Nlc3Nvci5q
czogUmVtb3ZlZC4KKwogMjAxMC0wOC0yNCAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL0RFUFMgYi9XZWJLaXQvY2hyb21pdW0vREVQUwppbmRleCAzMTIzYTRi
Li5lMTUwMDFlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vREVQUworKysgYi9XZWJLaXQv
Y2hyb21pdW0vREVQUwpAQCAtMzIsNyArMzIsNyBAQAogCiB2YXJzID0gewogICAnY2hyb21pdW1f
c3ZuJzogJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3N2bi90cnVuay9zcmMnLAotICAnY2hyb21p
dW1fcmV2JzogJzU3MTQ1JywKKyAgJ2Nocm9taXVtX3Jldic6ICc1NzE5MCcsCiB9CiAKIGRlcHMg
PSB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggYjQ1ZTNlNy4uZTFkYjRjMCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtMzMsOCArMzMsNiBAQAogICAgICAgICAjIExpc3Qgb2YgRGV2VG9vbHMgc291cmNlIGZp
bGVzLCBvcmRlcmVkIGJ5IGRlcGVuZGVuY2llcy4gSXQgaXMgdXNlZCBib3RoCiAgICAgICAgICMg
Zm9yIGNvcHlpbmcgdGhlbSB0byByZXNvdXJjZSBkaXIsIGFuZCBmb3IgZ2VuZXJhdGluZyAnZGV2
dG9vbHMuaHRtbCcgZmlsZS4KICAgICAgICAgJ2RldnRvb2xzX2pzX2ZpbGVzJzogWwotICAgICAg
ICAgICAgJ3NyYy9qcy9Qcm9maWxlckFnZW50LmpzJywKLSAgICAgICAgICAgICdzcmMvanMvUHJv
ZmlsZXJQcm9jZXNzb3IuanMnLAogICAgICAgICAgICAgJ3NyYy9qcy9IZWFwUHJvZmlsZXJQYW5l
bC5qcycsCiAgICAgICAgICAgICAnc3JjL2pzL0RldlRvb2xzLmpzJywKICAgICAgICAgICAgICdz
cmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcycsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL2pzL0RldlRvb2xzLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwpp
bmRleCBlM2UwMjA0Li4xNzA4ZjM0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pz
L0RldlRvb2xzLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKQEAg
LTM2LDIxICszNiwxMCBAQAogICovCiBkZXZ0b29scy5Ub29sc0FnZW50ID0gZnVuY3Rpb24oKQog
ewotICAgIHRoaXMucHJvZmlsZXJBZ2VudF8gPSBuZXcgZGV2dG9vbHMuUHJvZmlsZXJBZ2VudCgp
OwogfTsKIAogCiAvKioKLSAqIEByZXR1cm4ge2RldnRvb2xzLlByb2ZpbGVyQWdlbnR9IFByb2Zp
bGVyIGFnZW50IGluc3RhbmNlLgotICovCi1kZXZ0b29scy5Ub29sc0FnZW50LnByb3RvdHlwZS5n
ZXRQcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiB0aGlzLnByb2ZpbGVy
QWdlbnRfOwotfTsKLQotCi0KLS8qKgogICogR2xvYmFsIGluc3RhbmNlIG9mIHRoZSB0b29scyBh
Z2VudC4KICAqIEB0eXBlIHtkZXZ0b29scy5Ub29sc0FnZW50fQogICovCkBAIC05Myw3ICs4Miw2
IEBAIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBkZXZ0b29s
cy5kb21Db250ZW50TG9hZGVkLCBmYWxzZSk7CiAgICAgdmFyIG9sZFNob3cgPSBXZWJJbnNwZWN0
b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuc2hvdzsKICAgICBXZWJJbnNwZWN0b3IuUHJvZmls
ZXNQYW5lbC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGRldnRv
b2xzLnRvb2xzLmdldFByb2ZpbGVyQWdlbnQoKS5pbml0aWFsaXplUHJvZmlsaW5nKCk7CiAgICAg
ICAgIHRoaXMuZW5hYmxlVG9nZ2xlQnV0dG9uLnZpc2libGUgPSBmYWxzZTsKICAgICAgICAgb2xk
U2hvdy5jYWxsKHRoaXMpOwogICAgICAgICAvLyBTaG93IGlzIGNhbGxlZCBvbiBldmVyeSBzaG93
IGV2ZW50IG9mIGEgcGFuZWwsIHNvCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pz
L0hlYXBQcm9maWxlclBhbmVsLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9IZWFwUHJvZmls
ZXJQYW5lbC5qcwppbmRleCBiY2IwMDhmLi4zM2MzYjEzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL2pzL0hlYXBQcm9maWxlclBhbmVsLmpzCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvSGVhcFByb2ZpbGVyUGFuZWwuanMKQEAgLTMyLDI0ICszMiw2IEBACiAgKiBAZmlsZW92
ZXJ2aWV3IEhlYXAgcHJvZmlsZXIgcGFuZWwgaW1wbGVtZW50YXRpb24uCiAgKi8KIAotV2ViSW5z
cGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmFkZFNuYXBzaG90ID0gZnVuY3Rpb24oc25h
cHNob3QpIHsKLSAgICBzbmFwc2hvdC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU25h
cHNob3QgJWQiLCBzbmFwc2hvdC5udW1iZXIpOwotICAgIHNuYXBzaG90LnR5cGVJZCA9IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQ7Ci0KLSAgICB2YXIgc25hcHNo
b3RzID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnNuYXBzaG90czsKLSAg
ICBzbmFwc2hvdHMucHVzaChzbmFwc2hvdCk7Ci0KLSAgICBzbmFwc2hvdC5saXN0SW5kZXggPSBz
bmFwc2hvdHMubGVuZ3RoIC0gMTsKLQotICAgIGlmIChXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZSkK
LSAgICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5UeXBlSWQsIHNuYXBzaG90KTsKLSAgICBlbHNlCi0gICAgICAgIHRoaXMuYWRk
UHJvZmlsZUhlYWRlcihzbmFwc2hvdCk7Ci0KLSAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycygic25hcHNob3QgYWRkZWQiKTsKLX0KLQotCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKIHsKICAgICBXZWJJbnNwZWN0b3IuVmll
dy5jYWxsKHRoaXMpOwpAQCAtNTcsNyArMzksNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKICAgICB0aGlzLmVsZW1lbnQuYWRkU3R5
bGVDbGFzcygiaGVhcC1zbmFwc2hvdC12aWV3Iik7CiAKICAgICB0aGlzLnBhcmVudCA9IHBhcmVu
dDsKLSAgICB0aGlzLnBhcmVudC5hZGRFdmVudExpc3RlbmVyKCJzbmFwc2hvdCBhZGRlZCIsIHRo
aXMuX3VwZGF0ZUJhc2VPcHRpb25zLCB0aGlzKTsKKyAgICB0aGlzLnBhcmVudC5hZGRFdmVudExp
c3RlbmVyKCJwcm9maWxlIGFkZGVkIiwgdGhpcy5fdXBkYXRlQmFzZU9wdGlvbnMsIHRoaXMpOwog
CiAgICAgdGhpcy5zaG93Q291bnRBc1BlcmNlbnQgPSBmYWxzZTsKICAgICB0aGlzLnNob3dTaXpl
QXNQZXJjZW50ID0gZmFsc2U7CkBAIC0xMDksMTggKzkxLDMyIEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFyZW50LCBwcm9maWxlKQogICAgIHRoaXMuYmFzZVNl
bGVjdEVsZW1lbnQuY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRlbSI7CiAgICAgdGhpcy5iYXNl
U2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9jaGFuZ2VCYXNl
LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl91cGRhdGVCYXNlT3B0aW9ucygpOwotICAg
IGlmICh0aGlzLnByb2ZpbGUubGlzdEluZGV4ID4gMCkKLSAgICAgICAgdGhpcy5iYXNlU2VsZWN0
RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gdGhpcy5wcm9maWxlLmxpc3RJbmRleCAtIDE7Ci0gICAg
ZWxzZQotICAgICAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSB0aGlz
LnByb2ZpbGUubGlzdEluZGV4OwotICAgIHRoaXMuX3Jlc2V0RGF0YUdyaWRMaXN0KCk7CiAKICAg
ICB0aGlzLnBlcmNlbnRCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigi
IiwgInBlcmNlbnQtdGltZS1zdGF0dXMtYmFyLWl0ZW0gc3RhdHVzLWJhci1pdGVtIik7CiAgICAg
dGhpcy5wZXJjZW50QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcGVyY2Vu
dENsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCi0gICAgdGhpcy5yZWZyZXNoKCk7Ci0KLSAg
ICB0aGlzLl91cGRhdGVQZXJjZW50QnV0dG9uKCk7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
IGZ1bmN0aW9uIHJlc2V0Q29tcGxldGVkKCkKKyAgICB7CisgICAgICAgIHNlbGYucmVmcmVzaCgp
OworICAgICAgICBzZWxmLl91cGRhdGVQZXJjZW50QnV0dG9uKCk7CisgICAgfQorICAgIGZ1bmN0
aW9uIHByb2ZpbGVDYWxsYmFjayhwcm9maWxlKQorICAgIHsKKyAgICAgICAgdmFyIGxpc3QgPSBz
ZWxmLl9nZXRQcm9maWxlcygpOworICAgICAgICB2YXIgcHJvZmlsZUluZGV4OworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAobGlz
dFtpXS51aWQgPT0gcHJvZmlsZS51aWQpIHsKKyAgICAgICAgICAgICAgICBwcm9maWxlSW5kZXgg
PSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBpZiAo
cHJvZmlsZUluZGV4ID4gMCkKKyAgICAgICAgICAgIHNlbGYuYmFzZVNlbGVjdEVsZW1lbnQuc2Vs
ZWN0ZWRJbmRleCA9IHByb2ZpbGVJbmRleCAtIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHNlbGYuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHByb2ZpbGVJbmRleDsKKyAg
ICAgICAgc2VsZi5fcmVzZXREYXRhR3JpZExpc3QocmVzZXRDb21wbGV0ZWQpOworICAgIH0KKyAg
ICB0aGlzLl9sb2FkUHJvZmlsZSh0aGlzLnByb2ZpbGUsIHByb2ZpbGVDYWxsYmFjayk7CiB9Owog
CiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CkBAIC0yOTUsMjAg
KzI5MSwyMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAg
ICAgfSwKIAogICAgIF9jaGFuZ2VCYXNlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHRoaXMu
YmFzZVNuYXBzaG90ID09PSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuc25h
cHNob3RzW3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleF0pCisgICAgICAgIGlm
ICh0aGlzLmJhc2VTbmFwc2hvdC51aWQgPT0gdGhpcy5fZ2V0UHJvZmlsZXMoKVt0aGlzLmJhc2VT
ZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdLnVpZCkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICB0aGlzLl9yZXNldERhdGFHcmlkTGlzdCgpOwotICAgICAgICB0aGlzLnJlZnJlc2go
KTsKLQotICAgICAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXJ5IHx8ICF0aGlzLl9zZWFyY2hGaW5p
c2hlZENhbGxiYWNrIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRzKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIC8vIFRoZSBjdXJyZW50IHNlYXJjaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQg
YWdhaW4uIEZpcnN0IG5lZ2F0ZSBvdXQgcHJldmlvdXMgbWF0Y2gKLSAgICAgICAgLy8gY291bnQg
YnkgY2FsbGluZyB0aGUgc2VhcmNoIGZpbmlzaGVkIGNhbGxiYWNrIHdpdGggYSBuZWdhdGl2ZSBu
dW1iZXIgb2YgbWF0Y2hlcy4KLSAgICAgICAgLy8gVGhlbiBwZXJmb3JtIHRoZSBzZWFyY2ggYWdh
aW4gd2l0aCB0aGUgc2FtZSBxdWVyeSBhbmQgY2FsbGJhY2suCi0gICAgICAgIHRoaXMuX3NlYXJj
aEZpbmlzaGVkQ2FsbGJhY2sodGhpcywgLXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKLSAg
ICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLl9zZWFyY2hG
aW5pc2hlZENhbGxiYWNrKTsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5j
dGlvbiByZXNldENvbXBsZXRlZCgpIHsKKyAgICAgICAgICAgIHNlbGYucmVmcmVzaCgpOworICAg
ICAKKyAgICAgICAgICAgIGlmICghc2VsZi5jdXJyZW50UXVlcnkgfHwgIXNlbGYuX3NlYXJjaEZp
bmlzaGVkQ2FsbGJhY2sgfHwgIXNlbGYuX3NlYXJjaFJlc3VsdHMpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IHNlYXJjaCBuZWVkcyB0
byBiZSBwZXJmb3JtZWQgYWdhaW4uIEZpcnN0IG5lZ2F0ZSBvdXQgcHJldmlvdXMgbWF0Y2gKKyAg
ICAgICAgICAgIC8vIGNvdW50IGJ5IGNhbGxpbmcgdGhlIHNlYXJjaCBmaW5pc2hlZCBjYWxsYmFj
ayB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyIG9mIG1hdGNoZXMuCisgICAgICAgICAgICAvLyBUaGVu
IHBlcmZvcm0gdGhlIHNlYXJjaCBhZ2FpbiB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFuZCBjYWxsYmFj
ay4KKyAgICAgICAgICAgIHNlbGYuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2soc2VsZiwgLXNlbGYu
X3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKKyAgICAgICAgICAgIHNlbGYucGVyZm9ybVNlYXJjaChz
ZWxmLmN1cnJlbnRRdWVyeSwgc2VsZi5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QocmVzZXRDb21wbGV0ZWQpOwogICAg
IH0sCiAKICAgICBfY3JlYXRlU25hcHNob3REYXRhR3JpZExpc3Q6IGZ1bmN0aW9uKCkKQEAgLTMy
MCw2ICszMTksMzEgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3REYXRhR3JpZExpc3Q7CiAgICAgfSwKIAor
ICAgIF9nZXRQcm9maWxlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuZ2V0UHJvZmlsZXMoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7CisgICAgfSwKKworICAgIF9sb2FkUHJvZmlsZTogZnVu
Y3Rpb24ocHJvZmlsZSwgY2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAocHJvZmlsZS5fbG9h
ZGVkKSB7CisgICAgICAgICAgICBjYWxsYmFjayhwcm9maWxlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9u
IGxvYWRlZENhbGxiYWNrKGxvYWRlZFNuYXBzaG90KSB7CisgICAgICAgICAgICBwcm9maWxlLmNo
aWxkcmVuID0gbG9hZGVkU25hcHNob3QuaGVhZC5jaGlsZHJlbjsKKyAgICAgICAgICAgIHByb2Zp
bGUuZW50cmllcyA9IGxvYWRlZFNuYXBzaG90LmhlYWQuZW50cmllczsKKyAgICAgICAgICAgIHBy
b2ZpbGUubG93bGV2ZWxzID0gbG9hZGVkU25hcHNob3QuaGVhZC5sb3dsZXZlbHM7CisgICAgICAg
ICAgICBzZWxmLl9wcmVwYXJlUHJvZmlsZShwcm9maWxlKTsKKyAgICAgICAgICAgIHByb2ZpbGUu
X2xvYWRlZCA9IHRydWU7CisgICAgICAgICAgICBzZWxmLnBhcmVudC51cGRhdGVQcm9maWxlKHBy
b2ZpbGUpOworICAgICAgICAgICAgY2FsbGJhY2socHJvZmlsZSk7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGNhbGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGxvYWRlZENhbGxiYWNr
KTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRQcm9maWxlKGNhbGxJZCwgcHJvZmlsZS50
eXBlSWQsIHByb2ZpbGUudWlkKTsKKyAgICB9LAorCiAgICAgX21vdXNlRG93bkluRGF0YUdyaWQ6
IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA8IDIpCkBA
IC0zNTksMTQgKzM4Myw1MSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMucmVmcmVzaFNob3dBc1BlcmNlbnRzKCk7CiAgICAgfSwKIAot
ICAgIF9yZXNldERhdGFHcmlkTGlzdDogZnVuY3Rpb24oKQorICAgIF9wcmVwYXJlUHJvZmlsZTog
ZnVuY3Rpb24ocHJvZmlsZSkgeworICAgICAgICBmb3IgKHZhciBwcm9maWxlRW50cnkgaW4gcHJv
ZmlsZS5lbnRyaWVzKSB7CisgICAgICAgICAgICBwcm9maWxlLmVudHJpZXNbcHJvZmlsZUVudHJ5
XS5yZXRhaW5lcnMgPSB7fTsKKyAgICAgICAgfQorICAgICAgICBwcm9maWxlLmNsdXN0ZXJzID0g
e307CisgICAgIAorICAgICAgICBmb3IgKHZhciBhZGRyIGluIHByb2ZpbGUuY2hpbGRyZW4pIHsK
KyAgICAgICAgICAgIHZhciByZXRhaW5lciA9IHByb2ZpbGUuY2hpbGRyZW5bYWRkcl07CisgICAg
ICAgICAgICB2YXIgcmV0YWluZXJJZCA9IHJldGFpbmVyLmNvbnMgKyAnOicgKyBhZGRyOworICAg
ICAgICAgICAgZm9yICh2YXIgY2hpbGRBZGRyIGluIHJldGFpbmVyKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkQWRkciA9PSAnY29ucycpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZh
ciBpdGVtID0gcmV0YWluZXJbY2hpbGRBZGRyXTsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbUlk
ID0gaXRlbS5jb25zICsgJzonICsgY2hpbGRBZGRyOworICAgICAgICAgICAgICAgIGlmICgoaXRl
bS5jb25zID09ICdPYmplY3QnIHx8IGl0ZW0uY29ucyA9PSAnQXJyYXknKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIShpdGVtSWQgaW4gcHJvZmlsZS5jbHVzdGVycykpCisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9maWxlLmNsdXN0ZXJzW2l0ZW1JZF0gPSB7IGNvbnM6IGl0ZW1JZCwg
cmV0YWluZXJzOiB7fSB9OworICAgICAgICAgICAgICAgICAgICBtZXJnZVJldGFpbmVycyhwcm9m
aWxlLmNsdXN0ZXJzW2l0ZW1JZF0sIGl0ZW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBtZXJnZVJldGFpbmVycyhwcm9maWxlLmVudHJpZXNbaXRlbS5jb25zXSwgaXRlbSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgCisgICAgICAgIGZ1bmN0aW9uIG1lcmdl
UmV0YWluZXJzKGVudHJ5LCBpdGVtKSB7CisgICAgICAgICAgICBpZiAoIShyZXRhaW5lci5jb25z
IGluIGVudHJ5LnJldGFpbmVycykpCisgICAgICAgICAgICAgICBlbnRyeS5yZXRhaW5lcnNbcmV0
YWluZXIuY29uc10gPSB7IGNvbnM6IHJldGFpbmVyLmNvbnMsIGNvdW50OiAwLCBjbHVzdGVyczog
e30gfTsKKyAgICAgICAgICAgIHZhciByZXRhaW5lckVudHJ5ID0gZW50cnkucmV0YWluZXJzW3Jl
dGFpbmVyLmNvbnNdOworICAgICAgICAgICAgcmV0YWluZXJFbnRyeS5jb3VudCArPSBpdGVtLmNv
dW50OworICAgICAgICAgICAgaWYgKHJldGFpbmVyLmNvbnMgPT0gJ09iamVjdCcgfHwgcmV0YWlu
ZXIuY29ucyA9PSAnQXJyYXknKQorICAgICAgICAgICAgICAgIHJldGFpbmVyRW50cnkuY2x1c3Rl
cnNbcmV0YWluZXJJZF0gPSB0cnVlOworICAgICAgICB9CisgICAgfSwKKworICAgIF9yZXNldERh
dGFHcmlkTGlzdDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICB0aGlzLmJhc2VT
bmFwc2hvdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5zbmFwc2hvdHNb
dGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XTsKLSAgICAgICAgdmFyIGxhc3RD
b21wYXJhdG9yID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0
eUNvbXBhcmF0b3IoInNpemUiLCBmYWxzZSk7Ci0gICAgICAgIGlmICh0aGlzLnNuYXBzaG90RGF0
YUdyaWRMaXN0KQotICAgICAgICAgICAgbGFzdENvbXBhcmF0b3IgPSB0aGlzLnNuYXBzaG90RGF0
YUdyaWRMaXN0Lmxhc3RDb21wYXJhdG9yOwotICAgICAgICB0aGlzLnNuYXBzaG90RGF0YUdyaWRM
aXN0ID0gdGhpcy5fY3JlYXRlU25hcHNob3REYXRhR3JpZExpc3QoKTsKLSAgICAgICAgdGhpcy5z
bmFwc2hvdERhdGFHcmlkTGlzdC5zb3J0KGxhc3RDb21wYXJhdG9yLCB0cnVlKTsKKyAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5jdGlvbiBwcm9maWxlTG9hZGVkKHByb2ZpbGUp
IHsKKyAgICAgICAgICAgIHNlbGYuYmFzZVNuYXBzaG90ID0gcHJvZmlsZTsKKyAgICAgICAgICAg
IHZhciBsYXN0Q29tcGFyYXRvciA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExp
c3QucHJvcGVydHlDb21wYXJhdG9yKCJzaXplIiwgZmFsc2UpOworICAgICAgICAgICAgaWYgKHNl
bGYuc25hcHNob3REYXRhR3JpZExpc3QpCisgICAgICAgICAgICAgICAgIGxhc3RDb21wYXJhdG9y
ID0gc2VsZi5zbmFwc2hvdERhdGFHcmlkTGlzdC5sYXN0Q29tcGFyYXRvcjsKKyAgICAgICAgICAg
IHNlbGYuc25hcHNob3REYXRhR3JpZExpc3QgPSBzZWxmLl9jcmVhdGVTbmFwc2hvdERhdGFHcmlk
TGlzdCgpOworICAgICAgICAgICAgc2VsZi5zbmFwc2hvdERhdGFHcmlkTGlzdC5zb3J0KGxhc3RD
b21wYXJhdG9yLCB0cnVlKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5fbG9hZFByb2ZpbGUodGhpcy5fZ2V0UHJvZmlsZXMoKVt0aGlzLmJhc2VTZWxl
Y3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdLCBwcm9maWxlTG9hZGVkKTsKICAgICB9LAogCiAgICAg
X3NvcnREYXRhOiBmdW5jdGlvbigpCkBAIC0zODgsMTQgKzQ0OSwxNyBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfdXBkYXRlQmFzZU9wdGlvbnM6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciBsaXN0ID0gV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb2ZpbGVUeXBlLnNuYXBzaG90czsKKyAgICAgICAgdmFyIGxpc3QgPSB0aGlzLl9n
ZXRQcm9maWxlcygpOwogICAgICAgICAvLyBXZSdyZSBhc3N1bWluZyB0aGF0IHNuYXBzaG90cyBj
YW4gb25seSBiZSBhZGRlZC4KICAgICAgICAgaWYgKHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQubGVu
Z3RoID09PSBsaXN0Lmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb3Ig
KHZhciBpID0gdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5ndGgsIG4gPSBsaXN0Lmxlbmd0aDsg
aSA8IG47ICsraSkgewogICAgICAgICAgICAgdmFyIGJhc2VPcHRpb24gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJvcHRpb24iKTsKLSAgICAgICAgICAgIGJhc2VPcHRpb24ubGFiZWwgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkNvbXBhcmVkIHRvICVzIiwgbGlzdFtpXS50aXRsZSk7CisgICAg
ICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnRpdGxlOworICAgICAgICAgICAgaWYgKHRpdGxl
LmluZGV4T2YoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKSA9PT0gMCkKKyAgICAgICAgICAgICAg
ICB0aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU25hcHNob3QgJWQiLCB0aXRsZS5zdWJz
dHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLmxlbmd0aCArIDEpKTsKKyAgICAgICAgICAg
IGJhc2VPcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbXBhcmVkIHRvICVz
IiwgdGl0bGUpOwogICAgICAgICAgICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5hcHBlbmRDaGls
ZChiYXNlT3B0aW9uKTsKICAgICAgICAgfQogICAgIH0sCkBAIC01MzcsMzIgKzYwMSw2IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKIAogV2Vi
SW5zcGVjdG9yLkhlYXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlOwogCi1XZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc25hcHNob3Qp
Ci17Ci0gICAgdGhpcy5wcm9maWxlID0gc25hcHNob3Q7Ci0KLSAgICBXZWJJbnNwZWN0b3IuU2lk
ZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgImhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0
ZW0iLCAiIiwgIiIsIHNuYXBzaG90LCBmYWxzZSk7Ci0KLSAgICB0aGlzLnJlZnJlc2hUaXRsZXMo
KTsKLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTaWRlYmFyVHJlZUVsZW1lbnQucHJv
dG90eXBlID0gewotICAgIGdldCBtYWluVGl0bGUoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMu
X21haW5UaXRsZSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYWluVGl0bGU7Ci0gICAgICAg
IHJldHVybiB0aGlzLnByb2ZpbGUudGl0bGU7Ci0gICAgfSwKLQotICAgIHNldCBtYWluVGl0bGUo
eCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5UaXRsZSA9IHg7Ci0gICAgICAgIHRoaXMucmVm
cmVzaFRpdGxlcygpOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTaWRl
YmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxl
U2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZTsKLQogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMgPSBmdW5jdGlvbihvd25pbmdUcmVlKQogewogICAg
IHRoaXMudHJlZSA9IG93bmluZ1RyZWU7CkBAIC05MTcsOCArOTU1LDYgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlID0gZnVuY3Rpb24oKQogCiBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkID0gIkhFQVAiOwogCi1XZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90UHJvZmlsZVR5cGUuc25hcHNob3RzID0gW107Ci0KIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGJ1dHRvblRvb2x0aXAo
KQogICAgIHsKQEAgLTkzMiw3ICs5NjgsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJv
ZmlsZVR5cGUucHJvdG90eXBlID0gewogCiAgICAgYnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgZGV2dG9vbHMudG9vbHMuZ2V0UHJvZmlsZXJBZ2VudCgpLnN0YXJ0UHJv
ZmlsaW5nKGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01P
RFVMRV9IRUFQX1NOQVBTSE9UKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC50YWtlSGVhcFNu
YXBzaG90KCk7CiAgICAgfSwKIAogICAgIGdldCB3ZWxjb21lTWVzc2FnZSgpCkBAIC05NDIsOSAr
OTc4LDcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9
IHsKIAogICAgIGNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGU6IGZ1bmN0aW9uKHBy
b2ZpbGUpCiAgICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50KHByb2ZpbGUpOwotICAgICAgICBlbGVtZW50LnNt
YWxsID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVtZW50KHByb2ZpbGUsIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiU25hcHNob3QgJWQiKSwgImhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVl
LWl0ZW0iKTsKICAgICB9LAogCiAgICAgY3JlYXRlVmlldzogZnVuY3Rpb24ocHJvZmlsZSkKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJBZ2VudC5qcyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJBZ2VudC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggN2Y3NDU5NS4uMDAwMDAwMAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1By
b2ZpbGVyQWdlbnQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qKgotICogQGZp
bGVvdmVydmlldyBQcm92aWRlcyBjb21tdW5pY2F0aW9uIGludGVyZmFjZSB0byByZW1vdGUgdjgg
cHJvZmlsZXIuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZGV2dG9vbHMuUHJv
ZmlsZXJBZ2VudCA9IGZ1bmN0aW9uKCkKLXsKLQotICAgIC8qKgotICAgICAqIFByb2ZpbGVyIGxv
ZyBwb3NpdGlvbi4KLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAgICAqLwotICAgIHRoaXMuX2xv
Z1Bvc2l0aW9uID0gMDsKLQotICAgIC8qKgotICAgICAqIExhc3QgcmVxdWVzdGVkIGxvZyBwb3Np
dGlvbi4KLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAgICAqLwotICAgIHRoaXMuX2xhc3RSZXF1
ZXN0ZWRMb2dQb3NpdGlvbiA9IC0xOwotCi0gICAgLyoqCi0gICAgICogUHJvZmlsZXIgcHJvY2Vz
c29yIGluc3RhbmNlLgotICAgICAqIEB0eXBlIHtkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3J9
Ci0gICAgICovCi0gICAgdGhpcy5fcHJvZmlsZXJQcm9jZXNzb3IgPSBuZXcgZGV2dG9vbHMucHJv
ZmlsZXIuUHJvY2Vzc29yKCk7Ci19OwotCi0KLS8qKgotICogQSBjb3B5IG9mIGVudW0gZnJvbSBp
bmNsdWRlL3Y4LmgKLSAqIEBlbnVtIHtudW1iZXJ9Ci0gKi8KLWRldnRvb2xzLlByb2ZpbGVyQWdl
bnQuUHJvZmlsZXJNb2R1bGVzID0gewotICAgIFBST0ZJTEVSX01PRFVMRV9OT05FOiAwLAotICAg
IFBST0ZJTEVSX01PRFVMRV9DUFU6IDEsCi0gICAgUFJPRklMRVJfTU9EVUxFX0hFQVBfU1RBVFM6
IDEgPDwgMSwKLSAgICBQUk9GSUxFUl9NT0RVTEVfSlNfQ09OU1RSVUNUT1JTOiAxIDw8IDIsCi0g
ICAgUFJPRklMRVJfTU9EVUxFX0hFQVBfU05BUFNIT1Q6IDEgPDwgMTYKLX07Ci0KLQotLyoqCi0g
KiBJbml0aWFsaXplcyBwcm9maWxpbmcgc3RhdGUuCi0gKi8KLWRldnRvb2xzLlByb2ZpbGVyQWdl
bnQucHJvdG90eXBlLmluaXRpYWxpemVQcm9maWxpbmcgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhp
cy5fZ2V0TmV4dExvZ0xpbmVzKGZhbHNlKTsKLX07Ci0KLQotLyoqCi0gKiBSZXF1ZXN0cyB0aGUg
bmV4dCBjaHVuayBvZiBsb2cgbGluZXMuCi0gKiBAcGFyYW0ge2Jvb2xlYW59IGltbWVkaWF0ZWx5
IERvIG5vdCBwb3N0cG9uZSB0aGUgcmVxdWVzdC4KLSAqIEBwcml2YXRlCi0gKi8KLWRldnRvb2xz
LlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLl9nZXROZXh0TG9nTGluZXMgPSBmdW5jdGlvbihpbW1l
ZGlhdGVseSkKLXsKLSAgICBpZiAodGhpcy5fbGFzdFJlcXVlc3RlZExvZ1Bvc2l0aW9uID09IHRo
aXMuX2xvZ1Bvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgdmFyIHBvcyA9IHRoaXMuX2xh
c3RSZXF1ZXN0ZWRMb2dQb3NpdGlvbiA9IHRoaXMuX2xvZ1Bvc2l0aW9uOwotCi0gICAgdmFyIGNh
bGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKHRoaXMuX2RpZEdldFByb2ZpbGVyTG9n
TGluZXMuYmluZCh0aGlzKSk7Ci0gICAgaWYgKGltbWVkaWF0ZWx5KQotICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLmdldFByb2ZpbGVyTG9nTGluZXMoY2FsbElkLCBwb3MpOwotICAgIGVsc2Ugewot
ICAgICAgICBmdW5jdGlvbiBkZWxheWVkUmVxdWVzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZXJMb2dMaW5lcyhjYWxsSWQsIHBvcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc2V0VGltZW91dChkZWxheWVkUmVxdWVzdCwgNTAwKTsKLSAgICB9Ci19
OwotCi0KLS8qKgotICogU3RhcnRzIHByb2ZpbGluZy4KLSAqIEBwYXJhbSB7bnVtYmVyfSBtb2R1
bGVzIExpc3Qgb2YgbW9kdWxlcyB0byBlbmFibGUuCi0gKi8KLWRldnRvb2xzLlByb2ZpbGVyQWdl
bnQucHJvdG90eXBlLnN0YXJ0UHJvZmlsaW5nID0gZnVuY3Rpb24obW9kdWxlcykKLXsKLSAgICBp
ZiAobW9kdWxlcyAmIGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJ
TEVSX01PRFVMRV9IRUFQX1NOQVBTSE9UKSB7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQudGFr
ZUhlYXBTbmFwc2hvdCgpOwotICAgICAgICAvLyBBY3RpdmUgbW9kdWxlcyB3aWxsIG5vdCBjaGFu
Z2UsIGluc3RlYWQsIGEgc25hcHNob3Qgd2lsbCBiZSBsb2dnZWQuCi0gICAgICAgIHRoaXMuX2dl
dE5leHRMb2dMaW5lcygpOwotICAgIH0KLX07Ci0KLQotLyoqCi0gKiBIYW5kbGVzIGEgcG9ydGlv
biBvZiBhIHByb2ZpbGVyIGxvZyByZXRyaWV2ZWQgYnkgZ2V0TG9nTGluZXMgY2FsbC4KLSAqIEBw
YXJhbSB7bnVtYmVyfSBwb3MgQ3VycmVudCBwb3NpdGlvbiBpbiBsb2cuCi0gKiBAcGFyYW0ge3N0
cmluZ30gbG9nIEEgcG9ydGlvbiBvZiBwcm9maWxlciBsb2cuCi0gKi8KLWRldnRvb2xzLlByb2Zp
bGVyQWdlbnQucHJvdG90eXBlLl9kaWRHZXRQcm9maWxlckxvZ0xpbmVzID0gZnVuY3Rpb24ocG9z
LCBsb2cpCi17Ci0gICAgdGhpcy5fbG9nUG9zaXRpb24gPSBwb3M7Ci0gICAgaWYgKGxvZy5sZW5n
dGggPiAwKSB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVyUHJvY2Vzc29yLnByb2Nlc3NMb2dDaHVu
ayhsb2cpOwotICAgICAgICB0aGlzLl9nZXROZXh0TG9nTGluZXMoKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBBbGxvdyByZS1yZWFkaW5nIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uCi0gICAg
ICAgIHRoaXMuX2xhc3RSZXF1ZXN0ZWRMb2dQb3NpdGlvbiA9IHRoaXMuX2xvZ1Bvc2l0aW9uIC0g
MTsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuZGlkR2V0UHJvZmlsZXJMb2dMaW5lcyA9IFdl
Ykluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9qcy9Qcm9maWxlclByb2Nlc3Nvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjE3MTRlOC4uMDAwMDAwMAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Byb2ZpbGVyUHJv
Y2Vzc29yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKioKLSAqIEBmaWxlb3Zl
cnZpZXcgUHJvZmlsZXIgcHJvY2Vzc29yIGlzIHVzZWQgdG8gcHJvY2VzcyBsb2cgZmlsZSBwcm9k
dWNlZAotICogYnkgVjggYW5kIHByb2R1Y2UgYW4gaW50ZXJuYWwgcHJvZmlsZSByZXByZXNlbnRh
dGlvbiB3aGljaCBpcyB1c2VkCi0gKiBmb3IgYnVpbGRpbmcgcHJvZmlsZSB2aWV3cyBpbiAiUHJv
ZmlsZXMiIHRhYi4KLSAqLwotCi0KLS8qKgotICogQ3JlYXRlcyBhIFByb2ZpbGUgVmlldyBidWls
ZGVyIG9iamVjdCBjb21wYXRpYmxlIHdpdGggV2ViS2l0IFByb2ZpbGVyIFVJLgotICoKLSAqIEBw
YXJhbSB7bnVtYmVyfSBzYW1wbGluZ1JhdGUgTnVtYmVyIG9mIG1zIGJldHdlZW4gcHJvZmlsZXIg
dGlja3MuCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmll
d0J1aWxkZXIgPSBmdW5jdGlvbihzYW1wbGluZ1JhdGUpCi17Ci0gICAgZGV2dG9vbHMucHJvZmls
ZXIuVmlld0J1aWxkZXIuY2FsbCh0aGlzLCBzYW1wbGluZ1JhdGUpOwotfTsKLWRldnRvb2xzLnBy
b2ZpbGVyLldlYktpdFZpZXdCdWlsZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBkZXZ0b29scy5w
cm9maWxlci5WaWV3QnVpbGRlci5wcm90b3R5cGU7Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAq
LwotZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld0J1aWxkZXIucHJvdG90eXBlLmNyZWF0ZVZp
ZXdOb2RlID0gZnVuY3Rpb24oZnVuY05hbWUsIHRvdGFsVGltZSwgc2VsZlRpbWUsIGhlYWQpCi17
Ci0gICAgcmV0dXJuIG5ldyBkZXZ0b29scy5wcm9maWxlci5XZWJLaXRWaWV3Tm9kZShmdW5jTmFt
ZSwgdG90YWxUaW1lLCBzZWxmVGltZSwgaGVhZCk7Ci19OwotCi0KLS8qKgotICogQ29uc3RydWN0
cyBhIFByb2ZpbGUgVmlldyBub2RlIG9iamVjdCBmb3IgZGlzcGxheWluZyBpbiBXZWJLaXQgUHJv
ZmlsZXIgVUkuCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IGludGVybmFsRnVuY05hbWUgQSBmdWxs
eSBxdWFsaWZpZWQgZnVuY3Rpb24gbmFtZS4KLSAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFRpbWUg
QW1vdW50IG9mIHRpbWUgdGhhdCBhcHBsaWNhdGlvbiBzcGVudCBpbiB0aGUKLSAqICAgICBjb3Jy
ZXNwb25kaW5nIGZ1bmN0aW9uIGFuZCBpdHMgZGVzY2VuZGFudHMgKG5vdCB0aGF0IGRlcGVuZGlu
ZyBvbgotICogICAgIHByb2ZpbGUgdGhleSBjYW4gYmUgZWl0aGVyIGNhbGxlZXMgb3IgY2FsbGVy
cy4pCi0gKiBAcGFyYW0ge251bWJlcn0gc2VsZlRpbWUgQW1vdW50IG9mIHRpbWUgdGhhdCBhcHBs
aWNhdGlvbiBzcGVudCBpbiB0aGUKLSAqICAgICBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIG9ubHku
Ci0gKiBAcGFyYW0ge2RldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3Lk5vZGV9IGhlYWQgUHJv
ZmlsZSB2aWV3IGhlYWQuCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZGV2dG9vbHMucHJvZmlsZXIu
V2ViS2l0Vmlld05vZGUgPSBmdW5jdGlvbihpbnRlcm5hbEZ1bmNOYW1lLCB0b3RhbFRpbWUsIHNl
bGZUaW1lLCBoZWFkKQotewotICAgIGRldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3Lk5vZGUu
Y2FsbCh0aGlzLCBpbnRlcm5hbEZ1bmNOYW1lLCB0b3RhbFRpbWUsIHNlbGZUaW1lLCBoZWFkKTsK
LSAgICB0aGlzLmluaXRGdW5jSW5mb18oKTsKLSAgICB0aGlzLmNhbGxVSUQgPSBpbnRlcm5hbEZ1
bmNOYW1lOwotfTsKLWRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmlldy5Ob2RlLnByb3RvdHlwZTsK
LQotCi0vKioKLSAqIFJlZ0V4IGZvciBzdHJpcHBpbmcgVjgncyBwcmVmaXhlcyBvZiBjb21waWxl
ZCBmdW5jdGlvbnMuCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLkZVTkNf
TkFNRV9TVFJJUF9SRSA9IC9eKD86TGF6eUNvbXBpbGV8RnVuY3Rpb258Q2FsbGJhY2spOiAoLiop
JC87Ci0KLQotLyoqCi0gKiBSZWdFeCBmb3IgZXh0cmFjdGluZyBzY3JpcHQgc291cmNlIFVSTCBh
bmQgbGluZSBudW1iZXIuCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLkZV
TkNfTkFNRV9QQVJTRV9SRSA9IC9eKCg/OmdldCB8IHNldCApP1teIF0rKSAoLiopOihcZCspKCBc
e1xkK1x9KT8kLzsKLQotCi0vKioKLSAqIEluaXRzICJmdW5jdGlvbk5hbWUiLCAidXJsIiwgYW5k
ICJsaW5lTnVtYmVyIiBmaWVsZHMgdXNpbmcgImludGVybmFsRnVuY05hbWUiCi0gKiBmaWVsZC4K
LSAqIEBwcml2YXRlCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLnByb3Rv
dHlwZS5pbml0RnVuY0luZm9fID0gZnVuY3Rpb24oKQotewotICAgIHZhciBub2RlQWxpYXMgPSBk
ZXZ0b29scy5wcm9maWxlci5XZWJLaXRWaWV3Tm9kZTsKLSAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9
IHRoaXMuaW50ZXJuYWxGdW5jTmFtZTsKLQotICAgIHZhciBzdHJpcHBlZE5hbWUgPSBub2RlQWxp
YXMuRlVOQ19OQU1FX1NUUklQX1JFLmV4ZWModGhpcy5mdW5jdGlvbk5hbWUpOwotICAgIGlmIChz
dHJpcHBlZE5hbWUpCi0gICAgICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gc3RyaXBwZWROYW1lWzFd
OwotCi0gICAgdmFyIHBhcnNlZE5hbWUgPSBub2RlQWxpYXMuRlVOQ19OQU1FX1BBUlNFX1JFLmV4
ZWModGhpcy5mdW5jdGlvbk5hbWUpOwotICAgIGlmIChwYXJzZWROYW1lKSB7Ci0gICAgICAgIHRo
aXMuZnVuY3Rpb25OYW1lID0gcGFyc2VkTmFtZVsxXTsKLSAgICAgICAgaWYgKHBhcnNlZE5hbWVb
NF0pCi0gICAgICAgICAgICB0aGlzLmZ1bmN0aW9uTmFtZSArPSBwYXJzZWROYW1lWzRdOwotICAg
ICAgICB0aGlzLnVybCA9IHBhcnNlZE5hbWVbMl07Ci0gICAgICAgIHRoaXMubGluZU51bWJlciA9
IHBhcnNlZE5hbWVbM107Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy51cmwgPSAnJzsKLSAg
ICAgICAgdGhpcy5saW5lTnVtYmVyID0gMDsKLSAgICB9Ci19OwotCi0KLS8qKgotICogQW5jZXN0
b3Igb2YgYSBwcm9maWxlIG9iamVjdCB0aGF0IGxlYXZlcyBvdXQgb25seSBKUy1yZWxhdGVkIGZ1
bmN0aW9ucy4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1kZXZ0b29scy5wcm9maWxlci5Kc1Byb2Zp
bGUgPSBmdW5jdGlvbigpCi17Ci0gICAgZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZS5jYWxsKHRo
aXMpOwotfTsKLWRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZS5wcm90b3R5cGUuX19wcm90b19f
ID0gZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZS5wcm90b3R5cGU7Ci0KLQotLyoqCi0gKiBSZWdF
eHAgdGhhdCBsZWF2ZXMgb25seSBub24tbmF0aXZlIEpTIGZ1bmN0aW9ucy4KLSAqIEB0eXBlIHtS
ZWdFeHB9Ci0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZS5KU19OT05fTkFUSVZFX1JF
ID0gbmV3IFJlZ0V4cCgKLSAgICAgICJeIiArCi0gICAgICAgICIoPzpDYWxsYmFjazopfCIgKwot
ICAgICAgICAiKD86U2NyaXB0OiAoPyFuYXRpdmUpKXwiICsKLSAgICAgICAgIig/Oig/OkxhenlD
b21waWxlfEZ1bmN0aW9uKTogW14gXSooPzogKD8hbmF0aXZlIClbXiBdKzpcXGQrKT8kKSIpOwot
Ci0KLS8qKgotICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZS5w
cm90b3R5cGUuc2tpcFRoaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG5hbWUpCi17Ci0gICAgcmV0dXJu
ICFkZXZ0b29scy5wcm9maWxlci5Kc1Byb2ZpbGUuSlNfTk9OX05BVElWRV9SRS50ZXN0KG5hbWUp
OwotfTsKLQotCi0vKioKLSAqIFByb2ZpbGVyIHByb2Nlc3Nvci4gQ29uc3VtZXMgcHJvZmlsZXIg
bG9nIGFuZCBidWlsZHMgcHJvZmlsZSB2aWV3cy4KLSAqIEZJWE1FOiBjaGFuZ2UgZmllbGQgbmFt
aW5nIHN0eWxlIHRvIHVzZSB0cmFpbGluZyB1bmRlcnNjb3JlLgotICoKLSAqIEBwYXJhbSB7ZnVu
Y3Rpb24oZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZVZpZXcpfSBuZXdQcm9maWxlQ2FsbGJhY2sg
Q2FsbGJhY2sKLSAqICAgICB0aGF0IHJlY2VpdmVzIGEgbmV3IHByb2Nlc3NlZCBwcm9maWxlLgot
ICogQGNvbnN0cnVjdG9yCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3NvciA9IGZ1bmN0
aW9uKCkKLXsKLSAgICB2YXIgZGlzcGF0Y2hlcyA9IHsKLSAgICAgICAgImNvZGUtY3JlYXRpb24i
OiB7Ci0gICAgICAgICAgICBwYXJzZXJzOiBbbnVsbCwgdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2Vy
KCJjb2RlIiksIHBhcnNlSW50LCBudWxsXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5w
cm9jZXNzQ29kZUNyZWF0aW9uXywgYmFja3JlZnM6IHRydWUsCi0gICAgICAgICAgICBuZWVkc1By
b2ZpbGU6IHRydWUgfSwKLSAgICAgICAgImNvZGUtbW92ZSI6IHsgcGFyc2VyczogW3RoaXMuY3Jl
YXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLAotICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNz
UGFyc2VyKCJjb2RlLW1vdmUtdG8iKV0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJv
Y2Vzc0NvZGVNb3ZlXywgYmFja3JlZnM6IHRydWUsCi0gICAgICAgICAgICBuZWVkc1Byb2ZpbGU6
IHRydWUgfSwKLSAgICAgICAgImNvZGUtZGVsZXRlIjogeyBwYXJzZXJzOiBbdGhpcy5jcmVhdGVB
ZGRyZXNzUGFyc2VyKCJjb2RlIildLAotICAgICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nl
c3NDb2RlRGVsZXRlXywgYmFja3JlZnM6IHRydWUsCi0gICAgICAgICAgICBuZWVkc1Byb2ZpbGU6
IHRydWUgfSwKLSAgICAgICAgImZ1bmN0aW9uLWNyZWF0aW9uIjogeyBwYXJzZXJzOiBbdGhpcy5j
cmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIiksCi0gICAgICAgICAgICB0aGlzLmNyZWF0ZUFkZHJl
c3NQYXJzZXIoImZ1bmN0aW9uLW9iaiIpXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5w
cm9jZXNzRnVuY3Rpb25DcmVhdGlvbl8sIGJhY2tyZWZzOiB0cnVlIH0sCi0gICAgICAgICJmdW5j
dGlvbi1tb3ZlIjogeyBwYXJzZXJzOiBbdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIiks
Ci0gICAgICAgICAgICB0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUtbW92ZS10byIpXSwK
LSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzRnVuY3Rpb25Nb3ZlXywgYmFja3Jl
ZnM6IHRydWUgfSwKLSAgICAgICAgImZ1bmN0aW9uLWRlbGV0ZSI6IHsgcGFyc2VyczogW3RoaXMu
Y3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhp
cy5wcm9jZXNzRnVuY3Rpb25EZWxldGVfLCBiYWNrcmVmczogdHJ1ZSB9LAotICAgICAgICAidGlj
ayI6IHsgcGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLAotICAgICAg
ICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJzdGFjayIpLCBwYXJzZUludCwgInZhci1h
cmdzIl0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc1RpY2tfLCBiYWNrcmVm
czogdHJ1ZSwgbmVlZFByb2ZpbGU6IHRydWUgfSwKLSAgICAgICAgInByb2ZpbGVyIjogeyBwYXJz
ZXJzOiBbbnVsbCwgInZhci1hcmdzIl0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJv
Y2Vzc1Byb2ZpbGVyXywgbmVlZHNQcm9maWxlOiBmYWxzZSB9LAotICAgICAgICAiaGVhcC1zYW1w
bGUtYmVnaW4iOiB7IHBhcnNlcnM6IFtudWxsLCBudWxsLCBwYXJzZUludF0sCi0gICAgICAgICAg
ICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0hlYXBTYW1wbGVCZWdpbl8gfSwKLSAgICAgICAgImhl
YXAtc2FtcGxlLXN0YXRzIjogeyBwYXJzZXJzOiBbbnVsbCwgbnVsbCwgcGFyc2VJbnQsIHBhcnNl
SW50XSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzSGVhcFNhbXBsZVN0YXRz
XyB9LAotICAgICAgICAiaGVhcC1zYW1wbGUtaXRlbSI6IHsgcGFyc2VyczogW251bGwsIHBhcnNl
SW50LCBwYXJzZUludF0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0hlYXBT
YW1wbGVJdGVtXyB9LAotICAgICAgICAiaGVhcC1qcy1jb25zLWl0ZW0iOiB7IHBhcnNlcnM6IFtu
dWxsLCBwYXJzZUludCwgcGFyc2VJbnRdLAotICAgICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnBy
b2Nlc3NIZWFwSnNDb25zSXRlbV8gfSwKLSAgICAgICAgImhlYXAtanMtcmV0LWl0ZW0iOiB7IHBh
cnNlcnM6IFtudWxsLCAidmFyLWFyZ3MiXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5w
cm9jZXNzSGVhcEpzUmV0SXRlbV8gfSwKLSAgICAgICAgImhlYXAtc2FtcGxlLWVuZCI6IHsgcGFy
c2VyczogW251bGwsIG51bGxdLAotICAgICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NI
ZWFwU2FtcGxlRW5kXyB9LAotICAgICAgICAvLyBOb3QgdXNlZCBpbiBEZXZUb29scyBQcm9maWxl
ci4KLSAgICAgICAgInNoYXJlZC1saWJyYXJ5IjogbnVsbCwKLSAgICAgICAgLy8gT2Jzb2xldGUg
cm93IHR5cGVzLgotICAgICAgICAiY29kZS1hbGxvY2F0ZSI6IG51bGwsCi0gICAgICAgICJiZWdp
bi1jb2RlLXJlZ2lvbiI6IG51bGwsCi0gICAgICAgICJlbmQtY29kZS1yZWdpb24iOiBudWxsfTsK
LQotICAgIGlmIChkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlLlZFUlNJT04gPT09IDIpIHsKLSAg
ICAgICAgZGlzcGF0Y2hlc1sidGljayJdID0gIHsgcGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVz
c1BhcnNlcigiY29kZSIpLAotICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJz
dGFjayIpLAotICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJmdW5jIiksIHBh
cnNlSW50LCAidmFyLWFyZ3MiXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNz
VGlja1YyXywgYmFja3JlZnM6IHRydWUgfTsKLSAgICB9Ci0KLSAgICBkZXZ0b29scy5wcm9maWxl
ci5Mb2dSZWFkZXIuY2FsbCh0aGlzLCBkaXNwYXRjaGVzKTsKLQotICAgIC8qKgotICAgICAqIENh
bGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBuZXcgcHJvZmlsZSBpcyBlbmNvdW50ZXJlZCBp
biB0aGUgbG9nLgotICAgICAqIEB0eXBlIHtmdW5jdGlvbigpfQotICAgICAqLwotICAgIHRoaXMu
c3RhcnRlZFByb2ZpbGVQcm9jZXNzaW5nXyA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxs
YmFjayB0aGF0IGlzIGNhbGxlZCBwZXJpb2RpY2FsbHkgdG8gZGlzcGxheSBwcm9jZXNzaW5nIHN0
YXR1cy4KLSAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKX0KLSAgICAgKi8KLSAgICB0aGlzLnByb2Zp
bGVQcm9jZXNzaW5nU3RhdHVzXyA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayB0
aGF0IGlzIGNhbGxlZCB3aGVuIGEgcHJvZmlsZSBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIGlzIHJl
YWR5Ci0gICAgICogdG8gYmUgc2hvd24uCi0gICAgICogQHR5cGUge2Z1bmN0aW9uKGRldnRvb2xz
LnByb2ZpbGVyLlByb2ZpbGVWaWV3KX0KLSAgICAgKi8KLSAgICB0aGlzLmZpbmlzaGVkUHJvZmls
ZVByb2Nlc3NpbmdfID0gbnVsbDsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXJyZW50IHByb2Zp
bGUuCi0gICAgICogQHR5cGUge2RldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZX0KLSAgICAgKi8K
LSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXyA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBCdWls
ZGVyIG9mIHByb2ZpbGUgdmlld3MuIENyZWF0ZWQgZHVyaW5nICJwcm9maWxlcixiZWdpbiIgZXZl
bnQgcHJvY2Vzc2luZy4KLSAgICAgKiBAdHlwZSB7ZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmll
d0J1aWxkZXJ9Ci0gICAgICovCi0gICAgdGhpcy52aWV3QnVpbGRlcl8gPSBudWxsOwotCi0gICAg
LyoqCi0gICAgICogTmV4dCBwcm9maWxlIGlkLgotICAgICAqIEB0eXBlIHtudW1iZXJ9Ci0gICAg
ICovCi0gICAgdGhpcy5wcm9maWxlSWRfID0gMTsKLQotICAgIC8qKgotICAgICAqIENvdW50ZXIg
Zm9yIHByb2Nlc3NlZCB0aWNrcy4KLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAgICAqLwotICAg
IHRoaXMudGlja3NDb3VudF8gPSAwOwotCi0gICAgLyoqCi0gICAgICogSW50ZXJ2YWwgaWQgZm9y
IHVwZGF0aW5nIHByb2Nlc3Npbmcgc3RhdHVzLgotICAgICAqIEB0eXBlIHtudW1iZXJ9Ci0gICAg
ICovCi0gICAgdGhpcy5wcm9jZXNzaW5nSW50ZXJ2YWxfID0gbnVsbDsKLQotICAgIC8qKgotICAg
ICAqIFRoZSBjdXJyZW50IGhlYXAgc25hcHNob3QuCi0gICAgICogQHR5cGUge3N0cmluZ30KLSAg
ICAgKi8KLSAgICB0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfID0gbnVsbDsKLQotICAgIC8qKgot
ICAgICAqIE5leHQgaGVhcCBzbmFwc2hvdCBpZC4KLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAg
ICAqLwotICAgIHRoaXMuaGVhcFNuYXBzaG90SWRfID0gMTsKLX07Ci1kZXZ0b29scy5wcm9maWxl
ci5Qcm9jZXNzb3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IGRldnRvb2xzLnByb2ZpbGVyLkxvZ1Jl
YWRlci5wcm90b3R5cGU7Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMucHJv
ZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcmludEVycm9yID0gZnVuY3Rpb24oc3RyKQotewot
ICAgIFdlYkluc3BlY3Rvci5sb2coc3RyKTsKLX07Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAq
LwotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5za2lwRGlzcGF0Y2ggPSBm
dW5jdGlvbihkaXNwYXRjaCkKLXsKLSAgICByZXR1cm4gZGlzcGF0Y2gubmVlZHNQcm9maWxlICYm
IHRoaXMuY3VycmVudFByb2ZpbGVfID09PSBudWxsOwotfTsKLQotCi0vKioKLSAqIFNldHMgcHJv
ZmlsZSBwcm9jZXNzaW5nIGNhbGxiYWNrcy4KLSAqCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IHN0
YXJ0ZWQgU3RhcnRlZCBwcm9jZXNzaW5nIGNhbGxiYWNrLgotICogQHBhcmFtIHtmdW5jdGlvbihk
ZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmlldyl9IGZpbmlzaGVkIEZpbmlzaGVkCi0gKiAgICAg
cHJvY2Vzc2luZyBjYWxsYmFjay4KLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnBy
b3RvdHlwZS5zZXRDYWxsYmFja3MgPSBmdW5jdGlvbihzdGFydGVkLCBwcm9jZXNzaW5nLCBmaW5p
c2hlZCkKLXsKLSAgICB0aGlzLnN0YXJ0ZWRQcm9maWxlUHJvY2Vzc2luZ18gPSBzdGFydGVkOwot
ICAgIHRoaXMucHJvZmlsZVByb2Nlc3NpbmdTdGF0dXNfID0gcHJvY2Vzc2luZzsKLSAgICB0aGlz
LmZpbmlzaGVkUHJvZmlsZVByb2Nlc3NpbmdfID0gZmluaXNoZWQ7Ci19OwotCi0KLS8qKgotICog
QW4gYWRkcmVzcyBmb3IgdGhlIGZha2UgIihwcm9ncmFtKSIgZW50cnkuIFdlYktpdCdzIHZpc3Vh
bGlzYXRpb24KLSAqIGhhcyBhc3N1bXB0aW9ucyBvbiBob3cgdGhlIHRvcCBvZiB0aGUgY2FsbCB0
cmVlIHNob3VsZCBsb29rIGxpa2UsCi0gKiBhbmQgd2UgbmVlZCB0byBhZGQgYSBmYWtlIGVudHJ5
IGFzIHRoZSB0b3Btb3N0IGZ1bmN0aW9uLiBUaGlzCi0gKiBhZGRyZXNzIGlzIGNob3NlbiBiZWNh
dXNlIGl0J3MgdGhlIGVuZCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBtZW1vcnkKLSAqIHBhZ2UsIHdo
aWNoIGlzIG5ldmVyIHVzZWQgZm9yIGNvZGUgb3IgZGF0YSwgYnV0IG9ubHkgYXMgYSBndWFyZAot
ICogcGFnZSBmb3IgY2F0Y2hpbmcgQVYgZXJyb3JzLgotICoKLSAqIEB0eXBlIHtudW1iZXJ9Ci0g
Ki8KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZID0gMHhmZmZmOwot
LyoqCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3Iu
UFJPR1JBTV9FTlRSWV9TVFIgPSAiMHhmZmZmIjsKLQotCi0vKioKLSAqIFNldHMgbmV3IHByb2Zp
bGUgY2FsbGJhY2suCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKGRldnRvb2xzLnByb2ZpbGVyLlByb2Zp
bGVWaWV3KX0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uCi0gKi8KLWRldnRvb2xzLnByb2Zp
bGVyLlByb2Nlc3Nvci5wcm90b3R5cGUuc2V0TmV3UHJvZmlsZUNhbGxiYWNrID0gZnVuY3Rpb24o
Y2FsbGJhY2spCi17Ci0gICAgdGhpcy5uZXdQcm9maWxlQ2FsbGJhY2tfID0gY2FsbGJhY2s7Ci19
OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc1Byb2Zp
bGVyXyA9IGZ1bmN0aW9uKHN0YXRlLCBwYXJhbXMpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewot
ICAgICAgICBjYXNlICJyZXN1bWUiOgotICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFByb2Zp
bGVfID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvZmlsZV8gPSBu
ZXcgZGV2dG9vbHMucHJvZmlsZXIuSnNQcm9maWxlKCk7Ci0gICAgICAgICAgICAgICAgLy8gc2Vl
IHRoZSBjb21tZW50IGZvciBkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJPR1JBTV9FTlRS
WQotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLmFkZENvZGUoIkZ1bmN0aW9u
IiwgIihwcm9ncmFtKSIsIGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZ
LCAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydGVkUHJvZmlsZVByb2Nlc3Npbmdf
KQotICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ZWRQcm9maWxlUHJvY2Vzc2luZ18oKTsK
LSAgICAgICAgICAgICAgICB0aGlzLnRpY2tzQ291bnRfID0gMDsKLSAgICAgICAgICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvZmlsZVByb2Nlc3Np
bmdTdGF0dXNfKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ0ludGVydmFs
XyA9IHdpbmRvdy5zZXRJbnRlcnZhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KCkgeyBzZWxmLnByb2ZpbGVQcm9jZXNzaW5nU3RhdHVzXyhzZWxmLnRpY2tzQ291bnRfKTsgfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIDEwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICJwYXVzZSI6Ci0gICAg
ICAgICAgICBpZiAodGhpcy5jdXJyZW50UHJvZmlsZV8gIT09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnByb2Nlc3NpbmdJbnRlcnZhbF8pOwotICAg
ICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ0ludGVydmFsXyA9IG51bGw7Ci0gICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZmluaXNoZWRQcm9maWxlUHJvY2Vzc2luZ18pCi0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuZmluaXNoZWRQcm9maWxlUHJvY2Vzc2luZ18odGhpcy5jcmVhdGVQcm9maWxl
Rm9yVmlldygpKTsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9maWxlXyA9IG51bGw7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAiYmVnaW4i
OgotICAgICAgICAgICAgdmFyIHNhbXBsaW5nUmF0ZSA9IE5hTjsKLSAgICAgICAgICAgIGlmIChw
YXJhbXMubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGUgPSBwYXJzZUlu
dChwYXJhbXNbMF0pOwotICAgICAgICAgICAgaWYgKGlzTmFOKHNhbXBsaW5nUmF0ZSkpCi0gICAg
ICAgICAgICAgICAgc2FtcGxpbmdSYXRlID0gMTsKLSAgICAgICAgICAgIHRoaXMudmlld0J1aWxk
ZXJfID0gbmV3IGRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdCdWlsZGVyKHNhbXBsaW5nUmF0
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhlc2UgZXZlbnRzIGFyZSB2YWxp
ZCBidXQgYXJlbid0IHVzZWQuCi0gICAgICAgIGNhc2UgImNvbXByZXNzaW9uIjoKLSAgICAgICAg
Y2FzZSAiZW5kIjogYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoInVua25vd24gcHJvZmlsZXIgc3RhdGU6ICIgKyBzdGF0ZSk7Ci0gICAgfQotfTsK
LQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NDb2RlQ3Jl
YXRpb25fID0gZnVuY3Rpb24odHlwZSwgc3RhcnQsIHNpemUsIG5hbWUpCi17Ci0gICAgdGhpcy5j
dXJyZW50UHJvZmlsZV8uYWRkQ29kZSh0aGlzLmV4cGFuZEFsaWFzKHR5cGUpLCBuYW1lLCBzdGFy
dCwgc2l6ZSk7Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUu
cHJvY2Vzc0NvZGVNb3ZlXyA9IGZ1bmN0aW9uKGZyb20sIHRvKQotewotICAgIHRoaXMuY3VycmVu
dFByb2ZpbGVfLm1vdmVDb2RlKGZyb20sIHRvKTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIu
UHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzQ29kZURlbGV0ZV8gPSBmdW5jdGlvbihzdGFydCkK
LXsKLSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5kZWxldGVDb2RlKHN0YXJ0KTsKLX07Ci0KLQot
ZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzRnVuY3Rpb25DcmVh
dGlvbl8gPSBmdW5jdGlvbihmdW5jdGlvbkFkZHIsIGNvZGVBZGRyKQotewotICAgIHRoaXMuY3Vy
cmVudFByb2ZpbGVfLmFkZENvZGVBbGlhcyhmdW5jdGlvbkFkZHIsIGNvZGVBZGRyKTsKLX07Ci0K
LQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzRnVuY3Rpb25N
b3ZlXyA9IGZ1bmN0aW9uKGZyb20sIHRvKQotewotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLnNh
ZmVNb3ZlRHluYW1pY0NvZGUoZnJvbSwgdG8pOwotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Q
cm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NGdW5jdGlvbkRlbGV0ZV8gPSBmdW5jdGlvbihzdGFy
dCkKLXsKLSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5zYWZlRGVsZXRlRHluYW1pY0NvZGUoc3Rh
cnQpOwotfTsKLQotCi0vLyBUT0RPKG1uYWdhbm92KTogUmVtb3ZlIGFmdGVyIG5leHQgVjggcm9s
bC4KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc1RpY2tfID0g
ZnVuY3Rpb24ocGMsIHNwLCB2bVN0YXRlLCBzdGFjaykKLXsKLSAgICAvLyBzZWUgdGhlIGNvbW1l
bnQgZm9yIGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZCi0gICAgc3Rh
Y2sucHVzaChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJPR1JBTV9FTlRSWV9TVFIpOwot
ICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLnJlY29yZFRpY2sodGhpcy5wcm9jZXNzU3RhY2socGMs
IHN0YWNrKSk7Ci0gICAgdGhpcy50aWNrc0NvdW50XysrOwotfTsKLQotCi1kZXZ0b29scy5wcm9m
aWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NUaWNrVjJfID0gZnVuY3Rpb24ocGMsIHNw
LCBmdW5jLCB2bVN0YXRlLCBzdGFjaykKLXsKLSAgICAvLyBzZWUgdGhlIGNvbW1lbnQgZm9yIGRl
dnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZCi0gICAgc3RhY2sucHVzaChk
ZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJPR1JBTV9FTlRSWV9TVFIpOwotCi0KLSAgICBp
ZiAoZnVuYykgewotICAgICAgICB2YXIgZnVuY0VudHJ5ID0gdGhpcy5jdXJyZW50UHJvZmlsZV8u
ZmluZEVudHJ5KGZ1bmMpOwotICAgICAgICBpZiAoIWZ1bmNFbnRyeSB8fCAhZnVuY0VudHJ5Lmlz
SlNGdW5jdGlvbiB8fCAhZnVuY0VudHJ5LmlzSlNGdW5jdGlvbigpKQotICAgICAgICAgICAgZnVu
YyA9IDA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdmFyIGN1cnJFbnRyeSA9IHRoaXMu
Y3VycmVudFByb2ZpbGVfLmZpbmRFbnRyeShwYyk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJFbnRy
eSB8fCAhY3VyckVudHJ5LmlzSlNGdW5jdGlvbiB8fCBjdXJyRW50cnkuaXNKU0Z1bmN0aW9uKCkp
IHsKLSAgICAgICAgICAgICAgICBmdW5jID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLnJlY29yZFRpY2sodGhpcy5wcm9jZXNz
U3RhY2socGMsIGZ1bmMsIHN0YWNrKSk7Ci0gICAgdGhpcy50aWNrc0NvdW50XysrOwotfTsKLQot
Ci1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NIZWFwU2FtcGxl
QmVnaW5fID0gZnVuY3Rpb24oc3BhY2UsIHN0YXRlLCB0aWNrcykKLXsKLSAgICBpZiAoc3BhY2Ug
IT09ICJIZWFwIikgcmV0dXJuOwotICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8gPSB7Ci0g
ICAgICAgIG51bWJlcjogdGhpcy5oZWFwU25hcHNob3RJZF8rKywKLSAgICAgICAgZW50cmllczog
e30sCi0gICAgICAgIGNsdXN0ZXJzOiB7fSwKLSAgICAgICAgbG93bGV2ZWxzOiB7fSwKLSAgICAg
ICAgdGlja3M6IHRpY2tzCi0gICAgfTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vz
c29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcFNhbXBsZVN0YXRzXyA9IGZ1bmN0aW9uKHNwYWNlLCBz
dGF0ZSwgY2FwYWNpdHksIHVzZWQpCi17Ci0gICAgaWYgKHNwYWNlICE9PSAiSGVhcCIpIHJldHVy
bjsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNz
SGVhcFNhbXBsZUl0ZW1fID0gZnVuY3Rpb24oaXRlbSwgbnVtYmVyLCBzaXplKQotewotICAgIGlm
ICghdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90XykgcmV0dXJuOwotICAgIHRoaXMuY3VycmVudEhl
YXBTbmFwc2hvdF8ubG93bGV2ZWxzW2l0ZW1dID0gewotICAgICAgICB0eXBlOiBpdGVtLCBjb3Vu
dDogbnVtYmVyLCBzaXplOiBzaXplCi0gICAgfTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIu
UHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcEpzQ29uc0l0ZW1fID0gZnVuY3Rpb24oaXRl
bSwgbnVtYmVyLCBzaXplKQotewotICAgIGlmICghdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90Xykg
cmV0dXJuOwotICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8uZW50cmllc1tpdGVtXSA9IHsK
LSAgICAgICAgY29uczogaXRlbSwgY291bnQ6IG51bWJlciwgc2l6ZTogc2l6ZSwgcmV0YWluZXJz
OiB7fQotICAgIH07Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5
cGUucHJvY2Vzc0hlYXBKc1JldEl0ZW1fID0gZnVuY3Rpb24oaXRlbSwgcmV0YWluZXJzQXJyYXkp
Ci17Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfKSByZXR1cm47Ci0gICAgdmFy
IHJhd1JldGFpbmVycyA9IHt9OwotICAgIGZvciAodmFyIGkgPSAwLCBuID0gcmV0YWluZXJzQXJy
YXkubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIHZhciBlbnRyeSA9IHJldGFpbmVyc0Fy
cmF5W2ldLnNwbGl0KCI7Iik7Ci0gICAgICAgIHJhd1JldGFpbmVyc1tlbnRyeVswXV0gPSBwYXJz
ZUludChlbnRyeVsxXSwgMTApOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIG1lcmdlUmV0YWluZXJz
KGVudHJ5KSB7Ci0gICAgICAgIGZvciAodmFyIHJhd1JldGFpbmVyIGluIHJhd1JldGFpbmVycykg
ewotICAgICAgICAgICAgdmFyIGNvbnNOYW1lID0gcmF3UmV0YWluZXIuaW5kZXhPZigiOiIpICE9
PSAtMSA/IHJhd1JldGFpbmVyLnNwbGl0KCI6IilbMF0gOiByYXdSZXRhaW5lcjsKLSAgICAgICAg
ICAgIGlmICghKGNvbnNOYW1lIGluIGVudHJ5LnJldGFpbmVycykpCi0gICAgICAgICAgICAgICAg
ZW50cnkucmV0YWluZXJzW2NvbnNOYW1lXSA9IHsgY29uczogY29uc05hbWUsIGNvdW50OiAwLCBj
bHVzdGVyczoge30gfTsKLSAgICAgICAgICAgIHZhciByZXRhaW5lciA9IGVudHJ5LnJldGFpbmVy
c1tjb25zTmFtZV07Ci0gICAgICAgICAgICByZXRhaW5lci5jb3VudCArPSByYXdSZXRhaW5lcnNb
cmF3UmV0YWluZXJdOwotICAgICAgICAgICAgaWYgKGNvbnNOYW1lICE9PSByYXdSZXRhaW5lcikK
LSAgICAgICAgICAgICAgICByZXRhaW5lci5jbHVzdGVyc1tyYXdSZXRhaW5lcl0gPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGl0ZW0uaW5kZXhPZigiOiIpICE9PSAtMSkgewot
ICAgICAgLy8gQXJyYXksIEZ1bmN0aW9uLCBvciBPYmplY3QgaW5zdGFuY2VzIGNsdXN0ZXIgY2Fz
ZS4KLSAgICAgIGlmICghKGl0ZW0gaW4gdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90Xy5jbHVzdGVy
cykpIHsKLSAgICAgICAgICB0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfLmNsdXN0ZXJzW2l0ZW1d
ID0gewotICAgICAgICAgICAgICBjb25zOiBpdGVtLCByZXRhaW5lcnM6IHt9Ci0gICAgICAgICAg
fTsKLSAgICAgIH0KLSAgICAgIG1lcmdlUmV0YWluZXJzKHRoaXMuY3VycmVudEhlYXBTbmFwc2hv
dF8uY2x1c3RlcnNbaXRlbV0pOwotICAgICAgaXRlbSA9IGl0ZW0uc3BsaXQoIjoiKVswXTsKLSAg
ICB9Ci0gICAgbWVyZ2VSZXRhaW5lcnModGhpcy5jdXJyZW50SGVhcFNuYXBzaG90Xy5lbnRyaWVz
W2l0ZW1dKTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5w
cm9jZXNzSGVhcFNhbXBsZUVuZF8gPSBmdW5jdGlvbihzcGFjZSwgc3RhdGUpCi17Ci0gICAgaWYg
KHNwYWNlICE9PSAiSGVhcCIpIHJldHVybjsKLSAgICB2YXIgc25hcHNob3QgPSB0aGlzLmN1cnJl
bnRIZWFwU25hcHNob3RfOwotICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8gPSBudWxsOwot
ICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuYWRkU25hcHNob3Qoc25hcHNob3QpOwot
fTsKLQotCi0vKioKLSAqIENyZWF0ZXMgYSBwcm9maWxlIGZvciBmdXJ0aGVyIGRpc3BsYXlpbmcg
aW4gUHJvZmlsZVZpZXcuCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5
cGUuY3JlYXRlUHJvZmlsZUZvclZpZXcgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIHByb2ZpbGUg
PSB0aGlzLnZpZXdCdWlsZGVyXy5idWlsZFZpZXcodGhpcy5jdXJyZW50UHJvZmlsZV8uZ2V0VG9w
RG93blByb2ZpbGUoKSk7Ci0gICAgcHJvZmlsZS51aWQgPSB0aGlzLnByb2ZpbGVJZF8rKzsKLSAg
ICBwcm9maWxlLnRpdGxlID0gVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lICsgIi4iICsgcHJvZmls
ZS51aWQ7Ci0gICAgcmV0dXJuIHByb2ZpbGU7Ci19Owo=
</data>
<flag name="review"
          id="54023"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="54024"
          type_id="3"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65431</attachid>
            <date>2010-08-25 09:57:09 -0700</date>
            <delta_ts>2010-08-25 11:08:12 -0700</delta_ts>
            <desc>Comments addressed</desc>
            <filename>44531-patch</filename>
            <type>text/plain</type>
            <size>154013</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWI1OTEwZS4uOGQ2N2U2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzIgQEAKKzIwMTAtMDgtMjUgIE1pa2hhaWwgTmFn
YW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdG9yZSBoZWFwIHNuYXBzaG90
cyBpbiBJbnNwZWN0b3JQcm9maWxlckFnZW50LgorCisgICAgICAgIENoYW5nZSB0aGUgd2F5IGhl
YXAgc25hcHNob3RzIGFyZSB0cmFuc3BvcnRlZCB0byBJbnNwZWN0b3IKKyAgICAgICAgdG8gYmUg
YWxpZ25lZCB3aXRoIENQVSBwcm9maWxlcy4gQXMgYSByZXN1bHQsIHRoZSBIZWFwIHNuYXBzaG90
cworICAgICAgICB2aWV3IG9mIFByb2ZpbGVzIHBhbmVsIHdhcyB1cHN0cmVhbWVkIGludG8gV2Vi
Q29yZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ1MzEKKworICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6flNjcmlwdEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEhlYXBTbmFwc2hvdDo6dWlkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFw
c2hvdDo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEhlYXBTbmFwc2hvdDo6U2NyaXB0SGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRQcm9maWxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvZmlsZXI6
OnRha2VIZWFwU25hcHNob3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFw
c2hvdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90Ojp0
aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6OnVpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0SGVhcFNuYXBzaG90Ojp+U2NyaXB0SGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6U2NyaXB0SGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVNuYXBzaG90SGVhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVtb3Zl
UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZXNl
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRha2VI
ZWFwU25hcHNob3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb2ZpbGVDYWxs
YmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5yZXNldENvbXBs
ZXRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuZ2V0IHN0YXR1c0Jhckl0
ZW1zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5n
ZXQgcHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuc2V0IHByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Vmlldy5wcm90b3R5cGUucmVmcmVzaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Vmlldy5wcm90b3R5cGUucmVmcmVzaFNob3dBc1BlcmNlbnRzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZs
YWdzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5z
ZWFyY2hDYW5jZWxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5w
cm90b3R5cGUucGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Vmlldy5wcm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQuV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVWaWV3LnByb3RvdHlwZS5qdW1wVG9GaXJzdFNlYXJjaFJlc3VsdC5qdW1wVG9MYXN0
U2VhcmNoUmVzdWx0LldlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRv
TGFzdFNlYXJjaFJlc3VsdC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0LldlYkluc3BlY3Rvci5DUFVQ
cm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdC5qdW1wVG9QcmV2aW91
c1NlYXJjaFJlc3VsdC5XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBU
b1ByZXZpb3VzU2VhcmNoUmVzdWx0LnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdC5XZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdC5zaG93
aW5nTGFzdFNlYXJjaFJlc3VsdC5XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBl
LnNob3dpbmdMYXN0U2VhcmNoUmVzdWx0Ll9qdW1wVG9TZWFyY2hSZXN1bHQuV2ViSW5zcGVjdG9y
LkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LnJlZnJlc2hWaXNp
YmxlRGF0YSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5
cGUuX2NoYW5nZUJhc2UucmVzZXRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9jaGFuZ2VCYXNlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fY3JlYXRlU25hcHNob3REYXRhR3JpZExp
c3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9n
ZXRQcm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuX2xvYWRQcm9maWxlLmxvYWRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fbG9hZFByb2ZpbGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9tb3VzZURvd25JbkRhdGFHcmlk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5nZXQg
X2lzU2hvd2luZ0FzUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Vmlldy5wcm90b3R5cGUuX3BlcmNlbnRDbGlja2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcHJlcGFyZVByb2ZpbGUubWVyZ2VSZXRhaW5lcnMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9wcmVw
YXJlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuX3Jlc2V0RGF0YUdyaWRMaXN0LnByb2ZpbGVMb2FkZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9yZXNldERhdGFHcmlkTGlzdCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX3NvcnREYXRh
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fdXBk
YXRlQmFzZU9wdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcu
cHJvdG90eXBlLl91cGRhdGVQZXJjZW50QnV0dG9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fdXBkYXRlU3VtbWFyeUdyYXBoKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlci5vcGVyYXRpb25zLkxF
U1MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVy
Lm9wZXJhdGlvbnMuTEVTU19PUl9FUVVBTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9ucy5FUVVBTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9ucy5HUkVBVEVS
X09SX0VRVUFMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJj
aEhlbHBlci5vcGVyYXRpb25zLkdSRUFURVIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLnBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN1bW1hcnlWYWx1
ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5
cGUuZm9ybWF0VmFsdWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3Vs
YXRvci5wcm90b3R5cGUuZ2V0IHNob3dBc1BlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGUuc2V0IHNob3dBc1BlcmNlbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRvci5wcm90b3R5cGUuX2hpZ2hG
cm9tTG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRv
ci5wcm90b3R5cGUuX3ZhbHVlVG9TdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
dW1tYXJ5U2l6ZUNhbGN1bGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5
U2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlLl9oaWdoRnJvbUxvdyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5
cGUuZ2V0IF9oYXNSZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldCBfcGFyZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnBy
b3RvdHlwZS5fcG9wdWxhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VEaWZmKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3Rv
dHlwZS5zb3J0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5v
ZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5zaWduRm9yRGVsdGEpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnNo
b3dEZWx0YUFzUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0VG90YWxDb3VudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90
b3R5cGUuZ2V0VG90YWxTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
YXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXQgY291bnRQZXJjZW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJz
LnByb3RvdHlwZS5nZXQgc2l6ZVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldCBjb3VudERlbHRh
UGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
V2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0IHNpemVEZWx0YVBlcmNlbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90
eXBlLmdldCBkYXRhKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5jcmVhdGVDZWxsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5hcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5pbnNlcnRDaGlsZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlw
ZS5yZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWRMaXN0LnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9yLmNvbXBhcmF0
b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9w
ZXJ0eUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFH
cmlkUmV0YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRh
R3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuZ2V0IHNpemVQZXJjZW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuZ2V0
IHNpemVEZWx0YVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkUmV0YWluZXJOb2RlLnByb3RvdHlwZS5fY2FsY3VsYXRlUmV0YWluZXJzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCBidXR0b25Ub29s
dGlwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90
b3R5cGUuZ2V0IGJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCB3ZWxjb21lTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90
eXBlLmNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVhdGVWaWV3KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVWaWV3LmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DUFVQcm9m
aWxlVHlwZS5wcm90b3R5cGUuY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50Rm9yUHJvZmlsZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmFkZFByb2ZpbGVIZWFkZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnJlbW92ZVByb2Zp
bGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBl
LmdldFByb2ZpbGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3Rv
dHlwZS51cGRhdGVQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJh
clRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVF
bGVtZW50LnByb3RvdHlwZS5nZXQgbWFpblRpdGxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuY3NzOgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0gLmljb24p
OgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0uc21hbGwgLmljb24p
OgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtdmlldyk6CisgICAgICAgICguaGVhcC1zbmFwc2hv
dC12aWV3LnZpc2libGUpOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlk
KToKKyAgICAgICAgKC5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3VudC1jb2x1
bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLmNvdW50LWNv
bHVtbik6CisgICAgICAgICguaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGguc2l6ZS1j
b2x1bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLnNpemUt
Y29sdW1uKToKKyAgICAgICAgKC5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3Vu
dERlbHRhLWNvbHVtbik6CisgICAgICAgICguaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQg
dGQuY291bnREZWx0YS1jb2x1bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0
YS1ncmlkIHRoLnNpemVEZWx0YS1jb2x1bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtdmll
dyAuZGF0YS1ncmlkIHRkLnNpemVEZWx0YS1jb2x1bW4pOgorICAgICAgICAoI2hlYXAtc25hcHNo
b3Qtc3VtbWFyeS1jb250YWluZXIpOgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtc3VtbWFyeSk6
CisgICAgICAgICguaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IGNhbnZhcy5zdW1tYXJ5LWdyYXBoKToK
KyAgICAgICAgKC5oZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6
CisKIDIwMTAtMDgtMjUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5s
cHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IDM4ZDI1NTcuLjgwZDI0MjUgMTAwNjQ0CkJp
bmFyeSBmaWxlcyBhL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGFu
ZCBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGRpZmZlcgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggYzNkMjMwYS4uNWI2MjRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03NzcsNiArNzc3LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5o
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRI
ZWFwU25hcHNob3QuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5jZS5oIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4MTE3ZGZlLi5jMTdjNDhhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODU0
LDYgKzg1NCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxs
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdEdDRXZlbnQuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRHQ0V2ZW50LmgnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1NjcmlwdEhlYXBTbmFwc2hvdC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRJ
bnN0YW5jZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdEluc3RhbmNlLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAnLApAQCAtNDE4NCw2
ICs0MTg2LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNl
cnZlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Gb250Vmlldy5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9IQVJFbnRyeS5qcycsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlbHBTY3JlZW4uanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjJkMWM2OC4uZTBj
NTIyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNv
cmUucHJvCkBAIC0xMTU3LDYgKzExNTcsNyBAQCBIRUFERVJTICs9IFwKICAgICBiaW5kaW5ncy9q
cy9TY3JpcHRFdmVudExpc3RlbmVyLmggXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5oIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRHQ0V2ZW50LmggXAorICAgIGJpbmRpbmdz
L2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5oIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
aCBcCiAgICAgYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZS5oIFwKICAgICBiaW5kaW5ncy9qcy9T
Y3JpcHRQcm9maWxlTm9kZS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IGY3OTIwNmIuLjI1Y2JkZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agpAQCAtNDkyMTYsNiArNDkyMTYsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdEhlYXBTbmFwc2hv
dC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdEluc3RhbmNlLmgiDQogCQkJCQk+DQogCQkJCTwvRmls
ZT4NCkBAIC01MjE0OCw2ICs1MjE1MiwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWFwU25h
cHNob3RWaWV3LmpzIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTWV0cmljc1NpZGViYXJQYW5lLmpz
Ig0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBlZjRiODA0Li45NzdlZGM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc1NSw2ICsyNzU1LDcgQEAKIAkJOTdFRjdERkUx
MDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5
QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi87IH07CiAJCTlGMEQ2QjJFMTIxQkZFQkEw
MDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4OCAvKiBJ
bnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKIAkJOUYwRDZCMkYxMjFCRkVCQTAwNkMw
Mjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0
b3JQcm9maWxlckFnZW50LmggKi87IH07CisJCTlGM0I5NDdFMTIyNDE3NTgwMDUzMDRFNyAvKiBT
Y3JpcHRIZWFwU25hcHNob3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3Qu
aCAqLzsgfTsKIAkJOUY2RkMxOTYxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGNkZD
MTk0MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgKi87IH07CiAJCTlG
NkZDMTk3MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUY2RkMxOTUxMTIyRTgyQTAwRTgw
MTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUY3MjMwNEYxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlG
NzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg2MjcsNiArODYyOCw3IEBACiAJ
CTk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4
OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5RjBENkIyRDEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JQcm9m
aWxlckFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGM0I5NDdEMTIyNDE3
NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0SGVhcFNuYXBzaG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlGNkZDMTk0MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHREZWJ1Z1NlcnZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5
NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTY3JpcHREZWJ1Z1NlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Rjcy
MzA0QzExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjEzMSw2ICsxNjEzMyw3IEBACiAJCQkJNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBE
IC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovLAogCQkJCTRGRDhEMEYwMTE5QzcxOEIwMDJGQTgy
NSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLywKIAkJCQk0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUg
LyogU2NyaXB0R0NFdmVudC5oICovLAorCQkJCTlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBT
Y3JpcHRIZWFwU25hcHNob3QuaCAqLywKIAkJCQk5MzRDQzExNjBFRENBQzczMDBBNjU4RjIgLyog
U2NyaXB0SW5zdGFuY2UuaCAqLywKIAkJCQk0MUYwNjZFMzBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0T2JqZWN0LmNwcCAqLywKIAkJCQk0MUYwNjZFMjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0
T2JqZWN0LmggKi8sCkBAIC0yMDM4Niw2ICsyMDM4OSw3IEBACiAJCQkJODk0N0E4MkMxMjIyMkM0
NzAwRDk1RjJEIC8qIEpTTWV0YWRhdGFDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk0
N0E4M0MxMjIyMzRGNDAwRDk1RjJEIC8qIE1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
OTQ3QTgzRDEyMjIzNEY5MDBEOTVGMkQgLyogTWV0YWRhdGFDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOUYzQjk0N0UxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhl
YXBTbmFwc2hvdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFjNzgyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU2NyaXB0SGVhcFNuYXBzaG90X2gKKyNkZWZpbmUgU2NyaXB0SGVhcFNu
YXBzaG90X2gKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0SGVhcFNu
YXBzaG90IDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0SGVhcFNuYXBzaG90PiB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+U2NyaXB0SGVhcFNuYXBzaG90KCkge30KKworICAgIFN0cmluZyB0aXRs
ZSgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgdW5zaWduZWQgaW50IHVpZCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3Bl
Y3Rvck9iamVjdEZvckhlYWQoKSBjb25zdCB7IHJldHVybiBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgU2NyaXB0SGVhcFNuYXBzaG90KCkge30KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdEhlYXBTbmFwc2hvdF9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggMTgwYzQ5Zi4uMDVlN2EyNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmlu
ZSBTY3JpcHRQcm9maWxlcl9oCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyNp
bmNsdWRlICJTY3JpcHRIZWFwU25hcHNob3QuaCIKICNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIApAQCAtMzksOCArNDAsNyBAQCBjbGFzcyBTY3Jp
cHRQcm9maWxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0YXRlKiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIHZvaWQgdGFrZUhlYXBTbmFwc2hvdCgp
IHsgfQotICAgIHN0YXRpYyBsb25nIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZywgU3RyaW5nKikg
eyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4g
dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmKSB7IHJldHVybiAwOyB9CiAgICAgc3RhdGlj
IGJvb2wgaXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44ODVkMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRIZWFwU25hcHNob3QuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNjcmlwdEhlYXBTbmFwc2hvdC5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSA8djgtcHJvZmlsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgU2NyaXB0SGVhcFNuYXBzaG90Ojp0aXRsZSgp
IGNvbnN0Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHJldHVybiB0b1dlYkNv
cmVTdHJpbmcobV9zbmFwc2hvdC0+R2V0VGl0bGUoKSk7Cit9CisKK3Vuc2lnbmVkIGludCBTY3Jp
cHRIZWFwU25hcHNob3Q6OnVpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc25hcHNob3QtPkdl
dFVpZCgpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yKGNvbnN0IHY4OjpIZWFwR3JhcGhOb2RlKiByb290KQoreworICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGxvd0xldmVscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZW50cmllcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGRyZW4gPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGZvciAoaW50IGkgPSAwLCBjb3VudCA9IHJvb3QtPkdldENoaWxkcmVuQ291bnQoKTsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIG5vZGUg
PSByb290LT5HZXRDaGlsZChpKS0+R2V0VG9Ob2RlKCk7CisgICAgICAgIGlmIChub2RlLT5HZXRU
eXBlKCkgPT0gdjg6OkhlYXBHcmFwaE5vZGU6OmtJbnRlcm5hbCkgeworICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbG93TGV2ZWwgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICAgICAgbG93TGV2ZWwtPnNldE51bWJlcigiY291bnQiLCBub2RlLT5HZXRJbnN0
YW5jZXNDb3VudCgpKTsKKyAgICAgICAgICAgIGxvd0xldmVsLT5zZXROdW1iZXIoInNpemUiLCBu
b2RlLT5HZXRTZWxmU2l6ZSgpKTsKKyAgICAgICAgICAgIGxvd0xldmVsLT5zZXRTdHJpbmcoInR5
cGUiLCB0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSk7CisgICAgICAgICAgICBsb3dM
ZXZlbHMtPnNldE9iamVjdCh0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSwgbG93TGV2
ZWwpOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPkdldEluc3RhbmNlc0NvdW50KCkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFt
ZSIsIHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAgIGVudHJ5
LT5zZXROdW1iZXIoImNvdW50Iiwgbm9kZS0+R2V0SW5zdGFuY2VzQ291bnQoKSk7CisgICAgICAg
ICAgICBlbnRyeS0+c2V0TnVtYmVyKCJzaXplIiwgbm9kZS0+R2V0U2VsZlNpemUoKSk7CisgICAg
ICAgICAgICBlbnRyaWVzLT5zZXRPYmplY3QodG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUo
KSksIGVudHJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAg
IGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFtZSIsIHRvV2ViQ29yZVN0cmluZyhub2Rl
LT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwLCBjb3VudCA9IG5vZGUt
PkdldENoaWxkcmVuQ291bnQoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgICAgICAgICBj
b25zdCB2ODo6SGVhcEdyYXBoRWRnZSogdjhFZGdlID0gbm9kZS0+R2V0Q2hpbGQoaik7CisgICAg
ICAgICAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIHY4Q2hpbGQgPSB2OEVkZ2UtPkdl
dFRvTm9kZSgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxk
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+c2V0
U3RyaW5nKCJjb25zdHJ1Y3Rvck5hbWUiLCB0b1dlYkNvcmVTdHJpbmcodjhDaGlsZC0+R2V0TmFt
ZSgpKSk7CisgICAgICAgICAgICAgICAgY2hpbGQtPnNldE51bWJlcigiY291bnQiLCB2OEVkZ2Ut
PkdldE5hbWUoKS0+VG9JbnRlZ2VyKCktPlZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVudHJ5
LT5zZXRPYmplY3QoU3RyaW5nOjpudW1iZXIocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KHY4Q2hpbGQpKSwgY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hp
bGRyZW4tPnNldE9iamVjdChTdHJpbmc6Om51bWJlcihyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4obm9kZSkpLCBlbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0
LT5zZXRPYmplY3QoImxvd2xldmVscyIsIGxvd0xldmVscyk7CisgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoImVudHJpZXMiLCBlbnRyaWVzKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgiY2hpbGRyZW4i
LCBjaGlsZHJlbik7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBTY3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9ySGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
KG1fc25hcHNob3QtPkdldFJvb3QoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjc5NGE1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3Jp
cHRIZWFwU25hcHNob3RfaAorI2RlZmluZSBTY3JpcHRIZWFwU25hcHNob3RfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIHY4IHsKK2NsYXNzIEhlYXBTbmFwc2hv
dDsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CisK
K2NsYXNzIFNjcmlwdEhlYXBTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFNjcmlwdEhlYXBT
bmFwc2hvdD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEhlYXBTbmFw
c2hvdD4gY3JlYXRlKGNvbnN0IHY4OjpIZWFwU25hcHNob3QqIHNuYXBzaG90KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JpcHRIZWFwU25hcHNob3Qoc25hcHNob3QpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+U2NyaXB0SGVhcFNuYXBzaG90KCkge30KKworICAgIFN0cmlu
ZyB0aXRsZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCB1aWQoKSBjb25zdDsKKworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBTY3JpcHRIZWFwU25hcHNob3QoY29uc3Qgdjg6OkhlYXBT
bmFwc2hvdCogc25hcHNob3QpCisgICAgICAgIDogbV9zbmFwc2hvdChzbmFwc2hvdCkKKyAgICB7
fQorCisgICAgY29uc3Qgdjg6OkhlYXBTbmFwc2hvdCogbV9zbmFwc2hvdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdEhlYXBTbmFwc2hvdF9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGUuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlLmNwcAppbmRleCA5NWFjMGRlLi4yOWJkYWQ0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGUuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvcihjb25z
dCB2ODo6Q3B1UHJvZmlsZU4KICAgICAgICAgY2hpbGRyZW4tPnB1c2hPYmplY3QoYnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3IoY2hpbGQpKTsKICAgICB9CiAgICAgcmVzdWx0LT5zZXRBcnJheSgiY2hp
bGRyZW4iLCBjaGlsZHJlbik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFNjcmlwdFByb2Zp
bGU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuY3BwCmluZGV4IDBkZTRhMjQuLmFiN2NmYTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCkBAIC0yOSw4ICsyOSw5IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKKworI2luY2x1ZGUg
Ikluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogCiAjaW5jbHVk
ZSA8djgtcHJvZmlsZXIuaD4KQEAgLTUyLDIxICs1MywxMSBAQCBQYXNzUmVmUHRyPFNjcmlwdFBy
b2ZpbGU+IFNjcmlwdFByb2ZpbGVyOjpzdG9wKFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3Ry
aW5nJgogICAgIHJldHVybiBwcm9maWxlID8gU2NyaXB0UHJvZmlsZTo6Y3JlYXRlKHByb2ZpbGUp
IDogMDsKIH0KIAotdm9pZCBTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdCgpCi17Ci0g
ICAgdjg6OlY4OjpSZXN1bWVQcm9maWxlckV4KHY4OjpQUk9GSUxFUl9NT0RVTEVfSEVBUF9TTkFQ
U0hPVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHY4OjpQUk9GSUxFUl9NT0RVTEVf
SEVBUF9TVEFUUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHY4OjpQUk9GSUxFUl9N
T0RVTEVfSlNfQ09OU1RSVUNUT1JTKTsKLX0KLQotbG9uZyBTY3JpcHRQcm9maWxlcjo6Z2V0UHJv
ZmlsZXJMb2dMaW5lcyhsb25nIHBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpCitQYXNzUmVmUHRyPFNj
cmlwdEhlYXBTbmFwc2hvdD4gU2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QoY29uc3Qg
U3RyaW5nJiB0aXRsZSkKIHsKLSAgICBzdGF0aWMgY2hhciBidWZmZXJbNjU1MzZdOwotICAgIGNv
bnN0IGludCByZWFkU2l6ZSA9IHY4OjpWODo6R2V0TG9nTGluZXMocG9zaXRpb24sIGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlcikgLSAxKTsKLSAgICBidWZmZXJbcmVhZFNpemVdID0gJ1wwJzsKLSAgICBw
b3NpdGlvbiArPSByZWFkU2l6ZTsKLSAgICAqZGF0YSA9IGJ1ZmZlcjsKLSAgICByZXR1cm4gcG9z
aXRpb247CisgICAgdjg6OkhhbmRsZVNjb3BlIGhzOworICAgIGNvbnN0IHY4OjpIZWFwU25hcHNo
b3QqIHNuYXBzaG90ID0gdjg6OkhlYXBQcm9maWxlcjo6VGFrZVNuYXBzaG90KHY4U3RyaW5nKHRp
dGxlKSwgdjg6OkhlYXBTbmFwc2hvdDo6a0FnZ3JlZ2F0ZWQpOworICAgIHJldHVybiBzbmFwc2hv
dCA/IFNjcmlwdEhlYXBTbmFwc2hvdDo6Y3JlYXRlKHNuYXBzaG90KSA6IDA7CiB9CiAKIGJvb2wg
U2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuaAppbmRleCBiMWFiM2IxLi5iNzVhMDU0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRQcm9maWxlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFNjcmlwdFByb2Zp
bGVyX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0SGVh
cFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAKQEAgLTM5LDEyICs0MCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKwogY2xhc3MgU2NyaXB0UHJvZmlsZXIgOiBwdWJsaWMg
Tm9uY29weWFibGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN0YXJ0KFNjcmlwdFN0YXRl
KiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gc3RvcChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUp
OwotICAgIHN0YXRpYyB2b2lkIHRha2VIZWFwU25hcHNob3QoKTsKLSAgICBzdGF0aWMgbG9uZyBn
ZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9zaXRpb24sIFN0cmluZyogZGF0YSk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiB0YWtlSGVhcFNuYXBzaG90KGNvbnN0
IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFibGVk
KCk7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBhNTZlZjE0Li5hNWI3MjIxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTE1MCwxMyArMTUwLDEyIEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCiAg
ICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGluIGxvbmcg
Y2FsbElkLCBvdXQgQXJyYXkgaGVhZGVycyk7Ci0gICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2
b2lkIGdldFByb2ZpbGUoaW4gbG9uZyBjYWxsSWQsIGluIHVuc2lnbmVkIGxvbmcgdWlkLCBvdXQg
T2JqZWN0IHByb2ZpbGUpOworICAgICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCBnZXRQcm9m
aWxlKGluIGxvbmcgY2FsbElkLCBpbiBTdHJpbmcgdHlwZSwgaW4gdW5zaWduZWQgbG9uZyB1aWQs
IG91dCBPYmplY3QgcHJvZmlsZSk7CiAKLSAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQg
cmVtb3ZlUHJvZmlsZShpbiB1bnNpZ25lZCBsb25nIHVpZCk7CisgICAgICAgIFtoYW5kbGVyPVBy
b2ZpbGVyXSB2b2lkIHJlbW92ZVByb2ZpbGUoaW4gU3RyaW5nIHR5cGUsIGluIHVuc2lnbmVkIGxv
bmcgdWlkKTsKICAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgY2xlYXJQcm9maWxlcygp
OwogCi0gICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgdGFrZUhlYXBTbmFwc2hvdCgpOwot
ICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVyTG9nTGluZXMoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0UG9zaXRpb24sIG91dCBT
dHJpbmcgbG9nKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgdGFrZUhlYXBTbmFw
c2hvdCgpOwogI2VuZGlmCiAgICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgc2V0SW5qZWN0
ZWRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNjcmlwdFNvdXJjZSk7CiAgICAgICAgIFtoYW5kbGVy
PUJhY2tlbmRdIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGluIGxvbmcgY2FsbElkLCBp
biBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBtZXRob2ROYW1lLCBpbiBTdHJpbmcg
YXJndW1lbnRzLCBvdXQgVmFsdWUgcmVzdWx0LCBvdXQgYm9vbGVhbiBpc0V4Y2VwdGlvbik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDk5ZjQwYTkuLjc5MWUzYTYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC02OCwxNyArNjgsNiBA
QCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFs
d2F5cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6dGFrZUhlYXBTbmFwc2hvdCgpCi17
Ci0gICAgU2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kOjpnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9zaXRpb24sIGxvbmcqIG91
dFBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpCi17Ci0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtYWtl
IGluc3BlY3RvciBkaXNwYXRjaGVyIHBsdWdnYWJsZSwgc28gdGhhdCBlbWJlZGRlcnMgY291bGQg
Y29udHJpYnV0ZSBBUElzIGluc3RlYWQgb2YgcG9sbHV0aW5nIHRoZSBjb3JlIG9uZQotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzM1NwotICAgICpvdXRQ
b3NpdGlvbiA9IFNjcmlwdFByb2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKHBvc2l0aW9uLCBk
YXRhKTsKLX0KICNlbmRpZgogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEluamVjdGVkU2Ny
aXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCmluZGV4IDIzYjMxYTMuLjFmY2VjOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmgKQEAgLTYwLDggKzYwLDYgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7Ci0gICAg
dm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7Ci0gICAgdm9pZCBnZXRQcm9maWxlckxvZ0xpbmVzKGxv
bmcgcG9zaXRpb24sIGxvbmcqIG91dFBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggYTcz
NDY5YS4uOTE2MWMzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0
SGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNj
cmlwdFByb2ZpbGVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTEsNiArNTIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7
CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBIZWFwUHJvZmlsZVR5cGUgPSAiSEVBUCI7CiAKIFBhc3NPd25Q
dHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRl
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCiB7CkBAIC02NSw2ICs2
Nyw3IEBAIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29uCiAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0
aWF0ZWRQcm9maWxlKGZhbHNlKQogICAgICwgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVO
dW1iZXIoLTEpCiAgICAgLCBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigxKQorICAg
ICwgbV9uZXh0VXNlckluaXRpYXRlZEhlYXBTbmFwc2hvdE51bWJlcigxKQogewogfQogCkBAIC0x
MDQsNiArMTA3LDE1IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjCiAgICAgcmV0dXJuIGhlYWRl
cjsKIH0KIAorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6OmNyZWF0ZVNuYXBzaG90SGVhZGVyKGNvbnN0IFNjcmlwdEhlYXBTbmFwc2hvdCYgc25hcHNo
b3QpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBoZWFkZXItPnNldFN0cmluZygidGl0bGUiLCBzbmFwc2hvdC50
aXRsZSgpKTsKKyAgICBoZWFkZXItPnNldE51bWJlcigidWlkIiwgc25hcHNob3QudWlkKCkpOwor
ICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0eXBlSWQiLCBTdHJpbmcoSGVhcFByb2ZpbGVUeXBlKSk7
CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojpk
aXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKQEAgLTEzOCwyOCArMTUwLDQ2IEBAIHZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogaGVhZGVycykKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNF
bmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwogICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkKICAgICAgICAg
KCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSh1bnNpZ25lZCB1
aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQotewotICAgIFByb2Zp
bGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwotICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJv
ZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9i
amVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsK
KyAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNFbmQgPSBtX3NuYXBzaG90
cy5lbmQoKTsKKyAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFw
c2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQorICAgICAgICAoKmhlYWRl
cnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5
cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3Qp
Cit7CisgICAgaWYgKHR5cGUgPT0gQ1BVUHJvZmlsZVR5cGUpIHsKKyAgICAgICAgUHJvZmlsZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7CisgICAgICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKSB7CisgICAgICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0
ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpOworICAgICAgICAgICAgKCpwcm9maWxlT2JqZWN0
KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JI
ZWFkKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlw
ZSkgeworICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3Rz
LmZpbmQodWlkKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3RzLmVuZCgpKSB7CisgICAg
ICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25k
KTsKKyAgICAgICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5z
ZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIAotdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZW1vdmVQcm9maWxlKHVuc2lnbmVk
IHVpZCkKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZShjb25zdCBT
dHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCkKIHsKLSAgICBpZiAobV9wcm9maWxlcy5jb250YWlu
cyh1aWQpKQotICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworICAgIGlmICh0eXBlID09
IENQVVByb2ZpbGVUeXBlKSB7CisgICAgICAgIGlmIChtX3Byb2ZpbGVzLmNvbnRhaW5zKHVpZCkp
CisgICAgICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBIZWFwUHJvZmlsZVR5cGUpIHsKKyAgICAgICAgaWYgKG1fc25hcHNob3RzLmNvbnRhaW5z
KHVpZCkpCisgICAgICAgICAgICBtX3NuYXBzaG90cy5yZW1vdmUodWlkKTsKKyAgICB9CiB9CiAK
IHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVzZXRTdGF0ZSgpCiB7CiAgICAgbV9wcm9m
aWxlcy5jbGVhcigpOworICAgIG1fc25hcHNob3RzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50VXNl
ckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwogICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9m
aWxlTnVtYmVyID0gMTsKKyAgICBtX25leHRVc2VySW5pdGlhdGVkSGVhcFNuYXBzaG90TnVtYmVy
ID0gMTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+cmVzZXRQcm9m
aWxlc1BhbmVsKCk7CiB9CkBAIC0xOTksNiArMjI5LDE3IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIHRvZ2dsZVJlY29yZEJ1
dHRvbihmYWxzZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBT
bmFwc2hvdCgpCit7CisgICAgU3RyaW5nIHRpdGxlID0gU3RyaW5nOjpmb3JtYXQoIiVzLiVkIiwg
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCBtX25leHRVc2VySW5pdGlhdGVkSGVhcFNuYXBzaG90
TnVtYmVyKyspOworICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90ID0gU2Ny
aXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QodGl0bGUpOworICAgIGlmIChzbmFwc2hvdCkg
eworICAgICAgICBtX3NuYXBzaG90cy5hZGQoc25hcHNob3QtPnVpZCgpLCBzbmFwc2hvdCk7Cisg
ICAgICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICAgICAgbV9mcm9udGVuZC0+YWRkUHJvZmls
ZUhlYWRlcihjcmVhdGVTbmFwc2hvdEhlYWRlcigqc25hcHNob3QpKTsKKyAgICB9Cit9CisKIHZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9m
aWxpbmcpCiB7CiAgICAgaWYgKG1fZnJvbnRlbmQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmgKaW5kZXggOTU5M2ViYS4uNDIxZWZiMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIFNjcmlwdEhlYXBTbmFw
c2hvdDsKIGNsYXNzIFNjcmlwdFByb2ZpbGU7CiAKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNjAsMjIgKzYxLDI1IEBAIHB1YmxpYzoKICAg
ICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KICAgICBTdHJpbmcgZ2V0Q3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIg
PSBmYWxzZSk7CiAgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgdm9pZCBnZXRQcm9maWxlKGNv
bnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
cHJvZmlsZU9iamVjdCk7CiAgICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
KCkgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsgfQotICAgIHZvaWQg
cmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpOworICAgIHZvaWQgcmVtb3ZlUHJvZmlsZShjb25z
dCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCk7CiAgICAgdm9pZCByZXNldFN0YXRlKCk7CiAg
ICAgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpIHsgbV9mcm9u
dGVuZCA9IGZyb250ZW5kOyB9CiAgICAgdm9pZCBzdGFydFByb2ZpbGluZygpIHsgc3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2Zp
bGluZygpOwogICAgIHZvaWQgc3RvcFByb2ZpbGluZygpIHsgc3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoKTsgfQogICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2
b2lkIHRha2VIZWFwU25hcHNob3QoKTsKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29s
IGlzUHJvZmlsaW5nKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQg
aW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiA+IEhlYXBTbmFw
c2hvdHNNYXA7CiAKICAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xs
ZXIqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJvZmlsZUhlYWRl
cihjb25zdCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlU25hcHNob3RIZWFkZXIoY29uc3QgU2NyaXB0SGVhcFNuYXBzaG90JiBz
bmFwc2hvdCk7CiAKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xs
ZXI7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CkBAIC04Myw3ICs4Nyw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOwogICAg
IGludCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKICAgICB1bnNpZ25lZCBt
X25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKKyAgICB1bnNpZ25lZCBtX25leHRVc2Vy
SW5pdGlhdGVkSGVhcFNuYXBzaG90TnVtYmVyOwogICAgIFByb2ZpbGVzTWFwIG1fcHJvZmlsZXM7
CisgICAgSGVhcFNuYXBzaG90c01hcCBtX3NuYXBzaG90czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25h
cHNob3RWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZp
ZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyN2I1NgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3
LmpzCkBAIC0wLDAgKzEsOTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEhlYXAgc25hcHNob3Qg
dmlldyBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmll
dyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKK3sKKyAgICBXZWJJbnNwZWN0b3IuVmlldy5j
YWxsKHRoaXMpOworCisgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImhlYXAtc25hcHNo
b3QtdmlldyIpOworCisgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgdGhpcy5wYXJlbnQu
YWRkRXZlbnRMaXN0ZW5lcigicHJvZmlsZSBhZGRlZCIsIHRoaXMuX3VwZGF0ZUJhc2VPcHRpb25z
LCB0aGlzKTsKKworICAgIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ID0gZmFsc2U7CisgICAgdGhp
cy5zaG93U2l6ZUFzUGVyY2VudCA9IGZhbHNlOworICAgIHRoaXMuc2hvd0NvdW50RGVsdGFBc1Bl
cmNlbnQgPSBmYWxzZTsKKyAgICB0aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPSBmYWxzZTsK
KworICAgIHRoaXMuY2F0ZWdvcmllcyA9IHsKKyAgICAgICAgY29kZTogbmV3IFdlYkluc3BlY3Rv
ci5SZXNvdXJjZUNhdGVnb3J5KCJjb2RlIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb2RlIiks
ICJyZ2IoMjU1LDEyMSwwKSIpLAorICAgICAgICBkYXRhOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291
cmNlQ2F0ZWdvcnkoImRhdGEiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdHMiKSwgInJn
Yig0NywxMDIsMjM2KSIpCisgICAgfTsKKworICAgIHZhciBzdW1tYXJ5Q29udGFpbmVyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgc3VtbWFyeUNvbnRhaW5lci5pZCA9ICJo
ZWFwLXNuYXBzaG90LXN1bW1hcnktY29udGFpbmVyIjsKKworICAgIHRoaXMuY291bnRzU3VtbWFy
eUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNhdGVnb3JpZXMpOworICAg
IHRoaXMuY291bnRzU3VtbWFyeUJhci5lbGVtZW50LmNsYXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90
LXN1bW1hcnkiOworICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci5jYWxjdWxhdG9yID0gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRvcigpOworICAgIHZhciBjb3VudHNM
YWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGNvdW50c0xhYmVsLmNs
YXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwiOworICAgIGNvdW50c0xhYmVs
LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3VudCIpOworICAgIHRoaXMu
Y291bnRzU3VtbWFyeUJhci5lbGVtZW50LmFwcGVuZENoaWxkKGNvdW50c0xhYmVsKTsKKyAgICBz
dW1tYXJ5Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY291bnRzU3VtbWFyeUJhci5lbGVtZW50
KTsKKworICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyID0gbmV3IFdlYkluc3BlY3Rvci5TdW1tYXJ5
QmFyKHRoaXMuY2F0ZWdvcmllcyk7CisgICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuZWxlbWVudC5j
bGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IjsKKyAgICB0aGlzLnNpemVzU3VtbWFy
eUJhci5jYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxh
dG9yKCk7CisgICAgdmFyIHNpemVzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJl
bCIpOworICAgIHNpemVzTGFiZWwuY2xhc3NOYW1lID0gImhlYXAtc25hcHNob3Qtc3VtbWFyeS1s
YWJlbCI7CisgICAgc2l6ZXNMYWJlbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU2l6ZSIpOworICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmVsZW1lbnQuYXBwZW5kQ2hpbGQo
c2l6ZXNMYWJlbCk7CisgICAgc3VtbWFyeUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNpemVz
U3VtbWFyeUJhci5lbGVtZW50KTsKKworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzdW1t
YXJ5Q29udGFpbmVyKTsKKworICAgIHZhciBjb2x1bW5zID0geyAiY29ucyI6IHsgdGl0bGU6IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ29uc3RydWN0b3IiKSwgZGlzY2xvc3VyZTogdHJ1ZSwgc29y
dGFibGU6IHRydWUgfSwKKyAgICAgICAgICAgICAgICAgICAgImNvdW50IjogeyB0aXRsZTogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDb3VudCIpLCB3aWR0aDogIjU0cHgiLCBzb3J0YWJsZTogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgICAgICAic2l6ZSI6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiU2l6ZSIpLCB3aWR0aDogIjcycHgiLCBzb3J0OiAiZGVzY2VuZGluZyIsIHNvcnRh
YmxlOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgICAgICJjb3VudERlbHRhIjogeyB0aXRsZTog
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJceGIxIENvdW50IiksIHdpZHRoOiAiNzJweCIsIHNvcnRh
YmxlOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgICAgICJzaXplRGVsdGEiOiB7IHRpdGxlOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlx4YjEgU2l6ZSIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJs
ZTogdHJ1ZSB9IH07CisKKyAgICB0aGlzLmRhdGFHcmlkID0gbmV3IFdlYkluc3BlY3Rvci5EYXRh
R3JpZChjb2x1bW5zKTsKKyAgICB0aGlzLmRhdGFHcmlkLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRp
bmcgY2hhbmdlZCIsIHRoaXMuX3NvcnREYXRhLCB0aGlzKTsKKyAgICB0aGlzLmRhdGFHcmlkLmVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fbW91c2VEb3duSW5EYXRh
R3JpZC5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5kYXRhR3JpZC5lbGVtZW50KTsKKworICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7CisKKyAg
ICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0
Iik7CisgICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1p
dGVtIjsKKyAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5n
ZSIsIHRoaXMuX2NoYW5nZUJhc2UuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX3VwZGF0
ZUJhc2VPcHRpb25zKCk7CisKKyAgICB0aGlzLnBlcmNlbnRCdXR0b24gPSBuZXcgV2ViSW5zcGVj
dG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgInBlcmNlbnQtdGltZS1zdGF0dXMtYmFyLWl0ZW0gc3Rh
dHVzLWJhci1pdGVtIik7CisgICAgdGhpcy5wZXJjZW50QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fcGVyY2VudENsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOworCisgICAg
dGhpcy5fbG9hZFByb2ZpbGUodGhpcy5wcm9maWxlLCBwcm9maWxlQ2FsbGJhY2suYmluZCh0aGlz
KSk7CisKKyAgICBmdW5jdGlvbiBwcm9maWxlQ2FsbGJhY2socHJvZmlsZSkKKyAgICB7CisgICAg
ICAgIHZhciBsaXN0ID0gdGhpcy5fZ2V0UHJvZmlsZXMoKTsKKyAgICAgICAgdmFyIHByb2ZpbGVJ
bmRleDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgaWYgKGxpc3RbaV0udWlkID09IHByb2ZpbGUudWlkKSB7CisgICAgICAgICAgICAg
ICAgcHJvZmlsZUluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKHByb2ZpbGVJbmRleCA+IDApCisgICAgICAgICAgICB0aGlzLmJhc2VT
ZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSBwcm9maWxlSW5kZXggLSAxOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSBw
cm9maWxlSW5kZXg7CisgICAgICAgIHRoaXMuX3Jlc2V0RGF0YUdyaWRMaXN0KHJlc2V0Q29tcGxl
dGVkLmJpbmQodGhpcykpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlc2V0Q29tcGxldGVkKCkK
KyAgICB7CisgICAgICAgIHRoaXMucmVmcmVzaCgpOworICAgICAgICB0aGlzLl91cGRhdGVQZXJj
ZW50QnV0dG9uKCk7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcu
cHJvdG90eXBlID0geworCisgICAgZ2V0IHN0YXR1c0Jhckl0ZW1zKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBbdGhpcy5iYXNlU2VsZWN0RWxlbWVudCwgdGhpcy5wZXJjZW50QnV0dG9uLmVsZW1l
bnRdOworICAgIH0sCisKKyAgICBnZXQgcHJvZmlsZSgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fcHJvZmlsZTsKKyAgICB9LAorCisgICAgc2V0IHByb2ZpbGUocHJvZmlsZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX3Byb2ZpbGUgPSBwcm9maWxlOworICAgIH0sCisKKyAgICBzaG93OiBm
dW5jdGlvbihwYXJlbnRFbGVtZW50KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlLnNob3cuY2FsbCh0aGlzLCBwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgdGhpcy5k
YXRhR3JpZC51cGRhdGVXaWR0aHMoKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlLmhpZGUuY2FsbCh0aGlz
KTsKKyAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CisgICAgfSwK
KworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZGF0YUdy
aWQpCisgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLnVwZGF0ZVdpZHRocygpOworICAgIH0sCisK
KyAgICByZWZyZXNoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRhdGFHcmlkLnJl
bW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5zbmFwc2hvdERh
dGFHcmlkTGlzdC5jaGlsZHJlbjsKKyAgICAgICAgdmFyIGNvdW50ID0gY2hpbGRyZW4ubGVuZ3Ro
OworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCisg
ICAgICAgICAgICB0aGlzLmRhdGFHcmlkLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7CisK
KyAgICAgICAgdGhpcy5fdXBkYXRlU3VtbWFyeUdyYXBoKCk7CisgICAgfSwKKworICAgIHJlZnJl
c2hTaG93QXNQZXJjZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdXBkYXRl
UGVyY2VudEJ1dHRvbigpOworICAgICAgICB0aGlzLnJlZnJlc2hWaXNpYmxlRGF0YSgpOworICAg
IH0sCisKKyAgICBfZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdzOiBmdW5jdGlvbihub2RlKQorICAg
IHsKKyAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uOworICAgICAg
ICBkZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50Q29sdW1uOworICAgICAgICBkZWxldGUg
bm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVDb2x1bW47CisgICAgICAgIGRlbGV0ZSBub2RlLl9zZWFy
Y2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbjsKKyAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1h
dGNoZWRTaXplRGVsdGFDb2x1bW47CisgICAgfSwKKworICAgIHNlYXJjaENhbmNlbGVkOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fc2VhcmNoUmVzdWx0cykgeworICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgdmFyIHByb2ZpbGVOb2RlID0gdGhpcy5fc2VhcmNoUmVzdWx0
c1tpXS5wcm9maWxlTm9kZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVTZWFyY2hNYXRj
aGVkRmxhZ3MocHJvZmlsZU5vZGUpOworICAgICAgICAgICAgICAgIHByb2ZpbGVOb2RlLnJlZnJl
c2goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSB0aGlzLl9z
ZWFyY2hGaW5pc2hlZENhbGxiYWNrOworICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0
SW5kZXggPSAtMTsKKyAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOworICAgIH0sCisK
KyAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgZmluaXNoZWRDYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIC8vIENhbGwgc2VhcmNoQ2FuY2VsZWQgc2luY2UgaXQgd2lsbCByZXNldCBl
dmVyeXRoaW5nIHdlIG5lZWQgYmVmb3JlIGRvaW5nIGEgbmV3IHNlYXJjaC4KKyAgICAgICAgdGhp
cy5zZWFyY2hDYW5jZWxlZCgpOworCisgICAgICAgIHF1ZXJ5ID0gcXVlcnkudHJpbSgpOworCisg
ICAgICAgIGlmICghcXVlcnkubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgPSBmaW5pc2hlZENhbGxiYWNrOworCisgICAg
ICAgIHZhciBoZWxwZXIgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxw
ZXI7CisKKyAgICAgICAgdmFyIG9wZXJhdGlvbkFuZE51bWJlciA9IGhlbHBlci5wYXJzZU9wZXJh
dGlvbkFuZE51bWJlcihxdWVyeSk7CisgICAgICAgIHZhciBvcGVyYXRpb24gPSBvcGVyYXRpb25B
bmROdW1iZXJbMF07CisgICAgICAgIHZhciBxdWVyeU51bWJlciA9IG9wZXJhdGlvbkFuZE51bWJl
clsxXTsKKworICAgICAgICB2YXIgcGVyY2VudFVuaXRzID0gaGVscGVyLnBlcmNlbnRzLnRlc3Qo
cXVlcnkpOworICAgICAgICB2YXIgbWVnYUJ5dGVzVW5pdHMgPSBoZWxwZXIubWVnYUJ5dGVzLnRl
c3QocXVlcnkpOworICAgICAgICB2YXIga2lsb0J5dGVzVW5pdHMgPSBoZWxwZXIua2lsb0J5dGVz
LnRlc3QocXVlcnkpOworICAgICAgICB2YXIgYnl0ZXNVbml0cyA9IGhlbHBlci5ieXRlcy50ZXN0
KHF1ZXJ5KTsKKworICAgICAgICB2YXIgcXVlcnlOdW1iZXJCeXRlcyA9IChtZWdhQnl0ZXNVbml0
cyA/IChxdWVyeU51bWJlciAqIDEwMjQgKiAxMDI0KSA6IChraWxvQnl0ZXNVbml0cyA/IChxdWVy
eU51bWJlciAqIDEwMjQpIDogcXVlcnlOdW1iZXIpKTsKKworICAgICAgICBmdW5jdGlvbiBtYXRj
aGVzUXVlcnkoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlKQorICAgICAgICB7CisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2RlbGV0ZVNlYXJjaE1h
dGNoZWRGbGFncyhoZWFwU25hcHNob3REYXRhR3JpZE5vZGUpOworCisgICAgICAgICAgICBpZiAo
cGVyY2VudFVuaXRzKSB7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
Ll9zZWFyY2hNYXRjaGVkQ291bnRDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdy
aWROb2RlLmNvdW50UGVyY2VudCwgcXVlcnlOdW1iZXIpOworICAgICAgICAgICAgICAgIGhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVDb2x1bW4gPSBvcGVyYXRpb24o
aGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLnNpemVQZXJjZW50LCBxdWVyeU51bWJlcik7CisgICAg
ICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnRE
ZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnREZWx0
YVBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKKyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRh
R3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRTaXplRGVsdGFDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNu
YXBzaG90RGF0YUdyaWROb2RlLnNpemVEZWx0YVBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobWVnYUJ5dGVzVW5pdHMgfHwga2lsb0J5dGVzVW5pdHMgfHwgYnl0
ZXNVbml0cykgeworICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2Vh
cmNoTWF0Y2hlZFNpemVDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
LnNpemUsIHF1ZXJ5TnVtYmVyQnl0ZXMpOworICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFw
U25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZURlbHRhLCBxdWVyeU51bWJlckJ5dGVzKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
Ll9zZWFyY2hNYXRjaGVkQ291bnRDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdy
aWROb2RlLmNvdW50LCBxdWVyeU51bWJlcik7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90
RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbiA9IG9wZXJhdGlvbiho
ZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnREZWx0YSwgcXVlcnlOdW1iZXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLmNvbnN0
cnVjdG9yTmFtZS5oYXNTdWJzdHJpbmcocXVlcnksIHRydWUpKQorICAgICAgICAgICAgICAgIGhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1bW4gPSB0cnVlOwor
CisgICAgICAgICAgICBpZiAoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVk
Q29uc0NvbHVtbiB8fAorICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5f
c2VhcmNoTWF0Y2hlZENvdW50Q29sdW1uIHx8CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90
RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbiB8fAorICAgICAgICAgICAgICAg
IGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1bW4g
fHwKKyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNo
ZWRTaXplRGVsdGFDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGUucmVmcmVzaCgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgY3VycmVudCA9IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QuY2hpbGRyZW5bMF07CisgICAg
ICAgIHZhciBkZXB0aCA9IDA7CisgICAgICAgIHZhciBpbmZvID0ge307CisKKyAgICAgICAgLy8g
VGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBsZXZlbHMgb2YgaGVhcCBzbmFwc2hvdCBub2RlcyBy
ZXByZXNlbnQgcmV0YWluZXJzLAorICAgICAgICAvLyBzbyByZWN1cnNpdmUgZXhwYW5zaW9uIHdp
bGwgYmUgaW5maW5pdGUsIHNpbmNlIGEgZ3JhcGggaXMgYmVpbmcgdHJhdmVyc2VkLgorICAgICAg
ICAvLyBTbyBkZWZhdWx0IHRvIGEgcmVjdXJzaW9uIGNhcCBvZiAyIGxldmVscy4KKyAgICAgICAg
dmFyIG1heERlcHRoID0gMjsKKworICAgICAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICAg
ICAgaWYgKG1hdGNoZXNRdWVyeShjdXJyZW50KSkKKyAgICAgICAgICAgICAgICB0aGlzLl9zZWFy
Y2hSZXN1bHRzLnB1c2goeyBwcm9maWxlTm9kZTogY3VycmVudCB9KTsKKyAgICAgICAgICAgIGN1
cnJlbnQgPSBjdXJyZW50LnRyYXZlcnNlTmV4dE5vZGUoZmFsc2UsIG51bGwsIChkZXB0aCA+PSBt
YXhEZXB0aCksIGluZm8pOworICAgICAgICAgICAgZGVwdGggKz0gaW5mby5kZXB0aENoYW5nZTsK
KyAgICAgICAgfQorCisgICAgICAgIGZpbmlzaGVkQ2FsbGJhY2sodGhpcywgdGhpcy5fc2VhcmNo
UmVzdWx0cy5sZW5ndGgpOworICAgIH0sCisKKyAgICBqdW1wVG9GaXJzdFNlYXJjaFJlc3VsdDog
V2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5qdW1wVG9GaXJzdFNlYXJjaFJl
c3VsdCwKKyAgICBqdW1wVG9MYXN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmls
ZVZpZXcucHJvdG90eXBlLmp1bXBUb0xhc3RTZWFyY2hSZXN1bHQsCisgICAganVtcFRvTmV4dFNl
YXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5qdW1wVG9O
ZXh0U2VhcmNoUmVzdWx0LAorICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBXZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0
LAorICAgIHNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVW
aWV3LnByb3RvdHlwZS5zaG93aW5nRmlyc3RTZWFyY2hSZXN1bHQsCisgICAgc2hvd2luZ0xhc3RT
ZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuc2hvd2lu
Z0xhc3RTZWFyY2hSZXN1bHQsCisgICAgX2p1bXBUb1NlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9y
LkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LAorCisgICAgcmVm
cmVzaFZpc2libGVEYXRhOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY2hpbGQgPSB0
aGlzLmRhdGFHcmlkLmNoaWxkcmVuWzBdOworICAgICAgICB3aGlsZSAoY2hpbGQpIHsKKyAgICAg
ICAgICAgIGNoaWxkLnJlZnJlc2goKTsKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQudHJhdmVy
c2VOZXh0Tm9kZShmYWxzZSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
dXBkYXRlU3VtbWFyeUdyYXBoKCk7CisgICAgfSwKKworICAgIF9jaGFuZ2VCYXNlOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgaWYgKHRoaXMuYmFzZVNuYXBzaG90LnVpZCA9PSB0aGlzLl9nZXRQcm9m
aWxlcygpW3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleF0udWlkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3Jlc2V0RGF0YUdyaWRMaXN0KHJlc2V0Q29t
cGxldGVkLmJpbmQodGhpcykpOworCisgICAgICAgIGZ1bmN0aW9uIHJlc2V0Q29tcGxldGVkKCkg
eworICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisKKyAgICAgICAgICAgIGlmICghdGhpcy5j
dXJyZW50UXVlcnkgfHwgIXRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgfHwgIXRoaXMuX3Nl
YXJjaFJlc3VsdHMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBU
aGUgY3VycmVudCBzZWFyY2ggbmVlZHMgdG8gYmUgcGVyZm9ybWVkIGFnYWluLiBGaXJzdCBuZWdh
dGUgb3V0IHByZXZpb3VzIG1hdGNoCisgICAgICAgICAgICAvLyBjb3VudCBieSBjYWxsaW5nIHRo
ZSBzZWFyY2ggZmluaXNoZWQgY2FsbGJhY2sgd2l0aCBhIG5lZ2F0aXZlIG51bWJlciBvZiBtYXRj
aGVzLgorICAgICAgICAgICAgLy8gVGhlbiBwZXJmb3JtIHRoZSBzZWFyY2ggYWdhaW4gd2l0aCB0
aGUgc2FtZSBxdWVyeSBhbmQgY2FsbGJhY2suCisgICAgICAgICAgICB0aGlzLl9zZWFyY2hGaW5p
c2hlZENhbGxiYWNrKHRoaXMsIC10aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7CisgICAgICAg
ICAgICB0aGlzLnBlcmZvcm1TZWFyY2godGhpcy5jdXJyZW50UXVlcnksIHRoaXMuX3NlYXJjaEZp
bmlzaGVkQ2FsbGJhY2spOworICAgICAgICB9CisgICAgfSwKKworICAgIF9jcmVhdGVTbmFwc2hv
dERhdGFHcmlkTGlzdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NuYXBz
aG90RGF0YUdyaWRMaXN0KQorICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zbmFwc2hvdERhdGFHcmlk
TGlzdDsKKworICAgICAgICB0aGlzLl9zbmFwc2hvdERhdGFHcmlkTGlzdCA9IG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0KHRoaXMsIHRoaXMuYmFzZVNuYXBzaG90LmVu
dHJpZXMsIHRoaXMucHJvZmlsZS5lbnRyaWVzKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBz
aG90RGF0YUdyaWRMaXN0OworICAgIH0sCisKKyAgICBfZ2V0UHJvZmlsZXM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmdldFBy
b2ZpbGVzKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQpOworICAg
IH0sCisKKyAgICBfbG9hZFByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUsIGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgaWYgKHByb2ZpbGUuX2xvYWRlZCkgeworICAgICAgICAgICAgY2FsbGJhY2so
cHJvZmlsZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIg
Y2FsbElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobG9hZGVkQ2FsbGJhY2suYmluZCh0
aGlzKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZShjYWxsSWQsIHByb2Zp
bGUudHlwZUlkLCBwcm9maWxlLnVpZCk7CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVkQ2FsbGJh
Y2sobG9hZGVkU25hcHNob3QpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuY2hpbGRyZW4gPSBsb2Fk
ZWRTbmFwc2hvdC5oZWFkLmNoaWxkcmVuOworICAgICAgICAgICAgcHJvZmlsZS5lbnRyaWVzID0g
bG9hZGVkU25hcHNob3QuaGVhZC5lbnRyaWVzOworICAgICAgICAgICAgcHJvZmlsZS5sb3dsZXZl
bHMgPSBsb2FkZWRTbmFwc2hvdC5oZWFkLmxvd2xldmVsczsKKyAgICAgICAgICAgIHRoaXMuX3By
ZXBhcmVQcm9maWxlKHByb2ZpbGUpOworICAgICAgICAgICAgcHJvZmlsZS5fbG9hZGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIHRoaXMucGFyZW50LnVwZGF0ZVByb2ZpbGUocHJvZmlsZSk7CisgICAg
ICAgICAgICBjYWxsYmFjayhwcm9maWxlKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfbW91
c2VEb3duSW5EYXRhR3JpZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBpZiAoZXZl
bnQuZGV0YWlsIDwgMikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgY2VsbCA9
IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJ0ZCIpOworICAg
ICAgICBpZiAoIWNlbGwgfHwgKCFjZWxsLmhhc1N0eWxlQ2xhc3MoImNvdW50LWNvbHVtbiIpICYm
ICFjZWxsLmhhc1N0eWxlQ2xhc3MoInNpemUtY29sdW1uIikgJiYgIWNlbGwuaGFzU3R5bGVDbGFz
cygiY291bnREZWx0YS1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHlsZUNsYXNzKCJzaXplRGVsdGEt
Y29sdW1uIikpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChjZWxsLmhhc1N0
eWxlQ2xhc3MoImNvdW50LWNvbHVtbiIpKQorICAgICAgICAgICAgdGhpcy5zaG93Q291bnRBc1Bl
cmNlbnQgPSAhdGhpcy5zaG93Q291bnRBc1BlcmNlbnQ7CisgICAgICAgIGVsc2UgaWYgKGNlbGwu
aGFzU3R5bGVDbGFzcygic2l6ZS1jb2x1bW4iKSkKKyAgICAgICAgICAgIHRoaXMuc2hvd1NpemVB
c1BlcmNlbnQgPSAhdGhpcy5zaG93U2l6ZUFzUGVyY2VudDsKKyAgICAgICAgZWxzZSBpZiAoY2Vs
bC5oYXNTdHlsZUNsYXNzKCJjb3VudERlbHRhLWNvbHVtbiIpKQorICAgICAgICAgICAgdGhpcy5z
aG93Q291bnREZWx0YUFzUGVyY2VudCA9ICF0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50Owor
ICAgICAgICBlbHNlIGlmIChjZWxsLmhhc1N0eWxlQ2xhc3MoInNpemVEZWx0YS1jb2x1bW4iKSkK
KyAgICAgICAgICAgIHRoaXMuc2hvd1NpemVEZWx0YUFzUGVyY2VudCA9ICF0aGlzLnNob3dTaXpl
RGVsdGFBc1BlcmNlbnQ7CisKKyAgICAgICAgdGhpcy5yZWZyZXNoU2hvd0FzUGVyY2VudHMoKTsK
KworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICB9LAorCisgICAgZ2V0IF9pc1Nob3dpbmdBc1BlcmNlbnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ICYmIHRoaXMuc2hvd1Np
emVBc1BlcmNlbnQgJiYgdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudCAmJiB0aGlzLnNob3dT
aXplRGVsdGFBc1BlcmNlbnQ7CisgICAgfSwKKworICAgIF9wZXJjZW50Q2xpY2tlZDogZnVuY3Rp
b24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gdGhpcy5faXNTaG93
aW5nQXNQZXJjZW50OworICAgICAgICB0aGlzLnNob3dDb3VudEFzUGVyY2VudCA9ICFjdXJyZW50
U3RhdGU7CisgICAgICAgIHRoaXMuc2hvd1NpemVBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOwor
ICAgICAgICB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ID0gIWN1cnJlbnRTdGF0ZTsKKyAg
ICAgICAgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID0gIWN1cnJlbnRTdGF0ZTsKKyAgICAg
ICAgdGhpcy5yZWZyZXNoU2hvd0FzUGVyY2VudHMoKTsKKyAgICB9LAorCisgICAgX3ByZXBhcmVQ
cm9maWxlOiBmdW5jdGlvbihwcm9maWxlKSB7CisgICAgICAgIGZvciAodmFyIHByb2ZpbGVFbnRy
eSBpbiBwcm9maWxlLmVudHJpZXMpIHsKKyAgICAgICAgICAgIHByb2ZpbGUuZW50cmllc1twcm9m
aWxlRW50cnldLnJldGFpbmVycyA9IHt9OworICAgICAgICB9CisgICAgICAgIHByb2ZpbGUuY2x1
c3RlcnMgPSB7fTsKKworICAgICAgICBmb3IgKHZhciBhZGRyIGluIHByb2ZpbGUuY2hpbGRyZW4p
IHsKKyAgICAgICAgICAgIHZhciByZXRhaW5lciA9IHByb2ZpbGUuY2hpbGRyZW5bYWRkcl07Cisg
ICAgICAgICAgICB2YXIgcmV0YWluZXJJZCA9IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSArICc6
JyArIGFkZHI7CisgICAgICAgICAgICBmb3IgKHZhciBjaGlsZEFkZHIgaW4gcmV0YWluZXIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY2hpbGRBZGRyID09ICdjb25zdHJ1Y3Rvck5hbWUnKSBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHJldGFpbmVyW2NoaWxkQWRkcl07Cisg
ICAgICAgICAgICAgICAgdmFyIGl0ZW1JZCA9IGl0ZW0uY29uc3RydWN0b3JOYW1lICsgJzonICsg
Y2hpbGRBZGRyOworICAgICAgICAgICAgICAgIGlmICgoaXRlbS5jb25zdHJ1Y3Rvck5hbWUgPT0g
J09iamVjdCcgfHwgaXRlbS5jb25zdHJ1Y3Rvck5hbWUgPT0gJ0FycmF5JykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCEoaXRlbUlkIGluIHByb2ZpbGUuY2x1c3RlcnMpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jbHVzdGVyc1tpdGVtSWRdID0geyBjb25zdHJ1Y3Rvck5h
bWU6IGl0ZW1JZCwgcmV0YWluZXJzOiB7fSB9OworICAgICAgICAgICAgICAgICAgICBtZXJnZVJl
dGFpbmVycyhwcm9maWxlLmNsdXN0ZXJzW2l0ZW1JZF0sIGl0ZW0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtZXJnZVJldGFpbmVycyhwcm9maWxlLmVudHJpZXNbaXRlbS5j
b25zdHJ1Y3Rvck5hbWVdLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIG1lcmdlUmV0YWluZXJzKGVudHJ5LCBpdGVtKSB7CisgICAgICAgICAgICBp
ZiAoIShyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUgaW4gZW50cnkucmV0YWluZXJzKSkKKyAgICAg
ICAgICAgICAgIGVudHJ5LnJldGFpbmVyc1tyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWVdID0geyBj
b25zdHJ1Y3Rvck5hbWU6IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0
ZXJzOiB7fSB9OworICAgICAgICAgICAgdmFyIHJldGFpbmVyRW50cnkgPSBlbnRyeS5yZXRhaW5l
cnNbcmV0YWluZXIuY29uc3RydWN0b3JOYW1lXTsKKyAgICAgICAgICAgIHJldGFpbmVyRW50cnku
Y291bnQgKz0gaXRlbS5jb3VudDsKKyAgICAgICAgICAgIGlmIChyZXRhaW5lci5jb25zdHJ1Y3Rv
ck5hbWUgPT0gJ09iamVjdCcgfHwgcmV0YWluZXIuY29uc3RydWN0b3JOYW1lID09ICdBcnJheScp
CisgICAgICAgICAgICAgICAgcmV0YWluZXJFbnRyeS5jbHVzdGVyc1tyZXRhaW5lcklkXSA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3Jlc2V0RGF0YUdyaWRMaXN0OiBmdW5jdGlv
bihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuX2xvYWRQcm9maWxlKHRoaXMuX2dldFBy
b2ZpbGVzKClbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XSwgcHJvZmlsZUxv
YWRlZC5iaW5kKHRoaXMpKTsKKworICAgICAgICBmdW5jdGlvbiBwcm9maWxlTG9hZGVkKHByb2Zp
bGUpIHsKKyAgICAgICAgICAgIHRoaXMuYmFzZVNuYXBzaG90ID0gcHJvZmlsZTsKKyAgICAgICAg
ICAgIHZhciBsYXN0Q29tcGFyYXRvciA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZExpc3QucHJvcGVydHlDb21wYXJhdG9yKCJzaXplIiwgZmFsc2UpOworICAgICAgICAgICAgaWYg
KHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QpCisgICAgICAgICAgICAgICAgbGFzdENvbXBhcmF0
b3IgPSB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0Lmxhc3RDb21wYXJhdG9yOworICAgICAgICAg
ICAgdGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdCA9IHRoaXMuX2NyZWF0ZVNuYXBzaG90RGF0YUdy
aWRMaXN0KCk7CisgICAgICAgICAgICB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0LnNvcnQobGFz
dENvbXBhcmF0b3IsIHRydWUpOworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBfc29ydERhdGE6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBz
b3J0QXNjZW5kaW5nID0gdGhpcy5kYXRhR3JpZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOwor
ICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1
bW5JZGVudGlmaWVyOworICAgICAgICB2YXIgc29ydFByb3BlcnR5ID0geworICAgICAgICAgICAg
ICAgICJjb25zIjogWyJjb25zIiwgbnVsbF0sCisgICAgICAgICAgICAgICAgImNvdW50IjogWyJj
b3VudCIsIG51bGxdLAorICAgICAgICAgICAgICAgICJzaXplIjogWyJzaXplIiwgImNvdW50Il0s
CisgICAgICAgICAgICAgICAgImNvdW50RGVsdGEiOiB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJj
ZW50ID8gWyJjb3VudERlbHRhUGVyY2VudCIsIG51bGxdIDogWyJjb3VudERlbHRhIiwgbnVsbF0s
CisgICAgICAgICAgICAgICAgInNpemVEZWx0YSI6IHRoaXMuc2hvd1NpemVEZWx0YUFzUGVyY2Vu
dCA/IFsic2l6ZURlbHRhUGVyY2VudCIsICJjb3VudERlbHRhUGVyY2VudCJdIDogWyJzaXplRGVs
dGEiLCAic2l6ZURlbHRhUGVyY2VudCJdCisgICAgICAgIH1bc29ydENvbHVtbklkZW50aWZpZXJd
OworCisgICAgICAgIHRoaXMuc25hcHNob3REYXRhR3JpZExpc3Quc29ydChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3BlcnR5Q29tcGFyYXRvcihzb3J0UHJvcGVydHlb
MF0sIHNvcnRQcm9wZXJ0eVsxXSwgc29ydEFzY2VuZGluZykpOworCisgICAgICAgIHRoaXMucmVm
cmVzaCgpOworICAgIH0sCisKKyAgICBfdXBkYXRlQmFzZU9wdGlvbnM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBsaXN0ID0gdGhpcy5fZ2V0UHJvZmlsZXMoKTsKKyAgICAgICAgLy8g
V2UncmUgYXNzdW1pbmcgdGhhdCBzbmFwc2hvdHMgY2FuIG9ubHkgYmUgYWRkZWQuCisgICAgICAg
IGlmICh0aGlzLmJhc2VTZWxlY3RFbGVtZW50Lmxlbmd0aCA9PT0gbGlzdC5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuYmFzZVNlbGVjdEVs
ZW1lbnQubGVuZ3RoLCBuID0gbGlzdC5sZW5ndGg7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAg
IHZhciBiYXNlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisgICAg
ICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnRpdGxlOworICAgICAgICAgICAgaWYgKCF0aXRs
ZS5pbmRleE9mKFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSkpCisgICAgICAgICAgICAgICAgdGl0
bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNuYXBzaG90ICVkIiwgdGl0bGUuc3Vic3RyaW5n
KFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZS5sZW5ndGggKyAxKSk7CisgICAgICAgICAgICBiYXNl
T3B0aW9uLmxhYmVsID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb21wYXJlZCB0byAlcyIsIHRp
dGxlKTsKKyAgICAgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFz
ZU9wdGlvbik7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3VwZGF0ZVBlcmNlbnRCdXR0b246
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pc1Nob3dpbmdBc1BlcmNlbnQp
IHsKKyAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiU2hvdyBhYnNvbHV0ZSBjb3VudHMgYW5kIHNpemVzLiIpOworICAgICAgICAgICAg
dGhpcy5wZXJjZW50QnV0dG9uLnRvZ2dsZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGhpcy5wZXJjZW50QnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJTaG93IGNvdW50cyBhbmQgc2l6ZXMgYXMgcGVyY2VudGFnZXMuIik7CisgICAgICAgICAgICB0
aGlzLnBlcmNlbnRCdXR0b24udG9nZ2xlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgfSwKKwor
ICAgIF91cGRhdGVTdW1tYXJ5R3JhcGg6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
Y291bnRzU3VtbWFyeUJhci5jYWxjdWxhdG9yLnNob3dBc1BlcmNlbnQgPSB0aGlzLl9pc1Nob3dp
bmdBc1BlcmNlbnQ7CisgICAgICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci51cGRhdGUodGhpcy5w
cm9maWxlLmxvd2xldmVscyk7CisKKyAgICAgICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuY2FsY3Vs
YXRvci5zaG93QXNQZXJjZW50ID0gdGhpcy5faXNTaG93aW5nQXNQZXJjZW50OworICAgICAgICB0
aGlzLnNpemVzU3VtbWFyeUJhci51cGRhdGUodGhpcy5wcm9maWxlLmxvd2xldmVscyk7CisgICAg
fQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFZpZXcuU2VhcmNoSGVscGVyID0geworICAgIC8vIEluIGNvbXBhcmF0b3JzLCB3ZSBhc3N1
bWUgdGhhdCBhIHZhbHVlIGZyb20gYSBub2RlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1l
dGVyLgorICAgIG9wZXJhdGlvbnM6IHsgTEVTUzogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEg
IT09IG51bGwgJiYgYSA8IGI7IH0sCisgICAgICAgICAgICAgICAgICBMRVNTX09SX0VRVUFMOiBm
dW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBhIDw9IGI7IH0sCisgICAgICAg
ICAgICAgICAgICBFUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYg
YSA9PT0gYjsgfSwKKyAgICAgICAgICAgICAgICAgIEdSRUFURVJfT1JfRVFVQUw6IGZ1bmN0aW9u
IChhLCBiKSB7IHJldHVybiBhICE9PSBudWxsICYmIGEgPj0gYjsgfSwKKyAgICAgICAgICAgICAg
ICAgIEdSRUFURVI6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICE9PSBudWxsICYmIGEgPiBi
OyB9IH0sCisKKyAgICBvcGVyYXRpb25QYXJzZXJzOiB7IExFU1M6IC9ePChcZCspLywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIExFU1NfT1JfRVFVQUw6IC9ePD0oXGQrKS8sCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUkVBVEVSX09SX0VRVUFMOiAvXj49KFxkKykvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgR1JFQVRFUjogL14+KFxkKykvIH0sCisKKyAgICBwYXJzZU9wZXJhdGlvbkFu
ZE51bWJlcjogZnVuY3Rpb24ocXVlcnkpCisgICAgeworICAgICAgICB2YXIgb3BlcmF0aW9ucyA9
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlci5vcGVyYXRpb25zOwor
ICAgICAgICB2YXIgcGFyc2VycyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJj
aEhlbHBlci5vcGVyYXRpb25QYXJzZXJzOworICAgICAgICBmb3IgKHZhciBvcGVyYXRpb24gaW4g
cGFyc2VycykgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gcXVlcnkubWF0Y2gocGFyc2Vyc1tv
cGVyYXRpb25dKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gW29wZXJhdGlvbnNbb3BlcmF0aW9uXSwgcGFyc2VGbG9hdChtYXRjaFsxXSld
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBbb3BlcmF0aW9ucy5FUVVBTCwgcGFyc2VGbG9h
dChxdWVyeSldOworICAgIH0sCisKKyAgICBwZXJjZW50czogLyUkLywKKworICAgIG1lZ2FCeXRl
czogL01CJC9pLAorCisgICAga2lsb0J5dGVzOiAvS0IkL2ksCisKKyAgICBieXRlczogL0IkL2kK
K30KKworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvciA9IGZ1bmN0aW9uKGxvd0xl
dmVsRmllbGQpCit7CisgICAgdGhpcy50b3RhbCA9IDE7CisgICAgdGhpcy5sb3dMZXZlbEZpZWxk
ID0gbG93TGV2ZWxGaWVsZDsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRv
ci5wcm90b3R5cGUgPSB7CisgICAgY29tcHV0ZVN1bW1hcnlWYWx1ZXM6IGZ1bmN0aW9uKGxvd0xl
dmVscykKKyAgICB7CisgICAgICAgIHZhciBoaWdoTGV2ZWxzID0ge2RhdGE6IDAsIGNvZGU6IDB9
OworICAgICAgICB0aGlzLnRvdGFsID0gMDsKKyAgICAgICAgZm9yICh2YXIgaXRlbSBpbiBsb3dM
ZXZlbHMpIHsKKyAgICAgICAgICAgIHZhciBoaWdoSXRlbSA9IHRoaXMuX2hpZ2hGcm9tTG93KGl0
ZW0pOworICAgICAgICAgICAgaWYgKGhpZ2hJdGVtKSB7CisgICAgICAgICAgICAgICAgdmFyIHZh
bHVlID0gbG93TGV2ZWxzW2l0ZW1dW3RoaXMubG93TGV2ZWxGaWVsZF07CisgICAgICAgICAgICAg
ICAgaGlnaExldmVsc1toaWdoSXRlbV0gKz0gdmFsdWU7CisgICAgICAgICAgICAgICAgdGhpcy50
b3RhbCArPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgcmVz
dWx0ID0ge2NhdGVnb3J5VmFsdWVzOiBoaWdoTGV2ZWxzfTsKKyAgICAgICAgaWYgKCF0aGlzLnNo
b3dBc1BlcmNlbnQpCisgICAgICAgICAgICByZXN1bHQudG90YWwgPSB0aGlzLnRvdGFsOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24o
dmFsdWUpCisgICAgeworICAgICAgICBpZiAodGhpcy5zaG93QXNQZXJjZW50KQorICAgICAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwgdmFsdWUgLyB0aGlzLnRv
dGFsICogMTAwLjApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFs
dWVUb1N0cmluZyh2YWx1ZSk7CisgICAgfSwKKworICAgIGdldCBzaG93QXNQZXJjZW50KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zaG93QXNQZXJjZW50OworICAgIH0sCisKKyAgICBz
ZXQgc2hvd0FzUGVyY2VudCh4KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hvd0FzUGVyY2VudCA9
IHg7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3Ig
PSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5j
YWxsKHRoaXMsICJjb3VudCIpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENh
bGN1bGF0b3IucHJvdG90eXBlID0geworICAgIF9oaWdoRnJvbUxvdzogZnVuY3Rpb24odHlwZSkg
eworICAgICAgICBpZiAodHlwZSA9PT0gIkNPREVfVFlQRSIgfHwgdHlwZSA9PT0gIlNIQVJFRF9G
VU5DVElPTl9JTkZPX1RZUEUiIHx8IHR5cGUgPT09ICJTQ1JJUFRfVFlQRSIpIHJldHVybiAiY29k
ZSI7CisgICAgICAgIGlmICh0eXBlID09PSAiU1RSSU5HX1RZUEUiIHx8IHR5cGUgPT09ICJIRUFQ
X05VTUJFUl9UWVBFIiB8fCB0eXBlLm1hdGNoKC9eSlNfLykpIHJldHVybiAiZGF0YSI7CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBfdmFsdWVUb1N0cmluZzogZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlOworCitXZWJJ
bnNwZWN0b3IuSGVhcFN1bW1hcnlTaXplQ2FsY3VsYXRvciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBX
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLmNhbGwodGhpcywgInNpemUiKTsKK30K
KworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlID0gewor
ICAgIF9oaWdoRnJvbUxvdzogZnVuY3Rpb24odHlwZSkgeworICAgICAgICBpZiAodHlwZSA9PT0g
IkNPREVfVFlQRSIgfHwgdHlwZSA9PT0gIlNIQVJFRF9GVU5DVElPTl9JTkZPX1RZUEUiIHx8IHR5
cGUgPT09ICJTQ1JJUFRfVFlQRSIpIHJldHVybiAiY29kZSI7CisgICAgICAgIGlmICh0eXBlID09
PSAiU1RSSU5HX1RZUEUiIHx8IHR5cGUgPT09ICJIRUFQX05VTUJFUl9UWVBFIiB8fCB0eXBlLm1h
dGNoKC9eSlNfLykgfHwgdHlwZS5tYXRjaCgvX0FSUkFZX1RZUEUkLykpIHJldHVybiAiZGF0YSI7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBfdmFsdWVUb1N0cmluZzogTnVt
YmVyLmJ5dGVzVG9TdHJpbmcKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5U2l6ZUNhbGN1
bGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1
bGF0b3IucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
V2l0aFJldGFpbmVycyA9IGZ1bmN0aW9uKG93bmluZ1RyZWUpCit7CisgICAgdGhpcy50cmVlID0g
b3duaW5nVHJlZTsKKworICAgIFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUuY2FsbCh0aGlzLCBu
dWxsLCB0aGlzLl9oYXNSZXRhaW5lcnMpOworCisgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJw
b3B1bGF0ZSIsIHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKK307CisKK1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZSA9IHsKKyAgICBpc0Vt
cHR5U2V0OiBmdW5jdGlvbihzZXQpCisgICAgeworICAgICAgICBmb3IgKHZhciB4IGluIHNldCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwK
KworICAgIGdldCBfaGFzUmV0YWluZXJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhdGhpcy5p
c0VtcHR5U2V0KHRoaXMucmV0YWluZXJzKTsKKyAgICB9LAorCisgICAgZ2V0IF9wYXJlbnQoKQor
ICAgIHsKKyAgICAgICAgLy8gRm9yIHRvcC1sZXZlbCBub2RlcywgcmV0dXJuIG93bmluZyB0cmVl
IGFzIGEgcGFyZW50LCBub3QgZGF0YSBncmlkLgorICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQg
IT09IHRoaXMuZGF0YUdyaWQgPyB0aGlzLnBhcmVudCA6IHRoaXMudHJlZTsKKyAgICB9LAorCisg
ICAgX3BvcHVsYXRlOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGFw
cGVuZERpZmZFbnRyeShiYXNlSXRlbSwgc25hcHNob3RJdGVtKSB7CisgICAgICAgICAgICB0aGlz
LmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRSZXRhaW5l
ck5vZGUodGhpcy5zbmFwc2hvdFZpZXcsIGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0sIHRoaXMudHJl
ZSkpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5wcm9kdWNlRGlmZih0aGlzLmJhc2VSZXRh
aW5lcnMsIHRoaXMucmV0YWluZXJzLCBhcHBlbmREaWZmRW50cnkuYmluZCh0aGlzKSk7CisKKyAg
ICAgICAgaWYgKHRoaXMuX3BhcmVudCkgeworICAgICAgICAgICAgdmFyIGN1cnJlbnRDb21wYXJh
dG9yID0gdGhpcy5fcGFyZW50Lmxhc3RDb21wYXJhdG9yOworICAgICAgICAgICAgaWYgKGN1cnJl
bnRDb21wYXJhdG9yKQorICAgICAgICAgICAgICAgIHRoaXMuc29ydChjdXJyZW50Q29tcGFyYXRv
ciwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIo
InBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOworICAgIH0sCisKKyAgICBwcm9kdWNl
RGlmZjogZnVuY3Rpb24oYmFzZUVudHJpZXMsIGN1cnJlbnRFbnRyaWVzLCBjYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gY3VycmVudEVudHJpZXMpCisgICAgICAgICAg
ICBjYWxsYmFjayhiYXNlRW50cmllc1tpdGVtXSwgY3VycmVudEVudHJpZXNbaXRlbV0pOworCisg
ICAgICAgIGZvciAoaXRlbSBpbiBiYXNlRW50cmllcykgeworICAgICAgICAgICAgaWYgKCEoaXRl
bSBpbiBjdXJyZW50RW50cmllcykpCisgICAgICAgICAgICAgICAgY2FsbGJhY2soYmFzZUVudHJp
ZXNbaXRlbV0sIG51bGwpOworICAgICAgICB9CisgICAgfSwKKworICAgIHNvcnQ6IGZ1bmN0aW9u
KGNvbXBhcmF0b3IsIGZvcmNlKSB7CisgICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5sYXN0Q29t
cGFyYXRvciA9PT0gY29tcGFyYXRvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLmNoaWxkcmVuLnNvcnQoY29tcGFyYXRvcik7CisgICAgICAgIHZhciBjaGlsZENvdW50ID0g
dGhpcy5jaGlsZHJlbi5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGNoaWxkSW5kZXggPSAwOyBj
aGlsZEluZGV4IDwgY2hpbGRDb3VudDsgKytjaGlsZEluZGV4KQorICAgICAgICAgICAgdGhpcy5j
aGlsZHJlbltjaGlsZEluZGV4XS5fcmVjYWxjdWxhdGVTaWJsaW5ncyhjaGlsZEluZGV4KTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYg
KCFmb3JjZSAmJiAoIWNoaWxkLmV4cGFuZGVkIHx8IGNoaWxkLmxhc3RDb21wYXJhdG9yID09PSBj
b21wYXJhdG9yKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNoaWxk
LnNvcnQoY29tcGFyYXRvciwgZm9yY2UpOworICAgICAgICB9CisgICAgICAgIHRoaXMubGFzdENv
bXBhcmF0b3IgPSBjb21wYXJhdG9yOworICAgIH0sCisKKyAgICBzaWduRm9yRGVsdGE6IGZ1bmN0
aW9uKGRlbHRhKSB7CisgICAgICAgIGlmIChkZWx0YSA9PT0gMCkKKyAgICAgICAgICAgIHJldHVy
biAiIjsKKyAgICAgICAgaWYgKGRlbHRhID4gMCkKKyAgICAgICAgICAgIHJldHVybiAiKyI7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIE1hdGggbWludXMgc2lnbiwgc2FtZSB3aWR0aCBh
cyBwbHVzLgorICAgICAgICAgICAgcmV0dXJuICJcdTIyMTIiOworICAgIH0sCisKKyAgICBzaG93
RGVsdGFBc1BlcmNlbnQ6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PT0g
TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKQorICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygibmV3Iik7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBOdW1iZXIuTkVH
QVRJVkVfSU5GSU5JVFkpCisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJkZWxldGVkIik7CisgICAgICAgIGlmICh2YWx1ZSA+IDEwMDAuMCkKKyAgICAgICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzID4xMDAwJSUiLCB0aGlzLnNpZ25Gb3JEZWx0
YSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyUuMmYl
JSIsIHRoaXMuc2lnbkZvckRlbHRhKHZhbHVlKSwgTWF0aC5hYnModmFsdWUpKTsKKyAgICB9LAor
CisgICAgZ2V0VG90YWxDb3VudDogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5fY291
bnQpIHsKKyAgICAgICAgICAgIHRoaXMuX2NvdW50ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwLCBuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpCisgICAgICAgICAg
ICAgICAgdGhpcy5fY291bnQgKz0gdGhpcy5jaGlsZHJlbltpXS5jb3VudDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGhpcy5fY291bnQ7CisgICAgfSwKKworICAgIGdldFRvdGFsU2l6ZTog
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5fc2l6ZSkgeworICAgICAgICAgICAgdGhp
cy5fc2l6ZSA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMuY2hpbGRy
ZW4ubGVuZ3RoOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuX3NpemUgKz0gdGhp
cy5jaGlsZHJlbltpXS5zaXplOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLl9zaXpl
OworICAgIH0sCisKKyAgICBnZXQgY291bnRQZXJjZW50KCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLmNvdW50IC8gdGhpcy5fcGFyZW50LmdldFRvdGFsQ291bnQoKSAqIDEwMC4wOworICAg
IH0sCisKKyAgICBnZXQgc2l6ZVBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
c2l6ZSAvIHRoaXMuX3BhcmVudC5nZXRUb3RhbFNpemUoKSAqIDEwMC4wOworICAgIH0sCisKKyAg
ICBnZXQgY291bnREZWx0YVBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuYmFzZUNv
dW50ID4gMCkgeworICAgICAgICAgICAgaWYgKHRoaXMuY291bnQgPiAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLmNvdW50RGVsdGEgLyB0aGlzLmJhc2VDb3VudCAqIDEwMC4wOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5G
SU5JVFk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElW
RV9JTkZJTklUWTsKKyAgICB9LAorCisgICAgZ2V0IHNpemVEZWx0YVBlcmNlbnQoKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuYmFzZVNpemUgPiAwKSB7CisgICAgICAgICAgICBpZiAodGhpcy5z
aXplID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplRGVsdGEgLyB0aGlzLmJh
c2VTaXplICogMTAwLjA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJu
IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOworICAgIH0sCisKKyAgICBnZXQgZGF0YSgp
CisgICAgeworICAgICAgICB2YXIgZGF0YSA9IHt9OworCisgICAgICAgIGRhdGFbImNvbnMiXSA9
IHRoaXMuY29uc3RydWN0b3JOYW1lOworCisgICAgICAgIGlmICh0aGlzLnNuYXBzaG90Vmlldy5z
aG93Q291bnRBc1BlcmNlbnQpCisgICAgICAgICAgICBkYXRhWyJjb3VudCJdID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCIlLjJmJSUiLCB0aGlzLmNvdW50UGVyY2VudCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRhdGFbImNvdW50Il0gPSB0aGlzLmNvdW50OworCisgICAgICAgIGlmICh0
aGlzLnNpemUgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90Vmlldy5z
aG93U2l6ZUFzUGVyY2VudCkKKyAgICAgICAgICAgICAgICBkYXRhWyJzaXplIl0gPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIsIHRoaXMuc2l6ZVBlcmNlbnQpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGRhdGFbInNpemUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5n
KHRoaXMuc2l6ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGF0YVsic2l6ZSJdID0g
IiI7CisKKyAgICAgICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dDb3VudERlbHRhQXNQZXJj
ZW50KQorICAgICAgICAgICAgZGF0YVsiY291bnREZWx0YSJdID0gdGhpcy5zaG93RGVsdGFBc1Bl
cmNlbnQodGhpcy5jb3VudERlbHRhUGVyY2VudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGRhdGFbImNvdW50RGVsdGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlZCIsIHRoaXMu
c2lnbkZvckRlbHRhKHRoaXMuY291bnREZWx0YSksIE1hdGguYWJzKHRoaXMuY291bnREZWx0YSkp
OworCisgICAgICAgIGlmICh0aGlzLnNpemVEZWx0YSAhPT0gbnVsbCkgeworICAgICAgICAgICAg
aWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dTaXplRGVsdGFBc1BlcmNlbnQpCisgICAgICAgICAg
ICAgICAgZGF0YVsic2l6ZURlbHRhIl0gPSB0aGlzLnNob3dEZWx0YUFzUGVyY2VudCh0aGlzLnNp
emVEZWx0YVBlcmNlbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRhdGFb
InNpemVEZWx0YSJdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyVzIiwgdGhpcy5zaWduRm9y
RGVsdGEodGhpcy5zaXplRGVsdGEpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyhNYXRoLmFicyh0aGlz
LnNpemVEZWx0YSkpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkYXRhWyJzaXplRGVs
dGEiXSA9ICIiOworCisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0sCisKKyAgICBjcmVhdGVD
ZWxsOiBmdW5jdGlvbihjb2x1bW5JZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgdmFyIGNlbGwg
PSBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwodGhp
cywgY29sdW1uSWRlbnRpZmllcik7CisKKyAgICAgICAgaWYgKChjb2x1bW5JZGVudGlmaWVyID09
PSAiY29ucyIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1bW4pIHx8CisgICAgICAgICAg
ICAoY29sdW1uSWRlbnRpZmllciA9PT0gImNvdW50IiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVkQ291
bnRDb2x1bW4pIHx8CisgICAgICAgICAgICAoY29sdW1uSWRlbnRpZmllciA9PT0gInNpemUiICYm
IHRoaXMuX3NlYXJjaE1hdGNoZWRTaXplQ29sdW1uKSB8fAorICAgICAgICAgICAgKGNvbHVtbklk
ZW50aWZpZXIgPT09ICJjb3VudERlbHRhIiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0
YUNvbHVtbikgfHwKKyAgICAgICAgICAgIChjb2x1bW5JZGVudGlmaWVyID09PSAic2l6ZURlbHRh
IiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVkU2l6ZURlbHRhQ29sdW1uKSkKKyAgICAgICAgICAgIGNl
bGwuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0Iik7CisKKyAgICAgICAgcmV0dXJuIGNlbGw7Cisg
ICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRh
aW5lcnMucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJv
dG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlID0gZnVuY3Rp
b24oc25hcHNob3RWaWV3LCBiYXNlRW50cnksIHNuYXBzaG90RW50cnksIG93bmluZ1RyZWUpCit7
CisgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7CisKKyAgICBpZiAoIXNuYXBz
aG90RW50cnkpCisgICAgICAgIHNuYXBzaG90RW50cnkgPSB7IGNvbnN0cnVjdG9yTmFtZTogYmFz
ZUVudHJ5LmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIHNpemU6IDAsIHJldGFpbmVyczoge30g
fTsKKyAgICB0aGlzLmNvbnN0cnVjdG9yTmFtZSA9IHNuYXBzaG90RW50cnkuY29uc3RydWN0b3JO
YW1lOworICAgIHRoaXMuY291bnQgPSBzbmFwc2hvdEVudHJ5LmNvdW50OworICAgIHRoaXMuc2l6
ZSA9IHNuYXBzaG90RW50cnkuc2l6ZTsKKyAgICB0aGlzLnJldGFpbmVycyA9IHNuYXBzaG90RW50
cnkucmV0YWluZXJzOworCisgICAgaWYgKCFiYXNlRW50cnkpCisgICAgICAgIGJhc2VFbnRyeSA9
IHsgY291bnQ6IDAsIHNpemU6IDAsIHJldGFpbmVyczoge30gfTsKKyAgICB0aGlzLmJhc2VDb3Vu
dCA9IGJhc2VFbnRyeS5jb3VudDsKKyAgICB0aGlzLmNvdW50RGVsdGEgPSB0aGlzLmNvdW50IC0g
dGhpcy5iYXNlQ291bnQ7CisgICAgdGhpcy5iYXNlU2l6ZSA9IGJhc2VFbnRyeS5zaXplOworICAg
IHRoaXMuc2l6ZURlbHRhID0gdGhpcy5zaXplIC0gdGhpcy5iYXNlU2l6ZTsKKyAgICB0aGlzLmJh
c2VSZXRhaW5lcnMgPSBiYXNlRW50cnkucmV0YWluZXJzOworCisgICAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMuY2FsbCh0aGlzLCBvd25pbmdUcmVl
KTsKK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGUucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0
YWluZXJzLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlz
dCA9IGZ1bmN0aW9uKHNuYXBzaG90VmlldywgYmFzZUVudHJpZXMsIHNuYXBzaG90RW50cmllcykK
K3sKKyAgICB0aGlzLnRyZWUgPSB0aGlzOworICAgIHRoaXMuc25hcHNob3RWaWV3ID0gc25hcHNo
b3RWaWV3OworICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKKyAgICB0aGlzLmxhc3RDb21wYXJhdG9y
ID0gbnVsbDsKKyAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4oYmFzZUVudHJpZXMsIHNuYXBzaG90
RW50cmllcyk7Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnBy
b3RvdHlwZSA9IHsKKyAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpCisgICAgeworICAg
ICAgICB0aGlzLmluc2VydENoaWxkKGNoaWxkLCB0aGlzLmNoaWxkcmVuLmxlbmd0aCk7CisgICAg
fSwKKworICAgIGluc2VydENoaWxkOiBmdW5jdGlvbihjaGlsZCwgaW5kZXgpCisgICAgeworICAg
ICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQpOworICAgIH0sCisKKyAg
ICByZW1vdmVDaGlsZHJlbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5jaGlsZHJl
biA9IFtdOworICAgIH0sCisKKyAgICBwb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihiYXNlRW50
cmllcywgc25hcHNob3RFbnRyaWVzKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gYXBwZW5kTGlz
dEVudHJ5KGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0pIHsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5k
Q2hpbGQobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGUodGhpcy5zbmFw
c2hvdFZpZXcsIGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0sIHRoaXMpKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLnByb2R1Y2VEaWZmKGJhc2VFbnRyaWVzLCBzbmFwc2hvdEVudHJpZXMsIGFwcGVu
ZExpc3RFbnRyeS5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgcHJvZHVjZURpZmY6IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5w
cm9kdWNlRGlmZiwKKyAgICBzb3J0OiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRO
b2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuc29ydCwKKyAgICBnZXRUb3RhbENvdW50OiBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUu
Z2V0VG90YWxDb3VudCwKKyAgICBnZXRUb3RhbFNpemU6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXRUb3RhbFNpemUKK307CisK
K1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9y
cyA9IFt7fSwge31dOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnBy
b3BlcnR5Q29tcGFyYXRvciA9IGZ1bmN0aW9uKHByb3BlcnR5LCBwcm9wZXJ0eTIsIGlzQXNjZW5k
aW5nKQoreworICAgIHZhciBwcm9wZXJ0eUhhc2ggPSBwcm9wZXJ0eSArICIjIiArIHByb3BlcnR5
MjsKKyAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMucHJvcGVydHlDb21wYXJhdG9yc1soaXNBc2Nl
bmRpbmcgPyAxIDogMCldW3Byb3BlcnR5SGFzaF07CisgICAgaWYgKCFjb21wYXJhdG9yKSB7Cisg
ICAgICAgIGNvbXBhcmF0b3IgPSBmdW5jdGlvbihsaHMsIHJocykgeworICAgICAgICAgICAgdmFy
IGwgPSBsaHNbcHJvcGVydHldLCByID0gcmhzW3Byb3BlcnR5XTsKKyAgICAgICAgICAgIGlmICgo
bCA9PT0gbnVsbCB8fCByID09PSBudWxsKSAmJiBwcm9wZXJ0eTIgIT09IG51bGwpCisgICAgICAg
ICAgICAgICAgbCA9IGxoc1twcm9wZXJ0eTJdLCByID0gcmhzW3Byb3BlcnR5Ml07CisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gbCA8IHIgPyAtMSA6IChsID4gciA/IDEgOiAwKTsKKyAgICAgICAg
ICAgIHJldHVybiBpc0FzY2VuZGluZyA/IHJlc3VsdCA6IC1yZXN1bHQ7CisgICAgICAgIH07Cisg
ICAgICAgIHRoaXMucHJvcGVydHlDb21wYXJhdG9yc1soaXNBc2NlbmRpbmcgPyAxIDogMCldW3By
b3BlcnR5SGFzaF0gPSBjb21wYXJhdG9yOworICAgIH0KKyAgICByZXR1cm4gY29tcGFyYXRvcjsK
K307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZSA9IGZ1
bmN0aW9uKHNuYXBzaG90VmlldywgYmFzZUVudHJ5LCBzbmFwc2hvdEVudHJ5LCBvd25pbmdUcmVl
KQoreworICAgIHRoaXMuc25hcHNob3RWaWV3ID0gc25hcHNob3RWaWV3OworCisgICAgaWYgKCFz
bmFwc2hvdEVudHJ5KQorICAgICAgICBzbmFwc2hvdEVudHJ5ID0geyBjb25zdHJ1Y3Rvck5hbWU6
IGJhc2VFbnRyeS5jb25zdHJ1Y3Rvck5hbWUsIGNvdW50OiAwLCBjbHVzdGVyczoge30gfTsKKyAg
ICB0aGlzLmNvbnN0cnVjdG9yTmFtZSA9IHNuYXBzaG90RW50cnkuY29uc3RydWN0b3JOYW1lOwor
ICAgIHRoaXMuY291bnQgPSBzbmFwc2hvdEVudHJ5LmNvdW50OworICAgIHRoaXMucmV0YWluZXJz
ID0gdGhpcy5fY2FsY3VsYXRlUmV0YWluZXJzKHRoaXMuc25hcHNob3RWaWV3LnByb2ZpbGUsIHNu
YXBzaG90RW50cnkuY2x1c3RlcnMpOworCisgICAgaWYgKCFiYXNlRW50cnkpCisgICAgICAgIGJh
c2VFbnRyeSA9IHsgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OworICAgIHRoaXMuYmFzZUNvdW50
ID0gYmFzZUVudHJ5LmNvdW50OworICAgIHRoaXMuY291bnREZWx0YSA9IHRoaXMuY291bnQgLSB0
aGlzLmJhc2VDb3VudDsKKyAgICB0aGlzLmJhc2VSZXRhaW5lcnMgPSB0aGlzLl9jYWxjdWxhdGVS
ZXRhaW5lcnModGhpcy5zbmFwc2hvdFZpZXcuYmFzZVNuYXBzaG90LCBiYXNlRW50cnkuY2x1c3Rl
cnMpOworCisgICAgdGhpcy5zaXplID0gbnVsbDsKKyAgICB0aGlzLnNpemVEZWx0YSA9IG51bGw7
CisKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVy
cy5jYWxsKHRoaXMsIG93bmluZ1RyZWUpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RGF0YUdyaWRSZXRhaW5lck5vZGUucHJvdG90eXBlID0geworICAgIGdldCBzaXplUGVyY2VudCgp
CisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgZ2V0IHNpemVEZWx0
YVBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSwKKworICAgIF9j
YWxjdWxhdGVSZXRhaW5lcnM6IGZ1bmN0aW9uKHNuYXBzaG90LCBjbHVzdGVycykgeworICAgICAg
ICB2YXIgcmV0YWluZXJzID0ge307CisgICAgICAgIGlmICh0aGlzLmlzRW1wdHlTZXQoY2x1c3Rl
cnMpKSB7CisgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvck5hbWUgaW4gc25hcHNob3Qu
ZW50cmllcykKKyAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3QuZW50cmllc1t0aGlzLmNv
bnN0cnVjdG9yTmFtZV0ucmV0YWluZXJzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gSW4gY2FzZSB3aGVuIGFuIGVudHJ5IGlzIHJldGFpbmVkIGJ5IGNsdXN0ZXJzLCB3ZSBuZWVk
IHRvIGdhdGhlciB1cCB0aGUgbGlzdAorICAgICAgICAgICAgLy8gb2YgcmV0YWluZXJzIGJ5IG1l
cmdpbmcgcmV0YWluZXJzIG9mIGV2ZXJ5IGNsdXN0ZXIuCisgICAgICAgICAgICAvLyBFLmcuIGhh
dmluZyBzdWNoIGEgdHJlZToKKyAgICAgICAgICAgIC8vICAgQQorICAgICAgICAgICAgLy8gICAg
IE9iamVjdDoxICAxMAorICAgICAgICAgICAgLy8gICAgICAgWCAgICAgICAzCisgICAgICAgICAg
ICAvLyAgICAgICBZICAgICAgIDQKKyAgICAgICAgICAgIC8vICAgICBPYmplY3Q6MiAgNQorICAg
ICAgICAgICAgLy8gICAgICAgWCAgICAgICA2CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gd2lsbCByZXN1bHQgaW4gYSBmb2xsb3dpbmcgcmV0YWluZXJzIGxpc3Q6IFggOSwgWSA0Lgor
ICAgICAgICAgICAgZm9yICh2YXIgY2x1c3Rlck5hbWUgaW4gY2x1c3RlcnMpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2x1c3Rlck5hbWUgaW4gc25hcHNob3QuY2x1c3RlcnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGNsdXN0ZXJSZXRhaW5lcnMgPSBzbmFwc2hvdC5jbHVzdGVyc1tjbHVz
dGVyTmFtZV0ucmV0YWluZXJzOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjbHVzdGVy
UmV0YWluZXIgaW4gY2x1c3RlclJldGFpbmVycykgeworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGNsdXN0ZXJSZXRhaW5lckVudHJ5ID0gY2x1c3RlclJldGFpbmVyc1tjbHVzdGVyUmV0YWlu
ZXJdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2x1c3RlclJldGFpbmVyIGluIHJl
dGFpbmVycykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluZXJzW2NsdXN0ZXJS
ZXRhaW5lcl0gPSB7IGNvbnN0cnVjdG9yTmFtZTogY2x1c3RlclJldGFpbmVyRW50cnkuY29uc3Ry
dWN0b3JOYW1lLCBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXRhaW5lcnNbY2x1c3RlclJldGFpbmVyXS5jb3VudCArPSBjbHVzdGVyUmV0YWluZXJF
bnRyeS5jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJSZXRh
aW5lckNsdXN0ZXIgaW4gY2x1c3RlclJldGFpbmVyRW50cnkuY2x1c3RlcnMpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl0uY2x1c3RlcnNbY2x1
c3RlclJldGFpbmVyQ2x1c3Rlcl0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXRhaW5lcnM7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlk
UmV0YWluZXJOb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGU7CisKKworV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rv
ci5Qcm9maWxlVHlwZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxl
VHlwZS5UeXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSEVBUCBTTkFQU0hPVFMiKSk7Cit9
CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQgPSAiSEVBUCI7
CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7Cisg
ICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiVGFrZSBoZWFwIHNuYXBzaG90LiIpOworICAgIH0sCisKKyAgICBnZXQgYnV0
dG9uU3R5bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJoZWFwLXNuYXBzaG90LXN0YXR1cy1i
YXItaXRlbSBzdGF0dXMtYmFyLWl0ZW0iOworICAgIH0sCisKKyAgICBidXR0b25DbGlja2VkOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRha2VIZWFwU25hcHNo
b3QoKTsKKyAgICB9LAorCisgICAgZ2V0IHdlbGNvbWVNZXNzYWdlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkdldCBhIGhlYXAgc25hcHNob3QgYnkgcHJl
c3NpbmcgdGhlICVzIGJ1dHRvbiBvbiB0aGUgc3RhdHVzIGJhci4iKTsKKyAgICB9LAorCisgICAg
Y3JlYXRlU2lkZWJhclRyZWVFbGVtZW50Rm9yUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFyVHJlZUVs
ZW1lbnQocHJvZmlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTbmFwc2hvdCAlZCIpLCAiaGVh
cC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbSIpOworICAgIH0sCisKKyAgICBjcmVhdGVWaWV3
OiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90VmlldyhXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLCBwcm9maWxl
KTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBlLnByb3RvdHlwZTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlVmlldy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlVmlldy5qcwppbmRleCA4MTdmMWY1Li5i
YTQyZjBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZVZp
ZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVWaWV3LmpzCkBA
IC05NSw3ICs5NSw3IEBAIFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldyA9IGZ1bmN0aW9uKHBy
b2ZpbGUpCiAgICAgfQogCiAgICAgdmFyIGNhbGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53
cmFwKHByb2ZpbGVDYWxsYmFjayk7Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5nZXRQcm9maWxlKGNh
bGxJZCwgdGhpcy5wcm9maWxlLnVpZCk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRQcm9maWxl
KGNhbGxJZCwgdGhpcy5wcm9maWxlLnR5cGVJZCwgdGhpcy5wcm9maWxlLnVpZCk7CiB9CiAKIFdl
Ykluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUgPSB7CkBAIC02MTEsNyArNjExLDcg
QEAgV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKIAogICAgIGNyZWF0
ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVFbGVtZW50
KHByb2ZpbGUpOworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJh
clRyZWVFbGVtZW50KHByb2ZpbGUsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiUHJvZmlsZSAlZCIp
LCAicHJvZmlsZS1zaWRlYmFyLXRyZWUtaXRlbSIpOwogICAgIH0sCiAKICAgICBjcmVhdGVWaWV3
OiBmdW5jdGlvbihwcm9maWxlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Byb2ZpbGVzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmls
ZXNQYW5lbC5qcwppbmRleCBlMTgyNzRjLi5mNjJjMzgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUHJvZmlsZXNQYW5lbC5qcwpAQCAtMzIxLDYgKzMyMSw3IEBAIFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMud2VsY29t
ZVZpZXcuaGlkZSgpOwogICAgICAgICAgICAgaWYgKCF0aGlzLnZpc2libGVWaWV3KQogICAgICAg
ICAgICAgICAgIHRoaXMuc2hvd1Byb2ZpbGUocHJvZmlsZSk7CisgICAgICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygicHJvZmlsZSBhZGRlZCIpOwogICAgICAgICB9CiAgICAg
fSwKIApAQCAtMzQ1LDcgKzM0Niw3IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgc2lkZWJhclBhcmVudC5yZW1vdmVDaGlsZChwcm9maWxlLl9wcm9m
aWxlc1RyZWVFbGVtZW50KTsKIAogICAgICAgICBpZiAoIXByb2ZpbGUuaXNUZW1wb3JhcnkpCi0g
ICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZVByb2ZpbGUocHJvZmlsZS51aWQpOwor
ICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVQcm9maWxlKHByb2ZpbGUudHlwZUlk
LCBwcm9maWxlLnVpZCk7CiAKICAgICAgICAgLy8gTm8gb3RoZXIgaXRlbSB3aWxsIGJlIHNlbGVj
dGVkIGlmIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgcHJvZmlsZXMsIHNvCiAgICAgICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IHZpZXcgZ2V0cyBjbGVhcmVkIHdoZW4gdGhlIGxhc3QgcHJvZmlsZSBpcyBy
ZW1vdmVkLgpAQCAtMzc2LDYgKzM3NywyNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLnByb2ZpbGVWaWV3U3RhdHVzQmFySXRlbXND
b250YWluZXIuYXBwZW5kQ2hpbGQoc3RhdHVzQmFySXRlbXNbaV0pOwogICAgIH0sCiAKKyAgICBn
ZXRQcm9maWxlczogZnVuY3Rpb24odHlwZUlkKQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IFtdOworICAgICAgICB2YXIgcHJvZmlsZXNDb3VudCA9IHRoaXMuX3Byb2ZpbGVzLmxlbmd0aDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9maWxlc0NvdW50OyArK2kpCisgICAgICAg
ICAgICBpZiAodGhpcy5fcHJvZmlsZXNbaV0udHlwZUlkID09PSB0eXBlSWQpCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2godGhpcy5fcHJvZmlsZXNbaV0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0sCisKKyAgICB1cGRhdGVQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQorICAg
IHsKKyAgICAgICAgdmFyIHByb2ZpbGVzQ291bnQgPSB0aGlzLl9wcm9maWxlcy5sZW5ndGg7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvZmlsZXNDb3VudDsgKytpKQorICAgICAgICAg
ICAgaWYgKHRoaXMuX3Byb2ZpbGVzW2ldLnR5cGVJZCA9PT0gcHJvZmlsZS50eXBlSWQKKyAgICAg
ICAgICAgICAgICAmJiB0aGlzLl9wcm9maWxlc1tpXS51aWQgPT09IHByb2ZpbGUudWlkKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fcHJvZmlsZXNbaV0gPSBwcm9maWxlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0sCisKICAgICBzaG93VmlldzogZnVuY3Rp
b24odmlldykKICAgICB7CiAgICAgICAgIHRoaXMuc2hvd1Byb2ZpbGUodmlldy5wcm9maWxlKTsK
QEAgLTU0MSwxNCArNTYzLDE1IEBAIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlw
ZSA9IHsKIAogV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5Qcm9maWxlU2lk
ZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocHJvZmlsZSkKK1dlYkluc3BlY3Rvci5Qcm9maWxl
U2lkZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocHJvZmlsZSwgdGl0bGVGb3JtYXQsIGNsYXNz
TmFtZSkKIHsKICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlOworICAgIHRoaXMuX3RpdGxlRm9y
bWF0ID0gdGl0bGVGb3JtYXQ7CiAKICAgICBpZiAodGhpcy5wcm9maWxlLnRpdGxlLmluZGV4T2Yo
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKSA9PT0gMCkKICAgICAgICAgdGhpcy5fcHJvZmlsZU51
bWJlciA9IHRoaXMucHJvZmlsZS50aXRsZS5zdWJzdHJpbmcoVXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lLmxlbmd0aCArIDEpOwogCi0gICAgV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5j
YWxsKHRoaXMsICJwcm9maWxlLXNpZGViYXItdHJlZS1pdGVtIiwgIiIsICIiLCBwcm9maWxlLCBm
YWxzZSk7CisgICAgV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5jYWxsKHRoaXMsIGNs
YXNzTmFtZSwgIiIsICIiLCBwcm9maWxlLCBmYWxzZSk7CiAKICAgICB0aGlzLnJlZnJlc2hUaXRs
ZXMoKTsKIH0KQEAgLTU3MCw3ICs1OTMsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGViYXJU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9tYWluVGl0bGUpCiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFpblRpdGxlOwogICAgICAgICBpZiAodGhpcy5wcm9m
aWxlLnRpdGxlLmluZGV4T2YoVXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKSA9PT0gMCkKLSAgICAg
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByb2ZpbGUgJWQiLCB0aGlzLl9w
cm9maWxlTnVtYmVyKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
dGhpcy5fdGl0bGVGb3JtYXQsIHRoaXMuX3Byb2ZpbGVOdW1iZXIpOwogICAgICAgICByZXR1cm4g
dGhpcy5wcm9maWxlLnRpdGxlOwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmMKaW5kZXggNDkwMTg1Ny4uMWYxNWRiMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKQEAgLTQwLDYgKzQwLDcgQEAKICAgICA8ZmlsZT5FeHRlbnNpb25TZXJ2
ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+Rm9udFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+SEFS
RW50cnkuanM8L2ZpbGU+CisgICAgPGZpbGU+SGVhcFNuYXBzaG90Vmlldy5qczwvZmlsZT4KICAg
ICA8ZmlsZT5IZWxwU2NyZWVuLmpzPC9maWxlPgogICAgIDxmaWxlPkltYWdlVmlldy5qczwvZmls
ZT4KICAgICA8ZmlsZT5JbmplY3RlZEZha2VXb3JrZXIuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCmluZGV4IDQzMTk4MTYuLjk4NTJiZTAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCkBAIC0zOTEwLDYgKzM5MTAs
MTE0IEBAIGJ1dHRvbi5lbmFibGUtdG9nZ2xlLXN0YXR1cy1iYXItaXRlbSAuZ2x5cGggewogICAg
IC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9yZWxvYWRCdXR0b25HbHlwaC5wbmcpOwog
fQogCisvKiBIZWFwIFNuYXBzaG90IFZpZXcgU3R5bGVzICovCisKKy5oZWFwLXNuYXBzaG90LXNp
ZGViYXItdHJlZS1pdGVtIC5pY29uIHsKKyAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Byb2ZpbGVJ
Y29uLnBuZyk7Cit9CisKKy5oZWFwLXNuYXBzaG90LXNpZGViYXItdHJlZS1pdGVtLnNtYWxsIC5p
Y29uIHsKKyAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Byb2ZpbGVTbWFsbEljb24ucG5nKTsKK30K
KworLmhlYXAtc25hcHNob3QtdmlldyB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBvdmVyZmxv
dzogaGlkZGVuOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVm
dDogMDsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7Cit9CisKKy5oZWFwLXNuYXBzaG90
LXZpZXcudmlzaWJsZSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKy5oZWFwLXNuYXBzaG90
LXZpZXcgLmRhdGEtZ3JpZCB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1heC1oZWlnaHQ6IDEw
MCU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGxlZnQ6IDA7CisgICAgcmlnaHQ6IDA7
CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogOTNweDsKK30KKworLmhlYXAtc25hcHNob3Qtdmll
dyAuZGF0YS1ncmlkIHRoLmNvdW50LWNvbHVtbiB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
fQorCisuaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuY291bnQtY29sdW1uIHsKKyAg
ICB0ZXh0LWFsaWduOiByaWdodDsKK30KKworLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlk
IHRoLnNpemUtY29sdW1uIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5oZWFwLXNu
YXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0ZC5zaXplLWNvbHVtbiB7CisgICAgdGV4dC1hbGlnbjog
cmlnaHQ7Cit9CisKKy5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3VudERlbHRh
LWNvbHVtbiB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaGVhcC1zbmFwc2hvdC12
aWV3IC5kYXRhLWdyaWQgdGQuY291bnREZWx0YS1jb2x1bW4geworICAgIHRleHQtYWxpZ246IHJp
Z2h0OworfQorCisuaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGguc2l6ZURlbHRhLWNv
bHVtbiB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaGVhcC1zbmFwc2hvdC12aWV3
IC5kYXRhLWdyaWQgdGQuc2l6ZURlbHRhLWNvbHVtbiB7CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7
Cit9CisKKyNoZWFwLXNuYXBzaG90LXN1bW1hcnktY29udGFpbmVyIHsKKyAgICBwb3NpdGlvbjog
YWJzb2x1dGU7CisgICAgcGFkZGluZy10b3A6IDIwcHg7CisgICAgYm90dG9tOiAwOworICAgIGxl
ZnQ6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgaGVpZ2h0OiA5M3B4OworICAgIG1hcmdpbi1sZWZ0
OiAtMXB4OworICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiKDEwMiwgMTAyLCAxMDIpOwor
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDEsIDExMSwgMTMwKTsKKyAgICBiYWNrZ3JvdW5k
LWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBm
cm9tKHJnYmEoMCwgMCwgMCwgMC41KSksIHRvKHJnYmEoMCwgMCwgMCwgMCkpKTsKKyAgICBiYWNr
Z3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wOwor
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICB0ZXh0LXNoYWRvdzogYmxhY2sgMCAxcHggMXB4
OworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgY29sb3I6IHdoaXRlOworICAgIC13ZWJr
aXQtYmFja2dyb3VuZC1zaXplOiAxcHggNnB4OworICAgIC13ZWJraXQtYmFja2dyb3VuZC1vcmln
aW46IHBhZGRpbmc7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmc7Cit9CisK
Ky5oZWFwLXNuYXBzaG90LXN1bW1hcnkgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAg
ICB3aWR0aDogNTAlOworICAgIG1pbi13aWR0aDogMzAwcHg7CisgICAgcG9zaXRpb246IHJlbGF0
aXZlOworfQorCisuaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IGNhbnZhcy5zdW1tYXJ5LWdyYXBoIHsK
KyAgICB3aWR0aDogMjI1cHg7Cit9CisKKy5oZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwgewor
ICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgdG9wOiAxcHg7CisgICAgd2lkdGg6IDUwJTsKKyAgICBsZWZ0OiAy
NSU7Cit9CisKIC5kZWxldGUtc3RvcmFnZS1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsKICAgICAt
d2Via2l0LW1hc2staW1hZ2U6IHVybChJbWFnZXMvZXhjbHVkZUJ1dHRvbkdseXBoLnBuZyk7CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMTRlMmNk
Yy4uNDk2ODY4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bApAQCAtMTI1LDYgKzEyNSw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iQm90dG9tVXBQcm9maWxlRGF0YUdyaWRUcmVlLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUb3BEb3duUHJvZmlsZURh
dGFHcmlkVHJlZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iUHJvZmlsZVZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRPTUFnZW50LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJJbmplY3RlZFNjcmlwdC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMKaW5kZXggZGI4OWUyMC4uZDE3ZWI0ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0yMzMsNiArMjMzLDggQEAgdmFyIFdlYkluc3Bl
Y3RvciA9IHsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJwcm9maWxlcyIpID09
PSAtMSkgewogICAgICAgICAgICAgdGhpcy5wYW5lbHMucHJvZmlsZXMgPSBuZXcgV2ViSW5zcGVj
dG9yLlByb2ZpbGVzUGFuZWwoKTsKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnByb2ZpbGVzLnJl
Z2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZSgpKTsKKyAg
ICAgICAgICAgIGlmIChQcmVmZXJlbmNlcy5oZWFwUHJvZmlsZXJQcmVzZW50KQorICAgICAgICAg
ICAgICAgIHRoaXMucGFuZWxzLnByb2ZpbGVzLnJlZ2lzdGVyUHJvZmlsZVR5cGUobmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSgpKTsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoInN0b3JhZ2UiKSA9PT0gLTEgJiYgaGlkZGVuUGFuZWxz
LmluZGV4T2YoImRhdGFiYXNlcyIpID09PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnN0
b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NWQ4NjBlZC4uNjc5NWUyYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgt
MjUgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdG9y
ZSBoZWFwIHNuYXBzaG90cyBpbiBJbnNwZWN0b3JQcm9maWxlckFnZW50LgorCisgICAgICAgIENo
YW5nZSB0aGUgd2F5IGhlYXAgc25hcHNob3RzIGFyZSB0cmFuc3BvcnRlZCB0byBJbnNwZWN0b3IK
KyAgICAgICAgdG8gYmUgYWxpZ25lZCB3aXRoIENQVSBwcm9maWxlcy4gQXMgYSByZXN1bHQsIHRo
ZSBIZWFwIHNuYXBzaG90cworICAgICAgICB2aWV3IG9mIFByb2ZpbGVzIHBhbmVsIHdhcyB1cHN0
cmVhbWVkIGludG8gV2ViQ29yZS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHNyYy9qcy9EZXZUb29scy5qczoKKyAgICAgICAgKCk6CisgICAgICAgICogc3JjL2pzL0hlYXBQ
cm9maWxlclBhbmVsLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9qcy9Qcm9maWxlckFnZW50
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9qcy9Qcm9maWxlclByb2Nlc3Nvci5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvanMvZGV2VG9vbHMuY3NzOgorCiAyMDEwLTA4LTI1ICBTYXRp
c2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
SmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGI0NWUzZTcuLjRjNmFjMzcgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkKQEAgLTMzLDkgKzMzLDYgQEAKICAgICAgICAgIyBMaXN0IG9mIERldlRvb2xz
IHNvdXJjZSBmaWxlcywgb3JkZXJlZCBieSBkZXBlbmRlbmNpZXMuIEl0IGlzIHVzZWQgYm90aAog
ICAgICAgICAjIGZvciBjb3B5aW5nIHRoZW0gdG8gcmVzb3VyY2UgZGlyLCBhbmQgZm9yIGdlbmVy
YXRpbmcgJ2RldnRvb2xzLmh0bWwnIGZpbGUuCiAgICAgICAgICdkZXZ0b29sc19qc19maWxlcyc6
IFsKLSAgICAgICAgICAgICdzcmMvanMvUHJvZmlsZXJBZ2VudC5qcycsCi0gICAgICAgICAgICAn
c3JjL2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzJywKLSAgICAgICAgICAgICdzcmMvanMvSGVhcFBy
b2ZpbGVyUGFuZWwuanMnLAogICAgICAgICAgICAgJ3NyYy9qcy9EZXZUb29scy5qcycsCiAgICAg
ICAgICAgICAnc3JjL2pzL0RldlRvb2xzSG9zdFN0dWIuanMnLAogICAgICAgICAgICAgJ3NyYy9q
cy9UZXN0cy5qcycsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xz
LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwppbmRleCBlM2UwMjA0Li5j
NDA3M2NkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKQEAgLTM0LDM5ICszNCwxMyBA
QAogICogRGV2VG9vbHMgZnJvbnRlbmQgdG9nZXRoZXIuIEl0IGlzIGFsc28gcmVzcG9uc2libGUg
Zm9yIG92ZXJyaWRpbmcgZXhpc3RpbmcKICAqIFdlYkluc3BlY3RvciBmdW5jdGlvbmFsaXR5IHdo
aWxlIGl0IGlzIGdldHRpbmcgdXBzdHJlYW1lZCBpbnRvIFdlYkNvcmUuCiAgKi8KLWRldnRvb2xz
LlRvb2xzQWdlbnQgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5wcm9maWxlckFnZW50XyA9IG5l
dyBkZXZ0b29scy5Qcm9maWxlckFnZW50KCk7Ci19OwotCi0KLS8qKgotICogQHJldHVybiB7ZGV2
dG9vbHMuUHJvZmlsZXJBZ2VudH0gUHJvZmlsZXIgYWdlbnQgaW5zdGFuY2UuCi0gKi8KLWRldnRv
b2xzLlRvb2xzQWdlbnQucHJvdG90eXBlLmdldFByb2ZpbGVyQWdlbnQgPSBmdW5jdGlvbigpCi17
Ci0gICAgcmV0dXJuIHRoaXMucHJvZmlsZXJBZ2VudF87Ci19OwotCi0KLQotLyoqCi0gKiBHbG9i
YWwgaW5zdGFuY2Ugb2YgdGhlIHRvb2xzIGFnZW50LgotICogQHR5cGUge2RldnRvb2xzLlRvb2xz
QWdlbnR9Ci0gKi8KLWRldnRvb2xzLnRvb2xzID0gbnVsbDsKLQogCiB2YXIgY29udGV4dCA9IHt9
OyAgLy8gVXNlZCBieSBXZWJDb3JlJ3MgaW5zcGVjdG9yIHJvdXRpbmVzLgogCiAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCiAvLyBIZXJlIGFuZCBiZWxvdyBhcmUgb3ZlcnJpZGVzIHRvIGV4aXN0aW5n
IFdlYkluc3BlY3RvciBtZXRob2RzIG9ubHkuCiAvLyBUT0RPKHBmZWxkbWFuKTogUGF0Y2ggV2Vi
Q29yZSBhbmQgdXBzdHJlYW0gY2hhbmdlcy4KLXZhciBvbGRMb2FkZWQgPSBXZWJJbnNwZWN0b3Iu
bG9hZGVkOwotV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0b29s
cy50b29scyA9IG5ldyBkZXZ0b29scy5Ub29sc0FnZW50KCk7Ci0KKyhmdW5jdGlvbiAoKSB7CiAg
ICAgUHJlZmVyZW5jZXMuaWdub3JlV2hpdGVzcGFjZSA9IGZhbHNlOwogICAgIFByZWZlcmVuY2Vz
LnNhbXBsaW5nQ1BVUHJvZmlsZXIgPSB0cnVlOwogICAgIFByZWZlcmVuY2VzLmhlYXBQcm9maWxl
clByZXNlbnQgPSB0cnVlOwpAQCAtNzUsOSArNDksNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0g
ZnVuY3Rpb24oKQogICAgIFByZWZlcmVuY2VzLmNhbkVkaXRTY3JpcHRTb3VyY2UgPSB0cnVlOwog
ICAgIFByZWZlcmVuY2VzLm9ubGluZURldGVjdGlvbkVuYWJsZWQgPSBmYWxzZTsKICAgICBQcmVm
ZXJlbmNlcy5kb21CcmVha3BvaW50c0VuYWJsZWQgPSB0cnVlOwotCi0gICAgb2xkTG9hZGVkLmNh
bGwoV2ViSW5zcGVjdG9yKTsKLX0KK30pKCk7CiAKIGRldnRvb2xzLmRvbUNvbnRlbnRMb2FkZWQg
PSBmdW5jdGlvbigpCiB7CkBAIC05Myw3ICs2NSw2IEBAIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBkZXZ0b29scy5kb21Db250ZW50TG9hZGVkLCBmYWxzZSk7
CiAgICAgdmFyIG9sZFNob3cgPSBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUu
c2hvdzsKICAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuc2hvdyA9IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGRldnRvb2xzLnRvb2xzLmdldFByb2ZpbGVyQWdlbnQo
KS5pbml0aWFsaXplUHJvZmlsaW5nKCk7CiAgICAgICAgIHRoaXMuZW5hYmxlVG9nZ2xlQnV0dG9u
LnZpc2libGUgPSBmYWxzZTsKICAgICAgICAgb2xkU2hvdy5jYWxsKHRoaXMpOwogICAgICAgICAv
LyBTaG93IGlzIGNhbGxlZCBvbiBldmVyeSBzaG93IGV2ZW50IG9mIGEgcGFuZWwsIHNvCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0hlYXBQcm9maWxlclBhbmVsLmpzIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5qcwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYmNiMDA4Zi4uMDAwMDAwMAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL0hlYXBQcm9maWxlclBhbmVsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTY2ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
KioKLSAqIEBmaWxlb3ZlcnZpZXcgSGVhcCBwcm9maWxlciBwYW5lbCBpbXBsZW1lbnRhdGlvbi4K
LSAqLwotCi1XZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUuYWRkU25hcHNob3Qg
PSBmdW5jdGlvbihzbmFwc2hvdCkgewotICAgIHNuYXBzaG90LnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJTbmFwc2hvdCAlZCIsIHNuYXBzaG90Lm51bWJlcik7Ci0gICAgc25hcHNob3Qu
dHlwZUlkID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZDsKLQot
ICAgIHZhciBzbmFwc2hvdHMgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
c25hcHNob3RzOwotICAgIHNuYXBzaG90cy5wdXNoKHNuYXBzaG90KTsKLQotICAgIHNuYXBzaG90
Lmxpc3RJbmRleCA9IHNuYXBzaG90cy5sZW5ndGggLSAxOwotCi0gICAgaWYgKFdlYkluc3BlY3Rv
ci5DUFVQcm9maWxlKQotICAgICAgICB0aGlzLmFkZFByb2ZpbGVIZWFkZXIoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwgc25hcHNob3QpOwotICAgIGVsc2UKLSAg
ICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKHNuYXBzaG90KTsKLQotICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJzbmFwc2hvdCBhZGRlZCIpOwotfQotCi0KLVdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFyZW50LCBwcm9maWxlKQotewotICAgIFdl
Ykluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7Ci0KLSAgICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVD
bGFzcygiaGVhcC1zbmFwc2hvdC12aWV3Iik7Ci0KLSAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsK
LSAgICB0aGlzLnBhcmVudC5hZGRFdmVudExpc3RlbmVyKCJzbmFwc2hvdCBhZGRlZCIsIHRoaXMu
X3VwZGF0ZUJhc2VPcHRpb25zLCB0aGlzKTsKLQotICAgIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50
ID0gZmFsc2U7Ci0gICAgdGhpcy5zaG93U2l6ZUFzUGVyY2VudCA9IGZhbHNlOwotICAgIHRoaXMu
c2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgPSBmYWxzZTsKLSAgICB0aGlzLnNob3dTaXplRGVsdGFB
c1BlcmNlbnQgPSBmYWxzZTsKLQotICAgIHRoaXMuY2F0ZWdvcmllcyA9IHsKLSAgICAgICAgY29k
ZTogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJjb2RlIiwgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDb2RlIiksICJyZ2IoMjU1LDEyMSwwKSIpLAotICAgICAgICBkYXRhOiBuZXcg
V2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoImRhdGEiLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIk9iamVjdHMiKSwgInJnYig0NywxMDIsMjM2KSIpCi0gICAgfTsKLQotICAgIHZhciBzdW1t
YXJ5Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgc3VtbWFy
eUNvbnRhaW5lci5pZCA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnktY29udGFpbmVyIjsKLQotICAg
IHRoaXMuY291bnRzU3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlz
LmNhdGVnb3JpZXMpOwotICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci5lbGVtZW50LmNsYXNzTmFt
ZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnkiOwotICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci5j
YWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRvcigp
OwotICAgIHZhciBjb3VudHNMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgIGNvdW50c0xhYmVsLmNsYXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwi
OwotICAgIGNvdW50c0xhYmVsLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJD
b3VudCIpOwotICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci5lbGVtZW50LmFwcGVuZENoaWxkKGNv
dW50c0xhYmVsKTsKLSAgICBzdW1tYXJ5Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY291bnRz
U3VtbWFyeUJhci5lbGVtZW50KTsKLQotICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyID0gbmV3IFdl
Ykluc3BlY3Rvci5TdW1tYXJ5QmFyKHRoaXMuY2F0ZWdvcmllcyk7Ci0gICAgdGhpcy5zaXplc1N1
bW1hcnlCYXIuZWxlbWVudC5jbGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IjsKLSAg
ICB0aGlzLnNpemVzU3VtbWFyeUJhci5jYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U3VtbWFyeVNpemVDYWxjdWxhdG9yKCk7Ci0gICAgdmFyIHNpemVzTGFiZWwgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJsYWJlbCIpOwotICAgIHNpemVzTGFiZWwuY2xhc3NOYW1lID0gImhlYXAt
c25hcHNob3Qtc3VtbWFyeS1sYWJlbCI7Ci0gICAgc2l6ZXNMYWJlbC50ZXh0Q29udGVudCA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiU2l6ZSIpOwotICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmVs
ZW1lbnQuYXBwZW5kQ2hpbGQoc2l6ZXNMYWJlbCk7Ci0gICAgc3VtbWFyeUNvbnRhaW5lci5hcHBl
bmRDaGlsZCh0aGlzLnNpemVzU3VtbWFyeUJhci5lbGVtZW50KTsKLQotICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZChzdW1tYXJ5Q29udGFpbmVyKTsKLQotICAgIHZhciBjb2x1bW5zID0geyAi
Y29ucyI6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc3RydWN0b3IiKSwgZGlz
Y2xvc3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgICAgICAgICAgICAgImNv
dW50IjogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3VudCIpLCB3aWR0aDogIjU0
cHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgICAic2l6ZSI6IHsgdGl0
bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2l6ZSIpLCB3aWR0aDogIjcycHgiLCBzb3J0OiAi
ZGVzY2VuZGluZyIsIHNvcnRhYmxlOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICAgICJjb3Vu
dERlbHRhIjogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJceGIxIENvdW50IiksIHdp
ZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICAgICJzaXpl
RGVsdGEiOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlx4YjEgU2l6ZSIpLCB3aWR0
aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZSB9IH07Ci0KLSAgICB0aGlzLmRhdGFHcmlkID0gbmV3
IFdlYkluc3BlY3Rvci5EYXRhR3JpZChjb2x1bW5zKTsKLSAgICB0aGlzLmRhdGFHcmlkLmFkZEV2
ZW50TGlzdGVuZXIoInNvcnRpbmcgY2hhbmdlZCIsIHRoaXMuX3NvcnREYXRhLCB0aGlzKTsKLSAg
ICB0aGlzLmRhdGFHcmlkLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhp
cy5fbW91c2VEb3duSW5EYXRhR3JpZC5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5kYXRhR3JpZC5lbGVtZW50KTsKLQotICAgIHRoaXMucHJvZmls
ZSA9IHByb2ZpbGU7Ci0KLSAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic2VsZWN0Iik7Ci0gICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5jbGFzc05h
bWUgPSAic3RhdHVzLWJhci1pdGVtIjsKLSAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuX2NoYW5nZUJhc2UuYmluZCh0aGlzKSwgZmFsc2Up
OwotICAgIHRoaXMuX3VwZGF0ZUJhc2VPcHRpb25zKCk7Ci0gICAgaWYgKHRoaXMucHJvZmlsZS5s
aXN0SW5kZXggPiAwKQotICAgICAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5k
ZXggPSB0aGlzLnByb2ZpbGUubGlzdEluZGV4IC0gMTsKLSAgICBlbHNlCi0gICAgICAgIHRoaXMu
YmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHRoaXMucHJvZmlsZS5saXN0SW5kZXg7
Ci0gICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QoKTsKLQotICAgIHRoaXMucGVyY2VudEJ1dHRv
biA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0dG9uKCIiLCAicGVyY2VudC10aW1lLXN0
YXR1cy1iYXItaXRlbSBzdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0aGlzLnBlcmNlbnRCdXR0b24u
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9wZXJjZW50Q2xpY2tlZC5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci0KLSAgICB0aGlzLnJlZnJlc2goKTsKLQotICAgIHRoaXMuX3VwZGF0ZVBlcmNl
bnRCdXR0b24oKTsKLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlw
ZSA9IHsKLQotICAgIGdldCBzdGF0dXNCYXJJdGVtcygpCi0gICAgewotICAgICAgICByZXR1cm4g
W3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQsIHRoaXMucGVyY2VudEJ1dHRvbi5lbGVtZW50XTsKLSAg
ICB9LAotCi0gICAgZ2V0IHByb2ZpbGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3By
b2ZpbGU7Ci0gICAgfSwKLQotICAgIHNldCBwcm9maWxlKHByb2ZpbGUpCi0gICAgewotICAgICAg
ICB0aGlzLl9wcm9maWxlID0gcHJvZmlsZTsKLSAgICB9LAotCi0gICAgc2hvdzogZnVuY3Rpb24o
cGFyZW50RWxlbWVudCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlw
ZS5zaG93LmNhbGwodGhpcywgcGFyZW50RWxlbWVudCk7Ci0gICAgICAgIHRoaXMuZGF0YUdyaWQu
dXBkYXRlV2lkdGhzKCk7Ci0gICAgfSwKLQotICAgIGhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7Ci0gICAg
ICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwotICAgIH0sCi0KLSAgICBy
ZXNpemU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmRhdGFHcmlkKQotICAg
ICAgICAgICAgdGhpcy5kYXRhR3JpZC51cGRhdGVXaWR0aHMoKTsKLSAgICB9LAotCi0gICAgcmVm
cmVzaDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5kYXRhR3JpZC5yZW1vdmVDaGls
ZHJlbigpOwotCi0gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuc25hcHNob3REYXRhR3JpZExp
c3QuY2hpbGRyZW47Ci0gICAgICAgIHZhciBjb3VudCA9IGNoaWxkcmVuLmxlbmd0aDsKLSAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQotICAgICAgICAg
ICAgdGhpcy5kYXRhR3JpZC5hcHBlbmRDaGlsZChjaGlsZHJlbltpbmRleF0pOwotCi0gICAgICAg
IHRoaXMuX3VwZGF0ZVN1bW1hcnlHcmFwaCgpOwotICAgIH0sCi0KLSAgICByZWZyZXNoU2hvd0Fz
UGVyY2VudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVBlcmNlbnRC
dXR0b24oKTsKLSAgICAgICAgdGhpcy5yZWZyZXNoVmlzaWJsZURhdGEoKTsKLSAgICB9LAotCi0g
ICAgX2RlbGV0ZVNlYXJjaE1hdGNoZWRGbGFnczogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRjaGVkQ29uc0NvbHVtbjsKLSAgICAgICAgZGVsZXRl
IG5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbjsKLSAgICAgICAgZGVsZXRlIG5vZGUuX3Nl
YXJjaE1hdGNoZWRTaXplQ29sdW1uOwotICAgICAgICBkZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hl
ZENvdW50RGVsdGFDb2x1bW47Ci0gICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRjaGVkU2l6
ZURlbHRhQ29sdW1uOwotICAgIH0sCi0KLSAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFJlc3VsdHMpIHsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgICAgIHZhciBwcm9maWxlTm9kZSA9IHRoaXMuX3NlYXJjaFJlc3VsdHNbaV0ucHJv
ZmlsZU5vZGU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdz
KHByb2ZpbGVOb2RlKTsKLSAgICAgICAgICAgICAgICBwcm9maWxlTm9kZS5yZWZyZXNoKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkZWxldGUgdGhpcy5fc2VhcmNoRmlu
aXNoZWRDYWxsYmFjazsKLSAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0g
LTE7Ci0gICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBbXTsKLSAgICB9LAotCi0gICAgcGVy
Zm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnksIGZpbmlzaGVkQ2FsbGJhY2spCi0gICAgewotICAg
ICAgICAvLyBDYWxsIHNlYXJjaENhbmNlbGVkIHNpbmNlIGl0IHdpbGwgcmVzZXQgZXZlcnl0aGlu
ZyB3ZSBuZWVkIGJlZm9yZSBkb2luZyBhIG5ldyBzZWFyY2guCi0gICAgICAgIHRoaXMuc2VhcmNo
Q2FuY2VsZWQoKTsKLQotICAgICAgICBxdWVyeSA9IHF1ZXJ5LnRyaW0oKTsKLQotICAgICAgICBp
ZiAoIXF1ZXJ5Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9z
ZWFyY2hGaW5pc2hlZENhbGxiYWNrID0gZmluaXNoZWRDYWxsYmFjazsKLQotICAgICAgICB2YXIg
aGVscGVyID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyOwotCi0g
ICAgICAgIHZhciBvcGVyYXRpb25BbmROdW1iZXIgPSBoZWxwZXIucGFyc2VPcGVyYXRpb25BbmRO
dW1iZXIocXVlcnkpOwotICAgICAgICB2YXIgb3BlcmF0aW9uID0gb3BlcmF0aW9uQW5kTnVtYmVy
WzBdOwotICAgICAgICB2YXIgcXVlcnlOdW1iZXIgPSBvcGVyYXRpb25BbmROdW1iZXJbMV07Ci0K
LSAgICAgICAgdmFyIHBlcmNlbnRVbml0cyA9IGhlbHBlci5wZXJjZW50cy50ZXN0KHF1ZXJ5KTsK
LSAgICAgICAgdmFyIG1lZ2FCeXRlc1VuaXRzID0gaGVscGVyLm1lZ2FCeXRlcy50ZXN0KHF1ZXJ5
KTsKLSAgICAgICAgdmFyIGtpbG9CeXRlc1VuaXRzID0gaGVscGVyLmtpbG9CeXRlcy50ZXN0KHF1
ZXJ5KTsKLSAgICAgICAgdmFyIGJ5dGVzVW5pdHMgPSBoZWxwZXIuYnl0ZXMudGVzdChxdWVyeSk7
Ci0KLSAgICAgICAgdmFyIHF1ZXJ5TnVtYmVyQnl0ZXMgPSAobWVnYUJ5dGVzVW5pdHMgPyAocXVl
cnlOdW1iZXIgKiAxMDI0ICogMTAyNCkgOiAoa2lsb0J5dGVzVW5pdHMgPyAocXVlcnlOdW1iZXIg
KiAxMDI0KSA6IHF1ZXJ5TnVtYmVyKSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hlc1F1ZXJ5
KGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9kZWxldGVTZWFyY2hNYXRjaGVkRmxh
Z3MoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlKTsKLQotICAgICAgICAgICAgaWYgKHBlcmNlbnRV
bml0cykgewotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNo
TWF0Y2hlZENvdW50Q29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5j
b3VudFBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3RE
YXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRTaXplQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZS5zaXplUGVyY2VudCwgcXVlcnlOdW1iZXIpOwotICAgICAgICAgICAg
ICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1
bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLmNvdW50RGVsdGFQZXJjZW50
LCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
Ll9zZWFyY2hNYXRjaGVkU2l6ZURlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZS5zaXplRGVsdGFQZXJjZW50LCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKG1lZ2FCeXRlc1VuaXRzIHx8IGtpbG9CeXRlc1VuaXRzIHx8IGJ5dGVzVW5pdHMp
IHsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNo
ZWRTaXplQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5zaXplLCBx
dWVyeU51bWJlckJ5dGVzKTsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5v
ZGUuX3NlYXJjaE1hdGNoZWRTaXplRGVsdGFDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90
RGF0YUdyaWROb2RlLnNpemVEZWx0YSwgcXVlcnlOdW1iZXJCeXRlcyk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNo
TWF0Y2hlZENvdW50Q29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5j
b3VudCwgcXVlcnlOdW1iZXIpOwotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlk
Tm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBz
aG90RGF0YUdyaWROb2RlLmNvdW50RGVsdGEsIHF1ZXJ5TnVtYmVyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5jb25zdHJ1Y3Rvck5h
bWUuaGFzU3Vic3RyaW5nKHF1ZXJ5LCB0cnVlKSkKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNo
b3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uID0gdHJ1ZTsKLQotICAgICAg
ICAgICAgaWYgKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1
bW4gfHwKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1h
dGNoZWRDb3VudENvbHVtbiB8fAotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlk
Tm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVDb2x1bW4gfHwKLSAgICAgICAgICAgICAgICBoZWFwU25h
cHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uIHx8Ci0gICAg
ICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZURl
bHRhQ29sdW1uKSB7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLnJl
ZnJlc2goKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGN1cnJl
bnQgPSB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0LmNoaWxkcmVuWzBdOwotICAgICAgICB2YXIg
ZGVwdGggPSAwOwotICAgICAgICB2YXIgaW5mbyA9IHt9OwotCi0gICAgICAgIC8vIFRoZSBzZWNv
bmQgYW5kIHN1YnNlcXVlbnQgbGV2ZWxzIG9mIGhlYXAgc25hcHNob3Qgbm9kZXMgcmVwcmVzZW50
IHJldGFpbmVycywKLSAgICAgICAgLy8gc28gcmVjdXJzaXZlIGV4cGFuc2lvbiB3aWxsIGJlIGlu
ZmluaXRlLCBzaW5jZSBhIGdyYXBoIGlzIGJlaW5nIHRyYXZlcnNlZC4KLSAgICAgICAgLy8gU28g
ZGVmYXVsdCB0byBhIHJlY3Vyc2lvbiBjYXAgb2YgMiBsZXZlbHMuCi0gICAgICAgIHZhciBtYXhE
ZXB0aCA9IDI7Ci0KLSAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgICAgIGlmICht
YXRjaGVzUXVlcnkoY3VycmVudCkpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0
cy5wdXNoKHsgcHJvZmlsZU5vZGU6IGN1cnJlbnQgfSk7Ci0gICAgICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC50cmF2ZXJzZU5leHROb2RlKGZhbHNlLCBudWxsLCAoZGVwdGggPj0gbWF4RGVwdGgp
LCBpbmZvKTsKLSAgICAgICAgICAgIGRlcHRoICs9IGluZm8uZGVwdGhDaGFuZ2U7Ci0gICAgICAg
IH0KLQotICAgICAgICBmaW5pc2hlZENhbGxiYWNrKHRoaXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMu
bGVuZ3RoKTsKLSAgICB9LAotCi0gICAganVtcFRvRmlyc3RTZWFyY2hSZXN1bHQ6IFdlYkluc3Bl
Y3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQsCi0g
ICAganVtcFRvTGFzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnBy
b3RvdHlwZS5qdW1wVG9MYXN0U2VhcmNoUmVzdWx0LAotICAgIGp1bXBUb05leHRTZWFyY2hSZXN1
bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJj
aFJlc3VsdCwKLSAgICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVWaWV3LnByb3RvdHlwZS5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCwKLSAgICBz
aG93aW5nRmlyc3RTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90
b3R5cGUuc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0LAotICAgIHNob3dpbmdMYXN0U2VhcmNoUmVz
dWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLnNob3dpbmdMYXN0U2Vh
cmNoUmVzdWx0LAotICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9m
aWxlVmlldy5wcm90b3R5cGUuX2p1bXBUb1NlYXJjaFJlc3VsdCwKLQotICAgIHJlZnJlc2hWaXNp
YmxlRGF0YTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5kYXRh
R3JpZC5jaGlsZHJlblswXTsKLSAgICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAgICBj
aGlsZC5yZWZyZXNoKCk7Ci0gICAgICAgICAgICBjaGlsZCA9IGNoaWxkLnRyYXZlcnNlTmV4dE5v
ZGUoZmFsc2UsIG51bGwsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVN1
bW1hcnlHcmFwaCgpOwotICAgIH0sCi0KLSAgICBfY2hhbmdlQmFzZTogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdCA9PT0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb2ZpbGVUeXBlLnNuYXBzaG90c1t0aGlzLmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5k
ZXhdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3Jlc2V0RGF0YUdyaWRM
aXN0KCk7Ci0gICAgICAgIHRoaXMucmVmcmVzaCgpOwotCi0gICAgICAgIGlmICghdGhpcy5jdXJy
ZW50UXVlcnkgfHwgIXRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgfHwgIXRoaXMuX3NlYXJj
aFJlc3VsdHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gVGhlIGN1cnJlbnQg
c2VhcmNoIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBhZ2Fpbi4gRmlyc3QgbmVnYXRlIG91dCBwcmV2
aW91cyBtYXRjaAotICAgICAgICAvLyBjb3VudCBieSBjYWxsaW5nIHRoZSBzZWFyY2ggZmluaXNo
ZWQgY2FsbGJhY2sgd2l0aCBhIG5lZ2F0aXZlIG51bWJlciBvZiBtYXRjaGVzLgotICAgICAgICAv
LyBUaGVuIHBlcmZvcm0gdGhlIHNlYXJjaCBhZ2FpbiB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFuZCBj
YWxsYmFjay4KLSAgICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayh0aGlzLCAtdGhp
cy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpOwotICAgICAgICB0aGlzLnBlcmZvcm1TZWFyY2godGhp
cy5jdXJyZW50UXVlcnksIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2spOwotICAgIH0sCi0K
LSAgICBfY3JlYXRlU25hcHNob3REYXRhR3JpZExpc3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9zbmFwc2hvdERhdGFHcmlkTGlzdCkKLSAgICAgICAgICBkZWxldGUgdGhp
cy5fc25hcHNob3REYXRhR3JpZExpc3Q7Ci0KLSAgICAgICAgdGhpcy5fc25hcHNob3REYXRhR3Jp
ZExpc3QgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdCh0aGlzLCB0
aGlzLmJhc2VTbmFwc2hvdC5lbnRyaWVzLCB0aGlzLnByb2ZpbGUuZW50cmllcyk7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9zbmFwc2hvdERhdGFHcmlkTGlzdDsKLSAgICB9LAotCi0gICAgX21vdXNl
RG93bkluRGF0YUdyaWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50
LmRldGFpbCA8IDIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNlbGwgPSBl
dmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAg
ICAgaWYgKCFjZWxsIHx8ICghY2VsbC5oYXNTdHlsZUNsYXNzKCJjb3VudC1jb2x1bW4iKSAmJiAh
Y2VsbC5oYXNTdHlsZUNsYXNzKCJzaXplLWNvbHVtbiIpICYmICFjZWxsLmhhc1N0eWxlQ2xhc3Mo
ImNvdW50RGVsdGEtY29sdW1uIikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZURlbHRhLWNv
bHVtbiIpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoY2VsbC5oYXNTdHls
ZUNsYXNzKCJjb3VudC1jb2x1bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0NvdW50QXNQZXJj
ZW50ID0gIXRoaXMuc2hvd0NvdW50QXNQZXJjZW50OwotICAgICAgICBlbHNlIGlmIChjZWxsLmhh
c1N0eWxlQ2xhc3MoInNpemUtY29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNob3dTaXplQXNQ
ZXJjZW50ID0gIXRoaXMuc2hvd1NpemVBc1BlcmNlbnQ7Ci0gICAgICAgIGVsc2UgaWYgKGNlbGwu
aGFzU3R5bGVDbGFzcygiY291bnREZWx0YS1jb2x1bW4iKSkKLSAgICAgICAgICAgIHRoaXMuc2hv
d0NvdW50RGVsdGFBc1BlcmNlbnQgPSAhdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudDsKLSAg
ICAgICAgZWxzZSBpZiAoY2VsbC5oYXNTdHlsZUNsYXNzKCJzaXplRGVsdGEtY29sdW1uIikpCi0g
ICAgICAgICAgICB0aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPSAhdGhpcy5zaG93U2l6ZURl
bHRhQXNQZXJjZW50OwotCi0gICAgICAgIHRoaXMucmVmcmVzaFNob3dBc1BlcmNlbnRzKCk7Ci0K
LSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7Ci0gICAgfSwKLQotICAgIGdldCBfaXNTaG93aW5nQXNQZXJjZW50KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLnNob3dDb3VudEFzUGVyY2VudCAmJiB0aGlzLnNob3dTaXpl
QXNQZXJjZW50ICYmIHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgJiYgdGhpcy5zaG93U2l6
ZURlbHRhQXNQZXJjZW50OwotICAgIH0sCi0KLSAgICBfcGVyY2VudENsaWNrZWQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2lzU2hvd2lu
Z0FzUGVyY2VudDsKLSAgICAgICAgdGhpcy5zaG93Q291bnRBc1BlcmNlbnQgPSAhY3VycmVudFN0
YXRlOwotICAgICAgICB0aGlzLnNob3dTaXplQXNQZXJjZW50ID0gIWN1cnJlbnRTdGF0ZTsKLSAg
ICAgICAgdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0gICAg
ICAgIHRoaXMuc2hvd1NpemVEZWx0YUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0gICAgICAg
IHRoaXMucmVmcmVzaFNob3dBc1BlcmNlbnRzKCk7Ci0gICAgfSwKLQotICAgIF9yZXNldERhdGFH
cmlkTGlzdDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5iYXNlU25hcHNob3QgPSBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuc25hcHNob3RzW3RoaXMuYmFzZVNl
bGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleF07Ci0gICAgICAgIHZhciBsYXN0Q29tcGFyYXRvciA9
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9y
KCJzaXplIiwgZmFsc2UpOwotICAgICAgICBpZiAodGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdCkK
LSAgICAgICAgICAgIGxhc3RDb21wYXJhdG9yID0gdGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdC5s
YXN0Q29tcGFyYXRvcjsKLSAgICAgICAgdGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdCA9IHRoaXMu
X2NyZWF0ZVNuYXBzaG90RGF0YUdyaWRMaXN0KCk7Ci0gICAgICAgIHRoaXMuc25hcHNob3REYXRh
R3JpZExpc3Quc29ydChsYXN0Q29tcGFyYXRvciwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9zb3J0
RGF0YTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNvcnRBc2NlbmRpbmcgPSB0aGlz
LmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7Ci0gICAgICAgIHZhciBzb3J0Q29s
dW1uSWRlbnRpZmllciA9IHRoaXMuZGF0YUdyaWQuc29ydENvbHVtbklkZW50aWZpZXI7Ci0gICAg
ICAgIHZhciBzb3J0UHJvcGVydHkgPSB7Ci0gICAgICAgICAgICAgICAgImNvbnMiOiBbImNvbnN0
cnVjdG9yTmFtZSIsIG51bGxdLAotICAgICAgICAgICAgICAgICJjb3VudCI6IFsiY291bnQiLCBu
dWxsXSwKLSAgICAgICAgICAgICAgICAic2l6ZSI6IFsic2l6ZSIsICJjb3VudCJdLAotICAgICAg
ICAgICAgICAgICJjb3VudERlbHRhIjogdGhpcy5zaG93Q291bnREZWx0YUFzUGVyY2VudCA/IFsi
Y291bnREZWx0YVBlcmNlbnQiLCBudWxsXSA6IFsiY291bnREZWx0YSIsIG51bGxdLAotICAgICAg
ICAgICAgICAgICJzaXplRGVsdGEiOiB0aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPyBbInNp
emVEZWx0YVBlcmNlbnQiLCAiY291bnREZWx0YVBlcmNlbnQiXSA6IFsic2l6ZURlbHRhIiwgInNp
emVEZWx0YVBlcmNlbnQiXQotICAgICAgICB9W3NvcnRDb2x1bW5JZGVudGlmaWVyXTsKLQotICAg
ICAgICB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0LnNvcnQoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3Ioc29ydFByb3BlcnR5WzBdLCBzb3J0
UHJvcGVydHlbMV0sIHNvcnRBc2NlbmRpbmcpKTsKLQotICAgICAgICB0aGlzLnJlZnJlc2goKTsK
LSAgICB9LAotCi0gICAgX3VwZGF0ZUJhc2VPcHRpb25zOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB2YXIgbGlzdCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5zbmFw
c2hvdHM7Ci0gICAgICAgIC8vIFdlJ3JlIGFzc3VtaW5nIHRoYXQgc25hcHNob3RzIGNhbiBvbmx5
IGJlIGFkZGVkLgotICAgICAgICBpZiAodGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5ndGggPT09
IGxpc3QubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZvciAodmFyIGkg
PSB0aGlzLmJhc2VTZWxlY3RFbGVtZW50Lmxlbmd0aCwgbiA9IGxpc3QubGVuZ3RoOyBpIDwgbjsg
KytpKSB7Ci0gICAgICAgICAgICB2YXIgYmFzZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoIm9wdGlvbiIpOwotICAgICAgICAgICAgYmFzZU9wdGlvbi5sYWJlbCA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ29tcGFyZWQgdG8gJXMiLCBsaXN0W2ldLnRpdGxlKTsKLSAgICAgICAgICAg
IHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYmFzZU9wdGlvbik7Ci0gICAgICAg
IH0KLSAgICB9LAotCi0gICAgX3VwZGF0ZVBlcmNlbnRCdXR0b246IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl9pc1Nob3dpbmdBc1BlcmNlbnQpIHsKLSAgICAgICAgICAgIHRo
aXMucGVyY2VudEJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBhYnNv
bHV0ZSBjb3VudHMgYW5kIHNpemVzLiIpOwotICAgICAgICAgICAgdGhpcy5wZXJjZW50QnV0dG9u
LnRvZ2dsZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5wZXJj
ZW50QnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGNvdW50cyBhbmQg
c2l6ZXMgYXMgcGVyY2VudGFnZXMuIik7Ci0gICAgICAgICAgICB0aGlzLnBlcmNlbnRCdXR0b24u
dG9nZ2xlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF91cGRhdGVTdW1tYXJ5
R3JhcGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci5j
YWxjdWxhdG9yLnNob3dBc1BlcmNlbnQgPSB0aGlzLl9pc1Nob3dpbmdBc1BlcmNlbnQ7Ci0gICAg
ICAgIHRoaXMuY291bnRzU3VtbWFyeUJhci51cGRhdGUodGhpcy5wcm9maWxlLmxvd2xldmVscyk7
Ci0KLSAgICAgICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuY2FsY3VsYXRvci5zaG93QXNQZXJjZW50
ID0gdGhpcy5faXNTaG93aW5nQXNQZXJjZW50OwotICAgICAgICB0aGlzLnNpemVzU3VtbWFyeUJh
ci51cGRhdGUodGhpcy5wcm9maWxlLmxvd2xldmVscyk7Ci0gICAgfQotfTsKLQotV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5W
aWV3LnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVs
cGVyID0gewotICAgIC8vIEluIGNvbXBhcmF0b3JzLCB3ZSBhc3N1bWUgdGhhdCBhIHZhbHVlIGZy
b20gYSBub2RlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLgotICAgIG9wZXJhdGlv
bnM6IHsgTEVTUzogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA8IGI7
IH0sCi0gICAgICAgICAgICAgICAgICBMRVNTX09SX0VRVUFMOiBmdW5jdGlvbiAoYSwgYikgeyBy
ZXR1cm4gYSAhPT0gbnVsbCAmJiBhIDw9IGI7IH0sCi0gICAgICAgICAgICAgICAgICBFUVVBTDog
ZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA9PT0gYjsgfSwKLSAgICAg
ICAgICAgICAgICAgIEdSRUFURVJfT1JfRVFVQUw6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBh
ICE9PSBudWxsICYmIGEgPj0gYjsgfSwKLSAgICAgICAgICAgICAgICAgIEdSRUFURVI6IGZ1bmN0
aW9uIChhLCBiKSB7IHJldHVybiBhICE9PSBudWxsICYmIGEgPiBiOyB9IH0sCi0KLSAgICBvcGVy
YXRpb25QYXJzZXJzOiB7IExFU1M6IC9ePChcZCspLywKLSAgICAgICAgICAgICAgICAgICAgICAg
IExFU1NfT1JfRVFVQUw6IC9ePD0oXGQrKS8sCi0gICAgICAgICAgICAgICAgICAgICAgICBHUkVB
VEVSX09SX0VRVUFMOiAvXj49KFxkKykvLAotICAgICAgICAgICAgICAgICAgICAgICAgR1JFQVRF
UjogL14+KFxkKykvIH0sCi0KLSAgICBwYXJzZU9wZXJhdGlvbkFuZE51bWJlcjogZnVuY3Rpb24o
cXVlcnkpCi0gICAgewotICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RWaWV3LlNlYXJjaEhlbHBlci5vcGVyYXRpb25zOwotICAgICAgICB2YXIgcGFyc2Vy
cyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlci5vcGVyYXRpb25Q
YXJzZXJzOwotICAgICAgICBmb3IgKHZhciBvcGVyYXRpb24gaW4gcGFyc2VycykgewotICAgICAg
ICAgICAgdmFyIG1hdGNoID0gcXVlcnkubWF0Y2gocGFyc2Vyc1tvcGVyYXRpb25dKTsKLSAgICAg
ICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gW29wZXJh
dGlvbnNbb3BlcmF0aW9uXSwgcGFyc2VGbG9hdChtYXRjaFsxXSldOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBbb3BlcmF0aW9ucy5FUVVBTCwgcGFyc2VGbG9hdChxdWVyeSldOwotICAgIH0s
Ci0KLSAgICBwZXJjZW50czogLyUkLywKLQotICAgIG1lZ2FCeXRlczogL01CJC9pLAotCi0gICAg
a2lsb0J5dGVzOiAvS0IkL2ksCi0KLSAgICBieXRlczogL0IkL2kKLX0KLQotV2ViSW5zcGVjdG9y
LkhlYXBTdW1tYXJ5Q2FsY3VsYXRvciA9IGZ1bmN0aW9uKGxvd0xldmVsRmllbGQpCi17Ci0gICAg
dGhpcy50b3RhbCA9IDE7Ci0gICAgdGhpcy5sb3dMZXZlbEZpZWxkID0gbG93TGV2ZWxGaWVsZDsK
LX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGUgPSB7Ci0g
ICAgY29tcHV0ZVN1bW1hcnlWYWx1ZXM6IGZ1bmN0aW9uKGxvd0xldmVscykKLSAgICB7Ci0gICAg
ICAgIHZhciBoaWdoTGV2ZWxzID0ge2RhdGE6IDAsIGNvZGU6IDB9OwotICAgICAgICB0aGlzLnRv
dGFsID0gMDsKLSAgICAgICAgZm9yICh2YXIgaXRlbSBpbiBsb3dMZXZlbHMpIHsKLSAgICAgICAg
ICAgIHZhciBoaWdoSXRlbSA9IHRoaXMuX2hpZ2hGcm9tTG93KGl0ZW0pOwotICAgICAgICAgICAg
aWYgKGhpZ2hJdGVtKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbG93TGV2ZWxzW2l0
ZW1dW3RoaXMubG93TGV2ZWxGaWVsZF07Ci0gICAgICAgICAgICAgICAgaGlnaExldmVsc1toaWdo
SXRlbV0gKz0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgdGhpcy50b3RhbCArPSB2YWx1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2YXIgcmVzdWx0ID0ge2NhdGVnb3J5VmFs
dWVzOiBoaWdoTGV2ZWxzfTsKLSAgICAgICAgaWYgKCF0aGlzLnNob3dBc1BlcmNlbnQpCi0gICAg
ICAgICAgICByZXN1bHQudG90YWwgPSB0aGlzLnRvdGFsOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0sCi0KLSAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5zaG93QXNQZXJjZW50KQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiJS4yZiUlIiwgdmFsdWUgLyB0aGlzLnRvdGFsICogMTAwLjApOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVUb1N0cmluZyh2YWx1ZSk7
Ci0gICAgfSwKLQotICAgIGdldCBzaG93QXNQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9zaG93QXNQZXJjZW50OwotICAgIH0sCi0KLSAgICBzZXQgc2hvd0FzUGVyY2VudCh4
KQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hvd0FzUGVyY2VudCA9IHg7Ci0gICAgfQotfQotCi1X
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci0g
ICAgV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJjb3VudCIp
OwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IucHJvdG90eXBl
ID0gewotICAgIF9oaWdoRnJvbUxvdzogZnVuY3Rpb24odHlwZSkgewotICAgICAgICBpZiAodHlw
ZSA9PT0gIkNPREVfVFlQRSIgfHwgdHlwZSA9PT0gIlNIQVJFRF9GVU5DVElPTl9JTkZPX1RZUEUi
IHx8IHR5cGUgPT09ICJTQ1JJUFRfVFlQRSIpIHJldHVybiAiY29kZSI7Ci0gICAgICAgIGlmICh0
eXBlID09PSAiU1RSSU5HX1RZUEUiIHx8IHR5cGUgPT09ICJIRUFQX05VTUJFUl9UWVBFIiB8fCB0
eXBlLm1hdGNoKC9eSlNfLykpIHJldHVybiAiZGF0YSI7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgIH0sCi0KLSAgICBfdmFsdWVUb1N0cmluZzogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFN1
bW1hcnlDb3VudENhbGN1bGF0b3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5I
ZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlOwotCi1XZWJJbnNwZWN0b3IuSGVhcFN1bW1h
cnlTaXplQ2FsY3VsYXRvciA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuSGVhcFN1
bW1hcnlDYWxjdWxhdG9yLmNhbGwodGhpcywgInNpemUiKTsKLX0KLQotV2ViSW5zcGVjdG9yLkhl
YXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlID0gewotICAgIF9oaWdoRnJvbUxvdzog
ZnVuY3Rpb24odHlwZSkgewotICAgICAgICBpZiAodHlwZSA9PT0gIkNPREVfVFlQRSIgfHwgdHlw
ZSA9PT0gIlNIQVJFRF9GVU5DVElPTl9JTkZPX1RZUEUiIHx8IHR5cGUgPT09ICJTQ1JJUFRfVFlQ
RSIpIHJldHVybiAiY29kZSI7Ci0gICAgICAgIGlmICh0eXBlID09PSAiU1RSSU5HX1RZUEUiIHx8
IHR5cGUgPT09ICJIRUFQX05VTUJFUl9UWVBFIiB8fCB0eXBlLm1hdGNoKC9eSlNfLykgfHwgdHlw
ZS5tYXRjaCgvX0FSUkFZX1RZUEUkLykpIHJldHVybiAiZGF0YSI7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgIH0sCi0KLSAgICBfdmFsdWVUb1N0cmluZzogTnVtYmVyLmJ5dGVzVG9TdHJpbmcK
LX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlOwot
Ci1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50ID0gZnVuY3Rpb24o
c25hcHNob3QpCi17Ci0gICAgdGhpcy5wcm9maWxlID0gc25hcHNob3Q7Ci0KLSAgICBXZWJJbnNw
ZWN0b3IuU2lkZWJhclRyZWVFbGVtZW50LmNhbGwodGhpcywgImhlYXAtc25hcHNob3Qtc2lkZWJh
ci10cmVlLWl0ZW0iLCAiIiwgIiIsIHNuYXBzaG90LCBmYWxzZSk7Ci0KLSAgICB0aGlzLnJlZnJl
c2hUaXRsZXMoKTsKLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTaWRlYmFyVHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewotICAgIGdldCBtYWluVGl0bGUoKQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX21haW5UaXRsZSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYWluVGl0bGU7
Ci0gICAgICAgIHJldHVybiB0aGlzLnByb2ZpbGUudGl0bGU7Ci0gICAgfSwKLQotICAgIHNldCBt
YWluVGl0bGUoeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5UaXRsZSA9IHg7Ci0gICAgICAg
IHRoaXMucmVmcmVzaFRpdGxlcygpOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RTaWRlYmFyVHJlZUVsZW1lbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5Qcm9maWxlU2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMgPSBmdW5jdGlvbihvd25pbmdUcmVl
KQotewotICAgIHRoaXMudHJlZSA9IG93bmluZ1RyZWU7Ci0KLSAgICBXZWJJbnNwZWN0b3IuRGF0
YUdyaWROb2RlLmNhbGwodGhpcywgbnVsbCwgdGhpcy5faGFzUmV0YWluZXJzKTsKLQotICAgIHRo
aXMuYWRkRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlzLl9wb3B1bGF0ZSwgdGhpcyk7Ci19
OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5w
cm90b3R5cGUgPSB7Ci0gICAgaXNFbXB0eVNldDogZnVuY3Rpb24oc2V0KQotICAgIHsKLSAgICAg
ICAgZm9yICh2YXIgeCBpbiBzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBnZXQgX2hhc1JldGFpbmVycygpCi0gICAgewot
ICAgICAgICByZXR1cm4gIXRoaXMuaXNFbXB0eVNldCh0aGlzLnJldGFpbmVycyk7Ci0gICAgfSwK
LQotICAgIGdldCBfcGFyZW50KCkKLSAgICB7Ci0gICAgICAgIC8vIEZvciB0b3AtbGV2ZWwgbm9k
ZXMsIHJldHVybiBvd25pbmcgdHJlZSBhcyBhIHBhcmVudCwgbm90IGRhdGEgZ3JpZC4KLSAgICAg
ICAgcmV0dXJuIHRoaXMucGFyZW50ICE9PSB0aGlzLmRhdGFHcmlkID8gdGhpcy5wYXJlbnQgOiB0
aGlzLnRyZWU7Ci0gICAgfSwKLQotICAgIF9wb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIHRoaXMucHJvZHVjZURpZmYodGhp
cy5iYXNlUmV0YWluZXJzLCB0aGlzLnJldGFpbmVycywgZnVuY3Rpb24oYmFzZUl0ZW0sIHNuYXBz
aG90SXRlbSkgewotICAgICAgICAgICAgc2VsZi5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlKHNlbGYuc25hcHNob3RWaWV3LCBiYXNl
SXRlbSwgc25hcHNob3RJdGVtLCBzZWxmLnRyZWUpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
aWYgKHRoaXMuX3BhcmVudCkgewotICAgICAgICAgICAgdmFyIGN1cnJlbnRDb21wYXJhdG9yID0g
dGhpcy5fcGFyZW50Lmxhc3RDb21wYXJhdG9yOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb21w
YXJhdG9yKQotICAgICAgICAgICAgICAgIHRoaXMuc29ydChjdXJyZW50Q29tcGFyYXRvciwgdHJ1
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHVs
YXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOwotICAgIH0sCi0KLSAgICBwcm9kdWNlRGlmZjog
ZnVuY3Rpb24oYmFzZUVudHJpZXMsIGN1cnJlbnRFbnRyaWVzLCBjYWxsYmFjaykKLSAgICB7Ci0g
ICAgICAgIGZvciAodmFyIGl0ZW0gaW4gY3VycmVudEVudHJpZXMpCi0gICAgICAgICAgICBjYWxs
YmFjayhiYXNlRW50cmllc1tpdGVtXSwgY3VycmVudEVudHJpZXNbaXRlbV0pOwotCi0gICAgICAg
IGZvciAoaXRlbSBpbiBiYXNlRW50cmllcykgewotICAgICAgICAgICAgaWYgKCEoaXRlbSBpbiBj
dXJyZW50RW50cmllcykpCi0gICAgICAgICAgICAgICAgY2FsbGJhY2soYmFzZUVudHJpZXNbaXRl
bV0sIG51bGwpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHNvcnQ6IGZ1bmN0aW9uKGNvbXBh
cmF0b3IsIGZvcmNlKSB7Ci0gICAgICAgIGlmICghZm9yY2UgJiYgdGhpcy5sYXN0Q29tcGFyYXRv
ciA9PT0gY29tcGFyYXRvcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLmNo
aWxkcmVuLnNvcnQoY29tcGFyYXRvcik7Ci0gICAgICAgIHZhciBjaGlsZENvdW50ID0gdGhpcy5j
aGlsZHJlbi5sZW5ndGg7Ci0gICAgICAgIGZvciAodmFyIGNoaWxkSW5kZXggPSAwOyBjaGlsZElu
ZGV4IDwgY2hpbGRDb3VudDsgKytjaGlsZEluZGV4KQotICAgICAgICAgICAgdGhpcy5jaGlsZHJl
bltjaGlsZEluZGV4XS5fcmVjYWxjdWxhdGVTaWJsaW5ncyhjaGlsZEluZGV4KTsKLSAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOwotICAgICAgICAgICAgaWYgKCFmb3Jj
ZSAmJiAoIWNoaWxkLmV4cGFuZGVkIHx8IGNoaWxkLmxhc3RDb21wYXJhdG9yID09PSBjb21wYXJh
dG9yKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNoaWxkLnNvcnQo
Y29tcGFyYXRvciwgZm9yY2UpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMubGFzdENvbXBhcmF0
b3IgPSBjb21wYXJhdG9yOwotICAgIH0sCi0KLSAgICBzaWduRm9yRGVsdGE6IGZ1bmN0aW9uKGRl
bHRhKSB7Ci0gICAgICAgIGlmIChkZWx0YSA9PT0gMCkKLSAgICAgICAgICAgIHJldHVybiAiIjsK
LSAgICAgICAgaWYgKGRlbHRhID4gMCkKLSAgICAgICAgICAgIHJldHVybiAiKyI7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIC8vIE1hdGggbWludXMgc2lnbiwgc2FtZSB3aWR0aCBhcyBwbHVz
LgotICAgICAgICAgICAgcmV0dXJuICJcdTIyMTIiOwotICAgIH0sCi0KLSAgICBzaG93RGVsdGFB
c1BlcmNlbnQ6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVy
LlBPU0lUSVZFX0lORklOSVRZKQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0
cmluZygibmV3Iik7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSBOdW1iZXIuTkVHQVRJVkVf
SU5GSU5JVFkpCi0gICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJkZWxl
dGVkIik7Ci0gICAgICAgIGlmICh2YWx1ZSA+IDEwMDAuMCkKLSAgICAgICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzID4xMDAwJSUiLCB0aGlzLnNpZ25Gb3JEZWx0YSh2YWx1
ZSkpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyUuMmYlJSIsIHRo
aXMuc2lnbkZvckRlbHRhKHZhbHVlKSwgTWF0aC5hYnModmFsdWUpKTsKLSAgICB9LAotCi0gICAg
Z2V0VG90YWxDb3VudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICghdGhpcy5fY291bnQpIHsK
LSAgICAgICAgICAgIHRoaXMuX2NvdW50ID0gMDsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
LCBuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICAgICAg
dGhpcy5fY291bnQgKz0gdGhpcy5jaGlsZHJlbltpXS5jb3VudDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdGhpcy5fY291bnQ7Ci0gICAgfSwKLQotICAgIGdldFRvdGFsU2l6ZTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgIGlmICghdGhpcy5fc2l6ZSkgewotICAgICAgICAgICAgdGhpcy5fc2l6
ZSA9IDA7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMuY2hpbGRyZW4ubGVu
Z3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgICAgIHRoaXMuX3NpemUgKz0gdGhpcy5jaGls
ZHJlbltpXS5zaXplOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaXplOwotICAg
IH0sCi0KLSAgICBnZXQgY291bnRQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
LmNvdW50IC8gdGhpcy5fcGFyZW50LmdldFRvdGFsQ291bnQoKSAqIDEwMC4wOwotICAgIH0sCi0K
LSAgICBnZXQgc2l6ZVBlcmNlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZSAv
IHRoaXMuX3BhcmVudC5nZXRUb3RhbFNpemUoKSAqIDEwMC4wOwotICAgIH0sCi0KLSAgICBnZXQg
Y291bnREZWx0YVBlcmNlbnQoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuYmFzZUNvdW50ID4g
MCkgewotICAgICAgICAgICAgaWYgKHRoaXMuY291bnQgPiAwKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmNvdW50RGVsdGEgLyB0aGlzLmJhc2VDb3VudCAqIDEwMC4wOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJ
TklUWTsKLSAgICB9LAotCi0gICAgZ2V0IHNpemVEZWx0YVBlcmNlbnQoKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuYmFzZVNpemUgPiAwKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5zaXplID4g
MCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplRGVsdGEgLyB0aGlzLmJhc2VTaXpl
ICogMTAwLjA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJl
ci5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwotICAgIH0sCi0KLSAgICBnZXQgZGF0YSgpCi0gICAg
ewotICAgICAgICB2YXIgZGF0YSA9IHt9OwotCi0gICAgICAgIGRhdGFbImNvbnMiXSA9IHRoaXMu
Y29uc3RydWN0b3JOYW1lOwotCi0gICAgICAgIGlmICh0aGlzLnNuYXBzaG90Vmlldy5zaG93Q291
bnRBc1BlcmNlbnQpCi0gICAgICAgICAgICBkYXRhWyJjb3VudCJdID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjJmJSUiLCB0aGlzLmNvdW50UGVyY2VudCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGRhdGFbImNvdW50Il0gPSB0aGlzLmNvdW50OwotCi0gICAgICAgIGlmICh0aGlzLnNp
emUgIT09IG51bGwpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90Vmlldy5zaG93U2l6
ZUFzUGVyY2VudCkKLSAgICAgICAgICAgICAgICBkYXRhWyJzaXplIl0gPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiUuMmYlJSIsIHRoaXMuc2l6ZVBlcmNlbnQpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGRhdGFbInNpemUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMu
c2l6ZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGF0YVsic2l6ZSJdID0gIiI7Ci0K
LSAgICAgICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dDb3VudERlbHRhQXNQZXJjZW50KQot
ICAgICAgICAgICAgZGF0YVsiY291bnREZWx0YSJdID0gdGhpcy5zaG93RGVsdGFBc1BlcmNlbnQo
dGhpcy5jb3VudERlbHRhUGVyY2VudCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGFb
ImNvdW50RGVsdGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlZCIsIHRoaXMuc2lnbkZv
ckRlbHRhKHRoaXMuY291bnREZWx0YSksIE1hdGguYWJzKHRoaXMuY291bnREZWx0YSkpOwotCi0g
ICAgICAgIGlmICh0aGlzLnNpemVEZWx0YSAhPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHRo
aXMuc25hcHNob3RWaWV3LnNob3dTaXplRGVsdGFBc1BlcmNlbnQpCi0gICAgICAgICAgICAgICAg
ZGF0YVsic2l6ZURlbHRhIl0gPSB0aGlzLnNob3dEZWx0YUFzUGVyY2VudCh0aGlzLnNpemVEZWx0
YVBlcmNlbnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGRhdGFbInNpemVE
ZWx0YSJdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyVzIiwgdGhpcy5zaWduRm9yRGVsdGEo
dGhpcy5zaXplRGVsdGEpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyhNYXRoLmFicyh0aGlzLnNpemVE
ZWx0YSkpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkYXRhWyJzaXplRGVsdGEiXSA9
ICIiOwotCi0gICAgICAgIHJldHVybiBkYXRhOwotICAgIH0sCi0KLSAgICBjcmVhdGVDZWxsOiBm
dW5jdGlvbihjb2x1bW5JZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgdmFyIGNlbGwgPSBXZWJJ
bnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwodGhpcywgY29s
dW1uSWRlbnRpZmllcik7Ci0KLSAgICAgICAgaWYgKChjb2x1bW5JZGVudGlmaWVyID09PSAiY29u
cyIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1bW4pIHx8Ci0gICAgICAgICAgICAoY29s
dW1uSWRlbnRpZmllciA9PT0gImNvdW50IiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVkQ291bnRDb2x1
bW4pIHx8Ci0gICAgICAgICAgICAoY29sdW1uSWRlbnRpZmllciA9PT0gInNpemUiICYmIHRoaXMu
X3NlYXJjaE1hdGNoZWRTaXplQ29sdW1uKSB8fAotICAgICAgICAgICAgKGNvbHVtbklkZW50aWZp
ZXIgPT09ICJjb3VudERlbHRhIiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0YUNvbHVt
bikgfHwKLSAgICAgICAgICAgIChjb2x1bW5JZGVudGlmaWVyID09PSAic2l6ZURlbHRhIiAmJiB0
aGlzLl9zZWFyY2hNYXRjaGVkU2l6ZURlbHRhQ29sdW1uKSkKLSAgICAgICAgICAgIGNlbGwuYWRk
U3R5bGVDbGFzcygiaGlnaGxpZ2h0Iik7Ci0KLSAgICAgICAgcmV0dXJuIGNlbGw7Ci0gICAgfQot
fTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBl
OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlID0gZnVuY3Rpb24oc25h
cHNob3RWaWV3LCBiYXNlRW50cnksIHNuYXBzaG90RW50cnksIG93bmluZ1RyZWUpCi17Ci0gICAg
dGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0KLSAgICBpZiAoIXNuYXBzaG90RW50
cnkpCi0gICAgICAgIHNuYXBzaG90RW50cnkgPSB7IGNvbnM6IGJhc2VFbnRyeS5jb25zLCBjb3Vu
dDogMCwgc2l6ZTogMCwgcmV0YWluZXJzOiB7fSB9OwotICAgIHRoaXMuY29uc3RydWN0b3JOYW1l
ID0gc25hcHNob3RFbnRyeS5jb25zOwotICAgIHRoaXMuY291bnQgPSBzbmFwc2hvdEVudHJ5LmNv
dW50OwotICAgIHRoaXMuc2l6ZSA9IHNuYXBzaG90RW50cnkuc2l6ZTsKLSAgICB0aGlzLnJldGFp
bmVycyA9IHNuYXBzaG90RW50cnkucmV0YWluZXJzOwotCi0gICAgaWYgKCFiYXNlRW50cnkpCi0g
ICAgICAgIGJhc2VFbnRyeSA9IHsgY291bnQ6IDAsIHNpemU6IDAsIHJldGFpbmVyczoge30gfTsK
LSAgICB0aGlzLmJhc2VDb3VudCA9IGJhc2VFbnRyeS5jb3VudDsKLSAgICB0aGlzLmNvdW50RGVs
dGEgPSB0aGlzLmNvdW50IC0gdGhpcy5iYXNlQ291bnQ7Ci0gICAgdGhpcy5iYXNlU2l6ZSA9IGJh
c2VFbnRyeS5zaXplOwotICAgIHRoaXMuc2l6ZURlbHRhID0gdGhpcy5zaXplIC0gdGhpcy5iYXNl
U2l6ZTsKLSAgICB0aGlzLmJhc2VSZXRhaW5lcnMgPSBiYXNlRW50cnkucmV0YWluZXJzOwotCi0g
ICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMuY2Fs
bCh0aGlzLCBvd25pbmdUcmVlKTsKLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRh
R3JpZE5vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
YXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTGlzdCA9IGZ1bmN0aW9uKHNuYXBzaG90VmlldywgYmFzZUVudHJpZXMs
IHNuYXBzaG90RW50cmllcykKLXsKLSAgICB0aGlzLnRyZWUgPSB0aGlzOwotICAgIHRoaXMuc25h
cHNob3RWaWV3ID0gc25hcHNob3RWaWV3OwotICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLSAgICB0
aGlzLmxhc3RDb21wYXJhdG9yID0gbnVsbDsKLSAgICB0aGlzLnBvcHVsYXRlQ2hpbGRyZW4oYmFz
ZUVudHJpZXMsIHNuYXBzaG90RW50cmllcyk7Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZSA9IHsKLSAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24o
Y2hpbGQpCi0gICAgewotICAgICAgICB0aGlzLmluc2VydENoaWxkKGNoaWxkLCB0aGlzLmNoaWxk
cmVuLmxlbmd0aCk7Ci0gICAgfSwKLQotICAgIGluc2VydENoaWxkOiBmdW5jdGlvbihjaGlsZCwg
aW5kZXgpCi0gICAgewotICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hp
bGQpOwotICAgIH0sCi0KLSAgICByZW1vdmVDaGlsZHJlbjogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdOwotICAgIH0sCi0KLSAgICBwb3B1bGF0ZUNoaWxkcmVu
OiBmdW5jdGlvbihiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzKQotICAgIHsKLSAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB0aGlzLnByb2R1Y2VEaWZmKGJhc2VFbnRyaWVzLCBz
bmFwc2hvdEVudHJpZXMsIGZ1bmN0aW9uKGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0pIHsKLSAgICAg
ICAgICAgIHNlbGYuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRh
R3JpZE5vZGUoc2VsZi5zbmFwc2hvdFZpZXcsIGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0sIHNlbGYp
KTsKLSAgICAgICAgfSk7Ci0gICAgfSwKLQotICAgIHByb2R1Y2VEaWZmOiBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUucHJvZHVjZURp
ZmYsCi0gICAgc29ydDogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhS
ZXRhaW5lcnMucHJvdG90eXBlLnNvcnQsCi0gICAgZ2V0VG90YWxDb3VudDogV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldFRvdGFs
Q291bnQsCi0gICAgZ2V0VG90YWxTaXplOiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdy
aWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0VG90YWxTaXplCi19OwotCi1XZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3BlcnR5Q29tcGFyYXRvcnMgPSBbe30s
IHt9XTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNv
bXBhcmF0b3IgPSBmdW5jdGlvbihwcm9wZXJ0eSwgcHJvcGVydHkyLCBpc0FzY2VuZGluZykKLXsK
LSAgICB2YXIgcHJvcGVydHlIYXNoID0gcHJvcGVydHkgKyAiIyIgKyBwcm9wZXJ0eTI7Ci0gICAg
dmFyIGNvbXBhcmF0b3IgPSB0aGlzLnByb3BlcnR5Q29tcGFyYXRvcnNbKGlzQXNjZW5kaW5nID8g
MSA6IDApXVtwcm9wZXJ0eUhhc2hdOwotICAgIGlmICghY29tcGFyYXRvcikgewotICAgICAgICBj
b21wYXJhdG9yID0gZnVuY3Rpb24obGhzLCByaHMpIHsKLSAgICAgICAgICAgIHZhciBsID0gbGhz
W3Byb3BlcnR5XSwgciA9IHJoc1twcm9wZXJ0eV07Ci0gICAgICAgICAgICBpZiAoKGwgPT09IG51
bGwgfHwgciA9PT0gbnVsbCkgJiYgcHJvcGVydHkyICE9PSBudWxsKQotICAgICAgICAgICAgICAg
IGwgPSBsaHNbcHJvcGVydHkyXSwgciA9IHJoc1twcm9wZXJ0eTJdOwotICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IGwgPCByID8gLTEgOiAobCA+IHIgPyAxIDogMCk7Ci0gICAgICAgICAgICByZXR1
cm4gaXNBc2NlbmRpbmcgPyByZXN1bHQgOiAtcmVzdWx0OwotICAgICAgICB9OwotICAgICAgICB0
aGlzLnByb3BlcnR5Q29tcGFyYXRvcnNbKGlzQXNjZW5kaW5nID8gMSA6IDApXVtwcm9wZXJ0eUhh
c2hdID0gY29tcGFyYXRvcjsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbXBhcmF0b3I7Ci19OwotCi1X
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRSZXRhaW5lck5vZGUgPSBmdW5jdGlvbihz
bmFwc2hvdFZpZXcsIGJhc2VFbnRyeSwgc25hcHNob3RFbnRyeSwgb3duaW5nVHJlZSkKLXsKLSAg
ICB0aGlzLnNuYXBzaG90VmlldyA9IHNuYXBzaG90VmlldzsKLQotICAgIGlmICghc25hcHNob3RF
bnRyeSkKLSAgICAgICAgc25hcHNob3RFbnRyeSA9IHsgY29uczogYmFzZUVudHJ5LmNvbnMsIGNv
dW50OiAwLCBjbHVzdGVyczoge30gfTsKLSAgICB0aGlzLmNvbnN0cnVjdG9yTmFtZSA9IHNuYXBz
aG90RW50cnkuY29uczsKLSAgICB0aGlzLmNvdW50ID0gc25hcHNob3RFbnRyeS5jb3VudDsKLSAg
ICB0aGlzLnJldGFpbmVycyA9IHRoaXMuX2NhbGN1bGF0ZVJldGFpbmVycyh0aGlzLnNuYXBzaG90
Vmlldy5wcm9maWxlLCBzbmFwc2hvdEVudHJ5LmNsdXN0ZXJzKTsKLQotICAgIGlmICghYmFzZUVu
dHJ5KQotICAgICAgICBiYXNlRW50cnkgPSB7IGNvdW50OiAwLCBjbHVzdGVyczoge30gfTsKLSAg
ICB0aGlzLmJhc2VDb3VudCA9IGJhc2VFbnRyeS5jb3VudDsKLSAgICB0aGlzLmNvdW50RGVsdGEg
PSB0aGlzLmNvdW50IC0gdGhpcy5iYXNlQ291bnQ7Ci0gICAgdGhpcy5iYXNlUmV0YWluZXJzID0g
dGhpcy5fY2FsY3VsYXRlUmV0YWluZXJzKHRoaXMuc25hcHNob3RWaWV3LmJhc2VTbmFwc2hvdCwg
YmFzZUVudHJ5LmNsdXN0ZXJzKTsKLQotICAgIHRoaXMuc2l6ZSA9IG51bGw7Ci0gICAgdGhpcy5z
aXplRGVsdGEgPSBudWxsOwotCi0gICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlk
Tm9kZVdpdGhSZXRhaW5lcnMuY2FsbCh0aGlzLCBvd25pbmdUcmVlKTsKLX0KLQotV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlLnByb3RvdHlwZSA9IHsKLSAgICBn
ZXQgc2l6ZVBlcmNlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQot
ICAgIGdldCBzaXplRGVsdGFQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgIH0sCi0KLSAgICBfY2FsY3VsYXRlUmV0YWluZXJzOiBmdW5jdGlvbihzbmFwc2hvdCwgY2x1
c3RlcnMpIHsKLSAgICAgICAgdmFyIHJldGFpbmVycyA9IHt9OwotICAgICAgICBpZiAodGhpcy5p
c0VtcHR5U2V0KGNsdXN0ZXJzKSkgewotICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3JO
YW1lIGluIHNuYXBzaG90LmVudHJpZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90
LmVudHJpZXNbdGhpcy5jb25zdHJ1Y3Rvck5hbWVdLnJldGFpbmVyczsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8vIEluIGNhc2Ugd2hlbiBhbiBlbnRyeSBpcyByZXRhaW5lZCBieSBj
bHVzdGVycywgd2UgbmVlZCB0byBnYXRoZXIgdXAgdGhlIGxpc3QKLSAgICAgICAgICAgIC8vIG9m
IHJldGFpbmVycyBieSBtZXJnaW5nIHJldGFpbmVycyBvZiBldmVyeSBjbHVzdGVyLgotICAgICAg
ICAgICAgLy8gRS5nLiBoYXZpbmcgc3VjaCBhIHRyZWU6Ci0gICAgICAgICAgICAvLyAgIEEKLSAg
ICAgICAgICAgIC8vICAgICBPYmplY3Q6MSAgMTAKLSAgICAgICAgICAgIC8vICAgICAgIFggICAg
ICAgMwotICAgICAgICAgICAgLy8gICAgICAgWSAgICAgICA0Ci0gICAgICAgICAgICAvLyAgICAg
T2JqZWN0OjIgIDUKLSAgICAgICAgICAgIC8vICAgICAgIFggICAgICAgNgotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIHdpbGwgcmVzdWx0IGluIGEgZm9sbG93aW5nIHJldGFpbmVycyBs
aXN0OiBYIDksIFkgNC4KLSAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJOYW1lIGluIGNsdXN0
ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJOYW1lIGluIHNuYXBzaG90LmNsdXN0
ZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjbHVzdGVyUmV0YWluZXJzID0gc25hcHNo
b3QuY2x1c3RlcnNbY2x1c3Rlck5hbWVdLnJldGFpbmVyczsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgY2x1c3RlclJldGFpbmVyIGluIGNsdXN0ZXJSZXRhaW5lcnMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBjbHVzdGVyUmV0YWluZXJFbnRyeSA9IGNsdXN0ZXJSZXRhaW5l
cnNbY2x1c3RlclJldGFpbmVyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNsdXN0
ZXJSZXRhaW5lciBpbiByZXRhaW5lcnMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dGFpbmVyc1tjbHVzdGVyUmV0YWluZXJdID0geyBjb25zOiBjbHVzdGVyUmV0YWluZXJFbnRyeS5j
b25zLCBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXRhaW5lcnNbY2x1c3RlclJldGFpbmVyXS5jb3VudCArPSBjbHVzdGVyUmV0YWluZXJFbnRyeS5j
b3VudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJSZXRhaW5lckNs
dXN0ZXIgaW4gY2x1c3RlclJldGFpbmVyRW50cnkuY2x1c3RlcnMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl0uY2x1c3RlcnNbY2x1c3RlclJl
dGFpbmVyQ2x1c3Rlcl0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXRhaW5l
cnM7Ci0gICAgfQotfTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWlu
ZXJOb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGU7Ci0KLQotV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFByb2ZpbGVUeXBlID0gZnVuY3Rpb24oKQotewotICAgIFdlYkluc3BlY3Rvci5Qcm9m
aWxlVHlwZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5U
eXBlSWQsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiSEVBUCBTTkFQU0hPVFMiKSk7Ci19Ci0KLVdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQgPSAiSEVBUCI7Ci0KLVdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5zbmFwc2hvdHMgPSBbXTsKLQotV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZSA9IHsKLSAgICBnZXQg
YnV0dG9uVG9vbHRpcCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJUYWtlIGhlYXAgc25hcHNob3QuIik7Ci0gICAgfSwKLQotICAgIGdldCBidXR0b25TdHls
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gImhlYXAtc25hcHNob3Qtc3RhdHVzLWJhci1pdGVt
IHN0YXR1cy1iYXItaXRlbSI7Ci0gICAgfSwKLQotICAgIGJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGRldnRvb2xzLnRvb2xzLmdldFByb2ZpbGVyQWdlbnQoKS5zdGFy
dFByb2ZpbGluZyhkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVyTW9kdWxlcy5QUk9GSUxF
Ul9NT0RVTEVfSEVBUF9TTkFQU0hPVCk7Ci0gICAgfSwKLQotICAgIGdldCB3ZWxjb21lTWVzc2Fn
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJHZXQgYSBo
ZWFwIHNuYXBzaG90IGJ5IHByZXNzaW5nIHRoZSAlcyBidXR0b24gb24gdGhlIHN0YXR1cyBiYXIu
Iik7Ci0gICAgfSwKLQotICAgIGNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGU6IGZ1
bmN0aW9uKHByb2ZpbGUpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50KHByb2ZpbGUpOwotICAgICAgICBl
bGVtZW50LnNtYWxsID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0sCi0K
LSAgICBjcmVhdGVWaWV3OiBmdW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90VmlldyhXZWJJbnNwZWN0b3IucGFuZWxzLnBy
b2ZpbGVzLCBwcm9maWxlKTsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVUeXBl
LnByb3RvdHlwZTsKLQotCi0oZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9yaWdpbmFsQ3JlYXRlUGFu
ZWxzID0gV2ViSW5zcGVjdG9yLl9jcmVhdGVQYW5lbHM7Ci0gICAgV2ViSW5zcGVjdG9yLl9jcmVh
dGVQYW5lbHMgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgb3JpZ2luYWxDcmVhdGVQYW5lbHMuYXBw
bHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMucHJv
ZmlsZXMpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLnJlZ2lzdGVy
UHJvZmlsZVR5cGUobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSgpKTsK
LSAgICB9Ci19KSgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9Qcm9maWxl
ckFnZW50LmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9Qcm9maWxlckFnZW50LmpzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Zjc0NTk1Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvUHJvZmlsZXJBZ2VudC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEzOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFByb3ZpZGVzIGNvbW11bmljYXRpb24gaW50ZXJm
YWNlIHRvIHJlbW90ZSB2OCBwcm9maWxlci4KLSAqLwotCi0vKioKLSAqIEBjb25zdHJ1Y3Rvcgot
ICovCi1kZXZ0b29scy5Qcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQotewotCi0gICAgLyoqCi0g
ICAgICogUHJvZmlsZXIgbG9nIHBvc2l0aW9uLgotICAgICAqIEB0eXBlIHtudW1iZXJ9Ci0gICAg
ICovCi0gICAgdGhpcy5fbG9nUG9zaXRpb24gPSAwOwotCi0gICAgLyoqCi0gICAgICogTGFzdCBy
ZXF1ZXN0ZWQgbG9nIHBvc2l0aW9uLgotICAgICAqIEB0eXBlIHtudW1iZXJ9Ci0gICAgICovCi0g
ICAgdGhpcy5fbGFzdFJlcXVlc3RlZExvZ1Bvc2l0aW9uID0gLTE7Ci0KLSAgICAvKioKLSAgICAg
KiBQcm9maWxlciBwcm9jZXNzb3IgaW5zdGFuY2UuCi0gICAgICogQHR5cGUge2RldnRvb2xzLnBy
b2ZpbGVyLlByb2Nlc3Nvcn0KLSAgICAgKi8KLSAgICB0aGlzLl9wcm9maWxlclByb2Nlc3NvciA9
IG5ldyBkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IoKTsKLX07Ci0KLQotLyoqCi0gKiBBIGNv
cHkgb2YgZW51bSBmcm9tIGluY2x1ZGUvdjguaAotICogQGVudW0ge251bWJlcn0KLSAqLwotZGV2
dG9vbHMuUHJvZmlsZXJBZ2VudC5Qcm9maWxlck1vZHVsZXMgPSB7Ci0gICAgUFJPRklMRVJfTU9E
VUxFX05PTkU6IDAsCi0gICAgUFJPRklMRVJfTU9EVUxFX0NQVTogMSwKLSAgICBQUk9GSUxFUl9N
T0RVTEVfSEVBUF9TVEFUUzogMSA8PCAxLAotICAgIFBST0ZJTEVSX01PRFVMRV9KU19DT05TVFJV
Q1RPUlM6IDEgPDwgMiwKLSAgICBQUk9GSUxFUl9NT0RVTEVfSEVBUF9TTkFQU0hPVDogMSA8PCAx
NgotfTsKLQotCi0vKioKLSAqIEluaXRpYWxpemVzIHByb2ZpbGluZyBzdGF0ZS4KLSAqLwotZGV2
dG9vbHMuUHJvZmlsZXJBZ2VudC5wcm90b3R5cGUuaW5pdGlhbGl6ZVByb2ZpbGluZyA9IGZ1bmN0
aW9uKCkKLXsKLSAgICB0aGlzLl9nZXROZXh0TG9nTGluZXMoZmFsc2UpOwotfTsKLQotCi0vKioK
LSAqIFJlcXVlc3RzIHRoZSBuZXh0IGNodW5rIG9mIGxvZyBsaW5lcy4KLSAqIEBwYXJhbSB7Ym9v
bGVhbn0gaW1tZWRpYXRlbHkgRG8gbm90IHBvc3Rwb25lIHRoZSByZXF1ZXN0LgotICogQHByaXZh
dGUKLSAqLwotZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5wcm90b3R5cGUuX2dldE5leHRMb2dMaW5l
cyA9IGZ1bmN0aW9uKGltbWVkaWF0ZWx5KQotewotICAgIGlmICh0aGlzLl9sYXN0UmVxdWVzdGVk
TG9nUG9zaXRpb24gPT0gdGhpcy5fbG9nUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICB2
YXIgcG9zID0gdGhpcy5fbGFzdFJlcXVlc3RlZExvZ1Bvc2l0aW9uID0gdGhpcy5fbG9nUG9zaXRp
b247Ci0KLSAgICB2YXIgY2FsbElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAodGhpcy5f
ZGlkR2V0UHJvZmlsZXJMb2dMaW5lcy5iaW5kKHRoaXMpKTsKLSAgICBpZiAoaW1tZWRpYXRlbHkp
Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZXJMb2dMaW5lcyhjYWxsSWQsIHBv
cyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGZ1bmN0aW9uIGRlbGF5ZWRSZXF1ZXN0KCkKLSAgICAg
ICAgewotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRQcm9maWxlckxvZ0xpbmVzKGNh
bGxJZCwgcG9zKTsKLSAgICAgICAgfQotICAgICAgICBzZXRUaW1lb3V0KGRlbGF5ZWRSZXF1ZXN0
LCA1MDApOwotICAgIH0KLX07Ci0KLQotLyoqCi0gKiBTdGFydHMgcHJvZmlsaW5nLgotICogQHBh
cmFtIHtudW1iZXJ9IG1vZHVsZXMgTGlzdCBvZiBtb2R1bGVzIHRvIGVuYWJsZS4KLSAqLwotZGV2
dG9vbHMuUHJvZmlsZXJBZ2VudC5wcm90b3R5cGUuc3RhcnRQcm9maWxpbmcgPSBmdW5jdGlvbiht
b2R1bGVzKQotewotICAgIGlmIChtb2R1bGVzICYgZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5Qcm9m
aWxlck1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0hFQVBfU05BUFNIT1QpIHsKLSAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC50YWtlSGVhcFNuYXBzaG90KCk7Ci0gICAgICAgIC8vIEFjdGl2ZSBtb2R1
bGVzIHdpbGwgbm90IGNoYW5nZSwgaW5zdGVhZCwgYSBzbmFwc2hvdCB3aWxsIGJlIGxvZ2dlZC4K
LSAgICAgICAgdGhpcy5fZ2V0TmV4dExvZ0xpbmVzKCk7Ci0gICAgfQotfTsKLQotCi0vKioKLSAq
IEhhbmRsZXMgYSBwb3J0aW9uIG9mIGEgcHJvZmlsZXIgbG9nIHJldHJpZXZlZCBieSBnZXRMb2dM
aW5lcyBjYWxsLgotICogQHBhcmFtIHtudW1iZXJ9IHBvcyBDdXJyZW50IHBvc2l0aW9uIGluIGxv
Zy4KLSAqIEBwYXJhbSB7c3RyaW5nfSBsb2cgQSBwb3J0aW9uIG9mIHByb2ZpbGVyIGxvZy4KLSAq
LwotZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5wcm90b3R5cGUuX2RpZEdldFByb2ZpbGVyTG9nTGlu
ZXMgPSBmdW5jdGlvbihwb3MsIGxvZykKLXsKLSAgICB0aGlzLl9sb2dQb3NpdGlvbiA9IHBvczsK
LSAgICBpZiAobG9nLmxlbmd0aCA+IDApIHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZXJQcm9jZXNz
b3IucHJvY2Vzc0xvZ0NodW5rKGxvZyk7Ci0gICAgICAgIHRoaXMuX2dldE5leHRMb2dMaW5lcygp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEFsbG93IHJlLXJlYWRpbmcgZnJvbSB0aGUgbGFz
dCBwb3NpdGlvbi4KLSAgICAgICAgdGhpcy5fbGFzdFJlcXVlc3RlZExvZ1Bvc2l0aW9uID0gdGhp
cy5fbG9nUG9zaXRpb24gLSAxOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5kaWRHZXRQcm9m
aWxlckxvZ0xpbmVzID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJQcm9jZXNzb3IuanMgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2MTcxNGU4Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvUHJvZmlsZXJQcm9jZXNzb3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qKgotICogQGZpbGVvdmVydmlldyBQcm9maWxlciBwcm9jZXNzb3IgaXMgdXNlZCB0byBwcm9j
ZXNzIGxvZyBmaWxlIHByb2R1Y2VkCi0gKiBieSBWOCBhbmQgcHJvZHVjZSBhbiBpbnRlcm5hbCBw
cm9maWxlIHJlcHJlc2VudGF0aW9uIHdoaWNoIGlzIHVzZWQKLSAqIGZvciBidWlsZGluZyBwcm9m
aWxlIHZpZXdzIGluICJQcm9maWxlcyIgdGFiLgotICovCi0KLQotLyoqCi0gKiBDcmVhdGVzIGEg
UHJvZmlsZSBWaWV3IGJ1aWxkZXIgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBXZWJLaXQgUHJvZmls
ZXIgVUkuCi0gKgotICogQHBhcmFtIHtudW1iZXJ9IHNhbXBsaW5nUmF0ZSBOdW1iZXIgb2YgbXMg
YmV0d2VlbiBwcm9maWxlciB0aWNrcy4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1kZXZ0b29scy5w
cm9maWxlci5XZWJLaXRWaWV3QnVpbGRlciA9IGZ1bmN0aW9uKHNhbXBsaW5nUmF0ZSkKLXsKLSAg
ICBkZXZ0b29scy5wcm9maWxlci5WaWV3QnVpbGRlci5jYWxsKHRoaXMsIHNhbXBsaW5nUmF0ZSk7
Ci19OwotZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld0J1aWxkZXIucHJvdG90eXBlLl9fcHJv
dG9fXyA9IGRldnRvb2xzLnByb2ZpbGVyLlZpZXdCdWlsZGVyLnByb3RvdHlwZTsKLQotCi0vKioK
LSAqIEBvdmVycmlkZQotICovCi1kZXZ0b29scy5wcm9maWxlci5XZWJLaXRWaWV3QnVpbGRlci5w
cm90b3R5cGUuY3JlYXRlVmlld05vZGUgPSBmdW5jdGlvbihmdW5jTmFtZSwgdG90YWxUaW1lLCBz
ZWxmVGltZSwgaGVhZCkKLXsKLSAgICByZXR1cm4gbmV3IGRldnRvb2xzLnByb2ZpbGVyLldlYktp
dFZpZXdOb2RlKGZ1bmNOYW1lLCB0b3RhbFRpbWUsIHNlbGZUaW1lLCBoZWFkKTsKLX07Ci0KLQot
LyoqCi0gKiBDb25zdHJ1Y3RzIGEgUHJvZmlsZSBWaWV3IG5vZGUgb2JqZWN0IGZvciBkaXNwbGF5
aW5nIGluIFdlYktpdCBQcm9maWxlciBVSS4KLSAqCi0gKiBAcGFyYW0ge3N0cmluZ30gaW50ZXJu
YWxGdW5jTmFtZSBBIGZ1bGx5IHF1YWxpZmllZCBmdW5jdGlvbiBuYW1lLgotICogQHBhcmFtIHtu
dW1iZXJ9IHRvdGFsVGltZSBBbW91bnQgb2YgdGltZSB0aGF0IGFwcGxpY2F0aW9uIHNwZW50IGlu
IHRoZQotICogICAgIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gYW5kIGl0cyBkZXNjZW5kYW50cyAo
bm90IHRoYXQgZGVwZW5kaW5nIG9uCi0gKiAgICAgcHJvZmlsZSB0aGV5IGNhbiBiZSBlaXRoZXIg
Y2FsbGVlcyBvciBjYWxsZXJzLikKLSAqIEBwYXJhbSB7bnVtYmVyfSBzZWxmVGltZSBBbW91bnQg
b2YgdGltZSB0aGF0IGFwcGxpY2F0aW9uIHNwZW50IGluIHRoZQotICogICAgIGNvcnJlc3BvbmRp
bmcgZnVuY3Rpb24gb25seS4KLSAqIEBwYXJhbSB7ZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZVZp
ZXcuTm9kZX0gaGVhZCBQcm9maWxlIHZpZXcgaGVhZC4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1k
ZXZ0b29scy5wcm9maWxlci5XZWJLaXRWaWV3Tm9kZSA9IGZ1bmN0aW9uKGludGVybmFsRnVuY05h
bWUsIHRvdGFsVGltZSwgc2VsZlRpbWUsIGhlYWQpCi17Ci0gICAgZGV2dG9vbHMucHJvZmlsZXIu
UHJvZmlsZVZpZXcuTm9kZS5jYWxsKHRoaXMsIGludGVybmFsRnVuY05hbWUsIHRvdGFsVGltZSwg
c2VsZlRpbWUsIGhlYWQpOwotICAgIHRoaXMuaW5pdEZ1bmNJbmZvXygpOwotICAgIHRoaXMuY2Fs
bFVJRCA9IGludGVybmFsRnVuY05hbWU7Ci19OwotZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmll
d05vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IGRldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3
Lk5vZGUucHJvdG90eXBlOwotCi0KLS8qKgotICogUmVnRXggZm9yIHN0cmlwcGluZyBWOCdzIHBy
ZWZpeGVzIG9mIGNvbXBpbGVkIGZ1bmN0aW9ucy4KLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuV2Vi
S2l0Vmlld05vZGUuRlVOQ19OQU1FX1NUUklQX1JFID0gL14oPzpMYXp5Q29tcGlsZXxGdW5jdGlv
bnxDYWxsYmFjayk6ICguKikkLzsKLQotCi0vKioKLSAqIFJlZ0V4IGZvciBleHRyYWN0aW5nIHNj
cmlwdCBzb3VyY2UgVVJMIGFuZCBsaW5lIG51bWJlci4KLSAqLwotZGV2dG9vbHMucHJvZmlsZXIu
V2ViS2l0Vmlld05vZGUuRlVOQ19OQU1FX1BBUlNFX1JFID0gL14oKD86Z2V0IHwgc2V0ICk/W14g
XSspICguKik6KFxkKykoIFx7XGQrXH0pPyQvOwotCi0KLS8qKgotICogSW5pdHMgImZ1bmN0aW9u
TmFtZSIsICJ1cmwiLCBhbmQgImxpbmVOdW1iZXIiIGZpZWxkcyB1c2luZyAiaW50ZXJuYWxGdW5j
TmFtZSIKLSAqIGZpZWxkLgotICogQHByaXZhdGUKLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuV2Vi
S2l0Vmlld05vZGUucHJvdG90eXBlLmluaXRGdW5jSW5mb18gPSBmdW5jdGlvbigpCi17Ci0gICAg
dmFyIG5vZGVBbGlhcyA9IGRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlOwotICAgIHRo
aXMuZnVuY3Rpb25OYW1lID0gdGhpcy5pbnRlcm5hbEZ1bmNOYW1lOwotCi0gICAgdmFyIHN0cmlw
cGVkTmFtZSA9IG5vZGVBbGlhcy5GVU5DX05BTUVfU1RSSVBfUkUuZXhlYyh0aGlzLmZ1bmN0aW9u
TmFtZSk7Ci0gICAgaWYgKHN0cmlwcGVkTmFtZSkKLSAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUg
PSBzdHJpcHBlZE5hbWVbMV07Ci0KLSAgICB2YXIgcGFyc2VkTmFtZSA9IG5vZGVBbGlhcy5GVU5D
X05BTUVfUEFSU0VfUkUuZXhlYyh0aGlzLmZ1bmN0aW9uTmFtZSk7Ci0gICAgaWYgKHBhcnNlZE5h
bWUpIHsKLSAgICAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBwYXJzZWROYW1lWzFdOwotICAgICAg
ICBpZiAocGFyc2VkTmFtZVs0XSkKLSAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25OYW1lICs9IHBh
cnNlZE5hbWVbNF07Ci0gICAgICAgIHRoaXMudXJsID0gcGFyc2VkTmFtZVsyXTsKLSAgICAgICAg
dGhpcy5saW5lTnVtYmVyID0gcGFyc2VkTmFtZVszXTsKLSAgICB9IGVsc2UgewotICAgICAgICB0
aGlzLnVybCA9ICcnOwotICAgICAgICB0aGlzLmxpbmVOdW1iZXIgPSAwOwotICAgIH0KLX07Ci0K
LQotLyoqCi0gKiBBbmNlc3RvciBvZiBhIHByb2ZpbGUgb2JqZWN0IHRoYXQgbGVhdmVzIG91dCBv
bmx5IEpTLXJlbGF0ZWQgZnVuY3Rpb25zLgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWRldnRvb2xz
LnByb2ZpbGVyLkpzUHJvZmlsZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBkZXZ0b29scy5wcm9maWxl
ci5Qcm9maWxlLmNhbGwodGhpcyk7Ci19OwotZGV2dG9vbHMucHJvZmlsZXIuSnNQcm9maWxlLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlLnByb3RvdHlwZTsK
LQotCi0vKioKLSAqIFJlZ0V4cCB0aGF0IGxlYXZlcyBvbmx5IG5vbi1uYXRpdmUgSlMgZnVuY3Rp
b25zLgotICogQHR5cGUge1JlZ0V4cH0KLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuSnNQcm9maWxl
LkpTX05PTl9OQVRJVkVfUkUgPSBuZXcgUmVnRXhwKAotICAgICAgIl4iICsKLSAgICAgICAgIig/
OkNhbGxiYWNrOil8IiArCi0gICAgICAgICIoPzpTY3JpcHQ6ICg/IW5hdGl2ZSkpfCIgKwotICAg
ICAgICAiKD86KD86TGF6eUNvbXBpbGV8RnVuY3Rpb24pOiBbXiBdKig/OiAoPyFuYXRpdmUgKVte
IF0rOlxcZCspPyQpIik7Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMucHJv
ZmlsZXIuSnNQcm9maWxlLnByb3RvdHlwZS5za2lwVGhpc0Z1bmN0aW9uID0gZnVuY3Rpb24obmFt
ZSkKLXsKLSAgICByZXR1cm4gIWRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZS5KU19OT05fTkFU
SVZFX1JFLnRlc3QobmFtZSk7Ci19OwotCi0KLS8qKgotICogUHJvZmlsZXIgcHJvY2Vzc29yLiBD
b25zdW1lcyBwcm9maWxlciBsb2cgYW5kIGJ1aWxkcyBwcm9maWxlIHZpZXdzLgotICogRklYTUU6
IGNoYW5nZSBmaWVsZCBuYW1pbmcgc3R5bGUgdG8gdXNlIHRyYWlsaW5nIHVuZGVyc2NvcmUuCi0g
KgotICogQHBhcmFtIHtmdW5jdGlvbihkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmlldyl9IG5l
d1Byb2ZpbGVDYWxsYmFjayBDYWxsYmFjawotICogICAgIHRoYXQgcmVjZWl2ZXMgYSBuZXcgcHJv
Y2Vzc2VkIHByb2ZpbGUuCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZGV2dG9vbHMucHJvZmlsZXIu
UHJvY2Vzc29yID0gZnVuY3Rpb24oKQotewotICAgIHZhciBkaXNwYXRjaGVzID0gewotICAgICAg
ICAiY29kZS1jcmVhdGlvbiI6IHsKLSAgICAgICAgICAgIHBhcnNlcnM6IFtudWxsLCB0aGlzLmNy
ZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUiKSwgcGFyc2VJbnQsIG51bGxdLAotICAgICAgICAgICAg
cHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NDb2RlQ3JlYXRpb25fLCBiYWNrcmVmczogdHJ1ZSwKLSAg
ICAgICAgICAgIG5lZWRzUHJvZmlsZTogdHJ1ZSB9LAotICAgICAgICAiY29kZS1tb3ZlIjogeyBw
YXJzZXJzOiBbdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIiksCi0gICAgICAgICAgICB0
aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUtbW92ZS10byIpXSwKLSAgICAgICAgICAgIHBy
b2Nlc3NvcjogdGhpcy5wcm9jZXNzQ29kZU1vdmVfLCBiYWNrcmVmczogdHJ1ZSwKLSAgICAgICAg
ICAgIG5lZWRzUHJvZmlsZTogdHJ1ZSB9LAotICAgICAgICAiY29kZS1kZWxldGUiOiB7IHBhcnNl
cnM6IFt0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUiKV0sCi0gICAgICAgICAgICBwcm9j
ZXNzb3I6IHRoaXMucHJvY2Vzc0NvZGVEZWxldGVfLCBiYWNrcmVmczogdHJ1ZSwKLSAgICAgICAg
ICAgIG5lZWRzUHJvZmlsZTogdHJ1ZSB9LAotICAgICAgICAiZnVuY3Rpb24tY3JlYXRpb24iOiB7
IHBhcnNlcnM6IFt0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUiKSwKLSAgICAgICAgICAg
IHRoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiZnVuY3Rpb24tb2JqIildLAotICAgICAgICAgICAg
cHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNyZWF0aW9uXywgYmFja3JlZnM6IHRydWUg
fSwKLSAgICAgICAgImZ1bmN0aW9uLW1vdmUiOiB7IHBhcnNlcnM6IFt0aGlzLmNyZWF0ZUFkZHJl
c3NQYXJzZXIoImNvZGUiKSwKLSAgICAgICAgICAgIHRoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigi
Y29kZS1tb3ZlLXRvIildLAotICAgICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NGdW5j
dGlvbk1vdmVfLCBiYWNrcmVmczogdHJ1ZSB9LAotICAgICAgICAiZnVuY3Rpb24tZGVsZXRlIjog
eyBwYXJzZXJzOiBbdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIildLAotICAgICAgICAg
ICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NGdW5jdGlvbkRlbGV0ZV8sIGJhY2tyZWZzOiB0cnVl
IH0sCi0gICAgICAgICJ0aWNrIjogeyBwYXJzZXJzOiBbdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2Vy
KCJjb2RlIiksCi0gICAgICAgICAgICB0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoInN0YWNrIiks
IHBhcnNlSW50LCAidmFyLWFyZ3MiXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9j
ZXNzVGlja18sIGJhY2tyZWZzOiB0cnVlLCBuZWVkUHJvZmlsZTogdHJ1ZSB9LAotICAgICAgICAi
cHJvZmlsZXIiOiB7IHBhcnNlcnM6IFtudWxsLCAidmFyLWFyZ3MiXSwKLSAgICAgICAgICAgIHBy
b2Nlc3NvcjogdGhpcy5wcm9jZXNzUHJvZmlsZXJfLCBuZWVkc1Byb2ZpbGU6IGZhbHNlIH0sCi0g
ICAgICAgICJoZWFwLXNhbXBsZS1iZWdpbiI6IHsgcGFyc2VyczogW251bGwsIG51bGwsIHBhcnNl
SW50XSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzSGVhcFNhbXBsZUJlZ2lu
XyB9LAotICAgICAgICAiaGVhcC1zYW1wbGUtc3RhdHMiOiB7IHBhcnNlcnM6IFtudWxsLCBudWxs
LCBwYXJzZUludCwgcGFyc2VJbnRdLAotICAgICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nl
c3NIZWFwU2FtcGxlU3RhdHNfIH0sCi0gICAgICAgICJoZWFwLXNhbXBsZS1pdGVtIjogeyBwYXJz
ZXJzOiBbbnVsbCwgcGFyc2VJbnQsIHBhcnNlSW50XSwKLSAgICAgICAgICAgIHByb2Nlc3Nvcjog
dGhpcy5wcm9jZXNzSGVhcFNhbXBsZUl0ZW1fIH0sCi0gICAgICAgICJoZWFwLWpzLWNvbnMtaXRl
bSI6IHsgcGFyc2VyczogW251bGwsIHBhcnNlSW50LCBwYXJzZUludF0sCi0gICAgICAgICAgICBw
cm9jZXNzb3I6IHRoaXMucHJvY2Vzc0hlYXBKc0NvbnNJdGVtXyB9LAotICAgICAgICAiaGVhcC1q
cy1yZXQtaXRlbSI6IHsgcGFyc2VyczogW251bGwsICJ2YXItYXJncyJdLAotICAgICAgICAgICAg
cHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NIZWFwSnNSZXRJdGVtXyB9LAotICAgICAgICAiaGVhcC1z
YW1wbGUtZW5kIjogeyBwYXJzZXJzOiBbbnVsbCwgbnVsbF0sCi0gICAgICAgICAgICBwcm9jZXNz
b3I6IHRoaXMucHJvY2Vzc0hlYXBTYW1wbGVFbmRfIH0sCi0gICAgICAgIC8vIE5vdCB1c2VkIGlu
IERldlRvb2xzIFByb2ZpbGVyLgotICAgICAgICAic2hhcmVkLWxpYnJhcnkiOiBudWxsLAotICAg
ICAgICAvLyBPYnNvbGV0ZSByb3cgdHlwZXMuCi0gICAgICAgICJjb2RlLWFsbG9jYXRlIjogbnVs
bCwKLSAgICAgICAgImJlZ2luLWNvZGUtcmVnaW9uIjogbnVsbCwKLSAgICAgICAgImVuZC1jb2Rl
LXJlZ2lvbiI6IG51bGx9OwotCi0gICAgaWYgKGRldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGUuVkVS
U0lPTiA9PT0gMikgewotICAgICAgICBkaXNwYXRjaGVzWyJ0aWNrIl0gPSAgeyBwYXJzZXJzOiBb
dGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIiksCi0gICAgICAgICAgICB0aGlzLmNyZWF0
ZUFkZHJlc3NQYXJzZXIoInN0YWNrIiksCi0gICAgICAgICAgICB0aGlzLmNyZWF0ZUFkZHJlc3NQ
YXJzZXIoImZ1bmMiKSwgcGFyc2VJbnQsICJ2YXItYXJncyJdLAotICAgICAgICAgICAgcHJvY2Vz
c29yOiB0aGlzLnByb2Nlc3NUaWNrVjJfLCBiYWNrcmVmczogdHJ1ZSB9OwotICAgIH0KLQotICAg
IGRldnRvb2xzLnByb2ZpbGVyLkxvZ1JlYWRlci5jYWxsKHRoaXMsIGRpc3BhdGNoZXMpOwotCi0g
ICAgLyoqCi0gICAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIG5ldyBwcm9maWxl
IGlzIGVuY291bnRlcmVkIGluIHRoZSBsb2cuCi0gICAgICogQHR5cGUge2Z1bmN0aW9uKCl9Ci0g
ICAgICovCi0gICAgdGhpcy5zdGFydGVkUHJvZmlsZVByb2Nlc3NpbmdfID0gbnVsbDsKLQotICAg
IC8qKgotICAgICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlcmlvZGljYWxseSB0byBkaXNw
bGF5IHByb2Nlc3Npbmcgc3RhdHVzLgotICAgICAqIEB0eXBlIHtmdW5jdGlvbigpfQotICAgICAq
LwotICAgIHRoaXMucHJvZmlsZVByb2Nlc3NpbmdTdGF0dXNfID0gbnVsbDsKLQotICAgIC8qKgot
ICAgICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBwcm9maWxlIGhhcyBiZWVuIHBy
b2Nlc3NlZCBhbmQgaXMgcmVhZHkKLSAgICAgKiB0byBiZSBzaG93bi4KLSAgICAgKiBAdHlwZSB7
ZnVuY3Rpb24oZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZVZpZXcpfQotICAgICAqLwotICAgIHRo
aXMuZmluaXNoZWRQcm9maWxlUHJvY2Vzc2luZ18gPSBudWxsOwotCi0gICAgLyoqCi0gICAgICog
VGhlIGN1cnJlbnQgcHJvZmlsZS4KLSAgICAgKiBAdHlwZSB7ZGV2dG9vbHMucHJvZmlsZXIuSnNQ
cm9maWxlfQotICAgICAqLwotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfID0gbnVsbDsKLQotICAg
IC8qKgotICAgICAqIEJ1aWxkZXIgb2YgcHJvZmlsZSB2aWV3cy4gQ3JlYXRlZCBkdXJpbmcgInBy
b2ZpbGVyLGJlZ2luIiBldmVudCBwcm9jZXNzaW5nLgotICAgICAqIEB0eXBlIHtkZXZ0b29scy5w
cm9maWxlci5XZWJLaXRWaWV3QnVpbGRlcn0KLSAgICAgKi8KLSAgICB0aGlzLnZpZXdCdWlsZGVy
XyA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBOZXh0IHByb2ZpbGUgaWQuCi0gICAgICogQHR5
cGUge251bWJlcn0KLSAgICAgKi8KLSAgICB0aGlzLnByb2ZpbGVJZF8gPSAxOwotCi0gICAgLyoq
Ci0gICAgICogQ291bnRlciBmb3IgcHJvY2Vzc2VkIHRpY2tzLgotICAgICAqIEB0eXBlIHtudW1i
ZXJ9Ci0gICAgICovCi0gICAgdGhpcy50aWNrc0NvdW50XyA9IDA7Ci0KLSAgICAvKioKLSAgICAg
KiBJbnRlcnZhbCBpZCBmb3IgdXBkYXRpbmcgcHJvY2Vzc2luZyBzdGF0dXMuCi0gICAgICogQHR5
cGUge251bWJlcn0KLSAgICAgKi8KLSAgICB0aGlzLnByb2Nlc3NpbmdJbnRlcnZhbF8gPSBudWxs
OwotCi0gICAgLyoqCi0gICAgICogVGhlIGN1cnJlbnQgaGVhcCBzbmFwc2hvdC4KLSAgICAgKiBA
dHlwZSB7c3RyaW5nfQotICAgICAqLwotICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8gPSBu
dWxsOwotCi0gICAgLyoqCi0gICAgICogTmV4dCBoZWFwIHNuYXBzaG90IGlkLgotICAgICAqIEB0
eXBlIHtudW1iZXJ9Ci0gICAgICovCi0gICAgdGhpcy5oZWFwU25hcHNob3RJZF8gPSAxOwotfTsK
LWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUuX19wcm90b19fID0gZGV2dG9v
bHMucHJvZmlsZXIuTG9nUmVhZGVyLnByb3RvdHlwZTsKLQotCi0vKioKLSAqIEBvdmVycmlkZQot
ICovCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByaW50RXJyb3IgPSBm
dW5jdGlvbihzdHIpCi17Ci0gICAgV2ViSW5zcGVjdG9yLmxvZyhzdHIpOwotfTsKLQotCi0vKioK
LSAqIEBvdmVycmlkZQotICovCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBl
LnNraXBEaXNwYXRjaCA9IGZ1bmN0aW9uKGRpc3BhdGNoKQotewotICAgIHJldHVybiBkaXNwYXRj
aC5uZWVkc1Byb2ZpbGUgJiYgdGhpcy5jdXJyZW50UHJvZmlsZV8gPT09IG51bGw7Ci19OwotCi0K
LS8qKgotICogU2V0cyBwcm9maWxlIHByb2Nlc3NpbmcgY2FsbGJhY2tzLgotICoKLSAqIEBwYXJh
bSB7ZnVuY3Rpb24oKX0gc3RhcnRlZCBTdGFydGVkIHByb2Nlc3NpbmcgY2FsbGJhY2suCi0gKiBA
cGFyYW0ge2Z1bmN0aW9uKGRldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3KX0gZmluaXNoZWQg
RmluaXNoZWQKLSAqICAgICBwcm9jZXNzaW5nIGNhbGxiYWNrLgotICovCi1kZXZ0b29scy5wcm9m
aWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnNldENhbGxiYWNrcyA9IGZ1bmN0aW9uKHN0YXJ0ZWQs
IHByb2Nlc3NpbmcsIGZpbmlzaGVkKQotewotICAgIHRoaXMuc3RhcnRlZFByb2ZpbGVQcm9jZXNz
aW5nXyA9IHN0YXJ0ZWQ7Ci0gICAgdGhpcy5wcm9maWxlUHJvY2Vzc2luZ1N0YXR1c18gPSBwcm9j
ZXNzaW5nOwotICAgIHRoaXMuZmluaXNoZWRQcm9maWxlUHJvY2Vzc2luZ18gPSBmaW5pc2hlZDsK
LX07Ci0KLQotLyoqCi0gKiBBbiBhZGRyZXNzIGZvciB0aGUgZmFrZSAiKHByb2dyYW0pIiBlbnRy
eS4gV2ViS2l0J3MgdmlzdWFsaXNhdGlvbgotICogaGFzIGFzc3VtcHRpb25zIG9uIGhvdyB0aGUg
dG9wIG9mIHRoZSBjYWxsIHRyZWUgc2hvdWxkIGxvb2sgbGlrZSwKLSAqIGFuZCB3ZSBuZWVkIHRv
IGFkZCBhIGZha2UgZW50cnkgYXMgdGhlIHRvcG1vc3QgZnVuY3Rpb24uIFRoaXMKLSAqIGFkZHJl
c3MgaXMgY2hvc2VuIGJlY2F1c2UgaXQncyB0aGUgZW5kIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG1l
bW9yeQotICogcGFnZSwgd2hpY2ggaXMgbmV2ZXIgdXNlZCBmb3IgY29kZSBvciBkYXRhLCBidXQg
b25seSBhcyBhIGd1YXJkCi0gKiBwYWdlIGZvciBjYXRjaGluZyBBViBlcnJvcnMuCi0gKgotICog
QHR5cGUge251bWJlcn0KLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLlBST0dSQU1f
RU5UUlkgPSAweGZmZmY7Ci0vKioKLSAqIEB0eXBlIHtzdHJpbmd9Ci0gKi8KLWRldnRvb2xzLnBy
b2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZX1NUUiA9ICIweGZmZmYiOwotCi0KLS8qKgot
ICogU2V0cyBuZXcgcHJvZmlsZSBjYWxsYmFjay4KLSAqIEBwYXJhbSB7ZnVuY3Rpb24oZGV2dG9v
bHMucHJvZmlsZXIuUHJvZmlsZVZpZXcpfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi4KLSAq
LwotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5zZXROZXdQcm9maWxlQ2Fs
bGJhY2sgPSBmdW5jdGlvbihjYWxsYmFjaykKLXsKLSAgICB0aGlzLm5ld1Byb2ZpbGVDYWxsYmFj
a18gPSBjYWxsYmFjazsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3Rv
dHlwZS5wcm9jZXNzUHJvZmlsZXJfID0gZnVuY3Rpb24oc3RhdGUsIHBhcmFtcykKLXsKLSAgICBz
d2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgInJlc3VtZSI6Ci0gICAgICAgICAgICBpZiAo
dGhpcy5jdXJyZW50UHJvZmlsZV8gPT09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmN1
cnJlbnRQcm9maWxlXyA9IG5ldyBkZXZ0b29scy5wcm9maWxlci5Kc1Byb2ZpbGUoKTsKLSAgICAg
ICAgICAgICAgICAvLyBzZWUgdGhlIGNvbW1lbnQgZm9yIGRldnRvb2xzLnByb2ZpbGVyLlByb2Nl
c3Nvci5QUk9HUkFNX0VOVFJZCi0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvZmlsZV8u
YWRkQ29kZSgiRnVuY3Rpb24iLCAiKHByb2dyYW0pIiwgZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vz
c29yLlBST0dSQU1fRU5UUlksIDEpOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0ZWRQ
cm9maWxlUHJvY2Vzc2luZ18pCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRlZFByb2Zp
bGVQcm9jZXNzaW5nXygpOwotICAgICAgICAgICAgICAgIHRoaXMudGlja3NDb3VudF8gPSAwOwot
ICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgICBpZiAodGhp
cy5wcm9maWxlUHJvY2Vzc2luZ1N0YXR1c18pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5w
cm9jZXNzaW5nSW50ZXJ2YWxfID0gd2luZG93LnNldEludGVydmFsKAotICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7IHNlbGYucHJvZmlsZVByb2Nlc3NpbmdTdGF0dXNfKHNlbGYu
dGlja3NDb3VudF8pOyB9LAotICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgInBhdXNlIjoKLSAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQcm9maWxlXyAhPT0gbnVs
bCkgewotICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMucHJvY2Vzc2lu
Z0ludGVydmFsXyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nSW50ZXJ2YWxfID0g
bnVsbDsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5maW5pc2hlZFByb2ZpbGVQcm9jZXNzaW5n
XykKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hlZFByb2ZpbGVQcm9jZXNzaW5nXyh0
aGlzLmNyZWF0ZVByb2ZpbGVGb3JWaWV3KCkpOwotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVu
dFByb2ZpbGVfID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlICJiZWdpbiI6Ci0gICAgICAgICAgICB2YXIgc2FtcGxpbmdSYXRlID0gTmFOOwot
ICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICAgIHNhbXBs
aW5nUmF0ZSA9IHBhcnNlSW50KHBhcmFtc1swXSk7Ci0gICAgICAgICAgICBpZiAoaXNOYU4oc2Ft
cGxpbmdSYXRlKSkKLSAgICAgICAgICAgICAgICBzYW1wbGluZ1JhdGUgPSAxOwotICAgICAgICAg
ICAgdGhpcy52aWV3QnVpbGRlcl8gPSBuZXcgZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld0J1
aWxkZXIoc2FtcGxpbmdSYXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBUaGVz
ZSBldmVudHMgYXJlIHZhbGlkIGJ1dCBhcmVuJ3QgdXNlZC4KLSAgICAgICAgY2FzZSAiY29tcHJl
c3Npb24iOgotICAgICAgICBjYXNlICJlbmQiOiBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidW5rbm93biBwcm9maWxlciBzdGF0ZTogIiArIHN0
YXRlKTsKLSAgICB9Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5
cGUucHJvY2Vzc0NvZGVDcmVhdGlvbl8gPSBmdW5jdGlvbih0eXBlLCBzdGFydCwgc2l6ZSwgbmFt
ZSkKLXsKLSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5hZGRDb2RlKHRoaXMuZXhwYW5kQWxpYXMo
dHlwZSksIG5hbWUsIHN0YXJ0LCBzaXplKTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJv
Y2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzQ29kZU1vdmVfID0gZnVuY3Rpb24oZnJvbSwgdG8pCi17
Ci0gICAgdGhpcy5jdXJyZW50UHJvZmlsZV8ubW92ZUNvZGUoZnJvbSwgdG8pOwotfTsKLQotCi1k
ZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NDb2RlRGVsZXRlXyA9
IGZ1bmN0aW9uKHN0YXJ0KQotewotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLmRlbGV0ZUNvZGUo
c3RhcnQpOwotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnBy
b2Nlc3NGdW5jdGlvbkNyZWF0aW9uXyA9IGZ1bmN0aW9uKGZ1bmN0aW9uQWRkciwgY29kZUFkZHIp
Ci17Ci0gICAgdGhpcy5jdXJyZW50UHJvZmlsZV8uYWRkQ29kZUFsaWFzKGZ1bmN0aW9uQWRkciwg
Y29kZUFkZHIpOwotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBl
LnByb2Nlc3NGdW5jdGlvbk1vdmVfID0gZnVuY3Rpb24oZnJvbSwgdG8pCi17Ci0gICAgdGhpcy5j
dXJyZW50UHJvZmlsZV8uc2FmZU1vdmVEeW5hbWljQ29kZShmcm9tLCB0byk7Ci19OwotCi0KLWRl
dnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0Z1bmN0aW9uRGVsZXRl
XyA9IGZ1bmN0aW9uKHN0YXJ0KQotewotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLnNhZmVEZWxl
dGVEeW5hbWljQ29kZShzdGFydCk7Ci19OwotCi0KLS8vIFRPRE8obW5hZ2Fub3YpOiBSZW1vdmUg
YWZ0ZXIgbmV4dCBWOCByb2xsLgotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlw
ZS5wcm9jZXNzVGlja18gPSBmdW5jdGlvbihwYywgc3AsIHZtU3RhdGUsIHN0YWNrKQotewotICAg
IC8vIHNlZSB0aGUgY29tbWVudCBmb3IgZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLlBST0dS
QU1fRU5UUlkKLSAgICBzdGFjay5wdXNoKGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9H
UkFNX0VOVFJZX1NUUik7Ci0gICAgdGhpcy5jdXJyZW50UHJvZmlsZV8ucmVjb3JkVGljayh0aGlz
LnByb2Nlc3NTdGFjayhwYywgc3RhY2spKTsKLSAgICB0aGlzLnRpY2tzQ291bnRfKys7Ci19Owot
Ci0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc1RpY2tWMl8g
PSBmdW5jdGlvbihwYywgc3AsIGZ1bmMsIHZtU3RhdGUsIHN0YWNrKQotewotICAgIC8vIHNlZSB0
aGUgY29tbWVudCBmb3IgZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLlBST0dSQU1fRU5UUlkK
LSAgICBzdGFjay5wdXNoKGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZ
X1NUUik7Ci0KLQotICAgIGlmIChmdW5jKSB7Ci0gICAgICAgIHZhciBmdW5jRW50cnkgPSB0aGlz
LmN1cnJlbnRQcm9maWxlXy5maW5kRW50cnkoZnVuYyk7Ci0gICAgICAgIGlmICghZnVuY0VudHJ5
IHx8ICFmdW5jRW50cnkuaXNKU0Z1bmN0aW9uIHx8ICFmdW5jRW50cnkuaXNKU0Z1bmN0aW9uKCkp
Ci0gICAgICAgICAgICBmdW5jID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB2YXIg
Y3VyckVudHJ5ID0gdGhpcy5jdXJyZW50UHJvZmlsZV8uZmluZEVudHJ5KHBjKTsKLSAgICAgICAg
ICAgIGlmICghY3VyckVudHJ5IHx8ICFjdXJyRW50cnkuaXNKU0Z1bmN0aW9uIHx8IGN1cnJFbnRy
eS5pc0pTRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIGZ1bmMgPSAwOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGhpcy5jdXJyZW50UHJvZmlsZV8ucmVjb3Jk
VGljayh0aGlzLnByb2Nlc3NTdGFjayhwYywgZnVuYywgc3RhY2spKTsKLSAgICB0aGlzLnRpY2tz
Q291bnRfKys7Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUu
cHJvY2Vzc0hlYXBTYW1wbGVCZWdpbl8gPSBmdW5jdGlvbihzcGFjZSwgc3RhdGUsIHRpY2tzKQot
ewotICAgIGlmIChzcGFjZSAhPT0gIkhlYXAiKSByZXR1cm47Ci0gICAgdGhpcy5jdXJyZW50SGVh
cFNuYXBzaG90XyA9IHsKLSAgICAgICAgbnVtYmVyOiB0aGlzLmhlYXBTbmFwc2hvdElkXysrLAot
ICAgICAgICBlbnRyaWVzOiB7fSwKLSAgICAgICAgY2x1c3RlcnM6IHt9LAotICAgICAgICBsb3ds
ZXZlbHM6IHt9LAotICAgICAgICB0aWNrczogdGlja3MKLSAgICB9OwotfTsKLQotCi1kZXZ0b29s
cy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NIZWFwU2FtcGxlU3RhdHNfID0g
ZnVuY3Rpb24oc3BhY2UsIHN0YXRlLCBjYXBhY2l0eSwgdXNlZCkKLXsKLSAgICBpZiAoc3BhY2Ug
IT09ICJIZWFwIikgcmV0dXJuOwotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3Iu
cHJvdG90eXBlLnByb2Nlc3NIZWFwU2FtcGxlSXRlbV8gPSBmdW5jdGlvbihpdGVtLCBudW1iZXIs
IHNpemUpCi17Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfKSByZXR1cm47Ci0g
ICAgdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90Xy5sb3dsZXZlbHNbaXRlbV0gPSB7Ci0gICAgICAg
IHR5cGU6IGl0ZW0sIGNvdW50OiBudW1iZXIsIHNpemU6IHNpemUKLSAgICB9OwotfTsKLQotCi1k
ZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NIZWFwSnNDb25zSXRl
bV8gPSBmdW5jdGlvbihpdGVtLCBudW1iZXIsIHNpemUpCi17Ci0gICAgaWYgKCF0aGlzLmN1cnJl
bnRIZWFwU25hcHNob3RfKSByZXR1cm47Ci0gICAgdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90Xy5l
bnRyaWVzW2l0ZW1dID0gewotICAgICAgICBjb25zOiBpdGVtLCBjb3VudDogbnVtYmVyLCBzaXpl
OiBzaXplLCByZXRhaW5lcnM6IHt9Ci0gICAgfTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIu
UHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcEpzUmV0SXRlbV8gPSBmdW5jdGlvbihpdGVt
LCByZXRhaW5lcnNBcnJheSkKLXsKLSAgICBpZiAoIXRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8p
IHJldHVybjsKLSAgICB2YXIgcmF3UmV0YWluZXJzID0ge307Ci0gICAgZm9yICh2YXIgaSA9IDAs
IG4gPSByZXRhaW5lcnNBcnJheS5sZW5ndGg7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgdmFyIGVu
dHJ5ID0gcmV0YWluZXJzQXJyYXlbaV0uc3BsaXQoIjsiKTsKLSAgICAgICAgcmF3UmV0YWluZXJz
W2VudHJ5WzBdXSA9IHBhcnNlSW50KGVudHJ5WzFdLCAxMCk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gbWVyZ2VSZXRhaW5lcnMoZW50cnkpIHsKLSAgICAgICAgZm9yICh2YXIgcmF3UmV0YWluZXIg
aW4gcmF3UmV0YWluZXJzKSB7Ci0gICAgICAgICAgICB2YXIgY29uc05hbWUgPSByYXdSZXRhaW5l
ci5pbmRleE9mKCI6IikgIT09IC0xID8gcmF3UmV0YWluZXIuc3BsaXQoIjoiKVswXSA6IHJhd1Jl
dGFpbmVyOwotICAgICAgICAgICAgaWYgKCEoY29uc05hbWUgaW4gZW50cnkucmV0YWluZXJzKSkK
LSAgICAgICAgICAgICAgICBlbnRyeS5yZXRhaW5lcnNbY29uc05hbWVdID0geyBjb25zOiBjb25z
TmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OwotICAgICAgICAgICAgdmFyIHJldGFpbmVy
ID0gZW50cnkucmV0YWluZXJzW2NvbnNOYW1lXTsKLSAgICAgICAgICAgIHJldGFpbmVyLmNvdW50
ICs9IHJhd1JldGFpbmVyc1tyYXdSZXRhaW5lcl07Ci0gICAgICAgICAgICBpZiAoY29uc05hbWUg
IT09IHJhd1JldGFpbmVyKQotICAgICAgICAgICAgICAgIHJldGFpbmVyLmNsdXN0ZXJzW3Jhd1Jl
dGFpbmVyXSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXRlbS5pbmRleE9m
KCI6IikgIT09IC0xKSB7Ci0gICAgICAvLyBBcnJheSwgRnVuY3Rpb24sIG9yIE9iamVjdCBpbnN0
YW5jZXMgY2x1c3RlciBjYXNlLgotICAgICAgaWYgKCEoaXRlbSBpbiB0aGlzLmN1cnJlbnRIZWFw
U25hcHNob3RfLmNsdXN0ZXJzKSkgewotICAgICAgICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hv
dF8uY2x1c3RlcnNbaXRlbV0gPSB7Ci0gICAgICAgICAgICAgIGNvbnM6IGl0ZW0sIHJldGFpbmVy
czoge30KLSAgICAgICAgICB9OwotICAgICAgfQotICAgICAgbWVyZ2VSZXRhaW5lcnModGhpcy5j
dXJyZW50SGVhcFNuYXBzaG90Xy5jbHVzdGVyc1tpdGVtXSk7Ci0gICAgICBpdGVtID0gaXRlbS5z
cGxpdCgiOiIpWzBdOwotICAgIH0KLSAgICBtZXJnZVJldGFpbmVycyh0aGlzLmN1cnJlbnRIZWFw
U25hcHNob3RfLmVudHJpZXNbaXRlbV0pOwotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9j
ZXNzb3IucHJvdG90eXBlLnByb2Nlc3NIZWFwU2FtcGxlRW5kXyA9IGZ1bmN0aW9uKHNwYWNlLCBz
dGF0ZSkKLXsKLSAgICBpZiAoc3BhY2UgIT09ICJIZWFwIikgcmV0dXJuOwotICAgIHZhciBzbmFw
c2hvdCA9IHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF87Ci0gICAgdGhpcy5jdXJyZW50SGVhcFNu
YXBzaG90XyA9IG51bGw7Ci0gICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy5hZGRTbmFw
c2hvdChzbmFwc2hvdCk7Ci19OwotCi0KLS8qKgotICogQ3JlYXRlcyBhIHByb2ZpbGUgZm9yIGZ1
cnRoZXIgZGlzcGxheWluZyBpbiBQcm9maWxlVmlldy4KLSAqLwotZGV2dG9vbHMucHJvZmlsZXIu
UHJvY2Vzc29yLnByb3RvdHlwZS5jcmVhdGVQcm9maWxlRm9yVmlldyA9IGZ1bmN0aW9uKCkKLXsK
LSAgICB2YXIgcHJvZmlsZSA9IHRoaXMudmlld0J1aWxkZXJfLmJ1aWxkVmlldyh0aGlzLmN1cnJl
bnRQcm9maWxlXy5nZXRUb3BEb3duUHJvZmlsZSgpKTsKLSAgICBwcm9maWxlLnVpZCA9IHRoaXMu
cHJvZmlsZUlkXysrOwotICAgIHByb2ZpbGUudGl0bGUgPSBVc2VySW5pdGlhdGVkUHJvZmlsZU5h
bWUgKyAiLiIgKyBwcm9maWxlLnVpZDsKLSAgICByZXR1cm4gcHJvZmlsZTsKLX07CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL2RldlRvb2xzLmNzcyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvZGV2VG9vbHMuY3NzCmluZGV4IGRmY2FhZGYuLjk0OTVmYjggMTAwNzU1Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvZGV2VG9vbHMuY3NzCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvZGV2VG9vbHMuY3NzCkBAIC0zNywxMTggKzM3LDYgQEAgYm9keS5wbGF0Zm9ybS1s
aW51eCAjc2NyaXB0cy1maWxlcyB7CiAgICAgbGluZS1oZWlnaHQ6IDEycHg7CiB9CiAKLS8qIEhl
YXAgUHJvZmlsZXIgU3R5bGVzICovCi0KLS5oZWFwLXNuYXBzaG90LXN0YXR1cy1iYXItaXRlbSAu
Z2x5cGggewotICAgIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy9mb2N1c0J1dHRvbkds
eXBoLnBuZyk7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXNpZGViYXItdHJlZS1pdGVtIC5pY29uIHsK
LSAgICBjb250ZW50OiB1cmwoSW1hZ2VzL3Byb2ZpbGVJY29uLnBuZyk7Ci19Ci0KLS5oZWFwLXNu
YXBzaG90LXNpZGViYXItdHJlZS1pdGVtLnNtYWxsIC5pY29uIHsKLSAgICBjb250ZW50OiB1cmwo
SW1hZ2VzL3Byb2ZpbGVTbWFsbEljb24ucG5nKTsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyB7
Ci0gICAgZGlzcGxheTogbm9uZTsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgbGVmdDogMDsKLSAgICByaWdodDogMDsKLSAg
ICBib3R0b206IDA7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcudmlzaWJsZSB7Ci0gICAgZGlz
cGxheTogYmxvY2s7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB7Ci0gICAg
Ym9yZGVyOiBub25lOwotICAgIG1heC1oZWlnaHQ6IDEwMCU7Ci0gICAgcG9zaXRpb246IGFic29s
dXRlOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgdG9wOiAwOwotICAgIGJvdHRv
bTogOTNweDsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLmNvdW50LWNv
bHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3
IC5kYXRhLWdyaWQgdGQuY291bnQtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0K
LQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLnNpemUtY29sdW1uIHsKLSAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0
ZC5zaXplLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLS5oZWFwLXNuYXBz
aG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3VudERlbHRhLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGln
bjogY2VudGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuY291bnRE
ZWx0YS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVhcC1zbmFwc2hv
dC12aWV3IC5kYXRhLWdyaWQgdGguc2l6ZURlbHRhLWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjog
Y2VudGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuc2l6ZURlbHRh
LWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLSNoZWFwLXNuYXBzaG90LXN1
bW1hcnktY29udGFpbmVyIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcGFkZGluZy10
b3A6IDIwcHg7Ci0gICAgYm90dG9tOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0g
ICAgaGVpZ2h0OiA5M3B4OwotICAgIG1hcmdpbi1sZWZ0OiAtMXB4OwotICAgIGJvcmRlci1sZWZ0
OiAxcHggc29saWQgcmdiKDEwMiwgMTAyLCAxMDIpOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJn
YigxMDEsIDExMSwgMTMwKTsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50
KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYmEoMCwgMCwgMCwgMC41KSks
IHRvKHJnYmEoMCwgMCwgMCwgMCkpKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7
Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
LSAgICB0ZXh0LXNoYWRvdzogYmxhY2sgMCAxcHggMXB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dy
YXA7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAxcHgg
NnB4OwotICAgIC13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW46IHBhZGRpbmc7Ci0gICAgLXdlYmtp
dC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmc7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXN1bW1hcnkg
ewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3aWR0aDogNTAlOwotICAgIG1pbi13
aWR0aDogMzAwcHg7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0uaGVhcC1zbmFwc2hv
dC1zdW1tYXJ5IGNhbnZhcy5zdW1tYXJ5LWdyYXBoIHsKLSAgICB3aWR0aDogMjI1cHg7Ci19Ci0K
LS5oZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwgewotICAgIGZvbnQtc2l6ZTogMTJweDsKLSAg
ICBmb250LXdlaWdodDogYm9sZDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAx
cHg7Ci0gICAgd2lkdGg6IDUwJTsKLSAgICBsZWZ0OiAyNSU7Ci19Ci0KIC5zZWN0aW9uID4gLmhl
YWRlciB7CiAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDkyLCAxMTYsIDE1Nyk7CiAgICAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJv
dHRvbSwgZnJvbShyZ2IoMTA1LCAxMzMsIDE4MCkpLCB0byhyZ2IoOTIsIDExNiwgMTU3KSkpOwo=
</data>
<flag name="commit-queue"
          id="54213"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65440</attachid>
            <date>2010-08-25 11:08:12 -0700</date>
            <delta_ts>2010-08-25 13:41:35 -0700</delta_ts>
            <desc>Style fixes</desc>
            <filename>44531-patch</filename>
            <type>text/plain</type>
            <size>154014</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWI1OTEwZS4uOGQ2N2U2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNzIgQEAKKzIwMTAtMDgtMjUgIE1pa2hhaWwgTmFn
YW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdG9yZSBoZWFwIHNuYXBzaG90
cyBpbiBJbnNwZWN0b3JQcm9maWxlckFnZW50LgorCisgICAgICAgIENoYW5nZSB0aGUgd2F5IGhl
YXAgc25hcHNob3RzIGFyZSB0cmFuc3BvcnRlZCB0byBJbnNwZWN0b3IKKyAgICAgICAgdG8gYmUg
YWxpZ25lZCB3aXRoIENQVSBwcm9maWxlcy4gQXMgYSByZXN1bHQsIHRoZSBIZWFwIHNuYXBzaG90
cworICAgICAgICB2aWV3IG9mIFByb2ZpbGVzIHBhbmVsIHdhcyB1cHN0cmVhbWVkIGludG8gV2Vi
Q29yZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ1MzEKKworICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6flNjcmlwdEhlYXBTbmFwc2hvdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEhlYXBTbmFwc2hvdDo6dWlkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEhlYXBTbmFw
c2hvdDo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JIZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEhlYXBTbmFwc2hvdDo6U2NyaXB0SGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRQcm9maWxlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvZmlsZXI6
OnRha2VIZWFwU25hcHNob3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFw
c2hvdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90Ojp0
aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRIZWFwU25hcHNob3Q6OnVpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpidWlsZEluc3BlY3Rvck9iamVjdEZvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0SGVhcFNuYXBzaG90OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0SGVhcFNuYXBzaG90Ojp+U2NyaXB0SGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEhlYXBTbmFwc2hvdDo6U2NyaXB0SGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVNuYXBzaG90SGVhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFByb2ZpbGVI
ZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldFBy
b2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVtb3Zl
UHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZXNl
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRha2VI
ZWFwU25hcHNob3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb2ZpbGVDYWxs
YmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5yZXNldENvbXBs
ZXRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuZ2V0IHN0YXR1c0Jhckl0
ZW1zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5n
ZXQgcHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuc2V0IHByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Vmlldy5wcm90b3R5cGUucmVmcmVzaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Vmlldy5wcm90b3R5cGUucmVmcmVzaFNob3dBc1BlcmNlbnRzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZs
YWdzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5z
ZWFyY2hDYW5jZWxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5w
cm90b3R5cGUucGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Vmlldy5wcm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQuV2ViSW5zcGVjdG9yLkNQ
VVByb2ZpbGVWaWV3LnByb3RvdHlwZS5qdW1wVG9GaXJzdFNlYXJjaFJlc3VsdC5qdW1wVG9MYXN0
U2VhcmNoUmVzdWx0LldlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRv
TGFzdFNlYXJjaFJlc3VsdC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0LldlYkluc3BlY3Rvci5DUFVQ
cm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdC5qdW1wVG9QcmV2aW91
c1NlYXJjaFJlc3VsdC5XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBU
b1ByZXZpb3VzU2VhcmNoUmVzdWx0LnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdC5XZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdC5zaG93
aW5nTGFzdFNlYXJjaFJlc3VsdC5XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBl
LnNob3dpbmdMYXN0U2VhcmNoUmVzdWx0Ll9qdW1wVG9TZWFyY2hSZXN1bHQuV2ViSW5zcGVjdG9y
LkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LnJlZnJlc2hWaXNp
YmxlRGF0YSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5
cGUuX2NoYW5nZUJhc2UucmVzZXRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9jaGFuZ2VCYXNlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fY3JlYXRlU25hcHNob3REYXRhR3JpZExp
c3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9n
ZXRQcm9maWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuX2xvYWRQcm9maWxlLmxvYWRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fbG9hZFByb2ZpbGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9tb3VzZURvd25JbkRhdGFHcmlk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5nZXQg
X2lzU2hvd2luZ0FzUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Vmlldy5wcm90b3R5cGUuX3BlcmNlbnRDbGlja2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcHJlcGFyZVByb2ZpbGUubWVyZ2VSZXRhaW5lcnMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9wcmVw
YXJlUHJvZmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuX3Jlc2V0RGF0YUdyaWRMaXN0LnByb2ZpbGVMb2FkZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9yZXNldERhdGFHcmlkTGlzdCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX3NvcnREYXRh
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fdXBk
YXRlQmFzZU9wdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcu
cHJvdG90eXBlLl91cGRhdGVQZXJjZW50QnV0dG9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fdXBkYXRlU3VtbWFyeUdyYXBoKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlci5vcGVyYXRpb25zLkxF
U1MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVy
Lm9wZXJhdGlvbnMuTEVTU19PUl9FUVVBTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9ucy5FUVVBTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9ucy5HUkVBVEVS
X09SX0VRVUFMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJj
aEhlbHBlci5vcGVyYXRpb25zLkdSRUFURVIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLnBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN1bW1hcnlWYWx1
ZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5
cGUuZm9ybWF0VmFsdWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3Vs
YXRvci5wcm90b3R5cGUuZ2V0IHNob3dBc1BlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGUuc2V0IHNob3dBc1BlcmNlbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRvci5wcm90b3R5cGUuX2hpZ2hG
cm9tTG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRv
ci5wcm90b3R5cGUuX3ZhbHVlVG9TdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
dW1tYXJ5U2l6ZUNhbGN1bGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5
U2l6ZUNhbGN1bGF0b3IucHJvdG90eXBlLl9oaWdoRnJvbUxvdyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5
cGUuZ2V0IF9oYXNSZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldCBfcGFyZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnBy
b3RvdHlwZS5fcG9wdWxhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VEaWZmKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3Rv
dHlwZS5zb3J0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5v
ZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5zaWduRm9yRGVsdGEpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnNo
b3dEZWx0YUFzUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0VG90YWxDb3VudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90
b3R5cGUuZ2V0VG90YWxTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
YXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXQgY291bnRQZXJjZW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJz
LnByb3RvdHlwZS5nZXQgc2l6ZVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldCBjb3VudERlbHRh
UGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2Rl
V2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0IHNpemVEZWx0YVBlcmNlbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90
eXBlLmdldCBkYXRhKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5jcmVhdGVDZWxsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5hcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5pbnNlcnRDaGlsZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlw
ZS5yZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWRMaXN0LnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9yLmNvbXBhcmF0
b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9w
ZXJ0eUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFH
cmlkUmV0YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRh
R3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuZ2V0IHNpemVQZXJjZW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuZ2V0
IHNpemVEZWx0YVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkUmV0YWluZXJOb2RlLnByb3RvdHlwZS5fY2FsY3VsYXRlUmV0YWluZXJzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCBidXR0b25Ub29s
dGlwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90
b3R5cGUuZ2V0IGJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCB3ZWxjb21lTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90
eXBlLmNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVhdGVWaWV3KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVWaWV3LmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DUFVQcm9m
aWxlVHlwZS5wcm90b3R5cGUuY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50Rm9yUHJvZmlsZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlc1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmFkZFByb2ZpbGVIZWFkZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnJlbW92ZVByb2Zp
bGVIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBl
LmdldFByb2ZpbGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3Rv
dHlwZS51cGRhdGVQcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJh
clRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVF
bGVtZW50LnByb3RvdHlwZS5nZXQgbWFpblRpdGxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuY3NzOgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0gLmljb24p
OgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0uc21hbGwgLmljb24p
OgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtdmlldyk6CisgICAgICAgICguaGVhcC1zbmFwc2hv
dC12aWV3LnZpc2libGUpOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlk
KToKKyAgICAgICAgKC5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3VudC1jb2x1
bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLmNvdW50LWNv
bHVtbik6CisgICAgICAgICguaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGguc2l6ZS1j
b2x1bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLnNpemUt
Y29sdW1uKToKKyAgICAgICAgKC5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3Vu
dERlbHRhLWNvbHVtbik6CisgICAgICAgICguaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQg
dGQuY291bnREZWx0YS1jb2x1bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3QtdmlldyAuZGF0
YS1ncmlkIHRoLnNpemVEZWx0YS1jb2x1bW4pOgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtdmll
dyAuZGF0YS1ncmlkIHRkLnNpemVEZWx0YS1jb2x1bW4pOgorICAgICAgICAoI2hlYXAtc25hcHNo
b3Qtc3VtbWFyeS1jb250YWluZXIpOgorICAgICAgICAoLmhlYXAtc25hcHNob3Qtc3VtbWFyeSk6
CisgICAgICAgICguaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IGNhbnZhcy5zdW1tYXJ5LWdyYXBoKToK
KyAgICAgICAgKC5oZWFwLXNuYXBzaG90LXN1bW1hcnktbGFiZWwpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6
CisKIDIwMTAtMDgtMjUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5s
cHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IDM4ZDI1NTcuLjgwZDI0MjUgMTAwNjQ0CkJp
bmFyeSBmaWxlcyBhL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGFu
ZCBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGRpZmZlcgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggYzNkMjMwYS4uNWI2MjRkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03NzcsNiArNzc3LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5o
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEdDRXZlbnQuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRI
ZWFwU25hcHNob3QuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5jZS5oIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4MTE3ZGZlLi5jMTdjNDhhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODU0
LDYgKzg1NCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxs
LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdEdDRXZlbnQuY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRHQ0V2ZW50LmgnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L1NjcmlwdEhlYXBTbmFwc2hvdC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TY3JpcHRJ
bnN0YW5jZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdEluc3RhbmNlLmgn
LAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAnLApAQCAtNDE4NCw2
ICs0MTg2LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNl
cnZlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Gb250Vmlldy5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9IQVJFbnRyeS5qcycsCisgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0hlbHBTY3JlZW4uanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNjJkMWM2OC4uZTBj
NTIyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNv
cmUucHJvCkBAIC0xMTU3LDYgKzExNTcsNyBAQCBIRUFERVJTICs9IFwKICAgICBiaW5kaW5ncy9q
cy9TY3JpcHRFdmVudExpc3RlbmVyLmggXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5oIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRHQ0V2ZW50LmggXAorICAgIGJpbmRpbmdz
L2pzL1NjcmlwdEhlYXBTbmFwc2hvdC5oIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRPYmplY3Qu
aCBcCiAgICAgYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZS5oIFwKICAgICBiaW5kaW5ncy9qcy9T
Y3JpcHRQcm9maWxlTm9kZS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IGY3OTIwNmIuLjI1Y2JkZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agpAQCAtNDkyMTYsNiArNDkyMTYsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdEhlYXBTbmFwc2hv
dC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdEluc3RhbmNlLmgiDQogCQkJCQk+DQogCQkJCTwvRmls
ZT4NCkBAIC01MjE0OCw2ICs1MjE1MiwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxIZWFwU25h
cHNob3RWaWV3LmpzIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcTWV0cmljc1NpZGViYXJQYW5lLmpz
Ig0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBlZjRiODA0Li45NzdlZGM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc1NSw2ICsyNzU1LDcgQEAKIAkJOTdFRjdERkUx
MDdFNTVCNzAwRDdDNDlDIC8qIFNjcmlwdENvbnRyb2xsZXJCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5
QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi87IH07CiAJCTlGMEQ2QjJFMTIxQkZFQkEw
MDZDMDI4OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4OCAvKiBJ
bnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLzsgfTsKIAkJOUYwRDZCMkYxMjFCRkVCQTAwNkMw
Mjg4IC8qIEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGMEQ2QjJEMTIxQkZFQkEwMDZDMDI4OCAvKiBJbnNwZWN0
b3JQcm9maWxlckFnZW50LmggKi87IH07CisJCTlGM0I5NDdFMTIyNDE3NTgwMDUzMDRFNyAvKiBT
Y3JpcHRIZWFwU25hcHNob3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3Qu
aCAqLzsgfTsKIAkJOUY2RkMxOTYxMTIyRTgyQTAwRTgwMTk2IC8qIFNjcmlwdERlYnVnU2VydmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGNkZD
MTk0MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAgKi87IH07CiAJCTlG
NkZDMTk3MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUY2RkMxOTUxMTIyRTgyQTAwRTgw
MTk2IC8qIFNjcmlwdERlYnVnU2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJOUY3MjMwNEYxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlwdFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlG
NzIzMDRDMTExODRCNDEwMEFEMDEyNiAvKiBTY3JpcHRQcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg2MjcsNiArODYyOCw3IEBACiAJ
CTk3RUY3REZEMTA3RTU1QjcwMEQ3QzQ5QyAvKiBTY3JpcHRDb250cm9sbGVyQmFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDb250cm9sbGVyQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGMEQ2QjJDMTIxQkZFQkEwMDZDMDI4
OCAvKiBJbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5RjBENkIyRDEyMUJGRUJBMDA2QzAyODggLyogSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JQcm9m
aWxlckFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlGM0I5NDdEMTIyNDE3
NTgwMDUzMDRFNyAvKiBTY3JpcHRIZWFwU25hcHNob3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2NyaXB0SGVhcFNuYXBzaG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlGNkZDMTk0MTEyMkU4MkEwMEU4MDE5NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHREZWJ1Z1NlcnZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGNkZDMTk1MTEyMkU4MkEwMEU4MDE5
NiAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTY3JpcHREZWJ1Z1NlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Rjcy
MzA0QzExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JpcHRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjEzMSw2ICsxNjEzMyw3IEBACiAJCQkJNDEwMDJDQ0IwRjY2RURFRjAwOUU2NjBE
IC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5oICovLAogCQkJCTRGRDhEMEYwMTE5QzcxOEIwMDJGQTgy
NSAvKiBTY3JpcHRHQ0V2ZW50LmNwcCAqLywKIAkJCQk0RkQ4RDBGMTExOUM3MThCMDAyRkE4MjUg
LyogU2NyaXB0R0NFdmVudC5oICovLAorCQkJCTlGM0I5NDdEMTIyNDE3NTgwMDUzMDRFNyAvKiBT
Y3JpcHRIZWFwU25hcHNob3QuaCAqLywKIAkJCQk5MzRDQzExNjBFRENBQzczMDBBNjU4RjIgLyog
U2NyaXB0SW5zdGFuY2UuaCAqLywKIAkJCQk0MUYwNjZFMzBGNjRCQ0Y2MDBBMDdFQUMgLyogU2Ny
aXB0T2JqZWN0LmNwcCAqLywKIAkJCQk0MUYwNjZFMjBGNjRCQ0Y2MDBBMDdFQUMgLyogU2NyaXB0
T2JqZWN0LmggKi8sCkBAIC0yMDM4Niw2ICsyMDM4OSw3IEBACiAJCQkJODk0N0E4MkMxMjIyMkM0
NzAwRDk1RjJEIC8qIEpTTWV0YWRhdGFDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk0
N0E4M0MxMjIyMzRGNDAwRDk1RjJEIC8qIE1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
OTQ3QTgzRDEyMjIzNEY5MDBEOTVGMkQgLyogTWV0YWRhdGFDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOUYzQjk0N0UxMjI0MTc1ODAwNTMwNEU3IC8qIFNjcmlwdEhlYXBTbmFwc2hvdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEhl
YXBTbmFwc2hvdC5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFjNzgyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRIZWFwU25hcHNob3QuaApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU2NyaXB0SGVhcFNuYXBzaG90X2gKKyNkZWZpbmUgU2NyaXB0SGVhcFNu
YXBzaG90X2gKKworI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0SGVhcFNu
YXBzaG90IDogcHVibGljIFJlZkNvdW50ZWQ8U2NyaXB0SGVhcFNuYXBzaG90PiB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+U2NyaXB0SGVhcFNuYXBzaG90KCkge30KKworICAgIFN0cmluZyB0aXRs
ZSgpIGNvbnN0IHsgcmV0dXJuICIiOyB9CisgICAgdW5zaWduZWQgaW50IHVpZCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3Bl
Y3Rvck9iamVjdEZvckhlYWQoKSBjb25zdCB7IHJldHVybiBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOyB9CisKK3ByaXZhdGU6CisgICAgU2NyaXB0SGVhcFNuYXBzaG90KCkge30KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdEhlYXBTbmFwc2hvdF9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKaW5kZXggMTgwYzQ5Zi4uMDVlN2EyNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmlu
ZSBTY3JpcHRQcm9maWxlcl9oCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyNp
bmNsdWRlICJTY3JpcHRIZWFwU25hcHNob3QuaCIKICNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIApAQCAtMzksOCArNDAsNyBAQCBjbGFzcyBTY3Jp
cHRQcm9maWxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0YXRlKiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB0aXRsZSk7Ci0gICAgc3RhdGljIHZvaWQgdGFrZUhlYXBTbmFwc2hvdCgp
IHsgfQotICAgIHN0YXRpYyBsb25nIGdldFByb2ZpbGVyTG9nTGluZXMobG9uZywgU3RyaW5nKikg
eyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4g
dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmKSB7IHJldHVybiAwOyB9CiAgICAgc3RhdGlj
IGJvb2wgaXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0SGVhcFNuYXBzaG90LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44ODVkMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRIZWFwU25hcHNob3QuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNjcmlwdEhlYXBTbmFwc2hvdC5oIgorCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSA8djgtcHJvZmlsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgU2NyaXB0SGVhcFNuYXBzaG90Ojp0aXRsZSgp
IGNvbnN0Cit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHJldHVybiB0b1dlYkNv
cmVTdHJpbmcobV9zbmFwc2hvdC0+R2V0VGl0bGUoKSk7Cit9CisKK3Vuc2lnbmVkIGludCBTY3Jp
cHRIZWFwU25hcHNob3Q6OnVpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc25hcHNob3QtPkdl
dFVpZCgpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yKGNvbnN0IHY4OjpIZWFwR3JhcGhOb2RlKiByb290KQoreworICAgIHY4
OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGxvd0xldmVscyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZW50cmllcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gY2hpbGRyZW4gPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGZvciAoaW50IGkgPSAwLCBjb3VudCA9IHJvb3QtPkdldENoaWxkcmVuQ291bnQoKTsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIG5vZGUg
PSByb290LT5HZXRDaGlsZChpKS0+R2V0VG9Ob2RlKCk7CisgICAgICAgIGlmIChub2RlLT5HZXRU
eXBlKCkgPT0gdjg6OkhlYXBHcmFwaE5vZGU6OmtJbnRlcm5hbCkgeworICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbG93TGV2ZWwgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICAgICAgbG93TGV2ZWwtPnNldE51bWJlcigiY291bnQiLCBub2RlLT5HZXRJbnN0
YW5jZXNDb3VudCgpKTsKKyAgICAgICAgICAgIGxvd0xldmVsLT5zZXROdW1iZXIoInNpemUiLCBu
b2RlLT5HZXRTZWxmU2l6ZSgpKTsKKyAgICAgICAgICAgIGxvd0xldmVsLT5zZXRTdHJpbmcoInR5
cGUiLCB0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSk7CisgICAgICAgICAgICBsb3dM
ZXZlbHMtPnNldE9iamVjdCh0b1dlYkNvcmVTdHJpbmcobm9kZS0+R2V0TmFtZSgpKSwgbG93TGV2
ZWwpOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPkdldEluc3RhbmNlc0NvdW50KCkpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFt
ZSIsIHRvV2ViQ29yZVN0cmluZyhub2RlLT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAgIGVudHJ5
LT5zZXROdW1iZXIoImNvdW50Iiwgbm9kZS0+R2V0SW5zdGFuY2VzQ291bnQoKSk7CisgICAgICAg
ICAgICBlbnRyeS0+c2V0TnVtYmVyKCJzaXplIiwgbm9kZS0+R2V0U2VsZlNpemUoKSk7CisgICAg
ICAgICAgICBlbnRyaWVzLT5zZXRPYmplY3QodG9XZWJDb3JlU3RyaW5nKG5vZGUtPkdldE5hbWUo
KSksIGVudHJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGVudHJ5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAg
IGVudHJ5LT5zZXRTdHJpbmcoImNvbnN0cnVjdG9yTmFtZSIsIHRvV2ViQ29yZVN0cmluZyhub2Rl
LT5HZXROYW1lKCkpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwLCBjb3VudCA9IG5vZGUt
PkdldENoaWxkcmVuQ291bnQoKTsgaiA8IGNvdW50OyArK2opIHsKKyAgICAgICAgICAgICAgICBj
b25zdCB2ODo6SGVhcEdyYXBoRWRnZSogdjhFZGdlID0gbm9kZS0+R2V0Q2hpbGQoaik7CisgICAg
ICAgICAgICAgICAgY29uc3Qgdjg6OkhlYXBHcmFwaE5vZGUqIHY4Q2hpbGQgPSB2OEVkZ2UtPkdl
dFRvTm9kZSgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNoaWxk
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+c2V0
U3RyaW5nKCJjb25zdHJ1Y3Rvck5hbWUiLCB0b1dlYkNvcmVTdHJpbmcodjhDaGlsZC0+R2V0TmFt
ZSgpKSk7CisgICAgICAgICAgICAgICAgY2hpbGQtPnNldE51bWJlcigiY291bnQiLCB2OEVkZ2Ut
PkdldE5hbWUoKS0+VG9JbnRlZ2VyKCktPlZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVudHJ5
LT5zZXRPYmplY3QoU3RyaW5nOjpudW1iZXIocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KHY4Q2hpbGQpKSwgY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hp
bGRyZW4tPnNldE9iamVjdChTdHJpbmc6Om51bWJlcihyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4obm9kZSkpLCBlbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0
LT5zZXRPYmplY3QoImxvd2xldmVscyIsIGxvd0xldmVscyk7CisgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoImVudHJpZXMiLCBlbnRyaWVzKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgiY2hpbGRyZW4i
LCBjaGlsZHJlbik7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBTY3JpcHRIZWFwU25hcHNob3Q6OmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9ySGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
KG1fc25hcHNob3QtPkdldFJvb3QoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SGVhcFNuYXBzaG90LmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjc5NGE1YTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEhlYXBTbmFwc2hvdC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3Jp
cHRIZWFwU25hcHNob3RfaAorI2RlZmluZSBTY3JpcHRIZWFwU25hcHNob3RfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIHY4IHsKK2NsYXNzIEhlYXBTbmFwc2hv
dDsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CisK
K2NsYXNzIFNjcmlwdEhlYXBTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFNjcmlwdEhlYXBT
bmFwc2hvdD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdEhlYXBTbmFw
c2hvdD4gY3JlYXRlKGNvbnN0IHY4OjpIZWFwU25hcHNob3QqIHNuYXBzaG90KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JpcHRIZWFwU25hcHNob3Qoc25hcHNob3QpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+U2NyaXB0SGVhcFNuYXBzaG90KCkge30KKworICAgIFN0cmlu
ZyB0aXRsZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCB1aWQoKSBjb25zdDsKKworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvckhlYWQoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBTY3JpcHRIZWFwU25hcHNob3QoY29uc3Qgdjg6OkhlYXBT
bmFwc2hvdCogc25hcHNob3QpCisgICAgICAgIDogbV9zbmFwc2hvdChzbmFwc2hvdCkKKyAgICB7
fQorCisgICAgY29uc3Qgdjg6OkhlYXBTbmFwc2hvdCogbV9zbmFwc2hvdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdEhlYXBTbmFwc2hvdF9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGUuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRQcm9maWxlLmNwcAppbmRleCA5NWFjMGRlLi4yOWJkYWQ0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGUuY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZS5jcHAKQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZEluc3BlY3Rvck9iamVjdEZvcihjb25z
dCB2ODo6Q3B1UHJvZmlsZU4KICAgICAgICAgY2hpbGRyZW4tPnB1c2hPYmplY3QoYnVpbGRJbnNw
ZWN0b3JPYmplY3RGb3IoY2hpbGQpKTsKICAgICB9CiAgICAgcmVzdWx0LT5zZXRBcnJheSgiY2hp
bGRyZW4iLCBjaGlsZHJlbik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IFNjcmlwdFByb2Zp
bGU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuY3BwCmluZGV4IDBkZTRhMjQuLmFiN2NmYTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCkBAIC0yOSw4ICsyOSw5IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKKworI2luY2x1ZGUg
Ikluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogCiAjaW5jbHVk
ZSA8djgtcHJvZmlsZXIuaD4KQEAgLTUyLDIxICs1MywxMSBAQCBQYXNzUmVmUHRyPFNjcmlwdFBy
b2ZpbGU+IFNjcmlwdFByb2ZpbGVyOjpzdG9wKFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3Ry
aW5nJgogICAgIHJldHVybiBwcm9maWxlID8gU2NyaXB0UHJvZmlsZTo6Y3JlYXRlKHByb2ZpbGUp
IDogMDsKIH0KIAotdm9pZCBTY3JpcHRQcm9maWxlcjo6dGFrZUhlYXBTbmFwc2hvdCgpCi17Ci0g
ICAgdjg6OlY4OjpSZXN1bWVQcm9maWxlckV4KHY4OjpQUk9GSUxFUl9NT0RVTEVfSEVBUF9TTkFQ
U0hPVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHY4OjpQUk9GSUxFUl9NT0RVTEVf
SEVBUF9TVEFUUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHY4OjpQUk9GSUxFUl9N
T0RVTEVfSlNfQ09OU1RSVUNUT1JTKTsKLX0KLQotbG9uZyBTY3JpcHRQcm9maWxlcjo6Z2V0UHJv
ZmlsZXJMb2dMaW5lcyhsb25nIHBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpCitQYXNzUmVmUHRyPFNj
cmlwdEhlYXBTbmFwc2hvdD4gU2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QoY29uc3Qg
U3RyaW5nJiB0aXRsZSkKIHsKLSAgICBzdGF0aWMgY2hhciBidWZmZXJbNjU1MzZdOwotICAgIGNv
bnN0IGludCByZWFkU2l6ZSA9IHY4OjpWODo6R2V0TG9nTGluZXMocG9zaXRpb24sIGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlcikgLSAxKTsKLSAgICBidWZmZXJbcmVhZFNpemVdID0gJ1wwJzsKLSAgICBw
b3NpdGlvbiArPSByZWFkU2l6ZTsKLSAgICAqZGF0YSA9IGJ1ZmZlcjsKLSAgICByZXR1cm4gcG9z
aXRpb247CisgICAgdjg6OkhhbmRsZVNjb3BlIGhzOworICAgIGNvbnN0IHY4OjpIZWFwU25hcHNo
b3QqIHNuYXBzaG90ID0gdjg6OkhlYXBQcm9maWxlcjo6VGFrZVNuYXBzaG90KHY4U3RyaW5nKHRp
dGxlKSwgdjg6OkhlYXBTbmFwc2hvdDo6a0FnZ3JlZ2F0ZWQpOworICAgIHJldHVybiBzbmFwc2hv
dCA/IFNjcmlwdEhlYXBTbmFwc2hvdDo6Y3JlYXRlKHNuYXBzaG90KSA6IDA7CiB9CiAKIGJvb2wg
U2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0UHJvZmlsZXIuaAppbmRleCBiMWFiM2IxLi5iNzVhMDU0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRQcm9maWxlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFNjcmlwdFByb2Zp
bGVyX2gKIAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0SGVh
cFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAKQEAgLTM5LDEyICs0MCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKwogY2xhc3MgU2NyaXB0UHJvZmlsZXIgOiBwdWJsaWMg
Tm9uY29weWFibGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHN0YXJ0KFNjcmlwdFN0YXRl
KiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gc3RvcChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUp
OwotICAgIHN0YXRpYyB2b2lkIHRha2VIZWFwU25hcHNob3QoKTsKLSAgICBzdGF0aWMgbG9uZyBn
ZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9zaXRpb24sIFN0cmluZyogZGF0YSk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiB0YWtlSGVhcFNuYXBzaG90KGNvbnN0
IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyBib29sIGlzUHJvZmlsZXJBbHdheXNFbmFibGVk
KCk7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBhNTZlZjE0Li5hNWI3MjIxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTE1MCwxMyArMTUwLDEyIEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCiAg
ICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2b2lkIGdldFByb2ZpbGVIZWFkZXJzKGluIGxvbmcg
Y2FsbElkLCBvdXQgQXJyYXkgaGVhZGVycyk7Ci0gICAgICAgIFtoYW5kbGVyPVByb2ZpbGVyXSB2
b2lkIGdldFByb2ZpbGUoaW4gbG9uZyBjYWxsSWQsIGluIHVuc2lnbmVkIGxvbmcgdWlkLCBvdXQg
T2JqZWN0IHByb2ZpbGUpOworICAgICAgICBbaGFuZGxlcj1Qcm9maWxlcl0gdm9pZCBnZXRQcm9m
aWxlKGluIGxvbmcgY2FsbElkLCBpbiBTdHJpbmcgdHlwZSwgaW4gdW5zaWduZWQgbG9uZyB1aWQs
IG91dCBPYmplY3QgcHJvZmlsZSk7CiAKLSAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQg
cmVtb3ZlUHJvZmlsZShpbiB1bnNpZ25lZCBsb25nIHVpZCk7CisgICAgICAgIFtoYW5kbGVyPVBy
b2ZpbGVyXSB2b2lkIHJlbW92ZVByb2ZpbGUoaW4gU3RyaW5nIHR5cGUsIGluIHVuc2lnbmVkIGxv
bmcgdWlkKTsKICAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgY2xlYXJQcm9maWxlcygp
OwogCi0gICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgdGFrZUhlYXBTbmFwc2hvdCgpOwot
ICAgICAgICBbaGFuZGxlcj1CYWNrZW5kXSB2b2lkIGdldFByb2ZpbGVyTG9nTGluZXMoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgaW5Qb3NpdGlvbiwgb3V0IGxvbmcgb3V0UG9zaXRpb24sIG91dCBT
dHJpbmcgbG9nKTsKKyAgICAgICAgW2hhbmRsZXI9UHJvZmlsZXJdIHZvaWQgdGFrZUhlYXBTbmFw
c2hvdCgpOwogI2VuZGlmCiAgICAgICAgIFtoYW5kbGVyPUJhY2tlbmRdIHZvaWQgc2V0SW5qZWN0
ZWRTY3JpcHRTb3VyY2UoaW4gU3RyaW5nIHNjcmlwdFNvdXJjZSk7CiAgICAgICAgIFtoYW5kbGVy
PUJhY2tlbmRdIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGluIGxvbmcgY2FsbElkLCBp
biBsb25nIGluamVjdGVkU2NyaXB0SWQsIGluIFN0cmluZyBtZXRob2ROYW1lLCBpbiBTdHJpbmcg
YXJndW1lbnRzLCBvdXQgVmFsdWUgcmVzdWx0LCBvdXQgYm9vbGVhbiBpc0V4Y2VwdGlvbik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDk5ZjQwYTkuLjc5MWUzYTYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC02OCwxNyArNjgsNiBA
QCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQogICAg
ICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGFs
d2F5cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQmFja2VuZDo6dGFrZUhlYXBTbmFwc2hvdCgpCi17
Ci0gICAgU2NyaXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QoKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kOjpnZXRQcm9maWxlckxvZ0xpbmVzKGxvbmcgcG9zaXRpb24sIGxvbmcqIG91
dFBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpCi17Ci0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBtYWtl
IGluc3BlY3RvciBkaXNwYXRjaGVyIHBsdWdnYWJsZSwgc28gdGhhdCBlbWJlZGRlcnMgY291bGQg
Y29udHJpYnV0ZSBBUElzIGluc3RlYWQgb2YgcG9sbHV0aW5nIHRoZSBjb3JlIG9uZQotICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzM1NwotICAgICpvdXRQ
b3NpdGlvbiA9IFNjcmlwdFByb2ZpbGVyOjpnZXRQcm9maWxlckxvZ0xpbmVzKHBvc2l0aW9uLCBk
YXRhKTsKLX0KICNlbmRpZgogCiB2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNldEluamVjdGVkU2Ny
aXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCmluZGV4IDIzYjMxYTMuLjFmY2VjOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmgKQEAgLTYwLDggKzYwLDYgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCiAgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7Ci0gICAg
dm9pZCB0YWtlSGVhcFNuYXBzaG90KCk7Ci0gICAgdm9pZCBnZXRQcm9maWxlckxvZ0xpbmVzKGxv
bmcgcG9zaXRpb24sIGxvbmcqIG91dFBvc2l0aW9uLCBTdHJpbmcqIGRhdGEpOwogI2VuZGlmCiAK
ICAgICB2b2lkIHNldEluamVjdGVkU2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggYTcz
NDY5YS4uOTE2MWMzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSAiU2NyaXB0
SGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNj
cmlwdFByb2ZpbGVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTEsNiArNTIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluaXRpYXRlZCI7
CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBIZWFwUHJvZmlsZVR5cGUgPSAiSEVBUCI7CiAKIFBhc3NPd25Q
dHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRl
KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCiB7CkBAIC02NSw2ICs2
Nyw3IEBAIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29uCiAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0
aWF0ZWRQcm9maWxlKGZhbHNlKQogICAgICwgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVO
dW1iZXIoLTEpCiAgICAgLCBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcigxKQorICAg
ICwgbV9uZXh0VXNlckluaXRpYXRlZEhlYXBTbmFwc2hvdE51bWJlcigxKQogewogfQogCkBAIC0x
MDQsNiArMTA3LDE1IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjCiAgICAgcmV0dXJuIGhlYWRl
cjsKIH0KIAorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6OmNyZWF0ZVNuYXBzaG90SGVhZGVyKGNvbnN0IFNjcmlwdEhlYXBTbmFwc2hvdCYgc25hcHNo
b3QpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVyID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBoZWFkZXItPnNldFN0cmluZygidGl0bGUiLCBzbmFwc2hvdC50
aXRsZSgpKTsKKyAgICBoZWFkZXItPnNldE51bWJlcigidWlkIiwgc25hcHNob3QudWlkKCkpOwor
ICAgIGhlYWRlci0+c2V0U3RyaW5nKCJ0eXBlSWQiLCBTdHJpbmcoSGVhcFByb2ZpbGVUeXBlKSk7
CisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojpk
aXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKQEAgLTEzOCwyOCArMTUwLDQ2IEBAIHZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZUhlYWRlcnMoUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiogaGVhZGVycykKICAgICBQcm9maWxlc01hcDo6aXRlcmF0b3IgcHJvZmlsZXNF
bmQgPSBtX3Byb2ZpbGVzLmVuZCgpOwogICAgIGZvciAoUHJvZmlsZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9wcm9maWxlcy5iZWdpbigpOyBpdCAhPSBwcm9maWxlc0VuZDsgKytpdCkKICAgICAgICAg
KCpoZWFkZXJzKS0+cHVzaE9iamVjdChjcmVhdGVQcm9maWxlSGVhZGVyKCppdC0+c2Vjb25kKSk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZSh1bnNpZ25lZCB1
aWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBwcm9maWxlT2JqZWN0KQotewotICAgIFByb2Zp
bGVzTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZmlsZXMuZmluZCh1aWQpOwotICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKSB7Ci0gICAgICAgICpwcm9maWxlT2JqZWN0ID0gY3JlYXRlUHJv
ZmlsZUhlYWRlcigqaXQtPnNlY29uZCk7Ci0gICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9i
amVjdCgiaGVhZCIsIGl0LT5zZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsK
KyAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBzbmFwc2hvdHNFbmQgPSBtX3NuYXBzaG90
cy5lbmQoKTsKKyAgICBmb3IgKEhlYXBTbmFwc2hvdHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zbmFw
c2hvdHMuYmVnaW4oKTsgaXQgIT0gc25hcHNob3RzRW5kOyArK2l0KQorICAgICAgICAoKmhlYWRl
cnMpLT5wdXNoT2JqZWN0KGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25kKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0UHJvZmlsZShjb25zdCBTdHJpbmcmIHR5
cGUsIHVuc2lnbmVkIHVpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHByb2ZpbGVPYmplY3Qp
Cit7CisgICAgaWYgKHR5cGUgPT0gQ1BVUHJvZmlsZVR5cGUpIHsKKyAgICAgICAgUHJvZmlsZXNN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9maWxlcy5maW5kKHVpZCk7CisgICAgICAgIGlmIChpdCAh
PSBtX3Byb2ZpbGVzLmVuZCgpKSB7CisgICAgICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0
ZVByb2ZpbGVIZWFkZXIoKml0LT5zZWNvbmQpOworICAgICAgICAgICAgKCpwcm9maWxlT2JqZWN0
KS0+c2V0T2JqZWN0KCJoZWFkIiwgaXQtPnNlY29uZC0+YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JI
ZWFkKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09IEhlYXBQcm9maWxlVHlw
ZSkgeworICAgICAgICBIZWFwU25hcHNob3RzTWFwOjppdGVyYXRvciBpdCA9IG1fc25hcHNob3Rz
LmZpbmQodWlkKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fc25hcHNob3RzLmVuZCgpKSB7CisgICAg
ICAgICAgICAqcHJvZmlsZU9iamVjdCA9IGNyZWF0ZVNuYXBzaG90SGVhZGVyKCppdC0+c2Vjb25k
KTsKKyAgICAgICAgICAgICgqcHJvZmlsZU9iamVjdCktPnNldE9iamVjdCgiaGVhZCIsIGl0LT5z
ZWNvbmQtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9ySGVhZCgpKTsKKyAgICAgICAgfQogICAgIH0K
IH0KIAotdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpyZW1vdmVQcm9maWxlKHVuc2lnbmVk
IHVpZCkKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVtb3ZlUHJvZmlsZShjb25zdCBT
dHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCkKIHsKLSAgICBpZiAobV9wcm9maWxlcy5jb250YWlu
cyh1aWQpKQotICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworICAgIGlmICh0eXBlID09
IENQVVByb2ZpbGVUeXBlKSB7CisgICAgICAgIGlmIChtX3Byb2ZpbGVzLmNvbnRhaW5zKHVpZCkp
CisgICAgICAgICAgICBtX3Byb2ZpbGVzLnJlbW92ZSh1aWQpOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBIZWFwUHJvZmlsZVR5cGUpIHsKKyAgICAgICAgaWYgKG1fc25hcHNob3RzLmNvbnRhaW5z
KHVpZCkpCisgICAgICAgICAgICBtX3NuYXBzaG90cy5yZW1vdmUodWlkKTsKKyAgICB9CiB9CiAK
IHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6cmVzZXRTdGF0ZSgpCiB7CiAgICAgbV9wcm9m
aWxlcy5jbGVhcigpOworICAgIG1fc25hcHNob3RzLmNsZWFyKCk7CiAgICAgbV9jdXJyZW50VXNl
ckluaXRpYXRlZFByb2ZpbGVOdW1iZXIgPSAxOwogICAgIG1fbmV4dFVzZXJJbml0aWF0ZWRQcm9m
aWxlTnVtYmVyID0gMTsKKyAgICBtX25leHRVc2VySW5pdGlhdGVkSGVhcFNuYXBzaG90TnVtYmVy
ID0gMTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+cmVzZXRQcm9m
aWxlc1BhbmVsKCk7CiB9CkBAIC0xOTksNiArMjI5LDE3IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudDo6c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIHRvZ2dsZVJlY29yZEJ1
dHRvbihmYWxzZSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dGFrZUhlYXBT
bmFwc2hvdCgpCit7CisgICAgU3RyaW5nIHRpdGxlID0gU3RyaW5nOjpmb3JtYXQoIiVzLiVkIiwg
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lLCBtX25leHRVc2VySW5pdGlhdGVkSGVhcFNuYXBzaG90
TnVtYmVyKyspOworICAgIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHNuYXBzaG90ID0gU2Ny
aXB0UHJvZmlsZXI6OnRha2VIZWFwU25hcHNob3QodGl0bGUpOworICAgIGlmIChzbmFwc2hvdCkg
eworICAgICAgICBtX3NuYXBzaG90cy5hZGQoc25hcHNob3QtPnVpZCgpLCBzbmFwc2hvdCk7Cisg
ICAgICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICAgICAgbV9mcm9udGVuZC0+YWRkUHJvZmls
ZUhlYWRlcihjcmVhdGVTbmFwc2hvdEhlYWRlcigqc25hcHNob3QpKTsKKyAgICB9Cit9CisKIHZv
aWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6dG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9m
aWxpbmcpCiB7CiAgICAgaWYgKG1fZnJvbnRlbmQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmgKaW5kZXggOTU5M2ViYS4uNDIxZWZiMCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtNDQsNiArNDQsNyBAQCBjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiBjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIFNjcmlwdEhlYXBTbmFw
c2hvdDsKIGNsYXNzIFNjcmlwdFByb2ZpbGU7CiAKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNjAsMjIgKzYxLDI1IEBAIHB1YmxpYzoKICAg
ICBib29sIGVuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0KICAgICBTdHJpbmcgZ2V0Q3Vy
cmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZShib29sIGluY3JlbWVudFByb2ZpbGVOdW1iZXIg
PSBmYWxzZSk7CiAgICAgdm9pZCBnZXRQcm9maWxlSGVhZGVycyhSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiBoZWFkZXJzKTsKLSAgICB2b2lkIGdldFByb2ZpbGUodW5zaWduZWQgdWlkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogcHJvZmlsZU9iamVjdCk7CisgICAgdm9pZCBnZXRQcm9maWxlKGNv
bnN0IFN0cmluZyYgdHlwZSwgdW5zaWduZWQgdWlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
cHJvZmlsZU9iamVjdCk7CiAgICAgYm9vbCBpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
KCkgeyByZXR1cm4gbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsgfQotICAgIHZvaWQg
cmVtb3ZlUHJvZmlsZSh1bnNpZ25lZCB1aWQpOworICAgIHZvaWQgcmVtb3ZlUHJvZmlsZShjb25z
dCBTdHJpbmcmIHR5cGUsIHVuc2lnbmVkIHVpZCk7CiAgICAgdm9pZCByZXNldFN0YXRlKCk7CiAg
ICAgdm9pZCBzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpIHsgbV9mcm9u
dGVuZCA9IGZyb250ZW5kOyB9CiAgICAgdm9pZCBzdGFydFByb2ZpbGluZygpIHsgc3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2Zp
bGluZygpOwogICAgIHZvaWQgc3RvcFByb2ZpbGluZygpIHsgc3RvcFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoKTsgfQogICAgIHZvaWQgc3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2
b2lkIHRha2VIZWFwU25hcHNob3QoKTsKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29s
IGlzUHJvZmlsaW5nKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQg
aW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiA+IEhlYXBTbmFw
c2hvdHNNYXA7CiAKICAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xs
ZXIqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlUHJvZmlsZUhlYWRl
cihjb25zdCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gY3JlYXRlU25hcHNob3RIZWFkZXIoY29uc3QgU2NyaXB0SGVhcFNuYXBzaG90JiBz
bmFwc2hvdCk7CiAKICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xs
ZXI7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CkBAIC04Myw3ICs4Nyw5IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOwogICAg
IGludCBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKICAgICB1bnNpZ25lZCBt
X25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcjsKKyAgICB1bnNpZ25lZCBtX25leHRVc2Vy
SW5pdGlhdGVkSGVhcFNuYXBzaG90TnVtYmVyOwogICAgIFByb2ZpbGVzTWFwIG1fcHJvZmlsZXM7
CisgICAgSGVhcFNuYXBzaG90c01hcCBtX3NuYXBzaG90czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25h
cHNob3RWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZp
ZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg5NmVmYwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3
LmpzCkBAIC0wLDAgKzEsMTAxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGVvdmVydmlldyBIZWFwIHNuYXBzaG90
IHZpZXcgaW1wbGVtZW50YXRpb24uCisgKi8KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcgPSBmdW5jdGlvbihwYXJlbnQsIHByb2ZpbGUpCit7CisgICAgV2ViSW5zcGVjdG9yLlZpZXcu
Y2FsbCh0aGlzKTsKKworICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoZWFwLXNuYXBz
aG90LXZpZXciKTsKKworICAgIHRoaXMucGFyZW50ID0gcGFyZW50OworICAgIHRoaXMucGFyZW50
LmFkZEV2ZW50TGlzdGVuZXIoInByb2ZpbGUgYWRkZWQiLCB0aGlzLl91cGRhdGVCYXNlT3B0aW9u
cywgdGhpcyk7CisKKyAgICB0aGlzLnNob3dDb3VudEFzUGVyY2VudCA9IGZhbHNlOworICAgIHRo
aXMuc2hvd1NpemVBc1BlcmNlbnQgPSBmYWxzZTsKKyAgICB0aGlzLnNob3dDb3VudERlbHRhQXNQ
ZXJjZW50ID0gZmFsc2U7CisgICAgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID0gZmFsc2U7
CisKKyAgICB0aGlzLmNhdGVnb3JpZXMgPSB7CisgICAgICAgIGNvZGU6IG5ldyBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VDYXRlZ29yeSgiY29kZSIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29kZSIp
LCAicmdiKDI1NSwxMjEsMCkiKSwKKyAgICAgICAgZGF0YTogbmV3IFdlYkluc3BlY3Rvci5SZXNv
dXJjZUNhdGVnb3J5KCJkYXRhIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPYmplY3RzIiksICJy
Z2IoNDcsMTAyLDIzNikiKQorICAgIH07CisKKyAgICB2YXIgc3VtbWFyeUNvbnRhaW5lciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHN1bW1hcnlDb250YWluZXIuaWQgPSAi
aGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWNvbnRhaW5lciI7CisKKyAgICB0aGlzLmNvdW50c1N1bW1h
cnlCYXIgPSBuZXcgV2ViSW5zcGVjdG9yLlN1bW1hcnlCYXIodGhpcy5jYXRlZ29yaWVzKTsKKyAg
ICB0aGlzLmNvdW50c1N1bW1hcnlCYXIuZWxlbWVudC5jbGFzc05hbWUgPSAiaGVhcC1zbmFwc2hv
dC1zdW1tYXJ5IjsKKyAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIuY2FsY3VsYXRvciA9IG5ldyBX
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IoKTsKKyAgICB2YXIgY291bnRz
TGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBjb3VudHNMYWJlbC5j
bGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWxhYmVsIjsKKyAgICBjb3VudHNMYWJl
bC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ291bnQiKTsKKyAgICB0aGlz
LmNvdW50c1N1bW1hcnlCYXIuZWxlbWVudC5hcHBlbmRDaGlsZChjb3VudHNMYWJlbCk7CisgICAg
c3VtbWFyeUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvdW50c1N1bW1hcnlCYXIuZWxlbWVu
dCk7CisKKyAgICB0aGlzLnNpemVzU3VtbWFyeUJhciA9IG5ldyBXZWJJbnNwZWN0b3IuU3VtbWFy
eUJhcih0aGlzLmNhdGVnb3JpZXMpOworICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmVsZW1lbnQu
Y2xhc3NOYW1lID0gImhlYXAtc25hcHNob3Qtc3VtbWFyeSI7CisgICAgdGhpcy5zaXplc1N1bW1h
cnlCYXIuY2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlTaXplQ2FsY3Vs
YXRvcigpOworICAgIHZhciBzaXplc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFi
ZWwiKTsKKyAgICBzaXplc0xhYmVsLmNsYXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnkt
bGFiZWwiOworICAgIHNpemVzTGFiZWwudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNpemUiKTsKKyAgICB0aGlzLnNpemVzU3VtbWFyeUJhci5lbGVtZW50LmFwcGVuZENoaWxk
KHNpemVzTGFiZWwpOworICAgIHN1bW1hcnlDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zaXpl
c1N1bW1hcnlCYXIuZWxlbWVudCk7CisKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3Vt
bWFyeUNvbnRhaW5lcik7CisKKyAgICB2YXIgY29sdW1ucyA9IHsKKyAgICAgICAgY29uczogeyB0
aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb25zdHJ1Y3RvciIpLCBkaXNjbG9zdXJlOiB0
cnVlLCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICBjb3VudDogeyB0aXRsZTogV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJDb3VudCIpLCB3aWR0aDogIjU0cHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAor
ICAgICAgICBzaXplOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSwgd2lk
dGg6ICI3MnB4Iiwgc29ydDogImRlc2NlbmRpbmciLCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAg
ICAvLyBceGIxIGlzIGEgInBsdXMtbWludXMiIHNpZ24uCisgICAgICAgIGNvdW50RGVsdGE6IHsg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiXHhiMSBDb3VudCIpLCB3aWR0aDogIjcycHgi
LCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICBzaXplRGVsdGE6IHsgdGl0bGU6IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiXHhiMSBTaXplIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVl
IH0KKyAgICB9OworCisgICAgdGhpcy5kYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3IuRGF0YUdy
aWQoY29sdW1ucyk7CisgICAgdGhpcy5kYXRhR3JpZC5hZGRFdmVudExpc3RlbmVyKCJzb3J0aW5n
IGNoYW5nZWQiLCB0aGlzLl9zb3J0RGF0YSwgdGhpcyk7CisgICAgdGhpcy5kYXRhR3JpZC5lbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX21vdXNlRG93bkluRGF0YUdy
aWQuYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMu
ZGF0YUdyaWQuZWxlbWVudCk7CisKKyAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlOworCisgICAg
dGhpcy5iYXNlU2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIp
OworICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRl
bSI7CisgICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2Ui
LCB0aGlzLl9jaGFuZ2VCYXNlLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLl91cGRhdGVC
YXNlT3B0aW9ucygpOworCisgICAgdGhpcy5wZXJjZW50QnV0dG9uID0gbmV3IFdlYkluc3BlY3Rv
ci5TdGF0dXNCYXJCdXR0b24oIiIsICJwZXJjZW50LXRpbWUtc3RhdHVzLWJhci1pdGVtIHN0YXR1
cy1iYXItaXRlbSIpOworICAgIHRoaXMucGVyY2VudEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJj
bGljayIsIHRoaXMuX3BlcmNlbnRDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAgIHRo
aXMuX2xvYWRQcm9maWxlKHRoaXMucHJvZmlsZSwgcHJvZmlsZUNhbGxiYWNrLmJpbmQodGhpcykp
OworCisgICAgZnVuY3Rpb24gcHJvZmlsZUNhbGxiYWNrKHByb2ZpbGUpCisgICAgeworICAgICAg
ICB2YXIgbGlzdCA9IHRoaXMuX2dldFByb2ZpbGVzKCk7CisgICAgICAgIHZhciBwcm9maWxlSW5k
ZXg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIGlmIChsaXN0W2ldLnVpZCA9PT0gcHJvZmlsZS51aWQpIHsKKyAgICAgICAgICAgICAg
ICBwcm9maWxlSW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICBpZiAocHJvZmlsZUluZGV4ID4gMCkKKyAgICAgICAgICAgIHRoaXMuYmFzZVNl
bGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHByb2ZpbGVJbmRleCAtIDE7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IHBy
b2ZpbGVJbmRleDsKKyAgICAgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QocmVzZXRDb21wbGV0
ZWQuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVzZXRDb21wbGV0ZWQoKQor
ICAgIHsKKyAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVBlcmNl
bnRCdXR0b24oKTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5w
cm90b3R5cGUgPSB7CisgICAgZ2V0IHN0YXR1c0Jhckl0ZW1zKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBbdGhpcy5iYXNlU2VsZWN0RWxlbWVudCwgdGhpcy5wZXJjZW50QnV0dG9uLmVsZW1lbnRd
OworICAgIH0sCisKKyAgICBnZXQgcHJvZmlsZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fcHJvZmlsZTsKKyAgICB9LAorCisgICAgc2V0IHByb2ZpbGUocHJvZmlsZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3Byb2ZpbGUgPSBwcm9maWxlOworICAgIH0sCisKKyAgICBzaG93OiBmdW5j
dGlvbihwYXJlbnRFbGVtZW50KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJv
dG90eXBlLnNob3cuY2FsbCh0aGlzLCBwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgdGhpcy5kYXRh
R3JpZC51cGRhdGVXaWR0aHMoKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlLmhpZGUuY2FsbCh0aGlzKTsK
KyAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CisgICAgfSwKKwor
ICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZGF0YUdyaWQp
CisgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLnVwZGF0ZVdpZHRocygpOworICAgIH0sCisKKyAg
ICByZWZyZXNoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRhdGFHcmlkLnJlbW92
ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5zbmFwc2hvdERhdGFH
cmlkTGlzdC5jaGlsZHJlbjsKKyAgICAgICAgdmFyIGNvdW50ID0gY2hpbGRyZW4ubGVuZ3RoOwor
ICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCisgICAg
ICAgICAgICB0aGlzLmRhdGFHcmlkLmFwcGVuZENoaWxkKGNoaWxkcmVuW2luZGV4XSk7CisKKyAg
ICAgICAgdGhpcy5fdXBkYXRlU3VtbWFyeUdyYXBoKCk7CisgICAgfSwKKworICAgIHJlZnJlc2hT
aG93QXNQZXJjZW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdXBkYXRlUGVy
Y2VudEJ1dHRvbigpOworICAgICAgICB0aGlzLnJlZnJlc2hWaXNpYmxlRGF0YSgpOworICAgIH0s
CisKKyAgICBfZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdzOiBmdW5jdGlvbihub2RlKQorICAgIHsK
KyAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uOworICAgICAgICBk
ZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50Q29sdW1uOworICAgICAgICBkZWxldGUgbm9k
ZS5fc2VhcmNoTWF0Y2hlZFNpemVDb2x1bW47CisgICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hN
YXRjaGVkQ291bnREZWx0YUNvbHVtbjsKKyAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNo
ZWRTaXplRGVsdGFDb2x1bW47CisgICAgfSwKKworICAgIHNlYXJjaENhbmNlbGVkOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fc2VhcmNoUmVzdWx0cykgeworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICAgICAgdmFyIHByb2ZpbGVOb2RlID0gdGhpcy5fc2VhcmNoUmVzdWx0c1tp
XS5wcm9maWxlTm9kZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVTZWFyY2hNYXRjaGVk
RmxhZ3MocHJvZmlsZU5vZGUpOworICAgICAgICAgICAgICAgIHByb2ZpbGVOb2RlLnJlZnJlc2go
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWFy
Y2hGaW5pc2hlZENhbGxiYWNrOworICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5k
ZXggPSAtMTsKKyAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOworICAgIH0sCisKKyAg
ICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgZmluaXNoZWRDYWxsYmFjaykKKyAgICB7
CisgICAgICAgIC8vIENhbGwgc2VhcmNoQ2FuY2VsZWQgc2luY2UgaXQgd2lsbCByZXNldCBldmVy
eXRoaW5nIHdlIG5lZWQgYmVmb3JlIGRvaW5nIGEgbmV3IHNlYXJjaC4KKyAgICAgICAgdGhpcy5z
ZWFyY2hDYW5jZWxlZCgpOworCisgICAgICAgIHF1ZXJ5ID0gcXVlcnkudHJpbSgpOworCisgICAg
ICAgIGlmICghcXVlcnkubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sgPSBmaW5pc2hlZENhbGxiYWNrOworCisgICAgICAg
IHZhciBoZWxwZXIgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXI7
CisKKyAgICAgICAgdmFyIG9wZXJhdGlvbkFuZE51bWJlciA9IGhlbHBlci5wYXJzZU9wZXJhdGlv
bkFuZE51bWJlcihxdWVyeSk7CisgICAgICAgIHZhciBvcGVyYXRpb24gPSBvcGVyYXRpb25BbmRO
dW1iZXJbMF07CisgICAgICAgIHZhciBxdWVyeU51bWJlciA9IG9wZXJhdGlvbkFuZE51bWJlclsx
XTsKKworICAgICAgICB2YXIgcGVyY2VudFVuaXRzID0gaGVscGVyLnBlcmNlbnRzLnRlc3QocXVl
cnkpOworICAgICAgICB2YXIgbWVnYUJ5dGVzVW5pdHMgPSBoZWxwZXIubWVnYUJ5dGVzLnRlc3Qo
cXVlcnkpOworICAgICAgICB2YXIga2lsb0J5dGVzVW5pdHMgPSBoZWxwZXIua2lsb0J5dGVzLnRl
c3QocXVlcnkpOworICAgICAgICB2YXIgYnl0ZXNVbml0cyA9IGhlbHBlci5ieXRlcy50ZXN0KHF1
ZXJ5KTsKKworICAgICAgICB2YXIgcXVlcnlOdW1iZXJCeXRlcyA9IChtZWdhQnl0ZXNVbml0cyA/
IChxdWVyeU51bWJlciAqIDEwMjQgKiAxMDI0KSA6IChraWxvQnl0ZXNVbml0cyA/IChxdWVyeU51
bWJlciAqIDEwMjQpIDogcXVlcnlOdW1iZXIpKTsKKworICAgICAgICBmdW5jdGlvbiBtYXRjaGVz
UXVlcnkoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2RlbGV0ZVNlYXJjaE1hdGNo
ZWRGbGFncyhoZWFwU25hcHNob3REYXRhR3JpZE5vZGUpOworCisgICAgICAgICAgICBpZiAocGVy
Y2VudFVuaXRzKSB7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9z
ZWFyY2hNYXRjaGVkQ291bnRDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdyaWRO
b2RlLmNvdW50UGVyY2VudCwgcXVlcnlOdW1iZXIpOworICAgICAgICAgICAgICAgIGhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVDb2x1bW4gPSBvcGVyYXRpb24oaGVh
cFNuYXBzaG90RGF0YUdyaWROb2RlLnNpemVQZXJjZW50LCBxdWVyeU51bWJlcik7CisgICAgICAg
ICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0
YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnREZWx0YVBl
cmNlbnQsIHF1ZXJ5TnVtYmVyKTsKKyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGUuX3NlYXJjaE1hdGNoZWRTaXplRGVsdGFDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBz
aG90RGF0YUdyaWROb2RlLnNpemVEZWx0YVBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobWVnYUJ5dGVzVW5pdHMgfHwga2lsb0J5dGVzVW5pdHMgfHwgYnl0ZXNV
bml0cykgeworICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNo
TWF0Y2hlZFNpemVDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLnNp
emUsIHF1ZXJ5TnVtYmVyQnl0ZXMpOworICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFH
cmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25h
cHNob3REYXRhR3JpZE5vZGUuc2l6ZURlbHRhLCBxdWVyeU51bWJlckJ5dGVzKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9z
ZWFyY2hNYXRjaGVkQ291bnRDb2x1bW4gPSBvcGVyYXRpb24oaGVhcFNuYXBzaG90RGF0YUdyaWRO
b2RlLmNvdW50LCBxdWVyeU51bWJlcik7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFw
U25hcHNob3REYXRhR3JpZE5vZGUuY291bnREZWx0YSwgcXVlcnlOdW1iZXIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLmNvbnN0cnVj
dG9yTmFtZS5oYXNTdWJzdHJpbmcocXVlcnksIHRydWUpKQorICAgICAgICAgICAgICAgIGhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1bW4gPSB0cnVlOworCisg
ICAgICAgICAgICBpZiAoaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ29u
c0NvbHVtbiB8fAorICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2Vh
cmNoTWF0Y2hlZENvdW50Q29sdW1uIHx8CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbiB8fAorICAgICAgICAgICAgICAgIGhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1bW4gfHwK
KyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRT
aXplRGVsdGFDb2x1bW4pIHsKKyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5v
ZGUucmVmcmVzaCgpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
Y3VycmVudCA9IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QuY2hpbGRyZW5bMF07CisgICAgICAg
IHZhciBkZXB0aCA9IDA7CisgICAgICAgIHZhciBpbmZvID0ge307CisKKyAgICAgICAgLy8gVGhl
IHNlY29uZCBhbmQgc3Vic2VxdWVudCBsZXZlbHMgb2YgaGVhcCBzbmFwc2hvdCBub2RlcyByZXBy
ZXNlbnQgcmV0YWluZXJzLAorICAgICAgICAvLyBzbyByZWN1cnNpdmUgZXhwYW5zaW9uIHdpbGwg
YmUgaW5maW5pdGUsIHNpbmNlIGEgZ3JhcGggaXMgYmVpbmcgdHJhdmVyc2VkLgorICAgICAgICAv
LyBTbyBkZWZhdWx0IHRvIGEgcmVjdXJzaW9uIGNhcCBvZiAyIGxldmVscy4KKyAgICAgICAgY29u
c3QgbWF4RGVwdGggPSAyOworCisgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAg
ICBpZiAobWF0Y2hlc1F1ZXJ5KGN1cnJlbnQpKQorICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJj
aFJlc3VsdHMucHVzaCh7IHByb2ZpbGVOb2RlOiBjdXJyZW50IH0pOworICAgICAgICAgICAgY3Vy
cmVudCA9IGN1cnJlbnQudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgbnVsbCwgKGRlcHRoID49IG1h
eERlcHRoKSwgaW5mbyk7CisgICAgICAgICAgICBkZXB0aCArPSBpbmZvLmRlcHRoQ2hhbmdlOwor
ICAgICAgICB9CisKKyAgICAgICAgZmluaXNoZWRDYWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCk7CisgICAgfSwKKworICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0OiBX
ZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVz
dWx0LAorICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxl
Vmlldy5wcm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCwKKyAgICBqdW1wVG9OZXh0U2Vh
cmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb05l
eHRTZWFyY2hSZXN1bHQsCisgICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IFdlYkluc3Bl
Y3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQs
CisgICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZp
ZXcucHJvdG90eXBlLnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdCwKKyAgICBzaG93aW5nTGFzdFNl
YXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5zaG93aW5n
TGFzdFNlYXJjaFJlc3VsdCwKKyAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3Iu
Q1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLl9qdW1wVG9TZWFyY2hSZXN1bHQsCisKKyAgICByZWZy
ZXNoVmlzaWJsZURhdGE6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBjaGlsZCA9IHRo
aXMuZGF0YUdyaWQuY2hpbGRyZW5bMF07CisgICAgICAgIHdoaWxlIChjaGlsZCkgeworICAgICAg
ICAgICAgY2hpbGQucmVmcmVzaCgpOworICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC50cmF2ZXJz
ZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl91
cGRhdGVTdW1tYXJ5R3JhcGgoKTsKKyAgICB9LAorCisgICAgX2NoYW5nZUJhc2U6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmJhc2VTbmFwc2hvdC51aWQgPT09IHRoaXMuX2dl
dFByb2ZpbGVzKClbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XS51aWQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QocmVz
ZXRDb21wbGV0ZWQuYmluZCh0aGlzKSk7CisKKyAgICAgICAgZnVuY3Rpb24gcmVzZXRDb21wbGV0
ZWQoKSB7CisgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKKworICAgICAgICAgICAgaWYgKCF0
aGlzLmN1cnJlbnRRdWVyeSB8fCAhdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayB8fCAhdGhp
cy5fc2VhcmNoUmVzdWx0cykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IC8vIFRoZSBjdXJyZW50IHNlYXJjaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uIEZpcnN0
IG5lZ2F0ZSBvdXQgcHJldmlvdXMgbWF0Y2gKKyAgICAgICAgICAgIC8vIGNvdW50IGJ5IGNhbGxp
bmcgdGhlIHNlYXJjaCBmaW5pc2hlZCBjYWxsYmFjayB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyIG9m
IG1hdGNoZXMuCisgICAgICAgICAgICAvLyBUaGVuIHBlcmZvcm0gdGhlIHNlYXJjaCBhZ2FpbiB3
aXRoIHRoZSBzYW1lIHF1ZXJ5IGFuZCBjYWxsYmFjay4KKyAgICAgICAgICAgIHRoaXMuX3NlYXJj
aEZpbmlzaGVkQ2FsbGJhY2sodGhpcywgLXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKKyAg
ICAgICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5fc2Vh
cmNoRmluaXNoZWRDYWxsYmFjayk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NyZWF0ZVNu
YXBzaG90RGF0YUdyaWRMaXN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
c25hcHNob3REYXRhR3JpZExpc3QpCisgICAgICAgICAgZGVsZXRlIHRoaXMuX3NuYXBzaG90RGF0
YUdyaWRMaXN0OworCisgICAgICAgIHRoaXMuX3NuYXBzaG90RGF0YUdyaWRMaXN0ID0gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QodGhpcywgdGhpcy5iYXNlU25hcHNo
b3QuZW50cmllcywgdGhpcy5wcm9maWxlLmVudHJpZXMpOworICAgICAgICByZXR1cm4gdGhpcy5f
c25hcHNob3REYXRhR3JpZExpc3Q7CisgICAgfSwKKworICAgIF9nZXRQcm9maWxlczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMu
Z2V0UHJvZmlsZXMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCk7
CisgICAgfSwKKworICAgIF9sb2FkUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSwgY2FsbGJhY2sp
CisgICAgeworICAgICAgICBpZiAocHJvZmlsZS5fbG9hZGVkKSB7CisgICAgICAgICAgICBjYWxs
YmFjayhwcm9maWxlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChsb2FkZWRDYWxsYmFjay5i
aW5kKHRoaXMpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRQcm9maWxlKGNhbGxJZCwg
cHJvZmlsZS50eXBlSWQsIHByb2ZpbGUudWlkKTsKKworICAgICAgICBmdW5jdGlvbiBsb2FkZWRD
YWxsYmFjayhsb2FkZWRTbmFwc2hvdCkgeworICAgICAgICAgICAgcHJvZmlsZS5jaGlsZHJlbiA9
IGxvYWRlZFNuYXBzaG90LmhlYWQuY2hpbGRyZW47CisgICAgICAgICAgICBwcm9maWxlLmVudHJp
ZXMgPSBsb2FkZWRTbmFwc2hvdC5oZWFkLmVudHJpZXM7CisgICAgICAgICAgICBwcm9maWxlLmxv
d2xldmVscyA9IGxvYWRlZFNuYXBzaG90LmhlYWQubG93bGV2ZWxzOworICAgICAgICAgICAgdGhp
cy5fcHJlcGFyZVByb2ZpbGUocHJvZmlsZSk7CisgICAgICAgICAgICBwcm9maWxlLl9sb2FkZWQg
PSB0cnVlOworICAgICAgICAgICAgdGhpcy5wYXJlbnQudXBkYXRlUHJvZmlsZShwcm9maWxlKTsK
KyAgICAgICAgICAgIGNhbGxiYWNrKHByb2ZpbGUpOworICAgICAgICB9CisgICAgfSwKKworICAg
IF9tb3VzZURvd25JbkRhdGFHcmlkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlm
IChldmVudC5kZXRhaWwgPCAyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBj
ZWxsID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRkIik7
CisgICAgICAgIGlmICghY2VsbCB8fCAoIWNlbGwuaGFzU3R5bGVDbGFzcygiY291bnQtY29sdW1u
IikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZS1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHls
ZUNsYXNzKCJjb3VudERlbHRhLWNvbHVtbiIpICYmICFjZWxsLmhhc1N0eWxlQ2xhc3MoInNpemVE
ZWx0YS1jb2x1bW4iKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGNlbGwu
aGFzU3R5bGVDbGFzcygiY291bnQtY29sdW1uIikpCisgICAgICAgICAgICB0aGlzLnNob3dDb3Vu
dEFzUGVyY2VudCA9ICF0aGlzLnNob3dDb3VudEFzUGVyY2VudDsKKyAgICAgICAgZWxzZSBpZiAo
Y2VsbC5oYXNTdHlsZUNsYXNzKCJzaXplLWNvbHVtbiIpKQorICAgICAgICAgICAgdGhpcy5zaG93
U2l6ZUFzUGVyY2VudCA9ICF0aGlzLnNob3dTaXplQXNQZXJjZW50OworICAgICAgICBlbHNlIGlm
IChjZWxsLmhhc1N0eWxlQ2xhc3MoImNvdW50RGVsdGEtY29sdW1uIikpCisgICAgICAgICAgICB0
aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ID0gIXRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNl
bnQ7CisgICAgICAgIGVsc2UgaWYgKGNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZURlbHRhLWNvbHVt
biIpKQorICAgICAgICAgICAgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID0gIXRoaXMuc2hv
d1NpemVEZWx0YUFzUGVyY2VudDsKKworICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50
cygpOworCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOworICAgIH0sCisKKyAgICBnZXQgX2lzU2hvd2luZ0FzUGVyY2VudCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5zaG93Q291bnRBc1BlcmNlbnQgJiYgdGhpcy5z
aG93U2l6ZUFzUGVyY2VudCAmJiB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ICYmIHRoaXMu
c2hvd1NpemVEZWx0YUFzUGVyY2VudDsKKyAgICB9LAorCisgICAgX3BlcmNlbnRDbGlja2VkOiBm
dW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSB0aGlzLl9p
c1Nob3dpbmdBc1BlcmNlbnQ7CisgICAgICAgIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ID0gIWN1
cnJlbnRTdGF0ZTsKKyAgICAgICAgdGhpcy5zaG93U2l6ZUFzUGVyY2VudCA9ICFjdXJyZW50U3Rh
dGU7CisgICAgICAgIHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRl
OworICAgICAgICB0aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOwor
ICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOworICAgIH0sCisKKyAgICBfcHJl
cGFyZVByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAgICAgICBmb3IgKHZhciBw
cm9maWxlRW50cnkgaW4gcHJvZmlsZS5lbnRyaWVzKQorICAgICAgICAgICAgcHJvZmlsZS5lbnRy
aWVzW3Byb2ZpbGVFbnRyeV0ucmV0YWluZXJzID0ge307CisgICAgICAgIHByb2ZpbGUuY2x1c3Rl
cnMgPSB7fTsKKworICAgICAgICBmb3IgKHZhciBhZGRyIGluIHByb2ZpbGUuY2hpbGRyZW4pIHsK
KyAgICAgICAgICAgIHZhciByZXRhaW5lciA9IHByb2ZpbGUuY2hpbGRyZW5bYWRkcl07CisgICAg
ICAgICAgICB2YXIgcmV0YWluZXJJZCA9IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSArICc6JyAr
IGFkZHI7CisgICAgICAgICAgICBmb3IgKHZhciBjaGlsZEFkZHIgaW4gcmV0YWluZXIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRBZGRyID09PSAnY29uc3RydWN0b3JOYW1lJykgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSByZXRhaW5lcltjaGlsZEFkZHJdOworICAg
ICAgICAgICAgICAgIHZhciBpdGVtSWQgPSBpdGVtLmNvbnN0cnVjdG9yTmFtZSArICc6JyArIGNo
aWxkQWRkcjsKKyAgICAgICAgICAgICAgICBpZiAoKGl0ZW0uY29uc3RydWN0b3JOYW1lID09PSAn
T2JqZWN0JyB8fCBpdGVtLmNvbnN0cnVjdG9yTmFtZSA9PT0gJ0FycmF5JykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCEoaXRlbUlkIGluIHByb2ZpbGUuY2x1c3RlcnMpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZS5jbHVzdGVyc1tpdGVtSWRdID0geyBjb25zdHJ1Y3Rvck5h
bWU6IGl0ZW1JZCwgcmV0YWluZXJzOiB7fSB9OworICAgICAgICAgICAgICAgICAgICBtZXJnZVJl
dGFpbmVycyhwcm9maWxlLmNsdXN0ZXJzW2l0ZW1JZF0sIGl0ZW0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtZXJnZVJldGFpbmVycyhwcm9maWxlLmVudHJpZXNbaXRlbS5j
b25zdHJ1Y3Rvck5hbWVdLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIG1lcmdlUmV0YWluZXJzKGVudHJ5LCBpdGVtKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIShyZXRhaW5lci5jb25zdHJ1Y3Rvck5hbWUgaW4gZW50cnkucmV0YWluZXJz
KSkKKyAgICAgICAgICAgICAgIGVudHJ5LnJldGFpbmVyc1tyZXRhaW5lci5jb25zdHJ1Y3Rvck5h
bWVdID0geyBjb25zdHJ1Y3Rvck5hbWU6IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6
IDAsIGNsdXN0ZXJzOiB7fSB9OworICAgICAgICAgICAgdmFyIHJldGFpbmVyRW50cnkgPSBlbnRy
eS5yZXRhaW5lcnNbcmV0YWluZXIuY29uc3RydWN0b3JOYW1lXTsKKyAgICAgICAgICAgIHJldGFp
bmVyRW50cnkuY291bnQgKz0gaXRlbS5jb3VudDsKKyAgICAgICAgICAgIGlmIChyZXRhaW5lci5j
b25zdHJ1Y3Rvck5hbWUgPT09ICdPYmplY3QnIHx8IHJldGFpbmVyLmNvbnN0cnVjdG9yTmFtZSA9
PT0gJ0FycmF5JykKKyAgICAgICAgICAgICAgICByZXRhaW5lckVudHJ5LmNsdXN0ZXJzW3JldGFp
bmVySWRdID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfcmVzZXREYXRhR3JpZExp
c3Q6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5fbG9hZFByb2ZpbGUo
dGhpcy5fZ2V0UHJvZmlsZXMoKVt0aGlzLmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXhd
LCBwcm9maWxlTG9hZGVkLmJpbmQodGhpcykpOworCisgICAgICAgIGZ1bmN0aW9uIHByb2ZpbGVM
b2FkZWQocHJvZmlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5iYXNlU25hcHNob3Qg
PSBwcm9maWxlOworICAgICAgICAgICAgdmFyIGxhc3RDb21wYXJhdG9yID0gV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3IoInNpemUiLCBmYWxz
ZSk7CisgICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdCkKKyAgICAgICAg
ICAgICAgICBsYXN0Q29tcGFyYXRvciA9IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QubGFzdENv
bXBhcmF0b3I7CisgICAgICAgICAgICB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0ID0gdGhpcy5f
Y3JlYXRlU25hcHNob3REYXRhR3JpZExpc3QoKTsKKyAgICAgICAgICAgIHRoaXMuc25hcHNob3RE
YXRhR3JpZExpc3Quc29ydChsYXN0Q29tcGFyYXRvciwgdHJ1ZSk7CisgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9zb3J0RGF0YTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIHNvcnRBc2NlbmRpbmcgPSB0aGlzLmRhdGFHcmlkLnNvcnRPcmRl
ciA9PT0gImFzY2VuZGluZyI7CisgICAgICAgIHZhciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRo
aXMuZGF0YUdyaWQuc29ydENvbHVtbklkZW50aWZpZXI7CisgICAgICAgIHZhciBzb3J0UHJvcGVy
dHkgPSB7CisgICAgICAgICAgICBjb25zOiBbImNvbnMiLCBudWxsXSwKKyAgICAgICAgICAgIGNv
dW50OiBbImNvdW50IiwgbnVsbF0sCisgICAgICAgICAgICBzaXplOiBbInNpemUiLCAiY291bnQi
XSwKKyAgICAgICAgICAgIGNvdW50RGVsdGE6IHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQg
PyBbImNvdW50RGVsdGFQZXJjZW50IiwgbnVsbF0gOiBbImNvdW50RGVsdGEiLCBudWxsXSwKKyAg
ICAgICAgICAgIHNpemVEZWx0YTogdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID8gWyJzaXpl
RGVsdGFQZXJjZW50IiwgImNvdW50RGVsdGFQZXJjZW50Il0gOiBbInNpemVEZWx0YSIsICJzaXpl
RGVsdGFQZXJjZW50Il0KKyAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07CisKKyAgICAg
ICAgdGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdC5zb3J0KFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9yKHNvcnRQcm9wZXJ0eVswXSwgc29ydFBy
b3BlcnR5WzFdLCBzb3J0QXNjZW5kaW5nKSk7CisKKyAgICAgICAgdGhpcy5yZWZyZXNoKCk7Cisg
ICAgfSwKKworICAgIF91cGRhdGVCYXNlT3B0aW9uczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdmFyIGxpc3QgPSB0aGlzLl9nZXRQcm9maWxlcygpOworICAgICAgICAvLyBXZSdyZSBhc3N1
bWluZyB0aGF0IHNuYXBzaG90cyBjYW4gb25seSBiZSBhZGRlZC4KKyAgICAgICAgaWYgKHRoaXMu
YmFzZVNlbGVjdEVsZW1lbnQubGVuZ3RoID09PSBsaXN0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5n
dGgsIG4gPSBsaXN0Lmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFyIGJhc2VP
cHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKKyAgICAgICAgICAgIHZh
ciB0aXRsZSA9IGxpc3RbaV0udGl0bGU7CisgICAgICAgICAgICBpZiAoIXRpdGxlLmluZGV4T2Yo
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKSkKKyAgICAgICAgICAgICAgICB0aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiU25hcHNob3QgJWQiLCB0aXRsZS5zdWJzdHJpbmcoVXNlckluaXRp
YXRlZFByb2ZpbGVOYW1lLmxlbmd0aCArIDEpKTsKKyAgICAgICAgICAgIGJhc2VPcHRpb24ubGFi
ZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbXBhcmVkIHRvICVzIiwgdGl0bGUpOworICAg
ICAgICAgICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChiYXNlT3B0aW9uKTsK
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBfdXBkYXRlUGVyY2VudEJ1dHRvbjogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudCkgeworICAgICAg
ICAgICAgdGhpcy5wZXJjZW50QnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJT
aG93IGFic29sdXRlIGNvdW50cyBhbmQgc2l6ZXMuIik7CisgICAgICAgICAgICB0aGlzLnBlcmNl
bnRCdXR0b24udG9nZ2xlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
aGlzLnBlcmNlbnRCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgY291
bnRzIGFuZCBzaXplcyBhcyBwZXJjZW50YWdlcy4iKTsKKyAgICAgICAgICAgIHRoaXMucGVyY2Vu
dEJ1dHRvbi50b2dnbGVkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3VwZGF0
ZVN1bW1hcnlHcmFwaDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5jb3VudHNTdW1t
YXJ5QmFyLmNhbGN1bGF0b3Iuc2hvd0FzUGVyY2VudCA9IHRoaXMuX2lzU2hvd2luZ0FzUGVyY2Vu
dDsKKyAgICAgICAgdGhpcy5jb3VudHNTdW1tYXJ5QmFyLnVwZGF0ZSh0aGlzLnByb2ZpbGUubG93
bGV2ZWxzKTsKKworICAgICAgICB0aGlzLnNpemVzU3VtbWFyeUJhci5jYWxjdWxhdG9yLnNob3dB
c1BlcmNlbnQgPSB0aGlzLl9pc1Nob3dpbmdBc1BlcmNlbnQ7CisgICAgICAgIHRoaXMuc2l6ZXNT
dW1tYXJ5QmFyLnVwZGF0ZSh0aGlzLnByb2ZpbGUubG93bGV2ZWxzKTsKKyAgICB9Cit9OworCitX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLlZpZXcucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5T
ZWFyY2hIZWxwZXIgPSB7CisgICAgLy8gSW4gY29tcGFyYXRvcnMsIHdlIGFzc3VtZSB0aGF0IGEg
dmFsdWUgZnJvbSBhIG5vZGUgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuCisgICAg
b3BlcmF0aW9uczogeworICAgICAgICBMRVNTOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAh
PT0gbnVsbCAmJiBhIDwgYjsgfSwKKyAgICAgICAgTEVTU19PUl9FUVVBTDogZnVuY3Rpb24gKGEs
IGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA8PSBiOyB9LAorICAgICAgICBFUVVBTDogZnVu
Y3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA9PT0gYjsgfSwKKyAgICAgICAg
R1JFQVRFUl9PUl9FUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYg
YSA+PSBiOyB9LAorICAgICAgICBHUkVBVEVSOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAh
PT0gbnVsbCAmJiBhID4gYjsgfQorICAgIH0sCisKKyAgICBvcGVyYXRpb25QYXJzZXJzOiB7Cisg
ICAgICAgIExFU1M6IC9ePChcZCspLywKKyAgICAgICAgTEVTU19PUl9FUVVBTDogL148PShcZCsp
LywKKyAgICAgICAgR1JFQVRFUl9PUl9FUVVBTDogL14+PShcZCspLywKKyAgICAgICAgR1JFQVRF
UjogL14+KFxkKykvCisgICAgfSwKKworICAgIHBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyOiBmdW5j
dGlvbihxdWVyeSkKKyAgICB7CisgICAgICAgIHZhciBvcGVyYXRpb25zID0gV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLm9wZXJhdGlvbnM7CisgICAgICAgIHZhciBw
YXJzZXJzID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLm9wZXJh
dGlvblBhcnNlcnM7CisgICAgICAgIGZvciAodmFyIG9wZXJhdGlvbiBpbiBwYXJzZXJzKSB7Cisg
ICAgICAgICAgICB2YXIgbWF0Y2ggPSBxdWVyeS5tYXRjaChwYXJzZXJzW29wZXJhdGlvbl0pOwor
ICAgICAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKQorICAgICAgICAgICAgICAgIHJldHVybiBb
b3BlcmF0aW9uc1tvcGVyYXRpb25dLCBwYXJzZUZsb2F0KG1hdGNoWzFdKV07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFtvcGVyYXRpb25zLkVRVUFMLCBwYXJzZUZsb2F0KHF1ZXJ5KV07Cisg
ICAgfSwKKworICAgIHBlcmNlbnRzOiAvJSQvLAorCisgICAgbWVnYUJ5dGVzOiAvTUIkL2ksCisK
KyAgICBraWxvQnl0ZXM6IC9LQiQvaSwKKworICAgIGJ5dGVzOiAvQiQvaQorfQorCitXZWJJbnNw
ZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yID0gZnVuY3Rpb24obG93TGV2ZWxGaWVsZCkKK3sK
KyAgICB0aGlzLnRvdGFsID0gMTsKKyAgICB0aGlzLmxvd0xldmVsRmllbGQgPSBsb3dMZXZlbEZp
ZWxkOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZSA9
IHsKKyAgICBjb21wdXRlU3VtbWFyeVZhbHVlczogZnVuY3Rpb24obG93TGV2ZWxzKQorICAgIHsK
KyAgICAgICAgdmFyIGhpZ2hMZXZlbHMgPSB7IGRhdGE6IDAsIGNvZGU6IDAgfTsKKyAgICAgICAg
dGhpcy50b3RhbCA9IDA7CisgICAgICAgIGZvciAodmFyIGl0ZW0gaW4gbG93TGV2ZWxzKSB7Cisg
ICAgICAgICAgICB2YXIgaGlnaEl0ZW0gPSB0aGlzLl9oaWdoRnJvbUxvdyhpdGVtKTsKKyAgICAg
ICAgICAgIGlmIChoaWdoSXRlbSkgeworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxvd0xl
dmVsc1tpdGVtXVt0aGlzLmxvd0xldmVsRmllbGRdOworICAgICAgICAgICAgICAgIGhpZ2hMZXZl
bHNbaGlnaEl0ZW1dICs9IHZhbHVlOworICAgICAgICAgICAgICAgIHRoaXMudG90YWwgKz0gdmFs
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlc3VsdCA9IHsgY2F0
ZWdvcnlWYWx1ZXM6IGhpZ2hMZXZlbHMgfTsKKyAgICAgICAgaWYgKCF0aGlzLnNob3dBc1BlcmNl
bnQpCisgICAgICAgICAgICByZXN1bHQudG90YWwgPSB0aGlzLnRvdGFsOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24odmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5zaG93QXNQZXJjZW50KQorICAgICAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwgdmFsdWUgLyB0aGlzLnRvdGFsICogMTAw
LjApOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWVUb1N0cmlu
Zyh2YWx1ZSk7CisgICAgfSwKKworICAgIGdldCBzaG93QXNQZXJjZW50KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zaG93QXNQZXJjZW50OworICAgIH0sCisKKyAgICBzZXQgc2hvd0Fz
UGVyY2VudCh4KQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hvd0FzUGVyY2VudCA9IHg7CisgICAg
fQorfQorCitXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IgPSBmdW5jdGlv
bigpCit7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMs
ICJjb3VudCIpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3Iu
cHJvdG90eXBlID0geworICAgIF9oaWdoRnJvbUxvdzogZnVuY3Rpb24odHlwZSkKKyAgICB7Cisg
ICAgICAgIGlmICh0eXBlID09PSAiQ09ERV9UWVBFIiB8fCB0eXBlID09PSAiU0hBUkVEX0ZVTkNU
SU9OX0lORk9fVFlQRSIgfHwgdHlwZSA9PT0gIlNDUklQVF9UWVBFIikgcmV0dXJuICJjb2RlIjsK
KyAgICAgICAgaWYgKHR5cGUgPT09ICJTVFJJTkdfVFlQRSIgfHwgdHlwZSA9PT0gIkhFQVBfTlVN
QkVSX1RZUEUiIHx8IHR5cGUubWF0Y2goL15KU18vKSkgcmV0dXJuICJkYXRhIjsKKyAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfSwKKworICAgIF92YWx1ZVRvU3RyaW5nOiBmdW5jdGlvbih2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOworICAgIH0KK30KKwor
V2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZTsKKworV2Vi
SW5zcGVjdG9yLkhlYXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IgPSBmdW5jdGlvbigpCit7CisgICAg
V2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJzaXplIik7Cit9
CisKK1dlYkluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsK
KyAgICBfaGlnaEZyb21Mb3c6IGZ1bmN0aW9uKHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlw
ZSA9PT0gIkNPREVfVFlQRSIgfHwgdHlwZSA9PT0gIlNIQVJFRF9GVU5DVElPTl9JTkZPX1RZUEUi
IHx8IHR5cGUgPT09ICJTQ1JJUFRfVFlQRSIpCisgICAgICAgICAgICByZXR1cm4gImNvZGUiOwor
ICAgICAgICBpZiAodHlwZSA9PT0gIlNUUklOR19UWVBFIiB8fCB0eXBlID09PSAiSEVBUF9OVU1C
RVJfVFlQRSIgfHwgdHlwZS5tYXRjaCgvXkpTXy8pIHx8IHR5cGUubWF0Y2goL19BUlJBWV9UWVBF
JC8pKQorICAgICAgICAgICAgcmV0dXJuICJkYXRhIjsKKyAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgfSwKKworICAgIF92YWx1ZVRvU3RyaW5nOiBOdW1iZXIuYnl0ZXNUb1N0cmluZworfQorCitX
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlTaXplQ2FsY3VsYXRvci5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5wcm90b3R5cGU7CisKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzID0gZnVuY3Rpb24o
b3duaW5nVHJlZSkKK3sKKyAgICB0aGlzLnRyZWUgPSBvd25pbmdUcmVlOworCisgICAgV2ViSW5z
cGVjdG9yLkRhdGFHcmlkTm9kZS5jYWxsKHRoaXMsIG51bGwsIHRoaXMuX2hhc1JldGFpbmVycyk7
CisKKyAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUs
IHRoaXMpOworfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhS
ZXRhaW5lcnMucHJvdG90eXBlID0geworICAgIGlzRW1wdHlTZXQ6IGZ1bmN0aW9uKHNldCkKKyAg
ICB7CisgICAgICAgIGZvciAodmFyIHggaW4gc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgZ2V0IF9oYXNSZXRhaW5lcnMo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICF0aGlzLmlzRW1wdHlTZXQodGhpcy5yZXRhaW5lcnMp
OworICAgIH0sCisKKyAgICBnZXQgX3BhcmVudCgpCisgICAgeworICAgICAgICAvLyBGb3IgdG9w
LWxldmVsIG5vZGVzLCByZXR1cm4gb3duaW5nIHRyZWUgYXMgYSBwYXJlbnQsIG5vdCBkYXRhIGdy
aWQuCisgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCAhPT0gdGhpcy5kYXRhR3JpZCA/IHRoaXMu
cGFyZW50IDogdGhpcy50cmVlOworICAgIH0sCisKKyAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gYXBwZW5kRGlmZkVudHJ5KGJhc2VJdGVtLCBz
bmFwc2hvdEl0ZW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQobmV3
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZSh0aGlzLnNuYXBz
aG90VmlldywgYmFzZUl0ZW0sIHNuYXBzaG90SXRlbSwgdGhpcy50cmVlKSk7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLnByb2R1Y2VEaWZmKHRoaXMuYmFzZVJldGFpbmVycywgdGhpcy5yZXRh
aW5lcnMsIGFwcGVuZERpZmZFbnRyeS5iaW5kKHRoaXMpKTsKKworICAgICAgICBpZiAodGhpcy5f
cGFyZW50KSB7CisgICAgICAgICAgICB2YXIgY3VycmVudENvbXBhcmF0b3IgPSB0aGlzLl9wYXJl
bnQubGFzdENvbXBhcmF0b3I7CisgICAgICAgICAgICBpZiAoY3VycmVudENvbXBhcmF0b3IpCisg
ICAgICAgICAgICAgICAgdGhpcy5zb3J0KGN1cnJlbnRDb21wYXJhdG9yLCB0cnVlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlz
Ll9wb3B1bGF0ZSwgdGhpcyk7CisgICAgfSwKKworICAgIHByb2R1Y2VEaWZmOiBmdW5jdGlvbihi
YXNlRW50cmllcywgY3VycmVudEVudHJpZXMsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZm9y
ICh2YXIgaXRlbSBpbiBjdXJyZW50RW50cmllcykKKyAgICAgICAgICAgIGNhbGxiYWNrKGJhc2VF
bnRyaWVzW2l0ZW1dLCBjdXJyZW50RW50cmllc1tpdGVtXSk7CisKKyAgICAgICAgZm9yIChpdGVt
IGluIGJhc2VFbnRyaWVzKSB7CisgICAgICAgICAgICBpZiAoIShpdGVtIGluIGN1cnJlbnRFbnRy
aWVzKSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhiYXNlRW50cmllc1tpdGVtXSwgbnVsbCk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgc29ydDogZnVuY3Rpb24oY29tcGFyYXRvciwgZm9y
Y2UpIHsKKyAgICAgICAgaWYgKCFmb3JjZSAmJiB0aGlzLmxhc3RDb21wYXJhdG9yID09PSBjb21w
YXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuY2hpbGRyZW4uc29y
dChjb21wYXJhdG9yKTsKKyAgICAgICAgdmFyIGNoaWxkQ291bnQgPSB0aGlzLmNoaWxkcmVuLmxl
bmd0aDsKKyAgICAgICAgZm9yICh2YXIgY2hpbGRJbmRleCA9IDA7IGNoaWxkSW5kZXggPCBjaGls
ZENvdW50OyArK2NoaWxkSW5kZXgpCisgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2NoaWxkSW5k
ZXhdLl9yZWNhbGN1bGF0ZVNpYmxpbmdzKGNoaWxkSW5kZXgpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBj
aGlsZCA9IHRoaXMuY2hpbGRyZW5baV07CisgICAgICAgICAgICBpZiAoIWZvcmNlICYmICghY2hp
bGQuZXhwYW5kZWQgfHwgY2hpbGQubGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0b3IpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2hpbGQuc29ydChjb21wYXJhdG9y
LCBmb3JjZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5sYXN0Q29tcGFyYXRvciA9IGNvbXBh
cmF0b3I7CisgICAgfSwKKworICAgIHNpZ25Gb3JEZWx0YTogZnVuY3Rpb24oZGVsdGEpIHsKKyAg
ICAgICAgaWYgKGRlbHRhID09PSAwKQorICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICBp
ZiAoZGVsdGEgPiAwKQorICAgICAgICAgICAgcmV0dXJuICIrIjsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuICJcdTIyMTIiOyAgLy8gTWF0aCBtaW51cyBzaWduLCBzYW1lIHdpZHRo
IGFzIHBsdXMuCisgICAgfSwKKworICAgIHNob3dEZWx0YUFzUGVyY2VudDogZnVuY3Rpb24odmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklU
WSkKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIm5ldyIpOworICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKQorICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiZGVsZXRlZCIpOworICAgICAgICBp
ZiAodmFsdWUgPiAxMDAwLjApCisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIlcyA+MTAwMCUlIiwgdGhpcy5zaWduRm9yRGVsdGEodmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlLjJmJSUiLCB0aGlzLnNpZ25Gb3JEZWx0YSh2
YWx1ZSksIE1hdGguYWJzKHZhbHVlKSk7CisgICAgfSwKKworICAgIGdldFRvdGFsQ291bnQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fY291bnQpIHsKKyAgICAgICAgICAg
IHRoaXMuX2NvdW50ID0gMDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5j
aGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpCisgICAgICAgICAgICAgICAgdGhpcy5fY291bnQg
Kz0gdGhpcy5jaGlsZHJlbltpXS5jb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp
cy5fY291bnQ7CisgICAgfSwKKworICAgIGdldFRvdGFsU2l6ZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9zaXplKSB7CisgICAgICAgICAgICB0aGlzLl9zaXplID0gMDsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkg
PCBuOyArK2kpCisgICAgICAgICAgICAgICAgdGhpcy5fc2l6ZSArPSB0aGlzLmNoaWxkcmVuW2ld
LnNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7CisgICAgfSwKKwor
ICAgIGdldCBjb3VudFBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY291bnQg
LyB0aGlzLl9wYXJlbnQuZ2V0VG90YWxDb3VudCgpICogMTAwLjA7CisgICAgfSwKKworICAgIGdl
dCBzaXplUGVyY2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5zaXplIC8gdGhpcy5f
cGFyZW50LmdldFRvdGFsU2l6ZSgpICogMTAwLjA7CisgICAgfSwKKworICAgIGdldCBjb3VudERl
bHRhUGVyY2VudCgpCisgICAgeworICAgICAgICBpZiAodGhpcy5iYXNlQ291bnQgPiAwKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5jb3VudCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuY291bnREZWx0YSAvIHRoaXMuYmFzZUNvdW50ICogMTAwLjA7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwor
ICAgIH0sCisKKyAgICBnZXQgc2l6ZURlbHRhUGVyY2VudCgpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5iYXNlU2l6ZSA+IDApIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNpemUgPiAwKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpemVEZWx0YSAvIHRoaXMuYmFzZVNpemUgKiAxMDAu
MDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FU
SVZFX0lORklOSVRZOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOdW1iZXIu
UE9TSVRJVkVfSU5GSU5JVFk7CisgICAgfSwKKworICAgIGdldCBkYXRhKCkKKyAgICB7CisgICAg
ICAgIHZhciBkYXRhID0ge307CisKKyAgICAgICAgZGF0YVsiY29ucyJdID0gdGhpcy5jb25zdHJ1
Y3Rvck5hbWU7CisKKyAgICAgICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dDb3VudEFzUGVy
Y2VudCkKKyAgICAgICAgICAgIGRhdGFbImNvdW50Il0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiUuMmYlJSIsIHRoaXMuY291bnRQZXJjZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZGF0YVsiY291bnQiXSA9IHRoaXMuY291bnQ7CisKKyAgICAgICAgaWYgKHRoaXMuc2l6ZSAhPT0g
bnVsbCkgeworICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3RWaWV3LnNob3dTaXplQXNQZXJj
ZW50KQorICAgICAgICAgICAgICAgIGRhdGFbInNpemUiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiJS4yZiUlIiwgdGhpcy5zaXplUGVyY2VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgZGF0YVsic2l6ZSJdID0gTnVtYmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5zaXplKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkYXRhWyJzaXplIl0gPSAiIjsKKworICAgICAg
ICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQpCisgICAgICAg
ICAgICBkYXRhWyJjb3VudERlbHRhIl0gPSB0aGlzLnNob3dEZWx0YUFzUGVyY2VudCh0aGlzLmNv
dW50RGVsdGFQZXJjZW50KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YVsiY291bnRE
ZWx0YSJdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyVkIiwgdGhpcy5zaWduRm9yRGVsdGEo
dGhpcy5jb3VudERlbHRhKSwgTWF0aC5hYnModGhpcy5jb3VudERlbHRhKSk7CisKKyAgICAgICAg
aWYgKHRoaXMuc2l6ZURlbHRhICE9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAodGhpcy5zbmFw
c2hvdFZpZXcuc2hvd1NpemVEZWx0YUFzUGVyY2VudCkKKyAgICAgICAgICAgICAgICBkYXRhWyJz
aXplRGVsdGEiXSA9IHRoaXMuc2hvd0RlbHRhQXNQZXJjZW50KHRoaXMuc2l6ZURlbHRhUGVyY2Vu
dCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGF0YVsic2l6ZURlbHRhIl0g
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzJXMiLCB0aGlzLnNpZ25Gb3JEZWx0YSh0aGlzLnNp
emVEZWx0YSksIE51bWJlci5ieXRlc1RvU3RyaW5nKE1hdGguYWJzKHRoaXMuc2l6ZURlbHRhKSkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gIiI7CisK
KyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKworICAgIGNyZWF0ZUNlbGw6IGZ1bmN0aW9u
KGNvbHVtbklkZW50aWZpZXIpCisgICAgeworICAgICAgICB2YXIgY2VsbCA9IFdlYkluc3BlY3Rv
ci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGwuY2FsbCh0aGlzLCBjb2x1bW5JZGVu
dGlmaWVyKTsKKworICAgICAgICBpZiAoKGNvbHVtbklkZW50aWZpZXIgPT09ICJjb25zIiAmJiB0
aGlzLl9zZWFyY2hNYXRjaGVkQ29uc0NvbHVtbikgfHwKKyAgICAgICAgICAgIChjb2x1bW5JZGVu
dGlmaWVyID09PSAiY291bnQiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbikgfHwK
KyAgICAgICAgICAgIChjb2x1bW5JZGVudGlmaWVyID09PSAic2l6ZSIgJiYgdGhpcy5fc2VhcmNo
TWF0Y2hlZFNpemVDb2x1bW4pIHx8CisgICAgICAgICAgICAoY29sdW1uSWRlbnRpZmllciA9PT0g
ImNvdW50RGVsdGEiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uKSB8fAor
ICAgICAgICAgICAgKGNvbHVtbklkZW50aWZpZXIgPT09ICJzaXplRGVsdGEiICYmIHRoaXMuX3Nl
YXJjaE1hdGNoZWRTaXplRGVsdGFDb2x1bW4pKQorICAgICAgICAgICAgY2VsbC5hZGRTdHlsZUNs
YXNzKCJoaWdobGlnaHQiKTsKKworICAgICAgICByZXR1cm4gY2VsbDsKKyAgICB9Cit9OworCitX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGU7CisKK1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGUgPSBmdW5jdGlvbihzbmFwc2hvdFZp
ZXcsIGJhc2VFbnRyeSwgc25hcHNob3RFbnRyeSwgb3duaW5nVHJlZSkKK3sKKyAgICB0aGlzLnNu
YXBzaG90VmlldyA9IHNuYXBzaG90VmlldzsKKworICAgIGlmICghc25hcHNob3RFbnRyeSkKKyAg
ICAgICAgc25hcHNob3RFbnRyeSA9IHsgY29uc3RydWN0b3JOYW1lOiBiYXNlRW50cnkuY29uc3Ry
dWN0b3JOYW1lLCBjb3VudDogMCwgc2l6ZTogMCwgcmV0YWluZXJzOiB7fSB9OworICAgIHRoaXMu
Y29uc3RydWN0b3JOYW1lID0gc25hcHNob3RFbnRyeS5jb25zdHJ1Y3Rvck5hbWU7CisgICAgdGhp
cy5jb3VudCA9IHNuYXBzaG90RW50cnkuY291bnQ7CisgICAgdGhpcy5zaXplID0gc25hcHNob3RF
bnRyeS5zaXplOworICAgIHRoaXMucmV0YWluZXJzID0gc25hcHNob3RFbnRyeS5yZXRhaW5lcnM7
CisKKyAgICBpZiAoIWJhc2VFbnRyeSkKKyAgICAgICAgYmFzZUVudHJ5ID0geyBjb3VudDogMCwg
c2l6ZTogMCwgcmV0YWluZXJzOiB7fSB9OworICAgIHRoaXMuYmFzZUNvdW50ID0gYmFzZUVudHJ5
LmNvdW50OworICAgIHRoaXMuY291bnREZWx0YSA9IHRoaXMuY291bnQgLSB0aGlzLmJhc2VDb3Vu
dDsKKyAgICB0aGlzLmJhc2VTaXplID0gYmFzZUVudHJ5LnNpemU7CisgICAgdGhpcy5zaXplRGVs
dGEgPSB0aGlzLnNpemUgLSB0aGlzLmJhc2VTaXplOworICAgIHRoaXMuYmFzZVJldGFpbmVycyA9
IGJhc2VFbnRyeS5yZXRhaW5lcnM7CisKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlV2l0aFJldGFpbmVycy5jYWxsKHRoaXMsIG93bmluZ1RyZWUpOworfTsKKworV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90
eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0ID0gZnVuY3Rpb24o
c25hcHNob3RWaWV3LCBiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzKQoreworICAgIHRoaXMu
dHJlZSA9IHRoaXM7CisgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7CisgICAg
dGhpcy5jaGlsZHJlbiA9IFtdOworICAgIHRoaXMubGFzdENvbXBhcmF0b3IgPSBudWxsOworICAg
IHRoaXMucG9wdWxhdGVDaGlsZHJlbihiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzKTsKK307
CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvdG90eXBlID0gewor
ICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkKKyAgICB7CisgICAgICAgIHRoaXMuaW5z
ZXJ0Q2hpbGQoY2hpbGQsIHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTsKKyAgICB9LAorCisgICAgaW5z
ZXJ0Q2hpbGQ6IGZ1bmN0aW9uKGNoaWxkLCBpbmRleCkKKyAgICB7CisgICAgICAgIHRoaXMuY2hp
bGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7CisgICAgfSwKKworICAgIHJlbW92ZUNoaWxk
cmVuOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107CisgICAg
fSwKKworICAgIHBvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGJhc2VFbnRyaWVzLCBzbmFwc2hv
dEVudHJpZXMpCisgICAgeworICAgICAgICBmdW5jdGlvbiBhcHBlbmRMaXN0RW50cnkoYmFzZUl0
ZW0sIHNuYXBzaG90SXRlbSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGls
ZChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZSh0aGlzLnNuYXBzaG90
VmlldywgYmFzZUl0ZW0sIHNuYXBzaG90SXRlbSwgdGhpcykpOworICAgICAgICB9CisgICAgICAg
IHRoaXMucHJvZHVjZURpZmYoYmFzZUVudHJpZXMsIHNuYXBzaG90RW50cmllcywgYXBwZW5kTGlz
dEVudHJ5LmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBwcm9kdWNlRGlmZjogV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1
Y2VEaWZmLAorICAgIHNvcnQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVX
aXRoUmV0YWluZXJzLnByb3RvdHlwZS5zb3J0LAorICAgIGdldFRvdGFsQ291bnQ6IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXRU
b3RhbENvdW50LAorICAgIGdldFRvdGFsU2l6ZTogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldFRvdGFsU2l6ZQorfTsKKworV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3JzID0g
W3t9LCB7fV07CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVy
dHlDb21wYXJhdG9yID0gZnVuY3Rpb24ocHJvcGVydHksIHByb3BlcnR5MiwgaXNBc2NlbmRpbmcp
Cit7CisgICAgdmFyIHByb3BlcnR5SGFzaCA9IHByb3BlcnR5ICsgIiMiICsgcHJvcGVydHkyOwor
ICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGlu
ZyA/IDEgOiAwKV1bcHJvcGVydHlIYXNoXTsKKyAgICBpZiAoIWNvbXBhcmF0b3IpIHsKKyAgICAg
ICAgY29tcGFyYXRvciA9IGZ1bmN0aW9uKGxocywgcmhzKSB7CisgICAgICAgICAgICB2YXIgbCA9
IGxoc1twcm9wZXJ0eV0sIHIgPSByaHNbcHJvcGVydHldOworICAgICAgICAgICAgaWYgKChsID09
PSBudWxsIHx8IHIgPT09IG51bGwpICYmIHByb3BlcnR5MiAhPT0gbnVsbCkKKyAgICAgICAgICAg
ICAgICBsID0gbGhzW3Byb3BlcnR5Ml0sIHIgPSByaHNbcHJvcGVydHkyXTsKKyAgICAgICAgICAg
IHZhciByZXN1bHQgPSBsIDwgciA/IC0xIDogKGwgPiByID8gMSA6IDApOworICAgICAgICAgICAg
cmV0dXJuIGlzQXNjZW5kaW5nID8gcmVzdWx0IDogLXJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAg
ICAgdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1bcHJvcGVy
dHlIYXNoXSA9IGNvbXBhcmF0b3I7CisgICAgfQorICAgIHJldHVybiBjb21wYXJhdG9yOworfTsK
KworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlID0gZnVuY3Rp
b24oc25hcHNob3RWaWV3LCBiYXNlRW50cnksIHNuYXBzaG90RW50cnksIG93bmluZ1RyZWUpCit7
CisgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7CisKKyAgICBpZiAoIXNuYXBz
aG90RW50cnkpCisgICAgICAgIHNuYXBzaG90RW50cnkgPSB7IGNvbnN0cnVjdG9yTmFtZTogYmFz
ZUVudHJ5LmNvbnN0cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OworICAgIHRo
aXMuY29uc3RydWN0b3JOYW1lID0gc25hcHNob3RFbnRyeS5jb25zdHJ1Y3Rvck5hbWU7CisgICAg
dGhpcy5jb3VudCA9IHNuYXBzaG90RW50cnkuY291bnQ7CisgICAgdGhpcy5yZXRhaW5lcnMgPSB0
aGlzLl9jYWxjdWxhdGVSZXRhaW5lcnModGhpcy5zbmFwc2hvdFZpZXcucHJvZmlsZSwgc25hcHNo
b3RFbnRyeS5jbHVzdGVycyk7CisKKyAgICBpZiAoIWJhc2VFbnRyeSkKKyAgICAgICAgYmFzZUVu
dHJ5ID0geyBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07CisgICAgdGhpcy5iYXNlQ291bnQgPSBi
YXNlRW50cnkuY291bnQ7CisgICAgdGhpcy5jb3VudERlbHRhID0gdGhpcy5jb3VudCAtIHRoaXMu
YmFzZUNvdW50OworICAgIHRoaXMuYmFzZVJldGFpbmVycyA9IHRoaXMuX2NhbGN1bGF0ZVJldGFp
bmVycyh0aGlzLnNuYXBzaG90Vmlldy5iYXNlU25hcHNob3QsIGJhc2VFbnRyeS5jbHVzdGVycyk7
CisKKyAgICB0aGlzLnNpemUgPSBudWxsOworICAgIHRoaXMuc2l6ZURlbHRhID0gbnVsbDsKKwor
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLmNh
bGwodGhpcywgb3duaW5nVHJlZSk7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRh
R3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHNpemVQZXJjZW50KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBnZXQgc2l6ZURlbHRhUGVy
Y2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX2NhbGN1
bGF0ZVJldGFpbmVyczogZnVuY3Rpb24oc25hcHNob3QsIGNsdXN0ZXJzKQorICAgIHsKKyAgICAg
ICAgdmFyIHJldGFpbmVycyA9IHt9OworICAgICAgICBpZiAodGhpcy5pc0VtcHR5U2V0KGNsdXN0
ZXJzKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3JOYW1lIGluIHNuYXBzaG90
LmVudHJpZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90LmVudHJpZXNbdGhpcy5j
b25zdHJ1Y3Rvck5hbWVdLnJldGFpbmVyczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEluIGNhc2Ugd2hlbiBhbiBlbnRyeSBpcyByZXRhaW5lZCBieSBjbHVzdGVycywgd2UgbmVl
ZCB0byBnYXRoZXIgdXAgdGhlIGxpc3QKKyAgICAgICAgICAgIC8vIG9mIHJldGFpbmVycyBieSBt
ZXJnaW5nIHJldGFpbmVycyBvZiBldmVyeSBjbHVzdGVyLgorICAgICAgICAgICAgLy8gRS5nLiBo
YXZpbmcgc3VjaCBhIHRyZWU6CisgICAgICAgICAgICAvLyAgIEEKKyAgICAgICAgICAgIC8vICAg
ICBPYmplY3Q6MSAgMTAKKyAgICAgICAgICAgIC8vICAgICAgIFggICAgICAgMworICAgICAgICAg
ICAgLy8gICAgICAgWSAgICAgICA0CisgICAgICAgICAgICAvLyAgICAgT2JqZWN0OjIgIDUKKyAg
ICAgICAgICAgIC8vICAgICAgIFggICAgICAgNgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIHdpbGwgcmVzdWx0IGluIGEgZm9sbG93aW5nIHJldGFpbmVycyBsaXN0OiBYIDksIFkgNC4K
KyAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJOYW1lIGluIGNsdXN0ZXJzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNsdXN0ZXJOYW1lIGluIHNuYXBzaG90LmNsdXN0ZXJzKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBjbHVzdGVyUmV0YWluZXJzID0gc25hcHNob3QuY2x1c3RlcnNbY2x1
c3Rlck5hbWVdLnJldGFpbmVyczsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2x1c3Rl
clJldGFpbmVyIGluIGNsdXN0ZXJSZXRhaW5lcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBjbHVzdGVyUmV0YWluZXJFbnRyeSA9IGNsdXN0ZXJSZXRhaW5lcnNbY2x1c3RlclJldGFp
bmVyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNsdXN0ZXJSZXRhaW5lciBpbiBy
ZXRhaW5lcnMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tjbHVzdGVy
UmV0YWluZXJdID0geyBjb25zdHJ1Y3Rvck5hbWU6IGNsdXN0ZXJSZXRhaW5lckVudHJ5LmNvbnN0
cnVjdG9yTmFtZSwgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl0uY291bnQgKz0gY2x1c3RlclJldGFpbmVy
RW50cnkuY291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjbHVzdGVyUmV0
YWluZXJDbHVzdGVyIGluIGNsdXN0ZXJSZXRhaW5lckVudHJ5LmNsdXN0ZXJzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tjbHVzdGVyUmV0YWluZXJdLmNsdXN0ZXJzW2Ns
dXN0ZXJSZXRhaW5lckNsdXN0ZXJdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmV0YWluZXJzOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlOworCisKK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0
b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUuVHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhFQVAgU05BUFNIT1RTIikpOwor
fQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkID0gIkhFQVAi
OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlID0gewor
ICAgIGdldCBidXR0b25Ub29sdGlwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlRha2UgaGVhcCBzbmFwc2hvdC4iKTsKKyAgICB9LAorCisgICAgZ2V0IGJ1
dHRvblN0eWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiaGVhcC1zbmFwc2hvdC1zdGF0dXMt
YmFyLWl0ZW0gc3RhdHVzLWJhci1pdGVtIjsKKyAgICB9LAorCisgICAgYnV0dG9uQ2xpY2tlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC50YWtlSGVhcFNuYXBz
aG90KCk7CisgICAgfSwKKworICAgIGdldCB3ZWxjb21lTWVzc2FnZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJHZXQgYSBoZWFwIHNuYXBzaG90IGJ5IHBy
ZXNzaW5nIHRoZSAlcyBidXR0b24gb24gdGhlIHN0YXR1cyBiYXIuIik7CisgICAgfSwKKworICAg
IGNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGU6IGZ1bmN0aW9uKHByb2ZpbGUpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9maWxlU2lkZWJhclRyZWVF
bGVtZW50KHByb2ZpbGUsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiU25hcHNob3QgJWQiKSwgImhl
YXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0iKTsKKyAgICB9LAorCisgICAgY3JlYXRlVmll
dzogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFZpZXcoV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcywgcHJvZmls
ZSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlVHlwZS5wcm90b3R5cGU7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZVZpZXcuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvZmlsZVZpZXcuanMKaW5kZXggODE3ZjFmNS4u
YmE0MmYwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVW
aWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9maWxlVmlldy5qcwpA
QCAtOTUsNyArOTUsNyBAQCBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcgPSBmdW5jdGlvbihw
cm9maWxlKQogICAgIH0KIAogICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChwcm9maWxlQ2FsbGJhY2spOwotICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZShj
YWxsSWQsIHRoaXMucHJvZmlsZS51aWQpOworICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmls
ZShjYWxsSWQsIHRoaXMucHJvZmlsZS50eXBlSWQsIHRoaXMucHJvZmlsZS51aWQpOwogfQogCiBX
ZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlID0gewpAQCAtNjExLDcgKzYxMSw3
IEBAIFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CiAKICAgICBjcmVh
dGVTaWRlYmFyVHJlZUVsZW1lbnRGb3JQcm9maWxlOiBmdW5jdGlvbihwcm9maWxlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxlbWVu
dChwcm9maWxlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGVi
YXJUcmVlRWxlbWVudChwcm9maWxlLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlByb2ZpbGUgJWQi
KSwgInByb2ZpbGUtc2lkZWJhci10cmVlLWl0ZW0iKTsKICAgICB9LAogCiAgICAgY3JlYXRlVmll
dzogZnVuY3Rpb24ocHJvZmlsZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Qcm9maWxlc1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb2Zp
bGVzUGFuZWwuanMKaW5kZXggZTE4Mjc0Yy4uZjYyYzM4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1Byb2ZpbGVzUGFuZWwuanMKQEAgLTMyMSw2ICszMjEsNyBAQCBXZWJJbnNw
ZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLndlbGNv
bWVWaWV3LmhpZGUoKTsKICAgICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlVmlldykKICAgICAg
ICAgICAgICAgICB0aGlzLnNob3dQcm9maWxlKHByb2ZpbGUpOworICAgICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInByb2ZpbGUgYWRkZWQiKTsKICAgICAgICAgfQogICAg
IH0sCiAKQEAgLTM0NSw3ICszNDYsNyBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHNpZGViYXJQYXJlbnQucmVtb3ZlQ2hpbGQocHJvZmlsZS5fcHJv
ZmlsZXNUcmVlRWxlbWVudCk7CiAKICAgICAgICAgaWYgKCFwcm9maWxlLmlzVGVtcG9yYXJ5KQot
ICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVQcm9maWxlKHByb2ZpbGUudWlkKTsK
KyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlUHJvZmlsZShwcm9maWxlLnR5cGVJ
ZCwgcHJvZmlsZS51aWQpOwogCiAgICAgICAgIC8vIE5vIG90aGVyIGl0ZW0gd2lsbCBiZSBzZWxl
Y3RlZCBpZiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHByb2ZpbGVzLCBzbwogICAgICAgICAvLyBt
YWtlIHN1cmUgdGhhdCB2aWV3IGdldHMgY2xlYXJlZCB3aGVuIHRoZSBsYXN0IHByb2ZpbGUgaXMg
cmVtb3ZlZC4KQEAgLTM3Niw2ICszNzcsMjcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5wcm9maWxlVmlld1N0YXR1c0Jhckl0ZW1z
Q29udGFpbmVyLmFwcGVuZENoaWxkKHN0YXR1c0Jhckl0ZW1zW2ldKTsKICAgICB9LAogCisgICAg
Z2V0UHJvZmlsZXM6IGZ1bmN0aW9uKHR5cGVJZCkKKyAgICB7CisgICAgICAgIHZhciByZXN1bHQg
PSBbXTsKKyAgICAgICAgdmFyIHByb2ZpbGVzQ291bnQgPSB0aGlzLl9wcm9maWxlcy5sZW5ndGg7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvZmlsZXNDb3VudDsgKytpKQorICAgICAg
ICAgICAgaWYgKHRoaXMuX3Byb2ZpbGVzW2ldLnR5cGVJZCA9PT0gdHlwZUlkKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuX3Byb2ZpbGVzW2ldKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9LAorCisgICAgdXBkYXRlUHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAg
ICB7CisgICAgICAgIHZhciBwcm9maWxlc0NvdW50ID0gdGhpcy5fcHJvZmlsZXMubGVuZ3RoOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVzQ291bnQ7ICsraSkKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9wcm9maWxlc1tpXS50eXBlSWQgPT09IHByb2ZpbGUudHlwZUlkCisgICAg
ICAgICAgICAgICAgJiYgdGhpcy5fcHJvZmlsZXNbaV0udWlkID09PSBwcm9maWxlLnVpZCkgewor
ICAgICAgICAgICAgICAgIHRoaXMuX3Byb2ZpbGVzW2ldID0gcHJvZmlsZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9LAorCiAgICAgc2hvd1ZpZXc6IGZ1bmN0
aW9uKHZpZXcpCiAgICAgewogICAgICAgICB0aGlzLnNob3dQcm9maWxlKHZpZXcucHJvZmlsZSk7
CkBAIC01NDEsMTQgKzU2MywxNSBAQCBXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5
cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5Qcm9maWxlc1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18g
PSBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuUHJvZmlsZVNp
ZGViYXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb2ZpbGUpCitXZWJJbnNwZWN0b3IuUHJvZmls
ZVNpZGViYXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb2ZpbGUsIHRpdGxlRm9ybWF0LCBjbGFz
c05hbWUpCiB7CiAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTsKKyAgICB0aGlzLl90aXRsZUZv
cm1hdCA9IHRpdGxlRm9ybWF0OwogCiAgICAgaWYgKHRoaXMucHJvZmlsZS50aXRsZS5pbmRleE9m
KFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSkgPT09IDApCiAgICAgICAgIHRoaXMuX3Byb2ZpbGVO
dW1iZXIgPSB0aGlzLnByb2ZpbGUudGl0bGUuc3Vic3RyaW5nKFVzZXJJbml0aWF0ZWRQcm9maWxl
TmFtZS5sZW5ndGggKyAxKTsKIAotICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQu
Y2FsbCh0aGlzLCAicHJvZmlsZS1zaWRlYmFyLXRyZWUtaXRlbSIsICIiLCAiIiwgcHJvZmlsZSwg
ZmFsc2UpOworICAgIFdlYkluc3BlY3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBj
bGFzc05hbWUsICIiLCAiIiwgcHJvZmlsZSwgZmFsc2UpOwogCiAgICAgdGhpcy5yZWZyZXNoVGl0
bGVzKCk7CiB9CkBAIC01NzAsNyArNTkzLDcgQEAgV2ViSW5zcGVjdG9yLlByb2ZpbGVTaWRlYmFy
VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fbWFpblRpdGxlKQog
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21haW5UaXRsZTsKICAgICAgICAgaWYgKHRoaXMucHJv
ZmlsZS50aXRsZS5pbmRleE9mKFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSkgPT09IDApCi0gICAg
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm9maWxlICVkIiwgdGhpcy5f
cHJvZmlsZU51bWJlcik7CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KHRoaXMuX3RpdGxlRm9ybWF0LCB0aGlzLl9wcm9maWxlTnVtYmVyKTsKICAgICAgICAgcmV0dXJu
IHRoaXMucHJvZmlsZS50aXRsZTsKICAgICB9LAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjCmluZGV4IDQ5MDE4NTcuLjFmMTVkYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9XZWJLaXQucXJjCkBAIC00MCw2ICs0MCw3IEBACiAgICAgPGZpbGU+RXh0ZW5zaW9uU2Vy
dmVyLmpzPC9maWxlPgogICAgIDxmaWxlPkZvbnRWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkhB
UkVudHJ5LmpzPC9maWxlPgorICAgIDxmaWxlPkhlYXBTbmFwc2hvdFZpZXcuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+SGVscFNjcmVlbi5qczwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZVZpZXcuanM8L2Zp
bGU+CiAgICAgPGZpbGU+SW5qZWN0ZWRGYWtlV29ya2VyLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCA0MzE5ODE2Li45ODUyYmUwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpAQCAtMzkxMCw2ICszOTEw
LDExNCBAQCBidXR0b24uZW5hYmxlLXRvZ2dsZS1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsKICAg
ICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChJbWFnZXMvcmVsb2FkQnV0dG9uR2x5cGgucG5nKTsK
IH0KIAorLyogSGVhcCBTbmFwc2hvdCBWaWV3IFN0eWxlcyAqLworCisuaGVhcC1zbmFwc2hvdC1z
aWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7CisgICAgY29udGVudDogdXJsKEltYWdlcy9wcm9maWxl
SWNvbi5wbmcpOworfQorCisuaGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbS5zbWFsbCAu
aWNvbiB7CisgICAgY29udGVudDogdXJsKEltYWdlcy9wcm9maWxlU21hbGxJY29uLnBuZyk7Cit9
CisKKy5oZWFwLXNuYXBzaG90LXZpZXcgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxl
ZnQ6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworfQorCisuaGVhcC1zbmFwc2hv
dC12aWV3LnZpc2libGUgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisuaGVhcC1zbmFwc2hv
dC12aWV3IC5kYXRhLWdyaWQgeworICAgIGJvcmRlcjogbm9uZTsKKyAgICBtYXgtaGVpZ2h0OiAx
MDAlOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBsZWZ0OiAwOworICAgIHJpZ2h0OiAw
OworICAgIHRvcDogMDsKKyAgICBib3R0b206IDkzcHg7Cit9CisKKy5oZWFwLXNuYXBzaG90LXZp
ZXcgLmRhdGEtZ3JpZCB0aC5jb3VudC1jb2x1bW4geworICAgIHRleHQtYWxpZ246IGNlbnRlcjsK
K30KKworLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLmNvdW50LWNvbHVtbiB7Cisg
ICAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3Jp
ZCB0aC5zaXplLWNvbHVtbiB7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuaGVhcC1z
bmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGQuc2l6ZS1jb2x1bW4geworICAgIHRleHQtYWxpZ246
IHJpZ2h0OworfQorCisuaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgdGguY291bnREZWx0
YS1jb2x1bW4geworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmhlYXAtc25hcHNob3Qt
dmlldyAuZGF0YS1ncmlkIHRkLmNvdW50RGVsdGEtY29sdW1uIHsKKyAgICB0ZXh0LWFsaWduOiBy
aWdodDsKK30KKworLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRoLnNpemVEZWx0YS1j
b2x1bW4geworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLmhlYXAtc25hcHNob3Qtdmll
dyAuZGF0YS1ncmlkIHRkLnNpemVEZWx0YS1jb2x1bW4geworICAgIHRleHQtYWxpZ246IHJpZ2h0
OworfQorCisjaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWNvbnRhaW5lciB7CisgICAgcG9zaXRpb246
IGFic29sdXRlOworICAgIHBhZGRpbmctdG9wOiAyMHB4OworICAgIGJvdHRvbTogMDsKKyAgICBs
ZWZ0OiAwOworICAgIHJpZ2h0OiAwOworICAgIGhlaWdodDogOTNweDsKKyAgICBtYXJnaW4tbGVm
dDogLTFweDsKKyAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYigxMDIsIDEwMiwgMTAyKTsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAxLCAxMTEsIDEzMCk7CisgICAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwg
ZnJvbShyZ2JhKDAsIDAsIDAsIDAuNSkpLCB0byhyZ2JhKDAsIDAsIDAsIDApKSk7CisgICAgYmFj
a2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICAgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcDsK
KyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgdGV4dC1zaGFkb3c6IGJsYWNrIDAgMXB4IDFw
eDsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIGNvbG9yOiB3aGl0ZTsKKyAgICAtd2Vi
a2l0LWJhY2tncm91bmQtc2l6ZTogMXB4IDZweDsKKyAgICAtd2Via2l0LWJhY2tncm91bmQtb3Jp
Z2luOiBwYWRkaW5nOworICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOworfQor
CisuaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cisg
ICAgd2lkdGg6IDUwJTsKKyAgICBtaW4td2lkdGg6IDMwMHB4OworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKK30KKworLmhlYXAtc25hcHNob3Qtc3VtbWFyeSBjYW52YXMuc3VtbWFyeS1ncmFwaCB7
CisgICAgd2lkdGg6IDIyNXB4OworfQorCisuaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWxhYmVsIHsK
KyAgICBmb250LXNpemU6IDEycHg7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIHRvcDogMXB4OworICAgIHdpZHRoOiA1MCU7CisgICAgbGVmdDog
MjUlOworfQorCiAuZGVsZXRlLXN0b3JhZ2Utc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7CiAgICAg
LXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoSW1hZ2VzL2V4Y2x1ZGVCdXR0b25HbHlwaC5wbmcpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1s
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDE0ZTJj
ZGMuLjQ5Njg2ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0
bWwKQEAgLTEyNSw2ICsxMjUsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IkJvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVG9wRG93blByb2ZpbGVE
YXRhR3JpZFRyZWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9IlByb2ZpbGVWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJIZWFwU25hcHNob3RWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJET01BZ2VudC5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5qZWN0ZWRTY3JpcHQu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Iklu
amVjdGVkU2NyaXB0QWNjZXNzLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCmluZGV4IGRiODllMjAuLmQxN2ViNGQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMjMzLDYgKzIzMyw4IEBAIHZhciBXZWJJbnNw
ZWN0b3IgPSB7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhPZigicHJvZmlsZXMiKSA9
PT0gLTEpIHsKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnByb2ZpbGVzID0gbmV3IFdlYkluc3Bl
Y3Rvci5Qcm9maWxlc1BhbmVsKCk7CiAgICAgICAgICAgICB0aGlzLnBhbmVscy5wcm9maWxlcy5y
ZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVR5cGUoKSk7Cisg
ICAgICAgICAgICBpZiAoUHJlZmVyZW5jZXMuaGVhcFByb2ZpbGVyUHJlc2VudCkKKyAgICAgICAg
ICAgICAgICB0aGlzLnBhbmVscy5wcm9maWxlcy5yZWdpc3RlclByb2ZpbGVUeXBlKG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUoKSk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJzdG9yYWdlIikgPT09IC0xICYmIGhpZGRlblBhbmVs
cy5pbmRleE9mKCJkYXRhYmFzZXMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlzLnBhbmVscy5z
dG9yYWdlID0gbmV3IFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwoKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDVkODYwZWQuLjY3OTVlMmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA4
LTI1ICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogU3Rv
cmUgaGVhcCBzbmFwc2hvdHMgaW4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC4KKworICAgICAgICBD
aGFuZ2UgdGhlIHdheSBoZWFwIHNuYXBzaG90cyBhcmUgdHJhbnNwb3J0ZWQgdG8gSW5zcGVjdG9y
CisgICAgICAgIHRvIGJlIGFsaWduZWQgd2l0aCBDUFUgcHJvZmlsZXMuIEFzIGEgcmVzdWx0LCB0
aGUgSGVhcCBzbmFwc2hvdHMKKyAgICAgICAgdmlldyBvZiBQcm9maWxlcyBwYW5lbCB3YXMgdXBz
dHJlYW1lZCBpbnRvIFdlYkNvcmUuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAg
KiBzcmMvanMvRGV2VG9vbHMuanM6CisgICAgICAgICgpOgorICAgICAgICAqIHNyYy9qcy9IZWFw
UHJvZmlsZXJQYW5lbC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvanMvUHJvZmlsZXJBZ2Vu
dC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvanMvUHJvZmlsZXJQcm9jZXNzb3IuanM6IFJl
bW92ZWQuCisgICAgICAgICogc3JjL2pzL2RldlRvb2xzLmNzczoKKwogMjAxMC0wOC0yNSAgU2F0
aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEplcmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBi
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBiNDVlM2U3Li40YzZhYzM3IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC0zMyw5ICszMyw2IEBACiAgICAgICAgICMgTGlzdCBvZiBEZXZUb29s
cyBzb3VyY2UgZmlsZXMsIG9yZGVyZWQgYnkgZGVwZW5kZW5jaWVzLiBJdCBpcyB1c2VkIGJvdGgK
ICAgICAgICAgIyBmb3IgY29weWluZyB0aGVtIHRvIHJlc291cmNlIGRpciwgYW5kIGZvciBnZW5l
cmF0aW5nICdkZXZ0b29scy5odG1sJyBmaWxlLgogICAgICAgICAnZGV2dG9vbHNfanNfZmlsZXMn
OiBbCi0gICAgICAgICAgICAnc3JjL2pzL1Byb2ZpbGVyQWdlbnQuanMnLAotICAgICAgICAgICAg
J3NyYy9qcy9Qcm9maWxlclByb2Nlc3Nvci5qcycsCi0gICAgICAgICAgICAnc3JjL2pzL0hlYXBQ
cm9maWxlclBhbmVsLmpzJywKICAgICAgICAgICAgICdzcmMvanMvRGV2VG9vbHMuanMnLAogICAg
ICAgICAgICAgJ3NyYy9qcy9EZXZUb29sc0hvc3RTdHViLmpzJywKICAgICAgICAgICAgICdzcmMv
anMvVGVzdHMuanMnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29s
cy5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKaW5kZXggZTNlMDIwNC4u
YzQwNzNjZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcwor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL0RldlRvb2xzLmpzCkBAIC0zNCwzOSArMzQsMTMg
QEAKICAqIERldlRvb2xzIGZyb250ZW5kIHRvZ2V0aGVyLiBJdCBpcyBhbHNvIHJlc3BvbnNpYmxl
IGZvciBvdmVycmlkaW5nIGV4aXN0aW5nCiAgKiBXZWJJbnNwZWN0b3IgZnVuY3Rpb25hbGl0eSB3
aGlsZSBpdCBpcyBnZXR0aW5nIHVwc3RyZWFtZWQgaW50byBXZWJDb3JlLgogICovCi1kZXZ0b29s
cy5Ub29sc0FnZW50ID0gZnVuY3Rpb24oKQotewotICAgIHRoaXMucHJvZmlsZXJBZ2VudF8gPSBu
ZXcgZGV2dG9vbHMuUHJvZmlsZXJBZ2VudCgpOwotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge2Rl
dnRvb2xzLlByb2ZpbGVyQWdlbnR9IFByb2ZpbGVyIGFnZW50IGluc3RhbmNlLgotICovCi1kZXZ0
b29scy5Ub29sc0FnZW50LnByb3RvdHlwZS5nZXRQcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQot
ewotICAgIHJldHVybiB0aGlzLnByb2ZpbGVyQWdlbnRfOwotfTsKLQotCi0KLS8qKgotICogR2xv
YmFsIGluc3RhbmNlIG9mIHRoZSB0b29scyBhZ2VudC4KLSAqIEB0eXBlIHtkZXZ0b29scy5Ub29s
c0FnZW50fQotICovCi1kZXZ0b29scy50b29scyA9IG51bGw7Ci0KIAogdmFyIGNvbnRleHQgPSB7
fTsgIC8vIFVzZWQgYnkgV2ViQ29yZSdzIGluc3BlY3RvciByb3V0aW5lcy4KIAogLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwogLy8gSGVyZSBhbmQgYmVsb3cgYXJlIG92ZXJyaWRlcyB0byBleGlzdGlu
ZyBXZWJJbnNwZWN0b3IgbWV0aG9kcyBvbmx5LgogLy8gVE9ETyhwZmVsZG1hbik6IFBhdGNoIFdl
YkNvcmUgYW5kIHVwc3RyZWFtIGNoYW5nZXMuCi12YXIgb2xkTG9hZGVkID0gV2ViSW5zcGVjdG9y
LmxvYWRlZDsKLVdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCi17Ci0gICAgZGV2dG9v
bHMudG9vbHMgPSBuZXcgZGV2dG9vbHMuVG9vbHNBZ2VudCgpOwotCisoZnVuY3Rpb24gKCkgewog
ICAgIFByZWZlcmVuY2VzLmlnbm9yZVdoaXRlc3BhY2UgPSBmYWxzZTsKICAgICBQcmVmZXJlbmNl
cy5zYW1wbGluZ0NQVVByb2ZpbGVyID0gdHJ1ZTsKICAgICBQcmVmZXJlbmNlcy5oZWFwUHJvZmls
ZXJQcmVzZW50ID0gdHJ1ZTsKQEAgLTc1LDkgKzQ5LDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9
IGZ1bmN0aW9uKCkKICAgICBQcmVmZXJlbmNlcy5jYW5FZGl0U2NyaXB0U291cmNlID0gdHJ1ZTsK
ICAgICBQcmVmZXJlbmNlcy5vbmxpbmVEZXRlY3Rpb25FbmFibGVkID0gZmFsc2U7CiAgICAgUHJl
ZmVyZW5jZXMuZG9tQnJlYWtwb2ludHNFbmFibGVkID0gdHJ1ZTsKLQotICAgIG9sZExvYWRlZC5j
YWxsKFdlYkluc3BlY3Rvcik7Ci19Cit9KSgpOwogCiBkZXZ0b29scy5kb21Db250ZW50TG9hZGVk
ID0gZnVuY3Rpb24oKQogewpAQCAtOTMsNyArNjUsNiBAQCBkb2N1bWVudC5hZGRFdmVudExpc3Rl
bmVyKCJET01Db250ZW50TG9hZGVkIiwgZGV2dG9vbHMuZG9tQ29udGVudExvYWRlZCwgZmFsc2Up
OwogICAgIHZhciBvbGRTaG93ID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBl
LnNob3c7CiAgICAgV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNob3cgPSBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICBkZXZ0b29scy50b29scy5nZXRQcm9maWxlckFnZW50
KCkuaW5pdGlhbGl6ZVByb2ZpbGluZygpOwogICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRv
bi52aXNpYmxlID0gZmFsc2U7CiAgICAgICAgIG9sZFNob3cuY2FsbCh0aGlzKTsKICAgICAgICAg
Ly8gU2hvdyBpcyBjYWxsZWQgb24gZXZlcnkgc2hvdyBldmVudCBvZiBhIHBhbmVsLCBzbwpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5qcyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvSGVhcFByb2ZpbGVyUGFuZWwuanMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJjYjAwOGYuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDk2NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoqCi0gKiBAZmlsZW92ZXJ2aWV3IEhlYXAgcHJvZmlsZXIgcGFuZWwgaW1wbGVtZW50YXRpb24u
Ci0gKi8KLQotV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLmFkZFNuYXBzaG90
ID0gZnVuY3Rpb24oc25hcHNob3QpIHsKLSAgICBzbmFwc2hvdC50aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiU25hcHNob3QgJWQiLCBzbmFwc2hvdC5udW1iZXIpOwotICAgIHNuYXBzaG90
LnR5cGVJZCA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQ7Ci0K
LSAgICB2YXIgc25hcHNob3RzID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBl
LnNuYXBzaG90czsKLSAgICBzbmFwc2hvdHMucHVzaChzbmFwc2hvdCk7Ci0KLSAgICBzbmFwc2hv
dC5saXN0SW5kZXggPSBzbmFwc2hvdHMubGVuZ3RoIC0gMTsKLQotICAgIGlmIChXZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZSkKLSAgICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5UeXBlSWQsIHNuYXBzaG90KTsKLSAgICBlbHNlCi0g
ICAgICAgIHRoaXMuYWRkUHJvZmlsZUhlYWRlcihzbmFwc2hvdCk7Ci0KLSAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycygic25hcHNob3QgYWRkZWQiKTsKLX0KLQotCi1XZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKLXsKLSAgICBX
ZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOwotCi0gICAgdGhpcy5lbGVtZW50LmFkZFN0eWxl
Q2xhc3MoImhlYXAtc25hcHNob3QtdmlldyIpOwotCi0gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7
Ci0gICAgdGhpcy5wYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcigic25hcHNob3QgYWRkZWQiLCB0aGlz
Ll91cGRhdGVCYXNlT3B0aW9ucywgdGhpcyk7Ci0KLSAgICB0aGlzLnNob3dDb3VudEFzUGVyY2Vu
dCA9IGZhbHNlOwotICAgIHRoaXMuc2hvd1NpemVBc1BlcmNlbnQgPSBmYWxzZTsKLSAgICB0aGlz
LnNob3dDb3VudERlbHRhQXNQZXJjZW50ID0gZmFsc2U7Ci0gICAgdGhpcy5zaG93U2l6ZURlbHRh
QXNQZXJjZW50ID0gZmFsc2U7Ci0KLSAgICB0aGlzLmNhdGVnb3JpZXMgPSB7Ci0gICAgICAgIGNv
ZGU6IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDYXRlZ29yeSgiY29kZSIsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ29kZSIpLCAicmdiKDI1NSwxMjEsMCkiKSwKLSAgICAgICAgZGF0YTogbmV3
IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVnb3J5KCJkYXRhIiwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJPYmplY3RzIiksICJyZ2IoNDcsMTAyLDIzNikiKQotICAgIH07Ci0KLSAgICB2YXIgc3Vt
bWFyeUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIHN1bW1h
cnlDb250YWluZXIuaWQgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWNvbnRhaW5lciI7Ci0KLSAg
ICB0aGlzLmNvdW50c1N1bW1hcnlCYXIgPSBuZXcgV2ViSW5zcGVjdG9yLlN1bW1hcnlCYXIodGhp
cy5jYXRlZ29yaWVzKTsKLSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIuZWxlbWVudC5jbGFzc05h
bWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5IjsKLSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIu
Y2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3Io
KTsKLSAgICB2YXIgY291bnRzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICBjb3VudHNMYWJlbC5jbGFzc05hbWUgPSAiaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWxhYmVs
IjsKLSAgICBjb3VudHNMYWJlbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
Q291bnQiKTsKLSAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIuZWxlbWVudC5hcHBlbmRDaGlsZChj
b3VudHNMYWJlbCk7Ci0gICAgc3VtbWFyeUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvdW50
c1N1bW1hcnlCYXIuZWxlbWVudCk7Ci0KLSAgICB0aGlzLnNpemVzU3VtbWFyeUJhciA9IG5ldyBX
ZWJJbnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNhdGVnb3JpZXMpOwotICAgIHRoaXMuc2l6ZXNT
dW1tYXJ5QmFyLmVsZW1lbnQuY2xhc3NOYW1lID0gImhlYXAtc25hcHNob3Qtc3VtbWFyeSI7Ci0g
ICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuY2FsY3VsYXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFN1bW1hcnlTaXplQ2FsY3VsYXRvcigpOwotICAgIHZhciBzaXplc0xhYmVsID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgibGFiZWwiKTsKLSAgICBzaXplc0xhYmVsLmNsYXNzTmFtZSA9ICJoZWFw
LXNuYXBzaG90LXN1bW1hcnktbGFiZWwiOwotICAgIHNpemVzTGFiZWwudGV4dENvbnRlbnQgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKTsKLSAgICB0aGlzLnNpemVzU3VtbWFyeUJhci5l
bGVtZW50LmFwcGVuZENoaWxkKHNpemVzTGFiZWwpOwotICAgIHN1bW1hcnlDb250YWluZXIuYXBw
ZW5kQ2hpbGQodGhpcy5zaXplc1N1bW1hcnlCYXIuZWxlbWVudCk7Ci0KLSAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQoc3VtbWFyeUNvbnRhaW5lcik7Ci0KLSAgICB2YXIgY29sdW1ucyA9IHsg
ImNvbnMiOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnN0cnVjdG9yIiksIGRp
c2Nsb3N1cmU6IHRydWUsIHNvcnRhYmxlOiB0cnVlIH0sCi0gICAgICAgICAgICAgICAgICAgICJj
b3VudCI6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ291bnQiKSwgd2lkdGg6ICI1
NHB4Iiwgc29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgICAgICAgICAgICAgInNpemUiOiB7IHRp
dGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNpemUiKSwgd2lkdGg6ICI3MnB4Iiwgc29ydDog
ImRlc2NlbmRpbmciLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgICAiY291
bnREZWx0YSI6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiXHhiMSBDb3VudCIpLCB3
aWR0aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICAgICAgICAgICAgICAic2l6
ZURlbHRhIjogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJceGIxIFNpemUiKSwgd2lk
dGg6ICI3MnB4Iiwgc29ydGFibGU6IHRydWUgfSB9OwotCi0gICAgdGhpcy5kYXRhR3JpZCA9IG5l
dyBXZWJJbnNwZWN0b3IuRGF0YUdyaWQoY29sdW1ucyk7Ci0gICAgdGhpcy5kYXRhR3JpZC5hZGRF
dmVudExpc3RlbmVyKCJzb3J0aW5nIGNoYW5nZWQiLCB0aGlzLl9zb3J0RGF0YSwgdGhpcyk7Ci0g
ICAgdGhpcy5kYXRhR3JpZC5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRo
aXMuX21vdXNlRG93bkluRGF0YUdyaWQuYmluZCh0aGlzKSwgdHJ1ZSk7Ci0gICAgdGhpcy5lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuZGF0YUdyaWQuZWxlbWVudCk7Ci0KLSAgICB0aGlzLnByb2Zp
bGUgPSBwcm9maWxlOwotCi0gICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuY2xhc3NO
YW1lID0gInN0YXR1cy1iYXItaXRlbSI7Ci0gICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9jaGFuZ2VCYXNlLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLl91cGRhdGVCYXNlT3B0aW9ucygpOwotICAgIGlmICh0aGlzLnByb2ZpbGUu
bGlzdEluZGV4ID4gMCkKLSAgICAgICAgdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZElu
ZGV4ID0gdGhpcy5wcm9maWxlLmxpc3RJbmRleCAtIDE7Ci0gICAgZWxzZQotICAgICAgICB0aGlz
LmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSB0aGlzLnByb2ZpbGUubGlzdEluZGV4
OwotICAgIHRoaXMuX3Jlc2V0RGF0YUdyaWRMaXN0KCk7Ci0KLSAgICB0aGlzLnBlcmNlbnRCdXR0
b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgInBlcmNlbnQtdGltZS1z
dGF0dXMtYmFyLWl0ZW0gc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5wZXJjZW50QnV0dG9u
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcGVyY2VudENsaWNrZWQuYmluZCh0aGlz
KSwgZmFsc2UpOwotCi0gICAgdGhpcy5yZWZyZXNoKCk7Ci0KLSAgICB0aGlzLl91cGRhdGVQZXJj
ZW50QnV0dG9uKCk7Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5
cGUgPSB7Ci0KLSAgICBnZXQgc3RhdHVzQmFySXRlbXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IFt0aGlzLmJhc2VTZWxlY3RFbGVtZW50LCB0aGlzLnBlcmNlbnRCdXR0b24uZWxlbWVudF07Ci0g
ICAgfSwKLQotICAgIGdldCBwcm9maWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9w
cm9maWxlOwotICAgIH0sCi0KLSAgICBzZXQgcHJvZmlsZShwcm9maWxlKQotICAgIHsKLSAgICAg
ICAgdGhpcy5fcHJvZmlsZSA9IHByb2ZpbGU7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0aW9u
KHBhcmVudEVsZW1lbnQpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5
cGUuc2hvdy5jYWxsKHRoaXMsIHBhcmVudEVsZW1lbnQpOwotICAgICAgICB0aGlzLmRhdGFHcmlk
LnVwZGF0ZVdpZHRocygpOwotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOwotICAg
ICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKLSAgICB9LAotCi0gICAg
cmVzaXplOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5kYXRhR3JpZCkKLSAg
ICAgICAgICAgIHRoaXMuZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7Ci0gICAgfSwKLQotICAgIHJl
ZnJlc2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZGF0YUdyaWQucmVtb3ZlQ2hp
bGRyZW4oKTsKLQotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnNuYXBzaG90RGF0YUdyaWRM
aXN0LmNoaWxkcmVuOwotICAgICAgICB2YXIgY291bnQgPSBjaGlsZHJlbi5sZW5ndGg7Ci0gICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKLSAgICAgICAg
ICAgIHRoaXMuZGF0YUdyaWQuYXBwZW5kQ2hpbGQoY2hpbGRyZW5baW5kZXhdKTsKLQotICAgICAg
ICB0aGlzLl91cGRhdGVTdW1tYXJ5R3JhcGgoKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaFNob3dB
c1BlcmNlbnRzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVQZXJjZW50
QnV0dG9uKCk7Ci0gICAgICAgIHRoaXMucmVmcmVzaFZpc2libGVEYXRhKCk7Ci0gICAgfSwKLQot
ICAgIF9kZWxldGVTZWFyY2hNYXRjaGVkRmxhZ3M6IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAg
ICAgICBkZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZENvbnNDb2x1bW47Ci0gICAgICAgIGRlbGV0
ZSBub2RlLl9zZWFyY2hNYXRjaGVkQ291bnRDb2x1bW47Ci0gICAgICAgIGRlbGV0ZSBub2RlLl9z
ZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbjsKLSAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNo
ZWRDb3VudERlbHRhQ29sdW1uOwotICAgICAgICBkZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZFNp
emVEZWx0YUNvbHVtbjsKLSAgICB9LAotCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWFyY2hSZXN1bHRzKSB7Ci0gICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJvZmlsZU5vZGUgPSB0aGlzLl9zZWFyY2hSZXN1bHRzW2ldLnBy
b2ZpbGVOb2RlOwotICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZVNlYXJjaE1hdGNoZWRGbGFn
cyhwcm9maWxlTm9kZSk7Ci0gICAgICAgICAgICAgICAgcHJvZmlsZU5vZGUucmVmcmVzaCgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaEZp
bmlzaGVkQ2FsbGJhY2s7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9
IC0xOwotICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107Ci0gICAgfSwKLQotICAgIHBl
cmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBmaW5pc2hlZENhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgLy8gQ2FsbCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBpdCB3aWxsIHJlc2V0IGV2ZXJ5dGhp
bmcgd2UgbmVlZCBiZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNoLgotICAgICAgICB0aGlzLnNlYXJj
aENhbmNlbGVkKCk7Ci0KLSAgICAgICAgcXVlcnkgPSBxdWVyeS50cmltKCk7Ci0KLSAgICAgICAg
aWYgKCFxdWVyeS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5f
c2VhcmNoRmluaXNoZWRDYWxsYmFjayA9IGZpbmlzaGVkQ2FsbGJhY2s7Ci0KLSAgICAgICAgdmFy
IGhlbHBlciA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlcjsKLQot
ICAgICAgICB2YXIgb3BlcmF0aW9uQW5kTnVtYmVyID0gaGVscGVyLnBhcnNlT3BlcmF0aW9uQW5k
TnVtYmVyKHF1ZXJ5KTsKLSAgICAgICAgdmFyIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFuZE51bWJl
clswXTsKLSAgICAgICAgdmFyIHF1ZXJ5TnVtYmVyID0gb3BlcmF0aW9uQW5kTnVtYmVyWzFdOwot
Ci0gICAgICAgIHZhciBwZXJjZW50VW5pdHMgPSBoZWxwZXIucGVyY2VudHMudGVzdChxdWVyeSk7
Ci0gICAgICAgIHZhciBtZWdhQnl0ZXNVbml0cyA9IGhlbHBlci5tZWdhQnl0ZXMudGVzdChxdWVy
eSk7Ci0gICAgICAgIHZhciBraWxvQnl0ZXNVbml0cyA9IGhlbHBlci5raWxvQnl0ZXMudGVzdChx
dWVyeSk7Ci0gICAgICAgIHZhciBieXRlc1VuaXRzID0gaGVscGVyLmJ5dGVzLnRlc3QocXVlcnkp
OwotCi0gICAgICAgIHZhciBxdWVyeU51bWJlckJ5dGVzID0gKG1lZ2FCeXRlc1VuaXRzID8gKHF1
ZXJ5TnVtYmVyICogMTAyNCAqIDEwMjQpIDogKGtpbG9CeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVy
ICogMTAyNCkgOiBxdWVyeU51bWJlcikpOwotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoZXNRdWVy
eShoZWFwU25hcHNob3REYXRhR3JpZE5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZs
YWdzKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZSk7Ci0KLSAgICAgICAgICAgIGlmIChwZXJjZW50
VW5pdHMpIHsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJj
aE1hdGNoZWRDb3VudENvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUu
Y291bnRQZXJjZW50LCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90
RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25h
cHNob3REYXRhR3JpZE5vZGUuc2l6ZVBlcmNlbnQsIHF1ZXJ5TnVtYmVyKTsKLSAgICAgICAgICAg
ICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29s
dW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5jb3VudERlbHRhUGVyY2Vu
dCwgcXVlcnlOdW1iZXIpOwotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9k
ZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3RE
YXRhR3JpZE5vZGUuc2l6ZURlbHRhUGVyY2VudCwgcXVlcnlOdW1iZXIpOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChtZWdhQnl0ZXNVbml0cyB8fCBraWxvQnl0ZXNVbml0cyB8fCBieXRlc1VuaXRz
KSB7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRj
aGVkU2l6ZUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZSwg
cXVlcnlOdW1iZXJCeXRlcyk7Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWRO
b2RlLl9zZWFyY2hNYXRjaGVkU2l6ZURlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hv
dERhdGFHcmlkTm9kZS5zaXplRGVsdGEsIHF1ZXJ5TnVtYmVyQnl0ZXMpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJj
aE1hdGNoZWRDb3VudENvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUu
Y291bnQsIHF1ZXJ5TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZS5jb3VudERlbHRhLCBxdWVyeU51bWJlcik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY29uc3RydWN0b3JO
YW1lLmhhc1N1YnN0cmluZyhxdWVyeSwgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgaGVhcFNuYXBz
aG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ29uc0NvbHVtbiA9IHRydWU7Ci0KLSAgICAg
ICAgICAgIGlmIChoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29s
dW1uIHx8Ci0gICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hN
YXRjaGVkQ291bnRDb2x1bW4gfHwKLSAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGUuX3NlYXJjaE1hdGNoZWRTaXplQ29sdW1uIHx8Ci0gICAgICAgICAgICAgICAgaGVhcFNu
YXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbiB8fAotICAg
ICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVE
ZWx0YUNvbHVtbikgewotICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5y
ZWZyZXNoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBjdXJy
ZW50ID0gdGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdC5jaGlsZHJlblswXTsKLSAgICAgICAgdmFy
IGRlcHRoID0gMDsKLSAgICAgICAgdmFyIGluZm8gPSB7fTsKLQotICAgICAgICAvLyBUaGUgc2Vj
b25kIGFuZCBzdWJzZXF1ZW50IGxldmVscyBvZiBoZWFwIHNuYXBzaG90IG5vZGVzIHJlcHJlc2Vu
dCByZXRhaW5lcnMsCi0gICAgICAgIC8vIHNvIHJlY3Vyc2l2ZSBleHBhbnNpb24gd2lsbCBiZSBp
bmZpbml0ZSwgc2luY2UgYSBncmFwaCBpcyBiZWluZyB0cmF2ZXJzZWQuCi0gICAgICAgIC8vIFNv
IGRlZmF1bHQgdG8gYSByZWN1cnNpb24gY2FwIG9mIDIgbGV2ZWxzLgotICAgICAgICB2YXIgbWF4
RGVwdGggPSAyOwotCi0gICAgICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgICAgICBpZiAo
bWF0Y2hlc1F1ZXJ5KGN1cnJlbnQpKQotICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3Vs
dHMucHVzaCh7IHByb2ZpbGVOb2RlOiBjdXJyZW50IH0pOwotICAgICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgbnVsbCwgKGRlcHRoID49IG1heERlcHRo
KSwgaW5mbyk7Ci0gICAgICAgICAgICBkZXB0aCArPSBpbmZvLmRlcHRoQ2hhbmdlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZmluaXNoZWRDYWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRz
Lmxlbmd0aCk7Ci0gICAgfSwKLQotICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNw
ZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0LAot
ICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5w
cm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCwKLSAgICBqdW1wVG9OZXh0U2VhcmNoUmVz
dWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb05leHRTZWFy
Y2hSZXN1bHQsCi0gICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5D
UFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQsCi0gICAg
c2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJv
dG90eXBlLnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdCwKLSAgICBzaG93aW5nTGFzdFNlYXJjaFJl
c3VsdDogV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5zaG93aW5nTGFzdFNl
YXJjaFJlc3VsdCwKLSAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJv
ZmlsZVZpZXcucHJvdG90eXBlLl9qdW1wVG9TZWFyY2hSZXN1bHQsCi0KLSAgICByZWZyZXNoVmlz
aWJsZURhdGE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZGF0
YUdyaWQuY2hpbGRyZW5bMF07Ci0gICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAg
Y2hpbGQucmVmcmVzaCgpOwotICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC50cmF2ZXJzZU5leHRO
b2RlKGZhbHNlLCBudWxsLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl91cGRhdGVT
dW1tYXJ5R3JhcGgoKTsKLSAgICB9LAotCi0gICAgX2NoYW5nZUJhc2U6IGZ1bmN0aW9uKCkgewot
ICAgICAgICBpZiAodGhpcy5iYXNlU25hcHNob3QgPT09IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQcm9maWxlVHlwZS5zbmFwc2hvdHNbdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZElu
ZGV4XSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9yZXNldERhdGFHcmlk
TGlzdCgpOwotICAgICAgICB0aGlzLnJlZnJlc2goKTsKLQotICAgICAgICBpZiAoIXRoaXMuY3Vy
cmVudFF1ZXJ5IHx8ICF0aGlzLl9zZWFyY2hGaW5pc2hlZENhbGxiYWNrIHx8ICF0aGlzLl9zZWFy
Y2hSZXN1bHRzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFRoZSBjdXJyZW50
IHNlYXJjaCBuZWVkcyB0byBiZSBwZXJmb3JtZWQgYWdhaW4uIEZpcnN0IG5lZ2F0ZSBvdXQgcHJl
dmlvdXMgbWF0Y2gKLSAgICAgICAgLy8gY291bnQgYnkgY2FsbGluZyB0aGUgc2VhcmNoIGZpbmlz
aGVkIGNhbGxiYWNrIHdpdGggYSBuZWdhdGl2ZSBudW1iZXIgb2YgbWF0Y2hlcy4KLSAgICAgICAg
Ly8gVGhlbiBwZXJmb3JtIHRoZSBzZWFyY2ggYWdhaW4gd2l0aCB0aGUgc2FtZSBxdWVyeSBhbmQg
Y2FsbGJhY2suCi0gICAgICAgIHRoaXMuX3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sodGhpcywgLXRo
aXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKLSAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKHRo
aXMuY3VycmVudFF1ZXJ5LCB0aGlzLl9zZWFyY2hGaW5pc2hlZENhbGxiYWNrKTsKLSAgICB9LAot
Ci0gICAgX2NyZWF0ZVNuYXBzaG90RGF0YUdyaWRMaXN0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fc25hcHNob3REYXRhR3JpZExpc3QpCi0gICAgICAgICAgZGVsZXRlIHRo
aXMuX3NuYXBzaG90RGF0YUdyaWRMaXN0OwotCi0gICAgICAgIHRoaXMuX3NuYXBzaG90RGF0YUdy
aWRMaXN0ID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QodGhpcywg
dGhpcy5iYXNlU25hcHNob3QuZW50cmllcywgdGhpcy5wcm9maWxlLmVudHJpZXMpOwotICAgICAg
ICByZXR1cm4gdGhpcy5fc25hcHNob3REYXRhR3JpZExpc3Q7Ci0gICAgfSwKLQotICAgIF9tb3Vz
ZURvd25JbkRhdGFHcmlkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChldmVu
dC5kZXRhaWwgPCAyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjZWxsID0g
ZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRkIik7Ci0gICAg
ICAgIGlmICghY2VsbCB8fCAoIWNlbGwuaGFzU3R5bGVDbGFzcygiY291bnQtY29sdW1uIikgJiYg
IWNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZS1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHlsZUNsYXNz
KCJjb3VudERlbHRhLWNvbHVtbiIpICYmICFjZWxsLmhhc1N0eWxlQ2xhc3MoInNpemVEZWx0YS1j
b2x1bW4iKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGNlbGwuaGFzU3R5
bGVDbGFzcygiY291bnQtY29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNob3dDb3VudEFzUGVy
Y2VudCA9ICF0aGlzLnNob3dDb3VudEFzUGVyY2VudDsKLSAgICAgICAgZWxzZSBpZiAoY2VsbC5o
YXNTdHlsZUNsYXNzKCJzaXplLWNvbHVtbiIpKQotICAgICAgICAgICAgdGhpcy5zaG93U2l6ZUFz
UGVyY2VudCA9ICF0aGlzLnNob3dTaXplQXNQZXJjZW50OwotICAgICAgICBlbHNlIGlmIChjZWxs
Lmhhc1N0eWxlQ2xhc3MoImNvdW50RGVsdGEtY29sdW1uIikpCi0gICAgICAgICAgICB0aGlzLnNo
b3dDb3VudERlbHRhQXNQZXJjZW50ID0gIXRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQ7Ci0g
ICAgICAgIGVsc2UgaWYgKGNlbGwuaGFzU3R5bGVDbGFzcygic2l6ZURlbHRhLWNvbHVtbiIpKQot
ICAgICAgICAgICAgdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID0gIXRoaXMuc2hvd1NpemVE
ZWx0YUFzUGVyY2VudDsKLQotICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOwot
Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOwotICAgIH0sCi0KLSAgICBnZXQgX2lzU2hvd2luZ0FzUGVyY2VudCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5zaG93Q291bnRBc1BlcmNlbnQgJiYgdGhpcy5zaG93U2l6
ZUFzUGVyY2VudCAmJiB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ICYmIHRoaXMuc2hvd1Np
emVEZWx0YUFzUGVyY2VudDsKLSAgICB9LAotCi0gICAgX3BlcmNlbnRDbGlja2VkOiBmdW5jdGlv
bihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSB0aGlzLl9pc1Nob3dp
bmdBc1BlcmNlbnQ7Ci0gICAgICAgIHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ID0gIWN1cnJlbnRT
dGF0ZTsKLSAgICAgICAgdGhpcy5zaG93U2l6ZUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7Ci0g
ICAgICAgIHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOwotICAg
ICAgICB0aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOwotICAgICAg
ICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOwotICAgIH0sCi0KLSAgICBfcmVzZXREYXRh
R3JpZExpc3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuYmFzZVNuYXBzaG90ID0g
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnNuYXBzaG90c1t0aGlzLmJhc2VT
ZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXhdOwotICAgICAgICB2YXIgbGFzdENvbXBhcmF0b3Ig
PSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3BlcnR5Q29tcGFyYXRv
cigic2l6ZSIsIGZhbHNlKTsKLSAgICAgICAgaWYgKHRoaXMuc25hcHNob3REYXRhR3JpZExpc3Qp
Ci0gICAgICAgICAgICBsYXN0Q29tcGFyYXRvciA9IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3Qu
bGFzdENvbXBhcmF0b3I7Ci0gICAgICAgIHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QgPSB0aGlz
Ll9jcmVhdGVTbmFwc2hvdERhdGFHcmlkTGlzdCgpOwotICAgICAgICB0aGlzLnNuYXBzaG90RGF0
YUdyaWRMaXN0LnNvcnQobGFzdENvbXBhcmF0b3IsIHRydWUpOwotICAgIH0sCi0KLSAgICBfc29y
dERhdGE6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhp
cy5kYXRhR3JpZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOwotICAgICAgICB2YXIgc29ydENv
bHVtbklkZW50aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyOwotICAg
ICAgICB2YXIgc29ydFByb3BlcnR5ID0gewotICAgICAgICAgICAgICAgICJjb25zIjogWyJjb25z
dHJ1Y3Rvck5hbWUiLCBudWxsXSwKLSAgICAgICAgICAgICAgICAiY291bnQiOiBbImNvdW50Iiwg
bnVsbF0sCi0gICAgICAgICAgICAgICAgInNpemUiOiBbInNpemUiLCAiY291bnQiXSwKLSAgICAg
ICAgICAgICAgICAiY291bnREZWx0YSI6IHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgPyBb
ImNvdW50RGVsdGFQZXJjZW50IiwgbnVsbF0gOiBbImNvdW50RGVsdGEiLCBudWxsXSwKLSAgICAg
ICAgICAgICAgICAic2l6ZURlbHRhIjogdGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID8gWyJz
aXplRGVsdGFQZXJjZW50IiwgImNvdW50RGVsdGFQZXJjZW50Il0gOiBbInNpemVEZWx0YSIsICJz
aXplRGVsdGFQZXJjZW50Il0KLSAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07Ci0KLSAg
ICAgICAgdGhpcy5zbmFwc2hvdERhdGFHcmlkTGlzdC5zb3J0KFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9yKHNvcnRQcm9wZXJ0eVswXSwgc29y
dFByb3BlcnR5WzFdLCBzb3J0QXNjZW5kaW5nKSk7Ci0KLSAgICAgICAgdGhpcy5yZWZyZXNoKCk7
Ci0gICAgfSwKLQotICAgIF91cGRhdGVCYXNlT3B0aW9uczogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIGxpc3QgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuc25h
cHNob3RzOwotICAgICAgICAvLyBXZSdyZSBhc3N1bWluZyB0aGF0IHNuYXBzaG90cyBjYW4gb25s
eSBiZSBhZGRlZC4KLSAgICAgICAgaWYgKHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQubGVuZ3RoID09
PSBsaXN0Lmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKHZhciBp
ID0gdGhpcy5iYXNlU2VsZWN0RWxlbWVudC5sZW5ndGgsIG4gPSBsaXN0Lmxlbmd0aDsgaSA8IG47
ICsraSkgewotICAgICAgICAgICAgdmFyIGJhc2VPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJvcHRpb24iKTsKLSAgICAgICAgICAgIGJhc2VPcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkNvbXBhcmVkIHRvICVzIiwgbGlzdFtpXS50aXRsZSk7Ci0gICAgICAgICAg
ICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKGJhc2VPcHRpb24pOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF91cGRhdGVQZXJjZW50QnV0dG9uOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBpZiAodGhpcy5faXNTaG93aW5nQXNQZXJjZW50KSB7Ci0gICAgICAgICAgICB0
aGlzLnBlcmNlbnRCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgYWJz
b2x1dGUgY291bnRzIGFuZCBzaXplcy4iKTsKLSAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRv
bi50b2dnbGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMucGVy
Y2VudEJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBjb3VudHMgYW5k
IHNpemVzIGFzIHBlcmNlbnRhZ2VzLiIpOwotICAgICAgICAgICAgdGhpcy5wZXJjZW50QnV0dG9u
LnRvZ2dsZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBfdXBkYXRlU3VtbWFy
eUdyYXBoOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIu
Y2FsY3VsYXRvci5zaG93QXNQZXJjZW50ID0gdGhpcy5faXNTaG93aW5nQXNQZXJjZW50OwotICAg
ICAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIudXBkYXRlKHRoaXMucHJvZmlsZS5sb3dsZXZlbHMp
OwotCi0gICAgICAgIHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmNhbGN1bGF0b3Iuc2hvd0FzUGVyY2Vu
dCA9IHRoaXMuX2lzU2hvd2luZ0FzUGVyY2VudDsKLSAgICAgICAgdGhpcy5zaXplc1N1bW1hcnlC
YXIudXBkYXRlKHRoaXMucHJvZmlsZS5sb3dsZXZlbHMpOwotICAgIH0KLX07Ci0KLVdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
Vmlldy5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhl
bHBlciA9IHsKLSAgICAvLyBJbiBjb21wYXJhdG9ycywgd2UgYXNzdW1lIHRoYXQgYSB2YWx1ZSBm
cm9tIGEgbm9kZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4KLSAgICBvcGVyYXRp
b25zOiB7IExFU1M6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICE9PSBudWxsICYmIGEgPCBi
OyB9LAotICAgICAgICAgICAgICAgICAgTEVTU19PUl9FUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsg
cmV0dXJuIGEgIT09IG51bGwgJiYgYSA8PSBiOyB9LAotICAgICAgICAgICAgICAgICAgRVFVQUw6
IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICE9PSBudWxsICYmIGEgPT09IGI7IH0sCi0gICAg
ICAgICAgICAgICAgICBHUkVBVEVSX09SX0VRVUFMOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4g
YSAhPT0gbnVsbCAmJiBhID49IGI7IH0sCi0gICAgICAgICAgICAgICAgICBHUkVBVEVSOiBmdW5j
dGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBhID4gYjsgfSB9LAotCi0gICAgb3Bl
cmF0aW9uUGFyc2VyczogeyBMRVNTOiAvXjwoXGQrKS8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBMRVNTX09SX0VRVUFMOiAvXjw9KFxkKykvLAotICAgICAgICAgICAgICAgICAgICAgICAgR1JF
QVRFUl9PUl9FUVVBTDogL14+PShcZCspLywKLSAgICAgICAgICAgICAgICAgICAgICAgIEdSRUFU
RVI6IC9ePihcZCspLyB9LAotCi0gICAgcGFyc2VPcGVyYXRpb25BbmROdW1iZXI6IGZ1bmN0aW9u
KHF1ZXJ5KQotICAgIHsKLSAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9uczsKLSAgICAgICAgdmFyIHBhcnNl
cnMgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9u
UGFyc2VyczsKLSAgICAgICAgZm9yICh2YXIgb3BlcmF0aW9uIGluIHBhcnNlcnMpIHsKLSAgICAg
ICAgICAgIHZhciBtYXRjaCA9IHF1ZXJ5Lm1hdGNoKHBhcnNlcnNbb3BlcmF0aW9uXSk7Ci0gICAg
ICAgICAgICBpZiAobWF0Y2ggIT09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFtvcGVy
YXRpb25zW29wZXJhdGlvbl0sIHBhcnNlRmxvYXQobWF0Y2hbMV0pXTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gW29wZXJhdGlvbnMuRVFVQUwsIHBhcnNlRmxvYXQocXVlcnkpXTsKLSAgICB9
LAotCi0gICAgcGVyY2VudHM6IC8lJC8sCi0KLSAgICBtZWdhQnl0ZXM6IC9NQiQvaSwKLQotICAg
IGtpbG9CeXRlczogL0tCJC9pLAotCi0gICAgYnl0ZXM6IC9CJC9pCi19Ci0KLVdlYkluc3BlY3Rv
ci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IgPSBmdW5jdGlvbihsb3dMZXZlbEZpZWxkKQotewotICAg
IHRoaXMudG90YWwgPSAxOwotICAgIHRoaXMubG93TGV2ZWxGaWVsZCA9IGxvd0xldmVsRmllbGQ7
Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlID0gewot
ICAgIGNvbXB1dGVTdW1tYXJ5VmFsdWVzOiBmdW5jdGlvbihsb3dMZXZlbHMpCi0gICAgewotICAg
ICAgICB2YXIgaGlnaExldmVscyA9IHtkYXRhOiAwLCBjb2RlOiAwfTsKLSAgICAgICAgdGhpcy50
b3RhbCA9IDA7Ci0gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gbG93TGV2ZWxzKSB7Ci0gICAgICAg
ICAgICB2YXIgaGlnaEl0ZW0gPSB0aGlzLl9oaWdoRnJvbUxvdyhpdGVtKTsKLSAgICAgICAgICAg
IGlmIChoaWdoSXRlbSkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxvd0xldmVsc1tp
dGVtXVt0aGlzLmxvd0xldmVsRmllbGRdOwotICAgICAgICAgICAgICAgIGhpZ2hMZXZlbHNbaGln
aEl0ZW1dICs9IHZhbHVlOwotICAgICAgICAgICAgICAgIHRoaXMudG90YWwgKz0gdmFsdWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIHJlc3VsdCA9IHtjYXRlZ29yeVZh
bHVlczogaGlnaExldmVsc307Ci0gICAgICAgIGlmICghdGhpcy5zaG93QXNQZXJjZW50KQotICAg
ICAgICAgICAgcmVzdWx0LnRvdGFsID0gdGhpcy50b3RhbDsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9LAotCi0gICAgZm9ybWF0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuc2hvd0FzUGVyY2VudCkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIsIHZhbHVlIC8gdGhpcy50b3RhbCAqIDEwMC4wKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlVG9TdHJpbmcodmFsdWUp
OwotICAgIH0sCi0KLSAgICBnZXQgc2hvd0FzUGVyY2VudCgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fc2hvd0FzUGVyY2VudDsKLSAgICB9LAotCi0gICAgc2V0IHNob3dBc1BlcmNlbnQo
eCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3dBc1BlcmNlbnQgPSB4OwotICAgIH0KLX0KLQot
V2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yID0gZnVuY3Rpb24oKQotewot
ICAgIFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IuY2FsbCh0aGlzLCAiY291bnQi
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yLnByb3RvdHlw
ZSA9IHsKLSAgICBfaGlnaEZyb21Mb3c6IGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgICAgaWYgKHR5
cGUgPT09ICJDT0RFX1RZUEUiIHx8IHR5cGUgPT09ICJTSEFSRURfRlVOQ1RJT05fSU5GT19UWVBF
IiB8fCB0eXBlID09PSAiU0NSSVBUX1RZUEUiKSByZXR1cm4gImNvZGUiOwotICAgICAgICBpZiAo
dHlwZSA9PT0gIlNUUklOR19UWVBFIiB8fCB0eXBlID09PSAiSEVBUF9OVU1CRVJfVFlQRSIgfHwg
dHlwZS5tYXRjaCgvXkpTXy8pKSByZXR1cm4gImRhdGEiOwotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9LAotCi0gICAgX3ZhbHVlVG9TdHJpbmc6IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBT
dW1tYXJ5Q291bnRDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
SGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTdW1t
YXJ5U2l6ZUNhbGN1bGF0b3IgPSBmdW5jdGlvbigpCi17Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBT
dW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRoaXMsICJzaXplIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5I
ZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKLSAgICBfaGlnaEZyb21Mb3c6
IGZ1bmN0aW9uKHR5cGUpIHsKLSAgICAgICAgaWYgKHR5cGUgPT09ICJDT0RFX1RZUEUiIHx8IHR5
cGUgPT09ICJTSEFSRURfRlVOQ1RJT05fSU5GT19UWVBFIiB8fCB0eXBlID09PSAiU0NSSVBUX1RZ
UEUiKSByZXR1cm4gImNvZGUiOwotICAgICAgICBpZiAodHlwZSA9PT0gIlNUUklOR19UWVBFIiB8
fCB0eXBlID09PSAiSEVBUF9OVU1CRVJfVFlQRSIgfHwgdHlwZS5tYXRjaCgvXkpTXy8pIHx8IHR5
cGUubWF0Y2goL19BUlJBWV9UWVBFJC8pKSByZXR1cm4gImRhdGEiOwotICAgICAgICByZXR1cm4g
bnVsbDsKLSAgICB9LAotCi0gICAgX3ZhbHVlVG9TdHJpbmc6IE51bWJlci5ieXRlc1RvU3RyaW5n
Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZTsK
LQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNpZGViYXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9u
KHNuYXBzaG90KQotewotICAgIHRoaXMucHJvZmlsZSA9IHNuYXBzaG90OwotCi0gICAgV2ViSW5z
cGVjdG9yLlNpZGViYXJUcmVlRWxlbWVudC5jYWxsKHRoaXMsICJoZWFwLXNuYXBzaG90LXNpZGVi
YXItdHJlZS1pdGVtIiwgIiIsICIiLCBzbmFwc2hvdCwgZmFsc2UpOwotCi0gICAgdGhpcy5yZWZy
ZXNoVGl0bGVzKCk7Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2lkZWJhclRyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgbWFpblRpdGxlKCkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9tYWluVGl0bGUpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFpblRpdGxl
OwotICAgICAgICByZXR1cm4gdGhpcy5wcm9maWxlLnRpdGxlOwotICAgIH0sCi0KLSAgICBzZXQg
bWFpblRpdGxlKHgpCi0gICAgewotICAgICAgICB0aGlzLl9tYWluVGl0bGUgPSB4OwotICAgICAg
ICB0aGlzLnJlZnJlc2hUaXRsZXMoKTsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90U2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxlbWVudC5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzID0gZnVuY3Rpb24ob3duaW5nVHJl
ZSkKLXsKLSAgICB0aGlzLnRyZWUgPSBvd25pbmdUcmVlOwotCi0gICAgV2ViSW5zcGVjdG9yLkRh
dGFHcmlkTm9kZS5jYWxsKHRoaXMsIG51bGwsIHRoaXMuX2hhc1JldGFpbmVycyk7Ci0KLSAgICB0
aGlzLmFkZEV2ZW50TGlzdGVuZXIoInBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOwot
fTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMu
cHJvdG90eXBlID0gewotICAgIGlzRW1wdHlTZXQ6IGZ1bmN0aW9uKHNldCkKLSAgICB7Ci0gICAg
ICAgIGZvciAodmFyIHggaW4gc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgZ2V0IF9oYXNSZXRhaW5lcnMoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICF0aGlzLmlzRW1wdHlTZXQodGhpcy5yZXRhaW5lcnMpOwotICAgIH0s
Ci0KLSAgICBnZXQgX3BhcmVudCgpCi0gICAgewotICAgICAgICAvLyBGb3IgdG9wLWxldmVsIG5v
ZGVzLCByZXR1cm4gb3duaW5nIHRyZWUgYXMgYSBwYXJlbnQsIG5vdCBkYXRhIGdyaWQuCi0gICAg
ICAgIHJldHVybiB0aGlzLnBhcmVudCAhPT0gdGhpcy5kYXRhR3JpZCA/IHRoaXMucGFyZW50IDog
dGhpcy50cmVlOwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICB0aGlzLnByb2R1Y2VEaWZmKHRo
aXMuYmFzZVJldGFpbmVycywgdGhpcy5yZXRhaW5lcnMsIGZ1bmN0aW9uKGJhc2VJdGVtLCBzbmFw
c2hvdEl0ZW0pIHsKLSAgICAgICAgICAgIHNlbGYuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZShzZWxmLnNuYXBzaG90VmlldywgYmFz
ZUl0ZW0sIHNuYXBzaG90SXRlbSwgc2VsZi50cmVlKSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IGlmICh0aGlzLl9wYXJlbnQpIHsKLSAgICAgICAgICAgIHZhciBjdXJyZW50Q29tcGFyYXRvciA9
IHRoaXMuX3BhcmVudC5sYXN0Q29tcGFyYXRvcjsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q29t
cGFyYXRvcikKLSAgICAgICAgICAgICAgICB0aGlzLnNvcnQoY3VycmVudENvbXBhcmF0b3IsIHRy
dWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3B1
bGF0ZSIsIHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKLSAgICB9LAotCi0gICAgcHJvZHVjZURpZmY6
IGZ1bmN0aW9uKGJhc2VFbnRyaWVzLCBjdXJyZW50RW50cmllcywgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICBmb3IgKHZhciBpdGVtIGluIGN1cnJlbnRFbnRyaWVzKQotICAgICAgICAgICAgY2Fs
bGJhY2soYmFzZUVudHJpZXNbaXRlbV0sIGN1cnJlbnRFbnRyaWVzW2l0ZW1dKTsKLQotICAgICAg
ICBmb3IgKGl0ZW0gaW4gYmFzZUVudHJpZXMpIHsKLSAgICAgICAgICAgIGlmICghKGl0ZW0gaW4g
Y3VycmVudEVudHJpZXMpKQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJhc2VFbnRyaWVzW2l0
ZW1dLCBudWxsKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBzb3J0OiBmdW5jdGlvbihjb21w
YXJhdG9yLCBmb3JjZSkgewotICAgICAgICBpZiAoIWZvcmNlICYmIHRoaXMubGFzdENvbXBhcmF0
b3IgPT09IGNvbXBhcmF0b3IpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5j
aGlsZHJlbi5zb3J0KGNvbXBhcmF0b3IpOwotICAgICAgICB2YXIgY2hpbGRDb3VudCA9IHRoaXMu
Y2hpbGRyZW4ubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBjaGlsZEluZGV4ID0gMDsgY2hpbGRJ
bmRleCA8IGNoaWxkQ291bnQ7ICsrY2hpbGRJbmRleCkKLSAgICAgICAgICAgIHRoaXMuY2hpbGRy
ZW5bY2hpbGRJbmRleF0uX3JlY2FsY3VsYXRlU2libGluZ3MoY2hpbGRJbmRleCk7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKLSAgICAgICAgICAgIGlmICghZm9y
Y2UgJiYgKCFjaGlsZC5leHBhbmRlZCB8fCBjaGlsZC5sYXN0Q29tcGFyYXRvciA9PT0gY29tcGFy
YXRvcikpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjaGlsZC5zb3J0
KGNvbXBhcmF0b3IsIGZvcmNlKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmxhc3RDb21wYXJh
dG9yID0gY29tcGFyYXRvcjsKLSAgICB9LAotCi0gICAgc2lnbkZvckRlbHRhOiBmdW5jdGlvbihk
ZWx0YSkgewotICAgICAgICBpZiAoZGVsdGEgPT09IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7
Ci0gICAgICAgIGlmIChkZWx0YSA+IDApCi0gICAgICAgICAgICByZXR1cm4gIisiOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAvLyBNYXRoIG1pbnVzIHNpZ24sIHNhbWUgd2lkdGggYXMgcGx1
cy4KLSAgICAgICAgICAgIHJldHVybiAiXHUyMjEyIjsKLSAgICB9LAotCi0gICAgc2hvd0RlbHRh
QXNQZXJjZW50OiBmdW5jdGlvbih2YWx1ZSkgewotICAgICAgICBpZiAodmFsdWUgPT09IE51bWJl
ci5QT1NJVElWRV9JTkZJTklUWSkKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIm5ldyIpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZF
X0lORklOSVRZKQotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiZGVs
ZXRlZCIpOwotICAgICAgICBpZiAodmFsdWUgPiAxMDAwLjApCi0gICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyA+MTAwMCUlIiwgdGhpcy5zaWduRm9yRGVsdGEodmFs
dWUpKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlLjJmJSUiLCB0
aGlzLnNpZ25Gb3JEZWx0YSh2YWx1ZSksIE1hdGguYWJzKHZhbHVlKSk7Ci0gICAgfSwKLQotICAg
IGdldFRvdGFsQ291bnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAoIXRoaXMuX2NvdW50KSB7
Ci0gICAgICAgICAgICB0aGlzLl9jb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MCwgbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKQotICAgICAgICAgICAgICAg
IHRoaXMuX2NvdW50ICs9IHRoaXMuY2hpbGRyZW5baV0uY291bnQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvdW50OwotICAgIH0sCi0KLSAgICBnZXRUb3RhbFNpemU6IGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAoIXRoaXMuX3NpemUpIHsKLSAgICAgICAgICAgIHRoaXMuX3Np
emUgPSAwOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0aGlzLmNoaWxkcmVuLmxl
bmd0aDsgaSA8IG47ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLl9zaXplICs9IHRoaXMuY2hp
bGRyZW5baV0uc2l6ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKLSAg
ICB9LAotCi0gICAgZ2V0IGNvdW50UGVyY2VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhp
cy5jb3VudCAvIHRoaXMuX3BhcmVudC5nZXRUb3RhbENvdW50KCkgKiAxMDAuMDsKLSAgICB9LAot
Ci0gICAgZ2V0IHNpemVQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnNpemUg
LyB0aGlzLl9wYXJlbnQuZ2V0VG90YWxTaXplKCkgKiAxMDAuMDsKLSAgICB9LAotCi0gICAgZ2V0
IGNvdW50RGVsdGFQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmJhc2VDb3VudCA+
IDApIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ID4gMCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5jb3VudERlbHRhIC8gdGhpcy5iYXNlQ291bnQgKiAxMDAuMDsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZ
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5G
SU5JVFk7Ci0gICAgfSwKLQotICAgIGdldCBzaXplRGVsdGFQZXJjZW50KCkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLmJhc2VTaXplID4gMCkgewotICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSA+
IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZURlbHRhIC8gdGhpcy5iYXNlU2l6
ZSAqIDEwMC4wOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIuTkVHQVRJVkVfSU5GSU5JVFk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJu
IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKLSAgICB9LAotCi0gICAgZ2V0IGRhdGEoKQotICAg
IHsKLSAgICAgICAgdmFyIGRhdGEgPSB7fTsKLQotICAgICAgICBkYXRhWyJjb25zIl0gPSB0aGlz
LmNvbnN0cnVjdG9yTmFtZTsKLQotICAgICAgICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hvd0Nv
dW50QXNQZXJjZW50KQotICAgICAgICAgICAgZGF0YVsiY291bnQiXSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiJS4yZiUlIiwgdGhpcy5jb3VudFBlcmNlbnQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBkYXRhWyJjb3VudCJdID0gdGhpcy5jb3VudDsKLQotICAgICAgICBpZiAodGhpcy5z
aXplICE9PSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hvd1Np
emVBc1BlcmNlbnQpCi0gICAgICAgICAgICAgICAgZGF0YVsic2l6ZSJdID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIlLjJmJSUiLCB0aGlzLnNpemVQZXJjZW50KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBkYXRhWyJzaXplIl0gPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlz
LnNpemUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRhdGFbInNpemUiXSA9ICIiOwot
Ci0gICAgICAgIGlmICh0aGlzLnNuYXBzaG90Vmlldy5zaG93Q291bnREZWx0YUFzUGVyY2VudCkK
LSAgICAgICAgICAgIGRhdGFbImNvdW50RGVsdGEiXSA9IHRoaXMuc2hvd0RlbHRhQXNQZXJjZW50
KHRoaXMuY291bnREZWx0YVBlcmNlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRh
WyJjb3VudERlbHRhIl0gPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVzJWQiLCB0aGlzLnNpZ25G
b3JEZWx0YSh0aGlzLmNvdW50RGVsdGEpLCBNYXRoLmFicyh0aGlzLmNvdW50RGVsdGEpKTsKLQot
ICAgICAgICBpZiAodGhpcy5zaXplRGVsdGEgIT09IG51bGwpIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLnNuYXBzaG90Vmlldy5zaG93U2l6ZURlbHRhQXNQZXJjZW50KQotICAgICAgICAgICAgICAg
IGRhdGFbInNpemVEZWx0YSJdID0gdGhpcy5zaG93RGVsdGFBc1BlcmNlbnQodGhpcy5zaXplRGVs
dGFQZXJjZW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkYXRhWyJzaXpl
RGVsdGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlcyIsIHRoaXMuc2lnbkZvckRlbHRh
KHRoaXMuc2l6ZURlbHRhKSwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcoTWF0aC5hYnModGhpcy5zaXpl
RGVsdGEpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGF0YVsic2l6ZURlbHRhIl0g
PSAiIjsKLQotICAgICAgICByZXR1cm4gZGF0YTsKLSAgICB9LAotCi0gICAgY3JlYXRlQ2VsbDog
ZnVuY3Rpb24oY29sdW1uSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHZhciBjZWxsID0gV2Vi
SW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2VsbC5jYWxsKHRoaXMsIGNv
bHVtbklkZW50aWZpZXIpOwotCi0gICAgICAgIGlmICgoY29sdW1uSWRlbnRpZmllciA9PT0gImNv
bnMiICYmIHRoaXMuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uKSB8fAotICAgICAgICAgICAgKGNv
bHVtbklkZW50aWZpZXIgPT09ICJjb3VudCIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZENvdW50Q29s
dW1uKSB8fAotICAgICAgICAgICAgKGNvbHVtbklkZW50aWZpZXIgPT09ICJzaXplIiAmJiB0aGlz
Ll9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbikgfHwKLSAgICAgICAgICAgIChjb2x1bW5JZGVudGlm
aWVyID09PSAiY291bnREZWx0YSIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1
bW4pIHx8Ci0gICAgICAgICAgICAoY29sdW1uSWRlbnRpZmllciA9PT0gInNpemVEZWx0YSIgJiYg
dGhpcy5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbikpCi0gICAgICAgICAgICBjZWxsLmFk
ZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIpOwotCi0gICAgICAgIHJldHVybiBjZWxsOwotICAgIH0K
LX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJz
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlw
ZTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZSA9IGZ1bmN0aW9uKHNu
YXBzaG90VmlldywgYmFzZUVudHJ5LCBzbmFwc2hvdEVudHJ5LCBvd25pbmdUcmVlKQotewotICAg
IHRoaXMuc25hcHNob3RWaWV3ID0gc25hcHNob3RWaWV3OwotCi0gICAgaWYgKCFzbmFwc2hvdEVu
dHJ5KQotICAgICAgICBzbmFwc2hvdEVudHJ5ID0geyBjb25zOiBiYXNlRW50cnkuY29ucywgY291
bnQ6IDAsIHNpemU6IDAsIHJldGFpbmVyczoge30gfTsKLSAgICB0aGlzLmNvbnN0cnVjdG9yTmFt
ZSA9IHNuYXBzaG90RW50cnkuY29uczsKLSAgICB0aGlzLmNvdW50ID0gc25hcHNob3RFbnRyeS5j
b3VudDsKLSAgICB0aGlzLnNpemUgPSBzbmFwc2hvdEVudHJ5LnNpemU7Ci0gICAgdGhpcy5yZXRh
aW5lcnMgPSBzbmFwc2hvdEVudHJ5LnJldGFpbmVyczsKLQotICAgIGlmICghYmFzZUVudHJ5KQot
ICAgICAgICBiYXNlRW50cnkgPSB7IGNvdW50OiAwLCBzaXplOiAwLCByZXRhaW5lcnM6IHt9IH07
Ci0gICAgdGhpcy5iYXNlQ291bnQgPSBiYXNlRW50cnkuY291bnQ7Ci0gICAgdGhpcy5jb3VudERl
bHRhID0gdGhpcy5jb3VudCAtIHRoaXMuYmFzZUNvdW50OwotICAgIHRoaXMuYmFzZVNpemUgPSBi
YXNlRW50cnkuc2l6ZTsKLSAgICB0aGlzLnNpemVEZWx0YSA9IHRoaXMuc2l6ZSAtIHRoaXMuYmFz
ZVNpemU7Ci0gICAgdGhpcy5iYXNlUmV0YWluZXJzID0gYmFzZUVudHJ5LnJldGFpbmVyczsKLQot
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLmNh
bGwodGhpcywgb3duaW5nVHJlZSk7Ci19OwotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REYXRhR3JpZExpc3QgPSBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIGJhc2VFbnRyaWVz
LCBzbmFwc2hvdEVudHJpZXMpCi17Ci0gICAgdGhpcy50cmVlID0gdGhpczsKLSAgICB0aGlzLnNu
YXBzaG90VmlldyA9IHNuYXBzaG90VmlldzsKLSAgICB0aGlzLmNoaWxkcmVuID0gW107Ci0gICAg
dGhpcy5sYXN0Q29tcGFyYXRvciA9IG51bGw7Ci0gICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKGJh
c2VFbnRyaWVzLCBzbmFwc2hvdEVudHJpZXMpOwotfTsKLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdERhdGFHcmlkTGlzdC5wcm90b3R5cGUgPSB7Ci0gICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9u
KGNoaWxkKQotICAgIHsKLSAgICAgICAgdGhpcy5pbnNlcnRDaGlsZChjaGlsZCwgdGhpcy5jaGls
ZHJlbi5sZW5ndGgpOwotICAgIH0sCi0KLSAgICBpbnNlcnRDaGlsZDogZnVuY3Rpb24oY2hpbGQs
IGluZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNo
aWxkKTsKLSAgICB9LAotCi0gICAgcmVtb3ZlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLSAgICB9LAotCi0gICAgcG9wdWxhdGVDaGlsZHJl
bjogZnVuY3Rpb24oYmFzZUVudHJpZXMsIHNuYXBzaG90RW50cmllcykKLSAgICB7Ci0gICAgICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgdGhpcy5wcm9kdWNlRGlmZihiYXNlRW50cmllcywg
c25hcHNob3RFbnRyaWVzLCBmdW5jdGlvbihiYXNlSXRlbSwgc25hcHNob3RJdGVtKSB7Ci0gICAg
ICAgICAgICBzZWxmLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0
YUdyaWROb2RlKHNlbGYuc25hcHNob3RWaWV3LCBiYXNlSXRlbSwgc25hcHNob3RJdGVtLCBzZWxm
KSk7Ci0gICAgICAgIH0pOwotICAgIH0sCi0KLSAgICBwcm9kdWNlRGlmZjogV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VE
aWZmLAotICAgIHNvcnQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRo
UmV0YWluZXJzLnByb3RvdHlwZS5zb3J0LAotICAgIGdldFRvdGFsQ291bnQ6IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXRUb3Rh
bENvdW50LAotICAgIGdldFRvdGFsU2l6ZTogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFH
cmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldFRvdGFsU2l6ZQotfTsKLQotV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3JzID0gW3t9
LCB7fV07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlD
b21wYXJhdG9yID0gZnVuY3Rpb24ocHJvcGVydHksIHByb3BlcnR5MiwgaXNBc2NlbmRpbmcpCi17
Ci0gICAgdmFyIHByb3BlcnR5SGFzaCA9IHByb3BlcnR5ICsgIiMiICsgcHJvcGVydHkyOwotICAg
IHZhciBjb21wYXJhdG9yID0gdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/
IDEgOiAwKV1bcHJvcGVydHlIYXNoXTsKLSAgICBpZiAoIWNvbXBhcmF0b3IpIHsKLSAgICAgICAg
Y29tcGFyYXRvciA9IGZ1bmN0aW9uKGxocywgcmhzKSB7Ci0gICAgICAgICAgICB2YXIgbCA9IGxo
c1twcm9wZXJ0eV0sIHIgPSByaHNbcHJvcGVydHldOwotICAgICAgICAgICAgaWYgKChsID09PSBu
dWxsIHx8IHIgPT09IG51bGwpICYmIHByb3BlcnR5MiAhPT0gbnVsbCkKLSAgICAgICAgICAgICAg
ICBsID0gbGhzW3Byb3BlcnR5Ml0sIHIgPSByaHNbcHJvcGVydHkyXTsKLSAgICAgICAgICAgIHZh
ciByZXN1bHQgPSBsIDwgciA/IC0xIDogKGwgPiByID8gMSA6IDApOwotICAgICAgICAgICAgcmV0
dXJuIGlzQXNjZW5kaW5nID8gcmVzdWx0IDogLXJlc3VsdDsKLSAgICAgICAgfTsKLSAgICAgICAg
dGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1bcHJvcGVydHlI
YXNoXSA9IGNvbXBhcmF0b3I7Ci0gICAgfQotICAgIHJldHVybiBjb21wYXJhdG9yOwotfTsKLQot
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlID0gZnVuY3Rpb24o
c25hcHNob3RWaWV3LCBiYXNlRW50cnksIHNuYXBzaG90RW50cnksIG93bmluZ1RyZWUpCi17Ci0g
ICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0KLSAgICBpZiAoIXNuYXBzaG90
RW50cnkpCi0gICAgICAgIHNuYXBzaG90RW50cnkgPSB7IGNvbnM6IGJhc2VFbnRyeS5jb25zLCBj
b3VudDogMCwgY2x1c3RlcnM6IHt9IH07Ci0gICAgdGhpcy5jb25zdHJ1Y3Rvck5hbWUgPSBzbmFw
c2hvdEVudHJ5LmNvbnM7Ci0gICAgdGhpcy5jb3VudCA9IHNuYXBzaG90RW50cnkuY291bnQ7Ci0g
ICAgdGhpcy5yZXRhaW5lcnMgPSB0aGlzLl9jYWxjdWxhdGVSZXRhaW5lcnModGhpcy5zbmFwc2hv
dFZpZXcucHJvZmlsZSwgc25hcHNob3RFbnRyeS5jbHVzdGVycyk7Ci0KLSAgICBpZiAoIWJhc2VF
bnRyeSkKLSAgICAgICAgYmFzZUVudHJ5ID0geyBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07Ci0g
ICAgdGhpcy5iYXNlQ291bnQgPSBiYXNlRW50cnkuY291bnQ7Ci0gICAgdGhpcy5jb3VudERlbHRh
ID0gdGhpcy5jb3VudCAtIHRoaXMuYmFzZUNvdW50OwotICAgIHRoaXMuYmFzZVJldGFpbmVycyA9
IHRoaXMuX2NhbGN1bGF0ZVJldGFpbmVycyh0aGlzLnNuYXBzaG90Vmlldy5iYXNlU25hcHNob3Qs
IGJhc2VFbnRyeS5jbHVzdGVycyk7Ci0KLSAgICB0aGlzLnNpemUgPSBudWxsOwotICAgIHRoaXMu
c2l6ZURlbHRhID0gbnVsbDsKLQotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGVXaXRoUmV0YWluZXJzLmNhbGwodGhpcywgb3duaW5nVHJlZSk7Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUgPSB7Ci0gICAg
Z2V0IHNpemVQZXJjZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0K
LSAgICBnZXQgc2l6ZURlbHRhUGVyY2VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9LAotCi0gICAgX2NhbGN1bGF0ZVJldGFpbmVyczogZnVuY3Rpb24oc25hcHNob3QsIGNs
dXN0ZXJzKSB7Ci0gICAgICAgIHZhciByZXRhaW5lcnMgPSB7fTsKLSAgICAgICAgaWYgKHRoaXMu
aXNFbXB0eVNldChjbHVzdGVycykpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9y
TmFtZSBpbiBzbmFwc2hvdC5lbnRyaWVzKQotICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hv
dC5lbnRyaWVzW3RoaXMuY29uc3RydWN0b3JOYW1lXS5yZXRhaW5lcnM7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBJbiBjYXNlIHdoZW4gYW4gZW50cnkgaXMgcmV0YWluZWQgYnkg
Y2x1c3RlcnMsIHdlIG5lZWQgdG8gZ2F0aGVyIHVwIHRoZSBsaXN0Ci0gICAgICAgICAgICAvLyBv
ZiByZXRhaW5lcnMgYnkgbWVyZ2luZyByZXRhaW5lcnMgb2YgZXZlcnkgY2x1c3Rlci4KLSAgICAg
ICAgICAgIC8vIEUuZy4gaGF2aW5nIHN1Y2ggYSB0cmVlOgotICAgICAgICAgICAgLy8gICBBCi0g
ICAgICAgICAgICAvLyAgICAgT2JqZWN0OjEgIDEwCi0gICAgICAgICAgICAvLyAgICAgICBYICAg
ICAgIDMKLSAgICAgICAgICAgIC8vICAgICAgIFkgICAgICAgNAotICAgICAgICAgICAgLy8gICAg
IE9iamVjdDoyICA1Ci0gICAgICAgICAgICAvLyAgICAgICBYICAgICAgIDYKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyB3aWxsIHJlc3VsdCBpbiBhIGZvbGxvd2luZyByZXRhaW5lcnMg
bGlzdDogWCA5LCBZIDQuCi0gICAgICAgICAgICBmb3IgKHZhciBjbHVzdGVyTmFtZSBpbiBjbHVz
dGVycykgewotICAgICAgICAgICAgICAgIGlmIChjbHVzdGVyTmFtZSBpbiBzbmFwc2hvdC5jbHVz
dGVycykgewotICAgICAgICAgICAgICAgICAgICB2YXIgY2x1c3RlclJldGFpbmVycyA9IHNuYXBz
aG90LmNsdXN0ZXJzW2NsdXN0ZXJOYW1lXS5yZXRhaW5lcnM7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGNsdXN0ZXJSZXRhaW5lciBpbiBjbHVzdGVyUmV0YWluZXJzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgY2x1c3RlclJldGFpbmVyRW50cnkgPSBjbHVzdGVyUmV0YWlu
ZXJzW2NsdXN0ZXJSZXRhaW5lcl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjbHVz
dGVyUmV0YWluZXIgaW4gcmV0YWluZXJzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXRhaW5lcnNbY2x1c3RlclJldGFpbmVyXSA9IHsgY29uczogY2x1c3RlclJldGFpbmVyRW50cnku
Y29ucywgY291bnQ6IDAsIGNsdXN0ZXJzOiB7fSB9OwotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl0uY291bnQgKz0gY2x1c3RlclJldGFpbmVyRW50cnku
Y291bnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjbHVzdGVyUmV0YWluZXJD
bHVzdGVyIGluIGNsdXN0ZXJSZXRhaW5lckVudHJ5LmNsdXN0ZXJzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldGFpbmVyc1tjbHVzdGVyUmV0YWluZXJdLmNsdXN0ZXJzW2NsdXN0ZXJS
ZXRhaW5lckNsdXN0ZXJdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0YWlu
ZXJzOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFp
bmVyTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERh
dGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlOwotCi0KLVdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQcm9maWxlVHlwZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuUHJv
ZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUu
VHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhFQVAgU05BUFNIT1RTIikpOwotfQotCi1X
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkID0gIkhFQVAiOwotCi1X
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuc25hcHNob3RzID0gW107Ci0KLVdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0
IGJ1dHRvblRvb2x0aXAoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiVGFrZSBoZWFwIHNuYXBzaG90LiIpOwotICAgIH0sCi0KLSAgICBnZXQgYnV0dG9uU3R5
bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJoZWFwLXNuYXBzaG90LXN0YXR1cy1iYXItaXRl
bSBzdGF0dXMtYmFyLWl0ZW0iOwotICAgIH0sCi0KLSAgICBidXR0b25DbGlja2VkOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBkZXZ0b29scy50b29scy5nZXRQcm9maWxlckFnZW50KCkuc3Rh
cnRQcm9maWxpbmcoZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5Qcm9maWxlck1vZHVsZXMuUFJPRklM
RVJfTU9EVUxFX0hFQVBfU05BUFNIT1QpOwotICAgIH0sCi0KLSAgICBnZXQgd2VsY29tZU1lc3Nh
Z2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiR2V0IGEg
aGVhcCBzbmFwc2hvdCBieSBwcmVzc2luZyB0aGUgJXMgYnV0dG9uIG9uIHRoZSBzdGF0dXMgYmFy
LiIpOwotICAgIH0sCi0KLSAgICBjcmVhdGVTaWRlYmFyVHJlZUVsZW1lbnRGb3JQcm9maWxlOiBm
dW5jdGlvbihwcm9maWxlKQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFNpZGViYXJUcmVlRWxlbWVudChwcm9maWxlKTsKLSAgICAgICAg
ZWxlbWVudC5zbWFsbCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAot
Ci0gICAgY3JlYXRlVmlldzogZnVuY3Rpb24ocHJvZmlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcoV2ViSW5zcGVjdG9yLnBhbmVscy5w
cm9maWxlcywgcHJvZmlsZSk7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qcm9maWxlVHlw
ZS5wcm90b3R5cGU7Ci0KLQotKGZ1bmN0aW9uKCkgewotICAgIHZhciBvcmlnaW5hbENyZWF0ZVBh
bmVscyA9IFdlYkluc3BlY3Rvci5fY3JlYXRlUGFuZWxzOwotICAgIFdlYkluc3BlY3Rvci5fY3Jl
YXRlUGFuZWxzID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIG9yaWdpbmFsQ3JlYXRlUGFuZWxzLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnBy
b2ZpbGVzKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcy5yZWdpc3Rl
clByb2ZpbGVUeXBlKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUoKSk7
Ci0gICAgfQotfSkoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmls
ZXJBZ2VudC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJBZ2VudC5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y3NDU5NS4uMDAwMDAwMAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL2pzL1Byb2ZpbGVyQWdlbnQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBQcm92aWRlcyBjb21tdW5pY2F0aW9uIGludGVy
ZmFjZSB0byByZW1vdGUgdjggcHJvZmlsZXIuCi0gKi8KLQotLyoqCi0gKiBAY29uc3RydWN0b3IK
LSAqLwotZGV2dG9vbHMuUHJvZmlsZXJBZ2VudCA9IGZ1bmN0aW9uKCkKLXsKLQotICAgIC8qKgot
ICAgICAqIFByb2ZpbGVyIGxvZyBwb3NpdGlvbi4KLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAg
ICAqLwotICAgIHRoaXMuX2xvZ1Bvc2l0aW9uID0gMDsKLQotICAgIC8qKgotICAgICAqIExhc3Qg
cmVxdWVzdGVkIGxvZyBwb3NpdGlvbi4KLSAgICAgKiBAdHlwZSB7bnVtYmVyfQotICAgICAqLwot
ICAgIHRoaXMuX2xhc3RSZXF1ZXN0ZWRMb2dQb3NpdGlvbiA9IC0xOwotCi0gICAgLyoqCi0gICAg
ICogUHJvZmlsZXIgcHJvY2Vzc29yIGluc3RhbmNlLgotICAgICAqIEB0eXBlIHtkZXZ0b29scy5w
cm9maWxlci5Qcm9jZXNzb3J9Ci0gICAgICovCi0gICAgdGhpcy5fcHJvZmlsZXJQcm9jZXNzb3Ig
PSBuZXcgZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yKCk7Ci19OwotCi0KLS8qKgotICogQSBj
b3B5IG9mIGVudW0gZnJvbSBpbmNsdWRlL3Y4LmgKLSAqIEBlbnVtIHtudW1iZXJ9Ci0gKi8KLWRl
dnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzID0gewotICAgIFBST0ZJTEVSX01P
RFVMRV9OT05FOiAwLAotICAgIFBST0ZJTEVSX01PRFVMRV9DUFU6IDEsCi0gICAgUFJPRklMRVJf
TU9EVUxFX0hFQVBfU1RBVFM6IDEgPDwgMSwKLSAgICBQUk9GSUxFUl9NT0RVTEVfSlNfQ09OU1RS
VUNUT1JTOiAxIDw8IDIsCi0gICAgUFJPRklMRVJfTU9EVUxFX0hFQVBfU05BUFNIT1Q6IDEgPDwg
MTYKLX07Ci0KLQotLyoqCi0gKiBJbml0aWFsaXplcyBwcm9maWxpbmcgc3RhdGUuCi0gKi8KLWRl
dnRvb2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLmluaXRpYWxpemVQcm9maWxpbmcgPSBmdW5j
dGlvbigpCi17Ci0gICAgdGhpcy5fZ2V0TmV4dExvZ0xpbmVzKGZhbHNlKTsKLX07Ci0KLQotLyoq
Ci0gKiBSZXF1ZXN0cyB0aGUgbmV4dCBjaHVuayBvZiBsb2cgbGluZXMuCi0gKiBAcGFyYW0ge2Jv
b2xlYW59IGltbWVkaWF0ZWx5IERvIG5vdCBwb3N0cG9uZSB0aGUgcmVxdWVzdC4KLSAqIEBwcml2
YXRlCi0gKi8KLWRldnRvb2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLl9nZXROZXh0TG9nTGlu
ZXMgPSBmdW5jdGlvbihpbW1lZGlhdGVseSkKLXsKLSAgICBpZiAodGhpcy5fbGFzdFJlcXVlc3Rl
ZExvZ1Bvc2l0aW9uID09IHRoaXMuX2xvZ1Bvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAg
dmFyIHBvcyA9IHRoaXMuX2xhc3RSZXF1ZXN0ZWRMb2dQb3NpdGlvbiA9IHRoaXMuX2xvZ1Bvc2l0
aW9uOwotCi0gICAgdmFyIGNhbGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKHRoaXMu
X2RpZEdldFByb2ZpbGVyTG9nTGluZXMuYmluZCh0aGlzKSk7Ci0gICAgaWYgKGltbWVkaWF0ZWx5
KQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFByb2ZpbGVyTG9nTGluZXMoY2FsbElkLCBw
b3MpOwotICAgIGVsc2UgewotICAgICAgICBmdW5jdGlvbiBkZWxheWVkUmVxdWVzdCgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0UHJvZmlsZXJMb2dMaW5lcyhj
YWxsSWQsIHBvcyk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0VGltZW91dChkZWxheWVkUmVxdWVz
dCwgNTAwKTsKLSAgICB9Ci19OwotCi0KLS8qKgotICogU3RhcnRzIHByb2ZpbGluZy4KLSAqIEBw
YXJhbSB7bnVtYmVyfSBtb2R1bGVzIExpc3Qgb2YgbW9kdWxlcyB0byBlbmFibGUuCi0gKi8KLWRl
dnRvb2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLnN0YXJ0UHJvZmlsaW5nID0gZnVuY3Rpb24o
bW9kdWxlcykKLXsKLSAgICBpZiAobW9kdWxlcyAmIGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJv
ZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9IRUFQX1NOQVBTSE9UKSB7Ci0gICAgICAgIElu
c3BlY3RvckJhY2tlbmQudGFrZUhlYXBTbmFwc2hvdCgpOwotICAgICAgICAvLyBBY3RpdmUgbW9k
dWxlcyB3aWxsIG5vdCBjaGFuZ2UsIGluc3RlYWQsIGEgc25hcHNob3Qgd2lsbCBiZSBsb2dnZWQu
Ci0gICAgICAgIHRoaXMuX2dldE5leHRMb2dMaW5lcygpOwotICAgIH0KLX07Ci0KLQotLyoqCi0g
KiBIYW5kbGVzIGEgcG9ydGlvbiBvZiBhIHByb2ZpbGVyIGxvZyByZXRyaWV2ZWQgYnkgZ2V0TG9n
TGluZXMgY2FsbC4KLSAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgQ3VycmVudCBwb3NpdGlvbiBpbiBs
b2cuCi0gKiBAcGFyYW0ge3N0cmluZ30gbG9nIEEgcG9ydGlvbiBvZiBwcm9maWxlciBsb2cuCi0g
Ki8KLWRldnRvb2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLl9kaWRHZXRQcm9maWxlckxvZ0xp
bmVzID0gZnVuY3Rpb24ocG9zLCBsb2cpCi17Ci0gICAgdGhpcy5fbG9nUG9zaXRpb24gPSBwb3M7
Ci0gICAgaWYgKGxvZy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIHRoaXMuX3Byb2ZpbGVyUHJvY2Vz
c29yLnByb2Nlc3NMb2dDaHVuayhsb2cpOwotICAgICAgICB0aGlzLl9nZXROZXh0TG9nTGluZXMo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBbGxvdyByZS1yZWFkaW5nIGZyb20gdGhlIGxh
c3QgcG9zaXRpb24uCi0gICAgICAgIHRoaXMuX2xhc3RSZXF1ZXN0ZWRMb2dQb3NpdGlvbiA9IHRo
aXMuX2xvZ1Bvc2l0aW9uIC0gMTsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuZGlkR2V0UHJv
ZmlsZXJMb2dMaW5lcyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9Qcm9maWxlclByb2Nlc3Nvci5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjE3MTRlOC4uMDAwMDAwMAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUHJvZmlsZXIgcHJvY2Vzc29yIGlzIHVzZWQgdG8gcHJv
Y2VzcyBsb2cgZmlsZSBwcm9kdWNlZAotICogYnkgVjggYW5kIHByb2R1Y2UgYW4gaW50ZXJuYWwg
cHJvZmlsZSByZXByZXNlbnRhdGlvbiB3aGljaCBpcyB1c2VkCi0gKiBmb3IgYnVpbGRpbmcgcHJv
ZmlsZSB2aWV3cyBpbiAiUHJvZmlsZXMiIHRhYi4KLSAqLwotCi0KLS8qKgotICogQ3JlYXRlcyBh
IFByb2ZpbGUgVmlldyBidWlsZGVyIG9iamVjdCBjb21wYXRpYmxlIHdpdGggV2ViS2l0IFByb2Zp
bGVyIFVJLgotICoKLSAqIEBwYXJhbSB7bnVtYmVyfSBzYW1wbGluZ1JhdGUgTnVtYmVyIG9mIG1z
IGJldHdlZW4gcHJvZmlsZXIgdGlja3MuCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZGV2dG9vbHMu
cHJvZmlsZXIuV2ViS2l0Vmlld0J1aWxkZXIgPSBmdW5jdGlvbihzYW1wbGluZ1JhdGUpCi17Ci0g
ICAgZGV2dG9vbHMucHJvZmlsZXIuVmlld0J1aWxkZXIuY2FsbCh0aGlzLCBzYW1wbGluZ1JhdGUp
OwotfTsKLWRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdCdWlsZGVyLnByb3RvdHlwZS5fX3By
b3RvX18gPSBkZXZ0b29scy5wcm9maWxlci5WaWV3QnVpbGRlci5wcm90b3R5cGU7Ci0KLQotLyoq
Ci0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld0J1aWxkZXIu
cHJvdG90eXBlLmNyZWF0ZVZpZXdOb2RlID0gZnVuY3Rpb24oZnVuY05hbWUsIHRvdGFsVGltZSwg
c2VsZlRpbWUsIGhlYWQpCi17Ci0gICAgcmV0dXJuIG5ldyBkZXZ0b29scy5wcm9maWxlci5XZWJL
aXRWaWV3Tm9kZShmdW5jTmFtZSwgdG90YWxUaW1lLCBzZWxmVGltZSwgaGVhZCk7Ci19OwotCi0K
LS8qKgotICogQ29uc3RydWN0cyBhIFByb2ZpbGUgVmlldyBub2RlIG9iamVjdCBmb3IgZGlzcGxh
eWluZyBpbiBXZWJLaXQgUHJvZmlsZXIgVUkuCi0gKgotICogQHBhcmFtIHtzdHJpbmd9IGludGVy
bmFsRnVuY05hbWUgQSBmdWxseSBxdWFsaWZpZWQgZnVuY3Rpb24gbmFtZS4KLSAqIEBwYXJhbSB7
bnVtYmVyfSB0b3RhbFRpbWUgQW1vdW50IG9mIHRpbWUgdGhhdCBhcHBsaWNhdGlvbiBzcGVudCBp
biB0aGUKLSAqICAgICBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGFuZCBpdHMgZGVzY2VuZGFudHMg
KG5vdCB0aGF0IGRlcGVuZGluZyBvbgotICogICAgIHByb2ZpbGUgdGhleSBjYW4gYmUgZWl0aGVy
IGNhbGxlZXMgb3IgY2FsbGVycy4pCi0gKiBAcGFyYW0ge251bWJlcn0gc2VsZlRpbWUgQW1vdW50
IG9mIHRpbWUgdGhhdCBhcHBsaWNhdGlvbiBzcGVudCBpbiB0aGUKLSAqICAgICBjb3JyZXNwb25k
aW5nIGZ1bmN0aW9uIG9ubHkuCi0gKiBAcGFyYW0ge2RldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVW
aWV3Lk5vZGV9IGhlYWQgUHJvZmlsZSB2aWV3IGhlYWQuCi0gKiBAY29uc3RydWN0b3IKLSAqLwot
ZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld05vZGUgPSBmdW5jdGlvbihpbnRlcm5hbEZ1bmNO
YW1lLCB0b3RhbFRpbWUsIHNlbGZUaW1lLCBoZWFkKQotewotICAgIGRldnRvb2xzLnByb2ZpbGVy
LlByb2ZpbGVWaWV3Lk5vZGUuY2FsbCh0aGlzLCBpbnRlcm5hbEZ1bmNOYW1lLCB0b3RhbFRpbWUs
IHNlbGZUaW1lLCBoZWFkKTsKLSAgICB0aGlzLmluaXRGdW5jSW5mb18oKTsKLSAgICB0aGlzLmNh
bGxVSUQgPSBpbnRlcm5hbEZ1bmNOYW1lOwotfTsKLWRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZp
ZXdOb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmll
dy5Ob2RlLnByb3RvdHlwZTsKLQotCi0vKioKLSAqIFJlZ0V4IGZvciBzdHJpcHBpbmcgVjgncyBw
cmVmaXhlcyBvZiBjb21waWxlZCBmdW5jdGlvbnMuCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLldl
YktpdFZpZXdOb2RlLkZVTkNfTkFNRV9TVFJJUF9SRSA9IC9eKD86TGF6eUNvbXBpbGV8RnVuY3Rp
b258Q2FsbGJhY2spOiAoLiopJC87Ci0KLQotLyoqCi0gKiBSZWdFeCBmb3IgZXh0cmFjdGluZyBz
Y3JpcHQgc291cmNlIFVSTCBhbmQgbGluZSBudW1iZXIuCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVy
LldlYktpdFZpZXdOb2RlLkZVTkNfTkFNRV9QQVJTRV9SRSA9IC9eKCg/OmdldCB8IHNldCApP1te
IF0rKSAoLiopOihcZCspKCBce1xkK1x9KT8kLzsKLQotCi0vKioKLSAqIEluaXRzICJmdW5jdGlv
bk5hbWUiLCAidXJsIiwgYW5kICJsaW5lTnVtYmVyIiBmaWVsZHMgdXNpbmcgImludGVybmFsRnVu
Y05hbWUiCi0gKiBmaWVsZC4KLSAqIEBwcml2YXRlCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLldl
YktpdFZpZXdOb2RlLnByb3RvdHlwZS5pbml0RnVuY0luZm9fID0gZnVuY3Rpb24oKQotewotICAg
IHZhciBub2RlQWxpYXMgPSBkZXZ0b29scy5wcm9maWxlci5XZWJLaXRWaWV3Tm9kZTsKLSAgICB0
aGlzLmZ1bmN0aW9uTmFtZSA9IHRoaXMuaW50ZXJuYWxGdW5jTmFtZTsKLQotICAgIHZhciBzdHJp
cHBlZE5hbWUgPSBub2RlQWxpYXMuRlVOQ19OQU1FX1NUUklQX1JFLmV4ZWModGhpcy5mdW5jdGlv
bk5hbWUpOwotICAgIGlmIChzdHJpcHBlZE5hbWUpCi0gICAgICAgIHRoaXMuZnVuY3Rpb25OYW1l
ID0gc3RyaXBwZWROYW1lWzFdOwotCi0gICAgdmFyIHBhcnNlZE5hbWUgPSBub2RlQWxpYXMuRlVO
Q19OQU1FX1BBUlNFX1JFLmV4ZWModGhpcy5mdW5jdGlvbk5hbWUpOwotICAgIGlmIChwYXJzZWRO
YW1lKSB7Ci0gICAgICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gcGFyc2VkTmFtZVsxXTsKLSAgICAg
ICAgaWYgKHBhcnNlZE5hbWVbNF0pCi0gICAgICAgICAgICB0aGlzLmZ1bmN0aW9uTmFtZSArPSBw
YXJzZWROYW1lWzRdOwotICAgICAgICB0aGlzLnVybCA9IHBhcnNlZE5hbWVbMl07Ci0gICAgICAg
IHRoaXMubGluZU51bWJlciA9IHBhcnNlZE5hbWVbM107Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
dGhpcy51cmwgPSAnJzsKLSAgICAgICAgdGhpcy5saW5lTnVtYmVyID0gMDsKLSAgICB9Ci19Owot
Ci0KLS8qKgotICogQW5jZXN0b3Igb2YgYSBwcm9maWxlIG9iamVjdCB0aGF0IGxlYXZlcyBvdXQg
b25seSBKUy1yZWxhdGVkIGZ1bmN0aW9ucy4KLSAqIEBjb25zdHJ1Y3RvcgotICovCi1kZXZ0b29s
cy5wcm9maWxlci5Kc1Byb2ZpbGUgPSBmdW5jdGlvbigpCi17Ci0gICAgZGV2dG9vbHMucHJvZmls
ZXIuUHJvZmlsZS5jYWxsKHRoaXMpOwotfTsKLWRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZS5w
cm90b3R5cGUuX19wcm90b19fID0gZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZS5wcm90b3R5cGU7
Ci0KLQotLyoqCi0gKiBSZWdFeHAgdGhhdCBsZWF2ZXMgb25seSBub24tbmF0aXZlIEpTIGZ1bmN0
aW9ucy4KLSAqIEB0eXBlIHtSZWdFeHB9Ci0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmls
ZS5KU19OT05fTkFUSVZFX1JFID0gbmV3IFJlZ0V4cCgKLSAgICAgICJeIiArCi0gICAgICAgICIo
PzpDYWxsYmFjazopfCIgKwotICAgICAgICAiKD86U2NyaXB0OiAoPyFuYXRpdmUpKXwiICsKLSAg
ICAgICAgIig/Oig/OkxhenlDb21waWxlfEZ1bmN0aW9uKTogW14gXSooPzogKD8hbmF0aXZlIClb
XiBdKzpcXGQrKT8kKSIpOwotCi0KLS8qKgotICogQG92ZXJyaWRlCi0gKi8KLWRldnRvb2xzLnBy
b2ZpbGVyLkpzUHJvZmlsZS5wcm90b3R5cGUuc2tpcFRoaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKG5h
bWUpCi17Ci0gICAgcmV0dXJuICFkZXZ0b29scy5wcm9maWxlci5Kc1Byb2ZpbGUuSlNfTk9OX05B
VElWRV9SRS50ZXN0KG5hbWUpOwotfTsKLQotCi0vKioKLSAqIFByb2ZpbGVyIHByb2Nlc3Nvci4g
Q29uc3VtZXMgcHJvZmlsZXIgbG9nIGFuZCBidWlsZHMgcHJvZmlsZSB2aWV3cy4KLSAqIEZJWE1F
OiBjaGFuZ2UgZmllbGQgbmFtaW5nIHN0eWxlIHRvIHVzZSB0cmFpbGluZyB1bmRlcnNjb3JlLgot
ICoKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZVZpZXcpfSBu
ZXdQcm9maWxlQ2FsbGJhY2sgQ2FsbGJhY2sKLSAqICAgICB0aGF0IHJlY2VpdmVzIGEgbmV3IHBy
b2Nlc3NlZCBwcm9maWxlLgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVy
LlByb2Nlc3NvciA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgZGlzcGF0Y2hlcyA9IHsKLSAgICAg
ICAgImNvZGUtY3JlYXRpb24iOiB7Ci0gICAgICAgICAgICBwYXJzZXJzOiBbbnVsbCwgdGhpcy5j
cmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIiksIHBhcnNlSW50LCBudWxsXSwKLSAgICAgICAgICAg
IHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzQ29kZUNyZWF0aW9uXywgYmFja3JlZnM6IHRydWUsCi0g
ICAgICAgICAgICBuZWVkc1Byb2ZpbGU6IHRydWUgfSwKLSAgICAgICAgImNvZGUtbW92ZSI6IHsg
cGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLAotICAgICAgICAgICAg
dGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlLW1vdmUtdG8iKV0sCi0gICAgICAgICAgICBw
cm9jZXNzb3I6IHRoaXMucHJvY2Vzc0NvZGVNb3ZlXywgYmFja3JlZnM6IHRydWUsCi0gICAgICAg
ICAgICBuZWVkc1Byb2ZpbGU6IHRydWUgfSwKLSAgICAgICAgImNvZGUtZGVsZXRlIjogeyBwYXJz
ZXJzOiBbdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIildLAotICAgICAgICAgICAgcHJv
Y2Vzc29yOiB0aGlzLnByb2Nlc3NDb2RlRGVsZXRlXywgYmFja3JlZnM6IHRydWUsCi0gICAgICAg
ICAgICBuZWVkc1Byb2ZpbGU6IHRydWUgfSwKLSAgICAgICAgImZ1bmN0aW9uLWNyZWF0aW9uIjog
eyBwYXJzZXJzOiBbdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJjb2RlIiksCi0gICAgICAgICAg
ICB0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImZ1bmN0aW9uLW9iaiIpXSwKLSAgICAgICAgICAg
IHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzRnVuY3Rpb25DcmVhdGlvbl8sIGJhY2tyZWZzOiB0cnVl
IH0sCi0gICAgICAgICJmdW5jdGlvbi1tb3ZlIjogeyBwYXJzZXJzOiBbdGhpcy5jcmVhdGVBZGRy
ZXNzUGFyc2VyKCJjb2RlIiksCi0gICAgICAgICAgICB0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIo
ImNvZGUtbW92ZS10byIpXSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzRnVu
Y3Rpb25Nb3ZlXywgYmFja3JlZnM6IHRydWUgfSwKLSAgICAgICAgImZ1bmN0aW9uLWRlbGV0ZSI6
IHsgcGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpXSwKLSAgICAgICAg
ICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzRnVuY3Rpb25EZWxldGVfLCBiYWNrcmVmczogdHJ1
ZSB9LAotICAgICAgICAidGljayI6IHsgcGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNl
cigiY29kZSIpLAotICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJzdGFjayIp
LCBwYXJzZUludCwgInZhci1hcmdzIl0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJv
Y2Vzc1RpY2tfLCBiYWNrcmVmczogdHJ1ZSwgbmVlZFByb2ZpbGU6IHRydWUgfSwKLSAgICAgICAg
InByb2ZpbGVyIjogeyBwYXJzZXJzOiBbbnVsbCwgInZhci1hcmdzIl0sCi0gICAgICAgICAgICBw
cm9jZXNzb3I6IHRoaXMucHJvY2Vzc1Byb2ZpbGVyXywgbmVlZHNQcm9maWxlOiBmYWxzZSB9LAot
ICAgICAgICAiaGVhcC1zYW1wbGUtYmVnaW4iOiB7IHBhcnNlcnM6IFtudWxsLCBudWxsLCBwYXJz
ZUludF0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0hlYXBTYW1wbGVCZWdp
bl8gfSwKLSAgICAgICAgImhlYXAtc2FtcGxlLXN0YXRzIjogeyBwYXJzZXJzOiBbbnVsbCwgbnVs
bCwgcGFyc2VJbnQsIHBhcnNlSW50XSwKLSAgICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9j
ZXNzSGVhcFNhbXBsZVN0YXRzXyB9LAotICAgICAgICAiaGVhcC1zYW1wbGUtaXRlbSI6IHsgcGFy
c2VyczogW251bGwsIHBhcnNlSW50LCBwYXJzZUludF0sCi0gICAgICAgICAgICBwcm9jZXNzb3I6
IHRoaXMucHJvY2Vzc0hlYXBTYW1wbGVJdGVtXyB9LAotICAgICAgICAiaGVhcC1qcy1jb25zLWl0
ZW0iOiB7IHBhcnNlcnM6IFtudWxsLCBwYXJzZUludCwgcGFyc2VJbnRdLAotICAgICAgICAgICAg
cHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NIZWFwSnNDb25zSXRlbV8gfSwKLSAgICAgICAgImhlYXAt
anMtcmV0LWl0ZW0iOiB7IHBhcnNlcnM6IFtudWxsLCAidmFyLWFyZ3MiXSwKLSAgICAgICAgICAg
IHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzSGVhcEpzUmV0SXRlbV8gfSwKLSAgICAgICAgImhlYXAt
c2FtcGxlLWVuZCI6IHsgcGFyc2VyczogW251bGwsIG51bGxdLAotICAgICAgICAgICAgcHJvY2Vz
c29yOiB0aGlzLnByb2Nlc3NIZWFwU2FtcGxlRW5kXyB9LAotICAgICAgICAvLyBOb3QgdXNlZCBp
biBEZXZUb29scyBQcm9maWxlci4KLSAgICAgICAgInNoYXJlZC1saWJyYXJ5IjogbnVsbCwKLSAg
ICAgICAgLy8gT2Jzb2xldGUgcm93IHR5cGVzLgotICAgICAgICAiY29kZS1hbGxvY2F0ZSI6IG51
bGwsCi0gICAgICAgICJiZWdpbi1jb2RlLXJlZ2lvbiI6IG51bGwsCi0gICAgICAgICJlbmQtY29k
ZS1yZWdpb24iOiBudWxsfTsKLQotICAgIGlmIChkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlLlZF
UlNJT04gPT09IDIpIHsKLSAgICAgICAgZGlzcGF0Y2hlc1sidGljayJdID0gIHsgcGFyc2Vyczog
W3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLAotICAgICAgICAgICAgdGhpcy5jcmVh
dGVBZGRyZXNzUGFyc2VyKCJzdGFjayIpLAotICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNz
UGFyc2VyKCJmdW5jIiksIHBhcnNlSW50LCAidmFyLWFyZ3MiXSwKLSAgICAgICAgICAgIHByb2Nl
c3NvcjogdGhpcy5wcm9jZXNzVGlja1YyXywgYmFja3JlZnM6IHRydWUgfTsKLSAgICB9Ci0KLSAg
ICBkZXZ0b29scy5wcm9maWxlci5Mb2dSZWFkZXIuY2FsbCh0aGlzLCBkaXNwYXRjaGVzKTsKLQot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHdoZW4gYSBuZXcgcHJvZmls
ZSBpcyBlbmNvdW50ZXJlZCBpbiB0aGUgbG9nLgotICAgICAqIEB0eXBlIHtmdW5jdGlvbigpfQot
ICAgICAqLwotICAgIHRoaXMuc3RhcnRlZFByb2ZpbGVQcm9jZXNzaW5nXyA9IG51bGw7Ci0KLSAg
ICAvKioKLSAgICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXJpb2RpY2FsbHkgdG8gZGlz
cGxheSBwcm9jZXNzaW5nIHN0YXR1cy4KLSAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKX0KLSAgICAg
Ki8KLSAgICB0aGlzLnByb2ZpbGVQcm9jZXNzaW5nU3RhdHVzXyA9IG51bGw7Ci0KLSAgICAvKioK
LSAgICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgcHJvZmlsZSBoYXMgYmVlbiBw
cm9jZXNzZWQgYW5kIGlzIHJlYWR5Ci0gICAgICogdG8gYmUgc2hvd24uCi0gICAgICogQHR5cGUg
e2Z1bmN0aW9uKGRldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3KX0KLSAgICAgKi8KLSAgICB0
aGlzLmZpbmlzaGVkUHJvZmlsZVByb2Nlc3NpbmdfID0gbnVsbDsKLQotICAgIC8qKgotICAgICAq
IFRoZSBjdXJyZW50IHByb2ZpbGUuCi0gICAgICogQHR5cGUge2RldnRvb2xzLnByb2ZpbGVyLkpz
UHJvZmlsZX0KLSAgICAgKi8KLSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXyA9IG51bGw7Ci0KLSAg
ICAvKioKLSAgICAgKiBCdWlsZGVyIG9mIHByb2ZpbGUgdmlld3MuIENyZWF0ZWQgZHVyaW5nICJw
cm9maWxlcixiZWdpbiIgZXZlbnQgcHJvY2Vzc2luZy4KLSAgICAgKiBAdHlwZSB7ZGV2dG9vbHMu
cHJvZmlsZXIuV2ViS2l0Vmlld0J1aWxkZXJ9Ci0gICAgICovCi0gICAgdGhpcy52aWV3QnVpbGRl
cl8gPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogTmV4dCBwcm9maWxlIGlkLgotICAgICAqIEB0
eXBlIHtudW1iZXJ9Ci0gICAgICovCi0gICAgdGhpcy5wcm9maWxlSWRfID0gMTsKLQotICAgIC8q
KgotICAgICAqIENvdW50ZXIgZm9yIHByb2Nlc3NlZCB0aWNrcy4KLSAgICAgKiBAdHlwZSB7bnVt
YmVyfQotICAgICAqLwotICAgIHRoaXMudGlja3NDb3VudF8gPSAwOwotCi0gICAgLyoqCi0gICAg
ICogSW50ZXJ2YWwgaWQgZm9yIHVwZGF0aW5nIHByb2Nlc3Npbmcgc3RhdHVzLgotICAgICAqIEB0
eXBlIHtudW1iZXJ9Ci0gICAgICovCi0gICAgdGhpcy5wcm9jZXNzaW5nSW50ZXJ2YWxfID0gbnVs
bDsKLQotICAgIC8qKgotICAgICAqIFRoZSBjdXJyZW50IGhlYXAgc25hcHNob3QuCi0gICAgICog
QHR5cGUge3N0cmluZ30KLSAgICAgKi8KLSAgICB0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfID0g
bnVsbDsKLQotICAgIC8qKgotICAgICAqIE5leHQgaGVhcCBzbmFwc2hvdCBpZC4KLSAgICAgKiBA
dHlwZSB7bnVtYmVyfQotICAgICAqLwotICAgIHRoaXMuaGVhcFNuYXBzaG90SWRfID0gMTsKLX07
Ci1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLl9fcHJvdG9fXyA9IGRldnRv
b2xzLnByb2ZpbGVyLkxvZ1JlYWRlci5wcm90b3R5cGU7Ci0KLQotLyoqCi0gKiBAb3ZlcnJpZGUK
LSAqLwotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcmludEVycm9yID0g
ZnVuY3Rpb24oc3RyKQotewotICAgIFdlYkluc3BlY3Rvci5sb2coc3RyKTsKLX07Ci0KLQotLyoq
Ci0gKiBAb3ZlcnJpZGUKLSAqLwotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlw
ZS5za2lwRGlzcGF0Y2ggPSBmdW5jdGlvbihkaXNwYXRjaCkKLXsKLSAgICByZXR1cm4gZGlzcGF0
Y2gubmVlZHNQcm9maWxlICYmIHRoaXMuY3VycmVudFByb2ZpbGVfID09PSBudWxsOwotfTsKLQot
Ci0vKioKLSAqIFNldHMgcHJvZmlsZSBwcm9jZXNzaW5nIGNhbGxiYWNrcy4KLSAqCi0gKiBAcGFy
YW0ge2Z1bmN0aW9uKCl9IHN0YXJ0ZWQgU3RhcnRlZCBwcm9jZXNzaW5nIGNhbGxiYWNrLgotICog
QHBhcmFtIHtmdW5jdGlvbihkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmlldyl9IGZpbmlzaGVk
IEZpbmlzaGVkCi0gKiAgICAgcHJvY2Vzc2luZyBjYWxsYmFjay4KLSAqLwotZGV2dG9vbHMucHJv
ZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5zZXRDYWxsYmFja3MgPSBmdW5jdGlvbihzdGFydGVk
LCBwcm9jZXNzaW5nLCBmaW5pc2hlZCkKLXsKLSAgICB0aGlzLnN0YXJ0ZWRQcm9maWxlUHJvY2Vz
c2luZ18gPSBzdGFydGVkOwotICAgIHRoaXMucHJvZmlsZVByb2Nlc3NpbmdTdGF0dXNfID0gcHJv
Y2Vzc2luZzsKLSAgICB0aGlzLmZpbmlzaGVkUHJvZmlsZVByb2Nlc3NpbmdfID0gZmluaXNoZWQ7
Ci19OwotCi0KLS8qKgotICogQW4gYWRkcmVzcyBmb3IgdGhlIGZha2UgIihwcm9ncmFtKSIgZW50
cnkuIFdlYktpdCdzIHZpc3VhbGlzYXRpb24KLSAqIGhhcyBhc3N1bXB0aW9ucyBvbiBob3cgdGhl
IHRvcCBvZiB0aGUgY2FsbCB0cmVlIHNob3VsZCBsb29rIGxpa2UsCi0gKiBhbmQgd2UgbmVlZCB0
byBhZGQgYSBmYWtlIGVudHJ5IGFzIHRoZSB0b3Btb3N0IGZ1bmN0aW9uLiBUaGlzCi0gKiBhZGRy
ZXNzIGlzIGNob3NlbiBiZWNhdXNlIGl0J3MgdGhlIGVuZCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBt
ZW1vcnkKLSAqIHBhZ2UsIHdoaWNoIGlzIG5ldmVyIHVzZWQgZm9yIGNvZGUgb3IgZGF0YSwgYnV0
IG9ubHkgYXMgYSBndWFyZAotICogcGFnZSBmb3IgY2F0Y2hpbmcgQVYgZXJyb3JzLgotICoKLSAq
IEB0eXBlIHtudW1iZXJ9Ci0gKi8KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFN
X0VOVFJZID0gMHhmZmZmOwotLyoqCi0gKiBAdHlwZSB7c3RyaW5nfQotICovCi1kZXZ0b29scy5w
cm9maWxlci5Qcm9jZXNzb3IuUFJPR1JBTV9FTlRSWV9TVFIgPSAiMHhmZmZmIjsKLQotCi0vKioK
LSAqIFNldHMgbmV3IHByb2ZpbGUgY2FsbGJhY2suCi0gKiBAcGFyYW0ge2Z1bmN0aW9uKGRldnRv
b2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3KX0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uCi0g
Ki8KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUuc2V0TmV3UHJvZmlsZUNh
bGxiYWNrID0gZnVuY3Rpb24oY2FsbGJhY2spCi17Ci0gICAgdGhpcy5uZXdQcm9maWxlQ2FsbGJh
Y2tfID0gY2FsbGJhY2s7Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90
b3R5cGUucHJvY2Vzc1Byb2ZpbGVyXyA9IGZ1bmN0aW9uKHN0YXRlLCBwYXJhbXMpCi17Ci0gICAg
c3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlICJyZXN1bWUiOgotICAgICAgICAgICAgaWYg
KHRoaXMuY3VycmVudFByb2ZpbGVfID09PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5j
dXJyZW50UHJvZmlsZV8gPSBuZXcgZGV2dG9vbHMucHJvZmlsZXIuSnNQcm9maWxlKCk7Ci0gICAg
ICAgICAgICAgICAgLy8gc2VlIHRoZSBjb21tZW50IGZvciBkZXZ0b29scy5wcm9maWxlci5Qcm9j
ZXNzb3IuUFJPR1JBTV9FTlRSWQotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2ZpbGVf
LmFkZENvZGUoIkZ1bmN0aW9uIiwgIihwcm9ncmFtKSIsIGRldnRvb2xzLnByb2ZpbGVyLlByb2Nl
c3Nvci5QUk9HUkFNX0VOVFJZLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydGVk
UHJvZmlsZVByb2Nlc3NpbmdfKQotICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ZWRQcm9m
aWxlUHJvY2Vzc2luZ18oKTsKLSAgICAgICAgICAgICAgICB0aGlzLnRpY2tzQ291bnRfID0gMDsK
LSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgaWYgKHRo
aXMucHJvZmlsZVByb2Nlc3NpbmdTdGF0dXNfKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
cHJvY2Vzc2luZ0ludGVydmFsXyA9IHdpbmRvdy5zZXRJbnRlcnZhbCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKCkgeyBzZWxmLnByb2ZpbGVQcm9jZXNzaW5nU3RhdHVzXyhzZWxm
LnRpY2tzQ291bnRfKTsgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIDEwMDApOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlICJwYXVzZSI6Ci0gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UHJvZmlsZV8gIT09IG51
bGwpIHsKLSAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnByb2Nlc3Np
bmdJbnRlcnZhbF8pOwotICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ0ludGVydmFsXyA9
IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmluaXNoZWRQcm9maWxlUHJvY2Vzc2lu
Z18pCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoZWRQcm9maWxlUHJvY2Vzc2luZ18o
dGhpcy5jcmVhdGVQcm9maWxlRm9yVmlldygpKTsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJl
bnRQcm9maWxlXyA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAiYmVnaW4iOgotICAgICAgICAgICAgdmFyIHNhbXBsaW5nUmF0ZSA9IE5hTjsK
LSAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICAgICBzYW1w
bGluZ1JhdGUgPSBwYXJzZUludChwYXJhbXNbMF0pOwotICAgICAgICAgICAgaWYgKGlzTmFOKHNh
bXBsaW5nUmF0ZSkpCi0gICAgICAgICAgICAgICAgc2FtcGxpbmdSYXRlID0gMTsKLSAgICAgICAg
ICAgIHRoaXMudmlld0J1aWxkZXJfID0gbmV3IGRldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdC
dWlsZGVyKHNhbXBsaW5nUmF0ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhl
c2UgZXZlbnRzIGFyZSB2YWxpZCBidXQgYXJlbid0IHVzZWQuCi0gICAgICAgIGNhc2UgImNvbXBy
ZXNzaW9uIjoKLSAgICAgICAgY2FzZSAiZW5kIjogYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcHJvZmlsZXIgc3RhdGU6ICIgKyBz
dGF0ZSk7Ci0gICAgfQotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90
eXBlLnByb2Nlc3NDb2RlQ3JlYXRpb25fID0gZnVuY3Rpb24odHlwZSwgc3RhcnQsIHNpemUsIG5h
bWUpCi17Ci0gICAgdGhpcy5jdXJyZW50UHJvZmlsZV8uYWRkQ29kZSh0aGlzLmV4cGFuZEFsaWFz
KHR5cGUpLCBuYW1lLCBzdGFydCwgc2l6ZSk7Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVyLlBy
b2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0NvZGVNb3ZlXyA9IGZ1bmN0aW9uKGZyb20sIHRvKQot
ewotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLm1vdmVDb2RlKGZyb20sIHRvKTsKLX07Ci0KLQot
ZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzQ29kZURlbGV0ZV8g
PSBmdW5jdGlvbihzdGFydCkKLXsKLSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5kZWxldGVDb2Rl
KHN0YXJ0KTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5w
cm9jZXNzRnVuY3Rpb25DcmVhdGlvbl8gPSBmdW5jdGlvbihmdW5jdGlvbkFkZHIsIGNvZGVBZGRy
KQotewotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLmFkZENvZGVBbGlhcyhmdW5jdGlvbkFkZHIs
IGNvZGVBZGRyKTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlw
ZS5wcm9jZXNzRnVuY3Rpb25Nb3ZlXyA9IGZ1bmN0aW9uKGZyb20sIHRvKQotewotICAgIHRoaXMu
Y3VycmVudFByb2ZpbGVfLnNhZmVNb3ZlRHluYW1pY0NvZGUoZnJvbSwgdG8pOwotfTsKLQotCi1k
ZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NGdW5jdGlvbkRlbGV0
ZV8gPSBmdW5jdGlvbihzdGFydCkKLXsKLSAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5zYWZlRGVs
ZXRlRHluYW1pY0NvZGUoc3RhcnQpOwotfTsKLQotCi0vLyBUT0RPKG1uYWdhbm92KTogUmVtb3Zl
IGFmdGVyIG5leHQgVjggcm9sbC4KLWRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5
cGUucHJvY2Vzc1RpY2tfID0gZnVuY3Rpb24ocGMsIHNwLCB2bVN0YXRlLCBzdGFjaykKLXsKLSAg
ICAvLyBzZWUgdGhlIGNvbW1lbnQgZm9yIGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9H
UkFNX0VOVFJZCi0gICAgc3RhY2sucHVzaChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJP
R1JBTV9FTlRSWV9TVFIpOwotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLnJlY29yZFRpY2sodGhp
cy5wcm9jZXNzU3RhY2socGMsIHN0YWNrKSk7Ci0gICAgdGhpcy50aWNrc0NvdW50XysrOwotfTsK
LQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NUaWNrVjJf
ID0gZnVuY3Rpb24ocGMsIHNwLCBmdW5jLCB2bVN0YXRlLCBzdGFjaykKLXsKLSAgICAvLyBzZWUg
dGhlIGNvbW1lbnQgZm9yIGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5QUk9HUkFNX0VOVFJZ
Ci0gICAgc3RhY2sucHVzaChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJPR1JBTV9FTlRS
WV9TVFIpOwotCi0KLSAgICBpZiAoZnVuYykgewotICAgICAgICB2YXIgZnVuY0VudHJ5ID0gdGhp
cy5jdXJyZW50UHJvZmlsZV8uZmluZEVudHJ5KGZ1bmMpOwotICAgICAgICBpZiAoIWZ1bmNFbnRy
eSB8fCAhZnVuY0VudHJ5LmlzSlNGdW5jdGlvbiB8fCAhZnVuY0VudHJ5LmlzSlNGdW5jdGlvbigp
KQotICAgICAgICAgICAgZnVuYyA9IDA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdmFy
IGN1cnJFbnRyeSA9IHRoaXMuY3VycmVudFByb2ZpbGVfLmZpbmRFbnRyeShwYyk7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJFbnRyeSB8fCAhY3VyckVudHJ5LmlzSlNGdW5jdGlvbiB8fCBjdXJyRW50
cnkuaXNKU0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBmdW5jID0gMDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLnJlY29y
ZFRpY2sodGhpcy5wcm9jZXNzU3RhY2socGMsIGZ1bmMsIHN0YWNrKSk7Ci0gICAgdGhpcy50aWNr
c0NvdW50XysrOwotfTsKLQotCi1kZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBl
LnByb2Nlc3NIZWFwU2FtcGxlQmVnaW5fID0gZnVuY3Rpb24oc3BhY2UsIHN0YXRlLCB0aWNrcykK
LXsKLSAgICBpZiAoc3BhY2UgIT09ICJIZWFwIikgcmV0dXJuOwotICAgIHRoaXMuY3VycmVudEhl
YXBTbmFwc2hvdF8gPSB7Ci0gICAgICAgIG51bWJlcjogdGhpcy5oZWFwU25hcHNob3RJZF8rKywK
LSAgICAgICAgZW50cmllczoge30sCi0gICAgICAgIGNsdXN0ZXJzOiB7fSwKLSAgICAgICAgbG93
bGV2ZWxzOiB7fSwKLSAgICAgICAgdGlja3M6IHRpY2tzCi0gICAgfTsKLX07Ci0KLQotZGV2dG9v
bHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcFNhbXBsZVN0YXRzXyA9
IGZ1bmN0aW9uKHNwYWNlLCBzdGF0ZSwgY2FwYWNpdHksIHVzZWQpCi17Ci0gICAgaWYgKHNwYWNl
ICE9PSAiSGVhcCIpIHJldHVybjsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29y
LnByb3RvdHlwZS5wcm9jZXNzSGVhcFNhbXBsZUl0ZW1fID0gZnVuY3Rpb24oaXRlbSwgbnVtYmVy
LCBzaXplKQotewotICAgIGlmICghdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90XykgcmV0dXJuOwot
ICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8ubG93bGV2ZWxzW2l0ZW1dID0gewotICAgICAg
ICB0eXBlOiBpdGVtLCBjb3VudDogbnVtYmVyLCBzaXplOiBzaXplCi0gICAgfTsKLX07Ci0KLQot
ZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcEpzQ29uc0l0
ZW1fID0gZnVuY3Rpb24oaXRlbSwgbnVtYmVyLCBzaXplKQotewotICAgIGlmICghdGhpcy5jdXJy
ZW50SGVhcFNuYXBzaG90XykgcmV0dXJuOwotICAgIHRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8u
ZW50cmllc1tpdGVtXSA9IHsKLSAgICAgICAgY29uczogaXRlbSwgY291bnQ6IG51bWJlciwgc2l6
ZTogc2l6ZSwgcmV0YWluZXJzOiB7fQotICAgIH07Ci19OwotCi0KLWRldnRvb2xzLnByb2ZpbGVy
LlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0hlYXBKc1JldEl0ZW1fID0gZnVuY3Rpb24oaXRl
bSwgcmV0YWluZXJzQXJyYXkpCi17Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRIZWFwU25hcHNob3Rf
KSByZXR1cm47Ci0gICAgdmFyIHJhd1JldGFpbmVycyA9IHt9OwotICAgIGZvciAodmFyIGkgPSAw
LCBuID0gcmV0YWluZXJzQXJyYXkubGVuZ3RoOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIHZhciBl
bnRyeSA9IHJldGFpbmVyc0FycmF5W2ldLnNwbGl0KCI7Iik7Ci0gICAgICAgIHJhd1JldGFpbmVy
c1tlbnRyeVswXV0gPSBwYXJzZUludChlbnRyeVsxXSwgMTApOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIG1lcmdlUmV0YWluZXJzKGVudHJ5KSB7Ci0gICAgICAgIGZvciAodmFyIHJhd1JldGFpbmVy
IGluIHJhd1JldGFpbmVycykgewotICAgICAgICAgICAgdmFyIGNvbnNOYW1lID0gcmF3UmV0YWlu
ZXIuaW5kZXhPZigiOiIpICE9PSAtMSA/IHJhd1JldGFpbmVyLnNwbGl0KCI6IilbMF0gOiByYXdS
ZXRhaW5lcjsKLSAgICAgICAgICAgIGlmICghKGNvbnNOYW1lIGluIGVudHJ5LnJldGFpbmVycykp
Ci0gICAgICAgICAgICAgICAgZW50cnkucmV0YWluZXJzW2NvbnNOYW1lXSA9IHsgY29uczogY29u
c05hbWUsIGNvdW50OiAwLCBjbHVzdGVyczoge30gfTsKLSAgICAgICAgICAgIHZhciByZXRhaW5l
ciA9IGVudHJ5LnJldGFpbmVyc1tjb25zTmFtZV07Ci0gICAgICAgICAgICByZXRhaW5lci5jb3Vu
dCArPSByYXdSZXRhaW5lcnNbcmF3UmV0YWluZXJdOwotICAgICAgICAgICAgaWYgKGNvbnNOYW1l
ICE9PSByYXdSZXRhaW5lcikKLSAgICAgICAgICAgICAgICByZXRhaW5lci5jbHVzdGVyc1tyYXdS
ZXRhaW5lcl0gPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGl0ZW0uaW5kZXhP
ZigiOiIpICE9PSAtMSkgewotICAgICAgLy8gQXJyYXksIEZ1bmN0aW9uLCBvciBPYmplY3QgaW5z
dGFuY2VzIGNsdXN0ZXIgY2FzZS4KLSAgICAgIGlmICghKGl0ZW0gaW4gdGhpcy5jdXJyZW50SGVh
cFNuYXBzaG90Xy5jbHVzdGVycykpIHsKLSAgICAgICAgICB0aGlzLmN1cnJlbnRIZWFwU25hcHNo
b3RfLmNsdXN0ZXJzW2l0ZW1dID0gewotICAgICAgICAgICAgICBjb25zOiBpdGVtLCByZXRhaW5l
cnM6IHt9Ci0gICAgICAgICAgfTsKLSAgICAgIH0KLSAgICAgIG1lcmdlUmV0YWluZXJzKHRoaXMu
Y3VycmVudEhlYXBTbmFwc2hvdF8uY2x1c3RlcnNbaXRlbV0pOwotICAgICAgaXRlbSA9IGl0ZW0u
c3BsaXQoIjoiKVswXTsKLSAgICB9Ci0gICAgbWVyZ2VSZXRhaW5lcnModGhpcy5jdXJyZW50SGVh
cFNuYXBzaG90Xy5lbnRyaWVzW2l0ZW1dKTsKLX07Ci0KLQotZGV2dG9vbHMucHJvZmlsZXIuUHJv
Y2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcFNhbXBsZUVuZF8gPSBmdW5jdGlvbihzcGFjZSwg
c3RhdGUpCi17Ci0gICAgaWYgKHNwYWNlICE9PSAiSGVhcCIpIHJldHVybjsKLSAgICB2YXIgc25h
cHNob3QgPSB0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfOwotICAgIHRoaXMuY3VycmVudEhlYXBT
bmFwc2hvdF8gPSBudWxsOwotICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuYWRkU25h
cHNob3Qoc25hcHNob3QpOwotfTsKLQotCi0vKioKLSAqIENyZWF0ZXMgYSBwcm9maWxlIGZvciBm
dXJ0aGVyIGRpc3BsYXlpbmcgaW4gUHJvZmlsZVZpZXcuCi0gKi8KLWRldnRvb2xzLnByb2ZpbGVy
LlByb2Nlc3Nvci5wcm90b3R5cGUuY3JlYXRlUHJvZmlsZUZvclZpZXcgPSBmdW5jdGlvbigpCi17
Ci0gICAgdmFyIHByb2ZpbGUgPSB0aGlzLnZpZXdCdWlsZGVyXy5idWlsZFZpZXcodGhpcy5jdXJy
ZW50UHJvZmlsZV8uZ2V0VG9wRG93blByb2ZpbGUoKSk7Ci0gICAgcHJvZmlsZS51aWQgPSB0aGlz
LnByb2ZpbGVJZF8rKzsKLSAgICBwcm9maWxlLnRpdGxlID0gVXNlckluaXRpYXRlZFByb2ZpbGVO
YW1lICsgIi4iICsgcHJvZmlsZS51aWQ7Ci0gICAgcmV0dXJuIHByb2ZpbGU7Ci19OwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9kZXZUb29scy5jc3MgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL2RldlRvb2xzLmNzcwppbmRleCBkZmNhYWRmLi45NDk1ZmI4IDEwMDc1NQotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL2RldlRvb2xzLmNzcworKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL2RldlRvb2xzLmNzcwpAQCAtMzcsMTE4ICszNyw2IEBAIGJvZHkucGxhdGZvcm0t
bGludXggI3NjcmlwdHMtZmlsZXMgewogICAgIGxpbmUtaGVpZ2h0OiAxMnB4OwogfQogCi0vKiBI
ZWFwIFByb2ZpbGVyIFN0eWxlcyAqLwotCi0uaGVhcC1zbmFwc2hvdC1zdGF0dXMtYmFyLWl0ZW0g
LmdseXBoIHsKLSAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChJbWFnZXMvZm9jdXNCdXR0b25H
bHlwaC5wbmcpOwotfQotCi0uaGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbSAuaWNvbiB7
Ci0gICAgY29udGVudDogdXJsKEltYWdlcy9wcm9maWxlSWNvbi5wbmcpOwotfQotCi0uaGVhcC1z
bmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbS5zbWFsbCAuaWNvbiB7Ci0gICAgY29udGVudDogdXJs
KEltYWdlcy9wcm9maWxlU21hbGxJY29uLnBuZyk7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcg
ewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICBwb3NpdGlv
bjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwOwotICAgIGxlZnQ6IDA7Ci0gICAgcmlnaHQ6IDA7Ci0g
ICAgYm90dG9tOiAwOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3LnZpc2libGUgewotICAgIGRp
c3BsYXk6IGJsb2NrOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQgewotICAg
IGJvcmRlcjogbm9uZTsKLSAgICBtYXgtaGVpZ2h0OiAxMDAlOwotICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwotICAgIHRvcDogMDsKLSAgICBib3R0
b206IDkzcHg7Ci19Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5jb3VudC1j
b2x1bW4gewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotLmhlYXAtc25hcHNob3Qtdmll
dyAuZGF0YS1ncmlkIHRkLmNvdW50LWNvbHVtbiB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19
Ci0KLS5oZWFwLXNuYXBzaG90LXZpZXcgLmRhdGEtZ3JpZCB0aC5zaXplLWNvbHVtbiB7Ci0gICAg
dGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0uaGVhcC1zbmFwc2hvdC12aWV3IC5kYXRhLWdyaWQg
dGQuc2l6ZS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0uaGVhcC1zbmFw
c2hvdC12aWV3IC5kYXRhLWdyaWQgdGguY291bnREZWx0YS1jb2x1bW4gewotICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLmNvdW50
RGVsdGEtY29sdW1uIHsKLSAgICB0ZXh0LWFsaWduOiByaWdodDsKLX0KLQotLmhlYXAtc25hcHNo
b3QtdmlldyAuZGF0YS1ncmlkIHRoLnNpemVEZWx0YS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246
IGNlbnRlcjsKLX0KLQotLmhlYXAtc25hcHNob3QtdmlldyAuZGF0YS1ncmlkIHRkLnNpemVEZWx0
YS1jb2x1bW4gewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQotCi0jaGVhcC1zbmFwc2hvdC1z
dW1tYXJ5LWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHBhZGRpbmct
dG9wOiAyMHB4OwotICAgIGJvdHRvbTogMDsKLSAgICBsZWZ0OiAwOwotICAgIHJpZ2h0OiAwOwot
ICAgIGhlaWdodDogOTNweDsKLSAgICBtYXJnaW4tbGVmdDogLTFweDsKLSAgICBib3JkZXItbGVm
dDogMXB4IHNvbGlkIHJnYigxMDIsIDEwMiwgMTAyKTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoMTAxLCAxMTEsIDEzMCk7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVu
dChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2JhKDAsIDAsIDAsIDAuNSkp
LCB0byhyZ2JhKDAsIDAsIDAsIDApKSk7Ci0gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14
OwotICAgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7
Ci0gICAgdGV4dC1zaGFkb3c6IGJsYWNrIDAgMXB4IDFweDsKLSAgICB3aGl0ZS1zcGFjZTogbm93
cmFwOwotICAgIGNvbG9yOiB3aGl0ZTsKLSAgICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogMXB4
IDZweDsKLSAgICAtd2Via2l0LWJhY2tncm91bmQtb3JpZ2luOiBwYWRkaW5nOwotICAgIC13ZWJr
aXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nOwotfQotCi0uaGVhcC1zbmFwc2hvdC1zdW1tYXJ5
IHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci0gICAgd2lkdGg6IDUwJTsKLSAgICBtaW4t
d2lkdGg6IDMwMHB4OwotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLX0KLQotLmhlYXAtc25hcHNo
b3Qtc3VtbWFyeSBjYW52YXMuc3VtbWFyeS1ncmFwaCB7Ci0gICAgd2lkdGg6IDIyNXB4OwotfQot
Ci0uaGVhcC1zbmFwc2hvdC1zdW1tYXJ5LWxhYmVsIHsKLSAgICBmb250LXNpemU6IDEycHg7Ci0g
ICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDog
MXB4OwotICAgIHdpZHRoOiA1MCU7Ci0gICAgbGVmdDogMjUlOwotfQotCiAuc2VjdGlvbiA+IC5o
ZWFkZXIgewogICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYig5MiwgMTE2LCAxNTcpOwogICAgIGJh
Y2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBi
b3R0b20sIGZyb20ocmdiKDEwNSwgMTMzLCAxODApKSwgdG8ocmdiKDkyLCAxMTYsIDE1NykpKTsK
</data>
<flag name="review"
          id="54225"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="54226"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>