<?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>78309</bug_id>
          
          <creation_ts>2012-02-09 18:13:33 -0800</creation_ts>
          <short_desc>Perf-o-matic should process reports in background</short_desc>
          <delta_ts>2012-02-10 03:26:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Website</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>553686</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-09 18:13:33 -0800</bug_when>
    <thetext>I just realized that there are a whole bunch of ReportLog objects sitting in the production server because appengine ran out of time to run report_handler.py :( When appengine cold-starts, it takes extra time to compile the scripts and end up not being able to finish the request.

As someone worked on the flakiness dashboard suggested before, we should do the whole parsing, processing, etc... in background instead. We also need some UI to salvage the lost reports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553925</commentid>
    <comment_count>1</comment_count>
      <attachid>126471</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 01:02:17 -0800</bug_when>
    <thetext>Created attachment 126471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553927</commentid>
    <comment_count>2</comment_count>
      <attachid>126472</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 01:05:16 -0800</bug_when>
    <thetext>Created attachment 126472
Removed report_logs_handler.pyc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553933</commentid>
    <comment_count>3</comment_count>
      <attachid>126472</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-10 01:14:57 -0800</bug_when>
    <thetext>Comment on attachment 126472
Removed report_logs_handler.pyc

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

I really want to see the unittest. for this.
You can test datastore even locally.
http://code.google.com/appengine/docs/python/tools/localunittesting.html

&gt; Websites/webkit-perf.appspot.com/report_logs.yaml:1
&gt; +&lt;!DOCTYPE html&gt;

This doesn&apos;t look like a yaml at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553942</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 01:22:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 126472 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126472&amp;action=review
&gt; 
&gt; I really want to see the unittest. for this.
&gt; You can test datastore even locally.
&gt; http://code.google.com/appengine/docs/python/tools/localunittesting.html

I don&apos;t think testing model code is interesting since most of the logic lives in handler classes at the moment.
 
&gt; &gt; Websites/webkit-perf.appspot.com/report_logs.yaml:1
&gt; &gt; +&lt;!DOCTYPE html&gt;
&gt; 
&gt; This doesn&apos;t look like a yaml at all.

What do you mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553943</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 01:24:20 -0800</bug_when>
    <thetext>FWIW, this code has been pushed into the production.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553949</commentid>
    <comment_count>6</comment_count>
      <attachid>126476</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 01:45:12 -0800</bug_when>
    <thetext>Created attachment 126476
Fixed yaml &gt; html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553951</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 01:56:14 -0800</bug_when>
    <thetext>Committed r107386: &lt;http://trac.webkit.org/changeset/107386&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>553986</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-10 03:26:39 -0800</bug_when>
    <thetext>Build fix landed in http://trac.webkit.org/changeset/107393.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126471</attachid>
            <date>2012-02-10 01:02:17 -0800</date>
            <delta_ts>2012-02-10 01:05:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78309-20120210010215.patch</filename>
            <type>text/plain</type>
            <size>41200</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzM3
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEyLTAy
LTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFBlcmYtby1t
YXRpYyBzaG91bGQgcHJvY2VzcyByZXBvcnRzIGluIGJhY2tncm91bmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdGhlIGxvZ2ljIHRvIGNyZWF0
ZSBCdWlsZCwgVGVzdCwgYW5kIFRlc3RSZXN1bHQgb2JqZWN0cyBmcm9tIFJlcG9ydEhhbmRsZXIg
aW50byBSZXBvcnRQcm9jZXNzSGFuZGxlci4KKyAgICAgICAgUmVwb3J0SGFuZGxlciBub3cgbWVy
ZWx5IGNyZWF0ZXMgUmVwb3J0TG9nIGFuZCBzY2hlZHVsZXMgYSB0YXNrIHRvIHByb2Nlc3MgaXQu
CisKKyAgICAgICAgQWxzbyBhZGRlZCBSZXBvcnRMb2dIYW5kbGVyIHRvIG1hbmFnZSBzdGFsZSBS
ZXBvcnRMb2dzLgorCisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20v
YXBwLnlhbWw6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29u
dHJvbGxlci5weToKKyAgICAgICAgKHNjaGVkdWxlX21hbmlmZXN0X3VwZGF0ZSk6CisgICAgICAg
IChzY2hlZHVsZV9kYXNoYm9hcmRfdXBkYXRlKToKKyAgICAgICAgKHNjaGVkdWxlX3J1bnNfdXBk
YXRlKToKKyAgICAgICAgKENhY2hlZFJ1bnNIYW5kbGVyLmdldCk6CisgICAgICAgIChzY2hlZHVs
ZV9yZXBvcnRfcHJvY2Vzcyk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vbWFpbi5weToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9tb2RlbHMucHk6CisgICAgICAgIChSZXBvcnRMb2cpOgorICAgICAgICAoUmVwb3J0TG9nLl9w
YXJzZWRfcGF5bG9hZCk6CisgICAgICAgIChSZXBvcnRMb2cuZ2V0X3ZhbHVlKToKKyAgICAgICAg
KFJlcG9ydExvZy5yZXN1bHRzKToKKyAgICAgICAgKFJlcG9ydExvZy5idWlsZGVyKToKKyAgICAg
ICAgKFJlcG9ydExvZy5icmFuY2gpOgorICAgICAgICAoUmVwb3J0TG9nLnBsYXRmb3JtKToKKyAg
ICAgICAgKFJlcG9ydExvZy5idWlsZF9udW1iZXIpOgorICAgICAgICAoUmVwb3J0TG9nLndlYmtp
dF9yZXZpc2lvbik6CisgICAgICAgIChSZXBvcnRMb2cuY2hyb21pdW1fcmV2aXNpb24pOgorICAg
ICAgICAoUmVwb3J0TG9nLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKToKKyAgICAgICAg
KFJlcG9ydExvZy5faW50ZWdlcl9pbl9wYXlsb2FkKToKKyAgICAgICAgKFJlcG9ydExvZy50aW1l
c3RhbXApOgorICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9y
dF9oYW5kbGVyLnB5OgorICAgICAgICAoUmVwb3J0SGFuZGxlci5wb3N0KToKKyAgICAgICAgKFJl
cG9ydEhhbmRsZXIuX291dHB1dCk6CisgICAgICAgIChSZXBvcnRIYW5kbGVyLl9yZXN1bHRzX2Fy
ZV92YWxpZCk6CisgICAgICAgIChSZXBvcnRIYW5kbGVyLl9yZXN1bHRzX2FyZV92YWxpZC5faXNf
ZmxvYXRfY29udmVydGlibGUpOgorICAgICAgICAoUmVwb3J0SGFuZGxlcik6CisgICAgICAgICog
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3MueWFtbDogQWRkZWQu
CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3Nf
aGFuZGxlci5weTogQWRkZWQuCisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxlcik6CisgICAgICAg
IChSZXBvcnRMb2dzSGFuZGxlci5nZXQpOgorICAgICAgICAoUmVwb3J0TG9nc0hhbmRsZXIucG9z
dCk6CisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxlci5fZXJyb3IpOgorICAgICAgICAqIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9sb2dzX2hhbmRsZXIucHljOiBBZGRl
ZC4KKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJv
Y2Vzc19oYW5kbGVyLnB5OiBDb3BpZWQgZnJvbSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9yZXBvcnRfaGFuZGxlci5weS4KKyAgICAgICAgKFJlcG9ydFByb2Nlc3NIYW5kbGVyKToK
KyAgICAgICAgKFJlcG9ydFByb2Nlc3NIYW5kbGVyLnBvc3QpOgorICAgICAgICAoUmVwb3J0UHJv
Y2Vzc0hhbmRsZXIuX2NyZWF0ZV9idWlsZF9pZl9wb3NzaWJsZSk6CisgICAgICAgIChSZXBvcnRQ
cm9jZXNzSGFuZGxlci5fY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlLmV4ZWN1dGUpOgorICAgICAg
ICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIuX2FkZF90ZXN0X2lmX25lZWRlZCk6CisKIDIwMTItMDIt
MDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGVyZi1vLW1h
dGljIHNob3VsZG4ndCByZWx5IG9uIG1lbWNhY2hlIHRvIHN0b3JlIGNhY2hlZCBKU09OIHJlc3Bv
bnNlcwpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwJKHJl
dmlzaW9uIDEwNzMzMSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2FwcC55
YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogYXBwbGljYXRpb246IHdlYmtpdC1w
ZXJmCi12ZXJzaW9uOiAxMgordmVyc2lvbjogMTMKIHJ1bnRpbWU6IHB5dGhvbjI3CiBhcGlfdmVy
c2lvbjogMQogdGhyZWFkc2FmZTogZmFsc2UKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL2NvbnRyb2xsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vY29udHJvbGxlci5weQkocmV2aXNpb24gMTA3MzM3KQorKysgV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29udHJvbGxlci5weQkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBkZWYgY2FjaGVfbWFuaWZlc3QoY2FjaGUpOgogCiAKIGRlZiBzY2hl
ZHVsZV9tYW5pZmVzdF91cGRhdGUoKToKLSAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90ZXN0
L3VwZGF0ZScpCisgICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVzdC91cGRhdGUnLCBuYW1l
PSdtYW5pZmVzdF91cGRhdGUnKQogCiAKIGNsYXNzIENhY2hlZE1hbmlmZXN0SGFuZGxlcih3ZWJh
cHAyLlJlcXVlc3RIYW5kbGVyKToKQEAgLTgyLDcgKzgyLDcgQEAgZGVmIGNhY2hlX2Rhc2hib2Fy
ZChjYWNoZSk6CiAKIAogZGVmIHNjaGVkdWxlX2Rhc2hib2FyZF91cGRhdGUoKToKLSAgICB0YXNr
cXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L2Rhc2hib2FyZC91cGRhdGUnKQorICAgIHRhc2txdWV1
ZS5hZGQodXJsPScvYXBpL3Rlc3QvZGFzaGJvYXJkL3VwZGF0ZScsIG5hbWU9J2Rhc2hib2FyZF91
cGRhdGUnKQogCiAKIGNsYXNzIENhY2hlZERhc2hib2FyZEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0
SGFuZGxlcik6CkBAIC0xMDAsNyArMTAwLDggQEAgZGVmIGNhY2hlX3J1bnModGVzdF9pZCwgYnJh
bmNoX2lkLCBwbGF0ZgogCiAKIGRlZiBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFu
Y2hfaWQsIHBsYXRmb3JtX2lkKToKLSAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3J1
bnMvdXBkYXRlJywgcGFyYW1zPXsnaWQnOiB0ZXN0X2lkLCAnYnJhbmNoaWQnOiBicmFuY2hfaWQs
ICdwbGF0Zm9ybWlkJzogcGxhdGZvcm1faWR9KQorICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBp
L3Rlc3QvcnVucy91cGRhdGUnLCBuYW1lPSdydW5zX3VwZGF0ZV8lZF8lZF8lZCcgJSAodGVzdF9p
ZCwgYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCksCisgICAgICAgIHBhcmFtcz17J2lkJzogdGVzdF9p
ZCwgJ2JyYW5jaGlkJzogYnJhbmNoX2lkLCAncGxhdGZvcm1pZCc6IHBsYXRmb3JtX2lkfSkKIAog
CiBjbGFzcyBDYWNoZWRSdW5zSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKQEAgLTEy
MiwzICsxMjMsNyBAQCBjbGFzcyBDYWNoZWRSdW5zSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RICiAg
ICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZShydW5zKQogICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgc2NoZWR1bGVfcnVuc191cGRhdGUodGVzdF9pZCwgYnJhbmNoX2lkLCBwbGF0
Zm9ybV9pZCkKKworCitkZWYgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MobG9nKToKKyAgICB0YXNr
cXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3JlcG9ydC9wcm9jZXNzJywgcGFyYW1zPXsnaWQnOiBs
b2cua2V5KCkuaWQoKX0pCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9t
YWluLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21h
aW4ucHkJKHJldmlzaW9uIDEwNzMzMSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3Qu
Y29tL21haW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE2ICsyOCwyMCBAQCBmcm9tIGRhc2hi
b2FyZF9oYW5kbGVyIGltcG9ydCBEYXNoYm9hcmRICiBmcm9tIG1hbmlmZXN0X2hhbmRsZXIgaW1w
b3J0IE1hbmlmZXN0SGFuZGxlcgogZnJvbSByZXBvcnRfaGFuZGxlciBpbXBvcnQgUmVwb3J0SGFu
ZGxlcgogZnJvbSByZXBvcnRfaGFuZGxlciBpbXBvcnQgQWRtaW5SZXBvcnRIYW5kbGVyCitmcm9t
IHJlcG9ydF9wcm9jZXNzX2hhbmRsZXIgaW1wb3J0IFJlcG9ydFByb2Nlc3NIYW5kbGVyCitmcm9t
IHJlcG9ydF9sb2dzX2hhbmRsZXIgaW1wb3J0IFJlcG9ydExvZ3NIYW5kbGVyCiBmcm9tIHJ1bnNf
aGFuZGxlciBpbXBvcnQgUnVuc0hhbmRsZXIKIGZyb20gbWVyZ2VfdGVzdHNfaGFuZGxlciBpbXBv
cnQgTWVyZ2VUZXN0c0hhbmRsZXIKIAogcm91dGVzID0gWwogICAgICgnL2FkbWluL3JlcG9ydC8/
JywgQWRtaW5SZXBvcnRIYW5kbGVyKSwKICAgICAoJy9hZG1pbi9tZXJnZS10ZXN0cy8/JywgTWVy
Z2VUZXN0c0hhbmRsZXIpLAorICAgICgnL2FkbWluL3JlcG9ydC1sb2dzLz8nLCBSZXBvcnRMb2dz
SGFuZGxlciksCiAgICAgKCcvYWRtaW4vY3JlYXRlLyguKiknLCBDcmVhdGVIYW5kbGVyKSwKICAg
ICAoJy9hcGkvdGVzdC8/JywgQ2FjaGVkTWFuaWZlc3RIYW5kbGVyKSwKICAgICAoJy9hcGkvdGVz
dC91cGRhdGUnLCBNYW5pZmVzdEhhbmRsZXIpLAogICAgICgnL2FwaS90ZXN0L3JlcG9ydC8/Jywg
UmVwb3J0SGFuZGxlciksCisgICAgKCcvYXBpL3Rlc3QvcmVwb3J0L3Byb2Nlc3MnLCBSZXBvcnRQ
cm9jZXNzSGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvcnVucy8/JywgQ2FjaGVkUnVuc0hhbmRs
ZXIpLAogICAgICgnL2FwaS90ZXN0L3J1bnMvdXBkYXRlJywgUnVuc0hhbmRsZXIpLAogICAgICgn
L2FwaS90ZXN0L2Rhc2hib2FyZC8/JywgQ2FjaGVkRGFzaGJvYXJkSGFuZGxlciksCkluZGV4OiBX
ZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzLnB5CShyZXZpc2lvbiAxMDcz
MzcpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBoYXNo
bGliCitpbXBvcnQganNvbgogaW1wb3J0IHJlCiAKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0
aW1lCiBmcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgogCiAKQEAgLTEyMSw2ICsx
MjMsNjEgQEAgY2xhc3MgUmVwb3J0TG9nKGRiLk1vZGVsKToKICAgICB0aW1lc3RhbXAgPSBkYi5E
YXRlVGltZVByb3BlcnR5KHJlcXVpcmVkPVRydWUpCiAgICAgaGVhZGVycyA9IGRiLlRleHRQcm9w
ZXJ0eSgpCiAgICAgcGF5bG9hZCA9IGRiLlRleHRQcm9wZXJ0eSgpCisgICAgY29tbWl0ID0gZGIu
Qm9vbGVhblByb3BlcnR5KCkKKworICAgIGRlZiBfcGFyc2VkX3BheWxvYWQoc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuX19kaWN0X18uZ2V0KCdfcGFyc2VkJykgPT0gTm9uZToKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZWQgPSBqc29uLmxvYWRzKHNlbGYucGF5
bG9hZCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNl
bGYuX3BhcnNlZCA9IEZhbHNlCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZWQKKworICAgIGRl
ZiBnZXRfdmFsdWUoc2VsZiwga2V5TmFtZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXJzZWRf
cGF5bG9hZCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3BhcnNlZC5nZXQoa2V5TmFtZSwgJycpCisKKyAgICBkZWYgcmVzdWx0cyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZ2V0X3ZhbHVlKCdyZXN1bHRzJykKKworICAgIGRlZiBidWlsZGVyKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWxfYnlfa2V5X25hbWVfaW5fcGF5bG9hZChC
dWlsZGVyLCAnYnVpbGRlci1uYW1lJykKKworICAgIGRlZiBicmFuY2goc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKEJyYW5jaCwgJ2JyYW5j
aCcpCisKKyAgICBkZWYgcGxhdGZvcm0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2Rl
bF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKFBsYXRmb3JtLCAncGxhdGZvcm0nKQorCisgICAgZGVm
IGJ1aWxkX251bWJlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVnZXJfaW5fcGF5
bG9hZCgnYnVpbGQtbnVtYmVyJykKKworICAgIGRlZiB3ZWJraXRfcmV2aXNpb24oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9pbnRlZ2VyX2luX3BheWxvYWQoJ3dlYmtpdC1yZXZpc2lvbicp
CisKKyAgICBkZWYgY2hyb21pdW1fcmV2aXNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9pbnRlZ2VyX2luX3BheWxvYWQoJ2Nocm9taXVtLXJldmlzaW9uJykKKworICAgIGRlZiBfbW9k
ZWxfYnlfa2V5X25hbWVfaW5fcGF5bG9hZChzZWxmLCBtb2RlbCwga2V5TmFtZSk6CisgICAgICAg
IGtleSA9IHNlbGYuZ2V0X3ZhbHVlKGtleU5hbWUpCisgICAgICAgIGlmIG5vdCBrZXk6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gbW9kZWwuZ2V0X2J5X2tleV9uYW1l
KGtleSkKKworICAgIGRlZiBfaW50ZWdlcl9pbl9wYXlsb2FkKHNlbGYsIGtleU5hbWUpOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X3ZhbHVlKGtleU5hbWUp
KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICBkZWYgdGltZXN0YW1wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1
cm4gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChzZWxmLl9pbnRlZ2VyX2luX3BheWxvYWQoJ3RpbWVz
dGFtcCcpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQog
CiAKICMgVXNlZCB3aGVuIG1lbWNhY2hlIGVudHJ5IGlzIGV2aWN0ZWQKSW5kZXg6IFdlYnNpdGVz
L3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5CShyZXZp
c2lvbiAxMDczMzEpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRf
aGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzIsMjEgKzMyLDEwIEBAIGZyb20gZ29vZ2xl
LmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCiAKIGltcG9ydCBqc29uCiBpbXBvcnQgcmUKLWltcG9y
dCB0aW1lCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQogCi1mcm9tIGNvbnRyb2xsZXIg
aW1wb3J0IHNjaGVkdWxlX3J1bnNfdXBkYXRlCi1mcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVk
dWxlX2Rhc2hib2FyZF91cGRhdGUKLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfbWFu
aWZlc3RfdXBkYXRlCi1mcm9tIG1vZGVscyBpbXBvcnQgQnVpbGRlcgotZnJvbSBtb2RlbHMgaW1w
b3J0IEJyYW5jaAotZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCi1mcm9tIG1vZGVscyBpbXBvcnQg
TnVtZXJpY0lkSG9sZGVyCi1mcm9tIG1vZGVscyBpbXBvcnQgUGxhdGZvcm0KIGZyb20gbW9kZWxz
IGltcG9ydCBSZXBvcnRMb2cKLWZyb20gbW9kZWxzIGltcG9ydCBUZXN0Ci1mcm9tIG1vZGVscyBp
bXBvcnQgVGVzdFJlc3VsdAotZnJvbSBtb2RlbHMgaW1wb3J0IGNyZWF0ZV9pbl90cmFuc2FjdGlv
bl93aXRoX251bWVyaWNfaWRfaG9sZGVyCitmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxl
X3JlcG9ydF9wcm9jZXNzCiAKIAogY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RI
YW5kbGVyKToKQEAgLTYwLDg3ICs0OSw0NSBAQCBjbGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIu
UmVxdWVzdEhhbmRsCiAgICAgICAgIGxvZyA9IFJlcG9ydExvZyh0aW1lc3RhbXA9ZGF0ZXRpbWUu
bm93KCksIGhlYWRlcnM9aGVhZGVycywgcGF5bG9hZD1yZXF1ZXN0X2JvZHlfd2l0aG91dF9wYXNz
d29yZCkKICAgICAgICAgbG9nLnB1dCgpCiAKKyAgICAgICAgc2VsZi5fZW5jb3VudGVyZWRfZXJy
b3IgPSBGYWxzZQorCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2JvZHkgPSBqc29u
LmxvYWRzKHNlbGYucmVxdWVzdC5ib2R5KQorICAgICAgICAgICAgcGFyc2VkUGF5bG9hZCA9IGpz
b24ubG9hZHMoc2VsZi5yZXF1ZXN0LmJvZHkpCisgICAgICAgICAgICBwYXNzd29yZCA9IHBhcnNl
ZFBheWxvYWQuZ2V0KCdwYXNzd29yZCcsICcnKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoK
ICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgcGF5
bG9hZCBhcyBhIGpzb24uIFJlcG9ydCBrZXk6ICVkJyAlIGxvZy5rZXkoKS5pZCgpKQogCi0gICAg
ICAgIGJ1aWxkZXIgPSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJ1
aWxkZXIsICdidWlsZGVyLW5hbWUnKQotICAgICAgICBicmFuY2ggPSBzZWxmLl9tb2RlbF9ieV9r
ZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJyYW5jaCwgJ2JyYW5jaCcpCi0gICAgICAgIHBsYXRm
b3JtID0gc2VsZi5fbW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihQbGF0Zm9ybSwg
J3BsYXRmb3JtJykKLSAgICAgICAgYnVpbGRfbnVtYmVyID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5
KCdidWlsZC1udW1iZXInKQotICAgICAgICB0aW1lc3RhbXAgPSBzZWxmLl90aW1lc3RhbXBfaW5f
Ym9keSgpCi0gICAgICAgIHJldmlzaW9uID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQt
cmV2aXNpb24nKQotICAgICAgICBjaHJvbWl1bV9yZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5f
Ym9keSgnd2Via2l0LXJldmlzaW9uJykgaWYgJ2Nocm9taXVtLXJldmlzaW9uJyBpbiBzZWxmLl9i
b2R5IGVsc2UgTm9uZQorICAgICAgICBidWlsZGVyID0gbG9nLmJ1aWxkZXIoKQorICAgICAgICBi
dWlsZGVyICE9IE5vbmUgb3Igc2VsZi5fb3V0cHV0KCdObyBidWlsZGVyIG5hbWVkICIlcyInICUg
bG9nLmdldF92YWx1ZSgnYnVpbGRlci1uYW1lJykpCisgICAgICAgIGxvZy5icmFuY2goKSAhPSBO
b25lIG9yIHNlbGYuX291dHB1dCgnTm8gYnJhbmNoIG5hbWVkICIlcyInICUgbG9nLmdldF92YWx1
ZSgnYnJhbmNoJykpCisgICAgICAgIGxvZy5wbGF0Zm9ybSgpICE9IE5vbmUgb3Igc2VsZi5fb3V0
cHV0KCdObyBwbGF0Zm9ybSBuYW1lZCAiJXMiJyAlIGxvZy5nZXRfdmFsdWUoJ3BsYXRmb3JtJykp
CisgICAgICAgIGxvZy5idWlsZF9udW1iZXIoKSAhPSBOb25lIG9yIHNlbGYuX291dHB1dCgnSW52
YWxpZCBidWlsZCBudW1iZXIgIiVzIicgJSBsb2cuZ2V0X3ZhbHVlKCdidWlsZC1udW1iZXInKSkK
KyAgICAgICAgbG9nLnRpbWVzdGFtcCgpICE9IE5vbmUgb3Igc2VsZi5fb3V0cHV0KCdJbnZhbGlk
IHRpbWVzdGFtcCAiJXMiJyAlIGxvZy5nZXRfdmFsdWUoJ3RpbWVzdGFtcCcpKQorICAgICAgICBs
b2cud2Via2l0X3JldmlzaW9uKCkgIT0gTm9uZSBvciBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgd2Vi
a2l0IHJldmlzaW9uICIlcyInICUgbG9nLmdldF92YWx1ZSgnd2Via2l0LXJldmlzaW9uJykpCiAK
ICAgICAgICAgZmFpbGVkID0gRmFsc2UKLSAgICAgICAgaWYgYnVpbGRlciBhbmQgbm90IChzZWxm
LmJ5cGFzc19hdXRoZW50aWNhdGlvbigpIG9yIGJ1aWxkZXIuYXV0aGVudGljYXRlKHNlbGYuX2Jv
ZHkuZ2V0KCdwYXNzd29yZCcsICcnKSkpOgorICAgICAgICBpZiBidWlsZGVyIGFuZCBub3QgKHNl
bGYuYnlwYXNzX2F1dGhlbnRpY2F0aW9uKCkgb3IgYnVpbGRlci5hdXRoZW50aWNhdGUocGFzc3dv
cmQpKToKICAgICAgICAgICAgIHNlbGYuX291dHB1dCgnQXV0aGVudGljYXRpb24gZmFpbGVkJykK
LSAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKIAotICAgICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0
c19hcmVfdmFsaWQoKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHNfYXJlX3ZhbGlkKGxv
Zyk6CiAgICAgICAgICAgICBzZWxmLl9vdXRwdXQoIlRoZSBwYXlsb2FkIGRvZXNuJ3QgY29udGFp
biByZXN1bHRzIG9yIHJlc3VsdHMgYXJlIG1hbGZvcm1lZCIpCi0gICAgICAgICAgICBmYWlsZWQg
PSBUcnVlCi0KLSAgICAgICAgaWYgbm90IChidWlsZGVyIGFuZCBicmFuY2ggYW5kIHBsYXRmb3Jt
IGFuZCBidWlsZF9udW1iZXIgYW5kIHJldmlzaW9uIGFuZCB0aW1lc3RhbXApIG9yIGZhaWxlZDoK
LSAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGJ1aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxk
X2lmX3Bvc3NpYmxlKGJ1aWxkZXIsIGJ1aWxkX251bWJlciwgYnJhbmNoLCBwbGF0Zm9ybSwgdGlt
ZXN0YW1wLCByZXZpc2lvbiwgY2hyb21pdW1fcmV2aXNpb24pCi0gICAgICAgIGlmIG5vdCBidWls
ZDoKKyAgICAgICAgaWYgc2VsZi5fZW5jb3VudGVyZWRfZXJyb3I6CiAgICAgICAgICAgICByZXR1
cm4KIAotICAgICAgICBkZWYgX2Zsb2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKLSAgICAg
ICAgICAgIHZhbHVlID0gZGljdGlvbmFyeS5nZXQoa2V5KQotICAgICAgICAgICAgaWYgdmFsdWU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gc2VsZi5fYm9keVsncmVz
dWx0cyddLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgdGVzdCA9IHNlbGYuX2FkZF90ZXN0X2lm
X25lZWRlZCh0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pCi0gICAgICAgICAgICBzY2hlZHVs
ZV9ydW5zX3VwZGF0ZSh0ZXN0LmlkLCBicmFuY2guaWQsIHBsYXRmb3JtLmlkKQotICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIGRpY3QpOgotICAgICAgICAgICAgICAgIFRlc3RSZXN1
bHQobmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHRbJ2F2Zydd
KSwgdmFsdWVNZWRpYW49X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWVkaWFuJyksCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlU3RkZXY9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnc3RkZXYnKSwg
dmFsdWVNaW49X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWluJyksIHZhbHVlTWF4PV9mbG9hdF9v
cl9ub25lKHJlc3VsdCwgJ21heCcpKS5wdXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBUZXN0UmVzdWx0KG5hbWU9dGVzdF9uYW1lLCBidWlsZD1idWlsZCwgdmFsdWU9Zmxv
YXQocmVzdWx0KSkucHV0KCkKLQotICAgICAgICBsb2cgPSBSZXBvcnRMb2cuZ2V0KGxvZy5rZXko
KSkKLSAgICAgICAgbG9nLmRlbGV0ZSgpCi0KLSAgICAgICAgIyBXZSBuZWVkIHRvIHVwZGF0ZSBk
YXNoYm9hcmQgYW5kIG1hbmlmZXN0IGJlY2F1c2UgdGhleSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGV4
aXN0YW5jZSBvZiB0ZXN0IHJlc3VsdHMKLSAgICAgICAgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0
ZSgpCi0gICAgICAgIHNjaGVkdWxlX21hbmlmZXN0X3VwZGF0ZSgpCi0KLSAgICAgICAgcmV0dXJu
IHNlbGYuX291dHB1dCgnT0snKQotCi0gICAgZGVmIF9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5
X29yX2Vycm9yKHNlbGYsIG1vZGVsLCBrZXlOYW1lKToKLSAgICAgICAga2V5ID0gc2VsZi5fYm9k
eS5nZXQoa2V5TmFtZSwgJycpCi0gICAgICAgIGluc3RhbmNlID0ga2V5IGFuZCBtb2RlbC5nZXRf
Ynlfa2V5X25hbWUoa2V5KQotICAgICAgICBpZiBub3QgaW5zdGFuY2U6Ci0gICAgICAgICAgICBz
ZWxmLl9vdXRwdXQoJ1RoZXJlIGFyZSBubyAlcyBuYW1lZCAiJXMiJyAlIChtb2RlbC5fX25hbWVf
Xy5sb3dlcigpLCBrZXkpKQotICAgICAgICByZXR1cm4gaW5zdGFuY2UKLQotICAgIGRlZiBfaW50
ZWdlcl9pbl9ib2R5KHNlbGYsIGtleSk6Ci0gICAgICAgIHZhbHVlID0gc2VsZi5fYm9keS5nZXQo
a2V5LCAnJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGludCh2YWx1ZSkKLSAg
ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgnSW52YWxpZCAl
czogIiVzIicgJSAoa2V5LnJlcGxhY2UoJy0nLCAnICcpLCB2YWx1ZSkpCi0KLSAgICBkZWYgX3Rp
bWVzdGFtcF9pbl9ib2R5KHNlbGYpOgotICAgICAgICB2YWx1ZSA9IHNlbGYuX2JvZHkuZ2V0KCd0
aW1lc3RhbXAnLCAnJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1l
LmZyb210aW1lc3RhbXAoaW50KHZhbHVlKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX291dHB1dCgnRmFpbGVkIHRvIHBhcnNlIHRoZSB0aW1lc3RhbXA6ICVzJyAl
IHZhbHVlKQorICAgICAgICBsb2cuY29tbWl0ID0gVHJ1ZQorICAgICAgICBsb2cucHV0KCkKKyAg
ICAgICAgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MobG9nKQorICAgICAgICBzZWxmLl9vdXRwdXQo
Ik9LIikKIAogICAgIGRlZiBfb3V0cHV0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLl9l
bmNvdW50ZXJlZF9lcnJvciA9IFRydWUKICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUo
bWVzc2FnZSArICdcbicpCiAKICAgICBkZWYgYnlwYXNzX2F1dGhlbnRpY2F0aW9uKHNlbGYpOgog
ICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRlZiBfcmVzdWx0c19hcmVfdmFsaWQoc2VsZik6
CisgICAgZGVmIF9yZXN1bHRzX2FyZV92YWxpZChzZWxmLCBsb2cpOgogCiAgICAgICAgIGRlZiBf
aXNfZmxvYXRfY29udmVydGlibGUodmFsdWUpOgogICAgICAgICAgICAgdHJ5OgpAQCAtMTQ4LDEx
ICs5NSwxMyBAQCBjbGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJv
cjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBpZiAncmVzdWx0cycg
bm90IGluIHNlbGYuX2JvZHkgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5fYm9keVsncmVzdWx0cydd
LCBkaWN0KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9nLnJlc3VsdHMoKSwgZGljdCk6
CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBmb3IgdGVzdFJlc3VsdCBpbiBz
ZWxmLl9ib2R5WydyZXN1bHRzJ10udmFsdWVzKCk6CisgICAgICAgIGZvciB0ZXN0UmVzdWx0IGlu
IGxvZy5yZXN1bHRzKCkudmFsdWVzKCk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RS
ZXN1bHQsIGRpY3QpOgogICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0UmVzdWx0LnZh
bHVlcygpOgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgX2lzX2Zsb2F0X2NvbnZlcnRpYmxl
KHZhbHVlKToKQEAgLTE2NSwzNCArMTE0LDYgQEAgY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAy
LlJlcXVlc3RIYW5kbAogCiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgX2NyZWF0ZV9i
dWlsZF9pZl9wb3NzaWJsZShzZWxmLCBidWlsZGVyLCBidWlsZF9udW1iZXIsIGJyYW5jaCwgcGxh
dGZvcm0sIHRpbWVzdGFtcCwgcmV2aXNpb24sIGNocm9taXVtX3JldmlzaW9uKToKLSAgICAgICAg
a2V5X25hbWUgPSBidWlsZGVyLm5hbWUgKyAnOicgKyBzdHIoaW50KHRpbWUubWt0aW1lKHRpbWVz
dGFtcC50aW1ldHVwbGUoKSkpKQotCi0gICAgICAgIGRlZiBleGVjdXRlKCk6Ci0gICAgICAgICAg
ICBidWlsZCA9IEJ1aWxkLmdldF9ieV9rZXlfbmFtZShrZXlfbmFtZSkKLSAgICAgICAgICAgIGlm
IGJ1aWxkOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ1RoZSBidWlsZCBh
dCAlcyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMnICUgKHN0cih0aW1lc3RhbXApLCBidWlsZGVyLm5h
bWUpKQotCi0gICAgICAgICAgICByZXR1cm4gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09
cGxhdGZvcm0sIGJ1aWxkZXI9YnVpbGRlciwgYnVpbGROdW1iZXI9YnVpbGRfbnVtYmVyLAotICAg
ICAgICAgICAgICAgIHRpbWVzdGFtcD10aW1lc3RhbXAsIHJldmlzaW9uPXJldmlzaW9uLCBjaHJv
bWl1bVJldmlzaW9uPWNocm9taXVtX3JldmlzaW9uLCBrZXlfbmFtZT1rZXlfbmFtZSkucHV0KCkK
LSAgICAgICAgcmV0dXJuIGRiLnJ1bl9pbl90cmFuc2FjdGlvbihleGVjdXRlKQotCi0gICAgZGVm
IF9hZGRfdGVzdF9pZl9uZWVkZWQoc2VsZiwgdGVzdF9uYW1lLCBicmFuY2gsIHBsYXRmb3JtKToK
LQotICAgICAgICBkZWYgZXhlY3V0ZShpZCk6Ci0gICAgICAgICAgICB0ZXN0ID0gVGVzdC5nZXRf
Ynlfa2V5X25hbWUodGVzdF9uYW1lKQotICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBOb25lCi0g
ICAgICAgICAgICBpZiBub3QgdGVzdDoKLSAgICAgICAgICAgICAgICB0ZXN0ID0gVGVzdChpZD1p
ZCwgbmFtZT10ZXN0X25hbWUsIGtleV9uYW1lPXRlc3RfbmFtZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IHRlc3QKLSAgICAgICAgICAgIGlmIGJyYW5jaC5rZXkoKSBub3QgaW4gdGVz
dC5icmFuY2hlczoKLSAgICAgICAgICAgICAgICB0ZXN0LmJyYW5jaGVzLmFwcGVuZChicmFuY2gu
a2V5KCkpCi0gICAgICAgICAgICBpZiBwbGF0Zm9ybS5rZXkoKSBub3QgaW4gdGVzdC5wbGF0Zm9y
bXM6Ci0gICAgICAgICAgICAgICAgdGVzdC5wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3JtLmtleSgp
KQotICAgICAgICAgICAgdGVzdC5wdXQoKQotICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
Ci0gICAgICAgIHJldHVybiBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hv
bGRlcihleGVjdXRlKSBvciBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25hbWUpCi0KIAogY2xh
c3MgQWRtaW5SZXBvcnRIYW5kbGVyKFJlcG9ydEhhbmRsZXIpOgogICAgIGRlZiBieXBhc3NfYXV0
aGVudGljYXRpb24oc2VsZik6CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9yZXBvcnRfbG9ncy55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL3JlcG9ydF9sb2dzLnlhbWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy93ZWJr
aXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfbG9ncy55YW1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cHJlPnt7IHN0YXR1
cyB9fTwvcHJlPgorPGgxPlJlcG9ydCBsb2dzPC9oMT4KKworPHN0eWxlIHR5cGU9InRleHQvY3Nz
IiBzY29wZWQ+CisKK3RhYmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlcjogc29saWQgMXB4ICNjY2M7
IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IH0KK3RkIHsgYm9yZGVyOiBzb2xpZCAxcHggI2Nj
YzsgcGFkZGluZzogNXB4OyB9CisuY29udHJvbCBjb2RlIHsgZGlzcGxheTogbm9uZTsgfQorY29k
ZSB7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgfQorZm9ybSB7IGRpc3BsYXk6IGlubGluZTsgfQor
Cis8L3N0eWxlPgorPHNjcmlwdD4KKworJCA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoaWQpOyB9CisKK2Z1bmN0aW9uIHNob3coaWQpIHsKKyAgICB2YXIg
cm93ID0gJCgncm93XycgKyBpZCk7CisgICAgdmFyIGNvZGUgPSByb3cucXVlcnlTZWxlY3Rvcign
Y29kZScpOworICAgIGlmICghY29kZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBuZXdSb3cg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOworICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTsKKyAgICBuZXdSb3cuZmlyc3RDaGlsZC5hcHBl
bmRDaGlsZChjb2RlKTsKKyAgICBuZXdSb3cuZmlyc3RDaGlsZC5jb2xTcGFuID0gODsKKyAgICBy
b3cucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Um93LCByb3cubmV4dFNpYmxpbmcpOworICAg
IHRyeSB7CisgICAgICAgIGNvZGUudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShKU09OLnBh
cnNlKGNvZGUudGV4dENvbnRlbnQpLCBudWxsLCAyKTsKKyAgICB9IGNhdGNoIChlKSB7IH0KK30K
KworZnVuY3Rpb24gc3VibWl0KGZvcm0sIGV2ZW50KSB7CisgICAgaWYgKCFjb25maXJtKCdBcmUg
eW91IHN1cmU/JykpCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9CisKKzwvc2Ny
aXB0PgorPHRhYmxlPgorPHRoZWFkPgorPHRyPgorICAgIDx0ZD5JZDwvdGQ+CisgICAgPHRkPkJy
YW5jaDwvdGQ+CisgICAgPHRkPlBsYXRmb3JtPC90ZD4KKyAgICA8dGQ+QnVpbGRlcjwvdGQ+Cisg
ICAgPHRkPkJ1aWxkPC90ZD4KKyAgICA8dGQ+V2ViS2l0IHJldmlzaW9uPC90ZD4KKyAgICA8dGQ+
Q2hyb21pdW0gcmV2aXNpb248L3RkPgorICAgIDx0ZCBjbGFzcz0iY29udHJvbCI+UGF5bG9hZDwv
dGQ+Cis8L3RyPgorPC90aGVhZD4KKzx0Ym9keT4KK3slIGZvciBsb2cgaW4gbG9ncyAlfQorPHRy
IGlkPSJyb3dfe3sgbG9nLmtleS5pZCB9fSI+CisgICAgPHRkPnt7IGxvZy5rZXkuaWQgfX08L3Rk
PgorICAgIDx0ZD57eyBsb2cuYnJhbmNoLm5hbWUgfX08L3RkPgorICAgIDx0ZD57eyBsb2cucGxh
dGZvcm0ubmFtZSB9fTwvdGQ+CisgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9idWlsZC53ZWJraXQu
b3JnL2J1aWxkZXJzL3t7IGxvZy5idWlsZGVyLm5hbWUgfX0vIj57eyBsb2cuYnVpbGRlci5uYW1l
IH19PC9hPjwvdGQ+CisgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9idWlsZC53ZWJraXQub3JnL2J1
aWxkZXJzL3t7IGxvZy5idWlsZGVyLm5hbWUgfX0vYnVpbGRzL3t7IGxvZy5idWlsZF9udW1iZXIg
fX0iPnt7IGxvZy5idWlsZF9udW1iZXIgfX08L2E+PC90ZD4KKyAgICA8dGQ+PGEgaHJlZj0iaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQve3sgbG9nLndlYmtpdF9yZXZpc2lvbiB9fSI+
e3sgbG9nLndlYmtpdF9yZXZpc2lvbiB9fTwvYT48L3RkPgorICAgIDx0ZD48YSBocmVmPSJodHRw
Oi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lP3ZpZXc9cmV2JmFtcDtyZXZpc2lvbj17
eyBsb2cuY2hyb21pdW1fcmV2aXNpb24gfX0iPnt7IGxvZy5jaHJvbWl1bV9yZXZpc2lvbiB9fTwv
YT48L3RkPgorICAgIDx0ZCBjbGFzcz0iY29udHJvbCI+PGJ1dHRvbiBvbmNsaWNrPSJzaG93KHt7
IGxvZy5rZXkuaWQgfX0pIj5TaG93PC9idXR0b24+CisgICAgICAgIDxmb3JtIG1ldGhvZD0icG9z
dCIgYWN0aW9uPSIvYWRtaW4vcmVwb3J0LWxvZ3MiIG9uc3VibWl0PSJzdWJtaXQodGhpcywgZXZl
bnQpIj4KKyAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaWQiIHZhbHVlPSJ7eyBs
b2cua2V5LmlkIH19Ij4KKyAgICAgICAgPGJ1dHRvbiBuYW1lPSJjb21taXQiIHZhbHVlPSJ0cnVl
Ij5Db21taXQ8L2J1dHRvbj4KKyAgICAgICAgPGJ1dHRvbiBuYW1lPSJkZWxldGUiIHZhbHVlPSJ0
cnVlIj5EZWxldGU8L2J1dHRvbj48L2Zvcm0+CisgICAgICAgIDxjb2RlPnt7IGxvZy5wYXlsb2Fk
IH19PC9jb2RlPjwvdGQ+Cis8L3RyPgoreyUgZW5kZm9yICV9Cis8L3Rib2R5PgorPC90YWJsZT4K
KworPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5j
b20vcmVwb3J0X2xvZ3NfaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQt
cGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfbG9nc19oYW5kbGVyLnB5CShyZXZpc2lvbiAwKQorKysg
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3NfaGFuZGxlci5weQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHdlYmFwcDIKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQu
d2ViYXBwIGltcG9ydCB0ZW1wbGF0ZQorCitpbXBvcnQgb3MKKworZnJvbSBjb250cm9sbGVyIGlt
cG9ydCBzY2hlZHVsZV9yZXBvcnRfcHJvY2VzcworZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExv
ZworCisKK2NsYXNzIFJlcG9ydExvZ3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgor
ICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHRlbXBs
YXRlLnJlbmRlcigncmVwb3J0X2xvZ3MueWFtbCcsIHsnbG9ncyc6IFJlcG9ydExvZy5hbGwoKX0p
KQorCisgICAgZGVmIHBvc3Qoc2VsZik6CisgICAgICAgIGNvbW1pdCA9IGJvb2woc2VsZi5yZXF1
ZXN0LmdldCgnY29tbWl0JykpCisgICAgICAgIGRlbGV0ZSA9IGJvb2woc2VsZi5yZXF1ZXN0Lmdl
dCgnZGVsZXRlJykpCisgICAgICAgIGlmIGNvbW1pdCA9PSBkZWxldGU6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZXJyb3IoJ0ludmFsaWQgcmVxdWVzdCcpCisKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgbG9nID0gUmVwb3J0TG9nLmdldF9ieV9pZChpbnQoc2VsZi5yZXF1ZXN0LmdldCgn
aWQnLCAwKSkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcnJv
cignSW52YWxpZCBsb2cgaWQgIiVzIicgJSBzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsICcnKSkKKwor
ICAgICAgICBpZiBub3QgbG9nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vycm9yKCdObyBs
b2cgZm91bmQgZm9yICIlcyInICUgc2VsZi5yZXF1ZXN0LmdldCgnaWQnLCAnJykpCisKKyAgICAg
ICAgaWYgY29tbWl0OgorICAgICAgICAgICAgbG9nLmNvbW1pdCA9IFRydWUKKyAgICAgICAgICAg
IGxvZy5wdXQoKQorICAgICAgICAgICAgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MobG9nKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmRlbGV0ZSgpCisKKyAgICAgICAgc2VsZi5yZXNw
b25zZS5vdXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCdyZXBvcnRfbG9ncy55YW1sJywgeydsb2dz
JzogUmVwb3J0TG9nLmFsbCgpLCAnc3RhdHVzJzogJ09LJ30pKQorCisgICAgZGVmIF9lcnJvcihz
ZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5
cGUnXSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JworICAgICAgICBzZWxmLnJlc3BvbnNl
Lm91dC53cml0ZShtZXNzYWdlICsgJ1xuJykKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X3Byb2Nlc3NfaGFuZGxlci5weQkocmV2
aXNpb24gMTA3MzMxKQkoZnJvbSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBv
cnRfaGFuZGxlci5weToxMDczMzEpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2Vi
YXBwMgorZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKKworaW1wb3J0IGpzb24K
K2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisK
K2Zyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfcnVuc191cGRhdGUKK2Zyb20gY29udHJv
bGxlciBpbXBvcnQgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZQorZnJvbSBjb250cm9sbGVyIGlt
cG9ydCBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUKK2Zyb20gbW9kZWxzIGltcG9ydCBCdWlsZGVy
Citmcm9tIG1vZGVscyBpbXBvcnQgQnJhbmNoCitmcm9tIG1vZGVscyBpbXBvcnQgQnVpbGQKK2Zy
b20gbW9kZWxzIGltcG9ydCBOdW1lcmljSWRIb2xkZXIKK2Zyb20gbW9kZWxzIGltcG9ydCBQbGF0
Zm9ybQorZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExvZworZnJvbSBtb2RlbHMgaW1wb3J0IFRl
c3QKK2Zyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0Citmcm9tIG1vZGVscyBpbXBvcnQgY3Jl
YXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIKKworCitjbGFzcyBSZXBv
cnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBwb3N0KHNlbGYpOgor
ICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxh
aW47IGNoYXJzZXQ9dXRmLTgnCisKKyAgICAgICAgaGVhZGVycyA9ICJcbiIuam9pbihba2V5ICsg
JzogJyArIHZhbHVlIGZvciBrZXksIHZhbHVlIGluIHNlbGYucmVxdWVzdC5oZWFkZXJzLml0ZW1z
KCldKQorCisgICAgICAgICMgRG8gYXMgYmVzdCBhcyB3ZSBjYW4gdG8gcmVtb3ZlIHRoZSBwYXNz
d29yZAorICAgICAgICByZXF1ZXN0X2JvZHlfd2l0aG91dF9wYXNzd29yZCA9IHJlLnN1YihyJyJw
YXNzd29yZCJccyo6XHMqIi4rPyIsJywgJycsIHNlbGYucmVxdWVzdC5ib2R5KQorICAgICAgICBs
b2cgPSBSZXBvcnRMb2codGltZXN0YW1wPWRhdGV0aW1lLm5vdygpLCBoZWFkZXJzPWhlYWRlcnMs
IHBheWxvYWQ9cmVxdWVzdF9ib2R5X3dpdGhvdXRfcGFzc3dvcmQpCisgICAgICAgIGxvZy5wdXQo
KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2JvZHkgPSBqc29uLmxvYWRzKHNl
bGYucmVxdWVzdC5ib2R5KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLl9vdXRwdXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgcGF5bG9hZCBhcyBhIGpz
b24uIFJlcG9ydCBrZXk6ICVkJyAlIGxvZy5rZXkoKS5pZCgpKQorCisgICAgICAgIGJ1aWxkZXIg
PSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJ1aWxkZXIsICdidWls
ZGVyLW5hbWUnKQorICAgICAgICBicmFuY2ggPSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9i
b2R5X29yX2Vycm9yKEJyYW5jaCwgJ2JyYW5jaCcpCisgICAgICAgIHBsYXRmb3JtID0gc2VsZi5f
bW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihQbGF0Zm9ybSwgJ3BsYXRmb3JtJykK
KyAgICAgICAgYnVpbGRfbnVtYmVyID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCdidWlsZC1udW1i
ZXInKQorICAgICAgICB0aW1lc3RhbXAgPSBzZWxmLl90aW1lc3RhbXBfaW5fYm9keSgpCisgICAg
ICAgIHJldmlzaW9uID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQtcmV2aXNpb24nKQor
ICAgICAgICBjaHJvbWl1bV9yZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnd2Via2l0
LXJldmlzaW9uJykgaWYgJ2Nocm9taXVtLXJldmlzaW9uJyBpbiBzZWxmLl9ib2R5IGVsc2UgTm9u
ZQorCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGlmIGJ1aWxkZXIgYW5kIG5vdCAo
c2VsZi5ieXBhc3NfYXV0aGVudGljYXRpb24oKSBvciBidWlsZGVyLmF1dGhlbnRpY2F0ZShzZWxm
Ll9ib2R5LmdldCgncGFzc3dvcmQnLCAnJykpKToKKyAgICAgICAgICAgIHNlbGYuX291dHB1dCgn
QXV0aGVudGljYXRpb24gZmFpbGVkJykKKyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKworICAg
ICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0c19hcmVfdmFsaWQoKToKKyAgICAgICAgICAgIHNlbGYu
X291dHB1dCgiVGhlIHBheWxvYWQgZG9lc24ndCBjb250YWluIHJlc3VsdHMgb3IgcmVzdWx0cyBh
cmUgbWFsZm9ybWVkIikKKyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKworICAgICAgICBpZiBu
b3QgKGJ1aWxkZXIgYW5kIGJyYW5jaCBhbmQgcGxhdGZvcm0gYW5kIGJ1aWxkX251bWJlciBhbmQg
cmV2aXNpb24gYW5kIHRpbWVzdGFtcCkgb3IgZmFpbGVkOgorICAgICAgICAgICAgcmV0dXJuCisK
KyAgICAgICAgYnVpbGQgPSBzZWxmLl9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUoYnVpbGRlciwg
YnVpbGRfbnVtYmVyLCBicmFuY2gsIHBsYXRmb3JtLCB0aW1lc3RhbXAsIHJldmlzaW9uLCBjaHJv
bWl1bV9yZXZpc2lvbikKKyAgICAgICAgaWYgbm90IGJ1aWxkOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgZGVmIF9mbG9hdF9vcl9ub25lKGRpY3Rpb25hcnksIGtleSk6CisgICAgICAg
ICAgICB2YWx1ZSA9IGRpY3Rpb25hcnkuZ2V0KGtleSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdCh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisKKyAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVzdWx0IGluIHNlbGYuX2JvZHlbJ3Jlc3Vs
dHMnXS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9hZGRfdGVzdF9pZl9u
ZWVkZWQodGVzdF9uYW1lLCBicmFuY2gsIHBsYXRmb3JtKQorICAgICAgICAgICAgc2NoZWR1bGVf
cnVuc191cGRhdGUodGVzdC5pZCwgYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCkKKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UocmVzdWx0LCBkaWN0KToKKyAgICAgICAgICAgICAgICBUZXN0UmVzdWx0
KG5hbWU9dGVzdF9uYW1lLCBidWlsZD1idWlsZCwgdmFsdWU9ZmxvYXQocmVzdWx0WydhdmcnXSks
IHZhbHVlTWVkaWFuPV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21lZGlhbicpLAorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZVN0ZGV2PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ3N0ZGV2JyksIHZh
bHVlTWluPV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21pbicpLCB2YWx1ZU1heD1fZmxvYXRfb3Jf
bm9uZShyZXN1bHQsICdtYXgnKSkucHV0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0
KHJlc3VsdCkpLnB1dCgpCisKKyAgICAgICAgbG9nID0gUmVwb3J0TG9nLmdldChsb2cua2V5KCkp
CisgICAgICAgIGxvZy5kZWxldGUoKQorCisgICAgICAgICMgV2UgbmVlZCB0byB1cGRhdGUgZGFz
aGJvYXJkIGFuZCBtYW5pZmVzdCBiZWNhdXNlIHRoZXkgYXJlIGFmZmVjdGVkIGJ5IHRoZSBleGlz
dGFuY2Ugb2YgdGVzdCByZXN1bHRzCisgICAgICAgIHNjaGVkdWxlX2Rhc2hib2FyZF91cGRhdGUo
KQorICAgICAgICBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUoKQorCisgICAgICAgIHJldHVybiBz
ZWxmLl9vdXRwdXQoJ09LJykKKworICAgIGRlZiBfbW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9v
cl9lcnJvcihzZWxmLCBtb2RlbCwga2V5TmFtZSk6CisgICAgICAgIGtleSA9IHNlbGYuX2JvZHku
Z2V0KGtleU5hbWUsICcnKQorICAgICAgICBpbnN0YW5jZSA9IGtleSBhbmQgbW9kZWwuZ2V0X2J5
X2tleV9uYW1lKGtleSkKKyAgICAgICAgaWYgbm90IGluc3RhbmNlOgorICAgICAgICAgICAgc2Vs
Zi5fb3V0cHV0KCdUaGVyZSBhcmUgbm8gJXMgbmFtZWQgIiVzIicgJSAobW9kZWwuX19uYW1lX18u
bG93ZXIoKSwga2V5KSkKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlCisKKyAgICBkZWYgX2ludGVn
ZXJfaW5fYm9keShzZWxmLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuX2JvZHkuZ2V0KGtl
eSwgJycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUpCisgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgJXM6
ICIlcyInICUgKGtleS5yZXBsYWNlKCctJywgJyAnKSwgdmFsdWUpKQorCisgICAgZGVmIF90aW1l
c3RhbXBfaW5fYm9keShzZWxmKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLl9ib2R5LmdldCgndGlt
ZXN0YW1wJywgJycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5m
cm9tdGltZXN0YW1wKGludCh2YWx1ZSkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9vdXRwdXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgdGltZXN0YW1wOiAlcycgJSB2
YWx1ZSkKKworICAgIGRlZiBfb3V0cHV0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLnJl
c3BvbnNlLm91dC53cml0ZShtZXNzYWdlICsgJ1xuJykKKworICAgIGRlZiBieXBhc3NfYXV0aGVu
dGljYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9yZXN1bHRz
X2FyZV92YWxpZChzZWxmKToKKworICAgICAgICBkZWYgX2lzX2Zsb2F0X2NvbnZlcnRpYmxlKHZh
bHVlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmbG9hdCh2YWx1ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiAncmVzdWx0cycgbm90
IGluIHNlbGYuX2JvZHkgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5fYm9keVsncmVzdWx0cyddLCBk
aWN0KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZvciB0ZXN0UmVzdWx0
IGluIHNlbGYuX2JvZHlbJ3Jlc3VsdHMnXS52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodGVzdFJlc3VsdCwgZGljdCk6CisgICAgICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRl
c3RSZXN1bHQudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaXNfZmxvYXRf
Y29udmVydGlibGUodmFsdWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgICAgICAgICAgICAgaWYgJ2F2Zycgbm90IGluIHRlc3RSZXN1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBpZiBub3QgX2lzX2Zsb2F0X2NvbnZlcnRpYmxlKHRlc3RSZXN1bHQpOgorICAgICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2Ny
ZWF0ZV9idWlsZF9pZl9wb3NzaWJsZShzZWxmLCBidWlsZGVyLCBidWlsZF9udW1iZXIsIGJyYW5j
aCwgcGxhdGZvcm0sIHRpbWVzdGFtcCwgcmV2aXNpb24sIGNocm9taXVtX3JldmlzaW9uKToKKyAg
ICAgICAga2V5X25hbWUgPSBidWlsZGVyLm5hbWUgKyAnOicgKyBzdHIoaW50KHRpbWUubWt0aW1l
KHRpbWVzdGFtcC50aW1ldHVwbGUoKSkpKQorCisgICAgICAgIGRlZiBleGVjdXRlKCk6CisgICAg
ICAgICAgICBidWlsZCA9IEJ1aWxkLmdldF9ieV9rZXlfbmFtZShrZXlfbmFtZSkKKyAgICAgICAg
ICAgIGlmIGJ1aWxkOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ1RoZSBi
dWlsZCBhdCAlcyBhbHJlYWR5IGV4aXN0cyBmb3IgJXMnICUgKHN0cih0aW1lc3RhbXApLCBidWls
ZGVyLm5hbWUpKQorCisgICAgICAgICAgICByZXR1cm4gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxh
dGZvcm09cGxhdGZvcm0sIGJ1aWxkZXI9YnVpbGRlciwgYnVpbGROdW1iZXI9YnVpbGRfbnVtYmVy
LAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD10aW1lc3RhbXAsIHJldmlzaW9uPXJldmlzaW9u
LCBjaHJvbWl1bVJldmlzaW9uPWNocm9taXVtX3JldmlzaW9uLCBrZXlfbmFtZT1rZXlfbmFtZSku
cHV0KCkKKyAgICAgICAgcmV0dXJuIGRiLnJ1bl9pbl90cmFuc2FjdGlvbihleGVjdXRlKQorCisg
ICAgZGVmIF9hZGRfdGVzdF9pZl9uZWVkZWQoc2VsZiwgdGVzdF9uYW1lLCBicmFuY2gsIHBsYXRm
b3JtKToKKworICAgICAgICBkZWYgZXhlY3V0ZShpZCk6CisgICAgICAgICAgICB0ZXN0ID0gVGVz
dC5nZXRfYnlfa2V5X25hbWUodGVzdF9uYW1lKQorICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBO
b25lCisgICAgICAgICAgICBpZiBub3QgdGVzdDoKKyAgICAgICAgICAgICAgICB0ZXN0ID0gVGVz
dChpZD1pZCwgbmFtZT10ZXN0X25hbWUsIGtleV9uYW1lPXRlc3RfbmFtZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm5WYWx1ZSA9IHRlc3QKKyAgICAgICAgICAgIGlmIGJyYW5jaC5rZXkoKSBub3Qg
aW4gdGVzdC5icmFuY2hlczoKKyAgICAgICAgICAgICAgICB0ZXN0LmJyYW5jaGVzLmFwcGVuZChi
cmFuY2gua2V5KCkpCisgICAgICAgICAgICBpZiBwbGF0Zm9ybS5rZXkoKSBub3QgaW4gdGVzdC5w
bGF0Zm9ybXM6CisgICAgICAgICAgICAgICAgdGVzdC5wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3Jt
LmtleSgpKQorICAgICAgICAgICAgdGVzdC5wdXQoKQorICAgICAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlCisgICAgICAgIHJldHVybiBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmlj
X2lkX2hvbGRlcihleGVjdXRlKSBvciBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25hbWUpCisK
KworY2xhc3MgQWRtaW5SZXBvcnRIYW5kbGVyKFJlcG9ydEhhbmRsZXIpOgorICAgIGRlZiBieXBh
c3NfYXV0aGVudGljYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBXZWJz
aXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9j
ZXNzX2hhbmRsZXIucHkJKHJldmlzaW9uIDEwNzMzMSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJm
LmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYzICszMCwyNyBAQAogaW1wb3J0IHdlYmFwcDIKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5l
eHQgaW1wb3J0IGRiCiAKLWltcG9ydCBqc29uCi1pbXBvcnQgcmUKIGltcG9ydCB0aW1lCi1mcm9t
IGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQogCiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVk
dWxlX3J1bnNfdXBkYXRlCiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX2Rhc2hib2Fy
ZF91cGRhdGUKIGZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRl
Ci1mcm9tIG1vZGVscyBpbXBvcnQgQnVpbGRlcgotZnJvbSBtb2RlbHMgaW1wb3J0IEJyYW5jaAog
ZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCi1mcm9tIG1vZGVscyBpbXBvcnQgTnVtZXJpY0lkSG9s
ZGVyCi1mcm9tIG1vZGVscyBpbXBvcnQgUGxhdGZvcm0KIGZyb20gbW9kZWxzIGltcG9ydCBSZXBv
cnRMb2cKIGZyb20gbW9kZWxzIGltcG9ydCBUZXN0CiBmcm9tIG1vZGVscyBpbXBvcnQgVGVzdFJl
c3VsdAogZnJvbSBtb2RlbHMgaW1wb3J0IGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVy
aWNfaWRfaG9sZGVyCiAKIAotY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5k
bGVyKToKK2NsYXNzIFJlcG9ydFByb2Nlc3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIp
OgogICAgIGRlZiBwb3N0KHNlbGYpOgogICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0Nv
bnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnCiAKLSAgICAgICAgaGVh
ZGVycyA9ICJcbiIuam9pbihba2V5ICsgJzogJyArIHZhbHVlIGZvciBrZXksIHZhbHVlIGluIHNl
bGYucmVxdWVzdC5oZWFkZXJzLml0ZW1zKCldKQorICAgICAgICBsb2dfaWQgPSBpbnQoc2VsZi5y
ZXF1ZXN0LmdldCgnaWQnLCAwKSkKIAotICAgICAgICAjIERvIGFzIGJlc3QgYXMgd2UgY2FuIHRv
IHJlbW92ZSB0aGUgcGFzc3dvcmQKLSAgICAgICAgcmVxdWVzdF9ib2R5X3dpdGhvdXRfcGFzc3dv
cmQgPSByZS5zdWIocicicGFzc3dvcmQiXHMqOlxzKiIuKz8iLCcsICcnLCBzZWxmLnJlcXVlc3Qu
Ym9keSkKLSAgICAgICAgbG9nID0gUmVwb3J0TG9nKHRpbWVzdGFtcD1kYXRldGltZS5ub3coKSwg
aGVhZGVycz1oZWFkZXJzLCBwYXlsb2FkPXJlcXVlc3RfYm9keV93aXRob3V0X3Bhc3N3b3JkKQot
ICAgICAgICBsb2cucHV0KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9ib2R5
ID0ganNvbi5sb2FkcyhzZWxmLnJlcXVlc3QuYm9keSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJy
b3I6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdGYWlsZWQgdG8gcGFyc2UgdGhl
IHBheWxvYWQgYXMgYSBqc29uLiBSZXBvcnQga2V5OiAlZCcgJSBsb2cua2V5KCkuaWQoKSkKLQot
ICAgICAgICBidWlsZGVyID0gc2VsZi5fbW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJv
cihCdWlsZGVyLCAnYnVpbGRlci1uYW1lJykKLSAgICAgICAgYnJhbmNoID0gc2VsZi5fbW9kZWxf
Ynlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihCcmFuY2gsICdicmFuY2gnKQotICAgICAgICBw
bGF0Zm9ybSA9IHNlbGYuX21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3JfZXJyb3IoUGxhdGZv
cm0sICdwbGF0Zm9ybScpCi0gICAgICAgIGJ1aWxkX251bWJlciA9IHNlbGYuX2ludGVnZXJfaW5f
Ym9keSgnYnVpbGQtbnVtYmVyJykKLSAgICAgICAgdGltZXN0YW1wID0gc2VsZi5fdGltZXN0YW1w
X2luX2JvZHkoKQotICAgICAgICByZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnd2Vi
a2l0LXJldmlzaW9uJykKLSAgICAgICAgY2hyb21pdW1fcmV2aXNpb24gPSBzZWxmLl9pbnRlZ2Vy
X2luX2JvZHkoJ3dlYmtpdC1yZXZpc2lvbicpIGlmICdjaHJvbWl1bS1yZXZpc2lvbicgaW4gc2Vs
Zi5fYm9keSBlbHNlIE5vbmUKLQotICAgICAgICBmYWlsZWQgPSBGYWxzZQotICAgICAgICBpZiBi
dWlsZGVyIGFuZCBub3QgKHNlbGYuYnlwYXNzX2F1dGhlbnRpY2F0aW9uKCkgb3IgYnVpbGRlci5h
dXRoZW50aWNhdGUoc2VsZi5fYm9keS5nZXQoJ3Bhc3N3b3JkJywgJycpKSk6Ci0gICAgICAgICAg
ICBzZWxmLl9vdXRwdXQoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpCi0gICAgICAgICAgICBmYWls
ZWQgPSBUcnVlCi0KLSAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHNfYXJlX3ZhbGlkKCk6Ci0g
ICAgICAgICAgICBzZWxmLl9vdXRwdXQoIlRoZSBwYXlsb2FkIGRvZXNuJ3QgY29udGFpbiByZXN1
bHRzIG9yIHJlc3VsdHMgYXJlIG1hbGZvcm1lZCIpCi0gICAgICAgICAgICBmYWlsZWQgPSBUcnVl
Ci0KLSAgICAgICAgaWYgbm90IChidWlsZGVyIGFuZCBicmFuY2ggYW5kIHBsYXRmb3JtIGFuZCBi
dWlsZF9udW1iZXIgYW5kIHJldmlzaW9uIGFuZCB0aW1lc3RhbXApIG9yIGZhaWxlZDoKLSAgICAg
ICAgICAgIHJldHVybgotCi0gICAgICAgIGJ1aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxkX2lmX3Bv
c3NpYmxlKGJ1aWxkZXIsIGJ1aWxkX251bWJlciwgYnJhbmNoLCBwbGF0Zm9ybSwgdGltZXN0YW1w
LCByZXZpc2lvbiwgY2hyb21pdW1fcmV2aXNpb24pCi0gICAgICAgIGlmIG5vdCBidWlsZDoKKyAg
ICAgICAgbG9nID0gUmVwb3J0TG9nLmdldF9ieV9pZChsb2dfaWQpCisgICAgICAgIGlmIG5vdCBs
b2cgb3Igbm90IGxvZy5jb21taXQ6CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZSgiTm90IHByb2Nlc3NlZCIpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBkZWYgX2Zs
b2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKQEAgLTk1LDcgKzU5LDExIEBAIGNsYXNzIFJl
cG9ydEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGwKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmxvYXQodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGZvciB0ZXN0
X25hbWUsIHJlc3VsdCBpbiBzZWxmLl9ib2R5WydyZXN1bHRzJ10uaXRlcml0ZW1zKCk6CisgICAg
ICAgIGJyYW5jaCA9IGxvZy5icmFuY2goKQorICAgICAgICBwbGF0Zm9ybSA9IGxvZy5wbGF0Zm9y
bSgpCisgICAgICAgIGJ1aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKGxvZywg
YnJhbmNoLCBwbGF0Zm9ybSkKKworICAgICAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gbG9n
LnJlc3VsdHMoKS5pdGVyaXRlbXMoKToKICAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9hZGRfdGVz
dF9pZl9uZWVkZWQodGVzdF9uYW1lLCBicmFuY2gsIHBsYXRmb3JtKQogICAgICAgICAgICAgc2No
ZWR1bGVfcnVuc191cGRhdGUodGVzdC5pZCwgYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCkKICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBkaWN0KToKQEAgLTExMSw3MCArNzksMjAgQEAg
Y2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbAogICAgICAgICBzY2hlZHVs
ZV9kYXNoYm9hcmRfdXBkYXRlKCkKICAgICAgICAgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRlKCkK
IAotICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdPSycpCisgICAgICAgIHNlbGYucmVzcG9u
c2Uub3V0LndyaXRlKCdPSycpCiAKLSAgICBkZWYgX21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlf
b3JfZXJyb3Ioc2VsZiwgbW9kZWwsIGtleU5hbWUpOgotICAgICAgICBrZXkgPSBzZWxmLl9ib2R5
LmdldChrZXlOYW1lLCAnJykKLSAgICAgICAgaW5zdGFuY2UgPSBrZXkgYW5kIG1vZGVsLmdldF9i
eV9rZXlfbmFtZShrZXkpCi0gICAgICAgIGlmIG5vdCBpbnN0YW5jZToKLSAgICAgICAgICAgIHNl
bGYuX291dHB1dCgnVGhlcmUgYXJlIG5vICVzIG5hbWVkICIlcyInICUgKG1vZGVsLl9fbmFtZV9f
Lmxvd2VyKCksIGtleSkpCi0gICAgICAgIHJldHVybiBpbnN0YW5jZQotCi0gICAgZGVmIF9pbnRl
Z2VyX2luX2JvZHkoc2VsZiwga2V5KToKLSAgICAgICAgdmFsdWUgPSBzZWxmLl9ib2R5LmdldChr
ZXksICcnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlKQotICAg
ICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdJbnZhbGlkICVz
OiAiJXMiJyAlIChrZXkucmVwbGFjZSgnLScsICcgJyksIHZhbHVlKSkKLQotICAgIGRlZiBfdGlt
ZXN0YW1wX2luX2JvZHkoc2VsZik6Ci0gICAgICAgIHZhbHVlID0gc2VsZi5fYm9keS5nZXQoJ3Rp
bWVzdGFtcCcsICcnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUu
ZnJvbXRpbWVzdGFtcChpbnQodmFsdWUpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fb3V0cHV0KCdGYWlsZWQgdG8gcGFyc2UgdGhlIHRpbWVzdGFtcDogJXMnICUg
dmFsdWUpCi0KLSAgICBkZWYgX291dHB1dChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgc2VsZi5y
ZXNwb25zZS5vdXQud3JpdGUobWVzc2FnZSArICdcbicpCi0KLSAgICBkZWYgYnlwYXNzX2F1dGhl
bnRpY2F0aW9uKHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfcmVzdWx0
c19hcmVfdmFsaWQoc2VsZik6Ci0KLSAgICAgICAgZGVmIF9pc19mbG9hdF9jb252ZXJ0aWJsZSh2
YWx1ZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZmxvYXQodmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgaWYgJ3Jlc3VsdHMnIG5v
dCBpbiBzZWxmLl9ib2R5IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuX2JvZHlbJ3Jlc3VsdHMnXSwg
ZGljdCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBmb3IgdGVzdFJlc3Vs
dCBpbiBzZWxmLl9ib2R5WydyZXN1bHRzJ10udmFsdWVzKCk6Ci0gICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHRlc3RSZXN1bHQsIGRpY3QpOgotICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0
ZXN0UmVzdWx0LnZhbHVlcygpOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgX2lzX2Zsb2F0
X2NvbnZlcnRpYmxlKHZhbHVlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICAgICAgICAgIGlmICdhdmcnIG5vdCBpbiB0ZXN0UmVzdWx0OgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAg
ICAgICAgaWYgbm90IF9pc19mbG9hdF9jb252ZXJ0aWJsZSh0ZXN0UmVzdWx0KToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9j
cmVhdGVfYnVpbGRfaWZfcG9zc2libGUoc2VsZiwgYnVpbGRlciwgYnVpbGRfbnVtYmVyLCBicmFu
Y2gsIHBsYXRmb3JtLCB0aW1lc3RhbXAsIHJldmlzaW9uLCBjaHJvbWl1bV9yZXZpc2lvbik6Ci0g
ICAgICAgIGtleV9uYW1lID0gYnVpbGRlci5uYW1lICsgJzonICsgc3RyKGludCh0aW1lLm1rdGlt
ZSh0aW1lc3RhbXAudGltZXR1cGxlKCkpKSkKKyAgICBkZWYgX2NyZWF0ZV9idWlsZF9pZl9wb3Nz
aWJsZShzZWxmLCBsb2csIGJyYW5jaCwgcGxhdGZvcm0pOgorICAgICAgICBidWlsZGVyID0gbG9n
LmJ1aWxkZXIoKQorICAgICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIubmFtZSArICc6JyArIHN0cihp
bnQodGltZS5ta3RpbWUobG9nLnRpbWVzdGFtcCgpLnRpbWV0dXBsZSgpKSkpCiAKICAgICAgICAg
ZGVmIGV4ZWN1dGUoKToKICAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQuZ2V0X2J5X2tleV9uYW1l
KGtleV9uYW1lKQogICAgICAgICAgICAgaWYgYnVpbGQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX291dHB1dCgnVGhlIGJ1aWxkIGF0ICVzIGFscmVhZHkgZXhpc3RzIGZvciAlcycgJSAo
c3RyKHRpbWVzdGFtcCksIGJ1aWxkZXIubmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
aWxkCiAKLSAgICAgICAgICAgIHJldHVybiBCdWlsZChicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1w
bGF0Zm9ybSwgYnVpbGRlcj1idWlsZGVyLCBidWlsZE51bWJlcj1idWlsZF9udW1iZXIsCi0gICAg
ICAgICAgICAgICAgdGltZXN0YW1wPXRpbWVzdGFtcCwgcmV2aXNpb249cmV2aXNpb24sIGNocm9t
aXVtUmV2aXNpb249Y2hyb21pdW1fcmV2aXNpb24sIGtleV9uYW1lPWtleV9uYW1lKS5wdXQoKQor
ICAgICAgICAgICAgcmV0dXJuIEJ1aWxkKGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3Jt
LCBidWlsZGVyPWJ1aWxkZXIsIGJ1aWxkTnVtYmVyPWxvZy5idWlsZF9udW1iZXIoKSwKKyAgICAg
ICAgICAgICAgICB0aW1lc3RhbXA9bG9nLnRpbWVzdGFtcCgpLCByZXZpc2lvbj1sb2cud2Via2l0
X3JldmlzaW9uKCksIGNocm9taXVtUmV2aXNpb249bG9nLmNocm9taXVtX3JldmlzaW9uKCksCisg
ICAgICAgICAgICAgICAga2V5X25hbWU9a2V5X25hbWUpLnB1dCgpCiAgICAgICAgIHJldHVybiBk
Yi5ydW5faW5fdHJhbnNhY3Rpb24oZXhlY3V0ZSkKIAogICAgIGRlZiBfYWRkX3Rlc3RfaWZfbmVl
ZGVkKHNlbGYsIHRlc3RfbmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSk6CkBAIC0xOTIsOCArMTEwLDMg
QEAgY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbAogICAgICAgICAgICAg
dGVzdC5wdXQoKQogICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlCiAgICAgICAgIHJldHVy
biBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVjdXRlKSBv
ciBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25hbWUpCi0KLQotY2xhc3MgQWRtaW5SZXBvcnRI
YW5kbGVyKFJlcG9ydEhhbmRsZXIpOgotICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9yZXBvcnRfbG9nc19oYW5kbGVyLnB5Ywo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9yZXBvcnRfbG9nc19oYW5kbGVyLnB5YwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKMGZJTkNxUFhORTlq
QUFBQUFBQUFBQUFJQUFBQVFBQUFBSE5sQUFBQVpBQUFaQUVBYXdBQVdnQUFaQUFBWkFJQWF3RUFi
QUlBV2dJQQpBV1FBQUdRQkFHc0RBRm9EQUdRQUFHUURBR3NFQUd3RkFGb0ZBQUZrQUFCa0JBQnJC
Z0JzQndCYUJ3QUJaQVVBWlFBQWFRZ0FaZ0VBClpBWUFoQUFBZ3dBQVdWb0pBR1FCQUZNb0J3QUFB
R24vLy8vL1RpZ0JBQUFBZEFnQUFBQjBaVzF3YkdGMFpTZ0JBQUFBZEJjQUFBQnoKWTJobFpIVnNa
Vjl5WlhCdmNuUmZjSEp2WTJWemN5Z0JBQUFBZEFrQUFBQlNaWEJ2Y25STWIyZDBFUUFBQUZKbGNH
OXlkRXh2WjNOSQpZVzVrYkdWeVl3QUFBQUFBQUFBQUFRQUFBRUlBQUFCekl3QUFBR1VBQUZvQkFH
UUFBSVFBQUZvQ0FHUUJBSVFBQUZvREFHUUNBSVFBCkFGb0VBRkpUS0FNQUFBQmpBUUFBQUFFQUFB
QUdBQUFBUXdBQUFITXdBQUFBZkFBQWFRQUFhUUVBYVFJQWRBTUFhUVFBWkFFQWFBRUEKZEFVQWFR
WUFnd0FBWkFJQU5vTUNBSU1CQUFGa0FBQlRLQU1BQUFCT2N4QUFBQUJ5WlhCdmNuUmZiRzluY3k1
NVlXMXNkQVFBQUFCcwpiMmR6S0FjQUFBQjBDQUFBQUhKbGMzQnZibk5sZEFNQUFBQnZkWFIwQlFB
QUFIZHlhWFJsVWdBQUFBQjBCZ0FBQUhKbGJtUmxjbElDCkFBQUFkQU1BQUFCaGJHd29BUUFBQUhR
RUFBQUFjMlZzWmlnQUFBQUFLQUFBQUFCelN3QUFBQzlWYzJWeWN5OXlibWwzWVM5M1pXSnIKYVhR
dlYyVmljMmwwWlhNdmQyVmlhMmwwTFhCbGNtWXVZWEJ3YzNCdmRDNWpiMjB2Y21Wd2IzSjBYMnh2
WjNOZmFHRnVaR3hsY2k1dwplWFFEQUFBQVoyVjBLQUFBQUhNQ0FBQUFBQUZqQVFBQUFBUUFBQUFK
QUFBQVF3QUFBSE1yQVFBQWRBQUFmQUFBYVFFQWFRSUFaQUVBCmd3RUFnd0VBZlFFQWRBQUFmQUFB
YVFFQWFRSUFaQUlBZ3dFQWd3RUFmUUlBZkFFQWZBSUFhZ0lBYnc0QUFYd0FBR2tEQUdRREFJTUIK
QUZNQmVTZ0FkQVFBYVFVQWRBWUFmQUFBYVFFQWFRSUFaQVFBWkFVQWd3SUFnd0VBZ3dFQWZRTUFW
MjRrQUFFQkFYd0FBR2tEQUdRRwpBSHdBQUdrQkFHa0NBR1FFQUdRSEFJTUNBQmFEQVFCVFdId0RB
SEFoQUFGOEFBQnBBd0JrQ0FCOEFBQnBBUUJwQWdCa0JBQmtCd0NECkFnQVdnd0VBVXdGOEFRQnZJ
UUFCZEFjQWZBTUFYd2dBZkFNQWFRa0Fnd0FBQVhRS0FId0RBSU1CQUFGdUN3QUJmQU1BYVFzQWd3
QUEKQVh3QUFHa01BR2tOQUdrT0FIUVBBR2tRQUdRSkFHZ0NBSFFFQUdrUkFJTUFBR1FLQURaa0N3
QmtEQUEyZ3dJQWd3RUFBV1FBQUZNbwpEUUFBQUU1MEJnQUFBR052YlcxcGRIUUdBQUFBWkdWc1pY
UmxjdzhBQUFCSmJuWmhiR2xrSUhKbGNYVmxjM1IwQWdBQUFHbGthUUFBCkFBQnpFd0FBQUVsdWRt
RnNhV1FnYkc5bklHbGtJQ0lsY3lKMEFBQUFBSE1WQUFBQVRtOGdiRzluSUdadmRXNWtJR1p2Y2lB
aUpYTWkKY3hBQUFBQnlaWEJ2Y25SZmJHOW5jeTU1WVcxc1VnUUFBQUIwQWdBQUFFOUxkQVlBQUFC
emRHRjBkWE1vRWdBQUFIUUVBQUFBWW05dgpiSFFIQUFBQWNtVnhkV1Z6ZEZJTEFBQUFkQVlBQUFC
ZlpYSnliM0pTQWdBQUFIUUpBQUFBWjJWMFgySjVYMmxrZEFNQUFBQnBiblIwCkJBQUFBRlJ5ZFdW
U0RBQUFBSFFEQUFBQWNIVjBVZ0VBQUFCU0RRQUFBRklGQUFBQVVnWUFBQUJTQndBQUFGSUFBQUFB
VWdnQUFBQlMKQ1FBQUFDZ0VBQUFBVWdvQUFBQlNEQUFBQUZJTkFBQUFkQU1BQUFCc2IyY29BQUFB
QUNnQUFBQUFjMHNBQUFBdlZYTmxjbk12Y201cApkMkV2ZDJWaWEybDBMMWRsWW5OcGRHVnpMM2Rs
WW10cGRDMXdaWEptTG1Gd2NITndiM1F1WTI5dEwzSmxjRzl5ZEY5c2IyZHpYMmhoCmJtUnNaWEl1
Y0hsMEJBQUFBSEJ2YzNRckFBQUFjeUFBQUFBQUFSZ0JHQUVOQVE0Q0F3RW9BUU1CSVFJSEFTRUNC
d0VKQVFvQkRnSUsKQW1NQ0FBQUFBZ0FBQUFNQUFBQkRBQUFBY3lzQUFBQmtBUUI4QUFCcEFBQnBB
UUJrQWdBOGZBQUFhUUFBYVFJQWFRTUFmQUVBWkFNQQpGNE1CQUFGa0FBQlRLQVFBQUFCT2N4a0FB
QUIwWlhoMEwzQnNZV2x1T3lCamFHRnljMlYwUFhWMFppMDRjd3dBQUFCRGIyNTBaVzUwCkxWUjVj
R1Z6QVFBQUFBb29CQUFBQUZJRkFBQUFkQWNBQUFCb1pXRmtaWEp6VWdZQUFBQlNCd0FBQUNnQ0FB
QUFVZ29BQUFCMEJ3QUEKQUcxbGMzTmhaMlVvQUFBQUFDZ0FBQUFBYzBzQUFBQXZWWE5sY25NdmNt
NXBkMkV2ZDJWaWEybDBMMWRsWW5OcGRHVnpMM2RsWW10cApkQzF3WlhKbUxtRndjSE53YjNRdVky
OXRMM0psY0c5eWRGOXNiMmR6WDJoaGJtUnNaWEl1Y0hsU0ZBQUFBRUlBQUFCekJBQUFBQUFCCkVB
RW9CUUFBQUhRSUFBQUFYMTl1WVcxbFgxOTBDZ0FBQUY5ZmJXOWtkV3hsWDE5U0N3QUFBRklhQUFB
QVVoUUFBQUFvQUFBQUFDZ0EKQUFBQUtBQUFBQUJ6U3dBQUFDOVZjMlZ5Y3k5eWJtbDNZUzkzWldK
cmFYUXZWMlZpYzJsMFpYTXZkMlZpYTJsMExYQmxjbVl1WVhCdwpjM0J2ZEM1amIyMHZjbVZ3YjNK
MFgyeHZaM05mYUdGdVpHeGxjaTV3ZVZJREFBQUFKd0FBQUhNR0FBQUFCZ0VKQXdrWEtBb0FBQUIw
CkJ3QUFBSGRsWW1Gd2NESjBHd0FBQUdkdmIyZHNaUzVoY0hCbGJtZHBibVV1WlhoMExuZGxZbUZ3
Y0ZJQUFBQUFkQUlBQUFCdmMzUUsKQUFBQVkyOXVkSEp2Ykd4bGNsSUJBQUFBZEFZQUFBQnRiMlJs
YkhOU0FnQUFBSFFPQUFBQVVtVnhkV1Z6ZEVoaGJtUnNaWEpTQXdBQQpBQ2dBQUFBQUtBQUFBQUFv
QUFBQUFITkxBQUFBTDFWelpYSnpMM0p1YVhkaEwzZGxZbXRwZEM5WFpXSnphWFJsY3k5M1pXSnJh
WFF0CmNHVnlaaTVoY0hCemNHOTBMbU52YlM5eVpYQnZjblJmYkc5bmMxOW9ZVzVrYkdWeUxuQjVk
QWdBQUFBOGJXOWtkV3hsUGg0QUFBQnoKQ2dBQUFBd0JFQUlNQWhBQkVBTT0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126472</attachid>
            <date>2012-02-10 01:05:16 -0800</date>
            <delta_ts>2012-02-10 01:45:08 -0800</delta_ts>
            <desc>Removed report_logs_handler.pyc</desc>
            <filename>bug-78309-20120210010515.patch</filename>
            <type>text/plain</type>
            <size>37911</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzM3
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTAy
LTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFBlcmYtby1t
YXRpYyBzaG91bGQgcHJvY2VzcyByZXBvcnRzIGluIGJhY2tncm91bmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdGhlIGxvZ2ljIHRvIGNyZWF0
ZSBCdWlsZCwgVGVzdCwgYW5kIFRlc3RSZXN1bHQgb2JqZWN0cyBmcm9tIFJlcG9ydEhhbmRsZXIg
aW50byBSZXBvcnRQcm9jZXNzSGFuZGxlci4KKyAgICAgICAgUmVwb3J0SGFuZGxlciBub3cgbWVy
ZWx5IGNyZWF0ZXMgUmVwb3J0TG9nIGFuZCBzY2hlZHVsZXMgYSB0YXNrIHRvIHByb2Nlc3MgaXQu
CisKKyAgICAgICAgQWxzbyBhZGRlZCBSZXBvcnRMb2dIYW5kbGVyIHRvIG1hbmFnZSBzdGFsZSBS
ZXBvcnRMb2dzLgorCisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20v
YXBwLnlhbWw6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29u
dHJvbGxlci5weToKKyAgICAgICAgKHNjaGVkdWxlX21hbmlmZXN0X3VwZGF0ZSk6CisgICAgICAg
IChzY2hlZHVsZV9kYXNoYm9hcmRfdXBkYXRlKToKKyAgICAgICAgKHNjaGVkdWxlX3J1bnNfdXBk
YXRlKToKKyAgICAgICAgKENhY2hlZFJ1bnNIYW5kbGVyLmdldCk6CisgICAgICAgIChzY2hlZHVs
ZV9yZXBvcnRfcHJvY2Vzcyk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vbWFpbi5weToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9tb2RlbHMucHk6CisgICAgICAgIChSZXBvcnRMb2cpOgorICAgICAgICAoUmVwb3J0TG9nLl9w
YXJzZWRfcGF5bG9hZCk6CisgICAgICAgIChSZXBvcnRMb2cuZ2V0X3ZhbHVlKToKKyAgICAgICAg
KFJlcG9ydExvZy5yZXN1bHRzKToKKyAgICAgICAgKFJlcG9ydExvZy5idWlsZGVyKToKKyAgICAg
ICAgKFJlcG9ydExvZy5icmFuY2gpOgorICAgICAgICAoUmVwb3J0TG9nLnBsYXRmb3JtKToKKyAg
ICAgICAgKFJlcG9ydExvZy5idWlsZF9udW1iZXIpOgorICAgICAgICAoUmVwb3J0TG9nLndlYmtp
dF9yZXZpc2lvbik6CisgICAgICAgIChSZXBvcnRMb2cuY2hyb21pdW1fcmV2aXNpb24pOgorICAg
ICAgICAoUmVwb3J0TG9nLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKToKKyAgICAgICAg
KFJlcG9ydExvZy5faW50ZWdlcl9pbl9wYXlsb2FkKToKKyAgICAgICAgKFJlcG9ydExvZy50aW1l
c3RhbXApOgorICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9y
dF9oYW5kbGVyLnB5OgorICAgICAgICAoUmVwb3J0SGFuZGxlci5wb3N0KToKKyAgICAgICAgKFJl
cG9ydEhhbmRsZXIuX291dHB1dCk6CisgICAgICAgIChSZXBvcnRIYW5kbGVyLl9yZXN1bHRzX2Fy
ZV92YWxpZCk6CisgICAgICAgIChSZXBvcnRIYW5kbGVyLl9yZXN1bHRzX2FyZV92YWxpZC5faXNf
ZmxvYXRfY29udmVydGlibGUpOgorICAgICAgICAoUmVwb3J0SGFuZGxlcik6CisgICAgICAgICog
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3MueWFtbDogQWRkZWQu
CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3Nf
aGFuZGxlci5weTogQWRkZWQuCisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxlcik6CisgICAgICAg
IChSZXBvcnRMb2dzSGFuZGxlci5nZXQpOgorICAgICAgICAoUmVwb3J0TG9nc0hhbmRsZXIucG9z
dCk6CisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxlci5fZXJyb3IpOgorICAgICAgICAqIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHk6IENv
cGllZCBmcm9tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5kbGVy
LnB5LgorICAgICAgICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIpOgorICAgICAgICAoUmVwb3J0UHJv
Y2Vzc0hhbmRsZXIucG9zdCk6CisgICAgICAgIChSZXBvcnRQcm9jZXNzSGFuZGxlci5fY3JlYXRl
X2J1aWxkX2lmX3Bvc3NpYmxlKToKKyAgICAgICAgKFJlcG9ydFByb2Nlc3NIYW5kbGVyLl9jcmVh
dGVfYnVpbGRfaWZfcG9zc2libGUuZXhlY3V0ZSk6CisgICAgICAgIChSZXBvcnRQcm9jZXNzSGFu
ZGxlci5fYWRkX3Rlc3RfaWZfbmVlZGVkKToKKwogMjAxMi0wMi0wOSAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBQZXJmLW8tbWF0aWMgc2hvdWxkbid0IHJlbHkg
b24gbWVtY2FjaGUgdG8gc3RvcmUgY2FjaGVkIEpTT04gcmVzcG9uc2VzCkluZGV4OiBXZWJzaXRl
cy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9hcHAueWFtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRl
cy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9hcHAueWFtbAkocmV2aXNpb24gMTA3MzMxKQorKysg
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiBhcHBsaWNhdGlvbjogd2Via2l0LXBlcmYKLXZlcnNpb246IDEyCit2
ZXJzaW9uOiAxMwogcnVudGltZTogcHl0aG9uMjcKIGFwaV92ZXJzaW9uOiAxCiB0aHJlYWRzYWZl
OiBmYWxzZQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29udHJvbGxl
ci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9jb250
cm9sbGVyLnB5CShyZXZpc2lvbiAxMDczMzcpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9jb250cm9sbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIGRl
ZiBjYWNoZV9tYW5pZmVzdChjYWNoZSk6CiAKIAogZGVmIHNjaGVkdWxlX21hbmlmZXN0X3VwZGF0
ZSgpOgotICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvdXBkYXRlJykKKyAgICB0YXNr
cXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3VwZGF0ZScsIG5hbWU9J21hbmlmZXN0X3VwZGF0ZScp
CiAKIAogY2xhc3MgQ2FjaGVkTWFuaWZlc3RIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIp
OgpAQCAtODIsNyArODIsNyBAQCBkZWYgY2FjaGVfZGFzaGJvYXJkKGNhY2hlKToKIAogCiBkZWYg
c2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZSgpOgotICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBp
L3Rlc3QvZGFzaGJvYXJkL3VwZGF0ZScpCisgICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVz
dC9kYXNoYm9hcmQvdXBkYXRlJywgbmFtZT0nZGFzaGJvYXJkX3VwZGF0ZScpCiAKIAogY2xhc3Mg
Q2FjaGVkRGFzaGJvYXJkSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKQEAgLTEwMCw3
ICsxMDAsOCBAQCBkZWYgY2FjaGVfcnVucyh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmCiAKIAog
ZGVmIHNjaGVkdWxlX3J1bnNfdXBkYXRlKHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQp
OgotICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvcnVucy91cGRhdGUnLCBwYXJhbXM9
eydpZCc6IHRlc3RfaWQsICdicmFuY2hpZCc6IGJyYW5jaF9pZCwgJ3BsYXRmb3JtaWQnOiBwbGF0
Zm9ybV9pZH0pCisgICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVzdC9ydW5zL3VwZGF0ZScs
IG5hbWU9J3J1bnNfdXBkYXRlXyVkXyVkXyVkJyAlICh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRm
b3JtX2lkKSwKKyAgICAgICAgcGFyYW1zPXsnaWQnOiB0ZXN0X2lkLCAnYnJhbmNoaWQnOiBicmFu
Y2hfaWQsICdwbGF0Zm9ybWlkJzogcGxhdGZvcm1faWR9KQogCiAKIGNsYXNzIENhY2hlZFJ1bnNI
YW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgpAQCAtMTIyLDMgKzEyMyw3IEBAIGNsYXNz
IENhY2hlZFJ1bnNIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEgKICAgICAgICAgICAgIHNlbGYucmVz
cG9uc2Uub3V0LndyaXRlKHJ1bnMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzY2hlZHVs
ZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lkKQorCisKK2RlZiBz
Y2hlZHVsZV9yZXBvcnRfcHJvY2Vzcyhsb2cpOgorICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBp
L3Rlc3QvcmVwb3J0L3Byb2Nlc3MnLCBwYXJhbXM9eydpZCc6IGxvZy5rZXkoKS5pZCgpfSkKSW5k
ZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQkocmV2aXNpb24gMTA3
MzMxKQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDIwIEBAIGZyb20gZGFzaGJvYXJkX2hhbmRsZXIgaW1wb3J0
IERhc2hib2FyZEgKIGZyb20gbWFuaWZlc3RfaGFuZGxlciBpbXBvcnQgTWFuaWZlc3RIYW5kbGVy
CiBmcm9tIHJlcG9ydF9oYW5kbGVyIGltcG9ydCBSZXBvcnRIYW5kbGVyCiBmcm9tIHJlcG9ydF9o
YW5kbGVyIGltcG9ydCBBZG1pblJlcG9ydEhhbmRsZXIKK2Zyb20gcmVwb3J0X3Byb2Nlc3NfaGFu
ZGxlciBpbXBvcnQgUmVwb3J0UHJvY2Vzc0hhbmRsZXIKK2Zyb20gcmVwb3J0X2xvZ3NfaGFuZGxl
ciBpbXBvcnQgUmVwb3J0TG9nc0hhbmRsZXIKIGZyb20gcnVuc19oYW5kbGVyIGltcG9ydCBSdW5z
SGFuZGxlcgogZnJvbSBtZXJnZV90ZXN0c19oYW5kbGVyIGltcG9ydCBNZXJnZVRlc3RzSGFuZGxl
cgogCiByb3V0ZXMgPSBbCiAgICAgKCcvYWRtaW4vcmVwb3J0Lz8nLCBBZG1pblJlcG9ydEhhbmRs
ZXIpLAogICAgICgnL2FkbWluL21lcmdlLXRlc3RzLz8nLCBNZXJnZVRlc3RzSGFuZGxlciksCisg
ICAgKCcvYWRtaW4vcmVwb3J0LWxvZ3MvPycsIFJlcG9ydExvZ3NIYW5kbGVyKSwKICAgICAoJy9h
ZG1pbi9jcmVhdGUvKC4qKScsIENyZWF0ZUhhbmRsZXIpLAogICAgICgnL2FwaS90ZXN0Lz8nLCBD
YWNoZWRNYW5pZmVzdEhhbmRsZXIpLAogICAgICgnL2FwaS90ZXN0L3VwZGF0ZScsIE1hbmlmZXN0
SGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvcmVwb3J0Lz8nLCBSZXBvcnRIYW5kbGVyKSwKKyAg
ICAoJy9hcGkvdGVzdC9yZXBvcnQvcHJvY2VzcycsIFJlcG9ydFByb2Nlc3NIYW5kbGVyKSwKICAg
ICAoJy9hcGkvdGVzdC9ydW5zLz8nLCBDYWNoZWRSdW5zSGFuZGxlciksCiAgICAgKCcvYXBpL3Rl
c3QvcnVucy91cGRhdGUnLCBSdW5zSGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvZGFzaGJvYXJk
Lz8nLCBDYWNoZWREYXNoYm9hcmRIYW5kbGVyKSwKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJm
LmFwcHNwb3QuY29tL21vZGVscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHJldmlzaW9uIDEwNzMzNykKKysrIFdlYnNpdGVzL3dl
YmtpdC1wZXJmLmFwcHNwb3QuY29tL21vZGVscy5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsMTAgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBqc29uCiBp
bXBvcnQgcmUKIAorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGZyb20gZ29vZ2xlLmFw
cGVuZ2luZS5leHQgaW1wb3J0IGRiCiAKIApAQCAtMTIxLDYgKzEyMyw2MSBAQCBjbGFzcyBSZXBv
cnRMb2coZGIuTW9kZWwpOgogICAgIHRpbWVzdGFtcCA9IGRiLkRhdGVUaW1lUHJvcGVydHkocmVx
dWlyZWQ9VHJ1ZSkKICAgICBoZWFkZXJzID0gZGIuVGV4dFByb3BlcnR5KCkKICAgICBwYXlsb2Fk
ID0gZGIuVGV4dFByb3BlcnR5KCkKKyAgICBjb21taXQgPSBkYi5Cb29sZWFuUHJvcGVydHkoKQor
CisgICAgZGVmIF9wYXJzZWRfcGF5bG9hZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2RpY3Rf
Xy5nZXQoJ19wYXJzZWQnKSA9PSBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHNlbGYuX3BhcnNlZCA9IGpzb24ubG9hZHMoc2VsZi5wYXlsb2FkKQorICAgICAgICAgICAg
ZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VkID0gRmFsc2UK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlZAorCisgICAgZGVmIGdldF92YWx1ZShzZWxmLCBr
ZXlOYW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhcnNlZF9wYXlsb2FkKCk6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VkLmdldChrZXlOYW1l
LCAnJykKKworICAgIGRlZiByZXN1bHRzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRf
dmFsdWUoJ3Jlc3VsdHMnKQorCisgICAgZGVmIGJ1aWxkZXIoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKEJ1aWxkZXIsICdidWlsZGVyLW5h
bWUnKQorCisgICAgZGVmIGJyYW5jaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVs
X2J5X2tleV9uYW1lX2luX3BheWxvYWQoQnJhbmNoLCAnYnJhbmNoJykKKworICAgIGRlZiBwbGF0
Zm9ybShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsX2J5X2tleV9uYW1lX2luX3Bh
eWxvYWQoUGxhdGZvcm0sICdwbGF0Zm9ybScpCisKKyAgICBkZWYgYnVpbGRfbnVtYmVyKHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5faW50ZWdlcl9pbl9wYXlsb2FkKCdidWlsZC1udW1iZXIn
KQorCisgICAgZGVmIHdlYmtpdF9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ludGVnZXJfaW5fcGF5bG9hZCgnd2Via2l0LXJldmlzaW9uJykKKworICAgIGRlZiBjaHJvbWl1
bV9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVnZXJfaW5fcGF5bG9h
ZCgnY2hyb21pdW0tcmV2aXNpb24nKQorCisgICAgZGVmIF9tb2RlbF9ieV9rZXlfbmFtZV9pbl9w
YXlsb2FkKHNlbGYsIG1vZGVsLCBrZXlOYW1lKToKKyAgICAgICAga2V5ID0gc2VsZi5nZXRfdmFs
dWUoa2V5TmFtZSkKKyAgICAgICAgaWYgbm90IGtleToKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIHJldHVybiBtb2RlbC5nZXRfYnlfa2V5X25hbWUoa2V5KQorCisgICAgZGVmIF9p
bnRlZ2VyX2luX3BheWxvYWQoc2VsZiwga2V5TmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHJldHVybiBpbnQoc2VsZi5nZXRfdmFsdWUoa2V5TmFtZSkpCisgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiB0aW1lc3RhbXAo
c2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5mcm9tdGlt
ZXN0YW1wKHNlbGYuX2ludGVnZXJfaW5fcGF5bG9hZCgndGltZXN0YW1wJykpCisgICAgICAgIGV4
Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQg
VmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKIAogIyBVc2VkIHdoZW4gbWVt
Y2FjaGUgZW50cnkgaXMgZXZpY3RlZApJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vcmVwb3J0X2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBl
cmYuYXBwc3BvdC5jb20vcmVwb3J0X2hhbmRsZXIucHkJKHJldmlzaW9uIDEwNzMzMSkKKysrIFdl
YnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwyMSArMzIsMTAgQEAgZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBv
cnQgZGIKIAogaW1wb3J0IGpzb24KIGltcG9ydCByZQotaW1wb3J0IHRpbWUKIGZyb20gZGF0ZXRp
bWUgaW1wb3J0IGRhdGV0aW1lCiAKLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfcnVu
c191cGRhdGUKLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0
ZQotZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUKLWZyb20g
bW9kZWxzIGltcG9ydCBCdWlsZGVyCi1mcm9tIG1vZGVscyBpbXBvcnQgQnJhbmNoCi1mcm9tIG1v
ZGVscyBpbXBvcnQgQnVpbGQKLWZyb20gbW9kZWxzIGltcG9ydCBOdW1lcmljSWRIb2xkZXIKLWZy
b20gbW9kZWxzIGltcG9ydCBQbGF0Zm9ybQogZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExvZwot
ZnJvbSBtb2RlbHMgaW1wb3J0IFRlc3QKLWZyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0Ci1m
cm9tIG1vZGVscyBpbXBvcnQgY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9o
b2xkZXIKK2Zyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MKIAog
CiBjbGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgpAQCAtNjAsODcg
KzQ5LDQ1IEBAIGNsYXNzIFJlcG9ydEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGwKICAgICAg
ICAgbG9nID0gUmVwb3J0TG9nKHRpbWVzdGFtcD1kYXRldGltZS5ub3coKSwgaGVhZGVycz1oZWFk
ZXJzLCBwYXlsb2FkPXJlcXVlc3RfYm9keV93aXRob3V0X3Bhc3N3b3JkKQogICAgICAgICBsb2cu
cHV0KCkKIAorICAgICAgICBzZWxmLl9lbmNvdW50ZXJlZF9lcnJvciA9IEZhbHNlCisKICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fYm9keSA9IGpzb24ubG9hZHMoc2VsZi5yZXF1ZXN0
LmJvZHkpCisgICAgICAgICAgICBwYXJzZWRQYXlsb2FkID0ganNvbi5sb2FkcyhzZWxmLnJlcXVl
c3QuYm9keSkKKyAgICAgICAgICAgIHBhc3N3b3JkID0gcGFyc2VkUGF5bG9hZC5nZXQoJ3Bhc3N3
b3JkJywgJycpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX291dHB1dCgnRmFpbGVkIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGFzIGEganNvbi4gUmVw
b3J0IGtleTogJWQnICUgbG9nLmtleSgpLmlkKCkpCiAKLSAgICAgICAgYnVpbGRlciA9IHNlbGYu
X21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3JfZXJyb3IoQnVpbGRlciwgJ2J1aWxkZXItbmFt
ZScpCi0gICAgICAgIGJyYW5jaCA9IHNlbGYuX21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3Jf
ZXJyb3IoQnJhbmNoLCAnYnJhbmNoJykKLSAgICAgICAgcGxhdGZvcm0gPSBzZWxmLl9tb2RlbF9i
eV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKFBsYXRmb3JtLCAncGxhdGZvcm0nKQotICAgICAg
ICBidWlsZF9udW1iZXIgPSBzZWxmLl9pbnRlZ2VyX2luX2JvZHkoJ2J1aWxkLW51bWJlcicpCi0g
ICAgICAgIHRpbWVzdGFtcCA9IHNlbGYuX3RpbWVzdGFtcF9pbl9ib2R5KCkKLSAgICAgICAgcmV2
aXNpb24gPSBzZWxmLl9pbnRlZ2VyX2luX2JvZHkoJ3dlYmtpdC1yZXZpc2lvbicpCi0gICAgICAg
IGNocm9taXVtX3JldmlzaW9uID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQtcmV2aXNp
b24nKSBpZiAnY2hyb21pdW0tcmV2aXNpb24nIGluIHNlbGYuX2JvZHkgZWxzZSBOb25lCisgICAg
ICAgIGJ1aWxkZXIgPSBsb2cuYnVpbGRlcigpCisgICAgICAgIGJ1aWxkZXIgIT0gTm9uZSBvciBz
ZWxmLl9vdXRwdXQoJ05vIGJ1aWxkZXIgbmFtZWQgIiVzIicgJSBsb2cuZ2V0X3ZhbHVlKCdidWls
ZGVyLW5hbWUnKSkKKyAgICAgICAgbG9nLmJyYW5jaCgpICE9IE5vbmUgb3Igc2VsZi5fb3V0cHV0
KCdObyBicmFuY2ggbmFtZWQgIiVzIicgJSBsb2cuZ2V0X3ZhbHVlKCdicmFuY2gnKSkKKyAgICAg
ICAgbG9nLnBsYXRmb3JtKCkgIT0gTm9uZSBvciBzZWxmLl9vdXRwdXQoJ05vIHBsYXRmb3JtIG5h
bWVkICIlcyInICUgbG9nLmdldF92YWx1ZSgncGxhdGZvcm0nKSkKKyAgICAgICAgbG9nLmJ1aWxk
X251bWJlcigpICE9IE5vbmUgb3Igc2VsZi5fb3V0cHV0KCdJbnZhbGlkIGJ1aWxkIG51bWJlciAi
JXMiJyAlIGxvZy5nZXRfdmFsdWUoJ2J1aWxkLW51bWJlcicpKQorICAgICAgICBsb2cudGltZXN0
YW1wKCkgIT0gTm9uZSBvciBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgdGltZXN0YW1wICIlcyInICUg
bG9nLmdldF92YWx1ZSgndGltZXN0YW1wJykpCisgICAgICAgIGxvZy53ZWJraXRfcmV2aXNpb24o
KSAhPSBOb25lIG9yIHNlbGYuX291dHB1dCgnSW52YWxpZCB3ZWJraXQgcmV2aXNpb24gIiVzIicg
JSBsb2cuZ2V0X3ZhbHVlKCd3ZWJraXQtcmV2aXNpb24nKSkKIAogICAgICAgICBmYWlsZWQgPSBG
YWxzZQotICAgICAgICBpZiBidWlsZGVyIGFuZCBub3QgKHNlbGYuYnlwYXNzX2F1dGhlbnRpY2F0
aW9uKCkgb3IgYnVpbGRlci5hdXRoZW50aWNhdGUoc2VsZi5fYm9keS5nZXQoJ3Bhc3N3b3JkJywg
JycpKSk6CisgICAgICAgIGlmIGJ1aWxkZXIgYW5kIG5vdCAoc2VsZi5ieXBhc3NfYXV0aGVudGlj
YXRpb24oKSBvciBidWlsZGVyLmF1dGhlbnRpY2F0ZShwYXNzd29yZCkpOgogICAgICAgICAgICAg
c2VsZi5fb3V0cHV0KCdBdXRoZW50aWNhdGlvbiBmYWlsZWQnKQotICAgICAgICAgICAgZmFpbGVk
ID0gVHJ1ZQogCi0gICAgICAgIGlmIG5vdCBzZWxmLl9yZXN1bHRzX2FyZV92YWxpZCgpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0c19hcmVfdmFsaWQobG9nKToKICAgICAgICAgICAgIHNl
bGYuX291dHB1dCgiVGhlIHBheWxvYWQgZG9lc24ndCBjb250YWluIHJlc3VsdHMgb3IgcmVzdWx0
cyBhcmUgbWFsZm9ybWVkIikKLSAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKLQotICAgICAgICBp
ZiBub3QgKGJ1aWxkZXIgYW5kIGJyYW5jaCBhbmQgcGxhdGZvcm0gYW5kIGJ1aWxkX251bWJlciBh
bmQgcmV2aXNpb24gYW5kIHRpbWVzdGFtcCkgb3IgZmFpbGVkOgotICAgICAgICAgICAgcmV0dXJu
CiAKLSAgICAgICAgYnVpbGQgPSBzZWxmLl9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUoYnVpbGRl
ciwgYnVpbGRfbnVtYmVyLCBicmFuY2gsIHBsYXRmb3JtLCB0aW1lc3RhbXAsIHJldmlzaW9uLCBj
aHJvbWl1bV9yZXZpc2lvbikKLSAgICAgICAgaWYgbm90IGJ1aWxkOgorICAgICAgICBpZiBzZWxm
Ll9lbmNvdW50ZXJlZF9lcnJvcjoKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGRlZiBf
ZmxvYXRfb3Jfbm9uZShkaWN0aW9uYXJ5LCBrZXkpOgotICAgICAgICAgICAgdmFsdWUgPSBkaWN0
aW9uYXJ5LmdldChrZXkpCi0gICAgICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmxvYXQodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGZv
ciB0ZXN0X25hbWUsIHJlc3VsdCBpbiBzZWxmLl9ib2R5WydyZXN1bHRzJ10uaXRlcml0ZW1zKCk6
Ci0gICAgICAgICAgICB0ZXN0ID0gc2VsZi5fYWRkX3Rlc3RfaWZfbmVlZGVkKHRlc3RfbmFtZSwg
YnJhbmNoLCBwbGF0Zm9ybSkKLSAgICAgICAgICAgIHNjaGVkdWxlX3J1bnNfdXBkYXRlKHRlc3Qu
aWQsIGJyYW5jaC5pZCwgcGxhdGZvcm0uaWQpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJl
c3VsdCwgZGljdCk6Ci0gICAgICAgICAgICAgICAgVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwg
YnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0KHJlc3VsdFsnYXZnJ10pLCB2YWx1ZU1lZGlhbj1fZmxv
YXRfb3Jfbm9uZShyZXN1bHQsICdtZWRpYW4nKSwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVT
dGRldj1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdzdGRldicpLCB2YWx1ZU1pbj1fZmxvYXRfb3Jf
bm9uZShyZXN1bHQsICdtaW4nKSwgdmFsdWVNYXg9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWF4
JykpLnB1dCgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIFRlc3RSZXN1bHQo
bmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHQpKS5wdXQoKQot
Ci0gICAgICAgIGxvZyA9IFJlcG9ydExvZy5nZXQobG9nLmtleSgpKQotICAgICAgICBsb2cuZGVs
ZXRlKCkKLQotICAgICAgICAjIFdlIG5lZWQgdG8gdXBkYXRlIGRhc2hib2FyZCBhbmQgbWFuaWZl
c3QgYmVjYXVzZSB0aGV5IGFyZSBhZmZlY3RlZCBieSB0aGUgZXhpc3RhbmNlIG9mIHRlc3QgcmVz
dWx0cwotICAgICAgICBzY2hlZHVsZV9kYXNoYm9hcmRfdXBkYXRlKCkKLSAgICAgICAgc2NoZWR1
bGVfbWFuaWZlc3RfdXBkYXRlKCkKLQotICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdPSycp
Ci0KLSAgICBkZWYgX21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3JfZXJyb3Ioc2VsZiwgbW9k
ZWwsIGtleU5hbWUpOgotICAgICAgICBrZXkgPSBzZWxmLl9ib2R5LmdldChrZXlOYW1lLCAnJykK
LSAgICAgICAgaW5zdGFuY2UgPSBrZXkgYW5kIG1vZGVsLmdldF9ieV9rZXlfbmFtZShrZXkpCi0g
ICAgICAgIGlmIG5vdCBpbnN0YW5jZToKLSAgICAgICAgICAgIHNlbGYuX291dHB1dCgnVGhlcmUg
YXJlIG5vICVzIG5hbWVkICIlcyInICUgKG1vZGVsLl9fbmFtZV9fLmxvd2VyKCksIGtleSkpCi0g
ICAgICAgIHJldHVybiBpbnN0YW5jZQotCi0gICAgZGVmIF9pbnRlZ2VyX2luX2JvZHkoc2VsZiwg
a2V5KToKLSAgICAgICAgdmFsdWUgPSBzZWxmLl9ib2R5LmdldChrZXksICcnKQotICAgICAgICB0
cnk6Ci0gICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlKQotICAgICAgICBleGNlcHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdJbnZhbGlkICVzOiAiJXMiJyAlIChrZXkucmVw
bGFjZSgnLScsICcgJyksIHZhbHVlKSkKLQotICAgIGRlZiBfdGltZXN0YW1wX2luX2JvZHkoc2Vs
Zik6Ci0gICAgICAgIHZhbHVlID0gc2VsZi5fYm9keS5nZXQoJ3RpbWVzdGFtcCcsICcnKQotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChpbnQo
dmFsdWUpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0
KCdGYWlsZWQgdG8gcGFyc2UgdGhlIHRpbWVzdGFtcDogJXMnICUgdmFsdWUpCisgICAgICAgIGxv
Zy5jb21taXQgPSBUcnVlCisgICAgICAgIGxvZy5wdXQoKQorICAgICAgICBzY2hlZHVsZV9yZXBv
cnRfcHJvY2Vzcyhsb2cpCisgICAgICAgIHNlbGYuX291dHB1dCgiT0siKQogCiAgICAgZGVmIF9v
dXRwdXQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuX2VuY291bnRlcmVkX2Vycm9yID0g
VHJ1ZQogICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZShtZXNzYWdlICsgJ1xuJykKIAog
ICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2VsZik6CiAgICAgICAgIHJldHVybiBGYWxz
ZQogCi0gICAgZGVmIF9yZXN1bHRzX2FyZV92YWxpZChzZWxmKToKKyAgICBkZWYgX3Jlc3VsdHNf
YXJlX3ZhbGlkKHNlbGYsIGxvZyk6CiAKICAgICAgICAgZGVmIF9pc19mbG9hdF9jb252ZXJ0aWJs
ZSh2YWx1ZSk6CiAgICAgICAgICAgICB0cnk6CkBAIC0xNDgsMTEgKzk1LDEzIEBAIGNsYXNzIFJl
cG9ydEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGwKICAgICAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQogICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAg
IHJldHVybiBGYWxzZQogCi0gICAgICAgIGlmICdyZXN1bHRzJyBub3QgaW4gc2VsZi5fYm9keSBv
ciBub3QgaXNpbnN0YW5jZShzZWxmLl9ib2R5WydyZXN1bHRzJ10sIGRpY3QpOgorICAgICAgICBp
ZiBub3QgaXNpbnN0YW5jZShsb2cucmVzdWx0cygpLCBkaWN0KToKICAgICAgICAgICAgIHJldHVy
biBGYWxzZQogCi0gICAgICAgIGZvciB0ZXN0UmVzdWx0IGluIHNlbGYuX2JvZHlbJ3Jlc3VsdHMn
XS52YWx1ZXMoKToKKyAgICAgICAgZm9yIHRlc3RSZXN1bHQgaW4gbG9nLnJlc3VsdHMoKS52YWx1
ZXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdFJlc3VsdCwgZGljdCk6CiAgICAg
ICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RSZXN1bHQudmFsdWVzKCk6CiAgICAgICAgICAg
ICAgICAgICAgIGlmIG5vdCBfaXNfZmxvYXRfY29udmVydGlibGUodmFsdWUpOgpAQCAtMTY1LDM0
ICsxMTQsNiBAQCBjbGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAKICAg
ICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiBfY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKHNl
bGYsIGJ1aWxkZXIsIGJ1aWxkX251bWJlciwgYnJhbmNoLCBwbGF0Zm9ybSwgdGltZXN0YW1wLCBy
ZXZpc2lvbiwgY2hyb21pdW1fcmV2aXNpb24pOgotICAgICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIu
bmFtZSArICc6JyArIHN0cihpbnQodGltZS5ta3RpbWUodGltZXN0YW1wLnRpbWV0dXBsZSgpKSkp
Ci0KLSAgICAgICAgZGVmIGV4ZWN1dGUoKToKLSAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQuZ2V0
X2J5X2tleV9uYW1lKGtleV9uYW1lKQotICAgICAgICAgICAgaWYgYnVpbGQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgnVGhlIGJ1aWxkIGF0ICVzIGFscmVhZHkgZXhpc3Rz
IGZvciAlcycgJSAoc3RyKHRpbWVzdGFtcCksIGJ1aWxkZXIubmFtZSkpCi0KLSAgICAgICAgICAg
IHJldHVybiBCdWlsZChicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVpbGRlcj1i
dWlsZGVyLCBidWlsZE51bWJlcj1idWlsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgdGltZXN0
YW1wPXRpbWVzdGFtcCwgcmV2aXNpb249cmV2aXNpb24sIGNocm9taXVtUmV2aXNpb249Y2hyb21p
dW1fcmV2aXNpb24sIGtleV9uYW1lPWtleV9uYW1lKS5wdXQoKQotICAgICAgICByZXR1cm4gZGIu
cnVuX2luX3RyYW5zYWN0aW9uKGV4ZWN1dGUpCi0KLSAgICBkZWYgX2FkZF90ZXN0X2lmX25lZWRl
ZChzZWxmLCB0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pOgotCi0gICAgICAgIGRlZiBleGVj
dXRlKGlkKToKLSAgICAgICAgICAgIHRlc3QgPSBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25h
bWUpCi0gICAgICAgICAgICByZXR1cm5WYWx1ZSA9IE5vbmUKLSAgICAgICAgICAgIGlmIG5vdCB0
ZXN0OgotICAgICAgICAgICAgICAgIHRlc3QgPSBUZXN0KGlkPWlkLCBuYW1lPXRlc3RfbmFtZSwg
a2V5X25hbWU9dGVzdF9uYW1lKQotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdGVzdAot
ICAgICAgICAgICAgaWYgYnJhbmNoLmtleSgpIG5vdCBpbiB0ZXN0LmJyYW5jaGVzOgotICAgICAg
ICAgICAgICAgIHRlc3QuYnJhbmNoZXMuYXBwZW5kKGJyYW5jaC5rZXkoKSkKLSAgICAgICAgICAg
IGlmIHBsYXRmb3JtLmtleSgpIG5vdCBpbiB0ZXN0LnBsYXRmb3JtczoKLSAgICAgICAgICAgICAg
ICB0ZXN0LnBsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0ua2V5KCkpCi0gICAgICAgICAgICB0ZXN0
LnB1dCgpCi0gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4ZWN1dGUpIG9yIFRl
c3QuZ2V0X2J5X2tleV9uYW1lKHRlc3RfbmFtZSkKLQogCiBjbGFzcyBBZG1pblJlcG9ydEhhbmRs
ZXIoUmVwb3J0SGFuZGxlcik6CiAgICAgZGVmIGJ5cGFzc19hdXRoZW50aWNhdGlvbihzZWxmKToK
SW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9sb2dzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xv
Z3MueWFtbAkocmV2aXNpb24gMCkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29t
L3JlcG9ydF9sb2dzLnlhbWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwcmU+e3sgc3RhdHVzIH19PC9wcmU+Cis8aDE+UmVw
b3J0IGxvZ3M8L2gxPgorCis8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKwordGFibGUg
eyB3aWR0aDogMTAwJTsgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsgYm9yZGVyLWNvbGxhcHNlOiBj
b2xsYXBzZTsgfQordGQgeyBib3JkZXI6IHNvbGlkIDFweCAjY2NjOyBwYWRkaW5nOiA1cHg7IH0K
Ky5jb250cm9sIGNvZGUgeyBkaXNwbGF5OiBub25lOyB9Citjb2RlIHsgd2hpdGUtc3BhY2U6IHBy
ZS13cmFwOyB9Citmb3JtIHsgZGlzcGxheTogaW5saW5lOyB9CisKKzwvc3R5bGU+Cis8c2NyaXB0
PgorCiskID0gZnVuY3Rpb24gKGlkKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp
ZCk7IH0KKworZnVuY3Rpb24gc2hvdyhpZCkgeworICAgIHZhciByb3cgPSAkKCdyb3dfJyArIGlk
KTsKKyAgICB2YXIgY29kZSA9IHJvdy5xdWVyeVNlbGVjdG9yKCdjb2RlJyk7CisgICAgaWYgKCFj
b2RlKQorICAgICAgICByZXR1cm47CisgICAgdmFyIG5ld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3RyJyk7CisgICAgbmV3Um93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3RkJykpOworICAgIG5ld1Jvdy5maXJzdENoaWxkLmFwcGVuZENoaWxkKGNvZGUpOworICAg
IG5ld1Jvdy5maXJzdENoaWxkLmNvbFNwYW4gPSA4OworICAgIHJvdy5wYXJlbnROb2RlLmluc2Vy
dEJlZm9yZShuZXdSb3csIHJvdy5uZXh0U2libGluZyk7CisgICAgdHJ5IHsKKyAgICAgICAgY29k
ZS50ZXh0Q29udGVudCA9IEpTT04uc3RyaW5naWZ5KEpTT04ucGFyc2UoY29kZS50ZXh0Q29udGVu
dCksIG51bGwsIDIpOworICAgIH0gY2F0Y2ggKGUpIHsgfQorfQorCitmdW5jdGlvbiBzdWJtaXQo
Zm9ybSwgZXZlbnQpIHsKKyAgICBpZiAoIWNvbmZpcm0oJ0FyZSB5b3Ugc3VyZT8nKSkKKyAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworPC9zY3JpcHQ+Cis8dGFibGU+Cis8dGhl
YWQ+Cis8dHI+CisgICAgPHRkPklkPC90ZD4KKyAgICA8dGQ+QnJhbmNoPC90ZD4KKyAgICA8dGQ+
UGxhdGZvcm08L3RkPgorICAgIDx0ZD5CdWlsZGVyPC90ZD4KKyAgICA8dGQ+QnVpbGQ8L3RkPgor
ICAgIDx0ZD5XZWJLaXQgcmV2aXNpb248L3RkPgorICAgIDx0ZD5DaHJvbWl1bSByZXZpc2lvbjwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjb250cm9sIj5QYXlsb2FkPC90ZD4KKzwvdHI+Cis8L3RoZWFk
PgorPHRib2R5PgoreyUgZm9yIGxvZyBpbiBsb2dzICV9Cis8dHIgaWQ9InJvd197eyBsb2cua2V5
LmlkIH19Ij4KKyAgICA8dGQ+e3sgbG9nLmtleS5pZCB9fTwvdGQ+CisgICAgPHRkPnt7IGxvZy5i
cmFuY2gubmFtZSB9fTwvdGQ+CisgICAgPHRkPnt7IGxvZy5wbGF0Zm9ybS5uYW1lIH19PC90ZD4K
KyAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMve3sgbG9n
LmJ1aWxkZXIubmFtZSB9fS8iPnt7IGxvZy5idWlsZGVyLm5hbWUgfX08L2E+PC90ZD4KKyAgICA8
dGQ+PGEgaHJlZj0iaHR0cDovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMve3sgbG9nLmJ1aWxk
ZXIubmFtZSB9fS9idWlsZHMve3sgbG9nLmJ1aWxkX251bWJlciB9fSI+e3sgbG9nLmJ1aWxkX251
bWJlciB9fTwvYT48L3RkPgorICAgIDx0ZD48YSBocmVmPSJodHRwOi8vdHJhYy53ZWJraXQub3Jn
L2NoYW5nZXNldC97eyBsb2cud2Via2l0X3JldmlzaW9uIH19Ij57eyBsb2cud2Via2l0X3Jldmlz
aW9uIH19PC9hPjwvdGQ+CisgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9zcmMuY2hyb21pdW0ub3Jn
L3ZpZXd2Yy9jaHJvbWU/dmlldz1yZXYmYW1wO3JldmlzaW9uPXt7IGxvZy5jaHJvbWl1bV9yZXZp
c2lvbiB9fSI+e3sgbG9nLmNocm9taXVtX3JldmlzaW9uIH19PC9hPjwvdGQ+CisgICAgPHRkIGNs
YXNzPSJjb250cm9sIj48YnV0dG9uIG9uY2xpY2s9InNob3coe3sgbG9nLmtleS5pZCB9fSkiPlNo
b3c8L2J1dHRvbj4KKyAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ii9hZG1pbi9y
ZXBvcnQtbG9ncyIgb25zdWJtaXQ9InN1Ym1pdCh0aGlzLCBldmVudCkiPgorICAgICAgICA8aW5w
dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJpZCIgdmFsdWU9Int7IGxvZy5rZXkuaWQgfX0iPgorICAg
ICAgICA8YnV0dG9uIG5hbWU9ImNvbW1pdCIgdmFsdWU9InRydWUiPkNvbW1pdDwvYnV0dG9uPgor
ICAgICAgICA8YnV0dG9uIG5hbWU9ImRlbGV0ZSIgdmFsdWU9InRydWUiPkRlbGV0ZTwvYnV0dG9u
PjwvZm9ybT4KKyAgICAgICAgPGNvZGU+e3sgbG9nLnBheWxvYWQgfX08L2NvZGU+PC90ZD4KKzwv
dHI+Cit7JSBlbmRmb3IgJX0KKzwvdGJvZHk+Cis8L3RhYmxlPgorCis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfbG9nc19oYW5k
bGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3Jl
cG9ydF9sb2dzX2hhbmRsZXIucHkJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9yZXBvcnRfbG9nc19oYW5kbGVyLnB5CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgd2ViYXBwMgorZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAgaW1wb3J0IHRlbXBs
YXRlCisKK2ltcG9ydCBvcworCitmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX3JlcG9y
dF9wcm9jZXNzCitmcm9tIG1vZGVscyBpbXBvcnQgUmVwb3J0TG9nCisKKworY2xhc3MgUmVwb3J0
TG9nc0hhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIGdldChzZWxmKToK
KyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCdyZXBvcnRf
bG9ncy55YW1sJywgeydsb2dzJzogUmVwb3J0TG9nLmFsbCgpfSkpCisKKyAgICBkZWYgcG9zdChz
ZWxmKToKKyAgICAgICAgY29tbWl0ID0gYm9vbChzZWxmLnJlcXVlc3QuZ2V0KCdjb21taXQnKSkK
KyAgICAgICAgZGVsZXRlID0gYm9vbChzZWxmLnJlcXVlc3QuZ2V0KCdkZWxldGUnKSkKKyAgICAg
ICAgaWYgY29tbWl0ID09IGRlbGV0ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcnJvcign
SW52YWxpZCByZXF1ZXN0JykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2cgPSBSZXBv
cnRMb2cuZ2V0X2J5X2lkKGludChzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsIDApKSkKKyAgICAgICAg
ZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vycm9yKCdJbnZhbGlkIGxvZyBpZCAi
JXMiJyAlIHNlbGYucmVxdWVzdC5nZXQoJ2lkJywgJycpKQorCisgICAgICAgIGlmIG5vdCBsb2c6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXJyb3IoJ05vIGxvZyBmb3VuZCBmb3IgIiVzIicg
JSBzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsICcnKSkKKworICAgICAgICBpZiBjb21taXQ6CisgICAg
ICAgICAgICBsb2cuY29tbWl0ID0gVHJ1ZQorICAgICAgICAgICAgbG9nLnB1dCgpCisgICAgICAg
ICAgICBzY2hlZHVsZV9yZXBvcnRfcHJvY2Vzcyhsb2cpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBsb2cuZGVsZXRlKCkKKworICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh0ZW1w
bGF0ZS5yZW5kZXIoJ3JlcG9ydF9sb2dzLnlhbWwnLCB7J2xvZ3MnOiBSZXBvcnRMb2cuYWxsKCks
ICdzdGF0dXMnOiAnT0snfSkpCisKKyAgICBkZWYgX2Vycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAg
ICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgnCisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKG1lc3NhZ2Ug
KyAnXG4nKQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X3By
b2Nlc3NfaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5CShyZXZpc2lvbiAxMDczMzEpCShmcm9t
IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5OjEwNzMz
MSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hh
bmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTkgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB3ZWJhcHAyCitmcm9tIGdvb2dsZS5h
cHBlbmdpbmUuZXh0IGltcG9ydCBkYgorCitpbXBvcnQganNvbgoraW1wb3J0IHJlCitpbXBvcnQg
dGltZQorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKworZnJvbSBjb250cm9sbGVyIGlt
cG9ydCBzY2hlZHVsZV9ydW5zX3VwZGF0ZQorZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVs
ZV9kYXNoYm9hcmRfdXBkYXRlCitmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX21hbmlm
ZXN0X3VwZGF0ZQorZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkZXIKK2Zyb20gbW9kZWxzIGltcG9y
dCBCcmFuY2gKK2Zyb20gbW9kZWxzIGltcG9ydCBCdWlsZAorZnJvbSBtb2RlbHMgaW1wb3J0IE51
bWVyaWNJZEhvbGRlcgorZnJvbSBtb2RlbHMgaW1wb3J0IFBsYXRmb3JtCitmcm9tIG1vZGVscyBp
bXBvcnQgUmVwb3J0TG9nCitmcm9tIG1vZGVscyBpbXBvcnQgVGVzdAorZnJvbSBtb2RlbHMgaW1w
b3J0IFRlc3RSZXN1bHQKK2Zyb20gbW9kZWxzIGltcG9ydCBjcmVhdGVfaW5fdHJhbnNhY3Rpb25f
d2l0aF9udW1lcmljX2lkX2hvbGRlcgorCisKK2NsYXNzIFJlcG9ydEhhbmRsZXIod2ViYXBwMi5S
ZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIHBvc3Qoc2VsZik6CisgICAgICAgIHNlbGYucmVzcG9u
c2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcK
KworICAgICAgICBoZWFkZXJzID0gIlxuIi5qb2luKFtrZXkgKyAnOiAnICsgdmFsdWUgZm9yIGtl
eSwgdmFsdWUgaW4gc2VsZi5yZXF1ZXN0LmhlYWRlcnMuaXRlbXMoKV0pCisKKyAgICAgICAgIyBE
byBhcyBiZXN0IGFzIHdlIGNhbiB0byByZW1vdmUgdGhlIHBhc3N3b3JkCisgICAgICAgIHJlcXVl
c3RfYm9keV93aXRob3V0X3Bhc3N3b3JkID0gcmUuc3ViKHInInBhc3N3b3JkIlxzKjpccyoiLis/
IiwnLCAnJywgc2VsZi5yZXF1ZXN0LmJvZHkpCisgICAgICAgIGxvZyA9IFJlcG9ydExvZyh0aW1l
c3RhbXA9ZGF0ZXRpbWUubm93KCksIGhlYWRlcnM9aGVhZGVycywgcGF5bG9hZD1yZXF1ZXN0X2Jv
ZHlfd2l0aG91dF9wYXNzd29yZCkKKyAgICAgICAgbG9nLnB1dCgpCisKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgc2VsZi5fYm9keSA9IGpzb24ubG9hZHMoc2VsZi5yZXF1ZXN0LmJvZHkpCisg
ICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1
dCgnRmFpbGVkIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGFzIGEganNvbi4gUmVwb3J0IGtleTogJWQn
ICUgbG9nLmtleSgpLmlkKCkpCisKKyAgICAgICAgYnVpbGRlciA9IHNlbGYuX21vZGVsX2J5X2tl
eV9uYW1lX2luX2JvZHlfb3JfZXJyb3IoQnVpbGRlciwgJ2J1aWxkZXItbmFtZScpCisgICAgICAg
IGJyYW5jaCA9IHNlbGYuX21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3JfZXJyb3IoQnJhbmNo
LCAnYnJhbmNoJykKKyAgICAgICAgcGxhdGZvcm0gPSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9p
bl9ib2R5X29yX2Vycm9yKFBsYXRmb3JtLCAncGxhdGZvcm0nKQorICAgICAgICBidWlsZF9udW1i
ZXIgPSBzZWxmLl9pbnRlZ2VyX2luX2JvZHkoJ2J1aWxkLW51bWJlcicpCisgICAgICAgIHRpbWVz
dGFtcCA9IHNlbGYuX3RpbWVzdGFtcF9pbl9ib2R5KCkKKyAgICAgICAgcmV2aXNpb24gPSBzZWxm
Ll9pbnRlZ2VyX2luX2JvZHkoJ3dlYmtpdC1yZXZpc2lvbicpCisgICAgICAgIGNocm9taXVtX3Jl
dmlzaW9uID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQtcmV2aXNpb24nKSBpZiAnY2hy
b21pdW0tcmV2aXNpb24nIGluIHNlbGYuX2JvZHkgZWxzZSBOb25lCisKKyAgICAgICAgZmFpbGVk
ID0gRmFsc2UKKyAgICAgICAgaWYgYnVpbGRlciBhbmQgbm90IChzZWxmLmJ5cGFzc19hdXRoZW50
aWNhdGlvbigpIG9yIGJ1aWxkZXIuYXV0aGVudGljYXRlKHNlbGYuX2JvZHkuZ2V0KCdwYXNzd29y
ZCcsICcnKSkpOgorICAgICAgICAgICAgc2VsZi5fb3V0cHV0KCdBdXRoZW50aWNhdGlvbiBmYWls
ZWQnKQorICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9y
ZXN1bHRzX2FyZV92YWxpZCgpOgorICAgICAgICAgICAgc2VsZi5fb3V0cHV0KCJUaGUgcGF5bG9h
ZCBkb2Vzbid0IGNvbnRhaW4gcmVzdWx0cyBvciByZXN1bHRzIGFyZSBtYWxmb3JtZWQiKQorICAg
ICAgICAgICAgZmFpbGVkID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCAoYnVpbGRlciBhbmQgYnJh
bmNoIGFuZCBwbGF0Zm9ybSBhbmQgYnVpbGRfbnVtYmVyIGFuZCByZXZpc2lvbiBhbmQgdGltZXN0
YW1wKSBvciBmYWlsZWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBidWlsZCA9IHNl
bGYuX2NyZWF0ZV9idWlsZF9pZl9wb3NzaWJsZShidWlsZGVyLCBidWlsZF9udW1iZXIsIGJyYW5j
aCwgcGxhdGZvcm0sIHRpbWVzdGFtcCwgcmV2aXNpb24sIGNocm9taXVtX3JldmlzaW9uKQorICAg
ICAgICBpZiBub3QgYnVpbGQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgX2Zs
b2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKKyAgICAgICAgICAgIHZhbHVlID0gZGljdGlv
bmFyeS5nZXQoa2V5KQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBmb3Ig
dGVzdF9uYW1lLCByZXN1bHQgaW4gc2VsZi5fYm9keVsncmVzdWx0cyddLml0ZXJpdGVtcygpOgor
ICAgICAgICAgICAgdGVzdCA9IHNlbGYuX2FkZF90ZXN0X2lmX25lZWRlZCh0ZXN0X25hbWUsIGJy
YW5jaCwgcGxhdGZvcm0pCisgICAgICAgICAgICBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0Lmlk
LCBicmFuY2guaWQsIHBsYXRmb3JtLmlkKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1
bHQsIGRpY3QpOgorICAgICAgICAgICAgICAgIFRlc3RSZXN1bHQobmFtZT10ZXN0X25hbWUsIGJ1
aWxkPWJ1aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHRbJ2F2ZyddKSwgdmFsdWVNZWRpYW49X2Zsb2F0
X29yX25vbmUocmVzdWx0LCAnbWVkaWFuJyksCisgICAgICAgICAgICAgICAgICAgIHZhbHVlU3Rk
ZXY9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnc3RkZXYnKSwgdmFsdWVNaW49X2Zsb2F0X29yX25v
bmUocmVzdWx0LCAnbWluJyksIHZhbHVlTWF4PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ21heCcp
KS5wdXQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBUZXN0UmVzdWx0KG5h
bWU9dGVzdF9uYW1lLCBidWlsZD1idWlsZCwgdmFsdWU9ZmxvYXQocmVzdWx0KSkucHV0KCkKKwor
ICAgICAgICBsb2cgPSBSZXBvcnRMb2cuZ2V0KGxvZy5rZXkoKSkKKyAgICAgICAgbG9nLmRlbGV0
ZSgpCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHVwZGF0ZSBkYXNoYm9hcmQgYW5kIG1hbmlmZXN0
IGJlY2F1c2UgdGhleSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGV4aXN0YW5jZSBvZiB0ZXN0IHJlc3Vs
dHMKKyAgICAgICAgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZSgpCisgICAgICAgIHNjaGVkdWxl
X21hbmlmZXN0X3VwZGF0ZSgpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgnT0snKQor
CisgICAgZGVmIF9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKHNlbGYsIG1vZGVs
LCBrZXlOYW1lKToKKyAgICAgICAga2V5ID0gc2VsZi5fYm9keS5nZXQoa2V5TmFtZSwgJycpCisg
ICAgICAgIGluc3RhbmNlID0ga2V5IGFuZCBtb2RlbC5nZXRfYnlfa2V5X25hbWUoa2V5KQorICAg
ICAgICBpZiBub3QgaW5zdGFuY2U6CisgICAgICAgICAgICBzZWxmLl9vdXRwdXQoJ1RoZXJlIGFy
ZSBubyAlcyBuYW1lZCAiJXMiJyAlIChtb2RlbC5fX25hbWVfXy5sb3dlcigpLCBrZXkpKQorICAg
ICAgICByZXR1cm4gaW5zdGFuY2UKKworICAgIGRlZiBfaW50ZWdlcl9pbl9ib2R5KHNlbGYsIGtl
eSk6CisgICAgICAgIHZhbHVlID0gc2VsZi5fYm9keS5nZXQoa2V5LCAnJykKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcmV0dXJuIGludCh2YWx1ZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgnSW52YWxpZCAlczogIiVzIicgJSAoa2V5LnJlcGxh
Y2UoJy0nLCAnICcpLCB2YWx1ZSkpCisKKyAgICBkZWYgX3RpbWVzdGFtcF9pbl9ib2R5KHNlbGYp
OgorICAgICAgICB2YWx1ZSA9IHNlbGYuX2JvZHkuZ2V0KCd0aW1lc3RhbXAnLCAnJykKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmZyb210aW1lc3RhbXAoaW50KHZh
bHVlKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgn
RmFpbGVkIHRvIHBhcnNlIHRoZSB0aW1lc3RhbXA6ICVzJyAlIHZhbHVlKQorCisgICAgZGVmIF9v
dXRwdXQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKG1l
c3NhZ2UgKyAnXG4nKQorCisgICAgZGVmIGJ5cGFzc19hdXRoZW50aWNhdGlvbihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3Jlc3VsdHNfYXJlX3ZhbGlkKHNlbGYpOgor
CisgICAgICAgIGRlZiBfaXNfZmxvYXRfY29udmVydGlibGUodmFsdWUpOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgICAgIGlmICdyZXN1bHRzJyBub3QgaW4gc2VsZi5fYm9keSBvciBu
b3QgaXNpbnN0YW5jZShzZWxmLl9ib2R5WydyZXN1bHRzJ10sIGRpY3QpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgZm9yIHRlc3RSZXN1bHQgaW4gc2VsZi5fYm9keVsncmVz
dWx0cyddLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0UmVzdWx0LCBk
aWN0KToKKyAgICAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdFJlc3VsdC52YWx1ZXMoKToK
KyAgICAgICAgICAgICAgICAgICAgaWYgbm90IF9pc19mbG9hdF9jb252ZXJ0aWJsZSh2YWx1ZSk6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBp
ZiAnYXZnJyBub3QgaW4gdGVzdFJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5vdCBfaXNfZmxv
YXRfY29udmVydGlibGUodGVzdFJlc3VsdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY3JlYXRlX2J1aWxkX2lmX3Bvc3Np
YmxlKHNlbGYsIGJ1aWxkZXIsIGJ1aWxkX251bWJlciwgYnJhbmNoLCBwbGF0Zm9ybSwgdGltZXN0
YW1wLCByZXZpc2lvbiwgY2hyb21pdW1fcmV2aXNpb24pOgorICAgICAgICBrZXlfbmFtZSA9IGJ1
aWxkZXIubmFtZSArICc6JyArIHN0cihpbnQodGltZS5ta3RpbWUodGltZXN0YW1wLnRpbWV0dXBs
ZSgpKSkpCisKKyAgICAgICAgZGVmIGV4ZWN1dGUoKToKKyAgICAgICAgICAgIGJ1aWxkID0gQnVp
bGQuZ2V0X2J5X2tleV9uYW1lKGtleV9uYW1lKQorICAgICAgICAgICAgaWYgYnVpbGQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgnVGhlIGJ1aWxkIGF0ICVzIGFscmVhZHkg
ZXhpc3RzIGZvciAlcycgJSAoc3RyKHRpbWVzdGFtcCksIGJ1aWxkZXIubmFtZSkpCisKKyAgICAg
ICAgICAgIHJldHVybiBCdWlsZChicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVp
bGRlcj1idWlsZGVyLCBidWlsZE51bWJlcj1idWlsZF9udW1iZXIsCisgICAgICAgICAgICAgICAg
dGltZXN0YW1wPXRpbWVzdGFtcCwgcmV2aXNpb249cmV2aXNpb24sIGNocm9taXVtUmV2aXNpb249
Y2hyb21pdW1fcmV2aXNpb24sIGtleV9uYW1lPWtleV9uYW1lKS5wdXQoKQorICAgICAgICByZXR1
cm4gZGIucnVuX2luX3RyYW5zYWN0aW9uKGV4ZWN1dGUpCisKKyAgICBkZWYgX2FkZF90ZXN0X2lm
X25lZWRlZChzZWxmLCB0ZXN0X25hbWUsIGJyYW5jaCwgcGxhdGZvcm0pOgorCisgICAgICAgIGRl
ZiBleGVjdXRlKGlkKToKKyAgICAgICAgICAgIHRlc3QgPSBUZXN0LmdldF9ieV9rZXlfbmFtZSh0
ZXN0X25hbWUpCisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGlm
IG5vdCB0ZXN0OgorICAgICAgICAgICAgICAgIHRlc3QgPSBUZXN0KGlkPWlkLCBuYW1lPXRlc3Rf
bmFtZSwga2V5X25hbWU9dGVzdF9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
dGVzdAorICAgICAgICAgICAgaWYgYnJhbmNoLmtleSgpIG5vdCBpbiB0ZXN0LmJyYW5jaGVzOgor
ICAgICAgICAgICAgICAgIHRlc3QuYnJhbmNoZXMuYXBwZW5kKGJyYW5jaC5rZXkoKSkKKyAgICAg
ICAgICAgIGlmIHBsYXRmb3JtLmtleSgpIG5vdCBpbiB0ZXN0LnBsYXRmb3JtczoKKyAgICAgICAg
ICAgICAgICB0ZXN0LnBsYXRmb3Jtcy5hcHBlbmQocGxhdGZvcm0ua2V5KCkpCisgICAgICAgICAg
ICB0ZXN0LnB1dCgpCisgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4ZWN1dGUp
IG9yIFRlc3QuZ2V0X2J5X2tleV9uYW1lKHRlc3RfbmFtZSkKKworCitjbGFzcyBBZG1pblJlcG9y
dEhhbmRsZXIoUmVwb3J0SGFuZGxlcik6CisgICAgZGVmIGJ5cGFzc19hdXRoZW50aWNhdGlvbihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0
ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X3Byb2Nlc3NfaGFuZGxlci5weQkocmV2
aXNpb24gMTA3MzMxKQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0
X3Byb2Nlc3NfaGFuZGxlci5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsNjMgKzMwLDI3IEBACiBp
bXBvcnQgd2ViYXBwMgogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKIAotaW1w
b3J0IGpzb24KLWltcG9ydCByZQogaW1wb3J0IHRpbWUKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IGRh
dGV0aW1lCiAKIGZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfcnVuc191cGRhdGUKIGZy
b20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZQogZnJvbSBjb250
cm9sbGVyIGltcG9ydCBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUKLWZyb20gbW9kZWxzIGltcG9y
dCBCdWlsZGVyCi1mcm9tIG1vZGVscyBpbXBvcnQgQnJhbmNoCiBmcm9tIG1vZGVscyBpbXBvcnQg
QnVpbGQKLWZyb20gbW9kZWxzIGltcG9ydCBOdW1lcmljSWRIb2xkZXIKLWZyb20gbW9kZWxzIGlt
cG9ydCBQbGF0Zm9ybQogZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExvZwogZnJvbSBtb2RlbHMg
aW1wb3J0IFRlc3QKIGZyb20gbW9kZWxzIGltcG9ydCBUZXN0UmVzdWx0CiBmcm9tIG1vZGVscyBp
bXBvcnQgY3JlYXRlX2luX3RyYW5zYWN0aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIKIAogCi1j
bGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgorY2xhc3MgUmVwb3J0
UHJvY2Vzc0hhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6CiAgICAgZGVmIHBvc3Qoc2Vs
Zik6CiAgICAgICAgIHNlbGYucmVzcG9uc2UuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4
dC9wbGFpbjsgY2hhcnNldD11dGYtOCcKIAotICAgICAgICBoZWFkZXJzID0gIlxuIi5qb2luKFtr
ZXkgKyAnOiAnICsgdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5yZXF1ZXN0LmhlYWRlcnMu
aXRlbXMoKV0pCisgICAgICAgIGxvZ19pZCA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsIDAp
KQogCi0gICAgICAgICMgRG8gYXMgYmVzdCBhcyB3ZSBjYW4gdG8gcmVtb3ZlIHRoZSBwYXNzd29y
ZAotICAgICAgICByZXF1ZXN0X2JvZHlfd2l0aG91dF9wYXNzd29yZCA9IHJlLnN1YihyJyJwYXNz
d29yZCJccyo6XHMqIi4rPyIsJywgJycsIHNlbGYucmVxdWVzdC5ib2R5KQotICAgICAgICBsb2cg
PSBSZXBvcnRMb2codGltZXN0YW1wPWRhdGV0aW1lLm5vdygpLCBoZWFkZXJzPWhlYWRlcnMsIHBh
eWxvYWQ9cmVxdWVzdF9ib2R5X3dpdGhvdXRfcGFzc3dvcmQpCi0gICAgICAgIGxvZy5wdXQoKQot
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2JvZHkgPSBqc29uLmxvYWRzKHNlbGYu
cmVxdWVzdC5ib2R5KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9vdXRwdXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgcGF5bG9hZCBhcyBhIGpzb24u
IFJlcG9ydCBrZXk6ICVkJyAlIGxvZy5rZXkoKS5pZCgpKQotCi0gICAgICAgIGJ1aWxkZXIgPSBz
ZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJ1aWxkZXIsICdidWlsZGVy
LW5hbWUnKQotICAgICAgICBicmFuY2ggPSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5
X29yX2Vycm9yKEJyYW5jaCwgJ2JyYW5jaCcpCi0gICAgICAgIHBsYXRmb3JtID0gc2VsZi5fbW9k
ZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihQbGF0Zm9ybSwgJ3BsYXRmb3JtJykKLSAg
ICAgICAgYnVpbGRfbnVtYmVyID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCdidWlsZC1udW1iZXIn
KQotICAgICAgICB0aW1lc3RhbXAgPSBzZWxmLl90aW1lc3RhbXBfaW5fYm9keSgpCi0gICAgICAg
IHJldmlzaW9uID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQtcmV2aXNpb24nKQotICAg
ICAgICBjaHJvbWl1bV9yZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnd2Via2l0LXJl
dmlzaW9uJykgaWYgJ2Nocm9taXVtLXJldmlzaW9uJyBpbiBzZWxmLl9ib2R5IGVsc2UgTm9uZQot
Ci0gICAgICAgIGZhaWxlZCA9IEZhbHNlCi0gICAgICAgIGlmIGJ1aWxkZXIgYW5kIG5vdCAoc2Vs
Zi5ieXBhc3NfYXV0aGVudGljYXRpb24oKSBvciBidWlsZGVyLmF1dGhlbnRpY2F0ZShzZWxmLl9i
b2R5LmdldCgncGFzc3dvcmQnLCAnJykpKToKLSAgICAgICAgICAgIHNlbGYuX291dHB1dCgnQXV0
aGVudGljYXRpb24gZmFpbGVkJykKLSAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKLQotICAgICAg
ICBpZiBub3Qgc2VsZi5fcmVzdWx0c19hcmVfdmFsaWQoKToKLSAgICAgICAgICAgIHNlbGYuX291
dHB1dCgiVGhlIHBheWxvYWQgZG9lc24ndCBjb250YWluIHJlc3VsdHMgb3IgcmVzdWx0cyBhcmUg
bWFsZm9ybWVkIikKLSAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKLQotICAgICAgICBpZiBub3Qg
KGJ1aWxkZXIgYW5kIGJyYW5jaCBhbmQgcGxhdGZvcm0gYW5kIGJ1aWxkX251bWJlciBhbmQgcmV2
aXNpb24gYW5kIHRpbWVzdGFtcCkgb3IgZmFpbGVkOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAg
ICAgICAgYnVpbGQgPSBzZWxmLl9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUoYnVpbGRlciwgYnVp
bGRfbnVtYmVyLCBicmFuY2gsIHBsYXRmb3JtLCB0aW1lc3RhbXAsIHJldmlzaW9uLCBjaHJvbWl1
bV9yZXZpc2lvbikKLSAgICAgICAgaWYgbm90IGJ1aWxkOgorICAgICAgICBsb2cgPSBSZXBvcnRM
b2cuZ2V0X2J5X2lkKGxvZ19pZCkKKyAgICAgICAgaWYgbm90IGxvZyBvciBub3QgbG9nLmNvbW1p
dDoKKyAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJOb3QgcHJvY2Vzc2VkIikK
ICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIGRlZiBfZmxvYXRfb3Jfbm9uZShkaWN0aW9u
YXJ5LCBrZXkpOgpAQCAtOTUsNyArNTksMTEgQEAgY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAy
LlJlcXVlc3RIYW5kbAogICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdCh2YWx1ZSkKICAgICAg
ICAgICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgZm9yIHRlc3RfbmFtZSwgcmVzdWx0IGluIHNl
bGYuX2JvZHlbJ3Jlc3VsdHMnXS5pdGVyaXRlbXMoKToKKyAgICAgICAgYnJhbmNoID0gbG9nLmJy
YW5jaCgpCisgICAgICAgIHBsYXRmb3JtID0gbG9nLnBsYXRmb3JtKCkKKyAgICAgICAgYnVpbGQg
PSBzZWxmLl9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUobG9nLCBicmFuY2gsIHBsYXRmb3JtKQor
CisgICAgICAgIGZvciB0ZXN0X25hbWUsIHJlc3VsdCBpbiBsb2cucmVzdWx0cygpLml0ZXJpdGVt
cygpOgogICAgICAgICAgICAgdGVzdCA9IHNlbGYuX2FkZF90ZXN0X2lmX25lZWRlZCh0ZXN0X25h
bWUsIGJyYW5jaCwgcGxhdGZvcm0pCiAgICAgICAgICAgICBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0
ZXN0LmlkLCBicmFuY2guaWQsIHBsYXRmb3JtLmlkKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShyZXN1bHQsIGRpY3QpOgpAQCAtMTExLDcwICs3OSwyMCBAQCBjbGFzcyBSZXBvcnRIYW5kbGVy
KHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAgICAgICAgIHNjaGVkdWxlX2Rhc2hib2FyZF91cGRhdGUo
KQogICAgICAgICBzY2hlZHVsZV9tYW5pZmVzdF91cGRhdGUoKQogCi0gICAgICAgIHJldHVybiBz
ZWxmLl9vdXRwdXQoJ09LJykKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoJ09LJykK
IAotICAgIGRlZiBfbW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihzZWxmLCBtb2Rl
bCwga2V5TmFtZSk6Ci0gICAgICAgIGtleSA9IHNlbGYuX2JvZHkuZ2V0KGtleU5hbWUsICcnKQot
ICAgICAgICBpbnN0YW5jZSA9IGtleSBhbmQgbW9kZWwuZ2V0X2J5X2tleV9uYW1lKGtleSkKLSAg
ICAgICAgaWYgbm90IGluc3RhbmNlOgotICAgICAgICAgICAgc2VsZi5fb3V0cHV0KCdUaGVyZSBh
cmUgbm8gJXMgbmFtZWQgIiVzIicgJSAobW9kZWwuX19uYW1lX18ubG93ZXIoKSwga2V5KSkKLSAg
ICAgICAgcmV0dXJuIGluc3RhbmNlCi0KLSAgICBkZWYgX2ludGVnZXJfaW5fYm9keShzZWxmLCBr
ZXkpOgotICAgICAgICB2YWx1ZSA9IHNlbGYuX2JvZHkuZ2V0KGtleSwgJycpCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgJXM6ICIlcyInICUgKGtleS5yZXBs
YWNlKCctJywgJyAnKSwgdmFsdWUpKQotCi0gICAgZGVmIF90aW1lc3RhbXBfaW5fYm9keShzZWxm
KToKLSAgICAgICAgdmFsdWUgPSBzZWxmLl9ib2R5LmdldCgndGltZXN0YW1wJywgJycpCi0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5mcm9tdGltZXN0YW1wKGludCh2
YWx1ZSkpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQo
J0ZhaWxlZCB0byBwYXJzZSB0aGUgdGltZXN0YW1wOiAlcycgJSB2YWx1ZSkKLQotICAgIGRlZiBf
b3V0cHV0KHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSht
ZXNzYWdlICsgJ1xuJykKLQotICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2VsZik6Ci0g
ICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9yZXN1bHRzX2FyZV92YWxpZChzZWxmKToK
LQotICAgICAgICBkZWYgX2lzX2Zsb2F0X2NvbnZlcnRpYmxlKHZhbHVlKToKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBmbG9hdCh2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLQotICAgICAgICBpZiAncmVzdWx0cycgbm90IGluIHNlbGYuX2JvZHkgb3Ig
bm90IGlzaW5zdGFuY2Uoc2VsZi5fYm9keVsncmVzdWx0cyddLCBkaWN0KToKLSAgICAgICAgICAg
IHJldHVybiBGYWxzZQotCi0gICAgICAgIGZvciB0ZXN0UmVzdWx0IGluIHNlbGYuX2JvZHlbJ3Jl
c3VsdHMnXS52YWx1ZXMoKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdFJlc3VsdCwg
ZGljdCk6Ci0gICAgICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RSZXN1bHQudmFsdWVzKCk6
Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaXNfZmxvYXRfY29udmVydGlibGUodmFsdWUp
OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICAgICAg
aWYgJ2F2Zycgbm90IGluIHRlc3RSZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBub3QgX2lzX2Zs
b2F0X2NvbnZlcnRpYmxlKHRlc3RSZXN1bHQpOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2NyZWF0ZV9idWlsZF9pZl9wb3Nz
aWJsZShzZWxmLCBidWlsZGVyLCBidWlsZF9udW1iZXIsIGJyYW5jaCwgcGxhdGZvcm0sIHRpbWVz
dGFtcCwgcmV2aXNpb24sIGNocm9taXVtX3JldmlzaW9uKToKLSAgICAgICAga2V5X25hbWUgPSBi
dWlsZGVyLm5hbWUgKyAnOicgKyBzdHIoaW50KHRpbWUubWt0aW1lKHRpbWVzdGFtcC50aW1ldHVw
bGUoKSkpKQorICAgIGRlZiBfY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKHNlbGYsIGxvZywgYnJh
bmNoLCBwbGF0Zm9ybSk6CisgICAgICAgIGJ1aWxkZXIgPSBsb2cuYnVpbGRlcigpCisgICAgICAg
IGtleV9uYW1lID0gYnVpbGRlci5uYW1lICsgJzonICsgc3RyKGludCh0aW1lLm1rdGltZShsb2cu
dGltZXN0YW1wKCkudGltZXR1cGxlKCkpKSkKIAogICAgICAgICBkZWYgZXhlY3V0ZSgpOgogICAg
ICAgICAgICAgYnVpbGQgPSBCdWlsZC5nZXRfYnlfa2V5X25hbWUoa2V5X25hbWUpCiAgICAgICAg
ICAgICBpZiBidWlsZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdUaGUg
YnVpbGQgYXQgJXMgYWxyZWFkeSBleGlzdHMgZm9yICVzJyAlIChzdHIodGltZXN0YW1wKSwgYnVp
bGRlci5uYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGQKIAotICAgICAgICAgICAg
cmV0dXJuIEJ1aWxkKGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1
aWxkZXIsIGJ1aWxkTnVtYmVyPWJ1aWxkX251bWJlciwKLSAgICAgICAgICAgICAgICB0aW1lc3Rh
bXA9dGltZXN0YW1wLCByZXZpc2lvbj1yZXZpc2lvbiwgY2hyb21pdW1SZXZpc2lvbj1jaHJvbWl1
bV9yZXZpc2lvbiwga2V5X25hbWU9a2V5X25hbWUpLnB1dCgpCisgICAgICAgICAgICByZXR1cm4g
QnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxkZXI9YnVpbGRlciwg
YnVpbGROdW1iZXI9bG9nLmJ1aWxkX251bWJlcigpLAorICAgICAgICAgICAgICAgIHRpbWVzdGFt
cD1sb2cudGltZXN0YW1wKCksIHJldmlzaW9uPWxvZy53ZWJraXRfcmV2aXNpb24oKSwgY2hyb21p
dW1SZXZpc2lvbj1sb2cuY2hyb21pdW1fcmV2aXNpb24oKSwKKyAgICAgICAgICAgICAgICBrZXlf
bmFtZT1rZXlfbmFtZSkucHV0KCkKICAgICAgICAgcmV0dXJuIGRiLnJ1bl9pbl90cmFuc2FjdGlv
bihleGVjdXRlKQogCiAgICAgZGVmIF9hZGRfdGVzdF9pZl9uZWVkZWQoc2VsZiwgdGVzdF9uYW1l
LCBicmFuY2gsIHBsYXRmb3JtKToKQEAgLTE5Miw4ICsxMTAsMyBAQCBjbGFzcyBSZXBvcnRIYW5k
bGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAgICAgICAgICAgICB0ZXN0LnB1dCgpCiAgICAgICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWUKICAgICAgICAgcmV0dXJuIGNyZWF0ZV9pbl90cmFuc2Fj
dGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyKGV4ZWN1dGUpIG9yIFRlc3QuZ2V0X2J5X2tleV9u
YW1lKHRlc3RfbmFtZSkKLQotCi1jbGFzcyBBZG1pblJlcG9ydEhhbmRsZXIoUmVwb3J0SGFuZGxl
cik6Ci0gICAgZGVmIGJ5cGFzc19hdXRoZW50aWNhdGlvbihzZWxmKToKLSAgICAgICAgcmV0dXJu
IFRydWUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126476</attachid>
            <date>2012-02-10 01:45:12 -0800</date>
            <delta_ts>2012-02-10 01:46:56 -0800</delta_ts>
            <desc>Fixed yaml &gt; html</desc>
            <filename>bug-78309-20120210014511.patch</filename>
            <type>text/plain</type>
            <size>39739</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzM3
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEyLTAy
LTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFBlcmYtby1t
YXRpYyBzaG91bGQgcHJvY2VzcyByZXBvcnRzIGluIGJhY2tncm91bmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4MzA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdGhlIGxvZ2ljIHRvIGNyZWF0
ZSBCdWlsZCwgVGVzdCwgYW5kIFRlc3RSZXN1bHQgb2JqZWN0cyBmcm9tIFJlcG9ydEhhbmRsZXIg
aW50byBSZXBvcnRQcm9jZXNzSGFuZGxlci4KKyAgICAgICAgUmVwb3J0SGFuZGxlciBub3cgbWVy
ZWx5IGNyZWF0ZXMgUmVwb3J0TG9nIGFuZCBzY2hlZHVsZXMgYSB0YXNrIHRvIHByb2Nlc3MgaXQu
CisKKyAgICAgICAgQWxzbyBhZGRlZCBSZXBvcnRMb2dIYW5kbGVyIHRvIG1hbmFnZSBzdGFsZSBS
ZXBvcnRMb2dzLgorCisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20v
YXBwLnlhbWw6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vY29u
dHJvbGxlci5weToKKyAgICAgICAgKHNjaGVkdWxlX21hbmlmZXN0X3VwZGF0ZSk6CisgICAgICAg
IChzY2hlZHVsZV9kYXNoYm9hcmRfdXBkYXRlKToKKyAgICAgICAgKHNjaGVkdWxlX3J1bnNfdXBk
YXRlKToKKyAgICAgICAgKENhY2hlZFJ1bnNIYW5kbGVyLmdldCk6CisgICAgICAgIChzY2hlZHVs
ZV9yZXBvcnRfcHJvY2Vzcyk6CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3Bv
dC5jb20vbWFpbi5weToKKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9tZXJnZV90ZXN0cy5odG1sOiBSZW5hbWVkIGZyb20gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBw
c3BvdC5jb20vbWVyZ2VfdGVzdHMueWFtbC4KKyAgICAgICAgKiBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9tb2RlbHMucHk6CisgICAgICAgIChSZXBvcnRMb2cpOgorICAgICAgICAo
UmVwb3J0TG9nLl9wYXJzZWRfcGF5bG9hZCk6CisgICAgICAgIChSZXBvcnRMb2cuZ2V0X3ZhbHVl
KToKKyAgICAgICAgKFJlcG9ydExvZy5yZXN1bHRzKToKKyAgICAgICAgKFJlcG9ydExvZy5idWls
ZGVyKToKKyAgICAgICAgKFJlcG9ydExvZy5icmFuY2gpOgorICAgICAgICAoUmVwb3J0TG9nLnBs
YXRmb3JtKToKKyAgICAgICAgKFJlcG9ydExvZy5idWlsZF9udW1iZXIpOgorICAgICAgICAoUmVw
b3J0TG9nLndlYmtpdF9yZXZpc2lvbik6CisgICAgICAgIChSZXBvcnRMb2cuY2hyb21pdW1fcmV2
aXNpb24pOgorICAgICAgICAoUmVwb3J0TG9nLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2Fk
KToKKyAgICAgICAgKFJlcG9ydExvZy5faW50ZWdlcl9pbl9wYXlsb2FkKToKKyAgICAgICAgKFJl
cG9ydExvZy50aW1lc3RhbXApOgorICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNw
b3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5OgorICAgICAgICAoUmVwb3J0SGFuZGxlci5wb3N0KToK
KyAgICAgICAgKFJlcG9ydEhhbmRsZXIuX291dHB1dCk6CisgICAgICAgIChSZXBvcnRIYW5kbGVy
Ll9yZXN1bHRzX2FyZV92YWxpZCk6CisgICAgICAgIChSZXBvcnRIYW5kbGVyLl9yZXN1bHRzX2Fy
ZV92YWxpZC5faXNfZmxvYXRfY29udmVydGlibGUpOgorICAgICAgICAoUmVwb3J0SGFuZGxlcik6
CisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3Mu
aHRtbDogQWRkZWQuCisgICAgICAgICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20v
cmVwb3J0X2xvZ3NfaGFuZGxlci5weTogQWRkZWQuCisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxl
cik6CisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxlci5nZXQpOgorICAgICAgICAoUmVwb3J0TG9n
c0hhbmRsZXIucG9zdCk6CisgICAgICAgIChSZXBvcnRMb2dzSGFuZGxlci5fZXJyb3IpOgorICAg
ICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hh
bmRsZXIucHk6IENvcGllZCBmcm9tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3Jl
cG9ydF9oYW5kbGVyLnB5LgorICAgICAgICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIpOgorICAgICAg
ICAoUmVwb3J0UHJvY2Vzc0hhbmRsZXIucG9zdCk6CisgICAgICAgIChSZXBvcnRQcm9jZXNzSGFu
ZGxlci5fY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKToKKyAgICAgICAgKFJlcG9ydFByb2Nlc3NI
YW5kbGVyLl9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUuZXhlY3V0ZSk6CisgICAgICAgIChSZXBv
cnRQcm9jZXNzSGFuZGxlci5fYWRkX3Rlc3RfaWZfbmVlZGVkKToKKwogMjAxMi0wMi0wOSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBQZXJmLW8tbWF0aWMgc2hv
dWxkbid0IHJlbHkgb24gbWVtY2FjaGUgdG8gc3RvcmUgY2FjaGVkIEpTT04gcmVzcG9uc2VzCklu
ZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9hcHAueWFtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9hcHAueWFtbAkocmV2aXNpb24g
MTA3Mzc5KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vYXBwLnlhbWwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiBhcHBsaWNhdGlvbjogd2Via2l0LXBlcmYKLXZl
cnNpb246IDEyCit2ZXJzaW9uOiAxMwogcnVudGltZTogcHl0aG9uMjcKIGFwaV92ZXJzaW9uOiAx
CiB0aHJlYWRzYWZlOiBmYWxzZQpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5j
b20vY29udHJvbGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBz
cG90LmNvbS9jb250cm9sbGVyLnB5CShyZXZpc2lvbiAxMDczNzkpCisrKyBXZWJzaXRlcy93ZWJr
aXQtcGVyZi5hcHBzcG90LmNvbS9jb250cm9sbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBAIGRlZiBjYWNoZV9tYW5pZmVzdChjYWNoZSk6CiAKIAogZGVmIHNjaGVkdWxlX21h
bmlmZXN0X3VwZGF0ZSgpOgotICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvdXBkYXRl
JykKKyAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3VwZGF0ZScsIG5hbWU9J21hbmlm
ZXN0X3VwZGF0ZScpCiAKIAogY2xhc3MgQ2FjaGVkTWFuaWZlc3RIYW5kbGVyKHdlYmFwcDIuUmVx
dWVzdEhhbmRsZXIpOgpAQCAtODIsNyArODIsNyBAQCBkZWYgY2FjaGVfZGFzaGJvYXJkKGNhY2hl
KToKIAogCiBkZWYgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZSgpOgotICAgIHRhc2txdWV1ZS5h
ZGQodXJsPScvYXBpL3Rlc3QvZGFzaGJvYXJkL3VwZGF0ZScpCisgICAgdGFza3F1ZXVlLmFkZCh1
cmw9Jy9hcGkvdGVzdC9kYXNoYm9hcmQvdXBkYXRlJywgbmFtZT0nZGFzaGJvYXJkX3VwZGF0ZScp
CiAKIAogY2xhc3MgQ2FjaGVkRGFzaGJvYXJkSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVy
KToKQEAgLTEwMCw3ICsxMDAsOCBAQCBkZWYgY2FjaGVfcnVucyh0ZXN0X2lkLCBicmFuY2hfaWQs
IHBsYXRmCiAKIAogZGVmIHNjaGVkdWxlX3J1bnNfdXBkYXRlKHRlc3RfaWQsIGJyYW5jaF9pZCwg
cGxhdGZvcm1faWQpOgotICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvcnVucy91cGRh
dGUnLCBwYXJhbXM9eydpZCc6IHRlc3RfaWQsICdicmFuY2hpZCc6IGJyYW5jaF9pZCwgJ3BsYXRm
b3JtaWQnOiBwbGF0Zm9ybV9pZH0pCisgICAgdGFza3F1ZXVlLmFkZCh1cmw9Jy9hcGkvdGVzdC9y
dW5zL3VwZGF0ZScsIG5hbWU9J3J1bnNfdXBkYXRlXyVkXyVkXyVkJyAlICh0ZXN0X2lkLCBicmFu
Y2hfaWQsIHBsYXRmb3JtX2lkKSwKKyAgICAgICAgcGFyYW1zPXsnaWQnOiB0ZXN0X2lkLCAnYnJh
bmNoaWQnOiBicmFuY2hfaWQsICdwbGF0Zm9ybWlkJzogcGxhdGZvcm1faWR9KQogCiAKIGNsYXNz
IENhY2hlZFJ1bnNIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgpAQCAtMTIyLDMgKzEy
Myw3IEBAIGNsYXNzIENhY2hlZFJ1bnNIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEgKICAgICAgICAg
ICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHJ1bnMpCiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lk
KQorCisKK2RlZiBzY2hlZHVsZV9yZXBvcnRfcHJvY2Vzcyhsb2cpOgorICAgIHRhc2txdWV1ZS5h
ZGQodXJsPScvYXBpL3Rlc3QvcmVwb3J0L3Byb2Nlc3MnLCBwYXJhbXM9eydpZCc6IGxvZy5rZXko
KS5pZCgpfSkKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQko
cmV2aXNpb24gMTA3Mzc5KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFp
bi5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsMTYgKzI4LDIwIEBAIGZyb20gZGFzaGJvYXJkX2hh
bmRsZXIgaW1wb3J0IERhc2hib2FyZEgKIGZyb20gbWFuaWZlc3RfaGFuZGxlciBpbXBvcnQgTWFu
aWZlc3RIYW5kbGVyCiBmcm9tIHJlcG9ydF9oYW5kbGVyIGltcG9ydCBSZXBvcnRIYW5kbGVyCiBm
cm9tIHJlcG9ydF9oYW5kbGVyIGltcG9ydCBBZG1pblJlcG9ydEhhbmRsZXIKK2Zyb20gcmVwb3J0
X3Byb2Nlc3NfaGFuZGxlciBpbXBvcnQgUmVwb3J0UHJvY2Vzc0hhbmRsZXIKK2Zyb20gcmVwb3J0
X2xvZ3NfaGFuZGxlciBpbXBvcnQgUmVwb3J0TG9nc0hhbmRsZXIKIGZyb20gcnVuc19oYW5kbGVy
IGltcG9ydCBSdW5zSGFuZGxlcgogZnJvbSBtZXJnZV90ZXN0c19oYW5kbGVyIGltcG9ydCBNZXJn
ZVRlc3RzSGFuZGxlcgogCiByb3V0ZXMgPSBbCiAgICAgKCcvYWRtaW4vcmVwb3J0Lz8nLCBBZG1p
blJlcG9ydEhhbmRsZXIpLAogICAgICgnL2FkbWluL21lcmdlLXRlc3RzLz8nLCBNZXJnZVRlc3Rz
SGFuZGxlciksCisgICAgKCcvYWRtaW4vcmVwb3J0LWxvZ3MvPycsIFJlcG9ydExvZ3NIYW5kbGVy
KSwKICAgICAoJy9hZG1pbi9jcmVhdGUvKC4qKScsIENyZWF0ZUhhbmRsZXIpLAogICAgICgnL2Fw
aS90ZXN0Lz8nLCBDYWNoZWRNYW5pZmVzdEhhbmRsZXIpLAogICAgICgnL2FwaS90ZXN0L3VwZGF0
ZScsIE1hbmlmZXN0SGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvcmVwb3J0Lz8nLCBSZXBvcnRI
YW5kbGVyKSwKKyAgICAoJy9hcGkvdGVzdC9yZXBvcnQvcHJvY2VzcycsIFJlcG9ydFByb2Nlc3NI
YW5kbGVyKSwKICAgICAoJy9hcGkvdGVzdC9ydW5zLz8nLCBDYWNoZWRSdW5zSGFuZGxlciksCiAg
ICAgKCcvYXBpL3Rlc3QvcnVucy91cGRhdGUnLCBSdW5zSGFuZGxlciksCiAgICAgKCcvYXBpL3Rl
c3QvZGFzaGJvYXJkLz8nLCBDYWNoZWREYXNoYm9hcmRIYW5kbGVyKSwKSW5kZXg6IFdlYnNpdGVz
L3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21lcmdlX3Rlc3RzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWVyZ2VfdGVzdHMuaHRtbAkocmV2aXNp
b24gMTA3Mzc5KQkoZnJvbSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tZXJnZV90
ZXN0cy55YW1sOjEwNzM3OSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21l
cmdlX3Rlc3RzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPGgxPk1lcmdlIHRlc3RzPC9oMT4KKzxmb3JtIG1ldGhv
ZD0icG9zdCIgYWN0aW9uPSIvYWRtaW4vbWVyZ2UtdGVzdHMiPgorCis8bGFiZWwgZm9yPSJtZXJn
ZSI+TWVyZ2U8L2xhYmVsPjoKKzxzZWxlY3QgaWQ9Im1lcmdlIiBuYW1lPSJtZXJnZSI+Cit7JSBm
b3IgdGVzdCBpbiB0ZXN0cyAlfQorICAgIDxvcHRpb24gdmFsdWU9Int7IHRlc3QubmFtZSB9fSI+
e3sgdGVzdC5uYW1lIH19PC9vcHRpb24+Cit7JSBlbmRmb3IgJX0KKzwvc2VsZWN0PgorCis8bGFi
ZWwgZm9yPSJpbnRvIj5JbnRvPC9sYWJlbD46Cis8c2VsZWN0IGlkPSJpbnRvIiBuYW1lPSJpbnRv
Ij4KK3slIGZvciB0ZXN0IGluIHRlc3RzICV9CisgICAgPG9wdGlvbiB2YWx1ZT0ie3sgdGVzdC5u
YW1lIH19Ij57eyB0ZXN0Lm5hbWUgfX08L29wdGlvbj4KK3slIGVuZGZvciAlfQorPC9zZWxlY3Q+
CisKKzxidXR0b24gdHlwZT0ic3VibWl0Ij5NZXJnZTwvYnV0dG9uPgorCis8L2Zvcm0+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tZXJn
ZV90ZXN0cy55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3Qu
Y29tL21lcmdlX3Rlc3RzLnlhbWwJKHJldmlzaW9uIDEwNzM3OSkKKysrIFdlYnNpdGVzL3dlYmtp
dC1wZXJmLmFwcHNwb3QuY29tL21lcmdlX3Rlc3RzLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjUgKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxib2R5PgotPGgxPk1lcmdlIHRl
c3RzPC9oMT4KLTxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIvYWRtaW4vbWVyZ2UtdGVzdHMi
PgotCi08bGFiZWwgZm9yPSJtZXJnZSI+TWVyZ2U8L2xhYmVsPjoKLTxzZWxlY3QgaWQ9Im1lcmdl
IiBuYW1lPSJtZXJnZSI+Ci17JSBmb3IgdGVzdCBpbiB0ZXN0cyAlfQotICAgIDxvcHRpb24gdmFs
dWU9Int7IHRlc3QubmFtZSB9fSI+e3sgdGVzdC5uYW1lIH19PC9vcHRpb24+Ci17JSBlbmRmb3Ig
JX0KLTwvc2VsZWN0PgotCi08bGFiZWwgZm9yPSJpbnRvIj5JbnRvPC9sYWJlbD46Ci08c2VsZWN0
IGlkPSJpbnRvIiBuYW1lPSJpbnRvIj4KLXslIGZvciB0ZXN0IGluIHRlc3RzICV9Ci0gICAgPG9w
dGlvbiB2YWx1ZT0ie3sgdGVzdC5uYW1lIH19Ij57eyB0ZXN0Lm5hbWUgfX08L29wdGlvbj4KLXsl
IGVuZGZvciAlfQotPC9zZWxlY3Q+Ci0KLTxidXR0b24gdHlwZT0ic3VibWl0Ij5NZXJnZTwvYnV0
dG9uPgotCi08L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBXZWJzaXRlcy93ZWJraXQt
cGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0
LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzLnB5CShyZXZpc2lvbiAxMDczNzkpCisrKyBXZWJzaXRl
cy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDEwIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBoYXNobGliCitpbXBvcnQganNv
bgogaW1wb3J0IHJlCiAKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiBmcm9tIGdvb2ds
ZS5hcHBlbmdpbmUuZXh0IGltcG9ydCBkYgogCiAKQEAgLTEyMSw2ICsxMjMsNjEgQEAgY2xhc3Mg
UmVwb3J0TG9nKGRiLk1vZGVsKToKICAgICB0aW1lc3RhbXAgPSBkYi5EYXRlVGltZVByb3BlcnR5
KHJlcXVpcmVkPVRydWUpCiAgICAgaGVhZGVycyA9IGRiLlRleHRQcm9wZXJ0eSgpCiAgICAgcGF5
bG9hZCA9IGRiLlRleHRQcm9wZXJ0eSgpCisgICAgY29tbWl0ID0gZGIuQm9vbGVhblByb3BlcnR5
KCkKKworICAgIGRlZiBfcGFyc2VkX3BheWxvYWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19k
aWN0X18uZ2V0KCdfcGFyc2VkJykgPT0gTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBzZWxmLl9wYXJzZWQgPSBqc29uLmxvYWRzKHNlbGYucGF5bG9hZCkKKyAgICAgICAg
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlZCA9IEZh
bHNlCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZWQKKworICAgIGRlZiBnZXRfdmFsdWUoc2Vs
Ziwga2V5TmFtZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXJzZWRfcGF5bG9hZCgpOgorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlZC5nZXQoa2V5
TmFtZSwgJycpCisKKyAgICBkZWYgcmVzdWx0cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
Z2V0X3ZhbHVlKCdyZXN1bHRzJykKKworICAgIGRlZiBidWlsZGVyKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fbW9kZWxfYnlfa2V5X25hbWVfaW5fcGF5bG9hZChCdWlsZGVyLCAnYnVpbGRl
ci1uYW1lJykKKworICAgIGRlZiBicmFuY2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9t
b2RlbF9ieV9rZXlfbmFtZV9pbl9wYXlsb2FkKEJyYW5jaCwgJ2JyYW5jaCcpCisKKyAgICBkZWYg
cGxhdGZvcm0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9p
bl9wYXlsb2FkKFBsYXRmb3JtLCAncGxhdGZvcm0nKQorCisgICAgZGVmIGJ1aWxkX251bWJlcihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVnZXJfaW5fcGF5bG9hZCgnYnVpbGQtbnVt
YmVyJykKKworICAgIGRlZiB3ZWJraXRfcmV2aXNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9pbnRlZ2VyX2luX3BheWxvYWQoJ3dlYmtpdC1yZXZpc2lvbicpCisKKyAgICBkZWYgY2hy
b21pdW1fcmV2aXNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlZ2VyX2luX3Bh
eWxvYWQoJ2Nocm9taXVtLXJldmlzaW9uJykKKworICAgIGRlZiBfbW9kZWxfYnlfa2V5X25hbWVf
aW5fcGF5bG9hZChzZWxmLCBtb2RlbCwga2V5TmFtZSk6CisgICAgICAgIGtleSA9IHNlbGYuZ2V0
X3ZhbHVlKGtleU5hbWUpCisgICAgICAgIGlmIG5vdCBrZXk6CisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICByZXR1cm4gbW9kZWwuZ2V0X2J5X2tleV9uYW1lKGtleSkKKworICAgIGRl
ZiBfaW50ZWdlcl9pbl9wYXlsb2FkKHNlbGYsIGtleU5hbWUpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X3ZhbHVlKGtleU5hbWUpKQorICAgICAgICBleGNl
cHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgdGltZXN0
YW1wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZnJv
bXRpbWVzdGFtcChzZWxmLl9pbnRlZ2VyX2luX3BheWxvYWQoJ3RpbWVzdGFtcCcpKQorICAgICAg
ICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAKICMgVXNlZCB3aGVu
IG1lbWNhY2hlIGVudHJ5IGlzIGV2aWN0ZWQKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtp
dC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9oYW5kbGVyLnB5CShyZXZpc2lvbiAxMDczNzkpCisr
KyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfaGFuZGxlci5weQkod29y
a2luZyBjb3B5KQpAQCAtMzIsMjEgKzMyLDEwIEBAIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQg
aW1wb3J0IGRiCiAKIGltcG9ydCBqc29uCiBpbXBvcnQgcmUKLWltcG9ydCB0aW1lCiBmcm9tIGRh
dGV0aW1lIGltcG9ydCBkYXRldGltZQogCi1mcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxl
X3J1bnNfdXBkYXRlCi1mcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX2Rhc2hib2FyZF91
cGRhdGUKLWZyb20gY29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRlCi1m
cm9tIG1vZGVscyBpbXBvcnQgQnVpbGRlcgotZnJvbSBtb2RlbHMgaW1wb3J0IEJyYW5jaAotZnJv
bSBtb2RlbHMgaW1wb3J0IEJ1aWxkCi1mcm9tIG1vZGVscyBpbXBvcnQgTnVtZXJpY0lkSG9sZGVy
Ci1mcm9tIG1vZGVscyBpbXBvcnQgUGxhdGZvcm0KIGZyb20gbW9kZWxzIGltcG9ydCBSZXBvcnRM
b2cKLWZyb20gbW9kZWxzIGltcG9ydCBUZXN0Ci1mcm9tIG1vZGVscyBpbXBvcnQgVGVzdFJlc3Vs
dAotZnJvbSBtb2RlbHMgaW1wb3J0IGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNf
aWRfaG9sZGVyCitmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX3JlcG9ydF9wcm9jZXNz
CiAKIAogY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKQEAgLTYw
LDg3ICs0OSw0NSBAQCBjbGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAg
ICAgICAgIGxvZyA9IFJlcG9ydExvZyh0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCksIGhlYWRlcnM9
aGVhZGVycywgcGF5bG9hZD1yZXF1ZXN0X2JvZHlfd2l0aG91dF9wYXNzd29yZCkKICAgICAgICAg
bG9nLnB1dCgpCiAKKyAgICAgICAgc2VsZi5fZW5jb3VudGVyZWRfZXJyb3IgPSBGYWxzZQorCiAg
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2JvZHkgPSBqc29uLmxvYWRzKHNlbGYucmVx
dWVzdC5ib2R5KQorICAgICAgICAgICAgcGFyc2VkUGF5bG9hZCA9IGpzb24ubG9hZHMoc2VsZi5y
ZXF1ZXN0LmJvZHkpCisgICAgICAgICAgICBwYXNzd29yZCA9IHBhcnNlZFBheWxvYWQuZ2V0KCdw
YXNzd29yZCcsICcnKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9vdXRwdXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgcGF5bG9hZCBhcyBhIGpzb24u
IFJlcG9ydCBrZXk6ICVkJyAlIGxvZy5rZXkoKS5pZCgpKQogCi0gICAgICAgIGJ1aWxkZXIgPSBz
ZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJ1aWxkZXIsICdidWlsZGVy
LW5hbWUnKQotICAgICAgICBicmFuY2ggPSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5
X29yX2Vycm9yKEJyYW5jaCwgJ2JyYW5jaCcpCi0gICAgICAgIHBsYXRmb3JtID0gc2VsZi5fbW9k
ZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihQbGF0Zm9ybSwgJ3BsYXRmb3JtJykKLSAg
ICAgICAgYnVpbGRfbnVtYmVyID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCdidWlsZC1udW1iZXIn
KQotICAgICAgICB0aW1lc3RhbXAgPSBzZWxmLl90aW1lc3RhbXBfaW5fYm9keSgpCi0gICAgICAg
IHJldmlzaW9uID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQtcmV2aXNpb24nKQotICAg
ICAgICBjaHJvbWl1bV9yZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnd2Via2l0LXJl
dmlzaW9uJykgaWYgJ2Nocm9taXVtLXJldmlzaW9uJyBpbiBzZWxmLl9ib2R5IGVsc2UgTm9uZQor
ICAgICAgICBidWlsZGVyID0gbG9nLmJ1aWxkZXIoKQorICAgICAgICBidWlsZGVyICE9IE5vbmUg
b3Igc2VsZi5fb3V0cHV0KCdObyBidWlsZGVyIG5hbWVkICIlcyInICUgbG9nLmdldF92YWx1ZSgn
YnVpbGRlci1uYW1lJykpCisgICAgICAgIGxvZy5icmFuY2goKSAhPSBOb25lIG9yIHNlbGYuX291
dHB1dCgnTm8gYnJhbmNoIG5hbWVkICIlcyInICUgbG9nLmdldF92YWx1ZSgnYnJhbmNoJykpCisg
ICAgICAgIGxvZy5wbGF0Zm9ybSgpICE9IE5vbmUgb3Igc2VsZi5fb3V0cHV0KCdObyBwbGF0Zm9y
bSBuYW1lZCAiJXMiJyAlIGxvZy5nZXRfdmFsdWUoJ3BsYXRmb3JtJykpCisgICAgICAgIGxvZy5i
dWlsZF9udW1iZXIoKSAhPSBOb25lIG9yIHNlbGYuX291dHB1dCgnSW52YWxpZCBidWlsZCBudW1i
ZXIgIiVzIicgJSBsb2cuZ2V0X3ZhbHVlKCdidWlsZC1udW1iZXInKSkKKyAgICAgICAgbG9nLnRp
bWVzdGFtcCgpICE9IE5vbmUgb3Igc2VsZi5fb3V0cHV0KCdJbnZhbGlkIHRpbWVzdGFtcCAiJXMi
JyAlIGxvZy5nZXRfdmFsdWUoJ3RpbWVzdGFtcCcpKQorICAgICAgICBsb2cud2Via2l0X3Jldmlz
aW9uKCkgIT0gTm9uZSBvciBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgd2Via2l0IHJldmlzaW9uICIl
cyInICUgbG9nLmdldF92YWx1ZSgnd2Via2l0LXJldmlzaW9uJykpCiAKICAgICAgICAgZmFpbGVk
ID0gRmFsc2UKLSAgICAgICAgaWYgYnVpbGRlciBhbmQgbm90IChzZWxmLmJ5cGFzc19hdXRoZW50
aWNhdGlvbigpIG9yIGJ1aWxkZXIuYXV0aGVudGljYXRlKHNlbGYuX2JvZHkuZ2V0KCdwYXNzd29y
ZCcsICcnKSkpOgorICAgICAgICBpZiBidWlsZGVyIGFuZCBub3QgKHNlbGYuYnlwYXNzX2F1dGhl
bnRpY2F0aW9uKCkgb3IgYnVpbGRlci5hdXRoZW50aWNhdGUocGFzc3dvcmQpKToKICAgICAgICAg
ICAgIHNlbGYuX291dHB1dCgnQXV0aGVudGljYXRpb24gZmFpbGVkJykKLSAgICAgICAgICAgIGZh
aWxlZCA9IFRydWUKIAotICAgICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0c19hcmVfdmFsaWQoKToK
KyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHNfYXJlX3ZhbGlkKGxvZyk6CiAgICAgICAgICAg
ICBzZWxmLl9vdXRwdXQoIlRoZSBwYXlsb2FkIGRvZXNuJ3QgY29udGFpbiByZXN1bHRzIG9yIHJl
c3VsdHMgYXJlIG1hbGZvcm1lZCIpCi0gICAgICAgICAgICBmYWlsZWQgPSBUcnVlCi0KLSAgICAg
ICAgaWYgbm90IChidWlsZGVyIGFuZCBicmFuY2ggYW5kIHBsYXRmb3JtIGFuZCBidWlsZF9udW1i
ZXIgYW5kIHJldmlzaW9uIGFuZCB0aW1lc3RhbXApIG9yIGZhaWxlZDoKLSAgICAgICAgICAgIHJl
dHVybgogCi0gICAgICAgIGJ1aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKGJ1
aWxkZXIsIGJ1aWxkX251bWJlciwgYnJhbmNoLCBwbGF0Zm9ybSwgdGltZXN0YW1wLCByZXZpc2lv
biwgY2hyb21pdW1fcmV2aXNpb24pCi0gICAgICAgIGlmIG5vdCBidWlsZDoKKyAgICAgICAgaWYg
c2VsZi5fZW5jb3VudGVyZWRfZXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBk
ZWYgX2Zsb2F0X29yX25vbmUoZGljdGlvbmFyeSwga2V5KToKLSAgICAgICAgICAgIHZhbHVlID0g
ZGljdGlvbmFyeS5nZXQoa2V5KQotICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZsb2F0KHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAg
ICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gc2VsZi5fYm9keVsncmVzdWx0cyddLml0ZXJpdGVt
cygpOgotICAgICAgICAgICAgdGVzdCA9IHNlbGYuX2FkZF90ZXN0X2lmX25lZWRlZCh0ZXN0X25h
bWUsIGJyYW5jaCwgcGxhdGZvcm0pCi0gICAgICAgICAgICBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0
ZXN0LmlkLCBicmFuY2guaWQsIHBsYXRmb3JtLmlkKQotICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShyZXN1bHQsIGRpY3QpOgotICAgICAgICAgICAgICAgIFRlc3RSZXN1bHQobmFtZT10ZXN0X25h
bWUsIGJ1aWxkPWJ1aWxkLCB2YWx1ZT1mbG9hdChyZXN1bHRbJ2F2ZyddKSwgdmFsdWVNZWRpYW49
X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnbWVkaWFuJyksCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlU3RkZXY9X2Zsb2F0X29yX25vbmUocmVzdWx0LCAnc3RkZXYnKSwgdmFsdWVNaW49X2Zsb2F0
X29yX25vbmUocmVzdWx0LCAnbWluJyksIHZhbHVlTWF4PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwg
J21heCcpKS5wdXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBUZXN0UmVz
dWx0KG5hbWU9dGVzdF9uYW1lLCBidWlsZD1idWlsZCwgdmFsdWU9ZmxvYXQocmVzdWx0KSkucHV0
KCkKLQotICAgICAgICBsb2cgPSBSZXBvcnRMb2cuZ2V0KGxvZy5rZXkoKSkKLSAgICAgICAgbG9n
LmRlbGV0ZSgpCi0KLSAgICAgICAgIyBXZSBuZWVkIHRvIHVwZGF0ZSBkYXNoYm9hcmQgYW5kIG1h
bmlmZXN0IGJlY2F1c2UgdGhleSBhcmUgYWZmZWN0ZWQgYnkgdGhlIGV4aXN0YW5jZSBvZiB0ZXN0
IHJlc3VsdHMKLSAgICAgICAgc2NoZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZSgpCi0gICAgICAgIHNj
aGVkdWxlX21hbmlmZXN0X3VwZGF0ZSgpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgn
T0snKQotCi0gICAgZGVmIF9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKHNlbGYs
IG1vZGVsLCBrZXlOYW1lKToKLSAgICAgICAga2V5ID0gc2VsZi5fYm9keS5nZXQoa2V5TmFtZSwg
JycpCi0gICAgICAgIGluc3RhbmNlID0ga2V5IGFuZCBtb2RlbC5nZXRfYnlfa2V5X25hbWUoa2V5
KQotICAgICAgICBpZiBub3QgaW5zdGFuY2U6Ci0gICAgICAgICAgICBzZWxmLl9vdXRwdXQoJ1Ro
ZXJlIGFyZSBubyAlcyBuYW1lZCAiJXMiJyAlIChtb2RlbC5fX25hbWVfXy5sb3dlcigpLCBrZXkp
KQotICAgICAgICByZXR1cm4gaW5zdGFuY2UKLQotICAgIGRlZiBfaW50ZWdlcl9pbl9ib2R5KHNl
bGYsIGtleSk6Ci0gICAgICAgIHZhbHVlID0gc2VsZi5fYm9keS5nZXQoa2V5LCAnJykKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGludCh2YWx1ZSkKLSAgICAgICAgZXhjZXB0Ogot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgnSW52YWxpZCAlczogIiVzIicgJSAoa2V5
LnJlcGxhY2UoJy0nLCAnICcpLCB2YWx1ZSkpCi0KLSAgICBkZWYgX3RpbWVzdGFtcF9pbl9ib2R5
KHNlbGYpOgotICAgICAgICB2YWx1ZSA9IHNlbGYuX2JvZHkuZ2V0KCd0aW1lc3RhbXAnLCAnJykK
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmZyb210aW1lc3RhbXAo
aW50KHZhbHVlKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291
dHB1dCgnRmFpbGVkIHRvIHBhcnNlIHRoZSB0aW1lc3RhbXA6ICVzJyAlIHZhbHVlKQorICAgICAg
ICBsb2cuY29tbWl0ID0gVHJ1ZQorICAgICAgICBsb2cucHV0KCkKKyAgICAgICAgc2NoZWR1bGVf
cmVwb3J0X3Byb2Nlc3MobG9nKQorICAgICAgICBzZWxmLl9vdXRwdXQoIk9LIikKIAogICAgIGRl
ZiBfb3V0cHV0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLl9lbmNvdW50ZXJlZF9lcnJv
ciA9IFRydWUKICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUobWVzc2FnZSArICdcbicp
CiAKICAgICBkZWYgYnlwYXNzX2F1dGhlbnRpY2F0aW9uKHNlbGYpOgogICAgICAgICByZXR1cm4g
RmFsc2UKIAotICAgIGRlZiBfcmVzdWx0c19hcmVfdmFsaWQoc2VsZik6CisgICAgZGVmIF9yZXN1
bHRzX2FyZV92YWxpZChzZWxmLCBsb2cpOgogCiAgICAgICAgIGRlZiBfaXNfZmxvYXRfY29udmVy
dGlibGUodmFsdWUpOgogICAgICAgICAgICAgdHJ5OgpAQCAtMTQ4LDExICs5NSwxMyBAQCBjbGFz
cyBSZXBvcnRIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFRydWUKICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBpZiAncmVzdWx0cycgbm90IGluIHNlbGYuX2Jv
ZHkgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5fYm9keVsncmVzdWx0cyddLCBkaWN0KToKKyAgICAg
ICAgaWYgbm90IGlzaW5zdGFuY2UobG9nLnJlc3VsdHMoKSwgZGljdCk6CiAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKIAotICAgICAgICBmb3IgdGVzdFJlc3VsdCBpbiBzZWxmLl9ib2R5WydyZXN1
bHRzJ10udmFsdWVzKCk6CisgICAgICAgIGZvciB0ZXN0UmVzdWx0IGluIGxvZy5yZXN1bHRzKCku
dmFsdWVzKCk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RSZXN1bHQsIGRpY3QpOgog
ICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0UmVzdWx0LnZhbHVlcygpOgogICAgICAg
ICAgICAgICAgICAgICBpZiBub3QgX2lzX2Zsb2F0X2NvbnZlcnRpYmxlKHZhbHVlKToKQEAgLTE2
NSwzNCArMTE0LDYgQEAgY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbAog
CiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgX2NyZWF0ZV9idWlsZF9pZl9wb3NzaWJs
ZShzZWxmLCBidWlsZGVyLCBidWlsZF9udW1iZXIsIGJyYW5jaCwgcGxhdGZvcm0sIHRpbWVzdGFt
cCwgcmV2aXNpb24sIGNocm9taXVtX3JldmlzaW9uKToKLSAgICAgICAga2V5X25hbWUgPSBidWls
ZGVyLm5hbWUgKyAnOicgKyBzdHIoaW50KHRpbWUubWt0aW1lKHRpbWVzdGFtcC50aW1ldHVwbGUo
KSkpKQotCi0gICAgICAgIGRlZiBleGVjdXRlKCk6Ci0gICAgICAgICAgICBidWlsZCA9IEJ1aWxk
LmdldF9ieV9rZXlfbmFtZShrZXlfbmFtZSkKLSAgICAgICAgICAgIGlmIGJ1aWxkOgotICAgICAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ1RoZSBidWlsZCBhdCAlcyBhbHJlYWR5IGV4
aXN0cyBmb3IgJXMnICUgKHN0cih0aW1lc3RhbXApLCBidWlsZGVyLm5hbWUpKQotCi0gICAgICAg
ICAgICByZXR1cm4gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxk
ZXI9YnVpbGRlciwgYnVpbGROdW1iZXI9YnVpbGRfbnVtYmVyLAotICAgICAgICAgICAgICAgIHRp
bWVzdGFtcD10aW1lc3RhbXAsIHJldmlzaW9uPXJldmlzaW9uLCBjaHJvbWl1bVJldmlzaW9uPWNo
cm9taXVtX3JldmlzaW9uLCBrZXlfbmFtZT1rZXlfbmFtZSkucHV0KCkKLSAgICAgICAgcmV0dXJu
IGRiLnJ1bl9pbl90cmFuc2FjdGlvbihleGVjdXRlKQotCi0gICAgZGVmIF9hZGRfdGVzdF9pZl9u
ZWVkZWQoc2VsZiwgdGVzdF9uYW1lLCBicmFuY2gsIHBsYXRmb3JtKToKLQotICAgICAgICBkZWYg
ZXhlY3V0ZShpZCk6Ci0gICAgICAgICAgICB0ZXN0ID0gVGVzdC5nZXRfYnlfa2V5X25hbWUodGVz
dF9uYW1lKQotICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBOb25lCi0gICAgICAgICAgICBpZiBu
b3QgdGVzdDoKLSAgICAgICAgICAgICAgICB0ZXN0ID0gVGVzdChpZD1pZCwgbmFtZT10ZXN0X25h
bWUsIGtleV9uYW1lPXRlc3RfbmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRl
c3QKLSAgICAgICAgICAgIGlmIGJyYW5jaC5rZXkoKSBub3QgaW4gdGVzdC5icmFuY2hlczoKLSAg
ICAgICAgICAgICAgICB0ZXN0LmJyYW5jaGVzLmFwcGVuZChicmFuY2gua2V5KCkpCi0gICAgICAg
ICAgICBpZiBwbGF0Zm9ybS5rZXkoKSBub3QgaW4gdGVzdC5wbGF0Zm9ybXM6Ci0gICAgICAgICAg
ICAgICAgdGVzdC5wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3JtLmtleSgpKQotICAgICAgICAgICAg
dGVzdC5wdXQoKQotICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlCi0gICAgICAgIHJldHVy
biBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVjdXRlKSBv
ciBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25hbWUpCi0KIAogY2xhc3MgQWRtaW5SZXBvcnRI
YW5kbGVyKFJlcG9ydEhhbmRsZXIpOgogICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2Vs
Zik6CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfbG9ncy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9y
dF9sb2dzLmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9yZXBvcnRfbG9ncy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cHJlPnt7IHN0YXR1cyB9fTwvcHJlPgorPGgx
PlJlcG9ydCBsb2dzPC9oMT4KKworPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisKK3Rh
YmxlIHsgd2lkdGg6IDEwMCU7IGJvcmRlcjogc29saWQgMXB4ICNjY2M7IGJvcmRlci1jb2xsYXBz
ZTogY29sbGFwc2U7IH0KK3RkIHsgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsgcGFkZGluZzogNXB4
OyB9CisuY29udHJvbCBjb2RlIHsgZGlzcGxheTogbm9uZTsgfQorY29kZSB7IHdoaXRlLXNwYWNl
OiBwcmUtd3JhcDsgfQorZm9ybSB7IGRpc3BsYXk6IGlubGluZTsgfQorCis8L3N0eWxlPgorPHNj
cmlwdD4KKworJCA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpOyB9CisKK2Z1bmN0aW9uIHNob3coaWQpIHsKKyAgICB2YXIgcm93ID0gJCgncm93Xycg
KyBpZCk7CisgICAgdmFyIGNvZGUgPSByb3cucXVlcnlTZWxlY3RvcignY29kZScpOworICAgIGlm
ICghY29kZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBuZXdSb3cgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0cicpOworICAgIG5ld1Jvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCd0ZCcpKTsKKyAgICBuZXdSb3cuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChjb2RlKTsK
KyAgICBuZXdSb3cuZmlyc3RDaGlsZC5jb2xTcGFuID0gODsKKyAgICByb3cucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUobmV3Um93LCByb3cubmV4dFNpYmxpbmcpOworICAgIHRyeSB7CisgICAgICAg
IGNvZGUudGV4dENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShKU09OLnBhcnNlKGNvZGUudGV4dENv
bnRlbnQpLCBudWxsLCAyKTsKKyAgICB9IGNhdGNoIChlKSB7IH0KK30KKworZnVuY3Rpb24gc3Vi
bWl0KGZvcm0sIGV2ZW50KSB7CisgICAgaWYgKCFjb25maXJtKCdBcmUgeW91IHN1cmU/JykpCisg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9CisKKzwvc2NyaXB0PgorPHRhYmxlPgor
PHRoZWFkPgorPHRyPgorICAgIDx0ZD5JZDwvdGQ+CisgICAgPHRkPkJyYW5jaDwvdGQ+CisgICAg
PHRkPlBsYXRmb3JtPC90ZD4KKyAgICA8dGQ+QnVpbGRlcjwvdGQ+CisgICAgPHRkPkJ1aWxkPC90
ZD4KKyAgICA8dGQ+V2ViS2l0IHJldmlzaW9uPC90ZD4KKyAgICA8dGQ+Q2hyb21pdW0gcmV2aXNp
b248L3RkPgorICAgIDx0ZCBjbGFzcz0iY29udHJvbCI+UGF5bG9hZDwvdGQ+Cis8L3RyPgorPC90
aGVhZD4KKzx0Ym9keT4KK3slIGZvciBsb2cgaW4gbG9ncyAlfQorPHRyIGlkPSJyb3dfe3sgbG9n
LmtleS5pZCB9fSI+CisgICAgPHRkPnt7IGxvZy5rZXkuaWQgfX08L3RkPgorICAgIDx0ZD57eyBs
b2cuYnJhbmNoLm5hbWUgfX08L3RkPgorICAgIDx0ZD57eyBsb2cucGxhdGZvcm0ubmFtZSB9fTwv
dGQ+CisgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9idWlsZC53ZWJraXQub3JnL2J1aWxkZXJzL3t7
IGxvZy5idWlsZGVyLm5hbWUgfX0vIj57eyBsb2cuYnVpbGRlci5uYW1lIH19PC9hPjwvdGQ+Cisg
ICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9idWlsZC53ZWJraXQub3JnL2J1aWxkZXJzL3t7IGxvZy5i
dWlsZGVyLm5hbWUgfX0vYnVpbGRzL3t7IGxvZy5idWlsZF9udW1iZXIgfX0iPnt7IGxvZy5idWls
ZF9udW1iZXIgfX08L2E+PC90ZD4KKyAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQve3sgbG9nLndlYmtpdF9yZXZpc2lvbiB9fSI+e3sgbG9nLndlYmtpdF9y
ZXZpc2lvbiB9fTwvYT48L3RkPgorICAgIDx0ZD48YSBocmVmPSJodHRwOi8vc3JjLmNocm9taXVt
Lm9yZy92aWV3dmMvY2hyb21lP3ZpZXc9cmV2JmFtcDtyZXZpc2lvbj17eyBsb2cuY2hyb21pdW1f
cmV2aXNpb24gfX0iPnt7IGxvZy5jaHJvbWl1bV9yZXZpc2lvbiB9fTwvYT48L3RkPgorICAgIDx0
ZCBjbGFzcz0iY29udHJvbCI+PGJ1dHRvbiBvbmNsaWNrPSJzaG93KHt7IGxvZy5rZXkuaWQgfX0p
Ij5TaG93PC9idXR0b24+CisgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIvYWRt
aW4vcmVwb3J0LWxvZ3MiIG9uc3VibWl0PSJzdWJtaXQodGhpcywgZXZlbnQpIj4KKyAgICAgICAg
PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaWQiIHZhbHVlPSJ7eyBsb2cua2V5LmlkIH19Ij4K
KyAgICAgICAgPGJ1dHRvbiBuYW1lPSJjb21taXQiIHZhbHVlPSJ0cnVlIj5Db21taXQ8L2J1dHRv
bj4KKyAgICAgICAgPGJ1dHRvbiBuYW1lPSJkZWxldGUiIHZhbHVlPSJ0cnVlIj5EZWxldGU8L2J1
dHRvbj48L2Zvcm0+CisgICAgICAgIDxjb2RlPnt7IGxvZy5wYXlsb2FkIH19PC9jb2RlPjwvdGQ+
Cis8L3RyPgoreyUgZW5kZm9yICV9Cis8L3Rib2R5PgorPC90YWJsZT4KKworPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3Nf
aGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNv
bS9yZXBvcnRfbG9nc19oYW5kbGVyLnB5CShyZXZpc2lvbiAwKQorKysgV2Vic2l0ZXMvd2Via2l0
LXBlcmYuYXBwc3BvdC5jb20vcmVwb3J0X2xvZ3NfaGFuZGxlci5weQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2OCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IHdlYmFwcDIKK2Zyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQud2ViYXBwIGltcG9ydCB0
ZW1wbGF0ZQorCitpbXBvcnQgb3MKKworZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVsZV9y
ZXBvcnRfcHJvY2VzcworZnJvbSBtb2RlbHMgaW1wb3J0IFJlcG9ydExvZworCisKK2NsYXNzIFJl
cG9ydExvZ3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBnZXQoc2Vs
Zik6CisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKHRlbXBsYXRlLnJlbmRlcigncmVw
b3J0X2xvZ3MueWFtbCcsIHsnbG9ncyc6IFJlcG9ydExvZy5hbGwoKX0pKQorCisgICAgZGVmIHBv
c3Qoc2VsZik6CisgICAgICAgIGNvbW1pdCA9IGJvb2woc2VsZi5yZXF1ZXN0LmdldCgnY29tbWl0
JykpCisgICAgICAgIGRlbGV0ZSA9IGJvb2woc2VsZi5yZXF1ZXN0LmdldCgnZGVsZXRlJykpCisg
ICAgICAgIGlmIGNvbW1pdCA9PSBkZWxldGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXJy
b3IoJ0ludmFsaWQgcmVxdWVzdCcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nID0g
UmVwb3J0TG9nLmdldF9ieV9pZChpbnQoc2VsZi5yZXF1ZXN0LmdldCgnaWQnLCAwKSkpCisgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcnJvcignSW52YWxpZCBsb2cg
aWQgIiVzIicgJSBzZWxmLnJlcXVlc3QuZ2V0KCdpZCcsICcnKSkKKworICAgICAgICBpZiBub3Qg
bG9nOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Vycm9yKCdObyBsb2cgZm91bmQgZm9yICIl
cyInICUgc2VsZi5yZXF1ZXN0LmdldCgnaWQnLCAnJykpCisKKyAgICAgICAgaWYgY29tbWl0Ogor
ICAgICAgICAgICAgbG9nLmNvbW1pdCA9IFRydWUKKyAgICAgICAgICAgIGxvZy5wdXQoKQorICAg
ICAgICAgICAgc2NoZWR1bGVfcmVwb3J0X3Byb2Nlc3MobG9nKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbG9nLmRlbGV0ZSgpCisKKyAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUo
dGVtcGxhdGUucmVuZGVyKCdyZXBvcnRfbG9ncy55YW1sJywgeydsb2dzJzogUmVwb3J0TG9nLmFs
bCgpLCAnc3RhdHVzJzogJ09LJ30pKQorCisgICAgZGVmIF9lcnJvcihzZWxmLCBtZXNzYWdlKToK
KyAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3Bs
YWluOyBjaGFyc2V0PXV0Zi04JworICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZShtZXNz
YWdlICsgJ1xuJykKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9y
dF9wcm9jZXNzX2hhbmRsZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYu
YXBwc3BvdC5jb20vcmVwb3J0X3Byb2Nlc3NfaGFuZGxlci5weQkocmV2aXNpb24gMTA3MzMxKQko
ZnJvbSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfaGFuZGxlci5weTox
MDczMzEpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vz
c19oYW5kbGVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgd2ViYXBwMgorZnJvbSBnb29n
bGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKKworaW1wb3J0IGpzb24KK2ltcG9ydCByZQoraW1w
b3J0IHRpbWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisKK2Zyb20gY29udHJvbGxl
ciBpbXBvcnQgc2NoZWR1bGVfcnVuc191cGRhdGUKK2Zyb20gY29udHJvbGxlciBpbXBvcnQgc2No
ZWR1bGVfZGFzaGJvYXJkX3VwZGF0ZQorZnJvbSBjb250cm9sbGVyIGltcG9ydCBzY2hlZHVsZV9t
YW5pZmVzdF91cGRhdGUKK2Zyb20gbW9kZWxzIGltcG9ydCBCdWlsZGVyCitmcm9tIG1vZGVscyBp
bXBvcnQgQnJhbmNoCitmcm9tIG1vZGVscyBpbXBvcnQgQnVpbGQKK2Zyb20gbW9kZWxzIGltcG9y
dCBOdW1lcmljSWRIb2xkZXIKK2Zyb20gbW9kZWxzIGltcG9ydCBQbGF0Zm9ybQorZnJvbSBtb2Rl
bHMgaW1wb3J0IFJlcG9ydExvZworZnJvbSBtb2RlbHMgaW1wb3J0IFRlc3QKK2Zyb20gbW9kZWxz
IGltcG9ydCBUZXN0UmVzdWx0Citmcm9tIG1vZGVscyBpbXBvcnQgY3JlYXRlX2luX3RyYW5zYWN0
aW9uX3dpdGhfbnVtZXJpY19pZF9ob2xkZXIKKworCitjbGFzcyBSZXBvcnRIYW5kbGVyKHdlYmFw
cDIuUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBwb3N0KHNlbGYpOgorICAgICAgICBzZWxmLnJl
c3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRm
LTgnCisKKyAgICAgICAgaGVhZGVycyA9ICJcbiIuam9pbihba2V5ICsgJzogJyArIHZhbHVlIGZv
ciBrZXksIHZhbHVlIGluIHNlbGYucmVxdWVzdC5oZWFkZXJzLml0ZW1zKCldKQorCisgICAgICAg
ICMgRG8gYXMgYmVzdCBhcyB3ZSBjYW4gdG8gcmVtb3ZlIHRoZSBwYXNzd29yZAorICAgICAgICBy
ZXF1ZXN0X2JvZHlfd2l0aG91dF9wYXNzd29yZCA9IHJlLnN1YihyJyJwYXNzd29yZCJccyo6XHMq
Ii4rPyIsJywgJycsIHNlbGYucmVxdWVzdC5ib2R5KQorICAgICAgICBsb2cgPSBSZXBvcnRMb2co
dGltZXN0YW1wPWRhdGV0aW1lLm5vdygpLCBoZWFkZXJzPWhlYWRlcnMsIHBheWxvYWQ9cmVxdWVz
dF9ib2R5X3dpdGhvdXRfcGFzc3dvcmQpCisgICAgICAgIGxvZy5wdXQoKQorCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHNlbGYuX2JvZHkgPSBqc29uLmxvYWRzKHNlbGYucmVxdWVzdC5ib2R5
KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9v
dXRwdXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgcGF5bG9hZCBhcyBhIGpzb24uIFJlcG9ydCBrZXk6
ICVkJyAlIGxvZy5rZXkoKS5pZCgpKQorCisgICAgICAgIGJ1aWxkZXIgPSBzZWxmLl9tb2RlbF9i
eV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJ1aWxkZXIsICdidWlsZGVyLW5hbWUnKQorICAg
ICAgICBicmFuY2ggPSBzZWxmLl9tb2RlbF9ieV9rZXlfbmFtZV9pbl9ib2R5X29yX2Vycm9yKEJy
YW5jaCwgJ2JyYW5jaCcpCisgICAgICAgIHBsYXRmb3JtID0gc2VsZi5fbW9kZWxfYnlfa2V5X25h
bWVfaW5fYm9keV9vcl9lcnJvcihQbGF0Zm9ybSwgJ3BsYXRmb3JtJykKKyAgICAgICAgYnVpbGRf
bnVtYmVyID0gc2VsZi5faW50ZWdlcl9pbl9ib2R5KCdidWlsZC1udW1iZXInKQorICAgICAgICB0
aW1lc3RhbXAgPSBzZWxmLl90aW1lc3RhbXBfaW5fYm9keSgpCisgICAgICAgIHJldmlzaW9uID0g
c2VsZi5faW50ZWdlcl9pbl9ib2R5KCd3ZWJraXQtcmV2aXNpb24nKQorICAgICAgICBjaHJvbWl1
bV9yZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnd2Via2l0LXJldmlzaW9uJykgaWYg
J2Nocm9taXVtLXJldmlzaW9uJyBpbiBzZWxmLl9ib2R5IGVsc2UgTm9uZQorCisgICAgICAgIGZh
aWxlZCA9IEZhbHNlCisgICAgICAgIGlmIGJ1aWxkZXIgYW5kIG5vdCAoc2VsZi5ieXBhc3NfYXV0
aGVudGljYXRpb24oKSBvciBidWlsZGVyLmF1dGhlbnRpY2F0ZShzZWxmLl9ib2R5LmdldCgncGFz
c3dvcmQnLCAnJykpKToKKyAgICAgICAgICAgIHNlbGYuX291dHB1dCgnQXV0aGVudGljYXRpb24g
ZmFpbGVkJykKKyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKworICAgICAgICBpZiBub3Qgc2Vs
Zi5fcmVzdWx0c19hcmVfdmFsaWQoKToKKyAgICAgICAgICAgIHNlbGYuX291dHB1dCgiVGhlIHBh
eWxvYWQgZG9lc24ndCBjb250YWluIHJlc3VsdHMgb3IgcmVzdWx0cyBhcmUgbWFsZm9ybWVkIikK
KyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKworICAgICAgICBpZiBub3QgKGJ1aWxkZXIgYW5k
IGJyYW5jaCBhbmQgcGxhdGZvcm0gYW5kIGJ1aWxkX251bWJlciBhbmQgcmV2aXNpb24gYW5kIHRp
bWVzdGFtcCkgb3IgZmFpbGVkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYnVpbGQg
PSBzZWxmLl9jcmVhdGVfYnVpbGRfaWZfcG9zc2libGUoYnVpbGRlciwgYnVpbGRfbnVtYmVyLCBi
cmFuY2gsIHBsYXRmb3JtLCB0aW1lc3RhbXAsIHJldmlzaW9uLCBjaHJvbWl1bV9yZXZpc2lvbikK
KyAgICAgICAgaWYgbm90IGJ1aWxkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVm
IF9mbG9hdF9vcl9ub25lKGRpY3Rpb25hcnksIGtleSk6CisgICAgICAgICAgICB2YWx1ZSA9IGRp
Y3Rpb25hcnkuZ2V0KGtleSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAg
IHJldHVybiBmbG9hdCh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
Zm9yIHRlc3RfbmFtZSwgcmVzdWx0IGluIHNlbGYuX2JvZHlbJ3Jlc3VsdHMnXS5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9hZGRfdGVzdF9pZl9uZWVkZWQodGVzdF9uYW1l
LCBicmFuY2gsIHBsYXRmb3JtKQorICAgICAgICAgICAgc2NoZWR1bGVfcnVuc191cGRhdGUodGVz
dC5pZCwgYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
cmVzdWx0LCBkaWN0KToKKyAgICAgICAgICAgICAgICBUZXN0UmVzdWx0KG5hbWU9dGVzdF9uYW1l
LCBidWlsZD1idWlsZCwgdmFsdWU9ZmxvYXQocmVzdWx0WydhdmcnXSksIHZhbHVlTWVkaWFuPV9m
bG9hdF9vcl9ub25lKHJlc3VsdCwgJ21lZGlhbicpLAorICAgICAgICAgICAgICAgICAgICB2YWx1
ZVN0ZGV2PV9mbG9hdF9vcl9ub25lKHJlc3VsdCwgJ3N0ZGV2JyksIHZhbHVlTWluPV9mbG9hdF9v
cl9ub25lKHJlc3VsdCwgJ21pbicpLCB2YWx1ZU1heD1fZmxvYXRfb3Jfbm9uZShyZXN1bHQsICdt
YXgnKSkucHV0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgVGVzdFJlc3Vs
dChuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPWZsb2F0KHJlc3VsdCkpLnB1dCgp
CisKKyAgICAgICAgbG9nID0gUmVwb3J0TG9nLmdldChsb2cua2V5KCkpCisgICAgICAgIGxvZy5k
ZWxldGUoKQorCisgICAgICAgICMgV2UgbmVlZCB0byB1cGRhdGUgZGFzaGJvYXJkIGFuZCBtYW5p
ZmVzdCBiZWNhdXNlIHRoZXkgYXJlIGFmZmVjdGVkIGJ5IHRoZSBleGlzdGFuY2Ugb2YgdGVzdCBy
ZXN1bHRzCisgICAgICAgIHNjaGVkdWxlX2Rhc2hib2FyZF91cGRhdGUoKQorICAgICAgICBzY2hl
ZHVsZV9tYW5pZmVzdF91cGRhdGUoKQorCisgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ09L
JykKKworICAgIGRlZiBfbW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihzZWxmLCBt
b2RlbCwga2V5TmFtZSk6CisgICAgICAgIGtleSA9IHNlbGYuX2JvZHkuZ2V0KGtleU5hbWUsICcn
KQorICAgICAgICBpbnN0YW5jZSA9IGtleSBhbmQgbW9kZWwuZ2V0X2J5X2tleV9uYW1lKGtleSkK
KyAgICAgICAgaWYgbm90IGluc3RhbmNlOgorICAgICAgICAgICAgc2VsZi5fb3V0cHV0KCdUaGVy
ZSBhcmUgbm8gJXMgbmFtZWQgIiVzIicgJSAobW9kZWwuX19uYW1lX18ubG93ZXIoKSwga2V5KSkK
KyAgICAgICAgcmV0dXJuIGluc3RhbmNlCisKKyAgICBkZWYgX2ludGVnZXJfaW5fYm9keShzZWxm
LCBrZXkpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuX2JvZHkuZ2V0KGtleSwgJycpCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUpCisgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ0ludmFsaWQgJXM6ICIlcyInICUgKGtleS5y
ZXBsYWNlKCctJywgJyAnKSwgdmFsdWUpKQorCisgICAgZGVmIF90aW1lc3RhbXBfaW5fYm9keShz
ZWxmKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLl9ib2R5LmdldCgndGltZXN0YW1wJywgJycpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5mcm9tdGltZXN0YW1wKGlu
dCh2YWx1ZSkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRw
dXQoJ0ZhaWxlZCB0byBwYXJzZSB0aGUgdGltZXN0YW1wOiAlcycgJSB2YWx1ZSkKKworICAgIGRl
ZiBfb3V0cHV0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0
ZShtZXNzYWdlICsgJ1xuJykKKworICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2VsZik6
CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9yZXN1bHRzX2FyZV92YWxpZChzZWxm
KToKKworICAgICAgICBkZWYgX2lzX2Zsb2F0X2NvbnZlcnRpYmxlKHZhbHVlKToKKyAgICAgICAg
ICAgIHRyeToKKyAgICAgICAgICAgICAgICBmbG9hdCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiAncmVzdWx0cycgbm90IGluIHNlbGYuX2JvZHkg
b3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5fYm9keVsncmVzdWx0cyddLCBkaWN0KToKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGZvciB0ZXN0UmVzdWx0IGluIHNlbGYuX2JvZHlb
J3Jlc3VsdHMnXS52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdFJlc3Vs
dCwgZGljdCk6CisgICAgICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RSZXN1bHQudmFsdWVz
KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaXNfZmxvYXRfY29udmVydGlibGUodmFs
dWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAg
ICAgaWYgJ2F2Zycgbm90IGluIHRlc3RSZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgX2lz
X2Zsb2F0X2NvbnZlcnRpYmxlKHRlc3RSZXN1bHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2NyZWF0ZV9idWlsZF9pZl9w
b3NzaWJsZShzZWxmLCBidWlsZGVyLCBidWlsZF9udW1iZXIsIGJyYW5jaCwgcGxhdGZvcm0sIHRp
bWVzdGFtcCwgcmV2aXNpb24sIGNocm9taXVtX3JldmlzaW9uKToKKyAgICAgICAga2V5X25hbWUg
PSBidWlsZGVyLm5hbWUgKyAnOicgKyBzdHIoaW50KHRpbWUubWt0aW1lKHRpbWVzdGFtcC50aW1l
dHVwbGUoKSkpKQorCisgICAgICAgIGRlZiBleGVjdXRlKCk6CisgICAgICAgICAgICBidWlsZCA9
IEJ1aWxkLmdldF9ieV9rZXlfbmFtZShrZXlfbmFtZSkKKyAgICAgICAgICAgIGlmIGJ1aWxkOgor
ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRwdXQoJ1RoZSBidWlsZCBhdCAlcyBhbHJl
YWR5IGV4aXN0cyBmb3IgJXMnICUgKHN0cih0aW1lc3RhbXApLCBidWlsZGVyLm5hbWUpKQorCisg
ICAgICAgICAgICByZXR1cm4gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0s
IGJ1aWxkZXI9YnVpbGRlciwgYnVpbGROdW1iZXI9YnVpbGRfbnVtYmVyLAorICAgICAgICAgICAg
ICAgIHRpbWVzdGFtcD10aW1lc3RhbXAsIHJldmlzaW9uPXJldmlzaW9uLCBjaHJvbWl1bVJldmlz
aW9uPWNocm9taXVtX3JldmlzaW9uLCBrZXlfbmFtZT1rZXlfbmFtZSkucHV0KCkKKyAgICAgICAg
cmV0dXJuIGRiLnJ1bl9pbl90cmFuc2FjdGlvbihleGVjdXRlKQorCisgICAgZGVmIF9hZGRfdGVz
dF9pZl9uZWVkZWQoc2VsZiwgdGVzdF9uYW1lLCBicmFuY2gsIHBsYXRmb3JtKToKKworICAgICAg
ICBkZWYgZXhlY3V0ZShpZCk6CisgICAgICAgICAgICB0ZXN0ID0gVGVzdC5nZXRfYnlfa2V5X25h
bWUodGVzdF9uYW1lKQorICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBOb25lCisgICAgICAgICAg
ICBpZiBub3QgdGVzdDoKKyAgICAgICAgICAgICAgICB0ZXN0ID0gVGVzdChpZD1pZCwgbmFtZT10
ZXN0X25hbWUsIGtleV9uYW1lPXRlc3RfbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IHRlc3QKKyAgICAgICAgICAgIGlmIGJyYW5jaC5rZXkoKSBub3QgaW4gdGVzdC5icmFuY2hl
czoKKyAgICAgICAgICAgICAgICB0ZXN0LmJyYW5jaGVzLmFwcGVuZChicmFuY2gua2V5KCkpCisg
ICAgICAgICAgICBpZiBwbGF0Zm9ybS5rZXkoKSBub3QgaW4gdGVzdC5wbGF0Zm9ybXM6CisgICAg
ICAgICAgICAgICAgdGVzdC5wbGF0Zm9ybXMuYXBwZW5kKHBsYXRmb3JtLmtleSgpKQorICAgICAg
ICAgICAgdGVzdC5wdXQoKQorICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlCisgICAgICAg
IHJldHVybiBjcmVhdGVfaW5fdHJhbnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVj
dXRlKSBvciBUZXN0LmdldF9ieV9rZXlfbmFtZSh0ZXN0X25hbWUpCisKKworY2xhc3MgQWRtaW5S
ZXBvcnRIYW5kbGVyKFJlcG9ydEhhbmRsZXIpOgorICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRp
b24oc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9yZXBvcnRfcHJvY2Vzc19oYW5kbGVyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3JlcG9ydF9wcm9jZXNzX2hhbmRsZXIucHkJ
KHJldmlzaW9uIDEwNzMzMSkKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL3Jl
cG9ydF9wcm9jZXNzX2hhbmRsZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYzICszMCwyNyBA
QAogaW1wb3J0IHdlYmFwcDIKIGZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IGRiCiAK
LWltcG9ydCBqc29uCi1pbXBvcnQgcmUKIGltcG9ydCB0aW1lCi1mcm9tIGRhdGV0aW1lIGltcG9y
dCBkYXRldGltZQogCiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX3J1bnNfdXBkYXRl
CiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IHNjaGVkdWxlX2Rhc2hib2FyZF91cGRhdGUKIGZyb20g
Y29udHJvbGxlciBpbXBvcnQgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRlCi1mcm9tIG1vZGVscyBp
bXBvcnQgQnVpbGRlcgotZnJvbSBtb2RlbHMgaW1wb3J0IEJyYW5jaAogZnJvbSBtb2RlbHMgaW1w
b3J0IEJ1aWxkCi1mcm9tIG1vZGVscyBpbXBvcnQgTnVtZXJpY0lkSG9sZGVyCi1mcm9tIG1vZGVs
cyBpbXBvcnQgUGxhdGZvcm0KIGZyb20gbW9kZWxzIGltcG9ydCBSZXBvcnRMb2cKIGZyb20gbW9k
ZWxzIGltcG9ydCBUZXN0CiBmcm9tIG1vZGVscyBpbXBvcnQgVGVzdFJlc3VsdAogZnJvbSBtb2Rl
bHMgaW1wb3J0IGNyZWF0ZV9pbl90cmFuc2FjdGlvbl93aXRoX251bWVyaWNfaWRfaG9sZGVyCiAK
IAotY2xhc3MgUmVwb3J0SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbGVyKToKK2NsYXNzIFJl
cG9ydFByb2Nlc3NIYW5kbGVyKHdlYmFwcDIuUmVxdWVzdEhhbmRsZXIpOgogICAgIGRlZiBwb3N0
KHNlbGYpOgogICAgICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0g
J3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnCiAKLSAgICAgICAgaGVhZGVycyA9ICJcbiIuam9p
bihba2V5ICsgJzogJyArIHZhbHVlIGZvciBrZXksIHZhbHVlIGluIHNlbGYucmVxdWVzdC5oZWFk
ZXJzLml0ZW1zKCldKQorICAgICAgICBsb2dfaWQgPSBpbnQoc2VsZi5yZXF1ZXN0LmdldCgnaWQn
LCAwKSkKIAotICAgICAgICAjIERvIGFzIGJlc3QgYXMgd2UgY2FuIHRvIHJlbW92ZSB0aGUgcGFz
c3dvcmQKLSAgICAgICAgcmVxdWVzdF9ib2R5X3dpdGhvdXRfcGFzc3dvcmQgPSByZS5zdWIocici
cGFzc3dvcmQiXHMqOlxzKiIuKz8iLCcsICcnLCBzZWxmLnJlcXVlc3QuYm9keSkKLSAgICAgICAg
bG9nID0gUmVwb3J0TG9nKHRpbWVzdGFtcD1kYXRldGltZS5ub3coKSwgaGVhZGVycz1oZWFkZXJz
LCBwYXlsb2FkPXJlcXVlc3RfYm9keV93aXRob3V0X3Bhc3N3b3JkKQotICAgICAgICBsb2cucHV0
KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9ib2R5ID0ganNvbi5sb2Fkcyhz
ZWxmLnJlcXVlc3QuYm9keSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5fb3V0cHV0KCdGYWlsZWQgdG8gcGFyc2UgdGhlIHBheWxvYWQgYXMgYSBq
c29uLiBSZXBvcnQga2V5OiAlZCcgJSBsb2cua2V5KCkuaWQoKSkKLQotICAgICAgICBidWlsZGVy
ID0gc2VsZi5fbW9kZWxfYnlfa2V5X25hbWVfaW5fYm9keV9vcl9lcnJvcihCdWlsZGVyLCAnYnVp
bGRlci1uYW1lJykKLSAgICAgICAgYnJhbmNoID0gc2VsZi5fbW9kZWxfYnlfa2V5X25hbWVfaW5f
Ym9keV9vcl9lcnJvcihCcmFuY2gsICdicmFuY2gnKQotICAgICAgICBwbGF0Zm9ybSA9IHNlbGYu
X21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3JfZXJyb3IoUGxhdGZvcm0sICdwbGF0Zm9ybScp
Ci0gICAgICAgIGJ1aWxkX251bWJlciA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnYnVpbGQtbnVt
YmVyJykKLSAgICAgICAgdGltZXN0YW1wID0gc2VsZi5fdGltZXN0YW1wX2luX2JvZHkoKQotICAg
ICAgICByZXZpc2lvbiA9IHNlbGYuX2ludGVnZXJfaW5fYm9keSgnd2Via2l0LXJldmlzaW9uJykK
LSAgICAgICAgY2hyb21pdW1fcmV2aXNpb24gPSBzZWxmLl9pbnRlZ2VyX2luX2JvZHkoJ3dlYmtp
dC1yZXZpc2lvbicpIGlmICdjaHJvbWl1bS1yZXZpc2lvbicgaW4gc2VsZi5fYm9keSBlbHNlIE5v
bmUKLQotICAgICAgICBmYWlsZWQgPSBGYWxzZQotICAgICAgICBpZiBidWlsZGVyIGFuZCBub3Qg
KHNlbGYuYnlwYXNzX2F1dGhlbnRpY2F0aW9uKCkgb3IgYnVpbGRlci5hdXRoZW50aWNhdGUoc2Vs
Zi5fYm9keS5nZXQoJ3Bhc3N3b3JkJywgJycpKSk6Ci0gICAgICAgICAgICBzZWxmLl9vdXRwdXQo
J0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcpCi0gICAgICAgICAgICBmYWlsZWQgPSBUcnVlCi0KLSAg
ICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHNfYXJlX3ZhbGlkKCk6Ci0gICAgICAgICAgICBzZWxm
Ll9vdXRwdXQoIlRoZSBwYXlsb2FkIGRvZXNuJ3QgY29udGFpbiByZXN1bHRzIG9yIHJlc3VsdHMg
YXJlIG1hbGZvcm1lZCIpCi0gICAgICAgICAgICBmYWlsZWQgPSBUcnVlCi0KLSAgICAgICAgaWYg
bm90IChidWlsZGVyIGFuZCBicmFuY2ggYW5kIHBsYXRmb3JtIGFuZCBidWlsZF9udW1iZXIgYW5k
IHJldmlzaW9uIGFuZCB0aW1lc3RhbXApIG9yIGZhaWxlZDoKLSAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgIGJ1aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKGJ1aWxkZXIs
IGJ1aWxkX251bWJlciwgYnJhbmNoLCBwbGF0Zm9ybSwgdGltZXN0YW1wLCByZXZpc2lvbiwgY2hy
b21pdW1fcmV2aXNpb24pCi0gICAgICAgIGlmIG5vdCBidWlsZDoKKyAgICAgICAgbG9nID0gUmVw
b3J0TG9nLmdldF9ieV9pZChsb2dfaWQpCisgICAgICAgIGlmIG5vdCBsb2cgb3Igbm90IGxvZy5j
b21taXQ6CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgiTm90IHByb2Nlc3Nl
ZCIpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBkZWYgX2Zsb2F0X29yX25vbmUoZGlj
dGlvbmFyeSwga2V5KToKQEAgLTk1LDcgKzU5LDExIEBAIGNsYXNzIFJlcG9ydEhhbmRsZXIod2Vi
YXBwMi5SZXF1ZXN0SGFuZGwKICAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQodmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGZvciB0ZXN0X25hbWUsIHJlc3VsdCBp
biBzZWxmLl9ib2R5WydyZXN1bHRzJ10uaXRlcml0ZW1zKCk6CisgICAgICAgIGJyYW5jaCA9IGxv
Zy5icmFuY2goKQorICAgICAgICBwbGF0Zm9ybSA9IGxvZy5wbGF0Zm9ybSgpCisgICAgICAgIGJ1
aWxkID0gc2VsZi5fY3JlYXRlX2J1aWxkX2lmX3Bvc3NpYmxlKGxvZywgYnJhbmNoLCBwbGF0Zm9y
bSkKKworICAgICAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gbG9nLnJlc3VsdHMoKS5pdGVy
aXRlbXMoKToKICAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9hZGRfdGVzdF9pZl9uZWVkZWQodGVz
dF9uYW1lLCBicmFuY2gsIHBsYXRmb3JtKQogICAgICAgICAgICAgc2NoZWR1bGVfcnVuc191cGRh
dGUodGVzdC5pZCwgYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCkKICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocmVzdWx0LCBkaWN0KToKQEAgLTExMSw3MCArNzksMjAgQEAgY2xhc3MgUmVwb3J0SGFu
ZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbAogICAgICAgICBzY2hlZHVsZV9kYXNoYm9hcmRfdXBk
YXRlKCkKICAgICAgICAgc2NoZWR1bGVfbWFuaWZlc3RfdXBkYXRlKCkKIAotICAgICAgICByZXR1
cm4gc2VsZi5fb3V0cHV0KCdPSycpCisgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdP
SycpCiAKLSAgICBkZWYgX21vZGVsX2J5X2tleV9uYW1lX2luX2JvZHlfb3JfZXJyb3Ioc2VsZiwg
bW9kZWwsIGtleU5hbWUpOgotICAgICAgICBrZXkgPSBzZWxmLl9ib2R5LmdldChrZXlOYW1lLCAn
JykKLSAgICAgICAgaW5zdGFuY2UgPSBrZXkgYW5kIG1vZGVsLmdldF9ieV9rZXlfbmFtZShrZXkp
Ci0gICAgICAgIGlmIG5vdCBpbnN0YW5jZToKLSAgICAgICAgICAgIHNlbGYuX291dHB1dCgnVGhl
cmUgYXJlIG5vICVzIG5hbWVkICIlcyInICUgKG1vZGVsLl9fbmFtZV9fLmxvd2VyKCksIGtleSkp
Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZQotCi0gICAgZGVmIF9pbnRlZ2VyX2luX2JvZHkoc2Vs
Ziwga2V5KToKLSAgICAgICAgdmFsdWUgPSBzZWxmLl9ib2R5LmdldChrZXksICcnKQotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlKQotICAgICAgICBleGNlcHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0cHV0KCdJbnZhbGlkICVzOiAiJXMiJyAlIChrZXku
cmVwbGFjZSgnLScsICcgJyksIHZhbHVlKSkKLQotICAgIGRlZiBfdGltZXN0YW1wX2luX2JvZHko
c2VsZik6Ci0gICAgICAgIHZhbHVlID0gc2VsZi5fYm9keS5nZXQoJ3RpbWVzdGFtcCcsICcnKQot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChp
bnQodmFsdWUpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fb3V0
cHV0KCdGYWlsZWQgdG8gcGFyc2UgdGhlIHRpbWVzdGFtcDogJXMnICUgdmFsdWUpCi0KLSAgICBk
ZWYgX291dHB1dChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3Jp
dGUobWVzc2FnZSArICdcbicpCi0KLSAgICBkZWYgYnlwYXNzX2F1dGhlbnRpY2F0aW9uKHNlbGYp
OgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfcmVzdWx0c19hcmVfdmFsaWQoc2Vs
Zik6Ci0KLSAgICAgICAgZGVmIF9pc19mbG9hdF9jb252ZXJ0aWJsZSh2YWx1ZSk6Ci0gICAgICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZmxvYXQodmFsdWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgaWYgJ3Jlc3VsdHMnIG5vdCBpbiBzZWxmLl9ib2R5
IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuX2JvZHlbJ3Jlc3VsdHMnXSwgZGljdCk6Ci0gICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBmb3IgdGVzdFJlc3VsdCBpbiBzZWxmLl9ib2R5
WydyZXN1bHRzJ10udmFsdWVzKCk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RSZXN1
bHQsIGRpY3QpOgotICAgICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0UmVzdWx0LnZhbHVl
cygpOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgX2lzX2Zsb2F0X2NvbnZlcnRpYmxlKHZh
bHVlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAg
ICAgIGlmICdhdmcnIG5vdCBpbiB0ZXN0UmVzdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IF9p
c19mbG9hdF9jb252ZXJ0aWJsZSh0ZXN0UmVzdWx0KToKLSAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKLQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9jcmVhdGVfYnVpbGRfaWZf
cG9zc2libGUoc2VsZiwgYnVpbGRlciwgYnVpbGRfbnVtYmVyLCBicmFuY2gsIHBsYXRmb3JtLCB0
aW1lc3RhbXAsIHJldmlzaW9uLCBjaHJvbWl1bV9yZXZpc2lvbik6Ci0gICAgICAgIGtleV9uYW1l
ID0gYnVpbGRlci5uYW1lICsgJzonICsgc3RyKGludCh0aW1lLm1rdGltZSh0aW1lc3RhbXAudGlt
ZXR1cGxlKCkpKSkKKyAgICBkZWYgX2NyZWF0ZV9idWlsZF9pZl9wb3NzaWJsZShzZWxmLCBsb2cs
IGJyYW5jaCwgcGxhdGZvcm0pOgorICAgICAgICBidWlsZGVyID0gbG9nLmJ1aWxkZXIoKQorICAg
ICAgICBrZXlfbmFtZSA9IGJ1aWxkZXIubmFtZSArICc6JyArIHN0cihpbnQodGltZS5ta3RpbWUo
bG9nLnRpbWVzdGFtcCgpLnRpbWV0dXBsZSgpKSkpCiAKICAgICAgICAgZGVmIGV4ZWN1dGUoKToK
ICAgICAgICAgICAgIGJ1aWxkID0gQnVpbGQuZ2V0X2J5X2tleV9uYW1lKGtleV9uYW1lKQogICAg
ICAgICAgICAgaWYgYnVpbGQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX291dHB1dCgn
VGhlIGJ1aWxkIGF0ICVzIGFscmVhZHkgZXhpc3RzIGZvciAlcycgJSAoc3RyKHRpbWVzdGFtcCks
IGJ1aWxkZXIubmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkCiAKLSAgICAgICAg
ICAgIHJldHVybiBCdWlsZChicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVpbGRl
cj1idWlsZGVyLCBidWlsZE51bWJlcj1idWlsZF9udW1iZXIsCi0gICAgICAgICAgICAgICAgdGlt
ZXN0YW1wPXRpbWVzdGFtcCwgcmV2aXNpb249cmV2aXNpb24sIGNocm9taXVtUmV2aXNpb249Y2hy
b21pdW1fcmV2aXNpb24sIGtleV9uYW1lPWtleV9uYW1lKS5wdXQoKQorICAgICAgICAgICAgcmV0
dXJuIEJ1aWxkKGJyYW5jaD1icmFuY2gsIHBsYXRmb3JtPXBsYXRmb3JtLCBidWlsZGVyPWJ1aWxk
ZXIsIGJ1aWxkTnVtYmVyPWxvZy5idWlsZF9udW1iZXIoKSwKKyAgICAgICAgICAgICAgICB0aW1l
c3RhbXA9bG9nLnRpbWVzdGFtcCgpLCByZXZpc2lvbj1sb2cud2Via2l0X3JldmlzaW9uKCksIGNo
cm9taXVtUmV2aXNpb249bG9nLmNocm9taXVtX3JldmlzaW9uKCksCisgICAgICAgICAgICAgICAg
a2V5X25hbWU9a2V5X25hbWUpLnB1dCgpCiAgICAgICAgIHJldHVybiBkYi5ydW5faW5fdHJhbnNh
Y3Rpb24oZXhlY3V0ZSkKIAogICAgIGRlZiBfYWRkX3Rlc3RfaWZfbmVlZGVkKHNlbGYsIHRlc3Rf
bmFtZSwgYnJhbmNoLCBwbGF0Zm9ybSk6CkBAIC0xOTIsOCArMTEwLDMgQEAgY2xhc3MgUmVwb3J0
SGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RIYW5kbAogICAgICAgICAgICAgdGVzdC5wdXQoKQogICAg
ICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlCiAgICAgICAgIHJldHVybiBjcmVhdGVfaW5fdHJh
bnNhY3Rpb25fd2l0aF9udW1lcmljX2lkX2hvbGRlcihleGVjdXRlKSBvciBUZXN0LmdldF9ieV9r
ZXlfbmFtZSh0ZXN0X25hbWUpCi0KLQotY2xhc3MgQWRtaW5SZXBvcnRIYW5kbGVyKFJlcG9ydEhh
bmRsZXIpOgotICAgIGRlZiBieXBhc3NfYXV0aGVudGljYXRpb24oc2VsZik6Ci0gICAgICAgIHJl
dHVybiBUcnVlCg==
</data>
<flag name="review"
          id="128301"
          type_id="1"
          status="+"
          setter="morrita"
    />
          </attachment>
      

    </bug>

</bugzilla>