<?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>54645</bug_id>
          
          <creation_ts>2011-02-17 06:15:24 -0800</creation_ts>
          <short_desc>Web Inspector: move source mapping from SourceFrame to ScriptsPanel.</short_desc>
          <delta_ts>2011-02-22 05:17:29 -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>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>352792</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-17 06:15:24 -0800</bug_when>
    <thetext>Web Inspector: move source mapping from SourceFrame to ScriptsPanel.
This is needed to map one script to several source files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352793</commentid>
    <comment_count>1</comment_count>
      <attachid>82787</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-17 06:16:29 -0800</bug_when>
    <thetext>Created attachment 82787
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352991</commentid>
    <comment_count>2</comment_count>
      <attachid>82787</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-17 09:55:25 -0800</bug_when>
    <thetext>Comment on attachment 82787
Patch.

Please provide layout test for this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353560</commentid>
    <comment_count>3</comment_count>
      <attachid>82951</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-18 06:27:39 -0800</bug_when>
    <thetext>Created attachment 82951
Patch + test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353564</commentid>
    <comment_count>4</comment_count>
      <attachid>82951</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-18 06:30:59 -0800</bug_when>
    <thetext>Comment on attachment 82951
Patch + test.

You seem to introduce a whole new functionality in the ScriptsPanel with couple of new maps. It would be great to see them implemented in a separate module.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353565</commentid>
    <comment_count>5</comment_count>
      <attachid>82953</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-18 06:32:05 -0800</bug_when>
    <thetext>Created attachment 82953
Patch + test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354463</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-21 01:45:07 -0800</bug_when>
    <thetext>This is the first step of scripts panel&apos;s refactoring (as described in bug 51175).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354490</commentid>
    <comment_count>7</comment_count>
      <attachid>82953</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-21 02:39:14 -0800</bug_when>
    <thetext>Comment on attachment 82953
Patch + test.

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

&gt; LayoutTests/http/tests/inspector/debugger-test.js:123
&gt; +        InspectorTest._addSniffer(WebInspector.panels.scripts, &quot;_addScriptToFilesMenu&quot;, InspectorTest.showScriptSource.bind(InspectorTest, scriptName, callback));

Nit: It is not clear what part of the functionality you intend to test: debugger model or scripts panel with this harness.

&gt; LayoutTests/http/tests/inspector/inspector-test.js:138
&gt; +InspectorTest.runTest = function(steps)

Please use runTestSuite or runDebuggerTestSuite.

&gt; LayoutTests/http/tests/inspector/inspector-test.js:149
&gt; +                InspectorTest.completeTest();

What if that was a debugger test?

&gt; Source/WebCore/inspector/front-end/ScriptsPanel.js:192
&gt; +    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);

It is strange that the client that adds breakpoints is listening to the breakpoints addition. r- for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354658</commentid>
    <comment_count>8</comment_count>
      <attachid>83178</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-21 10:04:13 -0800</bug_when>
    <thetext>Created attachment 83178
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354659</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-21 10:07:06 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 82953 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82953&amp;action=review
&gt; 
&gt; &gt; LayoutTests/http/tests/inspector/debugger-test.js:123
&gt; &gt; +        InspectorTest._addSniffer(WebInspector.panels.scripts, &quot;_addScriptToFilesMenu&quot;, InspectorTest.showScriptSource.bind(InspectorTest, scriptName, callback));
&gt; 
&gt; Nit: It is not clear what part of the functionality you intend to test: debugger model or scripts panel with this harness.

This is a helper method, it doesn&apos;t intend to test any functionality.

&gt; 
&gt; &gt; LayoutTests/http/tests/inspector/inspector-test.js:138
&gt; &gt; +InspectorTest.runTest = function(steps)
&gt; 
&gt; Please use runTestSuite or runDebuggerTestSuite.

Done.

&gt; 
&gt; &gt; LayoutTests/http/tests/inspector/inspector-test.js:149
&gt; &gt; +                InspectorTest.completeTest();
&gt; 
&gt; What if that was a debugger test?

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ScriptsPanel.js:192
&gt; &gt; +    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
&gt; 
&gt; It is strange that the client that adds breakpoints is listening to the breakpoints addition. r- for that.

We have two clients - SourceFrame and BreakpointsSidebarPane. It&apos;s impossible to fix this right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354660</commentid>
    <comment_count>10</comment_count>
      <attachid>83178</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-21 10:10:44 -0800</bug_when>
    <thetext>Comment on attachment 83178
Patch.

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

&gt; LayoutTests/http/tests/inspector/debugger-test.js:3
&gt; +InspectorTest.runDebuggerTestSuite = function(steps)

There already is a runDebuggerTestSuite, why not to use existing one?

&gt; LayoutTests/inspector/debugger/source-frame.html:16
&gt; +        function(next) {

A bunch of nits:
- { on the next line
- Tests should have names
- Only tests should be first class citizens in the test suite, not their steps. How many tests are here?

&gt; LayoutTests/inspector/debugger/source-frame.html:22
&gt; +        function(next, sourceFrame) {

what is sourceFrame? where is it taken from?

&gt; LayoutTests/inspector/debugger/source-frame.html:35
&gt; +            InspectorTest.completeDebuggerTest();

This is not neeeded in the existing runDebuggerTestSuite.

&gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:36
&gt; +    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);

If debugger presentation model is the only listener of the debugger model, why does it listen to addition of the breakpoints? I don&apos;t think you addressed my only concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354666</commentid>
    <comment_count>11</comment_count>
      <attachid>83181</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-21 10:33:19 -0800</bug_when>
    <thetext>Created attachment 83181
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354671</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-21 10:39:20 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 83178 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83178&amp;action=review
&gt; 
&gt; &gt; LayoutTests/http/tests/inspector/debugger-test.js:3
&gt; &gt; +InspectorTest.runDebuggerTestSuite = function(steps)
&gt; 
&gt; There already is a runDebuggerTestSuite, why not to use existing one?
&gt; 
&gt; &gt; LayoutTests/inspector/debugger/source-frame.html:16
&gt; &gt; +        function(next) {
&gt; 
&gt; A bunch of nits:
&gt; - { on the next line
&gt; - Tests should have names
&gt; - Only tests should be first class citizens in the test suite, not their steps. How many tests are here?
&gt; 
&gt; &gt; LayoutTests/inspector/debugger/source-frame.html:22
&gt; &gt; +        function(next, sourceFrame) {
&gt; 
&gt; what is sourceFrame? where is it taken from?
&gt; 
&gt; &gt; LayoutTests/inspector/debugger/source-frame.html:35
&gt; &gt; +            InspectorTest.completeDebuggerTest();
&gt; 
&gt; This is not neeeded in the existing runDebuggerTestSuite.
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/front-end/DebuggerPresentationModel.js:36
&gt; &gt; +    WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
&gt; 
&gt; If debugger presentation model is the only listener of the debugger model, why does it listen to addition of the breakpoints? I don&apos;t think you addressed my only concern.

There are currently two clients who use debugger model directly. We should update them to use DPM and eliminate those listeners in a separate change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355195</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-22 05:17:29 -0800</bug_when>
    <thetext>Committed r79311: &lt;http://trac.webkit.org/changeset/79311&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82787</attachid>
            <date>2011-02-17 06:16:29 -0800</date>
            <delta_ts>2011-02-18 06:27:39 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27693</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZTdiOWUwLi45OGM3MzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEg
QEAKKzIwMTEtMDItMTcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogbW92ZSBzb3VyY2UgbWFwcGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQ
YW5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0
NjQ1CisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8gbWFwIG9uZSBzY3JpcHQgdG8gc2V2ZXJh
bCBzb3VyY2UgZmlsZXMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3NjcmlwdFNvdXJjZUNoYW5nZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuYWRkQ29uc29s
ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUu
Y2xlYXJDb25zb2xlTWVzc2FnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2Ny
aXB0c1BhbmVsLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFRv
U291cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUu
X3NvdXJjZUZyYW1lRm9yUmVzb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUuX3NvdXJjZUZyYW1lRm9yU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9hZGRTb3VyY2VGcmFtZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fcmVtb3ZlU291cmNlRnJhbWUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3NvdXJjZUZyYW1l
TG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9z
b3VyY2VMb2NhdGlvbkZvckNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3VyY2VMb2NhdGlvbkZvckJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3NvdXJjZUxvY2F0aW9u
Rm9yQ2FsbEZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlLl9hY3R1YWxMb2NhdGlvblRvU291cmNlTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2VuY29kZVNvdXJjZUxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9jbGVhckN1cnJlbnRFeGVj
dXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
Ll9jYWxsRnJhbWVTZWxlY3RlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVD
b250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90eXBlLl9idWlsZFNvdXJjZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZ2V0IGxvYWRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmFkZE1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY3JlYXRlVGV4dFZpZXdlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9zZXRUZXh0Vmlld2VyRGVjb3Jh
dGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRF
eGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUuY2xlYXJFeGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUuX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmFkZENvbnNvbGVNZXNzYWdlVG9Tb3VyY2Up
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5hZGRCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUucmVtb3Zl
QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
Ll9jb250ZXh0TWVudS5hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuZGlkRWRpdEJyZWFrcG9pbnRD
b25kaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
Y29udGV4dE1lbnUuYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2ZpbmRCcmVha3BvaW50LmZpbHRlcik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9maW5kQnJlYWtwb2ludCk6
CisKIDIwMTEtMDItMTcgIEh1aSBIdWFuZyAgPGh1aS4yLmh1YW5nQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA4NGMyNDg4Li5mNzQ5MmFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qcwpAQCAtMTg5LDYgKzE4OSw5IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBm
dW5jdGlvbigpCiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuU2NyaXB0U291cmNlQ2hhbmdlZCwg
dGhpcy5fc2NyaXB0U291cmNlQ2hhbmdlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVu
dHMuRGVidWdnZXJQYXVzZWQsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlzKTsKICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQsIHRoaXMuX2RlYnVnZ2VyUmVzdW1lZCwg
dGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9i
cmVha3BvaW50QWRkZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9p
bnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJN
b2RlbC5FdmVudHMuQnJlYWtwb2ludFJlc29sdmVkLCB0aGlzLl9icmVha3BvaW50UmVzb2x2ZWQs
IHRoaXMpOwogfQogCiAvLyBLZWVwIHRoZXNlIGluIHN5bmMgd2l0aCBXZWJDb3JlOjpTY3JpcHRE
ZWJ1Z1NlcnZlcgpAQCAtMjU2LDYgKzI1OSw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICB2YXIgb2xkU291cmNlID0gZXZlbnQuZGF0YS5vbGRTb3Vy
Y2U7CiAKICAgICAgICAgdmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNj
cmlwdEZvclNvdXJjZUlEKHNvdXJjZUlEKTsKKwogICAgICAgICBpZiAoc2NyaXB0LnJlc291cmNl
KSB7CiAgICAgICAgICAgICB2YXIgcmV2ZXJ0SGFuZGxlID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuZWRpdFNjcmlwdFNvdXJjZS5iaW5kKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLCBz
b3VyY2VJRCwgb2xkU291cmNlKTsKICAgICAgICAgICAgIHNjcmlwdC5yZXNvdXJjZS5zZXRDb250
ZW50KHNjcmlwdC5zb3VyY2UsIHJldmVydEhhbmRsZSk7CkBAIC0zMjQsMTcgKzMyOCw3NCBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIGFkZENvbnNvbGVN
ZXNzYWdlOiBmdW5jdGlvbihtZXNzYWdlKQogICAgIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlLmlz
RXJyb3JPcldhcm5pbmcoKSB8fCAhbWVzc2FnZS5tZXNzYWdlKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobWVzc2FnZSk7Ci0gICAgICAgIHZhciBz
b3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW21lc3NhZ2UudXJsXTsK
LSAgICAgICAgaWYgKHNvdXJjZUZyYW1lKQotICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkTWVz
c2FnZShtZXNzYWdlKTsKKworICAgICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9zb3Vy
Y2VMb2NhdGlvbkZvckNvbnNvbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICB2YXIgc291cmNl
RnJhbWUgPSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VMb2NhdGlvbi5zb3Vy
Y2VOYW1lXTsKKyAgICAgICAgaWYgKHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkK
KyAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZENvbnNvbGVNZXNzYWdlVG9Tb3VyY2Uoc291cmNl
TG9jYXRpb24ubGluZU51bWJlciwgbWVzc2FnZSk7CiAgICAgfSwKIAogICAgIGNsZWFyQ29uc29s
ZU1lc3NhZ2VzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtd
OwotICAgICAgICBmb3IgKHZhciB1cmwgaW4gdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWUp
Ci0gICAgICAgICAgICB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVt1cmxdLmNsZWFyTWVz
c2FnZXMoKTsKKyAgICAgICAgZm9yICh2YXIgc291cmNlTmFtZSBpbiB0aGlzLl9zb3VyY2VOYW1l
VG9Tb3VyY2VGcmFtZSkgeworICAgICAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291
cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTmFtZV07CisgICAgICAgICAgICBpZiAoc291cmNl
RnJhbWUubG9hZGVkKQorICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmNsZWFyTWVzc2FnZXMo
KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKworICAg
ICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VMb2NhdGlvbkZvckJyZWFrcG9p
bnQoYnJlYWtwb2ludCk7CisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5h
bWVUb1NvdXJjZUZyYW1lW3NvdXJjZUxvY2F0aW9uLnNvdXJjZU5hbWVdOworICAgICAgICBpZiAo
IXNvdXJjZUZyYW1lIHx8ICFzb3VyY2VGcmFtZS5sb2FkZWQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHRoaXMuX2VuY29kZVNvdXJjZUxvY2F0aW9uKHNvdXJjZUxvY2F0aW9u
KSBpbiB0aGlzLl9zb3VyY2VMb2NhdGlvblRvQnJlYWtwb2ludElkKSB7CisgICAgICAgICAgICAv
LyBXZSBjYW4ndCBzaG93IG1vcmUgdGhhbiBvbmUgYnJlYWtwb2ludCBvbiBhIHNpbmdsZSBzb3Vy
Y2UgZnJhbWUgbGluZS4gUmVtb3ZlIG5ld2x5IGFkZGVkIGJyZWFrcG9pbnQuCisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQu
aWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fYWRk
QnJlYWtwb2ludFRvU291cmNlRnJhbWUoc291cmNlRnJhbWUsIHNvdXJjZUxvY2F0aW9uLCBicmVh
a3BvaW50KTsKKyAgICB9LAorCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVu
dCkKKyAgICB7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBldmVudC5kYXRhOworCisgICAg
ICAgIHZhciBzb3VyY2VMb2NhdGlvbiA9IHRoaXMuX2JyZWFrcG9pbnRJZFRvU291cmNlTG9jYXRp
b25bYnJlYWtwb2ludElkXTsKKyAgICAgICAgaWYgKCFzb3VyY2VMb2NhdGlvbikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBkZWxldGUgdGhpcy5fc291cmNlTG9jYXRpb25Ub0JyZWFr
cG9pbnRJZFt0aGlzLl9lbmNvZGVTb3VyY2VMb2NhdGlvbihzb3VyY2VMb2NhdGlvbildOworICAg
ICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludElkVG9Tb3VyY2VMb2NhdGlvblticmVha3BvaW50
SWRdOworCisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJj
ZUZyYW1lW3NvdXJjZUxvY2F0aW9uLnNvdXJjZU5hbWVdOworICAgICAgICBpZiAoc291cmNlRnJh
bWUgJiYgc291cmNlRnJhbWUubG9hZGVkKQorICAgICAgICAgICAgc291cmNlRnJhbWUucmVtb3Zl
QnJlYWtwb2ludChzb3VyY2VMb2NhdGlvbi5saW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgX2Jy
ZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkKHsg
ZGF0YTogYnJlYWtwb2ludC5pZCB9KTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKHsg
ZGF0YTogYnJlYWtwb2ludCB9KTsKKyAgICB9LAorCisgICAgX2FkZEJyZWFrcG9pbnRUb1NvdXJj
ZUZyYW1lOiBmdW5jdGlvbihzb3VyY2VGcmFtZSwgc291cmNlTG9jYXRpb24sIGJyZWFrcG9pbnQp
CisgICAgeworICAgICAgICB0aGlzLl9zb3VyY2VMb2NhdGlvblRvQnJlYWtwb2ludElkW3RoaXMu
X2VuY29kZVNvdXJjZUxvY2F0aW9uKHNvdXJjZUxvY2F0aW9uKV0gPSBicmVha3BvaW50LmlkOwor
ICAgICAgICB0aGlzLl9icmVha3BvaW50SWRUb1NvdXJjZUxvY2F0aW9uW2JyZWFrcG9pbnQuaWRd
ID0gc291cmNlTG9jYXRpb247CisgICAgICAgIHZhciByZXNvbHZlZCAgPSEhYnJlYWtwb2ludC5s
b2NhdGlvbnMubGVuZ3RoOworICAgICAgICBzb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50KHNvdXJj
ZUxvY2F0aW9uLmxpbmVOdW1iZXIsIHJlc29sdmVkLCBicmVha3BvaW50LmNvbmRpdGlvbiwgYnJl
YWtwb2ludC5lbmFibGVkKTsKICAgICB9LAogCiAgICAgc2VsZWN0ZWRDYWxsRnJhbWVJZDogZnVu
Y3Rpb24oKQpAQCAtNDI4LDYgKzQ4OSw5IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZSA9IHt9Owog
ICAgICAgICB0aGlzLl9zb3VyY2VOYW1lVG9GaWxlc1NlbGVjdE9wdGlvbiA9IHt9OwogICAgICAg
ICB0aGlzLl9tZXNzYWdlcyA9IFtdOworICAgICAgICB0aGlzLl9icmVha3BvaW50SWRUb1NvdXJj
ZUxvY2F0aW9uID0ge307CisgICAgICAgIHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVha3BvaW50
SWQgPSB7fTsKKwogICAgICAgICB0aGlzLmZpbGVzU2VsZWN0RWxlbWVudC5yZW1vdmVDaGlsZHJl
bigpOwogICAgICAgICB0aGlzLmZ1bmN0aW9uc1NlbGVjdEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4o
KTsKICAgICAgICAgdGhpcy52aWV3c0NvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsK
QEAgLTUyMSw3ICs1ODUsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIGlmICh0aGlzLl9tZXNzYWdlc1tpXS51cmwgPT09IHJlc291cmNlLnVy
bCkKICAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRNZXNzYWdlKG1lc3NhZ2UpOwogICAg
ICAgICB9Ci0gICAgICAgIHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3Jlc291cmNlLnVy
bF0gPSBzb3VyY2VGcmFtZTsKKyAgICAgICAgdGhpcy5fYWRkU291cmNlRnJhbWUocmVzb3VyY2Uu
dXJsLCBzb3VyY2VGcmFtZSk7CiAgICAgICAgIHJldHVybiBzb3VyY2VGcmFtZTsKICAgICB9LAog
CkBAIC01MzUsNyArNTk5LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHZhciBjb250ZW50UHJvdmlkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lQ29udGVudFByb3ZpZGVyRm9yU2NyaXB0KHNjcmlwdCk7CiAgICAgICAgIHZhciBpc1Nj
cmlwdCA9ICFzY3JpcHQubGluZU9mZnNldCAmJiAhc2NyaXB0LmNvbHVtbk9mZnNldDsKICAgICAg
ICAgc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKGNvbnRlbnRQcm92
aWRlciwgc2NyaXB0LnNvdXJjZVVSTCwgaXNTY3JpcHQpOwotICAgICAgICB0aGlzLl9zb3VyY2VO
YW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VOYW1lXSA9IHNvdXJjZUZyYW1lOworICAgICAgICB0aGlz
Ll9hZGRTb3VyY2VGcmFtZShzb3VyY2VOYW1lLCBzb3VyY2VGcmFtZSk7CiAgICAgICAgIHJldHVy
biBzb3VyY2VGcmFtZTsKICAgICB9LAogCkBAIC01NTMsNiArNjE3LDg2IEBAIFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnZpc2libGVWaWV3ID0g
bmV3U291cmNlRnJhbWU7CiAgICAgfSwKIAorICAgIF9hZGRTb3VyY2VGcmFtZTogZnVuY3Rpb24o
c291cmNlTmFtZSwgc291cmNlRnJhbWUpCisgICAgeworICAgICAgICBzb3VyY2VGcmFtZS5fc291
cmNlTmFtZSA9IHNvdXJjZU5hbWU7CisgICAgICAgIHNvdXJjZUZyYW1lLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cy5Mb2FkZWQsIHRoaXMuX3NvdXJjZUZy
YW1lTG9hZGVkLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVb
c291cmNlTmFtZV0gPSBzb3VyY2VGcmFtZTsKKyAgICB9LAorCisgICAgX3JlbW92ZVNvdXJjZUZy
YW1lOiBmdW5jdGlvbihzb3VyY2VOYW1lKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1l
ID0gdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTmFtZV07CisgICAgICAgIGlm
ICghc291cmNlRnJhbWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHNvdXJjZUZyYW1l
LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cy5Mb2Fk
ZWQsIHRoaXMuX3NvdXJjZUZyYW1lTG9hZGVkLCB0aGlzKTsKKyAgICAgICAgZGVsZXRlIHRoaXMu
X3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZU5hbWVdOworICAgICAgICByZXR1cm4gc291
cmNlRnJhbWU7CisgICAgfSwKKworICAgIF9zb3VyY2VGcmFtZUxvYWRlZDogZnVuY3Rpb24oZXZl
bnQpCisgICAgeworICAgICAgICB2YXIgc291cmNlRnJhbWUgPSBldmVudC50YXJnZXQ7CisgICAg
ICAgIHZhciBzb3VyY2VOYW1lID0gc291cmNlRnJhbWUuX3NvdXJjZU5hbWU7CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tZXNzYWdlcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlc1tpXTsKKyAgICAgICAgICAgIHZhciBz
b3VyY2VMb2NhdGlvbiA9IHRoaXMuX3NvdXJjZUxvY2F0aW9uRm9yQ29uc29sZU1lc3NhZ2UobWVz
c2FnZSk7CisgICAgICAgICAgICBpZiAoc291cmNlTG9jYXRpb24uc291cmNlTmFtZSA9PT0gc291
cmNlTmFtZSkKKyAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRDb25zb2xlTWVzc2FnZVRv
U291cmNlKHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1iZXIsIG1lc3NhZ2UpOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJl
YWtwb2ludHM7CisgICAgICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzKSB7CisgICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2lkXTsKKyAgICAgICAgICAgIHZhciBz
b3VyY2VMb2NhdGlvbiA9IHRoaXMuX3NvdXJjZUxvY2F0aW9uRm9yQnJlYWtwb2ludChicmVha3Bv
aW50KTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lID09PSBzb3Vy
Y2VOYW1lKQorICAgICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZUZyYW1l
KHNvdXJjZUZyYW1lLCBzb3VyY2VMb2NhdGlvbiwgYnJlYWtwb2ludCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgc2VsZWN0ZWRDYWxsRnJhbWUgPSB0aGlzLnNpZGViYXJQYW5lcy5jYWxsc3Rh
Y2suc2VsZWN0ZWRDYWxsRnJhbWU7CisgICAgICAgIGlmIChzZWxlY3RlZENhbGxGcmFtZSkgewor
ICAgICAgICAgICAgdmFyIHNvdXJjZUxvY2F0aW9uID0gdGhpcy5fc291cmNlTG9jYXRpb25Gb3JD
YWxsRnJhbWUoc2VsZWN0ZWRDYWxsRnJhbWUpOworICAgICAgICAgICAgaWYgKHNvdXJjZUxvY2F0
aW9uLnNvdXJjZU5hbWUgPT09IHNvdXJjZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2VG
cmFtZS5zZXRFeGVjdXRpb25MaW5lKHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1iZXIpOworICAgICAg
ICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3NvdXJjZUxvY2F0aW9uRm9yQ29u
c29sZU1lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgc291cmNl
TmFtZSA9IG1lc3NhZ2UudXJsOworICAgICAgICBpZiAoIXNvdXJjZU5hbWUpCisgICAgICAgICAg
ICByZXR1cm4ge307CisgICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxMb2NhdGlvblRvU291cmNl
TG9jYXRpb24oc291cmNlTmFtZSwgbWVzc2FnZS5saW5lIC0gMSwgMCk7CisgICAgfSwKKworICAg
IF9zb3VyY2VMb2NhdGlvbkZvckJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAg
eworICAgICAgICB2YXIgc291cmNlTmFtZSA9IGJyZWFrcG9pbnQudXJsIHx8IGJyZWFrcG9pbnQu
c291cmNlSUQ7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IGJyZWFrcG9pbnQubG9jYXRpb25zLmxl
bmd0aCA/IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdIDogYnJlYWtwb2ludDsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2FjdHVhbExvY2F0aW9uVG9Tb3VyY2VMb2NhdGlvbihzb3VyY2VOYW1lLCBsb2Nh
dGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5OdW1iZXIpOworICAgIH0sCisKKyAgICBf
c291cmNlTG9jYXRpb25Gb3JDYWxsRnJhbWU6IGZ1bmN0aW9uKGNhbGxGcmFtZSkKKyAgICB7Cisg
ICAgICAgIHZhciBzY3JpcHQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JT
b3VyY2VJRChjYWxsRnJhbWUuc291cmNlSUQpOworICAgICAgICB2YXIgc291cmNlTmFtZSA9IHNj
cmlwdC5zb3VyY2VVUkwgfHwgc2NyaXB0LnNvdXJjZUlEOworICAgICAgICByZXR1cm4gdGhpcy5f
YWN0dWFsTG9jYXRpb25Ub1NvdXJjZUxvY2F0aW9uKHNvdXJjZU5hbWUsIGNhbGxGcmFtZS5saW5l
LCBjYWxsRnJhbWUuY29sdW1uKTsKKyAgICB9LAorCisgICAgX2FjdHVhbExvY2F0aW9uVG9Tb3Vy
Y2VMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlTmFtZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
KQorICAgIHsKKyAgICAgICAgLy8gVE9ETzogdXNlIHNvdXJjZSBtYXBwaW5nIHRvIG9idGFpbiBz
b3VyY2UgbG9jYXRpb24uCisgICAgICAgIHJldHVybiB7IHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUs
IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07Cisg
ICAgfSwKKworICAgIF9lbmNvZGVTb3VyY2VMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlTG9jYXRp
b24pCisgICAgeworICAgICAgICByZXR1cm4gc291cmNlTG9jYXRpb24uc291cmNlTmFtZSArICI6
IiArIHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgfSwKKwogICAgIF9zaG93U2NyaXB0
T3JSZXNvdXJjZTogZnVuY3Rpb24oc2NyaXB0T3JSZXNvdXJjZSwgb3B0aW9ucykKICAgICB7CiAg
ICAgICAgIC8vIG9wdGlvbnMgPSB7bGluZTosIHNob3VsZEhpZ2hsaWdodExpbmU6LCBmcm9tQmFj
a0ZvcndhcmRBY3Rpb246LCBpbml0aWFsTG9hZDp9CkBAIC02NjIsNyArODA2LDcgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgX2NsZWFyQ3VycmVudEV4ZWN1
dGlvbkxpbmU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25T
b3VyY2VGcmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lLmNsZWFy
RXhlY3V0aW9uTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZy
YW1lLmNsZWFyRXhlY3V0aW9uTGluZSgpOwogICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9u
U291cmNlRnJhbWU7CiAgICAgfSwKIApAQCAtNjgyLDkgKzgyNiwxMiBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHNjcmlwdE9yUmVzb3VyY2Ug
PSBzY3JpcHQucmVzb3VyY2UgfHwgc2NyaXB0OwogICAgICAgICB0aGlzLl9zaG93U2NyaXB0T3JS
ZXNvdXJjZShzY3JpcHRPclJlc291cmNlLCB7bGluZTogY3VycmVudEZyYW1lLmxpbmV9KTsKIAot
ICAgICAgICB0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9y
U2NyaXB0T3JSZXNvdXJjZShzY3JpcHRPclJlc291cmNlKTsKLSAgICAgICAgaWYgKHRoaXMuX2V4
ZWN1dGlvblNvdXJjZUZyYW1lKQotICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJh
bWUuc2V0RXhlY3V0aW9uTG9jYXRpb24oY3VycmVudEZyYW1lLmxpbmUsIGN1cnJlbnRGcmFtZS5j
b2x1bW4pOworICAgICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VMb2NhdGlv
bkZvckNhbGxGcmFtZShjdXJyZW50RnJhbWUpOworICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0
aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lXTsK
KyAgICAgICAgaWYgKHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkgeworICAgICAg
ICAgICAgc291cmNlRnJhbWUuc2V0RXhlY3V0aW9uTGluZShzb3VyY2VMb2NhdGlvbi5saW5lTnVt
YmVyKTsKKyAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lID0gc291cmNlRnJh
bWU7CisgICAgICAgIH0KICAgICB9LAogCiAgICAgX2NoYW5nZVZpc2libGVGaWxlOiBmdW5jdGlv
bihldmVudCkKQEAgLTEwODUsNyArMTIzMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNv
bnRlbnRQcm92aWRlckZvclNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBsaW5lTnVt
YmVyID0gMDsKICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IDA7CiAgICAgICAgIHZhciBzY3Jp
cHRSYW5nZXMgPSBbXTsKLSAgICAgICAgZnVuY3Rpb24gYXBwZW5kQ2h1bmsoY2h1bmssIGlzU2Ny
aXB0KQorICAgICAgICBmdW5jdGlvbiBhcHBlbmRDaHVuayhjaHVuaywgc2NyaXB0KQogICAgICAg
ICB7CiAgICAgICAgICAgICB2YXIgc3RhcnQgPSB7IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07CiAgICAgICAgICAgICBzb3VyY2UgKz0gY2h1bms7
CkBAIC0xMDk4LDE1ICsxMjQ1LDE1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQ
cm92aWRlckZvclNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29sdW1uTnVt
YmVyID0gbGluZUVuZGluZ3NbbGluZUNvdW50IC0gMV0gLSBsaW5lRW5kaW5nc1tsaW5lQ291bnQg
LSAyXSAtIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YXIgZW5kID0geyBsaW5lTnVt
YmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9OwotICAgICAgICAg
ICAgaWYgKGlzU2NyaXB0KQotICAgICAgICAgICAgICAgIHNjcmlwdFJhbmdlcy5wdXNoKHsgc3Rh
cnQ6IHN0YXJ0LCBlbmQ6IGVuZCB9KTsKKyAgICAgICAgICAgIGlmIChzY3JpcHQpCisgICAgICAg
ICAgICAgICAgc2NyaXB0UmFuZ2VzLnB1c2goeyBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBzb3Vy
Y2VJRDogc2NyaXB0LnNvdXJjZUlEIH0pOwogICAgICAgICB9CiAKICAgICAgICAgdmFyIG1pbWVU
eXBlOwogICAgICAgICBpZiAoc2NyaXB0cy5sZW5ndGggPT09IDEgJiYgIXNjcmlwdHNbMF0ubGlu
ZU9mZnNldCAmJiAhc2NyaXB0c1swXS5jb2x1bW5PZmZzZXQpIHsKICAgICAgICAgICAgIC8vIFNp
bmdsZSBzY3JpcHQgc291cmNlLgogICAgICAgICAgICAgbWltZVR5cGUgPSAidGV4dC9qYXZhc2Ny
aXB0IjsKLSAgICAgICAgICAgIGFwcGVuZENodW5rKHNvdXJjZXNbMF0sIHRydWUpOworICAgICAg
ICAgICAgYXBwZW5kQ2h1bmsoc291cmNlc1swXSwgc2NyaXB0c1swXSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBTY3JpcHRzIGlubGluZWQgaW4gaHRtbCBkb2N1bWVudC4KICAg
ICAgICAgICAgIG1pbWVUeXBlID0gInRleHQvaHRtbCI7CkBAIC0xMTIxLDcgKzEyNjgsNyBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90eXBl
ID0gewogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHNjcmlwdCB0YWcuCiAgICAgICAgICAgICAg
ICAgYXBwZW5kQ2h1bmsoc2NyaXB0T3BlblRhZyk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ2h1
bmsoc291cmNlc1tpXSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc291cmNl
c1tpXSwgc2NyaXB0c1tpXSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc2NyaXB0Q2xv
c2VUYWcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCBmMzVkYjJhLi5hODFkOTAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZy
YW1lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJh
bWUuanMKQEAgLTUxLDYgKzUxLDEwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0
aW9uKGNvbnRlbnRQcm92aWRlciwgdXJsLCBpc1NjcmlwdCkKICAgICB0aGlzLl9wb3BvdmVyT2Jq
ZWN0R3JvdXAgPSAicG9wb3ZlciI7CiB9CiAKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVu
dHMgPSB7CisgICAgTG9hZGVkOiAibG9hZGVkIgorfQorCiBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlID0gewogCiAgICAgc2hvdzogZnVuY3Rpb24ocGFyZW50RWxlbWVudCkKQEAg
LTg1LDYgKzg5LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuX2NsZWFyTGluZUhpZ2hsaWdodCgpOwogICAgIH0sCiAKKyAgICBnZXQgbG9h
ZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIXRoaXMuX2NvbnRlbnQ7CisgICAgfSwKKwog
ICAgIGhhc0NvbnRlbnQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTE1LDcgKzEyNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobXNnKTsK
ICAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCi0gICAgICAgICAgICB0aGlzLl9hZGRNZXNz
YWdlVG9Tb3VyY2UobXNnKTsKKyAgICAgICAgICAgIHRoaXMuYWRkQ29uc29sZU1lc3NhZ2VUb1Nv
dXJjZShtc2cubGluZSAtIDEsIG1zZyk7CiAgICAgfSwKIAogICAgIGNsZWFyTWVzc2FnZXM6IGZ1
bmN0aW9uKCkKQEAgLTIwNSwxMSArMjE0LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWxheWVkRmluZFNlYXJjaE1h
dGNoZXM7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMo
KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLkV2ZW50cy5Mb2FkZWQpOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRz
LkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRS
ZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJl
c29sdmVkLCB0aGlzLl9icmVha3BvaW50UmVzb2x2ZWQsIHRoaXMpOworICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgX3NldFRleHRWaWV3ZXJEZWNv
cmF0aW9uczogZnVuY3Rpb24oKQpAQCAtMjIyLDMyICsyMjksMTEgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdNZXNzYWdl
c1RvU291cmNlKCk7CiAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmZEZWNvcmF0aW9ucygpOwogCi0g
ICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25Mb2NhdGlvbikKLSAgICAgICAgICAgIHRoaXMuX3Nl
dEV4ZWN1dGlvbkxvY2F0aW9uKCk7Ci0KLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludElkVG9UZXh0
Vmlld2VyTGluZU51bWJlciA9IHt9OwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJl
clRvQnJlYWtwb2ludElkID0ge307Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzOwotICAgICAgICBmb3IgKHZhciBpZCBpbiBi
cmVha3BvaW50cykKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJy
ZWFrcG9pbnRzW2lkXSB9KTsKLQogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlc2l6ZSgpOwog
CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKLSAgICBf
c2hvdWxkRGlzcGxheUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fdXJsKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybCA9PT0gYnJl
YWtwb2ludC51cmw7Ci0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fY29udGVudC5zY3JpcHRS
YW5nZXM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgPT09IHNjcmlwdHNbaV0uc291
cmNlSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0sCi0KICAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVy
eSwgY2FsbGJhY2spCiAgICAgewogICAgICAgICAvLyBDYWxsIHNlYXJjaENhbmNlbGVkIHNpbmNl
IGl0IHdpbGwgcmVzZXQgZXZlcnl0aGluZyB3ZSBuZWVkIGJlZm9yZSBkb2luZyBhIG5ldyBzZWFy
Y2guCkBAIC0zNjEsMjYgKzM0NywxNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgICAgICBtc2cuX3Jlc291cmNlTWVzc2FnZVJlcGVhdENvdW50RWxlbWVudC50
ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiIChyZXBlYXRlZCAlZCB0aW1lcyki
LCBtc2cucmVwZWF0Q291bnQpOwogICAgIH0sCiAKLSAgICBzZXRFeGVjdXRpb25Mb2NhdGlvbjog
ZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHNldEV4ZWN1dGlvbkxpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLl9leGVjdXRpb25Mb2Nh
dGlvbiA9IHsgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1i
ZXIgfTsKLSAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCi0gICAgICAgICAgICB0aGlzLl9z
ZXRFeGVjdXRpb25Mb2NhdGlvbigpOworICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVy
ID0gbGluZU51bWJlcjsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxp
bmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKICAgICB9LAogCi0gICAgY2xlYXJF
eGVjdXRpb25Mb2NhdGlvbjogZnVuY3Rpb24oKQorICAgIGNsZWFyRXhlY3V0aW9uTGluZTogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpIHsKLSAgICAgICAg
ICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2NvbnRlbnQuYWN0dWFsTG9jYXRp
b25Ub1NvdXJjZUZyYW1lTGluZU51bWJlcih0aGlzLl9leGVjdXRpb25Mb2NhdGlvbi5saW5lTnVt
YmVyLCB0aGlzLl9leGVjdXRpb25Mb2NhdGlvbi5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCAi
d2Via2l0LWV4ZWN1dGlvbi1saW5lIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMu
X2V4ZWN1dGlvbkxvY2F0aW9uOwotICAgIH0sCi0KLSAgICBfc2V0RXhlY3V0aW9uTG9jYXRpb246
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRo
aXMuX2NvbnRlbnQuYWN0dWFsTG9jYXRpb25Ub1NvdXJjZUZyYW1lTGluZU51bWJlcih0aGlzLl9l
eGVjdXRpb25Mb2NhdGlvbi5saW5lTnVtYmVyLCB0aGlzLl9leGVjdXRpb25Mb2NhdGlvbi5jb2x1
bW5OdW1iZXIpOwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24odGV4dFZp
ZXdlckxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3
ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxp
bmVOdW1iZXI7CiAgICAgfSwKIAogICAgIF91cGRhdGVEaWZmRGVjb3JhdGlvbnM6IGZ1bmN0aW9u
KCkKQEAgLTQxNCwyNiArMzkwLDI2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5fbWVzc2FnZXMubGVuZ3Ro
OwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAg
dGhpcy5fYWRkTWVzc2FnZVRvU291cmNlKHRoaXMuX21lc3NhZ2VzW2ldKTsKKyAgICAgICAgICAg
IHRoaXMuYWRkQ29uc29sZU1lc3NhZ2VUb1NvdXJjZSh0aGlzLl9tZXNzYWdlc1tpXS5saW5lIC0g
MSwgdGhpcy5fbWVzc2FnZXNbaV0pOwogICAgIH0sCiAKLSAgICBfYWRkTWVzc2FnZVRvU291cmNl
OiBmdW5jdGlvbihtc2cpCisgICAgYWRkQ29uc29sZU1lc3NhZ2VUb1NvdXJjZTogZnVuY3Rpb24o
bGluZU51bWJlciwgbXNnKQogICAgIHsKLSAgICAgICAgaWYgKG1zZy5saW5lID4gdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpCisgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgMCB8fCBsaW5lTnVt
YmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHZhciBtZXNzYWdlQnViYmxlRWxlbWVudCA9IHRoaXMuX21lc3NhZ2VCdWJibGVz
W21zZy5saW5lXTsKKyAgICAgICAgdmFyIG1lc3NhZ2VCdWJibGVFbGVtZW50ID0gdGhpcy5fbWVz
c2FnZUJ1YmJsZXNbbGluZU51bWJlcl07CiAgICAgICAgIGlmICghbWVzc2FnZUJ1YmJsZUVsZW1l
bnQgfHwgbWVzc2FnZUJ1YmJsZUVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RF
IHx8ICFtZXNzYWdlQnViYmxlRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJ3ZWJraXQtaHRtbC1tZXNz
YWdlLWJ1YmJsZSIpKSB7CiAgICAgICAgICAgICBtZXNzYWdlQnViYmxlRWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgbWVzc2FnZUJ1YmJsZUVsZW1l
bnQuY2xhc3NOYW1lID0gIndlYmtpdC1odG1sLW1lc3NhZ2UtYnViYmxlIjsKLSAgICAgICAgICAg
IHRoaXMuX21lc3NhZ2VCdWJibGVzW21zZy5saW5lXSA9IG1lc3NhZ2VCdWJibGVFbGVtZW50Owot
ICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKG1zZy5saW5lIC0gMSwg
bWVzc2FnZUJ1YmJsZUVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXNb
bGluZU51bWJlcl0gPSBtZXNzYWdlQnViYmxlRWxlbWVudDsKKyAgICAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7
CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgcm93TWVzc2FnZXMgPSB0aGlzLl9yb3dNZXNzYWdl
c1ttc2cubGluZV07CisgICAgICAgIHZhciByb3dNZXNzYWdlcyA9IHRoaXMuX3Jvd01lc3NhZ2Vz
W2xpbmVOdW1iZXJdOwogICAgICAgICBpZiAoIXJvd01lc3NhZ2VzKSB7CiAgICAgICAgICAgICBy
b3dNZXNzYWdlcyA9IFtdOwotICAgICAgICAgICAgdGhpcy5fcm93TWVzc2FnZXNbbXNnLmxpbmVd
ID0gcm93TWVzc2FnZXM7CisgICAgICAgICAgICB0aGlzLl9yb3dNZXNzYWdlc1tsaW5lTnVtYmVy
XSA9IHJvd01lc3NhZ2VzOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCByb3dNZXNzYWdlcy5sZW5ndGg7ICsraSkgewpAQCAtNDcxLDYzICs0NDcsMTggQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgbXNnLl9yZXNvdXJjZU1l
c3NhZ2VMaW5lRWxlbWVudCA9IG1lc3NhZ2VMaW5lRWxlbWVudDsKICAgICB9LAogCi0gICAgX2Jy
ZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IGV2ZW50LmRhdGE7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9zaG91bGREaXNwbGF5QnJl
YWtwb2ludChicmVha3BvaW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIg
cmVzb2x2ZWQgPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGg7Ci0gICAgICAgIHZhciBsb2Nh
dGlvbiA9IHJlc29sdmVkID8gYnJlYWtwb2ludC5sb2NhdGlvbnNbMF0gOiBicmVha3BvaW50Owot
Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2NvbnRlbnQuYWN0dWFs
TG9jYXRpb25Ub1NvdXJjZUZyYW1lTGluZU51bWJlcihsb2NhdGlvbi5saW5lTnVtYmVyLCBsb2Nh
dGlvbi5jb2x1bW5OdW1iZXIpOwotICAgICAgICBpZiAodGV4dFZpZXdlckxpbmVOdW1iZXIgPj0g
dGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdmFyIGV4aXN0aW5nQnJlYWtwb2ludElkID0gdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJU
b0JyZWFrcG9pbnRJZFt0ZXh0Vmlld2VyTGluZU51bWJlcl07Ci0gICAgICAgIGlmIChleGlzdGlu
Z0JyZWFrcG9pbnRJZCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
cmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LmlkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1i
ZXJbYnJlYWtwb2ludC5pZF0gPSB0ZXh0Vmlld2VyTGluZU51bWJlcjsKLSAgICAgICAgdGhpcy5f
dGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJZFt0ZXh0Vmlld2VyTGluZU51bWJlcl0g
PSBicmVha3BvaW50LmlkOwotICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0
ZXh0Vmlld2VyTGluZU51bWJlciwgcmVzb2x2ZWQsIGJyZWFrcG9pbnQuZW5hYmxlZCwgISFicmVh
a3BvaW50LmNvbmRpdGlvbik7Ci0gICAgfSwKLQotICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZlbnQuZGF0
YTsKLQotICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9icmVha3BvaW50
SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyW2JyZWFrcG9pbnRJZF07Ci0gICAgICAgIGlmICh0ZXh0
Vmlld2VyTGluZU51bWJlciA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyW2Jy
ZWFrcG9pbnRJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRv
QnJlYWtwb2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKLSAgICAgICAgdGhpcy5fcmVtb3Zl
QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAg
ICBfYnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZh
ciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92
ZWQoeyBkYXRhOiBicmVha3BvaW50LmlkIH0pOwotICAgICAgICB0aGlzLl9icmVha3BvaW50QWRk
ZWQoeyBkYXRhOiBicmVha3BvaW50IH0pOwotICAgIH0sCi0KLSAgICBfc2V0QnJlYWtwb2ludERl
Y29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29sdmVkLCBlbmFibGVkLCBoYXNDb25k
aXRpb24pCisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgcmVzb2x2ZWQs
IGNvbmRpdGlvbmFsLCBlbmFibGVkKQogICAgIHsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5i
ZWdpblVwZGF0ZXMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxp
bmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwogICAgICAgICBpZiAoIWVuYWJsZWQpCiAg
ICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndl
YmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7Ci0gICAgICAgIGlmIChoYXNDb25kaXRpb24pCisg
ICAgICAgIGlmIChjb25kaXRpb25hbCkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRk
RGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsK
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAgICAgfSwKIAotICAgIF9y
ZW1vdmVCcmVha3BvaW50RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICByZW1v
dmVCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1v
dmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwpAQCAtNTU3LDEw
ICs0ODgsMTAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICAgICAgZnVuY3Rpb24gYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmll
d2VyTGluZU51bWJlciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5h
ZGRCcmVha3BvaW50KHRleHRWaWV3ZXJMaW5lTnVtYmVyLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0
ZWQsIGNvbmRpdGlvbikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KHRleHRWaWV3ZXJMaW5lTnVt
YmVyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQodGV4dFZpZXdlckxpbmVOdW1iZXIsIGNvbmRp
dGlvbiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTEzLDEwICs4NDQsMjMgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMuc2NyaXB0cy50b2dnbGVCcmVha3BvaW50c0NsaWNrZWQoKTsKICAgICB9LAog
Ci0gICAgX2ZpbmRCcmVha3BvaW50OiBmdW5jdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcikKKyAg
ICBfZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2
YXIgYnJlYWtwb2ludElkID0gdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJ
ZFt0ZXh0Vmlld2VyTGluZU51bWJlcl07Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNb2RlbC5icmVha3BvaW50Rm9ySWQoYnJlYWtwb2ludElkKTsKKyAgICAgICAgdmFyIHVy
bCA9IHRoaXMuX3VybDsKKyAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fY29udGVudC5zb3Vy
Y2VGcmFtZUxpbmVOdW1iZXJUb0FjdHVhbExvY2F0aW9uKGxpbmVOdW1iZXIpOworICAgICAgICBm
dW5jdGlvbiBmaWx0ZXIoYnJlYWtwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJy
ZWFrcG9pbnQudXJsKSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsICE9PSB1
cmwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgIT09IGxvY2F0aW9u
LnNvdXJjZUlEKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubG9jYXRpb25zLmxl
bmd0aCA/IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdLmxpbmVOdW1iZXIgOiBicmVha3BvaW50Lmxp
bmVOdW1iZXI7CisgICAgICAgICAgICByZXR1cm4gbGluZU51bWJlciA9PT0gbG9jYXRpb24ubGlu
ZU51bWJlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwucXVlcnlCcmVha3BvaW50cyhmaWx0ZXIpWzBdOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAwNDE1YjY3Li41ZGMwMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDExLTAyLTE3ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgc291cmNlIG1hcHBpbmcgZnJvbSBT
b3VyY2VGcmFtZSB0byBTY3JpcHRzUGFuZWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NDY0NQorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIHRvIG1h
cCBvbmUgc2NyaXB0IHRvIHNldmVyYWwgc291cmNlIGZpbGVzLgorCisgICAgICAgICogc3JjL2pz
L1Rlc3RzLmpzOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrRXhlY3V0aW9u
TGluZSk6CisKKzIwMTEtMDItMTcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1
bS5vcmc+CisKICAgICAgICAgVW5yZXZpZXdlZCwgaW50ZXJhY3RpdmUgdWkgdGVzdCBmaXggZm9y
IHI3ODgwOC4KIAogICAgICAgICAqIHNyYy9qcy9UZXN0cy5qczoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Rlc3RzLmpzIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvVGVzdHMuanMKaW5kZXggNDM0MGU2ZC4uYTQ2NGRkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMuanMKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvanMvVGVzdHMuanMKQEAgLTYxNiw3ICs2MTYsNyBAQCBUZXN0U3VpdGUucHJv
dG90eXBlLmV2YWx1YXRlSW5Db25zb2xlXyA9IGZ1bmN0aW9uKGNvZGUsIGNhbGxiYWNrKQogICov
CiBUZXN0U3VpdGUucHJvdG90eXBlLl9jaGVja0V4ZWN1dGlvbkxpbmUgPSBmdW5jdGlvbihzb3Vy
Y2VGcmFtZSwgbGluZU51bWJlciwgbGluZUNvbnRlbnQpCiB7Ci0gICAgdGhpcy5hc3NlcnRFcXVh
bHMobGluZU51bWJlciwgc291cmNlRnJhbWUuX2V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXIg
KyAxLCAiVW5leHBlY3RlZCBleGVjdXRpb24gbGluZSBudW1iZXIuIik7CisgICAgdGhpcy5hc3Nl
cnRFcXVhbHMobGluZU51bWJlciwgc291cmNlRnJhbWUuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgKyAx
LCAiVW5leHBlY3RlZCBleGVjdXRpb24gbGluZSBudW1iZXIuIik7CiAgICAgdGhpcy5hc3NlcnRF
cXVhbHMobGluZUNvbnRlbnQsIHNvdXJjZUZyYW1lLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVy
IC0gMSksICJVbmV4cGVjdGVkIGV4ZWN1dGlvbiBsaW5lIHRleHQuIik7CiB9CiAK
</data>
<flag name="review"
          id="74484"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82951</attachid>
            <date>2011-02-18 06:27:39 -0800</date>
            <delta_ts>2011-02-18 06:32:05 -0800</delta_ts>
            <desc>Patch + test.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33509</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwODRkM2JiLi43ZDdkMTQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDIt
MTggIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92
ZSBzb3VyY2UgbWFwcGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0U291cmNlKToKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qczoKKyAgICAgICAg
KGluaXRpYWxpemVfSW5zcGVjdG9yVGVzdC5JbnNwZWN0b3JUZXN0LnJ1blRlc3QuY3JlYXRlV3Jh
cHBlci5yZXR1cm4udHJ5KToKKyAgICAgICAgKGluaXRpYWxpemVfSW5zcGVjdG9yVGVzdC5JbnNw
ZWN0b3JUZXN0LnJ1blRlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2Ut
ZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIv
c291cmNlLWZyYW1lLmh0bWw6IEFkZGVkLgorCiAyMDExLTAyLTE3ICBNaWhhaSBQYXJwYXJpdGEg
IDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJh
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIt
dGVzdC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3Qu
anMKaW5kZXggNjAwNDg0MC4uNmUzNTY0NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzCkBAIC0xMjAsNyArMTIwLDcgQEAgSW5zcGVj
dG9yVGVzdC5zaG93U2NyaXB0U291cmNlID0gZnVuY3Rpb24oc2NyaXB0TmFtZSwgY2FsbGJhY2sp
CiAgICAgaWYgKEluc3BlY3RvclRlc3QuX3NjcmlwdHNBcmVQYXJzZWQoW3NjcmlwdE5hbWVdKSkK
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5fc2hvd1NjcmlwdFNvdXJjZShzY3JpcHROYW1lLCBjYWxs
YmFjayk7CiAgICAgIGVsc2UKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5fYWRkU25pZmZlcihXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbCwgIl9wYXJzZWRTY3JpcHRTb3VyY2UiLCBJbnNwZWN0b3JU
ZXN0LnNob3dTY3JpcHRTb3VyY2UuYmluZChJbnNwZWN0b3JUZXN0LCBzY3JpcHROYW1lLCBjYWxs
YmFjaykpOworICAgICAgICBJbnNwZWN0b3JUZXN0Ll9hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0cywgIl9hZGRTY3JpcHRUb0ZpbGVzTWVudSIsIEluc3BlY3RvclRlc3Quc2hv
d1NjcmlwdFNvdXJjZS5iaW5kKEluc3BlY3RvclRlc3QsIHNjcmlwdE5hbWUsIGNhbGxiYWNrKSk7
CiB9OwogCiBJbnNwZWN0b3JUZXN0Ll9zY3JpcHRzQXJlUGFyc2VkID0gZnVuY3Rpb24oc2NyaXB0
cykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rv
ci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRl
c3QuanMKaW5kZXggYTkyNWIxMS4uZWM0NWE1OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKQEAgLTEzNSw2ICsxMzUsMjcgQEAg
SW5zcGVjdG9yVGVzdC5jcmVhdGVLZXlFdmVudCA9IGZ1bmN0aW9uKGtleUlkZW50aWZpZXIpCiAg
ICAgcmV0dXJuIGV2dDsKIH0KIAorSW5zcGVjdG9yVGVzdC5ydW5UZXN0ID0gZnVuY3Rpb24oc3Rl
cHMpCit7CisgICAgdmFyIHdyYXBwZXJzID0gW107CisgICAgZnVuY3Rpb24gY3JlYXRlV3JhcHBl
cihzdGVwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgYSA9IGFyZ3VtZW50c1swXSwgYiA9
IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgICAgICAgICBzdGVwc1tzdGVwXS5hcHBseShudWxsLCBb
d3JhcHBlcnNbc3RlcCArIDFdLCBhLCBiXSk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiRXhjZXB0aW9uIGluIHN0ZXAg
IiArIHN0ZXAgKyAiOiIgKyAoZS5zdGFjayB8fCBlKSk7CisgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgKytpKQorICAgICAgICB3cmFw
cGVycy5wdXNoKGNyZWF0ZVdyYXBwZXIoaSkpOworICAgIHdyYXBwZXJzWzBdKCk7Cit9CisKIElu
c3BlY3RvclRlc3QucnVuVGVzdFN1aXRlID0gZnVuY3Rpb24odGVzdFN1aXRlKQogewogICAgIHZh
ciB0ZXN0U3VpdGVUZXN0cyA9IHRlc3RTdWl0ZS5zbGljZSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1lLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2FkMTc5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMCBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDEwOiB0ZXN0IGVycm9y
IG1lc3NhZ2UKK1Rlc3RzIHRoYXQgaXQncyBwb3NzaWJsZSB0byBzZXQgYnJlYWtwb2ludCBpbiBz
b3VyY2UgZnJhbWUsIGFuZCB0aGF0IHNvdXJjZSBmcmFtZSBkaXNwbGF5cyBicmVha3BvaW50cyBh
bmQgY29uc29sZSBlcnJvcnMuCisKK0RlYnVnZ2VyIHdhcyBlbmFibGVkLgorU2NyaXB0IHNvdXJj
ZSB3YXMgc2hvd24uCitCcmVha3BvaW50IGFkZGVkIHRvIHNvdXJjZSBmcmFtZSBhdCBsaW5lIDE3
CitNZXNzYWdlIGFkZGVkIHRvIHNvdXJjZSBmcmFtZSBhdCBsaW5lIDkKK01lc3NhZ2UgdGV4dDog
c291cmNlLWZyYW1lLmh0bWw6MTB0ZXN0IGVycm9yIG1lc3NhZ2UKK0RlYnVnZ2VyIHdhcyBkaXNh
YmxlZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJj
ZS1mcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFt
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjBmYTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1l
Lmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcyI+PC9z
Y3JpcHQ+CisKKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGFkZEVycm9yVG9Db25zb2xlKCkKK3sKKyAg
ICBjb25zb2xlLmVycm9yKCJ0ZXN0IGVycm9yIG1lc3NhZ2UiKTsKK30KKworZnVuY3Rpb24gdGVz
dCgpCit7CisgICAgSW5zcGVjdG9yVGVzdC5ydW5UZXN0KFsKKyAgICAgICAgZnVuY3Rpb24obmV4
dCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zdGFydERlYnVnZ2VyVGVzdChuZXh0LCB0
cnVlKTsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24obmV4dCkgeworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0U291cmNlKCJzb3VyY2UtZnJhbWUuaHRtbCIsIG5leHQp
OworICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbihuZXh0LCBzb3VyY2VGcmFtZSkgeworICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBzb3VyY2Ugd2FzIHNob3du
LiIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5fYWRkU25pZmZlcihXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLCAiYWRkQnJlYWtwb2ludCIsIG5leHQpOworICAgICAgICAg
ICAgc291cmNlRnJhbWUuX3NldEJyZWFrcG9pbnQoMTcsICIiLCB0cnVlKTsKKyAgICAgICAgfSwK
KyAgICAgICAgZnVuY3Rpb24obmV4dCwgbGluZU51bWJlcikgeworICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRSZXN1bHQoIkJyZWFrcG9pbnQgYWRkZWQgdG8gc291cmNlIGZyYW1lIGF0IGxp
bmUgIiArIGxpbmVOdW1iZXIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5fYWRkU25pZmZl
cihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLCAiYWRkQ29uc29sZU1lc3NhZ2VU
b1NvdXJjZSIsIG5leHQpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFn
ZSgiYWRkRXJyb3JUb0NvbnNvbGUoKSIpOworICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbihu
ZXh0LCBsaW5lTnVtYmVyLCBtZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiTWVzc2FnZSBhZGRlZCB0byBzb3VyY2UgZnJhbWUgYXQgbGluZSAi
ICsgbGluZU51bWJlcik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTWVz
c2FnZSB0ZXh0OiAiICsgbWVzc2FnZS5tZXNzYWdlKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuY29tcGxldGVEZWJ1Z2dlclRlc3QoKTsKKyAgICAgICAgfQorICAgIF0pOworfTsKKworPC9z
Y3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+VGVzdHMg
dGhhdCBpdCdzIHBvc3NpYmxlIHRvIHNldCBicmVha3BvaW50IGluIHNvdXJjZSBmcmFtZSwgYW5k
IHRoYXQKK3NvdXJjZSBmcmFtZSBkaXNwbGF5cyBicmVha3BvaW50cyBhbmQgY29uc29sZSBlcnJv
cnMuCis8L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNTdkYTZhLi5hNTEw
NWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTEtMDItMTggIFBhdmVsIFBvZGl2
aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBzb3VyY2UgbWFwcGlu
ZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAgICAgVGhpcyBpcyBuZWVk
ZWQgdG8gbWFwIG9uZSBzY3JpcHQgdG8gc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisKKyAgICAgICAg
VGVzdDogaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS5odG1sCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUuX3NjcmlwdFNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUuYWRkQ29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuY2xlYXJDb25zb2xlTWVzc2FnZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fYnJlYWtwb2lu
dFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUu
X2JyZWFrcG9pbnRSZXNvbHZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludFRvU291cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3NvdXJjZUZyYW1lRm9yUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3NvdXJjZUZyYW1lRm9y
U2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9h
ZGRTb3VyY2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZS5fcmVtb3ZlU291cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQ
YW5lbC5wcm90b3R5cGUuX3NvdXJjZUZyYW1lTG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3VyY2VMb2NhdGlvbkZvckNvbnNvbGVNZXNzYWdl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3VyY2VM
b2NhdGlvbkZvckJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUuX3NvdXJjZUxvY2F0aW9uRm9yQ2FsbEZyYW1lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9hY3R1YWxMb2NhdGlvblRvU291cmNlTG9j
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2Vu
Y29kZVNvdXJjZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlLl9jbGVhckN1cnJlbnRFeGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9jYWxsRnJhbWVTZWxlY3RlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90
eXBlLl9idWlsZFNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZ2V0
IGxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmFk
ZE1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
Y3JlYXRlVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLl9zZXRUZXh0Vmlld2VyRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRFeGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuY2xlYXJFeGVjdXRpb25MaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2FkZEV4aXN0aW5nTWVzc2Fn
ZXNUb1NvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
LmFkZENvbnNvbGVNZXNzYWdlVG9Tb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jb250ZXh0TWVudS5hZGRDb25kaXRpb25hbEJy
ZWFrcG9pbnQuZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUuYWRkQ29uZGl0aW9uYWxCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2Zp
bmRCcmVha3BvaW50LmZpbHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLl9maW5kQnJlYWtwb2ludCk6CisKIDIwMTEtMDItMTcgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanMKaW5kZXggODRjMjQ4OC4uZjc0OTJhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE4OSw2ICsxODksOSBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsID0gZnVuY3Rpb24oKQogICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwu
RXZlbnRzLlNjcmlwdFNvdXJjZUNoYW5nZWQsIHRoaXMuX3NjcmlwdFNvdXJjZUNoYW5nZWQsIHRo
aXMpOwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0aGlzLl9kZWJ1
Z2dlclBhdXNlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdnZXJSZXN1
bWVkLCB0aGlzLl9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZl
bnRzLkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKKyAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fYnJlYWtwb2ludFJl
bW92ZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZl
ZCwgdGhpcy5fYnJlYWtwb2ludFJlc29sdmVkLCB0aGlzKTsKIH0KIAogLy8gS2VlcCB0aGVzZSBp
biBzeW5jIHdpdGggV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXIKQEAgLTI1Niw2ICsyNTksNyBA
QCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIG9s
ZFNvdXJjZSA9IGV2ZW50LmRhdGEub2xkU291cmNlOwogCiAgICAgICAgIHZhciBzY3JpcHQgPSBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JTb3VyY2VJRChzb3VyY2VJRCk7CisK
ICAgICAgICAgaWYgKHNjcmlwdC5yZXNvdXJjZSkgewogICAgICAgICAgICAgdmFyIHJldmVydEhh
bmRsZSA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmVkaXRTY3JpcHRTb3VyY2UuYmluZChX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbCwgc291cmNlSUQsIG9sZFNvdXJjZSk7CiAgICAgICAg
ICAgICBzY3JpcHQucmVzb3VyY2Uuc2V0Q29udGVudChzY3JpcHQuc291cmNlLCByZXZlcnRIYW5k
bGUpOwpAQCAtMzI0LDE3ICszMjgsNzQgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAKICAgICBhZGRDb25zb2xlTWVzc2FnZTogZnVuY3Rpb24obWVzc2FnZSkKICAg
ICB7CisgICAgICAgIGlmICghbWVzc2FnZS5pc0Vycm9yT3JXYXJuaW5nKCkgfHwgIW1lc3NhZ2Uu
bWVzc2FnZSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICB0aGlzLl9tZXNzYWdlcy5w
dXNoKG1lc3NhZ2UpOwotICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VOYW1l
VG9Tb3VyY2VGcmFtZVttZXNzYWdlLnVybF07Ci0gICAgICAgIGlmIChzb3VyY2VGcmFtZSkKLSAg
ICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZE1lc3NhZ2UobWVzc2FnZSk7CisKKyAgICAgICAgdmFy
IHNvdXJjZUxvY2F0aW9uID0gdGhpcy5fc291cmNlTG9jYXRpb25Gb3JDb25zb2xlTWVzc2FnZSht
ZXNzYWdlKTsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlTmFtZVRvU291
cmNlRnJhbWVbc291cmNlTG9jYXRpb24uc291cmNlTmFtZV07CisgICAgICAgIGlmIChzb3VyY2VG
cmFtZSAmJiBzb3VyY2VGcmFtZS5sb2FkZWQpCisgICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRD
b25zb2xlTWVzc2FnZVRvU291cmNlKHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1iZXIsIG1lc3NhZ2Up
OwogICAgIH0sCiAKICAgICBjbGVhckNvbnNvbGVNZXNzYWdlczogZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgdXJsIGluIHRo
aXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lKQotICAgICAgICAgICAgdGhpcy5fc291cmNlTmFt
ZVRvU291cmNlRnJhbWVbdXJsXS5jbGVhck1lc3NhZ2VzKCk7CisgICAgICAgIGZvciAodmFyIHNv
dXJjZU5hbWUgaW4gdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWUpIHsKKyAgICAgICAgICAg
IHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZU5h
bWVdOworICAgICAgICAgICAgaWYgKHNvdXJjZUZyYW1lLmxvYWRlZCkKKyAgICAgICAgICAgICAg
ICBzb3VyY2VGcmFtZS5jbGVhck1lc3NhZ2VzKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
X2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IGV2ZW50LmRhdGE7CisKKyAgICAgICAgdmFyIHNvdXJjZUxvY2F0aW9uID0gdGhp
cy5fc291cmNlTG9jYXRpb25Gb3JCcmVha3BvaW50KGJyZWFrcG9pbnQpOworICAgICAgICB2YXIg
c291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VMb2NhdGlv
bi5zb3VyY2VOYW1lXTsKKyAgICAgICAgaWYgKCFzb3VyY2VGcmFtZSB8fCAhc291cmNlRnJhbWUu
bG9hZGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLl9lbmNvZGVT
b3VyY2VMb2NhdGlvbihzb3VyY2VMb2NhdGlvbikgaW4gdGhpcy5fc291cmNlTG9jYXRpb25Ub0Jy
ZWFrcG9pbnRJZCkgeworICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBtb3JlIHRoYW4gb25l
IGJyZWFrcG9pbnQgb24gYSBzaW5nbGUgc291cmNlIGZyYW1lIGxpbmUuIFJlbW92ZSBuZXdseSBh
ZGRlZCBicmVha3BvaW50LgorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
cmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LmlkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZUZyYW1lKHNvdXJj
ZUZyYW1lLCBzb3VyY2VMb2NhdGlvbiwgYnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIF9icmVh
a3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtw
b2ludElkID0gZXZlbnQuZGF0YTsKKworICAgICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlz
Ll9icmVha3BvaW50SWRUb1NvdXJjZUxvY2F0aW9uW2JyZWFrcG9pbnRJZF07CisgICAgICAgIGlm
ICghc291cmNlTG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGVsZXRl
IHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVha3BvaW50SWRbdGhpcy5fZW5jb2RlU291cmNlTG9j
YXRpb24oc291cmNlTG9jYXRpb24pXTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRJ
ZFRvU291cmNlTG9jYXRpb25bYnJlYWtwb2ludElkXTsKKworICAgICAgICB2YXIgc291cmNlRnJh
bWUgPSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VMb2NhdGlvbi5zb3VyY2VO
YW1lXTsKKyAgICAgICAgaWYgKHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkKKyAg
ICAgICAgICAgIHNvdXJjZUZyYW1lLnJlbW92ZUJyZWFrcG9pbnQoc291cmNlTG9jYXRpb24ubGlu
ZU51bWJlcik7CisgICAgfSwKKworICAgIF9icmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOworICAgICAg
ICB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCh7IGRhdGE6IGJyZWFrcG9pbnQuaWQgfSk7CisgICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJyZWFrcG9pbnQgfSk7CisgICAgfSwK
KworICAgIF9hZGRCcmVha3BvaW50VG9Tb3VyY2VGcmFtZTogZnVuY3Rpb24oc291cmNlRnJhbWUs
IHNvdXJjZUxvY2F0aW9uLCBicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fc291cmNl
TG9jYXRpb25Ub0JyZWFrcG9pbnRJZFt0aGlzLl9lbmNvZGVTb3VyY2VMb2NhdGlvbihzb3VyY2VM
b2NhdGlvbildID0gYnJlYWtwb2ludC5pZDsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludElkVG9T
b3VyY2VMb2NhdGlvblticmVha3BvaW50LmlkXSA9IHNvdXJjZUxvY2F0aW9uOworICAgICAgICB2
YXIgcmVzb2x2ZWQgID0hIWJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aDsKKyAgICAgICAgc291
cmNlRnJhbWUuYWRkQnJlYWtwb2ludChzb3VyY2VMb2NhdGlvbi5saW5lTnVtYmVyLCByZXNvbHZl
ZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCk7CiAgICAgfSwKIAog
ICAgIHNlbGVjdGVkQ2FsbEZyYW1lSWQ6IGZ1bmN0aW9uKCkKQEAgLTQyOCw2ICs0ODksOSBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc291
cmNlTmFtZVRvU291cmNlRnJhbWUgPSB7fTsKICAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvRmls
ZXNTZWxlY3RPcHRpb24gPSB7fTsKICAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTsKKyAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludElkVG9Tb3VyY2VMb2NhdGlvbiA9IHt9OworICAgICAgICB0aGlz
Ll9zb3VyY2VMb2NhdGlvblRvQnJlYWtwb2ludElkID0ge307CisKICAgICAgICAgdGhpcy5maWxl
c1NlbGVjdEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgdGhpcy5mdW5jdGlvbnNT
ZWxlY3RFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIHRoaXMudmlld3NDb250YWlu
ZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CkBAIC01MjEsNyArNTg1LDcgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAodGhpcy5fbWVz
c2FnZXNbaV0udXJsID09PSByZXNvdXJjZS51cmwpCiAgICAgICAgICAgICAgICAgc291cmNlRnJh
bWUuYWRkTWVzc2FnZShtZXNzYWdlKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9zb3VyY2VO
YW1lVG9Tb3VyY2VGcmFtZVtyZXNvdXJjZS51cmxdID0gc291cmNlRnJhbWU7CisgICAgICAgIHRo
aXMuX2FkZFNvdXJjZUZyYW1lKHJlc291cmNlLnVybCwgc291cmNlRnJhbWUpOwogICAgICAgICBy
ZXR1cm4gc291cmNlRnJhbWU7CiAgICAgfSwKIApAQCAtNTM1LDcgKzU5OSw3IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY29udGVudFByb3Zp
ZGVyID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQcm92aWRlckZvclNjcmlw
dChzY3JpcHQpOwogICAgICAgICB2YXIgaXNTY3JpcHQgPSAhc2NyaXB0LmxpbmVPZmZzZXQgJiYg
IXNjcmlwdC5jb2x1bW5PZmZzZXQ7CiAgICAgICAgIHNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZShjb250ZW50UHJvdmlkZXIsIHNjcmlwdC5zb3VyY2VVUkwsIGlzU2Ny
aXB0KTsKLSAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTmFtZV0g
PSBzb3VyY2VGcmFtZTsKKyAgICAgICAgdGhpcy5fYWRkU291cmNlRnJhbWUoc291cmNlTmFtZSwg
c291cmNlRnJhbWUpOwogICAgICAgICByZXR1cm4gc291cmNlRnJhbWU7CiAgICAgfSwKIApAQCAt
NTUzLDYgKzYxNyw4NiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy52aXNpYmxlVmlldyA9IG5ld1NvdXJjZUZyYW1lOwogICAgIH0sCiAKKyAg
ICBfYWRkU291cmNlRnJhbWU6IGZ1bmN0aW9uKHNvdXJjZU5hbWUsIHNvdXJjZUZyYW1lKQorICAg
IHsKKyAgICAgICAgc291cmNlRnJhbWUuX3NvdXJjZU5hbWUgPSBzb3VyY2VOYW1lOworICAgICAg
ICBzb3VyY2VGcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5F
dmVudHMuTG9hZGVkLCB0aGlzLl9zb3VyY2VGcmFtZUxvYWRlZCwgdGhpcyk7CisgICAgICAgIHRo
aXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZU5hbWVdID0gc291cmNlRnJhbWU7Cisg
ICAgfSwKKworICAgIF9yZW1vdmVTb3VyY2VGcmFtZTogZnVuY3Rpb24oc291cmNlTmFtZSkKKyAg
ICB7CisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZy
YW1lW3NvdXJjZU5hbWVdOworICAgICAgICBpZiAoIXNvdXJjZUZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBzb3VyY2VGcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMuTG9hZGVkLCB0aGlzLl9zb3VyY2VGcmFtZUxvYWRlZCwg
dGhpcyk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3Vy
Y2VOYW1lXTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUZyYW1lOworICAgIH0sCisKKyAgICBfc291
cmNlRnJhbWVMb2FkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJj
ZUZyYW1lID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgc291cmNlTmFtZSA9IHNvdXJjZUZy
YW1lLl9zb3VyY2VOYW1lOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWVz
c2FnZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5fbWVz
c2FnZXNbaV07CisgICAgICAgICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VM
b2NhdGlvbkZvckNvbnNvbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICAgICAgaWYgKHNvdXJj
ZUxvY2F0aW9uLnNvdXJjZU5hbWUgPT09IHNvdXJjZU5hbWUpCisgICAgICAgICAgICAgICAgc291
cmNlRnJhbWUuYWRkQ29uc29sZU1lc3NhZ2VUb1NvdXJjZShzb3VyY2VMb2NhdGlvbi5saW5lTnVt
YmVyLCBtZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzOworICAgICAgICBmb3IgKHZhciBp
ZCBpbiBicmVha3BvaW50cykgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3Bv
aW50c1tpZF07CisgICAgICAgICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VM
b2NhdGlvbkZvckJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CisgICAgICAgICAgICBpZiAoc291cmNl
TG9jYXRpb24uc291cmNlTmFtZSA9PT0gc291cmNlTmFtZSkKKyAgICAgICAgICAgICAgICB0aGlz
Ll9hZGRCcmVha3BvaW50VG9Tb3VyY2VGcmFtZShzb3VyY2VGcmFtZSwgc291cmNlTG9jYXRpb24s
IGJyZWFrcG9pbnQpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNlbGVjdGVkQ2FsbEZyYW1l
ID0gdGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNlbGVjdGVkQ2FsbEZyYW1lOworICAgICAg
ICBpZiAoc2VsZWN0ZWRDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMb2NhdGlv
biA9IHRoaXMuX3NvdXJjZUxvY2F0aW9uRm9yQ2FsbEZyYW1lKHNlbGVjdGVkQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgIGlmIChzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lID09PSBzb3VyY2VOYW1l
KSB7CisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuc2V0RXhlY3V0aW9uTGluZShzb3VyY2VM
b2NhdGlvbi5saW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Tb3Vy
Y2VGcmFtZSA9IHNvdXJjZUZyYW1lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwK
KworICAgIF9zb3VyY2VMb2NhdGlvbkZvckNvbnNvbGVNZXNzYWdlOiBmdW5jdGlvbihtZXNzYWdl
KQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSBtZXNzYWdlLnVybDsKKyAgICAgICAg
aWYgKCFzb3VyY2VOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHt9OworICAgICAgICByZXR1cm4g
dGhpcy5fYWN0dWFsTG9jYXRpb25Ub1NvdXJjZUxvY2F0aW9uKHNvdXJjZU5hbWUsIG1lc3NhZ2Uu
bGluZSAtIDEsIDApOworICAgIH0sCisKKyAgICBfc291cmNlTG9jYXRpb25Gb3JCcmVha3BvaW50
OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSBi
cmVha3BvaW50LnVybCB8fCBicmVha3BvaW50LnNvdXJjZUlEOworICAgICAgICB2YXIgbG9jYXRp
b24gPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGggPyBicmVha3BvaW50LmxvY2F0aW9uc1sw
XSA6IGJyZWFrcG9pbnQ7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxMb2NhdGlvblRvU291
cmNlTG9jYXRpb24oc291cmNlTmFtZSwgbG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24uY29s
dW1uTnVtYmVyKTsKKyAgICB9LAorCisgICAgX3NvdXJjZUxvY2F0aW9uRm9yQ2FsbEZyYW1lOiBm
dW5jdGlvbihjYWxsRnJhbWUpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0ID0gV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0Rm9yU291cmNlSUQoY2FsbEZyYW1lLnNvdXJjZUlEKTsK
KyAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSBzY3JpcHQuc291cmNlVVJMIHx8IHNjcmlwdC5zb3Vy
Y2VJRDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FjdHVhbExvY2F0aW9uVG9Tb3VyY2VMb2NhdGlv
bihzb3VyY2VOYW1lLCBjYWxsRnJhbWUubGluZSwgY2FsbEZyYW1lLmNvbHVtbik7CisgICAgfSwK
KworICAgIF9hY3R1YWxMb2NhdGlvblRvU291cmNlTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZU5h
bWUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAgIC8vIFRPRE86IHVz
ZSBzb3VyY2UgbWFwcGluZyB0byBvYnRhaW4gc291cmNlIGxvY2F0aW9uLgorICAgICAgICByZXR1
cm4geyBzb3VyY2VOYW1lOiBzb3VyY2VOYW1lLCBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9OworICAgIH0sCisKKyAgICBfZW5jb2RlU291cmNlTG9j
YXRpb246IGZ1bmN0aW9uKHNvdXJjZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNv
dXJjZUxvY2F0aW9uLnNvdXJjZU5hbWUgKyAiOiIgKyBzb3VyY2VMb2NhdGlvbi5saW5lTnVtYmVy
OworICAgIH0sCisKICAgICBfc2hvd1NjcmlwdE9yUmVzb3VyY2U6IGZ1bmN0aW9uKHNjcmlwdE9y
UmVzb3VyY2UsIG9wdGlvbnMpCiAgICAgewogICAgICAgICAvLyBvcHRpb25zID0ge2xpbmU6LCBz
aG91bGRIaWdobGlnaHRMaW5lOiwgZnJvbUJhY2tGb3J3YXJkQWN0aW9uOiwgaW5pdGlhbExvYWQ6
fQpAQCAtNjYyLDcgKzgwNiw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgIF9jbGVhckN1cnJlbnRFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUpCi0gICAgICAgICAgICB0aGlz
Ll9leGVjdXRpb25Tb3VyY2VGcmFtZS5jbGVhckV4ZWN1dGlvbkxvY2F0aW9uKCk7CisgICAgICAg
ICAgICB0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZS5jbGVhckV4ZWN1dGlvbkxpbmUoKTsKICAg
ICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lOwogICAgIH0sCiAKQEAgLTY4
Miw5ICs4MjYsMTIgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHZhciBzY3JpcHRPclJlc291cmNlID0gc2NyaXB0LnJlc291cmNlIHx8IHNjcmlwdDsK
ICAgICAgICAgdGhpcy5fc2hvd1NjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSwge2xp
bmU6IGN1cnJlbnRGcmFtZS5saW5lfSk7CiAKLSAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNl
RnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFtZUZvclNjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNv
dXJjZSk7Ci0gICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZSkKLSAgICAgICAg
ICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lLnNldEV4ZWN1dGlvbkxvY2F0aW9uKGN1cnJl
bnRGcmFtZS5saW5lLCBjdXJyZW50RnJhbWUuY29sdW1uKTsKKyAgICAgICAgdmFyIHNvdXJjZUxv
Y2F0aW9uID0gdGhpcy5fc291cmNlTG9jYXRpb25Gb3JDYWxsRnJhbWUoY3VycmVudEZyYW1lKTsK
KyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVb
c291cmNlTG9jYXRpb24uc291cmNlTmFtZV07CisgICAgICAgIGlmIChzb3VyY2VGcmFtZSAmJiBz
b3VyY2VGcmFtZS5sb2FkZWQpIHsKKyAgICAgICAgICAgIHNvdXJjZUZyYW1lLnNldEV4ZWN1dGlv
bkxpbmUoc291cmNlTG9jYXRpb24ubGluZU51bWJlcik7CisgICAgICAgICAgICB0aGlzLl9leGVj
dXRpb25Tb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lOworICAgICAgICB9CiAgICAgfSwKIAogICAg
IF9jaGFuZ2VWaXNpYmxlRmlsZTogZnVuY3Rpb24oZXZlbnQpCkBAIC0xMDg1LDcgKzEyMzIsNyBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90
eXBlID0gewogICAgICAgICB2YXIgbGluZU51bWJlciA9IDA7CiAgICAgICAgIHZhciBjb2x1bW5O
dW1iZXIgPSAwOwogICAgICAgICB2YXIgc2NyaXB0UmFuZ2VzID0gW107Ci0gICAgICAgIGZ1bmN0
aW9uIGFwcGVuZENodW5rKGNodW5rLCBpc1NjcmlwdCkKKyAgICAgICAgZnVuY3Rpb24gYXBwZW5k
Q2h1bmsoY2h1bmssIHNjcmlwdCkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHN0YXJ0ID0g
eyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9Owog
ICAgICAgICAgICAgc291cmNlICs9IGNodW5rOwpAQCAtMTA5OCwxNSArMTI0NSwxNSBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlciA9IGxpbmVFbmRpbmdzW2xpbmVDb3VudCAt
IDFdIC0gbGluZUVuZGluZ3NbbGluZUNvdW50IC0gMl0gLSAxOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdmFyIGVuZCA9IHsgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVy
OiBjb2x1bW5OdW1iZXIgfTsKLSAgICAgICAgICAgIGlmIChpc1NjcmlwdCkKLSAgICAgICAgICAg
ICAgICBzY3JpcHRSYW5nZXMucHVzaCh7IHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQgfSk7CisgICAg
ICAgICAgICBpZiAoc2NyaXB0KQorICAgICAgICAgICAgICAgIHNjcmlwdFJhbmdlcy5wdXNoKHsg
c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCwgc291cmNlSUQ6IHNjcmlwdC5zb3VyY2VJRCB9KTsKICAg
ICAgICAgfQogCiAgICAgICAgIHZhciBtaW1lVHlwZTsKICAgICAgICAgaWYgKHNjcmlwdHMubGVu
Z3RoID09PSAxICYmICFzY3JpcHRzWzBdLmxpbmVPZmZzZXQgJiYgIXNjcmlwdHNbMF0uY29sdW1u
T2Zmc2V0KSB7CiAgICAgICAgICAgICAvLyBTaW5nbGUgc2NyaXB0IHNvdXJjZS4KICAgICAgICAg
ICAgIG1pbWVUeXBlID0gInRleHQvamF2YXNjcmlwdCI7Ci0gICAgICAgICAgICBhcHBlbmRDaHVu
ayhzb3VyY2VzWzBdLCB0cnVlKTsKKyAgICAgICAgICAgIGFwcGVuZENodW5rKHNvdXJjZXNbMF0s
IHNjcmlwdHNbMF0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU2NyaXB0cyBp
bmxpbmVkIGluIGh0bWwgZG9jdW1lbnQuCiAgICAgICAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L2h0
bWwiOwpAQCAtMTEyMSw3ICsxMjY4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udGVu
dFByb3ZpZGVyRm9yU2NyaXB0LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgICAgIC8vIEFk
ZCBzY3JpcHQgdGFnLgogICAgICAgICAgICAgICAgIGFwcGVuZENodW5rKHNjcmlwdE9wZW5UYWcp
OwotICAgICAgICAgICAgICAgIGFwcGVuZENodW5rKHNvdXJjZXNbaV0sIHRydWUpOworICAgICAg
ICAgICAgICAgIGFwcGVuZENodW5rKHNvdXJjZXNbaV0sIHNjcmlwdHNbaV0pOwogICAgICAgICAg
ICAgICAgIGFwcGVuZENodW5rKHNjcmlwdENsb3NlVGFnKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJh
bWUuanMKaW5kZXggZjM1ZGIyYS4uYTgxZDkwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC01MSw2ICs1MSwxMCBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihjb250ZW50UHJvdmlkZXIsIHVybCwgaXNT
Y3JpcHQpCiAgICAgdGhpcy5fcG9wb3Zlck9iamVjdEdyb3VwID0gInBvcG92ZXIiOwogfQogCitX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzID0geworICAgIExvYWRlZDogImxvYWRlZCIK
K30KKwogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIHNob3c6
IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQpCkBAIC04NSw2ICs4OSwxMSBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGln
aHQoKTsKICAgICB9LAogCisgICAgZ2V0IGxvYWRlZCgpCisgICAgeworICAgICAgICByZXR1cm4g
ISF0aGlzLl9jb250ZW50OworICAgIH0sCisKICAgICBoYXNDb250ZW50OiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNSw3ICsxMjQsNyBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB0aGlzLl9tZXNzYWdlcy5wdXNoKG1zZyk7CiAgICAgICAgIGlmICh0aGlzLl90ZXh0Vmlld2Vy
KQotICAgICAgICAgICAgdGhpcy5fYWRkTWVzc2FnZVRvU291cmNlKG1zZyk7CisgICAgICAgICAg
ICB0aGlzLmFkZENvbnNvbGVNZXNzYWdlVG9Tb3VyY2UobXNnLmxpbmUgLSAxLCBtc2cpOwogICAg
IH0sCiAKICAgICBjbGVhck1lc3NhZ2VzOiBmdW5jdGlvbigpCkBAIC0yMDUsMTEgKzIxNCw5IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fZGVsYXllZEZpbmRTZWFyY2hNYXRjaGVzOwogICAgICAgICB9CiAKLSAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMuTG9hZGVkKTsKIAot
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFr
cG9pbnRBZGRlZCwgdGhpcyk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9p
bnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcy5fYnJlYWtwb2ludFJlc29s
dmVkLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAgICAg
fSwKIAogICAgIF9zZXRUZXh0Vmlld2VyRGVjb3JhdGlvbnM6IGZ1bmN0aW9uKCkKQEAgLTIyMiwz
MiArMjI5LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSgpOwogICAgICAgICB0aGlzLl91
cGRhdGVEaWZmRGVjb3JhdGlvbnMoKTsKIAotICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uTG9j
YXRpb24pCi0gICAgICAgICAgICB0aGlzLl9zZXRFeGVjdXRpb25Mb2NhdGlvbigpOwotCi0gICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1iZXIgPSB7fTsKLSAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJZCA9IHt9OwotICAgICAg
ICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5icmVha3BvaW50
czsKLSAgICAgICAgZm9yICh2YXIgaWQgaW4gYnJlYWtwb2ludHMpCi0gICAgICAgICAgICB0aGlz
Ll9icmVha3BvaW50QWRkZWQoeyBkYXRhOiBicmVha3BvaW50c1tpZF0gfSk7Ci0KICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZXNpemUoKTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVu
ZFVwZGF0ZXMoKTsKICAgICB9LAogCi0gICAgX3Nob3VsZERpc3BsYXlCcmVha3BvaW50OiBmdW5j
dGlvbihicmVha3BvaW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3VybCkKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl91cmwgPT09IGJyZWFrcG9pbnQudXJsOwotICAgICAgICB2YXIgc2Ny
aXB0cyA9IHRoaXMuX2NvbnRlbnQuc2NyaXB0UmFuZ2VzOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50
LnNvdXJjZUlEID09PSBzY3JpcHRzW2ldLnNvdXJjZUlEKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCiAgICAg
cGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnksIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
Ly8gQ2FsbCBzZWFyY2hDYW5jZWxlZCBzaW5jZSBpdCB3aWxsIHJlc2V0IGV2ZXJ5dGhpbmcgd2Ug
bmVlZCBiZWZvcmUgZG9pbmcgYSBuZXcgc2VhcmNoLgpAQCAtMzYxLDI2ICszNDcsMTYgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgbXNnLl9yZXNvdXJj
ZU1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIiAocmVwZWF0ZWQgJWQgdGltZXMpIiwgbXNnLnJlcGVhdENvdW50KTsKICAgICB9LAog
Ci0gICAgc2V0RXhlY3V0aW9uTG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcikKKyAgICBzZXRFeGVjdXRpb25MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsK
LSAgICAgICAgdGhpcy5fZXhlY3V0aW9uTG9jYXRpb24gPSB7IGxpbmVOdW1iZXI6IGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07Ci0gICAgICAgIGlmICh0aGlzLl90ZXh0
Vmlld2VyKQotICAgICAgICAgICAgdGhpcy5fc2V0RXhlY3V0aW9uTG9jYXRpb24oKTsKKyAgICAg
ICAgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIHRoaXMu
X3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1dGlvbi1s
aW5lIik7CiAgICAgfSwKIAotICAgIGNsZWFyRXhlY3V0aW9uTG9jYXRpb246IGZ1bmN0aW9uKCkK
KyAgICBjbGVhckV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl90ZXh0Vmlld2VyKSB7Ci0gICAgICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIg
PSB0aGlzLl9jb250ZW50LmFjdHVhbExvY2F0aW9uVG9Tb3VyY2VGcmFtZUxpbmVOdW1iZXIodGhp
cy5fZXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJlciwgdGhpcy5fZXhlY3V0aW9uTG9jYXRpb24u
Y29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3Jh
dGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwotICAg
ICAgICB9Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25Mb2NhdGlvbjsKLSAgICB9LAot
Ci0gICAgX3NldEV4ZWN1dGlvbkxvY2F0aW9uOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9jb250ZW50LmFjdHVhbExvY2F0aW9uVG9T
b3VyY2VGcmFtZUxpbmVOdW1iZXIodGhpcy5fZXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJlciwg
dGhpcy5fZXhlY3V0aW9uTG9jYXRpb24uY29sdW1uTnVtYmVyKTsKLSAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5hZGREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1
dGlvbi1saW5lIik7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbih0
aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCAid2Via2l0LWV4ZWN1dGlvbi1saW5lIik7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyOwogICAgIH0sCiAKICAgICBfdXBk
YXRlRGlmZkRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC00MTQsMjYgKzM5MCwyNiBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGxl
bmd0aCA9IHRoaXMuX21lc3NhZ2VzLmxlbmd0aDsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2FkZE1lc3NhZ2VUb1NvdXJjZSh0aGlz
Ll9tZXNzYWdlc1tpXSk7CisgICAgICAgICAgICB0aGlzLmFkZENvbnNvbGVNZXNzYWdlVG9Tb3Vy
Y2UodGhpcy5fbWVzc2FnZXNbaV0ubGluZSAtIDEsIHRoaXMuX21lc3NhZ2VzW2ldKTsKICAgICB9
LAogCi0gICAgX2FkZE1lc3NhZ2VUb1NvdXJjZTogZnVuY3Rpb24obXNnKQorICAgIGFkZENvbnNv
bGVNZXNzYWdlVG9Tb3VyY2U6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIG1zZykKICAgICB7Ci0gICAg
ICAgIGlmIChtc2cubGluZSA+IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICBp
ZiAobGluZU51bWJlciA8IDAgfHwgbGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgbWVzc2FnZUJ1YmJsZUVs
ZW1lbnQgPSB0aGlzLl9tZXNzYWdlQnViYmxlc1ttc2cubGluZV07CisgICAgICAgIHZhciBtZXNz
YWdlQnViYmxlRWxlbWVudCA9IHRoaXMuX21lc3NhZ2VCdWJibGVzW2xpbmVOdW1iZXJdOwogICAg
ICAgICBpZiAoIW1lc3NhZ2VCdWJibGVFbGVtZW50IHx8IG1lc3NhZ2VCdWJibGVFbGVtZW50Lm5v
ZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAhbWVzc2FnZUJ1YmJsZUVsZW1lbnQuaGFz
U3R5bGVDbGFzcygid2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUiKSkgewogICAgICAgICAgICAg
bWVzc2FnZUJ1YmJsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAg
ICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtaHRtbC1t
ZXNzYWdlLWJ1YmJsZSI7Ci0gICAgICAgICAgICB0aGlzLl9tZXNzYWdlQnViYmxlc1ttc2cubGlu
ZV0gPSBtZXNzYWdlQnViYmxlRWxlbWVudDsKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
YWRkRGVjb3JhdGlvbihtc2cubGluZSAtIDEsIG1lc3NhZ2VCdWJibGVFbGVtZW50KTsKKyAgICAg
ICAgICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzW2xpbmVOdW1iZXJdID0gbWVzc2FnZUJ1YmJsZUVs
ZW1lbnQ7CisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51
bWJlciwgbWVzc2FnZUJ1YmJsZUVsZW1lbnQpOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIHJv
d01lc3NhZ2VzID0gdGhpcy5fcm93TWVzc2FnZXNbbXNnLmxpbmVdOworICAgICAgICB2YXIgcm93
TWVzc2FnZXMgPSB0aGlzLl9yb3dNZXNzYWdlc1tsaW5lTnVtYmVyXTsKICAgICAgICAgaWYgKCFy
b3dNZXNzYWdlcykgewogICAgICAgICAgICAgcm93TWVzc2FnZXMgPSBbXTsKLSAgICAgICAgICAg
IHRoaXMuX3Jvd01lc3NhZ2VzW21zZy5saW5lXSA9IHJvd01lc3NhZ2VzOworICAgICAgICAgICAg
dGhpcy5fcm93TWVzc2FnZXNbbGluZU51bWJlcl0gPSByb3dNZXNzYWdlczsKICAgICAgICAgfQog
CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93TWVzc2FnZXMubGVuZ3RoOyArK2kpIHsK
QEAgLTQ3MSw2MyArNDQ3LDE4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdlTGluZUVsZW1lbnQgPSBtZXNzYWdlTGlu
ZUVsZW1lbnQ7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwotCi0gICAgICAg
IGlmICghdGhpcy5fc2hvdWxkRGlzcGxheUJyZWFrcG9pbnQoYnJlYWtwb2ludCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHJlc29sdmVkID0gYnJlYWtwb2ludC5sb2NhdGlv
bnMubGVuZ3RoOwotICAgICAgICB2YXIgbG9jYXRpb24gPSByZXNvbHZlZCA/IGJyZWFrcG9pbnQu
bG9jYXRpb25zWzBdIDogYnJlYWtwb2ludDsKLQotICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVO
dW1iZXIgPSB0aGlzLl9jb250ZW50LmFjdHVhbExvY2F0aW9uVG9Tb3VyY2VGcmFtZUxpbmVOdW1i
ZXIobG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKLSAgICAgICAg
aWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBleGlzdGluZ0JyZWFrcG9pbnRJZCA9
IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVO
dW1iZXJdOwotICAgICAgICBpZiAoZXhpc3RpbmdCcmVha3BvaW50SWQpIHsKLSAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5p
ZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9icmVh
a3BvaW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyW2JyZWFrcG9pbnQuaWRdID0gdGV4dFZpZXdl
ckxpbmVOdW1iZXI7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3Bv
aW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdID0gYnJlYWtwb2ludC5pZDsKLSAgICAgICAgdGhp
cy5fc2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIHJlc29sdmVk
LCBicmVha3BvaW50LmVuYWJsZWQsICEhYnJlYWtwb2ludC5jb25kaXRpb24pOwotICAgIH0sCi0K
LSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIGJyZWFrcG9pbnRJZCA9IGV2ZW50LmRhdGE7Ci0KLSAgICAgICAgdmFyIHRleHRWaWV3ZXJM
aW5lTnVtYmVyID0gdGhpcy5fYnJlYWtwb2ludElkVG9UZXh0Vmlld2VyTGluZU51bWJlclticmVh
a3BvaW50SWRdOwotICAgICAgICBpZiAodGV4dFZpZXdlckxpbmVOdW1iZXIgPT09IHVuZGVmaW5l
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2lu
dElkVG9UZXh0Vmlld2VyTGluZU51bWJlclticmVha3BvaW50SWRdOwotICAgICAgICBkZWxldGUg
dGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJZFt0ZXh0Vmlld2VyTGluZU51
bWJlcl07Ci0gICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3
ZXJMaW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7Ci0g
ICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkKHsgZGF0YTogYnJlYWtwb2ludC5pZCB9KTsK
LSAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKHsgZGF0YTogYnJlYWtwb2ludCB9KTsKLSAg
ICB9LAotCi0gICAgX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVy
LCByZXNvbHZlZCwgZW5hYmxlZCwgaGFzQ29uZGl0aW9uKQorICAgIGFkZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29sdmVkLCBjb25kaXRpb25hbCwgZW5hYmxlZCkKICAgICB7
CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7CiAgICAgICAgIHRoaXMu
X3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQi
KTsKICAgICAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5h
ZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwot
ICAgICAgICBpZiAoaGFzQ29uZGl0aW9uKQorICAgICAgICBpZiAoY29uZGl0aW9uYWwpCiAgICAg
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtp
dC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5k
VXBkYXRlcygpOwogICAgIH0sCiAKLSAgICBfcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb246IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51
bWJlcikKICAgICB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7CiAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Vi
a2l0LWJyZWFrcG9pbnQiKTsKQEAgLTU1NywxMCArNDg4LDEwIEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlv
bmFsQnJlYWtwb2ludCgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0
QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIHRydWUsIHRydWUsIHRy
dWUpOworICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludCh0ZXh0Vmlld2VyTGluZU51
bWJlciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRp
dEJyZWFrcG9pbnRDb25kaXRpb24oY29tbWl0dGVkLCBjb25kaXRpb24pCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVjb3JhdGlv
bih0ZXh0Vmlld2VyTGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3Zl
QnJlYWtwb2ludCh0ZXh0Vmlld2VyTGluZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChjb21taXR0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50
KHRleHRWaWV3ZXJMaW5lTnVtYmVyLCBjb25kaXRpb24sIHRydWUpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTkxMywxMCArODQ0LDIzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xlQnJl
YWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwKIAotICAgIF9maW5kQnJlYWtwb2ludDogZnVuY3Rp
b24odGV4dFZpZXdlckxpbmVOdW1iZXIpCisgICAgX2ZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihs
aW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX3RleHRW
aWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdOwotICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludEZvcklkKGJy
ZWFrcG9pbnRJZCk7CisgICAgICAgIHZhciB1cmwgPSB0aGlzLl91cmw7CisgICAgICAgIHZhciBs
b2NhdGlvbiA9IHRoaXMuX2NvbnRlbnQuc291cmNlRnJhbWVMaW5lTnVtYmVyVG9BY3R1YWxMb2Nh
dGlvbihsaW5lTnVtYmVyKTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyKGJyZWFrcG9pbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50LnVybCkgeworICAgICAgICAgICAg
ICAgIGlmIChicmVha3BvaW50LnVybCAhPT0gdXJsKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChicmVh
a3BvaW50LnNvdXJjZUlEICE9PSBsb2NhdGlvbi5zb3VyY2VJRCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGggPyBicmVha3BvaW50LmxvY2F0aW9uc1sw
XS5saW5lTnVtYmVyIDogYnJlYWtwb2ludC5saW5lTnVtYmVyOworICAgICAgICAgICAgcmV0dXJu
IGxpbmVOdW1iZXIgPT09IGxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnF1ZXJ5QnJlYWtwb2ludHMoZmlsdGVy
KVswXTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzdiMWY2Yi4u
MmI4NWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
MS0wMi0xOCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBtb3ZlIHNvdXJjZSBtYXBwaW5nIGZyb20gU291cmNlRnJhbWUgdG8gU2NyaXB0c1BhbmVsLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2NDUKKwor
ICAgICAgICAqIHNyYy9qcy9UZXN0cy5qczoKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBl
Ll9jaGVja0V4ZWN1dGlvbkxpbmUpOgorCiAyMDExLTAyLTE3ICBBbmRyZXcgV2lsc29uICA8YXR3
aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3
ODkzNi4KQEAgLTcyLDYgKzgyLDE4IEBACiAKIDIwMTEtMDItMTcgIFBhdmVsIFBvZGl2aWxvdiAg
PHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBzb3VyY2UgbWFwcGluZyBmcm9t
IFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8g
bWFwIG9uZSBzY3JpcHQgdG8gc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisKKyAgICAgICAgKiBzcmMv
anMvVGVzdHMuanM6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5fY2hlY2tFeGVjdXRp
b25MaW5lKToKKworMjAxMS0wMi0xNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9t
aXVtLm9yZz4KKwogICAgICAgICBVbnJldmlld2VkLCBpbnRlcmFjdGl2ZSB1aSB0ZXN0IGZpeCBm
b3Igcjc4ODA4LgogCiAgICAgICAgICogc3JjL2pzL1Rlc3RzLmpzOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMuanMgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9qcy9UZXN0cy5qcwppbmRleCA0MzQwZTZkLi5hNDY0ZGQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcwpAQCAtNjE2LDcgKzYxNiw3IEBAIFRlc3RTdWl0ZS5w
cm90b3R5cGUuZXZhbHVhdGVJbkNvbnNvbGVfID0gZnVuY3Rpb24oY29kZSwgY2FsbGJhY2spCiAg
Ki8KIFRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrRXhlY3V0aW9uTGluZSA9IGZ1bmN0aW9uKHNv
dXJjZUZyYW1lLCBsaW5lTnVtYmVyLCBsaW5lQ29udGVudCkKIHsKLSAgICB0aGlzLmFzc2VydEVx
dWFscyhsaW5lTnVtYmVyLCBzb3VyY2VGcmFtZS5fZXhlY3V0aW9uTG9jYXRpb24ubGluZU51bWJl
ciArIDEsICJVbmV4cGVjdGVkIGV4ZWN1dGlvbiBsaW5lIG51bWJlci4iKTsKKyAgICB0aGlzLmFz
c2VydEVxdWFscyhsaW5lTnVtYmVyLCBzb3VyY2VGcmFtZS5fZXhlY3V0aW9uTGluZU51bWJlciAr
IDEsICJVbmV4cGVjdGVkIGV4ZWN1dGlvbiBsaW5lIG51bWJlci4iKTsKICAgICB0aGlzLmFzc2Vy
dEVxdWFscyhsaW5lQ29udGVudCwgc291cmNlRnJhbWUuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1i
ZXIgLSAxKSwgIlVuZXhwZWN0ZWQgZXhlY3V0aW9uIGxpbmUgdGV4dC4iKTsKIH0KIAo=
</data>
<flag name="review"
          id="74667"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82953</attachid>
            <date>2011-02-18 06:32:05 -0800</date>
            <delta_ts>2011-02-21 10:04:13 -0800</delta_ts>
            <desc>Patch + test.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33492</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwODRkM2JiLi43ZDdkMTQxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDIt
MTggIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92
ZSBzb3VyY2UgbWFwcGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0U291cmNlKToKKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qczoKKyAgICAgICAg
KGluaXRpYWxpemVfSW5zcGVjdG9yVGVzdC5JbnNwZWN0b3JUZXN0LnJ1blRlc3QuY3JlYXRlV3Jh
cHBlci5yZXR1cm4udHJ5KToKKyAgICAgICAgKGluaXRpYWxpemVfSW5zcGVjdG9yVGVzdC5JbnNw
ZWN0b3JUZXN0LnJ1blRlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2Ut
ZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIv
c291cmNlLWZyYW1lLmh0bWw6IEFkZGVkLgorCiAyMDExLTAyLTE3ICBNaWhhaSBQYXJwYXJpdGEg
IDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJh
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIt
dGVzdC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3Qu
anMKaW5kZXggNjAwNDg0MC4uNmUzNTY0NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzCkBAIC0xMjAsNyArMTIwLDcgQEAgSW5zcGVj
dG9yVGVzdC5zaG93U2NyaXB0U291cmNlID0gZnVuY3Rpb24oc2NyaXB0TmFtZSwgY2FsbGJhY2sp
CiAgICAgaWYgKEluc3BlY3RvclRlc3QuX3NjcmlwdHNBcmVQYXJzZWQoW3NjcmlwdE5hbWVdKSkK
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5fc2hvd1NjcmlwdFNvdXJjZShzY3JpcHROYW1lLCBjYWxs
YmFjayk7CiAgICAgIGVsc2UKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5fYWRkU25pZmZlcihXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbCwgIl9wYXJzZWRTY3JpcHRTb3VyY2UiLCBJbnNwZWN0b3JU
ZXN0LnNob3dTY3JpcHRTb3VyY2UuYmluZChJbnNwZWN0b3JUZXN0LCBzY3JpcHROYW1lLCBjYWxs
YmFjaykpOworICAgICAgICBJbnNwZWN0b3JUZXN0Ll9hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0cywgIl9hZGRTY3JpcHRUb0ZpbGVzTWVudSIsIEluc3BlY3RvclRlc3Quc2hv
d1NjcmlwdFNvdXJjZS5iaW5kKEluc3BlY3RvclRlc3QsIHNjcmlwdE5hbWUsIGNhbGxiYWNrKSk7
CiB9OwogCiBJbnNwZWN0b3JUZXN0Ll9zY3JpcHRzQXJlUGFyc2VkID0gZnVuY3Rpb24oc2NyaXB0
cykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rv
ci10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRl
c3QuanMKaW5kZXggYTkyNWIxMS4uYmNjNzVjNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKQEAgLTEzNSw2ICsxMzUsMjYgQEAg
SW5zcGVjdG9yVGVzdC5jcmVhdGVLZXlFdmVudCA9IGZ1bmN0aW9uKGtleUlkZW50aWZpZXIpCiAg
ICAgcmV0dXJuIGV2dDsKIH0KIAorSW5zcGVjdG9yVGVzdC5ydW5UZXN0ID0gZnVuY3Rpb24oc3Rl
cHMpCit7CisgICAgdmFyIHdyYXBwZXJzID0gW107CisgICAgZnVuY3Rpb24gY3JlYXRlV3JhcHBl
cihzdGVwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGVwc1tzdGVwXS5hcHBseShudWxsLCBb
d3JhcHBlcnNbc3RlcCArIDFdXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
dW1lbnRzKSkpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRSZXN1bHQoIkV4Y2VwdGlvbiBpbiBzdGVwICIgKyBzdGVwICsgIjoiICsg
KGUuc3RhY2sgfHwgZSkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVU
ZXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdGVwcy5sZW5ndGg7ICsraSkKKyAgICAgICAgd3JhcHBlcnMucHVzaChjcmVhdGVX
cmFwcGVyKGkpKTsKKyAgICB3cmFwcGVyc1swXSgpOworfQorCiBJbnNwZWN0b3JUZXN0LnJ1blRl
c3RTdWl0ZSA9IGZ1bmN0aW9uKHRlc3RTdWl0ZSkKIHsKICAgICB2YXIgdGVzdFN1aXRlVGVzdHMg
PSB0ZXN0U3VpdGUuc2xpY2UoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci9zb3VyY2UtZnJhbWUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODNhZDE3OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAg
QEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxMDogdGVzdCBlcnJvciBtZXNzYWdlCitUZXN0cyB0
aGF0IGl0J3MgcG9zc2libGUgdG8gc2V0IGJyZWFrcG9pbnQgaW4gc291cmNlIGZyYW1lLCBhbmQg
dGhhdCBzb3VyY2UgZnJhbWUgZGlzcGxheXMgYnJlYWtwb2ludHMgYW5kIGNvbnNvbGUgZXJyb3Jz
LgorCitEZWJ1Z2dlciB3YXMgZW5hYmxlZC4KK1NjcmlwdCBzb3VyY2Ugd2FzIHNob3duLgorQnJl
YWtwb2ludCBhZGRlZCB0byBzb3VyY2UgZnJhbWUgYXQgbGluZSAxNworTWVzc2FnZSBhZGRlZCB0
byBzb3VyY2UgZnJhbWUgYXQgbGluZSA5CitNZXNzYWdlIHRleHQ6IHNvdXJjZS1mcmFtZS5odG1s
OjEwdGVzdCBlcnJvciBtZXNzYWdlCitEZWJ1Z2dlciB3YXMgZGlzYWJsZWQuCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUuaHRtbCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2YwZmEwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS5odG1sCkBAIC0wLDAgKzEs
NTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0
PgorCitmdW5jdGlvbiBhZGRFcnJvclRvQ29uc29sZSgpCit7CisgICAgY29uc29sZS5lcnJvcigi
dGVzdCBlcnJvciBtZXNzYWdlIik7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIEluc3Bl
Y3RvclRlc3QucnVuVGVzdChbCisgICAgICAgIGZ1bmN0aW9uKG5leHQpIHsKKyAgICAgICAgICAg
IEluc3BlY3RvclRlc3Quc3RhcnREZWJ1Z2dlclRlc3QobmV4dCwgdHJ1ZSk7CisgICAgICAgIH0s
CisgICAgICAgIGZ1bmN0aW9uKG5leHQpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2hv
d1NjcmlwdFNvdXJjZSgic291cmNlLWZyYW1lLmh0bWwiLCBuZXh0KTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZnVuY3Rpb24obmV4dCwgc291cmNlRnJhbWUpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlIHdhcyBzaG93bi4iKTsKKyAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuX2FkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZSwgImFkZEJyZWFrcG9pbnQiLCBuZXh0KTsKKyAgICAgICAgICAgIHNvdXJjZUZyYW1lLl9z
ZXRCcmVha3BvaW50KDE3LCAiIiwgdHJ1ZSk7CisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9u
KG5leHQsIGxpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCJCcmVha3BvaW50IGFkZGVkIHRvIHNvdXJjZSBmcmFtZSBhdCBsaW5lICIgKyBsaW5lTnVtYmVy
KTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuX2FkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSwgImFkZENvbnNvbGVNZXNzYWdlVG9Tb3VyY2UiLCBuZXh0KTsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoImFkZEVycm9yVG9Db25z
b2xlKCkiKTsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24obmV4dCwgbGluZU51bWJlciwg
bWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQo
Ik1lc3NhZ2UgYWRkZWQgdG8gc291cmNlIGZyYW1lIGF0IGxpbmUgIiArIGxpbmVOdW1iZXIpOwor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk1lc3NhZ2UgdGV4dDogIiArIG1l
c3NhZ2UubWVzc2FnZSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlRGVidWdn
ZXJUZXN0KCk7CisgICAgICAgIH0KKyAgICBdKTsKK307CisKKzwvc2NyaXB0PgorCis8L2hlYWQ+
CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3RzIHRoYXQgaXQncyBwb3NzaWJs
ZSB0byBzZXQgYnJlYWtwb2ludCBpbiBzb3VyY2UgZnJhbWUsIGFuZCB0aGF0Citzb3VyY2UgZnJh
bWUgZGlzcGxheXMgYnJlYWtwb2ludHMgYW5kIGNvbnNvbGUgZXJyb3JzLgorPC9wPgorCis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDU3ZGE2YS4uYTUxMDViOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUzIEBACisyMDExLTAyLTE4ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgc291cmNlIG1hcHBpbmcgZnJvbSBTb3VyY2VGcmFt
ZSB0byBTY3JpcHRzUGFuZWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01NDY0NQorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIHRvIG1hcCBvbmUgc2Ny
aXB0IHRvIHNldmVyYWwgc291cmNlIGZpbGVzLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9k
ZWJ1Z2dlci9zb3VyY2UtZnJhbWUuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zY3JpcHRTb3Vy
Y2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
LmFkZENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlLmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50UmVzb2x2
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2FkZEJy
ZWFrcG9pbnRUb1NvdXJjZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlLl9zb3VyY2VGcmFtZUZvclJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3VyY2VGcmFtZUZvclNjcmlwdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fYWRkU291cmNlRnJhbWUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3JlbW92ZVNvdXJj
ZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9z
b3VyY2VGcmFtZUxvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnBy
b3RvdHlwZS5fc291cmNlTG9jYXRpb25Gb3JDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fc291cmNlTG9jYXRpb25Gb3JCcmVha3Bv
aW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3Vy
Y2VMb2NhdGlvbkZvckNhbGxGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsLnByb3RvdHlwZS5fYWN0dWFsTG9jYXRpb25Ub1NvdXJjZUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9lbmNvZGVTb3VyY2VMb2NhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fY2xlYXJD
dXJyZW50RXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZS5fY2FsbEZyYW1lU2VsZWN0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lQ29udGVudFByb3ZpZGVyRm9yU2NyaXB0LnByb3RvdHlwZS5fYnVpbGRTb3VyY2Up
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmdldCBsb2FkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5hZGRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NyZWF0ZVRleHRWaWV3ZXIp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fc2V0VGV4dFZp
ZXdlckRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUuc2V0RXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLmNsZWFyRXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLl9hZGRFeGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2UpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5hZGRDb25zb2xlTWVzc2Fn
ZVRvU291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
YWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5fY29udGV4dE1lbnUuYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50LmRpZEVkaXRC
cmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2NvbnRleHRNZW51LmFkZENvbmRpdGlvbmFsQnJlYWtwb2ludCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9maW5kQnJlYWtwb2ludC5maWx0
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZmluZEJy
ZWFrcG9pbnQpOgorCiAyMDExLTAyLTE3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDg0YzI0
ODguLmY3NDkyYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0c1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0c1BhbmVsLmpzCkBAIC0xODksNiArMTg5LDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5TY3JpcHRTb3Vy
Y2VDaGFuZ2VkLCB0aGlzLl9zY3JpcHRTb3VyY2VDaGFuZ2VkLCB0aGlzKTsKICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwgdGhpcy5fZGVidWdnZXJQYXVzZWQsIHRoaXMp
OwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUmVzdW1lZCwgdGhpcy5fZGVidWdn
ZXJSZXN1bWVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRk
ZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVu
dHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIHRoaXMuX2JyZWFrcG9p
bnRSZXNvbHZlZCwgdGhpcyk7CiB9CiAKIC8vIEtlZXAgdGhlc2UgaW4gc3luYyB3aXRoIFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyCkBAIC0yNTYsNiArMjU5LDcgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBvbGRTb3VyY2UgPSBldmVudC5k
YXRhLm9sZFNvdXJjZTsKIAogICAgICAgICB2YXIgc2NyaXB0ID0gV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuc2NyaXB0Rm9yU291cmNlSUQoc291cmNlSUQpOworCiAgICAgICAgIGlmIChzY3Jp
cHQucmVzb3VyY2UpIHsKICAgICAgICAgICAgIHZhciByZXZlcnRIYW5kbGUgPSBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNb2RlbC5lZGl0U2NyaXB0U291cmNlLmJpbmQoV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwsIHNvdXJjZUlELCBvbGRTb3VyY2UpOwogICAgICAgICAgICAgc2NyaXB0LnJlc291
cmNlLnNldENvbnRlbnQoc2NyaXB0LnNvdXJjZSwgcmV2ZXJ0SGFuZGxlKTsKQEAgLTMyNCwxNyAr
MzI4LDc0IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAg
YWRkQ29uc29sZU1lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2UpCiAgICAgeworICAgICAgICBpZiAo
IW1lc3NhZ2UuaXNFcnJvck9yV2FybmluZygpIHx8ICFtZXNzYWdlLm1lc3NhZ2UpCisgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgdGhpcy5fbWVzc2FnZXMucHVzaChtZXNzYWdlKTsKLSAg
ICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbbWVz
c2FnZS51cmxdOwotICAgICAgICBpZiAoc291cmNlRnJhbWUpCi0gICAgICAgICAgICBzb3VyY2VG
cmFtZS5hZGRNZXNzYWdlKG1lc3NhZ2UpOworCisgICAgICAgIHZhciBzb3VyY2VMb2NhdGlvbiA9
IHRoaXMuX3NvdXJjZUxvY2F0aW9uRm9yQ29uc29sZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAg
IHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZUxv
Y2F0aW9uLnNvdXJjZU5hbWVdOworICAgICAgICBpZiAoc291cmNlRnJhbWUgJiYgc291cmNlRnJh
bWUubG9hZGVkKQorICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkQ29uc29sZU1lc3NhZ2VUb1Nv
dXJjZShzb3VyY2VMb2NhdGlvbi5saW5lTnVtYmVyLCBtZXNzYWdlKTsKICAgICB9LAogCiAgICAg
Y2xlYXJDb25zb2xlTWVzc2FnZXM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX21l
c3NhZ2VzID0gW107Ci0gICAgICAgIGZvciAodmFyIHVybCBpbiB0aGlzLl9zb3VyY2VOYW1lVG9T
b3VyY2VGcmFtZSkKLSAgICAgICAgICAgIHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3Vy
bF0uY2xlYXJNZXNzYWdlcygpOworICAgICAgICBmb3IgKHZhciBzb3VyY2VOYW1lIGluIHRoaXMu
X3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lKSB7CisgICAgICAgICAgICB2YXIgc291cmNlRnJhbWUg
PSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VOYW1lXTsKKyAgICAgICAgICAg
IGlmIChzb3VyY2VGcmFtZS5sb2FkZWQpCisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuY2xl
YXJNZXNzYWdlcygpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9icmVha3BvaW50QWRkZWQ6
IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5k
YXRhOworCisgICAgICAgIHZhciBzb3VyY2VMb2NhdGlvbiA9IHRoaXMuX3NvdXJjZUxvY2F0aW9u
Rm9yQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhp
cy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTG9jYXRpb24uc291cmNlTmFtZV07Cisg
ICAgICAgIGlmICghc291cmNlRnJhbWUgfHwgIXNvdXJjZUZyYW1lLmxvYWRlZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy5fZW5jb2RlU291cmNlTG9jYXRpb24oc291
cmNlTG9jYXRpb24pIGluIHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVha3BvaW50SWQpIHsKKyAg
ICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgbW9yZSB0aGFuIG9uZSBicmVha3BvaW50IG9uIGEg
c2luZ2xlIHNvdXJjZSBmcmFtZSBsaW5lLiBSZW1vdmUgbmV3bHkgYWRkZWQgYnJlYWtwb2ludC4K
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQo
YnJlYWtwb2ludC5pZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLl9hZGRCcmVha3BvaW50VG9Tb3VyY2VGcmFtZShzb3VyY2VGcmFtZSwgc291cmNlTG9j
YXRpb24sIGJyZWFrcG9pbnQpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IGV2ZW50LmRh
dGE7CisKKyAgICAgICAgdmFyIHNvdXJjZUxvY2F0aW9uID0gdGhpcy5fYnJlYWtwb2ludElkVG9T
b3VyY2VMb2NhdGlvblticmVha3BvaW50SWRdOworICAgICAgICBpZiAoIXNvdXJjZUxvY2F0aW9u
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VMb2Nh
dGlvblRvQnJlYWtwb2ludElkW3RoaXMuX2VuY29kZVNvdXJjZUxvY2F0aW9uKHNvdXJjZUxvY2F0
aW9uKV07CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50SWRUb1NvdXJjZUxvY2F0aW9u
W2JyZWFrcG9pbnRJZF07CisKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNl
TmFtZVRvU291cmNlRnJhbWVbc291cmNlTG9jYXRpb24uc291cmNlTmFtZV07CisgICAgICAgIGlm
IChzb3VyY2VGcmFtZSAmJiBzb3VyY2VGcmFtZS5sb2FkZWQpCisgICAgICAgICAgICBzb3VyY2VG
cmFtZS5yZW1vdmVCcmVha3BvaW50KHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1iZXIpOworICAgIH0s
CisKKyAgICBfYnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAg
ICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dFJlbW92ZWQoeyBkYXRhOiBicmVha3BvaW50LmlkIH0pOworICAgICAgICB0aGlzLl9icmVha3Bv
aW50QWRkZWQoeyBkYXRhOiBicmVha3BvaW50IH0pOworICAgIH0sCisKKyAgICBfYWRkQnJlYWtw
b2ludFRvU291cmNlRnJhbWU6IGZ1bmN0aW9uKHNvdXJjZUZyYW1lLCBzb3VyY2VMb2NhdGlvbiwg
YnJlYWtwb2ludCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVha3Bv
aW50SWRbdGhpcy5fZW5jb2RlU291cmNlTG9jYXRpb24oc291cmNlTG9jYXRpb24pXSA9IGJyZWFr
cG9pbnQuaWQ7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRJZFRvU291cmNlTG9jYXRpb25bYnJl
YWtwb2ludC5pZF0gPSBzb3VyY2VMb2NhdGlvbjsKKyAgICAgICAgdmFyIHJlc29sdmVkICA9ISFi
cmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGg7CisgICAgICAgIHNvdXJjZUZyYW1lLmFkZEJyZWFr
cG9pbnQoc291cmNlTG9jYXRpb24ubGluZU51bWJlciwgcmVzb2x2ZWQsIGJyZWFrcG9pbnQuY29u
ZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQpOwogICAgIH0sCiAKICAgICBzZWxlY3RlZENhbGxG
cmFtZUlkOiBmdW5jdGlvbigpCkBAIC00MjgsNiArNDg5LDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZy
YW1lID0ge307CiAgICAgICAgIHRoaXMuX3NvdXJjZU5hbWVUb0ZpbGVzU2VsZWN0T3B0aW9uID0g
e307CiAgICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107CisgICAgICAgIHRoaXMuX2JyZWFrcG9p
bnRJZFRvU291cmNlTG9jYXRpb24gPSB7fTsKKyAgICAgICAgdGhpcy5fc291cmNlTG9jYXRpb25U
b0JyZWFrcG9pbnRJZCA9IHt9OworCiAgICAgICAgIHRoaXMuZmlsZXNTZWxlY3RFbGVtZW50LnJl
bW92ZUNoaWxkcmVuKCk7CiAgICAgICAgIHRoaXMuZnVuY3Rpb25zU2VsZWN0RWxlbWVudC5yZW1v
dmVDaGlsZHJlbigpOwogICAgICAgICB0aGlzLnZpZXdzQ29udGFpbmVyRWxlbWVudC5yZW1vdmVD
aGlsZHJlbigpOwpAQCAtNTIxLDcgKzU4NSw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2VzW2ldLnVybCA9PT0g
cmVzb3VyY2UudXJsKQogICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZE1lc3NhZ2UobWVz
c2FnZSk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVb
cmVzb3VyY2UudXJsXSA9IHNvdXJjZUZyYW1lOworICAgICAgICB0aGlzLl9hZGRTb3VyY2VGcmFt
ZShyZXNvdXJjZS51cmwsIHNvdXJjZUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHNvdXJjZUZyYW1l
OwogICAgIH0sCiAKQEAgLTUzNSw3ICs1OTksNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQoc2NyaXB0KTsKICAgICAg
ICAgdmFyIGlzU2NyaXB0ID0gIXNjcmlwdC5saW5lT2Zmc2V0ICYmICFzY3JpcHQuY29sdW1uT2Zm
c2V0OwogICAgICAgICBzb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUo
Y29udGVudFByb3ZpZGVyLCBzY3JpcHQuc291cmNlVVJMLCBpc1NjcmlwdCk7Ci0gICAgICAgIHRo
aXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZU5hbWVdID0gc291cmNlRnJhbWU7Cisg
ICAgICAgIHRoaXMuX2FkZFNvdXJjZUZyYW1lKHNvdXJjZU5hbWUsIHNvdXJjZUZyYW1lKTsKICAg
ICAgICAgcmV0dXJuIHNvdXJjZUZyYW1lOwogICAgIH0sCiAKQEAgLTU1Myw2ICs2MTcsODYgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMudmlz
aWJsZVZpZXcgPSBuZXdTb3VyY2VGcmFtZTsKICAgICB9LAogCisgICAgX2FkZFNvdXJjZUZyYW1l
OiBmdW5jdGlvbihzb3VyY2VOYW1lLCBzb3VyY2VGcmFtZSkKKyAgICB7CisgICAgICAgIHNvdXJj
ZUZyYW1lLl9zb3VyY2VOYW1lID0gc291cmNlTmFtZTsKKyAgICAgICAgc291cmNlRnJhbWUuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzLkxvYWRlZCwgdGhp
cy5fc291cmNlRnJhbWVMb2FkZWQsIHRoaXMpOworICAgICAgICB0aGlzLl9zb3VyY2VOYW1lVG9T
b3VyY2VGcmFtZVtzb3VyY2VOYW1lXSA9IHNvdXJjZUZyYW1lOworICAgIH0sCisKKyAgICBfcmVt
b3ZlU291cmNlRnJhbWU6IGZ1bmN0aW9uKHNvdXJjZU5hbWUpCisgICAgeworICAgICAgICB2YXIg
c291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VOYW1lXTsK
KyAgICAgICAgaWYgKCFzb3VyY2VGcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
c291cmNlRnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
RXZlbnRzLkxvYWRlZCwgdGhpcy5fc291cmNlRnJhbWVMb2FkZWQsIHRoaXMpOworICAgICAgICBk
ZWxldGUgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTmFtZV07CisgICAgICAg
IHJldHVybiBzb3VyY2VGcmFtZTsKKyAgICB9LAorCisgICAgX3NvdXJjZUZyYW1lTG9hZGVkOiBm
dW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IGV2ZW50LnRh
cmdldDsKKyAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSBzb3VyY2VGcmFtZS5fc291cmNlTmFtZTsK
KworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21lc3NhZ2VzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VzW2ldOworICAgICAg
ICAgICAgdmFyIHNvdXJjZUxvY2F0aW9uID0gdGhpcy5fc291cmNlTG9jYXRpb25Gb3JDb25zb2xl
TWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VMb2NhdGlvbi5zb3VyY2VO
YW1lID09PSBzb3VyY2VOYW1lKQorICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZENvbnNv
bGVNZXNzYWdlVG9Tb3VyY2Uoc291cmNlTG9jYXRpb24ubGluZU51bWJlciwgbWVzc2FnZSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNb2RlbC5icmVha3BvaW50czsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gYnJlYWtwb2ludHMp
IHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaWRdOworICAgICAg
ICAgICAgdmFyIHNvdXJjZUxvY2F0aW9uID0gdGhpcy5fc291cmNlTG9jYXRpb25Gb3JCcmVha3Bv
aW50KGJyZWFrcG9pbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUxvY2F0aW9uLnNvdXJjZU5h
bWUgPT09IHNvdXJjZU5hbWUpCisgICAgICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRv
U291cmNlRnJhbWUoc291cmNlRnJhbWUsIHNvdXJjZUxvY2F0aW9uLCBicmVha3BvaW50KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBzZWxlY3RlZENhbGxGcmFtZSA9IHRoaXMuc2lkZWJhclBh
bmVzLmNhbGxzdGFjay5zZWxlY3RlZENhbGxGcmFtZTsKKyAgICAgICAgaWYgKHNlbGVjdGVkQ2Fs
bEZyYW1lKSB7CisgICAgICAgICAgICB2YXIgc291cmNlTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VM
b2NhdGlvbkZvckNhbGxGcmFtZShzZWxlY3RlZENhbGxGcmFtZSk7CisgICAgICAgICAgICBpZiAo
c291cmNlTG9jYXRpb24uc291cmNlTmFtZSA9PT0gc291cmNlTmFtZSkgeworICAgICAgICAgICAg
ICAgIHNvdXJjZUZyYW1lLnNldEV4ZWN1dGlvbkxpbmUoc291cmNlTG9jYXRpb24ubGluZU51bWJl
cik7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUgPSBzb3VyY2VG
cmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc291cmNlTG9j
YXRpb25Gb3JDb25zb2xlTWVzc2FnZTogZnVuY3Rpb24obWVzc2FnZSkKKyAgICB7CisgICAgICAg
IHZhciBzb3VyY2VOYW1lID0gbWVzc2FnZS51cmw7CisgICAgICAgIGlmICghc291cmNlTmFtZSkK
KyAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FjdHVhbExvY2F0
aW9uVG9Tb3VyY2VMb2NhdGlvbihzb3VyY2VOYW1lLCBtZXNzYWdlLmxpbmUgLSAxLCAwKTsKKyAg
ICB9LAorCisgICAgX3NvdXJjZUxvY2F0aW9uRm9yQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtw
b2ludCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VOYW1lID0gYnJlYWtwb2ludC51cmwgfHwg
YnJlYWtwb2ludC5zb3VyY2VJRDsKKyAgICAgICAgdmFyIGxvY2F0aW9uID0gYnJlYWtwb2ludC5s
b2NhdGlvbnMubGVuZ3RoID8gYnJlYWtwb2ludC5sb2NhdGlvbnNbMF0gOiBicmVha3BvaW50Owor
ICAgICAgICByZXR1cm4gdGhpcy5fYWN0dWFsTG9jYXRpb25Ub1NvdXJjZUxvY2F0aW9uKHNvdXJj
ZU5hbWUsIGxvY2F0aW9uLmxpbmVOdW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJlcik7CisgICAg
fSwKKworICAgIF9zb3VyY2VMb2NhdGlvbkZvckNhbGxGcmFtZTogZnVuY3Rpb24oY2FsbEZyYW1l
KQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LnNjcmlwdEZvclNvdXJjZUlEKGNhbGxGcmFtZS5zb3VyY2VJRCk7CisgICAgICAgIHZhciBzb3Vy
Y2VOYW1lID0gc2NyaXB0LnNvdXJjZVVSTCB8fCBzY3JpcHQuc291cmNlSUQ7CisgICAgICAgIHJl
dHVybiB0aGlzLl9hY3R1YWxMb2NhdGlvblRvU291cmNlTG9jYXRpb24oc291cmNlTmFtZSwgY2Fs
bEZyYW1lLmxpbmUsIGNhbGxGcmFtZS5jb2x1bW4pOworICAgIH0sCisKKyAgICBfYWN0dWFsTG9j
YXRpb25Ub1NvdXJjZUxvY2F0aW9uOiBmdW5jdGlvbihzb3VyY2VOYW1lLCBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICAvLyBUT0RPOiB1c2Ugc291cmNlIG1hcHBpbmcg
dG8gb2J0YWluIHNvdXJjZSBsb2NhdGlvbi4KKyAgICAgICAgcmV0dXJuIHsgc291cmNlTmFtZTog
c291cmNlTmFtZSwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1bW5O
dW1iZXIgfTsKKyAgICB9LAorCisgICAgX2VuY29kZVNvdXJjZUxvY2F0aW9uOiBmdW5jdGlvbihz
b3VyY2VMb2NhdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2VMb2NhdGlvbi5zb3Vy
Y2VOYW1lICsgIjoiICsgc291cmNlTG9jYXRpb24ubGluZU51bWJlcjsKKyAgICB9LAorCiAgICAg
X3Nob3dTY3JpcHRPclJlc291cmNlOiBmdW5jdGlvbihzY3JpcHRPclJlc291cmNlLCBvcHRpb25z
KQogICAgIHsKICAgICAgICAgLy8gb3B0aW9ucyA9IHtsaW5lOiwgc2hvdWxkSGlnaGxpZ2h0TGlu
ZTosIGZyb21CYWNrRm9yd2FyZEFjdGlvbjosIGluaXRpYWxMb2FkOn0KQEAgLTY2Miw3ICs4MDYs
NyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfY2xlYXJD
dXJyZW50RXhlY3V0aW9uTGluZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMu
X2V4ZWN1dGlvblNvdXJjZUZyYW1lKQotICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNl
RnJhbWUuY2xlYXJFeGVjdXRpb25Mb2NhdGlvbigpOworICAgICAgICAgICAgdGhpcy5fZXhlY3V0
aW9uU291cmNlRnJhbWUuY2xlYXJFeGVjdXRpb25MaW5lKCk7CiAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9leGVjdXRpb25Tb3VyY2VGcmFtZTsKICAgICB9LAogCkBAIC02ODIsOSArODI2LDEyIEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc2NyaXB0
T3JSZXNvdXJjZSA9IHNjcmlwdC5yZXNvdXJjZSB8fCBzY3JpcHQ7CiAgICAgICAgIHRoaXMuX3No
b3dTY3JpcHRPclJlc291cmNlKHNjcmlwdE9yUmVzb3VyY2UsIHtsaW5lOiBjdXJyZW50RnJhbWUu
bGluZX0pOwogCi0gICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lID0gdGhpcy5fc291
cmNlRnJhbWVGb3JTY3JpcHRPclJlc291cmNlKHNjcmlwdE9yUmVzb3VyY2UpOwotICAgICAgICBp
ZiAodGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUpCi0gICAgICAgICAgICB0aGlzLl9leGVjdXRp
b25Tb3VyY2VGcmFtZS5zZXRFeGVjdXRpb25Mb2NhdGlvbihjdXJyZW50RnJhbWUubGluZSwgY3Vy
cmVudEZyYW1lLmNvbHVtbik7CisgICAgICAgIHZhciBzb3VyY2VMb2NhdGlvbiA9IHRoaXMuX3Nv
dXJjZUxvY2F0aW9uRm9yQ2FsbEZyYW1lKGN1cnJlbnRGcmFtZSk7CisgICAgICAgIHZhciBzb3Vy
Y2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZUxvY2F0aW9uLnNv
dXJjZU5hbWVdOworICAgICAgICBpZiAoc291cmNlRnJhbWUgJiYgc291cmNlRnJhbWUubG9hZGVk
KSB7CisgICAgICAgICAgICBzb3VyY2VGcmFtZS5zZXRFeGVjdXRpb25MaW5lKHNvdXJjZUxvY2F0
aW9uLmxpbmVOdW1iZXIpOworICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUg
PSBzb3VyY2VGcmFtZTsKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBfY2hhbmdlVmlzaWJsZUZp
bGU6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMTA4NSw3ICsxMjMyLDcgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lQ29udGVudFByb3ZpZGVyRm9yU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIGxpbmVOdW1iZXIgPSAwOwogICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gMDsKICAgICAg
ICAgdmFyIHNjcmlwdFJhbmdlcyA9IFtdOwotICAgICAgICBmdW5jdGlvbiBhcHBlbmRDaHVuayhj
aHVuaywgaXNTY3JpcHQpCisgICAgICAgIGZ1bmN0aW9uIGFwcGVuZENodW5rKGNodW5rLCBzY3Jp
cHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzdGFydCA9IHsgbGluZU51bWJlcjogbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXIgfTsKICAgICAgICAgICAgIHNvdXJj
ZSArPSBjaHVuazsKQEAgLTEwOTgsMTUgKzEyNDUsMTUgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lQ29udGVudFByb3ZpZGVyRm9yU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAg
ICBjb2x1bW5OdW1iZXIgPSBsaW5lRW5kaW5nc1tsaW5lQ291bnQgLSAxXSAtIGxpbmVFbmRpbmdz
W2xpbmVDb3VudCAtIDJdIC0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhciBlbmQg
PSB7IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07
Ci0gICAgICAgICAgICBpZiAoaXNTY3JpcHQpCi0gICAgICAgICAgICAgICAgc2NyaXB0UmFuZ2Vz
LnB1c2goeyBzdGFydDogc3RhcnQsIGVuZDogZW5kIH0pOworICAgICAgICAgICAgaWYgKHNjcmlw
dCkKKyAgICAgICAgICAgICAgICBzY3JpcHRSYW5nZXMucHVzaCh7IHN0YXJ0OiBzdGFydCwgZW5k
OiBlbmQsIHNvdXJjZUlEOiBzY3JpcHQuc291cmNlSUQgfSk7CiAgICAgICAgIH0KIAogICAgICAg
ICB2YXIgbWltZVR5cGU7CiAgICAgICAgIGlmIChzY3JpcHRzLmxlbmd0aCA9PT0gMSAmJiAhc2Ny
aXB0c1swXS5saW5lT2Zmc2V0ICYmICFzY3JpcHRzWzBdLmNvbHVtbk9mZnNldCkgewogICAgICAg
ICAgICAgLy8gU2luZ2xlIHNjcmlwdCBzb3VyY2UuCiAgICAgICAgICAgICBtaW1lVHlwZSA9ICJ0
ZXh0L2phdmFzY3JpcHQiOwotICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc291cmNlc1swXSwgdHJ1
ZSk7CisgICAgICAgICAgICBhcHBlbmRDaHVuayhzb3VyY2VzWzBdLCBzY3JpcHRzWzBdKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFNjcmlwdHMgaW5saW5lZCBpbiBodG1sIGRv
Y3VtZW50LgogICAgICAgICAgICAgbWltZVR5cGUgPSAidGV4dC9odG1sIjsKQEAgLTExMjEsNyAr
MTI2OCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQcm92aWRlckZvclNjcmlw
dC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgc2NyaXB0IHRhZy4KICAg
ICAgICAgICAgICAgICBhcHBlbmRDaHVuayhzY3JpcHRPcGVuVGFnKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRDaHVuayhzb3VyY2VzW2ldLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRD
aHVuayhzb3VyY2VzW2ldLCBzY3JpcHRzW2ldKTsKICAgICAgICAgICAgICAgICBhcHBlbmRDaHVu
ayhzY3JpcHRDbG9zZVRhZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IGYzNWRi
MmEuLmE4MWQ5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNTEsNiArNTEsMTAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lID0gZnVuY3Rpb24oY29udGVudFByb3ZpZGVyLCB1cmwsIGlzU2NyaXB0KQogICAgIHRoaXMu
X3BvcG92ZXJPYmplY3RHcm91cCA9ICJwb3BvdmVyIjsKIH0KIAorV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLkV2ZW50cyA9IHsKKyAgICBMb2FkZWQ6ICJsb2FkZWQiCit9CisKIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICBzaG93OiBmdW5jdGlvbihwYXJlbnRF
bGVtZW50KQpAQCAtODUsNiArODksMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fY2xlYXJMaW5lSGlnaGxpZ2h0KCk7CiAgICAgfSwKIAor
ICAgIGdldCBsb2FkZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhdGhpcy5fY29udGVudDsK
KyAgICB9LAorCiAgICAgaGFzQ29udGVudDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xMTUsNyArMTI0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdGhpcy5fbWVzc2FnZXMu
cHVzaChtc2cpOwogICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKLSAgICAgICAgICAgIHRo
aXMuX2FkZE1lc3NhZ2VUb1NvdXJjZShtc2cpOworICAgICAgICAgICAgdGhpcy5hZGRDb25zb2xl
TWVzc2FnZVRvU291cmNlKG1zZy5saW5lIC0gMSwgbXNnKTsKICAgICB9LAogCiAgICAgY2xlYXJN
ZXNzYWdlczogZnVuY3Rpb24oKQpAQCAtMjA1LDExICsyMTQsOSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RlbGF5ZWRG
aW5kU2VhcmNoTWF0Y2hlczsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
ZW5kVXBkYXRlcygpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzLkxvYWRlZCk7CiAKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJN
b2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMp
OwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3ZlZCwgdGhpcy5f
YnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5C
cmVha3BvaW50UmVzb2x2ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcyk7CisgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKICAgICBfc2V0VGV4
dFZpZXdlckRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC0yMjIsMzIgKzIyOSwxMSBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9hZGRFeGlz
dGluZ01lc3NhZ2VzVG9Tb3VyY2UoKTsKICAgICAgICAgdGhpcy5fdXBkYXRlRGlmZkRlY29yYXRp
b25zKCk7CiAKLSAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uKQotICAgICAgICAg
ICAgdGhpcy5fc2V0RXhlY3V0aW9uTG9jYXRpb24oKTsKLQotICAgICAgICB0aGlzLl9icmVha3Bv
aW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyID0ge307Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3
ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWQgPSB7fTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRz
ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHM7Ci0gICAgICAgIGZvciAo
dmFyIGlkIGluIGJyZWFrcG9pbnRzKQotICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVk
KHsgZGF0YTogYnJlYWtwb2ludHNbaWRdIH0pOwotCiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
cmVzaXplKCk7CiAKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAgICAg
fSwKIAotICAgIF9zaG91bGREaXNwbGF5QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91cmwpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5f
dXJsID09PSBicmVha3BvaW50LnVybDsKLSAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9jb250
ZW50LnNjcmlwdFJhbmdlczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5zb3VyY2VJRCA9PT0gc2Ny
aXB0c1tpXS5zb3VyY2VJRCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQogICAgIHBlcmZvcm1TZWFyY2g6IGZ1
bmN0aW9uKHF1ZXJ5LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIENhbGwgc2VhcmNoQ2Fu
Y2VsZWQgc2luY2UgaXQgd2lsbCByZXNldCBldmVyeXRoaW5nIHdlIG5lZWQgYmVmb3JlIGRvaW5n
IGEgbmV3IHNlYXJjaC4KQEAgLTM2MSwyNiArMzQ3LDE2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdlUmVwZWF0Q291
bnRFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIgKHJlcGVhdGVk
ICVkIHRpbWVzKSIsIG1zZy5yZXBlYXRDb3VudCk7CiAgICAgfSwKIAotICAgIHNldEV4ZWN1dGlv
bkxvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgc2V0RXhl
Y3V0aW9uTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHRoaXMuX2V4
ZWN1dGlvbkxvY2F0aW9uID0geyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6
IGNvbHVtbk51bWJlciB9OwotICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKLSAgICAgICAg
ICAgIHRoaXMuX3NldEV4ZWN1dGlvbkxvY2F0aW9uKCk7CisgICAgICAgIHRoaXMuX2V4ZWN1dGlv
bkxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERl
Y29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwogICAgIH0sCiAK
LSAgICBjbGVhckV4ZWN1dGlvbkxvY2F0aW9uOiBmdW5jdGlvbigpCisgICAgY2xlYXJFeGVjdXRp
b25MaW5lOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikg
ewotICAgICAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fY29udGVudC5h
Y3R1YWxMb2NhdGlvblRvU291cmNlRnJhbWVMaW5lTnVtYmVyKHRoaXMuX2V4ZWN1dGlvbkxvY2F0
aW9uLmxpbmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uLmNvbHVtbk51bWJlcik7Ci0g
ICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24odGV4dFZpZXdlckxp
bmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKLSAgICAgICAgfQotICAgICAgICBk
ZWxldGUgdGhpcy5fZXhlY3V0aW9uTG9jYXRpb247Ci0gICAgfSwKLQotICAgIF9zZXRFeGVjdXRp
b25Mb2NhdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5l
TnVtYmVyID0gdGhpcy5fY29udGVudC5hY3R1YWxMb2NhdGlvblRvU291cmNlRnJhbWVMaW5lTnVt
YmVyKHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkxv
Y2F0aW9uLmNvbHVtbk51bWJlcik7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3Jh
dGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOworICAg
ICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24odGhpcy5fZXhlY3V0aW9uTGlu
ZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOworICAgICAgICBkZWxldGUgdGhpcy5f
ZXhlY3V0aW9uTGluZU51bWJlcjsKICAgICB9LAogCiAgICAgX3VwZGF0ZURpZmZEZWNvcmF0aW9u
czogZnVuY3Rpb24oKQpAQCAtNDE0LDI2ICszOTAsMjYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLl9tZXNz
YWdlcy5sZW5ndGg7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICB0aGlzLl9hZGRNZXNzYWdlVG9Tb3VyY2UodGhpcy5fbWVzc2FnZXNbaV0pOwor
ICAgICAgICAgICAgdGhpcy5hZGRDb25zb2xlTWVzc2FnZVRvU291cmNlKHRoaXMuX21lc3NhZ2Vz
W2ldLmxpbmUgLSAxLCB0aGlzLl9tZXNzYWdlc1tpXSk7CiAgICAgfSwKIAotICAgIF9hZGRNZXNz
YWdlVG9Tb3VyY2U6IGZ1bmN0aW9uKG1zZykKKyAgICBhZGRDb25zb2xlTWVzc2FnZVRvU291cmNl
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBtc2cpCiAgICAgewotICAgICAgICBpZiAobXNnLmxpbmUg
PiB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCAw
IHx8IGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgdmFyIG1lc3NhZ2VCdWJibGVFbGVtZW50ID0gdGhpcy5fbWVz
c2FnZUJ1YmJsZXNbbXNnLmxpbmVdOworICAgICAgICB2YXIgbWVzc2FnZUJ1YmJsZUVsZW1lbnQg
PSB0aGlzLl9tZXNzYWdlQnViYmxlc1tsaW5lTnVtYmVyXTsKICAgICAgICAgaWYgKCFtZXNzYWdl
QnViYmxlRWxlbWVudCB8fCBtZXNzYWdlQnViYmxlRWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5F
TEVNRU5UX05PREUgfHwgIW1lc3NhZ2VCdWJibGVFbGVtZW50Lmhhc1N0eWxlQ2xhc3MoIndlYmtp
dC1odG1sLW1lc3NhZ2UtYnViYmxlIikpIHsKICAgICAgICAgICAgIG1lc3NhZ2VCdWJibGVFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICBtZXNzYWdl
QnViYmxlRWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtbWVzc2FnZS1idWJibGUiOwot
ICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXNbbXNnLmxpbmVdID0gbWVzc2FnZUJ1YmJs
ZUVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obXNn
LmxpbmUgLSAxLCBtZXNzYWdlQnViYmxlRWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9tZXNz
YWdlQnViYmxlc1tsaW5lTnVtYmVyXSA9IG1lc3NhZ2VCdWJibGVFbGVtZW50OworICAgICAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsIG1lc3NhZ2VCdWJi
bGVFbGVtZW50KTsKICAgICAgICAgfQogCi0gICAgICAgIHZhciByb3dNZXNzYWdlcyA9IHRoaXMu
X3Jvd01lc3NhZ2VzW21zZy5saW5lXTsKKyAgICAgICAgdmFyIHJvd01lc3NhZ2VzID0gdGhpcy5f
cm93TWVzc2FnZXNbbGluZU51bWJlcl07CiAgICAgICAgIGlmICghcm93TWVzc2FnZXMpIHsKICAg
ICAgICAgICAgIHJvd01lc3NhZ2VzID0gW107Ci0gICAgICAgICAgICB0aGlzLl9yb3dNZXNzYWdl
c1ttc2cubGluZV0gPSByb3dNZXNzYWdlczsKKyAgICAgICAgICAgIHRoaXMuX3Jvd01lc3NhZ2Vz
W2xpbmVOdW1iZXJdID0gcm93TWVzc2FnZXM7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJvd01lc3NhZ2VzLmxlbmd0aDsgKytpKSB7CkBAIC00NzEsNjMgKzQ0Nywx
OCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBtc2cu
X3Jlc291cmNlTWVzc2FnZUxpbmVFbGVtZW50ID0gbWVzc2FnZUxpbmVFbGVtZW50OwogICAgIH0s
CiAKLSAgICBfYnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKLQotICAgICAgICBpZiAoIXRoaXMuX3Nob3Vs
ZERpc3BsYXlCcmVha3BvaW50KGJyZWFrcG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHZhciByZXNvbHZlZCA9IGJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aDsKLSAgICAg
ICAgdmFyIGxvY2F0aW9uID0gcmVzb2x2ZWQgPyBicmVha3BvaW50LmxvY2F0aW9uc1swXSA6IGJy
ZWFrcG9pbnQ7Ci0KLSAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fY29u
dGVudC5hY3R1YWxMb2NhdGlvblRvU291cmNlRnJhbWVMaW5lTnVtYmVyKGxvY2F0aW9uLmxpbmVO
dW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJlcik7Ci0gICAgICAgIGlmICh0ZXh0Vmlld2VyTGlu
ZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICB2YXIgZXhpc3RpbmdCcmVha3BvaW50SWQgPSB0aGlzLl90ZXh0Vmlld2Vy
TGluZU51bWJlclRvQnJlYWtwb2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKLSAgICAgICAg
aWYgKGV4aXN0aW5nQnJlYWtwb2ludElkKSB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludElkVG9UZXh0Vmll
d2VyTGluZU51bWJlclticmVha3BvaW50LmlkXSA9IHRleHRWaWV3ZXJMaW5lTnVtYmVyOwotICAg
ICAgICB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvQnJlYWtwb2ludElkW3RleHRWaWV3ZXJM
aW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQuaWQ7Ci0gICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRE
ZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCByZXNvbHZlZCwgYnJlYWtwb2ludC5lbmFi
bGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRS
ZW1vdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQg
PSBldmVudC5kYXRhOwotCi0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMu
X2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1iZXJbYnJlYWtwb2ludElkXTsKLSAgICAg
ICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVyID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxp
bmVOdW1iZXJbYnJlYWtwb2ludElkXTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3RleHRWaWV3ZXJM
aW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdOwotICAgICAgICB0
aGlzLl9yZW1vdmVCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcik7Ci0g
ICAgfSwKLQotICAgIF9icmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwotICAgICAgICB0aGlzLl9icmVh
a3BvaW50UmVtb3ZlZCh7IGRhdGE6IGJyZWFrcG9pbnQuaWQgfSk7Ci0gICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJyZWFrcG9pbnQgfSk7Ci0gICAgfSwKLQotICAgIF9zZXRC
cmVha3BvaW50RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgcmVzb2x2ZWQsIGVuYWJs
ZWQsIGhhc0NvbmRpdGlvbikKKyAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVy
LCByZXNvbHZlZCwgY29uZGl0aW9uYWwsIGVuYWJsZWQpCiAgICAgewogICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERl
Y29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CiAgICAgICAgIGlmICgh
ZW5hYmxlZCkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5l
TnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKLSAgICAgICAgaWYgKGhhc0Nv
bmRpdGlvbikKKyAgICAgICAgaWYgKGNvbmRpdGlvbmFsKQogICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25k
aXRpb25hbCIpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9
LAogCi0gICAgX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVy
KQorICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewogICAg
ICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwogICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7
CkBAIC01NTcsMTAgKzQ4OCwxMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
ID0gewogCiAgICAgICAgICAgICBmdW5jdGlvbiBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQoKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnREZWNvcmF0
aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLmFkZEJyZWFrcG9pbnQodGV4dFZpZXdlckxpbmVOdW1iZXIsIHRydWUsIHRydWUs
IHRydWUpOwogICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0
aW9uKGNvbW1pdHRlZCwgY29uZGl0aW9uKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVO
dW1iZXIpOworICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQodGV4dFZp
ZXdlckxpbmVOdW1iZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQogICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludCh0ZXh0Vmlld2VyTGluZU51
bWJlciwgY29uZGl0aW9uLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9CkBAIC05MTMsMTAgKzg0
NCwyMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgp
OwogICAgIH0sCiAKLSAgICBfZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHRleHRWaWV3ZXJMaW5l
TnVtYmVyKQorICAgIF9maW5kQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7
Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRv
QnJlYWtwb2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKLSAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRGb3JJZChicmVha3BvaW50SWQpOworICAg
ICAgICB2YXIgdXJsID0gdGhpcy5fdXJsOworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9j
b250ZW50LnNvdXJjZUZyYW1lTGluZU51bWJlclRvQWN0dWFsTG9jYXRpb24obGluZU51bWJlcik7
CisgICAgICAgIGZ1bmN0aW9uIGZpbHRlcihicmVha3BvaW50KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoYnJlYWtwb2ludC51cmwpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC51cmwgIT09IHVybCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5zb3VyY2VJRCAh
PT0gbG9jYXRpb24uc291cmNlSUQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gYnJlYWtwb2ludC5s
b2NhdGlvbnMubGVuZ3RoID8gYnJlYWtwb2ludC5sb2NhdGlvbnNbMF0ubGluZU51bWJlciA6IGJy
ZWFrcG9pbnQubGluZU51bWJlcjsKKyAgICAgICAgICAgIHJldHVybiBsaW5lTnVtYmVyID09PSBs
b2NhdGlvbi5saW5lTnVtYmVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNb2RlbC5xdWVyeUJyZWFrcG9pbnRzKGZpbHRlcilbMF07CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDM3YjFmNmIuLjJiODVkNzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDItMTggIFBhdmVsIFBv
ZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBzb3VyY2UgbWFw
cGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAgICAgKiBzcmMvanMv
VGVzdHMuanM6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5fY2hlY2tFeGVjdXRpb25M
aW5lKToKKwogMjAxMS0wMi0xNyAgQW5kcmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzg5MzYuCkBAIC03Miw2ICs4
MiwxOCBAQAogCiAyMDExLTAyLTE3ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21p
dW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IG1vdmUgc291cmNlIG1hcHBpbmcgZnJvbSBTb3VyY2VGcmFtZSB0byBT
Y3JpcHRzUGFuZWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDY0NQorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIHRvIG1hcCBvbmUgc2NyaXB0IHRv
IHNldmVyYWwgc291cmNlIGZpbGVzLgorCisgICAgICAgICogc3JjL2pzL1Rlc3RzLmpzOgorICAg
ICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrRXhlY3V0aW9uTGluZSk6CisKKzIwMTEt
MDItMTcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKICAgICAg
ICAgVW5yZXZpZXdlZCwgaW50ZXJhY3RpdmUgdWkgdGVzdCBmaXggZm9yIHI3ODgwOC4KIAogICAg
ICAgICAqIHNyYy9qcy9UZXN0cy5qczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL1Rlc3RzLmpzIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMu
anMKaW5kZXggNDM0MGU2ZC4uYTQ2NGRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvanMvVGVzdHMuanMKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
VGVzdHMuanMKQEAgLTYxNiw3ICs2MTYsNyBAQCBUZXN0U3VpdGUucHJvdG90eXBlLmV2YWx1YXRl
SW5Db25zb2xlXyA9IGZ1bmN0aW9uKGNvZGUsIGNhbGxiYWNrKQogICovCiBUZXN0U3VpdGUucHJv
dG90eXBlLl9jaGVja0V4ZWN1dGlvbkxpbmUgPSBmdW5jdGlvbihzb3VyY2VGcmFtZSwgbGluZU51
bWJlciwgbGluZUNvbnRlbnQpCiB7Ci0gICAgdGhpcy5hc3NlcnRFcXVhbHMobGluZU51bWJlciwg
c291cmNlRnJhbWUuX2V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXIgKyAxLCAiVW5leHBlY3Rl
ZCBleGVjdXRpb24gbGluZSBudW1iZXIuIik7CisgICAgdGhpcy5hc3NlcnRFcXVhbHMobGluZU51
bWJlciwgc291cmNlRnJhbWUuX2V4ZWN1dGlvbkxpbmVOdW1iZXIgKyAxLCAiVW5leHBlY3RlZCBl
eGVjdXRpb24gbGluZSBudW1iZXIuIik7CiAgICAgdGhpcy5hc3NlcnRFcXVhbHMobGluZUNvbnRl
bnQsIHNvdXJjZUZyYW1lLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyIC0gMSksICJVbmV4cGVj
dGVkIGV4ZWN1dGlvbiBsaW5lIHRleHQuIik7CiB9CiAK
</data>
<flag name="review"
          id="74670"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83178</attachid>
            <date>2011-02-21 10:04:13 -0800</date>
            <delta_ts>2011-02-21 10:33:19 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>34357</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyODRhZDlmLi5jNTllYzFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDIt
MjEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92
ZSBzb3VyY2UgbWFwcGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0ZS5j
cmVhdGVXcmFwcGVyLnJldHVybi50cnkpOgorICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRl
c3QuSW5zcGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0ZSk6CisgICAgICAgIChpbml0aWFs
aXplX0RlYnVnZ2VyVGVzdC5JbnNwZWN0b3JUZXN0LnNob3dTY3JpcHRTb3VyY2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1lLmh0bWw6IEFkZGVkLgor
CiAyMDExLTAyLTIwICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgZXhwZWN0YXRpb24gdXBkYXRlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QuanMKaW5kZXggNjAwNDg0MC4uMDczMDdm
ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIt
dGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10
ZXN0LmpzCkBAIC0xLDUgKzEsMjUgQEAKIHZhciBpbml0aWFsaXplX0RlYnVnZ2VyVGVzdCA9IGZ1
bmN0aW9uKCkgewogCitJbnNwZWN0b3JUZXN0LnJ1bkRlYnVnZ2VyVGVzdFN1aXRlID0gZnVuY3Rp
b24oc3RlcHMpCit7CisgICAgdmFyIHdyYXBwZXJzID0gW107CisgICAgZnVuY3Rpb24gY3JlYXRl
V3JhcHBlcihzdGVwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGVwc1tzdGVwXS5hcHBseShu
dWxsLCBbd3JhcHBlcnNbc3RlcCArIDFdXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwoYXJndW1lbnRzKSkpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkV4Y2VwdGlvbiBpbiBzdGVwICIgKyBzdGVwICsg
IjoiICsgKGUuc3RhY2sgfHwgZSkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29t
cGxldGVEZWJ1Z2dlclRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgKytpKQorICAgICAgICB3cmFwcGVy
cy5wdXNoKGNyZWF0ZVdyYXBwZXIoaSkpOworICAgIHdyYXBwZXJzWzBdKCk7Cit9CisKIEluc3Bl
Y3RvclRlc3Quc3RhcnREZWJ1Z2dlclRlc3QgPSBmdW5jdGlvbihjYWxsYmFjaywgcXVpZXQpCiB7
CiAgICAgSW5zcGVjdG9yVGVzdC5fcXVpZXQgPSBxdWlldDsKQEAgLTEyMCw3ICsxNDAsNyBAQCBJ
bnNwZWN0b3JUZXN0LnNob3dTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzY3JpcHROYW1lLCBjYWxs
YmFjaykKICAgICBpZiAoSW5zcGVjdG9yVGVzdC5fc2NyaXB0c0FyZVBhcnNlZChbc2NyaXB0TmFt
ZV0pKQogICAgICAgICBJbnNwZWN0b3JUZXN0Ll9zaG93U2NyaXB0U291cmNlKHNjcmlwdE5hbWUs
IGNhbGxiYWNrKTsKICAgICAgZWxzZQotICAgICAgICBJbnNwZWN0b3JUZXN0Ll9hZGRTbmlmZmVy
KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLCAiX3BhcnNlZFNjcmlwdFNvdXJjZSIsIEluc3Bl
Y3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZS5iaW5kKEluc3BlY3RvclRlc3QsIHNjcmlwdE5hbWUs
IGNhbGxiYWNrKSk7CisgICAgICAgIEluc3BlY3RvclRlc3QuX2FkZFNuaWZmZXIoV2ViSW5zcGVj
dG9yLnBhbmVscy5zY3JpcHRzLCAiX2FkZFNjcmlwdFRvRmlsZXNNZW51IiwgSW5zcGVjdG9yVGVz
dC5zaG93U2NyaXB0U291cmNlLmJpbmQoSW5zcGVjdG9yVGVzdCwgc2NyaXB0TmFtZSwgY2FsbGJh
Y2spKTsKIH07CiAKIEluc3BlY3RvclRlc3QuX3NjcmlwdHNBcmVQYXJzZWQgPSBmdW5jdGlvbihz
Y3JpcHRzKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJj
ZS1mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc291
cmNlLWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41YjFiZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVn
Z2VyL3NvdXJjZS1mcmFtZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMTA6IHRlc3QgZXJyb3IgbWVzc2FnZQorVGVzdHMgdGhhdCBpdCdzIHBvc3Np
YmxlIHRvIHNldCBicmVha3BvaW50IGluIHNvdXJjZSBmcmFtZSwgYW5kIHRoYXQgc291cmNlIGZy
YW1lIGRpc3BsYXlzIGJyZWFrcG9pbnRzIGFuZCBjb25zb2xlIGVycm9ycy4KKworRGVidWdnZXIg
d2FzIGVuYWJsZWQuCitTY3JpcHQgc291cmNlIHdhcyBzaG93bi4KK0JyZWFrcG9pbnQgYWRkZWQg
dG8gc291cmNlIGZyYW1lIGF0IGxpbmUgMTcKK01lc3NhZ2UgdGV4dDogc291cmNlLWZyYW1lLmh0
bWw6MTB0ZXN0IGVycm9yIG1lc3NhZ2UKK0RlYnVnZ2VyIHdhcyBkaXNhYmxlZC4KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS5odG1sIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMWYzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1lLmh0bWwKQEAgLTAsMCAr
MSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
aHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcyI+PC9zY3JpcHQ+CisKKzxzY3Jp
cHQ+CisKK2Z1bmN0aW9uIGFkZEVycm9yVG9Db25zb2xlKCkKK3sKKyAgICBjb25zb2xlLmVycm9y
KCJ0ZXN0IGVycm9yIG1lc3NhZ2UiKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgSW5z
cGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0ZShbCisgICAgICAgIGZ1bmN0aW9uKG5leHQp
IHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc3RhcnREZWJ1Z2dlclRlc3QobmV4dCwgdHJ1
ZSk7CisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uKG5leHQpIHsKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZSgic291cmNlLWZyYW1lLmh0bWwiLCBuZXh0KTsK
KyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24obmV4dCwgc291cmNlRnJhbWUpIHsKKyAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlIHdhcyBzaG93bi4i
KTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuX2FkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSwgImFkZEJyZWFrcG9pbnQiLCBuZXh0KTsKKyAgICAgICAgICAg
IHNvdXJjZUZyYW1lLl9zZXRCcmVha3BvaW50KDE3LCAiIiwgdHJ1ZSk7CisgICAgICAgIH0sCisg
ICAgICAgIGZ1bmN0aW9uKG5leHQsIGxpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCJCcmVha3BvaW50IGFkZGVkIHRvIHNvdXJjZSBmcmFtZSBhdCBsaW5l
ICIgKyBsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuX2FkZFNuaWZmZXIo
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSwgImFkZE1lc3NhZ2UiLCBuZXh0KTsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2UoImFkZEVycm9yVG9Db25z
b2xlKCkiKTsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24obmV4dCwgbWVzc2FnZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk1lc3NhZ2UgdGV4
dDogIiArIG1lc3NhZ2UubWVzc2FnZSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBs
ZXRlRGVidWdnZXJUZXN0KCk7CisgICAgICAgIH0KKyAgICBdKTsKK307CisKKzwvc2NyaXB0Pgor
Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3RzIHRoYXQgaXQn
cyBwb3NzaWJsZSB0byBzZXQgYnJlYWtwb2ludCBpbiBzb3VyY2UgZnJhbWUsIGFuZCB0aGF0Citz
b3VyY2UgZnJhbWUgZGlzcGxheXMgYnJlYWtwb2ludHMgYW5kIGNvbnNvbGUgZXJyb3JzLgorPC9w
PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTgxZWRiYS4uOTYyZTU4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDExLTAyLTIxICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3Qgc291cmNlIG1hcHBpbmcgZnJv
bSBTb3VyY2VGcmFtZSB0byBEZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2NDUKKworICAgICAgICBUaGlz
IGlzIG5lZWRlZCB0byBtYXAgb25lIHNjcmlwdCB0byBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KKwor
ICAgICAgICBUZXN0OiBpbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1lLmh0bWwKKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9u
TW9kZWwuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0
aW9uTW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9k
ZWwucHJvdG90eXBlLmJyZWFrcG9pbnRzRm9yU291cmNlTmFtZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRBZGRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90
b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
clByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlc29sdmVkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fZW5j
b2RlU291cmNlTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwucHJvdG90eXBlLl9hY3R1YWxMb2NhdGlvblRvU291cmNlTG9jYXRpb24pOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
c1BhbmVsLnByb3RvdHlwZS5fYnJlYWtwb2ludEFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50UmVtb3ZlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fc291cmNlRnJhbWVGb3JSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fc291cmNl
RnJhbWVGb3JTY3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUuX2FkZFNvdXJjZUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFu
ZWwucHJvdG90eXBlLl9yZW1vdmVTb3VyY2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fc291cmNlRnJhbWVMb2FkZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2NsZWFyQ3VycmVudEV4ZWN1dGlvbkxp
bmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2NhbGxG
cmFtZVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQ
cm92aWRlckZvclNjcmlwdC5wcm90b3R5cGUuX2J1aWxkU291cmNlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5nZXQgbG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2NyZWF0ZVRleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fc2V0VGV4dFZpZXdlckRlY29yYXRpb25zKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuc2V0RXhlY3V0aW9u
TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmNsZWFy
RXhlY3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5yZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuX2NvbnRleHRNZW51LmFkZENvbmRpdGlvbmFsQnJlYWtwb2ludC5kaWRF
ZGl0QnJlYWtwb2ludENvbmRpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLl9jb250ZXh0TWVudS5hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZmluZEJyZWFrcG9pbnQu
ZmlsdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2Zp
bmRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMS0w
Mi0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjc5MTY5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDMz
NDczYjQuLjViYTM4YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ3MTQsNiArNDcxNCw3IEBACiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qcycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzJywKKyAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcycsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDU2OTEzNDEu
LmI1MDE4MGIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC02NTc4NSw2ICs2NTc4NSwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxG
aWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsLmpzIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxEZXRhaWxlZEhlYXBzaG90R3Jp
ZE5vZGVzLmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLmpzIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzM3ZjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJl
c2VudGF0aW9uTW9kZWwuanMKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuRGVidWdnZXJQ
cmVzZW50YXRpb25Nb2RlbCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9icmVha3BvaW50cyA9
IHt9OworICAgIHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVha3BvaW50SWQgPSB7fTsKKworICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFk
ZGVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3ZlZCwg
dGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRz
LkJyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcy5fYnJlYWtwb2ludFJlc29sdmVkLCB0aGlzKTsKK30K
KworV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzID0geworICAg
IEJyZWFrcG9pbnRBZGRlZDogImJyZWFrcG9pbnQtYWRkZWQiLAorICAgIEJyZWFrcG9pbnRSZW1v
dmVkOiAiYnJlYWtwb2ludC1yZW1vdmVkIgorfQorCitXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVz
ZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CisgICAgYnJlYWtwb2ludHNGb3JTb3VyY2VOYW1l
OiBmdW5jdGlvbihzb3VyY2VOYW1lKQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0g
W107CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7CisgICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2lkXTsKKyAgICAgICAgICAg
IGlmIChicmVha3BvaW50LnNvdXJjZU5hbWUgPT09IHNvdXJjZU5hbWUpCisgICAgICAgICAgICAg
ICAgYnJlYWtwb2ludHMucHVzaChicmVha3BvaW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYnJlYWtwb2ludHM7CisgICAgfSwKKworICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOworICAg
ICAgICB2YXIgbG9jYXRpb24gPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGggPyBicmVha3Bv
aW50LmxvY2F0aW9uc1swXSA6IGJyZWFrcG9pbnQ7CisgICAgICAgIHZhciBzb3VyY2VMb2NhdGlv
biA9IHRoaXMuX2FjdHVhbExvY2F0aW9uVG9Tb3VyY2VMb2NhdGlvbihicmVha3BvaW50LnVybCB8
fCBicmVha3BvaW50LnNvdXJjZUlELCBsb2NhdGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1
bW5OdW1iZXIpOworCisgICAgICAgIHZhciBlbmNvZGVkU291cmNlTG9jYXRpb24gPSB0aGlzLl9l
bmNvZGVTb3VyY2VMb2NhdGlvbihzb3VyY2VMb2NhdGlvbi5zb3VyY2VOYW1lLCBzb3VyY2VMb2Nh
dGlvbi5saW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKGVuY29kZWRTb3VyY2VMb2NhdGlvbiBpbiB0
aGlzLl9zb3VyY2VMb2NhdGlvblRvQnJlYWtwb2ludElkKSB7CisgICAgICAgICAgICAvLyBXZSBj
YW4ndCBzaG93IG1vcmUgdGhhbiBvbmUgYnJlYWtwb2ludCBvbiBhIHNpbmdsZSBzb3VyY2UgZnJh
bWUgbGluZS4gUmVtb3ZlIG5ld2x5IGFkZGVkIGJyZWFrcG9pbnQuCisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHByZXNlbnRhdGlv
bkJyZWFrcG9pbnQgPSB7CisgICAgICAgICAgICBzb3VyY2VOYW1lOiBzb3VyY2VMb2NhdGlvbi5z
b3VyY2VOYW1lLAorICAgICAgICAgICAgbGluZU51bWJlcjogc291cmNlTG9jYXRpb24ubGluZU51
bWJlciwKKyAgICAgICAgICAgIHVybDogYnJlYWtwb2ludC51cmwsCisgICAgICAgICAgICByZXNv
bHZlZDogISFicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGgsCisgICAgICAgICAgICBjb25kaXRp
b246IGJyZWFrcG9pbnQuY29uZGl0aW9uLAorICAgICAgICAgICAgZW5hYmxlZDogYnJlYWtwb2lu
dC5lbmFibGVkCisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5fc291cmNlTG9jYXRpb25Ub0Jy
ZWFrcG9pbnRJZFtlbmNvZGVkU291cmNlTG9jYXRpb25dID0gYnJlYWtwb2ludC5pZDsKKyAgICAg
ICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0gPSBwcmVzZW50YXRpb25CcmVha3Bv
aW50OworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHByZXNl
bnRhdGlvbkJyZWFrcG9pbnQpOworICAgIH0sCisKKyAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IGV2ZW50LmRh
dGE7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2lu
dElkXTsKKyAgICAgICAgdmFyIGVuY29kZWRTb3VyY2VMb2NhdGlvbiA9IHRoaXMuX2VuY29kZVNv
dXJjZUxvY2F0aW9uKGJyZWFrcG9pbnQuc291cmNlTmFtZSwgYnJlYWtwb2ludC5saW5lTnVtYmVy
KTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VMb2NhdGlvblRvQnJlYWtwb2ludElkW2VuY29kZWRTb3Vy
Y2VMb2NhdGlvbl07CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3Zl
ZCwgYnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIF9icmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwor
ICAgICAgICB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCh7IGRhdGE6IGJyZWFrcG9pbnQuaWQgfSk7
CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJyZWFrcG9pbnQgfSk7Cisg
ICAgfSwKKworICAgIF9lbmNvZGVTb3VyY2VMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlTmFtZSwg
bGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzb3VyY2VOYW1lICsgIjoiICsgbGlu
ZU51bWJlcjsKKyAgICB9LAorCisgICAgX2FjdHVhbExvY2F0aW9uVG9Tb3VyY2VMb2NhdGlvbjog
ZnVuY3Rpb24oc291cmNlTmFtZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAg
ICAgICAgLy8gVE9ETzogdXNlIHNvdXJjZSBtYXBwaW5nIHRvIG9idGFpbiBzb3VyY2UgbG9jYXRp
b24uCisgICAgICAgIHJldHVybiB7IHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsIGxpbmVOdW1iZXI6
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDg0YzI0ODguLjFlMjhi
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1BhbmVsLmpzCkBAIC0yNyw2ICsyNyw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBm
dW5jdGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhpcywgInNjcmlwdHMi
KTsKIAorICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1
Z2dlclByZXNlbnRhdGlvbk1vZGVsKCk7CisKICAgICB0aGlzLnRvcFN0YXR1c0JhciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgIHRoaXMudG9wU3RhdHVzQmFyLmNsYXNzTmFt
ZSA9ICJzdGF0dXMtYmFyIjsKICAgICB0aGlzLnRvcFN0YXR1c0Jhci5pZCA9ICJzY3JpcHRzLXN0
YXR1cy1iYXIiOwpAQCAtMTg5LDYgKzE5MSw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwg
PSBmdW5jdGlvbigpCiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuU2NyaXB0U291cmNlQ2hhbmdl
ZCwgdGhpcy5fc2NyaXB0U291cmNlQ2hhbmdlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5F
dmVudHMuRGVidWdnZXJQYXVzZWQsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlzKTsKICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQsIHRoaXMuX2RlYnVnZ2VyUmVzdW1l
ZCwgdGhpcyk7CisgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuQnJlYWtwb2ludEFk
ZGVkLCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOworICAgIHRoaXMuX3ByZXNlbnRhdGlv
bk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9u
TW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwg
dGhpcyk7CiB9CiAKIC8vIEtlZXAgdGhlc2UgaW4gc3luYyB3aXRoIFdlYkNvcmU6OlNjcmlwdERl
YnVnU2VydmVyCkBAIC0zMzcsNiArMzQxLDI0IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVb
dXJsXS5jbGVhck1lc3NhZ2VzKCk7CiAgICAgfSwKIAorICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRh
OworCisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZy
YW1lW2JyZWFrcG9pbnQuc291cmNlTmFtZV07CisgICAgICAgIGlmIChzb3VyY2VGcmFtZSAmJiBz
b3VyY2VGcmFtZS5sb2FkZWQpCisgICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50
KGJyZWFrcG9pbnQubGluZU51bWJlciwgYnJlYWtwb2ludC5yZXNvbHZlZCwgYnJlYWtwb2ludC5j
b25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCk7CisgICAgfSwKKworICAgIF9icmVha3BvaW50
UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IGV2ZW50LmRhdGE7CisKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlTmFt
ZVRvU291cmNlRnJhbWVbYnJlYWtwb2ludC5zb3VyY2VOYW1lXTsKKyAgICAgICAgaWYgKHNvdXJj
ZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkKKyAgICAgICAgICAgIHNvdXJjZUZyYW1lLnJl
bW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICB9LAorCiAgICAgc2Vs
ZWN0ZWRDYWxsRnJhbWVJZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHNlbGVjdGVk
Q2FsbEZyYW1lID0gdGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNlbGVjdGVkQ2FsbEZyYW1l
OwpAQCAtNTIxLDcgKzU0Myw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2VzW2ldLnVybCA9PT0gcmVzb3VyY2Uu
dXJsKQogICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZE1lc3NhZ2UobWVzc2FnZSk7CiAg
ICAgICAgIH0KLSAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbcmVzb3VyY2Uu
dXJsXSA9IHNvdXJjZUZyYW1lOworICAgICAgICB0aGlzLl9hZGRTb3VyY2VGcmFtZShyZXNvdXJj
ZS51cmwsIHNvdXJjZUZyYW1lKTsKICAgICAgICAgcmV0dXJuIHNvdXJjZUZyYW1lOwogICAgIH0s
CiAKQEAgLTUzNSw3ICs1NTcsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQoc2NyaXB0KTsKICAgICAgICAgdmFyIGlz
U2NyaXB0ID0gIXNjcmlwdC5saW5lT2Zmc2V0ICYmICFzY3JpcHQuY29sdW1uT2Zmc2V0OwogICAg
ICAgICBzb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUoY29udGVudFBy
b3ZpZGVyLCBzY3JpcHQuc291cmNlVVJMLCBpc1NjcmlwdCk7Ci0gICAgICAgIHRoaXMuX3NvdXJj
ZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZU5hbWVdID0gc291cmNlRnJhbWU7CisgICAgICAgIHRo
aXMuX2FkZFNvdXJjZUZyYW1lKHNvdXJjZU5hbWUsIHNvdXJjZUZyYW1lKTsKICAgICAgICAgcmV0
dXJuIHNvdXJjZUZyYW1lOwogICAgIH0sCiAKQEAgLTU1Myw2ICs1NzUsNTAgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcg
PSBuZXdTb3VyY2VGcmFtZTsKICAgICB9LAogCisgICAgX2FkZFNvdXJjZUZyYW1lOiBmdW5jdGlv
bihzb3VyY2VOYW1lLCBzb3VyY2VGcmFtZSkKKyAgICB7CisgICAgICAgIHNvdXJjZUZyYW1lLl9z
b3VyY2VOYW1lID0gc291cmNlTmFtZTsKKyAgICAgICAgc291cmNlRnJhbWUuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzLkxvYWRlZCwgdGhpcy5fc291cmNl
RnJhbWVMb2FkZWQsIHRoaXMpOworICAgICAgICB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFt
ZVtzb3VyY2VOYW1lXSA9IHNvdXJjZUZyYW1lOworICAgIH0sCisKKyAgICBfcmVtb3ZlU291cmNl
RnJhbWU6IGZ1bmN0aW9uKHNvdXJjZU5hbWUpCisgICAgeworICAgICAgICB2YXIgc291cmNlRnJh
bWUgPSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VOYW1lXTsKKyAgICAgICAg
aWYgKCFzb3VyY2VGcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc291cmNlRnJh
bWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzLkxv
YWRlZCwgdGhpcy5fc291cmNlRnJhbWVMb2FkZWQsIHRoaXMpOworICAgICAgICBkZWxldGUgdGhp
cy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTmFtZV07CisgICAgICAgIHJldHVybiBz
b3VyY2VGcmFtZTsKKyAgICB9LAorCisgICAgX3NvdXJjZUZyYW1lTG9hZGVkOiBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IGV2ZW50LnRhcmdldDsKKyAg
ICAgICAgdmFyIHNvdXJjZU5hbWUgPSBzb3VyY2VGcmFtZS5fc291cmNlTmFtZTsKKworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX21lc3NhZ2VzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuX21lc3NhZ2VzW2ldOworICAgICAgICAgICAgaWYg
KG1lc3NhZ2UudXJsID09PSBzb3VyY2VOYW1lKQorICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1l
LmFkZE1lc3NhZ2UobWVzc2FnZS5saW5lKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBicmVh
a3BvaW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmJyZWFrcG9pbnRzRm9yU291cmNlTmFt
ZShzb3VyY2VOYW1lKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tp
XTsKKyAgICAgICAgICAgIHNvdXJjZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5l
TnVtYmVyLCBicmVha3BvaW50LnJlc29sdmVkLCBicmVha3BvaW50LmNvbmRpdGlvbiwgYnJlYWtw
b2ludC5lbmFibGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzZWxlY3RlZENhbGxGcmFt
ZSA9IHRoaXMuc2lkZWJhclBhbmVzLmNhbGxzdGFjay5zZWxlY3RlZENhbGxGcmFtZTsKKyAgICAg
ICAgaWYgKHNlbGVjdGVkQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0ID0gV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0Rm9yU291cmNlSUQoc2VsZWN0ZWRDYWxsRnJh
bWUuc291cmNlSUQpOworICAgICAgICAgICAgaWYgKChzY3JpcHQuc291cmNlVVJMIHx8IHNjcmlw
dC5zb3VyY2VJRCkgPT09IHNvdXJjZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2VGcmFt
ZS5zZXRFeGVjdXRpb25MaW5lKHNlbGVjdGVkQ2FsbEZyYW1lLmxpbmUpOworICAgICAgICAgICAg
ICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgX3Nob3dTY3JpcHRPclJlc291cmNlOiBmdW5j
dGlvbihzY3JpcHRPclJlc291cmNlLCBvcHRpb25zKQogICAgIHsKICAgICAgICAgLy8gb3B0aW9u
cyA9IHtsaW5lOiwgc2hvdWxkSGlnaGxpZ2h0TGluZTosIGZyb21CYWNrRm9yd2FyZEFjdGlvbjos
IGluaXRpYWxMb2FkOn0KQEAgLTY2Miw3ICs3MjgsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsLnByb3RvdHlwZSA9IHsKICAgICBfY2xlYXJDdXJyZW50RXhlY3V0aW9uTGluZTogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvblNvdXJjZUZyYW1lKQotICAg
ICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUuY2xlYXJFeGVjdXRpb25Mb2NhdGlv
bigpOworICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUuY2xlYXJFeGVjdXRp
b25MaW5lKCk7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZTsKICAg
ICB9LAogCkBAIC02ODIsOSArNzQ4LDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICB2YXIgc2NyaXB0T3JSZXNvdXJjZSA9IHNjcmlwdC5yZXNvdXJj
ZSB8fCBzY3JpcHQ7CiAgICAgICAgIHRoaXMuX3Nob3dTY3JpcHRPclJlc291cmNlKHNjcmlwdE9y
UmVzb3VyY2UsIHtsaW5lOiBjdXJyZW50RnJhbWUubGluZX0pOwogCi0gICAgICAgIHRoaXMuX2V4
ZWN1dGlvblNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVGb3JTY3JpcHRPclJlc291cmNl
KHNjcmlwdE9yUmVzb3VyY2UpOwotICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uU291cmNlRnJh
bWUpCi0gICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZS5zZXRFeGVjdXRpb25M
b2NhdGlvbihjdXJyZW50RnJhbWUubGluZSwgY3VycmVudEZyYW1lLmNvbHVtbik7CisgICAgICAg
IHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2NyaXB0T3JSZXNvdXJjZShz
Y3JpcHRPclJlc291cmNlKTsKKyAgICAgICAgaWYgKHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1l
LmxvYWRlZCkgeworICAgICAgICAgICAgc291cmNlRnJhbWUuc2V0RXhlY3V0aW9uTGluZShjdXJy
ZW50RnJhbWUubGluZSk7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZSA9
IHNvdXJjZUZyYW1lOworICAgICAgICB9CiAgICAgfSwKIAogICAgIF9jaGFuZ2VWaXNpYmxlRmls
ZTogZnVuY3Rpb24oZXZlbnQpCkBAIC0xMDg1LDcgKzExNTMsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgbGluZU51bWJlciA9IDA7CiAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSAwOwogICAgICAg
ICB2YXIgc2NyaXB0UmFuZ2VzID0gW107Ci0gICAgICAgIGZ1bmN0aW9uIGFwcGVuZENodW5rKGNo
dW5rLCBpc1NjcmlwdCkKKyAgICAgICAgZnVuY3Rpb24gYXBwZW5kQ2h1bmsoY2h1bmssIHNjcmlw
dCkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHN0YXJ0ID0geyBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9OwogICAgICAgICAgICAgc291cmNl
ICs9IGNodW5rOwpAQCAtMTA5OCwxNSArMTE2NiwxNSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWVDb250ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAg
IGNvbHVtbk51bWJlciA9IGxpbmVFbmRpbmdzW2xpbmVDb3VudCAtIDFdIC0gbGluZUVuZGluZ3Nb
bGluZUNvdW50IC0gMl0gLSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyIGVuZCA9
IHsgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXIgfTsK
LSAgICAgICAgICAgIGlmIChpc1NjcmlwdCkKLSAgICAgICAgICAgICAgICBzY3JpcHRSYW5nZXMu
cHVzaCh7IHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQgfSk7CisgICAgICAgICAgICBpZiAoc2NyaXB0
KQorICAgICAgICAgICAgICAgIHNjcmlwdFJhbmdlcy5wdXNoKHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6
IGVuZCwgc291cmNlSUQ6IHNjcmlwdC5zb3VyY2VJRCB9KTsKICAgICAgICAgfQogCiAgICAgICAg
IHZhciBtaW1lVHlwZTsKICAgICAgICAgaWYgKHNjcmlwdHMubGVuZ3RoID09PSAxICYmICFzY3Jp
cHRzWzBdLmxpbmVPZmZzZXQgJiYgIXNjcmlwdHNbMF0uY29sdW1uT2Zmc2V0KSB7CiAgICAgICAg
ICAgICAvLyBTaW5nbGUgc2NyaXB0IHNvdXJjZS4KICAgICAgICAgICAgIG1pbWVUeXBlID0gInRl
eHQvamF2YXNjcmlwdCI7Ci0gICAgICAgICAgICBhcHBlbmRDaHVuayhzb3VyY2VzWzBdLCB0cnVl
KTsKKyAgICAgICAgICAgIGFwcGVuZENodW5rKHNvdXJjZXNbMF0sIHNjcmlwdHNbMF0pOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU2NyaXB0cyBpbmxpbmVkIGluIGh0bWwgZG9j
dW1lbnQuCiAgICAgICAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L2h0bWwiOwpAQCAtMTEyMSw3ICsx
MTg5LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udGVudFByb3ZpZGVyRm9yU2NyaXB0
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgICAgIC8vIEFkZCBzY3JpcHQgdGFnLgogICAg
ICAgICAgICAgICAgIGFwcGVuZENodW5rKHNjcmlwdE9wZW5UYWcpOwotICAgICAgICAgICAgICAg
IGFwcGVuZENodW5rKHNvdXJjZXNbaV0sIHRydWUpOworICAgICAgICAgICAgICAgIGFwcGVuZENo
dW5rKHNvdXJjZXNbaV0sIHNjcmlwdHNbaV0pOwogICAgICAgICAgICAgICAgIGFwcGVuZENodW5r
KHNjcmlwdENsb3NlVGFnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggZjM1ZGIy
YS4uZDM3MmNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCkBAIC01MSw2ICs1MSwxMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUgPSBmdW5jdGlvbihjb250ZW50UHJvdmlkZXIsIHVybCwgaXNTY3JpcHQpCiAgICAgdGhpcy5f
cG9wb3Zlck9iamVjdEdyb3VwID0gInBvcG92ZXIiOwogfQogCitXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUuRXZlbnRzID0geworICAgIExvYWRlZDogImxvYWRlZCIKK30KKwogV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIHNob3c6IGZ1bmN0aW9uKHBhcmVudEVs
ZW1lbnQpCkBAIC04NSw2ICs4OSwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl9jbGVhckxpbmVIaWdobGlnaHQoKTsKICAgICB9LAogCisg
ICAgZ2V0IGxvYWRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gISF0aGlzLl9jb250ZW50Owor
ICAgIH0sCisKICAgICBoYXNDb250ZW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTIwNSwxMSArMjE0LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9kZWxheWVkRmluZFNlYXJjaE1h
dGNoZXM7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMo
KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLkV2ZW50cy5Mb2FkZWQpOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRz
LkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRS
ZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJl
c29sdmVkLCB0aGlzLl9icmVha3BvaW50UmVzb2x2ZWQsIHRoaXMpOworICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCiAgICAgX3NldFRleHRWaWV3ZXJEZWNv
cmF0aW9uczogZnVuY3Rpb24oKQpAQCAtMjIyLDMyICsyMjksMTEgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdNZXNzYWdl
c1RvU291cmNlKCk7CiAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmZEZWNvcmF0aW9ucygpOwogCi0g
ICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25Mb2NhdGlvbikKLSAgICAgICAgICAgIHRoaXMuX3Nl
dEV4ZWN1dGlvbkxvY2F0aW9uKCk7Ci0KLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludElkVG9UZXh0
Vmlld2VyTGluZU51bWJlciA9IHt9OwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJl
clRvQnJlYWtwb2ludElkID0ge307Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzOwotICAgICAgICBmb3IgKHZhciBpZCBpbiBi
cmVha3BvaW50cykKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJy
ZWFrcG9pbnRzW2lkXSB9KTsKLQogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlc2l6ZSgpOwog
CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKLSAgICBf
c2hvdWxkRGlzcGxheUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCi0gICAgewotICAg
ICAgICBpZiAodGhpcy5fdXJsKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybCA9PT0gYnJl
YWtwb2ludC51cmw7Ci0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fY29udGVudC5zY3JpcHRS
YW5nZXM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgPT09IHNjcmlwdHNbaV0uc291
cmNlSUQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0sCi0KICAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVy
eSwgY2FsbGJhY2spCiAgICAgewogICAgICAgICAvLyBDYWxsIHNlYXJjaENhbmNlbGVkIHNpbmNl
IGl0IHdpbGwgcmVzZXQgZXZlcnl0aGluZyB3ZSBuZWVkIGJlZm9yZSBkb2luZyBhIG5ldyBzZWFy
Y2guCkBAIC0zNjEsMjYgKzM0NywxNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgICAgICBtc2cuX3Jlc291cmNlTWVzc2FnZVJlcGVhdENvdW50RWxlbWVudC50
ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiIChyZXBlYXRlZCAlZCB0aW1lcyki
LCBtc2cucmVwZWF0Q291bnQpOwogICAgIH0sCiAKLSAgICBzZXRFeGVjdXRpb25Mb2NhdGlvbjog
ZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHNldEV4ZWN1dGlvbkxpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLl9leGVjdXRpb25Mb2Nh
dGlvbiA9IHsgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1i
ZXIgfTsKLSAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpCi0gICAgICAgICAgICB0aGlzLl9z
ZXRFeGVjdXRpb25Mb2NhdGlvbigpOworICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVy
ID0gbGluZU51bWJlcjsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxp
bmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKICAgICB9LAogCi0gICAgY2xlYXJF
eGVjdXRpb25Mb2NhdGlvbjogZnVuY3Rpb24oKQorICAgIGNsZWFyRXhlY3V0aW9uTGluZTogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3ZXIpIHsKLSAgICAgICAg
ICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2NvbnRlbnQuYWN0dWFsTG9jYXRp
b25Ub1NvdXJjZUZyYW1lTGluZU51bWJlcih0aGlzLl9leGVjdXRpb25Mb2NhdGlvbi5saW5lTnVt
YmVyLCB0aGlzLl9leGVjdXRpb25Mb2NhdGlvbi5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCAi
d2Via2l0LWV4ZWN1dGlvbi1saW5lIik7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIHRoaXMu
X2V4ZWN1dGlvbkxvY2F0aW9uOwotICAgIH0sCi0KLSAgICBfc2V0RXhlY3V0aW9uTG9jYXRpb246
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRo
aXMuX2NvbnRlbnQuYWN0dWFsTG9jYXRpb25Ub1NvdXJjZUZyYW1lTGluZU51bWJlcih0aGlzLl9l
eGVjdXRpb25Mb2NhdGlvbi5saW5lTnVtYmVyLCB0aGlzLl9leGVjdXRpb25Mb2NhdGlvbi5jb2x1
bW5OdW1iZXIpOwotICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24odGV4dFZp
ZXdlckxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsICJ3
ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1dGlvbkxp
bmVOdW1iZXI7CiAgICAgfSwKIAogICAgIF91cGRhdGVEaWZmRGVjb3JhdGlvbnM6IGZ1bmN0aW9u
KCkKQEAgLTQ3MSw2MyArNDQ3LDE4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdlTGluZUVsZW1lbnQgPSBtZXNzYWdl
TGluZUVsZW1lbnQ7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwotCi0gICAg
ICAgIGlmICghdGhpcy5fc2hvdWxkRGlzcGxheUJyZWFrcG9pbnQoYnJlYWtwb2ludCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIHJlc29sdmVkID0gYnJlYWtwb2ludC5sb2Nh
dGlvbnMubGVuZ3RoOwotICAgICAgICB2YXIgbG9jYXRpb24gPSByZXNvbHZlZCA/IGJyZWFrcG9p
bnQubG9jYXRpb25zWzBdIDogYnJlYWtwb2ludDsKLQotICAgICAgICB2YXIgdGV4dFZpZXdlckxp
bmVOdW1iZXIgPSB0aGlzLl9jb250ZW50LmFjdHVhbExvY2F0aW9uVG9Tb3VyY2VGcmFtZUxpbmVO
dW1iZXIobG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyKTsKLSAgICAg
ICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBleGlzdGluZ0JyZWFrcG9pbnRJ
ZCA9IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxp
bmVOdW1iZXJdOwotICAgICAgICBpZiAoZXhpc3RpbmdCcmVha3BvaW50SWQpIHsKLSAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dC5pZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9i
cmVha3BvaW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyW2JyZWFrcG9pbnQuaWRdID0gdGV4dFZp
ZXdlckxpbmVOdW1iZXI7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVh
a3BvaW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdID0gYnJlYWtwb2ludC5pZDsKLSAgICAgICAg
dGhpcy5fc2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIHJlc29s
dmVkLCBicmVha3BvaW50LmVuYWJsZWQsICEhYnJlYWtwb2ludC5jb25kaXRpb24pOwotICAgIH0s
Ci0KLSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgdmFyIGJyZWFrcG9pbnRJZCA9IGV2ZW50LmRhdGE7Ci0KLSAgICAgICAgdmFyIHRleHRWaWV3
ZXJMaW5lTnVtYmVyID0gdGhpcy5fYnJlYWtwb2ludElkVG9UZXh0Vmlld2VyTGluZU51bWJlclti
cmVha3BvaW50SWRdOwotICAgICAgICBpZiAodGV4dFZpZXdlckxpbmVOdW1iZXIgPT09IHVuZGVm
aW5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtw
b2ludElkVG9UZXh0Vmlld2VyTGluZU51bWJlclticmVha3BvaW50SWRdOwotICAgICAgICBkZWxl
dGUgdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJZFt0ZXh0Vmlld2VyTGlu
ZU51bWJlcl07Ci0gICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRW
aWV3ZXJMaW5lTnVtYmVyKTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRSZXNvbHZlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7
Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkKHsgZGF0YTogYnJlYWtwb2ludC5pZCB9
KTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKHsgZGF0YTogYnJlYWtwb2ludCB9KTsK
LSAgICB9LAotCi0gICAgX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVt
YmVyLCByZXNvbHZlZCwgZW5hYmxlZCwgaGFzQ29uZGl0aW9uKQorICAgIGFkZEJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29sdmVkLCBjb25kaXRpb25hbCwgZW5hYmxlZCkKICAg
ICB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7CiAgICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9p
bnQiKTsKICAgICAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIp
OwotICAgICAgICBpZiAoaGFzQ29uZGl0aW9uKQorICAgICAgICBpZiAoY29uZGl0aW9uYWwpCiAg
ICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndl
YmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
ZW5kVXBkYXRlcygpOwogICAgIH0sCiAKLSAgICBfcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb246
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgcmVtb3ZlQnJlYWtwb2ludDogZnVuY3Rpb24obGlu
ZU51bWJlcikKICAgICB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7
CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAi
d2Via2l0LWJyZWFrcG9pbnQiKTsKQEAgLTU1NywxMCArNDg4LDEwIEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZENvbmRp
dGlvbmFsQnJlYWtwb2ludCgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
c2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIHRydWUsIHRydWUs
IHRydWUpOworICAgICAgICAgICAgICAgIHRoaXMuYWRkQnJlYWtwb2ludCh0ZXh0Vmlld2VyTGlu
ZU51bWJlciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlk
RWRpdEJyZWFrcG9pbnRDb25kaXRpb24oY29tbWl0dGVkLCBjb25kaXRpb24pCiAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVjb3Jh
dGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVt
b3ZlQnJlYWtwb2ludCh0ZXh0Vmlld2VyTGluZU51bWJlcik7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjb21taXR0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3Bv
aW50KHRleHRWaWV3ZXJMaW5lTnVtYmVyLCBjb25kaXRpb24sIHRydWUpOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTkxMywxMCArODQ0LDIzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xl
QnJlYWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwKIAotICAgIF9maW5kQnJlYWtwb2ludDogZnVu
Y3Rpb24odGV4dFZpZXdlckxpbmVOdW1iZXIpCisgICAgX2ZpbmRCcmVha3BvaW50OiBmdW5jdGlv
bihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX3Rl
eHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdOwot
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludEZvcklk
KGJyZWFrcG9pbnRJZCk7CisgICAgICAgIHZhciB1cmwgPSB0aGlzLl91cmw7CisgICAgICAgIHZh
ciBsb2NhdGlvbiA9IHRoaXMuX2NvbnRlbnQuc291cmNlRnJhbWVMaW5lTnVtYmVyVG9BY3R1YWxM
b2NhdGlvbihsaW5lTnVtYmVyKTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyKGJyZWFrcG9pbnQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50LnVybCkgeworICAgICAgICAg
ICAgICAgIGlmIChicmVha3BvaW50LnVybCAhPT0gdXJsKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChi
cmVha3BvaW50LnNvdXJjZUlEICE9PSBsb2NhdGlvbi5zb3VyY2VJRCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGggPyBicmVha3BvaW50LmxvY2F0aW9u
c1swXS5saW5lTnVtYmVyIDogYnJlYWtwb2ludC5saW5lTnVtYmVyOworICAgICAgICAgICAgcmV0
dXJuIGxpbmVOdW1iZXIgPT09IGxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnF1ZXJ5QnJlYWtwb2ludHMoZmls
dGVyKVswXTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvV2ViS2l0LnFyYwppbmRleCBiYmRmZjljLi40ODA3NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0zMSw2ICszMSw3IEBACiAgICAg
PGZpbGU+RGV0YWlsZWRIZWFwc2hvdFZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0YUdyaWQu
anM8L2ZpbGU+CiAgICAgPGZpbGU+RGVidWdnZXJNb2RlbC5qczwvZmlsZT4KKyAgICA8ZmlsZT5E
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLmpzPC9maWxlPgogICAgIDxmaWxlPkRPTUFnZW50Lmpz
PC9maWxlPgogICAgIDxmaWxlPkRPTVN0b3JhZ2UuanM8L2ZpbGU+CiAgICAgPGZpbGU+RE9NU3Rv
cmFnZUl0ZW1zVmlldy5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDU1YjMyZmQuLjE1NDIyNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAt
MTQ1LDYgKzE0NSw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRlYnVn
Z2VyTW9kZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRPTUFnZW50LmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUaW1lbGluZUFnZW50LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUaW1lbGlu
ZVBhbmVsLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzA3MGE2
ZC4uYmQ0ZDEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0wMi0yMSAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBtb3ZlIHNvdXJjZSBtYXBwaW5nIGZyb20gU291cmNlRnJhbWUgdG8gU2NyaXB0c1BhbmVs
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2NDUK
KworICAgICAgICAqIHNyYy9qcy9UZXN0cy5qczoKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90
eXBlLl9jaGVja0V4ZWN1dGlvbkxpbmUpOgorCiAyMDExLTAyLTE5ICBCcmlhbiBSeW5lciAgPGJy
eW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KQEAg
LTE2Myw2ICsxNzMsMTggQEAKIAogMjAxMS0wMi0xNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZp
bG92QGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIHNvdXJjZSBtYXBwaW5nIGZyb20gU291cmNl
RnJhbWUgdG8gU2NyaXB0c1BhbmVsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTQ2NDUKKworICAgICAgICBUaGlzIGlzIG5lZWRlZCB0byBtYXAgb25l
IHNjcmlwdCB0byBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KKworICAgICAgICAqIHNyYy9qcy9UZXN0
cy5qczoKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9jaGVja0V4ZWN1dGlvbkxpbmUp
OgorCisyMDExLTAyLTE3ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3Jn
PgorCiAgICAgICAgIFVucmV2aWV3ZWQsIGludGVyYWN0aXZlIHVpIHRlc3QgZml4IGZvciByNzg4
MDguCiAKICAgICAgICAgKiBzcmMvanMvVGVzdHMuanM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL1Rlc3RzLmpzCmluZGV4IDQzNDBlNmQuLmE0NjRkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Rlc3RzLmpzCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL1Rlc3RzLmpzCkBAIC02MTYsNyArNjE2LDcgQEAgVGVzdFN1aXRlLnByb3RvdHlw
ZS5ldmFsdWF0ZUluQ29uc29sZV8gPSBmdW5jdGlvbihjb2RlLCBjYWxsYmFjaykKICAqLwogVGVz
dFN1aXRlLnByb3RvdHlwZS5fY2hlY2tFeGVjdXRpb25MaW5lID0gZnVuY3Rpb24oc291cmNlRnJh
bWUsIGxpbmVOdW1iZXIsIGxpbmVDb250ZW50KQogewotICAgIHRoaXMuYXNzZXJ0RXF1YWxzKGxp
bmVOdW1iZXIsIHNvdXJjZUZyYW1lLl9leGVjdXRpb25Mb2NhdGlvbi5saW5lTnVtYmVyICsgMSwg
IlVuZXhwZWN0ZWQgZXhlY3V0aW9uIGxpbmUgbnVtYmVyLiIpOworICAgIHRoaXMuYXNzZXJ0RXF1
YWxzKGxpbmVOdW1iZXIsIHNvdXJjZUZyYW1lLl9leGVjdXRpb25MaW5lTnVtYmVyICsgMSwgIlVu
ZXhwZWN0ZWQgZXhlY3V0aW9uIGxpbmUgbnVtYmVyLiIpOwogICAgIHRoaXMuYXNzZXJ0RXF1YWxz
KGxpbmVDb250ZW50LCBzb3VyY2VGcmFtZS5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlciAtIDEp
LCAiVW5leHBlY3RlZCBleGVjdXRpb24gbGluZSB0ZXh0LiIpOwogfQogCg==
</data>
<flag name="review"
          id="74939"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83181</attachid>
            <date>2011-02-21 10:33:19 -0800</date>
            <delta_ts>2011-02-21 10:41:28 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33806</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwYWY1MTlkLi44NjBmZmNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDIt
MjEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92
ZSBzb3VyY2UgbWFwcGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci10ZXN0LmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZV9EZWJ1Z2dlclRlc3QuSW5zcGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0ZS5j
cmVhdGVXcmFwcGVyLnJldHVybi50cnkpOgorICAgICAgICAoaW5pdGlhbGl6ZV9EZWJ1Z2dlclRl
c3QuSW5zcGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0ZSk6CisgICAgICAgIChpbml0aWFs
aXplX0RlYnVnZ2VyVGVzdC5JbnNwZWN0b3JUZXN0LnNob3dTY3JpcHRTb3VyY2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1lLmh0bWw6IEFkZGVkLgor
CiAyMDExLTAyLTIxICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBBZGQgcmVzdWx0cyBmb3IgdGVzdHMgbWlzc2luZyByZXN1bHRzIGFuZCB1bnNraXAg
YSB0ZXN0IHRoYXQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyLXRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci10ZXN0LmpzCmluZGV4IGNhZjQ0OGMuLjUwYmEwM2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXRlc3QuanMKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItdGVzdC5qcwpAQCAtMTUyLDcgKzE1Miw3
IEBAIEluc3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKHNjcmlwdE5hbWUs
IGNhbGxiYWNrKQogICAgIGlmIChJbnNwZWN0b3JUZXN0Ll9zY3JpcHRzQXJlUGFyc2VkKFtzY3Jp
cHROYW1lXSkpCiAgICAgICAgIEluc3BlY3RvclRlc3QuX3Nob3dTY3JpcHRTb3VyY2Uoc2NyaXB0
TmFtZSwgSW5zcGVjdG9yVGVzdC5zYWZlV3JhcChjYWxsYmFjaykpOwogICAgICBlbHNlCi0gICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbCwg
Il9wYXJzZWRTY3JpcHRTb3VyY2UiLCBJbnNwZWN0b3JUZXN0LnNob3dTY3JpcHRTb3VyY2UuYmlu
ZChJbnNwZWN0b3JUZXN0LCBzY3JpcHROYW1lLCBjYWxsYmFjaykpOworICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLCAiX2FkZFNjcmlw
dFRvRmlsZXNNZW51IiwgSW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0U291cmNlLmJpbmQoSW5zcGVj
dG9yVGVzdCwgc2NyaXB0TmFtZSwgY2FsbGJhY2spKTsKIH07CiAKIEluc3BlY3RvclRlc3QuX3Nj
cmlwdHNBcmVQYXJzZWQgPSBmdW5jdGlvbihzY3JpcHRzKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc291cmNlLWZyYW1lLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjFiZWM2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NvdXJjZS1mcmFtZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw5IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTA6IHRlc3QgZXJyb3IgbWVz
c2FnZQorVGVzdHMgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHNldCBicmVha3BvaW50IGluIHNvdXJj
ZSBmcmFtZSwgYW5kIHRoYXQgc291cmNlIGZyYW1lIGRpc3BsYXlzIGJyZWFrcG9pbnRzIGFuZCBj
b25zb2xlIGVycm9ycy4KKworRGVidWdnZXIgd2FzIGVuYWJsZWQuCitTY3JpcHQgc291cmNlIHdh
cyBzaG93bi4KK0JyZWFrcG9pbnQgYWRkZWQgdG8gc291cmNlIGZyYW1lIGF0IGxpbmUgMTcKK01l
c3NhZ2UgdGV4dDogc291cmNlLWZyYW1lLmh0bWw6MTB0ZXN0IGVycm9yIG1lc3NhZ2UKK0RlYnVn
Z2VyIHdhcyBkaXNhYmxlZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL3NvdXJjZS1mcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L3NvdXJjZS1mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEy
M2RhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIv
c291cmNlLWZyYW1lLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIt
dGVzdC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGFkZEVycm9yVG9Db25z
b2xlKCkKK3sKKyAgICBjb25zb2xlLmVycm9yKCJ0ZXN0IGVycm9yIG1lc3NhZ2UiKTsKK30KKwor
ZnVuY3Rpb24gdGVzdCgpCit7CisgICAgSW5zcGVjdG9yVGVzdC5ydW5EZWJ1Z2dlclRlc3RTdWl0
ZShbCisgICAgICAgIGZ1bmN0aW9uIHRlc3RTZXRCcmVha3BvaW50KG5leHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZSgic291cmNlLWZyYW1l
Lmh0bWwiLCBkaWRTaG93U2NyaXB0U291cmNlKTsKKworICAgICAgICAgICAgZnVuY3Rpb24gZGlk
U2hvd1NjcmlwdFNvdXJjZShzb3VyY2VGcmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IHNvdXJjZSB3YXMgc2hvd24uIik7
CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUsICJhZGRCcmVha3BvaW50IiwgZGlkQWRkQnJlYWtwb2ludCk7
CisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuX3NldEJyZWFrcG9pbnQoMTcsICIiLCB0cnVl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gZGlkQWRkQnJlYWtwb2lu
dChsaW5lTnVtYmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmFkZFJlc3VsdCgiQnJlYWtwb2ludCBhZGRlZCB0byBzb3VyY2UgZnJhbWUgYXQgbGluZSAiICsg
bGluZU51bWJlcik7CisgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKworICAgICAgICBmdW5jdGlvbiB0ZXN0Q29uc29sZU1lc3NhZ2UobmV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSwgImFkZE1lc3NhZ2UiLCBkaWRBZGRNZXNzYWdlKTsKKyAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgiYWRkRXJyb3JUb0NvbnNv
bGUoKSIpOworCisgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEFkZE1lc3NhZ2UobWVzc2FnZSkK
KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoIk1lc3NhZ2UgdGV4dDogIiArIG1lc3NhZ2UubWVzc2FnZSk7CisgICAgICAgICAgICAgICAg
ICBuZXh0KCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIF0pOworfTsKKworPC9z
Y3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+VGVzdHMg
dGhhdCBpdCdzIHBvc3NpYmxlIHRvIHNldCBicmVha3BvaW50IGluIHNvdXJjZSBmcmFtZSwgYW5k
IHRoYXQKK3NvdXJjZSBmcmFtZSBkaXNwbGF5cyBicmVha3BvaW50cyBhbmQgY29uc29sZSBlcnJv
cnMuCis8L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMjhjOTY3Li5kNmUw
MGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMDItMjEgIFBhdmVsIFBvZGl2
aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZXh0cmFjdCBzb3VyY2UgbWFw
cGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIERlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY0NQorCisgICAg
ICAgIFRoaXMgaXMgbmVlZGVkIHRvIG1hcCBvbmUgc2NyaXB0IHRvIHNldmVyYWwgc291cmNlIGZp
bGVzLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9kZWJ1Z2dlci9zb3VyY2UtZnJhbWUuaHRt
bAorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVz
ZW50YXRpb25Nb2RlbC5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQ
cmVzZW50YXRpb25Nb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50
YXRpb25Nb2RlbC5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3VyY2VOYW1lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5fYnJlYWtw
b2ludEFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1v
ZGVsLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlLl9icmVha3BvaW50UmVzb2x2ZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90
eXBlLl9lbmNvZGVTb3VyY2VMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUuX2FjdHVhbExvY2F0aW9uVG9Tb3VyY2VMb2Nh
dGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZW1vdmVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3VyY2VGcmFtZUZv
clJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
Ll9zb3VyY2VGcmFtZUZvclNjcmlwdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsLnByb3RvdHlwZS5fYWRkU291cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUuX3JlbW92ZVNvdXJjZUZyYW1lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9zb3VyY2VGcmFtZUxvYWRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fY2xlYXJDdXJyZW50RXhl
Y3V0aW9uTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlw
ZS5fY2FsbEZyYW1lU2VsZWN0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
Q29udGVudFByb3ZpZGVyRm9yU2NyaXB0LnByb3RvdHlwZS5fYnVpbGRTb3VyY2UpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmdldCBsb2FkZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY3JlYXRlVGV4dFZpZXdlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9zZXRUZXh0Vmlld2VyRGVjb3Jh
dGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRF
eGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUuY2xlYXJFeGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUuYWRkQ29uZGl0aW9uYWxCcmVha3Bv
aW50LmRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2NvbnRleHRNZW51LmFkZENvbmRpdGlvbmFsQnJlYWtwb2lu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9maW5kQnJl
YWtwb2ludC5maWx0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5fZmluZEJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgor
CiAyMDExLTAyLTIxICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBQ
cm90ZWN0IHRoZSBQbHVnaW5WaWV3IHdoZW4gZXZhbHVhdGluZyBqYXZhc2NyaXB0OiBVUkxzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggZjdlYTkwNi4uMzI2YTJlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
NDcxNiw2ICs0NzE2LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFi
YXNlVGFibGVWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFH
cmlkLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwu
anMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRp
b25Nb2RlbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhl
YXBzaG90R3JpZE5vZGVzLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
dGFpbGVkSGVhcHNob3RWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTUFnZW50LmpzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKaW5kZXggZjMxMDI4OC4uYzUyNDJlNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY1ODQxLDYgKzY1ODQxLDEwIEBACiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
ZnJvbnQtZW5kXERlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMiCisJCQkJCT4KKwkJCQk8L0Zp
bGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5k
XERldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDQ3MzdmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcwpAQCAtMCwwICsxLDExNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dl
Ykluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsID0gZnVuY3Rpb24oKQoreworICAg
IHRoaXMuX2JyZWFrcG9pbnRzID0ge307CisgICAgdGhpcy5fc291cmNlTG9jYXRpb25Ub0JyZWFr
cG9pbnRJZCA9IHt9OworCisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRM
aXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVk
LCB0aGlzLl9icmVha3BvaW50QWRkZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRz
LkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlc29sdmVkLCB0aGlzLl9icmVha3BvaW50
UmVzb2x2ZWQsIHRoaXMpOworfQorCitXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25N
b2RlbC5FdmVudHMgPSB7CisgICAgQnJlYWtwb2ludEFkZGVkOiAiYnJlYWtwb2ludC1hZGRlZCIs
CisgICAgQnJlYWtwb2ludFJlbW92ZWQ6ICJicmVha3BvaW50LXJlbW92ZWQiCit9CisKK1dlYklu
c3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZSA9IHsKKyAgICBicmVh
a3BvaW50c0ZvclNvdXJjZU5hbWU6IGZ1bmN0aW9uKHNvdXJjZU5hbWUpCisgICAgeworICAgICAg
ICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fYnJl
YWtwb2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2lu
dHNbaWRdOworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlTmFtZSA9PT0gc291cmNl
TmFtZSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBicmVha3BvaW50czsKKyAgICB9LAorCisgICAgX2JyZWFr
cG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IGV2ZW50LmRhdGE7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IGJyZWFrcG9pbnQubG9jYXRp
b25zLmxlbmd0aCA/IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdIDogYnJlYWtwb2ludDsKKyAgICAg
ICAgdmFyIHNvdXJjZUxvY2F0aW9uID0gdGhpcy5fYWN0dWFsTG9jYXRpb25Ub1NvdXJjZUxvY2F0
aW9uKGJyZWFrcG9pbnQudXJsIHx8IGJyZWFrcG9pbnQuc291cmNlSUQsIGxvY2F0aW9uLmxpbmVO
dW1iZXIsIGxvY2F0aW9uLmNvbHVtbk51bWJlcik7CisKKyAgICAgICAgdmFyIGVuY29kZWRTb3Vy
Y2VMb2NhdGlvbiA9IHRoaXMuX2VuY29kZVNvdXJjZUxvY2F0aW9uKHNvdXJjZUxvY2F0aW9uLnNv
dXJjZU5hbWUsIHNvdXJjZUxvY2F0aW9uLmxpbmVOdW1iZXIpOworICAgICAgICBpZiAoZW5jb2Rl
ZFNvdXJjZUxvY2F0aW9uIGluIHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVha3BvaW50SWQpIHsK
KyAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgbW9yZSB0aGFuIG9uZSBicmVha3BvaW50IG9u
IGEgc2luZ2xlIHNvdXJjZSBmcmFtZSBsaW5lLiBSZW1vdmUgbmV3bHkgYWRkZWQgYnJlYWtwb2lu
dC4KKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9p
bnQoYnJlYWtwb2ludC5pZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgcHJlc2VudGF0aW9uQnJlYWtwb2ludCA9IHsKKyAgICAgICAgICAgIHNvdXJjZU5h
bWU6IHNvdXJjZUxvY2F0aW9uLnNvdXJjZU5hbWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBz
b3VyY2VMb2NhdGlvbi5saW5lTnVtYmVyLAorICAgICAgICAgICAgdXJsOiBicmVha3BvaW50LnVy
bCwKKyAgICAgICAgICAgIHJlc29sdmVkOiAhIWJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aCwK
KyAgICAgICAgICAgIGNvbmRpdGlvbjogYnJlYWtwb2ludC5jb25kaXRpb24sCisgICAgICAgICAg
ICBlbmFibGVkOiBicmVha3BvaW50LmVuYWJsZWQKKyAgICAgICAgfTsKKworICAgICAgICB0aGlz
Ll9zb3VyY2VMb2NhdGlvblRvQnJlYWtwb2ludElkW2VuY29kZWRTb3VyY2VMb2NhdGlvbl0gPSBi
cmVha3BvaW50LmlkOworICAgICAgICB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSA9
IHByZXNlbnRhdGlvbkJyZWFrcG9pbnQ7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLkJy
ZWFrcG9pbnRBZGRlZCwgcHJlc2VudGF0aW9uQnJlYWtwb2ludCk7CisgICAgfSwKKworICAgIF9i
cmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9i
cmVha3BvaW50c1ticmVha3BvaW50SWRdOworICAgICAgICB2YXIgZW5jb2RlZFNvdXJjZUxvY2F0
aW9uID0gdGhpcy5fZW5jb2RlU291cmNlTG9jYXRpb24oYnJlYWtwb2ludC5zb3VyY2VOYW1lLCBi
cmVha3BvaW50LmxpbmVOdW1iZXIpOworICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludElkXTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZUxvY2F0aW9uVG9CcmVh
a3BvaW50SWRbZW5jb2RlZFNvdXJjZUxvY2F0aW9uXTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZl
bnRzLkJyZWFrcG9pbnRSZW1vdmVkLCBicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgX2JyZWFr
cG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVkKHsgZGF0
YTogYnJlYWtwb2ludC5pZCB9KTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludEFkZGVkKHsgZGF0
YTogYnJlYWtwb2ludCB9KTsKKyAgICB9LAorCisgICAgX2VuY29kZVNvdXJjZUxvY2F0aW9uOiBm
dW5jdGlvbihzb3VyY2VOYW1lLCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNv
dXJjZU5hbWUgKyAiOiIgKyBsaW5lTnVtYmVyOworICAgIH0sCisKKyAgICBfYWN0dWFsTG9jYXRp
b25Ub1NvdXJjZUxvY2F0aW9uOiBmdW5jdGlvbihzb3VyY2VOYW1lLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpCisgICAgeworICAgICAgICAvLyBUT0RPOiB1c2Ugc291cmNlIG1hcHBpbmcgdG8g
b2J0YWluIHNvdXJjZSBsb2NhdGlvbi4KKyAgICAgICAgcmV0dXJuIHsgc291cmNlTmFtZTogc291
cmNlTmFtZSwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1i
ZXIgfTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVs
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMK
aW5kZXggODRjMjQ4OC4uMWUyOGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTI3LDYgKzI3LDggQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuUGFuZWwu
Y2FsbCh0aGlzLCAic2NyaXB0cyIpOwogCisgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwgPSBu
ZXcgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwoKTsKKwogICAgIHRoaXMu
dG9wU3RhdHVzQmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy50
b3BTdGF0dXNCYXIuY2xhc3NOYW1lID0gInN0YXR1cy1iYXIiOwogICAgIHRoaXMudG9wU3RhdHVz
QmFyLmlkID0gInNjcmlwdHMtc3RhdHVzLWJhciI7CkBAIC0xODksNiArMTkxLDggQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICBXZWJJbnNwZWN0b3IuZGVidWdn
ZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50
cy5TY3JpcHRTb3VyY2VDaGFuZ2VkLCB0aGlzLl9zY3JpcHRTb3VyY2VDaGFuZ2VkLCB0aGlzKTsK
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwgdGhpcy5fZGVidWdnZXJQ
YXVzZWQsIHRoaXMpOwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUmVzdW1lZCwg
dGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsKKyAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVs
LkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Cisg
ICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMu
X2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKIH0KIAogLy8gS2VlcCB0aGVzZSBpbiBzeW5jIHdp
dGggV2ViQ29yZTo6U2NyaXB0RGVidWdTZXJ2ZXIKQEAgLTMzNyw2ICszNDEsMjQgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9zb3Vy
Y2VOYW1lVG9Tb3VyY2VGcmFtZVt1cmxdLmNsZWFyTWVzc2FnZXMoKTsKICAgICB9LAogCisgICAg
X2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IGV2ZW50LmRhdGE7CisKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5f
c291cmNlTmFtZVRvU291cmNlRnJhbWVbYnJlYWtwb2ludC5zb3VyY2VOYW1lXTsKKyAgICAgICAg
aWYgKHNvdXJjZUZyYW1lICYmIHNvdXJjZUZyYW1lLmxvYWRlZCkKKyAgICAgICAgICAgIHNvdXJj
ZUZyYW1lLmFkZEJyZWFrcG9pbnQoYnJlYWtwb2ludC5saW5lTnVtYmVyLCBicmVha3BvaW50LnJl
c29sdmVkLCBicmVha3BvaW50LmNvbmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICB9
LAorCisgICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAg
ICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKworICAgICAgICB2YXIgc291cmNlRnJh
bWUgPSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVticmVha3BvaW50LnNvdXJjZU5hbWVd
OworICAgICAgICBpZiAoc291cmNlRnJhbWUgJiYgc291cmNlRnJhbWUubG9hZGVkKQorICAgICAg
ICAgICAgc291cmNlRnJhbWUucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LmxpbmVOdW1iZXIp
OworICAgIH0sCisKICAgICBzZWxlY3RlZENhbGxGcmFtZUlkOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICB2YXIgc2VsZWN0ZWRDYWxsRnJhbWUgPSB0aGlzLnNpZGViYXJQYW5lcy5jYWxsc3Rh
Y2suc2VsZWN0ZWRDYWxsRnJhbWU7CkBAIC01MjEsNyArNTQzLDcgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAodGhpcy5fbWVzc2FnZXNb
aV0udXJsID09PSByZXNvdXJjZS51cmwpCiAgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuYWRk
TWVzc2FnZShtZXNzYWdlKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9zb3VyY2VOYW1lVG9T
b3VyY2VGcmFtZVtyZXNvdXJjZS51cmxdID0gc291cmNlRnJhbWU7CisgICAgICAgIHRoaXMuX2Fk
ZFNvdXJjZUZyYW1lKHJlc291cmNlLnVybCwgc291cmNlRnJhbWUpOwogICAgICAgICByZXR1cm4g
c291cmNlRnJhbWU7CiAgICAgfSwKIApAQCAtNTM1LDcgKzU1Nyw3IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY29udGVudFByb3ZpZGVyID0g
bmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQcm92aWRlckZvclNjcmlwdChzY3Jp
cHQpOwogICAgICAgICB2YXIgaXNTY3JpcHQgPSAhc2NyaXB0LmxpbmVPZmZzZXQgJiYgIXNjcmlw
dC5jb2x1bW5PZmZzZXQ7CiAgICAgICAgIHNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZShjb250ZW50UHJvdmlkZXIsIHNjcmlwdC5zb3VyY2VVUkwsIGlzU2NyaXB0KTsK
LSAgICAgICAgdGhpcy5fc291cmNlTmFtZVRvU291cmNlRnJhbWVbc291cmNlTmFtZV0gPSBzb3Vy
Y2VGcmFtZTsKKyAgICAgICAgdGhpcy5fYWRkU291cmNlRnJhbWUoc291cmNlTmFtZSwgc291cmNl
RnJhbWUpOwogICAgICAgICByZXR1cm4gc291cmNlRnJhbWU7CiAgICAgfSwKIApAQCAtNTUzLDYg
KzU3NSw1MCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy52aXNpYmxlVmlldyA9IG5ld1NvdXJjZUZyYW1lOwogICAgIH0sCiAKKyAgICBfYWRk
U291cmNlRnJhbWU6IGZ1bmN0aW9uKHNvdXJjZU5hbWUsIHNvdXJjZUZyYW1lKQorICAgIHsKKyAg
ICAgICAgc291cmNlRnJhbWUuX3NvdXJjZU5hbWUgPSBzb3VyY2VOYW1lOworICAgICAgICBzb3Vy
Y2VGcmFtZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMu
TG9hZGVkLCB0aGlzLl9zb3VyY2VGcmFtZUxvYWRlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3Nv
dXJjZU5hbWVUb1NvdXJjZUZyYW1lW3NvdXJjZU5hbWVdID0gc291cmNlRnJhbWU7CisgICAgfSwK
KworICAgIF9yZW1vdmVTb3VyY2VGcmFtZTogZnVuY3Rpb24oc291cmNlTmFtZSkKKyAgICB7Cisg
ICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3NvdXJjZU5hbWVUb1NvdXJjZUZyYW1lW3Nv
dXJjZU5hbWVdOworICAgICAgICBpZiAoIXNvdXJjZUZyYW1lKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBzb3VyY2VGcmFtZS5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5FdmVudHMuTG9hZGVkLCB0aGlzLl9zb3VyY2VGcmFtZUxvYWRlZCwgdGhpcyk7
CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VOYW1lVG9Tb3VyY2VGcmFtZVtzb3VyY2VOYW1l
XTsKKyAgICAgICAgcmV0dXJuIHNvdXJjZUZyYW1lOworICAgIH0sCisKKyAgICBfc291cmNlRnJh
bWVMb2FkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1l
ID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgc291cmNlTmFtZSA9IHNvdXJjZUZyYW1lLl9z
b3VyY2VOYW1lOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWVzc2FnZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5fbWVzc2FnZXNb
aV07CisgICAgICAgICAgICBpZiAobWVzc2FnZS51cmwgPT09IHNvdXJjZU5hbWUpCisgICAgICAg
ICAgICAgICAgc291cmNlRnJhbWUuYWRkTWVzc2FnZShtZXNzYWdlLmxpbmUpOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuYnJl
YWtwb2ludHNGb3JTb3VyY2VOYW1lKHNvdXJjZU5hbWUpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IGJyZWFrcG9pbnRzW2ldOworICAgICAgICAgICAgc291cmNlRnJhbWUuYWRkQnJlYWtw
b2ludChicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQucmVzb2x2ZWQsIGJyZWFrcG9p
bnQuY29uZGl0aW9uLCBicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHNlbGVjdGVkQ2FsbEZyYW1lID0gdGhpcy5zaWRlYmFyUGFuZXMuY2FsbHN0YWNrLnNlbGVj
dGVkQ2FsbEZyYW1lOworICAgICAgICBpZiAoc2VsZWN0ZWRDYWxsRnJhbWUpIHsKKyAgICAgICAg
ICAgIHZhciBzY3JpcHQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JTb3Vy
Y2VJRChzZWxlY3RlZENhbGxGcmFtZS5zb3VyY2VJRCk7CisgICAgICAgICAgICBpZiAoKHNjcmlw
dC5zb3VyY2VVUkwgfHwgc2NyaXB0LnNvdXJjZUlEKSA9PT0gc291cmNlTmFtZSkgeworICAgICAg
ICAgICAgICAgIHNvdXJjZUZyYW1lLnNldEV4ZWN1dGlvbkxpbmUoc2VsZWN0ZWRDYWxsRnJhbWUu
bGluZSk7CisgICAgICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUgPSBzb3Vy
Y2VGcmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKICAgICBfc2hvd1Nj
cmlwdE9yUmVzb3VyY2U6IGZ1bmN0aW9uKHNjcmlwdE9yUmVzb3VyY2UsIG9wdGlvbnMpCiAgICAg
ewogICAgICAgICAvLyBvcHRpb25zID0ge2xpbmU6LCBzaG91bGRIaWdobGlnaHRMaW5lOiwgZnJv
bUJhY2tGb3J3YXJkQWN0aW9uOiwgaW5pdGlhbExvYWQ6fQpAQCAtNjYyLDcgKzcyOCw3IEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgIF9jbGVhckN1cnJlbnRF
eGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZXhlY3V0
aW9uU291cmNlRnJhbWUpCi0gICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Tb3VyY2VGcmFtZS5j
bGVhckV4ZWN1dGlvbkxvY2F0aW9uKCk7CisgICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Tb3Vy
Y2VGcmFtZS5jbGVhckV4ZWN1dGlvbkxpbmUoKTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2V4ZWN1
dGlvblNvdXJjZUZyYW1lOwogICAgIH0sCiAKQEAgLTY4Miw5ICs3NDgsMTEgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBzY3JpcHRPclJlc291
cmNlID0gc2NyaXB0LnJlc291cmNlIHx8IHNjcmlwdDsKICAgICAgICAgdGhpcy5fc2hvd1Njcmlw
dE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSwge2xpbmU6IGN1cnJlbnRGcmFtZS5saW5lfSk7
CiAKLSAgICAgICAgdGhpcy5fZXhlY3V0aW9uU291cmNlRnJhbWUgPSB0aGlzLl9zb3VyY2VGcmFt
ZUZvclNjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0T3JSZXNvdXJjZSk7Ci0gICAgICAgIGlmICh0aGlz
Ll9leGVjdXRpb25Tb3VyY2VGcmFtZSkKLSAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGlvblNvdXJj
ZUZyYW1lLnNldEV4ZWN1dGlvbkxvY2F0aW9uKGN1cnJlbnRGcmFtZS5saW5lLCBjdXJyZW50RnJh
bWUuY29sdW1uKTsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVG
b3JTY3JpcHRPclJlc291cmNlKHNjcmlwdE9yUmVzb3VyY2UpOworICAgICAgICBpZiAoc291cmNl
RnJhbWUgJiYgc291cmNlRnJhbWUubG9hZGVkKSB7CisgICAgICAgICAgICBzb3VyY2VGcmFtZS5z
ZXRFeGVjdXRpb25MaW5lKGN1cnJlbnRGcmFtZS5saW5lKTsKKyAgICAgICAgICAgIHRoaXMuX2V4
ZWN1dGlvblNvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7CisgICAgICAgIH0KICAgICB9LAogCiAg
ICAgX2NoYW5nZVZpc2libGVGaWxlOiBmdW5jdGlvbihldmVudCkKQEAgLTEwODUsNyArMTE1Myw3
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQcm92aWRlckZvclNjcmlwdC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gMDsKICAgICAgICAgdmFyIGNvbHVt
bk51bWJlciA9IDA7CiAgICAgICAgIHZhciBzY3JpcHRSYW5nZXMgPSBbXTsKLSAgICAgICAgZnVu
Y3Rpb24gYXBwZW5kQ2h1bmsoY2h1bmssIGlzU2NyaXB0KQorICAgICAgICBmdW5jdGlvbiBhcHBl
bmRDaHVuayhjaHVuaywgc2NyaXB0KQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgc3RhcnQg
PSB7IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIH07
CiAgICAgICAgICAgICBzb3VyY2UgKz0gY2h1bms7CkBAIC0xMDk4LDE1ICsxMTY2LDE1IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnRQcm92aWRlckZvclNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyID0gbGluZUVuZGluZ3NbbGluZUNvdW50
IC0gMV0gLSBsaW5lRW5kaW5nc1tsaW5lQ291bnQgLSAyXSAtIDE7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB2YXIgZW5kID0geyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXI6IGNvbHVtbk51bWJlciB9OwotICAgICAgICAgICAgaWYgKGlzU2NyaXB0KQotICAgICAgICAg
ICAgICAgIHNjcmlwdFJhbmdlcy5wdXNoKHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCB9KTsKKyAg
ICAgICAgICAgIGlmIChzY3JpcHQpCisgICAgICAgICAgICAgICAgc2NyaXB0UmFuZ2VzLnB1c2go
eyBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBzb3VyY2VJRDogc2NyaXB0LnNvdXJjZUlEIH0pOwog
ICAgICAgICB9CiAKICAgICAgICAgdmFyIG1pbWVUeXBlOwogICAgICAgICBpZiAoc2NyaXB0cy5s
ZW5ndGggPT09IDEgJiYgIXNjcmlwdHNbMF0ubGluZU9mZnNldCAmJiAhc2NyaXB0c1swXS5jb2x1
bW5PZmZzZXQpIHsKICAgICAgICAgICAgIC8vIFNpbmdsZSBzY3JpcHQgc291cmNlLgogICAgICAg
ICAgICAgbWltZVR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKLSAgICAgICAgICAgIGFwcGVuZENo
dW5rKHNvdXJjZXNbMF0sIHRydWUpOworICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc291cmNlc1sw
XSwgc2NyaXB0c1swXSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTY3JpcHRz
IGlubGluZWQgaW4gaHRtbCBkb2N1bWVudC4KICAgICAgICAgICAgIG1pbWVUeXBlID0gInRleHQv
aHRtbCI7CkBAIC0xMTIxLDcgKzExODksNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250
ZW50UHJvdmlkZXJGb3JTY3JpcHQucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICAgICAgLy8g
QWRkIHNjcmlwdCB0YWcuCiAgICAgICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc2NyaXB0T3BlblRh
Zyk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc291cmNlc1tpXSwgdHJ1ZSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kQ2h1bmsoc291cmNlc1tpXSwgc2NyaXB0c1tpXSk7CiAgICAgICAg
ICAgICAgICAgYXBwZW5kQ2h1bmsoc2NyaXB0Q2xvc2VUYWcpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZS5qcwppbmRleCBmMzVkYjJhLi5kMzcyY2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTUxLDYgKzUxLDEwIEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKGNvbnRlbnRQcm92aWRlciwgdXJsLCBp
c1NjcmlwdCkKICAgICB0aGlzLl9wb3BvdmVyT2JqZWN0R3JvdXAgPSAicG9wb3ZlciI7CiB9CiAK
K1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMgPSB7CisgICAgTG9hZGVkOiAibG9hZGVk
IgorfQorCiBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgc2hv
dzogZnVuY3Rpb24ocGFyZW50RWxlbWVudCkKQEAgLTg1LDYgKzg5LDExIEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2NsZWFyTGluZUhpZ2hs
aWdodCgpOwogICAgIH0sCiAKKyAgICBnZXQgbG9hZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAhIXRoaXMuX2NvbnRlbnQ7CisgICAgfSwKKwogICAgIGhhc0NvbnRlbnQ6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjA1LDExICsyMTQsOSBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgZGVsZXRlIHRoaXMu
X2RlbGF5ZWRGaW5kU2VhcmNoTWF0Y2hlczsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuZW5kVXBkYXRlcygpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzLkxvYWRlZCk7CiAKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVha3BvaW50QWRk
ZWQsIHRoaXMpOwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3Zl
ZCwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwotICAgICAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZXNvbHZlZCwgdGhp
cyk7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKICAg
ICBfc2V0VGV4dFZpZXdlckRlY29yYXRpb25zOiBmdW5jdGlvbigpCkBAIC0yMjIsMzIgKzIyOSwx
MSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll9hZGRFeGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2UoKTsKICAgICAgICAgdGhpcy5fdXBkYXRlRGlm
ZkRlY29yYXRpb25zKCk7CiAKLSAgICAgICAgaWYgKHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uKQot
ICAgICAgICAgICAgdGhpcy5fc2V0RXhlY3V0aW9uTG9jYXRpb24oKTsKLQotICAgICAgICB0aGlz
Ll9icmVha3BvaW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyID0ge307Ci0gICAgICAgIHRoaXMu
X3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWQgPSB7fTsKLSAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludHM7Ci0gICAg
ICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzKQotICAgICAgICAgICAgdGhpcy5fYnJlYWtw
b2ludEFkZGVkKHsgZGF0YTogYnJlYWtwb2ludHNbaWRdIH0pOwotCiAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIucmVzaXplKCk7CiAKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVz
KCk7CiAgICAgfSwKIAotICAgIF9zaG91bGREaXNwbGF5QnJlYWtwb2ludDogZnVuY3Rpb24oYnJl
YWtwb2ludCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91cmwpCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5fdXJsID09PSBicmVha3BvaW50LnVybDsKLSAgICAgICAgdmFyIHNjcmlwdHMgPSB0
aGlzLl9jb250ZW50LnNjcmlwdFJhbmdlczsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
Y3JpcHRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5zb3VyY2VJ
RCA9PT0gc2NyaXB0c1tpXS5zb3VyY2VJRCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQogICAgIHBlcmZvcm1T
ZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIENhbGwg
c2VhcmNoQ2FuY2VsZWQgc2luY2UgaXQgd2lsbCByZXNldCBldmVyeXRoaW5nIHdlIG5lZWQgYmVm
b3JlIGRvaW5nIGEgbmV3IHNlYXJjaC4KQEAgLTM2MSwyNiArMzQ3LDE2IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIG1zZy5fcmVzb3VyY2VNZXNzYWdl
UmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIg
KHJlcGVhdGVkICVkIHRpbWVzKSIsIG1zZy5yZXBlYXRDb3VudCk7CiAgICAgfSwKIAotICAgIHNl
dEV4ZWN1dGlvbkxvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisg
ICAgc2V0RXhlY3V0aW9uTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAg
IHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uID0geyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9OwotICAgICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikK
LSAgICAgICAgICAgIHRoaXMuX3NldEV4ZWN1dGlvbkxvY2F0aW9uKCk7CisgICAgICAgIHRoaXMu
X2V4ZWN1dGlvbkxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwog
ICAgIH0sCiAKLSAgICBjbGVhckV4ZWN1dGlvbkxvY2F0aW9uOiBmdW5jdGlvbigpCisgICAgY2xl
YXJFeGVjdXRpb25MaW5lOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fdGV4
dFZpZXdlcikgewotICAgICAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5f
Y29udGVudC5hY3R1YWxMb2NhdGlvblRvU291cmNlRnJhbWVMaW5lTnVtYmVyKHRoaXMuX2V4ZWN1
dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXIsIHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uLmNvbHVtbk51
bWJlcik7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24odGV4
dFZpZXdlckxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKLSAgICAgICAgfQot
ICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9uTG9jYXRpb247Ci0gICAgfSwKLQotICAgIF9z
ZXRFeGVjdXRpb25Mb2NhdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHRleHRW
aWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fY29udGVudC5hY3R1YWxMb2NhdGlvblRvU291cmNlRnJh
bWVMaW5lTnVtYmVyKHRoaXMuX2V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXIsIHRoaXMuX2V4
ZWN1dGlvbkxvY2F0aW9uLmNvbHVtbk51bWJlcik7Ci0gICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
YWRkRGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGlu
ZSIpOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24odGhpcy5fZXhl
Y3V0aW9uTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOworICAgICAgICBkZWxl
dGUgdGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcjsKICAgICB9LAogCiAgICAgX3VwZGF0ZURpZmZE
ZWNvcmF0aW9uczogZnVuY3Rpb24oKQpAQCAtNDcxLDYzICs0NDcsMTggQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VM
aW5lRWxlbWVudCA9IG1lc3NhZ2VMaW5lRWxlbWVudDsKICAgICB9LAogCi0gICAgX2JyZWFrcG9p
bnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IGV2ZW50LmRhdGE7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9zaG91bGREaXNwbGF5QnJlYWtwb2lu
dChicmVha3BvaW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgcmVzb2x2
ZWQgPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGg7Ci0gICAgICAgIHZhciBsb2NhdGlvbiA9
IHJlc29sdmVkID8gYnJlYWtwb2ludC5sb2NhdGlvbnNbMF0gOiBicmVha3BvaW50OwotCi0gICAg
ICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2NvbnRlbnQuYWN0dWFsTG9jYXRp
b25Ub1NvdXJjZUZyYW1lTGluZU51bWJlcihsb2NhdGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5j
b2x1bW5OdW1iZXIpOwotICAgICAgICBpZiAodGV4dFZpZXdlckxpbmVOdW1iZXIgPj0gdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFy
IGV4aXN0aW5nQnJlYWtwb2ludElkID0gdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFr
cG9pbnRJZFt0ZXh0Vmlld2VyTGluZU51bWJlcl07Ci0gICAgICAgIGlmIChleGlzdGluZ0JyZWFr
cG9pbnRJZCkgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwucmVtb3Zl
QnJlYWtwb2ludChicmVha3BvaW50LmlkKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1iZXJbYnJl
YWtwb2ludC5pZF0gPSB0ZXh0Vmlld2VyTGluZU51bWJlcjsKLSAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJZFt0ZXh0Vmlld2VyTGluZU51bWJlcl0gPSBicmVh
a3BvaW50LmlkOwotICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmll
d2VyTGluZU51bWJlciwgcmVzb2x2ZWQsIGJyZWFrcG9pbnQuZW5hYmxlZCwgISFicmVha3BvaW50
LmNvbmRpdGlvbik7Ci0gICAgfSwKLQotICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZlbnQuZGF0YTsKLQot
ICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9icmVha3BvaW50SWRUb1Rl
eHRWaWV3ZXJMaW5lTnVtYmVyW2JyZWFrcG9pbnRJZF07Ci0gICAgICAgIGlmICh0ZXh0Vmlld2Vy
TGluZU51bWJlciA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGRlbGV0ZSB0aGlzLl9icmVha3BvaW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyW2JyZWFrcG9p
bnRJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvQnJlYWtw
b2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKLSAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtw
b2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIpOwotICAgIH0sCi0KLSAgICBfYnJl
YWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVh
a3BvaW50ID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQoeyBk
YXRhOiBicmVha3BvaW50LmlkIH0pOwotICAgICAgICB0aGlzLl9icmVha3BvaW50QWRkZWQoeyBk
YXRhOiBicmVha3BvaW50IH0pOwotICAgIH0sCi0KLSAgICBfc2V0QnJlYWtwb2ludERlY29yYXRp
b246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29sdmVkLCBlbmFibGVkLCBoYXNDb25kaXRpb24p
CisgICAgYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgcmVzb2x2ZWQsIGNvbmRp
dGlvbmFsLCBlbmFibGVkKQogICAgIHsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVw
ZGF0ZXMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwogICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAg
ICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1i
cmVha3BvaW50LWRpc2FibGVkIik7Ci0gICAgICAgIGlmIChoYXNDb25kaXRpb24pCisgICAgICAg
IGlmIChjb25kaXRpb25hbCkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3Jh
dGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKICAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAgICAgfSwKIAotICAgIF9yZW1vdmVC
cmVha3BvaW50RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICByZW1vdmVCcmVh
a3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5iZWdpblVwZGF0ZXMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNv
cmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwpAQCAtNTU3LDEwICs0ODgs
MTAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAg
ICAgZnVuY3Rpb24gYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGlu
ZU51bWJlciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRCcmVh
a3BvaW50KHRleHRWaWV3ZXJMaW5lTnVtYmVyLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAgICAgICAg
ICAgICAgICBmdW5jdGlvbiBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNv
bmRpdGlvbikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jl
bW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1pdHRlZCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3NldEJyZWFrcG9pbnQodGV4dFZpZXdlckxpbmVOdW1iZXIsIGNvbmRpdGlvbiwg
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtOTEzLDEwICs4NDQsMjMgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0cy50b2dnbGVCcmVha3BvaW50c0NsaWNrZWQoKTsKICAgICB9LAogCi0gICAg
X2ZpbmRCcmVha3BvaW50OiBmdW5jdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcikKKyAgICBfZmlu
ZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFrcG9pbnRJZFt0ZXh0
Vmlld2VyTGluZU51bWJlcl07Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5icmVha3BvaW50Rm9ySWQoYnJlYWtwb2ludElkKTsKKyAgICAgICAgdmFyIHVybCA9IHRo
aXMuX3VybDsKKyAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fY29udGVudC5zb3VyY2VGcmFt
ZUxpbmVOdW1iZXJUb0FjdHVhbExvY2F0aW9uKGxpbmVOdW1iZXIpOworICAgICAgICBmdW5jdGlv
biBmaWx0ZXIoYnJlYWtwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyZWFrcG9p
bnQudXJsKSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsICE9PSB1cmwpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgIT09IGxvY2F0aW9uLnNvdXJj
ZUlEKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0aCA/
IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdLmxpbmVOdW1iZXIgOiBicmVha3BvaW50LmxpbmVOdW1i
ZXI7CisgICAgICAgICAgICByZXR1cm4gbGluZU51bWJlciA9PT0gbG9jYXRpb24ubGluZU51bWJl
cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
cXVlcnlCcmVha3BvaW50cyhmaWx0ZXIpWzBdOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGJiZGZmOWMuLjQ4MDc0MTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAg
LTMxLDYgKzMxLDcgQEAKICAgICA8ZmlsZT5EZXRhaWxlZEhlYXBzaG90Vmlldy5qczwvZmlsZT4K
ICAgICA8ZmlsZT5EYXRhR3JpZC5qczwvZmlsZT4KICAgICA8ZmlsZT5EZWJ1Z2dlck1vZGVsLmpz
PC9maWxlPgorICAgIDxmaWxlPkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+RE9NQWdlbnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+RE9NU3RvcmFnZS5qczwvZmls
ZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlSXRlbXNWaWV3LmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggNTViMzJm
ZC4uMTU0MjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sCkBAIC0xNDUsNiArMTQ1LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEZXRh
aWxlZEhlYXBzaG90Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iRGVidWdnZXJNb2RlbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRE9NQWdl
bnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlRpbWVsaW5lQWdlbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IlRpbWVsaW5lUGFuZWwuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCAzYWZkMTg2Li5lMTMyMDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTAyLTIxICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmls
b3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgc291cmNlIG1hcHBpbmcgZnJvbSBTb3VyY2VG
cmFtZSB0byBTY3JpcHRzUGFuZWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01NDY0NQorCisgICAgICAgICogc3JjL2pzL1Rlc3RzLmpzOgorICAgICAg
ICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrRXhlY3V0aW9uTGluZSk6CisKIDIwMTEtMDIt
MTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2VudCBUYW11cmEuCkBAIC0xNzgsNiArMTg4LDE4IEBACiAKIDIwMTEtMDItMTcgIFBhdmVs
IFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW92ZSBzb3VyY2Ug
bWFwcGluZyBmcm9tIFNvdXJjZUZyYW1lIHRvIFNjcmlwdHNQYW5lbC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjQ1CisKKyAgICAgICAgVGhpcyBp
cyBuZWVkZWQgdG8gbWFwIG9uZSBzY3JpcHQgdG8gc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisKKyAg
ICAgICAgKiBzcmMvanMvVGVzdHMuanM6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5f
Y2hlY2tFeGVjdXRpb25MaW5lKToKKworMjAxMS0wMi0xNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9k
aXZpbG92QGNocm9taXVtLm9yZz4KKwogICAgICAgICBVbnJldmlld2VkLCBpbnRlcmFjdGl2ZSB1
aSB0ZXN0IGZpeCBmb3Igcjc4ODA4LgogCiAgICAgICAgICogc3JjL2pzL1Rlc3RzLmpzOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMuanMgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcwppbmRleCA0MzQwZTZkLi5hNDY0ZGQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9UZXN0cy5qcwpAQCAtNjE2LDcgKzYxNiw3IEBA
IFRlc3RTdWl0ZS5wcm90b3R5cGUuZXZhbHVhdGVJbkNvbnNvbGVfID0gZnVuY3Rpb24oY29kZSwg
Y2FsbGJhY2spCiAgKi8KIFRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrRXhlY3V0aW9uTGluZSA9
IGZ1bmN0aW9uKHNvdXJjZUZyYW1lLCBsaW5lTnVtYmVyLCBsaW5lQ29udGVudCkKIHsKLSAgICB0
aGlzLmFzc2VydEVxdWFscyhsaW5lTnVtYmVyLCBzb3VyY2VGcmFtZS5fZXhlY3V0aW9uTG9jYXRp
b24ubGluZU51bWJlciArIDEsICJVbmV4cGVjdGVkIGV4ZWN1dGlvbiBsaW5lIG51bWJlci4iKTsK
KyAgICB0aGlzLmFzc2VydEVxdWFscyhsaW5lTnVtYmVyLCBzb3VyY2VGcmFtZS5fZXhlY3V0aW9u
TGluZU51bWJlciArIDEsICJVbmV4cGVjdGVkIGV4ZWN1dGlvbiBsaW5lIG51bWJlci4iKTsKICAg
ICB0aGlzLmFzc2VydEVxdWFscyhsaW5lQ29udGVudCwgc291cmNlRnJhbWUuX3RleHRNb2RlbC5s
aW5lKGxpbmVOdW1iZXIgLSAxKSwgIlVuZXhwZWN0ZWQgZXhlY3V0aW9uIGxpbmUgdGV4dC4iKTsK
IH0KIAo=
</data>
<flag name="review"
          id="74944"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>