<?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>99246</bug_id>
          
          <creation_ts>2012-10-13 01:41:58 -0700</creation_ts>
          <short_desc>[TestResultServer] Move the resource loading into a dedicated class</short_desc>
          <delta_ts>2012-10-22 00:52:51 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>dpranke</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741453</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-13 01:41:58 -0700</bug_when>
    <thetext>This cleans up dashboard_base.js a bit and moves all the resource loading logic into one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741454</commentid>
    <comment_count>1</comment_count>
      <attachid>168549</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-13 01:47:02 -0700</bug_when>
    <thetext>Created attachment 168549
Work-in-progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741482</commentid>
    <comment_count>2</comment_count>
      <attachid>168549</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-10-13 09:49:50 -0700</bug_when>
    <thetext>Comment on attachment 168549
Work-in-progress patch

I haven&apos;t looked closely at this patch since it&apos;s not up for review, but at a high-level this looks great! It would be especially great if you could find a way to write tests for the new class (e.g. by stubbing out the bits that do the actual network requests).

A couple thoughts:
1. Could you wrap all the code in resourceLoader.js in an anonymous function, add a namespace and just export that? See http://trac.webkit.org/browser/trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/results.js as an example. Maybe the namespace could be &quot;loader&quot;? 
2. Name the file whatever the namespace name is, so loader.js if we choose &quot;loader&quot; for the namespace for consistency with garden-o-matic&apos;s naming style. I&apos;m trying to get the flakiness dashboard to be more consistent in style with garden-o-matic.
3. Also for consistency with garden-o-matic, lets set the whole prototype to a new object at once. See base.RequestTracker http://trac.webkit.org/browser/trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/base.js#L192 as an example.

Thanks for working on this! I&apos;m very excited to see this code improved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744476</commentid>
    <comment_count>3</comment_count>
      <attachid>169230</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-17 12:00:05 -0700</bug_when>
    <thetext>Created attachment 169230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746979</commentid>
    <comment_count>4</comment_count>
      <attachid>169230</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-10-20 10:58:10 -0700</bug_when>
    <thetext>Comment on attachment 169230
Patch

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

&lt;3 this change so much. Thanks for doing this!

&gt; Tools/TestResultServer/static-dashboards/dashboard_base.js:547
&gt; +function resourceLoadingComplete()
&gt;  {
&gt; -    if(!haveJsonFilesLoaded())
&gt; -        return;
&gt; +    g_resourceLoader = null;
&gt; +    handleLocationChange();
&gt; +}
&gt;  
&gt; +function handleLocationChange()
&gt; +{
&gt;      addBuilderLoadErrors();

I think this introduces a race-condition since we also call handleLocationChange on the hashchange event. So, I think you might want something like this at the beginning of handleLocationChange:
if (g_resourceLoader)
    return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747277</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-22 00:44:18 -0700</bug_when>
    <thetext>Committed r132034: &lt;http://trac.webkit.org/changeset/132034&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747280</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-22 00:52:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 169230 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169230&amp;action=review
&gt; 
&gt; &lt;3 this change so much. Thanks for doing this!
&gt; 
&gt; &gt; Tools/TestResultServer/static-dashboards/dashboard_base.js:547
&gt; &gt; +function resourceLoadingComplete()
&gt; &gt;  {
&gt; &gt; -    if(!haveJsonFilesLoaded())
&gt; &gt; -        return;
&gt; &gt; +    g_resourceLoader = null;
&gt; &gt; +    handleLocationChange();
&gt; &gt; +}
&gt; &gt;  
&gt; &gt; +function handleLocationChange()
&gt; &gt; +{
&gt; &gt;      addBuilderLoadErrors();
&gt; 
&gt; I think this introduces a race-condition since we also call handleLocationChange on the hashchange event. So, I think you might want something like this at the beginning of handleLocationChange:
&gt; if (g_resourceLoader)
&gt;     return;

Forgot about this initially, but added the early return in r132035.
http://trac.webkit.org/changeset/132035

(In reply to comment #5)
&gt; Committed r132034: &lt;http://trac.webkit.org/changeset/132034&gt;

The results files in the initial patch were loaded through XHR with a JSONP callback as I was, for reasons unknown, convinced that this was the only way the data was served with the &apos;Access-Control-Allow-Origin: *&apos; header. That&apos;s incorrect though and no callback is required, so I changed the code to take that into account.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168549</attachid>
            <date>2012-10-13 01:47:02 -0700</date>
            <delta_ts>2012-10-17 11:59:56 -0700</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>bug-99246-20121013014556.patch</filename>
            <type>text/plain</type>
            <size>28483</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMjU0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmQxMTM4ODgyYzc0YTlmNDlmNzc5MzIzNmFkNTUzMzQy
MTJkMjBiZS4uNjM5ODUyZTJjZjFkYjQ2M2NhNDA4M2FlY2NlZmIzNmZhMjA4MDVhNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQw
IEBACisyMDEyLTEwLTEzICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisK
KyAgICAgICAgW1Rlc3RSZXN1bHRTZXJ2ZXJdIE1vdmUgdGhlIHJlc291cmNlIGxvYWRpbmcgaW50
byBhIGRlZGljYXRlZCBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTkyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBh
cHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMg
YmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbDoKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzOgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanM6CisgICAgICAgIChpc0ZsYWtp
bmVzc0Rhc2hib2FyZCk6CisgICAgICAgIChyZXNvdXJjZUxvYWRpbmdDb21wbGV0ZSk6CisgICAg
ICAgIChoYW5kbGVMb2NhdGlvbkNoYW5nZSk6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWw6CisgICAgICAgICogVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9yZXNvdXJjZUxvYWRlci5qczogQWRkZWQu
CisgICAgICAgIChyZXF1ZXN0Lnhoci5vbnJlYWR5c3RhdGVjaGFuZ2UpOgorICAgICAgICAocmVx
dWVzdCk6CisgICAgICAgIChSZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChSZXNvdXJjZUxvYWRl
ci5wcm90b3R5cGUubG9hZCk6CisgICAgICAgIChSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuaGFu
ZGxlUmVzb3VyY2VMb2FkKToKKyAgICAgICAgKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZS5idWls
ZGVyc0xpc3RMb2FkZWQpOgorICAgICAgICAoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlLl9sb2Fk
TmV4dCk6CisgICAgICAgIChSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuX2xvYWRCdWlsZGVyc0xp
c3QpOgorICAgICAgICAoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlLl9sb2FkUmVzdWx0c0ZpbGVz
KToKKyAgICAgICAgKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc3VsdHNGaWxlRm9y
QnVpbGRlcik6CisgICAgICAgIChSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuX2hhbmRsZVJlc3Vs
dHNGaWxlTG9hZGVkKToKKyAgICAgICAgKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZS5fcHJvY2Vz
c1RpbWVzSlNPTkRhdGEpOgorICAgICAgICAoUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlLl9wcm9j
ZXNzUmVzdWx0c0pTT05EYXRhKToKKyAgICAgICAgKFJlc291cmNlTG9hZGVyLnByb3RvdHlwZS5f
aGFuZGxlUmVzdWx0c0ZpbGVMb2FkRXJyb3IpOgorICAgICAgICAoUmVzb3VyY2VMb2FkZXIucHJv
dG90eXBlLl9oYXZlUmVzdWx0c0ZpbGVzTG9hZGVkKToKKyAgICAgICAgKFJlc291cmNlTG9hZGVy
LnByb3RvdHlwZS5fcGF0aFRvQnVpbGRlclJlc3VsdHNGaWxlKToKKyAgICAgICAgKFJlc291cmNl
TG9hZGVyLnByb3RvdHlwZS5fbG9hZEV4cGVjdGF0aW9uc0ZpbGVzKToKKyAgICAgICAgKiBUZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbDoKKyAgICAg
ICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbDoKKwog
MjAxMi0xMC0xMiAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAg
ICAgIFtUZXN0UmVzdWx0U2VydmVyXSBBZGQgc3VwcG9ydCBmb3Igbm9uLUNocm9taXVtIFRlc3RF
eHBlY3RhdGlvbnMgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbAppbmRleCA5YTc2
YjA2YjRlZDcyNmM5YmI2MjUwY2Q5NGZlOTNhZDkwOTdkZDRmLi4zZGM4ODFmZjZiZjNjMDU3Yjcx
NGY3OGNiZThlYWYyZGYxNGFiYmRmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwKKysrIGIvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1sCkBA
IC01MSw2ICs1MSw3IEBAIGltZyB7CiB9CiA8L3N0eWxlPgogPHNjcmlwdCBzcmM9ImJ1aWxkZXJz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZUxvYWRlci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIC8v
IEBmaWxlb3ZlcnZpZXcgQ3JlYXRlcyBhIGRhc2hib2FyZCBmb3IgdHJhY2tpbmcgbnVtYmVyIG9m
IHBhc3Nlcy9mYWlsdXJlcyBwZXIgcnVuLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMuanMKaW5kZXggNTZhZWJjYThkNTkzM2YzOGFh
OTE5YzM3NGUyZDIyNjY2ZTIzN2M1YS4uYmFiMDMxYzI3MTBmYjQ1NTRlMTAzZWYzM2EyMDA5ZTg1
MmUxOWUyZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9idWlsZGVycy5qcworKysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2J1aWxkZXJzLmpzCkBAIC0yMjQsNyArMjI0LDcgQEAgZnVuY3Rpb24gb25CdWlsZGVy
TGlzdExvYWQoYnVpbGRlckdyb3VwcywgYnVpbGRlckZpbHRlciwgbWFzdGVyLCBncm91cE5hbWUs
IGpzb24KICAgICBhc3NvY2lhdGVCdWlsZGVyc1dpdGhNYXN0ZXIoYnVpbGRlcnMsIG1hc3Rlcik7
CiAgICAgYnVpbGRlckdyb3Vwc1tncm91cE5hbWVdLmFwcGVuZChidWlsZGVycyk7CiAgICAgaWYg
KGJ1aWxkZXJHcm91cHNbZ3JvdXBOYW1lXS5sb2FkZWQoKSkKLSAgICAgICAgZ19oYW5kbGVCdWls
ZGVyc0xpc3RMb2FkZWQoKTsKKyAgICAgICAgZ19yZXNvdXJjZUxvYWRlci5idWlsZGVyc0xpc3RM
b2FkZWQoKTsKIH0KIAogZnVuY3Rpb24gb25FcnJvckxvYWRpbmdCdWlsZGVyTGlzdCh1cmwsIGJ1
aWxkZXJHcm91cHMsIGdyb3VwTmFtZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMgYi9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCmluZGV4IDc1Njg4NmY0
YmUyNDliZjFkMzliOGI4ZTVlNTQxMWI3OGNhMzVjZmMuLjQ5MTA1OTViM2Q4MjdlMWRjMmIyZTFj
YTEwZjY5MDdkOGE0ODc1ZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwpAQCAtMzMsNiArMzMsNyBA
QAogLy8gVGhlIGNhbGxpbmcgcGFnZSBpcyBleHBlY3RlZCB0byBpbXBsZW1lbnQgdGhlIGZvbGxv
d2luZyAiYWJzdHJhY3QiCiAvLyBmdW5jdGlvbnMvb2JqZWN0czoKIHZhciBnX3BhZ2VMb2FkU3Rh
cnRUaW1lID0gRGF0ZS5ub3coKTsKK3ZhciBnX3Jlc291cmNlTG9hZGVyOwogCiAvLyBHZW5lcmF0
ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXNoYm9hcmQuIFRoZSBwYWdlIHNob3VsZCBvdmVycmlk
ZSB0aGlzIHdpdGgKIC8vIGEgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIHBhZ2UgYXNzdW1p
bmcgYWxsIHJlc291cmNlcyBoYXZlIGxvYWRlZC4KQEAgLTE1OSw4ICsxNjAsNiBAQCB2YXIgUkxF
ID0gewogICAgIFZBTFVFOiAxCiB9CiAKLXZhciBURVNUX1JFU1VMVFNfU0VSVkVSID0gJ2h0dHA6
Ly90ZXN0LXJlc3VsdHMuYXBwc3BvdC5jb20vJzsKLQogZnVuY3Rpb24gaXNGYWlsaW5nUmVzdWx0
KHZhbHVlKQogewogICAgIHJldHVybiAnRlNUT0NJWicuaW5kZXhPZih2YWx1ZSkgIT0gLTE7CkBA
IC0yNjIsMjQgKzI2MSw2IEBAIGZ1bmN0aW9uIGNvbGxhcHNlV2hpdGVzcGFjZShzdHIpCiAgICAg
cmV0dXJuIHN0ci5yZXBsYWNlKC9ccysvZywgJyAnKTsKIH0KIAotZnVuY3Rpb24gcmVxdWVzdCh1
cmwsIHN1Y2Nlc3MsIGVycm9yLCBvcHRfaXNCaW5hcnlEYXRhKQotewotICAgIGNvbnNvbGUubG9n
KCdYTUxIdHRwUmVxdWVzdDogJyArIHVybCk7Ci0gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVx
dWVzdCgpOwotICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOwotICAgIGlmIChvcHRfaXNC
aW5hcnlEYXRhKQotICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9wbGFpbjsgY2hh
cnNldD14LXVzZXItZGVmaW5lZCcpOwotICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5j
dGlvbihlKSB7Ci0gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7Ci0gICAgICAgICAg
ICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApCi0gICAgICAgICAgICAgICAgc3VjY2Vzcyh4aHIpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yKHhocik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgeGhyLnNlbmQoKTsKLX0KLQogZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXIo
c3RhdGUsIGtleSwgdmFsdWUsIHZhbGlkYXRlRm4pCiB7CiAgICAgaWYgKHZhbGlkYXRlRm4oKSkK
QEAgLTQxMCwzNCArMzkxLDEwIEBAIGZ1bmN0aW9uIGZpbGxNaXNzaW5nVmFsdWVzKHRvLCBmcm9t
KQogICAgIH0KIH0KIAotLy8gTG9hZCBhIHNjcmlwdC4KLS8vIEBwYXJhbSB7c3RyaW5nfSBwYXRo
IFBhdGggdG8gdGhlIHNjcmlwdCB0byBsb2FkLgotLy8gQHBhcmFtIHtGdW5jdGlvbj19IG9wdF9v
bkVycm9yIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgaWYgdGhlIHNjcmlwdAotLy8gICAgICAg
ICBkb2VzIG5vdCBsb2FkLgotLy8gQHBhcmFtIHtGdW5jdGlvbj19IG9wdF9vbkxvYWQgT3B0aW9u
YWwgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBzY3JpcHQKLS8vICAgICAgICAgaXMgbG9hZGVk
LiAgICBDYWxsZWQgd2l0aCB0aGUgc2NyaXB0IGVsZW1lbnQgYXMgaXRzIDFzdCBhcmd1bWVudC4K
LWZ1bmN0aW9uIGFwcGVuZFNjcmlwdChwYXRoLCBvcHRfb25FcnJvciwgb3B0X29uTG9hZCkKLXsK
LSAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7Ci0gICAg
c2NyaXB0LnNyYyA9IHBhdGg7Ci0gICAgaWYgKG9wdF9vbkxvYWQpIHsKLSAgICAgICAgc2NyaXB0
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKHRoaXMu
cmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKQotICAgICAgICAgICAgICAgIG9wdF9vbkxvYWQoc2Ny
aXB0KTsKLSAgICAgICAgfTsKLSAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeyBv
cHRfb25Mb2FkKHNjcmlwdCk7IH07Ci0gICAgfQotICAgIGlmIChvcHRfb25FcnJvcikKLSAgICAg
ICAgc2NyaXB0Lm9uZXJyb3IgPSBvcHRfb25FcnJvcjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7Ci19Ci0KIC8vIEZJWE1F
OiBSZW5hbWUgdGhpcyB0byBnX2Rhc2hib2FyZFNwZWNpZmljU3RhdGU7CiB2YXIgZ19jdXJyZW50
U3RhdGUgPSB7fTsKIHZhciBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUgPSB7fTsKLXZhciBnX3dhaXRp
bmdPbkV4cGVjdGF0aW9uczsKIHBhcnNlQ3Jvc3NEYXNoYm9hcmRQYXJhbWV0ZXJzKCk7Ci1sb2Fk
QnVpbGRlcnNMaXN0KGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS5ncm91cCwgZ19jcm9zc0Rhc2hib2Fy
ZFN0YXRlLnRlc3RUeXBlKTsKIAogZnVuY3Rpb24gaXNMYXlvdXRUZXN0UmVzdWx0cygpCiB7CkBA
IC00OTgsMzIgKzQ1NSw2IEBAIHZhciBnX2V4cGVjdGF0aW9uc0J5UGxhdGZvcm0gPSB7fTsKIHZh
ciBnX3N0YWxlQnVpbGRlcnMgPSBbXTsKIHZhciBnX2J1aWxkZXJzVGhhdEZhaWxlZFRvTG9hZCA9
IFtdOwogCi1mdW5jdGlvbiBBRERfUkVTVUxUUyhidWlsZHMpCi17Ci0gICAgdmFyIGpzb25fdmVy
c2lvbiA9IGJ1aWxkc1sndmVyc2lvbiddOwotICAgIGZvciAodmFyIGJ1aWxkZXJOYW1lIGluIGJ1
aWxkcykgewotICAgICAgICBpZiAoYnVpbGRlck5hbWUgPT0gJ3ZlcnNpb24nKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gSWYgYSB0ZXN0IHN1aXRlIHN0b3BzIGJlaW5nIHJ1
biBvbiBhIGdpdmVuIGJ1aWxkZXIsIHdlIGRvbid0IHdhbnQgdG8gc2hvdyBpdC4KLSAgICAgICAg
Ly8gQXNzdW1lIGFueSBidWlsZGVyIHdpdGhvdXQgYSBydW4gaW4gdHdvIHdlZWtzIGZvciBhIGdp
dmVuIHRlc3Qgc3VpdGUgaXNuJ3QKLSAgICAgICAgLy8gcnVubmluZyB0aGF0IHN1aXRlIGFueW1v
cmUuCi0gICAgICAgIC8vIEZJWE1FOiBHcmFiIHdoaWNoIGJvdHMgcnVuIHdoaWNoIHRlc3RzIGRp
cmVjdGx5IGZyb20gdGhlIGJ1aWxkYm90IEpTT04gaW5zdGVhZC4KLSAgICAgICAgdmFyIGxhc3RS
dW5TZWNvbmRzID0gYnVpbGRzW2J1aWxkZXJOYW1lXS5zZWNvbmRzU2luY2VFcG9jaFswXTsKLSAg
ICAgICAgaWYgKChEYXRlLm5vdygpIC8gMTAwMCkgLSBsYXN0UnVuU2Vjb25kcyA+IE9ORV9XRUVL
X1NFQ09ORFMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoKERhdGUubm93
KCkgLyAxMDAwKSAtIGxhc3RSdW5TZWNvbmRzID4gT05FX0RBWV9TRUNPTkRTKQotICAgICAgICAg
ICAgZ19zdGFsZUJ1aWxkZXJzLnB1c2goYnVpbGRlck5hbWUpOwotCi0gICAgICAgIGlmIChqc29u
X3ZlcnNpb24gPj0gNCkKLSAgICAgICAgICAgIGJ1aWxkc1tidWlsZGVyTmFtZV1bVEVTVFNfS0VZ
XSA9IGZsYXR0ZW5UcmllKGJ1aWxkc1tidWlsZGVyTmFtZV1bVEVTVFNfS0VZXSk7Ci0gICAgICAg
IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0gPSBidWlsZHNbYnVpbGRlck5hbWVdOwot
ICAgIH0KLQotICAgIGhhbmRsZVJlc291cmNlTG9hZCgpOwotfQotCiAvLyBUT0RPKGFib3hoYWxs
KTogZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgaXMgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIGFu
ZAogLy8gY2hhbmdlIGNhbGxpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSB0cmllIHN0cnVjdHVy
ZSBpbnN0ZWFkIGlmIG5lY2Vzc2FyeS4KIGZ1bmN0aW9uIGZsYXR0ZW5UcmllKHRyaWUsIHByZWZp
eCkKQEAgLTU0NCwxNDkgKzQ3NSwyMCBAQCBmdW5jdGlvbiBmbGF0dGVuVHJpZSh0cmllLCBwcmVm
aXgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZnVuY3Rpb24gcGF0aFRvQnVpbGRlclJlc3Vs
dHNGaWxlKGJ1aWxkZXJOYW1lKQotewotICAgIHJldHVybiBURVNUX1JFU1VMVFNfU0VSVkVSICsg
J3Rlc3RmaWxlP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKLSAgICAgICAgICAgICcmbWFzdGVy
PScgKyBidWlsZGVyTWFzdGVyKGJ1aWxkZXJOYW1lKS5uYW1lICsKLSAgICAgICAgICAgICcmdGVz
dHR5cGU9JyArIGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS50ZXN0VHlwZSArICcmbmFtZT0nOwotfQot
Ci1mdW5jdGlvbiByZXF1ZXN0RXhwZWN0YXRpb25zRmlsZXMoKQotewotICAgIHZhciBleHBlY3Rh
dGlvbnNGaWxlc1RvUmVxdWVzdCA9IHt9OwotICAgIHRyYXZlcnNlUGxhdGZvcm1zVHJlZShmdW5j
dGlvbihwbGF0Zm9ybSwgcGxhdGZvcm1OYW1lKSB7Ci0gICAgICAgIGlmIChwbGF0Zm9ybS5mYWxs
YmFja1BsYXRmb3JtcykKLSAgICAgICAgICAgIHBsYXRmb3JtLmZhbGxiYWNrUGxhdGZvcm1zLmZv
ckVhY2goZnVuY3Rpb24oZmFsbGJhY2tQbGF0Zm9ybSkgewotICAgICAgICAgICAgICAgIHZhciBm
YWxsYmFja1BsYXRmb3JtT2JqZWN0ID0gcGxhdGZvcm1PYmplY3RGb3JOYW1lKGZhbGxiYWNrUGxh
dGZvcm0pOwotICAgICAgICAgICAgICAgIGlmIChmYWxsYmFja1BsYXRmb3JtT2JqZWN0LmV4cGVj
dGF0aW9uc0RpcmVjdG9yeSAmJiAhKGZhbGxiYWNrUGxhdGZvcm0gaW4gZXhwZWN0YXRpb25zRmls
ZXNUb1JlcXVlc3QpKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnNGaWxlc1RvUmVx
dWVzdFtmYWxsYmFja1BsYXRmb3JtXSA9IEVYUEVDVEFUSU9OU19VUkxfQkFTRV9QQVRIICsgZmFs
bGJhY2tQbGF0Zm9ybU9iamVjdC5leHBlY3RhdGlvbnNEaXJlY3RvcnkgKyAnL1Rlc3RFeHBlY3Rh
dGlvbnMnOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYgKHBsYXRmb3JtLmV4cGVjdGF0
aW9uc0RpcmVjdG9yeSkKLSAgICAgICAgICAgIGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0W3Bs
YXRmb3JtTmFtZV0gPSBFWFBFQ1RBVElPTlNfVVJMX0JBU0VfUEFUSCArIHBsYXRmb3JtLmV4cGVj
dGF0aW9uc0RpcmVjdG9yeSArICcvVGVzdEV4cGVjdGF0aW9ucyc7Ci0gICAgfSk7Ci0KLSAgICBm
b3IgKHBsYXRmb3JtV2l0aEV4cGVjdGF0aW9ucyBpbiBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVz
dCkKLSAgICAgICAgcmVxdWVzdChleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdFtwbGF0Zm9ybVdp
dGhFeHBlY3RhdGlvbnNdLAotICAgICAgICAgICAgICAgIHBhcnRpYWwoZnVuY3Rpb24ocGxhdGZv
cm1OYW1lLCB4aHIpIHsKLSAgICAgICAgICAgICAgICAgICAgZ19leHBlY3RhdGlvbnNCeVBsYXRm
b3JtW3BsYXRmb3JtTmFtZV0gPSBnZXRQYXJzZWRFeHBlY3RhdGlvbnMoeGhyLnJlc3BvbnNlVGV4
dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1
ZXN0W3BsYXRmb3JtTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXMo
ZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3QpLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZ193YWl0aW5nT25FeHBlY3RhdGlvbnMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZVJlc291cmNlTG9hZCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSwgcGxhdGZvcm1XaXRoRXhwZWN0YXRpb25zKSwKLSAgICAgICAgICAgICAg
ICBwYXJ0aWFsKGZ1bmN0aW9uKHBsYXRmb3JtTmFtZSwgeGhyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBsb2FkIGV4cGVjdGF0aW9ucyBmaWxlIGZvciAn
ICsgcGxhdGZvcm1OYW1lKTsKLSAgICAgICAgICAgICAgICB9LCBwbGF0Zm9ybVdpdGhFeHBlY3Rh
dGlvbnMpKTsKLX0KLQogZnVuY3Rpb24gaXNUcmVlTWFwKCkKIHsKICAgICByZXR1cm4gZW5kc1dp
dGgod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCAndHJlZW1hcC5odG1sJyk7CiB9CiAKLWZ1bmN0
aW9uIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGJ1aWxkZXJOYW1lKQotewotICAgIHZhciBy
ZXN1bHRzRmlsZW5hbWU7Ci0gICAgaWYgKGlzVHJlZU1hcCgpKQotICAgICAgICByZXN1bHRzRmls
ZW5hbWUgPSAndGltZXNfbXMuanNvbic7Ci0gICAgZWxzZSBpZiAoZ19jcm9zc0Rhc2hib2FyZFN0
YXRlLnNob3dBbGxSdW5zKQotICAgICAgICByZXN1bHRzRmlsZW5hbWUgPSAncmVzdWx0cy5qc29u
JzsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9ICdyZXN1bHRzLXNtYWxsLmpz
b24nOwotCi0gICAgYXBwZW5kU2NyaXB0KHBhdGhUb0J1aWxkZXJSZXN1bHRzRmlsZShidWlsZGVy
TmFtZSkgKyByZXN1bHRzRmlsZW5hbWUgKyAnJmNhbGxiYWNrPUFERF9SRVNVTFRTJywKLSAgICAg
ICAgICAgIHBhcnRpYWwoaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IsIGJ1aWxkZXJOYW1lKSwKLSAg
ICAgICAgICAgIHBhcnRpYWwoaGFuZGxlU2NyaXB0TG9hZGVkLCBidWlsZGVyTmFtZSkpOwotfQot
Ci1mdW5jdGlvbiBhcHBlbmRKU09OU2NyaXB0RWxlbWVudHMoKQorZnVuY3Rpb24gaXNGbGFraW5l
c3NEYXNoYm9hcmQoKQogewotICAgIGNsZWFyRXJyb3JzKCk7Ci0KLSAgICBpZiAoaXNUcmVlTWFw
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhcnNlUGFyYW1ldGVycygpOwotCi0gICAgaWYg
KGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS51c2VUZXN0RGF0YSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4gZ19idWlsZGVycykKLSAgICAgICAgYXBwZW5kSlNP
TlNjcmlwdEVsZW1lbnRGb3IoYnVpbGRlck5hbWUpOwotCi0gICAgZ193YWl0aW5nT25FeHBlY3Rh
dGlvbnMgPSBpc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgIWlzVHJlZU1hcCgpOwotICAgIGlmIChn
X3dhaXRpbmdPbkV4cGVjdGF0aW9ucykKLSAgICAgICAgcmVxdWVzdEV4cGVjdGF0aW9uc0ZpbGVz
KCk7CisgICAgcmV0dXJuIGVuZHNXaXRoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ2ZsYWtp
bmVzc19kYXNoYm9hcmQuaHRtbCcpOwogfQogCiB2YXIgZ19oYXNEb25lSW5pdGlhbFBhZ2VHZW5l
cmF0aW9uID0gZmFsc2U7CiAvLyBTdHJpbmcgb2YgZXJyb3IgbWVzc2FnZXMgdG8gZGlzcGxheSB0
byB0aGUgdXNlci4KIHZhciBnX2Vycm9yTWVzc2FnZXMgPSAnJzsKIAotZnVuY3Rpb24gaGFuZGxl
UmVzb3VyY2VMb2FkKCkKLXsKLSAgICAvLyBJbiBjYXNlIHdlIGxvYWQgYSByZXN1bHRzLmpzb24g
dGhhdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBidWlsZGVycywKLSAgICAvLyBtYWtlIHN1cmUgdG8g
b25seSBjYWxsIGhhbmRsZUxvY2F0aW9uQ2hhbmdlIG9uY2UgZnJvbSB0aGUgcmVzb3VyY2UgbG9h
ZHMuCi0gICAgaWYgKCFnX2hhc0RvbmVJbml0aWFsUGFnZUdlbmVyYXRpb24pCi0gICAgICAgIGhh
bmRsZUxvY2F0aW9uQ2hhbmdlKCk7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZVNjcmlwdExvYWRlZChi
dWlsZGVyTmFtZSwgc2NyaXB0KQotewotICAgIC8vIFdlIG5lZWQgdGhpcyB3b3JrLWFyb3VuZCBm
b3Igd2Via2l0Lm9yZy9iLzUwNTg5LgotICAgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJOYW1lXSkgewotICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoIkJ1aWxkZXIgZGF0YSB3
YXMgZW1wdHkiKTsKLSAgICAgICAgZXJyb3IudGFyZ2V0ID0gc2NyaXB0OwotICAgICAgICBoYW5k
bGVSZXNvdXJjZUxvYWRFcnJvcihidWlsZGVyTmFtZSwgZXJyb3IpOwotICAgIH0KLX0KLQotLy8g
SGFuZGxlIHJlc291cmNlIGxvYWRpbmcgZXJyb3JzIC0gNDA0cywgNTAwcywgZXRjLiAgICBSZWNv
dmVyIGZyb20gdGhlIGVycm9yIHRvCi0vLyBzdGlsbCBzaG93IGFzIG11Y2ggZGF0YSBhcyBwb3Nz
aWJsZSwgYnV0IHNob3cgc29tZSBVSSBhYm91dCB0aGUgZmFpbHVyZSwgYW5kCi0vLyBkbyBub3Qg
dHJ5IHVzaW5nIHRoaXMgcmVzb3VyY2UgYWdhaW4gdW50aWwgdXNlciByZWZyZXNoZXMuCi0vLwot
Ly8gQHBhcmFtIHtzdHJpbmd9IGJ1aWxkZXJOYW1lIE5hbWUgb2YgYnVpbGRlciB0aGF0IHRoZSBy
ZXNvdXJjZSBmYWlsZWQgZm9yLgotLy8gQHBhcmFtIHtFdmVudH0gZSBUaGUgZXJyb3IgZXZlbnQu
Ci1mdW5jdGlvbiBoYW5kbGVSZXNvdXJjZUxvYWRFcnJvcihidWlsZGVyTmFtZSwgZSkKLXsKLSAg
ICB2YXIgZXJyb3IgPSBlLnRhcmdldC5zcmMgKyAnIGZhaWxlZCB0byBsb2FkIGZvciAnICsgYnVp
bGRlck5hbWUgKyAnLic7Ci0KLSAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7Ci0gICAg
ICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAgICBnX2J1aWxkZXJzVGhhdEZhaWxlZFRv
TG9hZC5wdXNoKGJ1aWxkZXJOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBdm9pZCB0
byBzaG93IGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgZm9yIG5vbi1sYXlvdXQgdGVzdHMuIFdlIG1h
eSBiZQotICAgICAgICAvLyBjaGVja2luZyB0aGUgYnVpbGRlcnMgdGhhdCBhcmUgbm90IHJ1bm5p
bmcgdGhlIHRlc3RzLgotICAgICAgICBjb25zb2xlLmluZm8oJ2luZm86JyArIGVycm9yKTsKLSAg
ICB9Ci0KLSAgICAvLyBSZW1vdmUgdGhpcyBidWlsZGVyIGZyb20gYnVpbGRlcnMsIHNvIHdlIGRv
bid0IHRyeSB0byB1c2UgdGhlCi0gICAgLy8gZGF0YSB0aGF0IGlzbid0IHRoZXJlLgotICAgIGRl
bGV0ZSBnX2J1aWxkZXJzW2J1aWxkZXJOYW1lXTsKLQotICAgIC8vIENoYW5nZSB0aGUgZGVmYXVs
dCBidWlsZGVyIG5hbWUgaWYgaXQgaGFzIGJlZW4gZGVsZXRlZC4KLSAgICBpZiAoZ19kZWZhdWx0
QnVpbGRlck5hbWUgPT0gYnVpbGRlck5hbWUpIHsKLSAgICAgICAgZ19kZWZhdWx0QnVpbGRlck5h
bWUgPSBudWxsOwotICAgICAgICBmb3IgKHZhciBhdmFpbGFibGVCdWlsZGVyTmFtZSBpbiBnX2J1
aWxkZXJzKSB7Ci0gICAgICAgICAgICBnX2RlZmF1bHRCdWlsZGVyTmFtZSA9IGF2YWlsYWJsZUJ1
aWxkZXJOYW1lOwotICAgICAgICAgICAgZ19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZh
bHVlcy5idWlsZGVyID0gYXZhaWxhYmxlQnVpbGRlck5hbWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIWdfZGVmYXVsdEJ1aWxkZXJOYW1lKSB7Ci0gICAgICAg
ICAgICB2YXIgZXJyb3IgPSAnTm8gdGVzdHMgcmVzdWx0cyBmb3VuZCBmb3IgJyArIGdfY3Jvc3NE
YXNoYm9hcmRTdGF0ZS50ZXN0VHlwZSArICcuIFJlbG9hZCB0aGUgcGFnZSB0byB0cnkgZmV0Y2hp
bmcgaXQgYWdhaW4uJzsKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotICAgICAg
ICAgICAgYWRkRXJyb3IoZXJyb3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUHJvY2Vl
ZCBhcyBpZiB0aGUgcmVzb3VyY2UgaGFkIGxvYWRlZC4KLSAgICBoYW5kbGVSZXNvdXJjZUxvYWQo
KTsKLX0KLQotCiAvLyBSZWNvcmQgYSBuZXcgZXJyb3IgbWVzc2FnZS4KIC8vIEBwYXJhbSB7c3Ry
aW5nfSBlcnJvck1zZyBUaGUgbWVzc2FnZSB0byBzaG93IHRvIHRoZSB1c2VyLgogZnVuY3Rpb24g
YWRkRXJyb3IoZXJyb3JNc2cpCkBAIC03MjEsMjUgKzUyMyw2IEBAIGZ1bmN0aW9uIHNob3dFcnJv
cnMoKQogICAgIGVycm9ycy5pbm5lckhUTUwgPSBnX2Vycm9yTWVzc2FnZXM7CiB9CiAKLS8vIEBy
ZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGpzb24gZmlsZXMgaGF2ZSBhbGwgY29tcGxldGVk
IGxvYWRpbmcuCi1mdW5jdGlvbiBoYXZlSnNvbkZpbGVzTG9hZGVkKCkKLXsKLSAgICBpZiAoIWN1
cnJlbnRCdWlsZGVyR3JvdXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGdf
d2FpdGluZ09uRXhwZWN0YXRpb25zKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
aXNUcmVlTWFwKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9yICh2YXIgYnVpbGRl
ciBpbiBnX2J1aWxkZXJzKSB7Ci0gICAgICAgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJdKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogZnVuY3Rpb24gYWRkQnVpbGRlckxvYWRFcnJvcnMoKQogewogICAgIGlmIChnX2hhc0Rv
bmVJbml0aWFsUGFnZUdlbmVyYXRpb24pCkBAIC03NTIsMTEgKzUzNSwxNCBAQCBmdW5jdGlvbiBh
ZGRCdWlsZGVyTG9hZEVycm9ycygpCiAgICAgICAgIGFkZEVycm9yKCdFUlJPUjogRGF0YSBmcm9t
ICcgKyBnX3N0YWxlQnVpbGRlcnMudG9TdHJpbmcoKSArICcgaXMgbW9yZSB0aGFuIDEgZGF5IHN0
YWxlLicpOwogfQogCi1mdW5jdGlvbiBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpCitmdW5jdGlvbiBy
ZXNvdXJjZUxvYWRpbmdDb21wbGV0ZSgpCiB7Ci0gICAgaWYoIWhhdmVKc29uRmlsZXNMb2FkZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGdfcmVzb3VyY2VMb2FkZXIgPSBudWxsOworICAgIGhh
bmRsZUxvY2F0aW9uQ2hhbmdlKCk7Cit9CiAKK2Z1bmN0aW9uIGhhbmRsZUxvY2F0aW9uQ2hhbmdl
KCkKK3sKICAgICBhZGRCdWlsZGVyTG9hZEVycm9ycygpOwogICAgIGdfaGFzRG9uZUluaXRpYWxQ
YWdlR2VuZXJhdGlvbiA9IHRydWU7CiAKQEAgLTg1NiwyNSArNjQyLDYgQEAgZnVuY3Rpb24gc2hv
d1BvcHVwKHRhcmdldCwgaHRtbCkKICAgICBwb3B1cC5zdHlsZS50b3AgPSB5ICsgZG9jdW1lbnQu
Ym9keS5zY3JvbGxUb3AgKyAncHgnOwogfQogCi0vLyBDcmVhdGUgYSBuZXcgZnVuY3Rpb24gd2l0
aCBzb21lIG9mIGl0cyBhcmd1ZW1lbnRzCi0vLyBwcmUtZmlsbGVkLgotLy8gVGFrZW4gZnJvbSBn
b29nLnBhcnRpYWwgaW4gdGhlIENsb3N1cmUgbGlicmFyeS4KLS8vIEBwYXJhbSB7RnVuY3Rpb259
IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LgotLy8gQHBhcmFtIHsuLi4qfSB2YXJf
YXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0aWFsbHkKLS8vICAgICAgICAg
YXBwbGllZCB0byBmbi4KLS8vIEByZXR1cm4geyFGdW5jdGlvbn0gQSBwYXJ0aWFsbHktYXBwbGll
ZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBiaW5kKCkgd2FzCi0vLyAgICAgICAgIGludm9rZWQgYXMg
YSBtZXRob2Qgb2YuCi1mdW5jdGlvbiBwYXJ0aWFsKGZuLCB2YXJfYXJncykKLXsKLSAgICB2YXIg
YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgcmV0
dXJuIGZ1bmN0aW9uKCkgewotICAgICAgICAvLyBQcmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMg
dG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLgotICAgICAgICB2YXIgbmV3QXJncyA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICAgIG5ld0FyZ3MudW5zaGlmdC5h
cHBseShuZXdBcmdzLCBhcmdzKTsKLSAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIG5ld0Fy
Z3MpOwotICAgIH07Ci19OwotCiAvLyBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBleHBlY3RhdGlv
c24gbWFwIGZvciB0aGUgY3VycmVudCB0ZXN0VHlwZS4KIGZ1bmN0aW9uIGV4cGVjdGF0aW9uc01h
cCgpCiB7CkBAIC0xMTEyLDEzICs4NzksNiBAQCBmdW5jdGlvbiBkZWNvbXByZXNzUmVzdWx0cyhi
dWlsZGVyUmVzdWx0cykKICAgICB9OwogfQogCi1mdW5jdGlvbiBnX2hhbmRsZUJ1aWxkZXJzTGlz
dExvYWRlZCgpIHsKLSAgICBpZiAoIWN1cnJlbnRCdWlsZGVyR3JvdXAoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGluaXRCdWlsZGVycygpOwotICAgIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50cygp
OwotfQotCiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihl
KSB7CiAgICAgLy8gQ2xlYXIgdGhlIG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2FzIGlu
c2lkZSB0aGUgcG9wdXAuCiAgICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKQEAgLTExMzAsNCAr
ODkwLDYgQEAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKICAg
ICAvLyBUaGlzIGRvZXNuJ3Qgc2VlbSB0b3RhbGx5IGFjY3VyYXRlIGFzIHRoZXJlIGlzIGEgcmFj
ZSBiZXR3ZWVuCiAgICAgLy8gb25sb2FkIGZpcmluZyBhbmQgdGhlIGxhc3Qgc2NyaXB0IHRhZyBi
ZWluZyBleGVjdXRlZC4KICAgICBsb2dUaW1lKCdUaW1lIHRvIGxvYWQgSlMnLCBnX3BhZ2VMb2Fk
U3RhcnRUaW1lKTsKKyAgICBnX3Jlc291cmNlTG9hZGVyID0gbmV3IFJlc291cmNlTG9hZGVyKCk7
CisgICAgZ19yZXNvdXJjZUxvYWRlci5sb2FkKCk7CiB9LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9h
cmQuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2lu
ZXNzX2Rhc2hib2FyZC5odG1sCmluZGV4IDZiZTBkZGEwNDU4YjY2ZjJmN2FmMDJkMDgwZjdkM2Qx
MDU2ZGQyNmYuLmJhNzEzNzk4YWMzNDE4M2M3NjQxYjk3ZTJhYTc5NGEyNGJiZWViMTMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNz
X2Rhc2hib2FyZC5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sCkBAIC0zMSw1ICszMSw2IEBAIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZsYWtpbmVzc19kYXNoYm9hcmQuY3Nz
Ij48L2xpbms+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImZsYWtpbmVzc19kYXNoYm9h
cmRfdGVzdHMuY3NzIj48L2xpbms+CiA8c2NyaXB0IHNyYz0iYnVpbGRlcnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlTG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iZmxha2luZXNzX2Rh
c2hib2FyZC5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL3Jlc291cmNlTG9hZGVyLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9yZXNvdXJjZUxvYWRlci5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTY4
ZDE4N2QzNmZhM2UyMjIxYjY0NTdhNjlmZDhhNjA0NWE1MjY4Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9yZXNvdXJjZUxvYWRlci5q
cwpAQCAtMCwwICsxLDIzMyBAQAorLy8gQ3JlYXRlIGEgbmV3IGZ1bmN0aW9uIHdpdGggc29tZSBv
ZiBpdHMgYXJndWVtZW50cworLy8gcHJlLWZpbGxlZC4KKy8vIFRha2VuIGZyb20gZ29vZy5wYXJ0
aWFsIGluIHRoZSBDbG9zdXJlIGxpYnJhcnkuCisvLyBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBBIGZ1
bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseS4KKy8vIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRk
aXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5CisvLyAgICAgICAgIGFwcGxpZWQg
dG8gZm4uCisvLyBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBv
ZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhcworLy8gICAgICAgICBpbnZva2VkIGFzIGEgbWV0aG9k
IG9mLgorZnVuY3Rpb24gcGFydGlhbChmbiwgdmFyX2FyZ3MpCit7CisgICAgdmFyIGFyZ3MgPSBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworICAgIHJldHVybiBmdW5j
dGlvbigpIHsKKyAgICAgICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBj
dXJyZW50IGFyZ3VtZW50cy4KKyAgICAgICAgdmFyIG5ld0FyZ3MgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMpOworICAgICAgICBuZXdBcmdzLnVuc2hpZnQuYXBwbHkobmV3
QXJncywgYXJncyk7CisgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBuZXdBcmdzKTsKKyAg
ICB9OworfTsKKworZnVuY3Rpb24gcmVxdWVzdCh1cmwsIHN1Y2Nlc3MsIGVycm9yLCBvcHRfaXNC
aW5hcnlEYXRhKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4
aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKKyAgICBpZiAob3B0X2lzQmluYXJ5RGF0YSkKKyAg
ICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRl
ZmluZWQnKTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAg
ICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0
dXMgPT0gMjAwKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MoeGhyKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBlcnJvcih4aHIpOworICAgICAgICB9CisgICAgfQorICAgIHho
ci5zZW5kKCk7Cit9CisKK3ZhciBSZXNvdXJjZUxvYWRlciA9IGZ1bmN0aW9uKCkgeworICAgIHRo
aXMuVEVTVF9SRVNVTFRTX1NFUlZFUiA9ICdodHRwOi8vdGVzdC1yZXN1bHRzLmFwcHNwb3QuY29t
Lyc7CisgICAgdGhpcy5DSFJPTUlVTV9FWFBFQ1RBVElPTlNfVVJMID0gJ2h0dHA6Ly9zdm4ud2Vi
a2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zJzsKKworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHRo
aXMuX3Jlc291cmNlc1RvTG9hZCA9IFsKKyAgICAgICAgdGhpcy5fbG9hZEJ1aWxkZXJzTGlzdCwK
KyAgICAgICAgdGhpcy5fbG9hZFJlc3VsdHNGaWxlcywKKyAgICAgICAgdGhpcy5fbG9hZEV4cGVj
dGF0aW9uc0ZpbGVzLAorICAgIF07Cit9CisKK1Jlc291cmNlTG9hZGVyLnByb3RvdHlwZS5sb2Fk
ID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5fbG9hZE5leHQoKTsKK30KKworUmVzb3VyY2VMb2Fk
ZXIucHJvdG90eXBlLmhhbmRsZVJlc291cmNlTG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0
aGlzLl9oYXZlUmVzdWx0c0ZpbGVzTG9hZGVkKCkpCisgICAgICAgIHRoaXMuX2xvYWROZXh0KCk7
Cit9CisKK1Jlc291cmNlTG9hZGVyLnByb3RvdHlwZS5idWlsZGVyc0xpc3RMb2FkZWQgPSBmdW5j
dGlvbigpIHsKKyAgICBpbml0QnVpbGRlcnMoKTsKKyAgICB0aGlzLl9sb2FkTmV4dCgpOworfQor
CitSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuX2xvYWROZXh0ID0gZnVuY3Rpb24oKQoreworICAg
IHZhciBsb2FkRnVuY3Rpb24gPSB0aGlzLl9yZXNvdXJjZXNUb0xvYWQuc2hpZnQoKTsKKyAgICBp
ZiAoIWxvYWRGdW5jdGlvbikgeworICAgICAgICByZXNvdXJjZUxvYWRpbmdDb21wbGV0ZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGxvYWRGdW5jdGlvbi5hcHBseSh0aGlzKTsKK30K
KworUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlLl9sb2FkQnVpbGRlcnNMaXN0ID0gZnVuY3Rpb24o
KSB7CisgICAgbG9hZEJ1aWxkZXJzTGlzdChnX2Nyb3NzRGFzaGJvYXJkU3RhdGUuZ3JvdXAsIGdf
Y3Jvc3NEYXNoYm9hcmRTdGF0ZS50ZXN0VHlwZSk7Cit9CisKK1Jlc291cmNlTG9hZGVyLnByb3Rv
dHlwZS5fbG9hZFJlc3VsdHNGaWxlcyA9IGZ1bmN0aW9uKCkgeworICAgIHBhcnNlUGFyYW1ldGVy
cygpOworCisgICAgaWYgKGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS51c2VUZXN0RGF0YSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4gZ19idWlsZGVycykKKyAg
ICAgICAgdGhpcy5fbG9hZFJlc3VsdHNGaWxlRm9yQnVpbGRlcihidWlsZGVyTmFtZSk7Cit9CisK
K1Jlc291cmNlTG9hZGVyLnByb3RvdHlwZS5fbG9hZFJlc3VsdHNGaWxlRm9yQnVpbGRlciA9IGZ1
bmN0aW9uKGJ1aWxkZXJOYW1lKSB7CisgICAgdmFyIHJlc3VsdHNGaWxlbmFtZTsKKyAgICBpZiAo
aXNUcmVlTWFwKCkpCisgICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9ICd0aW1lc19tcy5qc29uJzsK
KyAgICBlbHNlIGlmIChnX2Nyb3NzRGFzaGJvYXJkU3RhdGUuc2hvd0FsbFJ1bnMpCisgICAgICAg
IHJlc3VsdHNGaWxlbmFtZSA9ICdyZXN1bHRzLmpzb24nOworICAgIGVsc2UKKyAgICAgICAgcmVz
dWx0c0ZpbGVuYW1lID0gJ3Jlc3VsdHMtc21hbGwuanNvbic7CisKKyAgICB2YXIgcmVzdWx0c0Zp
bGVMb2NhdGlvbiA9IHRoaXMuX3BhdGhUb0J1aWxkZXJSZXN1bHRzRmlsZShidWlsZGVyTmFtZSkg
KyByZXN1bHRzRmlsZW5hbWUgKyAiJmNhbGxiYWNrPVIiOworICAgIHJlcXVlc3QocmVzdWx0c0Zp
bGVMb2NhdGlvbiwKKyAgICAgICAgICAgIHBhcnRpYWwoZnVuY3Rpb24obG9hZGVyLCBidWlsZGVy
TmFtZSwgeGhyKSB7CisgICAgICAgICAgICAgICAgbG9hZGVyLl9oYW5kbGVSZXN1bHRzRmlsZUxv
YWRlZChidWlsZGVyTmFtZSwgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICB9LCB0aGlz
LCBidWlsZGVyTmFtZSksCisgICAgICAgICAgICBwYXJ0aWFsKGZ1bmN0aW9uKGxvYWRlciwgYnVp
bGRlck5hbWUsIHhocikgeworICAgICAgICAgICAgICAgIGxvYWRlci5faGFuZGxlUmVzdWx0c0Zp
bGVMb2FkRXJyb3IoYnVpbGRlck5hbWUpOworICAgICAgICAgICAgfSwgdGhpcywgYnVpbGRlck5h
bWUpKTsKK30KKworUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlLl9oYW5kbGVSZXN1bHRzRmlsZUxv
YWRlZCA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBmaWxlRGF0YSkgeworICAgIGlmIChpc1RyZWVN
YXAoKSkKKyAgICAgICAgdGhpcy5fcHJvY2Vzc1RpbWVzSlNPTkRhdGEoYnVpbGRlck5hbWUsIGZp
bGVEYXRhKTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuX3Byb2Nlc3NSZXN1bHRzSlNPTkRhdGEo
YnVpbGRlck5hbWUsIGZpbGVEYXRhKTsKKworICAgIC8vIFdlIG5lZWQgdGhpcyB3b3JrLWFyb3Vu
ZCBmb3Igd2Via2l0Lm9yZy9iLzUwNTg5LgorICAgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2J1
aWxkZXJOYW1lXSkgeworICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHRzRmlsZUxvYWRFcnJvcihi
dWlsZGVyTmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0aGlzLmhhbmRsZVJl
c291cmNlTG9hZCgpOworfQorCitSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuX3Byb2Nlc3NUaW1l
c0pTT05EYXRhID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIGZpbGVEYXRhKSB7CisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwcm9iYWJseSBpbmNsdWRlIHRoZSBidWlsZGVyTmFtZSBpbiB0aGUgSlNP
TgorICAgIC8vIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gb25seSBsb2FkaW5nIG9uZSBKU09OIGZp
bGUgcGVyIHBhZ2UuCisgICAgZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSA9IEpTT04u
cGFyc2UoZmlsZURhdGEuc2xpY2UoMiwgZmlsZURhdGEubGVuZ3RoIC0gMSkpOworfQorCitSZXNv
dXJjZUxvYWRlci5wcm90b3R5cGUuX3Byb2Nlc3NSZXN1bHRzSlNPTkRhdGEgPSBmdW5jdGlvbihi
dWlsZGVyTmFtZSwgZmlsZURhdGEpIHsKKyAgICB2YXIgYnVpbGRzID0gSlNPTi5wYXJzZShmaWxl
RGF0YS5zbGljZSgyLCBmaWxlRGF0YS5sZW5ndGggLSAxKSk7CisKKyAgICB2YXIganNvbl92ZXJz
aW9uID0gYnVpbGRzWyd2ZXJzaW9uJ107CisgICAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4gYnVp
bGRzKSB7CisgICAgICAgIGlmIChidWlsZGVyTmFtZSA9PSAndmVyc2lvbicpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAvLyBJZiBhIHRlc3Qgc3VpdGUgc3RvcHMgYmVpbmcgcnVu
IG9uIGEgZ2l2ZW4gYnVpbGRlciwgd2UgZG9uJ3Qgd2FudCB0byBzaG93IGl0LgorICAgICAgICAv
LyBBc3N1bWUgYW55IGJ1aWxkZXIgd2l0aG91dCBhIHJ1biBpbiB0d28gd2Vla3MgZm9yIGEgZ2l2
ZW4gdGVzdCBzdWl0ZSBpc24ndAorICAgICAgICAvLyBydW5uaW5nIHRoYXQgc3VpdGUgYW55bW9y
ZS4KKyAgICAgICAgLy8gRklYTUU6IEdyYWIgd2hpY2ggYm90cyBydW4gd2hpY2ggdGVzdHMgZGly
ZWN0bHkgZnJvbSB0aGUgYnVpbGRib3QgSlNPTiBpbnN0ZWFkLgorICAgICAgICB2YXIgbGFzdFJ1
blNlY29uZHMgPSBidWlsZHNbYnVpbGRlck5hbWVdLnNlY29uZHNTaW5jZUVwb2NoWzBdOworICAg
ICAgICBpZiAoKERhdGUubm93KCkgLyAxMDAwKSAtIGxhc3RSdW5TZWNvbmRzID4gT05FX1dFRUtf
U0VDT05EUykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgoRGF0ZS5ub3co
KSAvIDEwMDApIC0gbGFzdFJ1blNlY29uZHMgPiBPTkVfREFZX1NFQ09ORFMpCisgICAgICAgICAg
ICBnX3N0YWxlQnVpbGRlcnMucHVzaChidWlsZGVyTmFtZSk7CisKKyAgICAgICAgaWYgKGpzb25f
dmVyc2lvbiA+PSA0KQorICAgICAgICAgICAgYnVpbGRzW2J1aWxkZXJOYW1lXVtURVNUU19LRVld
ID0gZmxhdHRlblRyaWUoYnVpbGRzW2J1aWxkZXJOYW1lXVtURVNUU19LRVldKTsKKyAgICAgICAg
Z19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSA9IGJ1aWxkc1tidWlsZGVyTmFtZV07Cisg
ICAgfQorfQorCitSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuX2hhbmRsZVJlc3VsdHNGaWxlTG9h
ZEVycm9yID0gZnVuY3Rpb24oYnVpbGRlck5hbWUpIHsKKyAgICB2YXIgZXJyb3IgPSAnRmFpbGVk
IHRvIGxvYWQgcmVzdWx0cyBmaWxlIGZvciAnICsgYnVpbGRlck5hbWUgKyAnLic7CisKKyAgICBp
ZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Ip
OworICAgICAgICBnX2J1aWxkZXJzVGhhdEZhaWxlZFRvTG9hZC5wdXNoKGJ1aWxkZXJOYW1lKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBBdm9pZCB0byBzaG93IGVycm9yL3dhcm5pbmcgbWVz
c2FnZXMgZm9yIG5vbi1sYXlvdXQgdGVzdHMuIFdlIG1heSBiZQorICAgICAgICAvLyBjaGVja2lu
ZyB0aGUgYnVpbGRlcnMgdGhhdCBhcmUgbm90IHJ1bm5pbmcgdGhlIHRlc3RzLgorICAgICAgICBj
b25zb2xlLmluZm8oJ2luZm86JyArIGVycm9yKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgdGhp
cyBidWlsZGVyIGZyb20gYnVpbGRlcnMsIHNvIHdlIGRvbid0IHRyeSB0byB1c2UgdGhlCisgICAg
Ly8gZGF0YSB0aGF0IGlzbid0IHRoZXJlLgorICAgIGRlbGV0ZSBnX2J1aWxkZXJzW2J1aWxkZXJO
YW1lXTsKKworICAgIC8vIENoYW5nZSB0aGUgZGVmYXVsdCBidWlsZGVyIG5hbWUgaWYgaXQgaGFz
IGJlZW4gZGVsZXRlZC4KKyAgICBpZiAoZ19kZWZhdWx0QnVpbGRlck5hbWUgPT0gYnVpbGRlck5h
bWUpIHsKKyAgICAgICAgZ19kZWZhdWx0QnVpbGRlck5hbWUgPSBudWxsOworICAgICAgICBmb3Ig
KHZhciBhdmFpbGFibGVCdWlsZGVyTmFtZSBpbiBnX2J1aWxkZXJzKSB7CisgICAgICAgICAgICBn
X2RlZmF1bHRCdWlsZGVyTmFtZSA9IGF2YWlsYWJsZUJ1aWxkZXJOYW1lOworICAgICAgICAgICAg
Z19kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcy5idWlsZGVyID0gYXZhaWxhYmxl
QnVpbGRlck5hbWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWdfZGVmYXVsdEJ1aWxkZXJOYW1lKSB7CisgICAgICAgICAgICB2YXIgZXJyb3IgPSAnTm8gdGVz
dHMgcmVzdWx0cyBmb3VuZCBmb3IgJyArIGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS50ZXN0VHlwZSAr
ICcuIFJlbG9hZCB0aGUgcGFnZSB0byB0cnkgZmV0Y2hpbmcgaXQgYWdhaW4uJzsKKyAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOworICAgICAgICAgICAgYWRkRXJyb3IoZXJyb3IpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHJvY2VlZCBhcyBpZiB0aGUgcmVzb3VyY2UgaGFk
IGxvYWRlZC4KKyAgICB0aGlzLmhhbmRsZVJlc291cmNlTG9hZCgpOworfQorCitSZXNvdXJjZUxv
YWRlci5wcm90b3R5cGUuX2hhdmVSZXN1bHRzRmlsZXNMb2FkZWQgPSBmdW5jdGlvbigpIHsKKyAg
ICBmb3IgKHZhciBidWlsZGVyIGluIGdfYnVpbGRlcnMpIHsKKyAgICAgICAgaWYgKCFnX3Jlc3Vs
dHNCeUJ1aWxkZXJbYnVpbGRlcl0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitSZXNvdXJjZUxvYWRlci5wcm90b3R5cGUuX3BhdGhUb0J1
aWxkZXJSZXN1bHRzRmlsZSA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKSB7CisgICAgcmV0dXJuIHRo
aXMuVEVTVF9SRVNVTFRTX1NFUlZFUiArICd0ZXN0ZmlsZT9idWlsZGVyPScgKyBidWlsZGVyTmFt
ZSArCisgICAgICAgICAgICAnJm1hc3Rlcj0nICsgYnVpbGRlck1hc3RlcihidWlsZGVyTmFtZSku
bmFtZSArCisgICAgICAgICAgICAnJnRlc3R0eXBlPScgKyBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUu
dGVzdFR5cGUgKyAnJm5hbWU9JzsKK30KKworUmVzb3VyY2VMb2FkZXIucHJvdG90eXBlLl9sb2Fk
RXhwZWN0YXRpb25zRmlsZXMgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoIWlzRmxha2luZXNzRGFz
aGJvYXJkKCkpIHsKKyAgICAgICAgdGhpcy5fbG9hZE5leHQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHZhciBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdCA9IHt9OworICAgIHRy
YXZlcnNlUGxhdGZvcm1zVHJlZShmdW5jdGlvbihwbGF0Zm9ybSwgcGxhdGZvcm1OYW1lKSB7Cisg
ICAgICAgIGlmIChwbGF0Zm9ybS5mYWxsYmFja1BsYXRmb3JtcykKKyAgICAgICAgICAgIHBsYXRm
b3JtLmZhbGxiYWNrUGxhdGZvcm1zLmZvckVhY2goZnVuY3Rpb24oZmFsbGJhY2tQbGF0Zm9ybSkg
eworICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja1BsYXRmb3JtT2JqZWN0ID0gcGxhdGZvcm1P
YmplY3RGb3JOYW1lKGZhbGxiYWNrUGxhdGZvcm0pOworICAgICAgICAgICAgICAgIGlmIChmYWxs
YmFja1BsYXRmb3JtT2JqZWN0LmV4cGVjdGF0aW9uc0RpcmVjdG9yeSAmJiAhKGZhbGxiYWNrUGxh
dGZvcm0gaW4gZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3QpKQorICAgICAgICAgICAgICAgICAg
ICBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdFtmYWxsYmFja1BsYXRmb3JtXSA9IEVYUEVDVEFU
SU9OU19VUkxfQkFTRV9QQVRIICsgZmFsbGJhY2tQbGF0Zm9ybU9iamVjdC5leHBlY3RhdGlvbnNE
aXJlY3RvcnkgKyAnL1Rlc3RFeHBlY3RhdGlvbnMnOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgaWYgKHBsYXRmb3JtLmV4cGVjdGF0aW9uc0RpcmVjdG9yeSkKKyAgICAgICAgICAgIGV4cGVj
dGF0aW9uc0ZpbGVzVG9SZXF1ZXN0W3BsYXRmb3JtTmFtZV0gPSBFWFBFQ1RBVElPTlNfVVJMX0JB
U0VfUEFUSCArIHBsYXRmb3JtLmV4cGVjdGF0aW9uc0RpcmVjdG9yeSArICcvVGVzdEV4cGVjdGF0
aW9ucyc7CisgICAgfSk7CisKKyAgICBmb3IgKHBsYXRmb3JtV2l0aEV4cGVjdGF0aW9ucyBpbiBl
eHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdCkKKyAgICAgICAgcmVxdWVzdChleHBlY3RhdGlvbnNG
aWxlc1RvUmVxdWVzdFtwbGF0Zm9ybVdpdGhFeHBlY3RhdGlvbnNdLAorICAgICAgICAgICAgICAg
IHBhcnRpYWwoZnVuY3Rpb24obG9hZGVyLCBwbGF0Zm9ybU5hbWUsIHhocikgeworICAgICAgICAg
ICAgICAgICAgICBnX2V4cGVjdGF0aW9uc0J5UGxhdGZvcm1bcGxhdGZvcm1OYW1lXSA9IGdldFBh
cnNlZEV4cGVjdGF0aW9ucyh4aHIucmVzcG9uc2VUZXh0KTsKKworICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3RbcGxhdGZvcm1OYW1lXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVz
dCkubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9sb2FkTmV4dCgpOwor
ICAgICAgICAgICAgICAgIH0sIHRoaXMsIHBsYXRmb3JtV2l0aEV4cGVjdGF0aW9ucyksCisgICAg
ICAgICAgICAgICAgcGFydGlhbChmdW5jdGlvbihwbGF0Zm9ybU5hbWUsIHhocikgeworICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgbG9hZCBleHBlY3RhdGlvbnMg
ZmlsZSBmb3IgJyArIHBsYXRmb3JtTmFtZSk7CisgICAgICAgICAgICAgICAgfSwgcGxhdGZvcm1X
aXRoRXhwZWN0YXRpb25zKSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbCBiL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCmluZGV4IGU2ODc5ZDkz
MTg2NmM4Y2YyYTkxMmRiMTNlYjEyZTMzOTEzYmE0ZjEuLjE0ZjhjOGJmYjA5ZjRiOTcxYjU5ZGMw
ZmMwN2IxYzg0MTIxYWQxMWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvcnVuLXVuaXR0ZXN0cy5odG1sCkBAIC00Nyw2ICs0Nyw3
IEBAIGZ1bmN0aW9uIGxvYWRCdWlsZGVyc0xpc3QoKSB7fTsKIGZ1bmN0aW9uIGdfaGFuZGxlQnVp
bGRlcnNMaXN0TG9hZGVkKCkge307CiA8L3NjcmlwdD4KIAorPHNjcmlwdCBzcmM9InJlc291cmNl
TG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iZmxha2luZXNzX2Rhc2hib2FyZC5qcyI+PC9zY3JpcHQ+CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJl
ZW1hcC5odG1sIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVl
bWFwLmh0bWwKaW5kZXggNjg0OTU3YmM2NGNmNzFiOTViMTlhOTM0Y2FlYWI5NmRjNGVlMzY2YS4u
NWQ0NzFhNzNkYTcxYjNkNDdhY2QwYTFlYjAxZGM3YzliYzE2OWU1OCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKKysrIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwKQEAg
LTEwOCw2ICsxMDgsNyBAQCB0ZCB7CiB9CiA8L3N0eWxlPgogPHNjcmlwdCBzcmM9ImJ1aWxkZXJz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZUxvYWRlci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
J3dlYnRyZWVtYXAuanMnPjwvc2NyaXB0PgogCkBAIC0yMjMsMzUgKzIyNCwxMiBAQCBmdW5jdGlv
biBzaG93QXZlcmFnZXMoKQogICAgIG1hcC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0YWJsZSwg
bWFwKTsKIH0KIAotdmFyIGdfcmVzdWx0c0J5QnVpbGRlciA9IHt9OwotCi1mdW5jdGlvbiBBRERf
UkVTVUxUUyhkYXRhKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaW5jbHVk
ZSB0aGUgYnVpbGRlck5hbWUgaW4gdGhlIEpTT04KLSAgICAvLyByYXRoZXIgdGhhbiByZWx5aW5n
IG9uIG9ubHkgbG9hZGluZyBvbmUgSlNPTiBmaWxlIHBlciBwYWdlLgotICAgIGlmICghZ19yZXN1
bHRzQnlCdWlsZGVyW2dfY3VycmVudFN0YXRlLmJ1aWxkZXJdKQotICAgICAgICBnX3Jlc3VsdHNC
eUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUuYnVpbGRlcl0gPSBkYXRhOwotCi0gICAgaGFuZGxlTG9j
YXRpb25DaGFuZ2UoKTsKLX0KLQotZnVuY3Rpb24gZ19oYW5kbGVCdWlsZGVyc0xpc3RMb2FkZWQo
KSB7Ci0gICAgZ19idWlsZGVyc0xpc3RMb2FkZWQgPSB0cnVlOwotICAgIGluaXRCdWlsZGVycyhn
X2N1cnJlbnRTdGF0ZSk7Ci0gICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRNTCA9IGh0
bWxGb3JUZXN0VHlwZVN3aXRjaGVyKCk7Ci0gICAgcGFyc2VQYXJhbWV0ZXJzKCk7Ci0gICAgYXBw
ZW5kSlNPTlNjcmlwdEVsZW1lbnRGb3IoZ19jdXJyZW50U3RhdGUuYnVpbGRlcik7Ci19Ci0KIHZh
ciBnX2lzR2VuZXJhdGluZ1BhZ2UgPSBmYWxzZTsKIHZhciBnX3dlYlRyZWU7CiAKIGZ1bmN0aW9u
IGdlbmVyYXRlUGFnZSgpCiB7Ci0gICAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50
U3RhdGUuYnVpbGRlcl0pIHsKLSAgICAgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoZ19jdXJy
ZW50U3RhdGUuYnVpbGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgJCgnaGVhZGVy
LWNvbnRhaW5lcicpLmlubmVySFRNTCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKCk7CiAKICAg
ICBnX2lzR2VuZXJhdGluZ1BhZ2UgPSB0cnVlOwogCkBAIC0zMTksMTIgKzI5Nyw2IEBAIGdfZGVm
YXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSB7CiAKIGZ1bmN0aW9uIGhhbmRsZVF1
ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBhcmFtcykKIHsKLSAgICBpZiAoIWdfYnVpbGRlcnNMaXN0TG9h
ZGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWdfcmVzdWx0c0J5QnVpbGRl
cltnX2N1cnJlbnRTdGF0ZS5idWlsZGVyXSkKLSAgICAgICAgYXBwZW5kSlNPTlNjcmlwdEVsZW1l
bnRGb3IoZ19jdXJyZW50U3RhdGUuYnVpbGRlcik7Ci0KICAgICBmb3IgKHZhciBwYXJhbSBpbiBw
YXJhbXMpIHsKICAgICAgICAgaWYgKHBhcmFtICE9ICd0cmVlbWFwZm9jdXMnKSB7CiAgICAgICAg
ICAgICAkKCdtYXAnKS5pbm5lckhUTUwgPSAnTG9hZGluZy4uLic7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169230</attachid>
            <date>2012-10-17 12:00:05 -0700</date>
            <delta_ts>2012-10-20 10:58:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99246-20121017205850.patch</filename>
            <type>text/plain</type>
            <size>45702</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMzMxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjFiM2RjZWQ3ZDM0YjMxNWM4NmU5NjI4NGFmOWE3YWIz
MmM1MzU4NS4uMDdmOTJkNzdjYzAxZTc3NjE0N2NiMTA4YTM0OWY4NDNkNzQ0MmRjZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0
IEBACisyMDEyLTEwLTE3ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisK
KyAgICAgICAgW1Rlc3RSZXN1bHRTZXJ2ZXJdIE1vdmUgdGhlIHJlc291cmNlIGxvYWRpbmcgaW50
byBhIGRlZGljYXRlZCBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTkyNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBIG5ldyAnbG9hZGVyJyBuYW1lc3BhY2UgaXMgY3JlYXRlZCwgY29udGFpbmlu
ZyB0aGUgcmVxdWVzdCBtZXRob2QgKHByZXZpb3VzbHkgbG9jYXRlZCBpbiBkYXNoYm9hcmRfYmFz
ZS5qcykKKyAgICAgICAgYW5kIHRoZSBuZXcgTG9hZGVyIG9iamVjdCwgd2hpY2ggaGFuZGxlcyB0
aGUgbG9hZGluZyBvZiBhbGwgdGhlIG5lY2Vzc2FyeSBkYXRhIHRoZSBkYXNoYm9hcmQgbWlnaHQg
cmVxdWlyZS4KKworICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
YWdncmVnYXRlX3Jlc3VsdHMuaHRtbDogSW5jbHVkZSB0aGUgbG9hZGVyLmpzIHNvdXJjZSBmaWxl
LgorICAgICAgICAqIFRlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYnVpbGRlcnMu
anM6CisgICAgICAgIChyZXF1ZXN0QnVpbGRlckxpc3QpOiBVc2UgdGhlIHJlcXVlc3QgbWV0aG9k
IGxvY2F0ZWQgaW4gdGhlIGxvYWRlciBuYW1lc3BhY2UgaW5zdGVhZCBvZiB0aGUgcmVtb3ZlZCBk
b1hIUiBtZXRob2QuCisgICAgICAgIChvbkJ1aWxkZXJMaXN0TG9hZCk6IE5vdyBwYXJzZXMgdGhl
IHJlc3BvbnNlIHRleHQgb2YgdGhlIHBhc3NlZC1pbiBYSFIuIFdoZW4gYWxsIHRoZSBidWlsZGVy
IGxpc3RzIGFyZSBsb2FkZWQgdGhlCisgICAgICAgIHJlc291cmNlIGxvYWRlciBvYmplY3QgaXMg
bm90aWZpZWQgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgKG9uRXJyb3JMb2FkaW5nQnVpbGRlckxp
c3QpOiBUaGUgcGFydGlhbCBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24gYWxzbyBh
ZGRzIGFuIFhIUiBwYXJhbWV0ZXIuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qczogTXVjaCBvZiB0aGUgcmVzb3VyY2UgbG9hZGlu
Zy1yZWxhdGVkIGNvZGUgaXMgbW92ZWQgdG8gbG9hZGVyLmpzLgorICAgICAgICBUaGUgTG9hZGVy
IG9iamVjdCBpcyBub3cgdXNlZCB0byBsb2FkIGFsbCB0aGUgcmVxdWlyZWQgcmVzb3VyY2VzLgor
ICAgICAgICAocGFyc2VQYXJhbWV0ZXJzKTogRG9uJ3QgcHVzaCB0aGUgJ2J1aWxkZXInIHBhcmFt
ZXRlciBpbnRvIHRoZSBjdXJyZW50IHN0YXRlIGlmIHRoZSB1bml0IHRlc3RzIGFyZSBiZWluZyBy
dW4uCisgICAgICAgIChyZXNvdXJjZUxvYWRpbmdDb21wbGV0ZSk6IFRoaXMgbWV0aG9kIGdldHMg
Y2FsbGVkIHdoZW4gYWxsIHRoZSByZXNvdXJjZXMgYXJlIGxvYWRlZCBhbmQgdGhlIGRhc2hib2Fy
ZCBzaG91bGQKKyAgICAgICAgcHJvY2VlZCB3aXRoIGdlbmVyYXRpbmcgdGhlIHBhZ2UuCisgICAg
ICAgIChoYW5kbGVMb2NhdGlvbkNoYW5nZSk6CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWw6IEluY2x1ZGUgdGhlIGxv
YWRlci5qcyBzb3VyY2UgZmlsZS4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuanM6IFRoZSByZXF1ZXN0IG1ldGhvZCBoYXMg
YmVlbiByZWxvY2F0ZWQgdG8gdGhlIGxvYWRlciBuYW1lc3BhY2UuCisgICAgICAgICogVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0
cy5qczogVGhlIGFmZmVjdGVkIHRlc3QgY2FzZXMgYXJlIG1vZGlmaWVkIGFwcHJvcHJpYXRlbHku
CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNo
Ym9hcmRzL2xvYWRlci5qczogQWRkZWQuCisgICAgICAgICguKTogQSBuZXcgbmFtZXNwYWNlIGlz
IGludHJvZHVjZWQsIHB1YmxpY2x5IGV4cG9ydGluZyB0aGUgcmVxdWVzdCBtZXRob2QgdGhhdCBw
ZXJmb3JtcyBhbiBYSFIgb3BlcmF0aW9uIGFuZCBhIExvYWRlciBvYmplY3QKKyAgICAgICAgd2hp
Y2ggb3ZlcnNlZXMgcmVzb3VyY2UgbG9hZGluZy4gVGhlIGxvYWRpbmcgaXMgZG9uZSBpbiBzdGVw
cywgZmlyc3QgbG9hZGluZyB0aGUgYnVpbGRlcnMgbGlzdCwgYWZ0ZXIgdGhhdCB0aGUgcmVzdWx0
cyBmaWxlcworICAgICAgICB0aGUgY3VycmVudCBkYXNoYm9hcmQgbmVlZHMsIGFuZCBsYXN0bHkg
dGhlIFRlc3RFeHBlY3RhdGlvbnMgZmlsZXMgaWYgdGhleSBhcmUgcmVxdWlyZWQgYnkgdGhlIGRh
c2hib2FyZC4gV2hlbiBkb25lIHRoZSBsb2FkZXIKKyAgICAgICAgY2FsbHMgdGhlIHJlc291cmNl
TG9hZGluZ0NvbXBsZXRlIG1ldGhvZCBsb2NhdGVkIGluIGRhc2hib2FyZF9iYXNlLmpzLiBUaGlz
IHNpZ25hbHMgdGhlIGRhc2hib2FyZCBhbGwgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUKKyAgICAg
ICAgYW5kIGl0IGNhbiBwcm9jZWVkIHdpdGggZ2VuZXJhdGluZyB0aGUgZGFzaGJvYXJkIHBhZ2Uu
CisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXJfdW5p
dHRlc3RzLmpzOiBBZGRlZC4gQ29udGFpbnMgdW5pdCB0ZXN0cyBmb3IgdGhlIExvYWRlciBvYmpl
Y3QsIGNvdmVyaW5nIHRoZQorICAgICAgICBpbmNyZW1lbnRhbCBsb2FkaW5nIGFuZCB0aGUgbG9h
ZGluZyBvZiByZXN1bHRzIGZpbGVzIGFuZCBUZXN0RXhwZWN0YXRpb25zIGZpbGVzLiBUaGUgYnVp
bGRlcnMgbGlzdCBsb2FkaW5nIGlzIGN1cnJlbnRseSBub3QKKyAgICAgICAgdGVzdGVkIGFzIHRo
ZSB1bml0IHRlc3RzIHBhZ2Ugb3ZlcnJpZGVzIHJlbGF0ZWQgbWV0aG9kcyB0aGF0IHBvc3NpYmx5
IGFmZmVjdCBvdGhlciB0ZXN0cycgYmVoYXZpb3IuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tdW5pdHRlc3RzLmh0bWw6IE5vdyBpbmNsdWRlcyB0aGUg
bG9hZGVyLmpzIGFuZCBsb2FkZXJfdW5pdHRlc3RzLmpzIHNvdXJjZSBmaWxlLgorICAgICAgICBS
ZWZhY3RvcnMgdGhlIGNvZGUgYSBiaXQgZHVlIHRvIGNoYW5nZXMgaW4gaG93IG9uQnVpbGRlckxp
c3RMb2FkIGJlaGF2ZXMuCisgICAgICAgICogVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy90aW1lbGluZV9leHBsb3Jlci5odG1sOiBOb3cgaW5jbHVkZXMgdGhlIGxvYWRlci5qcyBz
b3VyY2UgZmlsZS4KKyAgICAgICAgKiBUZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRz
L3RyZWVtYXAuaHRtbDogRGl0dG8uIEFsc28gcmVmYWN0b3JzIHRoZSBjb2RlIHRvIHRha2UgaW50
byBhY2NvdW50CisgICAgICAgIHRoYXQgYWxsIHRoZSB0ZXN0IGZpbGVzIGFyZSBub3cgbG9hZGVk
IGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBkYXNoYm9hcmQgcGFnZS4KKwogMjAxMi0xMC0xNSAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dlYlNvY2tl
dF0gVXBkYXRlIHB5d2Vic29ja2V0IHRvIDAuNy44CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwgYi9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0
bWwKaW5kZXggOWE3NmIwNmI0ZWQ3MjZjOWJiNjI1MGNkOTRmZTkzYWQ5MDk3ZGQ0Zi4uZmEwMzNh
NTRkNGZkYWIyZWI1NjM4MzVmZjQzNjQxNGY3OTFiYTQxOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5odG1sCisr
KyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jl
c3VsdHMuaHRtbApAQCAtNTEsNiArNTEsNyBAQCBpbWcgewogfQogPC9zdHlsZT4KIDxzY3JpcHQg
c3JjPSJidWlsZGVycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
PgogLy8gQGZpbGVvdmVydmlldyBDcmVhdGVzIGEgZGFzaGJvYXJkIGZvciB0cmFja2luZyBudW1i
ZXIgb2YgcGFzc2VzL2ZhaWx1cmVzIHBlciBydW4uCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzIGIvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcwppbmRleCA1NmFlYmNhOGQ1OTMz
ZjM4YWE5MTljMzc0ZTJkMjI2NjZlMjM3YzVhLi4xNTBiM2I0NDMzNmUxYWY1M2JhMDJhOTEwMjc2
ZmEwOTVjY2M2MTI2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1k
YXNoYm9hcmRzL2J1aWxkZXJzLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGlj
LWRhc2hib2FyZHMvYnVpbGRlcnMuanMKQEAgLTEyMiwyNiArMTIyLDEzIEBAIGZ1bmN0aW9uIGFz
c29jaWF0ZUJ1aWxkZXJzV2l0aE1hc3RlcihidWlsZGVycywgbWFzdGVyKQogICAgIH0pOwogfQog
Ci1mdW5jdGlvbiBkb1hIUih1cmwsIG9uTG9hZCwgYnVpbGRlckdyb3VwcywgZ3JvdXBOYW1lKQot
ewotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICB4aHIub3BlbignR0VU
JywgdXJsLCB0cnVlKTsKLSAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlm
ICh4aHIuc3RhdHVzID09IDIwMCkKLSAgICAgICAgICAgIG9uTG9hZChKU09OLnBhcnNlKHhoci5y
ZXNwb25zZSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvbkVycm9yTG9hZGluZ0J1aWxk
ZXJMaXN0KHVybCwgYnVpbGRlckdyb3VwcywgZ3JvdXBOYW1lKTsKLSAgICB9OwotICAgIHhoci5v
bmVycm9yID0gZnVuY3Rpb24oKSB7IG9uRXJyb3JMb2FkaW5nQnVpbGRlckxpc3QodXJsLCBidWls
ZGVyR3JvdXBzLCBncm91cE5hbWUpOyB9OwotICAgIHhoci5zZW5kKCk7Ci19Ci0KIGZ1bmN0aW9u
IHJlcXVlc3RCdWlsZGVyTGlzdChidWlsZGVyR3JvdXBzLCBidWlsZGVyRmlsdGVyLCBtYXN0ZXIs
IGdyb3VwTmFtZSwgYnVpbGRlckdyb3VwKQogewogICAgIGlmICghYnVpbGRlckdyb3Vwc1tncm91
cE5hbWVdKQogICAgICAgICBidWlsZGVyR3JvdXBzW2dyb3VwTmFtZV0gPSBidWlsZGVyR3JvdXA7
Ci0gICAgdmFyIG9uTG9hZCA9IHBhcnRpYWwob25CdWlsZGVyTGlzdExvYWQsIGJ1aWxkZXJHcm91
cHMsIGJ1aWxkZXJGaWx0ZXIsIG1hc3RlciwgZ3JvdXBOYW1lKTsKLSAgICBkb1hIUihtYXN0ZXIu
YnVpbGRlckpzb25QYXRoKCksIG9uTG9hZCwgYnVpbGRlckdyb3VwcywgZ3JvdXBOYW1lKTsKKyAg
ICBsb2FkZXIucmVxdWVzdChtYXN0ZXIuYnVpbGRlckpzb25QYXRoKCksCisgICAgICAgICAgICAg
ICAgICAgcGFydGlhbChvbkJ1aWxkZXJMaXN0TG9hZCwgYnVpbGRlckdyb3VwcywgYnVpbGRlckZp
bHRlciwgbWFzdGVyLCBncm91cE5hbWUpLAorICAgICAgICAgICAgICAgICAgIHBhcnRpYWwob25F
cnJvckxvYWRpbmdCdWlsZGVyTGlzdCwgbWFzdGVyLmJ1aWxkZXJKc29uUGF0aCgpLCBidWlsZGVy
R3JvdXBzLCBncm91cE5hbWUpKTsKICAgICBidWlsZGVyR3JvdXBzW2dyb3VwTmFtZV0uZXhwZWN0
ZWRHcm91cHMgKz0gMTsKIH0KIApAQCAtMjE4LDE2ICsyMDUsMTYgQEAgZnVuY3Rpb24gZ2VuZXJh
dGVCdWlsZGVyc0Zyb21CdWlsZGVyTGlzdChidWlsZGVyTGlzdCwgZmlsdGVyKQogICAgIH0pOwog
fQogCi1mdW5jdGlvbiBvbkJ1aWxkZXJMaXN0TG9hZChidWlsZGVyR3JvdXBzLCBidWlsZGVyRmls
dGVyLCBtYXN0ZXIsIGdyb3VwTmFtZSwganNvbikKK2Z1bmN0aW9uIG9uQnVpbGRlckxpc3RMb2Fk
KGJ1aWxkZXJHcm91cHMsIGJ1aWxkZXJGaWx0ZXIsIG1hc3RlciwgZ3JvdXBOYW1lLCB4aHIpCiB7
Ci0gICAgdmFyIGJ1aWxkZXJzID0gZ2VuZXJhdGVCdWlsZGVyc0Zyb21CdWlsZGVyTGlzdChPYmpl
Y3Qua2V5cyhqc29uKSwgYnVpbGRlckZpbHRlcik7CisgICAgdmFyIGJ1aWxkZXJzID0gZ2VuZXJh
dGVCdWlsZGVyc0Zyb21CdWlsZGVyTGlzdChPYmplY3Qua2V5cyhKU09OLnBhcnNlKHhoci5yZXNw
b25zZVRleHQpKSwgYnVpbGRlckZpbHRlcik7CiAgICAgYXNzb2NpYXRlQnVpbGRlcnNXaXRoTWFz
dGVyKGJ1aWxkZXJzLCBtYXN0ZXIpOwogICAgIGJ1aWxkZXJHcm91cHNbZ3JvdXBOYW1lXS5hcHBl
bmQoYnVpbGRlcnMpOwogICAgIGlmIChidWlsZGVyR3JvdXBzW2dyb3VwTmFtZV0ubG9hZGVkKCkp
Ci0gICAgICAgIGdfaGFuZGxlQnVpbGRlcnNMaXN0TG9hZGVkKCk7CisgICAgICAgIGdfcmVzb3Vy
Y2VMb2FkZXIuYnVpbGRlcnNMaXN0TG9hZGVkKCk7CiB9CiAKLWZ1bmN0aW9uIG9uRXJyb3JMb2Fk
aW5nQnVpbGRlckxpc3QodXJsLCBidWlsZGVyR3JvdXBzLCBncm91cE5hbWUpCitmdW5jdGlvbiBv
bkVycm9yTG9hZGluZ0J1aWxkZXJMaXN0KHVybCwgYnVpbGRlckdyb3VwcywgZ3JvdXBOYW1lLCB4
aHIpCiB7CiAgICAgYnVpbGRlckdyb3Vwc1tncm91cE5hbWVdLmdyb3VwcyArPSAxOwogICAgIGNv
bnNvbGUubG9nKCdDb3VsZCBub3QgbG9hZCBsaXN0IG9mIGJ1aWxkZXJzIGZyb20gJyArIHVybCAr
ICcuIFRyeSByZWxvYWRpbmcuJyk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwppbmRleCBhM2E0ZWMxMjYx
MTVhMjExMDgwNjVlM2Q4ZTAwODAzM2U2NzM2YTA2Li40ZmMwYmI0NDgwMWQyOTllNmIwMjdkYTYy
Yzc2ZmI3MzdiNjcwOGZiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRp
Yy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvZGFzaGJvYXJkX2Jhc2UuanMKQEAgLTMzLDYgKzMzLDcgQEAK
IC8vIFRoZSBjYWxsaW5nIHBhZ2UgaXMgZXhwZWN0ZWQgdG8gaW1wbGVtZW50IHRoZSBmb2xsb3dp
bmcgImFic3RyYWN0IgogLy8gZnVuY3Rpb25zL29iamVjdHM6CiB2YXIgZ19wYWdlTG9hZFN0YXJ0
VGltZSA9IERhdGUubm93KCk7Cit2YXIgZ19yZXNvdXJjZUxvYWRlcjsKIAogLy8gR2VuZXJhdGVz
IHRoZSBjb250ZW50cyBvZiB0aGUgZGFzaGJvYXJkLiBUaGUgcGFnZSBzaG91bGQgb3ZlcnJpZGUg
dGhpcyB3aXRoCiAvLyBhIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSBwYWdlIGFzc3VtaW5n
IGFsbCByZXNvdXJjZXMgaGF2ZSBsb2FkZWQuCkBAIC0xNTksOCArMTYwLDYgQEAgdmFyIFJMRSA9
IHsKICAgICBWQUxVRTogMQogfQogCi12YXIgVEVTVF9SRVNVTFRTX1NFUlZFUiA9ICdodHRwOi8v
dGVzdC1yZXN1bHRzLmFwcHNwb3QuY29tLyc7Ci0KIGZ1bmN0aW9uIGlzRmFpbGluZ1Jlc3VsdCh2
YWx1ZSkKIHsKICAgICByZXR1cm4gJ0ZTVE9DSVonLmluZGV4T2YodmFsdWUpICE9IC0xOwpAQCAt
MjYyLDI0ICsyNjEsNiBAQCBmdW5jdGlvbiBjb2xsYXBzZVdoaXRlc3BhY2Uoc3RyKQogICAgIHJl
dHVybiBzdHIucmVwbGFjZSgvXHMrL2csICcgJyk7CiB9CiAKLWZ1bmN0aW9uIHJlcXVlc3QodXJs
LCBzdWNjZXNzLCBlcnJvciwgb3B0X2lzQmluYXJ5RGF0YSkKLXsKLSAgICBjb25zb2xlLmxvZygn
WE1MSHR0cFJlcXVlc3Q6ICcgKyB1cmwpOwotICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVl
c3QoKTsKLSAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKLSAgICBpZiAob3B0X2lzQmlu
YXJ5RGF0YSkKLSAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJz
ZXQ9eC11c2VyLWRlZmluZWQnKTsKLSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rp
b24oZSkgewotICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgewotICAgICAgICAgICAg
aWYgKHhoci5zdGF0dXMgPT0gMjAwKQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MoeGhyKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlcnJvcih4aHIpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHhoci5zZW5kKCk7Ci19Ci0KIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW1ldGVyKHN0
YXRlLCBrZXksIHZhbHVlLCB2YWxpZGF0ZUZuKQogewogICAgIGlmICh2YWxpZGF0ZUZuKCkpCkBA
IC0zNTksNyArMzQwLDggQEAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzKCkKICAgICB2YXIgZGFz
aGJvYXJkU3BlY2lmaWNEaWZmU3RhdGUgPSBkaWZmU3RhdGVzKG9sZERhc2hib2FyZFNwZWNpZmlj
U3RhdGUsIGdfY3VycmVudFN0YXRlKTsKIAogICAgIGZpbGxNaXNzaW5nVmFsdWVzKGdfY3VycmVu
dFN0YXRlLCBnX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKTsKLSAgICBmaWxs
TWlzc2luZ1ZhbHVlcyhnX2N1cnJlbnRTdGF0ZSwgeydidWlsZGVyJzogZ19kZWZhdWx0QnVpbGRl
ck5hbWV9KTsKKyAgICBpZiAoIWdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS51c2VUZXN0RGF0YSkKKyAg
ICAgICAgZmlsbE1pc3NpbmdWYWx1ZXMoZ19jdXJyZW50U3RhdGUsIHsnYnVpbGRlcic6IGdfZGVm
YXVsdEJ1aWxkZXJOYW1lfSk7CiAKICAgICAvLyBGSVhNRTogZGFzaGJvYXJkX2Jhc2Ugc2hvdWxk
bid0IGtub3cgYW55dGhpbmcgYWJvdXQgc3BlY2lmaWMgZGFzaGJvYXJkIHNwZWNpZmljIGtleXMu
CiAgICAgaWYgKGRhc2hib2FyZFNwZWNpZmljRGlmZlN0YXRlLmJ1aWxkZXIpCkBAIC00MTAsMzQg
KzM5MiwxMCBAQCBmdW5jdGlvbiBmaWxsTWlzc2luZ1ZhbHVlcyh0bywgZnJvbSkKICAgICB9CiB9
CiAKLS8vIExvYWQgYSBzY3JpcHQuCi0vLyBAcGFyYW0ge3N0cmluZ30gcGF0aCBQYXRoIHRvIHRo
ZSBzY3JpcHQgdG8gbG9hZC4KLS8vIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25FcnJvciBPcHRp
b25hbCBmdW5jdGlvbiB0byBjYWxsIGlmIHRoZSBzY3JpcHQKLS8vICAgICAgICAgZG9lcyBub3Qg
bG9hZC4KLS8vIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRfb25Mb2FkIE9wdGlvbmFsIGZ1bmN0aW9u
IHRvIGNhbGwgd2hlbiB0aGUgc2NyaXB0Ci0vLyAgICAgICAgIGlzIGxvYWRlZC4gICAgQ2FsbGVk
IHdpdGggdGhlIHNjcmlwdCBlbGVtZW50IGFzIGl0cyAxc3QgYXJndW1lbnQuCi1mdW5jdGlvbiBh
cHBlbmRTY3JpcHQocGF0aCwgb3B0X29uRXJyb3IsIG9wdF9vbkxvYWQpCi17Ci0gICAgdmFyIHNj
cmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwotICAgIHNjcmlwdC5zcmMg
PSBwYXRoOwotICAgIGlmIChvcHRfb25Mb2FkKSB7Ci0gICAgICAgIHNjcmlwdC5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUg
PT0gJ2NvbXBsZXRlJykKLSAgICAgICAgICAgICAgICBvcHRfb25Mb2FkKHNjcmlwdCk7Ci0gICAg
ICAgIH07Ci0gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHsgb3B0X29uTG9hZChz
Y3JpcHQpOyB9OwotICAgIH0KLSAgICBpZiAob3B0X29uRXJyb3IpCi0gICAgICAgIHNjcmlwdC5v
bmVycm9yID0gb3B0X29uRXJyb3I7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpOwotfQotCiAvLyBGSVhNRTogUmVuYW1lIHRo
aXMgdG8gZ19kYXNoYm9hcmRTcGVjaWZpY1N0YXRlOwogdmFyIGdfY3VycmVudFN0YXRlID0ge307
CiB2YXIgZ19jcm9zc0Rhc2hib2FyZFN0YXRlID0ge307Ci12YXIgZ193YWl0aW5nT25FeHBlY3Rh
dGlvbnM7CiBwYXJzZUNyb3NzRGFzaGJvYXJkUGFyYW1ldGVycygpOwotbG9hZEJ1aWxkZXJzTGlz
dChnX2Nyb3NzRGFzaGJvYXJkU3RhdGUuZ3JvdXAsIGdfY3Jvc3NEYXNoYm9hcmRTdGF0ZS50ZXN0
VHlwZSk7CiAKIGZ1bmN0aW9uIGlzTGF5b3V0VGVzdFJlc3VsdHMoKQogewpAQCAtNDk4LDMyICs0
NTYsNiBAQCB2YXIgZ19leHBlY3RhdGlvbnNCeVBsYXRmb3JtID0ge307CiB2YXIgZ19zdGFsZUJ1
aWxkZXJzID0gW107CiB2YXIgZ19idWlsZGVyc1RoYXRGYWlsZWRUb0xvYWQgPSBbXTsKIAotZnVu
Y3Rpb24gQUREX1JFU1VMVFMoYnVpbGRzKQotewotICAgIHZhciBqc29uX3ZlcnNpb24gPSBidWls
ZHNbJ3ZlcnNpb24nXTsKLSAgICBmb3IgKHZhciBidWlsZGVyTmFtZSBpbiBidWlsZHMpIHsKLSAg
ICAgICAgaWYgKGJ1aWxkZXJOYW1lID09ICd2ZXJzaW9uJykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIC8vIElmIGEgdGVzdCBzdWl0ZSBzdG9wcyBiZWluZyBydW4gb24gYSBnaXZl
biBidWlsZGVyLCB3ZSBkb24ndCB3YW50IHRvIHNob3cgaXQuCi0gICAgICAgIC8vIEFzc3VtZSBh
bnkgYnVpbGRlciB3aXRob3V0IGEgcnVuIGluIHR3byB3ZWVrcyBmb3IgYSBnaXZlbiB0ZXN0IHN1
aXRlIGlzbid0Ci0gICAgICAgIC8vIHJ1bm5pbmcgdGhhdCBzdWl0ZSBhbnltb3JlLgotICAgICAg
ICAvLyBGSVhNRTogR3JhYiB3aGljaCBib3RzIHJ1biB3aGljaCB0ZXN0cyBkaXJlY3RseSBmcm9t
IHRoZSBidWlsZGJvdCBKU09OIGluc3RlYWQuCi0gICAgICAgIHZhciBsYXN0UnVuU2Vjb25kcyA9
IGJ1aWxkc1tidWlsZGVyTmFtZV0uc2Vjb25kc1NpbmNlRXBvY2hbMF07Ci0gICAgICAgIGlmICgo
RGF0ZS5ub3coKSAvIDEwMDApIC0gbGFzdFJ1blNlY29uZHMgPiBPTkVfV0VFS19TRUNPTkRTKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKChEYXRlLm5vdygpIC8gMTAwMCkg
LSBsYXN0UnVuU2Vjb25kcyA+IE9ORV9EQVlfU0VDT05EUykKLSAgICAgICAgICAgIGdfc3RhbGVC
dWlsZGVycy5wdXNoKGJ1aWxkZXJOYW1lKTsKLQotICAgICAgICBpZiAoanNvbl92ZXJzaW9uID49
IDQpCi0gICAgICAgICAgICBidWlsZHNbYnVpbGRlck5hbWVdW1RFU1RTX0tFWV0gPSBmbGF0dGVu
VHJpZShidWlsZHNbYnVpbGRlck5hbWVdW1RFU1RTX0tFWV0pOwotICAgICAgICBnX3Jlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gYnVpbGRzW2J1aWxkZXJOYW1lXTsKLSAgICB9Ci0KLSAg
ICBoYW5kbGVSZXNvdXJjZUxvYWQoKTsKLX0KLQogLy8gVE9ETyhhYm94aGFsbCk6IGZpZ3VyZSBv
dXQgd2hldGhlciB0aGlzIGlzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBhbmQKIC8vIGNoYW5n
ZSBjYWxsaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZSBzdHJ1Y3R1cmUgaW5zdGVhZCBp
ZiBuZWNlc3NhcnkuCiBmdW5jdGlvbiBmbGF0dGVuVHJpZSh0cmllLCBwcmVmaXgpCkBAIC01NDQs
NDQgKzQ3Niw2IEBAIGZ1bmN0aW9uIGZsYXR0ZW5UcmllKHRyaWUsIHByZWZpeCkKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1mdW5jdGlvbiBwYXRoVG9CdWlsZGVyUmVzdWx0c0ZpbGUoYnVpbGRl
ck5hbWUpCi17Ci0gICAgcmV0dXJuIFRFU1RfUkVTVUxUU19TRVJWRVIgKyAndGVzdGZpbGU/YnVp
bGRlcj0nICsgYnVpbGRlck5hbWUgKwotICAgICAgICAgICAgJyZtYXN0ZXI9JyArIGJ1aWxkZXJN
YXN0ZXIoYnVpbGRlck5hbWUpLm5hbWUgKwotICAgICAgICAgICAgJyZ0ZXN0dHlwZT0nICsgZ19j
cm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlICsgJyZuYW1lPSc7Ci19Ci0KLWZ1bmN0aW9uIHJl
cXVlc3RFeHBlY3RhdGlvbnNGaWxlcygpCi17Ci0gICAgdmFyIGV4cGVjdGF0aW9uc0ZpbGVzVG9S
ZXF1ZXN0ID0ge307Ci0gICAgdHJhdmVyc2VQbGF0Zm9ybXNUcmVlKGZ1bmN0aW9uKHBsYXRmb3Jt
LCBwbGF0Zm9ybU5hbWUpIHsKLSAgICAgICAgaWYgKHBsYXRmb3JtLmZhbGxiYWNrUGxhdGZvcm1z
KQotICAgICAgICAgICAgcGxhdGZvcm0uZmFsbGJhY2tQbGF0Zm9ybXMuZm9yRWFjaChmdW5jdGlv
bihmYWxsYmFja1BsYXRmb3JtKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrUGxhdGZv
cm1PYmplY3QgPSBwbGF0Zm9ybU9iamVjdEZvck5hbWUoZmFsbGJhY2tQbGF0Zm9ybSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZhbGxiYWNrUGxhdGZvcm1PYmplY3QuZXhwZWN0YXRpb25zRGlyZWN0
b3J5ICYmICEoZmFsbGJhY2tQbGF0Zm9ybSBpbiBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdCkp
Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0W2ZhbGxiYWNr
UGxhdGZvcm1dID0gRVhQRUNUQVRJT05TX1VSTF9CQVNFX1BBVEggKyBmYWxsYmFja1BsYXRmb3Jt
T2JqZWN0LmV4cGVjdGF0aW9uc0RpcmVjdG9yeSArICcvVGVzdEV4cGVjdGF0aW9ucyc7Ci0gICAg
ICAgICAgICB9KTsKLQotICAgICAgICBpZiAocGxhdGZvcm0uZXhwZWN0YXRpb25zRGlyZWN0b3J5
KQotICAgICAgICAgICAgZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3RbcGxhdGZvcm1OYW1lXSA9
IEVYUEVDVEFUSU9OU19VUkxfQkFTRV9QQVRIICsgcGxhdGZvcm0uZXhwZWN0YXRpb25zRGlyZWN0
b3J5ICsgJy9UZXN0RXhwZWN0YXRpb25zJzsKLSAgICB9KTsKLQotICAgIGZvciAocGxhdGZvcm1X
aXRoRXhwZWN0YXRpb25zIGluIGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0KQotICAgICAgICBy
ZXF1ZXN0KGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0W3BsYXRmb3JtV2l0aEV4cGVjdGF0aW9u
c10sCi0gICAgICAgICAgICAgICAgcGFydGlhbChmdW5jdGlvbihwbGF0Zm9ybU5hbWUsIHhocikg
ewotICAgICAgICAgICAgICAgICAgICBnX2V4cGVjdGF0aW9uc0J5UGxhdGZvcm1bcGxhdGZvcm1O
YW1lXSA9IGdldFBhcnNlZEV4cGVjdGF0aW9ucyh4aHIucmVzcG9uc2VUZXh0KTsKLQotICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3RbcGxhdGZvcm1O
YW1lXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhleHBlY3RhdGlvbnNG
aWxlc1RvUmVxdWVzdCkubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnX3dhaXRp
bmdPbkV4cGVjdGF0aW9ucyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
UmVzb3VyY2VMb2FkKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
LCBwbGF0Zm9ybVdpdGhFeHBlY3RhdGlvbnMpLAotICAgICAgICAgICAgICAgIHBhcnRpYWwoZnVu
Y3Rpb24ocGxhdGZvcm1OYW1lLCB4aHIpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5l
cnJvcignQ291bGQgbm90IGxvYWQgZXhwZWN0YXRpb25zIGZpbGUgZm9yICcgKyBwbGF0Zm9ybU5h
bWUpOwotICAgICAgICAgICAgICAgIH0sIHBsYXRmb3JtV2l0aEV4cGVjdGF0aW9ucykpOwotfQot
CiBmdW5jdGlvbiBpc1RyZWVNYXAoKQogewogICAgIHJldHVybiBlbmRzV2l0aCh3aW5kb3cubG9j
YXRpb24ucGF0aG5hbWUsICd0cmVlbWFwLmh0bWwnKTsKQEAgLTU5MiwxMDYgKzQ4NiwxMCBAQCBm
dW5jdGlvbiBpc0ZsYWtpbmVzc0Rhc2hib2FyZCgpCiAgICAgcmV0dXJuIGVuZHNXaXRoKHdpbmRv
dy5sb2NhdGlvbi5wYXRobmFtZSwgJ2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCcpOwogfQogCi1m
dW5jdGlvbiBhcHBlbmRKU09OU2NyaXB0RWxlbWVudEZvcihidWlsZGVyTmFtZSkKLXsKLSAgICB2
YXIgcmVzdWx0c0ZpbGVuYW1lOwotICAgIGlmIChpc1RyZWVNYXAoKSkKLSAgICAgICAgcmVzdWx0
c0ZpbGVuYW1lID0gJ3RpbWVzX21zLmpzb24nOwotICAgIGVsc2UgaWYgKGdfY3Jvc3NEYXNoYm9h
cmRTdGF0ZS5zaG93QWxsUnVucykKLSAgICAgICAgcmVzdWx0c0ZpbGVuYW1lID0gJ3Jlc3VsdHMu
anNvbic7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHRzRmlsZW5hbWUgPSAncmVzdWx0cy1zbWFs
bC5qc29uJzsKLQotICAgIGFwcGVuZFNjcmlwdChwYXRoVG9CdWlsZGVyUmVzdWx0c0ZpbGUoYnVp
bGRlck5hbWUpICsgcmVzdWx0c0ZpbGVuYW1lICsgJyZjYWxsYmFjaz1BRERfUkVTVUxUUycsCi0g
ICAgICAgICAgICBwYXJ0aWFsKGhhbmRsZVJlc291cmNlTG9hZEVycm9yLCBidWlsZGVyTmFtZSks
Ci0gICAgICAgICAgICBwYXJ0aWFsKGhhbmRsZVNjcmlwdExvYWRlZCwgYnVpbGRlck5hbWUpKTsK
LX0KLQotZnVuY3Rpb24gYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRzKCkKLXsKLSAgICBjbGVhckVy
cm9ycygpOwotCi0gICAgaWYgKGlzVHJlZU1hcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
YXJzZVBhcmFtZXRlcnMoKTsKLQotICAgIGlmIChnX2Nyb3NzRGFzaGJvYXJkU3RhdGUudXNlVGVz
dERhdGEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAodmFyIGJ1aWxkZXJOYW1lIGluIGdf
YnVpbGRlcnMpCi0gICAgICAgIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50Rm9yKGJ1aWxkZXJOYW1l
KTsKLQotICAgIGdfd2FpdGluZ09uRXhwZWN0YXRpb25zID0gaXNMYXlvdXRUZXN0UmVzdWx0cygp
ICYmIGlzRmxha2luZXNzRGFzaGJvYXJkKCk7Ci0gICAgaWYgKGdfd2FpdGluZ09uRXhwZWN0YXRp
b25zKQotICAgICAgICByZXF1ZXN0RXhwZWN0YXRpb25zRmlsZXMoKTsKLX0KLQogdmFyIGdfaGFz
RG9uZUluaXRpYWxQYWdlR2VuZXJhdGlvbiA9IGZhbHNlOwogLy8gU3RyaW5nIG9mIGVycm9yIG1l
c3NhZ2VzIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCiB2YXIgZ19lcnJvck1lc3NhZ2VzID0gJyc7
CiAKLWZ1bmN0aW9uIGhhbmRsZVJlc291cmNlTG9hZCgpCi17Ci0gICAgLy8gSW4gY2FzZSB3ZSBs
b2FkIGEgcmVzdWx0cy5qc29uIHRoYXQncyBub3QgaW4gdGhlIGxpc3Qgb2YgYnVpbGRlcnMsCi0g
ICAgLy8gbWFrZSBzdXJlIHRvIG9ubHkgY2FsbCBoYW5kbGVMb2NhdGlvbkNoYW5nZSBvbmNlIGZy
b20gdGhlIHJlc291cmNlIGxvYWRzLgotICAgIGlmICghZ19oYXNEb25lSW5pdGlhbFBhZ2VHZW5l
cmF0aW9uKQotICAgICAgICBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpOwotfQotCi1mdW5jdGlvbiBo
YW5kbGVTY3JpcHRMb2FkZWQoYnVpbGRlck5hbWUsIHNjcmlwdCkKLXsKLSAgICAvLyBXZSBuZWVk
IHRoaXMgd29yay1hcm91bmQgZm9yIHdlYmtpdC5vcmcvYi81MDU4OS4KLSAgICBpZiAoIWdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0pIHsKLSAgICAgICAgdmFyIGVycm9yID0gbmV3IEVy
cm9yKCJCdWlsZGVyIGRhdGEgd2FzIGVtcHR5Iik7Ci0gICAgICAgIGVycm9yLnRhcmdldCA9IHNj
cmlwdDsKLSAgICAgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVpbGRlck5hbWUsIGVycm9y
KTsKLSAgICB9Ci19Ci0KLS8vIEhhbmRsZSByZXNvdXJjZSBsb2FkaW5nIGVycm9ycyAtIDQwNHMs
IDUwMHMsIGV0Yy4gICAgUmVjb3ZlciBmcm9tIHRoZSBlcnJvciB0bwotLy8gc3RpbGwgc2hvdyBh
cyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGJ1dCBzaG93IHNvbWUgVUkgYWJvdXQgdGhlIGZhaWx1
cmUsIGFuZAotLy8gZG8gbm90IHRyeSB1c2luZyB0aGlzIHJlc291cmNlIGFnYWluIHVudGlsIHVz
ZXIgcmVmcmVzaGVzLgotLy8KLS8vIEBwYXJhbSB7c3RyaW5nfSBidWlsZGVyTmFtZSBOYW1lIG9m
IGJ1aWxkZXIgdGhhdCB0aGUgcmVzb3VyY2UgZmFpbGVkIGZvci4KLS8vIEBwYXJhbSB7RXZlbnR9
IGUgVGhlIGVycm9yIGV2ZW50LgotZnVuY3Rpb24gaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoYnVp
bGRlck5hbWUsIGUpCi17Ci0gICAgdmFyIGVycm9yID0gZS50YXJnZXQuc3JjICsgJyBmYWlsZWQg
dG8gbG9hZCBmb3IgJyArIGJ1aWxkZXJOYW1lICsgJy4nOwotCi0gICAgaWYgKGlzTGF5b3V0VGVz
dFJlc3VsdHMoKSkgewotICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKLSAgICAgICAgZ19i
dWlsZGVyc1RoYXRGYWlsZWRUb0xvYWQucHVzaChidWlsZGVyTmFtZSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gQXZvaWQgdG8gc2hvdyBlcnJvci93YXJuaW5nIG1lc3NhZ2VzIGZvciBub24t
bGF5b3V0IHRlc3RzLiBXZSBtYXkgYmUKLSAgICAgICAgLy8gY2hlY2tpbmcgdGhlIGJ1aWxkZXJz
IHRoYXQgYXJlIG5vdCBydW5uaW5nIHRoZSB0ZXN0cy4KLSAgICAgICAgY29uc29sZS5pbmZvKCdp
bmZvOicgKyBlcnJvcik7Ci0gICAgfQotCi0gICAgLy8gUmVtb3ZlIHRoaXMgYnVpbGRlciBmcm9t
IGJ1aWxkZXJzLCBzbyB3ZSBkb24ndCB0cnkgdG8gdXNlIHRoZQotICAgIC8vIGRhdGEgdGhhdCBp
c24ndCB0aGVyZS4KLSAgICBkZWxldGUgZ19idWlsZGVyc1tidWlsZGVyTmFtZV07Ci0KLSAgICAv
LyBDaGFuZ2UgdGhlIGRlZmF1bHQgYnVpbGRlciBuYW1lIGlmIGl0IGhhcyBiZWVuIGRlbGV0ZWQu
Ci0gICAgaWYgKGdfZGVmYXVsdEJ1aWxkZXJOYW1lID09IGJ1aWxkZXJOYW1lKSB7Ci0gICAgICAg
IGdfZGVmYXVsdEJ1aWxkZXJOYW1lID0gbnVsbDsKLSAgICAgICAgZm9yICh2YXIgYXZhaWxhYmxl
QnVpbGRlck5hbWUgaW4gZ19idWlsZGVycykgewotICAgICAgICAgICAgZ19kZWZhdWx0QnVpbGRl
ck5hbWUgPSBhdmFpbGFibGVCdWlsZGVyTmFtZTsKLSAgICAgICAgICAgIGdfZGVmYXVsdERhc2hi
b2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMuYnVpbGRlciA9IGF2YWlsYWJsZUJ1aWxkZXJOYW1lOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFnX2RlZmF1bHRCdWls
ZGVyTmFtZSkgewotICAgICAgICAgICAgdmFyIGVycm9yID0gJ05vIHRlc3RzIHJlc3VsdHMgZm91
bmQgZm9yICcgKyBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgKyAnLiBSZWxvYWQgdGhl
IHBhZ2UgdG8gdHJ5IGZldGNoaW5nIGl0IGFnYWluLic7Ci0gICAgICAgICAgICBjb25zb2xlLmVy
cm9yKGVycm9yKTsKLSAgICAgICAgICAgIGFkZEVycm9yKGVycm9yKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIFByb2NlZWQgYXMgaWYgdGhlIHJlc291cmNlIGhhZCBsb2FkZWQuCi0gICAg
aGFuZGxlUmVzb3VyY2VMb2FkKCk7Ci19Ci0KLQogLy8gUmVjb3JkIGEgbmV3IGVycm9yIG1lc3Nh
Z2UuCiAvLyBAcGFyYW0ge3N0cmluZ30gZXJyb3JNc2cgVGhlIG1lc3NhZ2UgdG8gc2hvdyB0byB0
aGUgdXNlci4KIGZ1bmN0aW9uIGFkZEVycm9yKGVycm9yTXNnKQpAQCAtNzI2LDI1ICs1MjQsNiBA
QCBmdW5jdGlvbiBzaG93RXJyb3JzKCkKICAgICBlcnJvcnMuaW5uZXJIVE1MID0gZ19lcnJvck1l
c3NhZ2VzOwogfQogCi0vLyBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBqc29uIGZpbGVz
IGhhdmUgYWxsIGNvbXBsZXRlZCBsb2FkaW5nLgotZnVuY3Rpb24gaGF2ZUpzb25GaWxlc0xvYWRl
ZCgpCi17Ci0gICAgaWYgKCFjdXJyZW50QnVpbGRlckdyb3VwKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChnX3dhaXRpbmdPbkV4cGVjdGF0aW9ucykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGlzVHJlZU1hcCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gZ19idWlsZGVycykgewotICAgICAgICBpZiAoIWdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGZ1bmN0aW9uIGFkZEJ1aWxkZXJMb2FkRXJyb3JzKCkK
IHsKICAgICBpZiAoZ19oYXNEb25lSW5pdGlhbFBhZ2VHZW5lcmF0aW9uKQpAQCAtNzU3LDExICs1
MzYsMTQgQEAgZnVuY3Rpb24gYWRkQnVpbGRlckxvYWRFcnJvcnMoKQogICAgICAgICBhZGRFcnJv
cignRVJST1I6IERhdGEgZnJvbSAnICsgZ19zdGFsZUJ1aWxkZXJzLnRvU3RyaW5nKCkgKyAnIGlz
IG1vcmUgdGhhbiAxIGRheSBzdGFsZS4nKTsKIH0KIAotZnVuY3Rpb24gaGFuZGxlTG9jYXRpb25D
aGFuZ2UoKQorZnVuY3Rpb24gcmVzb3VyY2VMb2FkaW5nQ29tcGxldGUoKQogewotICAgIGlmKCFo
YXZlSnNvbkZpbGVzTG9hZGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBnX3Jlc291cmNlTG9h
ZGVyID0gbnVsbDsKKyAgICBoYW5kbGVMb2NhdGlvbkNoYW5nZSgpOworfQogCitmdW5jdGlvbiBo
YW5kbGVMb2NhdGlvbkNoYW5nZSgpCit7CiAgICAgYWRkQnVpbGRlckxvYWRFcnJvcnMoKTsKICAg
ICBnX2hhc0RvbmVJbml0aWFsUGFnZUdlbmVyYXRpb24gPSB0cnVlOwogCkBAIC0xMTE3LDEzICs4
OTksNiBAQCBmdW5jdGlvbiBkZWNvbXByZXNzUmVzdWx0cyhidWlsZGVyUmVzdWx0cykKICAgICB9
OwogfQogCi1mdW5jdGlvbiBnX2hhbmRsZUJ1aWxkZXJzTGlzdExvYWRlZCgpIHsKLSAgICBpZiAo
IWN1cnJlbnRCdWlsZGVyR3JvdXAoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGluaXRCdWlsZGVy
cygpOwotICAgIGFwcGVuZEpTT05TY3JpcHRFbGVtZW50cygpOwotfQotCiBkb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKSB7CiAgICAgLy8gQ2xlYXIgdGhl
IG9wZW4gcG9wdXAsIHVubGVzcyB0aGUgY2xpY2sgd2FzIGluc2lkZSB0aGUgcG9wdXAuCiAgICAg
dmFyIHBvcHVwID0gJCgncG9wdXAnKTsKQEAgLTExMzUsNCArOTEwLDYgQEAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKICAgICAvLyBUaGlzIGRvZXNuJ3Qgc2Vl
bSB0b3RhbGx5IGFjY3VyYXRlIGFzIHRoZXJlIGlzIGEgcmFjZSBiZXR3ZWVuCiAgICAgLy8gb25s
b2FkIGZpcmluZyBhbmQgdGhlIGxhc3Qgc2NyaXB0IHRhZyBiZWluZyBleGVjdXRlZC4KICAgICBs
b2dUaW1lKCdUaW1lIHRvIGxvYWQgSlMnLCBnX3BhZ2VMb2FkU3RhcnRUaW1lKTsKKyAgICBnX3Jl
c291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoKTsKKyAgICBnX3Jlc291cmNlTG9hZGVy
LmxvYWQoKTsKIH0sIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5odG1sIGIvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKaW5k
ZXggNmJlMGRkYTA0NThiNjZmMmY3YWYwMmQwODBmN2QzZDEwNTZkZDI2Zi4uNjI1ZDQyMzhkN2My
NGE5ODlkNDFlZjFkNDE2ZTFjZGRlZTU5ZWYzMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwKKysrIGIv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJv
YXJkLmh0bWwKQEAgLTMxLDUgKzMxLDYgQEAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iZmxha2luZXNzX2Rhc2hib2FyZC5jc3MiPjwvbGluaz4KIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5jc3MiPjwvbGluaz4K
IDxzY3JpcHQgc3JjPSJidWlsZGVycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ibG9hZGVy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iZmxha2luZXNzX2Rhc2hib2FyZC5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19k
YXNoYm9hcmQuanMgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Zs
YWtpbmVzc19kYXNoYm9hcmQuanMKaW5kZXggMmMxNGEzYTE5OWFlMjM5NTlkMWExNDMzNzkwZjQ3
ZDhjNTQ1MGQxNS4uODBiZDU4MWJjNDcwYTkwYmZkMzhhNzI0OGZlZTYwZjZkNjA0ZTEyOSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5l
c3NfZGFzaGJvYXJkLmpzCisrKyBiL1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcwpAQCAtMTg2MCw3ICsxODYwLDcgQEAgZnVuY3Rp
b24gbWF5YmVBZGRQbmdDaGVja3N1bShleHBlY3RhdGlvbkRpdiwgcG5nVXJsKQogewogICAgIC8v
IHBuZ1VybCBnZXRzIHNlcnZlZCBmcm9tIHRoZSBicm93c2VyIGNhY2hlIHNpbmNlIHdlIGp1c3Qg
bG9hZGVkIGl0IGluIGFuCiAgICAgLy8gPGltZz4gdGFnLgotICAgIHJlcXVlc3QocG5nVXJsLAor
ICAgIGxvYWRlci5yZXF1ZXN0KHBuZ1VybCwKICAgICAgICAgZnVuY3Rpb24oeGhyKSB7CiAgICAg
ICAgICAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCAyayBvZiB0aGUgcmVzcG9uc2UgdG8gYSBieXRl
IHN0cmluZy4KICAgICAgICAgICAgIHZhciBieXRlcyA9IHhoci5yZXNwb25zZVRleHQuc3Vic3Ry
aW5nKDAsIDIwNDgpOwpAQCAtMTk1NCw3ICsxOTU0LDcgQEAgZnVuY3Rpb24gYWRkRXhwZWN0YXRp
b25JdGVtKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgcGxhdGZvcm0s
IHAKICAgICAgICAgaWYgKCFpc0ltYWdlKQogICAgICAgICAgICAgY2hpbGRDb250YWluZXIuYXBw
ZW5kQ2hpbGQoZHVtbXlOb2RlKTsKICAgICB9IGVsc2UgewotICAgICAgICByZXF1ZXN0KHVybCwK
KyAgICAgICAgbG9hZGVyLnJlcXVlc3QodXJsLAogICAgICAgICAgICAgZnVuY3Rpb24oeGhyKSB7
CiAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUn
KTsKICAgICAgICAgICAgICAgICBpdGVtLmlubmVyVGV4dCA9IHhoci5yZXNwb25zZVRleHQ7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcwppbmRleCA3NTg2
NGZhZTc2YmJiZDRlMWI0Mzc5YjgzYmI0NjI0ODk5NmZmNGMyLi41OTdjNjJlMmEwMmYyNGU3NzAx
YjMzOTVkYjUyMWYyNzc5YmJlM2ZlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCisrKyBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hi
b2FyZF91bml0dGVzdHMuanMKQEAgLTM4Nyw2ICszODcsMTEgQEAgdGVzdCgnaHRtbEZvckluZGl2
aWR1YWxUZXN0T25BbGxCdWlsZGVyc1dpdGhSZXN1bHRzTGlua3MnLCAxLCBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgICc8L3RyPjwvdGhlYWQ+JyArCiAgICAgICAgICAgICAnPHRib2R5PjwvdGJv
ZHk+JyArCiAgICAgICAgICc8L3RhYmxlPicgKworICAgICAgICAnPGRpdj5UaGUgZm9sbG93aW5n
IGJ1aWxkZXJzIGVpdGhlciBkb25cJ3QgcnVuIHRoaXMgdGVzdCAoZS5nLiBpdFwncyBza2lwcGVk
KSBvciBhbGwgcnVucyBwYXNzZWQ6PC9kaXY+JyArCisgICAgICAgICc8ZGl2IGNsYXNzPXNraXBw
ZWQtYnVpbGRlci1saXN0PicgKworICAgICAgICAgICAgJzxkaXYgY2xhc3M9c2tpcHBlZC1idWls
ZGVyPldlYktpdCBMaW51eDwvZGl2PjxkaXYgY2xhc3M9c2tpcHBlZC1idWlsZGVyPldlYktpdCBM
aW51eCAoZGJnKTwvZGl2PicgKworICAgICAgICAgICAgJzxkaXYgY2xhc3M9c2tpcHBlZC1idWls
ZGVyPldlYktpdCBNYWMxMC43PC9kaXY+PGRpdiBjbGFzcz1za2lwcGVkLWJ1aWxkZXI+V2ViS2l0
IFdpbjwvZGl2PicgKworICAgICAgICAnPC9kaXY+JyArCiAgICAgICAgICc8ZGl2IGNsYXNzPWV4
cGVjdGF0aW9ucyB0ZXN0PWR1bW15dGVzdC5odG1sPicgKwogICAgICAgICAgICAgJzxkaXY+PHNw
YW4gY2xhc3M9bGluayBvbmNsaWNrPSJzZXRRdWVyeVBhcmFtZXRlcihcJ3Nob3dFeHBlY3RhdGlv
bnNcJywgdHJ1ZSkiPlNob3cgcmVzdWx0czwvc3Bhbj4gfCAnICsKICAgICAgICAgICAgICc8c3Bh
biBjbGFzcz1saW5rIG9uY2xpY2s9InNldFF1ZXJ5UGFyYW1ldGVyKFwnc2hvd0xhcmdlRXhwZWN0
YXRpb25zXCcsIHRydWUpIj5TaG93IGxhcmdlIHRodW1ibmFpbHM8L3NwYW4+IHwgJyArCkBAIC00
MTIsNiArNDE3LDExIEBAIHRlc3QoJ2h0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNX
aXRoUmVzdWx0c0xpbmtzV2Via2l0TWFzdGVyJywgMSwgZnVuY3RpCiAgICAgICAgICAgICAnPC90
cj48L3RoZWFkPicgKwogICAgICAgICAgICAgJzx0Ym9keT48L3Rib2R5PicgKwogICAgICAgICAn
PC90YWJsZT4nICsKKyAgICAgICAgJzxkaXY+VGhlIGZvbGxvd2luZyBidWlsZGVycyBlaXRoZXIg
ZG9uXCd0IHJ1biB0aGlzIHRlc3QgKGUuZy4gaXRcJ3Mgc2tpcHBlZCkgb3IgYWxsIHJ1bnMgcGFz
c2VkOjwvZGl2PicgKworICAgICAgICAnPGRpdiBjbGFzcz1za2lwcGVkLWJ1aWxkZXItbGlzdD4n
ICsKKyAgICAgICAgICAgICc8ZGl2IGNsYXNzPXNraXBwZWQtYnVpbGRlcj5XZWJLaXQgTGludXg8
L2Rpdj48ZGl2IGNsYXNzPXNraXBwZWQtYnVpbGRlcj5XZWJLaXQgTGludXggKGRiZyk8L2Rpdj4n
ICsKKyAgICAgICAgICAgICc8ZGl2IGNsYXNzPXNraXBwZWQtYnVpbGRlcj5XZWJLaXQgTWFjMTAu
NzwvZGl2PjxkaXYgY2xhc3M9c2tpcHBlZC1idWlsZGVyPldlYktpdCBXaW48L2Rpdj4nICsKKyAg
ICAgICAgJzwvZGl2PicgKwogICAgICAgICAnPGRpdiBjbGFzcz1leHBlY3RhdGlvbnMgdGVzdD1k
dW1teXRlc3QuaHRtbD4nICsKICAgICAgICAgICAgICc8ZGl2PjxzcGFuIGNsYXNzPWxpbmsgb25j
bGljaz0ic2V0UXVlcnlQYXJhbWV0ZXIoXCdzaG93RXhwZWN0YXRpb25zXCcsIHRydWUpIj5TaG93
IHJlc3VsdHM8L3NwYW4+IHwgJyArCiAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9bGluayBvbmNs
aWNrPSJzZXRRdWVyeVBhcmFtZXRlcihcJ3Nob3dMYXJnZUV4cGVjdGF0aW9uc1wnLCB0cnVlKSI+
U2hvdyBsYXJnZSB0aHVtYm5haWxzPC9zcGFuPicgKwpAQCAtNjQyLDkgKzY1Miw5IEBAIHRlc3Qo
J2J1aWxkZXJHcm91cElzVG9UV2ViS2l0QXR0cmlidXRlJywgMiwgZnVuY3Rpb24oKSB7CiAgICAg
dGVzdEJ1aWxkZXJHcm91cHNbJ0BERVBTIC0gZHVtbXkub3JnJ10uZXhwZWN0ZWRHcm91cHMgPSAx
OwogCiAgICAgdmFyIHRlc3RKU09ORGF0YSA9ICJ7IFwiRHVtbXkgQnVpbGRlciAxXCI6IG51bGws
IFwiRHVtbXkgQnVpbGRlciAyXCI6IG51bGwgfSI7Ci0gICAgb25CdWlsZGVyTGlzdExvYWQodGVz
dEJ1aWxkZXJHcm91cHMsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSwgZHVtbXlNYXN0ZXIs
ICdAVG9UIC0gZHVtbXkub3JnJywgSlNPTi5wYXJzZSh0ZXN0SlNPTkRhdGEpKTsKKyAgICBvbkJ1
aWxkZXJMaXN0TG9hZCh0ZXN0QnVpbGRlckdyb3VwcywgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVl
OyB9LCBkdW1teU1hc3RlciwgJ0BUb1QgLSBkdW1teS5vcmcnLCB7cmVzcG9uc2VUZXh0OiB0ZXN0
SlNPTkRhdGF9KTsKICAgICBlcXVhbCh0ZXN0QnVpbGRlckdyb3Vwc1snQFRvVCAtIGR1bW15Lm9y
ZyddLmlzVG9UV2ViS2l0LCB0cnVlKTsKLSAgICBvbkJ1aWxkZXJMaXN0TG9hZCh0ZXN0QnVpbGRl
ckdyb3VwcywgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LCBkdW1teU1hc3RlciwgJ0BERVBT
IC0gZHVtbXkub3JnJywgSlNPTi5wYXJzZSh0ZXN0SlNPTkRhdGEpKTsKKyAgICBvbkJ1aWxkZXJM
aXN0TG9hZCh0ZXN0QnVpbGRlckdyb3VwcywgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9LCBk
dW1teU1hc3RlciwgJ0BERVBTIC0gZHVtbXkub3JnJywge3Jlc3BvbnNlVGV4dDogdGVzdEpTT05E
YXRhfSk7CiAgICAgZXF1YWwodGVzdEJ1aWxkZXJHcm91cHNbJ0BERVBTIC0gZHVtbXkub3JnJ10u
aXNUb1RXZWJLaXQsIGZhbHNlKTsKIH0pOwogCkBAIC02NTcsMTAgKzY2NywxMCBAQCB0ZXN0KCdi
dWlsZGVyR3JvdXBFeHBlY3RlZEdyb3VwcycsIDQsIGZ1bmN0aW9uKCkgewogCiAgICAgdmFyIHRl
c3RKU09ORGF0YSA9ICJ7IFwiRHVtbXkgQnVpbGRlciAxXCI6IG51bGwgfSI7CiAgICAgZXF1YWwo
dGVzdEJ1aWxkZXJHcm91cHNbJ0BUb1QgLSBkdW1teS5vcmcnXS5leHBlY3RlZEdyb3VwcywgMyk7
Ci0gICAgb25CdWlsZGVyTGlzdExvYWQodGVzdEJ1aWxkZXJHcm91cHMsICBmdW5jdGlvbigpIHsg
cmV0dXJuIHRydWU7IH0sIGR1bW15TWFzdGVyLCAnQFRvVCAtIGR1bW15Lm9yZycsIEpTT04ucGFy
c2UodGVzdEpTT05EYXRhKSk7CisgICAgb25CdWlsZGVyTGlzdExvYWQodGVzdEJ1aWxkZXJHcm91
cHMsICBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0sIGR1bW15TWFzdGVyLCAnQFRvVCAtIGR1
bW15Lm9yZycsIHtyZXNwb25zZVRleHQ6IHRlc3RKU09ORGF0YX0pOwogICAgIGVxdWFsKHRlc3RC
dWlsZGVyR3JvdXBzWydAVG9UIC0gZHVtbXkub3JnJ10uZ3JvdXBzLCAxKTsKICAgICB2YXIgdGVz
dEpTT05EYXRhID0gInsgXCJEdW1teSBCdWlsZGVyIDJcIjogbnVsbCB9IjsKLSAgICBvbkJ1aWxk
ZXJMaXN0TG9hZCh0ZXN0QnVpbGRlckdyb3VwcywgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsg
fSwgZHVtbXlNYXN0ZXIsICdAVG9UIC0gZHVtbXkub3JnJywgSlNPTi5wYXJzZSh0ZXN0SlNPTkRh
dGEpKTsKKyAgICBvbkJ1aWxkZXJMaXN0TG9hZCh0ZXN0QnVpbGRlckdyb3VwcywgIGZ1bmN0aW9u
KCkgeyByZXR1cm4gdHJ1ZTsgfSwgZHVtbXlNYXN0ZXIsICdAVG9UIC0gZHVtbXkub3JnJywge3Jl
c3BvbnNlVGV4dDogdGVzdEpTT05EYXRhfSk7CiAgICAgZXF1YWwodGVzdEJ1aWxkZXJHcm91cHNb
J0BUb1QgLSBkdW1teS5vcmcnXS5ncm91cHMsIDIpOwogICAgIG9uRXJyb3JMb2FkaW5nQnVpbGRl
ckxpc3QoJ2h0dHA6Ly9idWlsZC5kdW1teS5vcmcnLCB0ZXN0QnVpbGRlckdyb3VwcywgICdAVG9U
IC0gZHVtbXkub3JnJyk7CiAgICAgZXF1YWwodGVzdEJ1aWxkZXJHcm91cHNbJ0BUb1QgLSBkdW1t
eS5vcmcnXS5ncm91cHMsIDMpOwpAQCAtNjY5LDkgKzY3OSwxMCBAQCB0ZXN0KCdidWlsZGVyR3Jv
dXBFeHBlY3RlZEdyb3VwcycsIDQsIGZ1bmN0aW9uKCkgewogdGVzdCgncmVxdWVzdEJ1aWxkZXJM
aXN0QWRkc0J1aWxkZXJHcm91cEVudHJ5JywgMiwgZnVuY3Rpb24oKSB7CiAgICAgdmFyIHRlc3RC
dWlsZGVyR3JvdXBzID0geyAnQFRvVCAtIGR1bW15Lm9yZyc6IG51bGwgfTsKIAotICAgIHZhciBv
bGREb1hIUiA9IGRvWEhSOworICAgIHZhciByZXF1ZXN0RnVuY3Rpb24gPSBsb2FkZXIucmVxdWVz
dDsKKyAgICBsb2FkZXIucmVxdWVzdCA9IGZ1bmN0aW9uKCkge307CisKICAgICB0cnkgewotICAg
ICAgICBkb1hIUiA9IGZ1bmN0aW9uKCkge307CiAgICAgICAgIHZhciBidWlsZGVyRmlsdGVyID0g
bnVsbDsKICAgICAgICAgdmFyIG1hc3RlciA9IHsgYnVpbGRlckpzb25QYXRoOiBmdW5jdGlvbigp
IHt9IH07CiAgICAgICAgIHZhciBncm91cE5hbWUgPSAnQFRvVCAtIGR1bW15Lm9yZyc7CkBAIC02
ODEsNyArNjkyLDcgQEAgdGVzdCgncmVxdWVzdEJ1aWxkZXJMaXN0QWRkc0J1aWxkZXJHcm91cEVu
dHJ5JywgMiwgZnVuY3Rpb24oKSB7CiAgICAgICAgIGVxdWFsKHRlc3RCdWlsZGVyR3JvdXBzWydA
VG9UIC0gZHVtbXkub3JnJ10sIGJ1aWxkZXJHcm91cCk7CiAgICAgICAgIGVxdWFsKHRlc3RCdWls
ZGVyR3JvdXBzWydAVG9UIC0gZHVtbXkub3JnJ10uZXhwZWN0ZWRHcm91cHMsIDEpOwogICAgIH0g
ZmluYWxseSB7Ci0gICAgICAgIGRvWEhSID0gb2xkRG9YSFI7CisgICAgICAgIGxvYWRlci5yZXF1
ZXN0ID0gcmVxdWVzdEZ1bmN0aW9uOwogICAgIH0KIH0pCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzIGIvVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQ1ZjA3
YTExY2VkMmMzMWI1ZDJlNGFjMmVjOTZjNjM0OGMzMjBkNAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyLmpzCkBAIC0wLDAg
KzEsMjQ3IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KKy8vCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoK
Ky8vCisvLyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisvLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisvLyBkaXN0cmlidXRpb24uCisvLyAgICAgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKy8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKwordmFyIGxvYWRlciA9IGxvYWRlciB8fCB7fTsKKworKGZ1bmN0aW9uKCkg
eworCit2YXIgVEVTVF9SRVNVTFRTX1NFUlZFUiA9ICdodHRwOi8vdGVzdC1yZXN1bHRzLmFwcHNw
b3QuY29tLyc7Cit2YXIgQ0hST01JVU1fRVhQRUNUQVRJT05TX1VSTCA9ICdodHRwOi8vc3ZuLndl
YmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQvdHJ1bmsvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vVGVzdEV4cGVjdGF0aW9ucyc7CisKK2Z1bmN0aW9uIHBhdGhUb0J1aWxkZXJSZXN1bHRz
RmlsZShidWlsZGVyTmFtZSkgeworICAgIHJldHVybiBURVNUX1JFU1VMVFNfU0VSVkVSICsgJ3Rl
c3RmaWxlP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKKyAgICAgICAgICAgJyZtYXN0ZXI9JyAr
IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlck5hbWUpLm5hbWUgKworICAgICAgICAgICAnJnRlc3R0eXBl
PScgKyBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgKyAnJm5hbWU9JzsKK30KKworbG9h
ZGVyLnJlcXVlc3QgPSBmdW5jdGlvbih1cmwsIHN1Y2Nlc3MsIGVycm9yLCBvcHRfaXNCaW5hcnlE
YXRhKQoreworICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3Bl
bignR0VUJywgdXJsLCB0cnVlKTsKKyAgICBpZiAob3B0X2lzQmluYXJ5RGF0YSkKKyAgICAgICAg
eGhyLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQn
KTsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICBp
ZiAoeGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT0g
MjAwKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MoeGhyKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBlcnJvcih4aHIpOworICAgICAgICB9CisgICAgfQorICAgIHhoci5zZW5k
KCk7Cit9CisKK2xvYWRlci5Mb2FkZXIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5fbG9hZGlu
Z1N0ZXBzID0gWworICAgICAgICB0aGlzLl9sb2FkQnVpbGRlcnNMaXN0LAorICAgICAgICB0aGlz
Ll9sb2FkUmVzdWx0c0ZpbGVzLAorICAgICAgICB0aGlzLl9sb2FkRXhwZWN0YXRpb25zRmlsZXMs
CisgICAgXTsKK30KKworbG9hZGVyLkxvYWRlci5wcm90b3R5cGUgPSB7CisgICAgbG9hZDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbG9hZE5leHQoKTsKKyAgICB9LAorICAgIGJ1
aWxkZXJzTGlzdExvYWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaW5pdEJ1aWxkZXJz
KCk7CisgICAgICAgIHRoaXMuX2xvYWROZXh0KCk7CisgICAgfSwKKyAgICBfbG9hZE5leHQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBsb2FkaW5nU3RlcCA9IHRoaXMuX2xvYWRpbmdT
dGVwcy5zaGlmdCgpOworICAgICAgICBpZiAoIWxvYWRpbmdTdGVwKSB7CisgICAgICAgICAgICBy
ZXNvdXJjZUxvYWRpbmdDb21wbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGxvYWRpbmdTdGVwLmFwcGx5KHRoaXMpOworICAgIH0sCisgICAgX2xvYWRCdWls
ZGVyc0xpc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGxvYWRCdWlsZGVyc0xpc3QoZ19j
cm9zc0Rhc2hib2FyZFN0YXRlLmdyb3VwLCBnX2Nyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUp
OworICAgIH0sCisgICAgX2xvYWRSZXN1bHRzRmlsZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHBhcnNlUGFyYW1ldGVycygpOworCisgICAgICAgIGZvciAodmFyIGJ1aWxkZXJOYW1lIGlu
IGdfYnVpbGRlcnMpCisgICAgICAgICAgICB0aGlzLl9sb2FkUmVzdWx0c0ZpbGVGb3JCdWlsZGVy
KGJ1aWxkZXJOYW1lKTsKKyAgICB9LAorICAgIF9sb2FkUmVzdWx0c0ZpbGVGb3JCdWlsZGVyOiBm
dW5jdGlvbihidWlsZGVyTmFtZSkKKyAgICB7CisgICAgICAgIHZhciByZXN1bHRzRmlsZW5hbWU7
CisgICAgICAgIGlmIChpc1RyZWVNYXAoKSkKKyAgICAgICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9
ICd0aW1lc19tcy5qc29uJzsKKyAgICAgICAgZWxzZSBpZiAoZ19jcm9zc0Rhc2hib2FyZFN0YXRl
LnNob3dBbGxSdW5zKQorICAgICAgICAgICAgcmVzdWx0c0ZpbGVuYW1lID0gJ3Jlc3VsdHMuanNv
bic7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9ICdyZXN1bHRz
LXNtYWxsLmpzb24nOworCisgICAgICAgIHZhciByZXN1bHRzRmlsZUxvY2F0aW9uID0gcGF0aFRv
QnVpbGRlclJlc3VsdHNGaWxlKGJ1aWxkZXJOYW1lKSArIHJlc3VsdHNGaWxlbmFtZSArICImY2Fs
bGJhY2s9UiI7CisgICAgICAgIGxvYWRlci5yZXF1ZXN0KHJlc3VsdHNGaWxlTG9jYXRpb24sCisg
ICAgICAgICAgICAgICAgcGFydGlhbChmdW5jdGlvbihsb2FkZXIsIGJ1aWxkZXJOYW1lLCB4aHIp
IHsKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9oYW5kbGVSZXN1bHRzRmlsZUxvYWRlZChi
dWlsZGVyTmFtZSwgeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgfSwgdGhpcywg
YnVpbGRlck5hbWUpLAorICAgICAgICAgICAgICAgIHBhcnRpYWwoZnVuY3Rpb24obG9hZGVyLCBi
dWlsZGVyTmFtZSwgeGhyKSB7CisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5faGFuZGxlUmVz
dWx0c0ZpbGVMb2FkRXJyb3IoYnVpbGRlck5hbWUpOworICAgICAgICAgICAgICAgIH0sIHRoaXMs
IGJ1aWxkZXJOYW1lKSk7CisgICAgfSwKKyAgICBfaGFuZGxlUmVzdWx0c0ZpbGVMb2FkZWQ6IGZ1
bmN0aW9uKGJ1aWxkZXJOYW1lLCBmaWxlRGF0YSkKKyAgICB7CisgICAgICAgIGlmIChpc1RyZWVN
YXAoKSkKKyAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NUaW1lc0pTT05EYXRhKGJ1aWxkZXJOYW1l
LCBmaWxlRGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NSZXN1
bHRzSlNPTkRhdGEoYnVpbGRlck5hbWUsIGZpbGVEYXRhKTsKKworICAgICAgICAvLyBXZSBuZWVk
IHRoaXMgd29yay1hcm91bmQgZm9yIHdlYmtpdC5vcmcvYi81MDU4OS4KKyAgICAgICAgaWYgKCFn
X3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdKSB7CisgICAgICAgICAgICB0aGlzLl9oYW5k
bGVSZXN1bHRzRmlsZUxvYWRFcnJvcihidWlsZGVyTmFtZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9oYW5kbGVSZXNvdXJjZUxvYWQoKTsKKyAgICB9
LAorICAgIF9wcm9jZXNzVGltZXNKU09ORGF0YTogZnVuY3Rpb24oYnVpbGRlck5hbWUsIGZpbGVE
YXRhKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBpbmNsdWRl
IHRoZSBidWlsZGVyTmFtZSBpbiB0aGUgSlNPTgorICAgICAgICAvLyByYXRoZXIgdGhhbiByZWx5
aW5nIG9uIG9ubHkgbG9hZGluZyBvbmUgSlNPTiBmaWxlIHBlciBwYWdlLgorICAgICAgICBnX3Jl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gSlNPTi5wYXJzZShmaWxlRGF0YS5zbGljZSgy
LCBmaWxlRGF0YS5sZW5ndGggLSAxKSk7CisgICAgfSwKKyAgICBfcHJvY2Vzc1Jlc3VsdHNKU09O
RGF0YTogZnVuY3Rpb24oYnVpbGRlck5hbWUsIGZpbGVEYXRhKQorICAgIHsKKyAgICAgICAgdmFy
IGJ1aWxkcyA9IEpTT04ucGFyc2UoZmlsZURhdGEuc2xpY2UoMiwgZmlsZURhdGEubGVuZ3RoIC0g
MSkpOworCisgICAgICAgIHZhciBqc29uX3ZlcnNpb24gPSBidWlsZHNbJ3ZlcnNpb24nXTsKKyAg
ICAgICAgZm9yICh2YXIgYnVpbGRlck5hbWUgaW4gYnVpbGRzKSB7CisgICAgICAgICAgICBpZiAo
YnVpbGRlck5hbWUgPT0gJ3ZlcnNpb24nKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAvLyBJZiBhIHRlc3Qgc3VpdGUgc3RvcHMgYmVpbmcgcnVuIG9uIGEgZ2l2ZW4g
YnVpbGRlciwgd2UgZG9uJ3Qgd2FudCB0byBzaG93IGl0LgorICAgICAgICAgICAgLy8gQXNzdW1l
IGFueSBidWlsZGVyIHdpdGhvdXQgYSBydW4gaW4gdHdvIHdlZWtzIGZvciBhIGdpdmVuIHRlc3Qg
c3VpdGUgaXNuJ3QKKyAgICAgICAgICAgIC8vIHJ1bm5pbmcgdGhhdCBzdWl0ZSBhbnltb3JlLgor
ICAgICAgICAgICAgLy8gRklYTUU6IEdyYWIgd2hpY2ggYm90cyBydW4gd2hpY2ggdGVzdHMgZGly
ZWN0bHkgZnJvbSB0aGUgYnVpbGRib3QgSlNPTiBpbnN0ZWFkLgorICAgICAgICAgICAgdmFyIGxh
c3RSdW5TZWNvbmRzID0gYnVpbGRzW2J1aWxkZXJOYW1lXS5zZWNvbmRzU2luY2VFcG9jaFswXTsK
KyAgICAgICAgICAgIGlmICgoRGF0ZS5ub3coKSAvIDEwMDApIC0gbGFzdFJ1blNlY29uZHMgPiBP
TkVfV0VFS19TRUNPTkRTKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICBpZiAoKERhdGUubm93KCkgLyAxMDAwKSAtIGxhc3RSdW5TZWNvbmRzID4gT05FX0RBWV9TRUNP
TkRTKQorICAgICAgICAgICAgICAgIGdfc3RhbGVCdWlsZGVycy5wdXNoKGJ1aWxkZXJOYW1lKTsK
KworICAgICAgICAgICAgaWYgKGpzb25fdmVyc2lvbiA+PSA0KQorICAgICAgICAgICAgICAgIGJ1
aWxkc1tidWlsZGVyTmFtZV1bVEVTVFNfS0VZXSA9IGZsYXR0ZW5UcmllKGJ1aWxkc1tidWlsZGVy
TmFtZV1bVEVTVFNfS0VZXSk7CisgICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRl
ck5hbWVdID0gYnVpbGRzW2J1aWxkZXJOYW1lXTsKKyAgICAgICAgfQorICAgIH0sCisgICAgX2hh
bmRsZVJlc3VsdHNGaWxlTG9hZEVycm9yOiBmdW5jdGlvbihidWlsZGVyTmFtZSkKKyAgICB7Cisg
ICAgICAgIHZhciBlcnJvciA9ICdGYWlsZWQgdG8gbG9hZCByZXN1bHRzIGZpbGUgZm9yICcgKyBi
dWlsZGVyTmFtZSArICcuJzsKKworICAgICAgICBpZiAoaXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7
CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKKyAgICAgICAgICAgIGdfYnVpbGRl
cnNUaGF0RmFpbGVkVG9Mb2FkLnB1c2goYnVpbGRlck5hbWUpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gQXZvaWQgdG8gc2hvdyBlcnJvci93YXJuaW5nIG1lc3NhZ2VzIGZvciBu
b24tbGF5b3V0IHRlc3RzLiBXZSBtYXkgYmUKKyAgICAgICAgICAgIC8vIGNoZWNraW5nIHRoZSBi
dWlsZGVycyB0aGF0IGFyZSBub3QgcnVubmluZyB0aGUgdGVzdHMuCisgICAgICAgICAgICBjb25z
b2xlLmluZm8oJ2luZm86JyArIGVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92
ZSB0aGlzIGJ1aWxkZXIgZnJvbSBidWlsZGVycywgc28gd2UgZG9uJ3QgdHJ5IHRvIHVzZSB0aGUK
KyAgICAgICAgLy8gZGF0YSB0aGF0IGlzbid0IHRoZXJlLgorICAgICAgICBkZWxldGUgZ19idWls
ZGVyc1tidWlsZGVyTmFtZV07CisKKyAgICAgICAgLy8gQ2hhbmdlIHRoZSBkZWZhdWx0IGJ1aWxk
ZXIgbmFtZSBpZiBpdCBoYXMgYmVlbiBkZWxldGVkLgorICAgICAgICBpZiAoZ19kZWZhdWx0QnVp
bGRlck5hbWUgPT0gYnVpbGRlck5hbWUpIHsKKyAgICAgICAgICAgIGdfZGVmYXVsdEJ1aWxkZXJO
YW1lID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAodmFyIGF2YWlsYWJsZUJ1aWxkZXJOYW1lIGlu
IGdfYnVpbGRlcnMpIHsKKyAgICAgICAgICAgICAgICBnX2RlZmF1bHRCdWlsZGVyTmFtZSA9IGF2
YWlsYWJsZUJ1aWxkZXJOYW1lOworICAgICAgICAgICAgICAgIGdfZGVmYXVsdERhc2hib2FyZFNw
ZWNpZmljU3RhdGVWYWx1ZXMuYnVpbGRlciA9IGF2YWlsYWJsZUJ1aWxkZXJOYW1lOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFnX2RlZmF1
bHRCdWlsZGVyTmFtZSkgeworICAgICAgICAgICAgICAgIHZhciBlcnJvciA9ICdObyB0ZXN0cyBy
ZXN1bHRzIGZvdW5kIGZvciAnICsgZ19jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlICsgJy4g
UmVsb2FkIHRoZSBwYWdlIHRvIHRyeSBmZXRjaGluZyBpdCBhZ2Fpbi4nOworICAgICAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOworICAgICAgICAgICAgICAgIGFkZEVycm9yKGVycm9y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFByb2NlZWQgYXMgaWYg
dGhlIHJlc291cmNlIGhhZCBsb2FkZWQuCisgICAgICAgIHRoaXMuX2hhbmRsZVJlc291cmNlTG9h
ZCgpOworICAgIH0sCisgICAgX2hhbmRsZVJlc291cmNlTG9hZDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX2hhdmVSZXN1bHRzRmlsZXNMb2FkZWQoKSkKKyAgICAgICAgICAg
IHRoaXMuX2xvYWROZXh0KCk7CisgICAgfSwKKyAgICBfaGF2ZVJlc3VsdHNGaWxlc0xvYWRlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgYnVpbGRlciBpbiBnX2J1aWxkZXJz
KSB7CisgICAgICAgICAgICBpZiAoIWdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSwKKyAgICBfbG9hZEV4cGVjdGF0aW9uc0ZpbGVzOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBpZiAoIWlzRmxha2luZXNzRGFzaGJvYXJkKCkgJiYgIWdfY3Jvc3NEYXNoYm9hcmRT
dGF0ZS51c2VUZXN0RGF0YSkgeworICAgICAgICAgICAgdGhpcy5fbG9hZE5leHQoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBleHBlY3RhdGlvbnNGaWxl
c1RvUmVxdWVzdCA9IHt9OworICAgICAgICB0cmF2ZXJzZVBsYXRmb3Jtc1RyZWUoZnVuY3Rpb24o
cGxhdGZvcm0sIHBsYXRmb3JtTmFtZSkgeworICAgICAgICAgICAgaWYgKHBsYXRmb3JtLmZhbGxi
YWNrUGxhdGZvcm1zKQorICAgICAgICAgICAgICAgIHBsYXRmb3JtLmZhbGxiYWNrUGxhdGZvcm1z
LmZvckVhY2goZnVuY3Rpb24oZmFsbGJhY2tQbGF0Zm9ybSkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZmFsbGJhY2tQbGF0Zm9ybU9iamVjdCA9IHBsYXRmb3JtT2JqZWN0Rm9yTmFtZShmYWxs
YmFja1BsYXRmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrUGxhdGZvcm1P
YmplY3QuZXhwZWN0YXRpb25zRGlyZWN0b3J5ICYmICEoZmFsbGJhY2tQbGF0Zm9ybSBpbiBleHBl
Y3RhdGlvbnNGaWxlc1RvUmVxdWVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rh
dGlvbnNGaWxlc1RvUmVxdWVzdFtmYWxsYmFja1BsYXRmb3JtXSA9IEVYUEVDVEFUSU9OU19VUkxf
QkFTRV9QQVRIICsgZmFsbGJhY2tQbGF0Zm9ybU9iamVjdC5leHBlY3RhdGlvbnNEaXJlY3Rvcnkg
KyAnL1Rlc3RFeHBlY3RhdGlvbnMnOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBpZiAocGxhdGZvcm0uZXhwZWN0YXRpb25zRGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIGV4
cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0W3BsYXRmb3JtTmFtZV0gPSBFWFBFQ1RBVElPTlNfVVJM
X0JBU0VfUEFUSCArIHBsYXRmb3JtLmV4cGVjdGF0aW9uc0RpcmVjdG9yeSArICcvVGVzdEV4cGVj
dGF0aW9ucyc7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAocGxhdGZvcm1XaXRoRXhwZWN0
YXRpb25zIGluIGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0KQorICAgICAgICAgICAgbG9hZGVy
LnJlcXVlc3QoZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3RbcGxhdGZvcm1XaXRoRXhwZWN0YXRp
b25zXSwKKyAgICAgICAgICAgICAgICAgICAgcGFydGlhbChmdW5jdGlvbihsb2FkZXIsIHBsYXRm
b3JtTmFtZSwgeGhyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnX2V4cGVjdGF0aW9uc0J5
UGxhdGZvcm1bcGxhdGZvcm1OYW1lXSA9IGdldFBhcnNlZEV4cGVjdGF0aW9ucyh4aHIucmVzcG9u
c2VUZXh0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGV4cGVjdGF0aW9uc0Zp
bGVzVG9SZXF1ZXN0W3BsYXRmb3JtTmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IU9iamVjdC5rZXlzKGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0KS5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9sb2FkTmV4dCgpOworICAgICAgICAgICAgICAg
ICAgICB9LCB0aGlzLCBwbGF0Zm9ybVdpdGhFeHBlY3RhdGlvbnMpLAorICAgICAgICAgICAgICAg
ICAgICBwYXJ0aWFsKGZ1bmN0aW9uKHBsYXRmb3JtTmFtZSwgeGhyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgbG9hZCBleHBlY3RhdGlvbnMgZmls
ZSBmb3IgJyArIHBsYXRmb3JtTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0sIHBsYXRmb3Jt
V2l0aEV4cGVjdGF0aW9ucykpOworICAgIH0KK30KKworfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyX3VuaXR0ZXN0cy5qcyBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyX3VuaXR0ZXN0
cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iZTRkMzllMDY1OGZlMjQ0NmNlNGYxODNhNzE5ZmM4MDE3NmY5M2Vi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9sb2FkZXJfdW5pdHRlc3RzLmpzCkBAIC0wLDAgKzEsMTA2IEBACisvLyBDb3B5cmlnaHQg
KEMpIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorLy8KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKy8vIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKy8vIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittb2R1bGUoJ2xvYWRl
cicpOworCit0ZXN0KCdsb2FkaW5nIHN0ZXBzJywgMSwgZnVuY3Rpb24oKSB7CisgICAgdmFyIGxv
YWRlZFN0ZXBzID0gW107CisgICAgdmFyIHJlc291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2Fk
ZXIoKTsKKyAgICBmdW5jdGlvbiBsb2FkaW5nU3RlcDEoKSB7CisgICAgICAgIGxvYWRlZFN0ZXBz
LnB1c2goJ3N0ZXAgMScpOworICAgICAgICByZXNvdXJjZUxvYWRlci5sb2FkKCk7CisgICAgfQor
ICAgIGZ1bmN0aW9uIGxvYWRpbmdTdGVwMigpIHsKKyAgICAgICAgbG9hZGVkU3RlcHMucHVzaCgn
c3RlcCAyJyk7CisgICAgICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKKyAgICB9CisKKyAgICB2
YXIgbG9hZGluZ0NvbXBsZXRlQ2FsbGJhY2sgPSByZXNvdXJjZUxvYWRpbmdDb21wbGV0ZTsKKyAg
ICByZXNvdXJjZUxvYWRpbmdDb21wbGV0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkZWVwRXF1
YWwobG9hZGVkU3RlcHMsIFsnc3RlcCAxJywgJ3N0ZXAgMiddKTsKKyAgICB9CisKKyAgICB0cnkg
eworICAgICAgICByZXNvdXJjZUxvYWRlci5fbG9hZGluZ1N0ZXBzID0gW2xvYWRpbmdTdGVwMSwg
bG9hZGluZ1N0ZXAyXTsKKyAgICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOworICAgIH0gZmlu
YWxseSB7CisgICAgICAgIHJlc291cmNlTG9hZGluZ0NvbXBsZXRlID0gbG9hZGluZ0NvbXBsZXRl
Q2FsbGJhY2s7CisgICAgfQorfSk7CisKK3Rlc3QoJ3Jlc3VsdHMgZmlsZXMgbG9hZGluZycsIDUs
IGZ1bmN0aW9uKCkgeworICAgIHZhciBleHBlY3RlZExvYWRlZEJ1aWxkZXJzID0gWyJXZWJLaXQg
TGludXgiLCAiV2ViS2l0IFdpbiJdOworICAgIHZhciBsb2FkZWRCdWlsZGVycyA9IFtdOworICAg
IHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7CisgICAgcmVzb3VyY2VM
b2FkZXIuX2xvYWROZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlZXBFcXVhbChsb2FkZWRC
dWlsZGVycy5zb3J0KCksIGV4cGVjdGVkTG9hZGVkQnVpbGRlcnMpOworICAgICAgICBsb2FkZWRC
dWlsZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKSB7CisgICAgICAgICAgICBvaygn
c2Vjb25kc1NpbmNlRXBvY2gnIGluIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0pOwor
ICAgICAgICAgICAgZGVlcEVxdWFsKGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0udGVz
dHMsIHt9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgdmFyIHJlcXVlc3RGdW5jdGlvbiA9
IGxvYWRlci5yZXF1ZXN0OworICAgIGxvYWRlci5yZXF1ZXN0ID0gZnVuY3Rpb24odXJsLCBzdWNj
ZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHsKKyAgICAgICAgdmFyIGJ1aWxkZXJOYW1lID0g
L2J1aWxkZXI9KFtcdyBdKykmLy5leGVjKHVybClbMV07CisgICAgICAgIGxvYWRlZEJ1aWxkZXJz
LnB1c2goYnVpbGRlck5hbWUpOworICAgICAgICBzdWNjZXNzQ2FsbGJhY2soe3Jlc3BvbnNlVGV4
dDogJ0MoeyJ2ZXJzaW9uIjogNCwgIicgKyBidWlsZGVyTmFtZSArICciOiB7InNlY29uZHNTaW5j
ZUVwb2NoIjogWycgKyBEYXRlLm5vdygpICsgJ10sICJ0ZXN0cyI6IHt9fX0pJ30pOworICAgIH0K
KworICAgIGdfYnVpbGRlcnMgPSB7IldlYktpdCBMaW51eCI6IHRydWUsICJXZWJLaXQgV2luIjog
dHJ1ZX07CisKKyAgICB0cnkgeworICAgICAgICByZXNvdXJjZUxvYWRlci5fbG9hZFJlc3VsdHNG
aWxlcygpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGdfYnVpbGRlcnMgPSB1bmRlZmluZWQ7
CisgICAgICAgIGdfcmVzdWx0c0J5QnVpbGRlciA9IHVuZGVmaW5lZDsKKyAgICAgICAgbG9hZGVy
LnJlcXVlc3QgPSByZXF1ZXN0RnVuY3Rpb247CisgICAgfQorfSk7CisKK3Rlc3QoJ2V4cGVjdGF0
aW9ucyBmaWxlcyBsb2FkaW5nJywgMSwgZnVuY3Rpb24oKSB7CisgICAgdmFyIGV4cGVjdGVkTG9h
ZGVkUGxhdGZvcm1zID0gWyJjaHJvbWl1bSIsICJjaHJvbWl1bS1hbmRyb2lkIiwgImVmbCIsICJl
Zmwtd2sxIiwgImVmbC13azIiLCAiZ3RrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImd0ay13azIiLCAibWFjIiwgIm1hYy1saW9uIiwgIm1hYy1zbm93bGVvcGFyZCIsICJx
dCIsICJ3aW4iLCAid2syIl07CisgICAgdmFyIGxvYWRlZFBsYXRmb3JtcyA9IFtdOworICAgIHZh
ciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7CisgICAgcmVzb3VyY2VMb2Fk
ZXIuX2xvYWROZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlZXBFcXVhbChsb2FkZWRQbGF0
Zm9ybXMuc29ydCgpLCBleHBlY3RlZExvYWRlZFBsYXRmb3Jtcyk7CisgICAgfQorCisgICAgdmFy
IHJlcXVlc3RGdW5jdGlvbiA9IGxvYWRlci5yZXF1ZXN0OworICAgIGxvYWRlci5yZXF1ZXN0ID0g
ZnVuY3Rpb24odXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHsKKyAgICAgICAg
bG9hZGVkUGxhdGZvcm1zLnB1c2goL0xheW91dFRlc3RzXC9wbGF0Zm9ybVwvKC4rKVwvVGVzdEV4
cGVjdGF0aW9ucy8uZXhlYyh1cmwpWzFdKTsKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHtyZXNw
b25zZVRleHQ6ICcnfSk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgcmVzb3VyY2VMb2Fk
ZXIuX2xvYWRFeHBlY3RhdGlvbnNGaWxlcygpOworICAgIH0gZmluYWxseSB7CisgICAgICAgIGxv
YWRlci5yZXF1ZXN0ID0gcmVxdWVzdEZ1bmN0aW9uOworICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tdW5pdHRlc3RzLmh0
bWwgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVz
dHMuaHRtbAppbmRleCBlNjg3OWQ5MzE4NjZjOGNmMmE5MTJkYjEzZWIxMmUzMzkxM2JhNGYxLi45
OTk5YzcxZjk2NzBjOTBkZTE0ODJhZjQyOWVjNzM3NGFhNDFjYTVmIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbAor
KysgYi9Ub29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVz
dHMuaHRtbApAQCAtNDQsMjMgKzQ0LDI0IEBAIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KIDxzY3JpcHQ+CiAvLyBEb24ndCByZXF1ZXN0IHRoZSBhY3R1YWwgYnVpbGRlcnMgb2ZmIHRo
ZSBib3RzIHdoZW4gcnVubmluZyB1bml0dGVzdHMuCiBmdW5jdGlvbiBsb2FkQnVpbGRlcnNMaXN0
KCkge307Ci1mdW5jdGlvbiBnX2hhbmRsZUJ1aWxkZXJzTGlzdExvYWRlZCgpIHt9OwogPC9zY3Jp
cHQ+CiAKIDxzY3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJmbGFraW5lc3NfZGFzaGJv
YXJkLmpzIj48L3NjcmlwdD4KIAogPHNjcmlwdD4KIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJyN1
c2VUZXN0RGF0YT10cnVlJzsKIHZhciBncm91cE5hbWUgPSAnQFRvVCAtIGNocm9taXVtLm9yZyc7
Ci12YXIgYnVpbGRlcnMgPSB7J1dlYmtpdCBMaW51eCc6ICcnLCAnV2Via2l0IExpbnV4IChkYmcp
JzogJycsICdXZWJraXQgTWFjMTAuNyc6ICcnLCAnV2Via2l0IFdpbic6ICcnfTsKK3ZhciBidWls
ZGVycyA9ICd7IldlYktpdCBMaW51eCI6IHRydWUsICJXZWJLaXQgTGludXggKGRiZykiOiB0cnVl
LCAiV2ViS2l0IE1hYzEwLjciOiB0cnVlLCAiV2ViS2l0IFdpbiI6IHRydWV9JzsKIExBWU9VVF9U
RVNUU19CVUlMREVSX0dST1VQU1tncm91cE5hbWVdID0gbmV3IEJ1aWxkZXJHcm91cChCdWlsZGVy
R3JvdXAuVE9UX1dFQktJVCk7CiBMQVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFNbZ3JvdXBOYW1l
XS5leHBlY3RlZEdyb3VwcyA9IDQ7Ci1vbkJ1aWxkZXJMaXN0TG9hZChMQVlPVVRfVEVTVFNfQlVJ
TERFUl9HUk9VUFMsIGlzQ2hyb21pdW1XZWJraXRUaXBPZlRyZWVUZXN0UnVubmVyLCBDSFJPTUlV
TV9XRUJLSVRfQlVJTERFUl9NQVNURVIsIGdyb3VwTmFtZSwgQnVpbGRlckdyb3VwLlRPVF9XRUJL
SVQsIGJ1aWxkZXJzKTsKK29uQnVpbGRlckxpc3RMb2FkKExBWU9VVF9URVNUU19CVUlMREVSX0dS
T1VQUywgaXNDaHJvbWl1bVdlYmtpdFRpcE9mVHJlZVRlc3RSdW5uZXIsIENIUk9NSVVNX1dFQktJ
VF9CVUlMREVSX01BU1RFUiwgZ3JvdXBOYW1lLCB7cmVzcG9uc2VUZXh0OiBidWlsZGVyc30pOwog
aW5pdEJ1aWxkZXJzKCk7CiA8L3NjcmlwdD4KIAogPCEtLSBGSVhNRTogU3BsaXQgdGhpcyB1cCBp
bnRvIG11bHRpcGxlIHVuaXR0ZXN0LmpzLCBlLmcuIG9uZSBmb3IgYnVpbGRlcnMuanMgYW5kIG9u
ZSBmb3IgZGFzaGJvYXJkX2Jhc2UuanMuIC0tPgogPHNjcmlwdCBzcmM9ImZsYWtpbmVzc19kYXNo
Ym9hcmRfdW5pdHRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJsb2FkZXJfdW5pdHRl
c3RzLmpzIj48L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCBi
L1Rvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9y
ZXIuaHRtbAppbmRleCBkZDg1MDUzMzJkMjJlMzZhZjk2ZmVhMTMxNjllMTZmODUzOTM3ZGJmLi5i
M2ZhNDFiYzM1MGY1YzU3YzVjMTYwZmE3YzVhMWVhNmNjYjBlZjAyIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0
bWwKKysrIGIvVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90aW1lbGlu
ZV9leHBsb3Jlci5odG1sCkBAIC05Nyw2ICs5Nyw3IEBAIGJvZHkgewogPC9zdHlsZT4KIDxzY3Jp
cHQgc3JjPSJkeWdyYXBoLWNvbWJpbmVkLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJidWls
ZGVycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJkYXNoYm9hcmRfYmFzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogdmFyIEZB
SUxJTkdfVEVTVFNfREFUQVNFVF9OQU1FID0gJ0ZhaWxpbmcgdGVzdHMnOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwgYi9U
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbAppbmRl
eCA2ODQ5NTdiYzY0Y2Y3MWI5NWIxOWE5MzRjYWVhYjk2ZGM0ZWUzNjZhLi5hYTdhZTQzN2VmN2Mx
ZTQxMjQzZTdlMTU3OTM5ODYzZDJhZTkwOTcxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbAorKysgYi9Ub29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbApAQCAtMTA4LDYgKzEwOCw3
IEBAIHRkIHsKIH0KIDwvc3R5bGU+CiA8c2NyaXB0IHNyYz0iYnVpbGRlcnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9ImxvYWRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iZGFzaGJv
YXJkX2Jhc2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9J3dlYnRyZWVtYXAuanMnPjwvc2Ny
aXB0PgogCkBAIC0yMjMsMzUgKzIyNCwxMiBAQCBmdW5jdGlvbiBzaG93QXZlcmFnZXMoKQogICAg
IG1hcC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0YWJsZSwgbWFwKTsKIH0KIAotdmFyIGdfcmVz
dWx0c0J5QnVpbGRlciA9IHt9OwotCi1mdW5jdGlvbiBBRERfUkVTVUxUUyhkYXRhKQotewotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSB0aGUgYnVpbGRlck5hbWUgaW4g
dGhlIEpTT04KLSAgICAvLyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIG9ubHkgbG9hZGluZyBvbmUg
SlNPTiBmaWxlIHBlciBwYWdlLgotICAgIGlmICghZ19yZXN1bHRzQnlCdWlsZGVyW2dfY3VycmVu
dFN0YXRlLmJ1aWxkZXJdKQotICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3Rh
dGUuYnVpbGRlcl0gPSBkYXRhOwotCi0gICAgaGFuZGxlTG9jYXRpb25DaGFuZ2UoKTsKLX0KLQot
ZnVuY3Rpb24gZ19oYW5kbGVCdWlsZGVyc0xpc3RMb2FkZWQoKSB7Ci0gICAgZ19idWlsZGVyc0xp
c3RMb2FkZWQgPSB0cnVlOwotICAgIGluaXRCdWlsZGVycyhnX2N1cnJlbnRTdGF0ZSk7Ci0gICAg
JCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRNTCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVy
KCk7Ci0gICAgcGFyc2VQYXJhbWV0ZXJzKCk7Ci0gICAgYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRG
b3IoZ19jdXJyZW50U3RhdGUuYnVpbGRlcik7Ci19Ci0KIHZhciBnX2lzR2VuZXJhdGluZ1BhZ2Ug
PSBmYWxzZTsKIHZhciBnX3dlYlRyZWU7CiAKIGZ1bmN0aW9uIGdlbmVyYXRlUGFnZSgpCiB7Ci0g
ICAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJbZ19jdXJyZW50U3RhdGUuYnVpbGRlcl0pIHsKLSAg
ICAgICAgaGFuZGxlUmVzb3VyY2VMb2FkRXJyb3IoZ19jdXJyZW50U3RhdGUuYnVpbGRlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgJCgnaGVhZGVyLWNvbnRhaW5lcicpLmlubmVySFRN
TCA9IGh0bWxGb3JUZXN0VHlwZVN3aXRjaGVyKCk7CiAKICAgICBnX2lzR2VuZXJhdGluZ1BhZ2Ug
PSB0cnVlOwogCkBAIC0zMTksMTIgKzI5Nyw2IEBAIGdfZGVmYXVsdERhc2hib2FyZFNwZWNpZmlj
U3RhdGVWYWx1ZXMgPSB7CiAKIGZ1bmN0aW9uIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlKHBh
cmFtcykKIHsKLSAgICBpZiAoIWdfYnVpbGRlcnNMaXN0TG9hZGVkKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIWdfcmVzdWx0c0J5QnVpbGRlcltnX2N1cnJlbnRTdGF0ZS5idWls
ZGVyXSkKLSAgICAgICAgYXBwZW5kSlNPTlNjcmlwdEVsZW1lbnRGb3IoZ19jdXJyZW50U3RhdGUu
YnVpbGRlcik7Ci0KICAgICBmb3IgKHZhciBwYXJhbSBpbiBwYXJhbXMpIHsKICAgICAgICAgaWYg
KHBhcmFtICE9ICd0cmVlbWFwZm9jdXMnKSB7CiAgICAgICAgICAgICAkKCdtYXAnKS5pbm5lckhU
TUwgPSAnTG9hZGluZy4uLic7CkBAIC0zNzMsNyArMzQ1LDcgQEAgZnVuY3Rpb24gaGFuZGxlRm9j
dXModHJlZSkKICAgICAgICAgdHJlZS5leHRyYURvbS5jbGFzc05hbWUgPSAnZXh0cmEtZG9tJzsK
ICAgICAgICAgdHJlZS5kb20uYXBwZW5kQ2hpbGQodHJlZS5leHRyYURvbSk7CiAKLSAgICAgICAg
cmVxdWVzdChURVNUX1VSTF9CQVNFX1BBVEggKyBuYW1lLAorICAgICAgICBsb2FkZXIucmVxdWVz
dChURVNUX1VSTF9CQVNFX1BBVEggKyBuYW1lLAogICAgICAgICAgICAgZnVuY3Rpb24oeGhyKSB7
CiAgICAgICAgICAgICAgICAgdHJlZS5leHRyYURvbS5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGUp
IHsKICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsK
</data>
<flag name="review"
          id="182458"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>