<?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>105797</bug_id>
          
          <creation_ts>2012-12-27 04:45:28 -0800</creation_ts>
          <short_desc>Web Inspector: refactor DefaultTextEditor&apos;s private methods</short_desc>
          <delta_ts>2012-12-28 01:09:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>797516</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2012-12-27 04:45:28 -0800</bug_when>
    <thetext>A pre-work is needed for splitting classes from DefaultTextEditor.js into four files: DefaultTextEditor.js (DefaultTextEditor class), TextEditorMainPanel.js (TextEditorMainPanel and TextEditorMainChunk classes), TextEditorGutterPanel.js (TextEditorGutterPanel and TextEditorGutterChunk classes) and TextEditorChunkedPanel.js (TextEditorChunkedPanel class).

Refactor DefaultTextEditor so that different classes do not use each-others private methods and fields if they will reside in different files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797519</commentid>
    <comment_count>1</comment_count>
      <attachid>180793</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2012-12-27 05:07:04 -0800</bug_when>
    <thetext>Created attachment 180793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797536</commentid>
    <comment_count>2</comment_count>
      <attachid>180793</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-12-27 06:24:10 -0800</bug_when>
    <thetext>Comment on attachment 180793
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:414
&gt; +        this._mainPanel.handleTextInput(e);

Just add this listener within the main panel.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:450
&gt;              this._delegate.populateTextAreaContextMenu(contextMenu, target &amp;&amp; target.lineNumber);

You should instead pass event.target here (this._mainPanel.handleContextMenu(event);)

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:458
&gt; +        var firstVisibleLineNumber = this._mainPanel.findFirstVisibleLineNumber(visibleFrom);

lineNumberAtOffset(visibleFrom)

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:491
&gt; +        this._mainPanel.setLastSelection(textRange);

I&apos;d rather introduce mainPanel.setSelection that would do this all. _restoreSelection does not need to be public then.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:590
&gt; +        this.freeCachedElements();

You already have willHide, free cached elements from there.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1030
&gt; +    this.element.addEventListener(&quot;scroll&quot;, this.scroll.bind(this), false);

Just create this.element in TextEditorChunkedPanel, add listener there.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1307
&gt; +        return this._textEditor.totalHeight(this._expandedLineRows[0], this._expandedLineRows[this._expandedLineRows.length - 1]);

rename textEditor to chunkedPanel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797557</commentid>
    <comment_count>3</comment_count>
      <attachid>180793</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2012-12-27 07:45:34 -0800</bug_when>
    <thetext>Comment on attachment 180793
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:414
&gt;&gt; +        this._mainPanel.handleTextInput(e);
&gt; 
&gt; Just add this listener within the main panel.

fixed

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:450
&gt;&gt;              this._delegate.populateTextAreaContextMenu(contextMenu, target &amp;&amp; target.lineNumber);
&gt; 
&gt; You should instead pass event.target here (this._mainPanel.handleContextMenu(event);)

fixed

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:458
&gt;&gt; +        var firstVisibleLineNumber = this._mainPanel.findFirstVisibleLineNumber(visibleFrom);
&gt; 
&gt; lineNumberAtOffset(visibleFrom)

fixed

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:491
&gt;&gt; +        this._mainPanel.setLastSelection(textRange);
&gt; 
&gt; I&apos;d rather introduce mainPanel.setSelection that would do this all. _restoreSelection does not need to be public then.

fixed

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:590
&gt;&gt; +        this.freeCachedElements();
&gt; 
&gt; You already have willHide, free cached elements from there.

fixed

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1030
&gt;&gt; +    this.element.addEventListener(&quot;scroll&quot;, this.scroll.bind(this), false);
&gt; 
&gt; Just create this.element in TextEditorChunkedPanel, add listener there.

done

&gt;&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1307
&gt;&gt; +        return this._textEditor.totalHeight(this._expandedLineRows[0], this._expandedLineRows[this._expandedLineRows.length - 1]);
&gt; 
&gt; rename textEditor to chunkedPanel

renamed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797559</commentid>
    <comment_count>4</comment_count>
      <attachid>180802</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2012-12-27 07:49:19 -0800</bug_when>
    <thetext>Created attachment 180802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797804</commentid>
    <comment_count>5</comment_count>
      <attachid>180802</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-12-28 01:05:19 -0800</bug_when>
    <thetext>Comment on attachment 180802
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:437
&gt; +            this._mainPanel.contextMenu(event.target, contextMenu);

populateContextMenu

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:462
&gt; +        return this._mainPanel.getSelection();

selection()

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:-484
&gt; -        return this._mainPanel._lastSelection;

lastSelection

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:556
&gt; +        this._boundSelectionChangeListener = this._mainPanel.handleSelectionChange.bind(this._mainPanel);

You should register this listener within mainPanel&apos;s wasShown instead.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:806
&gt; +        throw new Error(&quot;createNewChunk() is not implemented&quot;);

... should be implemented by descendants</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797807</commentid>
    <comment_count>6</comment_count>
      <attachid>180802</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 01:09:33 -0800</bug_when>
    <thetext>Comment on attachment 180802
Patch

Clearing flags on attachment: 180802

Committed r138527: &lt;http://trac.webkit.org/changeset/138527&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797808</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-28 01:09:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180793</attachid>
            <date>2012-12-27 05:07:04 -0800</date>
            <delta_ts>2012-12-27 07:49:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105797-20121227170415.patch</filename>
            <type>text/plain</type>
            <size>48446</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA2Zjk5NWNiNzQ5N2Yz
MzZiMjY5MmNmNTk2NDQxNThkNDEzNWI2Zi4uMzI1YjViNmZjZGEyYmZmMWZhNmZhOGUzNmI5MWY2
ZjgxMTcwMWEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTEyLTI3ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiByZWZhY3RvciBEZWZhdWx0VGV4dEVkaXRvcidzIHByaXZhdGUgbWV0aG9kcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1Nzk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBSZWZhY3RvciBw
cml2YXRlIG1ldGhvZHMgdG8gcHVibGljIGlmIHRoZXkgYXJlIGNhbGxlZCBmcm9tIGV4dGVybmFs
IGNsYXNzZXMKKyAgICAgICAgLSBHZXQgcmlkIG9mIGV4dGVybmFsIHByaXZhdGUgdmFyaWFibGUg
YWNjZXNzLgorCisgICAgICAgIE5vIHRlc3RzOiBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUuZnJlZUNhY2hlZEVs
ZW1lbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5
cGUuX2hhbmRsZVRleHRJbnB1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRF
ZGl0b3IucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
ZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZXh0TWVudSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLl9oYW5kbGVTY3JvbGxD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5
cGUuc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUubGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdFRl
eHRFZGl0b3IucHJvdG90eXBlLnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLndhc1Nob3duKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZUZvY3VzZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZS53aWxsSGlkZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLmhpZ2hsaWdo
dEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnBy
b3RvdHlwZS5vdmVycmlkZVZpZXdwb3J0Rm9yVGVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYnVpbGRDaHVua3MpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1ha2VMaW5lQUNo
dW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5zcGxpdENodW5rT25BTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY3JlYXRlTmV3Q2h1bmspOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNjcm9sbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3NjaGVkdWxl
UmVwYWludEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUuZW5kVXBkYXRlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY2h1bmtGb3JMaW5lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5maW5kVmlzaWJsZUNodW5rcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUu
cmVwYWludEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUuc2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
Q2h1bmtlZFBhbmVsLnByb3RvdHlwZS5jbGllbnRIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmV4cGFuZENodW5rcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUudG90YWxI
ZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJv
dG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBh
bmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90
eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckd1dHRlclBhbmVsLnByb3RvdHlwZS5jcmVhdGVOZXdDaHVuayk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZS5nZXQgaGVp
Z2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS53YXNTaG93bik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUud2ls
bEhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLmhpZ2hsaWdodExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGFuZGxlVW5kb1JlZG8pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmhhbmRsZUVudGVy
S2V5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5zcGxpdENodW5rT25BTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5QYW5lbC5wcm90b3R5cGUuYnVpbGRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmNyZWF0ZU5ld0NodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5leHBhbmRDaHVua3MpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9zY2hl
ZHVsZVBhaW50TGluZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLl9wYWludExpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lQ2h1bmtzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmdldExhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLnNldExhc3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluUGFuZWwucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5l
bmNsb3NpbmdMaW5lUm93T3JTZWxmKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTGluayk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21V
cGRhdGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVtb3ZlRGVjb3JhdGlvbnNJblJh
bmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5fdXBkYXRlQ2h1bmtzRm9yUmFuZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fdXBkYXRlSGlnaGxpZ2h0c0ZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVTZWxl
Y3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLmhhbmRsZVRleHRJbnB1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGFuZGxlS2V5RG93bik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGFuZGxlQ3V0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5vdmVycmlkZVZpZXdw
b3J0Rm9yVGVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5w
cm90b3R5cGUuZ2V0IGhlaWdodCk6CisKIDIwMTItMTItMjcgIEV1Z2VuZSBLbHl1Y2huaWtvdiAg
PGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZS5w
cm9maWxlRW5kKCkgY3Jhc2hlcyBpZiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3Iu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9y
LmpzCmluZGV4IDliNGQ1NGI5MTFhOTQ3ZjdjY2YwODViYzg2OTJjYjU2YjFlNTU0NTkuLmEzYzI4
Y2E2MjBmZmU0NTk0MzFiZWQyNTgwYTM5MTMyZDRjZmNhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcwpAQCAt
NjAsMTEgKzYwLDEwIEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1bmN0aW9u
KHVybCwgZGVsZWdhdGUpCiAgICAgdmFyIHN5bmNTY3JvbGxMaXN0ZW5lciA9IHRoaXMuX3N5bmNT
Y3JvbGwuYmluZCh0aGlzKTsKICAgICB2YXIgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVy
ID0gdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZS5iaW5kKHRoaXMpOwogICAgIHZhciBzeW5j
TGluZUhlaWdodExpc3RlbmVyID0gdGhpcy5fc3luY0xpbmVIZWlnaHQuYmluZCh0aGlzKTsKLSAg
ICB0aGlzLl9tYWluUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwo
dGhpcy5fZGVsZWdhdGUsIHRoaXMuX3RleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIs
IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcik7CisgICAgdGhpcy5fbWFpblBhbmVsID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKHRoaXMuX2RlbGVnYXRlLCB0aGlz
Ll90ZXh0TW9kZWwsIHVybCwgc3luY1Njcm9sbExpc3RlbmVyLCBzeW5jRGVjb3JhdGlvbnNGb3JM
aW5lTGlzdGVuZXIsIHRoaXMuX2hhbmRsZUZvY3VzZWQuYmluZCh0aGlzKSk7CiAgICAgdGhpcy5f
Z3V0dGVyUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbCh0aGlz
Ll90ZXh0TW9kZWwsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciwgc3luY0xpbmVIZWln
aHRMaXN0ZW5lcik7CiAKICAgICB0aGlzLl9tYWluUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJzY3JvbGwiLCB0aGlzLl9oYW5kbGVTY3JvbGxDaGFuZ2VkLmJpbmQodGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLl9tYWluUGFuZWwuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJmb2N1
cyIsIHRoaXMuX2hhbmRsZUZvY3VzZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgdGhpcy5f
Z3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9v
bk1vdXNlRG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKIApAQCAtMjYzLDEwICsyNjIsMTAgQEAgV2Vi
SW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5f
bWFpblBhbmVsLmNsZWFyTGluZUhpZ2hsaWdodCgpOwogICAgIH0sCiAKLSAgICBfZnJlZUNhY2hl
ZEVsZW1lbnRzOiBmdW5jdGlvbigpCisgICAgZnJlZUNhY2hlZEVsZW1lbnRzOiBmdW5jdGlvbigp
CiAgICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwuX2ZyZWVDYWNoZWRFbGVtZW50cygpOwot
ICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC5fZnJlZUNhY2hlZEVsZW1lbnRzKCk7CisgICAgICAg
IHRoaXMuX21haW5QYW5lbC5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICAgICAgdGhpcy5fZ3V0
dGVyUGFuZWwuZnJlZUNhY2hlZEVsZW1lbnRzKCk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtNDEy
LDcgKzQxMSw3IEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7
CiAKICAgICBfaGFuZGxlVGV4dElucHV0OiBmdW5jdGlvbihlKQogICAgIHsKLSAgICAgICAgdGhp
cy5fbWFpblBhbmVsLl90ZXh0SW5wdXREYXRhID0gZS5kYXRhOworICAgICAgICB0aGlzLl9tYWlu
UGFuZWwuaGFuZGxlVGV4dElucHV0KGUpOwogICAgIH0sCiAKICAgICBfaGFuZGxlS2V5RG93bjog
ZnVuY3Rpb24oZSkKQEAgLTQyOSwxMiArNDI4LDEyIEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBlLmNvbnN1bWUodHJ1ZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLl9rZXlE
b3duQ29kZSA9IGUua2V5Q29kZTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmhhbmRsZUtleURv
d24oZSk7CiAgICAgfSwKIAogICAgIF9oYW5kbGVDdXQ6IGZ1bmN0aW9uKGUpCiAgICAgewotICAg
ICAgICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25Db2RlID0gV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQuS2V5cy5EZWxldGUuY29kZTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLmhhbmRs
ZUN1dChlKTsKICAgICB9LAogCiAgICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKQEAg
LTQ0Nyw3ICs0NDYsNyBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICBpZiAodGFyZ2V0KQogICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUucG9w
dWxhdGVMaW5lR3V0dGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRhcmdldC5saW5lTnVtYmVy
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9tYWluUGFuZWwu
X2VuY2xvc2luZ0xpbmVSb3dPclNlbGYoZXZlbnQudGFyZ2V0KTsKKyAgICAgICAgICAgIHRhcmdl
dCA9IHRoaXMuX21haW5QYW5lbC5lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGV2ZW50LnRhcmdldCk7
CiAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5wb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUo
Y29udGV4dE1lbnUsIHRhcmdldCAmJiB0YXJnZXQubGluZU51bWJlcik7CiAgICAgICAgIH0KICAg
ICAgICAgY29udGV4dE1lbnUuc2hvdygpOwpAQCAtNDU1LDggKzQ1NCw4IEBAIFdlYkluc3BlY3Rv
ci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICBfaGFuZGxlU2Nyb2xsQ2hh
bmdlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0
aGlzLl9tYWluUGFuZWwuX3Njcm9sbFRvcCgpOwotICAgICAgICB2YXIgZmlyc3RWaXNpYmxlTGlu
ZU51bWJlciA9IHRoaXMuX21haW5QYW5lbC5fZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXIodmlz
aWJsZUZyb20pOworICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLl9tYWluUGFuZWwuc2Ny
b2xsVG9wKCk7CisgICAgICAgIHZhciBmaXJzdFZpc2libGVMaW5lTnVtYmVyID0gdGhpcy5fbWFp
blBhbmVsLmZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKHZpc2libGVGcm9tKTsKICAgICAgICAg
dGhpcy5fZGVsZWdhdGUuc2Nyb2xsQ2hhbmdlZChmaXJzdFZpc2libGVMaW5lTnVtYmVyKTsKICAg
ICB9LAogCkBAIC00NzMsNyArNDcyLDcgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBzZWxlY3Rpb246IGZ1bmN0aW9uKHRleHRSYW5n
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuX2dldFNlbGVjdGlvbigp
OworICAgICAgICByZXR1cm4gdGhpcy5fbWFpblBhbmVsLmdldFNlbGVjdGlvbigpOwogICAgIH0s
CiAKICAgICAvKioKQEAgLTQ4MSw3ICs0ODAsNyBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAqLwogICAgIGxhc3RTZWxlY3Rpb246IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuX2xhc3RTZWxlY3Rpb247
CisgICAgICAgIHJldHVybiB0aGlzLl9tYWluUGFuZWwuZ2V0TGFzdFNlbGVjdGlvbigpOwogICAg
IH0sCiAKICAgICAvKioKQEAgLTQ4OSwxMyArNDg4LDEzIEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0
VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgc2V0U2VsZWN0aW9uOiBmdW5j
dGlvbih0ZXh0UmFuZ2UpCiAgICAgewotICAgICAgICB0aGlzLl9tYWluUGFuZWwuX2xhc3RTZWxl
Y3Rpb24gPSB0ZXh0UmFuZ2U7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC5zZXRMYXN0U2VsZWN0
aW9uKHRleHRSYW5nZSk7CiAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXNBbmNlc3Rvcihkb2N1
bWVudC5hY3RpdmVFbGVtZW50KSkKLSAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC5fcmVzdG9y
ZVNlbGVjdGlvbih0ZXh0UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5fbWFpblBhbmVsLnJlc3Rv
cmVTZWxlY3Rpb24odGV4dFJhbmdlKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmd9IHRleHQgCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQKICAgICAgKi8KICAg
ICBzZXRUZXh0OiBmdW5jdGlvbih0ZXh0KQogICAgIHsKQEAgLTUzNyw4ICs1MzYsOCBAQCBXZWJJ
bnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgCi0g
ICAgICogQHBhcmFtIHtPYmplY3Q/fSB2YWx1ZSAgCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUKKyAgICAgKiBAcGFyYW0ge09iamVjdD99IHZhbHVlCiAgICAgICovCiAgICAgc2V0QXR0cmli
dXRlOiBmdW5jdGlvbihsaW5lLCBuYW1lLCB2YWx1ZSkKICAgICB7CkBAIC01NDcsOCArNTQ2LDgg
QEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgIC8q
KgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG5h
bWUgIAotICAgICAqIEByZXR1cm4ge09iamVjdHxudWxsfSB2YWx1ZSAgCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IG5hbWUKKyAgICAgKiBAcmV0dXJuIHs/T2JqZWN0fSB2YWx1ZQogICAgICAqLwog
ICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24obGluZSwgbmFtZSkKICAgICB7CkBAIC01NjksMjYg
KzU2OCwyNiBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkoKSkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5t
YXJrQmVpbmdFZGl0ZWQodGhpcy5lbGVtZW50LCB0cnVlKTsKIAotICAgICAgICB0aGlzLl9ib3Vu
ZFNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyID0gdGhpcy5fbWFpblBhbmVsLl9oYW5kbGVTZWxlY3Rp
b25DaGFuZ2UuYmluZCh0aGlzLl9tYWluUGFuZWwpOworICAgICAgICB0aGlzLl9ib3VuZFNlbGVj
dGlvbkNoYW5nZUxpc3RlbmVyID0gdGhpcy5fbWFpblBhbmVsLmhhbmRsZVNlbGVjdGlvbkNoYW5n
ZS5iaW5kKHRoaXMuX21haW5QYW5lbCk7CiAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuX2JvdW5kU2VsZWN0aW9uQ2hhbmdlTGlzdGVuZXIs
IGZhbHNlKTsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLl93YXNTaG93bigpOworICAgICAgICB0
aGlzLl9tYWluUGFuZWwud2FzU2hvd24oKTsKICAgICB9LAogCiAgICAgX2hhbmRsZUZvY3VzZWQ6
IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9tYWluUGFuZWwuX2xhc3RTZWxl
Y3Rpb24pCi0gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbih0aGlzLl9tYWluUGFuZWwuX2xh
c3RTZWxlY3Rpb24pOworICAgICAgICBpZiAodGhpcy5fbWFpblBhbmVsLmdldExhc3RTZWxlY3Rp
b24oKSkKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMuX21haW5QYW5lbC5nZXRM
YXN0U2VsZWN0aW9uKCkpOwogICAgIH0sCiAKICAgICB3aWxsSGlkZTogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLl93aWxsSGlkZSgpOworICAgICAgICB0aGlzLl9t
YWluUGFuZWwud2lsbEhpZGUoKTsKICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5fYm91bmRTZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lciwg
ZmFsc2UpOwogICAgICAgICBkZWxldGUgdGhpcy5fYm91bmRTZWxlY3Rpb25DaGFuZ2VMaXN0ZW5l
cjsKIAogICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkoKSkKICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5tYXJrQmVpbmdFZGl0ZWQodGhpcy5lbGVtZW50LCBmYWxzZSk7Ci0gICAgICAgIHRoaXMu
X2ZyZWVDYWNoZWRFbGVtZW50cygpOworICAgICAgICB0aGlzLmZyZWVDYWNoZWRFbGVtZW50cygp
OwogICAgIH0sCiAKICAgICAvKioKQEAgLTYxMyw3ICs2MTIsNyBAQCBXZWJJbnNwZWN0b3IuRGVm
YXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgIGhpZ2hsaWdodEV4cHJlc3Npb246IGZ1
bmN0aW9uKGVsZW1lbnQsIHNraXBDbGFzc2VzLCBza2lwVG9rZW5zKQogICAgIHsKICAgICAgICAg
Ly8gQ29sbGVjdCB0b2tlbnMgYmVsb25naW5nIHRvIGV2YWx1YXRlZCBleHByZXNzaW9uLgotICAg
ICAgICB2YXIgdG9rZW5zID0gWyBlbGVtZW50IF07CisgICAgICAgIHZhciB0b2tlbnMgPSBbZWxl
bWVudF07CiAgICAgICAgIHZhciB0b2tlbiA9IGVsZW1lbnQucHJldmlvdXNTaWJsaW5nOwogICAg
ICAgICB3aGlsZSAodG9rZW4gJiYgKHNraXBDbGFzc2VzW3Rva2VuLmNsYXNzTmFtZV0gfHwgc2tp
cFRva2Vuc1t0b2tlbi50ZXh0Q29udGVudC50cmltKCldKSkgewogICAgICAgICAgICAgdG9rZW5z
LnB1c2godG9rZW4pOwpAQCAtNjU5LDkgKzY1OCw3IEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgb3ZlcnJpZGVWaWV3cG9ydEZvclRl
c3Q6IGZ1bmN0aW9uKHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBjaHVua1NpemUpCiAgICAgewot
ICAgICAgICB0aGlzLl9tYWluUGFuZWwuX3Njcm9sbFRvcE92ZXJyaWRlRm9yVGVzdCA9IHNjcm9s
bFRvcDsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLl9jbGllbnRIZWlnaHRPdmVycmlkZUZvclRl
c3QgPSBjbGllbnRIZWlnaHQ7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5fZGVmYXVsdENodW5r
U2l6ZSA9IGNodW5rU2l6ZTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLm92ZXJyaWRlVmlld3Bv
cnRGb3JUZXN0KHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBjaHVua1NpemUpOwogICAgIH0sCiAK
ICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZQpAQCAtNzMxLDcgKzcy
OCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgY2h1bmsucmVtb3ZlRGVjb3JhdGlvbihkZWNvcmF0aW9uKTsKICAgICB9LAogCi0g
ICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCisgICAgYnVpbGRDaHVua3M6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAKQEAgLTczOSw0MSArNzM2
LDQzIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsK
IAogICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzID0gW107CiAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENodW5r
U2l6ZSkgewotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsoaSwg
aSArIHRoaXMuX2RlZmF1bHRDaHVua1NpemUpOworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5jcmVhdGVOZXdDaHVuayhpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CiAgICAgICAg
ICAgICB0aGlzLl90ZXh0Q2h1bmtzLnB1c2goY2h1bmspOwogICAgICAgICAgICAgdGhpcy5fY29u
dGFpbmVyLmFwcGVuZENoaWxkKGNodW5rLmVsZW1lbnQpOwogICAgICAgICB9CiAKLSAgICAgICAg
dGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICB0aGlzLnJlcGFpbnRBbGwoKTsKIAogICAgICAg
ICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFt
IHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICovCiAg
ICAgbWFrZUxpbmVBQ2h1bms6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2
YXIgY2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcik7Cisg
ICAgICAgIHZhciBjaHVua051bWJlciA9IHRoaXMuY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1i
ZXIpOwogICAgICAgICB2YXIgb2xkQ2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVtYmVy
XTsKIAogICAgICAgICBpZiAoIW9sZENodW5rKSB7CiAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJObyBjaHVuayBmb3IgbGluZSBudW1iZXI6ICIgKyBsaW5lTnVtYmVyKTsKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKG9sZENodW5rLmxpbmVzQ291bnQgPT09IDEpCiAgICAgICAgICAgICByZXR1cm4gb2xkQ2h1
bms7CiAKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NwbGl0Q2h1bmtPbkFMaW5lKGxpbmVOdW1iZXIs
IGNodW5rTnVtYmVyLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRDaHVua09uQUxp
bmUobGluZU51bWJlciwgY2h1bmtOdW1iZXIsIHRydWUpOwogICAgIH0sCiAKICAgICAvKioKICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBj
aHVua051bWJlcgogICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNyZWF0ZVN1ZmZpeENodW5rCisg
ICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAqLwotICAgIF9zcGxpdENodW5rT25BTGluZTog
ZnVuY3Rpb24obGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQorICAg
IHNwbGl0Q2h1bmtPbkFMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjaHVua051bWJlciwgY3Jl
YXRlU3VmZml4Q2h1bmspCiAgICAgewogICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOwog
CkBAIC03ODUsMjAgKzc4NCwyMCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gUHJlZml4IGNodW5rLgogICAgICAgICBpZiAo
bGluZU51bWJlciA+IG9sZENodW5rLnN0YXJ0TGluZSkgewotICAgICAgICAgICAgdmFyIHByZWZp
eENodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsob2xkQ2h1bmsuc3RhcnRMaW5lLCBsaW5lTnVt
YmVyKTsKKyAgICAgICAgICAgIHZhciBwcmVmaXhDaHVuayA9IHRoaXMuY3JlYXRlTmV3Q2h1bmso
b2xkQ2h1bmsuc3RhcnRMaW5lLCBsaW5lTnVtYmVyKTsKICAgICAgICAgICAgIHRoaXMuX3RleHRD
aHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIHByZWZpeENodW5rKTsKICAgICAgICAgICAg
IHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUocHJlZml4Q2h1bmsuZWxlbWVudCwgb2xkQ2h1
bmsuZWxlbWVudCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBMaW5lIGNodW5rLgogICAgICAg
ICB2YXIgZW5kTGluZSA9IGNyZWF0ZVN1ZmZpeENodW5rID8gbGluZU51bWJlciArIDEgOiBvbGRD
aHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50OwotICAgICAgICB2YXIgbGluZUNo
dW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciwgZW5kTGluZSk7CisgICAgICAg
IHZhciBsaW5lQ2h1bmsgPSB0aGlzLmNyZWF0ZU5ld0NodW5rKGxpbmVOdW1iZXIsIGVuZExpbmUp
OwogICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCsrLCAwLCBsaW5l
Q2h1bmspOwogICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0QmVmb3JlKGxpbmVDaHVuay5l
bGVtZW50LCBvbGRDaHVuay5lbGVtZW50KTsKIAogICAgICAgICAvLyBTdWZmaXggY2h1bmsuCiAg
ICAgICAgIGlmIChvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50ID4gZW5k
TGluZSkgewotICAgICAgICAgICAgdmFyIHN1ZmZpeENodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1
bmsoZW5kTGluZSwgb2xkQ2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCk7Cisg
ICAgICAgICAgICB2YXIgc3VmZml4Q2h1bmsgPSB0aGlzLmNyZWF0ZU5ld0NodW5rKGVuZExpbmUs
IG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQpOwogICAgICAgICAgICAg
dGhpcy5fdGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIHN1ZmZpeENodW5rKTsKICAg
ICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUoc3VmZml4Q2h1bmsuZWxlbWVu
dCwgb2xkQ2h1bmsuZWxlbWVudCk7CiAgICAgICAgIH0KQEAgLTgyMCw3ICs4MTksMTIgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gbGluZUNodW5rOwogICAgIH0sCiAKLSAgICBfc2Nyb2xsOiBmdW5jdGlvbigpCisgICAg
Y3JlYXRlTmV3Q2h1bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICB7CisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiY3JlYXRlTmV3Q2h1bmsoKSBpcyBub3QgaW1wbGVtZW50ZWQi
KTsKKyAgICB9LAorCisgICAgc2Nyb2xsOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlz
Ll9zY2hlZHVsZVJlcGFpbnRBbGwoKTsKICAgICAgICAgaWYgKHRoaXMuX3N5bmNTY3JvbGxMaXN0
ZW5lcikKQEAgLTgzMSw3ICs4MzUsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBpZiAodGhpcy5fcmVwYWludEFsbFRp
bWVyKQogICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlcGFpbnRBbGxUaW1lcik7Ci0g
ICAgICAgIHRoaXMuX3JlcGFpbnRBbGxUaW1lciA9IHNldFRpbWVvdXQodGhpcy5fcmVwYWludEFs
bC5iaW5kKHRoaXMpLCA1MCk7CisgICAgICAgIHRoaXMuX3JlcGFpbnRBbGxUaW1lciA9IHNldFRp
bWVvdXQodGhpcy5yZXBhaW50QWxsLmJpbmQodGhpcyksIDUwKTsKICAgICB9LAogCiAgICAgYmVn
aW5VcGRhdGVzOiBmdW5jdGlvbigpCkBAIC04NDMsNyArODQ3LDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdGhpcy5f
cGFpbnRDb2FsZXNjaW5nTGV2ZWwtLTsKICAgICAgICAgaWYgKCF0aGlzLl9wYWludENvYWxlc2Np
bmdMZXZlbCkKLSAgICAgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKKyAgICAgICAgICAgIHRo
aXMucmVwYWludEFsbCgpOwogICAgIH0sCiAKICAgICBiZWdpbkRvbVVwZGF0ZXM6IGZ1bmN0aW9u
KCkKQEAgLTg1OCw4ICs4NjIsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51
bWJlcgorICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgKi8KLSAgICBfY2h1bmtOdW1iZXJG
b3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIGNodW5rTnVtYmVyRm9yTGluZTogZnVu
Y3Rpb24obGluZU51bWJlcikKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVMaW5lTnVt
YmVycyh2YWx1ZSwgY2h1bmspCiAgICAgICAgIHsKQEAgLTg3MSwxNCArODc2LDE2IEBAIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgog
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7T2JqZWN0
fQogICAgICAqLwogICAgIGNodW5rRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGlu
ZShsaW5lTnVtYmVyKV07CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuY2h1
bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpXTsKICAgICB9LAogCiAgICAgLyoqCiAgICAgICog
QHBhcmFtIHtudW1iZXJ9IHZpc2libGVGcm9tCisgICAgICogQHJldHVybiB7bnVtYmVyfQogICAg
ICAqLwogICAgIF9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1iZXI6IGZ1bmN0aW9uKHZpc2libGVG
cm9tKQogICAgIHsKQEAgLTg5Myw4ICs5MDAsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9
IHZpc2libGVGcm9tCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IHZpc2libGVUbworICAgICAqIEBy
ZXR1cm4ge3tzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcn19CiAgICAgICovCi0gICAgX2ZpbmRW
aXNpYmxlQ2h1bmtzOiBmdW5jdGlvbih2aXNpYmxlRnJvbSwgdmlzaWJsZVRvKQorICAgIGZpbmRW
aXNpYmxlQ2h1bmtzOiBmdW5jdGlvbih2aXNpYmxlRnJvbSwgdmlzaWJsZVRvKQogICAgIHsKICAg
ICAgICAgdmFyIGZyb20gPSB0aGlzLl9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1iZXIodmlzaWJs
ZUZyb20pOwogICAgICAgICBmb3IgKHZhciB0byA9IGZyb20gKyAxOyB0byA8IHRoaXMuX3RleHRD
aHVua3MubGVuZ3RoOyArK3RvKSB7CkBAIC05MDYsOCArOTE0LDkgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBh
cmFtIHtudW1iZXJ9IHZpc2libGVGcm9tCisgICAgICogQHJldHVybiB7bnVtYmVyfQogICAgICAq
LwotICAgIF9maW5kRmlyc3RWaXNpYmxlTGluZU51bWJlcjogZnVuY3Rpb24odmlzaWJsZUZyb20p
CisgICAgZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXI6IGZ1bmN0aW9uKHZpc2libGVGcm9tKQog
ICAgIHsKICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9maW5kRmly
c3RWaXNpYmxlQ2h1bmtOdW1iZXIodmlzaWJsZUZyb20pXTsKICAgICAgICAgaWYgKCFjaHVuay5l
eHBhbmRlZCgpKQpAQCAtOTI3LDM3ICs5MzYsMzcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JD
aHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gbGluZU51bWJlcnNbaW5z
ZXJ0QmVmb3JlIC0gMV07CiAgICAgfSwKIAotICAgIF9yZXBhaW50QWxsOiBmdW5jdGlvbigpCisg
ICAgcmVwYWludEFsbDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX3Jl
cGFpbnRBbGxUaW1lcjsKIAogICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5f
c2Nyb2xsVG9wKCk7Ci0gICAgICAgIHZhciB2aXNpYmxlVG8gPSB2aXNpYmxlRnJvbSArIHRoaXMu
X2NsaWVudEhlaWdodCgpOworICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLnNjcm9sbFRv
cCgpOworICAgICAgICB2YXIgdmlzaWJsZVRvID0gdmlzaWJsZUZyb20gKyB0aGlzLmNsaWVudEhl
aWdodCgpOwogCiAgICAgICAgIGlmICh2aXNpYmxlVG8pIHsKLSAgICAgICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLl9maW5kVmlzaWJsZUNodW5rcyh2aXNpYmxlRnJvbSwgdmlzaWJsZVRvKTsKLSAg
ICAgICAgICAgIHRoaXMuX2V4cGFuZENodW5rcyhyZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQpOwor
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZmluZFZpc2libGVDaHVua3ModmlzaWJsZUZy
b20sIHZpc2libGVUbyk7CisgICAgICAgICAgICB0aGlzLmV4cGFuZENodW5rcyhyZXN1bHQuc3Rh
cnQsIHJlc3VsdC5lbmQpOwogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9zY3JvbGxUb3A6IGZ1
bmN0aW9uKCkKKyAgICBzY3JvbGxUb3A6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB0eXBlb2YgdGhpcy5fc2Nyb2xsVG9wT3ZlcnJpZGVGb3JUZXN0ID09PSAibnVtYmVyIiA/IHRo
aXMuX3Njcm9sbFRvcE92ZXJyaWRlRm9yVGVzdCA6IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7IAor
ICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3Njcm9sbFRvcE92ZXJyaWRlRm9yVGVzdCA9PT0g
Im51bWJlciIgPyB0aGlzLl9zY3JvbGxUb3BPdmVycmlkZUZvclRlc3QgOiB0aGlzLmVsZW1lbnQu
c2Nyb2xsVG9wOwogICAgIH0sCiAKLSAgICBfY2xpZW50SGVpZ2h0OiBmdW5jdGlvbigpCisgICAg
Y2xpZW50SGVpZ2h0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdHlwZW9mIHRo
aXMuX2NsaWVudEhlaWdodE92ZXJyaWRlRm9yVGVzdCA9PT0gIm51bWJlciIgPyB0aGlzLl9jbGll
bnRIZWlnaHRPdmVycmlkZUZvclRlc3QgOiB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0OyAKKyAg
ICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9jbGllbnRIZWlnaHRPdmVycmlkZUZvclRlc3QgPT09
ICJudW1iZXIiID8gdGhpcy5fY2xpZW50SGVpZ2h0T3ZlcnJpZGVGb3JUZXN0IDogdGhpcy5lbGVt
ZW50LmNsaWVudEhlaWdodDsKICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IGZyb21JbmRleAogICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4CiAgICAgICovCi0g
ICAgX2V4cGFuZENodW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0b0luZGV4KQorICAgIGV4cGFu
ZENodW5rczogZnVuY3Rpb24oZnJvbUluZGV4LCB0b0luZGV4KQogICAgIHsKICAgICAgICAgLy8g
Rmlyc3QgY29sbGFwc2UgY2h1bmtzIHRvIGNvbGxlY3QgdGhlIERPTSBlbGVtZW50cyBpbnRvIGEg
Y2FjaGUgdG8gcmV1c2UgdGhlbSBsYXRlci4KICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
cm9tSW5kZXg7ICsraSkKQEAgLTk3MSw4ICs5ODAsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtFbGVt
ZW50fSBmaXJzdEVsZW1lbnQKICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBsYXN0RWxlbWVudAor
ICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgKi8KLSAgICBfdG90YWxIZWlnaHQ6IGZ1bmN0
aW9uKGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQpCisgICAgdG90YWxIZWlnaHQ6IGZ1bmN0aW9u
KGZpcnN0RWxlbWVudCwgbGFzdEVsZW1lbnQpCiAgICAgewogICAgICAgICBsYXN0RWxlbWVudCA9
IChsYXN0RWxlbWVudCB8fCBmaXJzdEVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZzsKICAgICAg
ICAgaWYgKGxhc3RFbGVtZW50KQpAQCAtOTkyLDcgKzEwMDIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICByZXNpemU6IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKKyAgICAgICAgdGhpcy5yZXBh
aW50QWxsKCk7CiAgICAgfQogfQogCkBAIC0xMDAwLDYgKzEwMTAsOCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgKiBAY29uc3RydWN0b3IKICAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbH0KICAqIEBwYXJh
bSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNb2RlbH0gdGV4dE1vZGVsCisgKiBAcGFyYW0ge2Z1
bmN0aW9uKG51bWJlcil9IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcgorICogQHBhcmFt
IHtmdW5jdGlvbihFbGVtZW50KX0gc3luY0xpbmVIZWlnaHRMaXN0ZW5lcgogICovCiBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsLCBzeW5jRGVj
b3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIsIHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIpCiB7CkBAIC0x
MDE1LDE1ICsxMDI3LDE1IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwgPSBm
dW5jdGlvbih0ZXh0TW9kZWwsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMCiAgICAgdGhpcy5fY29u
dGFpbmVyLmNsYXNzTmFtZSA9ICJpbm5lci1jb250YWluZXIiOwogICAgIHRoaXMuZWxlbWVudC5h
cHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpOwogCi0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAg
dGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuc2Nyb2xsLmJpbmQo
dGhpcyksIGZhbHNlKTsKIAotICAgIHRoaXMuX2ZyZWVDYWNoZWRFbGVtZW50cygpOwotICAgIHRo
aXMuX2J1aWxkQ2h1bmtzKCk7CisgICAgdGhpcy5mcmVlQ2FjaGVkRWxlbWVudHMoKTsKKyAgICB0
aGlzLmJ1aWxkQ2h1bmtzKCk7CiAgICAgdGhpcy5fZGVjb3JhdGlvbnMgPSB7fTsKIH0KIAogV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUgPSB7Ci0gICAgX2ZyZWVD
YWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQorICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgdGhpcy5fY2FjaGVkUm93cyA9IFtdOwogICAgIH0sCkBAIC0x
MDMxLDggKzEwNDMsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCiAgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckd1dHRlckNodW5rfQogICAgICAqLwotICAgIF9jcmVhdGVOZXdDaHVuazogZnVu
Y3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQorICAgIGNyZWF0ZU5ld0NodW5rOiBmdW5jdGlvbihz
dGFydExpbmUsIGVuZExpbmUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsodGhpcywgc3RhcnRMaW5lLCBlbmRMaW5lKTsKICAgICB9
LApAQCAtMTA0OCw3ICsxMDYxLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBsaW5lc0RpZmYgPSBuZXdSYW5nZS5saW5lc0Nv
dW50IC0gb2xkUmFuZ2UubGluZXNDb3VudDsKICAgICAgICAgaWYgKGxpbmVzRGlmZikgewogICAg
ICAgICAgICAgLy8gUmVtb3ZlIG9sZCBjaHVua3MgKGlmIG5lZWRlZCkuCi0gICAgICAgICAgICBm
b3IgKHZhciBjaHVua051bWJlciA9IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsgY2h1bmtO
dW1iZXIgPj0gMCA7IC0tY2h1bmtOdW1iZXIpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGNodW5r
TnVtYmVyID0gdGhpcy5fdGV4dENodW5rcy5sZW5ndGggLSAxOyBjaHVua051bWJlciA+PSAwOyAt
LWNodW5rTnVtYmVyKSB7CiAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENo
dW5rc1tjaHVua051bWJlcl07CiAgICAgICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSAr
IGNodW5rLmxpbmVzQ291bnQgPD0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA2NSw3ICsxMDc4LDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSB0b3RhbExpbmVzOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVz
Q291bnQ7IGkgKz0gdGhpcy5fZGVmYXVsdENodW5rU2l6ZSkgewotICAgICAgICAgICAgICAgIHZh
ciBjaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKGksIGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtT
aXplKTsKKyAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNyZWF0ZU5ld0NodW5rKGks
IGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKTsKICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
Q2h1bmtzLnB1c2goY2h1bmspOwogICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBl
bmRDaGlsZChjaHVuay5lbGVtZW50KTsKICAgICAgICAgICAgIH0KQEAgLTEwOTQsMTAgKzExMDcs
MTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB0aGlzLl9yZXBh
aW50QWxsKCk7CisgICAgICAgICAgICB0aGlzLnJlcGFpbnRBbGwoKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8vIERlY29yYXRpb25zIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCwgc28g
d2UgbWF5IGhhdmUgdG8gc3luYyB0aG9zZSBsaW5lcy4KLSAgICAgICAgICAgIHZhciBjaHVua051
bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShuZXdSYW5nZS5zdGFydExpbmUpOworICAg
ICAgICAgICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5jaHVua051bWJlckZvckxpbmUobmV3UmFu
Z2Uuc3RhcnRMaW5lKTsKICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3Nb
Y2h1bmtOdW1iZXJdOwogICAgICAgICAgICAgd2hpbGUgKGNodW5rICYmIGNodW5rLnN0YXJ0TGlu
ZSA8PSBuZXdSYW5nZS5lbmRMaW5lKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNodW5rLmxpbmVz
Q291bnQgPT09IDEpCkBAIC0xMTU1LDYgKzExNjgsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckd1dHRlclBhbmVsLnByb3RvdHlwZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0b3IKKyAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbH0gdGV4dEVkaXRvcgorICog
QHBhcmFtIHtudW1iZXJ9IHN0YXJ0TGluZQorICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKICAq
LwogV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuayA9IGZ1bmN0aW9uKHRleHRFZGl0
b3IsIHN0YXJ0TGluZSwgZW5kTGluZSkKIHsKQEAgLTEyODcsOCArMTMwMyw4IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlID0gewogICAgIGdldCBoZWlnaHQo
KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dzKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3RleHRFZGl0b3IuX3RvdGFsSGVpZ2h0KHRoaXMuZWxlbWVudCk7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl90ZXh0RWRpdG9yLl90b3RhbEhlaWdodCh0aGlzLl9leHBhbmRl
ZExpbmVSb3dzWzBdLCB0aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMuX2V4cGFuZGVkTGluZVJv
d3MubGVuZ3RoIC0gMV0pOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRFZGl0b3IudG90
YWxIZWlnaHQodGhpcy5lbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRFZGl0b3Iu
dG90YWxIZWlnaHQodGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXSwgdGhpcy5fZXhwYW5kZWRMaW5l
Um93c1t0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aCAtIDFdKTsKICAgICB9LAogCiAgICAg
LyoqCkBAIC0xMzE5LDggKzEzMzUsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJD
aHVuay5wcm90b3R5cGUgPSB7CiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yRGVs
ZWdhdGV9IGRlbGVnYXRlCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWx9
IHRleHRNb2RlbAogICogQHBhcmFtIHs/c3RyaW5nfSB1cmwKKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
KX0gc3luY1Njcm9sbExpc3RlbmVyCisgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcil9IHN5bmNE
ZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBjb250YWlu
ZXJGb2N1c2VkTGlzdGVuZXIKICAqLwotV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwg
PSBmdW5jdGlvbihkZWxlZ2F0ZSwgdGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwg
c3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKQorV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgdGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxM
aXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyLCBjb250YWluZXJGb2N1c2Vk
TGlzdGVuZXIpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwuY2Fs
bCh0aGlzLCB0ZXh0TW9kZWwpOwogCkBAIC0xMzQxLDIxICsxMzYwLDI0IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpblBhbmVsID0gZnVuY3Rpb24oZGVsZWdhdGUsIHRleHRNb2RlbCwgdXJs
LCBzeW5jU2Nyb2xsCiAgICAgdGhpcy5fY29udGFpbmVyLnRhYkluZGV4ID0gMDsKICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTsKIAotICAgIHRoaXMuZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgZmFs
c2UpOworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLnNj
cm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImZvY3VzIiwgdGhpcy5faGFuZGxlRWxlbWVudEZvY3VzLmJpbmQodGhpcyksIGZhbHNlKTsK
IAotICAgIHRoaXMuX2ZyZWVDYWNoZWRFbGVtZW50cygpOwotICAgIHRoaXMuX2J1aWxkQ2h1bmtz
KCk7CisgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgY29udGFp
bmVyRm9jdXNlZExpc3RlbmVyLCBmYWxzZSk7CisKKworICAgIHRoaXMuZnJlZUNhY2hlZEVsZW1l
bnRzKCk7CisgICAgdGhpcy5idWlsZENodW5rcygpOwogfQogCiBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7Ci0gICAgX3dhc1Nob3duOiBmdW5jdGlvbigpCisg
ICAgd2FzU2hvd246IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2lzU2hvd2luZyA9
IHRydWU7CiAgICAgICAgIHRoaXMuX2F0dGFjaE11dGF0aW9uT2JzZXJ2ZXIoKTsKICAgICB9LAog
Ci0gICAgX3dpbGxIaWRlOiBmdW5jdGlvbigpCisgICAgd2lsbEhpZGU6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIHRoaXMuX2RldGFjaE11dGF0aW9uT2JzZXJ2ZXIoKTsKICAgICAgICAgdGhp
cy5faXNTaG93aW5nID0gZmFsc2U7CkBAIC0xNDk3LDcgKzE1MTksNyBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmV2ZWFsTGlu
ZShsaW5lTnVtYmVyKTsKIAogICAgICAgICBpZiAoIXRoaXMuX3JlYWRPbmx5KQotICAgICAgICAg
ICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihXZWJJbnNwZWN0b3IuVGV4dFJhbmdlLmNyZWF0ZUZy
b21Mb2NhdGlvbihsaW5lTnVtYmVyLCAwKSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5yZXN0
b3JlU2VsZWN0aW9uKFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UuY3JlYXRlRnJvbUxvY2F0aW9uKGxp
bmVOdW1iZXIsIDApLCBmYWxzZSk7CiAKICAgICAgICAgdGhpcy5hZGREZWNvcmF0aW9uKGxpbmVO
dW1iZXIsICJ3ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSIpOwogICAgIH0sCkBAIC0xNTEwLDcgKzE1
MzIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICB9LAogCi0gICAgX2ZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQor
ICAgIGZyZWVDYWNoZWRFbGVtZW50czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5f
Y2FjaGVkU3BhbnMgPSBbXTsKICAgICAgICAgdGhpcy5fY2FjaGVkVGV4dE5vZGVzID0gW107CkBA
IC0xNTE5LDYgKzE1NDEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90
b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlZG8KKyAgICAg
KiBAcmV0dXJuIHtib29sZWFufQogICAgICAqLwogICAgIGhhbmRsZVVuZG9SZWRvOiBmdW5jdGlv
bihyZWRvKQogICAgIHsKQEAgLTE1MzMsMjAgKzE1NTYsMjEgQEAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIC8vIFJlc3RvcmUgbG9jYXRp
b24gcG9zdC1yZXBhaW50LgogICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICB0aGlzLl9y
ZXN0b3JlU2VsZWN0aW9uKHJhbmdlLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXMucmVzdG9yZVNl
bGVjdGlvbihyYW5nZSwgdHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIAog
ICAgIC8qKgogICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hpZnRLZXkKKyAgICAgKiBAcmV0dXJu
IHtib29sZWFufQogICAgICAqLwogICAgIGhhbmRsZVRhYktleVByZXNzOiBmdW5jdGlvbihzaGlm
dEtleSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlv
bigpOworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKCFzZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1Njgs
NyArMTU5Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CiAgICAgICAgIGlmIChyYW5nZVdhc0VtcHR5
KQogICAgICAgICAgICAgbmV3UmFuZ2Uuc3RhcnRDb2x1bW4gPSBuZXdSYW5nZS5lbmRDb2x1bW47
Ci0gICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24obmV3UmFuZ2UsIHRydWUpOworICAgICAg
ICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24obmV3UmFuZ2UsIHRydWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9LAogCkBAIC0xNTc3LDcgKzE2MDEsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5f
Z2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7
CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2
MTQsNyArMTYzOCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIG5ld1JhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmVkaXRSYW5nZShy
YW5nZSwgbGluZUJyZWFrICsgaW5kZW50KTsKIAogICAgICAgICB0aGlzLmVuZERvbVVwZGF0ZXMo
KTsKLSAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihuZXdSYW5nZS5jb2xsYXBzZVRvRW5k
KCksIHRydWUpOworICAgICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb24obmV3UmFuZ2UuY29sbGFw
c2VUb0VuZCgpLCB0cnVlKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LApAQCAtMTYy
MywxMiArMTY0NywxMyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKICAgICAgKiBAcGFyYW0g
e251bWJlcn0gY2h1bmtOdW1iZXIKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjcmVhdGVTdWZm
aXhDaHVuaworICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgKi8KLSAgICBfc3BsaXRDaHVu
a09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVTdWZmaXhD
aHVuaykKKyAgICBzcGxpdENodW5rT25BTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgY2h1bmtO
dW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQogICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICB2YXIgY2h1bmsgPSBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3NwbGl0Q2h1bmtPbkFMaW5lLmNhbGwo
dGhpcywgbGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKTsKLSAgICAg
ICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgICAgICB2YXIgc2VsZWN0
aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIGNodW5rID0gV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNwbGl0Q2h1bmtPbkFMaW5lLmNh
bGwodGhpcywgbGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKTsKKyAg
ICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgICAgIHJldHVybiBj
aHVuazsKICAgICB9LAogCkBAIC0xNjQ2LDE5ICsxNjcxLDIwIEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2F0dGFjaE11
dGF0aW9uT2JzZXJ2ZXIoKTsKICAgICB9LAogCi0gICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigp
CisgICAgYnVpbGRDaHVua3M6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7ICsraSkKICAgICAgICAgICAgIHRo
aXMuX3RleHRNb2RlbC5yZW1vdmVBdHRyaWJ1dGUoaSwgImhpZ2hsaWdodCIpOwogCi0gICAgICAg
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVu
a3MuY2FsbCh0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlLmJ1aWxkQ2h1bmtzLmNhbGwodGhpcyk7CiAgICAgfSwKIAogICAgIC8qKgog
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKICAgICAgKiBAcGFyYW0ge251bWJlcn0g
ZW5kTGluZQorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5r
fQogICAgICAqLwotICAgIF9jcmVhdGVOZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRM
aW5lKQorICAgIGNyZWF0ZU5ld0NodW5rOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCiAg
ICAgewogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5r
KHRoaXMsIHN0YXJ0TGluZSwgZW5kTGluZSk7CiAgICAgfSwKQEAgLTE2NjcsMjIgKzE2OTMsMjIg
QEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXgKICAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9JbmRl
eAogICAgICAqLwotICAgIF9leHBhbmRDaHVua3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRl
eCkKKyAgICBleHBhbmRDaHVua3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkKICAgICB7
CiAgICAgICAgIHZhciBsYXN0Q2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW3RvSW5kZXggLSAxXTsK
ICAgICAgICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IGxhc3RDaHVuay5zdGFydExpbmUgKyBsYXN0
Q2h1bmsubGluZXNDb3VudDsKIAotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2Vs
ZWN0aW9uKCk7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpOwog
CiAgICAgICAgIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lciA9IHRydWU7CiAgICAgICAgIHRo
aXMuX2hpZ2hsaWdodGVyLmhpZ2hsaWdodChsYXN0VmlzaWJsZUxpbmUpOwogICAgICAgICBkZWxl
dGUgdGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVyOwogCiAgICAgICAgIHRoaXMuX3Jlc3RvcmVQ
YWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCgpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcy5jYWxsKHRoaXMsIGZyb21J
bmRleCwgdG9JbmRleCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZS5leHBhbmRDaHVua3MuY2FsbCh0aGlzLCBmcm9tSW5kZXgsIHRvSW5kZXgp
OwogICAgICAgICB0aGlzLl9hZGp1c3RQYWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSgp
OwogCi0gICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAgICAg
dGhpcy5yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAt
MTcwNyw3ICsxNzMzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghdGhpcy5fc2NoZWR1
bGVkUGFpbnRMaW5lcykgewotICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5lcyA9
IFsgeyBzdGFydExpbmU6IHN0YXJ0TGluZSwgZW5kTGluZTogZW5kTGluZSB9IF07CisgICAgICAg
ICAgICB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzID0gW3sgc3RhcnRMaW5lOiBzdGFydExpbmUs
IGVuZExpbmU6IGVuZExpbmUgfV07CiAgICAgICAgICAgICB0aGlzLl9wYWludFNjaGVkdWxlZExp
bmVzVGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3BhaW50U2NoZWR1bGVkTGluZXMuYmluZCh0aGlz
KSwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMubGVuZ3RoOyArK2kpIHsKQEAgLTE3NzQsMTMgKzE4
MDAsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
ICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUxpbmUgaW5jbHVz
aXZlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvTGluZSBleGNsdXNpdmUKKyAgICAgKiBAcGFy
YW0ge251bWJlcn0gZnJvbUxpbmUKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9MaW5lCiAgICAg
ICogQHBhcmFtIHtib29sZWFuPX0gcmVzdG9yZVNlbGVjdGlvbgogICAgICAqLwogICAgIF9wYWlu
dExpbmVzOiBmdW5jdGlvbihmcm9tTGluZSwgdG9MaW5lLCByZXN0b3JlU2VsZWN0aW9uKQogICAg
IHsKLSAgICAgICAgdGhpcy5fcGFpbnRMaW5lQ2h1bmtzKFsgeyBzdGFydExpbmU6IGZyb21MaW5l
LCBlbmRMaW5lOiB0b0xpbmUgfSBdLCByZXN0b3JlU2VsZWN0aW9uKTsKKyAgICAgICAgdGhpcy5f
cGFpbnRMaW5lQ2h1bmtzKFt7IHN0YXJ0TGluZTogZnJvbUxpbmUsIGVuZExpbmU6IHRvTGluZSB9
XSwgcmVzdG9yZVNlbGVjdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTc5MCw4ICsxODE2
LDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAg
IHsKICAgICAgICAgLy8gRmlyc3QsIHBhaW50IHZpc2libGUgbGluZXMsIHNvIHRoYXQgaW4gY2Fz
ZSBvZiBsb25nIGxpbmVzIHdlIHNob3VsZCBzdGFydCBoaWdobGlnaHRpbmcKICAgICAgICAgLy8g
dGhlIHZpc2libGUgYXJlYSBpbW1lZGlhdGVseSwgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUg
bGluZXMgYWJvdmUgdGhlIHZpc2libGUgYXJlYS4KLSAgICAgICAgdmFyIHZpc2libGVGcm9tID0g
dGhpcy5fc2Nyb2xsVG9wKCk7Ci0gICAgICAgIHZhciBmaXJzdFZpc2libGVMaW5lTnVtYmVyID0g
dGhpcy5fZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXIodmlzaWJsZUZyb20pOworICAgICAgICB2
YXIgdmlzaWJsZUZyb20gPSB0aGlzLnNjcm9sbFRvcCgpOworICAgICAgICB2YXIgZmlyc3RWaXNp
YmxlTGluZU51bWJlciA9IHRoaXMuZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXIodmlzaWJsZUZy
b20pOwogCiAgICAgICAgIHZhciBjaHVuazsKICAgICAgICAgdmFyIHNlbGVjdGlvbjsKQEAgLTE4
MTMsNyArMTgzOSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uICYmICFzZWxlY3Rpb24pCi0gICAg
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAg
ICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpOwogICAgICAgICAg
ICAgICAgIHRoaXMuX3BhaW50TGluZShsaW5lUm93KTsKICAgICAgICAgICAgICAgICBpZiAodGhp
cy5fcGFpbnRMaW5lc09wZXJhdGlvbnNDcmVkaXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3NjaGVkdWxlUGFpbnRMaW5lcyhsaW5lTnVtYmVyICsgMSwgbGluZUNodW5rLmVuZExp
bmUpOwpAQCAtMTgyNCwxMiArMTg1MCwxMiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5Q
YW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnZpc2li
bGVMaW5lUm93cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rp
b24gJiYgIXNlbGVjdGlvbikKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLl9nZXRT
ZWxlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlv
bigpOwogICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGludmlzaWJsZUxpbmVSb3dzW2ldKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKQotICAgICAgICAgICAg
dGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgICAgICAgICAgdGhpcy5yZXN0
b3JlU2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTkxOSw3ICsx
OTQ1LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAqIEBwYXJhbSB7P05vZGU9fSBsYXN0VW5kYW1hZ2VkTGluZVJvdwogICAgICAqIEByZXR1
cm4ge1dlYkluc3BlY3Rvci5UZXh0UmFuZ2V9CiAgICAgICovCi0gICAgX2dldFNlbGVjdGlvbjog
ZnVuY3Rpb24obGFzdFVuZGFtYWdlZExpbmVSb3cpCisgICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlv
bihsYXN0VW5kYW1hZ2VkTGluZVJvdykKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQp
CkBAIC0xOTMyLDEwICsxOTU4LDIzIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
KHN0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbiwgZW5kLmxpbmUsIGVuZC5jb2x1bW4pOwogICAgIH0s
CiAKKyAgICBnZXRMYXN0U2VsZWN0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fbGFzdFNlbGVjdGlvbjsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfSB0ZXh0UmFuZ2UKKyAgICAgKi8KKyAgICBzZXRMYXN0
U2VsZWN0aW9uOiBmdW5jdGlvbih0ZXh0UmFuZ2UpCisgICAgeworICAgICAgICB0aGlzLl9sYXN0
U2VsZWN0aW9uID0gdGV4dFJhbmdlOworICAgIH0sCisKICAgICAvKioKICAgICAgKiBAcGFyYW0g
e2Jvb2xlYW49fSBzY3JvbGxJbnRvVmlldwogICAgICAqLwotICAgIF9yZXN0b3JlU2VsZWN0aW9u
OiBmdW5jdGlvbihyYW5nZSwgc2Nyb2xsSW50b1ZpZXcpCisgICAgcmVzdG9yZVNlbGVjdGlvbjog
ZnVuY3Rpb24ocmFuZ2UsIHNjcm9sbEludG9WaWV3KQogICAgIHsKICAgICAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5NTksNiArMTk5OCw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKiBAcGFyYW0ge05vZGV9
IGNvbnRhaW5lcgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQKICAgICAgKiBAcGFyYW0g
ez9Ob2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKKyAgICAgKiBAcmV0dXJuIHt7bGluZTogbnVt
YmVyLCBjb2x1bW46IG51bWJlcn19CiAgICAgICovCiAgICAgX3NlbGVjdGlvblRvUG9zaXRpb246
IGZ1bmN0aW9uKGNvbnRhaW5lciwgb2Zmc2V0LCBsYXN0VW5kYW1hZ2VkTGluZVJvdykKICAgICB7
CkBAIC0xOTc5LDcgKzIwMTksNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9jb250YWluZXI7CiAg
ICAgICAgICAgICBsaW5lTnVtYmVyID0gMDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHZhciBsaW5lUm93ID0gdGhpcy5fZW5jbG9zaW5nTGluZVJvd09yU2VsZihjb250YWluZXIpOwor
ICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLmVuY2xvc2luZ0xpbmVSb3dPclNlbGYoY29u
dGFpbmVyKTsKICAgICAgICAgICAgIGlmICghbGFzdFVuZGFtYWdlZExpbmVSb3cgfHwgKHR5cGVv
ZiBsaW5lUm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiICYmIGxpbmVSb3cubGluZU51bWJlciA8
PSBsYXN0VW5kYW1hZ2VkTGluZVJvdy5saW5lTnVtYmVyKSkgewogICAgICAgICAgICAgICAgIC8v
IERPTSBpcyBjb25zaXN0ZW50IChvciB3ZSBiZWxvbmcgdG8gdGhlIGZpcnN0IGRhbWFnZWQgcm93
KS0gbG9va3VwIHRoZSByb3cgd2UgYmVsb25nIHRvIGFuZCBzdGFydCB3aXRoIGl0LgogICAgICAg
ICAgICAgICAgIG5vZGUgPSBsaW5lUm93OwpAQCAtMjAzMyw2ICsyMDczLDcgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbgorICAgICAq
IEByZXR1cm4ge3tjb250YWluZXI6IEVsZW1lbnQsIG9mZnNldDogbnVtYmVyfX0KICAgICAgKi8K
ICAgICBfcG9zaXRpb25Ub1NlbGVjdGlvbjogZnVuY3Rpb24obGluZSwgY29sdW1uKQogICAgIHsK
QEAgLTIwNTYsOCArMjA5Nyw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudAorICAg
ICAqIEByZXR1cm4gez9Ob2RlfQogICAgICAqLwotICAgIF9lbmNsb3NpbmdMaW5lUm93T3JTZWxm
OiBmdW5jdGlvbihlbGVtZW50KQorICAgIGVuY2xvc2luZ0xpbmVSb3dPclNlbGY6IGZ1bmN0aW9u
KGVsZW1lbnQpCiAgICAgewogICAgICAgICB2YXIgbGluZVJvdyA9IGVsZW1lbnQuZW5jbG9zaW5n
Tm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtY29udGVudCIpOwogICAgICAgICBpZiAo
bGluZVJvdykKQEAgLTIxMTUsMTEgKzIxNTcsMTIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBj
b250ZW50CiAgICAgICogQHBhcmFtIHtib29sZWFufSBpc0V4dGVybmFsCisgICAgICogQHJldHVy
biB7RWxlbWVudH0KICAgICAgKi8KICAgICBfY3JlYXRlTGluazogZnVuY3Rpb24oY29udGVudCwg
aXNFeHRlcm5hbCkKICAgICB7CiAgICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQuY2hhckF0KDAp
OwotICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0gIlwiIiB8fCAg
IHF1b3RlID09PSAiJyIpKQorICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90
ZSA9PT0gIlwiIiB8fCBxdW90ZSA9PT0gIiciKSkKICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250
ZW50LnN1YnN0cmluZygxLCBjb250ZW50Lmxlbmd0aCAtIDEpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBxdW90ZSA9IG51bGw7CkBAIC0yMjAxLDcgKzIyNDQsNyBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX2NvbGxlY3RE
aXJ0eUxpbmVzOiBmdW5jdGlvbihtdXRhdGlvbiwgdGFyZ2V0KQogICAgIHsKLSAgICAgICAgdmFy
IGxpbmVSb3cgPSB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKHRhcmdldCk7CisgICAgICAg
IHZhciBsaW5lUm93ID0gdGhpcy5lbmNsb3NpbmdMaW5lUm93T3JTZWxmKHRhcmdldCk7CiAgICAg
ICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgIHJldHVybiBudWxsOwogCkBAIC0yMjI3LDgg
KzIyNzAsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkTGluZU51bWJlciA9IGRpcnR5TGluZXMuc3RhcnQg
LSAxOyAvLyBDYW4gYmUgLTEKICAgICAgICAgdmFyIGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlciA9
IGRpcnR5TGluZXMuZW5kICsgMTsgLy8gQ2FuIGJlIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
CiAKLSAgICAgICAgdmFyIGxhc3RVbmRhbWFnZWRMaW5lQ2h1bmsgPSBsYXN0VW5kYW1hZ2VkTGlu
ZU51bWJlciA+PSAwID8gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUo
bGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7Ci0gICAgICAgIHZhciBmaXJzdFVuZGFt
YWdlZExpbmVDaHVuayA9IGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlciAgPCB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudCA/IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5l
KGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlcildIDogbnVsbDsKKyAgICAgICAgdmFyIGxhc3RVbmRh
bWFnZWRMaW5lQ2h1bmsgPSBsYXN0VW5kYW1hZ2VkTGluZU51bWJlciA+PSAwID8gdGhpcy5fdGV4
dENodW5rc1t0aGlzLmNodW5rTnVtYmVyRm9yTGluZShsYXN0VW5kYW1hZ2VkTGluZU51bWJlcild
IDogbnVsbDsKKyAgICAgICAgdmFyIGZpcnN0VW5kYW1hZ2VkTGluZUNodW5rID0gZmlyc3RVbmRh
bWFnZWRMaW5lTnVtYmVyIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgPyB0aGlzLl90ZXh0
Q2h1bmtzW3RoaXMuY2h1bmtOdW1iZXJGb3JMaW5lKGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlcild
IDogbnVsbDsKIAogICAgICAgICB2YXIgY29sbGVjdExpbmVzRnJvbU5vZGUgPSBsYXN0VW5kYW1h
Z2VkTGluZUNodW5rID8gbGFzdFVuZGFtYWdlZExpbmVDaHVuay5saW5lUm93Q29udGFpbmluZ0xp
bmUobGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpIDogbnVsbDsKICAgICAgICAgdmFyIGNvbGxlY3RM
aW5lc1RvTm9kZSA9IGZpcnN0VW5kYW1hZ2VkTGluZUNodW5rID8gZmlyc3RVbmRhbWFnZWRMaW5l
Q2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlcikgOiBu
dWxsOwpAQCAtMjI0OSw3ICsyMjkyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGVkaXRJbmZvID0gbmV3IFdlYkluc3Bl
Y3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mbyhyYW5nZSwgbGluZXMuam9pbigiXG4iKSk7
CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9u
KGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0
U2VsZWN0aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsKIAogICAgICAgICAvLyBVbmluZGVudCBh
ZnRlciBibG9jawogICAgICAgICBpZiAoZWRpdEluZm8udGV4dCA9PT0gIn0iICYmIGVkaXRJbmZv
LnJhbmdlLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24uaXNFbXB0eSgpICYmICF0aGlzLl90ZXh0TW9k
ZWwubGluZShlZGl0SW5mby5yYW5nZS5lbmRMaW5lKS50cmltKCkpIHsKQEAgLTIyNjMsNyArMjMw
Niw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICB0aGlzLl90ZXh0TW9kZWwuZWRpdFJhbmdlKGVkaXRJbmZvLnJhbmdlLCBlZGl0SW5m
by50ZXh0KTsKICAgICAgICAgdGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lcyh0cnVlKTsKLSAgICAg
ICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgICAgICB0aGlzLnJlc3Rv
cmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMzEyLDcgKzIz
NTUsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGRvbU1vZGVsLmVkaXRSYW5nZShyYW5nZS5zaGlmdCgtY2xvbmVGcm9tTGluZSksIHRl
eHRJbnB1dERhdGEpOwogCiAgICAgICAgIC8vIFRoZW4gd2UnbGwgdGVzdCBpZiB0aGlzIG5ldyBt
b2RlbCBtYXRjaGVzIHRoZSBET00gbGluZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyAgaSA8
IGxpbmVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMu
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChkb21Nb2RlbC5saW5lKGkgKyBzdGFydExp
bmUgLSBjbG9uZUZyb21MaW5lKSAhPT0gbGluZXNbaV0pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CiAgICAgICAgIH0KQEAgLTIzODgsNyArMjQzMSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfcmVtb3ZlRGVjb3Jh
dGlvbnNJblJhbmdlOiBmdW5jdGlvbihyYW5nZSkKICAgICB7Ci0gICAgICAgIGZvciAodmFyIGkg
PSB0aGlzLl9jaHVua051bWJlckZvckxpbmUocmFuZ2Uuc3RhcnRMaW5lKTsgaSA8IHRoaXMuX3Rl
eHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2h1bmtO
dW1iZXJGb3JMaW5lKHJhbmdlLnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0
aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ldOwog
ICAgICAgICAgICAgaWYgKGNodW5rLnN0YXJ0TGluZSA+IHJhbmdlLmVuZExpbmUpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yNDAyLDcgKzI0NDUsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX3VwZGF0ZUNodW5rc0Zv
clJhbmdlczogZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQogICAgIHsKLSAgICAgICAgdmFy
IGZpcnN0RGFtYWdlZENodW5rTnVtYmVyID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKG9sZFJh
bmdlLnN0YXJ0TGluZSk7CisgICAgICAgIHZhciBmaXJzdERhbWFnZWRDaHVua051bWJlciA9IHRo
aXMuY2h1bmtOdW1iZXJGb3JMaW5lKG9sZFJhbmdlLnN0YXJ0TGluZSk7CiAgICAgICAgIHZhciBs
YXN0RGFtYWdlZENodW5rTnVtYmVyID0gZmlyc3REYW1hZ2VkQ2h1bmtOdW1iZXI7CiAgICAgICAg
IHdoaWxlIChsYXN0RGFtYWdlZENodW5rTnVtYmVyICsgMSA8IHRoaXMuX3RleHRDaHVua3MubGVu
Z3RoKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dENodW5rc1tsYXN0RGFtYWdlZENodW5r
TnVtYmVyICsgMV0uc3RhcnRMaW5lID4gb2xkUmFuZ2UuZW5kTGluZSkKQEAgLTI0NTgsNyArMjUw
MSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdmFyIGNodW5rU2l6ZSA9IE1hdGguY2VpbChsaW5lU3BhbiAvIE1hdGguY2VpbChsaW5l
U3BhbiAvIHRoaXMuX2RlZmF1bHRDaHVua1NpemUpKTsKIAogICAgICAgICBmb3IgKHZhciBpID0g
c3RhcnRMaW5lOyBpIDwgZW5kTGluZTsgaSArPSBjaHVua1NpemUpIHsKLSAgICAgICAgICAgIHZh
ciBjaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKGksIE1hdGgubWluKGVuZExpbmUsIGkgKyBj
aHVua1NpemUpKTsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuY3JlYXRlTmV3Q2h1bmso
aSwgTWF0aC5taW4oZW5kTGluZSwgaSArIGNodW5rU2l6ZSkpOwogICAgICAgICAgICAgdGhpcy5f
dGV4dENodW5rcy5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgrKywgMCwgY2h1bmspOwogICAgICAgICAg
ICAgdGhpcy5fY29udGFpbmVyLmluc2VydEJlZm9yZShjaHVuay5lbGVtZW50LCByZW1vdmVET01U
b05vZGUpOwogICAgICAgICB9CkBAIC0yNDcxLDEwICsyNTE0LDEwIEBAIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfdXBkYXRlSGln
aGxpZ2h0c0ZvclJhbmdlOiBmdW5jdGlvbihyYW5nZSkKICAgICB7Ci0gICAgICAgIHZhciB2aXNp
YmxlRnJvbSA9IHRoaXMuX3Njcm9sbFRvcCgpOwotICAgICAgICB2YXIgdmlzaWJsZVRvID0gdmlz
aWJsZUZyb20gKyB0aGlzLl9jbGllbnRIZWlnaHQoKTsKKyAgICAgICAgdmFyIHZpc2libGVGcm9t
ID0gdGhpcy5zY3JvbGxUb3AoKTsKKyAgICAgICAgdmFyIHZpc2libGVUbyA9IHZpc2libGVGcm9t
ICsgdGhpcy5jbGllbnRIZWlnaHQoKTsKIAotICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmlu
ZFZpc2libGVDaHVua3ModmlzaWJsZUZyb20sIHZpc2libGVUbyk7CisgICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLmZpbmRWaXNpYmxlQ2h1bmtzKHZpc2libGVGcm9tLCB2aXNpYmxlVG8pOwogICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW3Jlc3VsdC5lbmQgLSAxXTsKICAgICAg
ICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291
bnQ7CiAKQEAgLTI0ODQsMTEgKzI1MjcsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgdXBkYXRlZCA9IHRoaXMuX2hpZ2hsaWdo
dGVyLnVwZGF0ZUhpZ2hsaWdodChyYW5nZS5zdGFydExpbmUsIGxhc3RWaXNpYmxlTGluZSk7CiAg
ICAgICAgIGlmICghdXBkYXRlZCkgewogICAgICAgICAgICAgLy8gSGlnaGxpZ2h0cyBmb3IgdGhl
IGNodW5rcyBiZWxvdyBhcmUgaW52YWxpZCwgc28ganVzdCBjb2xsYXBzZSB0aGVtLgotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExp
bmUpOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGZvciAo
dmFyIGkgPSB0aGlzLmNodW5rTnVtYmVyRm9yTGluZShyYW5nZS5zdGFydExpbmUpOyBpIDwgdGhp
cy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1
bmtzW2ldLmNvbGxhcHNlKCk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9yZXBhaW50QWxs
KCk7CisgICAgICAgIHRoaXMucmVwYWludEFsbCgpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTI1
MjMsMTQgKzI1NjYsNDEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQuc3BsaXQoIlxuIik7CiAgICAgfSwK
IAotICAgIF9oYW5kbGVTZWxlY3Rpb25DaGFuZ2U6IGZ1bmN0aW9uKGV2ZW50KQorICAgIGhhbmRs
ZVNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgdGV4
dFJhbmdlID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHZhciB0ZXh0UmFuZ2UgPSB0
aGlzLmdldFNlbGVjdGlvbigpOwogICAgICAgICBpZiAodGV4dFJhbmdlKQogICAgICAgICAgICAg
dGhpcy5fbGFzdFNlbGVjdGlvbiA9IHRleHRSYW5nZTsKICAgICAgICAgdGhpcy5fZGVsZWdhdGUu
c2VsZWN0aW9uQ2hhbmdlZCh0ZXh0UmFuZ2UpOwogICAgIH0sCiAKKyAgICBoYW5kbGVUZXh0SW5w
dXQ6IGZ1bmN0aW9uKGUpCisgICAgeworICAgICAgICB0aGlzLl90ZXh0SW5wdXREYXRhID0gZS5k
YXRhOworICAgIH0sCisKKyAgICBoYW5kbGVLZXlEb3duOiBmdW5jdGlvbihlKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fa2V5RG93bkNvZGUgPSBlLmtleUNvZGU7CisgICAgfSwKKworICAgIGhhbmRs
ZUN1dDogZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2tleURvd25Db2RlID0gV2Vi
SW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5EZWxldGUuY29kZTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNjcm9sbFRvcAorICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBjbGllbnRIZWlnaHQKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gY2h1bmtTaXplCisg
ICAgICovCisgICAgb3ZlcnJpZGVWaWV3cG9ydEZvclRlc3Q6IGZ1bmN0aW9uKHNjcm9sbFRvcCwg
Y2xpZW50SGVpZ2h0LCBjaHVua1NpemUpCisgICAgeworICAgICAgICB0aGlzLl9zY3JvbGxUb3BP
dmVycmlkZUZvclRlc3QgPSBzY3JvbGxUb3A7CisgICAgICAgIHRoaXMuX2NsaWVudEhlaWdodE92
ZXJyaWRlRm9yVGVzdCA9IGNsaWVudEhlaWdodDsKKyAgICAgICAgdGhpcy5fZGVmYXVsdENodW5r
U2l6ZSA9IGNodW5rU2l6ZTsKKyAgICB9LAorCiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUKIH0KIApAQCAtMjcwNSw4ICsyNzc1LDgg
QEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgIGdl
dCBoZWlnaHQoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dzKQot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NodW5rZWRQYW5lbC5fdG90YWxIZWlnaHQodGhpcy5l
bGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NodW5rZWRQYW5lbC5fdG90YWxIZWlnaHQo
dGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXSwgdGhpcy5fZXhwYW5kZWRMaW5lUm93c1t0aGlzLl9l
eHBhbmRlZExpbmVSb3dzLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
aHVua2VkUGFuZWwudG90YWxIZWlnaHQodGhpcy5lbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2NodW5rZWRQYW5lbC50b3RhbEhlaWdodCh0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdLCB0
aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoIC0gMV0p
OwogICAgIH0sCiAKICAgICAvKioKQEAgLTI3ODEsNiArMjg1MSw5IEBAIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2V4
cGFuZGVkTGluZVJvd3MgPyB0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdIDogdGhpcy5lbGVtZW50
OwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtFbGVtZW50fQorICAgICAqLwog
ICAgIGxhc3RFbGVtZW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5f
ZXhwYW5kZWRMaW5lUm93cyA/IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbdGhpcy5fZXhwYW5kZWRM
aW5lUm93cy5sZW5ndGggLSAxXSA6IHRoaXMuZWxlbWVudDsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0YjIwODIwOTJlZWVl
YTFhMzU1ZGEzZGVlZGYxNGUxYjJiZTdiNTk2Li43ZDQwOWRhMDczYjhiZjQ2ZmExY2ZhMzY4Yjkz
MmE4ODg4N2IzMDdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMTItMjcgIEFuZHJleSBM
dXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0uY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJlZmFjdG9yIERlZmF1bHRUZXh0RWRpdG9yJ3MgcHJpdmF0ZSBtZXRob2RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU3OTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggdGVzdCB0byBjb3Jy
ZXNwb25kIHRvIG1ldGhvZCByZW5hbWluZ3Mgb2YgVGV4dEVkaXRvck1haW5QYW5lbC4KKworICAg
ICAgICAqIGluc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0b3Itc2VsZWN0aW9uLmh0bWw6CisKIDIw
MTItMTItMjcgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZS5wcm9maWxlRW5kKCkgY3Jhc2hlcyBpZiBjYWxs
ZWQgd2l0aG91dCBhcmd1bWVudHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9l
ZGl0b3IvdGV4dC1lZGl0b3Itc2VsZWN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
ZWRpdG9yL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5odG1sCmluZGV4IGE1NzNjMDc3M2ZmMWFlOTc3
OTY5ZDcyNWFkYTM0ZTQ3NzI1OTM2MTMuLmM1NTI5ZWQ5MTFjZDFlNThkYzJiOGUxOTAxMmY5MmRj
OGRjNWNmYTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lZGl0b3IvdGV4dC1l
ZGl0b3Itc2VsZWN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VkaXRvci90
ZXh0LWVkaXRvci1zZWxlY3Rpb24uaHRtbApAQCAtMTUsNyArMTUsNyBAQCBmdW5jdGlvbiB0ZXN0
KCkKICAgICAgICAgICAgIHZhciBjaHVua3MgPSB0ZXh0RWRpdG9yLl9tYWluUGFuZWwuX3RleHRD
aHVua3M7CiAgICAgICAgICAgICB2YXIgbGFzdENodW5rID0gY2h1bmtzW2NodW5rcy5sZW5ndGgg
LSAxXTsKICAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50
KGxhc3RDaHVuay5lbGVtZW50LCAwLCBsYXN0Q2h1bmsuZWxlbWVudCwgMCk7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0RWRpdG9yLl9tYWluUGFuZWwuX2dldFNlbGVj
dGlvbigpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KHRleHRFZGl0b3Iu
X21haW5QYW5lbC5nZXRTZWxlY3Rpb24oKSk7CiAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAg
IH0sCiAKQEAgLTI0LDcgKzI0LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICB2YXIg
Y2h1bmtzID0gdGV4dEVkaXRvci5fbWFpblBhbmVsLl90ZXh0Q2h1bmtzOwogICAgICAgICAgICAg
dmFyIGxhc3RDaHVuayA9IGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV07CiAgICAgICAgICAgICB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChsYXN0Q2h1bmsuZWxlbWVudCwg
MSwgbGFzdENodW5rLmVsZW1lbnQsIDEpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRS
ZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLl9nZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0RWRpdG9yLl9tYWluUGFuZWwuZ2V0U2VsZWN0
aW9uKCkpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICB9LAogCkBAIC0zMyw3ICszMyw3
IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgdmFyIGNodW5rcyA9IHRleHRFZGl0b3Iu
X21haW5QYW5lbC5fdGV4dENodW5rczsKICAgICAgICAgICAgIHZhciBsYXN0Q2h1bmsgPSBjaHVu
a3NbY2h1bmtzLmxlbmd0aCAtIDFdOwogICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigp
LnNldEJhc2VBbmRFeHRlbnQobGFzdENodW5rLmVsZW1lbnQuZmlyc3RDaGlsZCwgMSwgbGFzdENo
dW5rLmVsZW1lbnQuZmlyc3RDaGlsZCwgMTEpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLl9nZXRTZWxlY3Rpb24oKSk7CisgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0RWRpdG9yLl9tYWluUGFuZWwuZ2V0U2Vs
ZWN0aW9uKCkpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICB9LAogCkBAIC00Miw3ICs0
Miw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgdmFyIGNodW5rcyA9IHRleHRFZGl0
b3IuX21haW5QYW5lbC5fdGV4dENodW5rczsKICAgICAgICAgICAgIHZhciBmaXJzdENodW5rID0g
Y2h1bmtzWzBdOwogICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRF
eHRlbnQoZmlyc3RDaHVuay5leHBhbmRlZExpbmVSb3coMyksIDAsIGZpcnN0Q2h1bmsuZXhwYW5k
ZWRMaW5lUm93KDQpLCAxKTsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KHRl
eHRFZGl0b3IuX21haW5QYW5lbC5fZ2V0U2VsZWN0aW9uKCkpOworICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRSZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLmdldFNlbGVjdGlvbigpKTsK
ICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgfSwKIApAQCAtNTEsNyArNTEsNyBAQCBmdW5j
dGlvbiB0ZXN0KCkKICAgICAgICAgICAgIHZhciBjaHVua3MgPSB0ZXh0RWRpdG9yLl9tYWluUGFu
ZWwuX3RleHRDaHVua3M7CiAgICAgICAgICAgICB2YXIgZmlyc3RDaHVuayA9IGNodW5rc1swXTsK
ICAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGZpcnN0
Q2h1bmsuZXhwYW5kZWRMaW5lUm93KDMpLmZpcnN0Q2hpbGQsIDMsIGZpcnN0Q2h1bmsuZXhwYW5k
ZWRMaW5lUm93KDQpLmZpcnN0Q2hpbGQsIDQpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLl9nZXRTZWxlY3Rpb24oKSk7CisgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0RWRpdG9yLl9tYWluUGFuZWwuZ2V0U2Vs
ZWN0aW9uKCkpOwogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICB9LAogICAgIF0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180802</attachid>
            <date>2012-12-27 07:49:19 -0800</date>
            <delta_ts>2012-12-28 01:09:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105797-20121227194630.patch</filename>
            <type>text/plain</type>
            <size>49838</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA2Zjk5NWNiNzQ5N2Yz
MzZiMjY5MmNmNTk2NDQxNThkNDEzNWI2Zi4uMzI1YjViNmZjZGEyYmZmMWZhNmZhOGUzNmI5MWY2
ZjgxMTcwMWEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDEyLTEyLTI3ICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiByZWZhY3RvciBEZWZhdWx0VGV4dEVkaXRvcidzIHByaXZhdGUgbWV0aG9kcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1Nzk3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBSZWZhY3RvciBw
cml2YXRlIG1ldGhvZHMgdG8gcHVibGljIGlmIHRoZXkgYXJlIGNhbGxlZCBmcm9tIGV4dGVybmFs
IGNsYXNzZXMKKyAgICAgICAgLSBHZXQgcmlkIG9mIGV4dGVybmFsIHByaXZhdGUgdmFyaWFibGUg
YWNjZXNzLgorCisgICAgICAgIE5vIHRlc3RzOiBubyBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUuZnJlZUNhY2hlZEVs
ZW1lbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5
cGUuX2hhbmRsZVRleHRJbnB1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRF
ZGl0b3IucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
ZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZXh0TWVudSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLl9oYW5kbGVTY3JvbGxD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5
cGUuc2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUubGFzdFNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdFRl
eHRFZGl0b3IucHJvdG90eXBlLnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLndhc1Nob3duKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUuX2hhbmRsZUZvY3VzZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZS53aWxsSGlkZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlLmhpZ2hsaWdo
dEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnBy
b3RvdHlwZS5vdmVycmlkZVZpZXdwb3J0Rm9yVGVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuYnVpbGRDaHVua3MpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLm1ha2VMaW5lQUNo
dW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5zcGxpdENodW5rT25BTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY3JlYXRlTmV3Q2h1bmspOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLnNjcm9sbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3NjaGVkdWxl
UmVwYWludEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUuZW5kVXBkYXRlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY2h1bmtGb3JMaW5lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5maW5kVmlzaWJsZUNodW5rcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUu
cmVwYWludEFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5l
bC5wcm90b3R5cGUuc2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
Q2h1bmtlZFBhbmVsLnByb3RvdHlwZS5jbGllbnRIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmV4cGFuZENodW5rcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUudG90YWxI
ZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJv
dG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBh
bmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90
eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ckd1dHRlclBhbmVsLnByb3RvdHlwZS5jcmVhdGVOZXdDaHVuayk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZS5nZXQgaGVp
Z2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS53YXNTaG93bik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUud2ls
bEhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlLmhpZ2hsaWdodExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlLmZyZWVDYWNoZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGFuZGxlVW5kb1JlZG8pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmhhbmRsZUVudGVy
S2V5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5zcGxpdENodW5rT25BTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5QYW5lbC5wcm90b3R5cGUuYnVpbGRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmNyZWF0ZU5ld0NodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5leHBhbmRDaHVua3MpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9zY2hl
ZHVsZVBhaW50TGluZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlLl9wYWludExpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRMaW5lQ2h1bmtzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLmdldExhc3RT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLnNldExhc3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluUGFuZWwucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5l
bmNsb3NpbmdMaW5lUm93T3JTZWxmKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fY3JlYXRlTGluayk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21V
cGRhdGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcmVtb3ZlRGVjb3JhdGlvbnNJblJh
bmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZS5fdXBkYXRlQ2h1bmtzRm9yUmFuZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZS5fdXBkYXRlSGlnaGxpZ2h0c0ZvclJhbmdlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVTZWxl
Y3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLmhhbmRsZVRleHRJbnB1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGFuZGxlS2V5RG93bik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuaGFuZGxlQ3V0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5vdmVycmlkZVZpZXdw
b3J0Rm9yVGVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5w
cm90b3R5cGUuZ2V0IGhlaWdodCk6CisKIDIwMTItMTItMjcgIEV1Z2VuZSBLbHl1Y2huaWtvdiAg
PGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZS5w
cm9maWxlRW5kKCkgY3Jhc2hlcyBpZiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3Iu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9y
LmpzCmluZGV4IDliNGQ1NGI5MTFhOTQ3ZjdjY2YwODViYzg2OTJjYjU2YjFlNTU0NTkuLjg3OTk5
N2NiYWEyMTNjNGY2MzEwNGIyODQxNWY2YzI0MTQ1MjQ1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcwpAQCAt
NjQsNyArNjQsNiBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IgPSBmdW5jdGlvbih1
cmwsIGRlbGVnYXRlKQogICAgIHRoaXMuX2d1dHRlclBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yR3V0dGVyUGFuZWwodGhpcy5fdGV4dE1vZGVsLCBzeW5jRGVjb3JhdGlvbnNGb3JM
aW5lTGlzdGVuZXIsIHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIpOwogCiAgICAgdGhpcy5fbWFpblBh
bmVsLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5faGFuZGxlU2Nyb2xs
Q2hhbmdlZC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5fbWFpblBhbmVsLl9jb250YWlu
ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9oYW5kbGVGb2N1c2VkLmJpbmQodGhp
cyksIGZhbHNlKTsKIAogICAgIHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7CiAK
QEAgLTk0LDcgKzkzLDYgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yID0gZnVuY3Rp
b24odXJsLCBkZWxlZ2F0ZSkKIAogICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJr
ZXlkb3duIiwgdGhpcy5faGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgdGhp
cy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImN1dCIsIHRoaXMuX2hhbmRsZUN1dC5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRleHRJbnB1
dCIsIHRoaXMuX2hhbmRsZVRleHRJbnB1dC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgdGhpcy5l
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnUu
YmluZCh0aGlzKSwgdHJ1ZSk7CiAKICAgICB0aGlzLl9yZWdpc3RlclNob3J0Y3V0cygpOwpAQCAt
MjYzLDEyICsyNjEsNiBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLl9tYWluUGFuZWwuY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAg
fSwKIAotICAgIF9mcmVlQ2FjaGVkRWxlbWVudHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX21haW5QYW5lbC5fZnJlZUNhY2hlZEVsZW1lbnRzKCk7Ci0gICAgICAgIHRoaXMuX2d1
dHRlclBhbmVsLl9mcmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB9LAotCiAgICAgLyoqCiAgICAg
ICogQHJldHVybiB7QXJyYXkuPEVsZW1lbnQ+fQogICAgICAqLwpAQCAtNDEwLDExICs0MDIsNiBA
QCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9LAogCi0gICAgX2hhbmRsZVRleHRJbnB1dDogZnVuY3Rpb24oZSkK
LSAgICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5lbC5fdGV4dElucHV0RGF0YSA9IGUuZGF0YTsK
LSAgICB9LAotCiAgICAgX2hhbmRsZUtleURvd246IGZ1bmN0aW9uKGUpCiAgICAgewogICAgICAg
ICAvLyBJZiB0aGUgZXZlbnQgd2FzIG5vdCB0cmlnZ2VyZWQgZnJvbSB0aGUgZW50aXJlIGVkaXRv
ciwgdGhlbgpAQCAtNDI5LDEyICs0MTYsMTIgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGUuY29uc3VtZSh0cnVlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25D
b2RlID0gZS5rZXlDb2RlOworICAgICAgICB0aGlzLl9tYWluUGFuZWwuaGFuZGxlS2V5RG93bihl
KTsKICAgICB9LAogCiAgICAgX2hhbmRsZUN1dDogZnVuY3Rpb24oZSkKICAgICB7Ci0gICAgICAg
IHRoaXMuX21haW5QYW5lbC5fa2V5RG93bkNvZGUgPSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5LZXlzLkRlbGV0ZS5jb2RlOworICAgICAgICB0aGlzLl9tYWluUGFuZWwuaGFuZGxlQ3V0
KGUpOwogICAgIH0sCiAKICAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNDQ3
LDE2ICs0MzQsMTUgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZSA9
IHsKICAgICAgICAgaWYgKHRhcmdldCkKICAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnBvcHVs
YXRlTGluZUd1dHRlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB0YXJnZXQubGluZU51bWJlcik7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fbWFpblBhbmVsLl9l
bmNsb3NpbmdMaW5lUm93T3JTZWxmKGV2ZW50LnRhcmdldCk7Ci0gICAgICAgICAgICB0aGlzLl9k
ZWxlZ2F0ZS5wb3B1bGF0ZVRleHRBcmVhQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRhcmdldCAm
JiB0YXJnZXQubGluZU51bWJlcik7CisgICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuY29udGV4
dE1lbnUoZXZlbnQudGFyZ2V0LCBjb250ZXh0TWVudSk7CiAgICAgICAgIH0KICAgICAgICAgY29u
dGV4dE1lbnUuc2hvdygpOwogICAgIH0sCiAKICAgICBfaGFuZGxlU2Nyb2xsQ2hhbmdlZDogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLl9tYWlu
UGFuZWwuX3Njcm9sbFRvcCgpOwotICAgICAgICB2YXIgZmlyc3RWaXNpYmxlTGluZU51bWJlciA9
IHRoaXMuX21haW5QYW5lbC5fZmluZEZpcnN0VmlzaWJsZUxpbmVOdW1iZXIodmlzaWJsZUZyb20p
OworICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLl9tYWluUGFuZWwuc2Nyb2xsVG9wKCk7
CisgICAgICAgIHZhciBmaXJzdFZpc2libGVMaW5lTnVtYmVyID0gdGhpcy5fbWFpblBhbmVsLmxp
bmVOdW1iZXJBdE9mZnNldCh2aXNpYmxlRnJvbSk7CiAgICAgICAgIHRoaXMuX2RlbGVnYXRlLnNj
cm9sbENoYW5nZWQoZmlyc3RWaXNpYmxlTGluZU51bWJlcik7CiAgICAgfSwKIApAQCAtNDczLDcg
KzQ1OSw3IEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICovCiAgICAgc2VsZWN0aW9uOiBmdW5jdGlvbih0ZXh0UmFuZ2UpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fbWFpblBhbmVsLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX21haW5QYW5lbC5nZXRTZWxlY3Rpb24oKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC00
ODEsNyArNDY3LDcgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZSA9
IHsKICAgICAgKi8KICAgICBsYXN0U2VsZWN0aW9uOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fbWFpblBhbmVsLl9sYXN0U2VsZWN0aW9uOworICAgICAgICByZXR1cm4g
dGhpcy5fbWFpblBhbmVsLmdldExhc3RTZWxlY3Rpb24oKTsKICAgICB9LAogCiAgICAgLyoqCkBA
IC00ODksMTMgKzQ3NSwxMSBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90
eXBlID0gewogICAgICAqLwogICAgIHNldFNlbGVjdGlvbjogZnVuY3Rpb24odGV4dFJhbmdlKQog
ICAgIHsKLSAgICAgICAgdGhpcy5fbWFpblBhbmVsLl9sYXN0U2VsZWN0aW9uID0gdGV4dFJhbmdl
OwotICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzQW5jZXN0b3IoZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCkpCi0gICAgICAgICAgICB0aGlzLl9tYWluUGFuZWwuX3Jlc3RvcmVTZWxlY3Rpb24odGV4
dFJhbmdlKTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLnNldFNlbGVjdGlvbih0ZXh0UmFuZ2Up
OwogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAKKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gdGV4dAogICAgICAqLwogICAgIHNldFRleHQ6IGZ1bmN0aW9uKHRl
eHQpCiAgICAgewpAQCAtNTM3LDggKzUyMSw4IEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVk
aXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJlcn0gbGlu
ZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAKLSAgICAgKiBAcGFyYW0ge09iamVjdD99
IHZhbHVlICAKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAqIEBwYXJhbSB7T2Jq
ZWN0P30gdmFsdWUKICAgICAgKi8KICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGxpbmUsIG5h
bWUsIHZhbHVlKQogICAgIHsKQEAgLTU0Nyw4ICs1MzEsOCBAQCBXZWJJbnNwZWN0b3IuRGVmYXVs
dFRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1i
ZXJ9IGxpbmUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgCi0gICAgICogQHJldHVybiB7
T2JqZWN0fG51bGx9IHZhbHVlICAKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQorICAgICAq
IEByZXR1cm4gez9PYmplY3R9IHZhbHVlCiAgICAgICovCiAgICAgZ2V0QXR0cmlidXRlOiBmdW5j
dGlvbihsaW5lLCBuYW1lKQogICAgIHsKQEAgLTU2OSwyNiArNTUzLDIwIEBAIFdlYkluc3BlY3Rv
ci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghdGhpcy5yZWFk
T25seSgpKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVs
ZW1lbnQsIHRydWUpOwogCi0gICAgICAgIHRoaXMuX2JvdW5kU2VsZWN0aW9uQ2hhbmdlTGlzdGVu
ZXIgPSB0aGlzLl9tYWluUGFuZWwuX2hhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMuX21h
aW5QYW5lbCk7CisgICAgICAgIHRoaXMuX2JvdW5kU2VsZWN0aW9uQ2hhbmdlTGlzdGVuZXIgPSB0
aGlzLl9tYWluUGFuZWwuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcy5fbWFpblBhbmVs
KTsKICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwg
dGhpcy5fYm91bmRTZWxlY3Rpb25DaGFuZ2VMaXN0ZW5lciwgZmFsc2UpOwotICAgICAgICB0aGlz
Ll9tYWluUGFuZWwuX3dhc1Nob3duKCk7Ci0gICAgfSwKLQotICAgIF9oYW5kbGVGb2N1c2VkOiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fbWFpblBhbmVsLl9sYXN0U2VsZWN0
aW9uKQotICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24odGhpcy5fbWFpblBhbmVsLl9sYXN0
U2VsZWN0aW9uKTsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLndhc1Nob3duKCk7CiAgICAgfSwK
IAogICAgIHdpbGxIaWRlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9tYWluUGFu
ZWwuX3dpbGxIaWRlKCk7CisgICAgICAgIHRoaXMuX21haW5QYW5lbC53aWxsSGlkZSgpOworICAg
ICAgICB0aGlzLl9ndXR0ZXJQYW5lbC53aWxsSGlkZSgpOwogICAgICAgICBkb2N1bWVudC5yZW1v
dmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLl9ib3VuZFNlbGVjdGlvbkNo
YW5nZUxpc3RlbmVyLCBmYWxzZSk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9ib3VuZFNlbGVjdGlv
bkNoYW5nZUxpc3RlbmVyOwogCiAgICAgICAgIGlmICghdGhpcy5yZWFkT25seSgpKQogICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLm1hcmtCZWluZ0VkaXRlZCh0aGlzLmVsZW1lbnQsIGZhbHNlKTsK
LSAgICAgICAgdGhpcy5fZnJlZUNhY2hlZEVsZW1lbnRzKCk7CiAgICAgfSwKIAogICAgIC8qKgpA
QCAtNjEzLDcgKzU5MSw3IEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5wcm90b3R5
cGUgPSB7CiAgICAgaGlnaGxpZ2h0RXhwcmVzc2lvbjogZnVuY3Rpb24oZWxlbWVudCwgc2tpcENs
YXNzZXMsIHNraXBUb2tlbnMpCiAgICAgewogICAgICAgICAvLyBDb2xsZWN0IHRva2VucyBiZWxv
bmdpbmcgdG8gZXZhbHVhdGVkIGV4cHJlc3Npb24uCi0gICAgICAgIHZhciB0b2tlbnMgPSBbIGVs
ZW1lbnQgXTsKKyAgICAgICAgdmFyIHRva2VucyA9IFtlbGVtZW50XTsKICAgICAgICAgdmFyIHRv
a2VuID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgIHdoaWxlICh0b2tlbiAmJiAo
c2tpcENsYXNzZXNbdG9rZW4uY2xhc3NOYW1lXSB8fCBza2lwVG9rZW5zW3Rva2VuLnRleHRDb250
ZW50LnRyaW0oKV0pKSB7CiAgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CkBAIC02NTks
OSArNjM3LDcgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgKi8KICAgICBvdmVycmlkZVZpZXdwb3J0Rm9yVGVzdDogZnVuY3Rpb24oc2Nyb2xsVG9w
LCBjbGllbnRIZWlnaHQsIGNodW5rU2l6ZSkKICAgICB7Ci0gICAgICAgIHRoaXMuX21haW5QYW5l
bC5fc2Nyb2xsVG9wT3ZlcnJpZGVGb3JUZXN0ID0gc2Nyb2xsVG9wOwotICAgICAgICB0aGlzLl9t
YWluUGFuZWwuX2NsaWVudEhlaWdodE92ZXJyaWRlRm9yVGVzdCA9IGNsaWVudEhlaWdodDsKLSAg
ICAgICAgdGhpcy5fbWFpblBhbmVsLl9kZWZhdWx0Q2h1bmtTaXplID0gY2h1bmtTaXplOworICAg
ICAgICB0aGlzLl9tYWluUGFuZWwub3ZlcnJpZGVWaWV3cG9ydEZvclRlc3Qoc2Nyb2xsVG9wLCBj
bGllbnRIZWlnaHQsIGNodW5rU2l6ZSk7CiAgICAgfSwKIAogICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLlZpZXcucHJvdG90eXBlCkBAIC02NzUsNiArNjUxLDkgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwgPSBmdW5jdGlvbih0ZXh0TW9kZWwpCiB7CiAgICAgdGhpcy5f
dGV4dE1vZGVsID0gdGV4dE1vZGVsOwogCisgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNj
cm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CisKICAgICB0aGlzLl9kZWZh
dWx0Q2h1bmtTaXplID0gNTA7CiAgICAgdGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwgPSAwOwog
ICAgIHRoaXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCA9IDA7CkBAIC03MzEsNyArNzEwLDcg
QEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAgICBjaHVuay5yZW1vdmVEZWNvcmF0aW9uKGRlY29yYXRpb24pOwogICAgIH0sCiAKLSAgICBf
YnVpbGRDaHVua3M6IGZ1bmN0aW9uKCkKKyAgICBidWlsZENodW5rczogZnVuY3Rpb24oKQogICAg
IHsKICAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKIApAQCAtNzM5LDQxICs3MTgsNDMg
QEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogCiAg
ICAgICAgIHRoaXMuX3RleHRDaHVua3MgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgaSArPSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXpl
KSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsg
dGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNy
ZWF0ZU5ld0NodW5rKGksIGkgKyB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKTsKICAgICAgICAgICAg
IHRoaXMuX3RleHRDaHVua3MucHVzaChjaHVuayk7CiAgICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY2h1bmsuZWxlbWVudCk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlz
Ll9yZXBhaW50QWxsKCk7CisgICAgICAgIHRoaXMucmVwYWludEFsbCgpOwogCiAgICAgICAgIHRo
aXMuZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251
bWJlcn0gbGluZU51bWJlcgorICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgKi8KICAgICBt
YWtlTGluZUFDaHVuazogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBj
aHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAg
ICAgdmFyIGNodW5rTnVtYmVyID0gdGhpcy5jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcik7
CiAgICAgICAgIHZhciBvbGRDaHVuayA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdOwog
CiAgICAgICAgIGlmICghb2xkQ2h1bmspIHsKICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIk5v
IGNodW5rIGZvciBsaW5lIG51bWJlcjogIiArIGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
b2xkQ2h1bmsubGluZXNDb3VudCA9PT0gMSkKICAgICAgICAgICAgIHJldHVybiBvbGRDaHVuazsK
IAotICAgICAgICByZXR1cm4gdGhpcy5fc3BsaXRDaHVua09uQUxpbmUobGluZU51bWJlciwgY2h1
bmtOdW1iZXIsIHRydWUpOworICAgICAgICByZXR1cm4gdGhpcy5zcGxpdENodW5rT25BTGluZShs
aW5lTnVtYmVyLCBjaHVua051bWJlciwgdHJ1ZSk7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNodW5r
TnVtYmVyCiAgICAgICogQHBhcmFtIHtib29sZWFuPX0gY3JlYXRlU3VmZml4Q2h1bmsKKyAgICAg
KiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICovCi0gICAgX3NwbGl0Q2h1bmtPbkFMaW5lOiBmdW5j
dGlvbihsaW5lTnVtYmVyLCBjaHVua051bWJlciwgY3JlYXRlU3VmZml4Q2h1bmspCisgICAgc3Bs
aXRDaHVua09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5rTnVtYmVyLCBjcmVhdGVT
dWZmaXhDaHVuaykKICAgICB7CiAgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAKQEAg
LTc4NSwyMCArNzY2LDIwIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBQcmVmaXggY2h1bmsuCiAgICAgICAgIGlmIChsaW5l
TnVtYmVyID4gb2xkQ2h1bmsuc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4Q2h1
bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhvbGRDaHVuay5zdGFydExpbmUsIGxpbmVOdW1iZXIp
OworICAgICAgICAgICAgdmFyIHByZWZpeENodW5rID0gdGhpcy5jcmVhdGVOZXdDaHVuayhvbGRD
aHVuay5zdGFydExpbmUsIGxpbmVOdW1iZXIpOwogICAgICAgICAgICAgdGhpcy5fdGV4dENodW5r
cy5zcGxpY2UoaW5zZXJ0SW5kZXgrKywgMCwgcHJlZml4Q2h1bmspOwogICAgICAgICAgICAgdGhp
cy5fY29udGFpbmVyLmluc2VydEJlZm9yZShwcmVmaXhDaHVuay5lbGVtZW50LCBvbGRDaHVuay5l
bGVtZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIExpbmUgY2h1bmsuCiAgICAgICAgIHZh
ciBlbmRMaW5lID0gY3JlYXRlU3VmZml4Q2h1bmsgPyBsaW5lTnVtYmVyICsgMSA6IG9sZENodW5r
LnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQ7Ci0gICAgICAgIHZhciBsaW5lQ2h1bmsg
PSB0aGlzLl9jcmVhdGVOZXdDaHVuayhsaW5lTnVtYmVyLCBlbmRMaW5lKTsKKyAgICAgICAgdmFy
IGxpbmVDaHVuayA9IHRoaXMuY3JlYXRlTmV3Q2h1bmsobGluZU51bWJlciwgZW5kTGluZSk7CiAg
ICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGluc2VydEluZGV4KyssIDAsIGxpbmVDaHVu
ayk7CiAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5pbnNlcnRCZWZvcmUobGluZUNodW5rLmVsZW1l
bnQsIG9sZENodW5rLmVsZW1lbnQpOwogCiAgICAgICAgIC8vIFN1ZmZpeCBjaHVuay4KICAgICAg
ICAgaWYgKG9sZENodW5rLnN0YXJ0TGluZSArIG9sZENodW5rLmxpbmVzQ291bnQgPiBlbmRMaW5l
KSB7Ci0gICAgICAgICAgICB2YXIgc3VmZml4Q2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhl
bmRMaW5lLCBvbGRDaHVuay5zdGFydExpbmUgKyBvbGRDaHVuay5saW5lc0NvdW50KTsKKyAgICAg
ICAgICAgIHZhciBzdWZmaXhDaHVuayA9IHRoaXMuY3JlYXRlTmV3Q2h1bmsoZW5kTGluZSwgb2xk
Q2h1bmsuc3RhcnRMaW5lICsgb2xkQ2h1bmsubGluZXNDb3VudCk7CiAgICAgICAgICAgICB0aGlz
Ll90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRJbmRleCwgMCwgc3VmZml4Q2h1bmspOwogICAgICAg
ICAgICAgdGhpcy5fY29udGFpbmVyLmluc2VydEJlZm9yZShzdWZmaXhDaHVuay5lbGVtZW50LCBv
bGRDaHVuay5lbGVtZW50KTsKICAgICAgICAgfQpAQCAtODIwLDYgKzgwMSwxMSBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biBsaW5lQ2h1bms7CiAgICAgfSwKIAorICAgIGNyZWF0ZU5ld0NodW5rOiBmdW5jdGlvbihzdGFy
dExpbmUsIGVuZExpbmUpCisgICAgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNyZWF0ZU5l
d0NodW5rKCkgaXMgbm90IGltcGxlbWVudGVkIik7CisgICAgfSwKKwogICAgIF9zY3JvbGw6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3NjaGVkdWxlUmVwYWludEFsbCgpOwpAQCAt
ODMxLDcgKzgxNyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9yZXBhaW50QWxsVGltZXIpCiAgICAg
ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVwYWludEFsbFRpbWVyKTsKLSAgICAgICAgdGhp
cy5fcmVwYWludEFsbFRpbWVyID0gc2V0VGltZW91dCh0aGlzLl9yZXBhaW50QWxsLmJpbmQodGhp
cyksIDUwKTsKKyAgICAgICAgdGhpcy5fcmVwYWludEFsbFRpbWVyID0gc2V0VGltZW91dCh0aGlz
LnJlcGFpbnRBbGwuYmluZCh0aGlzKSwgNTApOwogICAgIH0sCiAKICAgICBiZWdpblVwZGF0ZXM6
IGZ1bmN0aW9uKCkKQEAgLTg0Myw3ICs4MjksNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB0aGlzLl9wYWludENvYWxl
c2NpbmdMZXZlbC0tOwogICAgICAgICBpZiAoIXRoaXMuX3BhaW50Q29hbGVzY2luZ0xldmVsKQot
ICAgICAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICAgICAgdGhpcy5yZXBhaW50
QWxsKCk7CiAgICAgfSwKIAogICAgIGJlZ2luRG9tVXBkYXRlczogZnVuY3Rpb24oKQpAQCAtODU4
LDggKzg0NCw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlw
ZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAg
ICogQHJldHVybiB7bnVtYmVyfQogICAgICAqLwotICAgIF9jaHVua051bWJlckZvckxpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgY2h1bmtOdW1iZXJGb3JMaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUxpbmVOdW1iZXJzKHZhbHVl
LCBjaHVuaykKICAgICAgICAgewpAQCAtODcxLDE0ICs4NTgsMTYgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBh
cmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICov
CiAgICAgY2h1bmtGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1i
ZXIpXTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3NbdGhpcy5jaHVua051bWJlckZv
ckxpbmUobGluZU51bWJlcildOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251
bWJlcn0gdmlzaWJsZUZyb20KKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICovCiAgICAg
X2ZpbmRGaXJzdFZpc2libGVDaHVua051bWJlcjogZnVuY3Rpb24odmlzaWJsZUZyb20pCiAgICAg
ewpAQCAtODkzLDggKzg4Miw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJlcn0gdmlzaWJsZUZy
b20KICAgICAgKiBAcGFyYW0ge251bWJlcn0gdmlzaWJsZVRvCisgICAgICogQHJldHVybiB7e3N0
YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyfX0KICAgICAgKi8KLSAgICBfZmluZFZpc2libGVDaHVu
a3M6IGZ1bmN0aW9uKHZpc2libGVGcm9tLCB2aXNpYmxlVG8pCisgICAgZmluZFZpc2libGVDaHVu
a3M6IGZ1bmN0aW9uKHZpc2libGVGcm9tLCB2aXNpYmxlVG8pCiAgICAgewogICAgICAgICB2YXIg
ZnJvbSA9IHRoaXMuX2ZpbmRGaXJzdFZpc2libGVDaHVua051bWJlcih2aXNpYmxlRnJvbSk7CiAg
ICAgICAgIGZvciAodmFyIHRvID0gZnJvbSArIDE7IHRvIDwgdGhpcy5fdGV4dENodW5rcy5sZW5n
dGg7ICsrdG8pIHsKQEAgLTkwNiw4ICs4OTYsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge251bWJl
cn0gdmlzaWJsZUZyb20KKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICovCi0gICAgX2Zp
bmRGaXJzdFZpc2libGVMaW5lTnVtYmVyOiBmdW5jdGlvbih2aXNpYmxlRnJvbSkKKyAgICBsaW5l
TnVtYmVyQXRPZmZzZXQ6IGZ1bmN0aW9uKHZpc2libGVGcm9tKQogICAgIHsKICAgICAgICAgdmFy
IGNodW5rID0gdGhpcy5fdGV4dENodW5rc1t0aGlzLl9maW5kRmlyc3RWaXNpYmxlQ2h1bmtOdW1i
ZXIodmlzaWJsZUZyb20pXTsKICAgICAgICAgaWYgKCFjaHVuay5leHBhbmRlZCgpKQpAQCAtOTI3
LDM3ICs5MTgsMzcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICByZXR1cm4gbGluZU51bWJlcnNbaW5zZXJ0QmVmb3JlIC0gMV07CiAg
ICAgfSwKIAotICAgIF9yZXBhaW50QWxsOiBmdW5jdGlvbigpCisgICAgcmVwYWludEFsbDogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX3JlcGFpbnRBbGxUaW1lcjsKIAog
ICAgICAgICBpZiAodGhpcy5fcGFpbnRDb2FsZXNjaW5nTGV2ZWwpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5fc2Nyb2xsVG9wKCk7Ci0gICAg
ICAgIHZhciB2aXNpYmxlVG8gPSB2aXNpYmxlRnJvbSArIHRoaXMuX2NsaWVudEhlaWdodCgpOwor
ICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLnNjcm9sbFRvcCgpOworICAgICAgICB2YXIg
dmlzaWJsZVRvID0gdmlzaWJsZUZyb20gKyB0aGlzLmNsaWVudEhlaWdodCgpOwogCiAgICAgICAg
IGlmICh2aXNpYmxlVG8pIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9maW5kVmlz
aWJsZUNodW5rcyh2aXNpYmxlRnJvbSwgdmlzaWJsZVRvKTsKLSAgICAgICAgICAgIHRoaXMuX2V4
cGFuZENodW5rcyhyZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQpOworICAgICAgICAgICAgdmFyIHJl
c3VsdCA9IHRoaXMuZmluZFZpc2libGVDaHVua3ModmlzaWJsZUZyb20sIHZpc2libGVUbyk7Cisg
ICAgICAgICAgICB0aGlzLmV4cGFuZENodW5rcyhyZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQpOwog
ICAgICAgICB9CiAgICAgfSwKIAotICAgIF9zY3JvbGxUb3A6IGZ1bmN0aW9uKCkKKyAgICBzY3Jv
bGxUb3A6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5fc2Ny
b2xsVG9wT3ZlcnJpZGVGb3JUZXN0ID09PSAibnVtYmVyIiA/IHRoaXMuX3Njcm9sbFRvcE92ZXJy
aWRlRm9yVGVzdCA6IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7IAorICAgICAgICByZXR1cm4gdHlw
ZW9mIHRoaXMuX3Njcm9sbFRvcE92ZXJyaWRlRm9yVGVzdCA9PT0gIm51bWJlciIgPyB0aGlzLl9z
Y3JvbGxUb3BPdmVycmlkZUZvclRlc3QgOiB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOwogICAgIH0s
CiAKLSAgICBfY2xpZW50SGVpZ2h0OiBmdW5jdGlvbigpCisgICAgY2xpZW50SGVpZ2h0OiBmdW5j
dGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX2NsaWVudEhlaWdodE92
ZXJyaWRlRm9yVGVzdCA9PT0gIm51bWJlciIgPyB0aGlzLl9jbGllbnRIZWlnaHRPdmVycmlkZUZv
clRlc3QgOiB0aGlzLmVsZW1lbnQuY2xpZW50SGVpZ2h0OyAKKyAgICAgICAgcmV0dXJuIHR5cGVv
ZiB0aGlzLl9jbGllbnRIZWlnaHRPdmVycmlkZUZvclRlc3QgPT09ICJudW1iZXIiID8gdGhpcy5f
Y2xpZW50SGVpZ2h0T3ZlcnJpZGVGb3JUZXN0IDogdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodDsK
ICAgICB9LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleAogICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4CiAgICAgICovCi0gICAgX2V4cGFuZENodW5rczog
ZnVuY3Rpb24oZnJvbUluZGV4LCB0b0luZGV4KQorICAgIGV4cGFuZENodW5rczogZnVuY3Rpb24o
ZnJvbUluZGV4LCB0b0luZGV4KQogICAgIHsKICAgICAgICAgLy8gRmlyc3QgY29sbGFwc2UgY2h1
bmtzIHRvIGNvbGxlY3QgdGhlIERPTSBlbGVtZW50cyBpbnRvIGEgY2FjaGUgdG8gcmV1c2UgdGhl
bSBsYXRlci4KICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcm9tSW5kZXg7ICsraSkKQEAg
LTk3MSw4ICs5NjIsOSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtFbGVtZW50fSBmaXJzdEVsZW1lbnQK
ICAgICAgKiBAcGFyYW0ge0VsZW1lbnQ9fSBsYXN0RWxlbWVudAorICAgICAqIEByZXR1cm4ge251
bWJlcn0KICAgICAgKi8KLSAgICBfdG90YWxIZWlnaHQ6IGZ1bmN0aW9uKGZpcnN0RWxlbWVudCwg
bGFzdEVsZW1lbnQpCisgICAgdG90YWxIZWlnaHQ6IGZ1bmN0aW9uKGZpcnN0RWxlbWVudCwgbGFz
dEVsZW1lbnQpCiAgICAgewogICAgICAgICBsYXN0RWxlbWVudCA9IChsYXN0RWxlbWVudCB8fCBm
aXJzdEVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZzsKICAgICAgICAgaWYgKGxhc3RFbGVtZW50
KQpAQCAtOTkyLDcgKzk4NCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVs
LnByb3RvdHlwZSA9IHsKIAogICAgIHJlc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
dGhpcy5fcmVwYWludEFsbCgpOworICAgICAgICB0aGlzLnJlcGFpbnRBbGwoKTsKICAgICB9CiB9
CiAKQEAgLTEwMDAsNiArOTkyLDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFu
ZWwucHJvdG90eXBlID0gewogICogQGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWx9CiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTW9kZWx9IHRleHRNb2RlbAorICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIpfSBzeW5j
RGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oRWxlbWVudCl9
IHN5bmNMaW5lSGVpZ2h0TGlzdGVuZXIKICAqLwogV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0
ZXJQYW5lbCA9IGZ1bmN0aW9uKHRleHRNb2RlbCwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3Rl
bmVyLCBzeW5jTGluZUhlaWdodExpc3RlbmVyKQogewpAQCAtMTAwOCwxNyArMTAwMiwxNCBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsID0gZnVuY3Rpb24odGV4dE1vZGVsLCBz
eW5jRGVjb3JhdGlvbnNGb3JMaW5lTAogICAgIHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVM
aXN0ZW5lciA9IHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcjsKICAgICB0aGlzLl9zeW5j
TGluZUhlaWdodExpc3RlbmVyID0gc3luY0xpbmVIZWlnaHRMaXN0ZW5lcjsKIAotICAgIHRoaXMu
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgIHRoaXMuZWxlbWVu
dC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItbGluZXMiOwogCiAgICAgdGhpcy5fY29udGFpbmVy
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5fY29udGFpbmVyLmNs
YXNzTmFtZSA9ICJpbm5lci1jb250YWluZXIiOwogICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLl9jb250YWluZXIpOwogCi0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
InNjcm9sbCIsIHRoaXMuX3Njcm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KICAgICB0aGlzLl9m
cmVlQ2FjaGVkRWxlbWVudHMoKTsKLSAgICB0aGlzLl9idWlsZENodW5rcygpOworICAgIHRoaXMu
YnVpbGRDaHVua3MoKTsKICAgICB0aGlzLl9kZWNvcmF0aW9ucyA9IHt9OwogfQogCkBAIC0xMDI4
LDExICsxMDE5LDE3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl9jYWNoZWRSb3dzID0gW107CiAgICAgfSwKIAorICAgIHdp
bGxIaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9mcmVlQ2FjaGVkRWxlbWVu
dHMoKTsKKyAgICB9LAorCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0TGlu
ZQogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRMaW5lCisgICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVua30KICAgICAgKi8KLSAgICBfY3JlYXRlTmV3Q2h1
bms6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAgICBjcmVhdGVOZXdDaHVuazogZnVu
Y3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rKHRoaXMsIHN0YXJ0TGluZSwgZW5kTGluZSk7
CiAgICAgfSwKQEAgLTEwNDgsNyArMTA0NSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0
dGVyUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgbGluZXNEaWZmID0gbmV3UmFuZ2Uu
bGluZXNDb3VudCAtIG9sZFJhbmdlLmxpbmVzQ291bnQ7CiAgICAgICAgIGlmIChsaW5lc0RpZmYp
IHsKICAgICAgICAgICAgIC8vIFJlbW92ZSBvbGQgY2h1bmtzIChpZiBuZWVkZWQpLgotICAgICAg
ICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7
IGNodW5rTnVtYmVyID49IDAgOyAtLWNodW5rTnVtYmVyKSB7CisgICAgICAgICAgICBmb3IgKHZh
ciBjaHVua051bWJlciA9IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsgY2h1bmtOdW1iZXIg
Pj0gMDsgLS1jaHVua051bWJlcikgewogICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMu
X3RleHRDaHVua3NbY2h1bmtOdW1iZXJdOwogICAgICAgICAgICAgICAgIGlmIChjaHVuay5zdGFy
dExpbmUgKyBjaHVuay5saW5lc0NvdW50IDw9IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjUsNyArMTA2Miw3IEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gdG90YWxMaW5lczsgaSA8IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50OyBpICs9IHRoaXMuX2RlZmF1bHRDaHVua1NpemUpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jcmVhdGVOZXdDaHVuayhpLCBpICsgdGhpcy5fZGVmYXVs
dENodW5rU2l6ZSk7CisgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jcmVhdGVOZXdD
aHVuayhpLCBpICsgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSk7CiAgICAgICAgICAgICAgICAgdGhp
cy5fdGV4dENodW5rcy5wdXNoKGNodW5rKTsKICAgICAgICAgICAgICAgICB0aGlzLl9jb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY2h1bmsuZWxlbWVudCk7CiAgICAgICAgICAgICB9CkBAIC0xMDk0LDEw
ICsxMDkxLDEwIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhp
cy5fcmVwYWludEFsbCgpOworICAgICAgICAgICAgdGhpcy5yZXBhaW50QWxsKCk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEZWNvcmF0aW9ucyBtYXkgaGF2ZSBiZWVuIHJlbW92
ZWQsIHNvIHdlIG1heSBoYXZlIHRvIHN5bmMgdGhvc2UgbGluZXMuCi0gICAgICAgICAgICB2YXIg
Y2h1bmtOdW1iZXIgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUobmV3UmFuZ2Uuc3RhcnRMaW5l
KTsKKyAgICAgICAgICAgIHZhciBjaHVua051bWJlciA9IHRoaXMuY2h1bmtOdW1iZXJGb3JMaW5l
KG5ld1JhbmdlLnN0YXJ0TGluZSk7CiAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzW2NodW5rTnVtYmVyXTsKICAgICAgICAgICAgIHdoaWxlIChjaHVuayAmJiBjaHVuay5z
dGFydExpbmUgPD0gbmV3UmFuZ2UuZW5kTGluZSkgewogICAgICAgICAgICAgICAgIGlmIChjaHVu
ay5saW5lc0NvdW50ID09PSAxKQpAQCAtMTE1NSwxMSArMTE1MiwxNCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZSA9IHsKIAogLyoqCiAgKiBAY29uc3RydWN0
b3IKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbH0gY2h1bmtl
ZFBhbmVsCisgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCisgKiBAcGFyYW0ge251bWJlcn0g
ZW5kTGluZQogICovCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVuY3Rp
b24odGV4dEVkaXRvciwgc3RhcnRMaW5lLCBlbmRMaW5lKQorV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JHdXR0ZXJDaHVuayA9IGZ1bmN0aW9uKGNodW5rZWRQYW5lbCwgc3RhcnRMaW5lLCBlbmRMaW5l
KQogewotICAgIHRoaXMuX3RleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOwotICAgIHRoaXMuX3RleHRN
b2RlbCA9IHRleHRFZGl0b3IuX3RleHRNb2RlbDsKKyAgICB0aGlzLl9jaHVua2VkUGFuZWwgPSBj
aHVua2VkUGFuZWw7CisgICAgdGhpcy5fdGV4dE1vZGVsID0gY2h1bmtlZFBhbmVsLl90ZXh0TW9k
ZWw7CiAKICAgICB0aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKICAgICBlbmRMaW5lID0gTWF0
aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIGVuZExpbmUpOwpAQCAtMTE5NSwxMCAr
MTE5NSwxMCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZSA9
IHsKICAgICAgKi8KICAgICBhZGREZWNvcmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQogICAg
IHsKLSAgICAgICAgdGhpcy5fdGV4dEVkaXRvci5iZWdpbkRvbVVwZGF0ZXMoKTsKKyAgICAgICAg
dGhpcy5fY2h1bmtlZFBhbmVsLmJlZ2luRG9tVXBkYXRlcygpOwogICAgICAgICBpZiAodHlwZW9m
IGRlY29yYXRpb24gPT09ICJzdHJpbmciKQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoZGVjb3JhdGlvbik7Ci0gICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZW5kRG9tVXBk
YXRlcygpOworICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuZW5kRG9tVXBkYXRlcygpOwogICAg
IH0sCiAKICAgICAvKioKQEAgLTEyMDYsMTAgKzEyMDYsMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgcmVtb3ZlRGVjb3Jh
dGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKICAgICB7Ci0gICAgICAgIHRoaXMuX3RleHRFZGl0
b3IuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRv
bVVwZGF0ZXMoKTsKICAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5nIikK
ICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKGRlY29yYXRpb24pOwot
ICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLmVuZERvbVVwZGF0ZXMoKTsKKyAgICAgICAgdGhpcy5f
Y2h1bmtlZFBhbmVsLmVuZERvbVVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0xMjIz
LDcgKzEyMjMsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlw
ZSA9IHsKICAgICBleHBhbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmxp
bmVzQ291bnQgPT09IDEpCi0gICAgICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLl9zeW5jRGVjb3Jh
dGlvbnNGb3JMaW5lTGlzdGVuZXIodGhpcy5zdGFydExpbmUpOworICAgICAgICAgICAgdGhpcy5f
Y2h1bmtlZFBhbmVsLl9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIodGhpcy5zdGFydExp
bmUpOwogCiAgICAgICAgIGlmICh0aGlzLl9leHBhbmRlZCkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTEyMzMsNyArMTIzMyw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5saW5lc0NvdW50ID09PSAxKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuX3RleHRFZGl0b3IuYmVnaW5Eb21VcGRhdGVz
KCk7CisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRvbVVwZGF0ZXMoKTsKIAogICAg
ICAgICB0aGlzLl9leHBhbmRlZExpbmVSb3dzID0gW107CiAgICAgICAgIHZhciBwYXJlbnRFbGVt
ZW50ID0gdGhpcy5lbGVtZW50LnBhcmVudEVsZW1lbnQ7CkBAIC0xMjQzLDE1ICsxMjQzLDE1IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5wdXNoKGxpbmVSb3cpOwogICAgICAgICB9CiAg
ICAgICAgIHBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTsKLSAgICAgICAg
dGhpcy5fdGV4dEVkaXRvci5fc3luY0xpbmVIZWlnaHRMaXN0ZW5lcih0aGlzLl9leHBhbmRlZExp
bmVSb3dzWzBdKTsKKyAgICAgICAgdGhpcy5fY2h1bmtlZFBhbmVsLl9zeW5jTGluZUhlaWdodExp
c3RlbmVyKHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0pOwogCi0gICAgICAgIHRoaXMuX3RleHRF
ZGl0b3IuZW5kRG9tVXBkYXRlcygpOworICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuZW5kRG9t
VXBkYXRlcygpOwogICAgIH0sCiAKICAgICBjb2xsYXBzZTogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSkKLSAgICAgICAgICAgIHRoaXMuX3RleHRF
ZGl0b3IuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcih0aGlzLnN0YXJ0TGluZSk7Cisg
ICAgICAgICAgICB0aGlzLl9jaHVua2VkUGFuZWwuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0
ZW5lcih0aGlzLnN0YXJ0TGluZSk7CiAKICAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZCkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTEyNjEsNyArMTI2MSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5saW5lc0Nv
dW50ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuX3RleHRFZGl0
b3IuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5iZWdpbkRv
bVVwZGF0ZXMoKTsKIAogICAgICAgICB2YXIgZWxlbWVudEluc2VydGVkID0gZmFsc2U7CiAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGg7ICsr
aSkgewpAQCAtMTI3NCwxMSArMTI3NCwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRl
ckNodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
cGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHRoaXMuX3RleHRFZGl0b3IuX2NhY2hlZFJvd3MucHVzaChsaW5lUm93KTsKKyAgICAg
ICAgICAgIHRoaXMuX2NodW5rZWRQYW5lbC5fY2FjaGVkUm93cy5wdXNoKGxpbmVSb3cpOwogICAg
ICAgICB9CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9leHBhbmRlZExpbmVSb3dzOwogCi0gICAgICAg
IHRoaXMuX3RleHRFZGl0b3IuZW5kRG9tVXBkYXRlcygpOworICAgICAgICB0aGlzLl9jaHVua2Vk
UGFuZWwuZW5kRG9tVXBkYXRlcygpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEyODcsOCArMTI4
Nyw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlID0gewog
ICAgIGdldCBoZWlnaHQoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVS
b3dzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRFZGl0b3IuX3RvdGFsSGVpZ2h0KHRo
aXMuZWxlbWVudCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl90ZXh0RWRpdG9yLl90b3RhbEhlaWdo
dCh0aGlzLl9leHBhbmRlZExpbmVSb3dzWzBdLCB0aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMu
X2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoIC0gMV0pOworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2NodW5rZWRQYW5lbC50b3RhbEhlaWdodCh0aGlzLmVsZW1lbnQpOworICAgICAgICByZXR1cm4g
dGhpcy5fY2h1bmtlZFBhbmVsLnRvdGFsSGVpZ2h0KHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbMF0s
IHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGggLSAx
XSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTMwNSw3ICsxMzA1LDcgQEAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX2NyZWF0
ZVJvdzogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBsaW5lUm93ID0g
dGhpcy5fdGV4dEVkaXRvci5fY2FjaGVkUm93cy5wb3AoKSB8fCBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgdmFyIGxpbmVSb3cgPSB0aGlzLl9jaHVua2VkUGFuZWwuX2Nh
Y2hlZFJvd3MucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAg
IGxpbmVSb3cubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CiAgICAgICAgIGxpbmVSb3cuY2xhc3NO
YW1lID0gIndlYmtpdC1saW5lLW51bWJlciI7CiAgICAgICAgIGxpbmVSb3cudGV4dENvbnRlbnQg
PSBsaW5lTnVtYmVyICsgMTsKQEAgLTEzMTksNiArMTMxOSw4IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yR3V0dGVyQ2h1bmsucHJvdG90eXBlID0gewogICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckRlbGVnYXRlfSBkZWxlZ2F0ZQogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1vZGVsfSB0ZXh0TW9kZWwKICAqIEBwYXJhbSB7P3N0cmluZ30gdXJsCisgKiBAcGFy
YW0ge2Z1bmN0aW9uKCl9IHN5bmNTY3JvbGxMaXN0ZW5lcgorICogQHBhcmFtIHtmdW5jdGlvbihu
dW1iZXIpfSBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIKICAqLwogV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgdGV4dE1vZGVsLCB1cmws
IHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKQogewpA
QCAtMTMzMiw3ICsxMzM0LDYgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBm
dW5jdGlvbihkZWxlZ2F0ZSwgdGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGwKICAgICB0aGlzLl9o
aWdobGlnaHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyKHRleHRN
b2RlbCwgdGhpcy5faGlnaGxpZ2h0RGF0YVJlYWR5LmJpbmQodGhpcykpOwogICAgIHRoaXMuX3Jl
YWRPbmx5ID0gdHJ1ZTsKIAotICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwogICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAidGV4dC1lZGl0b3ItY29u
dGVudHMiOwogICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IDA7CiAKQEAgLTEzNDEsMjQgKzEz
NDIsNTMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbihkZWxl
Z2F0ZSwgdGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGwKICAgICB0aGlzLl9jb250YWluZXIudGFi
SW5kZXggPSAwOwogICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIp
OwogCi0gICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Nj
cm9sbC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImZvY3VzIiwgdGhpcy5faGFuZGxlRWxlbWVudEZvY3VzLmJpbmQodGhpcyksIGZhbHNlKTsK
KyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5faGFu
ZGxlVGV4dElucHV0LmJpbmQodGhpcyksIGZhbHNlKTsKKworICAgIHRoaXMuX2NvbnRhaW5lci5h
ZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIHRoaXMuX2hhbmRsZUZvY3VzZWQuYmluZCh0aGlzKSwg
ZmFsc2UpOwogCiAgICAgdGhpcy5fZnJlZUNhY2hlZEVsZW1lbnRzKCk7Ci0gICAgdGhpcy5fYnVp
bGRDaHVua3MoKTsKKyAgICB0aGlzLmJ1aWxkQ2h1bmtzKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKLSAgICBfd2FzU2hvd246IGZ1bmN0aW9u
KCkKKyAgICB3YXNTaG93bjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5faXNTaG93
aW5nID0gdHJ1ZTsKICAgICAgICAgdGhpcy5fYXR0YWNoTXV0YXRpb25PYnNlcnZlcigpOwogICAg
IH0sCiAKLSAgICBfd2lsbEhpZGU6IGZ1bmN0aW9uKCkKKyAgICB3aWxsSGlkZTogZnVuY3Rpb24o
KQogICAgIHsKICAgICAgICAgdGhpcy5fZGV0YWNoTXV0YXRpb25PYnNlcnZlcigpOwogICAgICAg
ICB0aGlzLl9pc1Nob3dpbmcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZnJlZUNhY2hlZEVsZW1l
bnRzKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZXZlbnRU
YXJnZXQKKyAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZXh0TWVudX0gY29udGV4dE1l
bnUKKyAgICAgKi8KKyAgICBjb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnRUYXJnZXQsIGNvbnRl
eHRNZW51KQorICAgIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuX2VuY2xvc2luZ0xpbmVS
b3dPclNlbGYoZXZlbnRUYXJnZXQpOworICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5wb3B1bGF0ZVRl
eHRBcmVhQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHRhcmdldCAmJiB0YXJnZXQubGluZU51bWJl
cik7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlRleHRS
YW5nZX0gdGV4dFJhbmdlCisgICAgICovCisgICAgc2V0U2VsZWN0aW9uOiBmdW5jdGlvbih0ZXh0
UmFuZ2UpCisgICAgeworICAgICAgICB0aGlzLl9sYXN0U2VsZWN0aW9uID0gdGV4dFJhbmdlOwor
ICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzQW5jZXN0b3IoZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dCkpCisgICAgICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHRleHRSYW5nZSk7CisgICAg
fSwKKworICAgIF9oYW5kbGVGb2N1c2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fbGFzdFNlbGVjdGlvbikKKyAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMu
X2xhc3RTZWxlY3Rpb24pOwogICAgIH0sCiAKICAgICBfYXR0YWNoTXV0YXRpb25PYnNlcnZlcjog
ZnVuY3Rpb24oKQpAQCAtMTUxOSw2ICsxNTQ5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtib29sZWFu
fSByZWRvCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgKi8KICAgICBoYW5kbGVVbmRv
UmVkbzogZnVuY3Rpb24ocmVkbykKICAgICB7CkBAIC0xNTQwLDEzICsxNTcxLDE0IEBAIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hpZnRLZXkKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQog
ICAgICAqLwogICAgIGhhbmRsZVRhYktleVByZXNzOiBmdW5jdGlvbihzaGlmdEtleSkKICAgICB7
CiAgICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAg
ICB2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKCFzZWxl
Y3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE1NzcsNyArMTYwOSw3IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
aWYgKHRoaXMucmVhZE9ubHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICB2YXIgcmFuZ2UgPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmFyIHJhbmdlID0g
dGhpcy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTYyMywxMSArMTY1NSwxMiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVO
dW1iZXIKICAgICAgKiBAcGFyYW0ge251bWJlcn0gY2h1bmtOdW1iZXIKICAgICAgKiBAcGFyYW0g
e2Jvb2xlYW49fSBjcmVhdGVTdWZmaXhDaHVuaworICAgICAqIEByZXR1cm4ge09iamVjdH0KICAg
ICAgKi8KLSAgICBfc3BsaXRDaHVua09uQUxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNodW5r
TnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuaykKKyAgICBzcGxpdENodW5rT25BTGluZTogZnVuY3Rp
b24obGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0ZVN1ZmZpeENodW5rKQogICAgIHsKLSAg
ICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICB2YXIg
Y2h1bmsgPSBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3Nw
bGl0Q2h1bmtPbkFMaW5lLmNhbGwodGhpcywgbGluZU51bWJlciwgY2h1bmtOdW1iZXIsIGNyZWF0
ZVN1ZmZpeENodW5rKTsKKyAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9u
KCk7CisgICAgICAgIHZhciBjaHVuayA9IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBh
bmVsLnByb3RvdHlwZS5zcGxpdENodW5rT25BTGluZS5jYWxsKHRoaXMsIGxpbmVOdW1iZXIsIGNo
dW5rTnVtYmVyLCBjcmVhdGVTdWZmaXhDaHVuayk7CiAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxl
Y3Rpb24oc2VsZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIGNodW5rOwogICAgIH0sCkBAIC0xNjQ2
LDE5ICsxNjc5LDIwIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2F0dGFjaE11dGF0aW9uT2JzZXJ2ZXIoKTsKICAgICB9
LAogCi0gICAgX2J1aWxkQ2h1bmtzOiBmdW5jdGlvbigpCisgICAgYnVpbGRDaHVua3M6IGZ1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQ7ICsraSkKICAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5yZW1vdmVBdHRy
aWJ1dGUoaSwgImhpZ2hsaWdodCIpOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
Q2h1bmtlZFBhbmVsLnByb3RvdHlwZS5fYnVpbGRDaHVua3MuY2FsbCh0aGlzKTsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlLmJ1aWxkQ2h1bmtz
LmNhbGwodGhpcyk7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBz
dGFydExpbmUKICAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQorICAgICAqIEByZXR1cm4g
e1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rfQogICAgICAqLwotICAgIF9jcmVhdGVO
ZXdDaHVuazogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lKQorICAgIGNyZWF0ZU5ld0NodW5r
OiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKHRoaXMsIHN0YXJ0TGluZSwgZW5kTGlu
ZSk7CiAgICAgfSwKQEAgLTE2NjcsMTkgKzE3MDEsMTkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5k
ZXgKICAgICAgKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleAogICAgICAqLwotICAgIF9leHBhbmRD
aHVua3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkKKyAgICBleHBhbmRDaHVua3M6IGZ1
bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkKICAgICB7CiAgICAgICAgIHZhciBsYXN0Q2h1bmsg
PSB0aGlzLl90ZXh0Q2h1bmtzW3RvSW5kZXggLSAxXTsKICAgICAgICAgdmFyIGxhc3RWaXNpYmxl
TGluZSA9IGxhc3RDaHVuay5zdGFydExpbmUgKyBsYXN0Q2h1bmsubGluZXNDb3VudDsKIAotICAg
ICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHZhciBz
ZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpOwogCiAgICAgICAgIHRoaXMuX211dGVIaWdo
bGlnaHRMaXN0ZW5lciA9IHRydWU7CiAgICAgICAgIHRoaXMuX2hpZ2hsaWdodGVyLmhpZ2hsaWdo
dChsYXN0VmlzaWJsZUxpbmUpOwogICAgICAgICBkZWxldGUgdGhpcy5fbXV0ZUhpZ2hsaWdodExp
c3RlbmVyOwogCiAgICAgICAgIHRoaXMuX3Jlc3RvcmVQYWludExpbmVzT3BlcmF0aW9uc0NyZWRp
dCgpOwotICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5
cGUuX2V4cGFuZENodW5rcy5jYWxsKHRoaXMsIGZyb21JbmRleCwgdG9JbmRleCk7CisgICAgICAg
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS5leHBhbmRDaHVu
a3MuY2FsbCh0aGlzLCBmcm9tSW5kZXgsIHRvSW5kZXgpOwogICAgICAgICB0aGlzLl9hZGp1c3RQ
YWludExpbmVzT3BlcmF0aW9uc1JlZnJlc2hWYWx1ZSgpOwogCiAgICAgICAgIHRoaXMuX3Jlc3Rv
cmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKQEAgLTE3MDcsNyArMTc0MSw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBpZiAoIXRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMpIHsKLSAgICAgICAgICAg
IHRoaXMuX3NjaGVkdWxlZFBhaW50TGluZXMgPSBbIHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVu
ZExpbmU6IGVuZExpbmUgfSBdOworICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkUGFpbnRMaW5l
cyA9IFt7IHN0YXJ0TGluZTogc3RhcnRMaW5lLCBlbmRMaW5lOiBlbmRMaW5lIH1dOwogICAgICAg
ICAgICAgdGhpcy5fcGFpbnRTY2hlZHVsZWRMaW5lc1RpbWVyID0gc2V0VGltZW91dCh0aGlzLl9w
YWludFNjaGVkdWxlZExpbmVzLmJpbmQodGhpcyksIDApOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zY2hlZHVsZWRQYWludExpbmVzLmxl
bmd0aDsgKytpKSB7CkBAIC0xNzc0LDEzICsxODA4LDEzIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IGZyb21MaW5lIGluY2x1c2l2ZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0
b0xpbmUgZXhjbHVzaXZlCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21MaW5lCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IHRvTGluZQogICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHJlc3RvcmVT
ZWxlY3Rpb24KICAgICAgKi8KICAgICBfcGFpbnRMaW5lczogZnVuY3Rpb24oZnJvbUxpbmUsIHRv
TGluZSwgcmVzdG9yZVNlbGVjdGlvbikKICAgICB7Ci0gICAgICAgIHRoaXMuX3BhaW50TGluZUNo
dW5rcyhbIHsgc3RhcnRMaW5lOiBmcm9tTGluZSwgZW5kTGluZTogdG9MaW5lIH0gXSwgcmVzdG9y
ZVNlbGVjdGlvbik7CisgICAgICAgIHRoaXMuX3BhaW50TGluZUNodW5rcyhbeyBzdGFydExpbmU6
IGZyb21MaW5lLCBlbmRMaW5lOiB0b0xpbmUgfV0sIHJlc3RvcmVTZWxlY3Rpb24pOwogICAgIH0s
CiAKICAgICAvKioKQEAgLTE3OTAsOCArMTgyNCw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIC8vIEZpcnN0LCBwYWludCB2
aXNpYmxlIGxpbmVzLCBzbyB0aGF0IGluIGNhc2Ugb2YgbG9uZyBsaW5lcyB3ZSBzaG91bGQgc3Rh
cnQgaGlnaGxpZ2h0aW5nCiAgICAgICAgIC8vIHRoZSB2aXNpYmxlIGFyZWEgaW1tZWRpYXRlbHks
IGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGxpbmVzIGFib3ZlIHRoZSB2aXNpYmxlIGFyZWEu
Ci0gICAgICAgIHZhciB2aXNpYmxlRnJvbSA9IHRoaXMuX3Njcm9sbFRvcCgpOwotICAgICAgICB2
YXIgZmlyc3RWaXNpYmxlTGluZU51bWJlciA9IHRoaXMuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVt
YmVyKHZpc2libGVGcm9tKTsKKyAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5zY3JvbGxU
b3AoKTsKKyAgICAgICAgdmFyIGZpcnN0VmlzaWJsZUxpbmVOdW1iZXIgPSB0aGlzLmxpbmVOdW1i
ZXJBdE9mZnNldCh2aXNpYmxlRnJvbSk7CiAKICAgICAgICAgdmFyIGNodW5rOwogICAgICAgICB2
YXIgc2VsZWN0aW9uOwpAQCAtMTgxMyw3ICsxODQ3LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHJlc3RvcmVTZWxlY3Rpb24g
JiYgIXNlbGVjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5fZ2V0
U2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2Vs
ZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGxpbmVSb3cpOwogICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9wYWludExpbmVzT3BlcmF0aW9uc0NyZWRpdCA8IDApIHsK
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVQYWludExpbmVzKGxpbmVOdW1iZXIg
KyAxLCBsaW5lQ2h1bmsuZW5kTGluZSk7CkBAIC0xODI0LDcgKzE4NTgsNyBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpbnZpc2libGVMaW5lUm93cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAg
aWYgKHJlc3RvcmVTZWxlY3Rpb24gJiYgIXNlbGVjdGlvbikKLSAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24g
PSB0aGlzLmdldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lKGludmlz
aWJsZUxpbmVSb3dzW2ldKTsKICAgICAgICAgfQogCkBAIC0xOTE5LDcgKzE5NTMsNyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFt
IHs/Tm9kZT19IGxhc3RVbmRhbWFnZWRMaW5lUm93CiAgICAgICogQHJldHVybiB7V2ViSW5zcGVj
dG9yLlRleHRSYW5nZX0KICAgICAgKi8KLSAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsYXN0
VW5kYW1hZ2VkTGluZVJvdykKKyAgICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGxhc3RVbmRhbWFn
ZWRMaW5lUm93KQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkKQEAgLTE5MzIsNiAr
MTk2NiwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydC5saW5lLCBz
dGFydC5jb2x1bW4sIGVuZC5saW5lLCBlbmQuY29sdW1uKTsKICAgICB9LAogCisgICAgZ2V0TGFz
dFNlbGVjdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RT
ZWxlY3Rpb247CisgICAgfSwKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IHNj
cm9sbEludG9WaWV3CiAgICAgICovCkBAIC0xOTU5LDYgKzE5OTgsNyBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICogQHBhcmFtIHtOb2RlfSBj
b250YWluZXIKICAgICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0CiAgICAgICogQHBhcmFtIHs/
Tm9kZT19IGxhc3RVbmRhbWFnZWRMaW5lUm93CisgICAgICogQHJldHVybiB7e2xpbmU6IG51bWJl
ciwgY29sdW1uOiBudW1iZXJ9fQogICAgICAqLwogICAgIF9zZWxlY3Rpb25Ub1Bvc2l0aW9uOiBm
dW5jdGlvbihjb250YWluZXIsIG9mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpCiAgICAgewpA
QCAtMjAzMyw2ICsyMDczLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lCiAgICAgICog
QHBhcmFtIHtudW1iZXJ9IGNvbHVtbgorICAgICAqIEByZXR1cm4ge3tjb250YWluZXI6IEVsZW1l
bnQsIG9mZnNldDogbnVtYmVyfX0KICAgICAgKi8KICAgICBfcG9zaXRpb25Ub1NlbGVjdGlvbjog
ZnVuY3Rpb24obGluZSwgY29sdW1uKQogICAgIHsKQEAgLTIwNTYsNiArMjA5Nyw3IEBAIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudAorICAgICAqIEByZXR1cm4gez9Ob2RlfQogICAgICAq
LwogICAgIF9lbmNsb3NpbmdMaW5lUm93T3JTZWxmOiBmdW5jdGlvbihlbGVtZW50KQogICAgIHsK
QEAgLTIxMTUsMTEgKzIxNTcsMTIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50CiAg
ICAgICogQHBhcmFtIHtib29sZWFufSBpc0V4dGVybmFsCisgICAgICogQHJldHVybiB7RWxlbWVu
dH0KICAgICAgKi8KICAgICBfY3JlYXRlTGluazogZnVuY3Rpb24oY29udGVudCwgaXNFeHRlcm5h
bCkKICAgICB7CiAgICAgICAgIHZhciBxdW90ZSA9IGNvbnRlbnQuY2hhckF0KDApOwotICAgICAg
ICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0gIlwiIiB8fCAgIHF1b3RlID09
PSAiJyIpKQorICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxICYmIChxdW90ZSA9PT0gIlwi
IiB8fCBxdW90ZSA9PT0gIiciKSkKICAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0
cmluZygxLCBjb250ZW50Lmxlbmd0aCAtIDEpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBx
dW90ZSA9IG51bGw7CkBAIC0yMjI3LDggKzIyNzAsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkTGluZU51
bWJlciA9IGRpcnR5TGluZXMuc3RhcnQgLSAxOyAvLyBDYW4gYmUgLTEKICAgICAgICAgdmFyIGZp
cnN0VW5kYW1hZ2VkTGluZU51bWJlciA9IGRpcnR5TGluZXMuZW5kICsgMTsgLy8gQ2FuIGJlIHRo
aXMuX3RleHRNb2RlbC5saW5lc0NvdW50CiAKLSAgICAgICAgdmFyIGxhc3RVbmRhbWFnZWRMaW5l
Q2h1bmsgPSBsYXN0VW5kYW1hZ2VkTGluZU51bWJlciA+PSAwID8gdGhpcy5fdGV4dENodW5rc1t0
aGlzLl9jaHVua051bWJlckZvckxpbmUobGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7
Ci0gICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZExpbmVDaHVuayA9IGZpcnN0VW5kYW1hZ2VkTGlu
ZU51bWJlciAgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCA/IHRoaXMuX3RleHRDaHVua3Nb
dGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlcildIDogbnVs
bDsKKyAgICAgICAgdmFyIGxhc3RVbmRhbWFnZWRMaW5lQ2h1bmsgPSBsYXN0VW5kYW1hZ2VkTGlu
ZU51bWJlciA+PSAwID8gdGhpcy5fdGV4dENodW5rc1t0aGlzLmNodW5rTnVtYmVyRm9yTGluZShs
YXN0VW5kYW1hZ2VkTGluZU51bWJlcildIDogbnVsbDsKKyAgICAgICAgdmFyIGZpcnN0VW5kYW1h
Z2VkTGluZUNodW5rID0gZmlyc3RVbmRhbWFnZWRMaW5lTnVtYmVyIDwgdGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQgPyB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuY2h1bmtOdW1iZXJGb3JMaW5lKGZp
cnN0VW5kYW1hZ2VkTGluZU51bWJlcildIDogbnVsbDsKIAogICAgICAgICB2YXIgY29sbGVjdExp
bmVzRnJvbU5vZGUgPSBsYXN0VW5kYW1hZ2VkTGluZUNodW5rID8gbGFzdFVuZGFtYWdlZExpbmVD
aHVuay5saW5lUm93Q29udGFpbmluZ0xpbmUobGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpIDogbnVs
bDsKICAgICAgICAgdmFyIGNvbGxlY3RMaW5lc1RvTm9kZSA9IGZpcnN0VW5kYW1hZ2VkTGluZUNo
dW5rID8gZmlyc3RVbmRhbWFnZWRMaW5lQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGZpcnN0
VW5kYW1hZ2VkTGluZU51bWJlcikgOiBudWxsOwpAQCAtMjI0OSw3ICsyMjkyLDcgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAg
IGVkaXRJbmZvID0gbmV3IFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mbyhy
YW5nZSwgbGluZXMuam9pbigiXG4iKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgc2VsZWN0
aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsKKyAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsK
IAogICAgICAgICAvLyBVbmluZGVudCBhZnRlciBibG9jawogICAgICAgICBpZiAoZWRpdEluZm8u
dGV4dCA9PT0gIn0iICYmIGVkaXRJbmZvLnJhbmdlLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24uaXNF
bXB0eSgpICYmICF0aGlzLl90ZXh0TW9kZWwubGluZShlZGl0SW5mby5yYW5nZS5lbmRMaW5lKS50
cmltKCkpIHsKQEAgLTIzMTIsNyArMjM1NSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFp
blBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgZG9tTW9kZWwuZWRpdFJhbmdlKHJhbmdlLnNo
aWZ0KC1jbG9uZUZyb21MaW5lKSwgdGV4dElucHV0RGF0YSk7CiAKICAgICAgICAgLy8gVGhlbiB3
ZSdsbCB0ZXN0IGlmIHRoaXMgbmV3IG1vZGVsIG1hdGNoZXMgdGhlIERPTSBsaW5lcy4KLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7ICBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKGRv
bU1vZGVsLmxpbmUoaSArIHN0YXJ0TGluZSAtIGNsb25lRnJvbUxpbmUpICE9PSBsaW5lc1tpXSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQpAQCAtMjM4OCw3ICsyNDMx
LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAqLwogICAgIF9yZW1vdmVEZWNvcmF0aW9uc0luUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQogICAg
IHsKLSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShyYW5nZS5z
dGFydExpbmUpOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICBm
b3IgKHZhciBpID0gdGhpcy5jaHVua051bWJlckZvckxpbmUocmFuZ2Uuc3RhcnRMaW5lKTsgaSA8
IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHZhciBjaHVuayA9
IHRoaXMuX3RleHRDaHVua3NbaV07CiAgICAgICAgICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lID4g
cmFuZ2UuZW5kTGluZSkKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0MDIsNyArMjQ0NSw3
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
Ki8KICAgICBfdXBkYXRlQ2h1bmtzRm9yUmFuZ2VzOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFu
Z2UpCiAgICAgewotICAgICAgICB2YXIgZmlyc3REYW1hZ2VkQ2h1bmtOdW1iZXIgPSB0aGlzLl9j
aHVua051bWJlckZvckxpbmUob2xkUmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgdmFyIGZpcnN0
RGFtYWdlZENodW5rTnVtYmVyID0gdGhpcy5jaHVua051bWJlckZvckxpbmUob2xkUmFuZ2Uuc3Rh
cnRMaW5lKTsKICAgICAgICAgdmFyIGxhc3REYW1hZ2VkQ2h1bmtOdW1iZXIgPSBmaXJzdERhbWFn
ZWRDaHVua051bWJlcjsKICAgICAgICAgd2hpbGUgKGxhc3REYW1hZ2VkQ2h1bmtOdW1iZXIgKyAx
IDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGgpIHsKICAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0
Q2h1bmtzW2xhc3REYW1hZ2VkQ2h1bmtOdW1iZXIgKyAxXS5zdGFydExpbmUgPiBvbGRSYW5nZS5l
bmRMaW5lKQpAQCAtMjQ1OCw3ICsyNTAxLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY2h1bmtTaXplID0gTWF0aC5jZWlsKGxp
bmVTcGFuIC8gTWF0aC5jZWlsKGxpbmVTcGFuIC8gdGhpcy5fZGVmYXVsdENodW5rU2l6ZSkpOwog
CiAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5lOyBpICs9IGNodW5r
U2l6ZSkgewotICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsoaSwg
TWF0aC5taW4oZW5kTGluZSwgaSArIGNodW5rU2l6ZSkpOworICAgICAgICAgICAgdmFyIGNodW5r
ID0gdGhpcy5jcmVhdGVOZXdDaHVuayhpLCBNYXRoLm1pbihlbmRMaW5lLCBpICsgY2h1bmtTaXpl
KSk7CiAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzLnNwbGljZShpbnNlcnRpb25JbmRleCsr
LCAwLCBjaHVuayk7CiAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuaW5zZXJ0QmVmb3JlKGNo
dW5rLmVsZW1lbnQsIHJlbW92ZURPTVRvTm9kZSk7CiAgICAgICAgIH0KQEAgLTI0NzEsMTAgKzI1
MTQsMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAqLwogICAgIF91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKQog
ICAgIHsKLSAgICAgICAgdmFyIHZpc2libGVGcm9tID0gdGhpcy5fc2Nyb2xsVG9wKCk7Ci0gICAg
ICAgIHZhciB2aXNpYmxlVG8gPSB2aXNpYmxlRnJvbSArIHRoaXMuX2NsaWVudEhlaWdodCgpOwor
ICAgICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLnNjcm9sbFRvcCgpOworICAgICAgICB2YXIg
dmlzaWJsZVRvID0gdmlzaWJsZUZyb20gKyB0aGlzLmNsaWVudEhlaWdodCgpOwogCi0gICAgICAg
IHZhciByZXN1bHQgPSB0aGlzLl9maW5kVmlzaWJsZUNodW5rcyh2aXNpYmxlRnJvbSwgdmlzaWJs
ZVRvKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuZmluZFZpc2libGVDaHVua3ModmlzaWJs
ZUZyb20sIHZpc2libGVUbyk7CiAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3Nb
cmVzdWx0LmVuZCAtIDFdOwogICAgICAgICB2YXIgbGFzdFZpc2libGVMaW5lID0gY2h1bmsuc3Rh
cnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsKIApAQCAtMjQ4NCwxMSArMjUyNywxMSBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB1
cGRhdGVkID0gdGhpcy5faGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KHJhbmdlLnN0YXJ0TGlu
ZSwgbGFzdFZpc2libGVMaW5lKTsKICAgICAgICAgaWYgKCF1cGRhdGVkKSB7CiAgICAgICAgICAg
ICAvLyBIaWdobGlnaHRzIGZvciB0aGUgY2h1bmtzIGJlbG93IGFyZSBpbnZhbGlkLCBzbyBqdXN0
IGNvbGxhcHNlIHRoZW0uCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtOdW1i
ZXJGb3JMaW5lKHJhbmdlLnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsg
KytpKQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2h1bmtOdW1iZXJGb3JMaW5lKHJh
bmdlLnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKQogICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uY29sbGFwc2UoKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKKyAgICAgICAgdGhpcy5yZXBhaW50QWxsKCk7CiAg
ICAgfSwKIAogICAgIC8qKgpAQCAtMjUyMywxNCArMjU2Niw0MSBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0ZXh0Q29udGVu
dC5zcGxpdCgiXG4iKTsKICAgICB9LAogCi0gICAgX2hhbmRsZVNlbGVjdGlvbkNoYW5nZTogZnVu
Y3Rpb24oZXZlbnQpCisgICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihldmVudCkK
ICAgICB7Ci0gICAgICAgIHZhciB0ZXh0UmFuZ2UgPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKKyAg
ICAgICAgdmFyIHRleHRSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICh0
ZXh0UmFuZ2UpCiAgICAgICAgICAgICB0aGlzLl9sYXN0U2VsZWN0aW9uID0gdGV4dFJhbmdlOwog
ICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zZWxlY3Rpb25DaGFuZ2VkKHRleHRSYW5nZSk7CiAgICAg
fSwKIAorICAgIF9oYW5kbGVUZXh0SW5wdXQ6IGZ1bmN0aW9uKGUpCisgICAgeworICAgICAgICB0
aGlzLl90ZXh0SW5wdXREYXRhID0gZS5kYXRhOworICAgIH0sCisKKyAgICBoYW5kbGVLZXlEb3du
OiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdGhpcy5fa2V5RG93bkNvZGUgPSBlLmtleUNv
ZGU7CisgICAgfSwKKworICAgIGhhbmRsZUN1dDogZnVuY3Rpb24oZSkKKyAgICB7CisgICAgICAg
IHRoaXMuX2tleURvd25Db2RlID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5E
ZWxldGUuY29kZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNj
cm9sbFRvcAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjbGllbnRIZWlnaHQKKyAgICAgKiBAcGFy
YW0ge251bWJlcn0gY2h1bmtTaXplCisgICAgICovCisgICAgb3ZlcnJpZGVWaWV3cG9ydEZvclRl
c3Q6IGZ1bmN0aW9uKHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBjaHVua1NpemUpCisgICAgewor
ICAgICAgICB0aGlzLl9zY3JvbGxUb3BPdmVycmlkZUZvclRlc3QgPSBzY3JvbGxUb3A7CisgICAg
ICAgIHRoaXMuX2NsaWVudEhlaWdodE92ZXJyaWRlRm9yVGVzdCA9IGNsaWVudEhlaWdodDsKKyAg
ICAgICAgdGhpcy5fZGVmYXVsdENodW5rU2l6ZSA9IGNodW5rU2l6ZTsKKyAgICB9LAorCiAgICAg
X19wcm90b19fOiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUK
IH0KIApAQCAtMjcwNSw4ICsyNzc1LDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlID0gewogICAgIGdldCBoZWlnaHQoKQogICAgIHsKICAgICAgICAgaWYgKCF0
aGlzLl9leHBhbmRlZExpbmVSb3dzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NodW5rZWRQ
YW5lbC5fdG90YWxIZWlnaHQodGhpcy5lbGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2No
dW5rZWRQYW5lbC5fdG90YWxIZWlnaHQodGhpcy5fZXhwYW5kZWRMaW5lUm93c1swXSwgdGhpcy5f
ZXhwYW5kZWRMaW5lUm93c1t0aGlzLl9leHBhbmRlZExpbmVSb3dzLmxlbmd0aCAtIDFdKTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9jaHVua2VkUGFuZWwudG90YWxIZWlnaHQodGhpcy5lbGVt
ZW50KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NodW5rZWRQYW5lbC50b3RhbEhlaWdodCh0aGlz
Ll9leHBhbmRlZExpbmVSb3dzWzBdLCB0aGlzLl9leHBhbmRlZExpbmVSb3dzW3RoaXMuX2V4cGFu
ZGVkTGluZVJvd3MubGVuZ3RoIC0gMV0pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTI3ODEsNiAr
Mjg1MSw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkTGluZVJvd3MgPyB0aGlzLl9leHBhbmRlZExp
bmVSb3dzWzBdIDogdGhpcy5lbGVtZW50OwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcmV0
dXJuIHtFbGVtZW50fQorICAgICAqLwogICAgIGxhc3RFbGVtZW50OiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRMaW5lUm93cyA/IHRoaXMuX2V4cGFuZGVk
TGluZVJvd3NbdGhpcy5fZXhwYW5kZWRMaW5lUm93cy5sZW5ndGggLSAxXSA6IHRoaXMuZWxlbWVu
dDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA0YjIwODIwOTJlZWVlYTFhMzU1ZGEzZGVlZGYxNGUxYjJiZTdiNTk2Li43ZDQw
OWRhMDczYjhiZjQ2ZmExY2ZhMzY4YjkzMmE4ODg4N2IzMDdiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTItMTItMjcgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0uY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlZmFjdG9yIERlZmF1bHRUZXh0RWRpdG9yJ3Mg
cHJpdmF0ZSBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDU3OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGaXggdGVzdCB0byBjb3JyZXNwb25kIHRvIG1ldGhvZCByZW5hbWluZ3Mgb2YgVGV4
dEVkaXRvck1haW5QYW5lbC4KKworICAgICAgICAqIGluc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0
b3Itc2VsZWN0aW9uLmh0bWw6CisKIDIwMTItMTItMjcgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1
c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZS5wcm9m
aWxlRW5kKCkgY3Jhc2hlcyBpZiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0b3Itc2VsZWN0aW9uLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWRpdG9yL3RleHQtZWRpdG9yLXNlbGVjdGlvbi5odG1s
CmluZGV4IGE1NzNjMDc3M2ZmMWFlOTc3OTY5ZDcyNWFkYTM0ZTQ3NzI1OTM2MTMuLmM1NTI5ZWQ5
MTFjZDFlNThkYzJiOGUxOTAxMmY5MmRjOGRjNWNmYTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9lZGl0b3IvdGV4dC1lZGl0b3Itc2VsZWN0aW9uLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2VkaXRvci90ZXh0LWVkaXRvci1zZWxlY3Rpb24uaHRtbApAQCAtMTUs
NyArMTUsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIHZhciBjaHVua3MgPSB0ZXh0
RWRpdG9yLl9tYWluUGFuZWwuX3RleHRDaHVua3M7CiAgICAgICAgICAgICB2YXIgbGFzdENodW5r
ID0gY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGxhc3RDaHVuay5lbGVtZW50LCAwLCBsYXN0Q2h1bmsu
ZWxlbWVudCwgMCk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0RWRp
dG9yLl9tYWluUGFuZWwuX2dldFNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KHRleHRFZGl0b3IuX21haW5QYW5lbC5nZXRTZWxlY3Rpb24oKSk7CiAgICAg
ICAgICAgICBuZXh0KCk7CiAgICAgICAgIH0sCiAKQEAgLTI0LDcgKzI0LDcgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgICAgICB2YXIgY2h1bmtzID0gdGV4dEVkaXRvci5fbWFpblBhbmVsLl90
ZXh0Q2h1bmtzOwogICAgICAgICAgICAgdmFyIGxhc3RDaHVuayA9IGNodW5rc1tjaHVua3MubGVu
Z3RoIC0gMV07CiAgICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4
dGVudChsYXN0Q2h1bmsuZWxlbWVudCwgMSwgbGFzdENodW5rLmVsZW1lbnQsIDEpOwotICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLl9nZXRT
ZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0RWRp
dG9yLl9tYWluUGFuZWwuZ2V0U2VsZWN0aW9uKCkpOwogICAgICAgICAgICAgbmV4dCgpOwogICAg
ICAgICB9LAogCkBAIC0zMyw3ICszMyw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAg
dmFyIGNodW5rcyA9IHRleHRFZGl0b3IuX21haW5QYW5lbC5fdGV4dENodW5rczsKICAgICAgICAg
ICAgIHZhciBsYXN0Q2h1bmsgPSBjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdOwogICAgICAgICAg
ICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQobGFzdENodW5rLmVsZW1l
bnQuZmlyc3RDaGlsZCwgMSwgbGFzdENodW5rLmVsZW1lbnQuZmlyc3RDaGlsZCwgMTEpOwotICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLl9n
ZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0
RWRpdG9yLl9tYWluUGFuZWwuZ2V0U2VsZWN0aW9uKCkpOwogICAgICAgICAgICAgbmV4dCgpOwog
ICAgICAgICB9LAogCkBAIC00Miw3ICs0Miw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAg
ICAgdmFyIGNodW5rcyA9IHRleHRFZGl0b3IuX21haW5QYW5lbC5fdGV4dENodW5rczsKICAgICAg
ICAgICAgIHZhciBmaXJzdENodW5rID0gY2h1bmtzWzBdOwogICAgICAgICAgICAgd2luZG93Lmdl
dFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoZmlyc3RDaHVuay5leHBhbmRlZExpbmVSb3co
MyksIDAsIGZpcnN0Q2h1bmsuZXhwYW5kZWRMaW5lUm93KDQpLCAxKTsKLSAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYWRkUmVzdWx0KHRleHRFZGl0b3IuX21haW5QYW5lbC5fZ2V0U2VsZWN0aW9u
KCkpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQodGV4dEVkaXRvci5fbWFp
blBhbmVsLmdldFNlbGVjdGlvbigpKTsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgfSwK
IApAQCAtNTEsNyArNTEsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIHZhciBjaHVu
a3MgPSB0ZXh0RWRpdG9yLl9tYWluUGFuZWwuX3RleHRDaHVua3M7CiAgICAgICAgICAgICB2YXIg
Zmlyc3RDaHVuayA9IGNodW5rc1swXTsKICAgICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24o
KS5zZXRCYXNlQW5kRXh0ZW50KGZpcnN0Q2h1bmsuZXhwYW5kZWRMaW5lUm93KDMpLmZpcnN0Q2hp
bGQsIDMsIGZpcnN0Q2h1bmsuZXhwYW5kZWRMaW5lUm93KDQpLmZpcnN0Q2hpbGQsIDQpOwotICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQodGV4dEVkaXRvci5fbWFpblBhbmVsLl9n
ZXRTZWxlY3Rpb24oKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCh0ZXh0
RWRpdG9yLl9tYWluUGFuZWwuZ2V0U2VsZWN0aW9uKCkpOwogICAgICAgICAgICAgbmV4dCgpOwog
ICAgICAgICB9LAogICAgIF0pOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>