<?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>90513</bug_id>
          
          <creation_ts>2012-07-03 19:41:35 -0700</creation_ts>
          <short_desc>nrwt: reimplement manager_worker_broker in a much simpler form</short_desc>
          <delta_ts>2012-07-12 13:23:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>NRWT</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>89725</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>662650</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-03 19:41:35 -0700</bug_when>
    <thetext>nrwt: reimplement manager_worker_broker in a much simpler form</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662655</commentid>
    <comment_count>1</comment_count>
      <attachid>150711</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-03 20:20:14 -0700</bug_when>
    <thetext>Created attachment 150711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667276</commentid>
    <comment_count>2</comment_count>
      <attachid>151830</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-11 18:14:01 -0700</bug_when>
    <thetext>Created attachment 151830
merge to r122394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667974</commentid>
    <comment_count>3</comment_count>
      <attachid>151830</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-07-12 10:50:24 -0700</bug_when>
    <thetext>Comment on attachment 151830
merge to r122394

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

That&apos;s a lot of deleted code!

&gt; Tools/ChangeLog:19
&gt; +        I&apos;m removing manager_worker_broker_unittest.py as well; we get
&gt; +        nearly complete coverage from the integration tests, and will
&gt; +        get more coverage when test-webkitpy moves to use this as well,
&gt; +        so having unit tests seems like unnecessary overhead. (running
&gt; +        coverage numbers with test-webkitpy shows that pretty much the only
&gt; +        uncovered lines are lines that are only run in the child processes,
&gt; +        which coverage doesn&apos;t handle at the moment).

I&apos;m a little torn about this. I think it makes it harder to make changes to this code in the future and have confidence. On the other hand, I believe you that integration tests cover most of the code paths.

abarth, wdyt?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:98
&gt; +            worker.running_inline = self._running_inline

Should running_inline and manager just be arguments to the constructor? There doesn&apos;t seem to be benefit to setting those after the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667978</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-12 10:54:59 -0700</bug_when>
    <thetext>&gt; abarth, wdyt?

IMHO, it&apos;s fine.  We run the integration tests by default, so we&apos;re not missing out on too much test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668084</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-12 12:30:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager_worker_broker.py:98
&gt; &gt; +            worker.running_inline = self._running_inline
&gt; 
&gt; Should running_inline and manager just be arguments to the constructor? There doesn&apos;t seem to be benefit to setting those after the constructor.

Sure, I can make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668151</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-12 13:23:20 -0700</bug_when>
    <thetext>Committed r122497: &lt;http://trac.webkit.org/changeset/122497&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150711</attachid>
            <date>2012-07-03 20:20:14 -0700</date>
            <delta_ts>2012-07-11 18:13:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90513-20120703202013.patch</filename>
            <type>text/plain</type>
            <size>38259</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzU4MTlhZTE3MWQ4ZDhhNmIwNzZmYzNiYTZkM2M1OWVk
NjY3NDRhMi4uNDM3M2Y1YzA4MjMwNzEzNWY2MTQwMmZlNWY3Y2JiOTA4NmE2ZTAwZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU5
IEBACiAyMDEyLTA3LTAzICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIG5yd3Q6IHJlaW1wbGVtZW50IG1hbmFnZXJfd29ya2VyX2Jyb2tlciBpbiBhIG11Y2gg
c2ltcGxlciBmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDUxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgYSB3aG9sZXNhbGUgcmVwbGFjZW1lbnQgb2YgdGhlIE1lc3NhZ2VQb29sKCkK
KyAgICAgICAgaW1wbGVtZW50YXRpb24gYW5kIHRoZSBvdGhlciBjbGFzc2VzIGluCisgICAgICAg
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5weS4gQWxsIG9mIHRoZSBCcm9rZXJDb25uZWN0aW9uKiwg
QnJva2VyKiwKKyAgICAgICAgZXRjLiBjbGFzc2VzIGFyZSBnb25lLCBhbmQgdGhlcmUgaXMgbm93
IGp1c3QgYSBNZXNzYWdlUG9vbCBjbGFzcworICAgICAgICBhbmQgYSBfV29ya2VyIGNsYXNzLiBI
YXBwaW5lc3MgZW5zdWVzLgorCisgICAgICAgIEknbSByZW1vdmluZyBtYW5hZ2VyX3dvcmtlcl9i
cm9rZXJfdW5pdHRlc3QucHkgYXMgd2VsbDsgd2UgZ2V0CisgICAgICAgIG5lYXJseSBjb21wbGV0
ZSBjb3ZlcmFnZSBmcm9tIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cywgYW5kIHdpbGwKKyAgICAgICAg
Z2V0IG1vcmUgY292ZXJhZ2Ugd2hlbiB0ZXN0LXdlYmtpdHB5IG1vdmVzIHRvIHVzZSB0aGlzIGFz
IHdlbGwsCisgICAgICAgIHNvIGhhdmluZyB1bml0IHRlc3RzIHNlZW1zIGxpa2UgdW5uZWNlc3Nh
cnkgb3ZlcmhlYWQuIChydW5uaW5nCisgICAgICAgIGNvdmVyYWdlIG51bWJlcnMgd2l0aCB0ZXN0
LXdlYmtpdHB5IHNob3dzIHRoYXQgcHJldHR5IG11Y2ggdGhlIG9ubHkKKyAgICAgICAgdW5jb3Zl
cmVkIGxpbmVzIGFyZSBsaW5lcyB0aGF0IGFyZSBvbmx5IHJ1biBpbiB0aGUgY2hpbGQgcHJvY2Vz
c2VzLAorICAgICAgICB3aGljaCBjb3ZlcmFnZSBkb2Vzbid0IGhhbmRsZSBhdCB0aGUgbW9tZW50
KS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L21hbmFnZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChSZXN1bHRTdW1tYXJ5VGVzdC5zdW1tYXJp
emVkX3Jlc3VsdHMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKFdvcmtlckV4Y2Vw
dGlvbik6CisgICAgICAgIChnZXQpOgorICAgICAgICAoTWVzc2FnZVBvb2wpOgorICAgICAgICAo
TWVzc2FnZVBvb2wuX19pbml0X18pOgorICAgICAgICAoTWVzc2FnZVBvb2wucnVuKToKKyAgICAg
ICAgKE1lc3NhZ2VQb29sLl9wb3N0KToKKyAgICAgICAgKE1lc3NhZ2VQb29sLl9zaHV0ZG93bik6
CisgICAgICAgIChNZXNzYWdlUG9vbC5fd2FpdCk6CisgICAgICAgIChNZXNzYWdlUG9vbC5fY2xv
c2UpOgorICAgICAgICAoTWVzc2FnZVBvb2wuX3N0YXJ0X3dvcmtlcnMpOgorICAgICAgICAoTWVz
c2FnZVBvb2wuX2Nhbl9waWNrbGUpOgorICAgICAgICAoTWVzc2FnZVBvb2wuX2xvb3ApOgorICAg
ICAgICAoTWVzc2FnZVBvb2wuX2hhbmRsZV93b3JrZXJfZG9uZSk6CisgICAgICAgIChfV29ya2Vy
KToKKyAgICAgICAgKF9Xb3JrZXIuX19pbml0X18pOgorICAgICAgICAoX1dvcmtlci50ZXJtaW5h
dGUpOgorICAgICAgICAoX1dvcmtlci5fY2xvc2UpOgorICAgICAgICAoX1dvcmtlci5ydW4pOgor
ICAgICAgICAoX1dvcmtlci5wb3N0KToKKyAgICAgICAgKF9Xb3JrZXIueWllbGRfdG9fY2FsbGVy
KToKKyAgICAgICAgKF9Xb3JrZXIuX3Bvc3QpOgorICAgICAgICAoX1dvcmtlci5fcmFpc2UpOgor
ICAgICAgICAoX1dvcmtlci5fc2V0X3VwX2xvZ2dpbmcpOgorICAgICAgICAoX01lc3NhZ2UpOgor
ICAgICAgICAoX01lc3NhZ2UuX19pbml0X18pOgorICAgICAgICAoX01lc3NhZ2UuX19yZXByX18p
OgorICAgICAgICAoX1dvcmtlckxvZ0hhbmRsZXIuX19pbml0X18pOgorICAgICAgICAoX1dvcmtl
ckxvZ0hhbmRsZXIuZW1pdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5OiBSZW1vdmVk
LgorCisyMDEyLTA3LTAzICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCiAg
ICAgICAgIG5yd3Q6IGFkZCBhIE1lc3NhZ2VQb29sIGFic3RyYWN0aW9uIHRoYXQgdGhlIG1hbmFn
ZXIgd2lsbCBjYWxsIHRvIHJlcGxhY2UgdGhlIGJyb2tlcgogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA1MTEKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJv
a2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CmluZGV4IDM3ZTM0ZTdkN2MzNWEwZjhhMDVmZDk3MjZi
NWRkYTZkYTgwNzU2MDUuLjA3Mjc2NDEwZDFiZDZmMDZhZTc3Yzk2NDcxOTIzYWUyYWRlOTIwYTAg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKQEAgLTMx
LDggKzMxLDYgQEAKIGltcG9ydCBjUGlja2xlCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG11bHRp
cHJvY2Vzc2luZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgb3MKIGltcG9ydCBRdWV1ZQogaW1w
b3J0IHN5cwogaW1wb3J0IHRpbWUKQEAgLTQ3LDEzICs0NSw2IEBAIGZyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBtZXRlcmVkX3N0cmVhbQogX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQogCiAKLSMKLSMgVG9waWMgbmFtZXMgZm9yIE1hbmFnZXIgPC0+IFdv
cmtlciBtZXNzYWdpbmcKLSMKLU1BTkFHRVJfVE9QSUMgPSAnbWFuYWdlcnMnCi1BTllfV09SS0VS
X1RPUElDID0gJ3dvcmtlcnMnCi0KLQogZGVmIGdldChjYWxsZXIsIHdvcmtlcl9mYWN0b3J5LCBu
dW1fd29ya2Vycywgd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2Vjcz0wLjAsIGhvc3Q9Tm9uZSk6CiAg
ICAgIiIiUmV0dXJucyBhbiBvYmplY3QgdGhhdCBleHBvc2VzIGEgcnVuKCkgbWV0aG9kIHRoYXQg
dGFrZXMgYSBsaXN0IG9mIHRlc3Qgc2hhcmRzIGFuZCBydW5zIHRoZW0gaW4gcGFyYWxsZWwuIiIi
CiAgICAgcmV0dXJuIF9NZXNzYWdlUG9vbChjYWxsZXIsIHdvcmtlcl9mYWN0b3J5LCBudW1fd29y
a2Vycywgd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcywgaG9zdCkKQEAgLTY1LDkgKzU2LDE3IEBA
IGNsYXNzIF9NZXNzYWdlUG9vbChvYmplY3QpOgogICAgICAgICBzZWxmLndvcmtlcl9mYWN0b3J5
ID0gd29ya2VyX2ZhY3RvcnkKICAgICAgICAgc2VsZi5udW1fd29ya2VycyA9IG51bV93b3JrZXJz
CiAgICAgICAgIHNlbGYud29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcyA9IHdvcmtlcl9zdGFydHVw
X2RlbGF5X3NlY3MKLSAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRlcyA9IHt9CisgICAgICAgIHNl
bGYuX3dvcmtlcnMgPSBbXQorICAgICAgICBzZWxmLl93b3JrZXJzX3N0b3BwZWQgPSBzZXQoKQog
ICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYubmFtZSA9ICdtYW5hZ2VyJwor
ICAgICAgICBzZWxmLl9ydW5uaW5nX2lubGluZSA9IChzZWxmLm51bV93b3JrZXJzID09IDEpCisg
ICAgICAgIGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgc2VsZi5fbWVzc2Fn
ZXNfdG9fd29ya2VyID0gUXVldWUuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNf
dG9fbWFuYWdlciA9IFF1ZXVlLlF1ZXVlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
bGYuX21lc3NhZ2VzX3RvX3dvcmtlciA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAg
ICAgICBzZWxmLl9tZXNzYWdlc190b19tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkK
IAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCkBAIC03Nyw3
NCArNzYsNjYgQEAgY2xhc3MgX01lc3NhZ2VQb29sKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBG
YWxzZQogCiAgICAgZGVmIHJ1bihzZWxmLCBzaGFyZHMpOgotICAgICAgICBtYW5hZ2VyX2Nvbm5l
Y3Rpb24gPSBfZ2V0X2Jyb2tlcihzZWxmLm51bV93b3JrZXJzLCBzZWxmLCBzZWxmLndvcmtlcl9m
YWN0b3J5LCBzZWxmLmhvc3QpCi0gICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShz
ZWxmLm51bV93b3JrZXJzKToKLSAgICAgICAgICAgIHdvcmtlcl9jb25uZWN0aW9uID0gbWFuYWdl
cl9jb25uZWN0aW9uLnN0YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVyKQotICAgICAgICAgICAgd29y
a2VyX3N0YXRlID0gX1dvcmtlclN0YXRlKHdvcmtlcl9udW1iZXIsIHdvcmtlcl9jb25uZWN0aW9u
KQotICAgICAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRlc1t3b3JrZXJfY29ubmVjdGlvbi5uYW1l
XSA9IHdvcmtlcl9zdGF0ZQotICAgICAgICAgICAgdGltZS5zbGVlcChzZWxmLndvcmtlcl9zdGFy
dHVwX2RlbGF5X3NlY3MpCi0KLSAgICAgICAgbWVzc2FnZXMgPSBsaXN0KHNoYXJkcykKLSAgICAg
ICAgZm9yIG1lc3NhZ2UgaW4gbWVzc2FnZXM6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rp
b24ucG9zdF9tZXNzYWdlKCptZXNzYWdlKQorICAgICAgICAiIiJQb3N0cyBhIGxpc3Qgb2YgbWVz
c2FnZXMgdG8gdGhlIHBvb2wgYW5kIHdhaXRzIGZvciB0aGVtIHRvIGNvbXBsZXRlLiIiIgorICAg
ICAgICBmb3IgbWVzc2FnZSBpbiBzaGFyZHM6CisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190
b193b3JrZXIucHV0KF9NZXNzYWdlKHNlbGYubmFtZSwgbWVzc2FnZVswXSwgbWVzc2FnZVsxOl0s
IGZyb21fdXNlcj1UcnVlLCBsb2dzPSgpKSkKIAogICAgICAgICBmb3IgXyBpbiB4cmFuZ2Uoc2Vs
Zi5udW1fd29ya2Vycyk6Ci0gICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNz
YWdlKCdzdG9wJykKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlci5wdXQoX01l
c3NhZ2Uoc2VsZi5uYW1lLCAnc3RvcCcsIG1lc3NhZ2VfYXJncz0oKSwgZnJvbV91c2VyPUZhbHNl
LCBsb2dzPSgpKSkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLndhaXQobWFuYWdl
cl9jb25uZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfd29ya2VycygpCisgICAgICAg
ICAgICBzZWxmLndhaXQoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZm9yIHdvcmtl
cl9zdGF0ZSBpbiBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVlcygpOgotICAgICAgICAgICAgICAg
IHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5jYW5jZWwoKQotCi0gICAgZGVmIHdhaXQo
c2VsZiwgbWFuYWdlcl9jb25uZWN0aW9uKToKLSAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfZG9u
ZSgpOgotICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoZGVs
YXlfc2Vjcz0xLjApCisgICAgICAgICAgICBzZWxmLl9jbG9zZSgpCiAKLSAgICAgICAgIyBNYWtl
IHN1cmUgYWxsIG9mIHRoZSB3b3JrZXJzIGhhdmUgc2h1dCBkb3duIChpZiBwb3NzaWJsZSkuCi0g
ICAgICAgIGZvciB3b3JrZXJfc3RhdGUgaW4gc2VsZi5fd29ya2VyX3N0YXRlcy52YWx1ZXMoKToK
LSAgICAgICAgICAgIGlmIHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5pc19hbGl2ZSgp
OgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1dhaXRpbmcgZm9yIHdvcmtlciAlZCB0byBl
eGl0JyAlIHdvcmtlcl9zdGF0ZS5udW1iZXIpCi0gICAgICAgICAgICAgICAgd29ya2VyX3N0YXRl
Lndvcmtlcl9jb25uZWN0aW9uLmpvaW4oNS4wKQotICAgICAgICAgICAgICAgIGlmIHdvcmtlcl9z
dGF0ZS53b3JrZXJfY29ubmVjdGlvbi5pc19hbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICBf
bG9nLmVycm9yKCdXb3JrZXIgJWQgZGlkIG5vdCBleGl0IGluIHRpbWUuJyAlIHdvcmtlcl9zdGF0
ZS5udW1iZXIpCi0KLSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgd29ya2VyX3N0YXRl
cyA9IHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCkKLSAgICAgICAgcmV0dXJuIHdvcmtlcl9z
dGF0ZXMgYW5kIGFsbChzZWxmLl93b3JrZXJfaXNfZG9uZSh3b3JrZXJfc3RhdGUpIGZvciB3b3Jr
ZXJfc3RhdGUgaW4gd29ya2VyX3N0YXRlcykKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcnMoc2VsZik6
CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd29ya2VycworICAgICAgICBzZWxmLl93b3JrZXJz
X3N0b3BwZWQgPSBzZXQoKQorICAgICAgICBob3N0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9y
dW5uaW5nX2lubGluZSBvciBzZWxmLl9jYW5fcGlja2xlKGhvc3QpOgorICAgICAgICAgICAgaG9z
dCA9IHNlbGYuaG9zdAogCi0gICAgIyBGSVhNRTogSW5saW5lIHRoaXMgZnVuY3Rpb24uCi0gICAg
ZGVmIF93b3JrZXJfaXNfZG9uZShzZWxmLCB3b3JrZXJfc3RhdGUpOgotICAgICAgICByZXR1cm4g
d29ya2VyX3N0YXRlLmRvbmUKKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKHNl
bGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgd29ya2VyID0gX1dvcmtlcihob3N0LCBzZWxm
Ll9tZXNzYWdlc190b19tYW5hZ2VyLCBzZWxmLl9tZXNzYWdlc190b193b3JrZXIsIHNlbGYud29y
a2VyX2ZhY3RvcnksIHdvcmtlcl9udW1iZXIpCisgICAgICAgICAgICBzZWxmLl93b3JrZXJzLmFw
cGVuZCh3b3JrZXIpCisgICAgICAgICAgICB3b3JrZXIucnVubmluZ19pbmxpbmUgPSBzZWxmLl9y
dW5uaW5nX2lubGluZQorICAgICAgICAgICAgaWYgd29ya2VyLnJ1bm5pbmdfaW5saW5lOgorICAg
ICAgICAgICAgICAgIHdvcmtlci5tYW5hZ2VyID0gc2VsZgorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYud29y
a2VyX3N0YXJ0dXBfZGVsYXlfc2VjczoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChz
ZWxmLndvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3MpCisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAg
ICAgICAgaWYgc2VsZi5fcnVubmluZ19pbmxpbmU6CisgICAgICAgICAgICBzZWxmLl93b3JrZXJz
WzBdLnJ1bigpCisgICAgICAgICAgICBzZWxmLl9sb29wKGJsb2NrPUZhbHNlKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcChibG9jaz1UcnVlKQogCiAgICAgZGVmIF9jbG9z
ZShzZWxmKToKLSAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJfc3RhdGVzLnZhbHVl
cygpOgotICAgICAgICAgICAgd29ya2VyLndvcmtlcl9jb25uZWN0aW9uLmNhbmNlbCgpCi0gICAg
ICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2VyX3N0YXRlcy52YWx1ZXMoKToKLSAgICAgICAg
ICAgIGlmIHdvcmtlci53b3JrZXJfY29ubmVjdGlvbi5pc19hbGl2ZSgpOgotICAgICAgICAgICAg
ICAgIHdvcmtlci53b3JrZXJfY29ubmVjdGlvbi5qb2luKDUuMCkKLQotICAgIGRlZiBoYW5kbGVf
ZG9uZShzZWxmLCBzb3VyY2UsIGxvZ19tZXNzYWdlcz1Ob25lKToKLSAgICAgICAgd29ya2VyX3N0
YXRlID0gc2VsZi5fd29ya2VyX3N0YXRlc1tzb3VyY2VdCi0gICAgICAgIHdvcmtlcl9zdGF0ZS5k
b25lID0gVHJ1ZQotICAgICAgICBzZWxmLl9sb2dfbWVzc2FnZXMobG9nX21lc3NhZ2VzKQotCi0g
ICAgZGVmIGhhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLl9j
YWxsZXIuaGFuZGxlKCdzdGFydGVkX3Rlc3QnLCAqYXJncykKLQotICAgIGRlZiBoYW5kbGVfZmlu
aXNoZWRfdGVzdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuX2NhbGxlci5oYW5kbGUoJ2Zp
bmlzaGVkX3Rlc3QnLCAqYXJncykKLQotICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdF9saXN0
KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fY2FsbGVyLmhhbmRsZSgnZmluaXNoZWRfdGVz
dF9saXN0JywgKmFyZ3MpCi0KLSAgICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCAqYXJncyk6
Ci0gICAgICAgIHNlbGYuX2hhbmRsZV93b3JrZXJfZXhjZXB0aW9uKCphcmdzKQorICAgICAgICBm
b3Igd29ya2VyIGluIHNlbGYuX3dvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIudGVybWluYXRl
KCkKKyAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLl93b3JrZXJzOgorICAgICAgICAgICAgaWYg
d29ya2VyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgd29ya2VyLmpvaW4oKQorICAgICAg
ICBzZWxmLl93b3JrZXJzID0gW10KKyAgICAgICAgaWYgbm90IHNlbGYuX3J1bm5pbmdfaW5saW5l
OgorICAgICAgICAgICAgaWYgc2VsZi5fbWVzc2FnZXNfdG9fd29ya2VyOgorICAgICAgICAgICAg
ICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fbWVzc2FnZXNfdG9fd29ya2VyID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5fbWVzc2Fn
ZXNfdG9fbWFuYWdlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b19tYW5hZ2Vy
LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b19tYW5hZ2VyID0gTm9u
ZQogCiAgICAgZGVmIF9sb2dfbWVzc2FnZXMoc2VsZiwgbWVzc2FnZXMpOgogICAgICAgICBmb3Ig
bWVzc2FnZSBpbiBtZXNzYWdlczoKICAgICAgICAgICAgIGxvZ2dpbmcucm9vdC5oYW5kbGUobWVz
c2FnZSkKIAorICAgIGRlZiBfaGFuZGxlX2RvbmUoc2VsZiwgc291cmNlKToKKyAgICAgICAgc2Vs
Zi5fd29ya2Vyc19zdG9wcGVkLmFkZChzb3VyY2UpCisKICAgICBAc3RhdGljbWV0aG9kCiAgICAg
ZGVmIF9oYW5kbGVfd29ya2VyX2V4Y2VwdGlvbihzb3VyY2UsIGV4Y2VwdGlvbl90eXBlLCBleGNl
cHRpb25fdmFsdWUsIHN0YWNrKToKICAgICAgICAgaWYgZXhjZXB0aW9uX3R5cGUgPT0gS2V5Ym9h
cmRJbnRlcnJ1cHQ6CkBAIC0xNTMsNDUgKzE0NCwyOCBAQCBjbGFzcyBfTWVzc2FnZVBvb2wob2Jq
ZWN0KToKICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGV4Y2VwdGlvbl92YWx1ZS5fX2NsYXNz
X18uX19uYW1lX18sIHN0cihleGNlcHRpb25fdmFsdWUpKSkKICAgICAgICAgcmFpc2UgV29ya2Vy
RXhjZXB0aW9uKHN0cihleGNlcHRpb25fdmFsdWUpKQogCisgICAgZGVmIF9jYW5fcGlja2xlKHNl
bGYsIGhvc3QpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjUGlja2xlLmR1bXBzKGhvc3Qp
CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLWNsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgotICAg
ICIiIkEgY2xhc3MgZm9yIHRoZSBtYW5hZ2VyIHRvIHVzZSB0byB0cmFjayB0aGUgY3VycmVudCBz
dGF0ZSBvZiB0aGUgd29ya2Vycy4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3
b3JrZXJfY29ubmVjdGlvbik6Ci0gICAgICAgIHNlbGYud29ya2VyX2Nvbm5lY3Rpb24gPSB3b3Jr
ZXJfY29ubmVjdGlvbgotICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgotICAgICAgICBzZWxm
LmRvbmUgPSBGYWxzZQotICAgICAgICBzZWxmLmN1cnJlbnRfdGVzdF9uYW1lID0gTm9uZQotICAg
ICAgICBzZWxmLm5leHRfdGltZW91dCA9IE5vbmUKLSAgICAgICAgc2VsZi5zdGF0cyA9IHt9Ci0g
ICAgICAgIHNlbGYuc3RhdHNbJ25hbWUnXSA9IHdvcmtlcl9jb25uZWN0aW9uLm5hbWUKLSAgICAg
ICAgc2VsZi5zdGF0c1snbnVtX3Rlc3RzJ10gPSAwCi0gICAgICAgIHNlbGYuc3RhdHNbJ3RvdGFs
X3RpbWUnXSA9IDAKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJf
V29ya2VyU3RhdGUoIiArIHN0cihzZWxmLl9fZGljdF9fKSArICIpIgotCi0KLWRlZiBfZ2V0X2Jy
b2tlcihtYXhfd29ya2VycywgY2xpZW50LCB3b3JrZXJfZmFjdG9yeSwgaG9zdD1Ob25lKToKLSAg
ICAiIiJSZXR1cm4gYSBjb25uZWN0aW9uIHRvIGEgbWFuYWdlci93b3JrZXIgbWVzc2FnZV9icm9r
ZXIKLQotICAgIEFyZ3M6Ci0gICAgICAgIG1heF93b3JrZXJzIC0gbWF4ICMgb2Ygd29ya2VycyB0
byBydW4gY29uY3VycmVudGx5LgotICAgICAgICBjbGllbnQgLSBCcm9rZXJDbGllbnQgaW1wbGVt
ZW50YXRpb24gdG8gZGlzcGF0Y2gKLSAgICAgICAgICAgIHJlcGxpZXMgdG8uCi0gICAgICAgIHdv
cmtlcl9mYWN0b3J5OiBmYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgb2JqZWN0cyB0aGF0IGlt
cGxlbWVudCB0aGUgV29ya2VyIGludGVyZmFjZS4KLSAgICAgICAgaG9zdDogb3B0aW9uYWwgcGlj
a2xhYmxlIGhvc3Qgb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB3b3JrZXJzIGZvciB0ZXN0
aW5nLgotICAgIFJldHVybnM6Ci0gICAgICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB0aGF0IHdp
bGwgdGFsayB0byBhIG1lc3NhZ2UgYnJva2VyIGNvbmZpZ3VyZWQKLSAgICAgICAgZm9yIHRoZSBu
b3JtYWwgbWFuYWdlci93b3JrZXIgY29tbXVuaWNhdGlvbi4iIiIKLSAgICBpZiBtYXhfd29ya2Vy
cyA9PSAxOgotICAgICAgICBxdWV1ZV9jbGFzcyA9IFF1ZXVlLlF1ZXVlCi0gICAgICAgIG1hbmFn
ZXJfY2xhc3MgPSBfSW5saW5lTWFuYWdlcgotICAgIGVsc2U6Ci0gICAgICAgIHF1ZXVlX2NsYXNz
ID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlCi0gICAgICAgIG1hbmFnZXJfY2xhc3MgPSBfTXVsdGlQ
cm9jZXNzTWFuYWdlcgotCi0gICAgYnJva2VyID0gX0Jyb2tlcihxdWV1ZV9jbGFzcykKLSAgICBy
ZXR1cm4gbWFuYWdlcl9jbGFzcyhicm9rZXIsIGNsaWVudCwgd29ya2VyX2ZhY3RvcnksIGhvc3Qp
CisgICAgZGVmIF9sb29wKHNlbGYsIGJsb2NrKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
d2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fd29ya2Vyc19zdG9wcGVk
KSA9PSBsZW4oc2VsZi5fd29ya2Vycyk6CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gRmFs
c2UKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlci5n
ZXQoYmxvY2spCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX21lc3NhZ2VzKG1lc3NhZ2UubG9n
cykKKyAgICAgICAgICAgICAgICBpZiBtZXNzYWdlLmZyb21fdXNlcjoKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fY2FsbGVyLmhhbmRsZShtZXNzYWdlLm5hbWUsIG1lc3NhZ2Uuc3JjLCAqbWVz
c2FnZS5hcmdzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAg
IG1ldGhvZCA9IGdldGF0dHIoc2VsZiwgJ19oYW5kbGVfJyArIG1lc3NhZ2UubmFtZSkKKyAgICAg
ICAgICAgICAgICBhc3NlcnQgbWV0aG9kLCAnYmFkIG1lc3NhZ2UgJXMnICUgcmVwcihtZXNzYWdl
KQorICAgICAgICAgICAgICAgIG1ldGhvZChtZXNzYWdlLnNyYywgKm1lc3NhZ2UuYXJncykKKyAg
ICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgcGFzcwogCiAKIGNsYXNzIFdv
cmtlckV4Y2VwdGlvbihFeGNlcHRpb24pOgpAQCAtMTk5LDM5MyArMTczLDEyNyBAQCBjbGFzcyBX
b3JrZXJFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBwYXNzCiAKIAotY2xhc3MgQnJva2VyQ2xp
ZW50KG9iamVjdCk6Ci0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyAvIGludGVyZmFjZSB0aGF0
IGFsbCBtZXNzYWdlIGJyb2tlciBjbGllbnRzIG11c3QKLSAgICBpbXBsZW1lbnQuIEluIGFkZGl0
aW9uIHRvIHRoZSBtZXRob2RzIGJlbG93LCBieSBjb252ZW50aW9uIGNsaWVudHMKLSAgICBpbXBs
ZW1lbnQgcm91dGluZXMgb2YgdGhlIHNpZ25hdHVyZSB0eXBlCi0KLSAgICAgICAgaGFuZGxlX01F
U1NBR0VfTkFNRShzZWxmLCBzcmMsIC4uLik6Ci0KLSAgICB3aGVyZSBNRVNTQUdFX05BTUUgbWF0
Y2hlcyB0aGUgc3RyaW5nIHBhc3NlZCB0byBwb3N0X21lc3NhZ2UoKSwgYW5kCi0gICAgc3JjIGlu
ZGljYXRlcyB0aGUgbmFtZSBvZiB0aGUgc2VuZGVyLiBJZiB0aGUgbWVzc2FnZSBjb250YWlucyB2
YWx1ZXMgaW4KLSAgICB0aGUgbWVzc2FnZSBib2R5LCB0aG9zZSB3aWxsIGJlIHByb3ZpZGVkIGFz
IG9wdHBhcmFtcy4iIiIKLQotICAgIGRlZiBpc19kb25lKHNlbGYpOgotICAgICAgICAiIiJDYWxs
ZWQgZnJvbSBpbnNpZGUgcnVuX21lc3NhZ2VfbG9vcCgpIHRvIGluZGljYXRlIHdoZXRoZXIgdG8g
ZXhpdC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIG5h
bWUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIG5hbWUgdGhhdCBpZGVudGlmaWVzIHRoZSBj
bGllbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBf
QnJva2VyKG9iamVjdCk6Ci0gICAgIiIiQnJva2VycyBwcm92aWRlIHRoZSBiYXNpYyBtb2RlbCBv
ZiBhIHNldCBvZiB0b3BpY3MuIENsaWVudHMgY2FuIHBvc3QgYQotICAgIG1lc3NhZ2UgdG8gYW55
IHRvcGljIHVzaW5nIHBvc3RfbWVzc2FnZSgpLCBhbmQgY2FuIHByb2Nlc3MgbWVzc2FnZXMgb24g
b25lCi0gICAgdG9waWMgYXQgYSB0aW1lIHVzaW5nIHJ1bl9tZXNzYWdlX2xvb3AoKS4iIiIKLQot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZV9tYWtlcik6Ci0gICAgICAgICIiIkFyZ3M6Ci0g
ICAgICAgICAgICBxdWV1ZV9tYWtlcjogYSBmYWN0b3J5IG1ldGhvZCB0aGF0IHJldHVybnMgb2Jq
ZWN0cyBpbXBsZW1lbnRpbmcgYQotICAgICAgICAgICAgICAgIFF1ZXVlIGludGVyZmFjZSAocHV0
KCkvZ2V0KCkpLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fcXVldWVfbWFrZXIgPSBxdWV1
ZV9tYWtlcgotICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0gICAgZGVmIF9fZGVsX18oc2Vs
Zik6Ci0gICAgICAgIHNlbGYuY2xlYW51cCgpCi0KLSAgICBkZWYgY2xlYW51cChzZWxmKToKLSAg
ICAgICAgZm9yIHF1ZXVlIGluIHNlbGYuX3RvcGljcy52YWx1ZXMoKToKLSAgICAgICAgICAgIGlm
IGhhc2F0dHIocXVldWUsICdjbG9zZScpOgotICAgICAgICAgICAgICAgIHF1ZXVlLmNsb3NlKCkK
LSAgICAgICAgc2VsZi5fdG9waWNzID0ge30KLQotICAgIGRlZiBhZGRfdG9waWMoc2VsZiwgdG9w
aWNfbmFtZSk6Ci0gICAgICAgIGlmIHRvcGljX25hbWUgbm90IGluIHNlbGYuX3RvcGljczoKLSAg
ICAgICAgICAgIHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXSA9IHNlbGYuX3F1ZXVlX21ha2VyKCkK
LQotICAgIGRlZiBfZ2V0X3F1ZXVlX2Zvcl90b3BpYyhzZWxmLCB0b3BpY19uYW1lKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3RvcGljc1t0b3BpY19uYW1lXQotCi0gICAgZGVmIHBvc3RfbWVzc2Fn
ZShzZWxmLCBjbGllbnQsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncyk6
Ci0gICAgICAgICIiIlBvc3QgYSBtZXNzYWdlIHRvIHRoZSBhcHByb3ByaWF0ZSB0b3BpYyBuYW1l
LgotCi0gICAgICAgIE1lc3NhZ2VzIGhhdmUgYSBuYW1lIGFuZCBhIHR1cGxlIG9mIG9wdGlvbmFs
IGFyZ3VtZW50cy4gQm90aCBtdXN0IGJlIHBpY2tsYWJsZS4iIiIKLSAgICAgICAgbWVzc2FnZSA9
IF9NZXNzYWdlKGNsaWVudC5uYW1lLCB0b3BpY19uYW1lLCBtZXNzYWdlX25hbWUsIG1lc3NhZ2Vf
YXJncykKLSAgICAgICAgcXVldWUgPSBzZWxmLl9nZXRfcXVldWVfZm9yX3RvcGljKHRvcGljX25h
bWUpCi0gICAgICAgIHF1ZXVlLnB1dChfTWVzc2FnZS5kdW1wcyhtZXNzYWdlKSkKLQotICAgIGRl
ZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCwgZGVsYXlfc2Vjcz1O
b25lKToKLSAgICAgICAgIiIiTG9vcCBwcm9jZXNzaW5nIG1lc3NhZ2VzIHVudGlsIGNsaWVudC5p
c19kb25lKCkgb3IgZGVsYXkgcGFzc2VzLgotCi0gICAgICAgIFRvIHJ1biBpbmRlZmluaXRlbHks
IHNldCBkZWxheV9zZWNzIHRvIE5vbmUuIiIiCi0gICAgICAgIGFzc2VydCBkZWxheV9zZWNzIGlz
IE5vbmUgb3IgZGVsYXlfc2VjcyA+IDAKLSAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFt
ZSwgY2xpZW50LCBibG9jaz1UcnVlLCBkZWxheV9zZWNzPWRlbGF5X3NlY3MpCi0KLSAgICBkZWYg
cnVuX2FsbF9wZW5kaW5nKHNlbGYsIHRvcGljX25hbWUsIGNsaWVudCk6Ci0gICAgICAgICIiIlBy
b2Nlc3MgbWVzc2FnZXMgdW50aWwgY2xpZW50LmlzX2RvbmUoKSBvciBjYWxsZXIgd291bGQgYmxv
Y2suIiIiCi0gICAgICAgIHNlbGYuX3J1bl9sb29wKHRvcGljX25hbWUsIGNsaWVudCwgYmxvY2s9
RmFsc2UsIGRlbGF5X3NlY3M9Tm9uZSkKLQotICAgIGRlZiBfcnVuX2xvb3Aoc2VsZiwgdG9waWNf
bmFtZSwgY2xpZW50LCBibG9jaywgZGVsYXlfc2Vjcyk6Ci0gICAgICAgIHF1ZXVlID0gc2VsZi5f
Z2V0X3F1ZXVlX2Zvcl90b3BpYyh0b3BpY19uYW1lKQotICAgICAgICB3aGlsZSBub3QgY2xpZW50
LmlzX2RvbmUoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzID0gcXVldWUu
Z2V0KGJsb2NrLCBkZWxheV9zZWNzKQotICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5Ogot
ICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgbXNnID0gX01lc3NhZ2UubG9hZHMo
cykKLSAgICAgICAgICAgIHNlbGYuX2Rpc3BhdGNoX21lc3NhZ2UobXNnLCBjbGllbnQpCi0KLSAg
ICBkZWYgX2Rpc3BhdGNoX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgY2xpZW50KToKLSAgICAgICAg
aWYgbm90IGhhc2F0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdlLm5hbWUpOgotICAgICAg
ICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICAgICIlczogcmVjZWl2ZWQgbWVz
c2FnZSAnJXMnIGl0IGNvdWxkbid0IGhhbmRsZSIgJQotICAgICAgICAgICAgICAgKGNsaWVudC5u
YW1lLCBtZXNzYWdlLm5hbWUpKQotICAgICAgICBvcHRhcmdzID0gbWVzc2FnZS5hcmdzCi0gICAg
ICAgIG1lc3NhZ2VfaGFuZGxlciA9IGdldGF0dHIoY2xpZW50LCAnaGFuZGxlXycgKyBtZXNzYWdl
Lm5hbWUpCi0gICAgICAgIG1lc3NhZ2VfaGFuZGxlcihtZXNzYWdlLnNyYywgKm9wdGFyZ3MpCi0K
LQogY2xhc3MgX01lc3NhZ2Uob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGxv
YWRzKHN0cmluZ192YWx1ZSk6Ci0gICAgICAgIG9iaiA9IGNQaWNrbGUubG9hZHMoc3RyaW5nX3Zh
bHVlKQotICAgICAgICBhc3NlcnQoaXNpbnN0YW5jZShvYmosIF9NZXNzYWdlKSkKLSAgICAgICAg
cmV0dXJuIG9iagotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywgdG9waWNfbmFtZSwgbWVz
c2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcmMsIG1l
c3NhZ2VfbmFtZSwgbWVzc2FnZV9hcmdzLCBmcm9tX3VzZXIsIGxvZ3MpOgogICAgICAgICBzZWxm
LnNyYyA9IHNyYwotICAgICAgICBzZWxmLnRvcGljX25hbWUgPSB0b3BpY19uYW1lCiAgICAgICAg
IHNlbGYubmFtZSA9IG1lc3NhZ2VfbmFtZQogICAgICAgICBzZWxmLmFyZ3MgPSBtZXNzYWdlX2Fy
Z3MKLQotICAgIGRlZiBkdW1wcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMo
c2VsZikKKyAgICAgICAgc2VsZi5mcm9tX3VzZXIgPSBmcm9tX3VzZXIKKyAgICAgICAgc2VsZi5s
b2dzID0gbG9ncwogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gKCJf
TWVzc2FnZShmcm9tPSclcycsIHRvcGljX25hbWU9JyVzJywgbWVzc2FnZV9uYW1lPSclcycpIiAl
Ci0gICAgICAgICAgICAgICAgKHNlbGYuc3JjLCBzZWxmLnRvcGljX25hbWUsIHNlbGYubmFtZSkp
Ci0KLQotY2xhc3MgX0Jyb2tlckNvbm5lY3Rpb24ob2JqZWN0KToKLSAgICAiIiJfQnJva2VyQ29u
bmVjdGlvbiBwcm92aWRlcyBhIGNvbm5lY3Rpb24tb3JpZW50ZWQgZmFjYWRlIG9uIHRvcCBvZiBh
Ci0gICAgQnJva2VyLCBzbyB0aGF0IGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byByZXBlYXRlZGx5IHBh
c3MgdGhlIHNhbWUgdG9waWMKLSAgICBuYW1lcyBvdmVyIGFuZCBvdmVyLiIiIgotCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCBydW5fdG9waWMsIHBvc3RfdG9waWMpOgot
ICAgICAgICAiIiJDcmVhdGUgYSBfQnJva2VyQ29ubmVjdGlvbiBvbiB0b3Agb2YgYSBfQnJva2Vy
LiBOb3RlIHRoYXQgdGhlIF9Ccm9rZXIKLSAgICAgICAgaXMgcGFzc2VkIGluIHJhdGhlciB0aGFu
IGNyZWF0ZWQgc28gdGhhdCBhIHNpbmdsZSBfQnJva2VyIGNhbiBiZSB1c2VkCi0gICAgICAgIGJ5
IG11bHRpcGxlIF9Ccm9rZXJDb25uZWN0aW9ucy4iIiIKLSAgICAgICAgc2VsZi5fYnJva2VyID0g
YnJva2VyCi0gICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudAotICAgICAgICBzZWxmLl9wb3N0
X3RvcGljID0gcG9zdF90b3BpYwotICAgICAgICBzZWxmLl9ydW5fdG9waWMgPSBydW5fdG9waWMK
LSAgICAgICAgYnJva2VyLmFkZF90b3BpYyhydW5fdG9waWMpCi0gICAgICAgIGJyb2tlci5hZGRf
dG9waWMocG9zdF90b3BpYykKLQotICAgIGRlZiBjbGVhbnVwKHNlbGYpOgotICAgICAgICBzZWxm
Ll9icm9rZXIuY2xlYW51cCgpCi0gICAgICAgIHNlbGYuX2Jyb2tlciA9IE5vbmUKLQotICAgIGRl
ZiBydW5fbWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6Ci0gICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKHNlbGYuX3J1bl90b3BpYywgc2VsZi5fY2xpZW50LCBk
ZWxheV9zZWNzKQotCi0gICAgZGVmIHBvc3RfbWVzc2FnZShzZWxmLCBtZXNzYWdlX25hbWUsICpt
ZXNzYWdlX2FyZ3MpOgotICAgICAgICBzZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKHNlbGYuX2Ns
aWVudCwgc2VsZi5fcG9zdF90b3BpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlX25hbWUsICptZXNzYWdlX2FyZ3MpCi0KLSAgICBkZWYgcmFpc2VfZXhjZXB0aW9u
KHNlbGYsIGV4Y19pbmZvKToKLSAgICAgICAgIyBTaW5jZSB0cmFjZWJhY2tzIGFyZW4ndCBwaWNr
bGFibGUsIHNlbmQgdGhlIGV4dHJhY3RlZCBzdGFjayBpbnN0ZWFkLAotICAgICAgICAjIGJ1dCBh
dCBsZWFzdCBsb2cgdGhlIGZ1bGwgdHJhY2ViYWNrLgotICAgICAgICBleGNlcHRpb25fdHlwZSwg
ZXhjZXB0aW9uX3ZhbHVlLCBleGNlcHRpb25fdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKLSAg
ICAgICAgc3RhY2tfdXRpbHMubG9nX3RyYWNlYmFjayhfbG9nLmVycm9yLCBleGNlcHRpb25fdHJh
Y2ViYWNrKQotICAgICAgICBzdGFjayA9IHRyYWNlYmFjay5leHRyYWN0X3RiKGV4Y2VwdGlvbl90
cmFjZWJhY2spCi0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5fY2xpZW50
LCBzZWxmLl9wb3N0X3RvcGljLCAnZXhjZXB0aW9uJywgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlv
bl92YWx1ZSwgc3RhY2spCisgICAgICAgIHJldHVybiAnX01lc3NhZ2Uoc3JjPSVzLCBuYW1lPSVz
LCBhcmdzPSVzLCBmcm9tX3VzZXI9JXMsIGxvZ3M9JXMpJyAlIChzZWxmLnNyYywgc2VsZi5uYW1l
LCBzZWxmLmFyZ3MsIHNlbGYuZnJvbV91c2VyLCBzZWxmLmxvZ3MpCiAKIAotY2xhc3MgQWJzdHJh
Y3RXb3JrZXIoQnJva2VyQ2xpZW50KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2VyX2Nv
bm5lY3Rpb24sIHdvcmtlcl9udW1iZXIpOgotICAgICAgICBCcm9rZXJDbGllbnQuX19pbml0X18o
c2VsZikKLSAgICAgICAgc2VsZi53b3JrZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3dvcmtlcl9j
b25uZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KK2NsYXNzIF9Xb3JrZXIobXVsdGlwcm9jZXNz
aW5nLlByb2Nlc3MpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBtZXNzYWdlc190b19t
YW5hZ2VyLCBtZXNzYWdlc190b193b3JrZXIsIHdvcmtlcl9mYWN0b3J5LCB3b3JrZXJfbnVtYmVy
KToKKyAgICAgICAgc3VwZXIoX1dvcmtlciwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxm
Lmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYud29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIK
ICAgICAgICAgc2VsZi5uYW1lID0gJ3dvcmtlci8lZCcgJSB3b3JrZXJfbnVtYmVyCi0gICAgICAg
IHNlbGYuX2RvbmUgPSBGYWxzZQotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IEZhbHNlCi0gICAg
ICAgIHNlbGYuX29wdGlvbnMgPSBvcHRwYXJzZS5WYWx1ZXMoeyd2ZXJib3NlJzogRmFsc2V9KQot
ICAgICAgICBzZWxmLmhvc3QgPSBOb25lCisgICAgICAgIHNlbGYubG9nX21lc3NhZ2VzID0gW10K
KyAgICAgICAgc2VsZi5tYW5hZ2VyID0gTm9uZQorICAgICAgICBzZWxmLnJ1bm5pbmdfaW5saW5l
ID0gTm9uZQogCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9k
b25lIG9yIHNlbGYuX2NhbmNlbGVkCisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIg
PSBtZXNzYWdlc190b19tYW5hZ2VyCisgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlciA9
IG1lc3NhZ2VzX3RvX3dvcmtlcgorICAgICAgICBzZWxmLl93b3JrZXIgPSB3b3JrZXJfZmFjdG9y
eShzZWxmKQorICAgICAgICBzZWxmLl9sb2dnZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xvZ19o
YW5kbGVyID0gTm9uZQogCi0gICAgZGVmIHN0b3BfaGFuZGxpbmdfbWVzc2FnZXMoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5fd29ya2VyOgorICAgICAgICAgICAgc2VsZi5fd29ya2VyLnN0b3AoKQorICAg
ICAgICAgICAgc2VsZi5fd29ya2VyID0gTm9uZQorICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6
CisgICAgICAgICAgICBzdXBlcihfV29ya2VyLCBzZWxmKS50ZXJtaW5hdGUoKQogCi0gICAgZGVm
IHJ1bihzZWxmLCBob3N0KToKLSAgICAgICAgIiIiQ2FsbGJhY2sgZm9yIHRoZSB3b3JrZXIgdG8g
c3RhcnQgZXhlY3V0aW5nLiBUeXBpY2FsbHkgZG9lcyBhbnkKLSAgICAgICAgcmVtYWluaW5nIGlu
aXRpYWxpemF0aW9uIGFuZCB0aGVuIGNhbGxzIGJyb2tlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdl
X2xvb3AoKS4iIiIKLSAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCi0gICAgICAgIHNlbGYuaG9z
dCA9IGhvc3QKKyAgICBkZWYgX2Nsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9sb2dfaGFu
ZGxlciBhbmQgc2VsZi5fbG9nZ2VyOgorICAgICAgICAgICAgc2VsZi5fbG9nZ2VyLnJlbW92ZUhh
bmRsZXIoc2VsZi5fbG9nX2hhbmRsZXIpCisgICAgICAgIHNlbGYuX2xvZ19oYW5kbGVyID0gTm9u
ZQorICAgICAgICBzZWxmLl9sb2dnZXIgPSBOb25lCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5ob3N0OgorICAgICAgICAgICAgc2VsZi5ob3N0ID0gSG9zdCgpCisg
ICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgc2VsZi5fc2V0
X3VwX2xvZ2dpbmcoKQogCi0gICAgICAgIHNlbGYud29ya2VyLnN0YXJ0KCkKLSAgICAgICAgX2xv
Zy5kZWJ1ZygnJXMgc3RhcnRpbmcnICUgc2VsZi5uYW1lKQorICAgICAgICB3b3JrZXIgPSBzZWxm
Ll93b3JrZXIKKyAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIiCisgICAgICAgIF9sb2cuZGVidWco
IiVzIHN0YXJ0aW5nIiAlIHNlbGYubmFtZSkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBz
ZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKCkKLSAgICAgICAgICAgIGlm
IG5vdCBzZWxmLmlzX2RvbmUoKToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJv
cigiJXM6IHJhbiBvdXQgb2YgbWVzc2FnZXMgaW4gd29ya2VyIHF1ZXVlLiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAlIHNlbGYubmFtZSkKLSAgICAgICAgZXhjZXB0IEtl
eWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYuX21lc3NhZ2VzX3Rv
X3dvcmtlci5nZXQoKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2UuZnJvbV91c2VyOgorICAg
ICAgICAgICAgICAgICAgICB3b3JrZXIuaGFuZGxlKG1lc3NhZ2UubmFtZSwgbWVzc2FnZS5zcmMs
ICptZXNzYWdlLmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYueWllbGRfdG9fY2FsbGVy
KCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbWVz
c2FnZS5uYW1lID09ICdzdG9wJywgJ2JhZCBtZXNzYWdlICVzJyAlIHJlcHIobWVzc2FnZSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6Cisg
ICAgICAgICAgICBhc3NlcnQgRmFsc2UsICclczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3Jr
ZXIgcXVldWUuJyAlIHNlbGYubmFtZQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQs
IGU6CiAgICAgICAgICAgICBleGNlcHRpb25fbXNnID0gIiwgaW50ZXJydXB0ZWQiCi0gICAgICAg
ICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5yYWlzZV9leGNlcHRpb24oc3lzLmV4Y19pbmZv
KCkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBleGNl
cHRpb24gcmFpc2VkIgotICAgICAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucmFpc2Vf
ZXhjZXB0aW9uKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucnVubmlu
Z19pbmxpbmU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCd3b3JrZXIgZXhjZXB0aW9u
JykKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAg
ICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICBleGNl
cHRpb25fbXNnID0gIiwgZXhjZXB0aW9uIHJhaXNlZDogJXMiICUgc3RyKGUpCisgICAgICAgICAg
ICBpZiBub3Qgc2VsZi5ydW5uaW5nX2lubGluZToKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlz
ZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGZpbmFsbHk6Ci0g
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBkb25lIHdpdGggbWVzc2FnZSBsb29wJXMiICUgKHNl
bGYubmFtZSwgZXhjZXB0aW9uX21zZykpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBleGl0
aW5nJXMiICUgKHNlbGYubmFtZSwgZXhjZXB0aW9uX21zZykpCiAgICAgICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICAgICAgc2VsZi53b3JrZXIuc3RvcCgpCisgICAgICAgICAgICAgICAgd29ya2Vy
LnN0b3AoKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAjIE1ha2Ugc3Vy
ZSB3ZSBwb3N0IGEgZG9uZSBzbyB0aGF0IHdlIGNhbiBmbHVzaCB0aGUgbG9nIG1lc3NhZ2VzCi0g
ICAgICAgICAgICAgICAgIyBhbmQgY2xlYW4gdXAgcHJvcGVybHkgZXZlbiBpZiB3ZSByYWlzZSBh
biBleGNlcHRpb24gaW4gd29ya2VyLmNsZWFudXAoKS4KLSAgICAgICAgICAgICAgICBzZWxmLl93
b3JrZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ2RvbmUnKQotCi0gICAgZGVmIGhhbmRsZV9z
dG9wKHNlbGYsIHNvdXJjZSk6Ci0gICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCisgICAgICAgICAg
ICAgICAgc2VsZi5fcG9zdChuYW1lPSdkb25lJywgYXJncz0oKSwgZnJvbV91c2VyPUZhbHNlKQor
ICAgICAgICAgICAgc2VsZi5fY2xvc2UoKQogCi0gICAgZGVmIGhhbmRsZV90ZXN0X2xpc3Qoc2Vs
Ziwgc291cmNlLCBsaXN0X25hbWUsIHRlc3RfbGlzdCk6Ci0gICAgICAgIHNlbGYud29ya2VyLmhh
bmRsZSgndGVzdF9saXN0Jywgc291cmNlLCBsaXN0X25hbWUsIHRlc3RfbGlzdCkKLQotICAgIGRl
ZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgICIiIkNhbGxlZCB3aGVuIHBvc3NpYmxlIHRvIGluZGlj
YXRlIHRvIHRoZSB3b3JrZXIgdG8gc3RvcCBwcm9jZXNzaW5nCi0gICAgICAgIG1lc3NhZ2VzIGFu
ZCBzaHV0IGRvd24uIE5vdGUgdGhhdCB3b3JrZXJzIG1heSBiZSBzdG9wcGVkIHdpdGhvdXQgdGhp
cwotICAgICAgICBtZXRob2QgYmVpbmcgY2FsbGVkLCBzbyBjbGllbnRzIHNob3VsZCBub3QgcmVs
eSBzb2xlbHkgb24gdGhpcy4iIiIKLSAgICAgICAgc2VsZi5fY2FuY2VsZWQgPSBUcnVlCisgICAg
ZGVmIHBvc3Qoc2VsZiwgbmFtZSwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9wb3N0KG5hbWUsIGFy
Z3MsIGZyb21fdXNlcj1UcnVlKQogCiAgICAgZGVmIHlpZWxkX3RvX2NhbGxlcihzZWxmKToKLSAg
ICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ueWllbGRfdG9fYnJva2VyKCkKLQotICAgIGRl
ZiBwb3N0KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24ucG9z
dF9tZXNzYWdlKCphcmdzKQorICAgICAgICBpZiBzZWxmLnJ1bm5pbmdfaW5saW5lOgorICAgICAg
ICAgICAgc2VsZi5tYW5hZ2VyLl9sb29wKGJsb2NrPUZhbHNlKQogCisgICAgZGVmIF9wb3N0KHNl
bGYsIG5hbWUsIGFyZ3MsIGZyb21fdXNlcik6CisgICAgICAgIGxvZ19tZXNzYWdlcyA9IHNlbGYu
bG9nX21lc3NhZ2VzCisgICAgICAgIHNlbGYubG9nX21lc3NhZ2VzID0gW10KKyAgICAgICAgc2Vs
Zi5fbWVzc2FnZXNfdG9fbWFuYWdlci5wdXQoX01lc3NhZ2Uoc2VsZi5uYW1lLCBuYW1lLCBhcmdz
LCBmcm9tX3VzZXIsIGxvZ19tZXNzYWdlcykpCiAKLWNsYXNzIF9NYW5hZ2VyQ29ubmVjdGlvbihf
QnJva2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50
LCB3b3JrZXJfZmFjdG9yeSwgaG9zdCk6Ci0gICAgICAgIF9Ccm9rZXJDb25uZWN0aW9uLl9faW5p
dF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCBNQU5BR0VSX1RPUElDLCBBTllfV09SS0VSX1RPUElD
KQotICAgICAgICBzZWxmLl93b3JrZXJfZmFjdG9yeSA9IHdvcmtlcl9mYWN0b3J5Ci0gICAgICAg
IHNlbGYuX2hvc3QgPSBob3N0Ci0KLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9u
dW1iZXIpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLQotY2xhc3MgX0lu
bGluZU1hbmFnZXIoX01hbmFnZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
YnJva2VyLCBjbGllbnQsIHdvcmtlcl9mYWN0b3J5LCBob3N0KToKLSAgICAgICAgX01hbmFnZXJD
b25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJyb2tlciwgY2xpZW50LCB3b3JrZXJfZmFjdG9yeSwg
aG9zdCkKLSAgICAgICAgc2VsZi5faW5saW5lX3dvcmtlciA9IE5vbmUKLQotICAgIGRlZiBzdGFy
dF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6Ci0gICAgICAgIGhvc3QgPSBzZWxmLl9ob3N0
Ci0gICAgICAgIHNlbGYuX2lubGluZV93b3JrZXIgPSBfSW5saW5lV29ya2VyQ29ubmVjdGlvbiho
b3N0LCBzZWxmLl9icm9rZXIsIHNlbGYuX2NsaWVudCwgc2VsZi5fd29ya2VyX2ZhY3RvcnksIHdv
cmtlcl9udW1iZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9pbmxpbmVfd29ya2VyCi0KLSAgICBk
ZWYgcnVuX21lc3NhZ2VfbG9vcChzZWxmLCBkZWxheV9zZWNzPU5vbmUpOgotICAgICAgICAjIE5v
dGUgdGhhdCBkZWxheV9zZWNzIGlzIGlnbm9yZWQgaW4gdGhpcyBjYXNlIHNpbmNlIHdlIGNhbid0
IGVhc2lseQotICAgICAgICAjIGltcGxlbWVudCBpdC4KLSAgICAgICAgc2VsZi5faW5saW5lX3dv
cmtlci5ydW4oKQotICAgICAgICBzZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJf
VE9QSUMsIHNlbGYuX2NsaWVudCkKLQotCi1jbGFzcyBfTXVsdGlQcm9jZXNzTWFuYWdlcihfTWFu
YWdlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfY2FuX3BpY2tsZV9ob3N0KHNlbGYpOgotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBjUGlja2xlLmR1bXBzKHNlbGYuX2hvc3QpCi0gICAgICAgICAg
ICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICBkZWYgc3RhcnRfd29ya2VyKHNlbGYsIHdvcmtlcl9udW1iZXIpOgot
ICAgICAgICBob3N0ID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9jYW5fcGlja2xlX2hvc3QoKToK
LSAgICAgICAgICAgIGhvc3QgPSBzZWxmLl9ob3N0Ci0gICAgICAgIHdvcmtlcl9jb25uZWN0aW9u
ID0gX011bHRpUHJvY2Vzc1dvcmtlckNvbm5lY3Rpb24oaG9zdCwgc2VsZi5fYnJva2VyLCBzZWxm
Ll93b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJlcikKLSAgICAgICAgd29ya2VyX2Nvbm5lY3Rp
b24uc3RhcnQoKQotICAgICAgICByZXR1cm4gd29ya2VyX2Nvbm5lY3Rpb24KLQotCi1jbGFzcyBf
V29ya2VyQ29ubmVjdGlvbihfQnJva2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIGJyb2tlciwgd29ya2VyX2ZhY3RvcnksIHdvcmtlcl9udW1iZXIpOgotICAgICAg
ICAjIEZJWE1FOiBrZWVwaW5nIHRyYWNrIG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBX
b3JrZXJDb25uZWN0aW9uLCB0aGUgQWJzdHJhY3RXb3JrZXIsIGFuZCB0aGUKLSAgICAgICAgIyBh
Y3R1YWwgV29ya2VyIChjcmVhdGVkIGJ5IHdvcmtlcl9mYWN0b3J5KSBpcyB2ZXJ5IGNvbmZ1c2lu
ZywgYnV0IHRoaXMgYWxsIGdldHMgYmV0dGVyIHdoZW4KLSAgICAgICAgIyBfV29ya2VyQ29ubmVj
dGlvbiBhbmQgQWJzdHJhY3RXb3JrZXIgZ2V0IG1lcmdlZC4KLSAgICAgICAgc2VsZi5fY2xpZW50
ID0gQWJzdHJhY3RXb3JrZXIoc2VsZiwgd29ya2VyX251bWJlcikKLSAgICAgICAgc2VsZi5fd29y
a2VyID0gd29ya2VyX2ZhY3Rvcnkoc2VsZi5fY2xpZW50KQotICAgICAgICBzZWxmLl9jbGllbnQu
d29ya2VyID0gc2VsZi5fd29ya2VyCi0gICAgICAgIHNlbGYuX2hvc3QgPSBob3N0Ci0gICAgICAg
IHNlbGYuX2xvZ19tZXNzYWdlcyA9IFtdCi0gICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUKLSAg
ICAgICAgc2VsZi5fbG9nX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIHNlbGYubmFtZSA9IHNlbGYu
X2NsaWVudC5uYW1lCi0gICAgICAgIF9Ccm9rZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGJy
b2tlciwgc2VsZi5fY2xpZW50LCBBTllfV09SS0VSX1RPUElDLCBNQU5BR0VSX1RPUElDKQotCi0g
ICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgot
Ci0gICAgZGVmIGlzX2FsaXZlKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCi0KLSAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKLSAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKLSAgICAgICAg
cGFzcworICAgIGRlZiBfcmFpc2Uoc2VsZiwgZXhjX2luZm8pOgorICAgICAgICAjIFNpbmNlIHRy
YWNlYmFja3MgYXJlbid0IHBpY2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFjdGVkIHN0YWNrIGluc3Rl
YWQuCisgICAgICAgIGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIGV4Y2VwdGlvbl90
cmFjZWJhY2sgPSBleGNfaW5mbworICAgICAgICBzdGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9s
b2cuZXJyb3IsIGV4Y2VwdGlvbl90cmFjZWJhY2spCisgICAgICAgIHN0YWNrID0gdHJhY2ViYWNr
LmV4dHJhY3RfdGIoZXhjZXB0aW9uX3RyYWNlYmFjaykKKyAgICAgICAgc2VsZi5fcG9zdChuYW1l
PSd3b3JrZXJfZXhjZXB0aW9uJywgYXJncz0oZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1
ZSwgc3RhY2spLCBmcm9tX3VzZXI9RmFsc2UpCiAKLSAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYs
ICphcmdzKToKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdW50aWwgd2UgY2FuIHJl
bW92ZSB0aGUgbG9nX21lc3NhZ2VzIGFyZyBmcm9tIHRoZSBtYW5hZ2VyLgotICAgICAgICBpZiBh
cmdzWzBdIGluICgnZmluaXNoZWRfdGVzdCcsICdkb25lJyk6Ci0gICAgICAgICAgICBsb2dfbWVz
c2FnZXMgPSBzZWxmLl9sb2dfbWVzc2FnZXMKLSAgICAgICAgICAgIHNlbGYuX2xvZ19tZXNzYWdl
cyA9IFtdCi0gICAgICAgICAgICBhcmdzID0gYXJncyArIHR1cGxlKFtsb2dfbWVzc2FnZXNdKQot
ICAgICAgICBzdXBlcihfV29ya2VyQ29ubmVjdGlvbiwgc2VsZikucG9zdF9tZXNzYWdlKCphcmdz
KQorICAgIGRlZiBfc2V0X3VwX2xvZ2dpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKIAotICAgIGRlZiBzZXRfdXBfbG9nZ2luZyhzZWxmKToKLSAg
ICAgICAgc2VsZi5fbG9nZ2VyID0gbG9nZ2luZy5yb290CiAgICAgICAgICMgVGhlIHVuaXggbXVs
dGlwcm9jZXNzaW5nIGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUgTWV0ZXJlZFN0cmVhbSBsb2cg
aGFuZGxlcgogICAgICAgICAjIGludG8gdGhlIGNoaWxkIHByb2Nlc3MsIHNvIHdlIG5lZWQgdG8g
cmVtb3ZlIGl0IHRvIGF2b2lkIGR1cGxpY2F0ZSBsb2dnaW5nLgogICAgICAgICBmb3IgaCBpbiBz
ZWxmLl9sb2dnZXIuaGFuZGxlcnM6CiAgICAgICAgICAgICAjIGxvZyBoYW5kbGVycyBkb24ndCBo
YXZlIG5hbWVzIHVudGlsIHB5dGhvbiAyLjcuCi0gICAgICAgICAgICBpZiBnZXRhdHRyKGgsICdu
YW1lJywgJycpID09IG1ldGVyZWRfc3RyZWFtLkxPR19IQU5ETEVSX05BTUU6CisgICAgICAgICAg
ICBpZiBnZXRhdHRyKGgsICduYW1lJywgJycpIGluIChtZXRlcmVkX3N0cmVhbS5MT0dfSEFORExF
Ul9OQU1FLCAnd2Via2l0cHkudGVzdC5wcmludGVyJyk6CiAgICAgICAgICAgICAgICAgc2VsZi5f
bG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBz
ZWxmLl9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRyBpZiBzZWxmLl9jbGllbnQuX29wdGlv
bnMudmVyYm9zZSBlbHNlIGxvZ2dpbmcuSU5GTykKKwogICAgICAgICBzZWxmLl9sb2dfaGFuZGxl
ciA9IF9Xb3JrZXJMb2dIYW5kbGVyKHNlbGYpCiAgICAgICAgIHNlbGYuX2xvZ2dlci5hZGRIYW5k
bGVyKHNlbGYuX2xvZ19oYW5kbGVyKQogCi0gICAgZGVmIGNsZWFuX3VwX2xvZ2dpbmcoc2VsZik6
Ci0gICAgICAgIGlmIHNlbGYuX2xvZ19oYW5kbGVyIGFuZCBzZWxmLl9sb2dnZXI6Ci0gICAgICAg
ICAgICBzZWxmLl9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKLSAgICAg
ICAgc2VsZi5fbG9nX2hhbmRsZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUK
LQotCi1jbGFzcyBfSW5saW5lV29ya2VyQ29ubmVjdGlvbihfV29ya2VyQ29ubmVjdGlvbik6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIGJyb2tlciwgbWFuYWdlcl9jbGllbnQsIHdvcmtl
cl9mYWN0b3J5LCB3b3JrZXJfbnVtYmVyKToKLSAgICAgICAgX1dvcmtlckNvbm5lY3Rpb24uX19p
bml0X18oc2VsZiwgaG9zdCwgYnJva2VyLCB3b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJlcikK
LSAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQotICAgICAgICBzZWxmLl9tYW5hZ2VyX2NsaWVu
dCA9IG1hbmFnZXJfY2xpZW50Ci0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICBzZWxm
Ll9jbGllbnQuY2FuY2VsKCkKLQotICAgIGRlZiBpc19hbGl2ZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuX2FsaXZlCi0KLSAgICBkZWYgam9pbihzZWxmLCB0aW1lb3V0KToKLSAgICAgICAg
YXNzZXJ0IG5vdCBzZWxmLl9hbGl2ZQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2Vs
Zi5fYWxpdmUgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NsaWVudC5y
dW4oc2VsZi5faG9zdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2FsaXZl
ID0gRmFsc2UKLQotICAgIGRlZiB5aWVsZF90b19icm9rZXIoc2VsZik6Ci0gICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywgc2VsZi5fbWFuYWdlcl9jbGll
bnQpCi0KLSAgICBkZWYgcmFpc2VfZXhjZXB0aW9uKHNlbGYsIGV4Y19pbmZvKToKLSAgICAgICAg
IyBTaW5jZSB0aGUgd29ya2VyIGlzIGluIHRoZSBzYW1lIHByb2Nlc3MgYXMgdGhlIG1hbmFnZXIs
IHdlIGNhbgotICAgICAgICAjIHJhaXNlIHRoZSBleGNlcHRpb24gZGlyZWN0bHksIHJhdGhlciB0
aGFuIGhhdmluZyB0byBzZW5kIGl0IHRocm91Z2gKLSAgICAgICAgIyB0aGUgcXVldWUuIFRoaXMg
YWxsb3dzIHVzIHRvIHByZXNlcnZlIHRoZSB0cmFjZWJhY2ssIGJ1dCB3ZSBsb2cKLSAgICAgICAg
IyBpdCBhbnl3YXkgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIG11bHRpcHJvY2VzcyBjYXNlLgot
ICAgICAgICBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBleGNlcHRpb25fdHJhY2Vi
YWNrID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgc3RhY2tfdXRpbHMubG9nX3RyYWNlYmFjayhf
bG9nLmVycm9yLCBleGNlcHRpb25fdHJhY2ViYWNrKQotICAgICAgICByYWlzZSBleGNlcHRpb25f
dHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBleGNlcHRpb25fdHJhY2ViYWNrCi0KLQotY2xhc3MgX1By
b2Nlc3MobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3
b3JrZXJfY29ubmVjdGlvbiwgY2xpZW50KToKLSAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nl
c3MuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24gPSB3b3Jr
ZXJfY29ubmVjdGlvbgotICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQKLQotICAgIGRlZiBy
dW4oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5faG9zdDoK
LSAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLl9ob3N0ID0gSG9zdCgpCi0gICAg
ICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJ1bigpCi0KLQotY2xhc3MgX011bHRpUHJvY2Vz
c1dvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBob3N0LCBicm9rZXIsIHdvcmtlcl9mYWN0b3J5LCB3b3JrZXJfbnVtYmVyKToKLSAgICAg
ICAgX1dvcmtlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgaG9zdCwgYnJva2VyLCB3b3JrZXJf
ZmFjdG9yeSwgd29ya2VyX251bWJlcikKLSAgICAgICAgc2VsZi5fcHJvYyA9IF9Qcm9jZXNzKHNl
bGYsIHNlbGYuX2NsaWVudCkKLQotICAgIGRlZiBjYW5jZWwoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9wcm9jLnRlcm1pbmF0ZSgpCi0KLSAgICBkZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9wcm9jLmlzX2FsaXZlKCkKLQotICAgIGRlZiBqb2luKHNlbGYsIHRp
bWVvdXQpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5qb2luKHRpbWVvdXQpCi0KLSAgICBk
ZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Byb2Muc3RhcnQoKQotCi0gICAgZGVmIHJ1
bihzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdXBfbG9nZ2luZygpCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIHNlbGYuX2NsaWVudC5ydW4oc2VsZi5faG9zdCkKLSAgICAgICAgZmluYWxseToK
LSAgICAgICAgICAgIHNlbGYuY2xlYW5fdXBfbG9nZ2luZygpCi0KIAogY2xhc3MgX1dvcmtlckxv
Z0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2Vy
KToKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIHNlbGYu
X3dvcmtlciA9IHdvcmtlcgotICAgICAgICBzZWxmLl9waWQgPSBvcy5nZXRwaWQoKQogCiAgICAg
ZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKLSAgICAgICAgc2VsZi5fd29ya2VyLl9sb2dfbWVzc2Fn
ZXMuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgc2VsZi5fd29ya2VyLmxvZ19tZXNzYWdlcy5hcHBl
bmQocmVjb3JkKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJfYnJva2VyX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl93b3JrZXJf
YnJva2VyX3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODJmZDU1
OTc5OTA2YTQ4MTkyMDM5MWYzMjI2M2RkNzIwZTJmMjE2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weQorKysgL2Rl
di9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
IyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9wdHBh
cnNlCi1pbXBvcnQgUXVldWUKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzIGltcG9ydCBtYW5hZ2VyX3dvcmtlcl9icm9rZXIKLQot
Ci0jIEluIG9yZGVyIHRvIHJlbGlhYmx5IGNvbnRyb2wgd2hlbiBjaGlsZCB3b3JrZXJzIGFyZSBz
dGFydGluZyBhbmQgc3RvcHBpbmcsCi0jIHdlIHVzZSBhIHBhaXIgb2YgZ2xvYmFsIHZhcmlhYmxl
cyB0byBob2xkIHF1ZXVlcyB1c2VkIGZvciBtZXNzYWdpbmcuIElkZWFsbHkKLSMgd2Ugd291bGRu
J3QgbmVlZCBnbG9iYWxzLCBidXQgd2UgY2FuJ3QgcGFzcyB0aGVzZSB0aHJvdWdoIGEgbGV4aWNh
bCBjbG9zdXJlCi0jIGJlY2F1c2UgdGhvc2UgY2FuJ3QgYmUgUGlja2xlZCBhbmQgc2VudCB0byBh
IHN1YnByb2Nlc3MsIGFuZCB3ZSdkIHByZWZlciBub3QKLSMgdG8gaGF2ZSB0byBwYXNzIGV4dHJh
IGFyZ3VtZW50cyB0byB0aGUgd29ya2VyIGluIHRoZSBzdGFydF93b3JrZXIoKSBjYWxsLgotc3Rh
cnRpbmdfcXVldWUgPSBOb25lCi1zdG9wcGluZ19xdWV1ZSA9IE5vbmUKLQotCi1XT1JLRVJfTkFN
RSA9ICd3b3JrZXIvMScKLQotZGVmIG1ha2VfYnJva2VyKG1hbmFnZXIsIG1heF93b3JrZXJzLCBz
dGFydF9xdWV1ZT1Ob25lLCBzdG9wX3F1ZXVlPU5vbmUpOgotICAgIGdsb2JhbCBzdGFydGluZ19x
dWV1ZQotICAgIGdsb2JhbCBzdG9wcGluZ19xdWV1ZQotICAgIHN0YXJ0aW5nX3F1ZXVlID0gc3Rh
cnRfcXVldWUKLSAgICBzdG9wcGluZ19xdWV1ZSA9IHN0b3BfcXVldWUKLSAgICByZXR1cm4gbWFu
YWdlcl93b3JrZXJfYnJva2VyLl9nZXRfYnJva2VyKG1heF93b3JrZXJzLCBtYW5hZ2VyLCBfVGVz
dFdvcmtlcikKLQotCi1jbGFzcyBfVGVzdFdvcmtlcihvYmplY3QpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBjYWxsZXIpOgotICAgICAgICBzZWxmLl9jYWxsZXIgPSBjYWxsZXIKLSAgICAgICAg
c2VsZi5fdGhpbmdfdG9fZ3JlZXQgPSAnZXZlcnlib2R5JwotICAgICAgICBzZWxmLl9zdGFydGlu
Z19xdWV1ZSA9IHN0YXJ0aW5nX3F1ZXVlCi0gICAgICAgIHNlbGYuX3N0b3BwaW5nX3F1ZXVlID0g
c3RvcHBpbmdfcXVldWUKLSAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdHBhcnNlLlZhbHVlcyh7
J3ZlcmJvc2UnOiBGYWxzZX0pCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuX3N0YXJ0aW5nX3F1ZXVlOgotICAgICAgICAgICAgc2VsZi5fc3RhcnRpbmdfcXVldWUucHV0
KCcnKQotCi0gICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nX3F1ZXVlOgotICAgICAgICAgICAgc2Vs
Zi5fc3RvcHBpbmdfcXVldWUuZ2V0KCkKLQotICAgIGRlZiBoYW5kbGUoc2VsZiwgbWVzc2FnZSwg
c3JjLCBhbl9pbnQsIGFfc3RyKToKLSAgICAgICAgYXNzZXJ0IGFuX2ludCA9PSAxCi0gICAgICAg
IGFzc2VydCBhX3N0ciA9PSAiaGVsbG8sIHdvcmxkIgotICAgICAgICBzZWxmLl9jYWxsZXIucG9z
dCgnZmluaXNoZWRfdGVzdCcsIDIpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgcGFz
cwotCi0KLWNsYXNzIEZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0
ZXN0X2dldF9faW5saW5lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV9icm9r
ZXIoc2VsZiwgMSkgaXMgbm90IE5vbmUpCi0KLSAgICBkZWYgdGVzdF9nZXRfX3Byb2Nlc3Nlcyhz
ZWxmKToKLSAgICAgICAgIyBUaGlzIHRlc3Qgc29tZXRpbWVzIGZhaWxzIG9uIFdpbmRvd3MuIFNl
ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi81NTA4Nz4uCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBp
biAoJ2N5Z3dpbicsICd3aW4zMicpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShtYWtlX2Jyb2tlcihzZWxmLCAyKSBpcyBub3QgTm9uZSkKLQotCi1jbGFzcyBf
VGVzdHNNaXhpbihvYmplY3QpOgotICAgICIiIk1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBh
IHNlcmllcyBvZiB0ZXN0cyB0byBlbmZvcmNlIHRoZQotICAgIGNvbnRyYWN0IGFsbCBpbXBsZW1l
bnRhdGlvbnMgbXVzdCBmb2xsb3cuIiIiCi0KLSAgICBuYW1lID0gJ1Rlc3Rlck1hbmFnZXInCi0K
LSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKLQotICAg
IGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMsIGxvZ19tZXNzYWdlcyk6Ci0gICAgICAgIHNlbGYu
X2RvbmUgPSBUcnVlCi0KLSAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc3JjLCBh
bl9pbnQsIGxvZ19tZXNzYWdlcyk6Ci0gICAgICAgIHNlbGYuX2FuX2ludCA9IGFuX2ludAotCi0g
ICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0
aW9uX3ZhbHVlLCBzdGFjayk6Ci0gICAgICAgIHJhaXNlIGV4Y2VwdGlvbl90eXBlKGV4Y2VwdGlv
bl92YWx1ZSkKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5fYW5faW50ID0g
Tm9uZQotICAgICAgICBzZWxmLl9icm9rZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2RvbmUgPSBG
YWxzZQotICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCi0gICAgICAgIHNlbGYuX21heF93
b3JrZXJzID0gTm9uZQotCi0gICAgZGVmIG1ha2VfYnJva2VyKHNlbGYsIHN0YXJ0aW5nX3F1ZXVl
PU5vbmUsIHN0b3BwaW5nX3F1ZXVlPU5vbmUpOgotICAgICAgICBzZWxmLl9icm9rZXIgPSBtYWtl
X2Jyb2tlcihzZWxmLCBzZWxmLl9tYXhfd29ya2Vycywgc3RhcnRpbmdfcXVldWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwaW5nX3F1ZXVlKQotCi0gICAgZGVmIHRl
c3RfbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5tYWtlX2Jyb2tlcigpCi0gICAgICAgIHdvcmtl
ciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMod29ya2VyLm5hbWUsIFdPUktFUl9OQU1FKQotICAgICAgICB3b3JrZXIuY2FuY2VsKCkKLSAg
ICAgICAgd29ya2VyLmpvaW4oMC4xKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5p
c19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9icm9rZXIuY2xlYW51cCgpCi0KLSAgICBkZWYgdGVz
dF9jYW5jZWwoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAgICB3b3Jr
ZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDEpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5w
b3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIDEsICdoZWxsbywgd29ybGQnKQotICAgICAgICB3b3Jr
ZXIuY2FuY2VsKCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC4xKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9icm9rZXIuY2xlYW51cCgp
Ci0KLSAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
LSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigxKQotICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykK
LSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgnc3RvcCcpCi0gICAgICAgIHNlbGYu
X2Jyb2tlci5ydW5fbWVzc2FnZV9sb29wKCkKLSAgICAgICAgd29ya2VyLmpvaW4oMC41KQotICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLmFz
c2VydFRydWUoc2VsZi5pc19kb25lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5f
YW5faW50LCAyKQotICAgICAgICBzZWxmLl9icm9rZXIuY2xlYW51cCgpCi0KLSAgICBkZWYgdGVz
dF91bmtub3duX21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAg
ICAgICB3b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDEpCi0gICAgICAgIHNlbGYu
X2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3Vua25vd24nKQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBzZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCi0gICAgICAgICAgICBzZWxmLmZhaWwo
KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHN0cihlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogcmVjZWl2
ZWQgbWVzc2FnZSAndW5rbm93bicgaXQgY291bGRuJ3QgaGFuZGxlIiAlIFdPUktFUl9OQU1FKQot
ICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgd29ya2VyLmpvaW4oMC41KQotICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHdvcmtlci5pc19hbGl2ZSgpKQotICAgICAgICBzZWxmLl9icm9rZXIu
Y2xlYW51cCgpCi0KLQotY2xhc3MgSW5saW5lQnJva2VyVGVzdHMoX1Rlc3RzTWl4aW4sIHVuaXR0
ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIF9UZXN0c01peGlu
LnNldFVwKHNlbGYpCi0gICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gMQotCi0KLSMgRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDUyMC4KLWlmIHN5cy5w
bGF0Zm9ybSBub3QgaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLQotICAgIGNsYXNzIE11bHRpUHJv
Y2Vzc0Jyb2tlclRlc3RzKF9UZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAg
IGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIF9UZXN0c01peGluLnNldFVwKHNlbGYpCi0g
ICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IDIKLQotCi1jbGFzcyBNZXNzYWdlVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfX25vX2JvZHkoc2VsZik6Ci0gICAgICAg
IG1zZyA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUn
LCAnbWVzc2FnZV9uYW1lJywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNn
KSkKLSAgICAgICAgcyA9IG1zZy5kdW1wcygpCi0gICAgICAgIG5ld19tc2cgPSBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChu
ZXdfbXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5l
d19tc2cuYXJncywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnRvcGlj
X25hbWUsICd0b3BpY19uYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfbXNnLnNy
YywgJ3NyYycpCi0KLSAgICBkZWYgdGVzdF9fYm9keShzZWxmKToKLSAgICAgICAgbXNnID0gbWFu
YWdlcl93b3JrZXJfYnJva2VyLl9NZXNzYWdlKCdzcmMnLCAndG9waWNfbmFtZScsICdtZXNzYWdl
X25hbWUnLCAoJ2JvZHknLCAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobXNnKSkK
LSAgICAgICAgcyA9IG1zZy5kdW1wcygpCi0gICAgICAgIG5ld19tc2cgPSBtYW5hZ2VyX3dvcmtl
cl9icm9rZXIuX01lc3NhZ2UubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdf
bXNnLm5hbWUsICdtZXNzYWdlX25hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19t
c2cuYXJncywgKCdib2R5JywgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50
b3BpY19uYW1lLCAndG9waWNfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21z
Zy5zcmMsICdzcmMnKQotCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0
dGVzdC5tYWluKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151830</attachid>
            <date>2012-07-11 18:14:01 -0700</date>
            <delta_ts>2012-07-12 10:50:24 -0700</delta_ts>
            <desc>merge to r122394</desc>
            <filename>bug-90513-20120711181400.patch</filename>
            <type>text/plain</type>
            <size>37294</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMzk0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTQwNDliZDRmYWNhMGIwN2ZkZTRmMmRkZWJlNzRiMDkz
M2UyNmQ1My4uMjgwZjdkOWE4ZTRhYWU1ZTc3ZmMyYWRhZGQ4ZDUzNDEyY2NmY2FkYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUw
IEBACisyMDEyLTA3LTExICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIG5yd3Q6IHJlaW1wbGVtZW50IG1hbmFnZXJfd29ya2VyX2Jyb2tlciBpbiBhIG11Y2gg
c2ltcGxlciBmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDUxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgYSB3aG9sZXNhbGUgcmVwbGFjZW1lbnQgb2YgdGhlIE1lc3NhZ2VQb29sKCkg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgYW5kIHRoZSBvdGhlciBjbGFzc2VzIGluIG1hbmFnZXJf
d29ya2VyX2Jyb2tlci5weS4gQWxsIG9mIHRoZQorICAgICAgICBCcm9rZXJDb25uZWN0aW9uKiwg
QnJva2VyKiwgZXRjLiBjbGFzc2VzIGFyZSBnb25lLCBhbmQgdGhlcmUgYXJlIG5vdworICAgICAg
ICBqdXN0IGEgTWVzc2FnZVBvb2wgY2xhc3MgYW5kIGEgX1dvcmtlciBjbGFzcy4gSGFwcGluZXNz
IGVuc3Vlcy4KKyAKKyAgICAgICAgSSdtIHJlbW92aW5nIG1hbmFnZXJfd29ya2VyX2Jyb2tlcl91
bml0dGVzdC5weSBhcyB3ZWxsOyB3ZSBnZXQKKyAgICAgICAgbmVhcmx5IGNvbXBsZXRlIGNvdmVy
YWdlIGZyb20gdGhlIGludGVncmF0aW9uIHRlc3RzLCBhbmQgd2lsbAorICAgICAgICBnZXQgbW9y
ZSBjb3ZlcmFnZSB3aGVuIHRlc3Qtd2Via2l0cHkgbW92ZXMgdG8gdXNlIHRoaXMgYXMgd2VsbCwK
KyAgICAgICAgc28gaGF2aW5nIHVuaXQgdGVzdHMgc2VlbXMgbGlrZSB1bm5lY2Vzc2FyeSBvdmVy
aGVhZC4gKHJ1bm5pbmcKKyAgICAgICAgY292ZXJhZ2UgbnVtYmVycyB3aXRoIHRlc3Qtd2Via2l0
cHkgc2hvd3MgdGhhdCBwcmV0dHkgbXVjaCB0aGUgb25seQorICAgICAgICB1bmNvdmVyZWQgbGlu
ZXMgYXJlIGxpbmVzIHRoYXQgYXJlIG9ubHkgcnVuIGluIHRoZSBjaGlsZCBwcm9jZXNzZXMsCisg
ICAgICAgIHdoaWNoIGNvdmVyYWdlIGRvZXNuJ3QgaGFuZGxlIGF0IHRoZSBtb21lbnQpLgorIAor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXJfd29ya2VyX2Jyb2tlci5weToKKyAgICAgICAgKF9NZXNzYWdlUG9vbC5fX2luaXRfXyk6Cisg
ICAgICAgIChfTWVzc2FnZVBvb2wucnVuKToKKyAgICAgICAgKF9NZXNzYWdlUG9vbC5fc3RhcnRf
d29ya2Vycyk6CisgICAgICAgIChfTWVzc2FnZVBvb2wpOgorICAgICAgICAoX01lc3NhZ2VQb29s
LndhaXQpOgorICAgICAgICAoX01lc3NhZ2VQb29sLl9jbG9zZSk6CisgICAgICAgIChfTWVzc2Fn
ZVBvb2wuX2hhbmRsZV9kb25lKToKKyAgICAgICAgKF9NZXNzYWdlUG9vbC5fY2FuX3BpY2tsZSk6
CisgICAgICAgIChfTWVzc2FnZVBvb2wuX2xvb3ApOgorICAgICAgICAoV29ya2VyRXhjZXB0aW9u
KToKKyAgICAgICAgKF9NZXNzYWdlLl9faW5pdF9fKToKKyAgICAgICAgKF9NZXNzYWdlLl9fcmVw
cl9fKToKKyAgICAgICAgKF9Xb3JrZXIpOgorICAgICAgICAoX1dvcmtlci5fX2luaXRfXyk6Cisg
ICAgICAgIChfV29ya2VyLnRlcm1pbmF0ZSk6CisgICAgICAgIChfV29ya2VyLl9jbG9zZSk6Cisg
ICAgICAgIChfV29ya2VyLnJ1bik6CisgICAgICAgIChfV29ya2VyLnBvc3QpOgorICAgICAgICAo
X1dvcmtlci55aWVsZF90b19jYWxsZXIpOgorICAgICAgICAoX1dvcmtlci5fcG9zdCk6CisgICAg
ICAgIChfV29ya2VyLl9yYWlzZSk6CisgICAgICAgIChfV29ya2VyLl9zZXRfdXBfbG9nZ2luZyk6
CisgICAgICAgIChfV29ya2VyTG9nSGFuZGxlci5fX2luaXRfXyk6CisgICAgICAgIChfV29ya2Vy
TG9nSGFuZGxlci5lbWl0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHk6IFJlbW92ZWQu
CisKIDIwMTItMDctMDMgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgbnJ3dDogYWRkIGEgTWVzc2FnZVBvb2wgYWJzdHJhY3Rpb24gdGhhdCB0aGUgbWFuYWdl
ciB3aWxsIGNhbGwgdG8gcmVwbGFjZSB0aGUgYnJva2VyCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9r
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyX3dvcmtlcl9icm9rZXIucHkKaW5kZXggNmZjMGViMjIwZTIxZWM1YTE4MjkzOTc1YmVh
ODM0NDQ1MjJmMjdmOC4uODdmYzZlNDM4N2U1NDI5ZDY4MTFiY2RmYzBiNmMzYjMwNmVmNjEzYiAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbWFuYWdlcl93b3JrZXJfYnJva2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlci5weQpAQCAtMzEs
OCArMzEsNiBAQAogaW1wb3J0IGNQaWNrbGUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgbXVsdGlw
cm9jZXNzaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCBvcwogaW1wb3J0IFF1ZXVlCiBpbXBv
cnQgc3lzCiBpbXBvcnQgdGltZQpAQCAtNDcsMTMgKzQ1LDYgQEAgZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMudmlld3MgaW1wb3J0IG1ldGVyZWRfc3RyZWFtCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCiAKIAotIwotIyBUb3BpYyBuYW1lcyBmb3IgTWFuYWdlciA8LT4gV29y
a2VyIG1lc3NhZ2luZwotIwotTUFOQUdFUl9UT1BJQyA9ICdtYW5hZ2VycycKLUFOWV9XT1JLRVJf
VE9QSUMgPSAnd29ya2VycycKLQotCiBkZWYgZ2V0KGNhbGxlciwgd29ya2VyX2ZhY3RvcnksIG51
bV93b3JrZXJzLCB3b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzPTAuMCwgaG9zdD1Ob25lKToKICAg
ICAiIiJSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGV4cG9zZXMgYSBydW4oKSBtZXRob2QgdGhhdCB0
YWtlcyBhIGxpc3Qgb2YgdGVzdCBzaGFyZHMgYW5kIHJ1bnMgdGhlbSBpbiBwYXJhbGxlbC4iIiIK
ICAgICByZXR1cm4gX01lc3NhZ2VQb29sKGNhbGxlciwgd29ya2VyX2ZhY3RvcnksIG51bV93b3Jr
ZXJzLCB3b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzLCBob3N0KQpAQCAtNjUsOSArNTYsMTcgQEAg
Y2xhc3MgX01lc3NhZ2VQb29sKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3dvcmtlcl9mYWN0b3J5
ID0gd29ya2VyX2ZhY3RvcnkKICAgICAgICAgc2VsZi5fbnVtX3dvcmtlcnMgPSBudW1fd29ya2Vy
cwogICAgICAgICBzZWxmLl93b3JrZXJfc3RhcnR1cF9kZWxheV9zZWNzID0gd29ya2VyX3N0YXJ0
dXBfZGVsYXlfc2VjcwotICAgICAgICBzZWxmLl93b3JrZXJfc3RhdGVzID0ge30KKyAgICAgICAg
c2VsZi5fd29ya2VycyA9IFtdCisgICAgICAgIHNlbGYuX3dvcmtlcnNfc3RvcHBlZCA9IHNldCgp
CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0Ci0gICAgICAgIHNlbGYubmFtZSA9ICdtYW5hZ2Vy
JworICAgICAgICBzZWxmLl9uYW1lID0gJ21hbmFnZXInCisgICAgICAgIHNlbGYuX3J1bm5pbmdf
aW5saW5lID0gKHNlbGYuX251bV93b3JrZXJzID09IDEpCisgICAgICAgIGlmIHNlbGYuX3J1bm5p
bmdfaW5saW5lOgorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fd29ya2VyID0gUXVldWUu
UXVldWUoKQorICAgICAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlciA9IFF1ZXVlLlF1
ZXVlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtl
ciA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190
b19tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKIAogICAgIGRlZiBfX2VudGVyX18o
c2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCkBAIC03Nyw2MyArNzYsNjUgQEAgY2xhc3MgX01l
c3NhZ2VQb29sKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIHJ1bihz
ZWxmLCBzaGFyZHMpOgotICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBfZ2V0X2Jyb2tlcihz
ZWxmLl9udW1fd29ya2Vycywgc2VsZiwgc2VsZi5fd29ya2VyX2ZhY3RvcnksIHNlbGYuX2hvc3Qp
Ci0gICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6
Ci0gICAgICAgICAgICB3b3JrZXJfY29ubmVjdGlvbiA9IG1hbmFnZXJfY29ubmVjdGlvbi5zdGFy
dF93b3JrZXIod29ya2VyX251bWJlcikKLSAgICAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IF9Xb3Jr
ZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3b3JrZXJfY29ubmVjdGlvbikKLSAgICAgICAgICAgIHNl
bGYuX3dvcmtlcl9zdGF0ZXNbd29ya2VyX2Nvbm5lY3Rpb24ubmFtZV0gPSB3b3JrZXJfc3RhdGUK
LSAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcykK
LQotICAgICAgICBtZXNzYWdlcyA9IGxpc3Qoc2hhcmRzKQotICAgICAgICBmb3IgbWVzc2FnZSBp
biBtZXNzYWdlczoKLSAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2Uo
Km1lc3NhZ2UpCisgICAgICAgICIiIlBvc3RzIGEgbGlzdCBvZiBtZXNzYWdlcyB0byB0aGUgcG9v
bCBhbmQgd2FpdHMgZm9yIHRoZW0gdG8gY29tcGxldGUuIiIiCisgICAgICAgIGZvciBtZXNzYWdl
IGluIHNoYXJkczoKKyAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlci5wdXQoX01l
c3NhZ2Uoc2VsZi5fbmFtZSwgbWVzc2FnZVswXSwgbWVzc2FnZVsxOl0sIGZyb21fdXNlcj1UcnVl
LCBsb2dzPSgpKSkKIAogICAgICAgICBmb3IgXyBpbiB4cmFuZ2Uoc2VsZi5fbnVtX3dvcmtlcnMp
OgotICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisg
ICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b193b3JrZXIucHV0KF9NZXNzYWdlKHNlbGYuX25h
bWUsICdzdG9wJywgbWVzc2FnZV9hcmdzPSgpLCBmcm9tX3VzZXI9RmFsc2UsIGxvZ3M9KCkpKQor
CisgICAgICAgIHNlbGYud2FpdCgpCiAKLSAgICAgICAgc2VsZi53YWl0KG1hbmFnZXJfY29ubmVj
dGlvbikKKyAgICBkZWYgX3N0YXJ0X3dvcmtlcnMoc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qg
c2VsZi5fd29ya2VycworICAgICAgICBzZWxmLl93b3JrZXJzX3N0b3BwZWQgPSBzZXQoKQorICAg
ICAgICBob3N0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9ydW5uaW5nX2lubGluZSBvciBzZWxm
Ll9jYW5fcGlja2xlKHNlbGYuX2hvc3QpOgorICAgICAgICAgICAgaG9zdCA9IHNlbGYuX2hvc3QK
IAotICAgIGRlZiB3YWl0KHNlbGYsIG1hbmFnZXJfY29ubmVjdGlvbik6CisgICAgICAgIGZvciB3
b3JrZXJfbnVtYmVyIGluIHhyYW5nZShzZWxmLl9udW1fd29ya2Vycyk6CisgICAgICAgICAgICB3
b3JrZXIgPSBfV29ya2VyKGhvc3QsIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXIsIHNlbGYuX21l
c3NhZ2VzX3RvX3dvcmtlciwgc2VsZi5fd29ya2VyX2ZhY3RvcnksIHdvcmtlcl9udW1iZXIpCisg
ICAgICAgICAgICBzZWxmLl93b3JrZXJzLmFwcGVuZCh3b3JrZXIpCisgICAgICAgICAgICB3b3Jr
ZXIucnVubmluZ19pbmxpbmUgPSBzZWxmLl9ydW5uaW5nX2lubGluZQorICAgICAgICAgICAgaWYg
d29ya2VyLnJ1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgICAgIHdvcmtlci5tYW5hZ2VyID0g
c2VsZgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQor
ICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dvcmtlcl9zdGFydHVwX2RlbGF5X3NlY3M6CisgICAg
ICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5fd29ya2VyX3N0YXJ0dXBfZGVsYXlfc2Vj
cykKKworICAgIGRlZiB3YWl0KHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGls
ZSBub3Qgc2VsZi5pc19kb25lKCk6Ci0gICAgICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9u
LnJ1bl9tZXNzYWdlX2xvb3AoZGVsYXlfc2Vjcz0xLjApCisgICAgICAgICAgICBzZWxmLl9zdGFy
dF93b3JrZXJzKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3J1bm5pbmdfaW5saW5lOgorICAgICAg
ICAgICAgICAgIHNlbGYuX3dvcmtlcnNbMF0ucnVuKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9s
b29wKGJsb2NrPUZhbHNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9sb29wKGJsb2NrPVRydWUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9j
bG9zZSgpCiAKLSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgd29ya2VyX3N0YXRlcyA9
IHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCkKLSAgICAgICAgcmV0dXJuIHdvcmtlcl9zdGF0
ZXMgYW5kIGFsbCh3b3JrZXJfc3RhdGUuZG9uZSBmb3Igd29ya2VyX3N0YXRlIGluIHdvcmtlcl9z
dGF0ZXMpCi0KICAgICBkZWYgX2Nsb3NlKHNlbGYpOgotICAgICAgICBmb3Igd29ya2VyX3N0YXRl
IGluIHNlbGYuX3dvcmtlcl9zdGF0ZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBpZiB3b3JrZXJf
c3RhdGUud29ya2VyX2Nvbm5lY3Rpb24uaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICB3b3Jr
ZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rpb24uY2FuY2VsKCkKLSAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdXYWl0aW5nIGZvciB3b3JrZXIgJWQgdG8gZXhpdCcgJSB3b3JrZXJfc3RhdGUubnVt
YmVyKQotICAgICAgICAgICAgICAgIHdvcmtlcl9zdGF0ZS53b3JrZXJfY29ubmVjdGlvbi5qb2lu
KDUuMCkKLSAgICAgICAgICAgICAgICBpZiB3b3JrZXJfc3RhdGUud29ya2VyX2Nvbm5lY3Rpb24u
aXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignV29ya2VyICVkIGRp
ZCBub3QgZXhpdCBpbiB0aW1lLicgJSB3b3JrZXJfc3RhdGUubnVtYmVyKQotCi0gICAgZGVmIGhh
bmRsZV9kb25lKHNlbGYsIHNvdXJjZSwgbG9nX21lc3NhZ2VzPU5vbmUpOgotICAgICAgICB3b3Jr
ZXJfc3RhdGUgPSBzZWxmLl93b3JrZXJfc3RhdGVzW3NvdXJjZV0KLSAgICAgICAgd29ya2VyX3N0
YXRlLmRvbmUgPSBUcnVlCi0gICAgICAgIHNlbGYuX2xvZ19tZXNzYWdlcyhsb2dfbWVzc2FnZXMp
Ci0KLSAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNl
bGYuX2NhbGxlci5oYW5kbGUoJ3N0YXJ0ZWRfdGVzdCcsICphcmdzKQotCi0gICAgZGVmIGhhbmRs
ZV9maW5pc2hlZF90ZXN0KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fY2FsbGVyLmhhbmRs
ZSgnZmluaXNoZWRfdGVzdCcsICphcmdzKQotCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0
X2xpc3Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLl9jYWxsZXIuaGFuZGxlKCdmaW5pc2hl
ZF90ZXN0X2xpc3QnLCAqYXJncykKLQotICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsICph
cmdzKToKLSAgICAgICAgc2VsZi5faGFuZGxlX3dvcmtlcl9leGNlcHRpb24oKmFyZ3MpCisgICAg
ICAgIGZvciB3b3JrZXIgaW4gc2VsZi5fd29ya2VyczoKKyAgICAgICAgICAgIGlmIHdvcmtlci5p
c19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKQorICAgICAgICAg
ICAgICAgIHdvcmtlci5qb2luKCkKKyAgICAgICAgc2VsZi5fd29ya2VycyA9IFtdCisgICAgICAg
IGlmIG5vdCBzZWxmLl9ydW5uaW5nX2lubGluZToKKyAgICAgICAgICAgIGlmIHNlbGYuX21lc3Nh
Z2VzX3RvX3dvcmtlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9tZXNzYWdlc190b193b3JrZXIu
Y2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX21lc3NhZ2VzX3RvX3dvcmtlciA9IE5vbmUK
KyAgICAgICAgICAgIGlmIHNlbGYuX21lc3NhZ2VzX3RvX21hbmFnZXI6CisgICAgICAgICAgICAg
ICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdlci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fbWVzc2FnZXNfdG9fbWFuYWdlciA9IE5vbmUKIAogICAgIGRlZiBfbG9nX21lc3NhZ2VzKHNl
bGYsIG1lc3NhZ2VzKToKICAgICAgICAgZm9yIG1lc3NhZ2UgaW4gbWVzc2FnZXM6CiAgICAgICAg
ICAgICBsb2dnaW5nLnJvb3QuaGFuZGxlKG1lc3NhZ2UpCiAKKyAgICBkZWYgX2hhbmRsZV9kb25l
KHNlbGYsIHNvdXJjZSk6CisgICAgICAgIHNlbGYuX3dvcmtlcnNfc3RvcHBlZC5hZGQoc291cmNl
KQorCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfaGFuZGxlX3dvcmtlcl9leGNlcHRpb24o
c291cmNlLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0aW9uX3ZhbHVlLCBzdGFjayk6CiAgICAgICAg
IGlmIGV4Y2VwdGlvbl90eXBlID09IEtleWJvYXJkSW50ZXJydXB0OgpAQCAtMTQyLDM4ICsxNDMs
MjggQEAgY2xhc3MgX01lc3NhZ2VQb29sKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgc291
cmNlLCBleGNlcHRpb25fdmFsdWUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZXhjZXB0aW9uX3Zh
bHVlKSkpCiAgICAgICAgIHJhaXNlIFdvcmtlckV4Y2VwdGlvbihzdHIoZXhjZXB0aW9uX3ZhbHVl
KSkKIAorICAgIGRlZiBfY2FuX3BpY2tsZShzZWxmLCBob3N0KToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgY1BpY2tsZS5kdW1wcyhob3N0KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAg
ICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi1jbGFz
cyBfV29ya2VyU3RhdGUob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtYmVyLCB3
b3JrZXJfY29ubmVjdGlvbik6Ci0gICAgICAgIHNlbGYud29ya2VyX2Nvbm5lY3Rpb24gPSB3b3Jr
ZXJfY29ubmVjdGlvbgotICAgICAgICBzZWxmLm51bWJlciA9IG51bWJlcgotICAgICAgICBzZWxm
LmRvbmUgPSBGYWxzZQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4g
Il9Xb3JrZXJTdGF0ZSgiICsgc3RyKHNlbGYuX19kaWN0X18pICsgIikiCi0KLQotZGVmIF9nZXRf
YnJva2VyKG1heF93b3JrZXJzLCBjbGllbnQsIHdvcmtlcl9mYWN0b3J5LCBob3N0PU5vbmUpOgot
ICAgICIiIlJldHVybiBhIGNvbm5lY3Rpb24gdG8gYSBtYW5hZ2VyL3dvcmtlciBtZXNzYWdlX2Jy
b2tlcgotCi0gICAgQXJnczoKLSAgICAgICAgbWF4X3dvcmtlcnMgLSBtYXggIyBvZiB3b3JrZXJz
IHRvIHJ1biBjb25jdXJyZW50bHkuCi0gICAgICAgIGNsaWVudCAtIEJyb2tlckNsaWVudCBpbXBs
ZW1lbnRhdGlvbiB0byBkaXNwYXRjaAotICAgICAgICAgICAgcmVwbGllcyB0by4KLSAgICAgICAg
d29ya2VyX2ZhY3Rvcnk6IGZhY3RvcnkgbWV0aG9kIGZvciBjcmVhdGluZyBvYmplY3RzIHRoYXQg
aW1wbGVtZW50IHRoZSBXb3JrZXIgaW50ZXJmYWNlLgotICAgICAgICBob3N0OiBvcHRpb25hbCBw
aWNrbGFibGUgaG9zdCBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHdvcmtlcnMgZm9yIHRl
c3RpbmcuCi0gICAgUmV0dXJuczoKLSAgICAgICAgQSBoYW5kbGUgdG8gYW4gb2JqZWN0IHRoYXQg
d2lsbCB0YWxrIHRvIGEgbWVzc2FnZSBicm9rZXIgY29uZmlndXJlZAotICAgICAgICBmb3IgdGhl
IG5vcm1hbCBtYW5hZ2VyL3dvcmtlciBjb21tdW5pY2F0aW9uLiIiIgotICAgIGlmIG1heF93b3Jr
ZXJzID09IDE6Ci0gICAgICAgIHF1ZXVlX2NsYXNzID0gUXVldWUuUXVldWUKLSAgICAgICAgbWFu
YWdlcl9jbGFzcyA9IF9JbmxpbmVNYW5hZ2VyCi0gICAgZWxzZToKLSAgICAgICAgcXVldWVfY2xh
c3MgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUKLSAgICAgICAgbWFuYWdlcl9jbGFzcyA9IF9NdWx0
aVByb2Nlc3NNYW5hZ2VyCi0KLSAgICBicm9rZXIgPSBfQnJva2VyKHF1ZXVlX2NsYXNzKQotICAg
IHJldHVybiBtYW5hZ2VyX2NsYXNzKGJyb2tlciwgY2xpZW50LCB3b3JrZXJfZmFjdG9yeSwgaG9z
dCkKKyAgICBkZWYgX2xvb3Aoc2VsZiwgYmxvY2spOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLl93b3JrZXJzX3N0b3Bw
ZWQpID09IGxlbihzZWxmLl93b3JrZXJzKToKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBG
YWxzZQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9tZXNzYWdlc190b19tYW5hZ2Vy
LmdldChibG9jaykKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2dfbWVzc2FnZXMobWVzc2FnZS5s
b2dzKQorICAgICAgICAgICAgICAgIGlmIG1lc3NhZ2UuZnJvbV91c2VyOgorICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9jYWxsZXIuaGFuZGxlKG1lc3NhZ2UubmFtZSwgbWVzc2FnZS5zcmMsICpt
ZXNzYWdlLmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAg
ICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbWVzc2FnZS5uYW1lKQorICAg
ICAgICAgICAgICAgIGFzc2VydCBtZXRob2QsICdiYWQgbWVzc2FnZSAlcycgJSByZXByKG1lc3Nh
Z2UpCisgICAgICAgICAgICAgICAgbWV0aG9kKG1lc3NhZ2Uuc3JjLCAqbWVzc2FnZS5hcmdzKQor
ICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6CisgICAgICAgICAgICBwYXNzCiAKIAogY2xhc3Mg
V29ya2VyRXhjZXB0aW9uKEV4Y2VwdGlvbik6CkBAIC0xODEsMzk0ICsxNzIsMTI4IEBAIGNsYXNz
IFdvcmtlckV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIHBhc3MKIAogCi1jbGFzcyBCcm9rZXJD
bGllbnQob2JqZWN0KToKLSAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIC8gaW50ZXJmYWNlIHRo
YXQgYWxsIG1lc3NhZ2UgYnJva2VyIGNsaWVudHMgbXVzdAotICAgIGltcGxlbWVudC4gSW4gYWRk
aXRpb24gdG8gdGhlIG1ldGhvZHMgYmVsb3csIGJ5IGNvbnZlbnRpb24gY2xpZW50cwotICAgIGlt
cGxlbWVudCByb3V0aW5lcyBvZiB0aGUgc2lnbmF0dXJlIHR5cGUKLQotICAgICAgICBoYW5kbGVf
TUVTU0FHRV9OQU1FKHNlbGYsIHNyYywgLi4uKToKLQotICAgIHdoZXJlIE1FU1NBR0VfTkFNRSBt
YXRjaGVzIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHBvc3RfbWVzc2FnZSgpLCBhbmQKLSAgICBzcmMg
aW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBzZW5kZXIuIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5z
IHZhbHVlcyBpbgotICAgIHRoZSBtZXNzYWdlIGJvZHksIHRob3NlIHdpbGwgYmUgcHJvdmlkZWQg
YXMgb3B0cGFyYW1zLiIiIgotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgICIiIkNh
bGxlZCBmcm9tIGluc2lkZSBydW5fbWVzc2FnZV9sb29wKCkgdG8gaW5kaWNhdGUgd2hldGhlciB0
byBleGl0LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYg
bmFtZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhl
IGNsaWVudC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0KLWNsYXNz
IF9Ccm9rZXIob2JqZWN0KToKLSAgICAiIiJCcm9rZXJzIHByb3ZpZGUgdGhlIGJhc2ljIG1vZGVs
IG9mIGEgc2V0IG9mIHRvcGljcy4gQ2xpZW50cyBjYW4gcG9zdCBhCi0gICAgbWVzc2FnZSB0byBh
bnkgdG9waWMgdXNpbmcgcG9zdF9tZXNzYWdlKCksIGFuZCBjYW4gcHJvY2VzcyBtZXNzYWdlcyBv
biBvbmUKLSAgICB0b3BpYyBhdCBhIHRpbWUgdXNpbmcgcnVuX21lc3NhZ2VfbG9vcCgpLiIiIgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlX21ha2VyKToKLSAgICAgICAgIiIiQXJnczoK
LSAgICAgICAgICAgIHF1ZXVlX21ha2VyOiBhIGZhY3RvcnkgbWV0aG9kIHRoYXQgcmV0dXJucyBv
YmplY3RzIGltcGxlbWVudGluZyBhCi0gICAgICAgICAgICAgICAgUXVldWUgaW50ZXJmYWNlIChw
dXQoKS9nZXQoKSkuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9xdWV1ZV9tYWtlciA9IHF1
ZXVlX21ha2VyCi0gICAgICAgIHNlbGYuX3RvcGljcyA9IHt9Ci0KLSAgICBkZWYgX19kZWxfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5jbGVhbnVwKCkKLQotICAgIGRlZiBjbGVhbnVwKHNlbGYpOgot
ICAgICAgICBmb3IgcXVldWUgaW4gc2VsZi5fdG9waWNzLnZhbHVlcygpOgotICAgICAgICAgICAg
aWYgaGFzYXR0cihxdWV1ZSwgJ2Nsb3NlJyk6Ci0gICAgICAgICAgICAgICAgcXVldWUuY2xvc2Uo
KQotICAgICAgICBzZWxmLl90b3BpY3MgPSB7fQotCi0gICAgZGVmIGFkZF90b3BpYyhzZWxmLCB0
b3BpY19uYW1lKToKLSAgICAgICAgaWYgdG9waWNfbmFtZSBub3QgaW4gc2VsZi5fdG9waWNzOgot
ICAgICAgICAgICAgc2VsZi5fdG9waWNzW3RvcGljX25hbWVdID0gc2VsZi5fcXVldWVfbWFrZXIo
KQotCi0gICAgZGVmIF9nZXRfcXVldWVfZm9yX3RvcGljKHNlbGYsIHRvcGljX25hbWUpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fdG9waWNzW3RvcGljX25hbWVdCi0KLSAgICBkZWYgcG9zdF9tZXNz
YWdlKHNlbGYsIGNsaWVudCwgdG9waWNfbmFtZSwgbWVzc2FnZV9uYW1lLCAqbWVzc2FnZV9hcmdz
KToKLSAgICAgICAgIiIiUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIGFwcHJvcHJpYXRlIHRvcGljIG5h
bWUuCi0KLSAgICAgICAgTWVzc2FnZXMgaGF2ZSBhIG5hbWUgYW5kIGEgdHVwbGUgb2Ygb3B0aW9u
YWwgYXJndW1lbnRzLiBCb3RoIG11c3QgYmUgcGlja2xhYmxlLiIiIgotICAgICAgICBtZXNzYWdl
ID0gX01lc3NhZ2UoY2xpZW50Lm5hbWUsIHRvcGljX25hbWUsIG1lc3NhZ2VfbmFtZSwgbWVzc2Fn
ZV9hcmdzKQotICAgICAgICBxdWV1ZSA9IHNlbGYuX2dldF9xdWV1ZV9mb3JfdG9waWModG9waWNf
bmFtZSkKLSAgICAgICAgcXVldWUucHV0KF9NZXNzYWdlLmR1bXBzKG1lc3NhZ2UpKQotCi0gICAg
ZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50LCBkZWxheV9zZWNz
PU5vbmUpOgotICAgICAgICAiIiJMb29wIHByb2Nlc3NpbmcgbWVzc2FnZXMgdW50aWwgY2xpZW50
LmlzX2RvbmUoKSBvciBkZWxheSBwYXNzZXMuCi0KLSAgICAgICAgVG8gcnVuIGluZGVmaW5pdGVs
eSwgc2V0IGRlbGF5X3NlY3MgdG8gTm9uZS4iIiIKLSAgICAgICAgYXNzZXJ0IGRlbGF5X3NlY3Mg
aXMgTm9uZSBvciBkZWxheV9zZWNzID4gMAotICAgICAgICBzZWxmLl9ydW5fbG9vcCh0b3BpY19u
YW1lLCBjbGllbnQsIGJsb2NrPVRydWUsIGRlbGF5X3NlY3M9ZGVsYXlfc2VjcykKLQotICAgIGRl
ZiBydW5fYWxsX3BlbmRpbmcoc2VsZiwgdG9waWNfbmFtZSwgY2xpZW50KToKLSAgICAgICAgIiIi
UHJvY2VzcyBtZXNzYWdlcyB1bnRpbCBjbGllbnQuaXNfZG9uZSgpIG9yIGNhbGxlciB3b3VsZCBi
bG9jay4iIiIKLSAgICAgICAgc2VsZi5fcnVuX2xvb3AodG9waWNfbmFtZSwgY2xpZW50LCBibG9j
az1GYWxzZSwgZGVsYXlfc2Vjcz1Ob25lKQotCi0gICAgZGVmIF9ydW5fbG9vcChzZWxmLCB0b3Bp
Y19uYW1lLCBjbGllbnQsIGJsb2NrLCBkZWxheV9zZWNzKToKLSAgICAgICAgcXVldWUgPSBzZWxm
Ll9nZXRfcXVldWVfZm9yX3RvcGljKHRvcGljX25hbWUpCi0gICAgICAgIHdoaWxlIG5vdCBjbGll
bnQuaXNfZG9uZSgpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMgPSBxdWV1
ZS5nZXQoYmxvY2ssIGRlbGF5X3NlY3MpCi0gICAgICAgICAgICBleGNlcHQgUXVldWUuRW1wdHk6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBtc2cgPSBfTWVzc2FnZS5sb2Fk
cyhzKQotICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2hfbWVzc2FnZShtc2csIGNsaWVudCkKLQot
ICAgIGRlZiBfZGlzcGF0Y2hfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBjbGllbnQpOgotICAgICAg
ICBpZiBub3QgaGFzYXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3NhZ2UubmFtZSk6Ci0gICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgICAgIiVzOiByZWNlaXZlZCBt
ZXNzYWdlICclcycgaXQgY291bGRuJ3QgaGFuZGxlIiAlCi0gICAgICAgICAgICAgICAoY2xpZW50
Lm5hbWUsIG1lc3NhZ2UubmFtZSkpCi0gICAgICAgIG9wdGFyZ3MgPSBtZXNzYWdlLmFyZ3MKLSAg
ICAgICAgbWVzc2FnZV9oYW5kbGVyID0gZ2V0YXR0cihjbGllbnQsICdoYW5kbGVfJyArIG1lc3Nh
Z2UubmFtZSkKLSAgICAgICAgbWVzc2FnZV9oYW5kbGVyKG1lc3NhZ2Uuc3JjLCAqb3B0YXJncykK
LQotCiBjbGFzcyBfTWVzc2FnZShvYmplY3QpOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYg
bG9hZHMoc3RyaW5nX3ZhbHVlKToKLSAgICAgICAgb2JqID0gY1BpY2tsZS5sb2FkcyhzdHJpbmdf
dmFsdWUpCi0gICAgICAgIGFzc2VydChpc2luc3RhbmNlKG9iaiwgX01lc3NhZ2UpKQotICAgICAg
ICByZXR1cm4gb2JqCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3JjLCB0b3BpY19uYW1lLCBt
ZXNzYWdlX25hbWUsIG1lc3NhZ2VfYXJncyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNyYywg
bWVzc2FnZV9uYW1lLCBtZXNzYWdlX2FyZ3MsIGZyb21fdXNlciwgbG9ncyk6CiAgICAgICAgIHNl
bGYuc3JjID0gc3JjCi0gICAgICAgIHNlbGYudG9waWNfbmFtZSA9IHRvcGljX25hbWUKICAgICAg
ICAgc2VsZi5uYW1lID0gbWVzc2FnZV9uYW1lCiAgICAgICAgIHNlbGYuYXJncyA9IG1lc3NhZ2Vf
YXJncwotCi0gICAgZGVmIGR1bXBzKHNlbGYpOgotICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1w
cyhzZWxmKQorICAgICAgICBzZWxmLmZyb21fdXNlciA9IGZyb21fdXNlcgorICAgICAgICBzZWxm
LmxvZ3MgPSBsb2dzCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAo
Il9NZXNzYWdlKGZyb209JyVzJywgdG9waWNfbmFtZT0nJXMnLCBtZXNzYWdlX25hbWU9JyVzJyki
ICUKLSAgICAgICAgICAgICAgICAoc2VsZi5zcmMsIHNlbGYudG9waWNfbmFtZSwgc2VsZi5uYW1l
KSkKLQotCi1jbGFzcyBfQnJva2VyQ29ubmVjdGlvbihvYmplY3QpOgotICAgICIiIl9Ccm9rZXJD
b25uZWN0aW9uIHByb3ZpZGVzIGEgY29ubmVjdGlvbi1vcmllbnRlZCBmYWNhZGUgb24gdG9wIG9m
IGEKLSAgICBCcm9rZXIsIHNvIHRoYXQgY2FsbGVycyBkb24ndCBoYXZlIHRvIHJlcGVhdGVkbHkg
cGFzcyB0aGUgc2FtZSB0b3BpYwotICAgIG5hbWVzIG92ZXIgYW5kIG92ZXIuIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHJ1bl90b3BpYywgcG9zdF90b3BpYyk6
Ci0gICAgICAgICIiIkNyZWF0ZSBhIF9Ccm9rZXJDb25uZWN0aW9uIG9uIHRvcCBvZiBhIF9Ccm9r
ZXIuIE5vdGUgdGhhdCB0aGUgX0Jyb2tlcgotICAgICAgICBpcyBwYXNzZWQgaW4gcmF0aGVyIHRo
YW4gY3JlYXRlZCBzbyB0aGF0IGEgc2luZ2xlIF9Ccm9rZXIgY2FuIGJlIHVzZWQKLSAgICAgICAg
YnkgbXVsdGlwbGUgX0Jyb2tlckNvbm5lY3Rpb25zLiIiIgotICAgICAgICBzZWxmLl9icm9rZXIg
PSBicm9rZXIKLSAgICAgICAgc2VsZi5fY2xpZW50ID0gY2xpZW50Ci0gICAgICAgIHNlbGYuX3Bv
c3RfdG9waWMgPSBwb3N0X3RvcGljCi0gICAgICAgIHNlbGYuX3J1bl90b3BpYyA9IHJ1bl90b3Bp
YwotICAgICAgICBicm9rZXIuYWRkX3RvcGljKHJ1bl90b3BpYykKLSAgICAgICAgYnJva2VyLmFk
ZF90b3BpYyhwb3N0X3RvcGljKQotCi0gICAgZGVmIGNsZWFudXAoc2VsZik6Ci0gICAgICAgIHNl
bGYuX2Jyb2tlci5jbGVhbnVwKCkKLSAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQotCi0gICAg
ZGVmIHJ1bl9tZXNzYWdlX2xvb3Aoc2VsZiwgZGVsYXlfc2Vjcz1Ob25lKToKLSAgICAgICAgc2Vs
Zi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3Aoc2VsZi5fcnVuX3RvcGljLCBzZWxmLl9jbGllbnQs
IGRlbGF5X3NlY3MpCi0KLSAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2VfbmFtZSwg
Km1lc3NhZ2VfYXJncyk6Ci0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2Uoc2VsZi5f
Y2xpZW50LCBzZWxmLl9wb3N0X3RvcGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2VfbmFtZSwgKm1lc3NhZ2VfYXJncykKLQotICAgIGRlZiByYWlzZV9leGNlcHRp
b24oc2VsZiwgZXhjX2luZm8pOgotICAgICAgICAjIFNpbmNlIHRyYWNlYmFja3MgYXJlbid0IHBp
Y2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFjdGVkIHN0YWNrIGluc3RlYWQsCi0gICAgICAgICMgYnV0
IGF0IGxlYXN0IGxvZyB0aGUgZnVsbCB0cmFjZWJhY2suCi0gICAgICAgIGV4Y2VwdGlvbl90eXBl
LCBleGNlcHRpb25fdmFsdWUsIGV4Y2VwdGlvbl90cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQot
ICAgICAgICBzdGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZXJyb3IsIGV4Y2VwdGlvbl90
cmFjZWJhY2spCi0gICAgICAgIHN0YWNrID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIoZXhjZXB0aW9u
X3RyYWNlYmFjaykKLSAgICAgICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZShzZWxmLl9jbGll
bnQsIHNlbGYuX3Bvc3RfdG9waWMsICdleGNlcHRpb24nLCBleGNlcHRpb25fdHlwZSwgZXhjZXB0
aW9uX3ZhbHVlLCBzdGFjaykKKyAgICAgICAgcmV0dXJuICdfTWVzc2FnZShzcmM9JXMsIG5hbWU9
JXMsIGFyZ3M9JXMsIGZyb21fdXNlcj0lcywgbG9ncz0lcyknICUgKHNlbGYuc3JjLCBzZWxmLm5h
bWUsIHNlbGYuYXJncywgc2VsZi5mcm9tX3VzZXIsIHNlbGYubG9ncykKIAogCi1jbGFzcyBBYnN0
cmFjdFdvcmtlcihCcm9rZXJDbGllbnQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJf
Y29ubmVjdGlvbiwgd29ya2VyX251bWJlcik6Ci0gICAgICAgIEJyb2tlckNsaWVudC5fX2luaXRf
XyhzZWxmKQotICAgICAgICBzZWxmLndvcmtlciA9IE5vbmUKLSAgICAgICAgc2VsZi5fd29ya2Vy
X2Nvbm5lY3Rpb24gPSB3b3JrZXJfY29ubmVjdGlvbgorY2xhc3MgX1dvcmtlcihtdWx0aXByb2Nl
c3NpbmcuUHJvY2Vzcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIG1lc3NhZ2VzX3Rv
X21hbmFnZXIsIG1lc3NhZ2VzX3RvX3dvcmtlciwgd29ya2VyX2ZhY3RvcnksIHdvcmtlcl9udW1i
ZXIpOgorICAgICAgICBzdXBlcihfV29ya2VyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNl
bGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi53b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJl
cgogICAgICAgICBzZWxmLm5hbWUgPSAnd29ya2VyLyVkJyAlIHdvcmtlcl9udW1iZXIKLSAgICAg
ICAgc2VsZi5fZG9uZSA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2NhbmNlbGVkID0gRmFsc2UKLSAg
ICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdHBhcnNlLlZhbHVlcyh7J3ZlcmJvc2UnOiBGYWxzZX0p
Ci0gICAgICAgIHNlbGYuaG9zdCA9IE5vbmUKKyAgICAgICAgc2VsZi5sb2dfbWVzc2FnZXMgPSBb
XQorICAgICAgICBzZWxmLm1hbmFnZXIgPSBOb25lCisgICAgICAgIHNlbGYucnVubmluZ19pbmxp
bmUgPSBOb25lCiAKLSAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2RvbmUgb3Igc2VsZi5fY2FuY2VsZWQKKyAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fbWFuYWdl
ciA9IG1lc3NhZ2VzX3RvX21hbmFnZXIKKyAgICAgICAgc2VsZi5fbWVzc2FnZXNfdG9fd29ya2Vy
ID0gbWVzc2FnZXNfdG9fd29ya2VyCisgICAgICAgIHNlbGYuX3dvcmtlciA9IHdvcmtlcl9mYWN0
b3J5KHNlbGYpCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9n
X2hhbmRsZXIgPSBOb25lCiAKLSAgICBkZWYgc3RvcF9oYW5kbGluZ19tZXNzYWdlcyhzZWxmKToK
LSAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLl93b3JrZXI6CisgICAgICAgICAgICBzZWxmLl93b3JrZXIuc3RvcCgpCisg
ICAgICAgICAgICBzZWxmLl93b3JrZXIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUo
KToKKyAgICAgICAgICAgIHN1cGVyKF9Xb3JrZXIsIHNlbGYpLnRlcm1pbmF0ZSgpCiAKLSAgICBk
ZWYgcnVuKHNlbGYsIGhvc3QpOgotICAgICAgICAiIiJDYWxsYmFjayBmb3IgdGhlIHdvcmtlciB0
byBzdGFydCBleGVjdXRpbmcuIFR5cGljYWxseSBkb2VzIGFueQotICAgICAgICByZW1haW5pbmcg
aW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gY2FsbHMgYnJva2VyX2Nvbm5lY3Rpb24ucnVuX21lc3Nh
Z2VfbG9vcCgpLiIiIgotICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKLSAgICAgICAgc2VsZi5o
b3N0ID0gaG9zdAorICAgIGRlZiBfY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2xvZ19o
YW5kbGVyIGFuZCBzZWxmLl9sb2dnZXI6CisgICAgICAgICAgICBzZWxmLl9sb2dnZXIucmVtb3Zl
SGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKKyAgICAgICAgc2VsZi5fbG9nX2hhbmRsZXIgPSBO
b25lCisgICAgICAgIHNlbGYuX2xvZ2dlciA9IE5vbmUKIAotICAgICAgICBzZWxmLndvcmtlci5z
dGFydCgpCi0gICAgICAgIF9sb2cuZGVidWcoJyVzIHN0YXJ0aW5nJyAlIHNlbGYubmFtZSkKKyAg
ICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5ob3N0OgorICAgICAgICAgICAg
c2VsZi5ob3N0ID0gSG9zdCgpCisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmdfaW5saW5lOgor
ICAgICAgICAgICAgc2VsZi5fc2V0X3VwX2xvZ2dpbmcoKQorCisgICAgICAgIHdvcmtlciA9IHNl
bGYuX3dvcmtlcgorICAgICAgICBleGNlcHRpb25fbXNnID0gIiIKKyAgICAgICAgX2xvZy5kZWJ1
ZygiJXMgc3RhcnRpbmciICUgc2VsZi5uYW1lKQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAg
IHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAgICAgICAg
aWYgbm90IHNlbGYuaXNfZG9uZSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVy
cm9yKCIlczogcmFuIG91dCBvZiBtZXNzYWdlcyBpbiB3b3JrZXIgcXVldWUuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5uYW1lKQotICAgICAgICBleGNlcHQg
S2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorICAgICAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5fbWVzc2FnZXNf
dG9fd29ya2VyLmdldCgpCisgICAgICAgICAgICAgICAgaWYgbWVzc2FnZS5mcm9tX3VzZXI6Cisg
ICAgICAgICAgICAgICAgICAgIHdvcmtlci5oYW5kbGUobWVzc2FnZS5uYW1lLCBtZXNzYWdlLnNy
YywgKm1lc3NhZ2UuYXJncykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi55aWVsZF90b19jYWxs
ZXIoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBt
ZXNzYWdlLm5hbWUgPT0gJ3N0b3AnLCAnYmFkIG1lc3NhZ2UgJXMnICUgcmVwcihtZXNzYWdlKQor
ICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToK
KyAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgJyVzOiByYW4gb3V0IG9mIG1lc3NhZ2VzIGluIHdv
cmtlciBxdWV1ZS4nICUgc2VsZi5uYW1lCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVw
dCwgZToKICAgICAgICAgICAgIGV4Y2VwdGlvbl9tc2cgPSAiLCBpbnRlcnJ1cHRlZCIKLSAgICAg
ICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uLnJhaXNlX2V4Y2VwdGlvbihzeXMuZXhjX2lu
Zm8oKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgZXhjZXB0aW9uX21zZyA9ICIsIGV4
Y2VwdGlvbiByYWlzZWQiCi0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5yYWlz
ZV9leGNlcHRpb24oc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ydW5u
aW5nX2lubGluZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3dvcmtlciBleGNlcHRp
b24nKQorICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlKHN5cy5leGNfaW5mbygpKQorICAgICAg
ICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGV4
Y2VwdGlvbl9tc2cgPSAiLCBleGNlcHRpb24gcmFpc2VkOiAlcyIgJSBzdHIoZSkKKyAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLnJ1bm5pbmdfaW5saW5lOgorICAgICAgICAgICAgICAgIHNlbGYuX3Jh
aXNlKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZmluYWxseToK
LSAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGRvbmUgd2l0aCBtZXNzYWdlIGxvb3AlcyIgJSAo
c2VsZi5uYW1lLCBleGNlcHRpb25fbXNnKSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIGV4
aXRpbmclcyIgJSAoc2VsZi5uYW1lLCBleGNlcHRpb25fbXNnKSkKICAgICAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICAgICBzZWxmLndvcmtlci5zdG9wKCkKKyAgICAgICAgICAgICAgICB3b3Jr
ZXIuc3RvcCgpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICMgTWFrZSBz
dXJlIHdlIHBvc3QgYSBkb25lIHNvIHRoYXQgd2UgY2FuIGZsdXNoIHRoZSBsb2cgbWVzc2FnZXMK
LSAgICAgICAgICAgICAgICAjIGFuZCBjbGVhbiB1cCBwcm9wZXJseSBldmVuIGlmIHdlIHJhaXNl
IGFuIGV4Y2VwdGlvbiBpbiB3b3JrZXIuY2xlYW51cCgpLgotICAgICAgICAgICAgICAgIHNlbGYu
X3dvcmtlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgnZG9uZScpCi0KLSAgICBkZWYgaGFuZGxl
X3N0b3Aoc2VsZiwgc291cmNlKToKLSAgICAgICAgc2VsZi5fZG9uZSA9IFRydWUKLQotICAgIGRl
ZiBoYW5kbGVfdGVzdF9saXN0KHNlbGYsIHNvdXJjZSwgbGlzdF9uYW1lLCB0ZXN0X2xpc3QpOgot
ICAgICAgICBzZWxmLndvcmtlci5oYW5kbGUoJ3Rlc3RfbGlzdCcsIHNvdXJjZSwgbGlzdF9uYW1l
LCB0ZXN0X2xpc3QpCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zdChuYW1lPSdkb25lJywgYXJn
cz0oKSwgZnJvbV91c2VyPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5fY2xvc2UoKQogCi0gICAg
ZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gcG9zc2libGUgdG8gaW5k
aWNhdGUgdG8gdGhlIHdvcmtlciB0byBzdG9wIHByb2Nlc3NpbmcKLSAgICAgICAgbWVzc2FnZXMg
YW5kIHNodXQgZG93bi4gTm90ZSB0aGF0IHdvcmtlcnMgbWF5IGJlIHN0b3BwZWQgd2l0aG91dCB0
aGlzCi0gICAgICAgIG1ldGhvZCBiZWluZyBjYWxsZWQsIHNvIGNsaWVudHMgc2hvdWxkIG5vdCBy
ZWx5IHNvbGVseSBvbiB0aGlzLiIiIgotICAgICAgICBzZWxmLl9jYW5jZWxlZCA9IFRydWUKKyAg
ICBkZWYgcG9zdChzZWxmLCBuYW1lLCAqYXJncyk6CisgICAgICAgIHNlbGYuX3Bvc3QobmFtZSwg
YXJncywgZnJvbV91c2VyPVRydWUpCiAKICAgICBkZWYgeWllbGRfdG9fY2FsbGVyKHNlbGYpOgot
ICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi55aWVsZF90b19icm9rZXIoKQotCi0gICAg
ZGVmIHBvc3Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5w
b3N0X21lc3NhZ2UoKmFyZ3MpCi0KLQotY2xhc3MgX01hbmFnZXJDb25uZWN0aW9uKF9Ccm9rZXJD
b25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtl
cl9mYWN0b3J5LCBob3N0KToKLSAgICAgICAgX0Jyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2Vs
ZiwgYnJva2VyLCBjbGllbnQsIE1BTkFHRVJfVE9QSUMsIEFOWV9XT1JLRVJfVE9QSUMpCi0gICAg
ICAgIHNlbGYuX3dvcmtlcl9mYWN0b3J5ID0gd29ya2VyX2ZhY3RvcnkKLSAgICAgICAgc2VsZi5f
aG9zdCA9IGhvc3QKLQotICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6
Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotCi1jbGFzcyBfSW5saW5lTWFu
YWdlcihfTWFuYWdlckNvbm5lY3Rpb24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBicm9rZXIs
IGNsaWVudCwgd29ya2VyX2ZhY3RvcnksIGhvc3QpOgotICAgICAgICBfTWFuYWdlckNvbm5lY3Rp
b24uX19pbml0X18oc2VsZiwgYnJva2VyLCBjbGllbnQsIHdvcmtlcl9mYWN0b3J5LCBob3N0KQot
ICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyID0gTm9uZQotCi0gICAgZGVmIHN0YXJ0X3dvcmtl
cihzZWxmLCB3b3JrZXJfbnVtYmVyKToKLSAgICAgICAgaG9zdCA9IHNlbGYuX2hvc3QKLSAgICAg
ICAgc2VsZi5faW5saW5lX3dvcmtlciA9IF9JbmxpbmVXb3JrZXJDb25uZWN0aW9uKGhvc3QsIHNl
bGYuX2Jyb2tlciwgc2VsZi5fY2xpZW50LCBzZWxmLl93b3JrZXJfZmFjdG9yeSwgd29ya2VyX251
bWJlcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2lubGluZV93b3JrZXIKLQotICAgIGRlZiBydW5f
bWVzc2FnZV9sb29wKHNlbGYsIGRlbGF5X3NlY3M9Tm9uZSk6Ci0gICAgICAgICMgTm90ZSB0aGF0
IGRlbGF5X3NlY3MgaXMgaWdub3JlZCBpbiB0aGlzIGNhc2Ugc2luY2Ugd2UgY2FuJ3QgZWFzaWx5
Ci0gICAgICAgICMgaW1wbGVtZW50IGl0LgotICAgICAgICBzZWxmLl9pbmxpbmVfd29ya2VyLnJ1
bigpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5ydW5fYWxsX3BlbmRpbmcoTUFOQUdFUl9UT1BJQywg
c2VsZi5fY2xpZW50KQorICAgICAgICBpZiBzZWxmLnJ1bm5pbmdfaW5saW5lOgorICAgICAgICAg
ICAgc2VsZi5tYW5hZ2VyLl9sb29wKGJsb2NrPUZhbHNlKQogCisgICAgZGVmIF9wb3N0KHNlbGYs
IG5hbWUsIGFyZ3MsIGZyb21fdXNlcik6CisgICAgICAgIGxvZ19tZXNzYWdlcyA9IHNlbGYubG9n
X21lc3NhZ2VzCisgICAgICAgIHNlbGYubG9nX21lc3NhZ2VzID0gW10KKyAgICAgICAgc2VsZi5f
bWVzc2FnZXNfdG9fbWFuYWdlci5wdXQoX01lc3NhZ2Uoc2VsZi5uYW1lLCBuYW1lLCBhcmdzLCBm
cm9tX3VzZXIsIGxvZ19tZXNzYWdlcykpCiAKLWNsYXNzIF9NdWx0aVByb2Nlc3NNYW5hZ2VyKF9N
YW5hZ2VyQ29ubmVjdGlvbik6Ci0gICAgZGVmIF9jYW5fcGlja2xlX2hvc3Qoc2VsZik6Ci0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIGNQaWNrbGUuZHVtcHMoc2VsZi5faG9zdCkKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgIGRlZiBzdGFydF93b3JrZXIoc2VsZiwgd29ya2VyX251bWJlcik6
Ci0gICAgICAgIGhvc3QgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX2Nhbl9waWNrbGVfaG9zdCgp
OgotICAgICAgICAgICAgaG9zdCA9IHNlbGYuX2hvc3QKLSAgICAgICAgd29ya2VyX2Nvbm5lY3Rp
b24gPSBfTXVsdGlQcm9jZXNzV29ya2VyQ29ubmVjdGlvbihob3N0LCBzZWxmLl9icm9rZXIsIHNl
bGYuX3dvcmtlcl9mYWN0b3J5LCB3b3JrZXJfbnVtYmVyKQotICAgICAgICB3b3JrZXJfY29ubmVj
dGlvbi5zdGFydCgpCi0gICAgICAgIHJldHVybiB3b3JrZXJfY29ubmVjdGlvbgotCi0KLWNsYXNz
IF9Xb3JrZXJDb25uZWN0aW9uKF9Ccm9rZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgYnJva2VyLCB3b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJlcik6Ci0gICAg
ICAgICMgRklYTUU6IGtlZXBpbmcgdHJhY2sgb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhl
IFdvcmtlckNvbm5lY3Rpb24sIHRoZSBBYnN0cmFjdFdvcmtlciwgYW5kIHRoZQotICAgICAgICAj
IGFjdHVhbCBXb3JrZXIgKGNyZWF0ZWQgYnkgd29ya2VyX2ZhY3RvcnkpIGlzIHZlcnkgY29uZnVz
aW5nLCBidXQgdGhpcyBhbGwgZ2V0cyBiZXR0ZXIgd2hlbgotICAgICAgICAjIF9Xb3JrZXJDb25u
ZWN0aW9uIGFuZCBBYnN0cmFjdFdvcmtlciBnZXQgbWVyZ2VkLgotICAgICAgICBzZWxmLl9jbGll
bnQgPSBBYnN0cmFjdFdvcmtlcihzZWxmLCB3b3JrZXJfbnVtYmVyKQotICAgICAgICBzZWxmLl93
b3JrZXIgPSB3b3JrZXJfZmFjdG9yeShzZWxmLl9jbGllbnQpCi0gICAgICAgIHNlbGYuX2NsaWVu
dC53b3JrZXIgPSBzZWxmLl93b3JrZXIKLSAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKLSAgICAg
ICAgc2VsZi5fbG9nX21lc3NhZ2VzID0gW10KLSAgICAgICAgc2VsZi5fbG9nZ2VyID0gTm9uZQot
ICAgICAgICBzZWxmLl9sb2dfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgc2VsZi5uYW1lID0gc2Vs
Zi5fY2xpZW50Lm5hbWUKLSAgICAgICAgX0Jyb2tlckNvbm5lY3Rpb24uX19pbml0X18oc2VsZiwg
YnJva2VyLCBzZWxmLl9jbGllbnQsIEFOWV9XT1JLRVJfVE9QSUMsIE1BTkFHRVJfVE9QSUMpCi0K
LSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
Ci0KLSAgICBkZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IKLQotICAgIGRlZiBqb2luKHNlbGYsIHRpbWVvdXQpOgotICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCi0KLSAgICAjIEZJWE1FOiByZW5hbWUgdG8geWllbGRfdG9fY2FsbGVy
KCkuCi0gICAgZGVmIHlpZWxkX3RvX2Jyb2tlcihzZWxmKToKLSAgICAgICAgcGFzcworICAgIGRl
ZiBfcmFpc2Uoc2VsZiwgZXhjX2luZm8pOgorICAgICAgICAjIFNpbmNlIHRyYWNlYmFja3MgYXJl
bid0IHBpY2tsYWJsZSwgc2VuZCB0aGUgZXh0cmFjdGVkIHN0YWNrIGluc3RlYWQuCisgICAgICAg
IGV4Y2VwdGlvbl90eXBlLCBleGNlcHRpb25fdmFsdWUsIGV4Y2VwdGlvbl90cmFjZWJhY2sgPSBl
eGNfaW5mbworICAgICAgICBzdGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZXJyb3IsIGV4
Y2VwdGlvbl90cmFjZWJhY2spCisgICAgICAgIHN0YWNrID0gdHJhY2ViYWNrLmV4dHJhY3RfdGIo
ZXhjZXB0aW9uX3RyYWNlYmFjaykKKyAgICAgICAgc2VsZi5fcG9zdChuYW1lPSd3b3JrZXJfZXhj
ZXB0aW9uJywgYXJncz0oZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgc3RhY2spLCBm
cm9tX3VzZXI9RmFsc2UpCiAKLSAgICBkZWYgcG9zdF9tZXNzYWdlKHNlbGYsICphcmdzKToKLSAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdW50aWwgd2UgY2FuIHJlbW92ZSB0aGUgbG9n
X21lc3NhZ2VzIGFyZyBmcm9tIHRoZSBtYW5hZ2VyLgotICAgICAgICBpZiBhcmdzWzBdIGluICgn
ZmluaXNoZWRfdGVzdCcsICdkb25lJyk6Ci0gICAgICAgICAgICBsb2dfbWVzc2FnZXMgPSBzZWxm
Ll9sb2dfbWVzc2FnZXMKLSAgICAgICAgICAgIHNlbGYuX2xvZ19tZXNzYWdlcyA9IFtdCi0gICAg
ICAgICAgICBhcmdzID0gYXJncyArIHR1cGxlKFtsb2dfbWVzc2FnZXNdKQotICAgICAgICBzdXBl
cihfV29ya2VyQ29ubmVjdGlvbiwgc2VsZikucG9zdF9tZXNzYWdlKCphcmdzKQorICAgIGRlZiBf
c2V0X3VwX2xvZ2dpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCkKIAotICAgIGRlZiBzZXRfdXBfbG9nZ2luZyhzZWxmKToKLSAgICAgICAgc2VsZi5f
bG9nZ2VyID0gbG9nZ2luZy5yb290CiAgICAgICAgICMgVGhlIHVuaXggbXVsdGlwcm9jZXNzaW5n
IGltcGxlbWVudGF0aW9uIGNsb25lcyB0aGUgTWV0ZXJlZFN0cmVhbSBsb2cgaGFuZGxlcgogICAg
ICAgICAjIGludG8gdGhlIGNoaWxkIHByb2Nlc3MsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IHRv
IGF2b2lkIGR1cGxpY2F0ZSBsb2dnaW5nLgogICAgICAgICBmb3IgaCBpbiBzZWxmLl9sb2dnZXIu
aGFuZGxlcnM6CiAgICAgICAgICAgICAjIGxvZyBoYW5kbGVycyBkb24ndCBoYXZlIG5hbWVzIHVu
dGlsIHB5dGhvbiAyLjcuCi0gICAgICAgICAgICBpZiBnZXRhdHRyKGgsICduYW1lJywgJycpID09
IG1ldGVyZWRfc3RyZWFtLkxPR19IQU5ETEVSX05BTUU6CisgICAgICAgICAgICAjIEZJWE1FOiBn
ZXQgd2Via2l0cHkudGVzdC5wcmludGVyIGZyb20gYSBjb25zdGFudCBhcyB3ZWxsLgorICAgICAg
ICAgICAgaWYgZ2V0YXR0cihoLCAnbmFtZScsICcnKSBpbiAobWV0ZXJlZF9zdHJlYW0uTE9HX0hB
TkRMRVJfTkFNRSwgJ3dlYmtpdHB5LnRlc3QucHJpbnRlcicpOgogICAgICAgICAgICAgICAgIHNl
bGYuX2xvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAg
ICAgc2VsZi5fbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcgaWYgc2VsZi5fY2xpZW50Ll9v
cHRpb25zLnZlcmJvc2UgZWxzZSBsb2dnaW5nLklORk8pCisKICAgICAgICAgc2VsZi5fbG9nX2hh
bmRsZXIgPSBfV29ya2VyTG9nSGFuZGxlcihzZWxmKQogICAgICAgICBzZWxmLl9sb2dnZXIuYWRk
SGFuZGxlcihzZWxmLl9sb2dfaGFuZGxlcikKIAotICAgIGRlZiBjbGVhbl91cF9sb2dnaW5nKHNl
bGYpOgotICAgICAgICBpZiBzZWxmLl9sb2dfaGFuZGxlciBhbmQgc2VsZi5fbG9nZ2VyOgotICAg
ICAgICAgICAgc2VsZi5fbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5fbG9nX2hhbmRsZXIpCi0g
ICAgICAgIHNlbGYuX2xvZ19oYW5kbGVyID0gTm9uZQotICAgICAgICBzZWxmLl9sb2dnZXIgPSBO
b25lCi0KLQotY2xhc3MgX0lubGluZVdvcmtlckNvbm5lY3Rpb24oX1dvcmtlckNvbm5lY3Rpb24p
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBicm9rZXIsIG1hbmFnZXJfY2xpZW50LCB3
b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJlcik6Ci0gICAgICAgIF9Xb3JrZXJDb25uZWN0aW9u
Ll9faW5pdF9fKHNlbGYsIGhvc3QsIGJyb2tlciwgd29ya2VyX2ZhY3RvcnksIHdvcmtlcl9udW1i
ZXIpCi0gICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKLSAgICAgICAgc2VsZi5fbWFuYWdlcl9j
bGllbnQgPSBtYW5hZ2VyX2NsaWVudAotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAg
c2VsZi5fY2xpZW50LmNhbmNlbCgpCi0KLSAgICBkZWYgaXNfYWxpdmUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9hbGl2ZQotCi0gICAgZGVmIGpvaW4oc2VsZiwgdGltZW91dCk6Ci0gICAg
ICAgIGFzc2VydCBub3Qgc2VsZi5fYWxpdmUKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAg
IHNlbGYuX2FsaXZlID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9jbGll
bnQucnVuKHNlbGYuX2hvc3QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9h
bGl2ZSA9IEZhbHNlCi0KLSAgICBkZWYgeWllbGRfdG9fYnJva2VyKHNlbGYpOgotICAgICAgICBz
ZWxmLl9icm9rZXIucnVuX2FsbF9wZW5kaW5nKE1BTkFHRVJfVE9QSUMsIHNlbGYuX21hbmFnZXJf
Y2xpZW50KQotCi0gICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihzZWxmLCBleGNfaW5mbyk6Ci0gICAg
ICAgICMgU2luY2UgdGhlIHdvcmtlciBpcyBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSBtYW5h
Z2VyLCB3ZSBjYW4KLSAgICAgICAgIyByYWlzZSB0aGUgZXhjZXB0aW9uIGRpcmVjdGx5LCByYXRo
ZXIgdGhhbiBoYXZpbmcgdG8gc2VuZCBpdCB0aHJvdWdoCi0gICAgICAgICMgdGhlIHF1ZXVlLiBU
aGlzIGFsbG93cyB1cyB0byBwcmVzZXJ2ZSB0aGUgdHJhY2ViYWNrLCBidXQgd2UgbG9nCi0gICAg
ICAgICMgaXQgYW55d2F5IGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBtdWx0aXByb2Nlc3MgY2Fz
ZS4KLSAgICAgICAgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgZXhjZXB0aW9uX3Ry
YWNlYmFjayA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHN0YWNrX3V0aWxzLmxvZ190cmFjZWJh
Y2soX2xvZy5lcnJvciwgZXhjZXB0aW9uX3RyYWNlYmFjaykKLSAgICAgICAgcmFpc2UgZXhjZXB0
aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgZXhjZXB0aW9uX3RyYWNlYmFjawotCi0KLWNsYXNz
IF9Qcm9jZXNzKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKToKLSAgICBkZWYgX19pbml0X18oc2Vs
Ziwgd29ya2VyX2Nvbm5lY3Rpb24sIGNsaWVudCk6Ci0gICAgICAgIG11bHRpcHJvY2Vzc2luZy5Q
cm9jZXNzLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYuX3dvcmtlcl9jb25uZWN0aW9uID0g
d29ya2VyX2Nvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5fY2xpZW50ID0gY2xpZW50Ci0KLSAgICBk
ZWYgcnVuKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fd29ya2VyX2Nvbm5lY3Rpb24uX2hv
c3Q6Ci0gICAgICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5faG9zdCA9IEhvc3QoKQot
ICAgICAgICBzZWxmLl93b3JrZXJfY29ubmVjdGlvbi5ydW4oKQotCi0KLWNsYXNzIF9NdWx0aVBy
b2Nlc3NXb3JrZXJDb25uZWN0aW9uKF9Xb3JrZXJDb25uZWN0aW9uKToKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdCwgYnJva2VyLCB3b3JrZXJfZmFjdG9yeSwgd29ya2VyX251bWJlcik6Ci0g
ICAgICAgIF9Xb3JrZXJDb25uZWN0aW9uLl9faW5pdF9fKHNlbGYsIGhvc3QsIGJyb2tlciwgd29y
a2VyX2ZhY3RvcnksIHdvcmtlcl9udW1iZXIpCi0gICAgICAgIHNlbGYuX3Byb2MgPSBfUHJvY2Vz
cyhzZWxmLCBzZWxmLl9jbGllbnQpCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy50ZXJtaW5hdGUoKQotCi0gICAgZGVmIGlzX2FsaXZlKHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5pc19hbGl2ZSgpCi0KLSAgICBkZWYgam9pbihzZWxm
LCB0aW1lb3V0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Muam9pbih0aW1lb3V0KQotCi0g
ICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBzZWxmLl9wcm9jLnN0YXJ0KCkKLQotICAgIGRl
ZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuc2V0X3VwX2xvZ2dpbmcoKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzZWxmLl9jbGllbnQucnVuKHNlbGYuX2hvc3QpCi0gICAgICAgIGZpbmFs
bHk6Ci0gICAgICAgICAgICBzZWxmLmNsZWFuX3VwX2xvZ2dpbmcoKQotCiAKIGNsYXNzIF9Xb3Jr
ZXJMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdv
cmtlcik6CiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBz
ZWxmLl93b3JrZXIgPSB3b3JrZXIKLSAgICAgICAgc2VsZi5fcGlkID0gb3MuZ2V0cGlkKCkKIAog
ICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Ci0gICAgICAgIHNlbGYuX3dvcmtlci5fbG9nX21l
c3NhZ2VzLmFwcGVuZChyZWNvcmQpCisgICAgICAgIHNlbGYuX3dvcmtlci5sb2dfbWVzc2FnZXMu
YXBwZW5kKHJlY29yZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29ya2VyX2Jyb2tlcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfd29y
a2VyX2Jyb2tlcl91bml0dGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgy
ZmQ1NTk3OTkwNmE0ODE5MjAzOTFmMzIyNjNkZDcyMGUyZjIxNi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3dvcmtlcl9icm9rZXJfdW5pdHRlc3QucHkKKysr
IC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBv
cHRwYXJzZQotaW1wb3J0IFF1ZXVlCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCi1mcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgbWFuYWdlcl93b3JrZXJfYnJva2Vy
Ci0KLQotIyBJbiBvcmRlciB0byByZWxpYWJseSBjb250cm9sIHdoZW4gY2hpbGQgd29ya2VycyBh
cmUgc3RhcnRpbmcgYW5kIHN0b3BwaW5nLAotIyB3ZSB1c2UgYSBwYWlyIG9mIGdsb2JhbCB2YXJp
YWJsZXMgdG8gaG9sZCBxdWV1ZXMgdXNlZCBmb3IgbWVzc2FnaW5nLiBJZGVhbGx5Ci0jIHdlIHdv
dWxkbid0IG5lZWQgZ2xvYmFscywgYnV0IHdlIGNhbid0IHBhc3MgdGhlc2UgdGhyb3VnaCBhIGxl
eGljYWwgY2xvc3VyZQotIyBiZWNhdXNlIHRob3NlIGNhbid0IGJlIFBpY2tsZWQgYW5kIHNlbnQg
dG8gYSBzdWJwcm9jZXNzLCBhbmQgd2UnZCBwcmVmZXIgbm90Ci0jIHRvIGhhdmUgdG8gcGFzcyBl
eHRyYSBhcmd1bWVudHMgdG8gdGhlIHdvcmtlciBpbiB0aGUgc3RhcnRfd29ya2VyKCkgY2FsbC4K
LXN0YXJ0aW5nX3F1ZXVlID0gTm9uZQotc3RvcHBpbmdfcXVldWUgPSBOb25lCi0KLQotV09SS0VS
X05BTUUgPSAnd29ya2VyLzEnCi0KLWRlZiBtYWtlX2Jyb2tlcihtYW5hZ2VyLCBtYXhfd29ya2Vy
cywgc3RhcnRfcXVldWU9Tm9uZSwgc3RvcF9xdWV1ZT1Ob25lKToKLSAgICBnbG9iYWwgc3RhcnRp
bmdfcXVldWUKLSAgICBnbG9iYWwgc3RvcHBpbmdfcXVldWUKLSAgICBzdGFydGluZ19xdWV1ZSA9
IHN0YXJ0X3F1ZXVlCi0gICAgc3RvcHBpbmdfcXVldWUgPSBzdG9wX3F1ZXVlCi0gICAgcmV0dXJu
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fZ2V0X2Jyb2tlcihtYXhfd29ya2VycywgbWFuYWdlciwg
X1Rlc3RXb3JrZXIpCi0KLQotY2xhc3MgX1Rlc3RXb3JrZXIob2JqZWN0KToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgY2FsbGVyKToKLSAgICAgICAgc2VsZi5fY2FsbGVyID0gY2FsbGVyCi0gICAg
ICAgIHNlbGYuX3RoaW5nX3RvX2dyZWV0ID0gJ2V2ZXJ5Ym9keScKLSAgICAgICAgc2VsZi5fc3Rh
cnRpbmdfcXVldWUgPSBzdGFydGluZ19xdWV1ZQotICAgICAgICBzZWxmLl9zdG9wcGluZ19xdWV1
ZSA9IHN0b3BwaW5nX3F1ZXVlCi0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRwYXJzZS5WYWx1
ZXMoeyd2ZXJib3NlJzogRmFsc2V9KQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLl9zdGFydGluZ19xdWV1ZToKLSAgICAgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3F1ZXVl
LnB1dCgnJykKLQotICAgICAgICBpZiBzZWxmLl9zdG9wcGluZ19xdWV1ZToKLSAgICAgICAgICAg
IHNlbGYuX3N0b3BwaW5nX3F1ZXVlLmdldCgpCi0KLSAgICBkZWYgaGFuZGxlKHNlbGYsIG1lc3Nh
Z2UsIHNyYywgYW5faW50LCBhX3N0cik6Ci0gICAgICAgIGFzc2VydCBhbl9pbnQgPT0gMQotICAg
ICAgICBhc3NlcnQgYV9zdHIgPT0gImhlbGxvLCB3b3JsZCIKLSAgICAgICAgc2VsZi5fY2FsbGVy
LnBvc3QoJ2ZpbmlzaGVkX3Rlc3QnLCAyKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAg
IHBhc3MKLQotCi1jbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBk
ZWYgdGVzdF9nZXRfX2lubGluZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ha2Vf
YnJva2VyKHNlbGYsIDEpIGlzIG5vdCBOb25lKQotCi0gICAgZGVmIHRlc3RfZ2V0X19wcm9jZXNz
ZXMoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IHNvbWV0aW1lcyBmYWlscyBvbiBXaW5kb3dz
LiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTUwODc+LgotICAgICAgICBpZiBzeXMucGxhdGZv
cm0gaW4gKCdjeWd3aW4nLCAnd2luMzInKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBz
ZWxmLmFzc2VydFRydWUobWFrZV9icm9rZXIoc2VsZiwgMikgaXMgbm90IE5vbmUpCi0KLQotY2xh
c3MgX1Rlc3RzTWl4aW4ob2JqZWN0KToKLSAgICAiIiJNaXhpbiBjbGFzcyB0aGF0IGltcGxlbWVu
dHMgYSBzZXJpZXMgb2YgdGVzdHMgdG8gZW5mb3JjZSB0aGUKLSAgICBjb250cmFjdCBhbGwgaW1w
bGVtZW50YXRpb25zIG11c3QgZm9sbG93LiIiIgotCi0gICAgbmFtZSA9ICdUZXN0ZXJNYW5hZ2Vy
JwotCi0gICAgZGVmIGlzX2RvbmUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kb25lCi0K
LSAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc3JjLCBsb2dfbWVzc2FnZXMpOgotICAgICAgICBz
ZWxmLl9kb25lID0gVHJ1ZQotCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF90ZXN0KHNlbGYsIHNy
YywgYW5faW50LCBsb2dfbWVzc2FnZXMpOgotICAgICAgICBzZWxmLl9hbl9pbnQgPSBhbl9pbnQK
LQotICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX3R5cGUsIGV4
Y2VwdGlvbl92YWx1ZSwgc3RhY2spOgotICAgICAgICByYWlzZSBleGNlcHRpb25fdHlwZShleGNl
cHRpb25fdmFsdWUpCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuX2FuX2lu
dCA9IE5vbmUKLSAgICAgICAgc2VsZi5fYnJva2VyID0gTm9uZQotICAgICAgICBzZWxmLl9kb25l
ID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQotICAgICAgICBzZWxmLl9t
YXhfd29ya2VycyA9IE5vbmUKLQotICAgIGRlZiBtYWtlX2Jyb2tlcihzZWxmLCBzdGFydGluZ19x
dWV1ZT1Ob25lLCBzdG9wcGluZ19xdWV1ZT1Ob25lKToKLSAgICAgICAgc2VsZi5fYnJva2VyID0g
bWFrZV9icm9rZXIoc2VsZiwgc2VsZi5fbWF4X3dvcmtlcnMsIHN0YXJ0aW5nX3F1ZXVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ19xdWV1ZSkKLQotICAgIGRl
ZiB0ZXN0X25hbWUoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV9icm9rZXIoKQotICAgICAgICB3
b3JrZXIgPSBzZWxmLl9icm9rZXIuc3RhcnRfd29ya2VyKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHdvcmtlci5uYW1lLCBXT1JLRVJfTkFNRSkKLSAgICAgICAgd29ya2VyLmNhbmNlbCgp
Ci0gICAgICAgIHdvcmtlci5qb2luKDAuMSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3Jr
ZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2VsZi5fYnJva2VyLmNsZWFudXAoKQotCi0gICAgZGVm
IHRlc3RfY2FuY2VsKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkKLSAgICAgICAg
d29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigxKQotICAgICAgICBzZWxmLl9icm9r
ZXIucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCAxLCAnaGVsbG8sIHdvcmxkJykKLSAgICAgICAg
d29ya2VyLmNhbmNlbCgpCi0gICAgICAgIHdvcmtlci5qb2luKDAuMSkKLSAgICAgICAgc2VsZi5h
c3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2VsZi5fYnJva2VyLmNsZWFu
dXAoKQotCi0gICAgZGVmIHRlc3RfZG9uZShzZWxmKToKLSAgICAgICAgc2VsZi5tYWtlX2Jyb2tl
cigpCi0gICAgICAgIHdvcmtlciA9IHNlbGYuX2Jyb2tlci5zdGFydF93b3JrZXIoMSkKLSAgICAg
ICAgc2VsZi5fYnJva2VyLnBvc3RfbWVzc2FnZSgndGVzdF9saXN0JywgMSwgJ2hlbGxvLCB3b3Js
ZCcpCi0gICAgICAgIHNlbGYuX2Jyb2tlci5wb3N0X21lc3NhZ2UoJ3N0b3AnKQotICAgICAgICBz
ZWxmLl9icm9rZXIucnVuX21lc3NhZ2VfbG9vcCgpCi0gICAgICAgIHdvcmtlci5qb2luKDAuNSkK
LSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHNlbGYuaXNfZG9uZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuX2FuX2ludCwgMikKLSAgICAgICAgc2VsZi5fYnJva2VyLmNsZWFudXAoKQotCi0gICAgZGVm
IHRlc3RfdW5rbm93bl9tZXNzYWdlKHNlbGYpOgotICAgICAgICBzZWxmLm1ha2VfYnJva2VyKCkK
LSAgICAgICAgd29ya2VyID0gc2VsZi5fYnJva2VyLnN0YXJ0X3dvcmtlcigxKQotICAgICAgICBz
ZWxmLl9icm9rZXIucG9zdF9tZXNzYWdlKCd1bmtub3duJykKLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgc2VsZi5fYnJva2VyLnJ1bl9tZXNzYWdlX2xvb3AoKQotICAgICAgICAgICAgc2VsZi5m
YWlsKCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6Ci0gICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzdHIoZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHJl
Y2VpdmVkIG1lc3NhZ2UgJ3Vua25vd24nIGl0IGNvdWxkbid0IGhhbmRsZSIgJSBXT1JLRVJfTkFN
RSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHdvcmtlci5qb2luKDAuNSkKLSAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZSh3b3JrZXIuaXNfYWxpdmUoKSkKLSAgICAgICAgc2VsZi5fYnJv
a2VyLmNsZWFudXAoKQotCi0KLWNsYXNzIElubGluZUJyb2tlclRlc3RzKF9UZXN0c01peGluLCB1
bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBfVGVzdHNN
aXhpbi5zZXRVcChzZWxmKQotICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IDEKLQotCi0jIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ1MjAuCi1pZiBz
eXMucGxhdGZvcm0gbm90IGluICgnY3lnd2luJywgJ3dpbjMyJyk6Ci0KLSAgICBjbGFzcyBNdWx0
aVByb2Nlc3NCcm9rZXJUZXN0cyhfVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAg
ICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICBfVGVzdHNNaXhpbi5zZXRVcChzZWxm
KQotICAgICAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSAyCi0KLQotY2xhc3MgTWVzc2FnZVRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X19ub19ib2R5KHNlbGYpOgotICAg
ICAgICBtc2cgPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuX01lc3NhZ2UoJ3NyYycsICd0b3BpY19u
YW1lJywgJ21lc3NhZ2VfbmFtZScsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBy
KG1zZykpCi0gICAgICAgIHMgPSBtc2cuZHVtcHMoKQotICAgICAgICBuZXdfbXNnID0gbWFuYWdl
cl93b3JrZXJfYnJva2VyLl9NZXNzYWdlLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwobmV3X21zZy5uYW1lLCAnbWVzc2FnZV9uYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChuZXdfbXNnLmFyZ3MsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21zZy50
b3BpY19uYW1lLCAndG9waWNfbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3X21z
Zy5zcmMsICdzcmMnKQotCi0gICAgZGVmIHRlc3RfX2JvZHkoc2VsZik6Ci0gICAgICAgIG1zZyA9
IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5fTWVzc2FnZSgnc3JjJywgJ3RvcGljX25hbWUnLCAnbWVz
c2FnZV9uYW1lJywgKCdib2R5JywgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1z
ZykpCi0gICAgICAgIHMgPSBtc2cuZHVtcHMoKQotICAgICAgICBuZXdfbXNnID0gbWFuYWdlcl93
b3JrZXJfYnJva2VyLl9NZXNzYWdlLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
bmV3X21zZy5uYW1lLCAnbWVzc2FnZV9uYW1lJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChu
ZXdfbXNnLmFyZ3MsICgnYm9keScsIDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19t
c2cudG9waWNfbmFtZSwgJ3RvcGljX25hbWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5l
d19tc2cuc3JjLCAnc3JjJykKLQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAg
dW5pdHRlc3QubWFpbigpCg==
</data>
<flag name="review"
          id="160372"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>