<?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>79838</bug_id>
          
          <creation_ts>2012-02-28 15:00:53 -0800</creation_ts>
          <short_desc>perf-o-matic: generate dashboard images using Google Chart Tools</short_desc>
          <delta_ts>2012-02-29 00:23:54 -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>
          
          <blocked>77037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>kling</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>playmobil</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>567132</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 15:00:53 -0800</bug_when>
    <thetext>webkit-perf.appspot.com/ doesn&apos;t load anymore because it&apos;s got way too many iframes. We need to replace all these iframes by actual images.

Thankfully, Google chart tools generate png images that we can then cache:
http://code.google.com/apis/chart/image/docs/gallery/line_charts.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567145</commentid>
    <comment_count>1</comment_count>
      <attachid>129338</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 15:10:55 -0800</bug_when>
    <thetext>Created attachment 129338
First patch; generate images</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567146</commentid>
    <comment_count>2</comment_count>
      <attachid>129338</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 15:12:18 -0800</bug_when>
    <thetext>Comment on attachment 129338
First patch; generate images

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

&gt; Websites/webkit-perf.appspot.com/json_generators.py:217
&gt; +            &apos;cht&apos;: &apos;lxy&apos;,  # Specify with X and Y coordinates
&gt; +            &apos;chxt&apos;: &apos;x,y&apos;,  # Display both X and Y axies
&gt; +            &apos;chxl&apos;: &apos;0:|&apos; + &apos;|&apos;.join([date.strftime(&apos;%b %d&apos;) for date in dates]),  # X-axis labels
&gt; +            &apos;chxr&apos;: &apos;1,0,%f,%f&apos; % (int(y_max + 0.5), y_axis_label_step),  # Y-axis range: min=0, max, step
&gt; +            &apos;chds&apos;: &apos;%f,%f,%f,%f&apos; % (start_timestamp, end_timestamp, 0, y_max),  # X, Y data range
&gt; +            &apos;chxs&apos;: &apos;1,676767,11.167,0,l,676767&apos;, # Y-axis label: 1,color,font-size,centerd on tick,axis line/no ticks, tick color
&gt; +            &apos;chs&apos;: &apos;360x240&apos;, # Image size: 360px by 240px
&gt; +            &apos;chco&apos;: &apos;ff0000&apos;, # Plot line color
&gt; +            &apos;chg&apos;: &apos;%f,%f,0,0&apos; % (100 / (len(dates) - 1), y_grid_step), # X, Y grid line step sizes - max for X is 100.
&gt; +            &apos;chls&apos;: &apos;3&apos;, # Line thickness
&gt; +            &apos;chf&apos;: &apos;bg,s,eff6fd&apos;, # Transparent background
&gt; +            &apos;chd&apos;: &apos;t:&apos; + &apos;,&apos;.join([str(x) for x in chart_data_x]) + &apos;|&apos; + &apos;,&apos;.join([str(y) for y in chart_data_y]), # X, Y data

I know it looks horrible :( but there isn&apos;t much I can do unfortunately...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567152</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 15:15:57 -0800</bug_when>
    <thetext>Attachment 129338 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Websites/webkit-perf.appspot...&quot; exit_code: 1
Websites/webkit-perf.appspot.com/json_generators.py:211:  at least two spaces before inline comment  [pep8/E261] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567158</commentid>
    <comment_count>4</comment_count>
      <attachid>129341</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 15:20:11 -0800</bug_when>
    <thetext>Created attachment 129341
Make the style bot happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567209</commentid>
    <comment_count>5</comment_count>
      <attachid>129341</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-28 16:31:23 -0800</bug_when>
    <thetext>Comment on attachment 129341
Make the style bot happy

I don&apos;t think we need to save images on appengine. We can just redirect to the chart API image URL.
I&apos;m pretty sure they have their own cache (or something for speed) and serve the image well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567224</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 16:42:53 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 129341 [details])
&gt; I don&apos;t think we need to save images on appengine. We can just redirect to the chart API image URL.
&gt; I&apos;m pretty sure they have their own cache (or something for speed) and serve the image well.

You think so? FYI, we&apos;ll be making something like 300 chart requests per page load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567364</commentid>
    <comment_count>7</comment_count>
      <attachid>129341</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-28 21:59:12 -0800</bug_when>
    <thetext>Comment on attachment 129341
Make the style bot happy

Looks good. Let&apos;s try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567365</commentid>
    <comment_count>8</comment_count>
      <attachid>129341</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 22:07:04 -0800</bug_when>
    <thetext>Comment on attachment 129341
Make the style bot happy

Clearing flags on attachment: 129341

Committed r109190: &lt;http://trac.webkit.org/changeset/109190&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567366</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-28 22:07:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129338</attachid>
            <date>2012-02-28 15:10:55 -0800</date>
            <delta_ts>2012-02-28 15:20:05 -0800</delta_ts>
            <desc>First patch; generate images</desc>
            <filename>bug-79838-20120228151054.patch</filename>
            <type>text/plain</type>
            <size>20336</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTE1
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAy
LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIHBlcmYtby1t
YXRpYzogZ2VuZXJhdGUgZGFzaGJvYXJkIGltYWdlcyB1c2luZyBHb29nbGUgQ2hhcnQgVG9vbHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODM4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFJ1
bnNKU09OR2VuZXJhdG9yIHRvIFJ1bnMgYW5kIGFkZGVkIGFuIGFiaWxpdHkgdG8gZ2VuZXJhdGUg
cGFyYW1ldGVycyBmb3IgR29vZ2xlIGNoYXJ0IHRvb2wuCisgICAgICAgIEFsc28gYWRkZWQgUnVu
c0NoYXJ0SGFuZGxlciB0byBtYWtlIHVybC1mZXRjaGVzIHRoZXNlIGltYWdlcyBhbmQgRGFzaGJv
YXJkSW1hZ2VIYW5kbGVyIHRvIHNlcnZlIHRoZW0uCisgICAgICAgIFRoZSBpbWFnZSBpcyBzdG9y
ZWQgaW4gRGFzaGJvYXJkSW1hZ2UgbW9kZWwuCisKKyAgICAgICAgV2UgY2FuJ3QgZW5hYmxlIGZs
aXAgdGhlIHN3aXRjaCB0byB1c2UgaW1hZ2VzIHlldCBiZWNhdXNlIHdlIGRvbid0IGNyZWF0ZSBp
bWFnZXMgb24gZmx5ICh0aGV5J3JlCisgICAgICAgIGdlbmVyYXRlZCB3aGVuIHJ1bnMgYXJlIHVw
ZGF0ZWQ7IGkuZS4gYm90cyB1cGxvYWQgbmV3IHJlc3VsdHMpLiBXZSBzaG91bGQgYmUgYWJsZSB0
byBmbGlwIHRoZSBzd2l0Y2gKKyAgICAgICAgb25jZSB0aGlzIHBhdGNoIGxhbmRzIGFuZCBhbGwg
cGVyZiBib3RzIGN5Y2xlLgorCisgICAgICAgIFdlIHByb2JhYmx5IG1ha2Ugd2F5IHRvbyBtYW55
IGNhbGxzIHRvIEdvb2dsZSBjaGFydCB0b29sJ3Mgc2VydmVyIHdpdGggdGhpcyBwcmVsaW1pbmFy
eSBkZXNpZ24gYnV0IHdlCisgICAgICAgIGNhbiBlYXNpbHkgbW92ZSB0aGlzIHRhc2sgaW50byB0
aGUgYmFja2VuZCBhbmQgcnVuIGl0IHZpYSBhIGNyb24gam9iIG9uY2Ugd2Uga25vdyBpdCB3b3Jr
cy4KKworICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xs
ZXIucHk6CisgICAgICAgIChzY2hlZHVsZV9ydW5zX3VwZGF0ZSk6CisgICAgICAgIChSdW5zVXBk
YXRlSGFuZGxlci5wb3N0KToKKyAgICAgICAgKFJ1bnNDaGFydEhhbmRsZXIpOgorICAgICAgICAo
UnVuc0NoYXJ0SGFuZGxlci5nZXQpOgorICAgICAgICAoUnVuc0NoYXJ0SGFuZGxlci5wb3N0KToK
KyAgICAgICAgKERhc2hib2FyZEltYWdlSGFuZGxlcik6CisgICAgICAgIChEYXNoYm9hcmRJbWFn
ZUhhbmRsZXIuZ2V0KToKKyAgICAgICAgKHNjaGVkdWxlX3JlcG9ydF9wcm9jZXNzKToKKyAgICAg
ICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnMucHk6
CisgICAgICAgIChNYW5pZmVzdEpTT05HZW5lcmF0b3IudmFsdWUpOgorICAgICAgICAoUnVucyk6
CisgICAgICAgIChSdW5zLl9faW5pdF9fKToKKyAgICAgICAgKFJ1bnMudmFsdWUpOgorICAgICAg
ICAoUnVucy5jaGFydF9wYXJhbXMpOgorICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL2pzb25fZ2VuZXJhdG9yc191bml0dGVzdC5weToKKyAgICAgICAgKFJ1bnNUZXN0
KToKKyAgICAgICAgKFJ1bnNUZXN0Ll9jcmVhdGVfcmVzdWx0cyk6CisgICAgICAgIChSdW5zVGVz
dC50ZXN0X2dlbmVyYXRlX3J1bnMpOgorICAgICAgICAoUnVuc1Rlc3QudGVzdF92YWx1ZV93aXRo
b3V0X3Jlc3VsdHMpOgorICAgICAgICAoUnVuc1Rlc3QudGVzdF92YWx1ZV93aXRoX3Jlc3VsdHMp
OgorICAgICAgICAoUnVuc1Rlc3QudGVzdF9ydW5fZnJvbV9idWlsZF9hbmRfcmVzdWx0KToKKyAg
ICAgICAgKFJ1bnNUZXN0LnRlc3RfY2hhcnRfcGFyYW1zX3dpdGhfdmFsdWUpOgorICAgICAgICAo
UnVuc1Rlc3QudGVzdF9jaGFydF9wYXJhbXNfd2l0aF92YWx1ZS5zcGxpdF9hc19pbnQpOgorICAg
ICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHk6CisgICAgICAg
ICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzLnB5OgorICAgICAgICAo
UGVyc2lzdGVudENhY2hlLmdldF9jYWNoZSk6CisgICAgICAgIChEYXNoYm9hcmRJbWFnZSk6Cisg
ICAgICAgIChEYXNoYm9hcmRJbWFnZS5rZXlfbmFtZSk6CisKIDIwMTItMDItMjggIFNoaW55YSBL
YXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVsZW1lbnQgc2hvdWxk
IGJlIGFibGUgdG8gaGF2ZSBtdWx0aXBsZSBzaGFkb3cgcm9vdHMuCkluZGV4OiBXZWJzaXRlcy93
ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9jb250cm9sbGVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xsZXIucHkJKHJldmlzaW9uIDEwOTA1
NykKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xsZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNiBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KIAoraW1wb3J0IHVybGxpYgogaW1wb3J0IHdlYmFwcDIKIGZyb20gZ29vZ2xlLmFwcGVu
Z2luZS5hcGkgaW1wb3J0IHRhc2txdWV1ZQogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBv
cnQgZGIKIAogZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IERhc2hib2FyZEpTT05HZW5lcmF0
b3IKIGZyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBNYW5pZmVzdEpTT05HZW5lcmF0b3IKLWZy
b20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBSdW5zSlNPTkdlbmVyYXRvcgorZnJvbSBqc29uX2dl
bmVyYXRvcnMgaW1wb3J0IFJ1bnMKIGZyb20gbW9kZWxzIGltcG9ydCBCcmFuY2gKK2Zyb20gbW9k
ZWxzIGltcG9ydCBEYXNoYm9hcmRJbWFnZQogZnJvbSBtb2RlbHMgaW1wb3J0IFBsYXRmb3JtCiBm
cm9tIG1vZGVscyBpbXBvcnQgVGVzdAogZnJvbSBtb2RlbHMgaW1wb3J0IFBlcnNpc3RlbnRDYWNo
ZQpAQCAtOTcsNiArOTksNyBAQCBkZWYgY2FjaGVfcnVucyh0ZXN0X2lkLCBicmFuY2hfaWQsIHBs
YXRmCiAKIGRlZiBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRm
b3JtX2lkKToKICAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3J1bnMvdXBkYXRlJywg
cGFyYW1zPXsnaWQnOiB0ZXN0X2lkLCAnYnJhbmNoaWQnOiBicmFuY2hfaWQsICdwbGF0Zm9ybWlk
JzogcGxhdGZvcm1faWR9KQorICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvcnVucy9j
aGFydCcsIHBhcmFtcz17J2lkJzogdGVzdF9pZCwgJ2JyYW5jaGlkJzogYnJhbmNoX2lkLCAncGxh
dGZvcm1pZCc6IHBsYXRmb3JtX2lkfSkKIAogCiBkZWYgX2dldF90ZXN0X2JyYW5jaF9wbGF0Zm9y
bV9pZHMoaGFuZGxlcik6CkBAIC0xMjUsNyArMTI4LDcgQEAgY2xhc3MgUnVuc1VwZGF0ZUhhbmRs
ZXIod2ViYXBwMi5SZXF1ZXN0SAogICAgICAgICBhc3NlcnQgcGxhdGZvcm0KICAgICAgICAgYXNz
ZXJ0IHRlc3QKIAotICAgICAgICBjYWNoZV9ydW5zKHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZv
cm1faWQsIFJ1bnNKU09OR2VuZXJhdG9yKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3QubmFtZSkudG9f
anNvbigpKQorICAgICAgICBjYWNoZV9ydW5zKHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQsIFJ1bnMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdC5uYW1lKS50b19qc29uKCkpCiAgICAgICAg
IHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdPSycpCiAKIApAQCAtMTQxLDUgKzE0NCw0OCBAQCBj
bGFzcyBDYWNoZWRSdW5zSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RICiAgICAgICAgICAgICBzY2hl
ZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lkKQogCiAKK2Ns
YXNzIFJ1bnNDaGFydEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIGdl
dChzZWxmKToKKyAgICAgICAgc2VsZi5wb3N0KCkKKworICAgIGRlZiBwb3N0KHNlbGYpOgorICAg
ICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgnCisgICAgICAgIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQg
PSBfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRmb3JtX2lkcyhzZWxmKQorCisgICAgICAgIGJyYW5jaCA9
IG1vZGVsX2Zyb21fbnVtZXJpY19pZChicmFuY2hfaWQsIEJyYW5jaCkKKyAgICAgICAgcGxhdGZv
cm0gPSBtb2RlbF9mcm9tX251bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKQorICAgICAg
ICB0ZXN0ID0gbW9kZWxfZnJvbV9udW1lcmljX2lkKHRlc3RfaWQsIFRlc3QpCisgICAgICAgIGRp
c3BsYXlfZGF5cyA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdkaXNwbGF5RGF5cycpKQorICAgICAg
ICBhc3NlcnQgYnJhbmNoCisgICAgICAgIGFzc2VydCBwbGF0Zm9ybQorICAgICAgICBhc3NlcnQg
dGVzdAorCisgICAgICAgIHBhcmFtcyA9IFJ1bnMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdC5uYW1l
KS5jaGFydF9wYXJhbXMoZGlzcGxheV9kYXlzKQorICAgICAgICBkYXNoYm9hcmRfY2hhcnRfZmls
ZSA9IHVybGxpYi51cmxvcGVuKCdodHRwOi8vY2hhcnQuZ29vZ2xlYXBpcy5jb20vY2hhcnQnLCB1
cmxsaWIudXJsZW5jb2RlKHBhcmFtcykpCisKKyAgICAgICAgRGFzaGJvYXJkSW1hZ2Uoa2V5X25h
bWU9RGFzaGJvYXJkSW1hZ2Uua2V5X25hbWUoYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCwgdGVzdC5p
ZCwgZGlzcGxheV9kYXlzKSwKKyAgICAgICAgICAgIGltYWdlPWRhc2hib2FyZF9jaGFydF9maWxl
LnJlYWQoKSkucHV0KCkKKworICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgnRmV0Y2hl
ZCBodHRwOi8vY2hhcnQuZ29vZ2xlYXBpcy5jb20vY2hhcnQ/JXMnICUgdXJsbGliLnVybGVuY29k
ZShwYXJhbXMpKQorCisKK2NsYXNzIERhc2hib2FyZEltYWdlSGFuZGxlcih3ZWJhcHAyLlJlcXVl
c3RIYW5kbGVyKToKKyAgICBkZWYgZ2V0KHNlbGYsIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZv
cm1faWQsIGRpc3BsYXlfZGF5cyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJyYW5jaF9p
ZCA9IGludChicmFuY2hfaWQpCisgICAgICAgICAgICBwbGF0Zm9ybV9pZCA9IGludChwbGF0Zm9y
bV9pZCkKKyAgICAgICAgICAgIHRlc3RfaWQgPSBpbnQodGVzdF9pZCkKKyAgICAgICAgICAgIGRp
c3BsYXlfZGF5cyA9IGludChkaXNwbGF5X2RheXMpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
OgorICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0
ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JworICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQu
d3JpdGUoJ0ZhaWxlZCcpCisKKyAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50
LVR5cGUnXSA9ICdpbWFnZS9wbmcnCisgICAgICAgIGltYWdlID0gRGFzaGJvYXJkSW1hZ2UuZ2V0
X2J5X2tleV9uYW1lKERhc2hib2FyZEltYWdlLmtleV9uYW1lKGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQsIHRlc3RfaWQsIGRpc3BsYXlfZGF5cykpCisgICAgICAgIGlmIGltYWdlOgorICAgICAgICAg
ICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoaW1hZ2UuaW1hZ2UpCisKKwogZGVmIHNjaGVkdWxl
X3JlcG9ydF9wcm9jZXNzKGxvZyk6CisgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50
LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJwogICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBp
L3Rlc3QvcmVwb3J0L3Byb2Nlc3MnLCBwYXJhbXM9eydpZCc6IGxvZy5rZXkoKS5pZCgpfSkKSW5k
ZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25fZ2VuZXJhdG9ycy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVy
YXRvcnMucHkJKHJldmlzaW9uIDEwOTA1NykKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNw
b3QuY29tL2pzb25fZ2VuZXJhdG9ycy5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBA
QAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQganNvbgorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQogZnJvbSB0aW1lIGltcG9ydCBt
a3RpbWUKIAogZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCkBAIC0xMTgsMjAgKzEyMCwxMiBAQCBj
bGFzcyBNYW5pZmVzdEpTT05HZW5lcmF0b3IoSlNPTkdlbmVyYXRvCiAgICAgICAgIHJldHVybiB7
J2JyYW5jaE1hcCc6IHNlbGYuX2JyYW5jaF9tYXAsICdwbGF0Zm9ybU1hcCc6IHNlbGYuX3BsYXRm
b3JtX21hcCwgJ3Rlc3RNYXAnOiBzZWxmLl90ZXN0X21hcH0KIAogCi1jbGFzcyBSdW5zSlNPTkdl
bmVyYXRvcihKU09OR2VuZXJhdG9yQmFzZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyYW5j
aCwgcGxhdGZvcm0sIHRlc3QpOgotICAgICAgICBzZWxmLl90ZXN0X3J1bnMgPSBbXQotICAgICAg
ICBzZWxmLl9hdmVyYWdlcyA9IHt9Ci0gICAgICAgIHZhbHVlcyA9IFtdCi0KLSAgICAgICAgZm9y
IGJ1aWxkLCByZXN1bHQgaW4gUnVuc0pTT05HZW5lcmF0b3IuX2dlbmVyYXRlX3J1bnMoYnJhbmNo
LCBwbGF0Zm9ybSwgdGVzdCk6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X3J1bnMuYXBwZW5kKFJ1
bnNKU09OR2VuZXJhdG9yLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3Vs
dCkpCi0gICAgICAgICAgICAjIEZJWE1FOiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UuIEluIHByYWN0
aWNlLCB3ZSB3b3VsZG4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmV2
aXNpb24uCi0gICAgICAgICAgICBzZWxmLl9hdmVyYWdlc1tidWlsZC5yZXZpc2lvbl0gPSByZXN1
bHQudmFsdWUKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQocmVzdWx0LnZhbHVlKQotCi0gICAg
ICAgIHNlbGYuX21pbiA9IG1pbih2YWx1ZXMpIGlmIHZhbHVlcyBlbHNlIE5vbmUKLSAgICAgICAg
c2VsZi5fbWF4ID0gbWF4KHZhbHVlcykgaWYgdmFsdWVzIGVsc2UgTm9uZQorIyBGSVhNRTogVGhp
cyBpc24ndCBhIEpTT04gZ2VuZXJhdG9yIGFueW1vcmUuIFdlIHNob3VsZCBtb3ZlIGl0IGVsc2V3
aGVyZSBvciByZW5hbWUgdGhlIGZpbGUuCitjbGFzcyBSdW5zKEpTT05HZW5lcmF0b3JCYXNlKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdF9uYW1lKToKKyAg
ICAgICAgc2VsZi5fYnJhbmNoID0gYnJhbmNoCisgICAgICAgIHNlbGYuX3BsYXRmb3JtID0gcGxh
dGZvcm0KKyAgICAgICAgc2VsZi5fdGVzdF9uYW1lID0gdGVzdF9uYW1lCiAKICAgICBAc3RhdGlj
bWV0aG9kCiAgICAgZGVmIF9nZW5lcmF0ZV9ydW5zKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3RfbmFt
ZSk6CkBAIC0xNjcsMTAgKzE2MSw1OCBAQCBjbGFzcyBSdW5zSlNPTkdlbmVyYXRvcihKU09OR2Vu
ZXJhdG9yQmFzCiAgICAgICAgICAgICBidWlsZGVyX2lkLCBzdGF0aXN0aWNzXQogCiAgICAgZGVm
IHZhbHVlKHNlbGYpOgorICAgICAgICBfdGVzdF9ydW5zID0gW10KKyAgICAgICAgX2F2ZXJhZ2Vz
ID0ge30KKyAgICAgICAgdmFsdWVzID0gW10KKworICAgICAgICBmb3IgYnVpbGQsIHJlc3VsdCBp
biBSdW5zLl9nZW5lcmF0ZV9ydW5zKHNlbGYuX2JyYW5jaCwgc2VsZi5fcGxhdGZvcm0sIHNlbGYu
X3Rlc3RfbmFtZSk6CisgICAgICAgICAgICBfdGVzdF9ydW5zLmFwcGVuZChSdW5zLl9lbnRyeV9m
cm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCkpCisgICAgICAgICAgICAjIEZJWE1F
OiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UuIEluIHByYWN0aWNlLCB3ZSB3b3VsZG4ndCBoYXZlIG1v
cmUgdGhhbiBvbmUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmV2aXNpb24uCisgICAgICAgICAgICBfYXZl
cmFnZXNbYnVpbGQucmV2aXNpb25dID0gcmVzdWx0LnZhbHVlCisgICAgICAgICAgICB2YWx1ZXMu
YXBwZW5kKHJlc3VsdC52YWx1ZSkKKworICAgICAgICBfbWluID0gbWluKHZhbHVlcykgaWYgdmFs
dWVzIGVsc2UgTm9uZQorICAgICAgICBfbWF4ID0gbWF4KHZhbHVlcykgaWYgdmFsdWVzIGVsc2Ug
Tm9uZQorCiAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAndGVzdF9ydW5zJzogc2VsZi5f
dGVzdF9ydW5zLAotICAgICAgICAgICAgJ2F2ZXJhZ2VzJzogc2VsZi5fYXZlcmFnZXMsCi0gICAg
ICAgICAgICAnbWluJzogc2VsZi5fbWluLAotICAgICAgICAgICAgJ21heCc6IHNlbGYuX21heCwK
KyAgICAgICAgICAgICd0ZXN0X3J1bnMnOiBfdGVzdF9ydW5zLAorICAgICAgICAgICAgJ2F2ZXJh
Z2VzJzogX2F2ZXJhZ2VzLAorICAgICAgICAgICAgJ21pbic6IF9taW4sCisgICAgICAgICAgICAn
bWF4JzogX21heCwKICAgICAgICAgICAgICdkYXRlX3JhbmdlJzogTm9uZSwgICMgTmV2ZXIgdXNl
ZCBieSBjb21tb24uanMuCiAgICAgICAgICAgICAnc3RhdCc6ICdvayd9CisKKyAgICBkZWYgY2hh
cnRfcGFyYW1zKHNlbGYsIGRpc3BsYXlfZGF5cywgbm93PWRhdGV0aW1lLm5vdygpKToKKyAgICAg
ICAgY2hhcnRfZGF0YV94ID0gW10KKyAgICAgICAgY2hhcnRfZGF0YV95ID0gW10KKyAgICAgICAg
ZW5kX3RpbWUgPSBub3cKKyAgICAgICAgc3RhcnRfdGltZXN0YW1wID0gbWt0aW1lKChlbmRfdGlt
ZSAtIHRpbWVkZWx0YShkaXNwbGF5X2RheXMpKS50aW1ldHVwbGUoKSkKKyAgICAgICAgZW5kX3Rp
bWVzdGFtcCA9IG1rdGltZShlbmRfdGltZS50aW1ldHVwbGUoKSkKKworICAgICAgICBmb3IgYnVp
bGQsIHJlc3VsdCBpbiBzZWxmLl9nZW5lcmF0ZV9ydW5zKHNlbGYuX2JyYW5jaCwgc2VsZi5fcGxh
dGZvcm0sIHNlbGYuX3Rlc3RfbmFtZSk6CisgICAgICAgICAgICB0aW1lc3RhbXAgPSBta3RpbWUo
YnVpbGQudGltZXN0YW1wLnRpbWV0dXBsZSgpKQorICAgICAgICAgICAgaWYgdGltZXN0YW1wIDwg
c3RhcnRfdGltZXN0YW1wIG9yIHRpbWVzdGFtcCA+IGVuZF90aW1lc3RhbXA6CisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNoYXJ0X2RhdGFfeC5hcHBlbmQodGltZXN0YW1w
KQorICAgICAgICAgICAgY2hhcnRfZGF0YV95LmFwcGVuZChyZXN1bHQudmFsdWUpCisKKyAgICAg
ICAgZGF0ZXMgPSBbZW5kX3RpbWUgKyB0aW1lZGVsdGEoZGF5IC0gZGlzcGxheV9kYXlzKSBmb3Ig
ZGF5IGluIHJhbmdlKDAsIGRpc3BsYXlfZGF5cyArIDEpXQorCisgICAgICAgIHlfbWF4ID0gbWF4
KGNoYXJ0X2RhdGFfeSkgKiAxLjEKKyAgICAgICAgeV9ncmlkX3N0ZXAgPSB5X21heCAvIDUKKyAg
ICAgICAgeV9heGlzX2xhYmVsX3N0ZXAgPSBpbnQoeV9ncmlkX3N0ZXAgKyAwLjUpICAjIFRoaXMg
d29uJ3Qgd29yayBmb3IgZGVjaW1hbCBudW1iZXJzCisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICdjaHQnOiAnbHh5JywgICMgU3BlY2lmeSB3aXRoIFggYW5kIFkgY29vcmRpbmF0ZXMK
KyAgICAgICAgICAgICdjaHh0JzogJ3gseScsICAjIERpc3BsYXkgYm90aCBYIGFuZCBZIGF4aWVz
CisgICAgICAgICAgICAnY2h4bCc6ICcwOnwnICsgJ3wnLmpvaW4oW2RhdGUuc3RyZnRpbWUoJyVi
ICVkJykgZm9yIGRhdGUgaW4gZGF0ZXNdKSwgICMgWC1heGlzIGxhYmVscworICAgICAgICAgICAg
J2NoeHInOiAnMSwwLCVmLCVmJyAlIChpbnQoeV9tYXggKyAwLjUpLCB5X2F4aXNfbGFiZWxfc3Rl
cCksICAjIFktYXhpcyByYW5nZTogbWluPTAsIG1heCwgc3RlcAorICAgICAgICAgICAgJ2NoZHMn
OiAnJWYsJWYsJWYsJWYnICUgKHN0YXJ0X3RpbWVzdGFtcCwgZW5kX3RpbWVzdGFtcCwgMCwgeV9t
YXgpLCAgIyBYLCBZIGRhdGEgcmFuZ2UKKyAgICAgICAgICAgICdjaHhzJzogJzEsNjc2NzY3LDEx
LjE2NywwLGwsNjc2NzY3JywgIyBZLWF4aXMgbGFiZWw6IDEsY29sb3IsZm9udC1zaXplLGNlbnRl
cmQgb24gdGljayxheGlzIGxpbmUvbm8gdGlja3MsIHRpY2sgY29sb3IKKyAgICAgICAgICAgICdj
aHMnOiAnMzYweDI0MCcsICMgSW1hZ2Ugc2l6ZTogMzYwcHggYnkgMjQwcHgKKyAgICAgICAgICAg
ICdjaGNvJzogJ2ZmMDAwMCcsICMgUGxvdCBsaW5lIGNvbG9yCisgICAgICAgICAgICAnY2hnJzog
JyVmLCVmLDAsMCcgJSAoMTAwIC8gKGxlbihkYXRlcykgLSAxKSwgeV9ncmlkX3N0ZXApLCAjIFgs
IFkgZ3JpZCBsaW5lIHN0ZXAgc2l6ZXMgLSBtYXggZm9yIFggaXMgMTAwLgorICAgICAgICAgICAg
J2NobHMnOiAnMycsICMgTGluZSB0aGlja25lc3MKKyAgICAgICAgICAgICdjaGYnOiAnYmcscyxl
ZmY2ZmQnLCAjIFRyYW5zcGFyZW50IGJhY2tncm91bmQKKyAgICAgICAgICAgICdjaGQnOiAndDon
ICsgJywnLmpvaW4oW3N0cih4KSBmb3IgeCBpbiBjaGFydF9kYXRhX3hdKSArICd8JyArICcsJy5q
b2luKFtzdHIoeSkgZm9yIHkgaW4gY2hhcnRfZGF0YV95XSksICMgWCwgWSBkYXRhCisgICAgICAg
IH0KSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25fZ2VuZXJhdG9y
c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90
LmNvbS9qc29uX2dlbmVyYXRvcnNfdW5pdHRlc3QucHkJKHJldmlzaW9uIDEwOTA1NykKKysrIFdl
YnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25fZ2VuZXJhdG9yc191bml0dGVzdC5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDExIEBAIGltcG9ydCB1bml0dGVzdAogCiBm
cm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGltcG9ydCB0ZXN0YmVkCiBmcm9tIGRhdGV0aW1lIGlt
cG9ydCBkYXRldGltZQorZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCiBmcm9tIGpzb25f
Z2VuZXJhdG9ycyBpbXBvcnQgSlNPTkdlbmVyYXRvckJhc2UKIGZyb20ganNvbl9nZW5lcmF0b3Jz
IGltcG9ydCBEYXNoYm9hcmRKU09OR2VuZXJhdG9yCiBmcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBv
cnQgTWFuaWZlc3RKU09OR2VuZXJhdG9yCi1mcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBvcnQgUnVu
c0pTT05HZW5lcmF0b3IKK2Zyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBSdW5zCiBmcm9tIG1v
ZGVsc191bml0dGVzdCBpbXBvcnQgRGF0YVN0b3JlVGVzdHNCYXNlCiBmcm9tIG1vZGVscyBpbXBv
cnQgQnJhbmNoCiBmcm9tIG1vZGVscyBpbXBvcnQgQnVpbGQKQEAgLTE4NSwxMiArMTg2LDEyIEBA
IGNsYXNzIE1hbmlmZXN0SlNPTkdlbmVyYXRvclRlc3QoRGF0YVN0b3IKICAgICAgICAgICAgIG90
aGVyX3Rlc3QuaWQ6IHsnbmFtZSc6IG90aGVyX3Rlc3QubmFtZSwgJ2JyYW5jaElkcyc6IFtzb21l
X2JyYW5jaC5pZF0sICdwbGF0Zm9ybUlkcyc6IFtzb21lX3BsYXRmb3JtLmlkXX19KQogCiAKLWNs
YXNzIFJ1bnNKU09OR2VuZXJhdG9yVGVzdChEYXRhU3RvcmVUZXN0c0Jhc2UpOgotICAgIGRlZiBf
Y3JlYXRlX3Jlc3VsdHMoc2VsZiwgYnJhbmNoLCBwbGF0Zm9ybSwgYnVpbGRlciwgdGVzdF9uYW1l
LCB2YWx1ZXMpOgorY2xhc3MgUnVuc1Rlc3QoRGF0YVN0b3JlVGVzdHNCYXNlKToKKyAgICBkZWYg
X2NyZWF0ZV9yZXN1bHRzKHNlbGYsIGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIsIHRlc3RfbmFt
ZSwgdmFsdWVzLCB0aW1lc3RhbXBzPU5vbmUpOgogICAgICAgICByZXN1bHRzID0gW10KICAgICAg
ICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgogICAgICAgICAgICAgYnVpbGQg
PSBCdWlsZChicmFuY2g9YnJhbmNoLCBwbGF0Zm9ybT1wbGF0Zm9ybSwgYnVpbGRlcj1idWlsZGVy
LAotICAgICAgICAgICAgICAgIGJ1aWxkTnVtYmVyPWksIHJldmlzaW9uPTEwMCArIGksIHRpbWVz
dGFtcD1kYXRldGltZS5ub3coKSkKKyAgICAgICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZp
c2lvbj0xMDAgKyBpLCB0aW1lc3RhbXA9dGltZXN0YW1wc1tpXSBpZiB0aW1lc3RhbXBzIGVsc2Ug
ZGF0ZXRpbWUubm93KCkpCiAgICAgICAgICAgICBidWlsZC5wdXQoKQogICAgICAgICAgICAgcmVz
dWx0ID0gVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgYnVpbGQ9YnVpbGQsIHZhbHVlPXZhbHVl
KQogICAgICAgICAgICAgcmVzdWx0LnB1dCgpCkBAIC0yMDQsNyArMjA1LDcgQEAgY2xhc3MgUnVu
c0pTT05HZW5lcmF0b3JUZXN0KERhdGFTdG9yZVRlcwogCiAgICAgICAgIHJlc3VsdHMgPSBzZWxm
Ll9jcmVhdGVfcmVzdWx0cyhzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSwgc29tZV9idWlsZGVy
LCAnc29tZS10ZXN0JywgWzUwLjAsIDUxLjAsIDUyLjAsIDQ5LjAsIDQ4LjBdKQogICAgICAgICBs
YXN0X2kgPSAwCi0gICAgICAgIGZvciBpLCAoYnVpbGQsIHJlc3VsdCkgaW4gZW51bWVyYXRlKFJ1
bnNKU09OR2VuZXJhdG9yLl9nZW5lcmF0ZV9ydW5zKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3Jt
LCAic29tZS10ZXN0IikpOgorICAgICAgICBmb3IgaSwgKGJ1aWxkLCByZXN1bHQpIGluIGVudW1l
cmF0ZShSdW5zLl9nZW5lcmF0ZV9ydW5zKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCAic29t
ZS10ZXN0IikpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWlsZC5idWlsZE51bWJl
ciwgaSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQucmV2aXNpb24sIDEwMCAr
IGkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5uYW1lLCAnc29tZS10ZXN0
JykKQEAgLTIxNyw3ICsyMTgsNyBAQCBjbGFzcyBSdW5zSlNPTkdlbmVyYXRvclRlc3QoRGF0YVN0
b3JlVGVzCiAgICAgICAgIHNvbWVfcGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2li
bGUoJ3NvbWUtcGxhdGZvcm0nLCAnU29tZSBQbGF0Zm9ybScpCiAgICAgICAgIHNlbGYuYXNzZXJ0
VGhlcmVJc05vSW5zdGFuY2VPZihUZXN0KQogICAgICAgICBzZWxmLmFzc2VydFRoZXJlSXNOb0lu
c3RhbmNlT2YoVGVzdFJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSdW5zSlNPTkdl
bmVyYXRvcihzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSwgJ3NvbWUtdGVzdCcpLnZhbHVlKCks
IHsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSdW5zKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRm
b3JtLCAnc29tZS10ZXN0JykudmFsdWUoKSwgewogICAgICAgICAgICAgJ3Rlc3RfcnVucyc6IFtd
LAogICAgICAgICAgICAgJ2F2ZXJhZ2VzJzoge30sCiAgICAgICAgICAgICAnbWluJzogTm9uZSwK
QEAgLTIzMSw3ICsyMzIsNyBAQCBjbGFzcyBSdW5zSlNPTkdlbmVyYXRvclRlc3QoRGF0YVN0b3Jl
VGVzCiAgICAgICAgIHNvbWVfYnVpbGRlciA9IEJ1aWxkZXIuZ2V0KEJ1aWxkZXIuY3JlYXRlKCdz
b21lLWJ1aWxkZXInLCAnU29tZSBCdWlsZGVyJykpCiAgICAgICAgIHJlc3VsdHMgPSBzZWxmLl9j
cmVhdGVfcmVzdWx0cyhzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSwgc29tZV9idWlsZGVyLCAn
c29tZS10ZXN0JywgWzUwLjAsIDUxLjAsIDUyLjAsIDQ5LjAsIDQ4LjBdKQogCi0gICAgICAgIHZh
bHVlID0gUnVuc0pTT05HZW5lcmF0b3Ioc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sICdzb21l
LXRlc3QnKS52YWx1ZSgpCisgICAgICAgIHZhbHVlID0gUnVucyhzb21lX2JyYW5jaCwgc29tZV9w
bGF0Zm9ybSwgJ3NvbWUtdGVzdCcpLnZhbHVlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFVu
b3JkZXJlZExpc3QodmFsdWUua2V5cygpLCBbJ3Rlc3RfcnVucycsICdhdmVyYWdlcycsICdtaW4n
LCAnbWF4JywgJ2RhdGVfcmFuZ2UnLCAnc3RhdCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHZhbHVlWydzdGF0J10sICdvaycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbJ21p
biddLCA0OC4wKQpAQCAtMjc0LDI4ICsyNzUsMjggQEAgY2xhc3MgUnVuc0pTT05HZW5lcmF0b3JU
ZXN0KERhdGFTdG9yZVRlcwogICAgICAgICBidWlsZCA9IGNyZWF0ZV9idWlsZCgxLCAxMDEpCiAg
ICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQobmFtZT10ZXN0X25hbWUsIHZhbHVlPTEyMy4wLCBi
dWlsZD1idWlsZCkKICAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9l
bnRyeShSdW5zSlNPTkdlbmVyYXRvci5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1aWxk
LCByZXN1bHQpLCBidWlsZCwgcmVzdWx0LCAxMjMuMCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2Vu
dHJ5KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVp
bGQsIHJlc3VsdCwgMTIzLjApCiAKICAgICAgICAgYnVpbGQgPSBjcmVhdGVfYnVpbGQoMiwgMTAy
KQogICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0KG5hbWU9dGVzdF9uYW1lLCB2YWx1ZT00NTYu
MCwgdmFsdWVNZWRpYW49Nzg5LjAsIGJ1aWxkPWJ1aWxkKQogICAgICAgICByZXN1bHQucHV0KCkK
LSAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnNKU09OR2VuZXJhdG9yLl9lbnRyeV9mcm9t
X2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCksIGJ1aWxkLCByZXN1bHQsIDQ1Ni4wKQor
ICAgICAgICBzZWxmLl9hc3NlcnRfZW50cnkoUnVucy5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVz
dWx0KGJ1aWxkLCByZXN1bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYuMCkKIAogICAgICAgICByZXN1
bHQudmFsdWVTdGRldiA9IDcuMAogICAgICAgICByZXN1bHQucHV0KCkKLSAgICAgICAgc2VsZi5f
YXNzZXJ0X2VudHJ5KFJ1bnNKU09OR2VuZXJhdG9yLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1
bHQoYnVpbGQsIHJlc3VsdCksIGJ1aWxkLCByZXN1bHQsIDQ1Ni4wKQorICAgICAgICBzZWxmLl9h
c3NlcnRfZW50cnkoUnVucy5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1aWxkLCByZXN1
bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYuMCkKIAogICAgICAgICByZXN1bHQudmFsdWVTdGRldiA9
IE5vbmUKICAgICAgICAgcmVzdWx0LnZhbHVlTWluID0gMTIzLjAKICAgICAgICAgcmVzdWx0LnZh
bHVlTWF4ID0gNzg5LjAKICAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgIHNlbGYuX2Fzc2Vy
dF9lbnRyeShSdW5zSlNPTkdlbmVyYXRvci5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1
aWxkLCByZXN1bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYuMCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0
X2VudHJ5KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwg
YnVpbGQsIHJlc3VsdCwgNDU2LjApCiAKICAgICAgICAgcmVzdWx0LnZhbHVlU3RkZXYgPSA4LjAK
ICAgICAgICAgcmVzdWx0LnZhbHVlTWluID0gMTIzLjAKICAgICAgICAgcmVzdWx0LnZhbHVlTWF4
ID0gNzg5LjAKICAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9lbnRy
eShSdW5zSlNPTkdlbmVyYXRvci5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1aWxkLCBy
ZXN1bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYuMCwKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5
KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQs
IHJlc3VsdCwgNDU2LjAsCiAgICAgICAgICAgICBzdGF0aXN0aWNzPXsnc3RkZXYnOiA4LjAsICdt
aW4nOiAxMjMuMCwgJ21heCc6IDc4OS4wfSkKIAogICAgICAgICByZXN1bHQudmFsdWVNZWRpYW4g
PSAzNDUuMCAgIyBNZWRpYW4gaXMgbmV2ZXIgdXNlZCBieSB0aGUgZnJvbnRlbmQuCkBAIC0zMDMs
OSArMzA0LDM1IEBAIGNsYXNzIFJ1bnNKU09OR2VuZXJhdG9yVGVzdChEYXRhU3RvcmVUZXMKICAg
ICAgICAgcmVzdWx0LnZhbHVlTWluID0gMTIzLjAKICAgICAgICAgcmVzdWx0LnZhbHVlTWF4ID0g
Nzg5LjAKICAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9lbnRyeShS
dW5zSlNPTkdlbmVyYXRvci5fZW50cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1aWxkLCByZXN1
bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYuMCwKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1
bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJl
c3VsdCwgNDU2LjAsCiAgICAgICAgICAgICBzdGF0aXN0aWNzPXsnc3RkZXYnOiA4LjAsICdtaW4n
OiAxMjMuMCwgJ21heCc6IDc4OS4wfSkKIAorICAgIGRlZiB0ZXN0X2NoYXJ0X3BhcmFtc193aXRo
X3ZhbHVlKHNlbGYpOgorICAgICAgICBzb21lX2JyYW5jaCA9IEJyYW5jaC5jcmVhdGVfaWZfcG9z
c2libGUoJ3NvbWUtYnJhbmNoJywgJ1NvbWUgQnJhbmNoJykKKyAgICAgICAgc29tZV9wbGF0Zm9y
bSA9IFBsYXRmb3JtLmNyZWF0ZV9pZl9wb3NzaWJsZSgnc29tZS1wbGF0Zm9ybScsICdTb21lIFBs
YXRmb3JtJykKKyAgICAgICAgc29tZV9idWlsZGVyID0gQnVpbGRlci5nZXQoQnVpbGRlci5jcmVh
dGUoJ3NvbWUtYnVpbGRlcicsICdTb21lIEJ1aWxkZXInKSkKKworICAgICAgICBzdGFydF90aW1l
ID0gZGF0ZXRpbWUoMjAxMSwgMiwgMjEsIDEyLCAwLCAwKQorICAgICAgICBlbmRfdGltZSA9IGRh
dGV0aW1lKDIwMTEsIDIsIDI4LCAxMiwgMCwgMCkKKyAgICAgICAgcmVzdWx0cyA9IHNlbGYuX2Ny
ZWF0ZV9yZXN1bHRzKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3JtLCBzb21lX2J1aWxkZXIsICdz
b21lLXRlc3QnLAorICAgICAgICAgICAgWzUwLjAsIDUxLjAsIDUyLjAsIDQ5LjAsIDQ4LjAsIDUx
LjksIDUwLjcsIDUxLjFdLAorICAgICAgICAgICAgW3N0YXJ0X3RpbWUgKyB0aW1lZGVsdGEoZGF5
KSBmb3IgZGF5IGluIHJhbmdlKDAsIDgpXSkKKworICAgICAgICAjIFVzZSBpbnQgZGVzcGl0ZSBv
ZiBpdHMgaW1wcmVjaXNlbmVzcyBzaW5jZSB0ZXN0cyBtYXkgZmFpbCBkdWUgdG8gcm91bmRpbmcg
ZXJyb3JzIG90aGVyd2lzZS4KKyAgICAgICAgZGVmIHNwbGl0X2FzX2ludChzdHJpbmcpOgorICAg
ICAgICAgICAgcmV0dXJuIFtpbnQoZmxvYXQodmFsdWUpKSBmb3IgdmFsdWUgaW4gc3RyaW5nLnNw
bGl0KCcsJyldCisKKyAgICAgICAgcGFyYW1zID0gUnVucyhzb21lX2JyYW5jaCwgc29tZV9wbGF0
Zm9ybSwgJ3NvbWUtdGVzdCcpLmNoYXJ0X3BhcmFtcyg3LCBlbmRfdGltZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwYXJhbXNbJ2NoeGwnXSwgJzA6fEZlYiAyMXxGZWIgMjJ8RmViIDIzfEZl
YiAyNHxGZWIgMjV8RmViIDI2fEZlYiAyN3xGZWIgMjgnKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHNwbGl0X2FzX2ludChwYXJhbXNbJ2NoeHInXSksIFsxLCAwLCA1NywgaW50KDUyICogMS4x
IC8gNSArIDAuNSldKQorICAgICAgICB4X21pbiwgeF9tYXgsIHlfbWluLCB5X21heCA9IHNwbGl0
X2FzX2ludChwYXJhbXNbJ2NoZHMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGlt
ZS5mcm9tdGltZXN0YW1wKHhfbWluKSwgc3RhcnRfdGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChkYXRldGltZS5mcm9tdGltZXN0YW1wKHhfbWF4KSwgZW5kX3RpbWUpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoeV9taW4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeV9tYXgs
IGludCg1MiAqIDEuMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRfYXNfaW50KHBh
cmFtc1snY2hnJ10pLCBbaW50KDEwMCAvIDcpLCBpbnQoNTIgKiAxLjEgLyA1KSwgMCwgMF0pCisK
KwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRl
eDogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tYWluLnB5CShyZXZpc2lvbiAxMDkw
NTcpCisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tYWluLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBAQCBmcm9tIGFkbWluX2hhbmRsZXJzIGltcG9ydCBNZXJn
ZVRlc3RzSGFuCiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IENhY2hlZERhc2hib2FyZEhhbmRsZXIK
IGZyb20gY29udHJvbGxlciBpbXBvcnQgQ2FjaGVkTWFuaWZlc3RIYW5kbGVyCiBmcm9tIGNvbnRy
b2xsZXIgaW1wb3J0IENhY2hlZFJ1bnNIYW5kbGVyCitmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IERh
c2hib2FyZEltYWdlSGFuZGxlcgogZnJvbSBjb250cm9sbGVyIGltcG9ydCBEYXNoYm9hcmRVcGRh
dGVIYW5kbGVyCiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IE1hbmlmZXN0VXBkYXRlSGFuZGxlcgor
ZnJvbSBjb250cm9sbGVyIGltcG9ydCBSdW5zQ2hhcnRIYW5kbGVyCiBmcm9tIGNvbnRyb2xsZXIg
aW1wb3J0IFJ1bnNVcGRhdGVIYW5kbGVyCiBmcm9tIGNyZWF0ZV9oYW5kbGVyIGltcG9ydCBDcmVh
dGVIYW5kbGVyCiBmcm9tIHJlcG9ydF9oYW5kbGVyIGltcG9ydCBSZXBvcnRIYW5kbGVyCkBAIC00
MSw2ICs0Myw3IEBAIHJvdXRlcyA9IFsKICAgICAoJy9hZG1pbi9yZXBvcnQtbG9ncy8/JywgUmVw
b3J0TG9nc0hhbmRsZXIpLAogICAgICgnL2FkbWluL2NyZWF0ZS8oLiopJywgQ3JlYXRlSGFuZGxl
ciksCiAgICAgKHInL2FkbWluLyhbQS1aYS16XC1dKiknLCBBZG1pbkRhc2hib2FyZEhhbmRsZXIp
LAorCiAgICAgKCcvYXBpL3VzZXIvaXMtYWRtaW4nLCBJc0FkbWluSGFuZGxlciksCiAgICAgKCcv
YXBpL3Rlc3QvPycsIENhY2hlZE1hbmlmZXN0SGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvdXBk
YXRlJywgTWFuaWZlc3RVcGRhdGVIYW5kbGVyKSwKQEAgLTQ4LDkgKzUxLDExIEBAIHJvdXRlcyA9
IFsKICAgICAoJy9hcGkvdGVzdC9yZXBvcnQvcHJvY2VzcycsIFJlcG9ydFByb2Nlc3NIYW5kbGVy
KSwKICAgICAoJy9hcGkvdGVzdC9ydW5zLz8nLCBDYWNoZWRSdW5zSGFuZGxlciksCiAgICAgKCcv
YXBpL3Rlc3QvcnVucy91cGRhdGUnLCBSdW5zVXBkYXRlSGFuZGxlciksCisgICAgKCcvYXBpL3Rl
c3QvcnVucy9jaGFydCcsIFJ1bnNDaGFydEhhbmRsZXIpLAogICAgICgnL2FwaS90ZXN0L2Rhc2hi
b2FyZC8/JywgQ2FjaGVkRGFzaGJvYXJkSGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvZGFzaGJv
YXJkL3VwZGF0ZScsIERhc2hib2FyZFVwZGF0ZUhhbmRsZXIpLAotXQorCisgICAgKCcvaW1hZ2Vz
L2Rhc2hib2FyZC9mbG90LShcZCspLShcZCspLShcZCspXyhcZCspLnBuZycsIERhc2hib2FyZElt
YWdlSGFuZGxlcildCiAKIAogZGVmIG1haW4oKToKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJm
LmFwcHNwb3QuY29tL21vZGVscy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVy
Zi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHJldmlzaW9uIDEwOTA1NykKKysrIFdlYnNpdGVzL3dl
YmtpdC1wZXJmLmFwcHNwb3QuY29tL21vZGVscy5weQkod29ya2luZyBjb3B5KQpAQCAtMzIyLDMg
KzMyMiwxMSBAQCBjbGFzcyBQZXJzaXN0ZW50Q2FjaGUoZGIuTW9kZWwpOgogICAgICAgICAgICAg
cmV0dXJuIE5vbmUKICAgICAgICAgbWVtY2FjaGUuc2V0KG5hbWUsIGNhY2hlLnZhbHVlKQogICAg
ICAgICByZXR1cm4gY2FjaGUudmFsdWUKKworCitjbGFzcyBEYXNoYm9hcmRJbWFnZShkYi5Nb2Rl
bCk6CisgICAgaW1hZ2UgPSBkYi5CbG9iUHJvcGVydHkocmVxdWlyZWQ9VHJ1ZSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYga2V5X25hbWUoYnJhbmNoX2lkLCBwbGF0Zm9ybV9pZCwgdGVz
dF9pZCwgZGlzcGxheV9kYXlzKToKKyAgICAgICAgcmV0dXJuICclZDolZDolZDolZCcgJSAoYnJh
bmNoX2lkLCBwbGF0Zm9ybV9pZCwgdGVzdF9pZCwgZGlzcGxheV9kYXlzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129341</attachid>
            <date>2012-02-28 15:20:11 -0800</date>
            <delta_ts>2012-02-28 22:07:04 -0800</delta_ts>
            <desc>Make the style bot happy</desc>
            <filename>bug-79838-20120228152010.patch</filename>
            <type>text/plain</type>
            <size>20343</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTE1
NCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAy
LTI4ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIHBlcmYtby1t
YXRpYzogZ2VuZXJhdGUgZGFzaGJvYXJkIGltYWdlcyB1c2luZyBHb29nbGUgQ2hhcnQgVG9vbHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODM4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFJ1
bnNKU09OR2VuZXJhdG9yIHRvIFJ1bnMgYW5kIGFkZGVkIGFuIGFiaWxpdHkgdG8gZ2VuZXJhdGUg
cGFyYW1ldGVycyBmb3IgR29vZ2xlIGNoYXJ0IHRvb2wuCisgICAgICAgIEFsc28gYWRkZWQgUnVu
c0NoYXJ0SGFuZGxlciB0byBtYWtlIHVybC1mZXRjaGVzIHRoZXNlIGltYWdlcyBhbmQgRGFzaGJv
YXJkSW1hZ2VIYW5kbGVyIHRvIHNlcnZlIHRoZW0uCisgICAgICAgIFRoZSBpbWFnZSBpcyBzdG9y
ZWQgaW4gRGFzaGJvYXJkSW1hZ2UgbW9kZWwuCisKKyAgICAgICAgV2UgY2FuJ3QgZW5hYmxlIGZs
aXAgdGhlIHN3aXRjaCB0byB1c2UgaW1hZ2VzIHlldCBiZWNhdXNlIHdlIGRvbid0IGNyZWF0ZSBp
bWFnZXMgb24gZmx5ICh0aGV5J3JlCisgICAgICAgIGdlbmVyYXRlZCB3aGVuIHJ1bnMgYXJlIHVw
ZGF0ZWQ7IGkuZS4gYm90cyB1cGxvYWQgbmV3IHJlc3VsdHMpLiBXZSBzaG91bGQgYmUgYWJsZSB0
byBmbGlwIHRoZSBzd2l0Y2gKKyAgICAgICAgb25jZSB0aGlzIHBhdGNoIGxhbmRzIGFuZCBhbGwg
cGVyZiBib3RzIGN5Y2xlLgorCisgICAgICAgIFdlIHByb2JhYmx5IG1ha2Ugd2F5IHRvbyBtYW55
IGNhbGxzIHRvIEdvb2dsZSBjaGFydCB0b29sJ3Mgc2VydmVyIHdpdGggdGhpcyBwcmVsaW1pbmFy
eSBkZXNpZ24gYnV0IHdlCisgICAgICAgIGNhbiBlYXNpbHkgbW92ZSB0aGlzIHRhc2sgaW50byB0
aGUgYmFja2VuZCBhbmQgcnVuIGl0IHZpYSBhIGNyb24gam9iIG9uY2Ugd2Uga25vdyBpdCB3b3Jr
cy4KKworICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xs
ZXIucHk6CisgICAgICAgIChzY2hlZHVsZV9ydW5zX3VwZGF0ZSk6CisgICAgICAgIChSdW5zVXBk
YXRlSGFuZGxlci5wb3N0KToKKyAgICAgICAgKFJ1bnNDaGFydEhhbmRsZXIpOgorICAgICAgICAo
UnVuc0NoYXJ0SGFuZGxlci5nZXQpOgorICAgICAgICAoUnVuc0NoYXJ0SGFuZGxlci5wb3N0KToK
KyAgICAgICAgKERhc2hib2FyZEltYWdlSGFuZGxlcik6CisgICAgICAgIChEYXNoYm9hcmRJbWFn
ZUhhbmRsZXIuZ2V0KToKKyAgICAgICAgKHNjaGVkdWxlX3JlcG9ydF9wcm9jZXNzKToKKyAgICAg
ICAgKiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnMucHk6
CisgICAgICAgIChNYW5pZmVzdEpTT05HZW5lcmF0b3IudmFsdWUpOgorICAgICAgICAoUnVucyk6
CisgICAgICAgIChSdW5zLl9faW5pdF9fKToKKyAgICAgICAgKFJ1bnMudmFsdWUpOgorICAgICAg
ICAoUnVucy5jaGFydF9wYXJhbXMpOgorICAgICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFw
cHNwb3QuY29tL2pzb25fZ2VuZXJhdG9yc191bml0dGVzdC5weToKKyAgICAgICAgKFJ1bnNUZXN0
KToKKyAgICAgICAgKFJ1bnNUZXN0Ll9jcmVhdGVfcmVzdWx0cyk6CisgICAgICAgIChSdW5zVGVz
dC50ZXN0X2dlbmVyYXRlX3J1bnMpOgorICAgICAgICAoUnVuc1Rlc3QudGVzdF92YWx1ZV93aXRo
b3V0X3Jlc3VsdHMpOgorICAgICAgICAoUnVuc1Rlc3QudGVzdF92YWx1ZV93aXRoX3Jlc3VsdHMp
OgorICAgICAgICAoUnVuc1Rlc3QudGVzdF9ydW5fZnJvbV9idWlsZF9hbmRfcmVzdWx0KToKKyAg
ICAgICAgKFJ1bnNUZXN0LnRlc3RfY2hhcnRfcGFyYW1zX3dpdGhfdmFsdWUpOgorICAgICAgICAo
UnVuc1Rlc3QudGVzdF9jaGFydF9wYXJhbXNfd2l0aF92YWx1ZS5zcGxpdF9hc19pbnQpOgorICAg
ICAgICAqIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHk6CisgICAgICAg
ICogV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzLnB5OgorICAgICAgICAo
UGVyc2lzdGVudENhY2hlLmdldF9jYWNoZSk6CisgICAgICAgIChEYXNoYm9hcmRJbWFnZSk6Cisg
ICAgICAgIChEYXNoYm9hcmRJbWFnZS5rZXlfbmFtZSk6CisKIDIwMTItMDItMjggIFNoaW55YSBL
YXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEVsZW1lbnQgc2hvdWxk
IGJlIGFibGUgdG8gaGF2ZSBtdWx0aXBsZSBzaGFkb3cgcm9vdHMuCkluZGV4OiBXZWJzaXRlcy93
ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9jb250cm9sbGVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYnNp
dGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xsZXIucHkJKHJldmlzaW9uIDEwOTA1
NykKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2NvbnRyb2xsZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDE0ICsyNywxNiBAQAogIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KIAoraW1wb3J0IHVybGxpYgogaW1wb3J0IHdlYmFwcDIKIGZyb20gZ29vZ2xlLmFwcGVu
Z2luZS5hcGkgaW1wb3J0IHRhc2txdWV1ZQogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBv
cnQgZGIKIAogZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IERhc2hib2FyZEpTT05HZW5lcmF0
b3IKIGZyb20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBNYW5pZmVzdEpTT05HZW5lcmF0b3IKLWZy
b20ganNvbl9nZW5lcmF0b3JzIGltcG9ydCBSdW5zSlNPTkdlbmVyYXRvcgorZnJvbSBqc29uX2dl
bmVyYXRvcnMgaW1wb3J0IFJ1bnMKIGZyb20gbW9kZWxzIGltcG9ydCBCcmFuY2gKK2Zyb20gbW9k
ZWxzIGltcG9ydCBEYXNoYm9hcmRJbWFnZQogZnJvbSBtb2RlbHMgaW1wb3J0IFBsYXRmb3JtCiBm
cm9tIG1vZGVscyBpbXBvcnQgVGVzdAogZnJvbSBtb2RlbHMgaW1wb3J0IFBlcnNpc3RlbnRDYWNo
ZQpAQCAtOTcsNiArOTksNyBAQCBkZWYgY2FjaGVfcnVucyh0ZXN0X2lkLCBicmFuY2hfaWQsIHBs
YXRmCiAKIGRlZiBzY2hlZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRm
b3JtX2lkKToKICAgICB0YXNrcXVldWUuYWRkKHVybD0nL2FwaS90ZXN0L3J1bnMvdXBkYXRlJywg
cGFyYW1zPXsnaWQnOiB0ZXN0X2lkLCAnYnJhbmNoaWQnOiBicmFuY2hfaWQsICdwbGF0Zm9ybWlk
JzogcGxhdGZvcm1faWR9KQorICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBpL3Rlc3QvcnVucy9j
aGFydCcsIHBhcmFtcz17J2lkJzogdGVzdF9pZCwgJ2JyYW5jaGlkJzogYnJhbmNoX2lkLCAncGxh
dGZvcm1pZCc6IHBsYXRmb3JtX2lkfSkKIAogCiBkZWYgX2dldF90ZXN0X2JyYW5jaF9wbGF0Zm9y
bV9pZHMoaGFuZGxlcik6CkBAIC0xMjUsNyArMTI4LDcgQEAgY2xhc3MgUnVuc1VwZGF0ZUhhbmRs
ZXIod2ViYXBwMi5SZXF1ZXN0SAogICAgICAgICBhc3NlcnQgcGxhdGZvcm0KICAgICAgICAgYXNz
ZXJ0IHRlc3QKIAotICAgICAgICBjYWNoZV9ydW5zKHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZv
cm1faWQsIFJ1bnNKU09OR2VuZXJhdG9yKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3QubmFtZSkudG9f
anNvbigpKQorICAgICAgICBjYWNoZV9ydW5zKHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQsIFJ1bnMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdC5uYW1lKS50b19qc29uKCkpCiAgICAgICAg
IHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdPSycpCiAKIApAQCAtMTQxLDUgKzE0NCw0OCBAQCBj
bGFzcyBDYWNoZWRSdW5zSGFuZGxlcih3ZWJhcHAyLlJlcXVlc3RICiAgICAgICAgICAgICBzY2hl
ZHVsZV9ydW5zX3VwZGF0ZSh0ZXN0X2lkLCBicmFuY2hfaWQsIHBsYXRmb3JtX2lkKQogCiAKK2Ns
YXNzIFJ1bnNDaGFydEhhbmRsZXIod2ViYXBwMi5SZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIGdl
dChzZWxmKToKKyAgICAgICAgc2VsZi5wb3N0KCkKKworICAgIGRlZiBwb3N0KHNlbGYpOgorICAg
ICAgICBzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47
IGNoYXJzZXQ9dXRmLTgnCisgICAgICAgIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZvcm1faWQg
PSBfZ2V0X3Rlc3RfYnJhbmNoX3BsYXRmb3JtX2lkcyhzZWxmKQorCisgICAgICAgIGJyYW5jaCA9
IG1vZGVsX2Zyb21fbnVtZXJpY19pZChicmFuY2hfaWQsIEJyYW5jaCkKKyAgICAgICAgcGxhdGZv
cm0gPSBtb2RlbF9mcm9tX251bWVyaWNfaWQocGxhdGZvcm1faWQsIFBsYXRmb3JtKQorICAgICAg
ICB0ZXN0ID0gbW9kZWxfZnJvbV9udW1lcmljX2lkKHRlc3RfaWQsIFRlc3QpCisgICAgICAgIGRp
c3BsYXlfZGF5cyA9IGludChzZWxmLnJlcXVlc3QuZ2V0KCdkaXNwbGF5RGF5cycpKQorICAgICAg
ICBhc3NlcnQgYnJhbmNoCisgICAgICAgIGFzc2VydCBwbGF0Zm9ybQorICAgICAgICBhc3NlcnQg
dGVzdAorCisgICAgICAgIHBhcmFtcyA9IFJ1bnMoYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdC5uYW1l
KS5jaGFydF9wYXJhbXMoZGlzcGxheV9kYXlzKQorICAgICAgICBkYXNoYm9hcmRfY2hhcnRfZmls
ZSA9IHVybGxpYi51cmxvcGVuKCdodHRwOi8vY2hhcnQuZ29vZ2xlYXBpcy5jb20vY2hhcnQnLCB1
cmxsaWIudXJsZW5jb2RlKHBhcmFtcykpCisKKyAgICAgICAgRGFzaGJvYXJkSW1hZ2Uoa2V5X25h
bWU9RGFzaGJvYXJkSW1hZ2Uua2V5X25hbWUoYnJhbmNoLmlkLCBwbGF0Zm9ybS5pZCwgdGVzdC5p
ZCwgZGlzcGxheV9kYXlzKSwKKyAgICAgICAgICAgIGltYWdlPWRhc2hib2FyZF9jaGFydF9maWxl
LnJlYWQoKSkucHV0KCkKKworICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSgnRmV0Y2hl
ZCBodHRwOi8vY2hhcnQuZ29vZ2xlYXBpcy5jb20vY2hhcnQ/JXMnICUgdXJsbGliLnVybGVuY29k
ZShwYXJhbXMpKQorCisKK2NsYXNzIERhc2hib2FyZEltYWdlSGFuZGxlcih3ZWJhcHAyLlJlcXVl
c3RIYW5kbGVyKToKKyAgICBkZWYgZ2V0KHNlbGYsIHRlc3RfaWQsIGJyYW5jaF9pZCwgcGxhdGZv
cm1faWQsIGRpc3BsYXlfZGF5cyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJyYW5jaF9p
ZCA9IGludChicmFuY2hfaWQpCisgICAgICAgICAgICBwbGF0Zm9ybV9pZCA9IGludChwbGF0Zm9y
bV9pZCkKKyAgICAgICAgICAgIHRlc3RfaWQgPSBpbnQodGVzdF9pZCkKKyAgICAgICAgICAgIGRp
c3BsYXlfZGF5cyA9IGludChkaXNwbGF5X2RheXMpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9y
OgorICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0
ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JworICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQu
d3JpdGUoJ0ZhaWxlZCcpCisKKyAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50
LVR5cGUnXSA9ICdpbWFnZS9wbmcnCisgICAgICAgIGltYWdlID0gRGFzaGJvYXJkSW1hZ2UuZ2V0
X2J5X2tleV9uYW1lKERhc2hib2FyZEltYWdlLmtleV9uYW1lKGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQsIHRlc3RfaWQsIGRpc3BsYXlfZGF5cykpCisgICAgICAgIGlmIGltYWdlOgorICAgICAgICAg
ICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoaW1hZ2UuaW1hZ2UpCisKKwogZGVmIHNjaGVkdWxl
X3JlcG9ydF9wcm9jZXNzKGxvZyk6CisgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWydDb250ZW50
LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJwogICAgIHRhc2txdWV1ZS5hZGQodXJsPScvYXBp
L3Rlc3QvcmVwb3J0L3Byb2Nlc3MnLCBwYXJhbXM9eydpZCc6IGxvZy5rZXkoKS5pZCgpfSkKSW5k
ZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL2pzb25fZ2VuZXJhdG9ycy5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVy
YXRvcnMucHkJKHJldmlzaW9uIDEwOTA1NykKKysrIFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNw
b3QuY29tL2pzb25fZ2VuZXJhdG9ycy5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBA
QAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQganNvbgorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQogZnJvbSB0aW1lIGltcG9ydCBt
a3RpbWUKIAogZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCkBAIC0xMTgsMjAgKzEyMCwxMiBAQCBj
bGFzcyBNYW5pZmVzdEpTT05HZW5lcmF0b3IoSlNPTkdlbmVyYXRvCiAgICAgICAgIHJldHVybiB7
J2JyYW5jaE1hcCc6IHNlbGYuX2JyYW5jaF9tYXAsICdwbGF0Zm9ybU1hcCc6IHNlbGYuX3BsYXRm
b3JtX21hcCwgJ3Rlc3RNYXAnOiBzZWxmLl90ZXN0X21hcH0KIAogCi1jbGFzcyBSdW5zSlNPTkdl
bmVyYXRvcihKU09OR2VuZXJhdG9yQmFzZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJyYW5j
aCwgcGxhdGZvcm0sIHRlc3QpOgotICAgICAgICBzZWxmLl90ZXN0X3J1bnMgPSBbXQotICAgICAg
ICBzZWxmLl9hdmVyYWdlcyA9IHt9Ci0gICAgICAgIHZhbHVlcyA9IFtdCi0KLSAgICAgICAgZm9y
IGJ1aWxkLCByZXN1bHQgaW4gUnVuc0pTT05HZW5lcmF0b3IuX2dlbmVyYXRlX3J1bnMoYnJhbmNo
LCBwbGF0Zm9ybSwgdGVzdCk6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X3J1bnMuYXBwZW5kKFJ1
bnNKU09OR2VuZXJhdG9yLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3Vs
dCkpCi0gICAgICAgICAgICAjIEZJWE1FOiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UuIEluIHByYWN0
aWNlLCB3ZSB3b3VsZG4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmV2
aXNpb24uCi0gICAgICAgICAgICBzZWxmLl9hdmVyYWdlc1tidWlsZC5yZXZpc2lvbl0gPSByZXN1
bHQudmFsdWUKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQocmVzdWx0LnZhbHVlKQotCi0gICAg
ICAgIHNlbGYuX21pbiA9IG1pbih2YWx1ZXMpIGlmIHZhbHVlcyBlbHNlIE5vbmUKLSAgICAgICAg
c2VsZi5fbWF4ID0gbWF4KHZhbHVlcykgaWYgdmFsdWVzIGVsc2UgTm9uZQorIyBGSVhNRTogVGhp
cyBpc24ndCBhIEpTT04gZ2VuZXJhdG9yIGFueW1vcmUuIFdlIHNob3VsZCBtb3ZlIGl0IGVsc2V3
aGVyZSBvciByZW5hbWUgdGhlIGZpbGUuCitjbGFzcyBSdW5zKEpTT05HZW5lcmF0b3JCYXNlKToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgYnJhbmNoLCBwbGF0Zm9ybSwgdGVzdF9uYW1lKToKKyAg
ICAgICAgc2VsZi5fYnJhbmNoID0gYnJhbmNoCisgICAgICAgIHNlbGYuX3BsYXRmb3JtID0gcGxh
dGZvcm0KKyAgICAgICAgc2VsZi5fdGVzdF9uYW1lID0gdGVzdF9uYW1lCiAKICAgICBAc3RhdGlj
bWV0aG9kCiAgICAgZGVmIF9nZW5lcmF0ZV9ydW5zKGJyYW5jaCwgcGxhdGZvcm0sIHRlc3RfbmFt
ZSk6CkBAIC0xNjcsMTAgKzE2MSw1OCBAQCBjbGFzcyBSdW5zSlNPTkdlbmVyYXRvcihKU09OR2Vu
ZXJhdG9yQmFzCiAgICAgICAgICAgICBidWlsZGVyX2lkLCBzdGF0aXN0aWNzXQogCiAgICAgZGVm
IHZhbHVlKHNlbGYpOgorICAgICAgICBfdGVzdF9ydW5zID0gW10KKyAgICAgICAgX2F2ZXJhZ2Vz
ID0ge30KKyAgICAgICAgdmFsdWVzID0gW10KKworICAgICAgICBmb3IgYnVpbGQsIHJlc3VsdCBp
biBSdW5zLl9nZW5lcmF0ZV9ydW5zKHNlbGYuX2JyYW5jaCwgc2VsZi5fcGxhdGZvcm0sIHNlbGYu
X3Rlc3RfbmFtZSk6CisgICAgICAgICAgICBfdGVzdF9ydW5zLmFwcGVuZChSdW5zLl9lbnRyeV9m
cm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCkpCisgICAgICAgICAgICAjIEZJWE1F
OiBDYWxjdWxhdGUgdGhlIGF2ZXJhZ2UuIEluIHByYWN0aWNlLCB3ZSB3b3VsZG4ndCBoYXZlIG1v
cmUgdGhhbiBvbmUgdmFsdWUgZm9yIGEgZ2l2ZW4gcmV2aXNpb24uCisgICAgICAgICAgICBfYXZl
cmFnZXNbYnVpbGQucmV2aXNpb25dID0gcmVzdWx0LnZhbHVlCisgICAgICAgICAgICB2YWx1ZXMu
YXBwZW5kKHJlc3VsdC52YWx1ZSkKKworICAgICAgICBfbWluID0gbWluKHZhbHVlcykgaWYgdmFs
dWVzIGVsc2UgTm9uZQorICAgICAgICBfbWF4ID0gbWF4KHZhbHVlcykgaWYgdmFsdWVzIGVsc2Ug
Tm9uZQorCiAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAndGVzdF9ydW5zJzogc2VsZi5f
dGVzdF9ydW5zLAotICAgICAgICAgICAgJ2F2ZXJhZ2VzJzogc2VsZi5fYXZlcmFnZXMsCi0gICAg
ICAgICAgICAnbWluJzogc2VsZi5fbWluLAotICAgICAgICAgICAgJ21heCc6IHNlbGYuX21heCwK
KyAgICAgICAgICAgICd0ZXN0X3J1bnMnOiBfdGVzdF9ydW5zLAorICAgICAgICAgICAgJ2F2ZXJh
Z2VzJzogX2F2ZXJhZ2VzLAorICAgICAgICAgICAgJ21pbic6IF9taW4sCisgICAgICAgICAgICAn
bWF4JzogX21heCwKICAgICAgICAgICAgICdkYXRlX3JhbmdlJzogTm9uZSwgICMgTmV2ZXIgdXNl
ZCBieSBjb21tb24uanMuCiAgICAgICAgICAgICAnc3RhdCc6ICdvayd9CisKKyAgICBkZWYgY2hh
cnRfcGFyYW1zKHNlbGYsIGRpc3BsYXlfZGF5cywgbm93PWRhdGV0aW1lLm5vdygpKToKKyAgICAg
ICAgY2hhcnRfZGF0YV94ID0gW10KKyAgICAgICAgY2hhcnRfZGF0YV95ID0gW10KKyAgICAgICAg
ZW5kX3RpbWUgPSBub3cKKyAgICAgICAgc3RhcnRfdGltZXN0YW1wID0gbWt0aW1lKChlbmRfdGlt
ZSAtIHRpbWVkZWx0YShkaXNwbGF5X2RheXMpKS50aW1ldHVwbGUoKSkKKyAgICAgICAgZW5kX3Rp
bWVzdGFtcCA9IG1rdGltZShlbmRfdGltZS50aW1ldHVwbGUoKSkKKworICAgICAgICBmb3IgYnVp
bGQsIHJlc3VsdCBpbiBzZWxmLl9nZW5lcmF0ZV9ydW5zKHNlbGYuX2JyYW5jaCwgc2VsZi5fcGxh
dGZvcm0sIHNlbGYuX3Rlc3RfbmFtZSk6CisgICAgICAgICAgICB0aW1lc3RhbXAgPSBta3RpbWUo
YnVpbGQudGltZXN0YW1wLnRpbWV0dXBsZSgpKQorICAgICAgICAgICAgaWYgdGltZXN0YW1wIDwg
c3RhcnRfdGltZXN0YW1wIG9yIHRpbWVzdGFtcCA+IGVuZF90aW1lc3RhbXA6CisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNoYXJ0X2RhdGFfeC5hcHBlbmQodGltZXN0YW1w
KQorICAgICAgICAgICAgY2hhcnRfZGF0YV95LmFwcGVuZChyZXN1bHQudmFsdWUpCisKKyAgICAg
ICAgZGF0ZXMgPSBbZW5kX3RpbWUgKyB0aW1lZGVsdGEoZGF5IC0gZGlzcGxheV9kYXlzKSBmb3Ig
ZGF5IGluIHJhbmdlKDAsIGRpc3BsYXlfZGF5cyArIDEpXQorCisgICAgICAgIHlfbWF4ID0gbWF4
KGNoYXJ0X2RhdGFfeSkgKiAxLjEKKyAgICAgICAgeV9ncmlkX3N0ZXAgPSB5X21heCAvIDUKKyAg
ICAgICAgeV9heGlzX2xhYmVsX3N0ZXAgPSBpbnQoeV9ncmlkX3N0ZXAgKyAwLjUpICAjIFRoaXMg
d29uJ3Qgd29yayBmb3IgZGVjaW1hbCBudW1iZXJzCisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICdjaHQnOiAnbHh5JywgICMgU3BlY2lmeSB3aXRoIFggYW5kIFkgY29vcmRpbmF0ZXMK
KyAgICAgICAgICAgICdjaHh0JzogJ3gseScsICAjIERpc3BsYXkgYm90aCBYIGFuZCBZIGF4aWVz
CisgICAgICAgICAgICAnY2h4bCc6ICcwOnwnICsgJ3wnLmpvaW4oW2RhdGUuc3RyZnRpbWUoJyVi
ICVkJykgZm9yIGRhdGUgaW4gZGF0ZXNdKSwgICMgWC1heGlzIGxhYmVscworICAgICAgICAgICAg
J2NoeHInOiAnMSwwLCVmLCVmJyAlIChpbnQoeV9tYXggKyAwLjUpLCB5X2F4aXNfbGFiZWxfc3Rl
cCksICAjIFktYXhpcyByYW5nZTogbWluPTAsIG1heCwgc3RlcAorICAgICAgICAgICAgJ2NoZHMn
OiAnJWYsJWYsJWYsJWYnICUgKHN0YXJ0X3RpbWVzdGFtcCwgZW5kX3RpbWVzdGFtcCwgMCwgeV9t
YXgpLCAgIyBYLCBZIGRhdGEgcmFuZ2UKKyAgICAgICAgICAgICdjaHhzJzogJzEsNjc2NzY3LDEx
LjE2NywwLGwsNjc2NzY3JywgICMgWS1heGlzIGxhYmVsOiAxLGNvbG9yLGZvbnQtc2l6ZSxjZW50
ZXJkIG9uIHRpY2ssYXhpcyBsaW5lL25vIHRpY2tzLCB0aWNrIGNvbG9yCisgICAgICAgICAgICAn
Y2hzJzogJzM2MHgyNDAnLCAgIyBJbWFnZSBzaXplOiAzNjBweCBieSAyNDBweAorICAgICAgICAg
ICAgJ2NoY28nOiAnZmYwMDAwJywgICMgUGxvdCBsaW5lIGNvbG9yCisgICAgICAgICAgICAnY2hn
JzogJyVmLCVmLDAsMCcgJSAoMTAwIC8gKGxlbihkYXRlcykgLSAxKSwgeV9ncmlkX3N0ZXApLCAg
IyBYLCBZIGdyaWQgbGluZSBzdGVwIHNpemVzIC0gbWF4IGZvciBYIGlzIDEwMC4KKyAgICAgICAg
ICAgICdjaGxzJzogJzMnLCAgIyBMaW5lIHRoaWNrbmVzcworICAgICAgICAgICAgJ2NoZic6ICdi
ZyxzLGVmZjZmZCcsICAjIFRyYW5zcGFyZW50IGJhY2tncm91bmQKKyAgICAgICAgICAgICdjaGQn
OiAndDonICsgJywnLmpvaW4oW3N0cih4KSBmb3IgeCBpbiBjaGFydF9kYXRhX3hdKSArICd8JyAr
ICcsJy5qb2luKFtzdHIoeSkgZm9yIHkgaW4gY2hhcnRfZGF0YV95XSksICAjIFgsIFkgZGF0YQor
ICAgICAgICB9CkluZGV4OiBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dl
bmVyYXRvcnNfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYu
YXBwc3BvdC5jb20vanNvbl9nZW5lcmF0b3JzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAxMDkwNTcp
CisrKyBXZWJzaXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9qc29uX2dlbmVyYXRvcnNfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEwICszMywxMSBAQCBpbXBvcnQgdW5pdHRl
c3QKIAogZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgdGVzdGJlZAogZnJvbSBkYXRl
dGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQogZnJv
bSBqc29uX2dlbmVyYXRvcnMgaW1wb3J0IEpTT05HZW5lcmF0b3JCYXNlCiBmcm9tIGpzb25fZ2Vu
ZXJhdG9ycyBpbXBvcnQgRGFzaGJvYXJkSlNPTkdlbmVyYXRvcgogZnJvbSBqc29uX2dlbmVyYXRv
cnMgaW1wb3J0IE1hbmlmZXN0SlNPTkdlbmVyYXRvcgotZnJvbSBqc29uX2dlbmVyYXRvcnMgaW1w
b3J0IFJ1bnNKU09OR2VuZXJhdG9yCitmcm9tIGpzb25fZ2VuZXJhdG9ycyBpbXBvcnQgUnVucwog
ZnJvbSBtb2RlbHNfdW5pdHRlc3QgaW1wb3J0IERhdGFTdG9yZVRlc3RzQmFzZQogZnJvbSBtb2Rl
bHMgaW1wb3J0IEJyYW5jaAogZnJvbSBtb2RlbHMgaW1wb3J0IEJ1aWxkCkBAIC0xODUsMTIgKzE4
NiwxMiBAQCBjbGFzcyBNYW5pZmVzdEpTT05HZW5lcmF0b3JUZXN0KERhdGFTdG9yCiAgICAgICAg
ICAgICBvdGhlcl90ZXN0LmlkOiB7J25hbWUnOiBvdGhlcl90ZXN0Lm5hbWUsICdicmFuY2hJZHMn
OiBbc29tZV9icmFuY2guaWRdLCAncGxhdGZvcm1JZHMnOiBbc29tZV9wbGF0Zm9ybS5pZF19fSkK
IAogCi1jbGFzcyBSdW5zSlNPTkdlbmVyYXRvclRlc3QoRGF0YVN0b3JlVGVzdHNCYXNlKToKLSAg
ICBkZWYgX2NyZWF0ZV9yZXN1bHRzKHNlbGYsIGJyYW5jaCwgcGxhdGZvcm0sIGJ1aWxkZXIsIHRl
c3RfbmFtZSwgdmFsdWVzKToKK2NsYXNzIFJ1bnNUZXN0KERhdGFTdG9yZVRlc3RzQmFzZSk6Cisg
ICAgZGVmIF9jcmVhdGVfcmVzdWx0cyhzZWxmLCBicmFuY2gsIHBsYXRmb3JtLCBidWlsZGVyLCB0
ZXN0X25hbWUsIHZhbHVlcywgdGltZXN0YW1wcz1Ob25lKToKICAgICAgICAgcmVzdWx0cyA9IFtd
CiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKICAgICAgICAgICAg
IGJ1aWxkID0gQnVpbGQoYnJhbmNoPWJyYW5jaCwgcGxhdGZvcm09cGxhdGZvcm0sIGJ1aWxkZXI9
YnVpbGRlciwKLSAgICAgICAgICAgICAgICBidWlsZE51bWJlcj1pLCByZXZpc2lvbj0xMDAgKyBp
LCB0aW1lc3RhbXA9ZGF0ZXRpbWUubm93KCkpCisgICAgICAgICAgICAgICAgYnVpbGROdW1iZXI9
aSwgcmV2aXNpb249MTAwICsgaSwgdGltZXN0YW1wPXRpbWVzdGFtcHNbaV0gaWYgdGltZXN0YW1w
cyBlbHNlIGRhdGV0aW1lLm5vdygpKQogICAgICAgICAgICAgYnVpbGQucHV0KCkKICAgICAgICAg
ICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQobmFtZT10ZXN0X25hbWUsIGJ1aWxkPWJ1aWxkLCB2YWx1
ZT12YWx1ZSkKICAgICAgICAgICAgIHJlc3VsdC5wdXQoKQpAQCAtMjA0LDcgKzIwNSw3IEBAIGNs
YXNzIFJ1bnNKU09OR2VuZXJhdG9yVGVzdChEYXRhU3RvcmVUZXMKIAogICAgICAgICByZXN1bHRz
ID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHMoc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVf
YnVpbGRlciwgJ3NvbWUtdGVzdCcsIFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKICAg
ICAgICAgbGFzdF9pID0gMAotICAgICAgICBmb3IgaSwgKGJ1aWxkLCByZXN1bHQpIGluIGVudW1l
cmF0ZShSdW5zSlNPTkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVucyhzb21lX2JyYW5jaCwgc29tZV9w
bGF0Zm9ybSwgInNvbWUtdGVzdCIpKToKKyAgICAgICAgZm9yIGksIChidWlsZCwgcmVzdWx0KSBp
biBlbnVtZXJhdGUoUnVucy5fZ2VuZXJhdGVfcnVucyhzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9y
bSwgInNvbWUtdGVzdCIpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVpbGQuYnVp
bGROdW1iZXIsIGkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1aWxkLnJldmlzaW9u
LCAxMDAgKyBpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQubmFtZSwgJ3Nv
bWUtdGVzdCcpCkBAIC0yMTcsNyArMjE4LDcgQEAgY2xhc3MgUnVuc0pTT05HZW5lcmF0b3JUZXN0
KERhdGFTdG9yZVRlcwogICAgICAgICBzb21lX3BsYXRmb3JtID0gUGxhdGZvcm0uY3JlYXRlX2lm
X3Bvc3NpYmxlKCdzb21lLXBsYXRmb3JtJywgJ1NvbWUgUGxhdGZvcm0nKQogICAgICAgICBzZWxm
LmFzc2VydFRoZXJlSXNOb0luc3RhbmNlT2YoVGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUaGVy
ZUlzTm9JbnN0YW5jZU9mKFRlc3RSZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUnVu
c0pTT05HZW5lcmF0b3Ioc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sICdzb21lLXRlc3QnKS52
YWx1ZSgpLCB7CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUnVucyhzb21lX2JyYW5jaCwgc29t
ZV9wbGF0Zm9ybSwgJ3NvbWUtdGVzdCcpLnZhbHVlKCksIHsKICAgICAgICAgICAgICd0ZXN0X3J1
bnMnOiBbXSwKICAgICAgICAgICAgICdhdmVyYWdlcyc6IHt9LAogICAgICAgICAgICAgJ21pbic6
IE5vbmUsCkBAIC0yMzEsNyArMjMyLDcgQEAgY2xhc3MgUnVuc0pTT05HZW5lcmF0b3JUZXN0KERh
dGFTdG9yZVRlcwogICAgICAgICBzb21lX2J1aWxkZXIgPSBCdWlsZGVyLmdldChCdWlsZGVyLmNy
ZWF0ZSgnc29tZS1idWlsZGVyJywgJ1NvbWUgQnVpbGRlcicpKQogICAgICAgICByZXN1bHRzID0g
c2VsZi5fY3JlYXRlX3Jlc3VsdHMoc29tZV9icmFuY2gsIHNvbWVfcGxhdGZvcm0sIHNvbWVfYnVp
bGRlciwgJ3NvbWUtdGVzdCcsIFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4wLCA0OC4wXSkKIAotICAg
ICAgICB2YWx1ZSA9IFJ1bnNKU09OR2VuZXJhdG9yKHNvbWVfYnJhbmNoLCBzb21lX3BsYXRmb3Jt
LCAnc29tZS10ZXN0JykudmFsdWUoKQorICAgICAgICB2YWx1ZSA9IFJ1bnMoc29tZV9icmFuY2gs
IHNvbWVfcGxhdGZvcm0sICdzb21lLXRlc3QnKS52YWx1ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxVbm9yZGVyZWRMaXN0KHZhbHVlLmtleXMoKSwgWyd0ZXN0X3J1bnMnLCAnYXZlcmFnZXMn
LCAnbWluJywgJ21heCcsICdkYXRlX3JhbmdlJywgJ3N0YXQnXSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh2YWx1ZVsnc3RhdCddLCAnb2snKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZh
bHVlWydtaW4nXSwgNDguMCkKQEAgLTI3NCwyOCArMjc1LDI4IEBAIGNsYXNzIFJ1bnNKU09OR2Vu
ZXJhdG9yVGVzdChEYXRhU3RvcmVUZXMKICAgICAgICAgYnVpbGQgPSBjcmVhdGVfYnVpbGQoMSwg
MTAxKQogICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0KG5hbWU9dGVzdF9uYW1lLCB2YWx1ZT0x
MjMuMCwgYnVpbGQ9YnVpbGQpCiAgICAgICAgIHJlc3VsdC5wdXQoKQotICAgICAgICBzZWxmLl9h
c3NlcnRfZW50cnkoUnVuc0pTT05HZW5lcmF0b3IuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3Vs
dChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgMTIzLjApCisgICAgICAgIHNlbGYuX2Fz
c2VydF9lbnRyeShSdW5zLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3Vs
dCksIGJ1aWxkLCByZXN1bHQsIDEyMy4wKQogCiAgICAgICAgIGJ1aWxkID0gY3JlYXRlX2J1aWxk
KDIsIDEwMikKICAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdChuYW1lPXRlc3RfbmFtZSwgdmFs
dWU9NDU2LjAsIHZhbHVlTWVkaWFuPTc4OS4wLCBidWlsZD1idWlsZCkKICAgICAgICAgcmVzdWx0
LnB1dCgpCi0gICAgICAgIHNlbGYuX2Fzc2VydF9lbnRyeShSdW5zSlNPTkdlbmVyYXRvci5fZW50
cnlfZnJvbV9idWlsZF9hbmRfcmVzdWx0KGJ1aWxkLCByZXN1bHQpLCBidWlsZCwgcmVzdWx0LCA0
NTYuMCkKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRf
YW5kX3Jlc3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjApCiAKICAgICAg
ICAgcmVzdWx0LnZhbHVlU3RkZXYgPSA3LjAKICAgICAgICAgcmVzdWx0LnB1dCgpCi0gICAgICAg
IHNlbGYuX2Fzc2VydF9lbnRyeShSdW5zSlNPTkdlbmVyYXRvci5fZW50cnlfZnJvbV9idWlsZF9h
bmRfcmVzdWx0KGJ1aWxkLCByZXN1bHQpLCBidWlsZCwgcmVzdWx0LCA0NTYuMCkKKyAgICAgICAg
c2VsZi5fYXNzZXJ0X2VudHJ5KFJ1bnMuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWls
ZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjApCiAKICAgICAgICAgcmVzdWx0LnZhbHVl
U3RkZXYgPSBOb25lCiAgICAgICAgIHJlc3VsdC52YWx1ZU1pbiA9IDEyMy4wCiAgICAgICAgIHJl
c3VsdC52YWx1ZU1heCA9IDc4OS4wCiAgICAgICAgIHJlc3VsdC5wdXQoKQotICAgICAgICBzZWxm
Ll9hc3NlcnRfZW50cnkoUnVuc0pTT05HZW5lcmF0b3IuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jl
c3VsdChidWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjApCisgICAgICAgIHNlbGYu
X2Fzc2VydF9lbnRyeShSdW5zLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJl
c3VsdCksIGJ1aWxkLCByZXN1bHQsIDQ1Ni4wKQogCiAgICAgICAgIHJlc3VsdC52YWx1ZVN0ZGV2
ID0gOC4wCiAgICAgICAgIHJlc3VsdC52YWx1ZU1pbiA9IDEyMy4wCiAgICAgICAgIHJlc3VsdC52
YWx1ZU1heCA9IDc4OS4wCiAgICAgICAgIHJlc3VsdC5wdXQoKQotICAgICAgICBzZWxmLl9hc3Nl
cnRfZW50cnkoUnVuc0pTT05HZW5lcmF0b3IuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChi
dWlsZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjAsCisgICAgICAgIHNlbGYuX2Fzc2Vy
dF9lbnRyeShSdW5zLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCks
IGJ1aWxkLCByZXN1bHQsIDQ1Ni4wLAogICAgICAgICAgICAgc3RhdGlzdGljcz17J3N0ZGV2Jzog
OC4wLCAnbWluJzogMTIzLjAsICdtYXgnOiA3ODkuMH0pCiAKICAgICAgICAgcmVzdWx0LnZhbHVl
TWVkaWFuID0gMzQ1LjAgICMgTWVkaWFuIGlzIG5ldmVyIHVzZWQgYnkgdGhlIGZyb250ZW5kLgpA
QCAtMzAzLDkgKzMwNCwzNSBAQCBjbGFzcyBSdW5zSlNPTkdlbmVyYXRvclRlc3QoRGF0YVN0b3Jl
VGVzCiAgICAgICAgIHJlc3VsdC52YWx1ZU1pbiA9IDEyMy4wCiAgICAgICAgIHJlc3VsdC52YWx1
ZU1heCA9IDc4OS4wCiAgICAgICAgIHJlc3VsdC5wdXQoKQotICAgICAgICBzZWxmLl9hc3NlcnRf
ZW50cnkoUnVuc0pTT05HZW5lcmF0b3IuX2VudHJ5X2Zyb21fYnVpbGRfYW5kX3Jlc3VsdChidWls
ZCwgcmVzdWx0KSwgYnVpbGQsIHJlc3VsdCwgNDU2LjAsCisgICAgICAgIHNlbGYuX2Fzc2VydF9l
bnRyeShSdW5zLl9lbnRyeV9mcm9tX2J1aWxkX2FuZF9yZXN1bHQoYnVpbGQsIHJlc3VsdCksIGJ1
aWxkLCByZXN1bHQsIDQ1Ni4wLAogICAgICAgICAgICAgc3RhdGlzdGljcz17J3N0ZGV2JzogOC4w
LCAnbWluJzogMTIzLjAsICdtYXgnOiA3ODkuMH0pCiAKKyAgICBkZWYgdGVzdF9jaGFydF9wYXJh
bXNfd2l0aF92YWx1ZShzZWxmKToKKyAgICAgICAgc29tZV9icmFuY2ggPSBCcmFuY2guY3JlYXRl
X2lmX3Bvc3NpYmxlKCdzb21lLWJyYW5jaCcsICdTb21lIEJyYW5jaCcpCisgICAgICAgIHNvbWVf
cGxhdGZvcm0gPSBQbGF0Zm9ybS5jcmVhdGVfaWZfcG9zc2libGUoJ3NvbWUtcGxhdGZvcm0nLCAn
U29tZSBQbGF0Zm9ybScpCisgICAgICAgIHNvbWVfYnVpbGRlciA9IEJ1aWxkZXIuZ2V0KEJ1aWxk
ZXIuY3JlYXRlKCdzb21lLWJ1aWxkZXInLCAnU29tZSBCdWlsZGVyJykpCisKKyAgICAgICAgc3Rh
cnRfdGltZSA9IGRhdGV0aW1lKDIwMTEsIDIsIDIxLCAxMiwgMCwgMCkKKyAgICAgICAgZW5kX3Rp
bWUgPSBkYXRldGltZSgyMDExLCAyLCAyOCwgMTIsIDAsIDApCisgICAgICAgIHJlc3VsdHMgPSBz
ZWxmLl9jcmVhdGVfcmVzdWx0cyhzb21lX2JyYW5jaCwgc29tZV9wbGF0Zm9ybSwgc29tZV9idWls
ZGVyLCAnc29tZS10ZXN0JywKKyAgICAgICAgICAgIFs1MC4wLCA1MS4wLCA1Mi4wLCA0OS4wLCA0
OC4wLCA1MS45LCA1MC43LCA1MS4xXSwKKyAgICAgICAgICAgIFtzdGFydF90aW1lICsgdGltZWRl
bHRhKGRheSkgZm9yIGRheSBpbiByYW5nZSgwLCA4KV0pCisKKyAgICAgICAgIyBVc2UgaW50IGRl
c3BpdGUgb2YgaXRzIGltcHJlY2lzZW5lc3Mgc2luY2UgdGVzdHMgbWF5IGZhaWwgZHVlIHRvIHJv
dW5kaW5nIGVycm9ycyBvdGhlcndpc2UuCisgICAgICAgIGRlZiBzcGxpdF9hc19pbnQoc3RyaW5n
KToKKyAgICAgICAgICAgIHJldHVybiBbaW50KGZsb2F0KHZhbHVlKSkgZm9yIHZhbHVlIGluIHN0
cmluZy5zcGxpdCgnLCcpXQorCisgICAgICAgIHBhcmFtcyA9IFJ1bnMoc29tZV9icmFuY2gsIHNv
bWVfcGxhdGZvcm0sICdzb21lLXRlc3QnKS5jaGFydF9wYXJhbXMoNywgZW5kX3RpbWUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zWydjaHhsJ10sICcwOnxGZWIgMjF8RmViIDIyfEZl
YiAyM3xGZWIgMjR8RmViIDI1fEZlYiAyNnxGZWIgMjd8RmViIDI4JykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzcGxpdF9hc19pbnQocGFyYW1zWydjaHhyJ10pLCBbMSwgMCwgNTcsIGludCg1
MiAqIDEuMSAvIDUgKyAwLjUpXSkKKyAgICAgICAgeF9taW4sIHhfbWF4LCB5X21pbiwgeV9tYXgg
PSBzcGxpdF9hc19pbnQocGFyYW1zWydjaGRzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh4X21pbiksIHN0YXJ0X3RpbWUpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh4X21heCksIGVuZF90aW1lKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHlfbWluLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHlfbWF4LCBpbnQoNTIgKiAxLjEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0X2Fz
X2ludChwYXJhbXNbJ2NoZyddKSwgW2ludCgxMDAgLyA3KSwgaW50KDUyICogMS4xIC8gNSksIDAs
IDBdKQorCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWlu
KCkKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC1wZXJmLmFwcHNwb3QuY29tL21haW4ucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQkocmV2aXNp
b24gMTA5MDU3KQorKysgV2Vic2l0ZXMvd2Via2l0LXBlcmYuYXBwc3BvdC5jb20vbWFpbi5weQko
d29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTAgQEAgZnJvbSBhZG1pbl9oYW5kbGVycyBpbXBv
cnQgTWVyZ2VUZXN0c0hhbgogZnJvbSBjb250cm9sbGVyIGltcG9ydCBDYWNoZWREYXNoYm9hcmRI
YW5kbGVyCiBmcm9tIGNvbnRyb2xsZXIgaW1wb3J0IENhY2hlZE1hbmlmZXN0SGFuZGxlcgogZnJv
bSBjb250cm9sbGVyIGltcG9ydCBDYWNoZWRSdW5zSGFuZGxlcgorZnJvbSBjb250cm9sbGVyIGlt
cG9ydCBEYXNoYm9hcmRJbWFnZUhhbmRsZXIKIGZyb20gY29udHJvbGxlciBpbXBvcnQgRGFzaGJv
YXJkVXBkYXRlSGFuZGxlcgogZnJvbSBjb250cm9sbGVyIGltcG9ydCBNYW5pZmVzdFVwZGF0ZUhh
bmRsZXIKK2Zyb20gY29udHJvbGxlciBpbXBvcnQgUnVuc0NoYXJ0SGFuZGxlcgogZnJvbSBjb250
cm9sbGVyIGltcG9ydCBSdW5zVXBkYXRlSGFuZGxlcgogZnJvbSBjcmVhdGVfaGFuZGxlciBpbXBv
cnQgQ3JlYXRlSGFuZGxlcgogZnJvbSByZXBvcnRfaGFuZGxlciBpbXBvcnQgUmVwb3J0SGFuZGxl
cgpAQCAtNDEsNiArNDMsNyBAQCByb3V0ZXMgPSBbCiAgICAgKCcvYWRtaW4vcmVwb3J0LWxvZ3Mv
PycsIFJlcG9ydExvZ3NIYW5kbGVyKSwKICAgICAoJy9hZG1pbi9jcmVhdGUvKC4qKScsIENyZWF0
ZUhhbmRsZXIpLAogICAgIChyJy9hZG1pbi8oW0EtWmEtelwtXSopJywgQWRtaW5EYXNoYm9hcmRI
YW5kbGVyKSwKKwogICAgICgnL2FwaS91c2VyL2lzLWFkbWluJywgSXNBZG1pbkhhbmRsZXIpLAog
ICAgICgnL2FwaS90ZXN0Lz8nLCBDYWNoZWRNYW5pZmVzdEhhbmRsZXIpLAogICAgICgnL2FwaS90
ZXN0L3VwZGF0ZScsIE1hbmlmZXN0VXBkYXRlSGFuZGxlciksCkBAIC00OCw5ICs1MSwxMSBAQCBy
b3V0ZXMgPSBbCiAgICAgKCcvYXBpL3Rlc3QvcmVwb3J0L3Byb2Nlc3MnLCBSZXBvcnRQcm9jZXNz
SGFuZGxlciksCiAgICAgKCcvYXBpL3Rlc3QvcnVucy8/JywgQ2FjaGVkUnVuc0hhbmRsZXIpLAog
ICAgICgnL2FwaS90ZXN0L3J1bnMvdXBkYXRlJywgUnVuc1VwZGF0ZUhhbmRsZXIpLAorICAgICgn
L2FwaS90ZXN0L3J1bnMvY2hhcnQnLCBSdW5zQ2hhcnRIYW5kbGVyKSwKICAgICAoJy9hcGkvdGVz
dC9kYXNoYm9hcmQvPycsIENhY2hlZERhc2hib2FyZEhhbmRsZXIpLAogICAgICgnL2FwaS90ZXN0
L2Rhc2hib2FyZC91cGRhdGUnLCBEYXNoYm9hcmRVcGRhdGVIYW5kbGVyKSwKLV0KKworICAgICgn
L2ltYWdlcy9kYXNoYm9hcmQvZmxvdC0oXGQrKS0oXGQrKS0oXGQrKV8oXGQrKS5wbmcnLCBEYXNo
Ym9hcmRJbWFnZUhhbmRsZXIpXQogCiAKIGRlZiBtYWluKCk6CkluZGV4OiBXZWJzaXRlcy93ZWJr
aXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Vi
a2l0LXBlcmYuYXBwc3BvdC5jb20vbW9kZWxzLnB5CShyZXZpc2lvbiAxMDkwNTcpCisrKyBXZWJz
aXRlcy93ZWJraXQtcGVyZi5hcHBzcG90LmNvbS9tb2RlbHMucHkJKHdvcmtpbmcgY29weSkKQEAg
LTMyMiwzICszMjIsMTEgQEAgY2xhc3MgUGVyc2lzdGVudENhY2hlKGRiLk1vZGVsKToKICAgICAg
ICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIG1lbWNhY2hlLnNldChuYW1lLCBjYWNoZS52YWx1
ZSkKICAgICAgICAgcmV0dXJuIGNhY2hlLnZhbHVlCisKKworY2xhc3MgRGFzaGJvYXJkSW1hZ2Uo
ZGIuTW9kZWwpOgorICAgIGltYWdlID0gZGIuQmxvYlByb3BlcnR5KHJlcXVpcmVkPVRydWUpCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleV9uYW1lKGJyYW5jaF9pZCwgcGxhdGZvcm1f
aWQsIHRlc3RfaWQsIGRpc3BsYXlfZGF5cyk6CisgICAgICAgIHJldHVybiAnJWQ6JWQ6JWQ6JWQn
ICUgKGJyYW5jaF9pZCwgcGxhdGZvcm1faWQsIHRlc3RfaWQsIGRpc3BsYXlfZGF5cykK
</data>

          </attachment>
      

    </bug>

</bugzilla>