<?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>123223</bug_id>
          
          <creation_ts>2013-10-23 14:52:23 -0700</creation_ts>
          <short_desc>Web Inspector: Add a way to test the Manager and model classes</short_desc>
          <delta_ts>2013-10-24 10:06:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Alexandru Chiculita">achicu</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>942852</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-10-23 14:52:23 -0700</bug_when>
    <thetext>Add a way to unit test the manager and model classes in the new WebInspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942853</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-10-23 14:52:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/15303137&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942863</commentid>
    <comment_count>2</comment_count>
      <attachid>215002</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-10-23 15:27:45 -0700</bug_when>
    <thetext>Created attachment 215002
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942876</commentid>
    <comment_count>3</comment_count>
      <attachid>215002</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-10-23 15:56:36 -0700</bug_when>
    <thetext>Comment on attachment 215002
Patch V1

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

Clever, I like it. This looks good to me, but this will just need to fix Main.html missing new includes.

&gt; LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js:110
&gt; +    if (xhr.status !== 0)
&gt; +        throw new Error(&quot;Invalid script URL: &quot; + scriptName);

A status of 200 may need to be allowed if there is a LayoutTest/http/inspector-protocol test. Though I&apos;m not sure that will ever happen.

&gt; LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js:122
&gt; +        &quot;InspectorFrontendAPI&quot;,

When this is included it will overwrite the &quot;InspectorFrontendAPI&quot; implemented by LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js. We will need to be careful, if a test wants to grab events we&apos;ll need to re-incorporate a way to get back the protocol-test InspectorTest.eventHandler[&quot;Debugger.scriptParsed&quot;] syntax, or something like it. But if we are indeed just testing the model, then we probably will never care about this.

&gt; Source/WebInspectorUI/UserInterface/MessageDispatcher.js:1
&gt; +/*

These new files will need to be included by Main.html, in the right order, so that the frontend itself still works! r- for this.

&gt; Source/WebInspectorUI/UserInterface/URLUtilities.js:1
&gt; +/*

I like that you&apos;ve put all of this code in one file. I&apos;ve had that itch for a while!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942892</commentid>
    <comment_count>4</comment_count>
      <attachid>215009</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-10-23 16:22:02 -0700</bug_when>
    <thetext>Created attachment 215009
Patch V2

Nice catch with the main.html file. I&apos;ve run the test runner so many times, I forget to actually run the inspector itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>942955</commentid>
    <comment_count>5</comment_count>
      <attachid>215009</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-10-23 19:01:36 -0700</bug_when>
    <thetext>Comment on attachment 215009
Patch V2

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

&gt; LayoutTests/http/tests/inspector-protocol/resources/InspectorTest.js:157
&gt; +    InspectorBackend.registerPageDispatcher(new WebInspector.PageObserver);
&gt; +    InspectorBackend.registerDOMDispatcher(new WebInspector.DOMObserver);
&gt; +
&gt; +    WebInspector.frameResourceManager = new WebInspector.FrameResourceManager;
&gt; +    WebInspector.domTreeManager = new WebInspector.DOMTreeManager;
&gt; +
&gt; +    InspectorFrontendHost.loaded();

This will need to mimic the code in Main.js. Either we should share it or at the very least add a comment to keep it in sync.

&gt; Source/WebInspectorUI/UserInterface/URLUtilities.js:177
&gt; +WebInspector.displayNameForURL = function(url, urlComponents)

It is tempting to remove the namespace here too to match the other functions now.

&gt; Source/WebInspectorUI/UserInterface/URLUtilities.js:192
&gt; +WebInspector.displayNameForHost = function(host)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943173</commentid>
    <comment_count>6</comment_count>
      <attachid>215074</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-10-24 09:37:48 -0700</bug_when>
    <thetext>Created attachment 215074
Patch V3

I&apos;ve added a comment, but I didn&apos;t remove the namespace. I think we should namespace the other globals, otherwise it will just pollute the global window. I&apos;m not changing that part of this patch as I might introduce other unrelated issues if I don&apos;t find all the usages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943189</commentid>
    <comment_count>7</comment_count>
      <attachid>215074</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-24 10:06:41 -0700</bug_when>
    <thetext>Comment on attachment 215074
Patch V3

Clearing flags on attachment: 215074

Committed r157938: &lt;http://trac.webkit.org/changeset/157938&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943190</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-24 10:06:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215002</attachid>
            <date>2013-10-23 15:27:45 -0700</date>
            <delta_ts>2013-10-23 16:22:02 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug123223.patch</filename>
            <type>text/plain</type>
            <size>24350</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YjYxYTExLi43OWQ1NzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMTAt
MjMgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IEFkZCBhIHdheSB0byB0ZXN0IHRoZSBNYW5hZ2VyIGFuZCBtb2RlbCBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMy
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCB0aGUgZmlyc3QgbmV3IFdlYkluc3BlY3RvciBsYXlvdXQgdGVzdCBmaWxlLiBUaGUgdGVzdCBp
cyB1c2luZyBJbnNwZWN0b3JUZXN0LmltcG9ydEluc3BlY3RvclNjcmlwdHMKKyAgICAgICAgdG8g
Ym9vdHN0cmFwIHNvbWUgb2YgdGhlIG1hbmFnZXJzL29ic2VydmVycy9tb2RlbHMgZnJvbSB0aGUg
bmV3IFdlYkluc3BlY3Rvci4KKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0LmpzOgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5p
bXBvcnRTY3JpcHQpOgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5pbXBvcnRJbnNwZWN0b3JTY3Jp
cHRzKToKKyAgICAgICAgKiBpbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvbWFpbi1mcmFtZS1yZXNv
dXJjZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9t
b2RlbC9tYWluLWZyYW1lLXJlc291cmNlLmh0bWw6IEFkZGVkLgorCiAyMDEzLTEwLTIxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgR3JhbW1hciBt
YXJrZXJzIGFyZSBub3QgdXBkYXRlZCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIDF4IGFuZCAyeApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVz
b3VyY2VzL0luc3BlY3RvclRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci1wcm90b2NvbC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qcwppbmRleCBlMGI4MmE1Li45OTgy
OWUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90b2Nv
bC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qcwpAQCAtMTA2LDkg
KzEwNiw1NSBAQCBJbnNwZWN0b3JUZXN0LmltcG9ydFNjcmlwdCA9IGZ1bmN0aW9uKHNjcmlwdE5h
bWUpCiAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgIHhoci5vcGVuKCJH
RVQiLCBzY3JpcHROYW1lLCBmYWxzZSk7CiAgICAgeGhyLnNlbmQobnVsbCk7Ci0gICAgd2luZG93
LmV2YWwoeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgaWYgKHhoci5zdGF0dXMgIT09IDApCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY3JpcHQgVVJMOiAiICsgc2NyaXB0TmFtZSk7
CisgICAgdmFyIHNjcmlwdCA9ICJ0cnkgeyAiICsgeGhyLnJlc3BvbnNlVGV4dCArICJ9IGNhdGNo
IChlKSB7IGFsZXJ0KCIgKyBKU09OLnN0cmluZ2lmeSgiRXJyb3IgaW46ICIgKyBzY3JpcHROYW1l
KSArICIpOyB0aHJvdyBlOyB9IjsKKyAgICB3aW5kb3cuZXZhbChzY3JpcHQpOwogfQogCitJbnNw
ZWN0b3JUZXN0LmltcG9ydEluc3BlY3RvclNjcmlwdHMgPSBmdW5jdGlvbigpCit7CisgICAgdmFy
IGluc3BlY3RvclNjcmlwdHMgPSBbCisgICAgICAgICJVdGlsaXRpZXMiLAorICAgICAgICAiV2Vi
SW5zcGVjdG9yIiwKKyAgICAgICAgIk9iamVjdCIsCisgICAgICAgICJJbnNwZWN0b3JCYWNrZW5k
IiwKKyAgICAgICAgIkluc3BlY3RvckZyb250ZW5kQVBJIiwKKyAgICAgICAgIkluc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIiLAorICAgICAgICAiSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzIiwKKyAg
ICAgICAgIlVSTFV0aWxpdGllcyIsCisgICAgICAgICJNZXNzYWdlRGlzcGF0Y2hlciIsCisgICAg
ICAgICJTZXR0aW5nIiwKKyAgICAgICAgIlBhZ2VPYnNlcnZlciIsCisgICAgICAgICJET01PYnNl
cnZlciIsCisgICAgICAgICJGcmFtZVJlc291cmNlTWFuYWdlciIsCisgICAgICAgICJSdW50aW1l
TWFuYWdlciIsCisgICAgICAgICJGcmFtZSIsCisgICAgICAgICJSZXZpc2lvbiIsCisgICAgICAg
ICJTb3VyY2VDb2RlUmV2aXNpb24iLAorICAgICAgICAiU291cmNlQ29kZSIsCisgICAgICAgICJS
ZXNvdXJjZSIsCisgICAgICAgICJSZXNvdXJjZUNvbGxlY3Rpb24iLAorICAgICAgICAiRE9NVHJl
ZU1hbmFnZXIiLAorICAgICAgICAiRE9NTm9kZSIsCisgICAgICAgICJDb250ZW50RmxvdyIsCisg
ICAgICAgICJET01UcmVlIiwKKyAgICAgICAgIkV4ZWN1dGlvbkNvbnRleHQiLAorICAgICAgICAi
RXhlY3V0aW9uQ29udGV4dExpc3QiCisgICAgXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlu
c3BlY3RvclNjcmlwdHMubGVuZ3RoOyArK2kpCisgICAgICAgIEluc3BlY3RvclRlc3QuaW1wb3J0
U2NyaXB0KCIuLi8uLi8uLi8uLi8uLi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS8iICsgaW5zcGVjdG9yU2NyaXB0c1tpXSArICIuanMiKTsKKworICAgIEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJQYWdlRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLlBhZ2VPYnNlcnZlcik7
CisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRPTURpc3BhdGNoZXIobmV3IFdlYkluc3Bl
Y3Rvci5ET01PYnNlcnZlcik7CisKKyAgICBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFn
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VNYW5hZ2VyOworICAgIFdlYkluc3Bl
Y3Rvci5kb21UcmVlTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NVHJlZU1hbmFnZXI7CisK
KyAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9hZGVkKCk7Cit9CisKKwogd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBmdW5jdGlvbihldmVudCkgewogICAgIHRyeSB7CiAgICAg
ICAgIGV2YWwoZXZlbnQuZGF0YSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3It
cHJvdG9jb2wvbW9kZWwvbWFpbi1mcmFtZS1yZXNvdXJjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvbWFpbi1mcmFtZS1yZXNvdXJjZS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExMzRiYwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9tYWluLWZy
YW1lLXJlc291cmNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQgQEAKK1Rlc3RpbmcgdGhhdCB0
aGUgaW5zcGVjdG9yIHNjcmlwdHMgYXJlIGxvYWRlZCBhbmQgdGhlIG1haW4gZnJhbWUgVVJMIGNh
biBiZSByZWNlaXZlZC4KKworTWFpbiBmcmFtZTogbWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9tYWluLWZy
YW1lLXJlc291cmNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwv
bWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmZjMTEzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJv
dG9jb2wvbW9kZWwvbWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwh
ZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9w
cm90b2NvbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICBJbnNwZWN0b3JUZXN0LmltcG9ydEluc3BlY3RvclNjcmlwdHMoKTsKKworICAgIFdlYklu
c3BlY3Rvci5mcmFtZVJlc291cmNlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5GcmFtZVJlc291cmNlTWFuYWdlci5FdmVudC5NYWluRnJhbWVEaWRDaGFuZ2UsIGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgIHZhciB1cmwgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1h
bmFnZXIubWFpbkZyYW1lLnVybDsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk1haW4gZnJh
bWU6ICIgKyB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZigiLyIpICsgMSkpOworICAgICAg
ICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgIH0pOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPHA+VGVzdGluZyB0aGF0IHRo
ZSBpbnNwZWN0b3Igc2NyaXB0cyBhcmUgbG9hZGVkIGFuZCB0aGUgbWFpbiBmcmFtZSBVUkwgY2Fu
IGJlIHJlY2VpdmVkLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
CmluZGV4IGJkNGRiYTguLjdmMDA5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4IEBACisyMDEzLTEwLTIzICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2Jl
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSB3YXkgdG8gdGVzdCB0aGUgTWFu
YWdlciBhbmQgbW9kZWwgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzMjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZWQgc29tZSBnbG9iYWwgZnVuY3Rpb25zIG91dCBvZiBNYWluLmpz
LCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgaW4gdGhlIAorICAgICAgICBsYXlvdXQgdGVzdHMg
d2l0aG91dCBpbmNsdWRpbmcgTWFpbi5qcy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFp
bi5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01lc3NhZ2VEaXNwYXRjaGVyLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNwYXRjaE5leHRRdWV1ZWRNZXNzYWdlRnJvbUJh
Y2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BhdGNoTWVzc2FnZUZyb21CYWNrZW5k
KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1VSTFV0aWxpdGllcy5qczogQWRkZWQuCisgICAg
ICAgIChyZW1vdmVVUkxGcmFnbWVudCk6CisgICAgICAgIChyZWxhdGl2ZVBhdGgpOgorICAgICAg
ICAocGFyc2VVUkwpOgorICAgICAgICAoYWJzb2x1dGVVUkwpOgorICAgICAgICAocGFyc2VMb2Nh
dGlvblF1ZXJ5UGFyYW1ldGVycyk6CisgICAgICAgIChwYXJzZVF1ZXJ5U3RyaW5nKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuZGlzcGxheU5hbWVGb3JIb3N0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0aWxpdGll
cy5qczoKKwogMjAxMy0xMC0yMSAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0NTUyBSZWdpb25zXSBGbG93cyBhcmUgbm90
IGxvYWRpbmcgaWYgeW91IHJlZnJlc2ggdGhlIHBhZ2Ugc2V2ZXJhbCB0aW1lcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uanMKaW5kZXggMjc3ODZhOC4uMTUyZjYz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmpzCkBAIC0z
MTEsMzEgKzMxMSw2IEBAIFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQog
ICAgICAgICB0aGlzLnNob3dTcGxpdENvbnNvbGUoKTsKIH0KIAotV2ViSW5zcGVjdG9yLm1lc3Nh
Z2VzVG9EaXNwYXRjaCA9IFtdOwotCi1XZWJJbnNwZWN0b3IuZGlzcGF0Y2hOZXh0UXVldWVkTWVz
c2FnZUZyb21CYWNrZW5kID0gZnVuY3Rpb24oKQotewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5tZXNzYWdlc1RvRGlzcGF0Y2gubGVuZ3RoOyArK2kpCi0gICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuZGlzcGF0Y2godGhpcy5tZXNzYWdlc1RvRGlzcGF0Y2hbaV0pOwotCi0gICAgdGhpcy5t
ZXNzYWdlc1RvRGlzcGF0Y2ggPSBbXTsKLQotICAgIHRoaXMuX2Rpc3BhdGNoVGltZW91dCA9IG51
bGw7Ci19Ci0KLVdlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0
aW9uKG1lc3NhZ2UpCi17Ci0gICAgLy8gRW5mb3JjZSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb24g
YmV0d2VlbiB0aGUgYmFja2VuZCBhbmQgdGhlIGZyb250ZW5kIGJ5IHF1ZXVlaW5nIG1lc3NhZ2Vz
LgotICAgIC8vIFRoZSBtZXNzYWdlcyBhcmUgZGVxdWV1ZWQgb24gYSB6ZXJvIGRlbGF5IHRpbWVv
dXQuCi0KLSAgICB0aGlzLm1lc3NhZ2VzVG9EaXNwYXRjaC5wdXNoKG1lc3NhZ2UpOwotCi0gICAg
aWYgKHRoaXMuX2Rpc3BhdGNoVGltZW91dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGhpcy5f
ZGlzcGF0Y2hUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLmRpc3BhdGNoTmV4dFF1ZXVlZE1lc3Nh
Z2VGcm9tQmFja2VuZC5iaW5kKHRoaXMpLCAwKTsKLX0KLQogV2ViSW5zcGVjdG9yLnNpZGViYXJQ
YW5lbEZvckN1cnJlbnRDb250ZW50VmlldyA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgY3VycmVu
dENvbnRlbnRWaWV3ID0gdGhpcy5jb250ZW50QnJvd3Nlci5jdXJyZW50Q29udGVudFZpZXc7CkBA
IC0zNzgsMjcgKzM1Myw2IEBAIFdlYkluc3BlY3Rvci5jb250ZW50QnJvd3NlclRyZWVFbGVtZW50
Rm9yUmVwcmVzZW50ZWRPYmplY3QgPSBmdW5jdGlvbihjb250ZW50QnJvCiAgICAgcmV0dXJuIG51
bGw7CiB9CiAKLVdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCA9IGZ1bmN0aW9uKHVybCwg
dXJsQ29tcG9uZW50cykKLXsKLSAgICBpZiAoIXVybENvbXBvbmVudHMpCi0gICAgICAgIHVybENv
bXBvbmVudHMgPSBwYXJzZVVSTCh1cmwpOwotCi0gICAgdmFyIGRpc3BsYXlOYW1lOwotICAgIHRy
eSB7Ci0gICAgICAgIGRpc3BsYXlOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybENvbXBvbmVu
dHMubGFzdFBhdGhDb21wb25lbnQgfHwgIiIpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAg
ZGlzcGxheU5hbWUgPSB1cmxDb21wb25lbnRzLmxhc3RQYXRoQ29tcG9uZW50OwotICAgIH0KLQot
ICAgIHJldHVybiBkaXNwbGF5TmFtZSB8fCBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JIb3N0
KHVybENvbXBvbmVudHMuaG9zdCkgfHwgdXJsOwotfQotCi1XZWJJbnNwZWN0b3IuZGlzcGxheU5h
bWVGb3JIb3N0ID0gZnVuY3Rpb24oaG9zdCkKLXsKLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2Js
ZW0vMTEyMzc0MTM+OiBUaGlzIHNob3VsZCBkZWNvZGUgcHVueWNvZGUgaG9zdG5hbWVzLgotICAg
IHJldHVybiBob3N0OwotfQotCiBXZWJJbnNwZWN0b3IudXBkYXRlV2luZG93VGl0bGUgPSBmdW5j
dGlvbigpCiB7CiAgICAgdmFyIG1haW5GcmFtZSA9IHRoaXMuZnJhbWVSZXNvdXJjZU1hbmFnZXIu
bWFpbkZyYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTWVzc2FnZURpc3BhdGNoZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9NZXNzYWdlRGlzcGF0Y2hlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mNDk3NGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTWVzc2FnZURpc3BhdGNoZXIuanMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1dlYkluc3BlY3Rvci5tZXNzYWdlc1RvRGlzcGF0Y2ggPSBbXTsKKworV2ViSW5zcGVj
dG9yLmRpc3BhdGNoTmV4dFF1ZXVlZE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9uKCkKK3sK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWVzc2FnZXNUb0Rpc3BhdGNoLmxlbmd0aDsg
KytpKQorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoKHRoaXMubWVzc2FnZXNUb0Rp
c3BhdGNoW2ldKTsKKworICAgIHRoaXMubWVzc2FnZXNUb0Rpc3BhdGNoID0gW107CisKKyAgICB0
aGlzLl9kaXNwYXRjaFRpbWVvdXQgPSBudWxsOworfQorCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2hN
ZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbihtZXNzYWdlKQoreworICAgIC8vIEVuZm9yY2Ug
YXN5bmNocm9ub3VzIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGJhY2tlbmQgYW5kIHRoZSBmcm9u
dGVuZCBieSBxdWV1ZWluZyBtZXNzYWdlcy4KKyAgICAvLyBUaGUgbWVzc2FnZXMgYXJlIGRlcXVl
dWVkIG9uIGEgemVybyBkZWxheSB0aW1lb3V0LgorCisgICAgdGhpcy5tZXNzYWdlc1RvRGlzcGF0
Y2gucHVzaChtZXNzYWdlKTsKKworICAgIGlmICh0aGlzLl9kaXNwYXRjaFRpbWVvdXQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHRoaXMuX2Rpc3BhdGNoVGltZW91dCA9IHNldFRpbWVvdXQodGhp
cy5kaXNwYXRjaE5leHRRdWV1ZWRNZXNzYWdlRnJvbUJhY2tlbmQuYmluZCh0aGlzKSwgMCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VUkxVdGls
aXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VUkxVdGlsaXRp
ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1YWNiOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1VSTFV0aWxp
dGllcy5qcwpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9uIHJlbW92ZVVS
TEZyYWdtZW50KHVybCkKK3sKKyAgICB2YXIgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoIiMiKTsK
KyAgICBpZiAoaGFzaEluZGV4ID49IDApCisgICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAs
IGhhc2hJbmRleCk7CisgICAgcmV0dXJuIHVybDsKK30KKworZnVuY3Rpb24gcmVsYXRpdmVQYXRo
KHBhdGgsIGJhc2VQYXRoKQoreworICAgIGNvbnNvbGUuYXNzZXJ0KHBhdGguY2hhckF0KDApID09
PSAiLyIpOworICAgIGNvbnNvbGUuYXNzZXJ0KGJhc2VQYXRoLmNoYXJBdCgwKSA9PT0gIi8iKTsK
KyAgICAKKyAgICB2YXIgcGF0aENvbXBvbmVudHMgPSBwYXRoLnNwbGl0KCIvIik7CisgICAgdmFy
IGJhc2VDb21wb25lbnRzID0gYmFzZVBhdGgucmVwbGFjZSgvXC8kLywgIiIpLnNwbGl0KCIvIik7
CisgICAgdmFyIGZpbmFsQ29tcG9uZW50cyA9IFtdOworCisgICAgdmFyIGluZGV4ID0gMTsKKyAg
ICBmb3IgKDsgaW5kZXggPCBwYXRoQ29tcG9uZW50cy5sZW5ndGggJiYgaW5kZXggPCBiYXNlQ29t
cG9uZW50cy5sZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKHBhdGhDb21wb25lbnRzW2lu
ZGV4XSAhPT0gYmFzZUNvbXBvbmVudHNbaW5kZXhdKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgYmFzZUNvbXBvbmVudHMubGVuZ3RoOyAr
K2kpCisgICAgICAgIGZpbmFsQ29tcG9uZW50cy5wdXNoKCIuLiIpOworCisgICAgZm9yICh2YXIg
aSA9IGluZGV4OyBpIDwgcGF0aENvbXBvbmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGZpbmFs
Q29tcG9uZW50cy5wdXNoKHBhdGhDb21wb25lbnRzW2ldKTsKKworICAgIHJldHVybiBmaW5hbENv
bXBvbmVudHMuam9pbigiLyIpOworfQorCitmdW5jdGlvbiBwYXJzZVVSTCh1cmwpCit7CisgICAg
dXJsID0gdXJsID8gdXJsLnRyaW0oKSA6ICIiOworCisgICAgdmFyIG1hdGNoID0gdXJsLm1hdGNo
KC9eKFteOl0rKTpcL1wvKFteXC86XSopKD86OihbXGRdKykpPyg/OihcL1teI10qKSg/OiMoLiop
KT8pPyQvaSk7CisgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgcmV0dXJuIHtzY2hlbWU6IG51bGws
IGhvc3Q6IG51bGwsIHBvcnQ6IG51bGwsIHBhdGg6IG51bGwsIHF1ZXJ5U3RyaW5nOiBudWxsLCBm
cmFnbWVudDogbnVsbCwgbGFzdFBhdGhDb21wb25lbnQ6IG51bGx9OworCisgICAgdmFyIHNjaGVt
ZSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7CisgICAgdmFyIGhvc3QgPSBtYXRjaFsyXS50b0xv
d2VyQ2FzZSgpOworICAgIHZhciBwb3J0ID0gTnVtYmVyKG1hdGNoWzNdKSB8fCBudWxsOworICAg
IHZhciB3aG9sZVBhdGggPSBtYXRjaFs0XSB8fCBudWxsOworICAgIHZhciBmcmFnbWVudCA9IG1h
dGNoWzVdIHx8IG51bGw7CisgICAgdmFyIHBhdGggPSB3aG9sZVBhdGg7CisgICAgdmFyIHF1ZXJ5
U3RyaW5nID0gbnVsbDsKKworICAgIC8vIFNwbGl0IHRoZSBwYXRoIGFuZCB0aGUgcXVlcnkgc3Ry
aW5nLgorICAgIGlmICh3aG9sZVBhdGgpIHsKKyAgICAgICAgdmFyIGluZGV4T2ZRdWVyeSA9IHdo
b2xlUGF0aC5pbmRleE9mKCI/Iik7CisgICAgICAgIGlmIChpbmRleE9mUXVlcnkgIT09IC0xKSB7
CisgICAgICAgICAgICBwYXRoID0gd2hvbGVQYXRoLnN1YnN0cmluZygwLCBpbmRleE9mUXVlcnkp
OworICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSB3aG9sZVBhdGguc3Vic3RyaW5nKGluZGV4T2ZR
dWVyeSArIDEpOworICAgICAgICB9CisgICAgICAgIHBhdGggPSByZXNvbHZlRG90c0luUGF0aChw
YXRoKTsKKyAgICB9CisKKyAgICAvLyBGaW5kIGxhc3QgcGF0aCBjb21wb25lbnQuCisgICAgdmFy
IGxhc3RQYXRoQ29tcG9uZW50ID0gbnVsbDsKKyAgICBpZiAocGF0aCAmJiBwYXRoICE9PSAiLyIp
IHsKKyAgICAgICAgLy8gU2tpcCB0aGUgdHJhaWxpbmcgc2xhc2ggaWYgdGhlcmUgaXMgb25lLgor
ICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAiLyIgPyAx
IDogMDsKKyAgICAgICAgdmFyIGxhc3RTbGFzaEluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZigiLyIs
IHBhdGgubGVuZ3RoIC0gMSAtIGVuZE9mZnNldCk7CisgICAgICAgIGlmIChsYXN0U2xhc2hJbmRl
eCAhPT0gLTEpCisgICAgICAgICAgICBsYXN0UGF0aENvbXBvbmVudCA9IHBhdGguc3Vic3RyaW5n
KGxhc3RTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGggLSBlbmRPZmZzZXQpOworICAgIH0KKwor
ICAgIHJldHVybiB7c2NoZW1lOiBzY2hlbWUsIGhvc3Q6IGhvc3QsIHBvcnQ6IHBvcnQsIHBhdGg6
IHBhdGgsIHF1ZXJ5U3RyaW5nOiBxdWVyeVN0cmluZywgZnJhZ21lbnQ6IGZyYWdtZW50LCBsYXN0
UGF0aENvbXBvbmVudDogbGFzdFBhdGhDb21wb25lbnR9OworfQorCitmdW5jdGlvbiBhYnNvbHV0
ZVVSTChwYXJ0aWFsVVJMLCBiYXNlVVJMKQoreworICAgIHBhcnRpYWxVUkwgPSBwYXJ0aWFsVVJM
ID8gcGFydGlhbFVSTC50cmltKCkgOiAiIjsKKworICAgIC8vIFJldHVybiBkYXRhIGFuZCBqYXZh
c2NyaXB0IFVSTHMgYXMtaXMuCisgICAgaWYgKHBhcnRpYWxVUkwuc3RhcnRzV2l0aCgiZGF0YToi
KSB8fCBwYXJ0aWFsVVJMLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IikgfHwgcGFydGlhbFVSTC5z
dGFydHNXaXRoKCJtYWlsdG86IikpCisgICAgICAgIHJldHVybiBwYXJ0aWFsVVJMOworCisgICAg
Ly8gSWYgdGhlIFVSTCBoYXMgYSBzY2hlbWUgaXQgaXMgYWxyZWFkeSBhIGZ1bGwgVVJMLCBzbyBy
ZXR1cm4gaXQuCisgICAgaWYgKHBhcnNlVVJMKHBhcnRpYWxVUkwpLnNjaGVtZSkKKyAgICAgICAg
cmV0dXJuIHBhcnRpYWxVUkw7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBwYXJ0aWFsIFVSTCwg
anVzdCByZXR1cm4gdGhlIGJhc2UgVVJMLgorICAgIGlmICghcGFydGlhbFVSTCkKKyAgICAgICAg
cmV0dXJuIGJhc2VVUkwgfHwgbnVsbDsKKworICAgIHZhciBiYXNlVVJMQ29tcG9uZW50cyA9IHBh
cnNlVVJMKGJhc2VVUkwpOworCisgICAgLy8gVGhlIGJhc2UgVVJMIG5lZWRzIHRvIGJlIGFuIGFi
c29sdXRlIFVSTC4gUmV0dXJuIG51bGwgaWYgaXQgaXNuJ3QuCisgICAgaWYgKCFiYXNlVVJMQ29t
cG9uZW50cy5zY2hlbWUpCisgICAgICAgIHJldHVybiBudWxsOworCisgICAgLy8gQSBVUkwgdGhh
dCBzdGFydHMgd2l0aCAiLy8iIGlzIGEgZnVsbCBVUkwgd2l0aG91dCB0aGUgc2NoZW1lLiBVc2Ug
dGhlIGJhc2UgVVJMIHNjaGVtZS4KKyAgICBpZiAocGFydGlhbFVSTFswXSA9PT0gIi8iICYmIHBh
cnRpYWxVUkxbMV0gPT09ICIvIikKKyAgICAgICAgcmV0dXJuIGJhc2VVUkxDb21wb25lbnRzLnNj
aGVtZSArICI6IiArIHBhcnRpYWxVUkw7CisKKyAgICAvLyBUaGUgcGF0aCBjYW4gYmUgbnVsbCBm
b3IgVVJMcyB0aGF0IGhhdmUganVzdCBhIHNjaGVtZSBhbmQgaG9zdCAobGlrZSAiaHR0cDovL2Fw
cGxlLmNvbSIpLiBTbyBtYWtlIHRoZSBwYXRoIGJlICIvIi4KKyAgICBpZiAoIWJhc2VVUkxDb21w
b25lbnRzLnBhdGgpCisgICAgICAgIGJhc2VVUkxDb21wb25lbnRzLnBhdGggPSAiLyI7CisKKyAg
ICAvLyBHZW5lcmF0ZSB0aGUgYmFzZSBVUkwgcHJlZml4IHRoYXQgaXMgdXNlZCBpbiB0aGUgcmVz
dCBvZiB0aGUgY2FzZXMuCisgICAgdmFyIGJhc2VVUkxQcmVmaXggPSBiYXNlVVJMQ29tcG9uZW50
cy5zY2hlbWUgKyAiOi8vIiArIGJhc2VVUkxDb21wb25lbnRzLmhvc3QgKyAoYmFzZVVSTENvbXBv
bmVudHMucG9ydCA/ICgiOiIgKyBiYXNlVVJMQ29tcG9uZW50cy5wb3J0KSA6ICIiKTsKKworICAg
IC8vIEEgVVJMIHRoYXQgc3RhcnRzIHdpdGggIj8iIGlzIGp1c3QgYSBxdWVyeSBzdHJpbmcgdGhh
dCBnZXRzIGFwcGxpZWQgdG8gdGhlIGJhc2UgVVJMIChyZXBsYWNpbmcgdGhlIGJhc2UgVVJMIHF1
ZXJ5IHN0cmluZyBhbmQgZnJhZ21lbnQpLgorICAgIGlmIChwYXJ0aWFsVVJMWzBdID09PSAiPyIp
CisgICAgICAgIHJldHVybiBiYXNlVVJMUHJlZml4ICsgYmFzZVVSTENvbXBvbmVudHMucGF0aCAr
IHBhcnRpYWxVUkw7CisKKyAgICAvLyBBIFVSTCB0aGF0IHN0YXJ0cyB3aXRoICIvIiBpcyBhbiBh
YnNvbHV0ZSBwYXRoIHRoYXQgZ2V0cyBhcHBsaWVkIHRvIHRoZSBiYXNlIFVSTCAocmVwbGFjaW5n
IHRoZSBiYXNlIFVSTCBwYXRoLCBxdWVyeSBzdHJpbmcgYW5kIGZyYWdtZW50KS4KKyAgICBpZiAo
cGFydGlhbFVSTFswXSA9PT0gIi8iKQorICAgICAgICByZXR1cm4gYmFzZVVSTFByZWZpeCArIHJl
c29sdmVEb3RzSW5QYXRoKHBhcnRpYWxVUkwpOworCisgICAgLy8gR2VuZXJhdGUgdGhlIGJhc2Ug
cGF0aCB0aGF0IGlzIHVzZWQgaW4gdGhlIGZpbmFsIGNhc2UgYnkgcmVtb3ZpbmcgZXZlcnl0aGlu
ZyBhZnRlciB0aGUgbGFzdCAiLyIgZnJvbSB0aGUgYmFzZSBVUkwncyBwYXRoLgorICAgIHZhciBi
YXNlUGF0aCA9IGJhc2VVUkxDb21wb25lbnRzLnBhdGguc3Vic3RyaW5nKDAsIGJhc2VVUkxDb21w
b25lbnRzLnBhdGgubGFzdEluZGV4T2YoIi8iKSkgKyAiLyI7CisgICAgcmV0dXJuIGJhc2VVUkxQ
cmVmaXggKyByZXNvbHZlRG90c0luUGF0aChiYXNlUGF0aCArIHBhcnRpYWxVUkwpOworfQorCitm
dW5jdGlvbiBwYXJzZUxvY2F0aW9uUXVlcnlQYXJhbWV0ZXJzKGFycmF5UmVzdWx0KQoreworICAg
IC8vIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYWx3YXlzIHRoZSAiPyIuCisgICAgcmV0dXJuIHBh
cnNlUXVlcnlTdHJpbmcod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSksIGFycmF5
UmVzdWx0KTsKK30KKworZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZywgYXJy
YXlSZXN1bHQpCit7CisgICAgaWYgKCFxdWVyeVN0cmluZykKKyAgICAgICAgcmV0dXJuIGFycmF5
UmVzdWx0ID8gW10gOiB7fTsKKworICAgIGZ1bmN0aW9uIGRlY29kZShzdHJpbmcpCisgICAgewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gUmVwbGFjZSAiKyIgd2l0aCAiICIgdGhlbiBk
ZWNvZGUgcHJlY2VudCBlbmNvZGVkIHZhbHVlcy4KKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVV
UklDb21wb25lbnQoc3RyaW5nLnJlcGxhY2UoL1wrL2csICIgIikpOworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgfQorCisg
ICAgdmFyIHBhcmFtZXRlcnMgPSBhcnJheVJlc3VsdCA/IFtdIDoge307CisgICAgdmFyIHBhcmFt
ZXRlclN0cmluZ3MgPSBxdWVyeVN0cmluZy5zcGxpdCgiJiIpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcGFyYW1ldGVyU3RyaW5ncy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcGFpciA9
IHBhcmFtZXRlclN0cmluZ3NbaV0uc3BsaXQoIj0iKS5tYXAoZGVjb2RlKTsKKyAgICAgICAgaWYg
KGFycmF5UmVzdWx0KQorICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHtuYW1lOiBwYWlyWzBd
LCB2YWx1ZTogcGFpclsxXX0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbWV0ZXJz
W3BhaXJbMF1dID0gcGFpclsxXTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30K
KworV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMID0gZnVuY3Rpb24odXJsLCB1cmxDb21w
b25lbnRzKQoreworICAgIGlmICghdXJsQ29tcG9uZW50cykKKyAgICAgICAgdXJsQ29tcG9uZW50
cyA9IHBhcnNlVVJMKHVybCk7CisKKyAgICB2YXIgZGlzcGxheU5hbWU7CisgICAgdHJ5IHsKKyAg
ICAgICAgZGlzcGxheU5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJsQ29tcG9uZW50cy5sYXN0
UGF0aENvbXBvbmVudCB8fCAiIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBkaXNwbGF5
TmFtZSA9IHVybENvbXBvbmVudHMubGFzdFBhdGhDb21wb25lbnQ7CisgICAgfQorCisgICAgcmV0
dXJuIGRpc3BsYXlOYW1lIHx8IFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhvc3QodXJsQ29t
cG9uZW50cy5ob3N0KSB8fCB1cmw7Cit9CisKK1dlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhv
c3QgPSBmdW5jdGlvbihob3N0KQoreworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMTIz
NzQxMz46IFRoaXMgc2hvdWxkIGRlY29kZSBwdW55Y29kZSBob3N0bmFtZXMuCisgICAgcmV0dXJu
IGhvc3Q7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9VdGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VdGls
aXRpZXMuanMKaW5kZXggZDFiNjUwMi4uOGFlYWFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qcwpAQCAtOTgxLDM4ICs5ODEsNiBAQCBm
dW5jdGlvbiBpc0VudGVyS2V5KGV2ZW50KQogICAgIHJldHVybiBldmVudC5rZXlDb2RlICE9PSAy
MjkgJiYgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkVudGVyIjsKIH0KIAotZnVuY3Rpb24gcmVt
b3ZlVVJMRnJhZ21lbnQodXJsKQotewotICAgIHZhciBoYXNoSW5kZXggPSB1cmwuaW5kZXhPZigi
IyIpOwotICAgIGlmIChoYXNoSW5kZXggPj0gMCkKLSAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJp
bmcoMCwgaGFzaEluZGV4KTsKLSAgICByZXR1cm4gdXJsOwotfQotCi1mdW5jdGlvbiByZWxhdGl2
ZVBhdGgocGF0aCwgYmFzZVBhdGgpCi17Ci0gICAgY29uc29sZS5hc3NlcnQocGF0aC5jaGFyQXQo
MCkgPT09ICIvIik7Ci0gICAgY29uc29sZS5hc3NlcnQoYmFzZVBhdGguY2hhckF0KDApID09PSAi
LyIpOwotICAgIAotICAgIHZhciBwYXRoQ29tcG9uZW50cyA9IHBhdGguc3BsaXQoIi8iKTsKLSAg
ICB2YXIgYmFzZUNvbXBvbmVudHMgPSBiYXNlUGF0aC5yZXBsYWNlKC9cLyQvLCAiIikuc3BsaXQo
Ii8iKTsKLSAgICB2YXIgZmluYWxDb21wb25lbnRzID0gW107Ci0KLSAgICB2YXIgaW5kZXggPSAx
OwotICAgIGZvciAoOyBpbmRleCA8IHBhdGhDb21wb25lbnRzLmxlbmd0aCAmJiBpbmRleCA8IGJh
c2VDb21wb25lbnRzLmxlbmd0aDsgKytpbmRleCkgewotICAgICAgICBpZiAocGF0aENvbXBvbmVu
dHNbaW5kZXhdICE9PSBiYXNlQ29tcG9uZW50c1tpbmRleF0pCi0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCBiYXNlQ29tcG9uZW50cy5sZW5n
dGg7ICsraSkKLSAgICAgICAgZmluYWxDb21wb25lbnRzLnB1c2goIi4uIik7Ci0KLSAgICBmb3Ig
KHZhciBpID0gaW5kZXg7IGkgPCBwYXRoQ29tcG9uZW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAg
ZmluYWxDb21wb25lbnRzLnB1c2gocGF0aENvbXBvbmVudHNbaV0pOwotCi0gICAgcmV0dXJuIGZp
bmFsQ29tcG9uZW50cy5qb2luKCIvIik7Ci19Ci0KIGZ1bmN0aW9uIHJlc29sdmVEb3RzSW5QYXRo
KHBhdGgpCiB7CiAgICAgaWYgKCFwYXRoKQpAQCAtMTA0Nyw5MSArMTAxNSw2IEBAIGZ1bmN0aW9u
IHJlc29sdmVEb3RzSW5QYXRoKHBhdGgpCiAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCIvIik7CiB9
CiAKLWZ1bmN0aW9uIHBhcnNlVVJMKHVybCkKLXsKLSAgICB1cmwgPSB1cmwgPyB1cmwudHJpbSgp
IDogIiI7Ci0KLSAgICB2YXIgbWF0Y2ggPSB1cmwubWF0Y2goL14oW146XSspOlwvXC8oW15cLzpd
KikoPzo6KFtcZF0rKSk/KD86KFwvW14jXSopKD86IyguKikpPyk/JC9pKTsKLSAgICBpZiAoIW1h
dGNoKQotICAgICAgICByZXR1cm4ge3NjaGVtZTogbnVsbCwgaG9zdDogbnVsbCwgcG9ydDogbnVs
bCwgcGF0aDogbnVsbCwgcXVlcnlTdHJpbmc6IG51bGwsIGZyYWdtZW50OiBudWxsLCBsYXN0UGF0
aENvbXBvbmVudDogbnVsbH07Ci0KLSAgICB2YXIgc2NoZW1lID0gbWF0Y2hbMV0udG9Mb3dlckNh
c2UoKTsKLSAgICB2YXIgaG9zdCA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7Ci0gICAgdmFyIHBv
cnQgPSBOdW1iZXIobWF0Y2hbM10pIHx8IG51bGw7Ci0gICAgdmFyIHdob2xlUGF0aCA9IG1hdGNo
WzRdIHx8IG51bGw7Ci0gICAgdmFyIGZyYWdtZW50ID0gbWF0Y2hbNV0gfHwgbnVsbDsKLSAgICB2
YXIgcGF0aCA9IHdob2xlUGF0aDsKLSAgICB2YXIgcXVlcnlTdHJpbmcgPSBudWxsOwotCi0gICAg
Ly8gU3BsaXQgdGhlIHBhdGggYW5kIHRoZSBxdWVyeSBzdHJpbmcuCi0gICAgaWYgKHdob2xlUGF0
aCkgewotICAgICAgICB2YXIgaW5kZXhPZlF1ZXJ5ID0gd2hvbGVQYXRoLmluZGV4T2YoIj8iKTsK
LSAgICAgICAgaWYgKGluZGV4T2ZRdWVyeSAhPT0gLTEpIHsKLSAgICAgICAgICAgIHBhdGggPSB3
aG9sZVBhdGguc3Vic3RyaW5nKDAsIGluZGV4T2ZRdWVyeSk7Ci0gICAgICAgICAgICBxdWVyeVN0
cmluZyA9IHdob2xlUGF0aC5zdWJzdHJpbmcoaW5kZXhPZlF1ZXJ5ICsgMSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcGF0aCA9IHJlc29sdmVEb3RzSW5QYXRoKHBhdGgpOwotICAgIH0KLQotICAgIC8v
IEZpbmQgbGFzdCBwYXRoIGNvbXBvbmVudC4KLSAgICB2YXIgbGFzdFBhdGhDb21wb25lbnQgPSBu
dWxsOwotICAgIGlmIChwYXRoICYmIHBhdGggIT09ICIvIikgewotICAgICAgICAvLyBTa2lwIHRo
ZSB0cmFpbGluZyBzbGFzaCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICAgIHZhciBlbmRPZmZzZXQg
PSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICIvIiA/IDEgOiAwOwotICAgICAgICB2YXIgbGFz
dFNsYXNoSW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCIvIiwgcGF0aC5sZW5ndGggLSAxIC0gZW5k
T2Zmc2V0KTsKLSAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSAtMSkKLSAgICAgICAgICAg
IGxhc3RQYXRoQ29tcG9uZW50ID0gcGF0aC5zdWJzdHJpbmcobGFzdFNsYXNoSW5kZXggKyAxLCBw
YXRoLmxlbmd0aCAtIGVuZE9mZnNldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHtzY2hlbWU6IHNj
aGVtZSwgaG9zdDogaG9zdCwgcG9ydDogcG9ydCwgcGF0aDogcGF0aCwgcXVlcnlTdHJpbmc6IHF1
ZXJ5U3RyaW5nLCBmcmFnbWVudDogZnJhZ21lbnQsIGxhc3RQYXRoQ29tcG9uZW50OiBsYXN0UGF0
aENvbXBvbmVudH07Ci19Ci0KLWZ1bmN0aW9uIGFic29sdXRlVVJMKHBhcnRpYWxVUkwsIGJhc2VV
UkwpCi17Ci0gICAgcGFydGlhbFVSTCA9IHBhcnRpYWxVUkwgPyBwYXJ0aWFsVVJMLnRyaW0oKSA6
ICIiOwotCi0gICAgLy8gUmV0dXJuIGRhdGEgYW5kIGphdmFzY3JpcHQgVVJMcyBhcy1pcy4KLSAg
ICBpZiAocGFydGlhbFVSTC5zdGFydHNXaXRoKCJkYXRhOiIpIHx8IHBhcnRpYWxVUkwuc3RhcnRz
V2l0aCgiamF2YXNjcmlwdDoiKSB8fCBwYXJ0aWFsVVJMLnN0YXJ0c1dpdGgoIm1haWx0bzoiKSkK
LSAgICAgICAgcmV0dXJuIHBhcnRpYWxVUkw7Ci0KLSAgICAvLyBJZiB0aGUgVVJMIGhhcyBhIHNj
aGVtZSBpdCBpcyBhbHJlYWR5IGEgZnVsbCBVUkwsIHNvIHJldHVybiBpdC4KLSAgICBpZiAocGFy
c2VVUkwocGFydGlhbFVSTCkuc2NoZW1lKQotICAgICAgICByZXR1cm4gcGFydGlhbFVSTDsKLQot
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHBhcnRpYWwgVVJMLCBqdXN0IHJldHVybiB0aGUgYmFzZSBV
UkwuCi0gICAgaWYgKCFwYXJ0aWFsVVJMKQotICAgICAgICByZXR1cm4gYmFzZVVSTCB8fCBudWxs
OwotCi0gICAgdmFyIGJhc2VVUkxDb21wb25lbnRzID0gcGFyc2VVUkwoYmFzZVVSTCk7Ci0KLSAg
ICAvLyBUaGUgYmFzZSBVUkwgbmVlZHMgdG8gYmUgYW4gYWJzb2x1dGUgVVJMLiBSZXR1cm4gbnVs
bCBpZiBpdCBpc24ndC4KLSAgICBpZiAoIWJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSkKLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0KLSAgICAvLyBBIFVSTCB0aGF0IHN0YXJ0cyB3aXRoICIvLyIgaXMg
YSBmdWxsIFVSTCB3aXRob3V0IHRoZSBzY2hlbWUuIFVzZSB0aGUgYmFzZSBVUkwgc2NoZW1lLgot
ICAgIGlmIChwYXJ0aWFsVVJMWzBdID09PSAiLyIgJiYgcGFydGlhbFVSTFsxXSA9PT0gIi8iKQot
ICAgICAgICByZXR1cm4gYmFzZVVSTENvbXBvbmVudHMuc2NoZW1lICsgIjoiICsgcGFydGlhbFVS
TDsKLQotICAgIC8vIFRoZSBwYXRoIGNhbiBiZSBudWxsIGZvciBVUkxzIHRoYXQgaGF2ZSBqdXN0
IGEgc2NoZW1lIGFuZCBob3N0IChsaWtlICJodHRwOi8vYXBwbGUuY29tIikuIFNvIG1ha2UgdGhl
IHBhdGggYmUgIi8iLgotICAgIGlmICghYmFzZVVSTENvbXBvbmVudHMucGF0aCkKLSAgICAgICAg
YmFzZVVSTENvbXBvbmVudHMucGF0aCA9ICIvIjsKLQotICAgIC8vIEdlbmVyYXRlIHRoZSBiYXNl
IFVSTCBwcmVmaXggdGhhdCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjYXNlcy4KLSAgICB2
YXIgYmFzZVVSTFByZWZpeCA9IGJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSArICI6Ly8iICsgYmFz
ZVVSTENvbXBvbmVudHMuaG9zdCArIChiYXNlVVJMQ29tcG9uZW50cy5wb3J0ID8gKCI6IiArIGJh
c2VVUkxDb21wb25lbnRzLnBvcnQpIDogIiIpOwotCi0gICAgLy8gQSBVUkwgdGhhdCBzdGFydHMg
d2l0aCAiPyIgaXMganVzdCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGdldHMgYXBwbGllZCB0byB0aGUg
YmFzZSBVUkwgKHJlcGxhY2luZyB0aGUgYmFzZSBVUkwgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVu
dCkuCi0gICAgaWYgKHBhcnRpYWxVUkxbMF0gPT09ICI/IikKLSAgICAgICAgcmV0dXJuIGJhc2VV
UkxQcmVmaXggKyBiYXNlVVJMQ29tcG9uZW50cy5wYXRoICsgcGFydGlhbFVSTDsKLQotICAgIC8v
IEEgVVJMIHRoYXQgc3RhcnRzIHdpdGggIi8iIGlzIGFuIGFic29sdXRlIHBhdGggdGhhdCBnZXRz
IGFwcGxpZWQgdG8gdGhlIGJhc2UgVVJMIChyZXBsYWNpbmcgdGhlIGJhc2UgVVJMIHBhdGgsIHF1
ZXJ5IHN0cmluZyBhbmQgZnJhZ21lbnQpLgotICAgIGlmIChwYXJ0aWFsVVJMWzBdID09PSAiLyIp
Ci0gICAgICAgIHJldHVybiBiYXNlVVJMUHJlZml4ICsgcmVzb2x2ZURvdHNJblBhdGgocGFydGlh
bFVSTCk7Ci0KLSAgICAvLyBHZW5lcmF0ZSB0aGUgYmFzZSBwYXRoIHRoYXQgaXMgdXNlZCBpbiB0
aGUgZmluYWwgY2FzZSBieSByZW1vdmluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0ICIvIiBm
cm9tIHRoZSBiYXNlIFVSTCdzIHBhdGguCi0gICAgdmFyIGJhc2VQYXRoID0gYmFzZVVSTENvbXBv
bmVudHMucGF0aC5zdWJzdHJpbmcoMCwgYmFzZVVSTENvbXBvbmVudHMucGF0aC5sYXN0SW5kZXhP
ZigiLyIpKSArICIvIjsKLSAgICByZXR1cm4gYmFzZVVSTFByZWZpeCArIHJlc29sdmVEb3RzSW5Q
YXRoKGJhc2VQYXRoICsgcGFydGlhbFVSTCk7Ci19Ci0KIGZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUo
ZnVsbE1pbWVUeXBlKQogewogICAgIGlmICghZnVsbE1pbWVUeXBlKQpAQCAtMTE5MCwzNyArMTA3
MywzIEBAIGZ1bmN0aW9uIHNpbXBsZUdsb2JTdHJpbmdUb1JlZ0V4cChnbG9iU3RyaW5nLCByZWdF
eHBGbGFncykKIAogICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4U3RyaW5nLCByZWdFeHBGbGFn
cyk7CiB9Ci0KLWZ1bmN0aW9uIHBhcnNlTG9jYXRpb25RdWVyeVBhcmFtZXRlcnMoYXJyYXlSZXN1
bHQpCi17Ci0gICAgLy8gVGhlIGZpcnN0IGNoYXJhY3RlciBpcyBhbHdheXMgdGhlICI/Ii4KLSAg
ICByZXR1cm4gcGFyc2VRdWVyeVN0cmluZyh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmlu
ZygxKSwgYXJyYXlSZXN1bHQpOwotfQotCi1mdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5
U3RyaW5nLCBhcnJheVJlc3VsdCkKLXsKLSAgICBpZiAoIXF1ZXJ5U3RyaW5nKQotICAgICAgICBy
ZXR1cm4gYXJyYXlSZXN1bHQgPyBbXSA6IHt9OwotCi0gICAgZnVuY3Rpb24gZGVjb2RlKHN0cmlu
ZykKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBSZXBsYWNlICIrIiB3aXRo
ICIgIiB0aGVuIGRlY29kZSBwcmVjZW50IGVuY29kZWQgdmFsdWVzLgotICAgICAgICAgICAgcmV0
dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJpbmcucmVwbGFjZSgvXCsvZywgIiAiKSk7Ci0gICAg
ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB2YXIgcGFyYW1ldGVycyA9IGFycmF5UmVzdWx0ID8gW10gOiB7fTsKLSAg
ICB2YXIgcGFyYW1ldGVyU3RyaW5ncyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCImIik7Ci0gICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJTdHJpbmdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IHZhciBwYWlyID0gcGFyYW1ldGVyU3RyaW5nc1tpXS5zcGxpdCgiPSIpLm1hcChkZWNvZGUpOwot
ICAgICAgICBpZiAoYXJyYXlSZXN1bHQpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe25h
bWU6IHBhaXJbMF0sIHZhbHVlOiBwYWlyWzFdfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBhcmFtZXRlcnNbcGFpclswXV0gPSBwYWlyWzFdOwotICAgIH0KLQotICAgIHJldHVybiBwYXJh
bWV0ZXJzOwotfQo=
</data>
<flag name="review"
          id="237634"
          type_id="1"
          status="-"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="237635"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215009</attachid>
            <date>2013-10-23 16:22:02 -0700</date>
            <delta_ts>2013-10-24 09:37:48 -0700</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug123223_v2.patch</filename>
            <type>text/plain</type>
            <size>25190</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YjYxYTExLi43OWQ1NzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMTAt
MjMgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IEFkZCBhIHdheSB0byB0ZXN0IHRoZSBNYW5hZ2VyIGFuZCBtb2RlbCBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMy
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCB0aGUgZmlyc3QgbmV3IFdlYkluc3BlY3RvciBsYXlvdXQgdGVzdCBmaWxlLiBUaGUgdGVzdCBp
cyB1c2luZyBJbnNwZWN0b3JUZXN0LmltcG9ydEluc3BlY3RvclNjcmlwdHMKKyAgICAgICAgdG8g
Ym9vdHN0cmFwIHNvbWUgb2YgdGhlIG1hbmFnZXJzL29ic2VydmVycy9tb2RlbHMgZnJvbSB0aGUg
bmV3IFdlYkluc3BlY3Rvci4KKworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL3Jlc291cmNlcy9JbnNwZWN0b3JUZXN0LmpzOgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5p
bXBvcnRTY3JpcHQpOgorICAgICAgICAoSW5zcGVjdG9yVGVzdC5pbXBvcnRJbnNwZWN0b3JTY3Jp
cHRzKToKKyAgICAgICAgKiBpbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvbWFpbi1mcmFtZS1yZXNv
dXJjZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9t
b2RlbC9tYWluLWZyYW1lLXJlc291cmNlLmh0bWw6IEFkZGVkLgorCiAyMDEzLTEwLTIxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgR3JhbW1hciBt
YXJrZXJzIGFyZSBub3QgdXBkYXRlZCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIDF4IGFuZCAyeApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVz
b3VyY2VzL0luc3BlY3RvclRlc3QuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rv
ci1wcm90b2NvbC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qcwppbmRleCBlMGI4MmE1Li5mMWI0
ZjhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90b2Nv
bC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qcwpAQCAtMTA2LDkg
KzEwNiw1OCBAQCBJbnNwZWN0b3JUZXN0LmltcG9ydFNjcmlwdCA9IGZ1bmN0aW9uKHNjcmlwdE5h
bWUpCiAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgIHhoci5vcGVuKCJH
RVQiLCBzY3JpcHROYW1lLCBmYWxzZSk7CiAgICAgeGhyLnNlbmQobnVsbCk7Ci0gICAgd2luZG93
LmV2YWwoeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgaWYgKHhoci5zdGF0dXMgIT09IDAgJiYgeGhy
LnN0YXR1cyAhPT0gMjAwKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NyaXB0
IFVSTDogIiArIHNjcmlwdE5hbWUpOworICAgIHZhciBzY3JpcHQgPSAidHJ5IHsgIiArIHhoci5y
ZXNwb25zZVRleHQgKyAifSBjYXRjaCAoZSkgeyBhbGVydCgiICsgSlNPTi5zdHJpbmdpZnkoIkVy
cm9yIGluOiAiICsgc2NyaXB0TmFtZSkgKyAiKTsgdGhyb3cgZTsgfSI7CisgICAgd2luZG93LmV2
YWwoc2NyaXB0KTsKIH0KIAorSW5zcGVjdG9yVGVzdC5pbXBvcnRJbnNwZWN0b3JTY3JpcHRzID0g
ZnVuY3Rpb24oKQoreworICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gb3ZlcndyaXRlcyB0aGUg
SW5zcGVjdG9yRnJvbnRlbmRBUEksIHNvIHRoZXJlJ3MgY3VycmVudGx5IG5vCisgICAgLy8gd2F5
IHRvIGludGVyY2VwdCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgYmFja2VuZC4KKworICAgIHZhciBp
bnNwZWN0b3JTY3JpcHRzID0gWworICAgICAgICAiVXRpbGl0aWVzIiwKKyAgICAgICAgIldlYklu
c3BlY3RvciIsCisgICAgICAgICJPYmplY3QiLAorICAgICAgICAiSW5zcGVjdG9yQmFja2VuZCIs
CisgICAgICAgICJJbnNwZWN0b3JGcm9udGVuZEFQSSIsCisgICAgICAgICJJbnNwZWN0b3JGcm9u
dGVuZEhvc3RTdHViIiwKKyAgICAgICAgIkluc3BlY3RvckJhY2tlbmRDb21tYW5kcyIsCisgICAg
ICAgICJVUkxVdGlsaXRpZXMiLAorICAgICAgICAiTWVzc2FnZURpc3BhdGNoZXIiLAorICAgICAg
ICAiU2V0dGluZyIsCisgICAgICAgICJQYWdlT2JzZXJ2ZXIiLAorICAgICAgICAiRE9NT2JzZXJ2
ZXIiLAorICAgICAgICAiRnJhbWVSZXNvdXJjZU1hbmFnZXIiLAorICAgICAgICAiUnVudGltZU1h
bmFnZXIiLAorICAgICAgICAiRnJhbWUiLAorICAgICAgICAiUmV2aXNpb24iLAorICAgICAgICAi
U291cmNlQ29kZVJldmlzaW9uIiwKKyAgICAgICAgIlNvdXJjZUNvZGUiLAorICAgICAgICAiUmVz
b3VyY2UiLAorICAgICAgICAiUmVzb3VyY2VDb2xsZWN0aW9uIiwKKyAgICAgICAgIkRPTVRyZWVN
YW5hZ2VyIiwKKyAgICAgICAgIkRPTU5vZGUiLAorICAgICAgICAiQ29udGVudEZsb3ciLAorICAg
ICAgICAiRE9NVHJlZSIsCisgICAgICAgICJFeGVjdXRpb25Db250ZXh0IiwKKyAgICAgICAgIkV4
ZWN1dGlvbkNvbnRleHRMaXN0IgorICAgIF07CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnNw
ZWN0b3JTY3JpcHRzLmxlbmd0aDsgKytpKQorICAgICAgICBJbnNwZWN0b3JUZXN0LmltcG9ydFNj
cmlwdCgiLi4vLi4vLi4vLi4vLi4vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
IiArIGluc3BlY3RvclNjcmlwdHNbaV0gKyAiLmpzIik7CisKKyAgICBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyUGFnZURpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5QYWdlT2JzZXJ2ZXIpOwor
ICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJET01EaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0
b3IuRE9NT2JzZXJ2ZXIpOworCisgICAgV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5hZ2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlTWFuYWdlcjsKKyAgICBXZWJJbnNwZWN0
b3IuZG9tVHJlZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVRyZWVNYW5hZ2VyOworCisg
ICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCgpOworfQorCisKIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICB0cnkgewogICAgICAg
ICBldmFsKGV2ZW50LmRhdGEpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXBy
b3RvY29sL21vZGVsL21haW4tZnJhbWUtcmVzb3VyY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yLXByb3RvY29sL21vZGVsL21haW4tZnJhbWUtcmVzb3VyY2UtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMTM0YmMKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvbWFpbi1mcmFt
ZS1yZXNvdXJjZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0IEBACitUZXN0aW5nIHRoYXQgdGhl
IGluc3BlY3RvciBzY3JpcHRzIGFyZSBsb2FkZWQgYW5kIHRoZSBtYWluIGZyYW1lIFVSTCBjYW4g
YmUgcmVjZWl2ZWQuCisKK01haW4gZnJhbWU6IG1haW4tZnJhbWUtcmVzb3VyY2UuaHRtbAorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvbW9kZWwvbWFpbi1mcmFt
ZS1yZXNvdXJjZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL21vZGVsL21h
aW4tZnJhbWUtcmVzb3VyY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mYzExMzc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3Rv
Y29sL21vZGVsL21haW4tZnJhbWUtcmVzb3VyY2UuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IWRv
Y3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9yZXNvdXJjZXMvcHJv
dG9jb2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdCgpCit7Cisg
ICAgSW5zcGVjdG9yVGVzdC5pbXBvcnRJbnNwZWN0b3JTY3JpcHRzKCk7CisKKyAgICBXZWJJbnNw
ZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RnJhbWVSZXNvdXJjZU1hbmFnZXIuRXZlbnQuTWFpbkZyYW1lRGlkQ2hhbmdlLCBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICB2YXIgdXJsID0gV2ViSW5zcGVjdG9yLmZyYW1lUmVzb3VyY2VNYW5h
Z2VyLm1haW5GcmFtZS51cmw7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJNYWluIGZyYW1l
OiAiICsgdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoIi8iKSArIDEpKTsKKyAgICAgICAg
SW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9KTsKK30KKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxwPlRlc3RpbmcgdGhhdCB0aGUg
aW5zcGVjdG9yIHNjcmlwdHMgYXJlIGxvYWRlZCBhbmQgdGhlIG1haW4gZnJhbWUgVVJMIGNhbiBi
ZSByZWNlaXZlZC48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpp
bmRleCBiZDRkYmE4Li43MWZmMmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyOSBAQAorMjAxMy0xMC0yMyAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgd2F5IHRvIHRlc3QgdGhlIE1hbmFn
ZXIgYW5kIG1vZGVsIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzIyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE1vdmVkIHNvbWUgZ2xvYmFsIGZ1bmN0aW9ucyBvdXQgb2YgTWFpbi5qcywg
c28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGluIHRoZSAKKyAgICAgICAgbGF5b3V0IHRlc3RzIHdp
dGhvdXQgaW5jbHVkaW5nIE1haW4uanMuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4u
aHRtbDogUmVmZXJlbmNlZCB0aGUgbmV3IEpTIGZpbGVzLgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvTWFpbi5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01lc3NhZ2VEaXNwYXRjaGVyLmpz
OiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNwYXRjaE5leHRRdWV1ZWRNZXNzYWdl
RnJvbUJhY2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmRpc3BhdGNoTWVzc2FnZUZyb21C
YWNrZW5kKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1VSTFV0aWxpdGllcy5qczogQWRkZWQu
CisgICAgICAgIChyZW1vdmVVUkxGcmFnbWVudCk6CisgICAgICAgIChyZWxhdGl2ZVBhdGgpOgor
ICAgICAgICAocGFyc2VVUkwpOgorICAgICAgICAoYWJzb2x1dGVVUkwpOgorICAgICAgICAocGFy
c2VMb2NhdGlvblF1ZXJ5UGFyYW1ldGVycyk6CisgICAgICAgIChwYXJzZVF1ZXJ5U3RyaW5nKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuZGlzcGxheU5hbWVGb3JIb3N0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1V0
aWxpdGllcy5qczoKKwogMjAxMy0xMC0yMSAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBh
ZG9iZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0NTUyBSZWdpb25zXSBGbG93cyBh
cmUgbm90IGxvYWRpbmcgaWYgeW91IHJlZnJlc2ggdGhlIHBhZ2Ugc2V2ZXJhbCB0aW1lcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IGFlOTEx
MzUuLjg2NmZhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
YWluLmh0bWwKQEAgLTE0Myw2ICsxNDMsOCBAQAogCiAgICAgPHNjcmlwdCBzcmM9IlV0aWxpdGll
cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IldlYkluc3BlY3Rvci5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlVSTFV0aWxpdGllcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ik1lc3NhZ2VEaXNwYXRjaGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iT2JqZWN0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29kZU1pcnJvckRyYWdU
b0FsdGVyTnVtYmVyQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNv
ZGVNaXJyb3JBZGRpdGlvbnMuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uanMKaW5kZXggMjc3ODZhOC4uMTUyZjYzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmpzCkBAIC0zMTEsMzEgKzMxMSw2IEBA
IFdlYkluc3BlY3Rvci5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogICAgICAgICB0aGlzLnNo
b3dTcGxpdENvbnNvbGUoKTsKIH0KIAotV2ViSW5zcGVjdG9yLm1lc3NhZ2VzVG9EaXNwYXRjaCA9
IFtdOwotCi1XZWJJbnNwZWN0b3IuZGlzcGF0Y2hOZXh0UXVldWVkTWVzc2FnZUZyb21CYWNrZW5k
ID0gZnVuY3Rpb24oKQotewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZXNzYWdlc1Rv
RGlzcGF0Y2gubGVuZ3RoOyArK2kpCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuZGlzcGF0Y2go
dGhpcy5tZXNzYWdlc1RvRGlzcGF0Y2hbaV0pOwotCi0gICAgdGhpcy5tZXNzYWdlc1RvRGlzcGF0
Y2ggPSBbXTsKLQotICAgIHRoaXMuX2Rpc3BhdGNoVGltZW91dCA9IG51bGw7Ci19Ci0KLVdlYklu
c3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9uKG1lc3NhZ2UpCi17
Ci0gICAgLy8gRW5mb3JjZSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgYmFj
a2VuZCBhbmQgdGhlIGZyb250ZW5kIGJ5IHF1ZXVlaW5nIG1lc3NhZ2VzLgotICAgIC8vIFRoZSBt
ZXNzYWdlcyBhcmUgZGVxdWV1ZWQgb24gYSB6ZXJvIGRlbGF5IHRpbWVvdXQuCi0KLSAgICB0aGlz
Lm1lc3NhZ2VzVG9EaXNwYXRjaC5wdXNoKG1lc3NhZ2UpOwotCi0gICAgaWYgKHRoaXMuX2Rpc3Bh
dGNoVGltZW91dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGhpcy5fZGlzcGF0Y2hUaW1lb3V0
ID0gc2V0VGltZW91dCh0aGlzLmRpc3BhdGNoTmV4dFF1ZXVlZE1lc3NhZ2VGcm9tQmFja2VuZC5i
aW5kKHRoaXMpLCAwKTsKLX0KLQogV2ViSW5zcGVjdG9yLnNpZGViYXJQYW5lbEZvckN1cnJlbnRD
b250ZW50VmlldyA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgY3VycmVudENvbnRlbnRWaWV3ID0g
dGhpcy5jb250ZW50QnJvd3Nlci5jdXJyZW50Q29udGVudFZpZXc7CkBAIC0zNzgsMjcgKzM1Myw2
IEBAIFdlYkluc3BlY3Rvci5jb250ZW50QnJvd3NlclRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRP
YmplY3QgPSBmdW5jdGlvbihjb250ZW50QnJvCiAgICAgcmV0dXJuIG51bGw7CiB9CiAKLVdlYklu
c3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCA9IGZ1bmN0aW9uKHVybCwgdXJsQ29tcG9uZW50cykK
LXsKLSAgICBpZiAoIXVybENvbXBvbmVudHMpCi0gICAgICAgIHVybENvbXBvbmVudHMgPSBwYXJz
ZVVSTCh1cmwpOwotCi0gICAgdmFyIGRpc3BsYXlOYW1lOwotICAgIHRyeSB7Ci0gICAgICAgIGRp
c3BsYXlOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybENvbXBvbmVudHMubGFzdFBhdGhDb21w
b25lbnQgfHwgIiIpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZGlzcGxheU5hbWUgPSB1
cmxDb21wb25lbnRzLmxhc3RQYXRoQ29tcG9uZW50OwotICAgIH0KLQotICAgIHJldHVybiBkaXNw
bGF5TmFtZSB8fCBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JIb3N0KHVybENvbXBvbmVudHMu
aG9zdCkgfHwgdXJsOwotfQotCi1XZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JIb3N0ID0gZnVu
Y3Rpb24oaG9zdCkKLXsKLSAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTEyMzc0MTM+OiBU
aGlzIHNob3VsZCBkZWNvZGUgcHVueWNvZGUgaG9zdG5hbWVzLgotICAgIHJldHVybiBob3N0Owot
fQotCiBXZWJJbnNwZWN0b3IudXBkYXRlV2luZG93VGl0bGUgPSBmdW5jdGlvbigpCiB7CiAgICAg
dmFyIG1haW5GcmFtZSA9IHRoaXMuZnJhbWVSZXNvdXJjZU1hbmFnZXIubWFpbkZyYW1lOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWVzc2FnZURpc3Bh
dGNoZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NZXNzYWdlRGlz
cGF0Y2hlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDk3NGFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWVz
c2FnZURpc3BhdGNoZXIuanMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3Bl
Y3Rvci5tZXNzYWdlc1RvRGlzcGF0Y2ggPSBbXTsKKworV2ViSW5zcGVjdG9yLmRpc3BhdGNoTmV4
dFF1ZXVlZE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMubWVzc2FnZXNUb0Rpc3BhdGNoLmxlbmd0aDsgKytpKQorICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoKHRoaXMubWVzc2FnZXNUb0Rpc3BhdGNoW2ldKTsKKwor
ICAgIHRoaXMubWVzc2FnZXNUb0Rpc3BhdGNoID0gW107CisKKyAgICB0aGlzLl9kaXNwYXRjaFRp
bWVvdXQgPSBudWxsOworfQorCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tl
bmQgPSBmdW5jdGlvbihtZXNzYWdlKQoreworICAgIC8vIEVuZm9yY2UgYXN5bmNocm9ub3VzIGlu
dGVyYWN0aW9uIGJldHdlZW4gdGhlIGJhY2tlbmQgYW5kIHRoZSBmcm9udGVuZCBieSBxdWV1ZWlu
ZyBtZXNzYWdlcy4KKyAgICAvLyBUaGUgbWVzc2FnZXMgYXJlIGRlcXVldWVkIG9uIGEgemVybyBk
ZWxheSB0aW1lb3V0LgorCisgICAgdGhpcy5tZXNzYWdlc1RvRGlzcGF0Y2gucHVzaChtZXNzYWdl
KTsKKworICAgIGlmICh0aGlzLl9kaXNwYXRjaFRpbWVvdXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHRoaXMuX2Rpc3BhdGNoVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5kaXNwYXRjaE5leHRR
dWV1ZWRNZXNzYWdlRnJvbUJhY2tlbmQuYmluZCh0aGlzKSwgMCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VUkxVdGlsaXRpZXMuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VUkxVdGlsaXRpZXMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1YWNiOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1VSTFV0aWxpdGllcy5qcwpAQCAtMCww
ICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9uIHJlbW92ZVVSTEZyYWdtZW50KHVybCkK
K3sKKyAgICB2YXIgaGFzaEluZGV4ID0gdXJsLmluZGV4T2YoIiMiKTsKKyAgICBpZiAoaGFzaElu
ZGV4ID49IDApCisgICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDAsIGhhc2hJbmRleCk7Cisg
ICAgcmV0dXJuIHVybDsKK30KKworZnVuY3Rpb24gcmVsYXRpdmVQYXRoKHBhdGgsIGJhc2VQYXRo
KQoreworICAgIGNvbnNvbGUuYXNzZXJ0KHBhdGguY2hhckF0KDApID09PSAiLyIpOworICAgIGNv
bnNvbGUuYXNzZXJ0KGJhc2VQYXRoLmNoYXJBdCgwKSA9PT0gIi8iKTsKKyAgICAKKyAgICB2YXIg
cGF0aENvbXBvbmVudHMgPSBwYXRoLnNwbGl0KCIvIik7CisgICAgdmFyIGJhc2VDb21wb25lbnRz
ID0gYmFzZVBhdGgucmVwbGFjZSgvXC8kLywgIiIpLnNwbGl0KCIvIik7CisgICAgdmFyIGZpbmFs
Q29tcG9uZW50cyA9IFtdOworCisgICAgdmFyIGluZGV4ID0gMTsKKyAgICBmb3IgKDsgaW5kZXgg
PCBwYXRoQ29tcG9uZW50cy5sZW5ndGggJiYgaW5kZXggPCBiYXNlQ29tcG9uZW50cy5sZW5ndGg7
ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKHBhdGhDb21wb25lbnRzW2luZGV4XSAhPT0gYmFzZUNv
bXBvbmVudHNbaW5kZXhdKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZm9yICh2
YXIgaSA9IGluZGV4OyBpIDwgYmFzZUNvbXBvbmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGZp
bmFsQ29tcG9uZW50cy5wdXNoKCIuLiIpOworCisgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwg
cGF0aENvbXBvbmVudHMubGVuZ3RoOyArK2kpCisgICAgICAgIGZpbmFsQ29tcG9uZW50cy5wdXNo
KHBhdGhDb21wb25lbnRzW2ldKTsKKworICAgIHJldHVybiBmaW5hbENvbXBvbmVudHMuam9pbigi
LyIpOworfQorCitmdW5jdGlvbiBwYXJzZVVSTCh1cmwpCit7CisgICAgdXJsID0gdXJsID8gdXJs
LnRyaW0oKSA6ICIiOworCisgICAgdmFyIG1hdGNoID0gdXJsLm1hdGNoKC9eKFteOl0rKTpcL1wv
KFteXC86XSopKD86OihbXGRdKykpPyg/OihcL1teI10qKSg/OiMoLiopKT8pPyQvaSk7CisgICAg
aWYgKCFtYXRjaCkKKyAgICAgICAgcmV0dXJuIHtzY2hlbWU6IG51bGwsIGhvc3Q6IG51bGwsIHBv
cnQ6IG51bGwsIHBhdGg6IG51bGwsIHF1ZXJ5U3RyaW5nOiBudWxsLCBmcmFnbWVudDogbnVsbCwg
bGFzdFBhdGhDb21wb25lbnQ6IG51bGx9OworCisgICAgdmFyIHNjaGVtZSA9IG1hdGNoWzFdLnRv
TG93ZXJDYXNlKCk7CisgICAgdmFyIGhvc3QgPSBtYXRjaFsyXS50b0xvd2VyQ2FzZSgpOworICAg
IHZhciBwb3J0ID0gTnVtYmVyKG1hdGNoWzNdKSB8fCBudWxsOworICAgIHZhciB3aG9sZVBhdGgg
PSBtYXRjaFs0XSB8fCBudWxsOworICAgIHZhciBmcmFnbWVudCA9IG1hdGNoWzVdIHx8IG51bGw7
CisgICAgdmFyIHBhdGggPSB3aG9sZVBhdGg7CisgICAgdmFyIHF1ZXJ5U3RyaW5nID0gbnVsbDsK
KworICAgIC8vIFNwbGl0IHRoZSBwYXRoIGFuZCB0aGUgcXVlcnkgc3RyaW5nLgorICAgIGlmICh3
aG9sZVBhdGgpIHsKKyAgICAgICAgdmFyIGluZGV4T2ZRdWVyeSA9IHdob2xlUGF0aC5pbmRleE9m
KCI/Iik7CisgICAgICAgIGlmIChpbmRleE9mUXVlcnkgIT09IC0xKSB7CisgICAgICAgICAgICBw
YXRoID0gd2hvbGVQYXRoLnN1YnN0cmluZygwLCBpbmRleE9mUXVlcnkpOworICAgICAgICAgICAg
cXVlcnlTdHJpbmcgPSB3aG9sZVBhdGguc3Vic3RyaW5nKGluZGV4T2ZRdWVyeSArIDEpOworICAg
ICAgICB9CisgICAgICAgIHBhdGggPSByZXNvbHZlRG90c0luUGF0aChwYXRoKTsKKyAgICB9CisK
KyAgICAvLyBGaW5kIGxhc3QgcGF0aCBjb21wb25lbnQuCisgICAgdmFyIGxhc3RQYXRoQ29tcG9u
ZW50ID0gbnVsbDsKKyAgICBpZiAocGF0aCAmJiBwYXRoICE9PSAiLyIpIHsKKyAgICAgICAgLy8g
U2tpcCB0aGUgdHJhaWxpbmcgc2xhc2ggaWYgdGhlcmUgaXMgb25lLgorICAgICAgICB2YXIgZW5k
T2Zmc2V0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAiLyIgPyAxIDogMDsKKyAgICAgICAg
dmFyIGxhc3RTbGFzaEluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZigiLyIsIHBhdGgubGVuZ3RoIC0g
MSAtIGVuZE9mZnNldCk7CisgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gLTEpCisgICAg
ICAgICAgICBsYXN0UGF0aENvbXBvbmVudCA9IHBhdGguc3Vic3RyaW5nKGxhc3RTbGFzaEluZGV4
ICsgMSwgcGF0aC5sZW5ndGggLSBlbmRPZmZzZXQpOworICAgIH0KKworICAgIHJldHVybiB7c2No
ZW1lOiBzY2hlbWUsIGhvc3Q6IGhvc3QsIHBvcnQ6IHBvcnQsIHBhdGg6IHBhdGgsIHF1ZXJ5U3Ry
aW5nOiBxdWVyeVN0cmluZywgZnJhZ21lbnQ6IGZyYWdtZW50LCBsYXN0UGF0aENvbXBvbmVudDog
bGFzdFBhdGhDb21wb25lbnR9OworfQorCitmdW5jdGlvbiBhYnNvbHV0ZVVSTChwYXJ0aWFsVVJM
LCBiYXNlVVJMKQoreworICAgIHBhcnRpYWxVUkwgPSBwYXJ0aWFsVVJMID8gcGFydGlhbFVSTC50
cmltKCkgOiAiIjsKKworICAgIC8vIFJldHVybiBkYXRhIGFuZCBqYXZhc2NyaXB0IFVSTHMgYXMt
aXMuCisgICAgaWYgKHBhcnRpYWxVUkwuc3RhcnRzV2l0aCgiZGF0YToiKSB8fCBwYXJ0aWFsVVJM
LnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IikgfHwgcGFydGlhbFVSTC5zdGFydHNXaXRoKCJtYWls
dG86IikpCisgICAgICAgIHJldHVybiBwYXJ0aWFsVVJMOworCisgICAgLy8gSWYgdGhlIFVSTCBo
YXMgYSBzY2hlbWUgaXQgaXMgYWxyZWFkeSBhIGZ1bGwgVVJMLCBzbyByZXR1cm4gaXQuCisgICAg
aWYgKHBhcnNlVVJMKHBhcnRpYWxVUkwpLnNjaGVtZSkKKyAgICAgICAgcmV0dXJuIHBhcnRpYWxV
Ukw7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBwYXJ0aWFsIFVSTCwganVzdCByZXR1cm4gdGhl
IGJhc2UgVVJMLgorICAgIGlmICghcGFydGlhbFVSTCkKKyAgICAgICAgcmV0dXJuIGJhc2VVUkwg
fHwgbnVsbDsKKworICAgIHZhciBiYXNlVVJMQ29tcG9uZW50cyA9IHBhcnNlVVJMKGJhc2VVUkwp
OworCisgICAgLy8gVGhlIGJhc2UgVVJMIG5lZWRzIHRvIGJlIGFuIGFic29sdXRlIFVSTC4gUmV0
dXJuIG51bGwgaWYgaXQgaXNuJ3QuCisgICAgaWYgKCFiYXNlVVJMQ29tcG9uZW50cy5zY2hlbWUp
CisgICAgICAgIHJldHVybiBudWxsOworCisgICAgLy8gQSBVUkwgdGhhdCBzdGFydHMgd2l0aCAi
Ly8iIGlzIGEgZnVsbCBVUkwgd2l0aG91dCB0aGUgc2NoZW1lLiBVc2UgdGhlIGJhc2UgVVJMIHNj
aGVtZS4KKyAgICBpZiAocGFydGlhbFVSTFswXSA9PT0gIi8iICYmIHBhcnRpYWxVUkxbMV0gPT09
ICIvIikKKyAgICAgICAgcmV0dXJuIGJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSArICI6IiArIHBh
cnRpYWxVUkw7CisKKyAgICAvLyBUaGUgcGF0aCBjYW4gYmUgbnVsbCBmb3IgVVJMcyB0aGF0IGhh
dmUganVzdCBhIHNjaGVtZSBhbmQgaG9zdCAobGlrZSAiaHR0cDovL2FwcGxlLmNvbSIpLiBTbyBt
YWtlIHRoZSBwYXRoIGJlICIvIi4KKyAgICBpZiAoIWJhc2VVUkxDb21wb25lbnRzLnBhdGgpCisg
ICAgICAgIGJhc2VVUkxDb21wb25lbnRzLnBhdGggPSAiLyI7CisKKyAgICAvLyBHZW5lcmF0ZSB0
aGUgYmFzZSBVUkwgcHJlZml4IHRoYXQgaXMgdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUgY2FzZXMu
CisgICAgdmFyIGJhc2VVUkxQcmVmaXggPSBiYXNlVVJMQ29tcG9uZW50cy5zY2hlbWUgKyAiOi8v
IiArIGJhc2VVUkxDb21wb25lbnRzLmhvc3QgKyAoYmFzZVVSTENvbXBvbmVudHMucG9ydCA/ICgi
OiIgKyBiYXNlVVJMQ29tcG9uZW50cy5wb3J0KSA6ICIiKTsKKworICAgIC8vIEEgVVJMIHRoYXQg
c3RhcnRzIHdpdGggIj8iIGlzIGp1c3QgYSBxdWVyeSBzdHJpbmcgdGhhdCBnZXRzIGFwcGxpZWQg
dG8gdGhlIGJhc2UgVVJMIChyZXBsYWNpbmcgdGhlIGJhc2UgVVJMIHF1ZXJ5IHN0cmluZyBhbmQg
ZnJhZ21lbnQpLgorICAgIGlmIChwYXJ0aWFsVVJMWzBdID09PSAiPyIpCisgICAgICAgIHJldHVy
biBiYXNlVVJMUHJlZml4ICsgYmFzZVVSTENvbXBvbmVudHMucGF0aCArIHBhcnRpYWxVUkw7CisK
KyAgICAvLyBBIFVSTCB0aGF0IHN0YXJ0cyB3aXRoICIvIiBpcyBhbiBhYnNvbHV0ZSBwYXRoIHRo
YXQgZ2V0cyBhcHBsaWVkIHRvIHRoZSBiYXNlIFVSTCAocmVwbGFjaW5nIHRoZSBiYXNlIFVSTCBw
YXRoLCBxdWVyeSBzdHJpbmcgYW5kIGZyYWdtZW50KS4KKyAgICBpZiAocGFydGlhbFVSTFswXSA9
PT0gIi8iKQorICAgICAgICByZXR1cm4gYmFzZVVSTFByZWZpeCArIHJlc29sdmVEb3RzSW5QYXRo
KHBhcnRpYWxVUkwpOworCisgICAgLy8gR2VuZXJhdGUgdGhlIGJhc2UgcGF0aCB0aGF0IGlzIHVz
ZWQgaW4gdGhlIGZpbmFsIGNhc2UgYnkgcmVtb3ZpbmcgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFz
dCAiLyIgZnJvbSB0aGUgYmFzZSBVUkwncyBwYXRoLgorICAgIHZhciBiYXNlUGF0aCA9IGJhc2VV
UkxDb21wb25lbnRzLnBhdGguc3Vic3RyaW5nKDAsIGJhc2VVUkxDb21wb25lbnRzLnBhdGgubGFz
dEluZGV4T2YoIi8iKSkgKyAiLyI7CisgICAgcmV0dXJuIGJhc2VVUkxQcmVmaXggKyByZXNvbHZl
RG90c0luUGF0aChiYXNlUGF0aCArIHBhcnRpYWxVUkwpOworfQorCitmdW5jdGlvbiBwYXJzZUxv
Y2F0aW9uUXVlcnlQYXJhbWV0ZXJzKGFycmF5UmVzdWx0KQoreworICAgIC8vIFRoZSBmaXJzdCBj
aGFyYWN0ZXIgaXMgYWx3YXlzIHRoZSAiPyIuCisgICAgcmV0dXJuIHBhcnNlUXVlcnlTdHJpbmco
d2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSksIGFycmF5UmVzdWx0KTsKK30KKwor
ZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZywgYXJyYXlSZXN1bHQpCit7Cisg
ICAgaWYgKCFxdWVyeVN0cmluZykKKyAgICAgICAgcmV0dXJuIGFycmF5UmVzdWx0ID8gW10gOiB7
fTsKKworICAgIGZ1bmN0aW9uIGRlY29kZShzdHJpbmcpCisgICAgeworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgLy8gUmVwbGFjZSAiKyIgd2l0aCAiICIgdGhlbiBkZWNvZGUgcHJlY2VudCBl
bmNvZGVkIHZhbHVlcy4KKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3Ry
aW5nLnJlcGxhY2UoL1wrL2csICIgIikpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
ICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgfQorCisgICAgdmFyIHBhcmFtZXRl
cnMgPSBhcnJheVJlc3VsdCA/IFtdIDoge307CisgICAgdmFyIHBhcmFtZXRlclN0cmluZ3MgPSBx
dWVyeVN0cmluZy5zcGxpdCgiJiIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVy
U3RyaW5ncy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcGFpciA9IHBhcmFtZXRlclN0cmlu
Z3NbaV0uc3BsaXQoIj0iKS5tYXAoZGVjb2RlKTsKKyAgICAgICAgaWYgKGFycmF5UmVzdWx0KQor
ICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHtuYW1lOiBwYWlyWzBdLCB2YWx1ZTogcGFpclsx
XX0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJhbWV0ZXJzW3BhaXJbMF1dID0gcGFp
clsxXTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworV2ViSW5zcGVjdG9y
LmRpc3BsYXlOYW1lRm9yVVJMID0gZnVuY3Rpb24odXJsLCB1cmxDb21wb25lbnRzKQoreworICAg
IGlmICghdXJsQ29tcG9uZW50cykKKyAgICAgICAgdXJsQ29tcG9uZW50cyA9IHBhcnNlVVJMKHVy
bCk7CisKKyAgICB2YXIgZGlzcGxheU5hbWU7CisgICAgdHJ5IHsKKyAgICAgICAgZGlzcGxheU5h
bWUgPSBkZWNvZGVVUklDb21wb25lbnQodXJsQ29tcG9uZW50cy5sYXN0UGF0aENvbXBvbmVudCB8
fCAiIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBkaXNwbGF5TmFtZSA9IHVybENvbXBv
bmVudHMubGFzdFBhdGhDb21wb25lbnQ7CisgICAgfQorCisgICAgcmV0dXJuIGRpc3BsYXlOYW1l
IHx8IFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhvc3QodXJsQ29tcG9uZW50cy5ob3N0KSB8
fCB1cmw7Cit9CisKK1dlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhvc3QgPSBmdW5jdGlvbiho
b3N0KQoreworICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMTIzNzQxMz46IFRoaXMgc2hv
dWxkIGRlY29kZSBwdW55Y29kZSBob3N0bmFtZXMuCisgICAgcmV0dXJuIGhvc3Q7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VdGlsaXRpZXMuanMKaW5kZXgg
ZDFiNjUwMi4uOGFlYWFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1V0aWxpdGllcy5qcwpAQCAtOTgxLDM4ICs5ODEsNiBAQCBmdW5jdGlvbiBpc0VudGVy
S2V5KGV2ZW50KQogICAgIHJldHVybiBldmVudC5rZXlDb2RlICE9PSAyMjkgJiYgZXZlbnQua2V5
SWRlbnRpZmllciA9PT0gIkVudGVyIjsKIH0KIAotZnVuY3Rpb24gcmVtb3ZlVVJMRnJhZ21lbnQo
dXJsKQotewotICAgIHZhciBoYXNoSW5kZXggPSB1cmwuaW5kZXhPZigiIyIpOwotICAgIGlmICho
YXNoSW5kZXggPj0gMCkKLSAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgaGFzaEluZGV4
KTsKLSAgICByZXR1cm4gdXJsOwotfQotCi1mdW5jdGlvbiByZWxhdGl2ZVBhdGgocGF0aCwgYmFz
ZVBhdGgpCi17Ci0gICAgY29uc29sZS5hc3NlcnQocGF0aC5jaGFyQXQoMCkgPT09ICIvIik7Ci0g
ICAgY29uc29sZS5hc3NlcnQoYmFzZVBhdGguY2hhckF0KDApID09PSAiLyIpOwotICAgIAotICAg
IHZhciBwYXRoQ29tcG9uZW50cyA9IHBhdGguc3BsaXQoIi8iKTsKLSAgICB2YXIgYmFzZUNvbXBv
bmVudHMgPSBiYXNlUGF0aC5yZXBsYWNlKC9cLyQvLCAiIikuc3BsaXQoIi8iKTsKLSAgICB2YXIg
ZmluYWxDb21wb25lbnRzID0gW107Ci0KLSAgICB2YXIgaW5kZXggPSAxOwotICAgIGZvciAoOyBp
bmRleCA8IHBhdGhDb21wb25lbnRzLmxlbmd0aCAmJiBpbmRleCA8IGJhc2VDb21wb25lbnRzLmxl
bmd0aDsgKytpbmRleCkgewotICAgICAgICBpZiAocGF0aENvbXBvbmVudHNbaW5kZXhdICE9PSBi
YXNlQ29tcG9uZW50c1tpbmRleF0pCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBm
b3IgKHZhciBpID0gaW5kZXg7IGkgPCBiYXNlQ29tcG9uZW50cy5sZW5ndGg7ICsraSkKLSAgICAg
ICAgZmluYWxDb21wb25lbnRzLnB1c2goIi4uIik7Ci0KLSAgICBmb3IgKHZhciBpID0gaW5kZXg7
IGkgPCBwYXRoQ29tcG9uZW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgZmluYWxDb21wb25lbnRz
LnB1c2gocGF0aENvbXBvbmVudHNbaV0pOwotCi0gICAgcmV0dXJuIGZpbmFsQ29tcG9uZW50cy5q
b2luKCIvIik7Ci19Ci0KIGZ1bmN0aW9uIHJlc29sdmVEb3RzSW5QYXRoKHBhdGgpCiB7CiAgICAg
aWYgKCFwYXRoKQpAQCAtMTA0Nyw5MSArMTAxNSw2IEBAIGZ1bmN0aW9uIHJlc29sdmVEb3RzSW5Q
YXRoKHBhdGgpCiAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCIvIik7CiB9CiAKLWZ1bmN0aW9uIHBh
cnNlVVJMKHVybCkKLXsKLSAgICB1cmwgPSB1cmwgPyB1cmwudHJpbSgpIDogIiI7Ci0KLSAgICB2
YXIgbWF0Y2ggPSB1cmwubWF0Y2goL14oW146XSspOlwvXC8oW15cLzpdKikoPzo6KFtcZF0rKSk/
KD86KFwvW14jXSopKD86IyguKikpPyk/JC9pKTsKLSAgICBpZiAoIW1hdGNoKQotICAgICAgICBy
ZXR1cm4ge3NjaGVtZTogbnVsbCwgaG9zdDogbnVsbCwgcG9ydDogbnVsbCwgcGF0aDogbnVsbCwg
cXVlcnlTdHJpbmc6IG51bGwsIGZyYWdtZW50OiBudWxsLCBsYXN0UGF0aENvbXBvbmVudDogbnVs
bH07Ci0KLSAgICB2YXIgc2NoZW1lID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTsKLSAgICB2YXIg
aG9zdCA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7Ci0gICAgdmFyIHBvcnQgPSBOdW1iZXIobWF0
Y2hbM10pIHx8IG51bGw7Ci0gICAgdmFyIHdob2xlUGF0aCA9IG1hdGNoWzRdIHx8IG51bGw7Ci0g
ICAgdmFyIGZyYWdtZW50ID0gbWF0Y2hbNV0gfHwgbnVsbDsKLSAgICB2YXIgcGF0aCA9IHdob2xl
UGF0aDsKLSAgICB2YXIgcXVlcnlTdHJpbmcgPSBudWxsOwotCi0gICAgLy8gU3BsaXQgdGhlIHBh
dGggYW5kIHRoZSBxdWVyeSBzdHJpbmcuCi0gICAgaWYgKHdob2xlUGF0aCkgewotICAgICAgICB2
YXIgaW5kZXhPZlF1ZXJ5ID0gd2hvbGVQYXRoLmluZGV4T2YoIj8iKTsKLSAgICAgICAgaWYgKGlu
ZGV4T2ZRdWVyeSAhPT0gLTEpIHsKLSAgICAgICAgICAgIHBhdGggPSB3aG9sZVBhdGguc3Vic3Ry
aW5nKDAsIGluZGV4T2ZRdWVyeSk7Ci0gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHdob2xlUGF0
aC5zdWJzdHJpbmcoaW5kZXhPZlF1ZXJ5ICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGF0aCA9
IHJlc29sdmVEb3RzSW5QYXRoKHBhdGgpOwotICAgIH0KLQotICAgIC8vIEZpbmQgbGFzdCBwYXRo
IGNvbXBvbmVudC4KLSAgICB2YXIgbGFzdFBhdGhDb21wb25lbnQgPSBudWxsOwotICAgIGlmIChw
YXRoICYmIHBhdGggIT09ICIvIikgewotICAgICAgICAvLyBTa2lwIHRoZSB0cmFpbGluZyBzbGFz
aCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICAgIHZhciBlbmRPZmZzZXQgPSBwYXRoW3BhdGgubGVu
Z3RoIC0gMV0gPT09ICIvIiA/IDEgOiAwOwotICAgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSBw
YXRoLmxhc3RJbmRleE9mKCIvIiwgcGF0aC5sZW5ndGggLSAxIC0gZW5kT2Zmc2V0KTsKLSAgICAg
ICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSAtMSkKLSAgICAgICAgICAgIGxhc3RQYXRoQ29tcG9u
ZW50ID0gcGF0aC5zdWJzdHJpbmcobGFzdFNsYXNoSW5kZXggKyAxLCBwYXRoLmxlbmd0aCAtIGVu
ZE9mZnNldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHtzY2hlbWU6IHNjaGVtZSwgaG9zdDogaG9z
dCwgcG9ydDogcG9ydCwgcGF0aDogcGF0aCwgcXVlcnlTdHJpbmc6IHF1ZXJ5U3RyaW5nLCBmcmFn
bWVudDogZnJhZ21lbnQsIGxhc3RQYXRoQ29tcG9uZW50OiBsYXN0UGF0aENvbXBvbmVudH07Ci19
Ci0KLWZ1bmN0aW9uIGFic29sdXRlVVJMKHBhcnRpYWxVUkwsIGJhc2VVUkwpCi17Ci0gICAgcGFy
dGlhbFVSTCA9IHBhcnRpYWxVUkwgPyBwYXJ0aWFsVVJMLnRyaW0oKSA6ICIiOwotCi0gICAgLy8g
UmV0dXJuIGRhdGEgYW5kIGphdmFzY3JpcHQgVVJMcyBhcy1pcy4KLSAgICBpZiAocGFydGlhbFVS
TC5zdGFydHNXaXRoKCJkYXRhOiIpIHx8IHBhcnRpYWxVUkwuc3RhcnRzV2l0aCgiamF2YXNjcmlw
dDoiKSB8fCBwYXJ0aWFsVVJMLnN0YXJ0c1dpdGgoIm1haWx0bzoiKSkKLSAgICAgICAgcmV0dXJu
IHBhcnRpYWxVUkw7Ci0KLSAgICAvLyBJZiB0aGUgVVJMIGhhcyBhIHNjaGVtZSBpdCBpcyBhbHJl
YWR5IGEgZnVsbCBVUkwsIHNvIHJldHVybiBpdC4KLSAgICBpZiAocGFyc2VVUkwocGFydGlhbFVS
TCkuc2NoZW1lKQotICAgICAgICByZXR1cm4gcGFydGlhbFVSTDsKLQotICAgIC8vIElmIHRoZXJl
IGlzIG5vIHBhcnRpYWwgVVJMLCBqdXN0IHJldHVybiB0aGUgYmFzZSBVUkwuCi0gICAgaWYgKCFw
YXJ0aWFsVVJMKQotICAgICAgICByZXR1cm4gYmFzZVVSTCB8fCBudWxsOwotCi0gICAgdmFyIGJh
c2VVUkxDb21wb25lbnRzID0gcGFyc2VVUkwoYmFzZVVSTCk7Ci0KLSAgICAvLyBUaGUgYmFzZSBV
UkwgbmVlZHMgdG8gYmUgYW4gYWJzb2x1dGUgVVJMLiBSZXR1cm4gbnVsbCBpZiBpdCBpc24ndC4K
LSAgICBpZiAoIWJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSkKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0KLSAgICAvLyBBIFVSTCB0aGF0IHN0YXJ0cyB3aXRoICIvLyIgaXMgYSBmdWxsIFVSTCB3aXRo
b3V0IHRoZSBzY2hlbWUuIFVzZSB0aGUgYmFzZSBVUkwgc2NoZW1lLgotICAgIGlmIChwYXJ0aWFs
VVJMWzBdID09PSAiLyIgJiYgcGFydGlhbFVSTFsxXSA9PT0gIi8iKQotICAgICAgICByZXR1cm4g
YmFzZVVSTENvbXBvbmVudHMuc2NoZW1lICsgIjoiICsgcGFydGlhbFVSTDsKLQotICAgIC8vIFRo
ZSBwYXRoIGNhbiBiZSBudWxsIGZvciBVUkxzIHRoYXQgaGF2ZSBqdXN0IGEgc2NoZW1lIGFuZCBo
b3N0IChsaWtlICJodHRwOi8vYXBwbGUuY29tIikuIFNvIG1ha2UgdGhlIHBhdGggYmUgIi8iLgot
ICAgIGlmICghYmFzZVVSTENvbXBvbmVudHMucGF0aCkKLSAgICAgICAgYmFzZVVSTENvbXBvbmVu
dHMucGF0aCA9ICIvIjsKLQotICAgIC8vIEdlbmVyYXRlIHRoZSBiYXNlIFVSTCBwcmVmaXggdGhh
dCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjYXNlcy4KLSAgICB2YXIgYmFzZVVSTFByZWZp
eCA9IGJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSArICI6Ly8iICsgYmFzZVVSTENvbXBvbmVudHMu
aG9zdCArIChiYXNlVVJMQ29tcG9uZW50cy5wb3J0ID8gKCI6IiArIGJhc2VVUkxDb21wb25lbnRz
LnBvcnQpIDogIiIpOwotCi0gICAgLy8gQSBVUkwgdGhhdCBzdGFydHMgd2l0aCAiPyIgaXMganVz
dCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGdldHMgYXBwbGllZCB0byB0aGUgYmFzZSBVUkwgKHJlcGxh
Y2luZyB0aGUgYmFzZSBVUkwgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVudCkuCi0gICAgaWYgKHBh
cnRpYWxVUkxbMF0gPT09ICI/IikKLSAgICAgICAgcmV0dXJuIGJhc2VVUkxQcmVmaXggKyBiYXNl
VVJMQ29tcG9uZW50cy5wYXRoICsgcGFydGlhbFVSTDsKLQotICAgIC8vIEEgVVJMIHRoYXQgc3Rh
cnRzIHdpdGggIi8iIGlzIGFuIGFic29sdXRlIHBhdGggdGhhdCBnZXRzIGFwcGxpZWQgdG8gdGhl
IGJhc2UgVVJMIChyZXBsYWNpbmcgdGhlIGJhc2UgVVJMIHBhdGgsIHF1ZXJ5IHN0cmluZyBhbmQg
ZnJhZ21lbnQpLgotICAgIGlmIChwYXJ0aWFsVVJMWzBdID09PSAiLyIpCi0gICAgICAgIHJldHVy
biBiYXNlVVJMUHJlZml4ICsgcmVzb2x2ZURvdHNJblBhdGgocGFydGlhbFVSTCk7Ci0KLSAgICAv
LyBHZW5lcmF0ZSB0aGUgYmFzZSBwYXRoIHRoYXQgaXMgdXNlZCBpbiB0aGUgZmluYWwgY2FzZSBi
eSByZW1vdmluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0ICIvIiBmcm9tIHRoZSBiYXNlIFVS
TCdzIHBhdGguCi0gICAgdmFyIGJhc2VQYXRoID0gYmFzZVVSTENvbXBvbmVudHMucGF0aC5zdWJz
dHJpbmcoMCwgYmFzZVVSTENvbXBvbmVudHMucGF0aC5sYXN0SW5kZXhPZigiLyIpKSArICIvIjsK
LSAgICByZXR1cm4gYmFzZVVSTFByZWZpeCArIHJlc29sdmVEb3RzSW5QYXRoKGJhc2VQYXRoICsg
cGFydGlhbFVSTCk7Ci19Ci0KIGZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUoZnVsbE1pbWVUeXBlKQog
ewogICAgIGlmICghZnVsbE1pbWVUeXBlKQpAQCAtMTE5MCwzNyArMTA3MywzIEBAIGZ1bmN0aW9u
IHNpbXBsZUdsb2JTdHJpbmdUb1JlZ0V4cChnbG9iU3RyaW5nLCByZWdFeHBGbGFncykKIAogICAg
IHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4U3RyaW5nLCByZWdFeHBGbGFncyk7CiB9Ci0KLWZ1bmN0
aW9uIHBhcnNlTG9jYXRpb25RdWVyeVBhcmFtZXRlcnMoYXJyYXlSZXN1bHQpCi17Ci0gICAgLy8g
VGhlIGZpcnN0IGNoYXJhY3RlciBpcyBhbHdheXMgdGhlICI/Ii4KLSAgICByZXR1cm4gcGFyc2VR
dWVyeVN0cmluZyh3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKSwgYXJyYXlSZXN1
bHQpOwotfQotCi1mdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nLCBhcnJheVJl
c3VsdCkKLXsKLSAgICBpZiAoIXF1ZXJ5U3RyaW5nKQotICAgICAgICByZXR1cm4gYXJyYXlSZXN1
bHQgPyBbXSA6IHt9OwotCi0gICAgZnVuY3Rpb24gZGVjb2RlKHN0cmluZykKLSAgICB7Ci0gICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBSZXBsYWNlICIrIiB3aXRoICIgIiB0aGVuIGRlY29k
ZSBwcmVjZW50IGVuY29kZWQgdmFsdWVzLgotICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNv
bXBvbmVudChzdHJpbmcucmVwbGFjZSgvXCsvZywgIiAiKSk7Ci0gICAgICAgIH0gY2F0Y2ggKGUp
IHsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
YXIgcGFyYW1ldGVycyA9IGFycmF5UmVzdWx0ID8gW10gOiB7fTsKLSAgICB2YXIgcGFyYW1ldGVy
U3RyaW5ncyA9IHF1ZXJ5U3RyaW5nLnNwbGl0KCImIik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJTdHJpbmdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBwYWlyID0gcGFy
YW1ldGVyU3RyaW5nc1tpXS5zcGxpdCgiPSIpLm1hcChkZWNvZGUpOwotICAgICAgICBpZiAoYXJy
YXlSZXN1bHQpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe25hbWU6IHBhaXJbMF0sIHZh
bHVlOiBwYWlyWzFdfSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcmFtZXRlcnNbcGFp
clswXV0gPSBwYWlyWzFdOwotICAgIH0KLQotICAgIHJldHVybiBwYXJhbWV0ZXJzOwotfQo=
</data>
<flag name="review"
          id="237642"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215074</attachid>
            <date>2013-10-24 09:37:48 -0700</date>
            <delta_ts>2013-10-24 10:06:41 -0700</delta_ts>
            <desc>Patch V3</desc>
            <filename>bug123223_v3.patch</filename>
            <type>text/plain</type>
            <size>25462</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YjYxYTExLi41MjFiMzFhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMTAt
MjQgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IEFkZCBhIHdheSB0byB0ZXN0IHRoZSBNYW5hZ2VyIGFuZCBtb2RlbCBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMy
MjMKKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisKKyAgICAgICAgQWRk
ZWQgdGhlIGZpcnN0IG5ldyBXZWJJbnNwZWN0b3IgbGF5b3V0IHRlc3QgZmlsZS4gVGhlIHRlc3Qg
aXMgdXNpbmcgSW5zcGVjdG9yVGVzdC5pbXBvcnRJbnNwZWN0b3JTY3JpcHRzCisgICAgICAgIHRv
IGJvb3RzdHJhcCBzb21lIG9mIHRoZSBtYW5hZ2Vycy9vYnNlcnZlcnMvbW9kZWxzIGZyb20gdGhl
IG5ldyBXZWJJbnNwZWN0b3IuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90
b2NvbC9yZXNvdXJjZXMvSW5zcGVjdG9yVGVzdC5qczoKKyAgICAgICAgKEluc3BlY3RvclRlc3Qu
aW1wb3J0U2NyaXB0KToKKyAgICAgICAgKEluc3BlY3RvclRlc3QuaW1wb3J0SW5zcGVjdG9yU2Ny
aXB0cyk6CisgICAgICAgICogaW5zcGVjdG9yLXByb3RvY29sL21vZGVsL21haW4tZnJhbWUtcmVz
b3VyY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3ItcHJvdG9jb2wv
bW9kZWwvbWFpbi1mcmFtZS1yZXNvdXJjZS5odG1sOiBBZGRlZC4KKwogMjAxMy0xMC0yMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIEdyYW1tYXIg
bWFya2VycyBhcmUgbm90IHVwZGF0ZWQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiAxeCBhbmQgMngK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL3Jl
c291cmNlcy9JbnNwZWN0b3JUZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3ItcHJvdG9jb2wvcmVzb3VyY2VzL0luc3BlY3RvclRlc3QuanMKaW5kZXggZTBiODJhNS4uZjQ5
NjM2NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9j
b2wvcmVzb3VyY2VzL0luc3BlY3RvclRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL0luc3BlY3RvclRlc3QuanMKQEAgLTEwNiw5
ICsxMDYsNjIgQEAgSW5zcGVjdG9yVGVzdC5pbXBvcnRTY3JpcHQgPSBmdW5jdGlvbihzY3JpcHRO
YW1lKQogICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICB4aHIub3Blbigi
R0VUIiwgc2NyaXB0TmFtZSwgZmFsc2UpOwogICAgIHhoci5zZW5kKG51bGwpOwotICAgIHdpbmRv
dy5ldmFsKHhoci5yZXNwb25zZVRleHQpOworICAgIGlmICh4aHIuc3RhdHVzICE9PSAwICYmIHho
ci5zdGF0dXMgIT09IDIwMCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjcmlw
dCBVUkw6ICIgKyBzY3JpcHROYW1lKTsKKyAgICB2YXIgc2NyaXB0ID0gInRyeSB7ICIgKyB4aHIu
cmVzcG9uc2VUZXh0ICsgIn0gY2F0Y2ggKGUpIHsgYWxlcnQoIiArIEpTT04uc3RyaW5naWZ5KCJF
cnJvciBpbjogIiArIHNjcmlwdE5hbWUpICsgIik7IHRocm93IGU7IH0iOworICAgIHdpbmRvdy5l
dmFsKHNjcmlwdCk7CiB9CiAKK0luc3BlY3RvclRlc3QuaW1wb3J0SW5zcGVjdG9yU2NyaXB0cyA9
IGZ1bmN0aW9uKCkKK3sKKyAgICAvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG92ZXJ3cml0ZXMgdGhl
IEluc3BlY3RvckZyb250ZW5kQVBJLCBzbyB0aGVyZSdzIGN1cnJlbnRseSBubworICAgIC8vIHdh
eSB0byBpbnRlcmNlcHQgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIGJhY2tlbmQuCisKKyAgICB2YXIg
aW5zcGVjdG9yU2NyaXB0cyA9IFsKKyAgICAgICAgIlV0aWxpdGllcyIsCisgICAgICAgICJXZWJJ
bnNwZWN0b3IiLAorICAgICAgICAiT2JqZWN0IiwKKyAgICAgICAgIkluc3BlY3RvckJhY2tlbmQi
LAorICAgICAgICAiSW5zcGVjdG9yRnJvbnRlbmRBUEkiLAorICAgICAgICAiSW5zcGVjdG9yRnJv
bnRlbmRIb3N0U3R1YiIsCisgICAgICAgICJJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMiLAorICAg
ICAgICAiVVJMVXRpbGl0aWVzIiwKKyAgICAgICAgIk1lc3NhZ2VEaXNwYXRjaGVyIiwKKyAgICAg
ICAgIlNldHRpbmciLAorICAgICAgICAiUGFnZU9ic2VydmVyIiwKKyAgICAgICAgIkRPTU9ic2Vy
dmVyIiwKKyAgICAgICAgIkZyYW1lUmVzb3VyY2VNYW5hZ2VyIiwKKyAgICAgICAgIlJ1bnRpbWVN
YW5hZ2VyIiwKKyAgICAgICAgIkZyYW1lIiwKKyAgICAgICAgIlJldmlzaW9uIiwKKyAgICAgICAg
IlNvdXJjZUNvZGVSZXZpc2lvbiIsCisgICAgICAgICJTb3VyY2VDb2RlIiwKKyAgICAgICAgIlJl
c291cmNlIiwKKyAgICAgICAgIlJlc291cmNlQ29sbGVjdGlvbiIsCisgICAgICAgICJET01UcmVl
TWFuYWdlciIsCisgICAgICAgICJET01Ob2RlIiwKKyAgICAgICAgIkNvbnRlbnRGbG93IiwKKyAg
ICAgICAgIkRPTVRyZWUiLAorICAgICAgICAiRXhlY3V0aW9uQ29udGV4dCIsCisgICAgICAgICJF
eGVjdXRpb25Db250ZXh0TGlzdCIKKyAgICBdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5z
cGVjdG9yU2NyaXB0cy5sZW5ndGg7ICsraSkKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5pbXBvcnRT
Y3JpcHQoIi4uLy4uLy4uLy4uLy4uL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
LyIgKyBpbnNwZWN0b3JTY3JpcHRzW2ldICsgIi5qcyIpOworCisgICAgLy8gVGhlIGluaXRpYWxp
emF0aW9uIHNob3VsZCBiZSBpbiBzeW5jIHdpdGggV2ViSW5zcGVjdG9yLmxvYWRlZCBpbiBNYWlu
LmpzLgorICAgIC8vIEZJWE1FOiBBcyBzb29uIGFzIHdlIGNhbiBzdXBwb3J0IGFsbCB0aGUgb2Jz
ZXJ2ZXJzIGFuZCBtYW5hZ2VycyB3ZSBzaG91bGQgcmVtb3ZlIFVJIHJlbGF0ZWQgdGFza3MgCisg
ICAgLy8gZnJvbSBXZWJJbnNwZWN0b3IubG9hZGVkLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGZy
b20gdGhlIExheW91dFRlc3RzLgorCisgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclBhZ2VE
aXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuUGFnZU9ic2VydmVyKTsKKyAgICBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRE9NRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkRPTU9ic2VydmVy
KTsKKworICAgIFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNlTWFuYWdlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuRnJhbWVSZXNvdXJjZU1hbmFnZXI7CisgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5h
Z2VyID0gbmV3IFdlYkluc3BlY3Rvci5ET01UcmVlTWFuYWdlcjsKKworICAgIEluc3BlY3RvckZy
b250ZW5kSG9zdC5sb2FkZWQoKTsKK30KKworCiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVz
c2FnZSIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgdHJ5IHsKICAgICAgICAgZXZhbChldmVudC5k
YXRhKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9t
YWluLWZyYW1lLXJlc291cmNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1w
cm90b2NvbC9tb2RlbC9tYWluLWZyYW1lLXJlc291cmNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTEzNGJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL21vZGVsL21haW4tZnJhbWUtcmVzb3VyY2UtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorVGVzdGluZyB0aGF0IHRoZSBpbnNwZWN0b3Igc2Ny
aXB0cyBhcmUgbG9hZGVkIGFuZCB0aGUgbWFpbiBmcmFtZSBVUkwgY2FuIGJlIHJlY2VpdmVkLgor
CitNYWluIGZyYW1lOiBtYWluLWZyYW1lLXJlc291cmNlLmh0bWwKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL21vZGVsL21haW4tZnJhbWUtcmVzb3VyY2UuaHRt
bCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9tYWluLWZyYW1lLXJlc291
cmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxMTM3OQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9tb2RlbC9tYWlu
LWZyYW1lLXJlc291cmNlLmh0bWwKQEAgLTAsMCArMSwyMSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4v
aHR0cC90ZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvcmVzb3VyY2VzL3Byb3RvY29sLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIEluc3BlY3RvclRl
c3QuaW1wb3J0SW5zcGVjdG9yU2NyaXB0cygpOworCisgICAgV2ViSW5zcGVjdG9yLmZyYW1lUmVz
b3VyY2VNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VN
YW5hZ2VyLkV2ZW50Lk1haW5GcmFtZURpZENoYW5nZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAg
ICAgdmFyIHVybCA9IFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWUu
dXJsOworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiTWFpbiBmcmFtZTogIiArIHVybC5zdWJz
dHJpbmcodXJsLmxhc3RJbmRleE9mKCIvIikgKyAxKSk7CisgICAgICAgIEluc3BlY3RvclRlc3Qu
Y29tcGxldGVUZXN0KCk7CisgICAgfSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9u
bG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5UZXN0aW5nIHRoYXQgdGhlIGluc3BlY3RvciBzY3Jp
cHRzIGFyZSBsb2FkZWQgYW5kIHRoZSBtYWluIGZyYW1lIFVSTCBjYW4gYmUgcmVjZWl2ZWQuPC9w
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggYmQ0ZGJhOC4u
MTMxNGViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTMt
MTAtMjQgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEFkZCBhIHdheSB0byB0ZXN0IHRoZSBNYW5hZ2VyIGFuZCBtb2RlbCBj
bGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjMyMjMKKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisKKyAgICAgICAg
TW92ZWQgc29tZSBnbG9iYWwgZnVuY3Rpb25zIG91dCBvZiBNYWluLmpzLCBzbyB0aGF0IHRoZXkg
Y2FuIGJlIHVzZWQgaW4gdGhlIAorICAgICAgICBsYXlvdXQgdGVzdHMgd2l0aG91dCBpbmNsdWRp
bmcgTWFpbi5qcy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBSZWZlcmVu
Y2VkIHRoZSBuZXcgSlMgZmlsZXMuCisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmpzOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWVzc2FnZURpc3BhdGNoZXIuanM6IEFkZGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLmRpc3BhdGNoTmV4dFF1ZXVlZE1lc3NhZ2VGcm9tQmFja2VuZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuZGlzcGF0Y2hNZXNzYWdlRnJvbUJhY2tlbmQpOgorICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvVVJMVXRpbGl0aWVzLmpzOiBBZGRlZC4KKyAgICAgICAgKHJl
bW92ZVVSTEZyYWdtZW50KToKKyAgICAgICAgKHJlbGF0aXZlUGF0aCk6CisgICAgICAgIChwYXJz
ZVVSTCk6CisgICAgICAgIChhYnNvbHV0ZVVSTCk6CisgICAgICAgIChwYXJzZUxvY2F0aW9uUXVl
cnlQYXJhbWV0ZXJzKToKKyAgICAgICAgKHBhcnNlUXVlcnlTdHJpbmcpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kaXNw
bGF5TmFtZUZvckhvc3QpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVXRpbGl0aWVzLmpzOgor
CiAyMDEzLTEwLTIxICBBbGV4YW5kcnUgQ2hpY3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ1NTIFJlZ2lvbnNdIEZsb3dzIGFyZSBub3QgbG9hZGlu
ZyBpZiB5b3UgcmVmcmVzaCB0aGUgcGFnZSBzZXZlcmFsIHRpbWVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggYWU5MTEzNS4uODY2ZmFkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApAQCAt
MTQzLDYgKzE0Myw4IEBACiAKICAgICA8c2NyaXB0IHNyYz0iVXRpbGl0aWVzLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iV2ViSW5zcGVjdG9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iVVJMVXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTWVz
c2FnZURpc3BhdGNoZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJPYmplY3QuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJD
b250cm9sbGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29kZU1pcnJvckFkZGl0
aW9ucy5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TWFpbi5qcwppbmRleCAyNzc4NmE4Li4xNTJmNjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01haW4uanMKQEAgLTMxMSwzMSArMzExLDYgQEAgV2ViSW5zcGVjdG9y
LmNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgIHRoaXMuc2hvd1NwbGl0Q29uc29s
ZSgpOwogfQogCi1XZWJJbnNwZWN0b3IubWVzc2FnZXNUb0Rpc3BhdGNoID0gW107Ci0KLVdlYklu
c3BlY3Rvci5kaXNwYXRjaE5leHRRdWV1ZWRNZXNzYWdlRnJvbUJhY2tlbmQgPSBmdW5jdGlvbigp
Ci17Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1lc3NhZ2VzVG9EaXNwYXRjaC5sZW5n
dGg7ICsraSkKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaCh0aGlzLm1lc3NhZ2Vz
VG9EaXNwYXRjaFtpXSk7Ci0KLSAgICB0aGlzLm1lc3NhZ2VzVG9EaXNwYXRjaCA9IFtdOwotCi0g
ICAgdGhpcy5fZGlzcGF0Y2hUaW1lb3V0ID0gbnVsbDsKLX0KLQotV2ViSW5zcGVjdG9yLmRpc3Bh
dGNoTWVzc2FnZUZyb21CYWNrZW5kID0gZnVuY3Rpb24obWVzc2FnZSkKLXsKLSAgICAvLyBFbmZv
cmNlIGFzeW5jaHJvbm91cyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBiYWNrZW5kIGFuZCB0aGUg
ZnJvbnRlbmQgYnkgcXVldWVpbmcgbWVzc2FnZXMuCi0gICAgLy8gVGhlIG1lc3NhZ2VzIGFyZSBk
ZXF1ZXVlZCBvbiBhIHplcm8gZGVsYXkgdGltZW91dC4KLQotICAgIHRoaXMubWVzc2FnZXNUb0Rp
c3BhdGNoLnB1c2gobWVzc2FnZSk7Ci0KLSAgICBpZiAodGhpcy5fZGlzcGF0Y2hUaW1lb3V0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB0aGlzLl9kaXNwYXRjaFRpbWVvdXQgPSBzZXRUaW1lb3V0
KHRoaXMuZGlzcGF0Y2hOZXh0UXVldWVkTWVzc2FnZUZyb21CYWNrZW5kLmJpbmQodGhpcyksIDAp
OwotfQotCiBXZWJJbnNwZWN0b3Iuc2lkZWJhclBhbmVsRm9yQ3VycmVudENvbnRlbnRWaWV3ID0g
ZnVuY3Rpb24oKQogewogICAgIHZhciBjdXJyZW50Q29udGVudFZpZXcgPSB0aGlzLmNvbnRlbnRC
cm93c2VyLmN1cnJlbnRDb250ZW50VmlldzsKQEAgLTM3OCwyNyArMzUzLDYgQEAgV2ViSW5zcGVj
dG9yLmNvbnRlbnRCcm93c2VyVHJlZUVsZW1lbnRGb3JSZXByZXNlbnRlZE9iamVjdCA9IGZ1bmN0
aW9uKGNvbnRlbnRCcm8KICAgICByZXR1cm4gbnVsbDsKIH0KIAotV2ViSW5zcGVjdG9yLmRpc3Bs
YXlOYW1lRm9yVVJMID0gZnVuY3Rpb24odXJsLCB1cmxDb21wb25lbnRzKQotewotICAgIGlmICgh
dXJsQ29tcG9uZW50cykKLSAgICAgICAgdXJsQ29tcG9uZW50cyA9IHBhcnNlVVJMKHVybCk7Ci0K
LSAgICB2YXIgZGlzcGxheU5hbWU7Ci0gICAgdHJ5IHsKLSAgICAgICAgZGlzcGxheU5hbWUgPSBk
ZWNvZGVVUklDb21wb25lbnQodXJsQ29tcG9uZW50cy5sYXN0UGF0aENvbXBvbmVudCB8fCAiIik7
Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBkaXNwbGF5TmFtZSA9IHVybENvbXBvbmVudHMu
bGFzdFBhdGhDb21wb25lbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXlOYW1lIHx8IFdl
Ykluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhvc3QodXJsQ29tcG9uZW50cy5ob3N0KSB8fCB1cmw7
Ci19Ci0KLVdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvckhvc3QgPSBmdW5jdGlvbihob3N0KQot
ewotICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMTIzNzQxMz46IFRoaXMgc2hvdWxkIGRl
Y29kZSBwdW55Y29kZSBob3N0bmFtZXMuCi0gICAgcmV0dXJuIGhvc3Q7Ci19Ci0KIFdlYkluc3Bl
Y3Rvci51cGRhdGVXaW5kb3dUaXRsZSA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgbWFpbkZyYW1l
ID0gdGhpcy5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NZXNzYWdlRGlzcGF0Y2hlci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01lc3NhZ2VEaXNwYXRjaGVyLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OTc0YWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NZXNzYWdlRGlzcGF0Y2hl
ci5qcwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLm1lc3NhZ2Vz
VG9EaXNwYXRjaCA9IFtdOworCitXZWJJbnNwZWN0b3IuZGlzcGF0Y2hOZXh0UXVldWVkTWVzc2Fn
ZUZyb21CYWNrZW5kID0gZnVuY3Rpb24oKQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5tZXNzYWdlc1RvRGlzcGF0Y2gubGVuZ3RoOyArK2kpCisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZGlzcGF0Y2godGhpcy5tZXNzYWdlc1RvRGlzcGF0Y2hbaV0pOworCisgICAgdGhpcy5tZXNz
YWdlc1RvRGlzcGF0Y2ggPSBbXTsKKworICAgIHRoaXMuX2Rpc3BhdGNoVGltZW91dCA9IG51bGw7
Cit9CisKK1dlYkluc3BlY3Rvci5kaXNwYXRjaE1lc3NhZ2VGcm9tQmFja2VuZCA9IGZ1bmN0aW9u
KG1lc3NhZ2UpCit7CisgICAgLy8gRW5mb3JjZSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb24gYmV0
d2VlbiB0aGUgYmFja2VuZCBhbmQgdGhlIGZyb250ZW5kIGJ5IHF1ZXVlaW5nIG1lc3NhZ2VzLgor
ICAgIC8vIFRoZSBtZXNzYWdlcyBhcmUgZGVxdWV1ZWQgb24gYSB6ZXJvIGRlbGF5IHRpbWVvdXQu
CisKKyAgICB0aGlzLm1lc3NhZ2VzVG9EaXNwYXRjaC5wdXNoKG1lc3NhZ2UpOworCisgICAgaWYg
KHRoaXMuX2Rpc3BhdGNoVGltZW91dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGhpcy5fZGlz
cGF0Y2hUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLmRpc3BhdGNoTmV4dFF1ZXVlZE1lc3NhZ2VG
cm9tQmFja2VuZC5iaW5kKHRoaXMpLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1VSTFV0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1VSTFV0aWxpdGllcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZDVhY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVVJMVXRpbGl0aWVzLmpzCkBAIC0wLDAgKzEsMTk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworZnVuY3Rpb24gcmVtb3ZlVVJMRnJhZ21lbnQodXJsKQoreworICAgIHZhciBo
YXNoSW5kZXggPSB1cmwuaW5kZXhPZigiIyIpOworICAgIGlmIChoYXNoSW5kZXggPj0gMCkKKyAg
ICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoMCwgaGFzaEluZGV4KTsKKyAgICByZXR1cm4gdXJs
OworfQorCitmdW5jdGlvbiByZWxhdGl2ZVBhdGgocGF0aCwgYmFzZVBhdGgpCit7CisgICAgY29u
c29sZS5hc3NlcnQocGF0aC5jaGFyQXQoMCkgPT09ICIvIik7CisgICAgY29uc29sZS5hc3NlcnQo
YmFzZVBhdGguY2hhckF0KDApID09PSAiLyIpOworICAgIAorICAgIHZhciBwYXRoQ29tcG9uZW50
cyA9IHBhdGguc3BsaXQoIi8iKTsKKyAgICB2YXIgYmFzZUNvbXBvbmVudHMgPSBiYXNlUGF0aC5y
ZXBsYWNlKC9cLyQvLCAiIikuc3BsaXQoIi8iKTsKKyAgICB2YXIgZmluYWxDb21wb25lbnRzID0g
W107CisKKyAgICB2YXIgaW5kZXggPSAxOworICAgIGZvciAoOyBpbmRleCA8IHBhdGhDb21wb25l
bnRzLmxlbmd0aCAmJiBpbmRleCA8IGJhc2VDb21wb25lbnRzLmxlbmd0aDsgKytpbmRleCkgewor
ICAgICAgICBpZiAocGF0aENvbXBvbmVudHNbaW5kZXhdICE9PSBiYXNlQ29tcG9uZW50c1tpbmRl
eF0pCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmb3IgKHZhciBpID0gaW5kZXg7
IGkgPCBiYXNlQ29tcG9uZW50cy5sZW5ndGg7ICsraSkKKyAgICAgICAgZmluYWxDb21wb25lbnRz
LnB1c2goIi4uIik7CisKKyAgICBmb3IgKHZhciBpID0gaW5kZXg7IGkgPCBwYXRoQ29tcG9uZW50
cy5sZW5ndGg7ICsraSkKKyAgICAgICAgZmluYWxDb21wb25lbnRzLnB1c2gocGF0aENvbXBvbmVu
dHNbaV0pOworCisgICAgcmV0dXJuIGZpbmFsQ29tcG9uZW50cy5qb2luKCIvIik7Cit9CisKK2Z1
bmN0aW9uIHBhcnNlVVJMKHVybCkKK3sKKyAgICB1cmwgPSB1cmwgPyB1cmwudHJpbSgpIDogIiI7
CisKKyAgICB2YXIgbWF0Y2ggPSB1cmwubWF0Y2goL14oW146XSspOlwvXC8oW15cLzpdKikoPzo6
KFtcZF0rKSk/KD86KFwvW14jXSopKD86IyguKikpPyk/JC9pKTsKKyAgICBpZiAoIW1hdGNoKQor
ICAgICAgICByZXR1cm4ge3NjaGVtZTogbnVsbCwgaG9zdDogbnVsbCwgcG9ydDogbnVsbCwgcGF0
aDogbnVsbCwgcXVlcnlTdHJpbmc6IG51bGwsIGZyYWdtZW50OiBudWxsLCBsYXN0UGF0aENvbXBv
bmVudDogbnVsbH07CisKKyAgICB2YXIgc2NoZW1lID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTsK
KyAgICB2YXIgaG9zdCA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7CisgICAgdmFyIHBvcnQgPSBO
dW1iZXIobWF0Y2hbM10pIHx8IG51bGw7CisgICAgdmFyIHdob2xlUGF0aCA9IG1hdGNoWzRdIHx8
IG51bGw7CisgICAgdmFyIGZyYWdtZW50ID0gbWF0Y2hbNV0gfHwgbnVsbDsKKyAgICB2YXIgcGF0
aCA9IHdob2xlUGF0aDsKKyAgICB2YXIgcXVlcnlTdHJpbmcgPSBudWxsOworCisgICAgLy8gU3Bs
aXQgdGhlIHBhdGggYW5kIHRoZSBxdWVyeSBzdHJpbmcuCisgICAgaWYgKHdob2xlUGF0aCkgewor
ICAgICAgICB2YXIgaW5kZXhPZlF1ZXJ5ID0gd2hvbGVQYXRoLmluZGV4T2YoIj8iKTsKKyAgICAg
ICAgaWYgKGluZGV4T2ZRdWVyeSAhPT0gLTEpIHsKKyAgICAgICAgICAgIHBhdGggPSB3aG9sZVBh
dGguc3Vic3RyaW5nKDAsIGluZGV4T2ZRdWVyeSk7CisgICAgICAgICAgICBxdWVyeVN0cmluZyA9
IHdob2xlUGF0aC5zdWJzdHJpbmcoaW5kZXhPZlF1ZXJ5ICsgMSk7CisgICAgICAgIH0KKyAgICAg
ICAgcGF0aCA9IHJlc29sdmVEb3RzSW5QYXRoKHBhdGgpOworICAgIH0KKworICAgIC8vIEZpbmQg
bGFzdCBwYXRoIGNvbXBvbmVudC4KKyAgICB2YXIgbGFzdFBhdGhDb21wb25lbnQgPSBudWxsOwor
ICAgIGlmIChwYXRoICYmIHBhdGggIT09ICIvIikgeworICAgICAgICAvLyBTa2lwIHRoZSB0cmFp
bGluZyBzbGFzaCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgIHZhciBlbmRPZmZzZXQgPSBwYXRo
W3BhdGgubGVuZ3RoIC0gMV0gPT09ICIvIiA/IDEgOiAwOworICAgICAgICB2YXIgbGFzdFNsYXNo
SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCIvIiwgcGF0aC5sZW5ndGggLSAxIC0gZW5kT2Zmc2V0
KTsKKyAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ICE9PSAtMSkKKyAgICAgICAgICAgIGxhc3RQ
YXRoQ29tcG9uZW50ID0gcGF0aC5zdWJzdHJpbmcobGFzdFNsYXNoSW5kZXggKyAxLCBwYXRoLmxl
bmd0aCAtIGVuZE9mZnNldCk7CisgICAgfQorCisgICAgcmV0dXJuIHtzY2hlbWU6IHNjaGVtZSwg
aG9zdDogaG9zdCwgcG9ydDogcG9ydCwgcGF0aDogcGF0aCwgcXVlcnlTdHJpbmc6IHF1ZXJ5U3Ry
aW5nLCBmcmFnbWVudDogZnJhZ21lbnQsIGxhc3RQYXRoQ29tcG9uZW50OiBsYXN0UGF0aENvbXBv
bmVudH07Cit9CisKK2Z1bmN0aW9uIGFic29sdXRlVVJMKHBhcnRpYWxVUkwsIGJhc2VVUkwpCit7
CisgICAgcGFydGlhbFVSTCA9IHBhcnRpYWxVUkwgPyBwYXJ0aWFsVVJMLnRyaW0oKSA6ICIiOwor
CisgICAgLy8gUmV0dXJuIGRhdGEgYW5kIGphdmFzY3JpcHQgVVJMcyBhcy1pcy4KKyAgICBpZiAo
cGFydGlhbFVSTC5zdGFydHNXaXRoKCJkYXRhOiIpIHx8IHBhcnRpYWxVUkwuc3RhcnRzV2l0aCgi
amF2YXNjcmlwdDoiKSB8fCBwYXJ0aWFsVVJMLnN0YXJ0c1dpdGgoIm1haWx0bzoiKSkKKyAgICAg
ICAgcmV0dXJuIHBhcnRpYWxVUkw7CisKKyAgICAvLyBJZiB0aGUgVVJMIGhhcyBhIHNjaGVtZSBp
dCBpcyBhbHJlYWR5IGEgZnVsbCBVUkwsIHNvIHJldHVybiBpdC4KKyAgICBpZiAocGFyc2VVUkwo
cGFydGlhbFVSTCkuc2NoZW1lKQorICAgICAgICByZXR1cm4gcGFydGlhbFVSTDsKKworICAgIC8v
IElmIHRoZXJlIGlzIG5vIHBhcnRpYWwgVVJMLCBqdXN0IHJldHVybiB0aGUgYmFzZSBVUkwuCisg
ICAgaWYgKCFwYXJ0aWFsVVJMKQorICAgICAgICByZXR1cm4gYmFzZVVSTCB8fCBudWxsOworCisg
ICAgdmFyIGJhc2VVUkxDb21wb25lbnRzID0gcGFyc2VVUkwoYmFzZVVSTCk7CisKKyAgICAvLyBU
aGUgYmFzZSBVUkwgbmVlZHMgdG8gYmUgYW4gYWJzb2x1dGUgVVJMLiBSZXR1cm4gbnVsbCBpZiBp
dCBpc24ndC4KKyAgICBpZiAoIWJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSkKKyAgICAgICAgcmV0
dXJuIG51bGw7CisKKyAgICAvLyBBIFVSTCB0aGF0IHN0YXJ0cyB3aXRoICIvLyIgaXMgYSBmdWxs
IFVSTCB3aXRob3V0IHRoZSBzY2hlbWUuIFVzZSB0aGUgYmFzZSBVUkwgc2NoZW1lLgorICAgIGlm
IChwYXJ0aWFsVVJMWzBdID09PSAiLyIgJiYgcGFydGlhbFVSTFsxXSA9PT0gIi8iKQorICAgICAg
ICByZXR1cm4gYmFzZVVSTENvbXBvbmVudHMuc2NoZW1lICsgIjoiICsgcGFydGlhbFVSTDsKKwor
ICAgIC8vIFRoZSBwYXRoIGNhbiBiZSBudWxsIGZvciBVUkxzIHRoYXQgaGF2ZSBqdXN0IGEgc2No
ZW1lIGFuZCBob3N0IChsaWtlICJodHRwOi8vYXBwbGUuY29tIikuIFNvIG1ha2UgdGhlIHBhdGgg
YmUgIi8iLgorICAgIGlmICghYmFzZVVSTENvbXBvbmVudHMucGF0aCkKKyAgICAgICAgYmFzZVVS
TENvbXBvbmVudHMucGF0aCA9ICIvIjsKKworICAgIC8vIEdlbmVyYXRlIHRoZSBiYXNlIFVSTCBw
cmVmaXggdGhhdCBpcyB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBjYXNlcy4KKyAgICB2YXIgYmFz
ZVVSTFByZWZpeCA9IGJhc2VVUkxDb21wb25lbnRzLnNjaGVtZSArICI6Ly8iICsgYmFzZVVSTENv
bXBvbmVudHMuaG9zdCArIChiYXNlVVJMQ29tcG9uZW50cy5wb3J0ID8gKCI6IiArIGJhc2VVUkxD
b21wb25lbnRzLnBvcnQpIDogIiIpOworCisgICAgLy8gQSBVUkwgdGhhdCBzdGFydHMgd2l0aCAi
PyIgaXMganVzdCBhIHF1ZXJ5IHN0cmluZyB0aGF0IGdldHMgYXBwbGllZCB0byB0aGUgYmFzZSBV
UkwgKHJlcGxhY2luZyB0aGUgYmFzZSBVUkwgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVudCkuCisg
ICAgaWYgKHBhcnRpYWxVUkxbMF0gPT09ICI/IikKKyAgICAgICAgcmV0dXJuIGJhc2VVUkxQcmVm
aXggKyBiYXNlVVJMQ29tcG9uZW50cy5wYXRoICsgcGFydGlhbFVSTDsKKworICAgIC8vIEEgVVJM
IHRoYXQgc3RhcnRzIHdpdGggIi8iIGlzIGFuIGFic29sdXRlIHBhdGggdGhhdCBnZXRzIGFwcGxp
ZWQgdG8gdGhlIGJhc2UgVVJMIChyZXBsYWNpbmcgdGhlIGJhc2UgVVJMIHBhdGgsIHF1ZXJ5IHN0
cmluZyBhbmQgZnJhZ21lbnQpLgorICAgIGlmIChwYXJ0aWFsVVJMWzBdID09PSAiLyIpCisgICAg
ICAgIHJldHVybiBiYXNlVVJMUHJlZml4ICsgcmVzb2x2ZURvdHNJblBhdGgocGFydGlhbFVSTCk7
CisKKyAgICAvLyBHZW5lcmF0ZSB0aGUgYmFzZSBwYXRoIHRoYXQgaXMgdXNlZCBpbiB0aGUgZmlu
YWwgY2FzZSBieSByZW1vdmluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0ICIvIiBmcm9tIHRo
ZSBiYXNlIFVSTCdzIHBhdGguCisgICAgdmFyIGJhc2VQYXRoID0gYmFzZVVSTENvbXBvbmVudHMu
cGF0aC5zdWJzdHJpbmcoMCwgYmFzZVVSTENvbXBvbmVudHMucGF0aC5sYXN0SW5kZXhPZigiLyIp
KSArICIvIjsKKyAgICByZXR1cm4gYmFzZVVSTFByZWZpeCArIHJlc29sdmVEb3RzSW5QYXRoKGJh
c2VQYXRoICsgcGFydGlhbFVSTCk7Cit9CisKK2Z1bmN0aW9uIHBhcnNlTG9jYXRpb25RdWVyeVBh
cmFtZXRlcnMoYXJyYXlSZXN1bHQpCit7CisgICAgLy8gVGhlIGZpcnN0IGNoYXJhY3RlciBpcyBh
bHdheXMgdGhlICI/Ii4KKyAgICByZXR1cm4gcGFyc2VRdWVyeVN0cmluZyh3aW5kb3cubG9jYXRp
b24uc2VhcmNoLnN1YnN0cmluZygxKSwgYXJyYXlSZXN1bHQpOworfQorCitmdW5jdGlvbiBwYXJz
ZVF1ZXJ5U3RyaW5nKHF1ZXJ5U3RyaW5nLCBhcnJheVJlc3VsdCkKK3sKKyAgICBpZiAoIXF1ZXJ5
U3RyaW5nKQorICAgICAgICByZXR1cm4gYXJyYXlSZXN1bHQgPyBbXSA6IHt9OworCisgICAgZnVu
Y3Rpb24gZGVjb2RlKHN0cmluZykKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAv
LyBSZXBsYWNlICIrIiB3aXRoICIgIiB0aGVuIGRlY29kZSBwcmVjZW50IGVuY29kZWQgdmFsdWVz
LgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJpbmcucmVwbGFjZSgv
XCsvZywgIiAiKSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJldHVybiBz
dHJpbmc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgcGFyYW1ldGVycyA9IGFycmF5UmVz
dWx0ID8gW10gOiB7fTsKKyAgICB2YXIgcGFyYW1ldGVyU3RyaW5ncyA9IHF1ZXJ5U3RyaW5nLnNw
bGl0KCImIik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJTdHJpbmdzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgIHZhciBwYWlyID0gcGFyYW1ldGVyU3RyaW5nc1tpXS5zcGxpdCgi
PSIpLm1hcChkZWNvZGUpOworICAgICAgICBpZiAoYXJyYXlSZXN1bHQpCisgICAgICAgICAgICBw
YXJhbWV0ZXJzLnB1c2goe25hbWU6IHBhaXJbMF0sIHZhbHVlOiBwYWlyWzFdfSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBhcmFtZXRlcnNbcGFpclswXV0gPSBwYWlyWzFdOworICAgIH0K
KworICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCitXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVG
b3JVUkwgPSBmdW5jdGlvbih1cmwsIHVybENvbXBvbmVudHMpCit7CisgICAgaWYgKCF1cmxDb21w
b25lbnRzKQorICAgICAgICB1cmxDb21wb25lbnRzID0gcGFyc2VVUkwodXJsKTsKKworICAgIHZh
ciBkaXNwbGF5TmFtZTsKKyAgICB0cnkgeworICAgICAgICBkaXNwbGF5TmFtZSA9IGRlY29kZVVS
SUNvbXBvbmVudCh1cmxDb21wb25lbnRzLmxhc3RQYXRoQ29tcG9uZW50IHx8ICIiKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIGRpc3BsYXlOYW1lID0gdXJsQ29tcG9uZW50cy5sYXN0UGF0
aENvbXBvbmVudDsKKyAgICB9CisKKyAgICByZXR1cm4gZGlzcGxheU5hbWUgfHwgV2ViSW5zcGVj
dG9yLmRpc3BsYXlOYW1lRm9ySG9zdCh1cmxDb21wb25lbnRzLmhvc3QpIHx8IHVybDsKK30KKwor
V2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9ySG9zdCA9IGZ1bmN0aW9uKGhvc3QpCit7CisgICAg
Ly8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzExMjM3NDEzPjogVGhpcyBzaG91bGQgZGVjb2RlIHB1
bnljb2RlIGhvc3RuYW1lcy4KKyAgICByZXR1cm4gaG9zdDsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1V0aWxpdGllcy5qcwppbmRleCBkMWI2NTAyLi44YWVh
YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9VdGls
aXRpZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVXRpbGl0
aWVzLmpzCkBAIC05ODEsMzggKzk4MSw2IEBAIGZ1bmN0aW9uIGlzRW50ZXJLZXkoZXZlbnQpCiAg
ICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgIT09IDIyOSAmJiBldmVudC5rZXlJZGVudGlmaWVyID09
PSAiRW50ZXIiOwogfQogCi1mdW5jdGlvbiByZW1vdmVVUkxGcmFnbWVudCh1cmwpCi17Ci0gICAg
dmFyIGhhc2hJbmRleCA9IHVybC5pbmRleE9mKCIjIik7Ci0gICAgaWYgKGhhc2hJbmRleCA+PSAw
KQotICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZygwLCBoYXNoSW5kZXgpOwotICAgIHJldHVy
biB1cmw7Ci19Ci0KLWZ1bmN0aW9uIHJlbGF0aXZlUGF0aChwYXRoLCBiYXNlUGF0aCkKLXsKLSAg
ICBjb25zb2xlLmFzc2VydChwYXRoLmNoYXJBdCgwKSA9PT0gIi8iKTsKLSAgICBjb25zb2xlLmFz
c2VydChiYXNlUGF0aC5jaGFyQXQoMCkgPT09ICIvIik7Ci0gICAgCi0gICAgdmFyIHBhdGhDb21w
b25lbnRzID0gcGF0aC5zcGxpdCgiLyIpOwotICAgIHZhciBiYXNlQ29tcG9uZW50cyA9IGJhc2VQ
YXRoLnJlcGxhY2UoL1wvJC8sICIiKS5zcGxpdCgiLyIpOwotICAgIHZhciBmaW5hbENvbXBvbmVu
dHMgPSBbXTsKLQotICAgIHZhciBpbmRleCA9IDE7Ci0gICAgZm9yICg7IGluZGV4IDwgcGF0aENv
bXBvbmVudHMubGVuZ3RoICYmIGluZGV4IDwgYmFzZUNvbXBvbmVudHMubGVuZ3RoOyArK2luZGV4
KSB7Ci0gICAgICAgIGlmIChwYXRoQ29tcG9uZW50c1tpbmRleF0gIT09IGJhc2VDb21wb25lbnRz
W2luZGV4XSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGZvciAodmFyIGkgPSBp
bmRleDsgaSA8IGJhc2VDb21wb25lbnRzLmxlbmd0aDsgKytpKQotICAgICAgICBmaW5hbENvbXBv
bmVudHMucHVzaCgiLi4iKTsKLQotICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHBhdGhDb21w
b25lbnRzLmxlbmd0aDsgKytpKQotICAgICAgICBmaW5hbENvbXBvbmVudHMucHVzaChwYXRoQ29t
cG9uZW50c1tpXSk7Ci0KLSAgICByZXR1cm4gZmluYWxDb21wb25lbnRzLmpvaW4oIi8iKTsKLX0K
LQogZnVuY3Rpb24gcmVzb2x2ZURvdHNJblBhdGgocGF0aCkKIHsKICAgICBpZiAoIXBhdGgpCkBA
IC0xMDQ3LDkxICsxMDE1LDYgQEAgZnVuY3Rpb24gcmVzb2x2ZURvdHNJblBhdGgocGF0aCkKICAg
ICByZXR1cm4gcmVzdWx0LmpvaW4oIi8iKTsKIH0KIAotZnVuY3Rpb24gcGFyc2VVUkwodXJsKQot
ewotICAgIHVybCA9IHVybCA/IHVybC50cmltKCkgOiAiIjsKLQotICAgIHZhciBtYXRjaCA9IHVy
bC5tYXRjaCgvXihbXjpdKyk6XC9cLyhbXlwvOl0qKSg/OjooW1xkXSspKT8oPzooXC9bXiNdKiko
PzojKC4qKSk/KT8kL2kpOwotICAgIGlmICghbWF0Y2gpCi0gICAgICAgIHJldHVybiB7c2NoZW1l
OiBudWxsLCBob3N0OiBudWxsLCBwb3J0OiBudWxsLCBwYXRoOiBudWxsLCBxdWVyeVN0cmluZzog
bnVsbCwgZnJhZ21lbnQ6IG51bGwsIGxhc3RQYXRoQ29tcG9uZW50OiBudWxsfTsKLQotICAgIHZh
ciBzY2hlbWUgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOwotICAgIHZhciBob3N0ID0gbWF0Y2hb
Ml0udG9Mb3dlckNhc2UoKTsKLSAgICB2YXIgcG9ydCA9IE51bWJlcihtYXRjaFszXSkgfHwgbnVs
bDsKLSAgICB2YXIgd2hvbGVQYXRoID0gbWF0Y2hbNF0gfHwgbnVsbDsKLSAgICB2YXIgZnJhZ21l
bnQgPSBtYXRjaFs1XSB8fCBudWxsOwotICAgIHZhciBwYXRoID0gd2hvbGVQYXRoOwotICAgIHZh
ciBxdWVyeVN0cmluZyA9IG51bGw7Ci0KLSAgICAvLyBTcGxpdCB0aGUgcGF0aCBhbmQgdGhlIHF1
ZXJ5IHN0cmluZy4KLSAgICBpZiAod2hvbGVQYXRoKSB7Ci0gICAgICAgIHZhciBpbmRleE9mUXVl
cnkgPSB3aG9sZVBhdGguaW5kZXhPZigiPyIpOwotICAgICAgICBpZiAoaW5kZXhPZlF1ZXJ5ICE9
PSAtMSkgewotICAgICAgICAgICAgcGF0aCA9IHdob2xlUGF0aC5zdWJzdHJpbmcoMCwgaW5kZXhP
ZlF1ZXJ5KTsKLSAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gd2hvbGVQYXRoLnN1YnN0cmluZyhp
bmRleE9mUXVlcnkgKyAxKTsKLSAgICAgICAgfQotICAgICAgICBwYXRoID0gcmVzb2x2ZURvdHNJ
blBhdGgocGF0aCk7Ci0gICAgfQotCi0gICAgLy8gRmluZCBsYXN0IHBhdGggY29tcG9uZW50Lgot
ICAgIHZhciBsYXN0UGF0aENvbXBvbmVudCA9IG51bGw7Ci0gICAgaWYgKHBhdGggJiYgcGF0aCAh
PT0gIi8iKSB7Ci0gICAgICAgIC8vIFNraXAgdGhlIHRyYWlsaW5nIHNsYXNoIGlmIHRoZXJlIGlz
IG9uZS4KLSAgICAgICAgdmFyIGVuZE9mZnNldCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0g
Ii8iID8gMSA6IDA7Ci0gICAgICAgIHZhciBsYXN0U2xhc2hJbmRleCA9IHBhdGgubGFzdEluZGV4
T2YoIi8iLCBwYXRoLmxlbmd0aCAtIDEgLSBlbmRPZmZzZXQpOwotICAgICAgICBpZiAobGFzdFNs
YXNoSW5kZXggIT09IC0xKQotICAgICAgICAgICAgbGFzdFBhdGhDb21wb25lbnQgPSBwYXRoLnN1
YnN0cmluZyhsYXN0U2xhc2hJbmRleCArIDEsIHBhdGgubGVuZ3RoIC0gZW5kT2Zmc2V0KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4ge3NjaGVtZTogc2NoZW1lLCBob3N0OiBob3N0LCBwb3J0OiBwb3J0
LCBwYXRoOiBwYXRoLCBxdWVyeVN0cmluZzogcXVlcnlTdHJpbmcsIGZyYWdtZW50OiBmcmFnbWVu
dCwgbGFzdFBhdGhDb21wb25lbnQ6IGxhc3RQYXRoQ29tcG9uZW50fTsKLX0KLQotZnVuY3Rpb24g
YWJzb2x1dGVVUkwocGFydGlhbFVSTCwgYmFzZVVSTCkKLXsKLSAgICBwYXJ0aWFsVVJMID0gcGFy
dGlhbFVSTCA/IHBhcnRpYWxVUkwudHJpbSgpIDogIiI7Ci0KLSAgICAvLyBSZXR1cm4gZGF0YSBh
bmQgamF2YXNjcmlwdCBVUkxzIGFzLWlzLgotICAgIGlmIChwYXJ0aWFsVVJMLnN0YXJ0c1dpdGgo
ImRhdGE6IikgfHwgcGFydGlhbFVSTC5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIpIHx8IHBhcnRp
YWxVUkwuc3RhcnRzV2l0aCgibWFpbHRvOiIpKQotICAgICAgICByZXR1cm4gcGFydGlhbFVSTDsK
LQotICAgIC8vIElmIHRoZSBVUkwgaGFzIGEgc2NoZW1lIGl0IGlzIGFscmVhZHkgYSBmdWxsIFVS
TCwgc28gcmV0dXJuIGl0LgotICAgIGlmIChwYXJzZVVSTChwYXJ0aWFsVVJMKS5zY2hlbWUpCi0g
ICAgICAgIHJldHVybiBwYXJ0aWFsVVJMOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gcGFydGlh
bCBVUkwsIGp1c3QgcmV0dXJuIHRoZSBiYXNlIFVSTC4KLSAgICBpZiAoIXBhcnRpYWxVUkwpCi0g
ICAgICAgIHJldHVybiBiYXNlVVJMIHx8IG51bGw7Ci0KLSAgICB2YXIgYmFzZVVSTENvbXBvbmVu
dHMgPSBwYXJzZVVSTChiYXNlVVJMKTsKLQotICAgIC8vIFRoZSBiYXNlIFVSTCBuZWVkcyB0byBi
ZSBhbiBhYnNvbHV0ZSBVUkwuIFJldHVybiBudWxsIGlmIGl0IGlzbid0LgotICAgIGlmICghYmFz
ZVVSTENvbXBvbmVudHMuc2NoZW1lKQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIC8vIEEg
VVJMIHRoYXQgc3RhcnRzIHdpdGggIi8vIiBpcyBhIGZ1bGwgVVJMIHdpdGhvdXQgdGhlIHNjaGVt
ZS4gVXNlIHRoZSBiYXNlIFVSTCBzY2hlbWUuCi0gICAgaWYgKHBhcnRpYWxVUkxbMF0gPT09ICIv
IiAmJiBwYXJ0aWFsVVJMWzFdID09PSAiLyIpCi0gICAgICAgIHJldHVybiBiYXNlVVJMQ29tcG9u
ZW50cy5zY2hlbWUgKyAiOiIgKyBwYXJ0aWFsVVJMOwotCi0gICAgLy8gVGhlIHBhdGggY2FuIGJl
IG51bGwgZm9yIFVSTHMgdGhhdCBoYXZlIGp1c3QgYSBzY2hlbWUgYW5kIGhvc3QgKGxpa2UgImh0
dHA6Ly9hcHBsZS5jb20iKS4gU28gbWFrZSB0aGUgcGF0aCBiZSAiLyIuCi0gICAgaWYgKCFiYXNl
VVJMQ29tcG9uZW50cy5wYXRoKQotICAgICAgICBiYXNlVVJMQ29tcG9uZW50cy5wYXRoID0gIi8i
OwotCi0gICAgLy8gR2VuZXJhdGUgdGhlIGJhc2UgVVJMIHByZWZpeCB0aGF0IGlzIHVzZWQgaW4g
dGhlIHJlc3Qgb2YgdGhlIGNhc2VzLgotICAgIHZhciBiYXNlVVJMUHJlZml4ID0gYmFzZVVSTENv
bXBvbmVudHMuc2NoZW1lICsgIjovLyIgKyBiYXNlVVJMQ29tcG9uZW50cy5ob3N0ICsgKGJhc2VV
UkxDb21wb25lbnRzLnBvcnQgPyAoIjoiICsgYmFzZVVSTENvbXBvbmVudHMucG9ydCkgOiAiIik7
Ci0KLSAgICAvLyBBIFVSTCB0aGF0IHN0YXJ0cyB3aXRoICI/IiBpcyBqdXN0IGEgcXVlcnkgc3Ry
aW5nIHRoYXQgZ2V0cyBhcHBsaWVkIHRvIHRoZSBiYXNlIFVSTCAocmVwbGFjaW5nIHRoZSBiYXNl
IFVSTCBxdWVyeSBzdHJpbmcgYW5kIGZyYWdtZW50KS4KLSAgICBpZiAocGFydGlhbFVSTFswXSA9
PT0gIj8iKQotICAgICAgICByZXR1cm4gYmFzZVVSTFByZWZpeCArIGJhc2VVUkxDb21wb25lbnRz
LnBhdGggKyBwYXJ0aWFsVVJMOwotCi0gICAgLy8gQSBVUkwgdGhhdCBzdGFydHMgd2l0aCAiLyIg
aXMgYW4gYWJzb2x1dGUgcGF0aCB0aGF0IGdldHMgYXBwbGllZCB0byB0aGUgYmFzZSBVUkwgKHJl
cGxhY2luZyB0aGUgYmFzZSBVUkwgcGF0aCwgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVudCkuCi0g
ICAgaWYgKHBhcnRpYWxVUkxbMF0gPT09ICIvIikKLSAgICAgICAgcmV0dXJuIGJhc2VVUkxQcmVm
aXggKyByZXNvbHZlRG90c0luUGF0aChwYXJ0aWFsVVJMKTsKLQotICAgIC8vIEdlbmVyYXRlIHRo
ZSBiYXNlIHBhdGggdGhhdCBpcyB1c2VkIGluIHRoZSBmaW5hbCBjYXNlIGJ5IHJlbW92aW5nIGV2
ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QgIi8iIGZyb20gdGhlIGJhc2UgVVJMJ3MgcGF0aC4KLSAg
ICB2YXIgYmFzZVBhdGggPSBiYXNlVVJMQ29tcG9uZW50cy5wYXRoLnN1YnN0cmluZygwLCBiYXNl
VVJMQ29tcG9uZW50cy5wYXRoLmxhc3RJbmRleE9mKCIvIikpICsgIi8iOwotICAgIHJldHVybiBi
YXNlVVJMUHJlZml4ICsgcmVzb2x2ZURvdHNJblBhdGgoYmFzZVBhdGggKyBwYXJ0aWFsVVJMKTsK
LX0KLQogZnVuY3Rpb24gcGFyc2VNSU1FVHlwZShmdWxsTWltZVR5cGUpCiB7CiAgICAgaWYgKCFm
dWxsTWltZVR5cGUpCkBAIC0xMTkwLDM3ICsxMDczLDMgQEAgZnVuY3Rpb24gc2ltcGxlR2xvYlN0
cmluZ1RvUmVnRXhwKGdsb2JTdHJpbmcsIHJlZ0V4cEZsYWdzKQogCiAgICAgcmV0dXJuIG5ldyBS
ZWdFeHAocmVnZXhTdHJpbmcsIHJlZ0V4cEZsYWdzKTsKIH0KLQotZnVuY3Rpb24gcGFyc2VMb2Nh
dGlvblF1ZXJ5UGFyYW1ldGVycyhhcnJheVJlc3VsdCkKLXsKLSAgICAvLyBUaGUgZmlyc3QgY2hh
cmFjdGVyIGlzIGFsd2F5cyB0aGUgIj8iLgotICAgIHJldHVybiBwYXJzZVF1ZXJ5U3RyaW5nKHdp
bmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLCBhcnJheVJlc3VsdCk7Ci19Ci0KLWZ1
bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmcocXVlcnlTdHJpbmcsIGFycmF5UmVzdWx0KQotewotICAg
IGlmICghcXVlcnlTdHJpbmcpCi0gICAgICAgIHJldHVybiBhcnJheVJlc3VsdCA/IFtdIDoge307
Ci0KLSAgICBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nKQotICAgIHsKLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgIC8vIFJlcGxhY2UgIisiIHdpdGggIiAiIHRoZW4gZGVjb2RlIHByZWNlbnQgZW5j
b2RlZCB2YWx1ZXMuCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cmlu
Zy5yZXBsYWNlKC9cKy9nLCAiICIpKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZhciBwYXJhbWV0ZXJz
ID0gYXJyYXlSZXN1bHQgPyBbXSA6IHt9OwotICAgIHZhciBwYXJhbWV0ZXJTdHJpbmdzID0gcXVl
cnlTdHJpbmcuc3BsaXQoIiYiKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlclN0
cmluZ3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIHBhaXIgPSBwYXJhbWV0ZXJTdHJpbmdz
W2ldLnNwbGl0KCI9IikubWFwKGRlY29kZSk7Ci0gICAgICAgIGlmIChhcnJheVJlc3VsdCkKLSAg
ICAgICAgICAgIHBhcmFtZXRlcnMucHVzaCh7bmFtZTogcGFpclswXSwgdmFsdWU6IHBhaXJbMV19
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFyYW1ldGVyc1twYWlyWzBdXSA9IHBhaXJb
MV07Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcmFtZXRlcnM7Ci19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>