<?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>220025</bug_id>
          
          <creation_ts>2020-12-18 14:18:04 -0800</creation_ts>
          <short_desc>LayoutTestFinder should be in charge of finding layout tests</short_desc>
          <delta_ts>2021-01-07 11:34:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=220421</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Sneddon [:gsnedders]">gsnedders</reporter>
          <assigned_to name="Sam Sneddon [:gsnedders]">gsnedders</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1715808</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2020-12-18 14:18:04 -0800</bug_when>
    <thetext>Currently, LayoutTestFinder finds the tests through: self._port.tests(paths, device_type=device_type)

That method and some related functions, instead of being under Port, should be moved to LayoutTestFinder. (Note currently the method only exists in port.base, and is never overridden, and it is unlikely it ever will be.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715824</commentid>
    <comment_count>1</comment_count>
      <attachid>416550</attachid>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2020-12-18 15:15:23 -0800</bug_when>
    <thetext>Created attachment 416550
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715828</commentid>
    <comment_count>2</comment_count>
      <attachid>416550</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-18 15:39:04 -0800</bug_when>
    <thetext>Comment on attachment 416550
Patch

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

This patch needs a changelog.

I also think that while it&apos;s going the right direction, we probably want to take this one piece at a time.nFor example, it seems like the removal of mock_drt is needed for the change, but not strictly part of the change. I also think we&apos;ve missed some fundemental building blocks of layout test discovery that are still owned by base.py after this patch, such as Base.test_key

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:51
&gt; +    if ext not in Port._supported_reference_extensions:

Code like this makes me think that this patch doesn&apos;t finish what it intends to do. It seems bad to separate supported_test_extensions from their reference files (and it seems bad that both of them are in base.py)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716615</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-25 14:19:40 -0800</bug_when>
    <thetext>&lt;rdar://problem/72674981&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717649</commentid>
    <comment_count>4</comment_count>
      <attachid>417085</attachid>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-01-06 08:04:25 -0800</bug_when>
    <thetext>Created attachment 417085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717654</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-01-06 08:24:15 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #2)
&gt; Comment on attachment 416550 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=416550&amp;action=review
&gt; 
&gt; This patch needs a changelog.

New patch! Now with the changelog I wrote before Christmas!

&gt; I also think that while it&apos;s going the right direction, we probably want to
&gt; take this one piece at a time.nFor example, it seems like the removal of
&gt; mock_drt is needed for the change, but not strictly part of the change. I
&gt; also think we&apos;ve missed some fundemental building blocks of layout test
&gt; discovery that are still owned by base.py after this patch, such as
&gt; Base.test_key

I can certainly split out the mock_drt change if you want, at least.

As for Base.test_key, I&apos;m pretty certain that remained where it was due to it also being referenced in Scripts/webkitpy/layout_tests/controllers/manager.py; in principle it would be nice if we made the API of the LayoutTestFinder such that it returned them in &quot;natural&quot; order hence no further resorting was needed, but I was trying to avoid overcommitting (and trying to avoid having to understand the manager right now!), though it does look like the manager doesn&apos;t do too much with the list, so maybe I can just change that now?

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:51
&gt; &gt; +    if ext not in Port._supported_reference_extensions:
&gt; 
&gt; Code like this makes me think that this patch doesn&apos;t finish what it intends
&gt; to do. It seems bad to separate supported_test_extensions from their
&gt; reference files (and it seems bad that both of them are in base.py)

To summarise what we discussed in person, my longer term plan was to migrate all the expectation-finding code into the LayoutTestFinder as well. Currently we build up TestInputs in the manager, add the reference_files to them in layout_test_runner, and then construct a DriverOutput with all the relevant expectations in single_test_runner. This doesn&apos;t really make sense to have split across three places.

At the moment, after this patch, finding expectations (references among them) remain with the Port, but that should be changed in a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717813</commentid>
    <comment_count>6</comment_count>
      <attachid>417085</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-06 17:23:11 -0800</bug_when>
    <thetext>Comment on attachment 417085
Patch

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

r=me (even though Darin already r+ed it, want to be clear that all my concerns have definitely been addressed)

&gt; Tools/ChangeLog:35
&gt; +        (MockPort.__init__): Deleted.

Nit: We can make this shorter by just saying &quot;(MockPort): Deleted.&quot; instead of listing each function we deleted.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:75
&gt;          self._port = port

Based on the conversation Sam and I had today, I think we want a FIXME here to indicate that we think the port object should not be passed to LayoutTestFinder. We aren&apos;t there yet, and a patch to get us all the way would be too large, but seems worth mentioning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718002</commentid>
    <comment_count>7</comment_count>
      <attachid>417190</attachid>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-01-07 10:53:25 -0800</bug_when>
    <thetext>Created attachment 417190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718019</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-07 11:34:51 -0800</bug_when>
    <thetext>Committed r271244: &lt;https://trac.webkit.org/changeset/271244&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417190.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416550</attachid>
            <date>2020-12-18 15:15:23 -0800</date>
            <delta_ts>2021-01-06 08:04:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220025-20201218231521.patch</filename>
            <type>text/plain</type>
            <size>50120</size>
            <attacher name="Sam Sneddon [:gsnedders]">gsnedders</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwOTY3CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVz
dF9maW5kZXIucHkKaW5kZXggMGMxODFjMzM4NjFmZDBkNjhlOGJlMWRlOTk3ODU0MjA0MjQ3NTVl
ZS4uNzM2ODFlYWU4NzkzOWQ3MzJiYTcyODZiZjk2ZGIyYmNhODNhMDQzYSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rl
c3RfZmluZGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5weQpAQCAtMjcsMjkgKzI3LDExNiBAQAogIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCiBpbXBvcnQgZXJybm8KK2ltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwog
aW1wb3J0IHJlCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBmaW5kX2ZpbGVzCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitm
cm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAogCiAKIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIAogCisjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCB3ZSBp
bmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0ZW5zaW9ucy4KK19zdXBwb3J0ZWRfdGVzdF9l
eHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5w
bCcsICcuaHRtJywgJy5waHAnLCAnLnN2ZycsICcubWh0JywgJy54aHQnXSkKKworCisjIElmIGFu
eSBjaGFuZ2VzIGFyZSBtYWRlIGhlcmUgYmUgc3VyZSB0byB1cGRhdGUgdGhlIGlzVXNlZEluUmVm
dGVzdCBtZXRob2QgaW4gb2xkLXJ1bi13ZWJraXQtdGVzdHMgYXMgd2VsbC4KK2RlZiBfaXNfcmVm
ZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6CisgICAgaWYg
ZmlsZW5hbWUuc3RhcnRzd2l0aCgncmVmLScpIG9yIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ25vdHJl
Zi0nKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBmaWxlbmFtZV93aWhvdXRfZXh0LCBleHQg
PSBmaWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgIGlmIGV4dCBub3QgaW4gUG9ydC5f
c3VwcG9ydGVkX3JlZmVyZW5jZV9leHRlbnNpb25zOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAg
ICBmb3Igc3VmZml4IGluIFsnLWV4cGVjdGVkJywgJy1leHBlY3RlZC1taXNtYXRjaCcsICctcmVm
JywgJy1ub3RyZWYnXToKKyAgICAgICAgaWYgZmlsZW5hbWVfd2lob3V0X2V4dC5lbmRzd2l0aChz
dWZmaXgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworCitk
ZWYgX2hhc19zdXBwb3J0ZWRfZXh0ZW5zaW9uKGZpbGVzeXN0ZW0sIGZpbGVuYW1lKToKKyAgICAi
IiJSZXR1cm4gdHJ1ZSBpZiBmaWxlbmFtZSBpcyBvbmUgb2YgdGhlIGZpbGUgZXh0ZW5zaW9ucyB3
ZSB3YW50IHRvIHJ1biBhIHRlc3Qgb24uIiIiCisgICAgZXh0ZW5zaW9uID0gZmlsZXN5c3RlbS5z
cGxpdGV4dChmaWxlbmFtZSlbMV0KKyAgICByZXR1cm4gZXh0ZW5zaW9uIGluIF9zdXBwb3J0ZWRf
dGVzdF9leHRlbnNpb25zCisKKwogY2xhc3MgTGF5b3V0VGVzdEZpbmRlcihvYmplY3QpOgorICAg
ICIiIkZpbmRzIExheW91dFRlc3RzCisKKyAgICBXZSBjb25zaWRlciBhbnkgZmlsZSB3aWxsIGEg
Z2l2ZW4gc2V0IG9mIGV4dGVuc2lvbnMgYXMgdGVzdHMsIGV4Y2VwdCBmb3IKKyAgICB0aG9zZSB3
aGljaCBhcHBlYXIgdG8gYmUgcmVmZXJlbmNlcyAoLWV4cGVjdGVkLmh0bWwsIGV0Yy4pLiBOb3Rh
Ymx5IHRoaXMKKyAgICBtZWFucyB0aGF0IGEgdGVzdCBfZG9lc24ndF8gbmVlZCB0byBoYXZlIGFu
eSBhc3NvY2lhdGVkIC1leHBlY3RlZC4qIGZpbGUKKyAgICAoaW4gdGhvc2UgY2FzZXMsIHdlIHdp
bGwgcmVwb3J0IHRoZSBtaXNzaW5nIHJlc3VsdCkuCisgICAgIiIiCisKICAgICBkZWYgX19pbml0
X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAg
ICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBz
ZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQogICAgICAgICBzZWxmLkxBWU9VVF9URVNUU19ESVJF
Q1RPUlkgPSAnTGF5b3V0VGVzdHMnCisgICAgICAgIHNlbGYuX3czY19yZXNvdXJjZV9maWxlcyA9
IE5vbmUKIAogICAgIGRlZiBmaW5kX3Rlc3RzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIGRldmljZV90
eXBlPU5vbmUpOgogICAgICAgICBwYXRocyA9IHNlbGYuX3N0cmlwX3Rlc3RfZGlyX3ByZWZpeGVz
KGFyZ3MpCiAgICAgICAgIGlmIG9wdGlvbnMgYW5kIG9wdGlvbnMudGVzdF9saXN0OgogICAgICAg
ICAgICAgcGF0aHMgKz0gc2VsZi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoc2VsZi5fcmVhZF90
ZXN0X25hbWVzX2Zyb21fZmlsZShvcHRpb25zLnRlc3RfbGlzdCwgc2VsZi5fcG9ydC5URVNUX1BB
VEhfU0VQQVJBVE9SKSkKLSAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3BvcnQudGVzdHMocGF0
aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQorICAgICAgICB0ZXN0X2ZpbGVzID0gc2VsZi5m
aW5kX3Rlc3RzX2J5X3BhdGgocGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQogICAgICAg
ICByZXR1cm4gKHBhdGhzLCB0ZXN0X2ZpbGVzKQogCisgICAgZGVmIGZpbmRfdGVzdHNfYnlfcGF0
aChzZWxmLCBwYXRocywgZGV2aWNlX3R5cGU9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUg
bGlzdCBvZiB0ZXN0cyBmb3VuZC4gQm90aCBnZW5lcmljIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB0
ZXN0cyBtYXRjaGluZyBwYXRocyBzaG91bGQgYmUgcmV0dXJuZWQuIiIiCisgICAgICAgIGV4cGFu
ZGVkX3BhdGhzID0gc2VsZi5fZXhwYW5kZWRfcGF0aHMocGF0aHMsIGRldmljZV90eXBlPWRldmlj
ZV90eXBlKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykK
KworICAgIGRlZiBfZXhwYW5kZWRfcGF0aHMoc2VsZiwgcGF0aHMsIGRldmljZV90eXBlPU5vbmUp
OgorICAgICAgICBleHBhbmRlZF9wYXRocyA9IFtdCisgICAgICAgIGZzID0gc2VsZi5fcG9ydC5f
ZmlsZXN5c3RlbQorICAgICAgICBhbGxfcGxhdGZvcm1fZGlycyA9IFtwYXRoIGZvciBwYXRoIGlu
IGZzLmdsb2IoZnMuam9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3Jt
JywgJyonKSkgaWYgZnMuaXNkaXIocGF0aCldCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgor
ICAgICAgICAgICAgZXhwYW5kZWRfcGF0aHMuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICBpZiBz
ZWxmLl9wb3J0LnRlc3RfaXNkaXIocGF0aCkgYW5kIG5vdCBwYXRoLnN0YXJ0c3dpdGgoJ3BsYXRm
b3JtJykgYW5kIG5vdCBmcy5pc2FicyhwYXRoKToKKyAgICAgICAgICAgICAgICBmb3IgcGxhdGZv
cm1fZGlyIGluIGFsbF9wbGF0Zm9ybV9kaXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBmcy5p
c2Rpcihmcy5qb2luKHBsYXRmb3JtX2RpciwgcGF0aCkpIGFuZCBwbGF0Zm9ybV9kaXIgaW4gc2Vs
Zi5fcG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aChkZXZpY2VfdHlwZT1kZXZpY2VfdHlwZSk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZF9wYXRocy5hcHBlbmQoc2VsZi5fcG9ydC5y
ZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZzLmpvaW4ocGxhdGZvcm1fZGlyLCBwYXRoKSkpCisKKyAg
ICAgICAgcmV0dXJuIGV4cGFuZGVkX3BhdGhzCisKKyAgICBkZWYgX3JlYWxfdGVzdHMoc2VsZiwg
cGF0aHMpOgorICAgICAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCBza2lwIHRoZXNl
IGRpcmVjdG9yaWVzCisgICAgICAgIHNraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQoWycuc3ZuJywg
J19zdm4nLCAncmVzb3VyY2VzJywgJ3N1cHBvcnQnLCAnc2NyaXB0LXRlc3RzJywgJ3JlZmVyZW5j
ZScsICdyZWZ0ZXN0J10pCisgICAgICAgIGZpbGVzID0gZmluZF9maWxlcy5maW5kKHNlbGYuX3Bv
cnQuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRocywgc2tp
cHBlZF9kaXJlY3Rvcmllcywgc2VsZi5faXNfdGVzdF9maWxlLCBzZWxmLl9wb3J0LnRlc3Rfa2V5
KQorICAgICAgICByZXR1cm4gW3NlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBm
b3IgZiBpbiBmaWxlc10KKworICAgIGRlZiBfaXNfdGVzdF9maWxlKHNlbGYsIGZpbGVzeXN0ZW0s
IGRpcm5hbWUsIGZpbGVuYW1lKToKKyAgICAgICAgaWYgbm90IF9oYXNfc3VwcG9ydGVkX2V4dGVu
c2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAg
ICAgICAgaWYgX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmls
ZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2lzX3cz
Y19yZXNvdXJjZV9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9pc193M2Nf
cmVzb3VyY2VfZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6CisgICAg
ICAgIHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpCisgICAgICAgIHcz
Y19wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAi
aW1wb3J0ZWQiLCAidzNjIikKKyAgICAgICAgaWYgdzNjX3BhdGggbm90IGluIHBhdGg6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fdzNjX3Jlc291cmNl
X2ZpbGVzOgorICAgICAgICAgICAgZmlsZXBhdGggPSBmaWxlc3lzdGVtLmpvaW4odzNjX3BhdGgs
ICJyZXNvdXJjZXMiLCAicmVzb3VyY2UtZmlsZXMuanNvbiIpCisgICAgICAgICAgICBqc29uX2Rh
dGEgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGZpbGVwYXRoKQorICAgICAgICAgICAgc2Vs
Zi5fdzNjX3Jlc291cmNlX2ZpbGVzID0ganNvbi5sb2Fkcyhqc29uX2RhdGEpCisKKyAgICAgICAg
c3VicGF0aCA9IHBhdGhbbGVuKHczY19wYXRoKSArIDE6XS5yZXBsYWNlKCdcXCcsICcvJykKKyAg
ICAgICAgaWYgc3VicGF0aCBpbiBzZWxmLl93M2NfcmVzb3VyY2VfZmlsZXNbImZpbGVzIl06Cisg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmb3IgZGlycGF0aCBpbiBzZWxmLl93M2Nf
cmVzb3VyY2VfZmlsZXNbImRpcmVjdG9yaWVzIl06CisgICAgICAgICAgICBpZiBkaXJwYXRoIGlu
IHN1YnBhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZh
bHNlCisKICAgICBkZWYgZmluZF90b3VjaGVkX3Rlc3RzKHNlbGYsIG5ld19vcl9tb2RpZmllZF9w
YXRocywgYXBwbHlfc2tpcF9leHBlY3RhdGlvbnM9VHJ1ZSk6CiAgICAgICAgIHBvdGVudGlhbF90
ZXN0X3BhdGhzID0gW10KICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBuZXdfb3JfbW9kaWZpZWRf
cGF0aHM6CkBAIC02Niw3ICsxNTMsNyBAQCBjbGFzcyBMYXlvdXRUZXN0RmluZGVyKG9iamVjdCk6
CiAgICAgICAgIGlmIG5vdCBwb3RlbnRpYWxfdGVzdF9wYXRoczoKICAgICAgICAgICAgIHJldHVy
biBOb25lCiAKLSAgICAgICAgdGVzdHMgPSBzZWxmLl9wb3J0LnRlc3RzKGxpc3Qoc2V0KHBvdGVu
dGlhbF90ZXN0X3BhdGhzKSkpCisgICAgICAgIHRlc3RzID0gc2VsZi5maW5kX3Rlc3RzX2J5X3Bh
dGgobGlzdChzZXQocG90ZW50aWFsX3Rlc3RfcGF0aHMpKSkKICAgICAgICAgaWYgbm90IGFwcGx5
X3NraXBfZXhwZWN0YXRpb25zOgogICAgICAgICAgICAgcmV0dXJuIHRlc3RzCiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weQppbmRleCA5
NTg1MmVlM2JhZWQyMzJhZDgxZjMzOTdlZmIzZmNlMzE4NmFmNjNmLi5jNTgyMDFiZDljYzZhY2U3
MzU1ZDM5Y2JlZDg4OGUzNWE0NWVjZGRmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXJfdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bGF5b3V0X3Rlc3RfZmluZGVyX3VuaXR0ZXN0LnB5CkBAIC0zMCwyNyArMzAsMTE1IEBAIGZyb20g
Y29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmhv
c3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxl
c3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCi1mcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9maW5kZXIgaW1wb3J0IExheW91dFRlc3RGaW5k
ZXIKLWZyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydAorZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfZmluZGVyIGltcG9ydCBMYXlv
dXRUZXN0RmluZGVyLCBQb3J0LCBfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZSwgX3N1cHBvcnRlZF90
ZXN0X2V4dGVuc2lvbnMKK2Zyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9ydCBhZGRfdW5pdF90
ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0sIFRlc3RQb3J0CiAKIAotY2xhc3MgTW9ja1BvcnQoVGVz
dFBvcnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0KToKLSAgICAgICAgc3VwZXIoTW9j
a1BvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QpCi0KLSAgICBkZWYgdGVzdHMoc2VsZiwgcGF0aHMp
OgorY2xhc3MgTW9ja0xheW91dFRlc3RGaW5kZXIoTGF5b3V0VGVzdEZpbmRlcik6CisgICAgZGVm
IF9yZWFsX3Rlc3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgcmV0dXJuIFtwYXRoIGZvciBwYXRo
IGluIHBhdGhzIGlmIHBhdGguZW5kc3dpdGgoJy5odG1sJyldCiAKIAogY2xhc3MgTGF5b3V0VGVz
dEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbWFrZV9maW5kZXIoc2Vs
Zik6CisgICAgICAgIGhvc3QgPSBNb2NrSG9zdChjcmVhdGVfc3R1Yl9yZXBvc2l0b3J5X2ZpbGVz
PVRydWUpCisgICAgICAgIGFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbShob3N0LmZp
bGVzeXN0ZW0pCisgICAgICAgIHBvcnQgPSBUZXN0UG9ydChob3N0KQorICAgICAgICByZXR1cm4g
TGF5b3V0VGVzdEZpbmRlcihwb3J0LCBOb25lKQorCiAgICAgZGVmIHRvdWNoZWRfZmlsZXMoc2Vs
ZiwgdG91Y2hlZF9maWxlcywgZnM9Tm9uZSk6CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAg
ICAgICAgIGlmIGZzOgogICAgICAgICAgICAgaG9zdC5maWxlc3lzdGVtID0gZnMKICAgICAgICAg
ZWxzZToKICAgICAgICAgICAgIGZzID0gaG9zdC5maWxlc3lzdGVtCi0gICAgICAgIHBvcnQgPSBN
b2NrUG9ydChob3N0KQotICAgICAgICByZXR1cm4gKGZzLCBMYXlvdXRUZXN0RmluZGVyKHBvcnQs
IG9wdHBhcnNlLlZhbHVlcyh7J3NraXBwZWQnOiAnYWx3YXlzJywgJ3NraXBfZmFpbGluZ190ZXN0
cyc6IEZhbHNlLCAnaHR0cCc6IFRydWV9KSkuZmluZF90b3VjaGVkX3Rlc3RzKHRvdWNoZWRfZmls
ZXMpKQorICAgICAgICBwb3J0ID0gVGVzdFBvcnQoaG9zdCkKKyAgICAgICAgcmV0dXJuIChmcywg
TW9ja0xheW91dFRlc3RGaW5kZXIocG9ydCwgb3B0cGFyc2UuVmFsdWVzKHsnc2tpcHBlZCc6ICdh
bHdheXMnLCAnc2tpcF9mYWlsaW5nX3Rlc3RzJzogRmFsc2UsICdodHRwJzogVHJ1ZX0pKS5maW5k
X3RvdWNoZWRfdGVzdHModG91Y2hlZF9maWxlcykpCisKKyAgICBkZWYgdGVzdF9zdXBwb3J0ZWRf
dGVzdF9leHRlbnNpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zdXBwb3J0
ZWRfdGVzdF9leHRlbnNpb25zICYgUG9ydC5fc3VwcG9ydGVkX3JlZmVyZW5jZV9leHRlbnNpb25z
LCBQb3J0Ll9zdXBwb3J0ZWRfcmVmZXJlbmNlX2V4dGVuc2lvbnMpCisKKyAgICBkZWYgdGVzdF9p
c19yZWZlcmVuY2VfaHRtbF9maWxlKHNlbGYpOgorICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0Zp
bGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2lzX3JlZmVyZW5jZV9odG1sX2Zp
bGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQuaHRtbCcpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhw
ZWN0ZWQtbWlzbWF0Y2gueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfaXNfcmVmZXJl
bmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAn
Zm9vLW5vdHJlZi5zdmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNl
X2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby5odG1sJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhw
ZWN0ZWQudHh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoX2lzX3JlZmVyZW5jZV9odG1s
X2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQuc2h0bWwnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zv
by1leHBlY3RlZC5waHAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNl
X2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5taHQnKSkKKworICAgIGRl
ZiB0ZXN0X2ZpbmRfbm9fcGF0aHNfc3BlY2lmaWVkKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBz
ZWxmLm1ha2VfZmluZGVyKCkKKyAgICAgICAgdGVzdHMgPSBmaW5kZXIuZmluZF90ZXN0c19ieV9w
YXRoKFtdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbih0ZXN0cyksIDApCisKKyAg
ICBkZWYgdGVzdF9maW5kX29uZV90ZXN0KHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1h
a2VfZmluZGVyKCkKKyAgICAgICAgdGVzdHMgPSBmaW5kZXIuZmluZF90ZXN0c19ieV9wYXRoKFsn
ZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbih0ZXN0cyksIDEpCisKKyAgICBkZWYgdGVzdF9maW5kX2dsb2Ioc2VsZik6CisgICAgICAg
IGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQorICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5k
X3Rlc3RzX2J5X3BhdGgoWydmYWlsdXJlcy9leHBlY3RlZC9pbSonXSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChsZW4odGVzdHMpLCAyKQorCisgICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBw
ZWRfZGlyZWN0b3JpZXMoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIo
KQorICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5kX3Rlc3RzX2J5X3BhdGgoWyd1c2Vyc2NyaXB0
cyddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd1c2Vyc2NyaXB0cy9yZXNvdXJjZXMvaWZy
YW1lLmh0bWwnLCB0ZXN0cykKKworICAgIGRlZiB0ZXN0X2ZpbmRfd2l0aF9za2lwcGVkX2RpcmVj
dG9yaWVzXzIoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQorICAg
ICAgICB0ZXN0cyA9IGZpbmRlci5maW5kX3Rlc3RzX2J5X3BhdGgoWyd1c2Vyc2NyaXB0cy9yZXNv
dXJjZXMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cywgW10pCisKKyAgICBkZWYg
dGVzdF9pc190ZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5k
ZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVy
Ll9maWxlc3lzdGVtLCAnJywgJ2Zvby5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShm
aW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAnZm9vLnNodG1sJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2Zp
bGVzeXN0ZW0sICcnLCAnZm9vLnN2ZycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZGVy
Ll9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ3Rlc3QtcmVmLXRlc3QuaHRt
bCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxlKGZpbmRl
ci5fZmlsZXN5c3RlbSwgJycsICdmb28ucG5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3Rl
ZC5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUo
ZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5zdmcnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcn
LCAnZm9vLWV4cGVjdGVkLnhodCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5f
aXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0
Y2guaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxl
KGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guc3ZnJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxl
c3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54aHRtbCcpKQorICAgICAgICBzZWxm
LmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycs
ICdmb28tcmVmLmh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rl
c3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAnZm9vLW5vdHJlZi5odG1sJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lz
dGVtLCAnJywgJ2Zvby1ub3RyZWYueGh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlu
ZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIu
X2ZpbGVzeXN0ZW0sICcnLCAncmVmLWZvby5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ25vdHJlZi1m
b28ueGhyJykpCisKKyAgICBkZWYgdGVzdF9pc193M2NfcmVzb3VyY2VfZmlsZShzZWxmKToKKyAg
ICAgICAgZmluZGVyID0gc2VsZi5tYWtlX2ZpbmRlcigpCisKKyAgICAgICAgZmluZGVyLl9maWxl
c3lzdGVtLndyaXRlX3RleHRfZmlsZShmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsg
Ii9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3Jlc291cmNlLWZpbGVzLmpzb24iLCAiIiIKK3siZGly
ZWN0b3JpZXMiOiBbCisid2ViLXBsYXRmb3JtLXRlc3RzL2NvbW1vbiIsCisid2ViLXBsYXRmb3Jt
LXRlc3RzL2RvbS9ub2Rlcy9Eb2N1bWVudC1jcmVhdGVFbGVtZW50LW5hbWVzcGFjZS10ZXN0cyIs
Cisid2ViLXBsYXRmb3JtLXRlc3RzL2ZvbnRzIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9i
cm93c2Vycy9icm93c2luZy10aGUtd2ViL25hdmlnYXRpbmctYWNyb3NzLWRvY3VtZW50cy9zb3Vy
Y2Uvc3VwcG9ydCIsCisid2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3Npbmct
dGhlLXdlYi91bmxvYWRpbmctZG9jdW1lbnRzL3N1cHBvcnQiLAorIndlYi1wbGF0Zm9ybS10ZXN0
cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWhpc3RvcnktaW50ZXJmYWNlL25vbi1hdXRvbWF0
ZWQiLAorIndlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWxvY2F0
aW9uLWludGVyZmFjZS9ub24tYXV0b21hdGVkIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvaW1hZ2Vz
IiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvc2VydmljZS13b3JrZXJzIiwKKyJ3ZWItcGxhdGZvcm0t
dGVzdHMvdG9vbHMiCitdLCAiZmlsZXMiOiBbCisid2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBS
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5o
dG1sIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QveG1saHR0cHJlcXVlc3Qt
c3luYy1ub3QtaGFuZy1zY3JpcHRsb2FkZXItc3ViZnJhbWUuaHRtbCIKK119IiIiKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdzNjX3Jlc291cmNlX2ZpbGUoZmluZGVyLl9m
aWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93
MyIsICJyZXNvdXJjZV9maWxlLmh0bWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5k
ZXIuX2lzX3czY19yZXNvdXJjZV9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgZmluZGVyLl9wb3J0
LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjIiwgInJlc291cmNlX2ZpbGUuaHRt
bCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdzNjX3Jlc291cmNlX2Zp
bGUoZmluZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsg
Ii9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0IiwgInhtbGh0
dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5odG1sLmh0bWwiKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRlci5faXNfdzNjX3Jlc291cmNlX2ZpbGUoZmlu
ZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0IiwgInhtbGh0dHByZXF1
ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5odG1sIikpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShmaW5kZXIuX2lzX3czY19yZXNvdXJjZV9maWxlKGZpbmRlci5fZmlsZXN5
c3RlbSwgZmluZGVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvRG9jdW1lbnQtY3JlYXRlRWxlbWVudC1uYW1lc3Bh
Y2UtdGVzdHMiLCAidGVzdC5odG1sIikpCiAKICAgICBkZWYgdGVzdF90b3VjaGVkX3Rlc3Qoc2Vs
Zik6CiAgICAgICAgIHBhdGhzID0gWydMYXlvdXRUZXN0cy90ZXN0Lmh0bWwnLCAnTGF5b3V0VGVz
dHMvdGVzdCcsICd0ZXN0Mi5odG1sJywgJ1NvdXJjZS90ZXN0MS5odG1sJ10KQEAgLTgwLDcgKzE2
OCw3IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAK
ICAgICBkZWYgdGVzdF90b3VjaGVkX2J1dF9za2lwcGVkX3Rlc3Qoc2VsZik6CiAgICAgICAgIGhv
c3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIHBvcnQgPSBNb2NrUG9ydChob3N0KQorICAgICAgICBw
b3J0ID0gVGVzdFBvcnQoaG9zdCkKIAogICAgICAgICBleHBlY3RhdGlvbnNfZGljdCA9IE9yZGVy
ZWREaWN0KCkKICAgICAgICAgZXhwZWN0YXRpb25zX2RpY3RbJ2V4cGVjdGF0aW9ucyddID0gJ3Rl
c3QxLmh0bWwgWyBTa2lwIF1cbnRlc3QzLmh0bWwgWyBTa2lwIF1cbicKQEAgLTkxLDUgKzE3OSw1
IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90ZXN0LmNoZWNrb3V0L0xheW91
dFRlc3RzL3Rlc3QyLmh0bWwnLCAnVGhpcyBpcyBhIHRlc3QgdG8gYmUgcnVubmVkJykKICAgICAg
ICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0
VGVzdHMvdGVzdDMuaHRtbCcsICdUaGlzIGlzIGEgdGVzdCB0byBiZSBza2lwcGVkJykKIAotICAg
ICAgICB0b3VjaGVkX3Rlc3RzID0gTGF5b3V0VGVzdEZpbmRlcihwb3J0LCBvcHRwYXJzZS5WYWx1
ZXMoeydza2lwcGVkJzogJ2Fsd2F5cycsICdza2lwX2ZhaWxpbmdfdGVzdHMnOiBGYWxzZSwgJ2h0
dHAnOiBUcnVlfSkpLmZpbmRfdG91Y2hlZF90ZXN0cyhwYXRocykKKyAgICAgICAgdG91Y2hlZF90
ZXN0cyA9IE1vY2tMYXlvdXRUZXN0RmluZGVyKHBvcnQsIG9wdHBhcnNlLlZhbHVlcyh7J3NraXBw
ZWQnOiAnYWx3YXlzJywgJ3NraXBfZmFpbGluZ190ZXN0cyc6IEZhbHNlLCAnaHR0cCc6IFRydWV9
KSkuZmluZF90b3VjaGVkX3Rlc3RzKHBhdGhzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNv
cnRlZCh0b3VjaGVkX3Rlc3RzKSwgc29ydGVkKFsndGVzdDAuaHRtbCcsICd0ZXN0Mi5odG1sJ10p
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfaW5wdXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2Rl
bHMvdGVzdF9pbnB1dC5weQppbmRleCBlNGE2OWUxMzUxYzEyYjdiMjUwY2M2M2UzMGE1YWRmZjk3
ZDhmZTI4Li44YzY1NDE3NmZjZTBhMDIwMDc5MDJmYjkwNGViZjA2YmQwY2Y4NjczIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVz
dF9pbnB1dC5weQpAQCAtMzEsMTYgKzMxLDE1IEBACiBjbGFzcyBUZXN0SW5wdXQob2JqZWN0KToK
ICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYSB0ZXN0IGZvciBlYXN5IHBhc3Npbmcg
b2YgZGF0YS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHRpbWVvdXQ9
Tm9uZSwgbmVlZHNfc2VydmVycz1Ob25lLCByZWZlcmVuY2VfZmlsZXM9Tm9uZSwgc2hvdWxkX3J1
bl9waXhlbF90ZXN0cz1Ob25lLCBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyPU5v
bmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHRpbWVvdXQ9Tm9uZSwgbmVl
ZHNfc2VydmVycz1Ob25lLCBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyPU5vbmUp
OgogICAgICAgICAjIFRlc3RJbnB1dCBvYmplY3RzIGFyZSBub3JtYWxseSBjb25zdHJ1Y3RlZCBi
eSB0aGUgbWFuYWdlciBhbmQgcGFzc2VkCiAgICAgICAgICMgdG8gdGhlIHdvcmtlcnMsIGJ1dCB0
aGVzZSBzb21lIGZpZWxkcyBhcmUgc2V0IGxhemlseSBpbiB0aGUgd29ya2VycyB3aGVyZSBwb3Nz
aWJsZQogICAgICAgICAjIGJlY2F1c2UgdGhleSByZXF1aXJlIHVzIHRvIGxvb2sgYXQgdGhlIGZp
bGVzeXN0ZW0gYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkbyB0aGF0IGluIHBhcmFsbGVsLgog
ICAgICAgICBzZWxmLnRlc3RfbmFtZSA9IHRlc3RfbmFtZQogICAgICAgICBzZWxmLnRpbWVvdXQg
PSB0aW1lb3V0ICAjIGluIG1zZWNzOyBzaG91bGQgcmVuYW1lIHRoaXMgZm9yIGNvbnNpc3RlbmN5
CiAgICAgICAgIHNlbGYubmVlZHNfc2VydmVycyA9IG5lZWRzX3NlcnZlcnMKLSAgICAgICAgc2Vs
Zi5yZWZlcmVuY2VfZmlsZXMgPSByZWZlcmVuY2VfZmlsZXMKLSAgICAgICAgc2VsZi5zaG91bGRf
cnVuX3BpeGVsX3Rlc3RzID0gc2hvdWxkX3J1bl9waXhlbF90ZXN0cwogICAgICAgICBzZWxmLnNo
b3VsZF9kdW1wX2pzY29uc29sZWxvZ19pbl9zdGRlcnIgPSBzaG91bGRfZHVtcF9qc2NvbnNvbGVs
b2dfaW5fc3RkZXJyCisgICAgICAgIHNlbGYucmVmZXJlbmNlX2ZpbGVzID0gTm9uZQogCiAgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlRlc3RJbnB1dCgnJXMnLCB0aW1l
b3V0PSVzLCBuZWVkc19zZXJ2ZXJzPSVzLCByZWZlcmVuY2VfZmlsZXM9JXMsIHNob3VsZF9ydW5f
cGl4ZWxfdGVzdHM9JXMsIHNob3VsZF9kdW1wX2pzY29uc29sZWxvZ19pbl9zdGRlcnI9JXMpIiAl
IChzZWxmLnRlc3RfbmFtZSwgc2VsZi50aW1lb3V0LCBzZWxmLm5lZWRzX3NlcnZlcnMsIHNlbGYu
cmVmZXJlbmNlX2ZpbGVzLCBzZWxmLnNob3VsZF9ydW5fcGl4ZWxfdGVzdHMsIHNlbGYuc2hvdWxk
X2R1bXBfanNjb25zb2xlbG9nX2luX3N0ZGVycikKKyAgICAgICAgcmV0dXJuICJUZXN0SW5wdXQo
JyVzJywgdGltZW91dD0lcywgbmVlZHNfc2VydmVycz0lcywgcmVmZXJlbmNlX2ZpbGVzPSVzLCBz
aG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyPSVzKSIgJSAoc2VsZi50ZXN0X25hbWUs
IHNlbGYudGltZW91dCwgc2VsZi5uZWVkc19zZXJ2ZXJzLCBzZWxmLnJlZmVyZW5jZV9maWxlcywg
c2VsZi5zaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weQppbmRleCAzZmI3MjdiYzAyZmEyZjAzNWM4ZTA5Yzg3NTRlYjVkNGU4MTNm
NmNkLi44MWQxZGRhZmJjM2VkOWMyMWEyZDE0NGQ5MzlhNzE3ZTUwZjEyOWE2IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNDkzLDYgKzQ5Myw4IEBAIGNsYXNzIFBvcnQob2Jq
ZWN0KToKICAgICAgICAgdGV4dCA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VsZi5fZmlsZXN5c3Rl
bS5yZWFkX2JpbmFyeV9maWxlKGJhc2VsaW5lX3BhdGgpLCB0YXJnZXRfdHlwZT1zdHIpCiAgICAg
ICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKQogCisgICAgX3N1cHBvcnRlZF9y
ZWZlcmVuY2VfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5o
dG0nLCAnLnN2ZycsICcueGh0J10pCisKICAgICBkZWYgcmVmZXJlbmNlX2ZpbGVzKHNlbGYsIHRl
c3RfbmFtZSwgZGV2aWNlX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2Yg
ZXhwZWN0YXRpb24gKD09IG9yICE9KSBhbmQgZmlsZW5hbWUgcGFpcnMiIiIKIApAQCAtNTI1LDgx
ICs1MjcsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIFtzZWxmLmhv
c3QuZmlsZXN5c3RlbS5yZWxwYXRoKHRlc3QsIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKSBmb3Ig
dGVzdCBpbiBzZWxmLl9maWxlc3lzdGVtLmdsb2IocmUuc3ViKCctZXhwZWN0ZWQuKicsICcuKics
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgcGF0aCkpKSBp
ZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZSh0ZXN0KV0KIAotICAgIGRlZiB0ZXN0cyhzZWxmLCBw
YXRocywgZGV2aWNlX3R5cGU9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0
ZXN0cyBmb3VuZC4gQm90aCBnZW5lcmljIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0cyBtYXRj
aGluZyBwYXRocyBzaG91bGQgYmUgcmV0dXJuZWQuIiIiCi0gICAgICAgIGV4cGFuZGVkX3BhdGhz
ID0gc2VsZi5fZXhwYW5kZWRfcGF0aHMocGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQot
ICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykKLQotICAgIGRl
ZiBfZXhwYW5kZWRfcGF0aHMoc2VsZiwgcGF0aHMsIGRldmljZV90eXBlPU5vbmUpOgotICAgICAg
ICBleHBhbmRlZF9wYXRocyA9IFtdCi0gICAgICAgIGZzID0gc2VsZi5fZmlsZXN5c3RlbQotICAg
ICAgICBhbGxfcGxhdGZvcm1fZGlycyA9IFtwYXRoIGZvciBwYXRoIGluIGZzLmdsb2IoZnMuam9p
bihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywgJyonKSkgaWYgZnMuaXNkaXIo
cGF0aCldCi0gICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgotICAgICAgICAgICAgZXhwYW5kZWRf
cGF0aHMuYXBwZW5kKHBhdGgpCi0gICAgICAgICAgICBpZiBzZWxmLnRlc3RfaXNkaXIocGF0aCkg
YW5kIG5vdCBwYXRoLnN0YXJ0c3dpdGgoJ3BsYXRmb3JtJykgYW5kIG5vdCBmcy5pc2FicyhwYXRo
KToKLSAgICAgICAgICAgICAgICBmb3IgcGxhdGZvcm1fZGlyIGluIGFsbF9wbGF0Zm9ybV9kaXJz
OgotICAgICAgICAgICAgICAgICAgICBpZiBmcy5pc2Rpcihmcy5qb2luKHBsYXRmb3JtX2Rpciwg
cGF0aCkpIGFuZCBwbGF0Zm9ybV9kaXIgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aChkZXZp
Y2VfdHlwZT1kZXZpY2VfdHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZF9w
YXRocy5hcHBlbmQoc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZzLmpvaW4ocGxhdGZvcm1f
ZGlyLCBwYXRoKSkpCi0KLSAgICAgICAgcmV0dXJuIGV4cGFuZGVkX3BhdGhzCi0KLSAgICBkZWYg
X3JlYWxfdGVzdHMoc2VsZiwgcGF0aHMpOgotICAgICAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0
IGNhc2VzLCBza2lwIHRoZXNlIGRpcmVjdG9yaWVzCi0gICAgICAgIHNraXBwZWRfZGlyZWN0b3Jp
ZXMgPSBzZXQoWycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3N1cHBvcnQnLCAnc2NyaXB0
LXRlc3RzJywgJ3JlZmVyZW5jZScsICdyZWZ0ZXN0J10pCi0gICAgICAgIGZpbGVzID0gZmluZF9m
aWxlcy5maW5kKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRo
cywgc2tpcHBlZF9kaXJlY3RvcmllcywgcGFydGlhbChQb3J0Ll9pc190ZXN0X2ZpbGUsIHNlbGYp
LCBzZWxmLnRlc3Rfa2V5KQotICAgICAgICByZXR1cm4gW3NlbGYucmVsYXRpdmVfdGVzdF9maWxl
bmFtZShmKSBmb3IgZiBpbiBmaWxlc10KLQotICAgICMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2Fz
ZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgotICAgIF9zdXBw
b3J0ZWRfdGVzdF9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAn
LnhodG1sJywgJy5wbCcsICcuaHRtJywgJy5waHAnLCAnLnN2ZycsICcubWh0JywgJy54aHQnXSkK
LSAgICBfc3VwcG9ydGVkX3JlZmVyZW5jZV9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnht
bCcsICcueGh0bWwnLCAnLmh0bScsICcuc3ZnJywgJy54aHQnXSkKLQotICAgIGRlZiBpc193M2Nf
cmVzb3VyY2VfZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6Ci0gICAg
ICAgIHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpCi0gICAgICAgIHcz
Y19wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAiaW1wb3J0
ZWQiLCAidzNjIikKLSAgICAgICAgaWYgbm90IHczY19wYXRoIGluIHBhdGg6Ci0gICAgICAgICAg
ICByZXR1cm4gRmFsc2UKLQotICAgICAgICBpZiBub3Qgc2VsZi5fdzNjX3Jlc291cmNlX2ZpbGVz
OgotICAgICAgICAgICAgZmlsZXBhdGggPSBmaWxlc3lzdGVtLmpvaW4odzNjX3BhdGgsICJyZXNv
dXJjZXMiLCAicmVzb3VyY2UtZmlsZXMuanNvbiIpCi0gICAgICAgICAgICBqc29uX2RhdGEgPSBm
aWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGZpbGVwYXRoKQotICAgICAgICAgICAgc2VsZi5fdzNj
X3Jlc291cmNlX2ZpbGVzID0ganNvbi5sb2Fkcyhqc29uX2RhdGEpCi0KLSAgICAgICAgc3VicGF0
aCA9IHBhdGhbbGVuKHczY19wYXRoKSArIDE6XS5yZXBsYWNlKCdcXCcsICcvJykKLSAgICAgICAg
aWYgc3VicGF0aCBpbiBzZWxmLl93M2NfcmVzb3VyY2VfZmlsZXNbImZpbGVzIl06Ci0gICAgICAg
ICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgZGlycGF0aCBpbiBzZWxmLl93M2NfcmVzb3Vy
Y2VfZmlsZXNbImRpcmVjdG9yaWVzIl06Ci0gICAgICAgICAgICBpZiBkaXJwYXRoIGluIHN1YnBh
dGg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgIyBJZiBhbnkgY2hhbmdlcyBhcmUgbWFkZSBoZXJlIGJl
IHN1cmUgdG8gdXBkYXRlIHRoZSBpc1VzZWRJblJlZnRlc3QgbWV0aG9kIGluIG9sZC1ydW4td2Vi
a2l0LXRlc3RzIGFzIHdlbGwuCi0gICAgZGVmIGlzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5
c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRo
KCdyZWYtJykgb3IgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbm90cmVmLScpOgotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgZmlsZW5hbWVfd2lob3V0X2V4dCwgZXh0ID0gZmlsZXN5c3Rl
bS5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgaWYgZXh0IG5vdCBpbiBQb3J0Ll9zdXBwb3J0
ZWRfcmVmZXJlbmNlX2V4dGVuc2lvbnM6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAg
ICAgZm9yIHN1ZmZpeCBpbiBbJy1leHBlY3RlZCcsICctZXhwZWN0ZWQtbWlzbWF0Y2gnLCAnLXJl
ZicsICctbm90cmVmJ106Ci0gICAgICAgICAgICBpZiBmaWxlbmFtZV93aWhvdXRfZXh0LmVuZHN3
aXRoKHN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9oYXNfc3VwcG9ydGVkX2V4dGVu
c2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0cnVlIGlmIGZp
bGVuYW1lIGlzIG9uZSBvZiB0aGUgZmlsZSBleHRlbnNpb25zIHdlIHdhbnQgdG8gcnVuIGEgdGVz
dCBvbi4iIiIKLSAgICAgICAgZXh0ZW5zaW9uID0gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFt
ZSlbMV0KLSAgICAgICAgcmV0dXJuIGV4dGVuc2lvbiBpbiBQb3J0Ll9zdXBwb3J0ZWRfdGVzdF9l
eHRlbnNpb25zCi0KLSAgICBkZWYgX2lzX3Rlc3RfZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBkaXJu
YW1lLCBmaWxlbmFtZSk6Ci0gICAgICAgIGlmIG5vdCBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4dGVu
c2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg
ICAgICAgaWYgUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUs
IGZpbGVuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBzZWxmLmlz
X3czY19yZXNvdXJjZV9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKLSAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIHRlc3Rf
a2V5KHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIlR1cm5zIGEgdGVzdCBuYW1lIGludG8g
YSBsaXN0IHdpdGggdHdvIHN1Ymxpc3RzLCB0aGUgbmF0dXJhbCBrZXkgb2YgdGhlCiAgICAgICAg
IGRpcm5hbWUsIGFuZCB0aGUgbmF0dXJhbCBrZXkgb2YgdGhlIGJhc2VuYW1lLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weQppbmRleCAxMmU4MTBmNDc4NmNl
NWU4ODlkZjMwYmYxMmRhNGViMzgxMDkyNjg2Li4xZDQwMjNiMGI5MTU2ZTQ3N2YzNmQwOWJlMjRh
ZDMxYTZiYjQ4YjcyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0
dGVzdC5weQpAQCAtMjMyLDYzICsyMzIsNiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSh7Jy9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Zvby9UZXN0RXhwZWN0YXRpb25zJzogJyd9
KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC51c2VzX3Rlc3RfZXhwZWN0YXRpb25zX2Zp
bGUoKSkKIAotICAgIGRlZiB0ZXN0X2ZpbmRfbm9fcGF0aHNfc3BlY2lmaWVkKHNlbGYpOgotICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0ZXN0
cyA9IHBvcnQudGVzdHMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHRlc3Rz
KSwgMCkKLQotICAgIGRlZiB0ZXN0X2ZpbmRfb25lX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCh3aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHRlc3RzID0gcG9ydC50
ZXN0cyhbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwnXSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChsZW4odGVzdHMpLCAxKQotCi0gICAgZGVmIHRlc3RfZmluZF9nbG9iKHNlbGYpOgot
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0
ZXN0cyA9IHBvcnQudGVzdHMoWydmYWlsdXJlcy9leHBlY3RlZC9pbSonXSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAyKQotCi0gICAgZGVmIHRlc3RfZmluZF93aXRoX3Nr
aXBwZWRfZGlyZWN0b3JpZXMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCh3
aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHRlc3RzID0gcG9ydC50ZXN0cyhbJ3VzZXJzY3JpcHRz
J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3VzZXJzY3JpcHRzL3Jlc291cmNlcy9pZnJh
bWUuaHRtbCcsIHRlc3RzKQotCi0gICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBwZWRfZGlyZWN0
b3JpZXNfMihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVzdHM9
VHJ1ZSkKLSAgICAgICAgdGVzdHMgPSBwb3J0LnRlc3RzKFsndXNlcnNjcmlwdHMvcmVzb3VyY2Vz
J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIFtdKQotCi0gICAgZGVmIHRlc3Rf
aXNfdGVzdF9maWxlKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lz
dGVtLCAnJywgJ2Zvby5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll9pc190
ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLnNodG1sJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0s
ICcnLCAnZm9vLnN2ZycpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5faXNfdGVzdF9m
aWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ3Rlc3QtcmVmLXRlc3QuaHRtbCcpKQotICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmlsZXN5
c3RlbSwgJycsICdmb28ucG5nJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNf
dGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5odG1sJykp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5m
aWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5zdmcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4
cGVjdGVkLnhodCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmls
ZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCcp
KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3Qu
ZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guc3ZnJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAn
JywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54aHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdmb28tcmVm
Lmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9y
dC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLW5vdHJlZi5odG1sJykpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywg
J2Zvby1ub3RyZWYueGh0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVz
dF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0
ZW0sICcnLCAncmVmLWZvby5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5f
aXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ25vdHJlZi1mb28ueGhyJykp
Ci0KLSAgICBkZWYgdGVzdF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKHNlbGYpOgotICAgICAgICBm
aWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoUG9y
dC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLmh0
bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmls
ZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54bWwnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAn
JywgJ2Zvby1yZWYueGh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVm
ZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1ub3RyZWYuc3ZnJykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0
ZW0sICcnLCAnZm9vLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQb3J0LmlzX3Jl
ZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQudHh0JykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVz
eXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnNodG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVj
dGVkLnBocCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBvcnQuaXNfcmVmZXJlbmNlX2h0
bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5taHQnKSkKLQogICAgIGRlZiB0
ZXN0X3JlZmVyZW5jZV9maWxlcyhzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KHdpdGhfdGVzdHM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnJlZmVyZW5j
ZV9maWxlcygncGFzc2VzL3N2Z3JlZnRlc3Quc3ZnJyksIFsoJz09JywgcG9ydC5sYXlvdXRfdGVz
dHNfZGlyKCkgKyAnL3Bhc3Nlcy9zdmdyZWZ0ZXN0LWV4cGVjdGVkLnN2ZycpXSkKQEAgLTMzOSwx
NCArMjgyLDYgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHBvcnQudGVzdF9pc2RpcigncGFzc2VzL2RvZXNfbm90X2V4aXN0Lmh0
bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnRlc3RfaXNkaXIoJ3Bhc3Nlcy9k
b2VzX25vdF9leGlzdC8nKSkKIAotICAgIGRlZiB0ZXN0X3Rlc3RzKHNlbGYpOgotICAgICAgICBw
b3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0ZXN0cyA9IHBv
cnQudGVzdHMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCB0
ZXN0cykKLQotICAgICAgICB0ZXN0cyA9IHBvcnQudGVzdHMoWydwYXNzZXMnXSkKLSAgICAgICAg
c2VsZi5hc3NlcnRJbigncGFzc2VzL3RleHQuaHRtbCcsIHRlc3RzKQotCiAgICAgZGVmIHRlc3Rf
YnVpbGRfcGF0aChzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KAogICAgICAg
ICAgICAgZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUyKG91dHB1dD0nL2RlZmF1bHQtYnVpbGQtcGF0
aC9EZWJ1ZycpLApAQCAtMzYwLDMwICsyOTUsNiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9idWls
ZF9wYXRoKCksICcvbXktYnVpbGQtZGlyZWN0b3J5L0RlYnVnLWVtYmVkZGVkLXBvcnQnKQogCi0g
ICAgZGVmIHRlc3RfaXNfdzNjX3Jlc291cmNlX2ZpbGUoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9y
ZXNvdXJjZS1maWxlcy5qc29uIiwgIiIiCi17ImRpcmVjdG9yaWVzIjogWwotIndlYi1wbGF0Zm9y
bS10ZXN0cy9jb21tb24iLAotIndlYi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvRG9jdW1lbnQt
Y3JlYXRlRWxlbWVudC1uYW1lc3BhY2UtdGVzdHMiLAotIndlYi1wbGF0Zm9ybS10ZXN0cy9mb250
cyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3NpbmctdGhlLXdlYi9u
YXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvc291cmNlL3N1cHBvcnQiLAotIndlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jyb3dzaW5nLXRoZS13ZWIvdW5sb2FkaW5nLWRvY3VtZW50
cy9zdXBwb3J0IiwKLSJ3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9oaXN0b3J5L3Ro
ZS1oaXN0b3J5LWludGVyZmFjZS9ub24tYXV0b21hdGVkIiwKLSJ3ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9icm93c2Vycy9oaXN0b3J5L3RoZS1sb2NhdGlvbi1pbnRlcmZhY2Uvbm9uLWF1dG9tYXRl
ZCIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL2ltYWdlcyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL3Nl
cnZpY2Utd29ya2VycyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL3Rvb2xzIgotXSwgImZpbGVzIjog
WwotIndlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5j
LWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbCIsCi0id2ViLXBsYXRmb3JtLXRlc3Rz
L1hNTEh0dHBSZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm90LWhhbmctc2NyaXB0bG9hZGVy
LXN1YmZyYW1lLmh0bWwiCi1dfSIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Lmlz
X3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0
c19kaXIoKSArICIvaW1wb3J0ZWQvdzMiLCAicmVzb3VyY2VfZmlsZS5odG1sIikpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZShwb3J0Lmhvc3QuZmls
ZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2ltcG9ydGVkL3czYyIsICJyZXNv
dXJjZV9maWxlLmh0bWwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmlzX3czY19y
ZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19kaXIo
KSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIsICJ4
bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbC5odG1s
IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBv
cnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIsICJ4bWxodHRwcmVxdWVzdC1z
eW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbCIpKQotICAgICAgICBzZWxmLmFz
c2VydFRydWUocG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwg
cG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0ZUVsZW1lbnQtbmFtZXNwYWNlLXRlc3RzIiwgInRl
c3QuaHRtbCIpKQotCiAgICAgZGVmIHRlc3RfamhidWlsZF93cmFwcGVyKHNlbGYpOgogICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdmb28nKQogICAgICAgICBwb3J0LnBv
cnRfbmFtZSA9ICdmb28nCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CmluZGV4
IDUwOThlZDkzZmRmZmMzZDM5YWZkYjZhNmM2ZWQ4MDNlZGIzZjk5OGEuLjQwM2ViNzBiN2E0YjMy
OGNiNzU0YThmOWQzYzg5N2YxZmIwYzI5NzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9m
YWN0b3J5LnB5CkBAIC0xMTYsNyArMTE2LDYgQEAgY2xhc3MgUG9ydEZhY3Rvcnkob2JqZWN0KToK
ICAgICAgICAgJ2pzY19vbmx5LkpzY09ubHlQb3J0JywKICAgICAgICAgJ21hYy5NYWNDYXRhbHlz
dFBvcnQnLAogICAgICAgICAnbWFjLk1hY1BvcnQnLAotICAgICAgICAnbW9ja19kcnQuTW9ja0RS
VFBvcnQnLAogICAgICAgICAndGVzdC5UZXN0UG9ydCcsCiAgICAgICAgICd3aW4uRlRXUG9ydCcs
CiAgICAgICAgICd3aW4uV2luQ2Fpcm9Qb3J0JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9tb2NrX2RydC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9t
b2NrX2RydC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxZjM0NjA3OWQxZGI4
ZjdkNmEwNTQyMjkyZDkzOWFjZDg4YTdhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnQucHkK
KysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgR29v
Z2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiIKLVRoaXMgaXMg
YW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlIHRoYXQgb3ZlcnJpZGVzIG90
aGVyCi1wb3J0cyBhbmQgY2hhbmdlcyB0aGUgRHJpdmVyIGJpbmFyeSB0byAiTW9ja0RSVCIuCi0K
LVRoZSBNb2NrRFJUIG9iamVjdHMgZW11bGF0ZSB3aGF0IGEgcmVhbCBEUlQgd291bGQgZG8uIElu
IHBhcnRpY3VsYXIsIHRoZXkKLXJldHVybiB0aGUgb3V0cHV0IGEgcmVhbCBEUlQgd291bGQgcmV0
dXJuIGZvciBhIGdpdmVuIHRlc3QsIGFzc3VtaW5nIHRoYXQKLXRlc3QgYWN0dWFsbHkgcGFzc2Vz
IChleGNlcHQgZm9yIHJlZnRlc3RzLCB3aGljaCBjdXJyZW50bHkgY2F1c2UgdGhlCi1Nb2NrRFJU
IHRvIGNyYXNoKS4KLSIiIgotCi1pbXBvcnQgYmFzZTY0Ci1pbXBvcnQgbG9nZ2luZwotaW1wb3J0
IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotIyBTaW5jZSB3ZSBleGVjdXRlIHRo
aXMgc2NyaXB0IGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlIHVuaXQgdGVzdHMsIHdlIG5lZWQgdG8g
ZW5zdXJlCi0jIHRoYXQgVG9vbHMvU2NyaXB0cyBpcyBpbiBzeXMucGF0aCBmb3IgdGhlIG5leHQg
aW1wb3J0cyB0byB3b3JrIGNvcnJlY3RseS4KLXNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUo
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5h
YnNwYXRoKF9fZmlsZV9fKSkpKSkKLWlmIHNjcmlwdF9kaXIgbm90IGluIHN5cy5wYXRoOgotICAg
IHN5cy5wYXRoLmFwcGVuZChzY3JpcHRfZGlyKQotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAotZnJvbSB3ZWJraXRweS5wb3J0LmRyaXZl
ciBpbXBvcnQgRHJpdmVySW5wdXQsIERyaXZlck91dHB1dCwgRHJpdmVyUHJveHkKLWZyb20gd2Vi
a2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQotCi1mcm9tIHdlYmtpdGNvcmVw
eSBpbXBvcnQgc3RyaW5nX3V0aWxzCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKLQotCi1jbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgotICAgIHBvcnRfbmFtZSA9ICdtb2Nr
JwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShj
bHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBwb3J0X25hbWUK
LQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAg
ICAgICAgc2VsZi5fX2RlbGVnYXRlID0gUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZS5y
ZXBsYWNlKCdtb2NrLScsICcnKSwgKiprd2FyZ3MpCi0KLSAgICBkZWYgX19nZXRhdHRyX18oc2Vs
ZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkK
LQotICAgIGRlZiBjaGVja19idWlsZChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAg
IGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIsIG5vX3RpbWVvdXQ9RmFsc2UpOgot
ICAgICAgICAjIFRoZSBtYWdpYyBvZiB0aGUgTW9ja0RSVFBvcnQgaXMgdGhhdCB3ZSBjcmVhdGUg
YSBkcml2ZXIgdGhhdCBoYXMgYQotICAgICAgICAjIGNtZF9saW5lKCkgbWV0aG9kIG1vbmtleS1w
YXRjaGVkIHRvIGludm9rZSB0aGlzIHNjcmlwdCBpbnN0ZWFkIG9mIERSVC4KLSAgICAgICAgcmV0
dXJuIERyaXZlclByb3h5KHNlbGYsIHdvcmtlcl9udW1iZXIsIHNlbGYuX21vY2tlZF9kcml2ZXJf
bWFrZXIsIHBpeGVsX3Rlc3RzPXNlbGYuZ2V0X29wdGlvbigncGl4ZWxfdGVzdHMnKSwgbm9fdGlt
ZW91dD1ub190aW1lb3V0KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfbW9ja2VkX2Ry
aXZlcl9tYWtlcihwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1G
YWxzZSk6Ci0gICAgICAgIHBhdGhfdG9fdGhpc19maWxlID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0u
YWJzcGF0aChfX2ZpbGVfXy5yZXBsYWNlKCcucHljJywgJy5weScpKQotICAgICAgICBkcml2ZXIg
PSBwb3J0Ll9fZGVsZWdhdGUuX2RyaXZlcl9jbGFzcygpKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBp
eGVsX3Rlc3RzLCBub190aW1lb3V0KQotICAgICAgICBkcml2ZXIuY21kX2xpbmUgPSBwb3J0Ll9v
dmVycmlkaW5nX2NtZF9saW5lKGRyaXZlci5jbWRfbGluZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9fZGVsZWdhdGUuX3BhdGhfdG9f
ZHJpdmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGF0aF90b190aGlzX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5fX2RlbGVnYXRlLm5hbWUoKSkK
LSAgICAgICAgcmV0dXJuIGRyaXZlcgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfb3Zl
cnJpZGluZ19jbWRfbGluZShvcmlnaW5hbF9jbWRfbGluZSwgZHJpdmVyX3BhdGgsIHB5dGhvbl9l
eGUsIHRoaXNfZmlsZSwgcG9ydF9uYW1lKToKLSAgICAgICAgZGVmIG5ld19jbWRfbGluZShwaXhl
bF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgICAgICBjbWRfbGluZSA9IG9yaWdpbmFs
X2NtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICAgICAgaW5kZXgg
PSBjbWRfbGluZS5pbmRleChkcml2ZXJfcGF0aCkKLSAgICAgICAgICAgIGNtZF9saW5lW2luZGV4
OmluZGV4ICsgMV0gPSBbcHl0aG9uX2V4ZSwgdGhpc19maWxlLCAnLS1wbGF0Zm9ybScsIHBvcnRf
bmFtZV0KLSAgICAgICAgICAgIHJldHVybiBjbWRfbGluZQotCi0gICAgICAgIHJldHVybiBuZXdf
Y21kX2xpbmUKLQotICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZiwgcGl4ZWxfdGVzdHM9RmFsc2Us
IHByZWZlcl9pbnRlZ3JhdGVkX2dwdT1GYWxzZSk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBz
dGFydF9odHRwX3NlcnZlcihzZWxmLCBudW1iZXJfb2Zfc2VydmVycyk6Ci0gICAgICAgIHBhc3MK
LQotICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0K
LSAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdG9w
X2h0dHBfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcF93ZWJzb2Nr
ZXRfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2hvd19yZXN1bHRzX2h0
bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKLSAgICAgICAgcGFzcwotCi0KLWRlZiBt
YWluKGFyZ3YsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgIiIiUnVuIHRoZSB0
ZXN0cy4iIiIKLQotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9vcHRpb25zKGFyZ3YpCi0gICAg
ZHJ0ID0gTW9ja0RSVChvcHRpb25zLCBhcmdzLCBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIp
Ci0gICAgcmV0dXJuIGRydC5ydW4oKQotCi0KLWRlZiBwYXJzZV9vcHRpb25zKGFyZ3YpOgotICAg
ICMgRklYTUU6IFdlIGhhdmUgdG8gZG8gY3VzdG9tIGFyZyBwYXJzaW5nIGluc3RlYWQgb2YgdXNp
bmcgdGhlIG9wdHBhcnNlCi0gICAgIyBtb2R1bGUuICBGaXJzdCwgQ2hyb21pdW0gYW5kIG5vbi1D
aHJvbWl1bSBEUlRzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnQKLSAgICAjIHN5bnRheC4gIENo
cm9taXVtIHVzZXMgLS1waXhlbC10ZXN0cz08cGF0aD4sIGFuZCBub24tQ2hyb21pdW0gdXNlcwot
ICAgICMgLS1waXhlbC10ZXN0cyBhcyBhIGJvb2xlYW4gZmxhZy4gU2Vjb25kLCB3ZSBkb24ndCB3
YW50IHRvIGhhdmUgdG8gbGlzdAotICAgICMgZXZlcnkgY29tbWFuZCBsaW5lIGZsYWcgRFJUIGFj
Y2VwdHMsIGJ1dCBvcHRwYXJzZSBjb21wbGFpbnMgYWJvdXQKLSAgICAjIHVucmVjb2duaXplZCBm
bGFncy4gQXQgc29tZSBwb2ludCBpdCBtaWdodCBiZSBnb29kIHRvIHNoYXJlIGEgY29tbW9uCi0g
ICAgIyBEUlQgb3B0aW9ucyBjbGFzcyBiZXR3ZWVuIHRoaXMgZmlsZSBhbmQgd2Via2l0LnB5IGFu
ZCBjaHJvbWl1bS5weQotICAgICMganVzdCB0byBnZXQgYmV0dGVyIHR5cGUgY2hlY2tpbmcuCi0g
ICAgcGxhdGZvcm1faW5kZXggPSBhcmd2LmluZGV4KCctLXBsYXRmb3JtJykKLSAgICBwbGF0Zm9y
bSA9IGFyZ3ZbcGxhdGZvcm1faW5kZXggKyAxXQotCi0gICAgcGl4ZWxfdGVzdHMgPSAnLS1waXhl
bC10ZXN0cycgaW4gYXJndgotICAgIHJldHVybiAob3B0cGFyc2UuVmFsdWVzKHsncGxhdGZvcm0n
OiBwbGF0Zm9ybSwgJ3BpeGVsX3Rlc3RzJzogcGl4ZWxfdGVzdHN9KSwgYXJndikKLQotCi1jbGFz
cyBNb2NrRFJUKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIGFyZ3Ms
IGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBv
cHRpb25zCi0gICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCi0gICAgICAgIHNlbGYuX2hvc3QgPSBo
b3N0Ci0gICAgICAgIHNlbGYuX3N0ZG91dCA9IHN0ZG91dAotICAgICAgICBzZWxmLl9zdGRpbiA9
IHN0ZGluCi0gICAgICAgIHNlbGYuX3N0ZGVyciA9IHN0ZGVycgotCi0gICAgICAgIHBvcnRfbmFt
ZSA9IE5vbmUKLSAgICAgICAgaWYgb3B0aW9ucy5wbGF0Zm9ybToKLSAgICAgICAgICAgIHBvcnRf
bmFtZSA9IG9wdGlvbnMucGxhdGZvcm0KLSAgICAgICAgc2VsZi5fcG9ydCA9IFBvcnRGYWN0b3J5
KGhvc3QpLmdldChwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgICAg
IHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcigwKQotCi0gICAgZGVmIHJ1
bihzZWxmKToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9z
dGRpbi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMAotICAgICAgICAgICAgZHJpdmVyX2lucHV0ID0gc2VsZi5pbnB1dF9mcm9tX2xp
bmUobGluZSkKLSAgICAgICAgICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gc2VsZi5fcG9ydC5zcGxp
dF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgICAgICBpc19yZWZ0ZXN0ID0g
KHNlbGYuX3BvcnQucmVmZXJlbmNlX2ZpbGVzKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpIG9yCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmls
ZShzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLCBkaXJuYW1lLCBiYXNlbmFtZSkpCi0gICAgICAgICAg
ICBvdXRwdXQgPSBzZWxmLm91dHB1dF9mb3JfdGVzdChkcml2ZXJfaW5wdXQsIGlzX3JlZnRlc3Qp
Ci0gICAgICAgICAgICBzZWxmLndyaXRlX3Rlc3Rfb3V0cHV0KGRyaXZlcl9pbnB1dCwgb3V0cHV0
LCBpc19yZWZ0ZXN0KQotCi0gICAgZGVmIGlucHV0X2Zyb21fbGluZShzZWxmLCBsaW5lKToKLSAg
ICAgICAgdmFscyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiJyIpCi0gICAgICAgIGlmIGxlbih2YWxz
KSA9PSAxOgotICAgICAgICAgICAgdXJpID0gdmFsc1swXQotICAgICAgICAgICAgY2hlY2tzdW0g
PSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1cmkgPSB2YWxzWzBdCi0gICAgICAg
ICAgICBjaGVja3N1bSA9IHZhbHNbMV0KLSAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2h0dHA6
Ly8nKSBvciB1cmkuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToKLSAgICAgICAgICAgIHRlc3RfbmFt
ZSA9IHNlbGYuX2RyaXZlci51cmlfdG9fdGVzdCh1cmkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodXJpKQot
Ci0gICAgICAgIHJldHVybiBEcml2ZXJJbnB1dCh0ZXN0X25hbWUsIDAsIGNoZWNrc3VtLCBzZWxm
Ll9vcHRpb25zLnBpeGVsX3Rlc3RzKQotCi0gICAgZGVmIG91dHB1dF9mb3JfdGVzdChzZWxmLCB0
ZXN0X2lucHV0LCBpc19yZWZ0ZXN0KToKLSAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKLSAgICAg
ICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9pbnB1dC50ZXN0X25hbWUp
Ci0gICAgICAgIGFjdHVhbF9hdWRpbyA9IHBvcnQuZXhwZWN0ZWRfYXVkaW8odGVzdF9pbnB1dC50
ZXN0X25hbWUpCi0gICAgICAgIGFjdHVhbF9pbWFnZSA9IE5vbmUKLSAgICAgICAgYWN0dWFsX2No
ZWNrc3VtID0gTm9uZQotICAgICAgICBpZiBpc19yZWZ0ZXN0OgotICAgICAgICAgICAgIyBNYWtl
IHVwIHNvbWUgb3V0cHV0IGZvciByZWZ0ZXN0cy4KLSAgICAgICAgICAgIGFjdHVhbF90ZXh0ID0g
J3JlZmVyZW5jZSB0ZXh0XG4nCi0gICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSAnbW9jay1j
aGVja3N1bScKLSAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9ICdibGFuaycKLSAgICAgICAgICAg
IGlmIHRlc3RfaW5wdXQudGVzdF9uYW1lLmVuZHN3aXRoKCctbWlzbWF0Y2guaHRtbCcpOgotICAg
ICAgICAgICAgICAgIGFjdHVhbF90ZXh0ID0gJ25vdCByZWZlcmVuY2UgdGV4dFxuJwotICAgICAg
ICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9ICdub3QtbW9jay1jaGVja3N1bScKLSAgICAgICAg
ICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnbm90IGJsYW5rJwotICAgICAgICBlbGlmIHNlbGYuX29w
dGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAg
IGFjdHVhbF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9pbnB1dC50ZXN0
X25hbWUpCi0gICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRl
c3RfaW5wdXQudGVzdF9uYW1lKQotCi0gICAgICAgIHJldHVybiBEcml2ZXJPdXRwdXQoYWN0dWFs
X3RleHQsIGFjdHVhbF9pbWFnZSwgYWN0dWFsX2NoZWNrc3VtLCBhY3R1YWxfYXVkaW8pCi0KLSAg
ICBkZWYgd3JpdGVfdGVzdF9vdXRwdXQoc2VsZiwgdGVzdF9pbnB1dCwgb3V0cHV0LCBpc19yZWZ0
ZXN0KToKLSAgICAgICAgaWYgb3V0cHV0LmF1ZGlvOgotICAgICAgICAgICAgc2VsZi5fc3Rkb3V0
LndyaXRlKCdDb250ZW50LVR5cGU6IGF1ZGlvL3dhdlxuJykKLSAgICAgICAgICAgIHNlbGYuX3N0
ZG91dC53cml0ZSgnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4nKQotICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGJhc2U2NC5iNjRlbmNvZGUob3V0cHV0LmF1ZGlvKSkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29udGVudC1U
eXBlOiB0ZXh0L3BsYWluXG4nKQotICAgICAgICAgICAgIyBGSVhNRTogTm90ZSB0aGF0IHdlIGRv
bid0IGVuc3VyZSB0aGVyZSBpcyBhIHRyYWlsaW5nIG5ld2xpbmUhCi0gICAgICAgICAgICAjIFRo
aXMgbWlycm9ycyBhY3R1YWwgKE1hYykgRFJUIGJlaGF2aW9yIGJ1dCBpcyBhIGJ1Zy4KLSAgICAg
ICAgICAgIGlmIG91dHB1dC50ZXh0OgotICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0
ZShvdXRwdXQudGV4dCkKLQotICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCi0K
LSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgb3V0cHV0LmltYWdlX2hh
c2g6Ci0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ1xuJykKLSAgICAgICAgICAgIHNl
bGYuX3N0ZG91dC53cml0ZSgnQWN0dWFsSGFzaDogJXNcbicgJSBvdXRwdXQuaW1hZ2VfaGFzaCkK
LSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnRXhwZWN0ZWRIYXNoOiAlc1xuJyAlIHRl
c3RfaW5wdXQuaW1hZ2VfaGFzaCkKLSAgICAgICAgICAgIGlmIG91dHB1dC5pbWFnZV9oYXNoICE9
IHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQud3Jp
dGUoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcG5nXG4nKQotICAgICAgICAgICAgICAgIHNlbGYuX3N0
ZG91dC53cml0ZSgnQ29udGVudC1MZW5ndGg6ICVzXG4nICUgbGVuKG91dHB1dC5pbWFnZSkpCi0g
ICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKHN0cmluZ191dGlscy5kZWNvZGUob3V0
cHV0LmltYWdlLCB0YXJnZXRfdHlwZT1zdHIpKQotICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUo
JyNFT0ZcbicpCi0gICAgICAgIHNlbGYuX3N0ZG91dC5mbHVzaCgpCi0gICAgICAgIHNlbGYuX3N0
ZGVyci53cml0ZSgnI0VPRlxuJykKLSAgICAgICAgc2VsZi5fc3RkZXJyLmZsdXNoKCkKLQotaWYg
X19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjIE5vdGUgdGhhdCB0aGUgTW9jayBpbiBNb2Nr
RFJUIHJlZmVycyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIGVtdWxhdGluZyBhCi0gICAgIyByZWFs
IERSVCwgYW5kIGFzIHN1Y2gsIGl0IG5lZWRzIGFjY2VzcyB0byBhIHJlYWwgU3lzdGVtSG9zdCwg
bm90IGEgTW9ja1N5c3RlbUhvc3QuCi0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIFN5
c3RlbUhvc3QoKSwgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3MzgxN2M4YzEwYTlhN2YzYjNhZDcwNzQ0MTg1ODJjMDRk
OGMwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVs
bApAQCAtMSwyMDggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0
OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9y
IE1vY2tEUlQuIiIiCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdGNvcmVweSBpbXBv
cnQgU3RyaW5nSU8KLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9j
ayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgbW9ja19k
cnQKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCB0ZXN0Ci1mcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9y
dEZhY3RvcnkKLWZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKLQotCi1tb2NrX29w
dGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJykKLQot
Ci1jbGFzcyBNb2NrRFJUUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgotCi0g
ICAgZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25zPW1vY2tfb3B0aW9ucyk6Ci0gICAgICAgIGhv
c3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAgIHRlc3QuYWRkX3VuaXRfdGVzdHNfdG9fbW9j
a19maWxlc3lzdGVtKGhvc3QuZmlsZXN5c3RlbSkKLSAgICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1v
Y2tEUlRQb3J0KGhvc3QsIHBvcnRfbmFtZT0nbW9jay1tYWMtbGlvbicsIG9wdGlvbnM9b3B0aW9u
cykKLQotICAgIGRlZiB0ZXN0X3BvcnRfbmFtZV9pbl9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KE1vY2tTeXN0ZW1Ib3N0KCks
IHBvcnRfbmFtZT0nbW9jay10ZXN0JykpCi0KLSAgICBkZWYgdGVzdF9jaGVja19zeXNfZGVwcyhz
ZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZShzZWxmKToKLSAg
ICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZV9jcmFzaGVkKHNlbGYpOgotICAg
ICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF91c2VzX2FwYWNoZShzZWxmKToKLSAgICAgICAgcGFz
cwotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3Rfc3RhcnRfaGVscGVyKHNlbGYpOgotICAgICAg
ICBwYXNzCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHNl
bGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZl
cl9fZmFpbHMoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0
X3dlYnNvY2tldF9zZXJ2ZXJfX25vcm1hbChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVm
IGludGVncmF0aW9uX3Rlc3Rfd2Vic29ja2V0X3NlcnZlcl9fZmFpbHMoc2VsZik6Ci0gICAgICAg
IHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2hlbHBlcihzZWxmKToKLSAgICAgICAg
cGFzcwotCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgcGFzcwot
Ci0gICAgZGVmIHRlc3RfY2hlY2tfYnVpbGQoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRl
ZiB0ZXN0X2FzYW5fdXBsb2FkX2NvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgICAgIHBhc3MKLQot
Ci1jbGFzcyBNb2NrRFJUVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGlucHV0X2xp
bmUoc2VsZiwgcG9ydCwgdGVzdF9uYW1lLCBjaGVja3N1bT1Ob25lKToKLSAgICAgICAgdXJsID0g
cG9ydC5jcmVhdGVfZHJpdmVyKDApLnRlc3RfdG9fdXJpKHRlc3RfbmFtZSkKLSAgICAgICAgaWYg
dXJsLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKToKLSAgICAgICAgICAgIHVybCA9IHVybFtsZW4oJ2Zp
bGU6Ly8nKTpdCi0KLSAgICAgICAgaWYgY2hlY2tzdW06Ci0gICAgICAgICAgICByZXR1cm4gdXJs
ICsgIiciICsgY2hlY2tzdW0gKyAnXG4nCi0gICAgICAgIHJldHVybiB1cmwgKyAnXG4nCi0KLSAg
ICBkZWYgZXh0cmFfYXJncyhzZWxmLCBwaXhlbF90ZXN0cyk6Ci0gICAgICAgIGlmIHBpeGVsX3Rl
c3RzOgotICAgICAgICAgICAgcmV0dXJuIFsnLS1waXhlbC10ZXN0cycsICctJ10KLSAgICAgICAg
cmV0dXJuIFsnLSddCi0KLSAgICBkZWYgbWFrZV9kcnQoc2VsZiwgb3B0aW9ucywgYXJncywgaG9z
dCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKLSAgICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1vY2tE
UlQob3B0aW9ucywgYXJncywgaG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQotCi0gICAgZGVm
IG1ha2VfaW5wdXRfb3V0cHV0KHNlbGYsIHBvcnQsIHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrc3VtLCBkcnRfb3V0cHV0LCBk
cnRfaW5wdXQ9Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lKToKLSAgICAgICAgaWYgcGl4ZWxfdGVz
dHM6Ci0gICAgICAgICAgICBpZiBub3QgZXhwZWN0ZWRfY2hlY2tzdW06Ci0gICAgICAgICAgICAg
ICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3RfbmFtZSkK
LSAgICAgICAgaWYgbm90IGRydF9pbnB1dDoKLSAgICAgICAgICAgIGRydF9pbnB1dCA9IHNlbGYu
aW5wdXRfbGluZShwb3J0LCB0ZXN0X25hbWUsIGV4cGVjdGVkX2NoZWNrc3VtKQotICAgICAgICB0
ZXh0X291dHB1dCA9IGV4cGVjdGVkX3RleHQgb3IgcG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFt
ZSkgb3IgJycKLQotICAgICAgICBpZiBub3QgZHJ0X291dHB1dDoKLSAgICAgICAgICAgIGRydF9v
dXRwdXQgPSBzZWxmLmV4cGVjdGVkX291dHB1dChwb3J0LCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3Rz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfb3V0
cHV0LCBleHBlY3RlZF9jaGVja3N1bSkKLSAgICAgICAgcmV0dXJuIChkcnRfaW5wdXQsIGRydF9v
dXRwdXQpCi0KLSAgICBkZWYgZXhwZWN0ZWRfb3V0cHV0KHNlbGYsIHBvcnQsIHRlc3RfbmFtZSwg
cGl4ZWxfdGVzdHMsIHRleHRfb3V0cHV0LCBleHBlY3RlZF9jaGVja3N1bSk6Ci0gICAgICAgIG91
dHB1dCA9IFsnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4nXQotICAgICAgICBpZiB0ZXh0X291
dHB1dDoKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQodGV4dF9vdXRwdXQpCi0gICAgICAgIG91
dHB1dC5hcHBlbmQoJyNFT0ZcbicpCi0gICAgICAgIGlmIHBpeGVsX3Rlc3RzIGFuZCBleHBlY3Rl
ZF9jaGVja3N1bToKLSAgICAgICAgICAgIG91dHB1dC5leHRlbmQoWydcbicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAnQWN0dWFsSGFzaDogJXNcbicgJSBleHBlY3RlZF9jaGVja3N1bSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZEhhc2g6ICVzXG4nICUgZXhwZWN0
ZWRfY2hlY2tzdW1dKQotICAgICAgICBvdXRwdXQuYXBwZW5kKCcjRU9GXG4nKQotICAgICAgICBy
ZXR1cm4gb3V0cHV0Ci0KLSAgICBkZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0X25hbWUsIHBpeGVs
X3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bT1Ob25lLCBkcnRfb3V0cHV0PU5vbmUsIGhvc3Q9Tm9u
ZSwgZXhwZWN0ZWRfdGV4dD1Ob25lKToKLSAgICAgICAgcG9ydF9uYW1lID0gJ3Rlc3QnCi0gICAg
ICAgIGhvc3QgPSBob3N0IG9yIE1vY2tTeXN0ZW1Ib3N0KCkKLSAgICAgICAgdGVzdC5hZGRfdW5p
dF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0oaG9zdC5maWxlc3lzdGVtKQotICAgICAgICBwb3J0
ID0gUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZSkKLSAgICAgICAgZHJ0X2lucHV0LCBk
cnRfb3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291dHB1dChwb3J0LCB0ZXN0X25hbWUsCi0gICAg
ICAgICAgICBwaXhlbF90ZXN0cywgZXhwZWN0ZWRfY2hlY2tzdW0sIGRydF9vdXRwdXQsIGRydF9p
bnB1dD1Ob25lLCBleHBlY3RlZF90ZXh0PWV4cGVjdGVkX3RleHQpCi0KLSAgICAgICAgYXJncyA9
IFsnLS1wbGF0Zm9ybScsIHBvcnRfbmFtZV0gKyBzZWxmLmV4dHJhX2FyZ3MocGl4ZWxfdGVzdHMp
Ci0gICAgICAgIHN0ZGluID0gU3RyaW5nSU8oZHJ0X2lucHV0KQotICAgICAgICBzdGRvdXQgPSBT
dHJpbmdJTygpCi0gICAgICAgIHN0ZGVyciA9IFN0cmluZ0lPKCkKLSAgICAgICAgb3B0aW9ucywg
YXJncyA9IG1vY2tfZHJ0LnBhcnNlX29wdGlvbnMoYXJncykKLQotICAgICAgICBkcnQgPSBzZWxm
Lm1ha2VfZHJ0KG9wdGlvbnMsIGFyZ3MsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKLSAg
ICAgICAgcmVzID0gZHJ0LnJ1bigpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDAp
Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycuam9pbihk
cnRfb3V0cHV0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwg
JyNFT0ZcbicpCi0KLSAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgotICAgICAgICBob3N0ID0gTW9j
a1N5c3RlbUhvc3QoKQotICAgICAgICB0ZXN0LmFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5
c3RlbShob3N0LmZpbGVzeXN0ZW0pCi0gICAgICAgIHN0ZGluID0gU3RyaW5nSU8oKQotICAgICAg
ICBzdGRvdXQgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZGVyciA9IFN0cmluZ0lPKCkKLSAgICAg
ICAgcmVzID0gbW9ja19kcnQubWFpbihbJy0tcGxhdGZvcm0nLCAndGVzdCddICsgc2VsZi5leHRy
YV9hcmdzKEZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBzdGRpbiwg
c3Rkb3V0LCBzdGRlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnJykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoaG9zdC5maWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMsIHt9KQotCi0gICAgZGVmIHRlc3RfcGl4
ZWx0ZXN0X3Bhc3NlcyhzZWxmKToKLSAgICAgICAgIyBUaGlzIGFsc28gdGVzdHMgdGhhdCB3ZSBo
YW5kbGUgSFRUUDogdGVzdCBVUkxzIHByb3Blcmx5LgotICAgICAgICBzZWxmLmFzc2VydFRlc3Qo
J2h0dHAvdGVzdHMvcGFzc2VzL3RleHQuaHRtbCcsIFRydWUpCi0KLSAgICBkZWYgdGVzdF9waXhl
bHRlc3RfX2ZhaWxzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2ZhaWx1cmVzL2V4
cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnLCBwaXhlbF90ZXN0cz1UcnVlLAotICAgICAgICAg
ICAgZXhwZWN0ZWRfY2hlY2tzdW09J2ltYWdlX2NoZWNrc3VtLWNoZWNrc3VtJywKLSAgICAgICAg
ICAgIGRydF9vdXRwdXQ9WydDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbicsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAnaW1hZ2VfY2hlY2tzdW0tdHh0JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICcjRU9GXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICdBY3R1YWxIYXNoOiBpbWFnZV9jaGVja3N1bS1jaGVja3N1bVxuJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZEhhc2g6IGltYWdlX2NoZWNrc3VtLWNoZWNr
c3VtXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJyNFT0ZcbiddKQotCi0gICAgZGVmIHRl
c3RfdGV4dG9ubHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL2ltYWdl
Lmh0bWwnLCBGYWxzZSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrc3VtX2luX3BuZyhzZWxmKToKLSAg
ICAgICAgc2VsZi5hc3NlcnRUZXN0KCdwYXNzZXMvY2hlY2tzdW1faW5faW1hZ2UuaHRtbCcsIFRy
dWUpCi0KLSAgICBkZWYgdGVzdF9taXNzaW5nX2ltYWdlKHNlbGYpOgotICAgICAgICBzZWxmLmFz
c2VydFRlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCcsIFRydWUpCi0K
LSAgICBkZWYgdGVzdF9taXNzaW5nX3RleHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGVz
dCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwnLCBUcnVlKQotCi0gICAgZGVm
IHRlc3RfcmVmdGVzdF9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdwYXNz
ZXMvcmVmdGVzdC5odG1sJywgRmFsc2UsIGV4cGVjdGVkX2NoZWNrc3VtPSdtb2NrLWNoZWNrc3Vt
JywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRleHRcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0
VGVzdCgncGFzc2VzL3JlZnRlc3QuaHRtbCcsIFRydWUsIGV4cGVjdGVkX2NoZWNrc3VtPSdtb2Nr
LWNoZWNrc3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRleHRcbicpCi0KLSAgICBkZWYg
dGVzdF9yZWZ0ZXN0X21pc21hdGNoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ3Bh
c3Nlcy9taXNtYXRjaC5odG1sJywgRmFsc2UsIGV4cGVjdGVkX2NoZWNrc3VtPSdtb2NrLWNoZWNr
c3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRleHRcbicpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VGVzdCgncGFzc2VzL21pc21hdGNoLmh0bWwnLCBUcnVlLCBleHBlY3RlZF9jaGVja3N1bT0n
bW9jay1jaGVja3N1bScsIGV4cGVjdGVkX3RleHQ9J3JlZmVyZW5jZSB0ZXh0XG4nKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQppbmRleCA2Y2Iw
NjQ1Njk4MzFiODgzMDU2OTJlZDc3NzQ0ZjkzNzM1NWU3NDA2Li40NzYzYWQxMmI1MmRhYzQ2ZmY1
ZmI1NzE0ZDhmNmRhNWM5OTM3Y2MwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAtNTAsNiArNTAsNyBAQCBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNlcgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRz
LmFic3RyYWN0c2VxdWVuY2VkY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5k
CiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiBmcm9tIHdlYmtp
dHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfZmluZGVyIGltcG9ydCBMYXlvdXRU
ZXN0RmluZGVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9leHBlY3Rh
dGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
cGxhdGZvcm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCiAKQEAgLTQ4OSw3ICs0OTAs
OCBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9ucyhDb21tYW5kKToKICAgICAgICAgICAgICAgICBw
cmludChmaWxlKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgdGVzdHMgPSBzZXQoZGVm
YXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQorICAgICAgICBmaW5kZXIgPSBMYXlvdXRUZXN0RmluZGVy
KGRlZmF1bHRfcG9ydCwgTm9uZSkKKyAgICAgICAgdGVzdHMgPSBzZXQoZmluZGVyLmZpbmRfdGVz
dHNfYnlfcGF0aChhcmdzKSkKICAgICAgICAgZm9yIHBvcnRfbmFtZSBpbiBwb3J0X25hbWVzOgog
ICAgICAgICAgICAgbW9kZWwgPSBzZWxmLl9tb2RlbChvcHRpb25zLCBwb3J0X25hbWUsIHRlc3Rz
KQogICAgICAgICAgICAgdGVzdHNfdG9fcHJpbnQgPSBzZWxmLl9maWx0ZXJfdGVzdHMob3B0aW9u
cywgbW9kZWwsIHRlc3RzKQpAQCAtNTUzLDcgKzU1NSw4IEBAIGNsYXNzIFByaW50QmFzZWxpbmVz
KENvbW1hbmQpOgogICAgICAgICAgICAgcG9ydF9uYW1lcyA9IFtkZWZhdWx0X3BvcnQubmFtZSgp
XQogCiAgICAgICAgICMgRklYTUU6IG1ha2UgcmVhbF90ZXN0cygpIGEgcHVibGljIG1ldGhvZC4K
LSAgICAgICAgdGVzdHMgPSBzb3J0ZWQoZGVmYXVsdF9wb3J0Ll9yZWFsX3Rlc3RzKGFyZ3MpKQor
ICAgICAgICBmaW5kZXIgPSBMYXlvdXRUZXN0RmluZGVyKGRlZmF1bHRfcG9ydCwgTm9uZSkKKyAg
ICAgICAgdGVzdHMgPSBzb3J0ZWQoZmluZGVyLl9yZWFsX3Rlc3RzKGFyZ3MpKQogCiAgICAgICAg
IGZvciBwb3J0X25hbWUgaW4gcG9ydF9uYW1lczoKICAgICAgICAgICAgIGlmIHBvcnRfbmFtZSAh
PSBwb3J0X25hbWVzWzBdOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417085</attachid>
            <date>2021-01-06 08:04:25 -0800</date>
            <delta_ts>2021-01-07 10:53:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220025-20210106160424.patch</filename>
            <type>text/plain</type>
            <size>54935</size>
            <attacher name="Sam Sneddon [:gsnedders]">gsnedders</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwOTY3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDZiNjJmOTJhMjRjYWZkNWFhMDcwNzgyYWU2ZWZiZjM3
NjJmYzU5Mi4uYTU3NTZiNjRlN2FiMjEyZTEwOTUxMmEzODBlNDc0MjVhZmE3N2NiOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2
IEBACisyMDIwLTEyLTE4ICBTYW0gU25lZGRvbiAgPGdzbmVkZGVyc0BhcHBsZS5jb20+CisKKyAg
ICAgICAgTGF5b3V0VGVzdEZpbmRlciBzaG91bGQgYmUgaW4gY2hhcmdlIG9mIGZpbmRpbmcgbGF5
b3V0IHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjAwMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0
X2ZpbmRlci5weToKKyAgICAgICAgKF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKTogRm9ybWVybHkg
UG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlCisgICAgICAgIChfaGFzX3N1cHBvcnRlZF9leHRl
bnNpb24pOiBGb3JtZXJseSBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbgorICAgICAgICAo
TGF5b3V0VGVzdEZpbmRlci5fX2luaXRfXyk6IERlZmluZSBzZWxmLl93M2NfcmVzb3VyY2VfZmls
ZXMKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXIuZmluZF90ZXN0cyk6IENoYW5nZSB0byBjYWxs
IHdpdGhpbiB0aGUgY2xhc3MKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXIuZmluZF90ZXN0c19i
eV9wYXRoKTogRm9ybWVybHkgUG9ydC50ZXN0cworICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5f
ZXhwYW5kZWRfcGF0aHMpOiBGb3JtZXJseSBQb3J0Ll9leHBhbmRlZF9wYXRocworICAgICAgICAo
TGF5b3V0VGVzdEZpbmRlci5fcmVhbF90ZXN0cyk6IEZvcm1lcmx5IFBvcnQuX3JlYWxfdGVzdHMK
KyAgICAgICAgKExheW91dFRlc3RGaW5kZXIuX2lzX3Rlc3RfZmlsZSk6IEZvcm1lcmx5IFBvcnQu
X2lzX3Rlc3RfZmlsZQorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5faXNfdzNjX3Jlc291cmNl
X2ZpbGUpOiBGb3JtZXJseSBQb3J0Ll9pc193M2NfcmVzb3VyY2VfZmlsZQorICAgICAgICAoTGF5
b3V0VGVzdEZpbmRlci5maW5kX3RvdWNoZWRfdGVzdHMpOiBVcGRhdGUgZm9yIHRoZSBhYm92ZQor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weToKKyAgICAgICAgKE1vY2tMYXlvdXRUZXN0RmluZGVy
KToKKyAgICAgICAgKE1vY2tMYXlvdXRUZXN0RmluZGVyLl9yZWFsX3Rlc3RzKTogTW92ZSB0aGlz
IGZyb20gdGhlIGZvcm1lciBNb2NrUG9ydC50ZXN0cworICAgICAgICAoTGF5b3V0VGVzdEZpbmRl
clRlc3RzLm1ha2VfZmluZGVyKTogU2ltaWxhciB0byB0aGUgbWFrZV9wb3J0IGluIGJhc2VfdW5p
dHRlc3QucHkKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50b3VjaGVkX2ZpbGVzKTog
QWRqdXN0IGZvciBNb2NrTGF5b3V0VGVzdEZpbmRlcgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRl
clRlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2lzX3JlZmVyZW5j
ZV9odG1sX2ZpbGUpOiBBZGQgdGVzdCB0byBjaGVjayByZWZlcmVuY2VzIGFyZSBzdWJzZXQgb2Yg
dGVzdHMKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2ZpbmRfbm9fcGF0aHNf
c3BlY2lmaWVkKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9maW5kX25vX3BhdGhzX3NwZWNpZmll
ZAorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRlc3RfZmluZF9vbmVfdGVzdCk6IEZv
cm1lcmx5IFBvcnRUZXN0LnRlc3RfZmluZF9vbmVfdGVzdAorICAgICAgICAoTGF5b3V0VGVzdEZp
bmRlclRlc3RzLnRlc3RfZmluZF9nbG9iKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9maW5kX2ds
b2IKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2ZpbmRfd2l0aF9za2lwcGVk
X2RpcmVjdG9yaWVzKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9maW5kX3dpdGhfc2tpcHBlZF9k
aXJlY3RvcmllcworICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRlc3RfZmluZF93aXRo
X3NraXBwZWRfZGlyZWN0b3JpZXNfMik6IEZvcm1lcmx5IFBvcnRUZXN0LnRlc3RfZmluZF93aXRo
X3NraXBwZWRfZGlyZWN0b3JpZXNfMgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRl
c3RfaXNfdGVzdF9maWxlKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9pc190ZXN0X2ZpbGUKKyAg
ICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2lzX3czY19yZXNvdXJjZV9maWxlKTog
Rm9ybWVybHkgUG9ydFRlc3QudGVzdF9pc193M2NfcmVzb3VyY2VfZmlsZQorICAgICAgICAodGVz
dF90b3VjaGVkX2J1dF9za2lwcGVkX3Rlc3QpOiBBZGp1c3QgZm9yIE1vY2tMYXlvdXRUZXN0Rmlu
ZGVyCisgICAgICAgIChNb2NrUG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChNb2NrUG9ydC5fX2lu
aXRfXyk6IERlbGV0ZWQuCisgICAgICAgIChNb2NrUG9ydC50ZXN0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChMYXlvdXRUZXN0RmluZGVyVGVzdHMudGVzdF90b3VjaGVkX3Rlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRlc3RfZXhwZWN0ZWRfdG91Y2hlZF90ZXN0
KTogRGVsZXRlZC4KKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X3BsYXRmb3Jt
X2V4cGVjdGVkX3RvdWNoZWRfdGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChMYXlvdXRUZXN0Rmlu
ZGVyVGVzdHMudGVzdF9wbGF0Zm9ybV9kdXBsaWNhdGVfdG91Y2hlZF90ZXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X3RvdWNoZWRfYnV0X3NraXBwZWRf
dGVzdCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
bW9kZWxzL3Rlc3RfaW5wdXQucHk6CisgICAgICAgIChUZXN0SW5wdXQuX19pbml0X18pOiBSZW1v
dmUgdW51c2VkIHJlZmVyZW5jZV9maWxlcyBhbmQgc2hvdWxkX3J1bl9waXhlbF90ZXN0cworICAg
ICAgICAoVGVzdElucHV0Ll9fcmVwcl9fKTogUmVtb3ZlIHVudXNlZCBzaG91bGRfcnVuX3BpeGVs
X3Rlc3RzCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAg
IChQb3J0LnRlc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnQuX2V4cGFuZGVkX3BhdGhzKTog
RGVsZXRlZC4KKyAgICAgICAgKFBvcnQuX3JlYWxfdGVzdHMpOiBEZWxldGVkLgorICAgICAgICAo
UG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChQb3J0LmlzX3Jl
ZmVyZW5jZV9odG1sX2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoUG9ydC5faGFzX3N1cHBvcnRl
ZF9leHRlbnNpb24pOiBEZWxldGVkLgorICAgICAgICAoUG9ydC5faXNfdGVzdF9maWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weToK
KyAgICAgICAgKFBvcnRUZXN0LnRlc3RfZmluZF9ub19wYXRoc19zcGVjaWZpZWQpOiBEZWxldGVk
LgorICAgICAgICAoUG9ydFRlc3QudGVzdF9maW5kX29uZV90ZXN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFBvcnRUZXN0LnRlc3RfZmluZF9nbG9iKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0
LnRlc3RfZmluZF93aXRoX3NraXBwZWRfZGlyZWN0b3JpZXMpOiBEZWxldGVkLgorICAgICAgICAo
UG9ydFRlc3QudGVzdF9maW5kX3dpdGhfc2tpcHBlZF9kaXJlY3Rvcmllc18yKTogRGVsZXRlZC4K
KyAgICAgICAgKFBvcnRUZXN0LnRlc3RfaXNfdGVzdF9maWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFBvcnRUZXN0LnRlc3RfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZSk6IERlbGV0ZWQuCisgICAgICAg
IChQb3J0VGVzdC50ZXN0X3Rlc3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0LnRlc3Rf
aXNfdzNjX3Jlc291cmNlX2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAodGVzdF9qaGJ1aWxkX3dy
YXBwZXIpOiBEZWxldGVkLgorICAgICAgICAodGVzdF9yZWZfdGVzdHNfcGxhdGZvcm1fZGlyZWN0
b3J5KTogRGVsZXRlZC4KKyAgICAgICAgKHRlc3RfY29tbWl0c19mb3JfdXBsb2FkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAg
KFBvcnRGYWN0b3J5KTogUmVtb3ZlIG1vY2tfZHJ0CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L21vY2tfZHJ0LnB5OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9tb2NrX2RydF91bml0dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weToKKyAgICAgICAgKFByaW50RXhwZWN0YXRp
b25zLmV4ZWN1dGUpOiBBZGp1c3QgZm9yIFBvcnQudGVzdHMgbW92aW5nIHRvIExheW91dFRlc3RG
aW5kZXIKKyAgICAgICAgKFByaW50QmFzZWxpbmVzLmV4ZWN1dGUpOiBBZGp1c3QgZm9yIFBvcnQu
X3JlYWxfdGVzdHMgbW92aW5nIHRvIExheW91dFRlc3RGaW5kZXIKKwogMjAyMC0xMi0xNyAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBbIEJp
Z1N1ciBdIDMgUGljdHVyZUluUGljdHVyZSByZWxhdGVkIEFQSSB0ZXN0cyB0aW1pbmcgb3V0CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9maW5kZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXIucHkKaW5kZXggMGMxODFjMzM4NjFm
ZDBkNjhlOGJlMWRlOTk3ODU0MjA0MjQ3NTVlZS4uNzM2ODFlYWU4NzkzOWQ3MzJiYTcyODZiZjk2
ZGIyYmNhODNhMDQzYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfZmluZGVyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5w
eQpAQCAtMjcsMjkgKzI3LDExNiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgZXJybm8KK2lt
cG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiAKK2Zyb20gd2Via2l0cHkuY29t
bW9uIGltcG9ydCBmaW5kX2ZpbGVzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMg
aW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQg
UG9ydAogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCisjIFdoZW4g
Y29sbGVjdGluZyB0ZXN0IGNhc2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0
ZW5zaW9ucy4KK19zdXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNo
dG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5wbCcsICcuaHRtJywgJy5waHAnLCAnLnN2ZycsICcu
bWh0JywgJy54aHQnXSkKKworCisjIElmIGFueSBjaGFuZ2VzIGFyZSBtYWRlIGhlcmUgYmUgc3Vy
ZSB0byB1cGRhdGUgdGhlIGlzVXNlZEluUmVmdGVzdCBtZXRob2QgaW4gb2xkLXJ1bi13ZWJraXQt
dGVzdHMgYXMgd2VsbC4KK2RlZiBfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCBk
aXJuYW1lLCBmaWxlbmFtZSk6CisgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgncmVmLScpIG9y
IGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ25vdHJlZi0nKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAg
ICBmaWxlbmFtZV93aWhvdXRfZXh0LCBleHQgPSBmaWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGVuYW1l
KQorICAgIGlmIGV4dCBub3QgaW4gUG9ydC5fc3VwcG9ydGVkX3JlZmVyZW5jZV9leHRlbnNpb25z
OgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBmb3Igc3VmZml4IGluIFsnLWV4cGVjdGVkJywg
Jy1leHBlY3RlZC1taXNtYXRjaCcsICctcmVmJywgJy1ub3RyZWYnXToKKyAgICAgICAgaWYgZmls
ZW5hbWVfd2lob3V0X2V4dC5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgX2hhc19zdXBwb3J0ZWRfZXh0ZW5zaW9uKGZp
bGVzeXN0ZW0sIGZpbGVuYW1lKToKKyAgICAiIiJSZXR1cm4gdHJ1ZSBpZiBmaWxlbmFtZSBpcyBv
bmUgb2YgdGhlIGZpbGUgZXh0ZW5zaW9ucyB3ZSB3YW50IHRvIHJ1biBhIHRlc3Qgb24uIiIiCisg
ICAgZXh0ZW5zaW9uID0gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFtZSlbMV0KKyAgICByZXR1
cm4gZXh0ZW5zaW9uIGluIF9zdXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zCisKKwogY2xhc3MgTGF5
b3V0VGVzdEZpbmRlcihvYmplY3QpOgorICAgICIiIkZpbmRzIExheW91dFRlc3RzCisKKyAgICBX
ZSBjb25zaWRlciBhbnkgZmlsZSB3aWxsIGEgZ2l2ZW4gc2V0IG9mIGV4dGVuc2lvbnMgYXMgdGVz
dHMsIGV4Y2VwdCBmb3IKKyAgICB0aG9zZSB3aGljaCBhcHBlYXIgdG8gYmUgcmVmZXJlbmNlcyAo
LWV4cGVjdGVkLmh0bWwsIGV0Yy4pLiBOb3RhYmx5IHRoaXMKKyAgICBtZWFucyB0aGF0IGEgdGVz
dCBfZG9lc24ndF8gbmVlZCB0byBoYXZlIGFueSBhc3NvY2lhdGVkIC1leHBlY3RlZC4qIGZpbGUK
KyAgICAoaW4gdGhvc2UgY2FzZXMsIHdlIHdpbGwgcmVwb3J0IHRoZSBtaXNzaW5nIHJlc3VsdCku
CisgICAgIiIiCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CiAgICAg
ICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQogICAg
ICAgICBzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCisgICAgICAg
IHNlbGYuX3czY19yZXNvdXJjZV9maWxlcyA9IE5vbmUKIAogICAgIGRlZiBmaW5kX3Rlc3RzKHNl
bGYsIG9wdGlvbnMsIGFyZ3MsIGRldmljZV90eXBlPU5vbmUpOgogICAgICAgICBwYXRocyA9IHNl
bGYuX3N0cmlwX3Rlc3RfZGlyX3ByZWZpeGVzKGFyZ3MpCiAgICAgICAgIGlmIG9wdGlvbnMgYW5k
IG9wdGlvbnMudGVzdF9saXN0OgogICAgICAgICAgICAgcGF0aHMgKz0gc2VsZi5fc3RyaXBfdGVz
dF9kaXJfcHJlZml4ZXMoc2VsZi5fcmVhZF90ZXN0X25hbWVzX2Zyb21fZmlsZShvcHRpb25zLnRl
c3RfbGlzdCwgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKSkKLSAgICAgICAgdGVzdF9m
aWxlcyA9IHNlbGYuX3BvcnQudGVzdHMocGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQor
ICAgICAgICB0ZXN0X2ZpbGVzID0gc2VsZi5maW5kX3Rlc3RzX2J5X3BhdGgocGF0aHMsIGRldmlj
ZV90eXBlPWRldmljZV90eXBlKQogICAgICAgICByZXR1cm4gKHBhdGhzLCB0ZXN0X2ZpbGVzKQog
CisgICAgZGVmIGZpbmRfdGVzdHNfYnlfcGF0aChzZWxmLCBwYXRocywgZGV2aWNlX3R5cGU9Tm9u
ZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBmb3VuZC4gQm90aCBnZW5l
cmljIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0cyBtYXRjaGluZyBwYXRocyBzaG91bGQgYmUg
cmV0dXJuZWQuIiIiCisgICAgICAgIGV4cGFuZGVkX3BhdGhzID0gc2VsZi5fZXhwYW5kZWRfcGF0
aHMocGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQorICAgICAgICByZXR1cm4gc2VsZi5f
cmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykKKworICAgIGRlZiBfZXhwYW5kZWRfcGF0aHMoc2Vs
ZiwgcGF0aHMsIGRldmljZV90eXBlPU5vbmUpOgorICAgICAgICBleHBhbmRlZF9wYXRocyA9IFtd
CisgICAgICAgIGZzID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbQorICAgICAgICBhbGxfcGxhdGZv
cm1fZGlycyA9IFtwYXRoIGZvciBwYXRoIGluIGZzLmdsb2IoZnMuam9pbihzZWxmLl9wb3J0Lmxh
eW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywgJyonKSkgaWYgZnMuaXNkaXIocGF0aCldCisg
ICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgZXhwYW5kZWRfcGF0aHMuYXBw
ZW5kKHBhdGgpCisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnRlc3RfaXNkaXIocGF0aCkgYW5k
IG5vdCBwYXRoLnN0YXJ0c3dpdGgoJ3BsYXRmb3JtJykgYW5kIG5vdCBmcy5pc2FicyhwYXRoKToK
KyAgICAgICAgICAgICAgICBmb3IgcGxhdGZvcm1fZGlyIGluIGFsbF9wbGF0Zm9ybV9kaXJzOgor
ICAgICAgICAgICAgICAgICAgICBpZiBmcy5pc2Rpcihmcy5qb2luKHBsYXRmb3JtX2RpciwgcGF0
aCkpIGFuZCBwbGF0Zm9ybV9kaXIgaW4gc2VsZi5fcG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aChk
ZXZpY2VfdHlwZT1kZXZpY2VfdHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRl
ZF9wYXRocy5hcHBlbmQoc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZzLmpvaW4o
cGxhdGZvcm1fZGlyLCBwYXRoKSkpCisKKyAgICAgICAgcmV0dXJuIGV4cGFuZGVkX3BhdGhzCisK
KyAgICBkZWYgX3JlYWxfdGVzdHMoc2VsZiwgcGF0aHMpOgorICAgICAgICAjIFdoZW4gY29sbGVj
dGluZyB0ZXN0IGNhc2VzLCBza2lwIHRoZXNlIGRpcmVjdG9yaWVzCisgICAgICAgIHNraXBwZWRf
ZGlyZWN0b3JpZXMgPSBzZXQoWycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3N1cHBvcnQn
LCAnc2NyaXB0LXRlc3RzJywgJ3JlZmVyZW5jZScsICdyZWZ0ZXN0J10pCisgICAgICAgIGZpbGVz
ID0gZmluZF9maWxlcy5maW5kKHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BvcnQubGF5
b3V0X3Rlc3RzX2RpcigpLCBwYXRocywgc2tpcHBlZF9kaXJlY3Rvcmllcywgc2VsZi5faXNfdGVz
dF9maWxlLCBzZWxmLl9wb3J0LnRlc3Rfa2V5KQorICAgICAgICByZXR1cm4gW3NlbGYuX3BvcnQu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10KKworICAgIGRlZiBfaXNf
dGVzdF9maWxlKHNlbGYsIGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKKyAgICAgICAg
aWYgbm90IF9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgX2lzX3JlZmVyZW5jZV9odG1sX2Zp
bGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgIGlmIHNlbGYuX2lzX3czY19yZXNvdXJjZV9maWxlKGZpbGVzeXN0ZW0sIGRp
cm5hbWUsIGZpbGVuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIF9pc193M2NfcmVzb3VyY2VfZmlsZShzZWxmLCBmaWxlc3lzdGVt
LCBkaXJuYW1lLCBmaWxlbmFtZSk6CisgICAgICAgIHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oZGly
bmFtZSwgZmlsZW5hbWUpCisgICAgICAgIHczY19wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAiaW1wb3J0ZWQiLCAidzNjIikKKyAgICAgICAgaWYg
dzNjX3BhdGggbm90IGluIHBhdGg6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAg
ICBpZiBub3Qgc2VsZi5fdzNjX3Jlc291cmNlX2ZpbGVzOgorICAgICAgICAgICAgZmlsZXBhdGgg
PSBmaWxlc3lzdGVtLmpvaW4odzNjX3BhdGgsICJyZXNvdXJjZXMiLCAicmVzb3VyY2UtZmlsZXMu
anNvbiIpCisgICAgICAgICAgICBqc29uX2RhdGEgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxl
KGZpbGVwYXRoKQorICAgICAgICAgICAgc2VsZi5fdzNjX3Jlc291cmNlX2ZpbGVzID0ganNvbi5s
b2Fkcyhqc29uX2RhdGEpCisKKyAgICAgICAgc3VicGF0aCA9IHBhdGhbbGVuKHczY19wYXRoKSAr
IDE6XS5yZXBsYWNlKCdcXCcsICcvJykKKyAgICAgICAgaWYgc3VicGF0aCBpbiBzZWxmLl93M2Nf
cmVzb3VyY2VfZmlsZXNbImZpbGVzIl06CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICBmb3IgZGlycGF0aCBpbiBzZWxmLl93M2NfcmVzb3VyY2VfZmlsZXNbImRpcmVjdG9yaWVzIl06
CisgICAgICAgICAgICBpZiBkaXJwYXRoIGluIHN1YnBhdGg6CisgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICBkZWYgZmluZF90b3VjaGVkX3Rl
c3RzKHNlbGYsIG5ld19vcl9tb2RpZmllZF9wYXRocywgYXBwbHlfc2tpcF9leHBlY3RhdGlvbnM9
VHJ1ZSk6CiAgICAgICAgIHBvdGVudGlhbF90ZXN0X3BhdGhzID0gW10KICAgICAgICAgZm9yIHRl
c3RfZmlsZSBpbiBuZXdfb3JfbW9kaWZpZWRfcGF0aHM6CkBAIC02Niw3ICsxNTMsNyBAQCBjbGFz
cyBMYXlvdXRUZXN0RmluZGVyKG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBwb3RlbnRpYWxfdGVz
dF9wYXRoczoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgdGVzdHMgPSBzZWxm
Ll9wb3J0LnRlc3RzKGxpc3Qoc2V0KHBvdGVudGlhbF90ZXN0X3BhdGhzKSkpCisgICAgICAgIHRl
c3RzID0gc2VsZi5maW5kX3Rlc3RzX2J5X3BhdGgobGlzdChzZXQocG90ZW50aWFsX3Rlc3RfcGF0
aHMpKSkKICAgICAgICAgaWYgbm90IGFwcGx5X3NraXBfZXhwZWN0YXRpb25zOgogICAgICAgICAg
ICAgcmV0dXJuIHRlc3RzCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0
X2ZpbmRlcl91bml0dGVzdC5weQppbmRleCA5NTg1MmVlM2JhZWQyMzJhZDgxZjMzOTdlZmIzZmNl
MzE4NmFmNjNmLi5jNTgyMDFiZDljYzZhY2U3MzU1ZDM5Y2JlZDg4OGUzNWE0NWVjZGRmIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9s
YXlvdXRfdGVzdF9maW5kZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfZmluZGVyX3VuaXR0ZXN0LnB5
CkBAIC0zMCwyNyArMzAsMTE1IEBAIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0
CiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lz
dGVtCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9m
aW5kZXIgaW1wb3J0IExheW91dFRlc3RGaW5kZXIKLWZyb20gd2Via2l0cHkucG9ydC50ZXN0IGlt
cG9ydCBUZXN0UG9ydAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5
b3V0X3Rlc3RfZmluZGVyIGltcG9ydCBMYXlvdXRUZXN0RmluZGVyLCBQb3J0LCBfaXNfcmVmZXJl
bmNlX2h0bWxfZmlsZSwgX3N1cHBvcnRlZF90ZXN0X2V4dGVuc2lvbnMKK2Zyb20gd2Via2l0cHku
cG9ydC50ZXN0IGltcG9ydCBhZGRfdW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0sIFRlc3RQ
b3J0CiAKIAotY2xhc3MgTW9ja1BvcnQoVGVzdFBvcnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0KToKLSAgICAgICAgc3VwZXIoTW9ja1BvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QpCi0K
LSAgICBkZWYgdGVzdHMoc2VsZiwgcGF0aHMpOgorY2xhc3MgTW9ja0xheW91dFRlc3RGaW5kZXIo
TGF5b3V0VGVzdEZpbmRlcik6CisgICAgZGVmIF9yZWFsX3Rlc3RzKHNlbGYsIHBhdGhzKToKICAg
ICAgICAgcmV0dXJuIFtwYXRoIGZvciBwYXRoIGluIHBhdGhzIGlmIHBhdGguZW5kc3dpdGgoJy5o
dG1sJyldCiAKIAogY2xhc3MgTGF5b3V0VGVzdEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNl
KToKKyAgICBkZWYgbWFrZV9maW5kZXIoc2VsZik6CisgICAgICAgIGhvc3QgPSBNb2NrSG9zdChj
cmVhdGVfc3R1Yl9yZXBvc2l0b3J5X2ZpbGVzPVRydWUpCisgICAgICAgIGFkZF91bml0X3Rlc3Rz
X3RvX21vY2tfZmlsZXN5c3RlbShob3N0LmZpbGVzeXN0ZW0pCisgICAgICAgIHBvcnQgPSBUZXN0
UG9ydChob3N0KQorICAgICAgICByZXR1cm4gTGF5b3V0VGVzdEZpbmRlcihwb3J0LCBOb25lKQor
CiAgICAgZGVmIHRvdWNoZWRfZmlsZXMoc2VsZiwgdG91Y2hlZF9maWxlcywgZnM9Tm9uZSk6CiAg
ICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIGlmIGZzOgogICAgICAgICAgICAgaG9z
dC5maWxlc3lzdGVtID0gZnMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZzID0gaG9zdC5m
aWxlc3lzdGVtCi0gICAgICAgIHBvcnQgPSBNb2NrUG9ydChob3N0KQotICAgICAgICByZXR1cm4g
KGZzLCBMYXlvdXRUZXN0RmluZGVyKHBvcnQsIG9wdHBhcnNlLlZhbHVlcyh7J3NraXBwZWQnOiAn
YWx3YXlzJywgJ3NraXBfZmFpbGluZ190ZXN0cyc6IEZhbHNlLCAnaHR0cCc6IFRydWV9KSkuZmlu
ZF90b3VjaGVkX3Rlc3RzKHRvdWNoZWRfZmlsZXMpKQorICAgICAgICBwb3J0ID0gVGVzdFBvcnQo
aG9zdCkKKyAgICAgICAgcmV0dXJuIChmcywgTW9ja0xheW91dFRlc3RGaW5kZXIocG9ydCwgb3B0
cGFyc2UuVmFsdWVzKHsnc2tpcHBlZCc6ICdhbHdheXMnLCAnc2tpcF9mYWlsaW5nX3Rlc3RzJzog
RmFsc2UsICdodHRwJzogVHJ1ZX0pKS5maW5kX3RvdWNoZWRfdGVzdHModG91Y2hlZF9maWxlcykp
CisKKyAgICBkZWYgdGVzdF9zdXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKF9zdXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zICYgUG9ydC5fc3Vw
cG9ydGVkX3JlZmVyZW5jZV9leHRlbnNpb25zLCBQb3J0Ll9zdXBwb3J0ZWRfcmVmZXJlbmNlX2V4
dGVuc2lvbnMpCisKKyAgICBkZWYgdGVzdF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKHNlbGYpOgor
ICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0
ZWQuaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2lzX3JlZmVyZW5jZV9odG1sX2Zp
bGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2gueG1sJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywg
J2Zvby1yZWYueGh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9pc19yZWZlcmVuY2Vf
aHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLW5vdHJlZi5zdmcnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zv
by5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoX2lzX3JlZmVyZW5jZV9odG1sX2Zp
bGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQudHh0JykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RmFsc2UoX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhw
ZWN0ZWQuc2h0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNlX2h0
bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5waHAnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zv
by1leHBlY3RlZC5taHQnKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbm9fcGF0aHNfc3BlY2lmaWVk
KHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1ha2VfZmluZGVyKCkKKyAgICAgICAgdGVz
dHMgPSBmaW5kZXIuZmluZF90ZXN0c19ieV9wYXRoKFtdKQorICAgICAgICBzZWxmLmFzc2VydE5v
dEVxdWFsKGxlbih0ZXN0cyksIDApCisKKyAgICBkZWYgdGVzdF9maW5kX29uZV90ZXN0KHNlbGYp
OgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1ha2VfZmluZGVyKCkKKyAgICAgICAgdGVzdHMgPSBm
aW5kZXIuZmluZF90ZXN0c19ieV9wYXRoKFsnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCdd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0cyksIDEpCisKKyAgICBkZWYgdGVz
dF9maW5kX2dsb2Ioc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQor
ICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5kX3Rlc3RzX2J5X3BhdGgoWydmYWlsdXJlcy9leHBl
Y3RlZC9pbSonXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAyKQorCisg
ICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBwZWRfZGlyZWN0b3JpZXMoc2VsZik6CisgICAgICAg
IGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQorICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5k
X3Rlc3RzX2J5X3BhdGgoWyd1c2Vyc2NyaXB0cyddKQorICAgICAgICBzZWxmLmFzc2VydE5vdElu
KCd1c2Vyc2NyaXB0cy9yZXNvdXJjZXMvaWZyYW1lLmh0bWwnLCB0ZXN0cykKKworICAgIGRlZiB0
ZXN0X2ZpbmRfd2l0aF9za2lwcGVkX2RpcmVjdG9yaWVzXzIoc2VsZik6CisgICAgICAgIGZpbmRl
ciA9IHNlbGYubWFrZV9maW5kZXIoKQorICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5kX3Rlc3Rz
X2J5X3BhdGgoWyd1c2Vyc2NyaXB0cy9yZXNvdXJjZXMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0cywgW10pCisKKyAgICBkZWYgdGVzdF9pc190ZXN0X2ZpbGUoc2VsZik6CisgICAg
ICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby5odG1sJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2Zp
bGVzeXN0ZW0sICcnLCAnZm9vLnNodG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5k
ZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAnZm9vLnN2ZycpKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lz
dGVtLCAnJywgJ3Rlc3QtcmVmLXRlc3QuaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGZpbmRlci5faXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28ucG5nJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9m
aWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1l
eHBlY3RlZC5zdmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rlc3Rf
ZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnhodCcpKQorICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3Rl
bSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28t
ZXhwZWN0ZWQtbWlzbWF0Y2guc3ZnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVy
Ll9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNt
YXRjaC54aHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9m
aWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28tcmVmLmh0bWwnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcn
LCAnZm9vLW5vdHJlZi5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9p
c190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1ub3RyZWYueGh0JykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxl
c3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShm
aW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAncmVmLWZvby5odG1s
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVy
Ll9maWxlc3lzdGVtLCAnJywgJ25vdHJlZi1mb28ueGhyJykpCisKKyAgICBkZWYgdGVzdF9pc193
M2NfcmVzb3VyY2VfZmlsZShzZWxmKToKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWtlX2ZpbmRl
cigpCisKKyAgICAgICAgZmluZGVyLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShmaW5kZXIu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3Jlc291
cmNlLWZpbGVzLmpzb24iLCAiIiIKK3siZGlyZWN0b3JpZXMiOiBbCisid2ViLXBsYXRmb3JtLXRl
c3RzL2NvbW1vbiIsCisid2ViLXBsYXRmb3JtLXRlc3RzL2RvbS9ub2Rlcy9Eb2N1bWVudC1jcmVh
dGVFbGVtZW50LW5hbWVzcGFjZS10ZXN0cyIsCisid2ViLXBsYXRmb3JtLXRlc3RzL2ZvbnRzIiwK
KyJ3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9icm93c2luZy10aGUtd2ViL25hdmln
YXRpbmctYWNyb3NzLWRvY3VtZW50cy9zb3VyY2Uvc3VwcG9ydCIsCisid2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvYnJvd3NlcnMvYnJvd3NpbmctdGhlLXdlYi91bmxvYWRpbmctZG9jdW1lbnRzL3N1
cHBvcnQiLAorIndlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWhp
c3RvcnktaW50ZXJmYWNlL25vbi1hdXRvbWF0ZWQiLAorIndlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWxvY2F0aW9uLWludGVyZmFjZS9ub24tYXV0b21hdGVkIiwK
KyJ3ZWItcGxhdGZvcm0tdGVzdHMvaW1hZ2VzIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvc2Vydmlj
ZS13b3JrZXJzIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvdG9vbHMiCitdLCAiZmlsZXMiOiBbCisi
d2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtYmxv
Y2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5odG1sIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvWE1M
SHR0cFJlcXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1ub3QtaGFuZy1zY3JpcHRsb2FkZXItc3Vi
ZnJhbWUuaHRtbCIKK119IiIiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNf
dzNjX3Jlc291cmNlX2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0
X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93MyIsICJyZXNvdXJjZV9maWxlLmh0bWwiKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3czY19yZXNvdXJjZV9maWxlKGZpbmRl
ci5fZmlsZXN5c3RlbSwgZmluZGVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0
ZWQvdzNjIiwgInJlc291cmNlX2ZpbGUuaHRtbCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNl
KGZpbmRlci5faXNfdzNjX3Jlc291cmNlX2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIu
X3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL1hNTEh0dHBSZXF1ZXN0IiwgInhtbGh0dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2Ny
aXB0cy1zdWJmcmFtZS5odG1sLmh0bWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRl
ci5faXNfdzNjX3Jlc291cmNlX2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQu
bGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hN
TEh0dHBSZXF1ZXN0IiwgInhtbGh0dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1z
dWJmcmFtZS5odG1sIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kZXIuX2lzX3czY19y
ZXNvdXJjZV9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgZmluZGVyLl9wb3J0LmxheW91dF90ZXN0
c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvRG9j
dW1lbnQtY3JlYXRlRWxlbWVudC1uYW1lc3BhY2UtdGVzdHMiLCAidGVzdC5odG1sIikpCiAKICAg
ICBkZWYgdGVzdF90b3VjaGVkX3Rlc3Qoc2VsZik6CiAgICAgICAgIHBhdGhzID0gWydMYXlvdXRU
ZXN0cy90ZXN0Lmh0bWwnLCAnTGF5b3V0VGVzdHMvdGVzdCcsICd0ZXN0Mi5odG1sJywgJ1NvdXJj
ZS90ZXN0MS5odG1sJ10KQEAgLTgwLDcgKzE2OCw3IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXJU
ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90b3VjaGVkX2J1dF9za2lw
cGVkX3Rlc3Qoc2VsZik6CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIHBvcnQg
PSBNb2NrUG9ydChob3N0KQorICAgICAgICBwb3J0ID0gVGVzdFBvcnQoaG9zdCkKIAogICAgICAg
ICBleHBlY3RhdGlvbnNfZGljdCA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgZXhwZWN0YXRpb25z
X2RpY3RbJ2V4cGVjdGF0aW9ucyddID0gJ3Rlc3QxLmh0bWwgWyBTa2lwIF1cbnRlc3QzLmh0bWwg
WyBTa2lwIF1cbicKQEAgLTkxLDUgKzE3OSw1IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXJUZXN0
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0
X2ZpbGUoJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3Rlc3QyLmh0bWwnLCAnVGhpcyBpcyBh
IHRlc3QgdG8gYmUgcnVubmVkJykKICAgICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZSgnL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvdGVzdDMuaHRtbCcsICdUaGlzIGlzIGEg
dGVzdCB0byBiZSBza2lwcGVkJykKIAotICAgICAgICB0b3VjaGVkX3Rlc3RzID0gTGF5b3V0VGVz
dEZpbmRlcihwb3J0LCBvcHRwYXJzZS5WYWx1ZXMoeydza2lwcGVkJzogJ2Fsd2F5cycsICdza2lw
X2ZhaWxpbmdfdGVzdHMnOiBGYWxzZSwgJ2h0dHAnOiBUcnVlfSkpLmZpbmRfdG91Y2hlZF90ZXN0
cyhwYXRocykKKyAgICAgICAgdG91Y2hlZF90ZXN0cyA9IE1vY2tMYXlvdXRUZXN0RmluZGVyKHBv
cnQsIG9wdHBhcnNlLlZhbHVlcyh7J3NraXBwZWQnOiAnYWx3YXlzJywgJ3NraXBfZmFpbGluZ190
ZXN0cyc6IEZhbHNlLCAnaHR0cCc6IFRydWV9KSkuZmluZF90b3VjaGVkX3Rlc3RzKHBhdGhzKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh0b3VjaGVkX3Rlc3RzKSwgc29ydGVkKFsn
dGVzdDAuaHRtbCcsICd0ZXN0Mi5odG1sJ10pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfaW5wdXQucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1dC5weQppbmRleCBlNGE2OWUx
MzUxYzEyYjdiMjUwY2M2M2UzMGE1YWRmZjk3ZDhmZTI4Li44YzY1NDE3NmZjZTBhMDIwMDc5MDJm
YjkwNGViZjA2YmQwY2Y4NjczIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9pbnB1dC5weQpAQCAtMzEsMTYgKzMxLDE1IEBA
CiBjbGFzcyBUZXN0SW5wdXQob2JqZWN0KToKICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJv
dXQgYSB0ZXN0IGZvciBlYXN5IHBhc3Npbmcgb2YgZGF0YS4iIiIKIAotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB0ZXN0X25hbWUsIHRpbWVvdXQ9Tm9uZSwgbmVlZHNfc2VydmVycz1Ob25lLCByZWZl
cmVuY2VfZmlsZXM9Tm9uZSwgc2hvdWxkX3J1bl9waXhlbF90ZXN0cz1Ob25lLCBzaG91bGRfZHVt
cF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
ZXN0X25hbWUsIHRpbWVvdXQ9Tm9uZSwgbmVlZHNfc2VydmVycz1Ob25lLCBzaG91bGRfZHVtcF9q
c2NvbnNvbGVsb2dfaW5fc3RkZXJyPU5vbmUpOgogICAgICAgICAjIFRlc3RJbnB1dCBvYmplY3Rz
IGFyZSBub3JtYWxseSBjb25zdHJ1Y3RlZCBieSB0aGUgbWFuYWdlciBhbmQgcGFzc2VkCiAgICAg
ICAgICMgdG8gdGhlIHdvcmtlcnMsIGJ1dCB0aGVzZSBzb21lIGZpZWxkcyBhcmUgc2V0IGxhemls
eSBpbiB0aGUgd29ya2VycyB3aGVyZSBwb3NzaWJsZQogICAgICAgICAjIGJlY2F1c2UgdGhleSBy
ZXF1aXJlIHVzIHRvIGxvb2sgYXQgdGhlIGZpbGVzeXN0ZW0gYW5kIHdlIHdhbnQgdG8gYmUgYWJs
ZSB0byBkbyB0aGF0IGluIHBhcmFsbGVsLgogICAgICAgICBzZWxmLnRlc3RfbmFtZSA9IHRlc3Rf
bmFtZQogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0ICAjIGluIG1zZWNzOyBzaG91bGQg
cmVuYW1lIHRoaXMgZm9yIGNvbnNpc3RlbmN5CiAgICAgICAgIHNlbGYubmVlZHNfc2VydmVycyA9
IG5lZWRzX3NlcnZlcnMKLSAgICAgICAgc2VsZi5yZWZlcmVuY2VfZmlsZXMgPSByZWZlcmVuY2Vf
ZmlsZXMKLSAgICAgICAgc2VsZi5zaG91bGRfcnVuX3BpeGVsX3Rlc3RzID0gc2hvdWxkX3J1bl9w
aXhlbF90ZXN0cwogICAgICAgICBzZWxmLnNob3VsZF9kdW1wX2pzY29uc29sZWxvZ19pbl9zdGRl
cnIgPSBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyCisgICAgICAgIHNlbGYucmVm
ZXJlbmNlX2ZpbGVzID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gIlRlc3RJbnB1dCgnJXMnLCB0aW1lb3V0PSVzLCBuZWVkc19zZXJ2ZXJzPSVzLCByZWZl
cmVuY2VfZmlsZXM9JXMsIHNob3VsZF9ydW5fcGl4ZWxfdGVzdHM9JXMsIHNob3VsZF9kdW1wX2pz
Y29uc29sZWxvZ19pbl9zdGRlcnI9JXMpIiAlIChzZWxmLnRlc3RfbmFtZSwgc2VsZi50aW1lb3V0
LCBzZWxmLm5lZWRzX3NlcnZlcnMsIHNlbGYucmVmZXJlbmNlX2ZpbGVzLCBzZWxmLnNob3VsZF9y
dW5fcGl4ZWxfdGVzdHMsIHNlbGYuc2hvdWxkX2R1bXBfanNjb25zb2xlbG9nX2luX3N0ZGVycikK
KyAgICAgICAgcmV0dXJuICJUZXN0SW5wdXQoJyVzJywgdGltZW91dD0lcywgbmVlZHNfc2VydmVy
cz0lcywgcmVmZXJlbmNlX2ZpbGVzPSVzLCBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3Rk
ZXJyPSVzKSIgJSAoc2VsZi50ZXN0X25hbWUsIHNlbGYudGltZW91dCwgc2VsZi5uZWVkc19zZXJ2
ZXJzLCBzZWxmLnJlZmVyZW5jZV9maWxlcywgc2VsZi5zaG91bGRfZHVtcF9qc2NvbnNvbGVsb2df
aW5fc3RkZXJyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCAzZmI3MjdiYzAy
ZmEyZjAzNWM4ZTA5Yzg3NTRlYjVkNGU4MTNmNmNkLi44MWQxZGRhZmJjM2VkOWMyMWEyZDE0NGQ5
MzlhNzE3ZTUwZjEyOWE2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNDkz
LDYgKzQ5Myw4IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgdGV4dCA9IHN0cmluZ191
dGlscy5kZWNvZGUoc2VsZi5fZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKGJhc2VsaW5lX3Bh
dGgpLCB0YXJnZXRfdHlwZT1zdHIpCiAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoIlxyXG4i
LCAiXG4iKQogCisgICAgX3N1cHBvcnRlZF9yZWZlcmVuY2VfZXh0ZW5zaW9ucyA9IHNldChbJy5o
dG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5odG0nLCAnLnN2ZycsICcueGh0J10pCisKICAgICBk
ZWYgcmVmZXJlbmNlX2ZpbGVzKHNlbGYsIHRlc3RfbmFtZSwgZGV2aWNlX3R5cGU9Tm9uZSk6CiAg
ICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgZXhwZWN0YXRpb24gKD09IG9yICE9KSBhbmQgZmls
ZW5hbWUgcGFpcnMiIiIKIApAQCAtNTI1LDgxICs1MjcsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAKICAgICAgICAgcmV0dXJuIFtzZWxmLmhvc3QuZmlsZXN5c3RlbS5yZWxwYXRoKHRlc3QsIHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpKSBmb3IgdGVzdCBpbiBzZWxmLl9maWxlc3lzdGVtLmdsb2Io
cmUuc3ViKCctZXhwZWN0ZWQuKicsICcuKicsIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxh
eW91dF90ZXN0c19kaXIoKSwgcGF0aCkpKSBpZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZSh0ZXN0
KV0KIAotICAgIGRlZiB0ZXN0cyhzZWxmLCBwYXRocywgZGV2aWNlX3R5cGU9Tm9uZSk6Ci0gICAg
ICAgICIiIlJldHVybiB0aGUgbGlzdCBvZiB0ZXN0cyBmb3VuZC4gQm90aCBnZW5lcmljIGFuZCBw
bGF0Zm9ybS1zcGVjaWZpYyB0ZXN0cyBtYXRjaGluZyBwYXRocyBzaG91bGQgYmUgcmV0dXJuZWQu
IiIiCi0gICAgICAgIGV4cGFuZGVkX3BhdGhzID0gc2VsZi5fZXhwYW5kZWRfcGF0aHMocGF0aHMs
IGRldmljZV90eXBlPWRldmljZV90eXBlKQotICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90ZXN0
cyhleHBhbmRlZF9wYXRocykKLQotICAgIGRlZiBfZXhwYW5kZWRfcGF0aHMoc2VsZiwgcGF0aHMs
IGRldmljZV90eXBlPU5vbmUpOgotICAgICAgICBleHBhbmRlZF9wYXRocyA9IFtdCi0gICAgICAg
IGZzID0gc2VsZi5fZmlsZXN5c3RlbQotICAgICAgICBhbGxfcGxhdGZvcm1fZGlycyA9IFtwYXRo
IGZvciBwYXRoIGluIGZzLmdsb2IoZnMuam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3Bs
YXRmb3JtJywgJyonKSkgaWYgZnMuaXNkaXIocGF0aCldCi0gICAgICAgIGZvciBwYXRoIGluIHBh
dGhzOgotICAgICAgICAgICAgZXhwYW5kZWRfcGF0aHMuYXBwZW5kKHBhdGgpCi0gICAgICAgICAg
ICBpZiBzZWxmLnRlc3RfaXNkaXIocGF0aCkgYW5kIG5vdCBwYXRoLnN0YXJ0c3dpdGgoJ3BsYXRm
b3JtJykgYW5kIG5vdCBmcy5pc2FicyhwYXRoKToKLSAgICAgICAgICAgICAgICBmb3IgcGxhdGZv
cm1fZGlyIGluIGFsbF9wbGF0Zm9ybV9kaXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBmcy5p
c2Rpcihmcy5qb2luKHBsYXRmb3JtX2RpciwgcGF0aCkpIGFuZCBwbGF0Zm9ybV9kaXIgaW4gc2Vs
Zi5iYXNlbGluZV9zZWFyY2hfcGF0aChkZXZpY2VfdHlwZT1kZXZpY2VfdHlwZSk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBleHBhbmRlZF9wYXRocy5hcHBlbmQoc2VsZi5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKGZzLmpvaW4ocGxhdGZvcm1fZGlyLCBwYXRoKSkpCi0KLSAgICAgICAgcmV0dXJu
IGV4cGFuZGVkX3BhdGhzCi0KLSAgICBkZWYgX3JlYWxfdGVzdHMoc2VsZiwgcGF0aHMpOgotICAg
ICAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCBza2lwIHRoZXNlIGRpcmVjdG9yaWVz
Ci0gICAgICAgIHNraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQoWycuc3ZuJywgJ19zdm4nLCAncmVz
b3VyY2VzJywgJ3N1cHBvcnQnLCAnc2NyaXB0LXRlc3RzJywgJ3JlZmVyZW5jZScsICdyZWZ0ZXN0
J10pCi0gICAgICAgIGZpbGVzID0gZmluZF9maWxlcy5maW5kKHNlbGYuX2ZpbGVzeXN0ZW0sIHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRocywgc2tpcHBlZF9kaXJlY3RvcmllcywgcGFydGlh
bChQb3J0Ll9pc190ZXN0X2ZpbGUsIHNlbGYpLCBzZWxmLnRlc3Rfa2V5KQotICAgICAgICByZXR1
cm4gW3NlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10KLQotICAg
ICMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUgd2l0aCB0
aGVzZSBleHRlbnNpb25zLgotICAgIF9zdXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zID0gc2V0KFsn
Lmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5wbCcsICcuaHRtJywgJy5waHAn
LCAnLnN2ZycsICcubWh0JywgJy54aHQnXSkKLSAgICBfc3VwcG9ydGVkX3JlZmVyZW5jZV9leHRl
bnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnhtbCcsICcueGh0bWwnLCAnLmh0bScsICcuc3ZnJywg
Jy54aHQnXSkKLQotICAgIGRlZiBpc193M2NfcmVzb3VyY2VfZmlsZShzZWxmLCBmaWxlc3lzdGVt
LCBkaXJuYW1lLCBmaWxlbmFtZSk6Ci0gICAgICAgIHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oZGly
bmFtZSwgZmlsZW5hbWUpCi0gICAgICAgIHczY19wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYu
bGF5b3V0X3Rlc3RzX2RpcigpLCAiaW1wb3J0ZWQiLCAidzNjIikKLSAgICAgICAgaWYgbm90IHcz
Y19wYXRoIGluIHBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBpZiBu
b3Qgc2VsZi5fdzNjX3Jlc291cmNlX2ZpbGVzOgotICAgICAgICAgICAgZmlsZXBhdGggPSBmaWxl
c3lzdGVtLmpvaW4odzNjX3BhdGgsICJyZXNvdXJjZXMiLCAicmVzb3VyY2UtZmlsZXMuanNvbiIp
Ci0gICAgICAgICAgICBqc29uX2RhdGEgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGZpbGVw
YXRoKQotICAgICAgICAgICAgc2VsZi5fdzNjX3Jlc291cmNlX2ZpbGVzID0ganNvbi5sb2Fkcyhq
c29uX2RhdGEpCi0KLSAgICAgICAgc3VicGF0aCA9IHBhdGhbbGVuKHczY19wYXRoKSArIDE6XS5y
ZXBsYWNlKCdcXCcsICcvJykKLSAgICAgICAgaWYgc3VicGF0aCBpbiBzZWxmLl93M2NfcmVzb3Vy
Y2VfZmlsZXNbImZpbGVzIl06Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3Ig
ZGlycGF0aCBpbiBzZWxmLl93M2NfcmVzb3VyY2VfZmlsZXNbImRpcmVjdG9yaWVzIl06Ci0gICAg
ICAgICAgICBpZiBkaXJwYXRoIGluIHN1YnBhdGg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRy
dWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgIyBJZiBh
bnkgY2hhbmdlcyBhcmUgbWFkZSBoZXJlIGJlIHN1cmUgdG8gdXBkYXRlIHRoZSBpc1VzZWRJblJl
ZnRlc3QgbWV0aG9kIGluIG9sZC1ydW4td2Via2l0LXRlc3RzIGFzIHdlbGwuCi0gICAgZGVmIGlz
X3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAg
ICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCdyZWYtJykgb3IgZmlsZW5hbWUuc3RhcnRzd2l0
aCgnbm90cmVmLScpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZmlsZW5hbWVf
d2lob3V0X2V4dCwgZXh0ID0gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAg
aWYgZXh0IG5vdCBpbiBQb3J0Ll9zdXBwb3J0ZWRfcmVmZXJlbmNlX2V4dGVuc2lvbnM6Ci0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZm9yIHN1ZmZpeCBpbiBbJy1leHBlY3RlZCcs
ICctZXhwZWN0ZWQtbWlzbWF0Y2gnLCAnLXJlZicsICctbm90cmVmJ106Ci0gICAgICAgICAgICBp
ZiBmaWxlbmFtZV93aWhvdXRfZXh0LmVuZHN3aXRoKHN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIF9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Ci0g
ICAgICAgICIiIlJldHVybiB0cnVlIGlmIGZpbGVuYW1lIGlzIG9uZSBvZiB0aGUgZmlsZSBleHRl
bnNpb25zIHdlIHdhbnQgdG8gcnVuIGEgdGVzdCBvbi4iIiIKLSAgICAgICAgZXh0ZW5zaW9uID0g
ZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxlbmFtZSlbMV0KLSAgICAgICAgcmV0dXJuIGV4dGVuc2lv
biBpbiBQb3J0Ll9zdXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zCi0KLSAgICBkZWYgX2lzX3Rlc3Rf
ZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6Ci0gICAgICAgIGlmIG5v
dCBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Ci0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgUG9ydC5pc19yZWZlcmVuY2VfaHRt
bF9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICBpZiBzZWxmLmlzX3czY19yZXNvdXJjZV9maWxlKGZpbGVzeXN0ZW0s
IGRpcm5hbWUsIGZpbGVuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCiAgICAgZGVmIHRlc3Rfa2V5KHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAg
ICIiIlR1cm5zIGEgdGVzdCBuYW1lIGludG8gYSBsaXN0IHdpdGggdHdvIHN1Ymxpc3RzLCB0aGUg
bmF0dXJhbCBrZXkgb2YgdGhlCiAgICAgICAgIGRpcm5hbWUsIGFuZCB0aGUgbmF0dXJhbCBrZXkg
b2YgdGhlIGJhc2VuYW1lLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2VfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0
dGVzdC5weQppbmRleCAxMmU4MTBmNDc4NmNlNWU4ODlkZjMwYmYxMmRhNGViMzgxMDkyNjg2Li4x
ZDQwMjNiMGI5MTU2ZTQ3N2YzNmQwOWJlMjRhZDMxYTZiYjQ4YjcyIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weQpAQCAtMjMyLDYzICsyMzIsNiBAQCBj
bGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuX2ZpbGVzeXN0
ZW0gPSBNb2NrRmlsZVN5c3RlbSh7Jy9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Zvby9UZXN0RXhwZWN0YXRpb25zJzogJyd9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9y
dC51c2VzX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSkKIAotICAgIGRlZiB0ZXN0X2ZpbmRfbm9f
cGF0aHNfc3BlY2lmaWVkKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0
aF90ZXN0cz1UcnVlKQotICAgICAgICB0ZXN0cyA9IHBvcnQudGVzdHMoW10pCi0gICAgICAgIHNl
bGYuYXNzZXJ0Tm90RXF1YWwobGVuKHRlc3RzKSwgMCkKLQotICAgIGRlZiB0ZXN0X2ZpbmRfb25l
X3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCh3aXRoX3Rlc3RzPVRy
dWUpCi0gICAgICAgIHRlc3RzID0gcG9ydC50ZXN0cyhbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdl
Lmh0bWwnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAxKQotCi0gICAg
ZGVmIHRlc3RfZmluZF9nbG9iKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
d2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0ZXN0cyA9IHBvcnQudGVzdHMoWydmYWlsdXJlcy9l
eHBlY3RlZC9pbSonXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAyKQot
Ci0gICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBwZWRfZGlyZWN0b3JpZXMoc2VsZik6Ci0gICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCh3aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHRlc3Rz
ID0gcG9ydC50ZXN0cyhbJ3VzZXJzY3JpcHRzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4o
J3VzZXJzY3JpcHRzL3Jlc291cmNlcy9pZnJhbWUuaHRtbCcsIHRlc3RzKQotCi0gICAgZGVmIHRl
c3RfZmluZF93aXRoX3NraXBwZWRfZGlyZWN0b3JpZXNfMihzZWxmKToKLSAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVzdHM9VHJ1ZSkKLSAgICAgICAgdGVzdHMgPSBwb3J0LnRl
c3RzKFsndXNlcnNjcmlwdHMvcmVzb3VyY2VzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
dGVzdHMsIFtdKQotCi0gICAgZGVmIHRlc3RfaXNfdGVzdF9maWxlKHNlbGYpOgotICAgICAgICBw
b3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5faXNf
dGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby5odG1sJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0s
ICcnLCAnZm9vLnNodG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll9pc190ZXN0
X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLnN2ZycpKQotICAgICAgICBzZWxm
LmFzc2VydFRydWUocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywg
J3Rlc3QtcmVmLXRlc3QuaHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lz
X3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdmb28ucG5nJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVt
LCAnJywgJ2Zvby1leHBlY3RlZC5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9y
dC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5z
dmcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5o
b3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnhodCcpKQotICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdm
b28tZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBv
cnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQt
bWlzbWF0Y2guc3ZnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9m
aWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54aHRt
bCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhv
c3QuZmlsZXN5c3RlbSwgJycsICdmb28tcmVmLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLW5v
dHJlZi5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxl
KHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1ub3RyZWYueGh0JykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAn
JywgJ2Zvby1yZWYueGh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9pc190
ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAncmVmLWZvby5odG1sJykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lz
dGVtLCAnJywgJ25vdHJlZi1mb28ueGhyJykpCi0KLSAgICBkZWYgdGVzdF9pc19yZWZlcmVuY2Vf
aHRtbF9maWxlKHNlbGYpOgotICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oKQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVz
eXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3Rl
ZC1taXNtYXRjaC54bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVmZXJl
bmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAn
JywgJ2Zvby1ub3RyZWYuc3ZnJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5pc19y
ZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLmh0bWwnKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShQb3J0LmlzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwg
JycsICdmb28tZXhwZWN0ZWQudHh0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5p
c19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnNodG1s
JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxl
KGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnBocCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1l
eHBlY3RlZC5taHQnKSkKLQogICAgIGRlZiB0ZXN0X3JlZmVyZW5jZV9maWxlcyhzZWxmKToKICAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVzdHM9VHJ1ZSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0LnJlZmVyZW5jZV9maWxlcygncGFzc2VzL3N2Z3JlZnRlc3Quc3Zn
JyksIFsoJz09JywgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAnL3Bhc3Nlcy9zdmdyZWZ0ZXN0
LWV4cGVjdGVkLnN2ZycpXSkKQEAgLTMzOSwxNCArMjgyLDYgQEAgY2xhc3MgUG9ydFRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQudGVzdF9pc2Rp
cigncGFzc2VzL2RvZXNfbm90X2V4aXN0Lmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShwb3J0LnRlc3RfaXNkaXIoJ3Bhc3Nlcy9kb2VzX25vdF9leGlzdC8nKSkKIAotICAgIGRlZiB0
ZXN0X3Rlc3RzKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0
cz1UcnVlKQotICAgICAgICB0ZXN0cyA9IHBvcnQudGVzdHMoW10pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0SW4oJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCB0ZXN0cykKLQotICAgICAgICB0ZXN0cyA9IHBvcnQu
dGVzdHMoWydwYXNzZXMnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigncGFzc2VzL3RleHQuaHRt
bCcsIHRlc3RzKQotCiAgICAgZGVmIHRlc3RfYnVpbGRfcGF0aChzZWxmKToKICAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KAogICAgICAgICAgICAgZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUy
KG91dHB1dD0nL2RlZmF1bHQtYnVpbGQtcGF0aC9EZWJ1ZycpLApAQCAtMzYwLDMwICsyOTUsNiBA
QCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICkKICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9idWlsZF9wYXRoKCksICcvbXktYnVpbGQtZGlyZWN0b3J5
L0RlYnVnLWVtYmVkZGVkLXBvcnQnKQogCi0gICAgZGVmIHRlc3RfaXNfdzNjX3Jlc291cmNlX2Zp
bGUoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQu
aG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwb3J0LmxheW91dF90ZXN0c19kaXIoKSAr
ICIvaW1wb3J0ZWQvdzNjL3Jlc291cmNlcy9yZXNvdXJjZS1maWxlcy5qc29uIiwgIiIiCi17ImRp
cmVjdG9yaWVzIjogWwotIndlYi1wbGF0Zm9ybS10ZXN0cy9jb21tb24iLAotIndlYi1wbGF0Zm9y
bS10ZXN0cy9kb20vbm9kZXMvRG9jdW1lbnQtY3JlYXRlRWxlbWVudC1uYW1lc3BhY2UtdGVzdHMi
LAotIndlYi1wbGF0Zm9ybS10ZXN0cy9mb250cyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
YnJvd3NlcnMvYnJvd3NpbmctdGhlLXdlYi9uYXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvc291
cmNlL3N1cHBvcnQiLAotIndlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jyb3dzaW5n
LXRoZS13ZWIvdW5sb2FkaW5nLWRvY3VtZW50cy9zdXBwb3J0IiwKLSJ3ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9icm93c2Vycy9oaXN0b3J5L3RoZS1oaXN0b3J5LWludGVyZmFjZS9ub24tYXV0b21h
dGVkIiwKLSJ3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9oaXN0b3J5L3RoZS1sb2Nh
dGlvbi1pbnRlcmZhY2Uvbm9uLWF1dG9tYXRlZCIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL2ltYWdl
cyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2VycyIsCi0id2ViLXBsYXRmb3Jt
LXRlc3RzL3Rvb2xzIgotXSwgImZpbGVzIjogWwotIndlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRw
UmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUu
aHRtbCIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LXN5bmMtbm90LWhhbmctc2NyaXB0bG9hZGVyLXN1YmZyYW1lLmh0bWwiCi1dfSIiIikKLSAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5m
aWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzMiLCAicmVz
b3VyY2VfZmlsZS5odG1sIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5pc193M2Nf
cmVzb3VyY2VfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGly
KCkgKyAiL2ltcG9ydGVkL3czYyIsICJyZXNvdXJjZV9maWxlLmh0bWwiKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRGYWxzZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lz
dGVtLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIsICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVy
LXNjcmlwdHMtc3ViZnJhbWUuaHRtbC5odG1sIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShw
b3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91
dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRw
UmVxdWVzdCIsICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJh
bWUuaHRtbCIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5pc193M2NfcmVzb3VyY2Vf
ZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0ZUVs
ZW1lbnQtbmFtZXNwYWNlLXRlc3RzIiwgInRlc3QuaHRtbCIpKQotCiAgICAgZGVmIHRlc3Rfamhi
dWlsZF93cmFwcGVyKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9u
YW1lPSdmb28nKQogICAgICAgICBwb3J0LnBvcnRfbmFtZSA9ICdmb28nCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9mYWN0b3J5LnB5CmluZGV4IDUwOThlZDkzZmRmZmMzZDM5YWZkYjZhNmM2ZWQ4
MDNlZGIzZjk5OGEuLjQwM2ViNzBiN2E0YjMyOGNiNzU0YThmOWQzYzg5N2YxZmIwYzI5NzcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CkBAIC0xMTYsNyArMTE2LDYgQEAg
Y2xhc3MgUG9ydEZhY3Rvcnkob2JqZWN0KToKICAgICAgICAgJ2pzY19vbmx5LkpzY09ubHlQb3J0
JywKICAgICAgICAgJ21hYy5NYWNDYXRhbHlzdFBvcnQnLAogICAgICAgICAnbWFjLk1hY1BvcnQn
LAotICAgICAgICAnbW9ja19kcnQuTW9ja0RSVFBvcnQnLAogICAgICAgICAndGVzdC5UZXN0UG9y
dCcsCiAgICAgICAgICd3aW4uRlRXUG9ydCcsCiAgICAgICAgICd3aW4uV2luQ2Fpcm9Qb3J0JywK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydC5weQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWIxZjM0NjA3OWQxZGI4ZjdkNmEwNTQyMjkyZDkzOWFjZDg4YTdhMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvbW9ja19kcnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBA
QAotIyBDb3B5cmlnaHQgKGMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlv
bi4KLSMgICAgICogTmVpdGhlciB0aGUgR29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0iIiIKLVRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQg
aW50ZXJmYWNlIHRoYXQgb3ZlcnJpZGVzIG90aGVyCi1wb3J0cyBhbmQgY2hhbmdlcyB0aGUgRHJp
dmVyIGJpbmFyeSB0byAiTW9ja0RSVCIuCi0KLVRoZSBNb2NrRFJUIG9iamVjdHMgZW11bGF0ZSB3
aGF0IGEgcmVhbCBEUlQgd291bGQgZG8uIEluIHBhcnRpY3VsYXIsIHRoZXkKLXJldHVybiB0aGUg
b3V0cHV0IGEgcmVhbCBEUlQgd291bGQgcmV0dXJuIGZvciBhIGdpdmVuIHRlc3QsIGFzc3VtaW5n
IHRoYXQKLXRlc3QgYWN0dWFsbHkgcGFzc2VzIChleGNlcHQgZm9yIHJlZnRlc3RzLCB3aGljaCBj
dXJyZW50bHkgY2F1c2UgdGhlCi1Nb2NrRFJUIHRvIGNyYXNoKS4KLSIiIgotCi1pbXBvcnQgYmFz
ZTY0Ci1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBz
eXMKLQotIyBTaW5jZSB3ZSBleGVjdXRlIHRoaXMgc2NyaXB0IGRpcmVjdGx5IGFzIHBhcnQgb2Yg
dGhlIHVuaXQgdGVzdHMsIHdlIG5lZWQgdG8gZW5zdXJlCi0jIHRoYXQgVG9vbHMvU2NyaXB0cyBp
cyBpbiBzeXMucGF0aCBmb3IgdGhlIG5leHQgaW1wb3J0cyB0byB3b3JrIGNvcnJlY3RseS4KLXNj
cmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFt
ZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkKLWlmIHNjcmlw
dF9kaXIgbm90IGluIHN5cy5wYXRoOgotICAgIHN5cy5wYXRoLmFwcGVuZChzY3JpcHRfZGlyKQot
Ci1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9z
dAotZnJvbSB3ZWJraXRweS5wb3J0LmRyaXZlciBpbXBvcnQgRHJpdmVySW5wdXQsIERyaXZlck91
dHB1dCwgRHJpdmVyUHJveHkKLWZyb20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0
RmFjdG9yeQotCi1mcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgc3RyaW5nX3V0aWxzCi0KLV9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKLQotCi1jbGFzcyBNb2NrRFJUUG9ydChvYmpl
Y3QpOgotICAgIHBvcnRfbmFtZSA9ICdtb2NrJwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVm
IGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6
Ci0gICAgICAgIHJldHVybiBwb3J0X25hbWUKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gUG9ydEZh
Y3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZS5yZXBsYWNlKCdtb2NrLScsICcnKSwgKiprd2FyZ3Mp
Ci0KLSAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBnZXRh
dHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFtZSkKLQotICAgIGRlZiBjaGVja19idWlsZChzZWxmKToK
LSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9u
dW1iZXIsIG5vX3RpbWVvdXQ9RmFsc2UpOgotICAgICAgICAjIFRoZSBtYWdpYyBvZiB0aGUgTW9j
a0RSVFBvcnQgaXMgdGhhdCB3ZSBjcmVhdGUgYSBkcml2ZXIgdGhhdCBoYXMgYQotICAgICAgICAj
IGNtZF9saW5lKCkgbWV0aG9kIG1vbmtleS1wYXRjaGVkIHRvIGludm9rZSB0aGlzIHNjcmlwdCBp
bnN0ZWFkIG9mIERSVC4KLSAgICAgICAgcmV0dXJuIERyaXZlclByb3h5KHNlbGYsIHdvcmtlcl9u
dW1iZXIsIHNlbGYuX21vY2tlZF9kcml2ZXJfbWFrZXIsIHBpeGVsX3Rlc3RzPXNlbGYuZ2V0X29w
dGlvbigncGl4ZWxfdGVzdHMnKSwgbm9fdGltZW91dD1ub190aW1lb3V0KQotCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBfbW9ja2VkX2RyaXZlcl9tYWtlcihwb3J0LCB3b3JrZXJfbnVtYmVy
LCBwaXhlbF90ZXN0cywgbm9fdGltZW91dD1GYWxzZSk6Ci0gICAgICAgIHBhdGhfdG9fdGhpc19m
aWxlID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0uYWJzcGF0aChfX2ZpbGVfXy5yZXBsYWNlKCcucHlj
JywgJy5weScpKQotICAgICAgICBkcml2ZXIgPSBwb3J0Ll9fZGVsZWdhdGUuX2RyaXZlcl9jbGFz
cygpKHBvcnQsIHdvcmtlcl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQotICAgICAg
ICBkcml2ZXIuY21kX2xpbmUgPSBwb3J0Ll9vdmVycmlkaW5nX2NtZF9saW5lKGRyaXZlci5jbWRf
bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0Ll9fZGVsZWdhdGUuX3BhdGhfdG9fZHJpdmVyKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF90b190aGlz
X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9ydC5fX2RlbGVnYXRlLm5hbWUoKSkKLSAgICAgICAgcmV0dXJuIGRyaXZlcgotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBfb3ZlcnJpZGluZ19jbWRfbGluZShvcmlnaW5hbF9jbWRf
bGluZSwgZHJpdmVyX3BhdGgsIHB5dGhvbl9leGUsIHRoaXNfZmlsZSwgcG9ydF9uYW1lKToKLSAg
ICAgICAgZGVmIG5ld19jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAg
ICAgICAgICBjbWRfbGluZSA9IG9yaWdpbmFsX2NtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVz
dF9hcmdzKQotICAgICAgICAgICAgaW5kZXggPSBjbWRfbGluZS5pbmRleChkcml2ZXJfcGF0aCkK
LSAgICAgICAgICAgIGNtZF9saW5lW2luZGV4OmluZGV4ICsgMV0gPSBbcHl0aG9uX2V4ZSwgdGhp
c19maWxlLCAnLS1wbGF0Zm9ybScsIHBvcnRfbmFtZV0KLSAgICAgICAgICAgIHJldHVybiBjbWRf
bGluZQotCi0gICAgICAgIHJldHVybiBuZXdfY21kX2xpbmUKLQotICAgIGRlZiBzdGFydF9oZWxw
ZXIoc2VsZiwgcGl4ZWxfdGVzdHM9RmFsc2UsIHByZWZlcl9pbnRlZ3JhdGVkX2dwdT1GYWxzZSk6
Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihzZWxmLCBudW1iZXJf
b2Zfc2VydmVycyk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6Ci0g
ICAgICAgIHBhc3MKLQotICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKHNlbGYpOgotICAgICAgICBw
YXNzCi0KLSAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNz
Ci0KLSAgICBkZWYgc2hvd19yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1l
KToKLSAgICAgICAgcGFzcwotCi0KLWRlZiBtYWluKGFyZ3YsIGhvc3QsIHN0ZGluLCBzdGRvdXQs
IHN0ZGVycik6Ci0gICAgIiIiUnVuIHRoZSB0ZXN0cy4iIiIKLQotICAgIG9wdGlvbnMsIGFyZ3Mg
PSBwYXJzZV9vcHRpb25zKGFyZ3YpCi0gICAgZHJ0ID0gTW9ja0RSVChvcHRpb25zLCBhcmdzLCBo
b3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCi0gICAgcmV0dXJuIGRydC5ydW4oKQotCi0KLWRl
ZiBwYXJzZV9vcHRpb25zKGFyZ3YpOgotICAgICMgRklYTUU6IFdlIGhhdmUgdG8gZG8gY3VzdG9t
IGFyZyBwYXJzaW5nIGluc3RlYWQgb2YgdXNpbmcgdGhlIG9wdHBhcnNlCi0gICAgIyBtb2R1bGUu
ICBGaXJzdCwgQ2hyb21pdW0gYW5kIG5vbi1DaHJvbWl1bSBEUlRzIGhhdmUgYSBkaWZmZXJlbnQg
YXJndW1lbnQKLSAgICAjIHN5bnRheC4gIENocm9taXVtIHVzZXMgLS1waXhlbC10ZXN0cz08cGF0
aD4sIGFuZCBub24tQ2hyb21pdW0gdXNlcwotICAgICMgLS1waXhlbC10ZXN0cyBhcyBhIGJvb2xl
YW4gZmxhZy4gU2Vjb25kLCB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdG8gbGlzdAotICAgICMgZXZl
cnkgY29tbWFuZCBsaW5lIGZsYWcgRFJUIGFjY2VwdHMsIGJ1dCBvcHRwYXJzZSBjb21wbGFpbnMg
YWJvdXQKLSAgICAjIHVucmVjb2duaXplZCBmbGFncy4gQXQgc29tZSBwb2ludCBpdCBtaWdodCBi
ZSBnb29kIHRvIHNoYXJlIGEgY29tbW9uCi0gICAgIyBEUlQgb3B0aW9ucyBjbGFzcyBiZXR3ZWVu
IHRoaXMgZmlsZSBhbmQgd2Via2l0LnB5IGFuZCBjaHJvbWl1bS5weQotICAgICMganVzdCB0byBn
ZXQgYmV0dGVyIHR5cGUgY2hlY2tpbmcuCi0gICAgcGxhdGZvcm1faW5kZXggPSBhcmd2LmluZGV4
KCctLXBsYXRmb3JtJykKLSAgICBwbGF0Zm9ybSA9IGFyZ3ZbcGxhdGZvcm1faW5kZXggKyAxXQot
Ci0gICAgcGl4ZWxfdGVzdHMgPSAnLS1waXhlbC10ZXN0cycgaW4gYXJndgotICAgIHJldHVybiAo
b3B0cGFyc2UuVmFsdWVzKHsncGxhdGZvcm0nOiBwbGF0Zm9ybSwgJ3BpeGVsX3Rlc3RzJzogcGl4
ZWxfdGVzdHN9KSwgYXJndikKLQotCi1jbGFzcyBNb2NrRFJUKG9iamVjdCk6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6
Ci0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHNlbGYuX2FyZ3MgPSBh
cmdzCi0gICAgICAgIHNlbGYuX2hvc3QgPSBob3N0Ci0gICAgICAgIHNlbGYuX3N0ZG91dCA9IHN0
ZG91dAotICAgICAgICBzZWxmLl9zdGRpbiA9IHN0ZGluCi0gICAgICAgIHNlbGYuX3N0ZGVyciA9
IHN0ZGVycgotCi0gICAgICAgIHBvcnRfbmFtZSA9IE5vbmUKLSAgICAgICAgaWYgb3B0aW9ucy5w
bGF0Zm9ybToKLSAgICAgICAgICAgIHBvcnRfbmFtZSA9IG9wdGlvbnMucGxhdGZvcm0KLSAgICAg
ICAgc2VsZi5fcG9ydCA9IFBvcnRGYWN0b3J5KGhvc3QpLmdldChwb3J0X25hbWU9cG9ydF9uYW1l
LCBvcHRpb25zPW9wdGlvbnMpCi0gICAgICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3Jl
YXRlX2RyaXZlcigwKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgd2hpbGUgVHJ1ZToK
LSAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9zdGRpbi5yZWFkbGluZSgpCi0gICAgICAgICAgICBp
ZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgZHJpdmVy
X2lucHV0ID0gc2VsZi5pbnB1dF9mcm9tX2xpbmUobGluZSkKLSAgICAgICAgICAgIGRpcm5hbWUs
IGJhc2VuYW1lID0gc2VsZi5fcG9ydC5zcGxpdF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUp
Ci0gICAgICAgICAgICBpc19yZWZ0ZXN0ID0gKHNlbGYuX3BvcnQucmVmZXJlbmNlX2ZpbGVzKGRy
aXZlcl9pbnB1dC50ZXN0X25hbWUpIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLCBkaXJu
YW1lLCBiYXNlbmFtZSkpCi0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLm91dHB1dF9mb3JfdGVz
dChkcml2ZXJfaW5wdXQsIGlzX3JlZnRlc3QpCi0gICAgICAgICAgICBzZWxmLndyaXRlX3Rlc3Rf
b3V0cHV0KGRyaXZlcl9pbnB1dCwgb3V0cHV0LCBpc19yZWZ0ZXN0KQotCi0gICAgZGVmIGlucHV0
X2Zyb21fbGluZShzZWxmLCBsaW5lKToKLSAgICAgICAgdmFscyA9IGxpbmUuc3RyaXAoKS5zcGxp
dCgiJyIpCi0gICAgICAgIGlmIGxlbih2YWxzKSA9PSAxOgotICAgICAgICAgICAgdXJpID0gdmFs
c1swXQotICAgICAgICAgICAgY2hlY2tzdW0gPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB1cmkgPSB2YWxzWzBdCi0gICAgICAgICAgICBjaGVja3N1bSA9IHZhbHNbMV0KLSAgICAg
ICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBvciB1cmkuc3RhcnRzd2l0aCgnaHR0cHM6
Ly8nKToKLSAgICAgICAgICAgIHRlc3RfbmFtZSA9IHNlbGYuX2RyaXZlci51cmlfdG9fdGVzdCh1
cmkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUodXJpKQotCi0gICAgICAgIHJldHVybiBEcml2ZXJJbnB1dCh0
ZXN0X25hbWUsIDAsIGNoZWNrc3VtLCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotCi0gICAg
ZGVmIG91dHB1dF9mb3JfdGVzdChzZWxmLCB0ZXN0X2lucHV0LCBpc19yZWZ0ZXN0KToKLSAgICAg
ICAgcG9ydCA9IHNlbGYuX3BvcnQKLSAgICAgICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVk
X3RleHQodGVzdF9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgIGFjdHVhbF9hdWRpbyA9IHBvcnQu
ZXhwZWN0ZWRfYXVkaW8odGVzdF9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgIGFjdHVhbF9pbWFn
ZSA9IE5vbmUKLSAgICAgICAgYWN0dWFsX2NoZWNrc3VtID0gTm9uZQotICAgICAgICBpZiBpc19y
ZWZ0ZXN0OgotICAgICAgICAgICAgIyBNYWtlIHVwIHNvbWUgb3V0cHV0IGZvciByZWZ0ZXN0cy4K
LSAgICAgICAgICAgIGFjdHVhbF90ZXh0ID0gJ3JlZmVyZW5jZSB0ZXh0XG4nCi0gICAgICAgICAg
ICBhY3R1YWxfY2hlY2tzdW0gPSAnbW9jay1jaGVja3N1bScKLSAgICAgICAgICAgIGFjdHVhbF9p
bWFnZSA9ICdibGFuaycKLSAgICAgICAgICAgIGlmIHRlc3RfaW5wdXQudGVzdF9uYW1lLmVuZHN3
aXRoKCctbWlzbWF0Y2guaHRtbCcpOgotICAgICAgICAgICAgICAgIGFjdHVhbF90ZXh0ID0gJ25v
dCByZWZlcmVuY2UgdGV4dFxuJwotICAgICAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9ICdu
b3QtbW9jay1jaGVja3N1bScKLSAgICAgICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnbm90IGJs
YW5rJwotICAgICAgICBlbGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5w
dXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0
ZWRfY2hlY2tzdW0odGVzdF9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgICAgICBhY3R1YWxfaW1h
Z2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfaW5wdXQudGVzdF9uYW1lKQotCi0gICAgICAg
IHJldHVybiBEcml2ZXJPdXRwdXQoYWN0dWFsX3RleHQsIGFjdHVhbF9pbWFnZSwgYWN0dWFsX2No
ZWNrc3VtLCBhY3R1YWxfYXVkaW8pCi0KLSAgICBkZWYgd3JpdGVfdGVzdF9vdXRwdXQoc2VsZiwg
dGVzdF9pbnB1dCwgb3V0cHV0LCBpc19yZWZ0ZXN0KToKLSAgICAgICAgaWYgb3V0cHV0LmF1ZGlv
OgotICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKCdDb250ZW50LVR5cGU6IGF1ZGlvL3dh
dlxuJykKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29udGVudC1UcmFuc2Zlci1F
bmNvZGluZzogYmFzZTY0XG4nKQotICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGJhc2U2
NC5iNjRlbmNvZGUob3V0cHV0LmF1ZGlvKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNl
bGYuX3N0ZG91dC53cml0ZSgnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4nKQotICAgICAgICAg
ICAgIyBGSVhNRTogTm90ZSB0aGF0IHdlIGRvbid0IGVuc3VyZSB0aGVyZSBpcyBhIHRyYWlsaW5n
IG5ld2xpbmUhCi0gICAgICAgICAgICAjIFRoaXMgbWlycm9ycyBhY3R1YWwgKE1hYykgRFJUIGJl
aGF2aW9yIGJ1dCBpcyBhIGJ1Zy4KLSAgICAgICAgICAgIGlmIG91dHB1dC50ZXh0OgotICAgICAg
ICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZShvdXRwdXQudGV4dCkKLQotICAgICAgICBzZWxm
Ll9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCi0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhl
bF90ZXN0cyBhbmQgb3V0cHV0LmltYWdlX2hhc2g6Ci0gICAgICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoJ1xuJykKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQWN0dWFsSGFzaDog
JXNcbicgJSBvdXRwdXQuaW1hZ2VfaGFzaCkKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0
ZSgnRXhwZWN0ZWRIYXNoOiAlc1xuJyAlIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCkKLSAgICAgICAg
ICAgIGlmIG91dHB1dC5pbWFnZV9oYXNoICE9IHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAg
ICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcG5nXG4n
KQotICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29udGVudC1MZW5ndGg6ICVz
XG4nICUgbGVuKG91dHB1dC5pbWFnZSkpCi0gICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0Lndy
aXRlKHN0cmluZ191dGlscy5kZWNvZGUob3V0cHV0LmltYWdlLCB0YXJnZXRfdHlwZT1zdHIpKQot
ICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0ZcbicpCi0gICAgICAgIHNlbGYuX3N0ZG91
dC5mbHVzaCgpCi0gICAgICAgIHNlbGYuX3N0ZGVyci53cml0ZSgnI0VPRlxuJykKLSAgICAgICAg
c2VsZi5fc3RkZXJyLmZsdXNoKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAj
IE5vdGUgdGhhdCB0aGUgTW9jayBpbiBNb2NrRFJUIHJlZmVycyB0byB0aGUgZmFjdCB0aGF0IGl0
IGlzIGVtdWxhdGluZyBhCi0gICAgIyByZWFsIERSVCwgYW5kIGFzIHN1Y2gsIGl0IG5lZWRzIGFj
Y2VzcyB0byBhIHJlYWwgU3lzdGVtSG9zdCwgbm90IGEgTW9ja1N5c3RlbUhvc3QuCi0gICAgc3lz
LmV4aXQobWFpbihzeXMuYXJndlsxOl0sIFN5c3RlbUhvc3QoKSwgc3lzLnN0ZGluLCBzeXMuc3Rk
b3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9tb2NrX2RydF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2Nr
X2RydF91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3MzgxN2M4
YzEwYTlhN2YzYjNhZDcwNzQ0MTg1ODJjMDRkOGMwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19k
cnRfdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMgZm9yIE1vY2tEUlQuIiIiCi0KLWltcG9ydCB1bml0dGVz
dAotCi1mcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgU3RyaW5nSU8KLQotZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20g
d2Via2l0cHkucG9ydCBpbXBvcnQgbW9ja19kcnQKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
cG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCB0ZXN0Ci1mcm9tIHdlYmtp
dHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9ydEZhY3RvcnkKLWZyb20gd2Via2l0cHkudG9vbCBp
bXBvcnQgbW9ja3Rvb2wKLQotCi1tb2NrX29wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhj
b25maWd1cmF0aW9uPSdSZWxlYXNlJykKLQotCi1jbGFzcyBNb2NrRFJUUG9ydFRlc3QocG9ydF90
ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgotCi0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25z
PW1vY2tfb3B0aW9ucyk6Ci0gICAgICAgIGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAg
IHRlc3QuYWRkX3VuaXRfdGVzdHNfdG9fbW9ja19maWxlc3lzdGVtKGhvc3QuZmlsZXN5c3RlbSkK
LSAgICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KGhvc3QsIHBvcnRfbmFtZT0nbW9j
ay1tYWMtbGlvbicsIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIGRlZiB0ZXN0X3BvcnRfbmFtZV9p
bl9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZHJ0Lk1v
Y2tEUlRQb3J0KE1vY2tTeXN0ZW1Ib3N0KCksIHBvcnRfbmFtZT0nbW9jay10ZXN0JykpCi0KLSAg
ICBkZWYgdGVzdF9jaGVja19zeXNfZGVwcyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVm
IHRlc3RfZGlmZl9pbWFnZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlm
Zl9pbWFnZV9jcmFzaGVkKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF91c2Vz
X2FwYWNoZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3Rf
c3RhcnRfaGVscGVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgaW50ZWdyYXRpb25f
dGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYg
aW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fZmFpbHMoc2VsZik6Ci0gICAgICAgIHBhc3MK
LQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X3dlYnNvY2tldF9zZXJ2ZXJfX25vcm1hbChzZWxm
KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3Rfd2Vic29ja2V0X3Nl
cnZlcl9fZmFpbHMoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90
ZXN0X2hlbHBlcihzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNo
X2xvZyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfY2hlY2tfYnVpbGQoc2Vs
Zik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0ZXN0X2FzYW5fdXBsb2FkX2NvbmZpZ3VyYXRp
b24oc2VsZik6Ci0gICAgICAgIHBhc3MKLQotCi1jbGFzcyBNb2NrRFJUVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6Ci0gICAgZGVmIGlucHV0X2xpbmUoc2VsZiwgcG9ydCwgdGVzdF9uYW1lLCBjaGVj
a3N1bT1Ob25lKToKLSAgICAgICAgdXJsID0gcG9ydC5jcmVhdGVfZHJpdmVyKDApLnRlc3RfdG9f
dXJpKHRlc3RfbmFtZSkKLSAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKToKLSAg
ICAgICAgICAgIHVybCA9IHVybFtsZW4oJ2ZpbGU6Ly8nKTpdCi0KLSAgICAgICAgaWYgY2hlY2tz
dW06Ci0gICAgICAgICAgICByZXR1cm4gdXJsICsgIiciICsgY2hlY2tzdW0gKyAnXG4nCi0gICAg
ICAgIHJldHVybiB1cmwgKyAnXG4nCi0KLSAgICBkZWYgZXh0cmFfYXJncyhzZWxmLCBwaXhlbF90
ZXN0cyk6Ci0gICAgICAgIGlmIHBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgcmV0dXJuIFsnLS1w
aXhlbC10ZXN0cycsICctJ10KLSAgICAgICAgcmV0dXJuIFsnLSddCi0KLSAgICBkZWYgbWFrZV9k
cnQoc2VsZiwgb3B0aW9ucywgYXJncywgaG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKLSAg
ICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1vY2tEUlQob3B0aW9ucywgYXJncywgaG9zdCwgc3RkaW4s
IHN0ZG91dCwgc3RkZXJyKQotCi0gICAgZGVmIG1ha2VfaW5wdXRfb3V0cHV0KHNlbGYsIHBvcnQs
IHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkX2NoZWNrc3VtLCBkcnRfb3V0cHV0LCBkcnRfaW5wdXQ9Tm9uZSwgZXhwZWN0ZWRfdGV4dD1O
b25lKToKLSAgICAgICAgaWYgcGl4ZWxfdGVzdHM6Ci0gICAgICAgICAgICBpZiBub3QgZXhwZWN0
ZWRfY2hlY2tzdW06Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBwb3J0LmV4
cGVjdGVkX2NoZWNrc3VtKHRlc3RfbmFtZSkKLSAgICAgICAgaWYgbm90IGRydF9pbnB1dDoKLSAg
ICAgICAgICAgIGRydF9pbnB1dCA9IHNlbGYuaW5wdXRfbGluZShwb3J0LCB0ZXN0X25hbWUsIGV4
cGVjdGVkX2NoZWNrc3VtKQotICAgICAgICB0ZXh0X291dHB1dCA9IGV4cGVjdGVkX3RleHQgb3Ig
cG9ydC5leHBlY3RlZF90ZXh0KHRlc3RfbmFtZSkgb3IgJycKLQotICAgICAgICBpZiBub3QgZHJ0
X291dHB1dDoKLSAgICAgICAgICAgIGRydF9vdXRwdXQgPSBzZWxmLmV4cGVjdGVkX291dHB1dChw
b3J0LCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHRfb3V0cHV0LCBleHBlY3RlZF9jaGVja3N1bSkKLSAgICAg
ICAgcmV0dXJuIChkcnRfaW5wdXQsIGRydF9vdXRwdXQpCi0KLSAgICBkZWYgZXhwZWN0ZWRfb3V0
cHV0KHNlbGYsIHBvcnQsIHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMsIHRleHRfb3V0cHV0LCBleHBl
Y3RlZF9jaGVja3N1bSk6Ci0gICAgICAgIG91dHB1dCA9IFsnQ29udGVudC1UeXBlOiB0ZXh0L3Bs
YWluXG4nXQotICAgICAgICBpZiB0ZXh0X291dHB1dDoKLSAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQodGV4dF9vdXRwdXQpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoJyNFT0ZcbicpCi0gICAgICAg
IGlmIHBpeGVsX3Rlc3RzIGFuZCBleHBlY3RlZF9jaGVja3N1bToKLSAgICAgICAgICAgIG91dHB1
dC5leHRlbmQoWydcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnQWN0dWFsSGFzaDog
JXNcbicgJSBleHBlY3RlZF9jaGVja3N1bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdF
eHBlY3RlZEhhc2g6ICVzXG4nICUgZXhwZWN0ZWRfY2hlY2tzdW1dKQotICAgICAgICBvdXRwdXQu
YXBwZW5kKCcjRU9GXG4nKQotICAgICAgICByZXR1cm4gb3V0cHV0Ci0KLSAgICBkZWYgYXNzZXJ0
VGVzdChzZWxmLCB0ZXN0X25hbWUsIHBpeGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bT1Ob25l
LCBkcnRfb3V0cHV0PU5vbmUsIGhvc3Q9Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lKToKLSAgICAg
ICAgcG9ydF9uYW1lID0gJ3Rlc3QnCi0gICAgICAgIGhvc3QgPSBob3N0IG9yIE1vY2tTeXN0ZW1I
b3N0KCkKLSAgICAgICAgdGVzdC5hZGRfdW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0oaG9z
dC5maWxlc3lzdGVtKQotICAgICAgICBwb3J0ID0gUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRf
bmFtZSkKLSAgICAgICAgZHJ0X2lucHV0LCBkcnRfb3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291
dHB1dChwb3J0LCB0ZXN0X25hbWUsCi0gICAgICAgICAgICBwaXhlbF90ZXN0cywgZXhwZWN0ZWRf
Y2hlY2tzdW0sIGRydF9vdXRwdXQsIGRydF9pbnB1dD1Ob25lLCBleHBlY3RlZF90ZXh0PWV4cGVj
dGVkX3RleHQpCi0KLSAgICAgICAgYXJncyA9IFsnLS1wbGF0Zm9ybScsIHBvcnRfbmFtZV0gKyBz
ZWxmLmV4dHJhX2FyZ3MocGl4ZWxfdGVzdHMpCi0gICAgICAgIHN0ZGluID0gU3RyaW5nSU8oZHJ0
X2lucHV0KQotICAgICAgICBzdGRvdXQgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZGVyciA9IFN0
cmluZ0lPKCkKLSAgICAgICAgb3B0aW9ucywgYXJncyA9IG1vY2tfZHJ0LnBhcnNlX29wdGlvbnMo
YXJncykKLQotICAgICAgICBkcnQgPSBzZWxmLm1ha2VfZHJ0KG9wdGlvbnMsIGFyZ3MsIGhvc3Qs
IHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKLSAgICAgICAgcmVzID0gZHJ0LnJ1bigpCi0KLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
dGRvdXQuZ2V0dmFsdWUoKSwgJycuam9pbihkcnRfb3V0cHV0KSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgJyNFT0ZcbicpCi0KLSAgICBkZWYgdGVzdF9tYWlu
KHNlbGYpOgotICAgICAgICBob3N0ID0gTW9ja1N5c3RlbUhvc3QoKQotICAgICAgICB0ZXN0LmFk
ZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbShob3N0LmZpbGVzeXN0ZW0pCi0gICAgICAg
IHN0ZGluID0gU3RyaW5nSU8oKQotICAgICAgICBzdGRvdXQgPSBTdHJpbmdJTygpCi0gICAgICAg
IHN0ZGVyciA9IFN0cmluZ0lPKCkKLSAgICAgICAgcmVzID0gbW9ja19kcnQubWFpbihbJy0tcGxh
dGZvcm0nLCAndGVzdCddICsgc2VsZi5leHRyYV9hcmdzKEZhbHNlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2
YWx1ZSgpLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwg
JycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdC5maWxlc3lzdGVtLndyaXR0ZW5fZmls
ZXMsIHt9KQotCi0gICAgZGVmIHRlc3RfcGl4ZWx0ZXN0X3Bhc3NlcyhzZWxmKToKLSAgICAgICAg
IyBUaGlzIGFsc28gdGVzdHMgdGhhdCB3ZSBoYW5kbGUgSFRUUDogdGVzdCBVUkxzIHByb3Blcmx5
LgotICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2h0dHAvdGVzdHMvcGFzc2VzL3RleHQuaHRtbCcs
IFRydWUpCi0KLSAgICBkZWYgdGVzdF9waXhlbHRlc3RfX2ZhaWxzKHNlbGYpOgotICAgICAgICBz
ZWxmLmFzc2VydFRlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnLCBw
aXhlbF90ZXN0cz1UcnVlLAotICAgICAgICAgICAgZXhwZWN0ZWRfY2hlY2tzdW09J2ltYWdlX2No
ZWNrc3VtLWNoZWNrc3VtJywKLSAgICAgICAgICAgIGRydF9vdXRwdXQ9WydDb250ZW50LVR5cGU6
IHRleHQvcGxhaW5cbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnaW1hZ2VfY2hlY2tzdW0t
dHh0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICcjRU9GXG4nLAotICAgICAgICAgICAgICAg
ICAgICAgICAgJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdBY3R1YWxIYXNoOiBpbWFn
ZV9jaGVja3N1bS1jaGVja3N1bVxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3Rl
ZEhhc2g6IGltYWdlX2NoZWNrc3VtLWNoZWNrc3VtXG4nLAotICAgICAgICAgICAgICAgICAgICAg
ICAgJyNFT0ZcbiddKQotCi0gICAgZGVmIHRlc3RfdGV4dG9ubHkoc2VsZik6Ci0gICAgICAgIHNl
bGYuYXNzZXJ0VGVzdCgncGFzc2VzL2ltYWdlLmh0bWwnLCBGYWxzZSkKLQotICAgIGRlZiB0ZXN0
X2NoZWNrc3VtX2luX3BuZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdwYXNzZXMv
Y2hlY2tzdW1faW5faW1hZ2UuaHRtbCcsIFRydWUpCi0KLSAgICBkZWYgdGVzdF9taXNzaW5nX2lt
YWdlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL21p
c3NpbmdfaW1hZ2UuaHRtbCcsIFRydWUpCi0KLSAgICBkZWYgdGVzdF9taXNzaW5nX3RleHQoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190
ZXh0Lmh0bWwnLCBUcnVlKQotCi0gICAgZGVmIHRlc3RfcmVmdGVzdF9tYXRjaChzZWxmKToKLSAg
ICAgICAgc2VsZi5hc3NlcnRUZXN0KCdwYXNzZXMvcmVmdGVzdC5odG1sJywgRmFsc2UsIGV4cGVj
dGVkX2NoZWNrc3VtPSdtb2NrLWNoZWNrc3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRl
eHRcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL3JlZnRlc3QuaHRtbCcsIFRy
dWUsIGV4cGVjdGVkX2NoZWNrc3VtPSdtb2NrLWNoZWNrc3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVm
ZXJlbmNlIHRleHRcbicpCi0KLSAgICBkZWYgdGVzdF9yZWZ0ZXN0X21pc21hdGNoKHNlbGYpOgot
ICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ3Bhc3Nlcy9taXNtYXRjaC5odG1sJywgRmFsc2UsIGV4
cGVjdGVkX2NoZWNrc3VtPSdtb2NrLWNoZWNrc3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNl
IHRleHRcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL21pc21hdGNoLmh0bWwn
LCBUcnVlLCBleHBlY3RlZF9jaGVja3N1bT0nbW9jay1jaGVja3N1bScsIGV4cGVjdGVkX3RleHQ9
J3JlZmVyZW5jZSB0ZXh0XG4nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcXVlcmllcy5weQppbmRleCA2Y2IwNjQ1Njk4MzFiODgzMDU2OTJlZDc3NzQ0ZjkzNzM1
NWU3NDA2Li40NzYzYWQxMmI1MmRhYzQ2ZmY1ZmI1NzE0ZDhmNmRhNWM5OTM3Y2MwIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAtNTAs
NiArNTAsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNlcgog
ZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFic3RyYWN0c2VxdWVuY2VkY29tbWFuZCBpbXBv
cnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21tYW5kCiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBp
bXBvcnQgcGx1cmFsaXplCiBmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBv
cnQgQ29tbWFuZAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0
X3Rlc3RfZmluZGVyIGltcG9ydCBMYXlvdXRUZXN0RmluZGVyCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvbnMK
IGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucywgY29uZmlndXJhdGlv
bl9vcHRpb25zCiAKQEAgLTQ4OSw3ICs0OTAsOCBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9ucyhD
b21tYW5kKToKICAgICAgICAgICAgICAgICBwcmludChmaWxlKQogICAgICAgICAgICAgcmV0dXJu
CiAKLSAgICAgICAgdGVzdHMgPSBzZXQoZGVmYXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQorICAgICAg
ICBmaW5kZXIgPSBMYXlvdXRUZXN0RmluZGVyKGRlZmF1bHRfcG9ydCwgTm9uZSkKKyAgICAgICAg
dGVzdHMgPSBzZXQoZmluZGVyLmZpbmRfdGVzdHNfYnlfcGF0aChhcmdzKSkKICAgICAgICAgZm9y
IHBvcnRfbmFtZSBpbiBwb3J0X25hbWVzOgogICAgICAgICAgICAgbW9kZWwgPSBzZWxmLl9tb2Rl
bChvcHRpb25zLCBwb3J0X25hbWUsIHRlc3RzKQogICAgICAgICAgICAgdGVzdHNfdG9fcHJpbnQg
PSBzZWxmLl9maWx0ZXJfdGVzdHMob3B0aW9ucywgbW9kZWwsIHRlc3RzKQpAQCAtNTUzLDcgKzU1
NSw4IEBAIGNsYXNzIFByaW50QmFzZWxpbmVzKENvbW1hbmQpOgogICAgICAgICAgICAgcG9ydF9u
YW1lcyA9IFtkZWZhdWx0X3BvcnQubmFtZSgpXQogCiAgICAgICAgICMgRklYTUU6IG1ha2UgcmVh
bF90ZXN0cygpIGEgcHVibGljIG1ldGhvZC4KLSAgICAgICAgdGVzdHMgPSBzb3J0ZWQoZGVmYXVs
dF9wb3J0Ll9yZWFsX3Rlc3RzKGFyZ3MpKQorICAgICAgICBmaW5kZXIgPSBMYXlvdXRUZXN0Rmlu
ZGVyKGRlZmF1bHRfcG9ydCwgTm9uZSkKKyAgICAgICAgdGVzdHMgPSBzb3J0ZWQoZmluZGVyLl9y
ZWFsX3Rlc3RzKGFyZ3MpKQogCiAgICAgICAgIGZvciBwb3J0X25hbWUgaW4gcG9ydF9uYW1lczoK
ICAgICAgICAgICAgIGlmIHBvcnRfbmFtZSAhPSBwb3J0X25hbWVzWzBdOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417190</attachid>
            <date>2021-01-07 10:53:25 -0800</date>
            <delta_ts>2021-01-07 11:34:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220025-20210107185323.patch</filename>
            <type>text/plain</type>
            <size>55082</size>
            <attacher name="Sam Sneddon [:gsnedders]">gsnedders</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwOTY3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDZiNjJmOTJhMjRjYWZkNWFhMDcwNzgyYWU2ZWZiZjM3
NjJmYzU5Mi4uOTA2OTZjZWQ4ZjYyZjRkMzcxYzhhNzczMjhiZWZiZWFlMTU2NzlkOCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0
IEBACisyMDIwLTEyLTE4ICBTYW0gU25lZGRvbiAgPGdzbmVkZGVyc0BhcHBsZS5jb20+CisKKyAg
ICAgICAgTGF5b3V0VGVzdEZpbmRlciBzaG91bGQgYmUgaW4gY2hhcmdlIG9mIGZpbmRpbmcgbGF5
b3V0IHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjAwMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0
X2ZpbmRlci5weToKKyAgICAgICAgKF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKTogRm9ybWVybHkg
UG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlCisgICAgICAgIChfaGFzX3N1cHBvcnRlZF9leHRl
bnNpb24pOiBGb3JtZXJseSBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbgorICAgICAgICAo
TGF5b3V0VGVzdEZpbmRlci5fX2luaXRfXyk6IERlZmluZSBzZWxmLl93M2NfcmVzb3VyY2VfZmls
ZXMKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXIuZmluZF90ZXN0cyk6IENoYW5nZSB0byBjYWxs
IHdpdGhpbiB0aGUgY2xhc3MKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXIuZmluZF90ZXN0c19i
eV9wYXRoKTogRm9ybWVybHkgUG9ydC50ZXN0cworICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5f
ZXhwYW5kZWRfcGF0aHMpOiBGb3JtZXJseSBQb3J0Ll9leHBhbmRlZF9wYXRocworICAgICAgICAo
TGF5b3V0VGVzdEZpbmRlci5fcmVhbF90ZXN0cyk6IEZvcm1lcmx5IFBvcnQuX3JlYWxfdGVzdHMK
KyAgICAgICAgKExheW91dFRlc3RGaW5kZXIuX2lzX3Rlc3RfZmlsZSk6IEZvcm1lcmx5IFBvcnQu
X2lzX3Rlc3RfZmlsZQorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5faXNfdzNjX3Jlc291cmNl
X2ZpbGUpOiBGb3JtZXJseSBQb3J0Ll9pc193M2NfcmVzb3VyY2VfZmlsZQorICAgICAgICAoTGF5
b3V0VGVzdEZpbmRlci5maW5kX3RvdWNoZWRfdGVzdHMpOiBVcGRhdGUgZm9yIHRoZSBhYm92ZQor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91
dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weToKKyAgICAgICAgKE1vY2tMYXlvdXRUZXN0RmluZGVy
KToKKyAgICAgICAgKE1vY2tMYXlvdXRUZXN0RmluZGVyLl9yZWFsX3Rlc3RzKTogTW92ZSB0aGlz
IGZyb20gdGhlIGZvcm1lciBNb2NrUG9ydC50ZXN0cworICAgICAgICAoTGF5b3V0VGVzdEZpbmRl
clRlc3RzLm1ha2VfZmluZGVyKTogU2ltaWxhciB0byB0aGUgbWFrZV9wb3J0IGluIGJhc2VfdW5p
dHRlc3QucHkKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50b3VjaGVkX2ZpbGVzKTog
QWRqdXN0IGZvciBNb2NrTGF5b3V0VGVzdEZpbmRlcgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRl
clRlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2lzX3JlZmVyZW5j
ZV9odG1sX2ZpbGUpOiBBZGQgdGVzdCB0byBjaGVjayByZWZlcmVuY2VzIGFyZSBzdWJzZXQgb2Yg
dGVzdHMKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2ZpbmRfbm9fcGF0aHNf
c3BlY2lmaWVkKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9maW5kX25vX3BhdGhzX3NwZWNpZmll
ZAorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRlc3RfZmluZF9vbmVfdGVzdCk6IEZv
cm1lcmx5IFBvcnRUZXN0LnRlc3RfZmluZF9vbmVfdGVzdAorICAgICAgICAoTGF5b3V0VGVzdEZp
bmRlclRlc3RzLnRlc3RfZmluZF9nbG9iKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9maW5kX2ds
b2IKKyAgICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2ZpbmRfd2l0aF9za2lwcGVk
X2RpcmVjdG9yaWVzKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9maW5kX3dpdGhfc2tpcHBlZF9k
aXJlY3RvcmllcworICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRlc3RfZmluZF93aXRo
X3NraXBwZWRfZGlyZWN0b3JpZXNfMik6IEZvcm1lcmx5IFBvcnRUZXN0LnRlc3RfZmluZF93aXRo
X3NraXBwZWRfZGlyZWN0b3JpZXNfMgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlclRlc3RzLnRl
c3RfaXNfdGVzdF9maWxlKTogRm9ybWVybHkgUG9ydFRlc3QudGVzdF9pc190ZXN0X2ZpbGUKKyAg
ICAgICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X2lzX3czY19yZXNvdXJjZV9maWxlKTog
Rm9ybWVybHkgUG9ydFRlc3QudGVzdF9pc193M2NfcmVzb3VyY2VfZmlsZQorICAgICAgICAodGVz
dF90b3VjaGVkX2J1dF9za2lwcGVkX3Rlc3QpOiBBZGp1c3QgZm9yIE1vY2tMYXlvdXRUZXN0Rmlu
ZGVyCisgICAgICAgIChNb2NrUG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChMYXlvdXRUZXN0Rmlu
ZGVyVGVzdHMudGVzdF90b3VjaGVkX3Rlc3QpOiBEZWxldGVkLgorICAgICAgICAoTGF5b3V0VGVz
dEZpbmRlclRlc3RzLnRlc3RfZXhwZWN0ZWRfdG91Y2hlZF90ZXN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKExheW91dFRlc3RGaW5kZXJUZXN0cy50ZXN0X3BsYXRmb3JtX2V4cGVjdGVkX3RvdWNoZWRf
dGVzdCk6IERlbGV0ZWQuCisgICAgICAgIChMYXlvdXRUZXN0RmluZGVyVGVzdHMudGVzdF9wbGF0
Zm9ybV9kdXBsaWNhdGVfdG91Y2hlZF90ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKExheW91dFRl
c3RGaW5kZXJUZXN0cy50ZXN0X3RvdWNoZWRfYnV0X3NraXBwZWRfdGVzdCk6IERlbGV0ZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3RfaW5wdXQu
cHk6CisgICAgICAgIChUZXN0SW5wdXQuX19pbml0X18pOiBSZW1vdmUgdW51c2VkIHJlZmVyZW5j
ZV9maWxlcyBhbmQgc2hvdWxkX3J1bl9waXhlbF90ZXN0cworICAgICAgICAoVGVzdElucHV0Ll9f
cmVwcl9fKTogUmVtb3ZlIHVudXNlZCBzaG91bGRfcnVuX3BpeGVsX3Rlc3RzCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnRlc3RzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFBvcnQuX2V4cGFuZGVkX3BhdGhzKTogRGVsZXRlZC4KKyAgICAgICAg
KFBvcnQuX3JlYWxfdGVzdHMpOiBEZWxldGVkLgorICAgICAgICAoUG9ydC5pc193M2NfcmVzb3Vy
Y2VfZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChQb3J0LmlzX3JlZmVyZW5jZV9odG1sX2ZpbGUp
OiBEZWxldGVkLgorICAgICAgICAoUG9ydC5faGFzX3N1cHBvcnRlZF9leHRlbnNpb24pOiBEZWxl
dGVkLgorICAgICAgICAoUG9ydC5faXNfdGVzdF9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weToKKyAgICAgICAgKFBvcnRUZXN0
LnRlc3RfZmluZF9ub19wYXRoc19zcGVjaWZpZWQpOiBEZWxldGVkLgorICAgICAgICAoUG9ydFRl
c3QudGVzdF9maW5kX29uZV90ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0LnRlc3Rf
ZmluZF9nbG9iKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0LnRlc3RfZmluZF93aXRoX3Nr
aXBwZWRfZGlyZWN0b3JpZXMpOiBEZWxldGVkLgorICAgICAgICAoUG9ydFRlc3QudGVzdF9maW5k
X3dpdGhfc2tpcHBlZF9kaXJlY3Rvcmllc18yKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0
LnRlc3RfaXNfdGVzdF9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0LnRlc3RfaXNf
cmVmZXJlbmNlX2h0bWxfZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChQb3J0VGVzdC50ZXN0X3Rl
c3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFBvcnRUZXN0LnRlc3RfaXNfdzNjX3Jlc291cmNlX2Zp
bGUpOiBEZWxldGVkLgorICAgICAgICAodGVzdF9qaGJ1aWxkX3dyYXBwZXIpOiBEZWxldGVkLgor
ICAgICAgICAodGVzdF9yZWZfdGVzdHNfcGxhdGZvcm1fZGlyZWN0b3J5KTogRGVsZXRlZC4KKyAg
ICAgICAgKHRlc3RfY29tbWl0c19mb3JfdXBsb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAgKFBvcnRGYWN0b3J5KTogUmVt
b3ZlIG1vY2tfZHJ0CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21vY2tfZHJ0LnB5
OiBSZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydF91bml0
dGVzdC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFu
ZHMvcXVlcmllcy5weToKKyAgICAgICAgKFByaW50RXhwZWN0YXRpb25zLmV4ZWN1dGUpOiBBZGp1
c3QgZm9yIFBvcnQudGVzdHMgbW92aW5nIHRvIExheW91dFRlc3RGaW5kZXIKKyAgICAgICAgKFBy
aW50QmFzZWxpbmVzLmV4ZWN1dGUpOiBBZGp1c3QgZm9yIFBvcnQuX3JlYWxfdGVzdHMgbW92aW5n
IHRvIExheW91dFRlc3RGaW5kZXIKKwogMjAyMC0xMi0xNyAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OOiBbIEJpZ1N1ciBdIDMgUGljdHVyZUlu
UGljdHVyZSByZWxhdGVkIEFQSSB0ZXN0cyB0aW1pbmcgb3V0CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5k
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9s
YXlvdXRfdGVzdF9maW5kZXIucHkKaW5kZXggMGMxODFjMzM4NjFmZDBkNjhlOGJlMWRlOTk3ODU0
MjA0MjQ3NTVlZS4uN2Y5YmFmMGVmMDdmYWY3MmJjMThhYTVmZDNjMzhiZWMyNzkyOWI4OCAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bGF5b3V0X3Rlc3RfZmluZGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5weQpAQCAtMjcsMjkgKzI3LDEx
OCBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgZXJybm8KK2ltcG9ydCBqc29uCiBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IHJlCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBmaW5kX2Zp
bGVzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0
YXRpb25zCitmcm9tIHdlYmtpdHB5LnBvcnQuYmFzZSBpbXBvcnQgUG9ydAogCiAKIF9sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCisjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNh
c2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0ZW5zaW9ucy4KK19zdXBwb3J0
ZWRfdGVzdF9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnho
dG1sJywgJy5wbCcsICcuaHRtJywgJy5waHAnLCAnLnN2ZycsICcubWh0JywgJy54aHQnXSkKKwor
CisjIElmIGFueSBjaGFuZ2VzIGFyZSBtYWRlIGhlcmUgYmUgc3VyZSB0byB1cGRhdGUgdGhlIGlz
VXNlZEluUmVmdGVzdCBtZXRob2QgaW4gb2xkLXJ1bi13ZWJraXQtdGVzdHMgYXMgd2VsbC4KK2Rl
ZiBfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6
CisgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgncmVmLScpIG9yIGZpbGVuYW1lLnN0YXJ0c3dp
dGgoJ25vdHJlZi0nKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBmaWxlbmFtZV93aWhvdXRf
ZXh0LCBleHQgPSBmaWxlc3lzdGVtLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICMgRklYTUU6IF9z
dXBwb3J0ZWRfcmVmZXJlbmNlX2V4dGVuc2lvbnMgc2hvdWxkIGJlIGhlcmUsIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA0MjEKKyAgICBpZiBleHQgbm90IGluIFBv
cnQuX3N1cHBvcnRlZF9yZWZlcmVuY2VfZXh0ZW5zaW9uczoKKyAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgZm9yIHN1ZmZpeCBpbiBbJy1leHBlY3RlZCcsICctZXhwZWN0ZWQtbWlzbWF0Y2gnLCAn
LXJlZicsICctbm90cmVmJ106CisgICAgICAgIGlmIGZpbGVuYW1lX3dpaG91dF9leHQuZW5kc3dp
dGgoc3VmZml4KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisK
KworZGVmIF9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Cisg
ICAgIiIiUmV0dXJuIHRydWUgaWYgZmlsZW5hbWUgaXMgb25lIG9mIHRoZSBmaWxlIGV4dGVuc2lv
bnMgd2Ugd2FudCB0byBydW4gYSB0ZXN0IG9uLiIiIgorICAgIGV4dGVuc2lvbiA9IGZpbGVzeXN0
ZW0uc3BsaXRleHQoZmlsZW5hbWUpWzFdCisgICAgcmV0dXJuIGV4dGVuc2lvbiBpbiBfc3VwcG9y
dGVkX3Rlc3RfZXh0ZW5zaW9ucworCisKIGNsYXNzIExheW91dFRlc3RGaW5kZXIob2JqZWN0KToK
KyAgICAiIiJGaW5kcyBMYXlvdXRUZXN0cworCisgICAgV2UgY29uc2lkZXIgYW55IGZpbGUgd2ls
bCBhIGdpdmVuIHNldCBvZiBleHRlbnNpb25zIGFzIHRlc3RzLCBleGNlcHQgZm9yCisgICAgdGhv
c2Ugd2hpY2ggYXBwZWFyIHRvIGJlIHJlZmVyZW5jZXMgKC1leHBlY3RlZC5odG1sLCBldGMuKS4g
Tm90YWJseSB0aGlzCisgICAgbWVhbnMgdGhhdCBhIHRlc3QgX2RvZXNuJ3RfIG5lZWQgdG8gaGF2
ZSBhbnkgYXNzb2NpYXRlZCAtZXhwZWN0ZWQuKiBmaWxlCisgICAgKGluIHRob3NlIGNhc2VzLCB3
ZSB3aWxsIHJlcG9ydCB0aGUgbWlzc2luZyByZXN1bHQpLgorICAgICIiIgorCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICAjIEZJWE1FOiB3ZSBzaG91bGQg
bWluaW1pemUvZWxpbWluYXRlIHVzYWdlIG9mIHRoZSBwb3J0LCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNDIxCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0g
PSBzZWxmLl9wb3J0Lmhvc3QuZmlsZXN5c3RlbQogICAgICAgICBzZWxmLkxBWU9VVF9URVNUU19E
SVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCisgICAgICAgIHNlbGYuX3czY19yZXNvdXJjZV9maWxl
cyA9IE5vbmUKIAogICAgIGRlZiBmaW5kX3Rlc3RzKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIGRldmlj
ZV90eXBlPU5vbmUpOgogICAgICAgICBwYXRocyA9IHNlbGYuX3N0cmlwX3Rlc3RfZGlyX3ByZWZp
eGVzKGFyZ3MpCiAgICAgICAgIGlmIG9wdGlvbnMgYW5kIG9wdGlvbnMudGVzdF9saXN0OgogICAg
ICAgICAgICAgcGF0aHMgKz0gc2VsZi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoc2VsZi5fcmVh
ZF90ZXN0X25hbWVzX2Zyb21fZmlsZShvcHRpb25zLnRlc3RfbGlzdCwgc2VsZi5fcG9ydC5URVNU
X1BBVEhfU0VQQVJBVE9SKSkKLSAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3BvcnQudGVzdHMo
cGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQorICAgICAgICB0ZXN0X2ZpbGVzID0gc2Vs
Zi5maW5kX3Rlc3RzX2J5X3BhdGgocGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBlKQogICAg
ICAgICByZXR1cm4gKHBhdGhzLCB0ZXN0X2ZpbGVzKQogCisgICAgZGVmIGZpbmRfdGVzdHNfYnlf
cGF0aChzZWxmLCBwYXRocywgZGV2aWNlX3R5cGU9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0
aGUgbGlzdCBvZiB0ZXN0cyBmb3VuZC4gQm90aCBnZW5lcmljIGFuZCBwbGF0Zm9ybS1zcGVjaWZp
YyB0ZXN0cyBtYXRjaGluZyBwYXRocyBzaG91bGQgYmUgcmV0dXJuZWQuIiIiCisgICAgICAgIGV4
cGFuZGVkX3BhdGhzID0gc2VsZi5fZXhwYW5kZWRfcGF0aHMocGF0aHMsIGRldmljZV90eXBlPWRl
dmljZV90eXBlKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRo
cykKKworICAgIGRlZiBfZXhwYW5kZWRfcGF0aHMoc2VsZiwgcGF0aHMsIGRldmljZV90eXBlPU5v
bmUpOgorICAgICAgICBleHBhbmRlZF9wYXRocyA9IFtdCisgICAgICAgIGZzID0gc2VsZi5fcG9y
dC5fZmlsZXN5c3RlbQorICAgICAgICBhbGxfcGxhdGZvcm1fZGlycyA9IFtwYXRoIGZvciBwYXRo
IGluIGZzLmdsb2IoZnMuam9pbihzZWxmLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRm
b3JtJywgJyonKSkgaWYgZnMuaXNkaXIocGF0aCldCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhz
OgorICAgICAgICAgICAgZXhwYW5kZWRfcGF0aHMuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICBp
ZiBzZWxmLl9wb3J0LnRlc3RfaXNkaXIocGF0aCkgYW5kIG5vdCBwYXRoLnN0YXJ0c3dpdGgoJ3Bs
YXRmb3JtJykgYW5kIG5vdCBmcy5pc2FicyhwYXRoKToKKyAgICAgICAgICAgICAgICBmb3IgcGxh
dGZvcm1fZGlyIGluIGFsbF9wbGF0Zm9ybV9kaXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBm
cy5pc2Rpcihmcy5qb2luKHBsYXRmb3JtX2RpciwgcGF0aCkpIGFuZCBwbGF0Zm9ybV9kaXIgaW4g
c2VsZi5fcG9ydC5iYXNlbGluZV9zZWFyY2hfcGF0aChkZXZpY2VfdHlwZT1kZXZpY2VfdHlwZSk6
CisgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZF9wYXRocy5hcHBlbmQoc2VsZi5fcG9y
dC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZzLmpvaW4ocGxhdGZvcm1fZGlyLCBwYXRoKSkpCisK
KyAgICAgICAgcmV0dXJuIGV4cGFuZGVkX3BhdGhzCisKKyAgICBkZWYgX3JlYWxfdGVzdHMoc2Vs
ZiwgcGF0aHMpOgorICAgICAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCBza2lwIHRo
ZXNlIGRpcmVjdG9yaWVzCisgICAgICAgIHNraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQoWycuc3Zu
JywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3N1cHBvcnQnLCAnc2NyaXB0LXRlc3RzJywgJ3JlZmVy
ZW5jZScsICdyZWZ0ZXN0J10pCisgICAgICAgIGZpbGVzID0gZmluZF9maWxlcy5maW5kKHNlbGYu
X3BvcnQuX2ZpbGVzeXN0ZW0sIHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRocywg
c2tpcHBlZF9kaXJlY3Rvcmllcywgc2VsZi5faXNfdGVzdF9maWxlLCBzZWxmLl9wb3J0LnRlc3Rf
a2V5KQorICAgICAgICByZXR1cm4gW3NlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZShm
KSBmb3IgZiBpbiBmaWxlc10KKworICAgIGRlZiBfaXNfdGVzdF9maWxlKHNlbGYsIGZpbGVzeXN0
ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKKyAgICAgICAgaWYgbm90IF9oYXNfc3VwcG9ydGVkX2V4
dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgaWYgX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwg
ZmlsZW5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2lz
X3czY19yZXNvdXJjZV9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKKyAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9pc193
M2NfcmVzb3VyY2VfZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6Cisg
ICAgICAgIHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpCisgICAgICAg
IHczY19wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYuX3BvcnQubGF5b3V0X3Rlc3RzX2Rpcigp
LCAiaW1wb3J0ZWQiLCAidzNjIikKKyAgICAgICAgaWYgdzNjX3BhdGggbm90IGluIHBhdGg6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fdzNjX3Jlc291
cmNlX2ZpbGVzOgorICAgICAgICAgICAgZmlsZXBhdGggPSBmaWxlc3lzdGVtLmpvaW4odzNjX3Bh
dGgsICJyZXNvdXJjZXMiLCAicmVzb3VyY2UtZmlsZXMuanNvbiIpCisgICAgICAgICAgICBqc29u
X2RhdGEgPSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGZpbGVwYXRoKQorICAgICAgICAgICAg
c2VsZi5fdzNjX3Jlc291cmNlX2ZpbGVzID0ganNvbi5sb2Fkcyhqc29uX2RhdGEpCisKKyAgICAg
ICAgc3VicGF0aCA9IHBhdGhbbGVuKHczY19wYXRoKSArIDE6XS5yZXBsYWNlKCdcXCcsICcvJykK
KyAgICAgICAgaWYgc3VicGF0aCBpbiBzZWxmLl93M2NfcmVzb3VyY2VfZmlsZXNbImZpbGVzIl06
CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmb3IgZGlycGF0aCBpbiBzZWxmLl93
M2NfcmVzb3VyY2VfZmlsZXNbImRpcmVjdG9yaWVzIl06CisgICAgICAgICAgICBpZiBkaXJwYXRo
IGluIHN1YnBhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKICAgICBkZWYgZmluZF90b3VjaGVkX3Rlc3RzKHNlbGYsIG5ld19vcl9tb2RpZmll
ZF9wYXRocywgYXBwbHlfc2tpcF9leHBlY3RhdGlvbnM9VHJ1ZSk6CiAgICAgICAgIHBvdGVudGlh
bF90ZXN0X3BhdGhzID0gW10KICAgICAgICAgZm9yIHRlc3RfZmlsZSBpbiBuZXdfb3JfbW9kaWZp
ZWRfcGF0aHM6CkBAIC02Niw3ICsxNTUsNyBAQCBjbGFzcyBMYXlvdXRUZXN0RmluZGVyKG9iamVj
dCk6CiAgICAgICAgIGlmIG5vdCBwb3RlbnRpYWxfdGVzdF9wYXRoczoKICAgICAgICAgICAgIHJl
dHVybiBOb25lCiAKLSAgICAgICAgdGVzdHMgPSBzZWxmLl9wb3J0LnRlc3RzKGxpc3Qoc2V0KHBv
dGVudGlhbF90ZXN0X3BhdGhzKSkpCisgICAgICAgIHRlc3RzID0gc2VsZi5maW5kX3Rlc3RzX2J5
X3BhdGgobGlzdChzZXQocG90ZW50aWFsX3Rlc3RfcGF0aHMpKSkKICAgICAgICAgaWYgbm90IGFw
cGx5X3NraXBfZXhwZWN0YXRpb25zOgogICAgICAgICAgICAgcmV0dXJuIHRlc3RzCiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xh
eW91dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlcl91bml0dGVzdC5weQppbmRl
eCA5NTg1MmVlM2JhZWQyMzJhZDgxZjMzOTdlZmIzZmNlMzE4NmFmNjNmLi5jNTgyMDFiZDljYzZh
Y2U3MzU1ZDM5Y2JlZDg4OGUzNWE0NWVjZGRmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXJfdW5pdHRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbGF5b3V0X3Rlc3RfZmluZGVyX3VuaXR0ZXN0LnB5CkBAIC0zMCwyNyArMzAsMTE1IEBAIGZy
b20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiAKIGZyb20gd2Via2l0cHkuY29tbW9u
Lmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5m
aWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9maW5kZXIgaW1wb3J0IExheW91dFRlc3RG
aW5kZXIKLWZyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9ydCBUZXN0UG9ydAorZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfZmluZGVyIGltcG9ydCBM
YXlvdXRUZXN0RmluZGVyLCBQb3J0LCBfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZSwgX3N1cHBvcnRl
ZF90ZXN0X2V4dGVuc2lvbnMKK2Zyb20gd2Via2l0cHkucG9ydC50ZXN0IGltcG9ydCBhZGRfdW5p
dF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0sIFRlc3RQb3J0CiAKIAotY2xhc3MgTW9ja1BvcnQo
VGVzdFBvcnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0KToKLSAgICAgICAgc3VwZXIo
TW9ja1BvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QpCi0KLSAgICBkZWYgdGVzdHMoc2VsZiwgcGF0
aHMpOgorY2xhc3MgTW9ja0xheW91dFRlc3RGaW5kZXIoTGF5b3V0VGVzdEZpbmRlcik6CisgICAg
ZGVmIF9yZWFsX3Rlc3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgcmV0dXJuIFtwYXRoIGZvciBw
YXRoIGluIHBhdGhzIGlmIHBhdGguZW5kc3dpdGgoJy5odG1sJyldCiAKIAogY2xhc3MgTGF5b3V0
VGVzdEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbWFrZV9maW5kZXIo
c2VsZik6CisgICAgICAgIGhvc3QgPSBNb2NrSG9zdChjcmVhdGVfc3R1Yl9yZXBvc2l0b3J5X2Zp
bGVzPVRydWUpCisgICAgICAgIGFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmlsZXN5c3RlbShob3N0
LmZpbGVzeXN0ZW0pCisgICAgICAgIHBvcnQgPSBUZXN0UG9ydChob3N0KQorICAgICAgICByZXR1
cm4gTGF5b3V0VGVzdEZpbmRlcihwb3J0LCBOb25lKQorCiAgICAgZGVmIHRvdWNoZWRfZmlsZXMo
c2VsZiwgdG91Y2hlZF9maWxlcywgZnM9Tm9uZSk6CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgp
CiAgICAgICAgIGlmIGZzOgogICAgICAgICAgICAgaG9zdC5maWxlc3lzdGVtID0gZnMKICAgICAg
ICAgZWxzZToKICAgICAgICAgICAgIGZzID0gaG9zdC5maWxlc3lzdGVtCi0gICAgICAgIHBvcnQg
PSBNb2NrUG9ydChob3N0KQotICAgICAgICByZXR1cm4gKGZzLCBMYXlvdXRUZXN0RmluZGVyKHBv
cnQsIG9wdHBhcnNlLlZhbHVlcyh7J3NraXBwZWQnOiAnYWx3YXlzJywgJ3NraXBfZmFpbGluZ190
ZXN0cyc6IEZhbHNlLCAnaHR0cCc6IFRydWV9KSkuZmluZF90b3VjaGVkX3Rlc3RzKHRvdWNoZWRf
ZmlsZXMpKQorICAgICAgICBwb3J0ID0gVGVzdFBvcnQoaG9zdCkKKyAgICAgICAgcmV0dXJuIChm
cywgTW9ja0xheW91dFRlc3RGaW5kZXIocG9ydCwgb3B0cGFyc2UuVmFsdWVzKHsnc2tpcHBlZCc6
ICdhbHdheXMnLCAnc2tpcF9mYWlsaW5nX3Rlc3RzJzogRmFsc2UsICdodHRwJzogVHJ1ZX0pKS5m
aW5kX3RvdWNoZWRfdGVzdHModG91Y2hlZF9maWxlcykpCisKKyAgICBkZWYgdGVzdF9zdXBwb3J0
ZWRfdGVzdF9leHRlbnNpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zdXBw
b3J0ZWRfdGVzdF9leHRlbnNpb25zICYgUG9ydC5fc3VwcG9ydGVkX3JlZmVyZW5jZV9leHRlbnNp
b25zLCBQb3J0Ll9zdXBwb3J0ZWRfcmVmZXJlbmNlX2V4dGVuc2lvbnMpCisKKyAgICBkZWYgdGVz
dF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKHNlbGYpOgorICAgICAgICBmaWxlc3lzdGVtID0gTW9j
a0ZpbGVTeXN0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2lzX3JlZmVyZW5jZV9odG1s
X2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQuaHRtbCcpKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28t
ZXhwZWN0ZWQtbWlzbWF0Y2gueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfaXNfcmVm
ZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcn
LCAnZm9vLW5vdHJlZi5zdmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShfaXNfcmVmZXJl
bmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby5odG1sJykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoX2lzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28t
ZXhwZWN0ZWQudHh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoX2lzX3JlZmVyZW5jZV9o
dG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQuc2h0bWwnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShfaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywg
J2Zvby1leHBlY3RlZC5waHAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShfaXNfcmVmZXJl
bmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5taHQnKSkKKworICAg
IGRlZiB0ZXN0X2ZpbmRfbm9fcGF0aHNfc3BlY2lmaWVkKHNlbGYpOgorICAgICAgICBmaW5kZXIg
PSBzZWxmLm1ha2VfZmluZGVyKCkKKyAgICAgICAgdGVzdHMgPSBmaW5kZXIuZmluZF90ZXN0c19i
eV9wYXRoKFtdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbih0ZXN0cyksIDApCisK
KyAgICBkZWYgdGVzdF9maW5kX29uZV90ZXN0KHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxm
Lm1ha2VfZmluZGVyKCkKKyAgICAgICAgdGVzdHMgPSBmaW5kZXIuZmluZF90ZXN0c19ieV9wYXRo
KFsnZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCddKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKGxlbih0ZXN0cyksIDEpCisKKyAgICBkZWYgdGVzdF9maW5kX2dsb2Ioc2VsZik6CisgICAg
ICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQorICAgICAgICB0ZXN0cyA9IGZpbmRlci5m
aW5kX3Rlc3RzX2J5X3BhdGgoWydmYWlsdXJlcy9leHBlY3RlZC9pbSonXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAyKQorCisgICAgZGVmIHRlc3RfZmluZF93aXRoX3Nr
aXBwZWRfZGlyZWN0b3JpZXMoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5k
ZXIoKQorICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5kX3Rlc3RzX2J5X3BhdGgoWyd1c2Vyc2Ny
aXB0cyddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd1c2Vyc2NyaXB0cy9yZXNvdXJjZXMv
aWZyYW1lLmh0bWwnLCB0ZXN0cykKKworICAgIGRlZiB0ZXN0X2ZpbmRfd2l0aF9za2lwcGVkX2Rp
cmVjdG9yaWVzXzIoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9maW5kZXIoKQor
ICAgICAgICB0ZXN0cyA9IGZpbmRlci5maW5kX3Rlc3RzX2J5X3BhdGgoWyd1c2Vyc2NyaXB0cy9y
ZXNvdXJjZXMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0cywgW10pCisKKyAgICBk
ZWYgdGVzdF9pc190ZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFrZV9m
aW5kZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmlu
ZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAnZm9vLnNodG1s
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIu
X2ZpbGVzeXN0ZW0sICcnLCAnZm9vLnN2ZycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlu
ZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ3Rlc3QtcmVmLXRlc3Qu
aHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxlKGZp
bmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28ucG5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBl
Y3RlZC5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2Zp
bGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5zdmcnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0s
ICcnLCAnZm9vLWV4cGVjdGVkLnhodCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRl
ci5faXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlz
bWF0Y2guaHRtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9m
aWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guc3ZnJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9m
aWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54aHRtbCcpKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdGVzdF9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwg
JycsICdmb28tcmVmLmh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lz
X3Rlc3RfZmlsZShmaW5kZXIuX2ZpbGVzeXN0ZW0sICcnLCAnZm9vLW5vdHJlZi5odG1sJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxl
c3lzdGVtLCAnJywgJ2Zvby1ub3RyZWYueGh0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0
bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5kZXIuX2lzX3Rlc3RfZmlsZShmaW5k
ZXIuX2ZpbGVzeXN0ZW0sICcnLCAncmVmLWZvby5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZmluZGVyLl9pc190ZXN0X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCAnJywgJ25vdHJl
Zi1mb28ueGhyJykpCisKKyAgICBkZWYgdGVzdF9pc193M2NfcmVzb3VyY2VfZmlsZShzZWxmKToK
KyAgICAgICAgZmluZGVyID0gc2VsZi5tYWtlX2ZpbmRlcigpCisKKyAgICAgICAgZmluZGVyLl9m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2Rpcigp
ICsgIi9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL3Jlc291cmNlLWZpbGVzLmpzb24iLCAiIiIKK3si
ZGlyZWN0b3JpZXMiOiBbCisid2ViLXBsYXRmb3JtLXRlc3RzL2NvbW1vbiIsCisid2ViLXBsYXRm
b3JtLXRlc3RzL2RvbS9ub2Rlcy9Eb2N1bWVudC1jcmVhdGVFbGVtZW50LW5hbWVzcGFjZS10ZXN0
cyIsCisid2ViLXBsYXRmb3JtLXRlc3RzL2ZvbnRzIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9icm93c2Vycy9icm93c2luZy10aGUtd2ViL25hdmlnYXRpbmctYWNyb3NzLWRvY3VtZW50cy9z
b3VyY2Uvc3VwcG9ydCIsCisid2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3Np
bmctdGhlLXdlYi91bmxvYWRpbmctZG9jdW1lbnRzL3N1cHBvcnQiLAorIndlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWhpc3RvcnktaW50ZXJmYWNlL25vbi1hdXRv
bWF0ZWQiLAorIndlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2hpc3RvcnkvdGhlLWxv
Y2F0aW9uLWludGVyZmFjZS9ub24tYXV0b21hdGVkIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvaW1h
Z2VzIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvc2VydmljZS13b3JrZXJzIiwKKyJ3ZWItcGxhdGZv
cm0tdGVzdHMvdG9vbHMiCitdLCAiZmlsZXMiOiBbCisid2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0
dHBSZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFt
ZS5odG1sIiwKKyJ3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QveG1saHR0cHJlcXVl
c3Qtc3luYy1ub3QtaGFuZy1zY3JpcHRsb2FkZXItc3ViZnJhbWUuaHRtbCIKK119IiIiKQorICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdzNjX3Jlc291cmNlX2ZpbGUoZmluZGVy
Ll9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRl
ZC93MyIsICJyZXNvdXJjZV9maWxlLmh0bWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShm
aW5kZXIuX2lzX3czY19yZXNvdXJjZV9maWxlKGZpbmRlci5fZmlsZXN5c3RlbSwgZmluZGVyLl9w
b3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjIiwgInJlc291cmNlX2ZpbGUu
aHRtbCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmRlci5faXNfdzNjX3Jlc291cmNl
X2ZpbGUoZmluZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2Rpcigp
ICsgIi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0IiwgInht
bGh0dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5odG1sLmh0bWwi
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRlci5faXNfdzNjX3Jlc291cmNlX2ZpbGUo
ZmluZGVyLl9maWxlc3lzdGVtLCBmaW5kZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0IiwgInhtbGh0dHBy
ZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5odG1sIikpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShmaW5kZXIuX2lzX3czY19yZXNvdXJjZV9maWxlKGZpbmRlci5fZmls
ZXN5c3RlbSwgZmluZGVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvRG9jdW1lbnQtY3JlYXRlRWxlbWVudC1uYW1l
c3BhY2UtdGVzdHMiLCAidGVzdC5odG1sIikpCiAKICAgICBkZWYgdGVzdF90b3VjaGVkX3Rlc3Qo
c2VsZik6CiAgICAgICAgIHBhdGhzID0gWydMYXlvdXRUZXN0cy90ZXN0Lmh0bWwnLCAnTGF5b3V0
VGVzdHMvdGVzdCcsICd0ZXN0Mi5odG1sJywgJ1NvdXJjZS90ZXN0MS5odG1sJ10KQEAgLTgwLDcg
KzE2OCw3IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAKICAgICBkZWYgdGVzdF90b3VjaGVkX2J1dF9za2lwcGVkX3Rlc3Qoc2VsZik6CiAgICAgICAg
IGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIHBvcnQgPSBNb2NrUG9ydChob3N0KQorICAgICAg
ICBwb3J0ID0gVGVzdFBvcnQoaG9zdCkKIAogICAgICAgICBleHBlY3RhdGlvbnNfZGljdCA9IE9y
ZGVyZWREaWN0KCkKICAgICAgICAgZXhwZWN0YXRpb25zX2RpY3RbJ2V4cGVjdGF0aW9ucyddID0g
J3Rlc3QxLmh0bWwgWyBTa2lwIF1cbnRlc3QzLmh0bWwgWyBTa2lwIF1cbicKQEAgLTkxLDUgKzE3
OSw1IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90ZXN0LmNoZWNrb3V0L0xh
eW91dFRlc3RzL3Rlc3QyLmh0bWwnLCAnVGhpcyBpcyBhIHRlc3QgdG8gYmUgcnVubmVkJykKICAg
ICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZSgnL3Rlc3QuY2hlY2tvdXQvTGF5
b3V0VGVzdHMvdGVzdDMuaHRtbCcsICdUaGlzIGlzIGEgdGVzdCB0byBiZSBza2lwcGVkJykKIAot
ICAgICAgICB0b3VjaGVkX3Rlc3RzID0gTGF5b3V0VGVzdEZpbmRlcihwb3J0LCBvcHRwYXJzZS5W
YWx1ZXMoeydza2lwcGVkJzogJ2Fsd2F5cycsICdza2lwX2ZhaWxpbmdfdGVzdHMnOiBGYWxzZSwg
J2h0dHAnOiBUcnVlfSkpLmZpbmRfdG91Y2hlZF90ZXN0cyhwYXRocykKKyAgICAgICAgdG91Y2hl
ZF90ZXN0cyA9IE1vY2tMYXlvdXRUZXN0RmluZGVyKHBvcnQsIG9wdHBhcnNlLlZhbHVlcyh7J3Nr
aXBwZWQnOiAnYWx3YXlzJywgJ3NraXBfZmFpbGluZ190ZXN0cyc6IEZhbHNlLCAnaHR0cCc6IFRy
dWV9KSkuZmluZF90b3VjaGVkX3Rlc3RzKHBhdGhzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNvcnRlZCh0b3VjaGVkX3Rlc3RzKSwgc29ydGVkKFsndGVzdDAuaHRtbCcsICd0ZXN0Mi5odG1s
J10pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9k
ZWxzL3Rlc3RfaW5wdXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9t
b2RlbHMvdGVzdF9pbnB1dC5weQppbmRleCBlNGE2OWUxMzUxYzEyYjdiMjUwY2M2M2UzMGE1YWRm
Zjk3ZDhmZTI4Li44YzY1NDE3NmZjZTBhMDIwMDc5MDJmYjkwNGViZjA2YmQwY2Y4NjczIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvdGVzdF9p
bnB1dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMv
dGVzdF9pbnB1dC5weQpAQCAtMzEsMTYgKzMxLDE1IEBACiBjbGFzcyBUZXN0SW5wdXQob2JqZWN0
KToKICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYSB0ZXN0IGZvciBlYXN5IHBhc3Np
bmcgb2YgZGF0YS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHRpbWVv
dXQ9Tm9uZSwgbmVlZHNfc2VydmVycz1Ob25lLCByZWZlcmVuY2VfZmlsZXM9Tm9uZSwgc2hvdWxk
X3J1bl9waXhlbF90ZXN0cz1Ob25lLCBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJy
PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X25hbWUsIHRpbWVvdXQ9Tm9uZSwg
bmVlZHNfc2VydmVycz1Ob25lLCBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyPU5v
bmUpOgogICAgICAgICAjIFRlc3RJbnB1dCBvYmplY3RzIGFyZSBub3JtYWxseSBjb25zdHJ1Y3Rl
ZCBieSB0aGUgbWFuYWdlciBhbmQgcGFzc2VkCiAgICAgICAgICMgdG8gdGhlIHdvcmtlcnMsIGJ1
dCB0aGVzZSBzb21lIGZpZWxkcyBhcmUgc2V0IGxhemlseSBpbiB0aGUgd29ya2VycyB3aGVyZSBw
b3NzaWJsZQogICAgICAgICAjIGJlY2F1c2UgdGhleSByZXF1aXJlIHVzIHRvIGxvb2sgYXQgdGhl
IGZpbGVzeXN0ZW0gYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkbyB0aGF0IGluIHBhcmFsbGVs
LgogICAgICAgICBzZWxmLnRlc3RfbmFtZSA9IHRlc3RfbmFtZQogICAgICAgICBzZWxmLnRpbWVv
dXQgPSB0aW1lb3V0ICAjIGluIG1zZWNzOyBzaG91bGQgcmVuYW1lIHRoaXMgZm9yIGNvbnNpc3Rl
bmN5CiAgICAgICAgIHNlbGYubmVlZHNfc2VydmVycyA9IG5lZWRzX3NlcnZlcnMKLSAgICAgICAg
c2VsZi5yZWZlcmVuY2VfZmlsZXMgPSByZWZlcmVuY2VfZmlsZXMKLSAgICAgICAgc2VsZi5zaG91
bGRfcnVuX3BpeGVsX3Rlc3RzID0gc2hvdWxkX3J1bl9waXhlbF90ZXN0cwogICAgICAgICBzZWxm
LnNob3VsZF9kdW1wX2pzY29uc29sZWxvZ19pbl9zdGRlcnIgPSBzaG91bGRfZHVtcF9qc2NvbnNv
bGVsb2dfaW5fc3RkZXJyCisgICAgICAgIHNlbGYucmVmZXJlbmNlX2ZpbGVzID0gTm9uZQogCiAg
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlRlc3RJbnB1dCgnJXMnLCB0
aW1lb3V0PSVzLCBuZWVkc19zZXJ2ZXJzPSVzLCByZWZlcmVuY2VfZmlsZXM9JXMsIHNob3VsZF9y
dW5fcGl4ZWxfdGVzdHM9JXMsIHNob3VsZF9kdW1wX2pzY29uc29sZWxvZ19pbl9zdGRlcnI9JXMp
IiAlIChzZWxmLnRlc3RfbmFtZSwgc2VsZi50aW1lb3V0LCBzZWxmLm5lZWRzX3NlcnZlcnMsIHNl
bGYucmVmZXJlbmNlX2ZpbGVzLCBzZWxmLnNob3VsZF9ydW5fcGl4ZWxfdGVzdHMsIHNlbGYuc2hv
dWxkX2R1bXBfanNjb25zb2xlbG9nX2luX3N0ZGVycikKKyAgICAgICAgcmV0dXJuICJUZXN0SW5w
dXQoJyVzJywgdGltZW91dD0lcywgbmVlZHNfc2VydmVycz0lcywgcmVmZXJlbmNlX2ZpbGVzPSVz
LCBzaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyPSVzKSIgJSAoc2VsZi50ZXN0X25h
bWUsIHNlbGYudGltZW91dCwgc2VsZi5uZWVkc19zZXJ2ZXJzLCBzZWxmLnJlZmVyZW5jZV9maWxl
cywgc2VsZi5zaG91bGRfZHVtcF9qc2NvbnNvbGVsb2dfaW5fc3RkZXJyKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQppbmRleCAzZmI3MjdiYzAyZmEyZjAzNWM4ZTA5Yzg3NTRlYjVkNGU4
MTNmNmNkLi44MWQxZGRhZmJjM2VkOWMyMWEyZDE0NGQ5MzlhNzE3ZTUwZjEyOWE2IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpAQCAtNDkzLDYgKzQ5Myw4IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgdGV4dCA9IHN0cmluZ191dGlscy5kZWNvZGUoc2VsZi5fZmlsZXN5
c3RlbS5yZWFkX2JpbmFyeV9maWxlKGJhc2VsaW5lX3BhdGgpLCB0YXJnZXRfdHlwZT1zdHIpCiAg
ICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKQogCisgICAgX3N1cHBvcnRl
ZF9yZWZlcmVuY2VfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywgJy54bWwnLCAnLnhodG1sJywg
Jy5odG0nLCAnLnN2ZycsICcueGh0J10pCisKICAgICBkZWYgcmVmZXJlbmNlX2ZpbGVzKHNlbGYs
IHRlc3RfbmFtZSwgZGV2aWNlX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qg
b2YgZXhwZWN0YXRpb24gKD09IG9yICE9KSBhbmQgZmlsZW5hbWUgcGFpcnMiIiIKIApAQCAtNTI1
LDgxICs1MjcsNiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIFtzZWxm
Lmhvc3QuZmlsZXN5c3RlbS5yZWxwYXRoKHRlc3QsIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpKSBm
b3IgdGVzdCBpbiBzZWxmLl9maWxlc3lzdGVtLmdsb2IocmUuc3ViKCctZXhwZWN0ZWQuKicsICcu
KicsIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgcGF0aCkp
KSBpZiBzZWxmLl9maWxlc3lzdGVtLmlzZmlsZSh0ZXN0KV0KIAotICAgIGRlZiB0ZXN0cyhzZWxm
LCBwYXRocywgZGV2aWNlX3R5cGU9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbGlzdCBv
ZiB0ZXN0cyBmb3VuZC4gQm90aCBnZW5lcmljIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0cyBt
YXRjaGluZyBwYXRocyBzaG91bGQgYmUgcmV0dXJuZWQuIiIiCi0gICAgICAgIGV4cGFuZGVkX3Bh
dGhzID0gc2VsZi5fZXhwYW5kZWRfcGF0aHMocGF0aHMsIGRldmljZV90eXBlPWRldmljZV90eXBl
KQotICAgICAgICByZXR1cm4gc2VsZi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykKLQotICAg
IGRlZiBfZXhwYW5kZWRfcGF0aHMoc2VsZiwgcGF0aHMsIGRldmljZV90eXBlPU5vbmUpOgotICAg
ICAgICBleHBhbmRlZF9wYXRocyA9IFtdCi0gICAgICAgIGZzID0gc2VsZi5fZmlsZXN5c3RlbQot
ICAgICAgICBhbGxfcGxhdGZvcm1fZGlycyA9IFtwYXRoIGZvciBwYXRoIGluIGZzLmdsb2IoZnMu
am9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywgJyonKSkgaWYgZnMuaXNk
aXIocGF0aCldCi0gICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgotICAgICAgICAgICAgZXhwYW5k
ZWRfcGF0aHMuYXBwZW5kKHBhdGgpCi0gICAgICAgICAgICBpZiBzZWxmLnRlc3RfaXNkaXIocGF0
aCkgYW5kIG5vdCBwYXRoLnN0YXJ0c3dpdGgoJ3BsYXRmb3JtJykgYW5kIG5vdCBmcy5pc2Ficyhw
YXRoKToKLSAgICAgICAgICAgICAgICBmb3IgcGxhdGZvcm1fZGlyIGluIGFsbF9wbGF0Zm9ybV9k
aXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBmcy5pc2Rpcihmcy5qb2luKHBsYXRmb3JtX2Rp
ciwgcGF0aCkpIGFuZCBwbGF0Zm9ybV9kaXIgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aChk
ZXZpY2VfdHlwZT1kZXZpY2VfdHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRl
ZF9wYXRocy5hcHBlbmQoc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKGZzLmpvaW4ocGxhdGZv
cm1fZGlyLCBwYXRoKSkpCi0KLSAgICAgICAgcmV0dXJuIGV4cGFuZGVkX3BhdGhzCi0KLSAgICBk
ZWYgX3JlYWxfdGVzdHMoc2VsZiwgcGF0aHMpOgotICAgICAgICAjIFdoZW4gY29sbGVjdGluZyB0
ZXN0IGNhc2VzLCBza2lwIHRoZXNlIGRpcmVjdG9yaWVzCi0gICAgICAgIHNraXBwZWRfZGlyZWN0
b3JpZXMgPSBzZXQoWycuc3ZuJywgJ19zdm4nLCAncmVzb3VyY2VzJywgJ3N1cHBvcnQnLCAnc2Ny
aXB0LXRlc3RzJywgJ3JlZmVyZW5jZScsICdyZWZ0ZXN0J10pCi0gICAgICAgIGZpbGVzID0gZmlu
ZF9maWxlcy5maW5kKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBw
YXRocywgc2tpcHBlZF9kaXJlY3RvcmllcywgcGFydGlhbChQb3J0Ll9pc190ZXN0X2ZpbGUsIHNl
bGYpLCBzZWxmLnRlc3Rfa2V5KQotICAgICAgICByZXR1cm4gW3NlbGYucmVsYXRpdmVfdGVzdF9m
aWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10KLQotICAgICMgV2hlbiBjb2xsZWN0aW5nIHRlc3Qg
Y2FzZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgotICAgIF9z
dXBwb3J0ZWRfdGVzdF9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwn
LCAnLnhodG1sJywgJy5wbCcsICcuaHRtJywgJy5waHAnLCAnLnN2ZycsICcubWh0JywgJy54aHQn
XSkKLSAgICBfc3VwcG9ydGVkX3JlZmVyZW5jZV9leHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAn
LnhtbCcsICcueGh0bWwnLCAnLmh0bScsICcuc3ZnJywgJy54aHQnXSkKLQotICAgIGRlZiBpc193
M2NfcmVzb3VyY2VfZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6Ci0g
ICAgICAgIHBhdGggPSBmaWxlc3lzdGVtLmpvaW4oZGlybmFtZSwgZmlsZW5hbWUpCi0gICAgICAg
IHczY19wYXRoID0gZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAiaW1w
b3J0ZWQiLCAidzNjIikKLSAgICAgICAgaWYgbm90IHczY19wYXRoIGluIHBhdGg6Ci0gICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBpZiBub3Qgc2VsZi5fdzNjX3Jlc291cmNlX2Zp
bGVzOgotICAgICAgICAgICAgZmlsZXBhdGggPSBmaWxlc3lzdGVtLmpvaW4odzNjX3BhdGgsICJy
ZXNvdXJjZXMiLCAicmVzb3VyY2UtZmlsZXMuanNvbiIpCi0gICAgICAgICAgICBqc29uX2RhdGEg
PSBmaWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGZpbGVwYXRoKQotICAgICAgICAgICAgc2VsZi5f
dzNjX3Jlc291cmNlX2ZpbGVzID0ganNvbi5sb2Fkcyhqc29uX2RhdGEpCi0KLSAgICAgICAgc3Vi
cGF0aCA9IHBhdGhbbGVuKHczY19wYXRoKSArIDE6XS5yZXBsYWNlKCdcXCcsICcvJykKLSAgICAg
ICAgaWYgc3VicGF0aCBpbiBzZWxmLl93M2NfcmVzb3VyY2VfZmlsZXNbImZpbGVzIl06Ci0gICAg
ICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgZGlycGF0aCBpbiBzZWxmLl93M2NfcmVz
b3VyY2VfZmlsZXNbImRpcmVjdG9yaWVzIl06Ci0gICAgICAgICAgICBpZiBkaXJwYXRoIGluIHN1
YnBhdGg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNl
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgIyBJZiBhbnkgY2hhbmdlcyBhcmUgbWFkZSBoZXJl
IGJlIHN1cmUgdG8gdXBkYXRlIHRoZSBpc1VzZWRJblJlZnRlc3QgbWV0aG9kIGluIG9sZC1ydW4t
d2Via2l0LXRlc3RzIGFzIHdlbGwuCi0gICAgZGVmIGlzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmls
ZXN5c3RlbSwgZGlybmFtZSwgZmlsZW5hbWUpOgotICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3
aXRoKCdyZWYtJykgb3IgZmlsZW5hbWUuc3RhcnRzd2l0aCgnbm90cmVmLScpOgotICAgICAgICAg
ICAgcmV0dXJuIFRydWUKLSAgICAgICAgZmlsZW5hbWVfd2lob3V0X2V4dCwgZXh0ID0gZmlsZXN5
c3RlbS5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgaWYgZXh0IG5vdCBpbiBQb3J0Ll9zdXBw
b3J0ZWRfcmVmZXJlbmNlX2V4dGVuc2lvbnM6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg
ICAgICAgZm9yIHN1ZmZpeCBpbiBbJy1leHBlY3RlZCcsICctZXhwZWN0ZWQtbWlzbWF0Y2gnLCAn
LXJlZicsICctbm90cmVmJ106Ci0gICAgICAgICAgICBpZiBmaWxlbmFtZV93aWhvdXRfZXh0LmVu
ZHN3aXRoKHN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9oYXNfc3VwcG9ydGVkX2V4
dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0cnVlIGlm
IGZpbGVuYW1lIGlzIG9uZSBvZiB0aGUgZmlsZSBleHRlbnNpb25zIHdlIHdhbnQgdG8gcnVuIGEg
dGVzdCBvbi4iIiIKLSAgICAgICAgZXh0ZW5zaW9uID0gZmlsZXN5c3RlbS5zcGxpdGV4dChmaWxl
bmFtZSlbMV0KLSAgICAgICAgcmV0dXJuIGV4dGVuc2lvbiBpbiBQb3J0Ll9zdXBwb3J0ZWRfdGVz
dF9leHRlbnNpb25zCi0KLSAgICBkZWYgX2lzX3Rlc3RfZmlsZShzZWxmLCBmaWxlc3lzdGVtLCBk
aXJuYW1lLCBmaWxlbmFtZSk6Ci0gICAgICAgIGlmIG5vdCBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4
dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UK
LSAgICAgICAgaWYgUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sIGRpcm5h
bWUsIGZpbGVuYW1lKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBzZWxm
LmlzX3czY19yZXNvdXJjZV9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1lKToKLSAg
ICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIHRl
c3Rfa2V5KHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIlR1cm5zIGEgdGVzdCBuYW1lIGlu
dG8gYSBsaXN0IHdpdGggdHdvIHN1Ymxpc3RzLCB0aGUgbmF0dXJhbCBrZXkgb2YgdGhlCiAgICAg
ICAgIGRpcm5hbWUsIGFuZCB0aGUgbmF0dXJhbCBrZXkgb2YgdGhlIGJhc2VuYW1lLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2VfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0dGVzdC5weQppbmRleCAxMmU4MTBmNDc4
NmNlNWU4ODlkZjMwYmYxMmRhNGViMzgxMDkyNjg2Li4xZDQwMjNiMGI5MTU2ZTQ3N2YzNmQwOWJl
MjRhZDMxYTZiYjQ4YjcyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91
bml0dGVzdC5weQpAQCAtMjMyLDYzICsyMzIsNiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0gPSBNb2NrRmlsZVN5c3RlbSh7Jy9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Zvby9UZXN0RXhwZWN0YXRpb25zJzog
Jyd9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC51c2VzX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoKSkKIAotICAgIGRlZiB0ZXN0X2ZpbmRfbm9fcGF0aHNfc3BlY2lmaWVkKHNlbGYpOgot
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0
ZXN0cyA9IHBvcnQudGVzdHMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHRl
c3RzKSwgMCkKLQotICAgIGRlZiB0ZXN0X2ZpbmRfb25lX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHBv
cnQgPSBzZWxmLm1ha2VfcG9ydCh3aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHRlc3RzID0gcG9y
dC50ZXN0cyhbJ2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwnXSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChsZW4odGVzdHMpLCAxKQotCi0gICAgZGVmIHRlc3RfZmluZF9nbG9iKHNlbGYp
OgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAg
ICB0ZXN0cyA9IHBvcnQudGVzdHMoWydmYWlsdXJlcy9leHBlY3RlZC9pbSonXSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdHMpLCAyKQotCi0gICAgZGVmIHRlc3RfZmluZF93aXRo
X3NraXBwZWRfZGlyZWN0b3JpZXMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCh3aXRoX3Rlc3RzPVRydWUpCi0gICAgICAgIHRlc3RzID0gcG9ydC50ZXN0cyhbJ3VzZXJzY3Jp
cHRzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3VzZXJzY3JpcHRzL3Jlc291cmNlcy9p
ZnJhbWUuaHRtbCcsIHRlc3RzKQotCi0gICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBwZWRfZGly
ZWN0b3JpZXNfMihzZWxmKToKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVz
dHM9VHJ1ZSkKLSAgICAgICAgdGVzdHMgPSBwb3J0LnRlc3RzKFsndXNlcnNjcmlwdHMvcmVzb3Vy
Y2VzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIFtdKQotCi0gICAgZGVmIHRl
c3RfaXNfdGVzdF9maWxlKHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQot
ICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxl
c3lzdGVtLCAnJywgJ2Zvby5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll9p
c190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLnNodG1sJykpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0
ZW0sICcnLCAnZm9vLnN2ZycpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5faXNfdGVz
dF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ3Rlc3QtcmVmLXRlc3QuaHRtbCcpKQot
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmls
ZXN5c3RlbSwgJycsICdmb28ucG5nJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5f
aXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5odG1s
JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9z
dC5maWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5zdmcnKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRGYWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9v
LWV4cGVjdGVkLnhodCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3Rf
ZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guaHRt
bCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhv
c3QuZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQtbWlzbWF0Y2guc3ZnJykpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVt
LCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54aHRtbCcpKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHBvcnQuX2lzX3Rlc3RfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgJycsICdmb28t
cmVmLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUo
cG9ydC5ob3N0LmZpbGVzeXN0ZW0sICcnLCAnZm9vLW5vdHJlZi5odG1sJykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UocG9ydC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAn
JywgJ2Zvby1ub3RyZWYueGh0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5faXNf
dGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0Ll9pc190ZXN0X2ZpbGUocG9ydC5ob3N0LmZpbGVz
eXN0ZW0sICcnLCAncmVmLWZvby5odG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9y
dC5faXNfdGVzdF9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCAnJywgJ25vdHJlZi1mb28ueGhy
JykpCi0KLSAgICBkZWYgdGVzdF9pc19yZWZlcmVuY2VfaHRtbF9maWxlKHNlbGYpOgotICAgICAg
ICBmaWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oKQotICAgICAgICBzZWxmLmFzc2VydFRydWUo
UG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVk
Lmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxf
ZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC1taXNtYXRjaC54bWwnKSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNfcmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVt
LCAnJywgJ2Zvby1yZWYueGh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBvcnQuaXNf
cmVmZXJlbmNlX2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1ub3RyZWYuc3ZnJykpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVz
eXN0ZW0sICcnLCAnZm9vLmh0bWwnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQb3J0Lmlz
X3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgJycsICdmb28tZXhwZWN0ZWQudHh0Jykp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZp
bGVzeXN0ZW0sICcnLCAnZm9vLWV4cGVjdGVkLnNodG1sJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoUG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sICcnLCAnZm9vLWV4
cGVjdGVkLnBocCcpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBvcnQuaXNfcmVmZXJlbmNl
X2h0bWxfZmlsZShmaWxlc3lzdGVtLCAnJywgJ2Zvby1leHBlY3RlZC5taHQnKSkKLQogICAgIGRl
ZiB0ZXN0X3JlZmVyZW5jZV9maWxlcyhzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KHdpdGhfdGVzdHM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LnJlZmVy
ZW5jZV9maWxlcygncGFzc2VzL3N2Z3JlZnRlc3Quc3ZnJyksIFsoJz09JywgcG9ydC5sYXlvdXRf
dGVzdHNfZGlyKCkgKyAnL3Bhc3Nlcy9zdmdyZWZ0ZXN0LWV4cGVjdGVkLnN2ZycpXSkKQEAgLTMz
OSwxNCArMjgyLDYgQEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHBvcnQudGVzdF9pc2RpcigncGFzc2VzL2RvZXNfbm90X2V4aXN0
Lmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LnRlc3RfaXNkaXIoJ3Bhc3Nl
cy9kb2VzX25vdF9leGlzdC8nKSkKIAotICAgIGRlZiB0ZXN0X3Rlc3RzKHNlbGYpOgotICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQod2l0aF90ZXN0cz1UcnVlKQotICAgICAgICB0ZXN0cyA9
IHBvcnQudGVzdHMoW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Bhc3Nlcy90ZXh0Lmh0bWwn
LCB0ZXN0cykKLQotICAgICAgICB0ZXN0cyA9IHBvcnQudGVzdHMoWydwYXNzZXMnXSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRJbigncGFzc2VzL3RleHQuaHRtbCcsIHRlc3RzKQotCiAgICAgZGVmIHRl
c3RfYnVpbGRfcGF0aChzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KAogICAg
ICAgICAgICAgZXhlY3V0aXZlPU1vY2tFeGVjdXRpdmUyKG91dHB1dD0nL2RlZmF1bHQtYnVpbGQt
cGF0aC9EZWJ1ZycpLApAQCAtMzYwLDMwICsyOTUsNiBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0Ll9i
dWlsZF9wYXRoKCksICcvbXktYnVpbGQtZGlyZWN0b3J5L0RlYnVnLWVtYmVkZGVkLXBvcnQnKQog
Ci0gICAgZGVmIHRlc3RfaXNfdzNjX3Jlc291cmNlX2ZpbGUoc2VsZik6Ci0gICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIHBvcnQuaG9zdC5maWxlc3lzdGVtLndyaXRlX3Rl
eHRfZmlsZShwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3Jlc291cmNl
cy9yZXNvdXJjZS1maWxlcy5qc29uIiwgIiIiCi17ImRpcmVjdG9yaWVzIjogWwotIndlYi1wbGF0
Zm9ybS10ZXN0cy9jb21tb24iLAotIndlYi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvRG9jdW1l
bnQtY3JlYXRlRWxlbWVudC1uYW1lc3BhY2UtdGVzdHMiLAotIndlYi1wbGF0Zm9ybS10ZXN0cy9m
b250cyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvYnJvd3NlcnMvYnJvd3NpbmctdGhlLXdl
Yi9uYXZpZ2F0aW5nLWFjcm9zcy1kb2N1bWVudHMvc291cmNlL3N1cHBvcnQiLAotIndlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL2Jyb3dzZXJzL2Jyb3dzaW5nLXRoZS13ZWIvdW5sb2FkaW5nLWRvY3Vt
ZW50cy9zdXBwb3J0IiwKLSJ3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9icm93c2Vycy9oaXN0b3J5
L3RoZS1oaXN0b3J5LWludGVyZmFjZS9ub24tYXV0b21hdGVkIiwKLSJ3ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9icm93c2Vycy9oaXN0b3J5L3RoZS1sb2NhdGlvbi1pbnRlcmZhY2Uvbm9uLWF1dG9t
YXRlZCIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL2ltYWdlcyIsCi0id2ViLXBsYXRmb3JtLXRlc3Rz
L3NlcnZpY2Utd29ya2VycyIsCi0id2ViLXBsYXRmb3JtLXRlc3RzL3Rvb2xzIgotXSwgImZpbGVz
IjogWwotIndlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC94bWxodHRwcmVxdWVzdC1z
eW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbCIsCi0id2ViLXBsYXRmb3JtLXRl
c3RzL1hNTEh0dHBSZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm90LWhhbmctc2NyaXB0bG9h
ZGVyLXN1YmZyYW1lLmh0bWwiCi1dfSIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0
LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90
ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzMiLCAicmVzb3VyY2VfZmlsZS5odG1sIikpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZShwb3J0Lmhvc3Qu
ZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2ltcG9ydGVkL3czYyIsICJy
ZXNvdXJjZV9maWxlLmh0bWwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmlzX3cz
Y19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19k
aXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIs
ICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbC5o
dG1sIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxl
KHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIsICJ4bWxodHRwcmVxdWVz
dC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbCIpKQotICAgICAgICBzZWxm
LmFzc2VydFRydWUocG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3Rl
bSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0ZUVsZW1lbnQtbmFtZXNwYWNlLXRlc3RzIiwg
InRlc3QuaHRtbCIpKQotCiAgICAgZGVmIHRlc3RfamhidWlsZF93cmFwcGVyKHNlbGYpOgogICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdmb28nKQogICAgICAgICBwb3J0
LnBvcnRfbmFtZSA9ICdmb28nCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5Cmlu
ZGV4IDUwOThlZDkzZmRmZmMzZDM5YWZkYjZhNmM2ZWQ4MDNlZGIzZjk5OGEuLjQwM2ViNzBiN2E0
YjMyOGNiNzU0YThmOWQzYzg5N2YxZmIwYzI5NzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9mYWN0b3J5LnB5CkBAIC0xMTYsNyArMTE2LDYgQEAgY2xhc3MgUG9ydEZhY3Rvcnkob2JqZWN0
KToKICAgICAgICAgJ2pzY19vbmx5LkpzY09ubHlQb3J0JywKICAgICAgICAgJ21hYy5NYWNDYXRh
bHlzdFBvcnQnLAogICAgICAgICAnbWFjLk1hY1BvcnQnLAotICAgICAgICAnbW9ja19kcnQuTW9j
a0RSVFBvcnQnLAogICAgICAgICAndGVzdC5UZXN0UG9ydCcsCiAgICAgICAgICd3aW4uRlRXUG9y
dCcsCiAgICAgICAgICd3aW4uV2luQ2Fpcm9Qb3J0JywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9tb2NrX2RydC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxZjM0NjA3OWQx
ZGI4ZjdkNmEwNTQyMjkyZDkzOWFjZDg4YTdhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnQu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUg
R29vZ2xlIG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0iIiIKLVRoaXMg
aXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlIHRoYXQgb3ZlcnJpZGVz
IG90aGVyCi1wb3J0cyBhbmQgY2hhbmdlcyB0aGUgRHJpdmVyIGJpbmFyeSB0byAiTW9ja0RSVCIu
Ci0KLVRoZSBNb2NrRFJUIG9iamVjdHMgZW11bGF0ZSB3aGF0IGEgcmVhbCBEUlQgd291bGQgZG8u
IEluIHBhcnRpY3VsYXIsIHRoZXkKLXJldHVybiB0aGUgb3V0cHV0IGEgcmVhbCBEUlQgd291bGQg
cmV0dXJuIGZvciBhIGdpdmVuIHRlc3QsIGFzc3VtaW5nIHRoYXQKLXRlc3QgYWN0dWFsbHkgcGFz
c2VzIChleGNlcHQgZm9yIHJlZnRlc3RzLCB3aGljaCBjdXJyZW50bHkgY2F1c2UgdGhlCi1Nb2Nr
RFJUIHRvIGNyYXNoKS4KLSIiIgotCi1pbXBvcnQgYmFzZTY0Ci1pbXBvcnQgbG9nZ2luZwotaW1w
b3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotIyBTaW5jZSB3ZSBleGVjdXRl
IHRoaXMgc2NyaXB0IGRpcmVjdGx5IGFzIHBhcnQgb2YgdGhlIHVuaXQgdGVzdHMsIHdlIG5lZWQg
dG8gZW5zdXJlCi0jIHRoYXQgVG9vbHMvU2NyaXB0cyBpcyBpbiBzeXMucGF0aCBmb3IgdGhlIG5l
eHQgaW1wb3J0cyB0byB3b3JrIGNvcnJlY3RseS4KLXNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5h
bWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkKLWlmIHNjcmlwdF9kaXIgbm90IGluIHN5cy5wYXRoOgot
ICAgIHN5cy5wYXRoLmFwcGVuZChzY3JpcHRfZGlyKQotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9zdAotZnJvbSB3ZWJraXRweS5wb3J0LmRy
aXZlciBpbXBvcnQgRHJpdmVySW5wdXQsIERyaXZlck91dHB1dCwgRHJpdmVyUHJveHkKLWZyb20g
d2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQotCi1mcm9tIHdlYmtpdGNv
cmVweSBpbXBvcnQgc3RyaW5nX3V0aWxzCi0KLV9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKLQotCi1jbGFzcyBNb2NrRFJUUG9ydChvYmplY3QpOgotICAgIHBvcnRfbmFtZSA9ICdt
b2NrJwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFt
ZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0gICAgICAgIHJldHVybiBwb3J0X25h
bWUKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToK
LSAgICAgICAgc2VsZi5fX2RlbGVnYXRlID0gUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFt
ZS5yZXBsYWNlKCdtb2NrLScsICcnKSwgKiprd2FyZ3MpCi0KLSAgICBkZWYgX19nZXRhdHRyX18o
c2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX19kZWxlZ2F0ZSwgbmFt
ZSkKLQotICAgIGRlZiBjaGVja19idWlsZChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQot
ICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAg
IGRlZiBjcmVhdGVfZHJpdmVyKHNlbGYsIHdvcmtlcl9udW1iZXIsIG5vX3RpbWVvdXQ9RmFsc2Up
OgotICAgICAgICAjIFRoZSBtYWdpYyBvZiB0aGUgTW9ja0RSVFBvcnQgaXMgdGhhdCB3ZSBjcmVh
dGUgYSBkcml2ZXIgdGhhdCBoYXMgYQotICAgICAgICAjIGNtZF9saW5lKCkgbWV0aG9kIG1vbmtl
eS1wYXRjaGVkIHRvIGludm9rZSB0aGlzIHNjcmlwdCBpbnN0ZWFkIG9mIERSVC4KLSAgICAgICAg
cmV0dXJuIERyaXZlclByb3h5KHNlbGYsIHdvcmtlcl9udW1iZXIsIHNlbGYuX21vY2tlZF9kcml2
ZXJfbWFrZXIsIHBpeGVsX3Rlc3RzPXNlbGYuZ2V0X29wdGlvbigncGl4ZWxfdGVzdHMnKSwgbm9f
dGltZW91dD1ub190aW1lb3V0KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfbW9ja2Vk
X2RyaXZlcl9tYWtlcihwb3J0LCB3b3JrZXJfbnVtYmVyLCBwaXhlbF90ZXN0cywgbm9fdGltZW91
dD1GYWxzZSk6Ci0gICAgICAgIHBhdGhfdG9fdGhpc19maWxlID0gcG9ydC5ob3N0LmZpbGVzeXN0
ZW0uYWJzcGF0aChfX2ZpbGVfXy5yZXBsYWNlKCcucHljJywgJy5weScpKQotICAgICAgICBkcml2
ZXIgPSBwb3J0Ll9fZGVsZWdhdGUuX2RyaXZlcl9jbGFzcygpKHBvcnQsIHdvcmtlcl9udW1iZXIs
IHBpeGVsX3Rlc3RzLCBub190aW1lb3V0KQotICAgICAgICBkcml2ZXIuY21kX2xpbmUgPSBwb3J0
Ll9vdmVycmlkaW5nX2NtZF9saW5lKGRyaXZlci5jbWRfbGluZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0Ll9fZGVsZWdhdGUuX3BhdGhf
dG9fZHJpdmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGF0aF90b190aGlzX2ZpbGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC5fX2RlbGVnYXRlLm5hbWUo
KSkKLSAgICAgICAgcmV0dXJuIGRyaXZlcgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBf
b3ZlcnJpZGluZ19jbWRfbGluZShvcmlnaW5hbF9jbWRfbGluZSwgZHJpdmVyX3BhdGgsIHB5dGhv
bl9leGUsIHRoaXNfZmlsZSwgcG9ydF9uYW1lKToKLSAgICAgICAgZGVmIG5ld19jbWRfbGluZShw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgICAgICBjbWRfbGluZSA9IG9yaWdp
bmFsX2NtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICAgICAgaW5k
ZXggPSBjbWRfbGluZS5pbmRleChkcml2ZXJfcGF0aCkKLSAgICAgICAgICAgIGNtZF9saW5lW2lu
ZGV4OmluZGV4ICsgMV0gPSBbcHl0aG9uX2V4ZSwgdGhpc19maWxlLCAnLS1wbGF0Zm9ybScsIHBv
cnRfbmFtZV0KLSAgICAgICAgICAgIHJldHVybiBjbWRfbGluZQotCi0gICAgICAgIHJldHVybiBu
ZXdfY21kX2xpbmUKLQotICAgIGRlZiBzdGFydF9oZWxwZXIoc2VsZiwgcGl4ZWxfdGVzdHM9RmFs
c2UsIHByZWZlcl9pbnRlZ3JhdGVkX2dwdT1GYWxzZSk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRl
ZiBzdGFydF9odHRwX3NlcnZlcihzZWxmLCBudW1iZXJfb2Zfc2VydmVycyk6Ci0gICAgICAgIHBh
c3MKLQotICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNz
Ci0KLSAgICBkZWYgc3RvcF9oZWxwZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBz
dG9wX2h0dHBfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcF93ZWJz
b2NrZXRfc2VydmVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc2hvd19yZXN1bHRz
X2h0bWxfZmlsZShzZWxmLCByZXN1bHRzX2ZpbGVuYW1lKToKLSAgICAgICAgcGFzcwotCi0KLWRl
ZiBtYWluKGFyZ3YsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgIiIiUnVuIHRo
ZSB0ZXN0cy4iIiIKLQotICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9vcHRpb25zKGFyZ3YpCi0g
ICAgZHJ0ID0gTW9ja0RSVChvcHRpb25zLCBhcmdzLCBob3N0LCBzdGRpbiwgc3Rkb3V0LCBzdGRl
cnIpCi0gICAgcmV0dXJuIGRydC5ydW4oKQotCi0KLWRlZiBwYXJzZV9vcHRpb25zKGFyZ3YpOgot
ICAgICMgRklYTUU6IFdlIGhhdmUgdG8gZG8gY3VzdG9tIGFyZyBwYXJzaW5nIGluc3RlYWQgb2Yg
dXNpbmcgdGhlIG9wdHBhcnNlCi0gICAgIyBtb2R1bGUuICBGaXJzdCwgQ2hyb21pdW0gYW5kIG5v
bi1DaHJvbWl1bSBEUlRzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnQKLSAgICAjIHN5bnRheC4g
IENocm9taXVtIHVzZXMgLS1waXhlbC10ZXN0cz08cGF0aD4sIGFuZCBub24tQ2hyb21pdW0gdXNl
cwotICAgICMgLS1waXhlbC10ZXN0cyBhcyBhIGJvb2xlYW4gZmxhZy4gU2Vjb25kLCB3ZSBkb24n
dCB3YW50IHRvIGhhdmUgdG8gbGlzdAotICAgICMgZXZlcnkgY29tbWFuZCBsaW5lIGZsYWcgRFJU
IGFjY2VwdHMsIGJ1dCBvcHRwYXJzZSBjb21wbGFpbnMgYWJvdXQKLSAgICAjIHVucmVjb2duaXpl
ZCBmbGFncy4gQXQgc29tZSBwb2ludCBpdCBtaWdodCBiZSBnb29kIHRvIHNoYXJlIGEgY29tbW9u
Ci0gICAgIyBEUlQgb3B0aW9ucyBjbGFzcyBiZXR3ZWVuIHRoaXMgZmlsZSBhbmQgd2Via2l0LnB5
IGFuZCBjaHJvbWl1bS5weQotICAgICMganVzdCB0byBnZXQgYmV0dGVyIHR5cGUgY2hlY2tpbmcu
Ci0gICAgcGxhdGZvcm1faW5kZXggPSBhcmd2LmluZGV4KCctLXBsYXRmb3JtJykKLSAgICBwbGF0
Zm9ybSA9IGFyZ3ZbcGxhdGZvcm1faW5kZXggKyAxXQotCi0gICAgcGl4ZWxfdGVzdHMgPSAnLS1w
aXhlbC10ZXN0cycgaW4gYXJndgotICAgIHJldHVybiAob3B0cGFyc2UuVmFsdWVzKHsncGxhdGZv
cm0nOiBwbGF0Zm9ybSwgJ3BpeGVsX3Rlc3RzJzogcGl4ZWxfdGVzdHN9KSwgYXJndikKLQotCi1j
bGFzcyBNb2NrRFJUKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIGFy
Z3MsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6Ci0gICAgICAgIHNlbGYuX29wdGlvbnMg
PSBvcHRpb25zCi0gICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCi0gICAgICAgIHNlbGYuX2hvc3Qg
PSBob3N0Ci0gICAgICAgIHNlbGYuX3N0ZG91dCA9IHN0ZG91dAotICAgICAgICBzZWxmLl9zdGRp
biA9IHN0ZGluCi0gICAgICAgIHNlbGYuX3N0ZGVyciA9IHN0ZGVycgotCi0gICAgICAgIHBvcnRf
bmFtZSA9IE5vbmUKLSAgICAgICAgaWYgb3B0aW9ucy5wbGF0Zm9ybToKLSAgICAgICAgICAgIHBv
cnRfbmFtZSA9IG9wdGlvbnMucGxhdGZvcm0KLSAgICAgICAgc2VsZi5fcG9ydCA9IFBvcnRGYWN0
b3J5KGhvc3QpLmdldChwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMpCi0gICAg
ICAgIHNlbGYuX2RyaXZlciA9IHNlbGYuX3BvcnQuY3JlYXRlX2RyaXZlcigwKQotCi0gICAgZGVm
IHJ1bihzZWxmKToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxm
Ll9zdGRpbi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMAotICAgICAgICAgICAgZHJpdmVyX2lucHV0ID0gc2VsZi5pbnB1dF9mcm9t
X2xpbmUobGluZSkKLSAgICAgICAgICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gc2VsZi5fcG9ydC5z
cGxpdF90ZXN0KGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpCi0gICAgICAgICAgICBpc19yZWZ0ZXN0
ID0gKHNlbGYuX3BvcnQucmVmZXJlbmNlX2ZpbGVzKGRyaXZlcl9pbnB1dC50ZXN0X25hbWUpIG9y
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuaXNfcmVmZXJlbmNlX2h0bWxf
ZmlsZShzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLCBkaXJuYW1lLCBiYXNlbmFtZSkpCi0gICAgICAg
ICAgICBvdXRwdXQgPSBzZWxmLm91dHB1dF9mb3JfdGVzdChkcml2ZXJfaW5wdXQsIGlzX3JlZnRl
c3QpCi0gICAgICAgICAgICBzZWxmLndyaXRlX3Rlc3Rfb3V0cHV0KGRyaXZlcl9pbnB1dCwgb3V0
cHV0LCBpc19yZWZ0ZXN0KQotCi0gICAgZGVmIGlucHV0X2Zyb21fbGluZShzZWxmLCBsaW5lKToK
LSAgICAgICAgdmFscyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgiJyIpCi0gICAgICAgIGlmIGxlbih2
YWxzKSA9PSAxOgotICAgICAgICAgICAgdXJpID0gdmFsc1swXQotICAgICAgICAgICAgY2hlY2tz
dW0gPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1cmkgPSB2YWxzWzBdCi0gICAg
ICAgICAgICBjaGVja3N1bSA9IHZhbHNbMV0KLSAgICAgICAgaWYgdXJpLnN0YXJ0c3dpdGgoJ2h0
dHA6Ly8nKSBvciB1cmkuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToKLSAgICAgICAgICAgIHRlc3Rf
bmFtZSA9IHNlbGYuX2RyaXZlci51cmlfdG9fdGVzdCh1cmkpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodXJp
KQotCi0gICAgICAgIHJldHVybiBEcml2ZXJJbnB1dCh0ZXN0X25hbWUsIDAsIGNoZWNrc3VtLCBz
ZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKQotCi0gICAgZGVmIG91dHB1dF9mb3JfdGVzdChzZWxm
LCB0ZXN0X2lucHV0LCBpc19yZWZ0ZXN0KToKLSAgICAgICAgcG9ydCA9IHNlbGYuX3BvcnQKLSAg
ICAgICAgYWN0dWFsX3RleHQgPSBwb3J0LmV4cGVjdGVkX3RleHQodGVzdF9pbnB1dC50ZXN0X25h
bWUpCi0gICAgICAgIGFjdHVhbF9hdWRpbyA9IHBvcnQuZXhwZWN0ZWRfYXVkaW8odGVzdF9pbnB1
dC50ZXN0X25hbWUpCi0gICAgICAgIGFjdHVhbF9pbWFnZSA9IE5vbmUKLSAgICAgICAgYWN0dWFs
X2NoZWNrc3VtID0gTm9uZQotICAgICAgICBpZiBpc19yZWZ0ZXN0OgotICAgICAgICAgICAgIyBN
YWtlIHVwIHNvbWUgb3V0cHV0IGZvciByZWZ0ZXN0cy4KLSAgICAgICAgICAgIGFjdHVhbF90ZXh0
ID0gJ3JlZmVyZW5jZSB0ZXh0XG4nCi0gICAgICAgICAgICBhY3R1YWxfY2hlY2tzdW0gPSAnbW9j
ay1jaGVja3N1bScKLSAgICAgICAgICAgIGFjdHVhbF9pbWFnZSA9ICdibGFuaycKLSAgICAgICAg
ICAgIGlmIHRlc3RfaW5wdXQudGVzdF9uYW1lLmVuZHN3aXRoKCctbWlzbWF0Y2guaHRtbCcpOgot
ICAgICAgICAgICAgICAgIGFjdHVhbF90ZXh0ID0gJ25vdCByZWZlcmVuY2UgdGV4dFxuJwotICAg
ICAgICAgICAgICAgIGFjdHVhbF9jaGVja3N1bSA9ICdub3QtbW9jay1jaGVja3N1bScKLSAgICAg
ICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSAnbm90IGJsYW5rJwotICAgICAgICBlbGlmIHNlbGYu
X29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kIHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAg
ICAgIGFjdHVhbF9jaGVja3N1bSA9IHBvcnQuZXhwZWN0ZWRfY2hlY2tzdW0odGVzdF9pbnB1dC50
ZXN0X25hbWUpCi0gICAgICAgICAgICBhY3R1YWxfaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdl
KHRlc3RfaW5wdXQudGVzdF9uYW1lKQotCi0gICAgICAgIHJldHVybiBEcml2ZXJPdXRwdXQoYWN0
dWFsX3RleHQsIGFjdHVhbF9pbWFnZSwgYWN0dWFsX2NoZWNrc3VtLCBhY3R1YWxfYXVkaW8pCi0K
LSAgICBkZWYgd3JpdGVfdGVzdF9vdXRwdXQoc2VsZiwgdGVzdF9pbnB1dCwgb3V0cHV0LCBpc19y
ZWZ0ZXN0KToKLSAgICAgICAgaWYgb3V0cHV0LmF1ZGlvOgotICAgICAgICAgICAgc2VsZi5fc3Rk
b3V0LndyaXRlKCdDb250ZW50LVR5cGU6IGF1ZGlvL3dhdlxuJykKLSAgICAgICAgICAgIHNlbGYu
X3N0ZG91dC53cml0ZSgnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XG4nKQotICAg
ICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKGJhc2U2NC5iNjRlbmNvZGUob3V0cHV0LmF1ZGlv
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnQ29udGVu
dC1UeXBlOiB0ZXh0L3BsYWluXG4nKQotICAgICAgICAgICAgIyBGSVhNRTogTm90ZSB0aGF0IHdl
IGRvbid0IGVuc3VyZSB0aGVyZSBpcyBhIHRyYWlsaW5nIG5ld2xpbmUhCi0gICAgICAgICAgICAj
IFRoaXMgbWlycm9ycyBhY3R1YWwgKE1hYykgRFJUIGJlaGF2aW9yIGJ1dCBpcyBhIGJ1Zy4KLSAg
ICAgICAgICAgIGlmIG91dHB1dC50ZXh0OgotICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53
cml0ZShvdXRwdXQudGV4dCkKLQotICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJyNFT0Zcbicp
Ci0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQgb3V0cHV0LmltYWdl
X2hhc2g6Ci0gICAgICAgICAgICBzZWxmLl9zdGRvdXQud3JpdGUoJ1xuJykKLSAgICAgICAgICAg
IHNlbGYuX3N0ZG91dC53cml0ZSgnQWN0dWFsSGFzaDogJXNcbicgJSBvdXRwdXQuaW1hZ2VfaGFz
aCkKLSAgICAgICAgICAgIHNlbGYuX3N0ZG91dC53cml0ZSgnRXhwZWN0ZWRIYXNoOiAlc1xuJyAl
IHRlc3RfaW5wdXQuaW1hZ2VfaGFzaCkKLSAgICAgICAgICAgIGlmIG91dHB1dC5pbWFnZV9oYXNo
ICE9IHRlc3RfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXQu
d3JpdGUoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcG5nXG4nKQotICAgICAgICAgICAgICAgIHNlbGYu
X3N0ZG91dC53cml0ZSgnQ29udGVudC1MZW5ndGg6ICVzXG4nICUgbGVuKG91dHB1dC5pbWFnZSkp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0LndyaXRlKHN0cmluZ191dGlscy5kZWNvZGUo
b3V0cHV0LmltYWdlLCB0YXJnZXRfdHlwZT1zdHIpKQotICAgICAgICBzZWxmLl9zdGRvdXQud3Jp
dGUoJyNFT0ZcbicpCi0gICAgICAgIHNlbGYuX3N0ZG91dC5mbHVzaCgpCi0gICAgICAgIHNlbGYu
X3N0ZGVyci53cml0ZSgnI0VPRlxuJykKLSAgICAgICAgc2VsZi5fc3RkZXJyLmZsdXNoKCkKLQot
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjIE5vdGUgdGhhdCB0aGUgTW9jayBpbiBN
b2NrRFJUIHJlZmVycyB0byB0aGUgZmFjdCB0aGF0IGl0IGlzIGVtdWxhdGluZyBhCi0gICAgIyBy
ZWFsIERSVCwgYW5kIGFzIHN1Y2gsIGl0IG5lZWRzIGFjY2VzcyB0byBhIHJlYWwgU3lzdGVtSG9z
dCwgbm90IGEgTW9ja1N5c3RlbUhvc3QuCi0gICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0s
IFN5c3RlbUhvc3QoKSwgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3MzgxN2M4YzEwYTlhN2YzYjNhZDcwNzQ0MTg1ODJj
MDRkOGMwYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKKysrIC9kZXYv
bnVsbApAQCAtMSwyMDggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSIiIlVuaXQgdGVzdHMg
Zm9yIE1vY2tEUlQuIiIiCi0KLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdlYmtpdGNvcmVweSBp
bXBvcnQgU3RyaW5nSU8KLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Rf
bW9jayBpbXBvcnQgTW9ja1N5c3RlbUhvc3QKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgbW9j
a19kcnQKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgcG9ydF90ZXN0Y2FzZQotZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCB0ZXN0Ci1mcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQg
UG9ydEZhY3RvcnkKLWZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKLQotCi1tb2Nr
X29wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJykK
LQotCi1jbGFzcyBNb2NrRFJUUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgot
Ci0gICAgZGVmIG1ha2VfcG9ydChzZWxmLCBvcHRpb25zPW1vY2tfb3B0aW9ucyk6Ci0gICAgICAg
IGhvc3QgPSBNb2NrU3lzdGVtSG9zdCgpCi0gICAgICAgIHRlc3QuYWRkX3VuaXRfdGVzdHNfdG9f
bW9ja19maWxlc3lzdGVtKGhvc3QuZmlsZXN5c3RlbSkKLSAgICAgICAgcmV0dXJuIG1vY2tfZHJ0
Lk1vY2tEUlRQb3J0KGhvc3QsIHBvcnRfbmFtZT0nbW9jay1tYWMtbGlvbicsIG9wdGlvbnM9b3B0
aW9ucykKLQotICAgIGRlZiB0ZXN0X3BvcnRfbmFtZV9pbl9jb25zdHJ1Y3RvcihzZWxmKToKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZHJ0Lk1vY2tEUlRQb3J0KE1vY2tTeXN0ZW1Ib3N0
KCksIHBvcnRfbmFtZT0nbW9jay10ZXN0JykpCi0KLSAgICBkZWYgdGVzdF9jaGVja19zeXNfZGVw
cyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZShzZWxmKToK
LSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZGlmZl9pbWFnZV9jcmFzaGVkKHNlbGYpOgot
ICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF91c2VzX2FwYWNoZShzZWxmKToKLSAgICAgICAg
cGFzcwotCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3Rfc3RhcnRfaGVscGVyKHNlbGYpOgotICAg
ICAgICBwYXNzCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fbm9ybWFs
KHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3Nl
cnZlcl9fZmFpbHMoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90
ZXN0X3dlYnNvY2tldF9zZXJ2ZXJfX25vcm1hbChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAg
ZGVmIGludGVncmF0aW9uX3Rlc3Rfd2Vic29ja2V0X3NlcnZlcl9fZmFpbHMoc2VsZik6Ci0gICAg
ICAgIHBhc3MKLQotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2hlbHBlcihzZWxmKToKLSAgICAg
ICAgcGFzcwotCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgcGFz
cwotCi0gICAgZGVmIHRlc3RfY2hlY2tfYnVpbGQoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAg
IGRlZiB0ZXN0X2FzYW5fdXBsb2FkX2NvbmZpZ3VyYXRpb24oc2VsZik6Ci0gICAgICAgIHBhc3MK
LQotCi1jbGFzcyBNb2NrRFJUVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGlucHV0
X2xpbmUoc2VsZiwgcG9ydCwgdGVzdF9uYW1lLCBjaGVja3N1bT1Ob25lKToKLSAgICAgICAgdXJs
ID0gcG9ydC5jcmVhdGVfZHJpdmVyKDApLnRlc3RfdG9fdXJpKHRlc3RfbmFtZSkKLSAgICAgICAg
aWYgdXJsLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKToKLSAgICAgICAgICAgIHVybCA9IHVybFtsZW4o
J2ZpbGU6Ly8nKTpdCi0KLSAgICAgICAgaWYgY2hlY2tzdW06Ci0gICAgICAgICAgICByZXR1cm4g
dXJsICsgIiciICsgY2hlY2tzdW0gKyAnXG4nCi0gICAgICAgIHJldHVybiB1cmwgKyAnXG4nCi0K
LSAgICBkZWYgZXh0cmFfYXJncyhzZWxmLCBwaXhlbF90ZXN0cyk6Ci0gICAgICAgIGlmIHBpeGVs
X3Rlc3RzOgotICAgICAgICAgICAgcmV0dXJuIFsnLS1waXhlbC10ZXN0cycsICctJ10KLSAgICAg
ICAgcmV0dXJuIFsnLSddCi0KLSAgICBkZWYgbWFrZV9kcnQoc2VsZiwgb3B0aW9ucywgYXJncywg
aG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKLSAgICAgICAgcmV0dXJuIG1vY2tfZHJ0Lk1v
Y2tEUlQob3B0aW9ucywgYXJncywgaG9zdCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQotCi0gICAg
ZGVmIG1ha2VfaW5wdXRfb3V0cHV0KHNlbGYsIHBvcnQsIHRlc3RfbmFtZSwgcGl4ZWxfdGVzdHMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrc3VtLCBkcnRfb3V0cHV0
LCBkcnRfaW5wdXQ9Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lKToKLSAgICAgICAgaWYgcGl4ZWxf
dGVzdHM6Ci0gICAgICAgICAgICBpZiBub3QgZXhwZWN0ZWRfY2hlY2tzdW06Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0ZWRfY2hlY2tzdW0gPSBwb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHRlc3RfbmFt
ZSkKLSAgICAgICAgaWYgbm90IGRydF9pbnB1dDoKLSAgICAgICAgICAgIGRydF9pbnB1dCA9IHNl
bGYuaW5wdXRfbGluZShwb3J0LCB0ZXN0X25hbWUsIGV4cGVjdGVkX2NoZWNrc3VtKQotICAgICAg
ICB0ZXh0X291dHB1dCA9IGV4cGVjdGVkX3RleHQgb3IgcG9ydC5leHBlY3RlZF90ZXh0KHRlc3Rf
bmFtZSkgb3IgJycKLQotICAgICAgICBpZiBub3QgZHJ0X291dHB1dDoKLSAgICAgICAgICAgIGRy
dF9vdXRwdXQgPSBzZWxmLmV4cGVjdGVkX291dHB1dChwb3J0LCB0ZXN0X25hbWUsIHBpeGVsX3Rl
c3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRf
b3V0cHV0LCBleHBlY3RlZF9jaGVja3N1bSkKLSAgICAgICAgcmV0dXJuIChkcnRfaW5wdXQsIGRy
dF9vdXRwdXQpCi0KLSAgICBkZWYgZXhwZWN0ZWRfb3V0cHV0KHNlbGYsIHBvcnQsIHRlc3RfbmFt
ZSwgcGl4ZWxfdGVzdHMsIHRleHRfb3V0cHV0LCBleHBlY3RlZF9jaGVja3N1bSk6Ci0gICAgICAg
IG91dHB1dCA9IFsnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXG4nXQotICAgICAgICBpZiB0ZXh0
X291dHB1dDoKLSAgICAgICAgICAgIG91dHB1dC5hcHBlbmQodGV4dF9vdXRwdXQpCi0gICAgICAg
IG91dHB1dC5hcHBlbmQoJyNFT0ZcbicpCi0gICAgICAgIGlmIHBpeGVsX3Rlc3RzIGFuZCBleHBl
Y3RlZF9jaGVja3N1bToKLSAgICAgICAgICAgIG91dHB1dC5leHRlbmQoWydcbicsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAnQWN0dWFsSGFzaDogJXNcbicgJSBleHBlY3RlZF9jaGVja3N1
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZEhhc2g6ICVzXG4nICUgZXhw
ZWN0ZWRfY2hlY2tzdW1dKQotICAgICAgICBvdXRwdXQuYXBwZW5kKCcjRU9GXG4nKQotICAgICAg
ICByZXR1cm4gb3V0cHV0Ci0KLSAgICBkZWYgYXNzZXJ0VGVzdChzZWxmLCB0ZXN0X25hbWUsIHBp
eGVsX3Rlc3RzLCBleHBlY3RlZF9jaGVja3N1bT1Ob25lLCBkcnRfb3V0cHV0PU5vbmUsIGhvc3Q9
Tm9uZSwgZXhwZWN0ZWRfdGV4dD1Ob25lKToKLSAgICAgICAgcG9ydF9uYW1lID0gJ3Rlc3QnCi0g
ICAgICAgIGhvc3QgPSBob3N0IG9yIE1vY2tTeXN0ZW1Ib3N0KCkKLSAgICAgICAgdGVzdC5hZGRf
dW5pdF90ZXN0c190b19tb2NrX2ZpbGVzeXN0ZW0oaG9zdC5maWxlc3lzdGVtKQotICAgICAgICBw
b3J0ID0gUG9ydEZhY3RvcnkoaG9zdCkuZ2V0KHBvcnRfbmFtZSkKLSAgICAgICAgZHJ0X2lucHV0
LCBkcnRfb3V0cHV0ID0gc2VsZi5tYWtlX2lucHV0X291dHB1dChwb3J0LCB0ZXN0X25hbWUsCi0g
ICAgICAgICAgICBwaXhlbF90ZXN0cywgZXhwZWN0ZWRfY2hlY2tzdW0sIGRydF9vdXRwdXQsIGRy
dF9pbnB1dD1Ob25lLCBleHBlY3RlZF90ZXh0PWV4cGVjdGVkX3RleHQpCi0KLSAgICAgICAgYXJn
cyA9IFsnLS1wbGF0Zm9ybScsIHBvcnRfbmFtZV0gKyBzZWxmLmV4dHJhX2FyZ3MocGl4ZWxfdGVz
dHMpCi0gICAgICAgIHN0ZGluID0gU3RyaW5nSU8oZHJ0X2lucHV0KQotICAgICAgICBzdGRvdXQg
PSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZGVyciA9IFN0cmluZ0lPKCkKLSAgICAgICAgb3B0aW9u
cywgYXJncyA9IG1vY2tfZHJ0LnBhcnNlX29wdGlvbnMoYXJncykKLQotICAgICAgICBkcnQgPSBz
ZWxmLm1ha2VfZHJ0KG9wdGlvbnMsIGFyZ3MsIGhvc3QsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikK
LSAgICAgICAgcmVzID0gZHJ0LnJ1bigpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMs
IDApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycuam9p
bihkcnRfb3V0cHV0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUo
KSwgJyNFT0ZcbicpCi0KLSAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgotICAgICAgICBob3N0ID0g
TW9ja1N5c3RlbUhvc3QoKQotICAgICAgICB0ZXN0LmFkZF91bml0X3Rlc3RzX3RvX21vY2tfZmls
ZXN5c3RlbShob3N0LmZpbGVzeXN0ZW0pCi0gICAgICAgIHN0ZGluID0gU3RyaW5nSU8oKQotICAg
ICAgICBzdGRvdXQgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZGVyciA9IFN0cmluZ0lPKCkKLSAg
ICAgICAgcmVzID0gbW9ja19kcnQubWFpbihbJy0tcGxhdGZvcm0nLCAndGVzdCddICsgc2VsZi5l
eHRyYV9hcmdzKEZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBzdGRp
biwgc3Rkb3V0LCBzdGRlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnJykKLSAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoaG9zdC5maWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMsIHt9KQotCi0gICAgZGVmIHRlc3Rf
cGl4ZWx0ZXN0X3Bhc3NlcyhzZWxmKToKLSAgICAgICAgIyBUaGlzIGFsc28gdGVzdHMgdGhhdCB3
ZSBoYW5kbGUgSFRUUDogdGVzdCBVUkxzIHByb3Blcmx5LgotICAgICAgICBzZWxmLmFzc2VydFRl
c3QoJ2h0dHAvdGVzdHMvcGFzc2VzL3RleHQuaHRtbCcsIFRydWUpCi0KLSAgICBkZWYgdGVzdF9w
aXhlbHRlc3RfX2ZhaWxzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRlc3QoJ2ZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlX2NoZWNrc3VtLmh0bWwnLCBwaXhlbF90ZXN0cz1UcnVlLAotICAgICAg
ICAgICAgZXhwZWN0ZWRfY2hlY2tzdW09J2ltYWdlX2NoZWNrc3VtLWNoZWNrc3VtJywKLSAgICAg
ICAgICAgIGRydF9vdXRwdXQ9WydDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbicsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAnaW1hZ2VfY2hlY2tzdW0tdHh0JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICcjRU9GXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICdBY3R1YWxIYXNoOiBpbWFnZV9jaGVja3N1bS1jaGVja3N1bVxuJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RlZEhhc2g6IGltYWdlX2NoZWNrc3VtLWNo
ZWNrc3VtXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgJyNFT0ZcbiddKQotCi0gICAgZGVm
IHRlc3RfdGV4dG9ubHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VGVzdCgncGFzc2VzL2lt
YWdlLmh0bWwnLCBGYWxzZSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrc3VtX2luX3BuZyhzZWxmKToK
LSAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdwYXNzZXMvY2hlY2tzdW1faW5faW1hZ2UuaHRtbCcs
IFRydWUpCi0KLSAgICBkZWYgdGVzdF9taXNzaW5nX2ltYWdlKHNlbGYpOgotICAgICAgICBzZWxm
LmFzc2VydFRlc3QoJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCcsIFRydWUp
Ci0KLSAgICBkZWYgdGVzdF9taXNzaW5nX3RleHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0
VGVzdCgnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwnLCBUcnVlKQotCi0gICAg
ZGVmIHRlc3RfcmVmdGVzdF9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUZXN0KCdw
YXNzZXMvcmVmdGVzdC5odG1sJywgRmFsc2UsIGV4cGVjdGVkX2NoZWNrc3VtPSdtb2NrLWNoZWNr
c3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRleHRcbicpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VGVzdCgncGFzc2VzL3JlZnRlc3QuaHRtbCcsIFRydWUsIGV4cGVjdGVkX2NoZWNrc3VtPSdt
b2NrLWNoZWNrc3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRleHRcbicpCi0KLSAgICBk
ZWYgdGVzdF9yZWZ0ZXN0X21pc21hdGNoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRlc3Qo
J3Bhc3Nlcy9taXNtYXRjaC5odG1sJywgRmFsc2UsIGV4cGVjdGVkX2NoZWNrc3VtPSdtb2NrLWNo
ZWNrc3VtJywgZXhwZWN0ZWRfdGV4dD0ncmVmZXJlbmNlIHRleHRcbicpCi0gICAgICAgIHNlbGYu
YXNzZXJ0VGVzdCgncGFzc2VzL21pc21hdGNoLmh0bWwnLCBUcnVlLCBleHBlY3RlZF9jaGVja3N1
bT0nbW9jay1jaGVja3N1bScsIGV4cGVjdGVkX3RleHQ9J3JlZmVyZW5jZSB0ZXh0XG4nKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQppbmRleCA2
Y2IwNjQ1Njk4MzFiODgzMDU2OTJlZDc3NzQ0ZjkzNzM1NWU3NDA2Li40NzYzYWQxMmI1MmRhYzQ2
ZmY1ZmI1NzE0ZDhmNmRhNWM5OTM3Y2MwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAtNTAsNiArNTAsNyBAQCBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0udXNlciBpbXBvcnQgVXNlcgogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLmFic3RyYWN0c2VxdWVuY2VkY29tbWFuZCBpbXBvcnQgQWJzdHJhY3RTZXF1ZW5jZWRDb21t
YW5kCiBmcm9tIHdlYmtpdHB5LnRvb2wuZ3JhbW1hciBpbXBvcnQgcGx1cmFsaXplCiBmcm9tIHdl
YmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQ29tbWFuZAorZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfZmluZGVyIGltcG9ydCBMYXlv
dXRUZXN0RmluZGVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9leHBl
Y3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkucG9ydCBpbXBv
cnQgcGxhdGZvcm1fb3B0aW9ucywgY29uZmlndXJhdGlvbl9vcHRpb25zCiAKQEAgLTQ4OSw3ICs0
OTAsOCBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9ucyhDb21tYW5kKToKICAgICAgICAgICAgICAg
ICBwcmludChmaWxlKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgdGVzdHMgPSBzZXQo
ZGVmYXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQorICAgICAgICBmaW5kZXIgPSBMYXlvdXRUZXN0Rmlu
ZGVyKGRlZmF1bHRfcG9ydCwgTm9uZSkKKyAgICAgICAgdGVzdHMgPSBzZXQoZmluZGVyLmZpbmRf
dGVzdHNfYnlfcGF0aChhcmdzKSkKICAgICAgICAgZm9yIHBvcnRfbmFtZSBpbiBwb3J0X25hbWVz
OgogICAgICAgICAgICAgbW9kZWwgPSBzZWxmLl9tb2RlbChvcHRpb25zLCBwb3J0X25hbWUsIHRl
c3RzKQogICAgICAgICAgICAgdGVzdHNfdG9fcHJpbnQgPSBzZWxmLl9maWx0ZXJfdGVzdHMob3B0
aW9ucywgbW9kZWwsIHRlc3RzKQpAQCAtNTUzLDcgKzU1NSw4IEBAIGNsYXNzIFByaW50QmFzZWxp
bmVzKENvbW1hbmQpOgogICAgICAgICAgICAgcG9ydF9uYW1lcyA9IFtkZWZhdWx0X3BvcnQubmFt
ZSgpXQogCiAgICAgICAgICMgRklYTUU6IG1ha2UgcmVhbF90ZXN0cygpIGEgcHVibGljIG1ldGhv
ZC4KLSAgICAgICAgdGVzdHMgPSBzb3J0ZWQoZGVmYXVsdF9wb3J0Ll9yZWFsX3Rlc3RzKGFyZ3Mp
KQorICAgICAgICBmaW5kZXIgPSBMYXlvdXRUZXN0RmluZGVyKGRlZmF1bHRfcG9ydCwgTm9uZSkK
KyAgICAgICAgdGVzdHMgPSBzb3J0ZWQoZmluZGVyLl9yZWFsX3Rlc3RzKGFyZ3MpKQogCiAgICAg
ICAgIGZvciBwb3J0X25hbWUgaW4gcG9ydF9uYW1lczoKICAgICAgICAgICAgIGlmIHBvcnRfbmFt
ZSAhPSBwb3J0X25hbWVzWzBdOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>