<?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>154028</bug_id>
          
          <creation_ts>2016-02-09 08:05:25 -0800</creation_ts>
          <short_desc>Add a ramp controller</short_desc>
          <delta_ts>2016-02-10 12:27:13 -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>WebCore Misc.</component>
          <version>WebKit 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="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1163183</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-02-09 08:05:25 -0800</bug_when>
    <thetext>Add a ramp controller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163184</commentid>
    <comment_count>1</comment_count>
      <attachid>270925</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-02-09 08:11:09 -0800</bug_when>
    <thetext>Created attachment 270925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163316</commentid>
    <comment_count>2</comment_count>
      <attachid>270925</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-09 15:58:07 -0800</bug_when>
    <thetext>Comment on attachment 270925
Patch

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

&gt; PerformanceTests/Animometer/resources/debug-runner/graph.js:63
&gt; +        }, this);

Do we really need a for loop here? I think flattening it is more efficient and require less lines of code.

&gt; PerformanceTests/Animometer/resources/debug-runner/graph.js:79
&gt; +                if (!regression.startIndex)

Why regression with startIndex = 0 are excluded from calculating the range? I might be overlooked the code or confused.

&gt; PerformanceTests/Animometer/resources/debug-runner/graph.js:243
&gt; +            });

Can&apos;t we use  Math.max.apply()? Something like:

var complexityMax = Math.max.apply(Math, graphData.timeRegressions.map(function(regression) {
  return regression.complexity || 0;
}));

&gt; PerformanceTests/Animometer/tests/resources/main.js:303
&gt; +        // x is complexity, y is fps. In this formulation s1 = 60fps and t1 = 0

This is confusing comment. My understanding is the following:
1. We have two curves x-t curve (for the complexity) and y-t curve (for the fameLength or fps).
2. We want to get the linear regression for the x-y curve (complexity is x and fps is y)

-- Can&apos;t we replace s1 and s2 by y1 and y2? So we should remember only three variables: t, x and y.  
-- Can&apos;t we replace (y - m)^2 by something like (y - y_m)^2? Or something similar but just make it relates to y.
-- I do not understand the calculation m = s2 + t2*x? m is supposed to be fps so how can time * complexity yields fps?

&gt; PerformanceTests/Animometer/tests/resources/main.js:312
&gt; +        for (var i = startIndex; iterationDirection * (endIndex - i) &gt; -1; i += iterationDirection) {

I do not understand why the order of traversing the sampled data matters here. We are getting sum(x), sum(y), sum(x^2), sum(y^2) and sum(xy). right? Would not 
for (var i = Math.min(startIndex, endIndex); i &lt; Math.max(startIndex, endIndex); ++i) { ... }

give the same result?

&gt; PerformanceTests/Animometer/tests/resources/main.js:317
&gt; +            var yy = y * y;

Do we need to create these variables?

&gt; PerformanceTests/Animometer/tests/resources/main.js:318
&gt; +            a2 += 1;

Should not a2 = Math.abs(endIndex - startIndex);

&gt; PerformanceTests/Animometer/tests/resources/main.js:358
&gt; +            k2 -= yy;

Can&apos;t we create two arrays for these sums in the previous loop? For example
arr1[i].x:  the sum of complexities from startIndex till i.
arr2[i].y: the sum of sum of frameLengths from i+1 till endIndex.

&gt; PerformanceTests/Animometer/tests/resources/main.js:365
&gt; +            var F = a2*c2 - b2*b2;

Can&apos;t we create another array {A, B, C, D, E, F} in the previous loop?

&gt; PerformanceTests/Animometer/tests/resources/main.js:374
&gt; +            var error2 = (k2 + a2*s2*s2 + c2*t2*t2 - 2*d2*s2 - 2*h2*t2 + 2*b2*s2*t2) || 0;

Can&apos;t we create another array for {s1,s2, t1, t2, error1, error2} in the previous loop?  I think this loop is a little bit long and shortening it can make understanding the math easier.

&gt; PerformanceTests/Animometer/tests/resources/main.js:386
&gt; +            // Projected point is not between this and the next sample

Maybe it is worth mentioning what exactly this block of math is calculating or adding a link explaining its math.

&gt; PerformanceTests/Animometer/tests/resources/main.js:418
&gt; +                set_x_best(x_prime, x);

Can&apos;t we move this code in a shared function instead of repeating it twice? Or can&apos;t we delete if (i == startIndex) {...} and change the following if-statments to be

if (i != startIndex &amp;&amp; (x_prime &gt; getComplexity(samples, i + iterationDirection) || x_prime &lt; x)) { ... }

if (i == startIndex || error1 + error2 &lt; error_best) { ... }

&gt; PerformanceTests/Animometer/tests/resources/main.js:500
&gt; +                    var nextTierComplexity = Math.round(Math.pow(10, this._tier));

Do we really need to increase the complexity exponentially? And even if we need to, cannot we use lower power? I guess aggressive increasing for the complexity might give inaccurate results about for the system behavior with large number of particles.

&gt; PerformanceTests/Animometer/tests/resources/main.js:528
&gt; +        else if (!this._rampDidWarmup) {

No need for the else.

&gt; PerformanceTests/Animometer/tests/resources/main.js:543
&gt; +        var desiredComplexity = stage.complexity();

This assignment is not needed since its value will be changed in both the if-block and the else-block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163429</commentid>
    <comment_count>3</comment_count>
      <attachid>270925</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-02-10 01:30:55 -0800</bug_when>
    <thetext>Comment on attachment 270925
Patch

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

&gt;&gt; PerformanceTests/Animometer/resources/debug-runner/graph.js:63
&gt;&gt; +        }, this);
&gt; 
&gt; Do we really need a for loop here? I think flattening it is more efficient and require less lines of code.

ok

&gt;&gt; PerformanceTests/Animometer/resources/debug-runner/graph.js:79
&gt;&gt; +                if (!regression.startIndex)
&gt; 
&gt; Why regression with startIndex = 0 are excluded from calculating the range? I might be overlooked the code or confused.

This is leftover from old code. I had regression segments split out before, and some of them did not have startIndex in them. I&apos;ll remove.

&gt;&gt; PerformanceTests/Animometer/resources/debug-runner/graph.js:243
&gt;&gt; +            });
&gt; 
&gt; Can&apos;t we use  Math.max.apply()? Something like:
&gt; 
&gt; var complexityMax = Math.max.apply(Math, graphData.timeRegressions.map(function(regression) {
&gt;   return regression.complexity || 0;
&gt; }));

done

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:303
&gt;&gt; +        // x is complexity, y is fps. In this formulation s1 = 60fps and t1 = 0
&gt; 
&gt; This is confusing comment. My understanding is the following:
&gt; 1. We have two curves x-t curve (for the complexity) and y-t curve (for the fameLength or fps).
&gt; 2. We want to get the linear regression for the x-y curve (complexity is x and fps is y)
&gt; 
&gt; -- Can&apos;t we replace s1 and s2 by y1 and y2? So we should remember only three variables: t, x and y.  
&gt; -- Can&apos;t we replace (y - m)^2 by something like (y - y_m)^2? Or something similar but just make it relates to y.
&gt; -- I do not understand the calculation m = s2 + t2*x? m is supposed to be fps so how can time * complexity yields fps?

This regression is used for complexity-fps analysis, but it&apos;s a generic regression calculator, so the axes can represent anything.

For the time graph, y is fps and x is complexity; it just so happens that x and t linearly line up. So, s2 is the fps bias, and t2 is the fps/complexity.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:312
&gt;&gt; +        for (var i = startIndex; iterationDirection * (endIndex - i) &gt; -1; i += iterationDirection) {
&gt; 
&gt; I do not understand why the order of traversing the sampled data matters here. We are getting sum(x), sum(y), sum(x^2), sum(y^2) and sum(xy). right? Would not 
&gt; for (var i = Math.min(startIndex, endIndex); i &lt; Math.max(startIndex, endIndex); ++i) { ... }
&gt; 
&gt; give the same result?

It doesn&apos;t, but I use this calculation twice--once for a slope based regression and another for a step-wise. In both cases the first segment is fixed at 60 fps with no slope. For the ramp regression, it goes from more complicated to 0, so we have to iterate through the data backwards in time to fit the regression model.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:317
&gt;&gt; +            var yy = y * y;
&gt; 
&gt; Do we need to create these variables?

you&apos;re right. I can move them down.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:318
&gt;&gt; +            a2 += 1;
&gt; 
&gt; Should not a2 = Math.abs(endIndex - startIndex);

it could be. It&apos;s just nice to have the parallel structure.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:358
&gt;&gt; +            k2 -= yy;
&gt; 
&gt; Can&apos;t we create two arrays for these sums in the previous loop? For example
&gt; arr1[i].x:  the sum of complexities from startIndex till i.
&gt; arr2[i].y: the sum of sum of frameLengths from i+1 till endIndex.

We could but I don&apos;t know what the benefit is with allocating large arrays to do this calculation.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:418
&gt;&gt; +                set_x_best(x_prime, x);
&gt; 
&gt; Can&apos;t we move this code in a shared function instead of repeating it twice? Or can&apos;t we delete if (i == startIndex) {...} and change the following if-statments to be
&gt; 
&gt; if (i != startIndex &amp;&amp; (x_prime &gt; getComplexity(samples, i + iterationDirection) || x_prime &lt; x)) { ... }
&gt; 
&gt; if (i == startIndex || error1 + error2 &lt; error_best) { ... }

I think the control flow ends being less understandable with this way. It&apos;s easier to see earlier iteration control flow concentrated at the top, and go further down the loop as we iterate through.

I can update this to setBest(s1, t1, s2, t2, x_prime, x);

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:500
&gt;&gt; +                    var nextTierComplexity = Math.round(Math.pow(10, this._tier));
&gt; 
&gt; Do we really need to increase the complexity exponentially? And even if we need to, cannot we use lower power? I guess aggressive increasing for the complexity might give inaccurate results about for the system behavior with large number of particles.

We&apos;re just looking for ballpark. Yes, I think we should do it exponentially; no test goes past 10000 items, and this minimizes the time needed to setup before the benchmark starts.

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:528
&gt;&gt; +        else if (!this._rampDidWarmup) {
&gt; 
&gt; No need for the else.

done

&gt;&gt; PerformanceTests/Animometer/tests/resources/main.js:543
&gt;&gt; +        var desiredComplexity = stage.complexity();
&gt; 
&gt; This assignment is not needed since its value will be changed in both the if-block and the else-block.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163466</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-10 08:57:42 -0800</bug_when>
    <thetext>Unofficial r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163561</commentid>
    <comment_count>5</comment_count>
      <attachid>270925</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-02-10 12:27:04 -0800</bug_when>
    <thetext>Comment on attachment 270925
Patch

committed 196372</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270925</attachid>
            <date>2016-02-09 08:11:09 -0800</date>
            <delta_ts>2016-02-10 12:27:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154028-20160209081045.patch</filename>
            <type>text/plain</type>
            <size>50534</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MzA0CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvZGV2ZWxvcGVyLmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
ZGV2ZWxvcGVyLmh0bWwKaW5kZXggYzJjZWNlMmQ4NWJiZWZlZmRmNWYwY2M2NWY1NjliNjE2YzRj
MjA4Yi4uZTJhZDVmMzYzMDZiY2RmNWNkZjY0ZDI3ZDcwYTAzMGEyMDI5ZWExYSAxMDA2NDQKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL2RldmVsb3Blci5odG1sCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvQW5pbW9tZXRlci9kZXZlbG9wZXIuaHRtbApAQCAtNDYsNiArNDYsNyBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxsaT48bGFiZWw+PGlucHV0IG5hbWU9ImFkanVzdG1lbnQiIHR5cGU9InJhZGlvIiB2YWx1ZT0i
c3RlcCI+IEtlZXAgYXQgYSBmaXhlZCBjb21wbGV4aXR5LCB0aGVuIG1ha2UgYSBiaWcgc3RlcDwv
bGFiZWw+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1
dCBuYW1lPSJhZGp1c3RtZW50IiB0eXBlPSJyYWRpbyIgdmFsdWU9ImFkYXB0aXZlIiBjaGVja2Vk
PiBNYWludGFpbiB0YXJnZXQgRlBTPC9sYWJlbD48L2xpPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxsaT48bGFiZWw+PGlucHV0IG5hbWU9ImFkanVzdG1lbnQiIHR5cGU9InJhZGlvIiB2
YWx1ZT0icmFtcCI+IFJhbXA8L2xhYmVsPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICA8
L3VsPgogICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICA8bGk+
CkBAIC0xMDMsNiArMTA0LDEyIEBACiAgICAgICAgICAgICAgICAgPGgxPkdyYXBoOjwvaDE+CiAg
ICAgICAgICAgICA8L2hlYWRlcj4KICAgICAgICAgICAgIDxuYXY+CisgICAgICAgICAgICAgICAg
PGZvcm0gbmFtZT0iZ3JhcGgtdHlwZSI+CisgICAgICAgICAgICAgICAgICAgIDx1bD4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJn
cmFwaC10eXBlIiB2YWx1ZT0idGltZSIgY2hlY2tlZD4gVGltZSBncmFwaDwvbGFiZWw+PC9saT4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBu
YW1lPSJncmFwaC10eXBlIiB2YWx1ZT0iY29tcGxleGl0eSI+IENvbXBsZXhpdHkgZ3JhcGg8L2xh
YmVsPjwvbGk+CisgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICAgICAgPC9m
b3JtPgogICAgICAgICAgICAgICAgIDxmb3JtIG5hbWU9InRpbWUtZ3JhcGgtb3B0aW9ucyI+CiAg
ICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFi
ZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJtYXJrZXJzIiBjaGVja2VkPiBNYXJrZXJz
PC9sYWJlbD4KQEAgLTExNCw2ICsxMjEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8c3BhbiBjbGFzcz0icmF3RlBTIj48L3NwYW4+PC9saT4KICAgICAgICAgICAgICAgICAgICAg
ICAgIDxsaT48bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJmaWx0ZXJlZEZQUyIg
Y2hlY2tlZD4gRmlsdGVyZWQgRlBTPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8c3BhbiBjbGFzcz0iZmlsdGVyZWRGUFMiPjwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPGxpPjxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlZ3Jlc3Np
b25zIiBjaGVja2VkPiBSZWdyZXNzaW9uczwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgIDwv
dWw+CisgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICAgIDxmb3JtIG5hbWU9
ImNvbXBsZXhpdHktZ3JhcGgtb3B0aW9ucyI+CisgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFz
cz0ic2VyaWVzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+PGlucHV0IHR5
cGU9ImNoZWNrYm94IiBuYW1lPSJzZXJpZXMtcmF3IiBjaGVja2VkPiBTZXJpZXMgcmF3PC9sYWJl
bD48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxsYWJlbD48aW5wdXQgdHlwZT0i
Y2hlY2tib3giIG5hbWU9InNlcmllcy1hdmVyYWdlIiBjaGVja2VkPiBTZXJpZXMgYXZlcmFnZTwv
bGFiZWw+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAg
ICAgPHVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxsYWJlbD48aW5wdXQgdHlwZT0i
Y2hlY2tib3giIG5hbWU9InJlZ3Jlc3Npb24tdGltZS1zY29yZSIgY2hlY2tlZD4gUmFtcCByZWdy
ZXNzaW9uIHNjb3JlPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48bGFiZWw+
PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJjb21wbGV4aXR5LXJlZ3Jlc3Npb24tYWdncmVn
YXRlLXJhdyIgY2hlY2tlZD4gUmVncmVzc2lvbiwgc2VyaWVzIHJhdzwvbGFiZWw+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8bGk+PGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0i
Y29tcGxleGl0eS1yZWdyZXNzaW9uLWFnZ3JlZ2F0ZS1hdmVyYWdlIiBjaGVja2VkPiBSZWdyZXNz
aW9uLCBzZXJpZXMgYXZlcmFnZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAg
ICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgPC9uYXY+CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmltb21l
dGVyLmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVu
bmVyL2FuaW1vbWV0ZXIuY3NzCmluZGV4IDZiODFhZDgwNTgzMGI2ZjdlYjVmZjQ3OWYwYTI4NTk4
ODI1ODU4ODkuLmQ4NDdlYzhjYjZlMDhmMWVmODcwNmUxYzAwYzYwZWM2YzMwMzlmYmIgMTAwNjQ0
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVy
L2FuaW1vbWV0ZXIuY3NzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJj
ZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuY3NzCkBAIC0zNTYsMjAgKzM1NiwxNiBAQCBsYWJl
bC50cmVlLWxhYmVsIHsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiAxLjVlbTsK
ICAgICByaWdodDogMDsKLSAgICBmb250LXNpemU6IC44ZW07Ci0gICAgd2lkdGg6IDI1JTsKKyAg
ICBmb250LXNpemU6IC43ZW07CisgICAgd2lkdGg6IDIzZW07CiB9CiAKICN0ZXN0LWdyYXBoIG5h
diB1bCB7Ci0gICAgbWFyZ2luOiAwIDMwcHggMCAwOworICAgIG1hcmdpbjogMCAzMHB4IDFlbSAw
OwogICAgIHBhZGRpbmc6IDA7CiAgICAgbGlzdC1zdHlsZTogbm9uZTsKIH0KIAotI3Rlc3QtZ3Jh
cGggbmF2IHVsIHVsIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDJlbTsKLX0KLQogI3Rlc3QtZ3JhcGgg
bmF2IGxpIHsKICAgICBwYWRkaW5nOiAuMWVtIDA7CiB9CkBAIC00MDMsNiArMzk5LDM2IEBAIGxh
YmVsLnRyZWUtbGFiZWwgewogICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKIH0KIAor
LmF4aXMgdGV4dCB7CisgICAgZmlsbDogIzk5OTsKK30KKworLnlMZWZ0LmF4aXMgdGV4dCB7Cisg
ICAgZmlsbDogIzdhZGQ0OTsKK30KKy55TGVmdC5heGlzIHBhdGgsCisueUxlZnQuYXhpcyBsaW5l
IHsKKyAgICBzdHJva2U6ICM3YWRkNDk7Cit9CisueVJpZ2h0LmF4aXMgdGV4dCB7CisgICAgZmls
bDogI2ZhNDkyNTsKK30KKy55UmlnaHQuYXhpcyBwYXRoLAorLnlSaWdodC5heGlzIGxpbmUgewor
ICAgIHN0cm9rZTogI2ZhNDkyNTsKK30KKworLmF4aXMuY29tcGxleGl0eSAudGljayBsaW5lIHsK
KyAgICBzdHJva2U6IHJnYmEoMjAwLCAyMDAsIDIwMCwgLjYpOworICAgIHN0cm9rZS13aWR0aDog
MnB4OworfQorCisuYXhpcy5jb21wbGV4aXR5IC5kb21haW4sCisuYXhpcy5jb21wbGV4aXR5IHRl
eHQgeworICAgIHN0cm9rZTogdHJhbnNwYXJlbnQ7CisgICAgZmlsbDogdHJhbnNwYXJlbnQ7Cit9
CisKIC5tYXJrZXIgbGluZSB7CiAgICAgc3Ryb2tlOiAjNTQ5M0Q2OwogfQpAQCAtNDE3LDcgKzQ0
Myw3IEBAIGxhYmVsLnRyZWUtbGFiZWwgewogfQogCiAubWVhbi5jb21wbGV4aXR5IHBvbHlnb24g
ewotICAgIGZpbGw6IGhzbGEoMTAwLCA2OSUsIDU4JSwgLjEpOworICAgIGZpbGw6IGhzbGEoMTAw
LCA2OSUsIDU4JSwgLjA1KTsKIH0KIAogLnRhcmdldC1mcHMgewpAQCAtNDM1LDYgKzQ2MSwxNSBA
QCBsYWJlbC50cmVlLWxhYmVsIHsKICAgICBmaWxsOiBoc2xhKDEwLCA5NiUsIDU2JSwgLjEpOwog
fQogCisjcmVncmVzc2lvbnMgbGluZSB7CisgICAgc3Ryb2tlOiByZ2JhKDIwMCwgMjAwLCAyMDAs
IC44KTsKKyAgICBzdHJva2Utd2lkdGg6IDJweDsKK30KKworI3JlZ3Jlc3Npb25zIGNpcmNsZSB7
CisgICAgZmlsbDogcmdiYSgyMDAsIDIwMCwgMjAwLCAuOCk7Cit9CisKIC5jdXJzb3IgbGluZSB7
CiAgICAgc3Ryb2tlOiByZ2IoMjUwLCAyNTAsIDI1MCk7CiAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7
CkBAIC00NzEsMyArNTA2LDI1IEBAIGxhYmVsLnRyZWUtbGFiZWwgewogI3Jhd0ZQUyBjaXJjbGUg
ewogICAgIGZpbGw6IHJnYigyNTAsIDczLCAzNyk7CiB9CisKKyNjb21wbGV4aXR5LWdyYXBoIC5y
ZWdyZXNzaW9uIGxpbmUgeworICAgIHN0cm9rZTogcmdiYSgyNTMsIDI1MywgMjUzLCAuOCk7Cisg
ICAgc3Ryb2tlLXdpZHRoOiAycHg7Cit9CisKKyNjb21wbGV4aXR5LWdyYXBoIC5yZWdyZXNzaW9u
IGNpcmNsZSB7CisgICAgZmlsbDogcmdiYSgyNTMsIDI1MywgMjUzLCAuOCk7Cit9CisKKyNjb21w
bGV4aXR5LWdyYXBoIC5yZWdyZXNzaW9uIHBvbHlnb24geworICAgIGZpbGw6IHJnYmEoMjUzLCAy
NTMsIDI1MywgLjA1KTsKK30KKworI2NvbXBsZXhpdHktZ3JhcGggLnNlcmllcy5hdmVyYWdlIGNp
cmNsZSB7CisgICAgZmlsbDogaHNsKDE3MCwgOTYlLCA1NiUpOworfQorCisjY29tcGxleGl0eS1n
cmFwaCAuc2VyaWVzLmF2ZXJhZ2UgbGluZSB7CisgICAgc3Ryb2tlOiBoc2xhKDE3MCwgOTYlLCA1
NiUsIC4yKTsKKyAgICBzdHJva2Utd2lkdGg6IDJweDsKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0ZXIuanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9hbmlt
b21ldGVyLmpzCmluZGV4IGUyYzYyYWYwYjQ1YmY5MmIxYjFiMmQ2MWVjOWM1OGZiZTI5ZmQ5ODgu
LmU3NjM1ZTJiY2Q5Yjk3NGRlYzc0ZjZkN2U3MDQ0NzdjYzNkNmFiNjEgMTAwNjQ0Ci0tLSBhL1Bl
cmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVidWctcnVubmVyL2FuaW1vbWV0
ZXIuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9kZWJ1Zy1y
dW5uZXIvYW5pbW9tZXRlci5qcwpAQCAtMzUsNyArMzUsNyBAQCBEZXZlbG9wZXJSZXN1bHRzVGFi
bGUgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoUmVzdWx0c1RhYmxlLAogCiAgICAgICAgIGJ1
dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAg
dmFyIGdyYXBoRGF0YSA9IHsKLSAgICAgICAgICAgICAgICBheGVzOiBbU3RyaW5ncy50ZXh0LmV4
cGVyaW1lbnRzLmNvbXBsZXhpdHksIFN0cmluZ3MudGV4dC5leHBlcmltZW50cy5mcmFtZVJhdGVd
LAorICAgICAgICAgICAgICAgIGF4ZXM6IFtTdHJpbmdzLnRleHQuY29tcGxleGl0eSwgU3RyaW5n
cy50ZXh0LmZyYW1lUmF0ZV0sCiAgICAgICAgICAgICAgICAgc2FtcGxlczogZGF0YSwKICAgICAg
ICAgICAgICAgICBjb21wbGV4aXR5QXZlcmFnZVNhbXBsZXM6IHRlc3RSZXN1bHRzW1N0cmluZ3Mu
anNvbi5jb21wbGV4aXR5QXZlcmFnZVNhbXBsZXNdLAogICAgICAgICAgICAgICAgIGF2ZXJhZ2Vz
OiB7fSwKQEAgLTQ4LDYgKzQ4LDkgQEAgRGV2ZWxvcGVyUmVzdWx0c1RhYmxlID0gVXRpbGl0aWVz
LmNyZWF0ZVN1YmNsYXNzKFJlc3VsdHNUYWJsZSwKIAogICAgICAgICAgICAgWwogICAgICAgICAg
ICAgICAgIFN0cmluZ3MuanNvbi5zY29yZSwKKyAgICAgICAgICAgICAgICBTdHJpbmdzLmpzb24u
cmVncmVzc2lvbnMudGltZVJlZ3Jlc3Npb25zLAorICAgICAgICAgICAgICAgIFN0cmluZ3MuanNv
bi5yZWdyZXNzaW9ucy5jb21wbGV4aXR5UmVncmVzc2lvbiwKKyAgICAgICAgICAgICAgICBTdHJp
bmdzLmpzb24ucmVncmVzc2lvbnMuY29tcGxleGl0eUF2ZXJhZ2VSZWdyZXNzaW9uLAogICAgICAg
ICAgICAgICAgIFN0cmluZ3MuanNvbi50YXJnZXRGcmFtZUxlbmd0aAogICAgICAgICAgICAgXS5m
b3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0c1tr
ZXldKQpAQCAtNTcsNyArNjAsNyBAQCBEZXZlbG9wZXJSZXN1bHRzVGFibGUgPSBVdGlsaXRpZXMu
Y3JlYXRlU3ViY2xhc3MoUmVzdWx0c1RhYmxlLAogICAgICAgICAgICAgYmVuY2htYXJrQ29udHJv
bGxlci5zaG93VGVzdEdyYXBoKHRlc3ROYW1lLCBncmFwaERhdGEpOwogICAgICAgICB9KTsKIAot
ICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBTdHJpbmdzLnRleHQucmVzdWx0cy5ncmFwaCAr
ICIuLi4iOworICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBTdHJpbmdzLnRleHQuZ3JhcGgg
KyAiLi4uIjsKICAgICB9LAogCiAgICAgX2lzTm9pc3lNZWFzdXJlbWVudDogZnVuY3Rpb24oanNv
bkV4cGVyaW1lbnQsIGRhdGEsIG1lYXN1cmVtZW50LCBvcHRpb25zKQpAQCAtMTA1LDcgKzEwOCw3
IEBAIERldmVsb3BlclJlc3VsdHNUYWJsZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhSZXN1
bHRzVGFibGUsCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZhciB0ZCA9IFV0aWxpdGll
cy5jcmVhdGVFbGVtZW50KCJ0ZCIsIHsgY2xhc3M6IGNsYXNzTmFtZSB9LCByb3cpOwotICAgICAg
ICAgICAgaWYgKGhlYWRlci50aXRsZSA9PSBTdHJpbmdzLnRleHQucmVzdWx0cy5ncmFwaCkgewor
ICAgICAgICAgICAgaWYgKGhlYWRlci50aXRsZSA9PSBTdHJpbmdzLnRleHQuZ3JhcGgpIHsKICAg
ICAgICAgICAgICAgICB0aGlzLl9hZGRHcmFwaEJ1dHRvbih0ZCwgdGVzdE5hbWUsIHRlc3RSZXN1
bHRzKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoISgidGV4dCIgaW4gaGVhZGVyKSkgewogICAg
ICAgICAgICAgICAgIHRkLnRleHRDb250ZW50ID0gdGVzdFJlc3VsdHNbaGVhZGVyLnRpdGxlXTsK
QEAgLTQ1MSw3ICs0NTQsOSBAQCBVdGlsaXRpZXMuZXh0ZW5kT2JqZWN0KHdpbmRvdy5iZW5jaG1h
cmtDb250cm9sbGVyLCB7CiAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgZG9jdW1lbnQuZm9ybXNbImJlbmNobWFyay1vcHRpb25zIl0uYWRkRXZlbnRMaXN0ZW5lcigi
Y2hhbmdlIiwgYmVuY2htYXJrQ29udHJvbGxlci5vbkJlbmNobWFya09wdGlvbnNDaGFuZ2VkLCB0
cnVlKTsKKyAgICAgICAgZG9jdW1lbnQuZm9ybXNbImdyYXBoLXR5cGUiXS5hZGRFdmVudExpc3Rl
bmVyKCJjaGFuZ2UiLCBiZW5jaG1hcmtDb250cm9sbGVyLm9uR3JhcGhUeXBlQ2hhbmdlZCwgdHJ1
ZSk7CiAgICAgICAgIGRvY3VtZW50LmZvcm1zWyJ0aW1lLWdyYXBoLW9wdGlvbnMiXS5hZGRFdmVu
dExpc3RlbmVyKCJjaGFuZ2UiLCBiZW5jaG1hcmtDb250cm9sbGVyLm9uVGltZUdyYXBoT3B0aW9u
c0NoYW5nZWQsIHRydWUpOworICAgICAgICBkb2N1bWVudC5mb3Jtc1siY29tcGxleGl0eS1ncmFw
aC1vcHRpb25zIl0uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgYmVuY2htYXJrQ29udHJvbGxl
ci5vbkNvbXBsZXhpdHlHcmFwaE9wdGlvbnNDaGFuZ2VkLCB0cnVlKTsKICAgICAgICAgb3B0aW9u
c01hbmFnZXIudXBkYXRlVUlGcm9tTG9jYWxTdG9yYWdlKCk7CiAgICAgICAgIHN1aXRlc01hbmFn
ZXIuY3JlYXRlRWxlbWVudHMoKTsKICAgICAgICAgc3VpdGVzTWFuYWdlci51cGRhdGVVSUZyb21M
b2NhbFN0b3JhZ2UoKTsKQEAgLTQ3NCw2ICs0NzksMTIgQEAgVXRpbGl0aWVzLmV4dGVuZE9iamVj
dCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwgewogICAgIHsKICAgICAgICAgdmFyIG9wdGlv
bnMgPSBvcHRpb25zTWFuYWdlci51cGRhdGVMb2NhbFN0b3JhZ2VGcm9tVUkoKTsKICAgICAgICAg
dmFyIHN1aXRlcyA9IHN1aXRlc01hbmFnZXIudXBkYXRlTG9jYWxTdG9yYWdlRnJvbVVJKCk7Cisg
ICAgICAgIGlmIChvcHRpb25zWyJhZGp1c3RtZW50Il0gPT0gInJhbXAiKSB7CisgICAgICAgICAg
ICBIZWFkZXJzLmRldGFpbHNbMl0uZGlzYWJsZWQgPSB0cnVlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgSGVhZGVycy5kZXRhaWxzWzNdLmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIEhlYWRlcnMuZGV0YWlsc1s0XS5kaXNhYmxlZCA9IHRydWU7CisgICAgICAgIH0KICAgICAg
ICAgdGhpcy5fc3RhcnRCZW5jaG1hcmsoc3VpdGVzLCBvcHRpb25zLCAicnVubmluZy10ZXN0Iik7
CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291
cmNlcy9kZWJ1Zy1ydW5uZXIvZ3JhcGguanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
cmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9ncmFwaC5qcwppbmRleCBiMzg2ZWVkNWZlNmQwNWM2ZWRm
NmEwNjNjYTQ0MzY1YWE5OWE3MDU0Li4zM2E4M2VjYjg5M2NkMzA4ZTA0MDQ5MmFmYjVjYjE1YjI5
ZjEwY2M2IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2Vz
L2RlYnVnLXJ1bm5lci9ncmFwaC5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
cmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9ncmFwaC5qcwpAQCAtMTQsNiArMTQsMTQgQEAgVXRpbGl0
aWVzLmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwgewogICAgICAgICB0
aGlzLmNyZWF0ZVRpbWVHcmFwaChncmFwaERhdGEsIG1hcmdpbnMsIHNpemUpOwogICAgICAgICB0
aGlzLm9uVGltZUdyYXBoT3B0aW9uc0NoYW5nZWQoKTsKIAorICAgICAgICB2YXIgaGFzQ29tcGxl
eGl0eVJlZ3Jlc3Npb24gPSAhIWdyYXBoRGF0YS5jb21wbGV4aXR5UmVncmVzc2lvbjsKKyAgICAg
ICAgdGhpcy5fc2hvd09ySGlkZU5vZGVzKGhhc0NvbXBsZXhpdHlSZWdyZXNzaW9uLCAiZm9ybVtu
YW1lPWdyYXBoLXR5cGVdIik7CisgICAgICAgIGlmIChoYXNDb21wbGV4aXR5UmVncmVzc2lvbikg
eworICAgICAgICAgICAgZG9jdW1lbnQuZm9ybXNbImdyYXBoLXR5cGUiXS5lbGVtZW50c1sidHlw
ZSJdID0gImNvbXBsZXhpdHkiOworICAgICAgICAgICAgdGhpcy5jcmVhdGVDb21wbGV4aXR5R3Jh
cGgoZ3JhcGhEYXRhLCBtYXJnaW5zLCBzaXplKTsKKyAgICAgICAgICAgIHRoaXMub25Db21wbGV4
aXR5R3JhcGhPcHRpb25zQ2hhbmdlZCgpOworICAgICAgICB9CisKICAgICAgICAgdGhpcy5vbkdy
YXBoVHlwZUNoYW5nZWQoKTsKICAgICB9LAogCkBAIC00MSw2ICs0OSwxNzQgQEAgVXRpbGl0aWVz
LmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwgewogICAgICAgICAgICAg
LmF0dHIoInkyIiwgbGluZVszXSk7CiAgICAgfSwKIAorICAgIF9hZGRSZWdyZXNzaW9uOiBmdW5j
dGlvbihkYXRhLCBzdmcsIHhTY2FsZSwgeVNjYWxlKQorICAgIHsKKyAgICAgICAgW2RhdGEuc2Vn
bWVudDEsIGRhdGEuc2VnbWVudDJdLmZvckVhY2goZnVuY3Rpb24ocGF0aCwgaSkgeworICAgICAg
ICAgICAgaWYgKCFpKSB7CisgICAgICAgICAgICAgICAgc3ZnLmFwcGVuZCgiY2lyY2xlIikKKyAg
ICAgICAgICAgICAgICAgICAgLmF0dHIoImN4IiwgeFNjYWxlKHBhdGhbMV1bMF0pKQorICAgICAg
ICAgICAgICAgICAgICAuYXR0cigiY3kiLCB5U2NhbGUocGF0aFsxXVsxXSkpCisgICAgICAgICAg
ICAgICAgICAgIC5hdHRyKCJyIiwgNSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRo
aXMuX2FkZFJlZ3Jlc3Npb25MaW5lKHN2ZywgeFNjYWxlLCB5U2NhbGUsIHBhdGgsIGRhdGEuc3Rk
ZXYpOworICAgICAgICB9LCB0aGlzKTsKKyAgICB9LAorCisgICAgY3JlYXRlQ29tcGxleGl0eUdy
YXBoOiBmdW5jdGlvbihncmFwaERhdGEsIG1hcmdpbnMsIHNpemUpCisgICAgeworICAgICAgICB2
YXIgc3ZnID0gZDMuc2VsZWN0KCIjdGVzdC1ncmFwaC1kYXRhIikuYXBwZW5kKCJzdmciKQorICAg
ICAgICAgICAgLmF0dHIoImlkIiwgImNvbXBsZXhpdHktZ3JhcGgiKQorICAgICAgICAgICAgLmF0
dHIoImNsYXNzIiwgImhpZGRlbiIpCisgICAgICAgICAgICAuYXR0cigid2lkdGgiLCBzaXplLndp
ZHRoICsgbWFyZ2lucy5sZWZ0ICsgbWFyZ2lucy5yaWdodCkKKyAgICAgICAgICAgIC5hdHRyKCJo
ZWlnaHQiLCBzaXplLmhlaWdodCArIG1hcmdpbnMudG9wICsgbWFyZ2lucy5ib3R0b20pCisgICAg
ICAgICAgICAuYXBwZW5kKCJnIikKKyAgICAgICAgICAgICAgICAuYXR0cigidHJhbnNmb3JtIiwg
InRyYW5zbGF0ZSgiICsgbWFyZ2lucy5sZWZ0ICsgIiwiICsgbWFyZ2lucy50b3AgKyAiKSIpOwor
CisgICAgICAgIHZhciB4TWluID0gMTAwMDAwLCB4TWF4ID0gMDsKKyAgICAgICAgaWYgKGdyYXBo
RGF0YS50aW1lUmVncmVzc2lvbnMpIHsKKyAgICAgICAgICAgIGdyYXBoRGF0YS50aW1lUmVncmVz
c2lvbnMuZm9yRWFjaChmdW5jdGlvbihyZWdyZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFyZWdyZXNzaW9uLnN0YXJ0SW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVncmVzc2lvbi5zdGFydEluZGV4OyBpIDw9IHJl
Z3Jlc3Npb24uZW5kSW5kZXg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB4TWluID0gTWF0
aC5taW4oeE1pbiwgZ3JhcGhEYXRhLnNhbXBsZXNbaV0uY29tcGxleGl0eSk7CisgICAgICAgICAg
ICAgICAgICAgIHhNYXggPSBNYXRoLm1heCh4TWF4LCBncmFwaERhdGEuc2FtcGxlc1tpXS5jb21w
bGV4aXR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHhNaW4gPSBkMy5taW4oZ3JhcGhEYXRhLnNhbXBsZXMsIGZ1bmN0
aW9uKHMpIHsgcmV0dXJuIHMuY29tcGxleGl0eTsgfSk7CisgICAgICAgICAgICB4TWF4ID0gZDMu
bWF4KGdyYXBoRGF0YS5zYW1wbGVzLCBmdW5jdGlvbihzKSB7IHJldHVybiBzLmNvbXBsZXhpdHk7
IH0pOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHhTY2FsZSA9IGQzLnNjYWxlLmxpbmVhcigp
CisgICAgICAgICAgICAucmFuZ2UoWzAsIHNpemUud2lkdGhdKQorICAgICAgICAgICAgLmRvbWFp
bihbeE1pbiwgeE1heF0pOworICAgICAgICB2YXIgeVNjYWxlID0gZDMuc2NhbGUubGluZWFyKCkK
KyAgICAgICAgICAgICAgICAucmFuZ2UoW3NpemUuaGVpZ2h0LCAwXSkKKyAgICAgICAgICAgICAg
ICAuZG9tYWluKFsxMDAwLzIwLCAxMDAwLzYwXSk7CisKKyAgICAgICAgdmFyIHhBeGlzID0gZDMu
c3ZnLmF4aXMoKQorICAgICAgICAgICAgICAgIC5zY2FsZSh4U2NhbGUpCisgICAgICAgICAgICAg
ICAgLm9yaWVudCgiYm90dG9tIik7CisgICAgICAgIHZhciB5QXhpcyA9IGQzLnN2Zy5heGlzKCkK
KyAgICAgICAgICAgICAgICAuc2NhbGUoeVNjYWxlKQorICAgICAgICAgICAgICAgIC50aWNrVmFs
dWVzKFsxMDAwLzIwLCAxMDAwLzI1LCAxMDAwLzMwLCAxMDAwLzM1LCAxMDAwLzQwLCAxMDAwLzQ1
LCAxMDAwLzUwLCAxMDAwLzU1LCAxMDAwLzYwXSkKKyAgICAgICAgICAgICAgICAudGlja0Zvcm1h
dChmdW5jdGlvbihkKSB7IHJldHVybiAoMTAwMCAvIGQpLnRvRml4ZWQoMCk7IH0pCisgICAgICAg
ICAgICAgICAgLm9yaWVudCgibGVmdCIpOworCisgICAgICAgIC8vIHgtYXhpcworICAgICAgICBz
dmcuYXBwZW5kKCJnIikKKyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4IGF4aXMiKQorICAg
ICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwiICsgc2l6ZS5oZWlnaHQg
KyAiKSIpCisgICAgICAgICAgICAuY2FsbCh4QXhpcyk7CisKKyAgICAgICAgLy8geS1heGlzCisg
ICAgICAgIHN2Zy5hcHBlbmQoImciKQorICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgInkgYXhp
cyIpCisgICAgICAgICAgICAuY2FsbCh5QXhpcyk7CisKKyAgICAgICAgLy8gdGltZS1iYXNlZCBy
ZWdyZXNzaW9uCisgICAgICAgIHZhciBtZWFuID0gc3ZnLmFwcGVuZCgiZyIpCisgICAgICAgICAg
ICAuYXR0cigiY2xhc3MiLCAibWVhbiBjb21wbGV4aXR5Iik7CisgICAgICAgIHZhciBjb21wbGV4
aXR5ID0gZ3JhcGhEYXRhLmF2ZXJhZ2VzW1N0cmluZ3MuanNvbi5leHBlcmltZW50cy5jb21wbGV4
aXR5XTsKKyAgICAgICAgdGhpcy5fYWRkUmVncmVzc2lvbkxpbmUobWVhbiwgeFNjYWxlLCB5U2Nh
bGUsIFtbY29tcGxleGl0eS5hdmVyYWdlLCB5U2NhbGUuZG9tYWluKClbMF1dLCBbY29tcGxleGl0
eS5hdmVyYWdlLCB5U2NhbGUuZG9tYWluKClbMV1dXSwgY29tcGxleGl0eS5zdGRldiwgdHJ1ZSk7
CisKKyAgICAgICAgLy8gcmVncmVzc2lvbgorICAgICAgICB0aGlzLl9hZGRSZWdyZXNzaW9uKGdy
YXBoRGF0YS5jb21wbGV4aXR5UmVncmVzc2lvbiwgc3ZnLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNz
IiwgInJlZ3Jlc3Npb24gcmF3IiksIHhTY2FsZSwgeVNjYWxlKTsKKyAgICAgICAgdGhpcy5fYWRk
UmVncmVzc2lvbihncmFwaERhdGEuY29tcGxleGl0eUF2ZXJhZ2VSZWdyZXNzaW9uLCBzdmcuYXBw
ZW5kKCJnIikuYXR0cigiY2xhc3MiLCAicmVncmVzc2lvbiBhdmVyYWdlIiksIHhTY2FsZSwgeVNj
YWxlKTsKKworICAgICAgICB2YXIgc3ZnR3JvdXAgPSBzdmcuYXBwZW5kKCJnIikKKyAgICAgICAg
ICAgIC5hdHRyKCJjbGFzcyIsICJzZXJpZXMgcmF3Iik7CisgICAgICAgIHZhciBzZXJpZXNDb3Vu
dGVyID0gMDsKKyAgICAgICAgZ3JhcGhEYXRhLnRpbWVSZWdyZXNzaW9ucy5mb3JFYWNoKGZ1bmN0
aW9uKHJlZ3Jlc3Npb24sIGkpIHsKKyAgICAgICAgICAgIGlmICghcmVncmVzc2lvbi5zdGFydElu
ZGV4KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgc2VyaWVzQ291bnRl
cisrOworICAgICAgICAgICAgdmFyIGdyb3VwID0gc3ZnR3JvdXAuYXBwZW5kKCJnIikKKyAgICAg
ICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAic2VyaWVzLSIgKyBzZXJpZXNDb3VudGVyKQorICAg
ICAgICAgICAgICAgIC5hdHRyKCJmaWxsIiwgImhzbCgiICsgKGkgLyBncmFwaERhdGEudGltZVJl
Z3Jlc3Npb25zLmxlbmd0aCAqIDM2MCkudG9GaXhlZCgwKSArICIsIDk2JSwgNTYlKSIpOworICAg
ICAgICAgICAgZ3JvdXAuc2VsZWN0QWxsKCJjaXJjbGUiKQorICAgICAgICAgICAgICAgIC5kYXRh
KGdyYXBoRGF0YS5zYW1wbGVzKQorICAgICAgICAgICAgICAgIC5lbnRlcigpCisgICAgICAgICAg
ICAgICAgLmFwcGVuZCgiY2lyY2xlIikKKyAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9u
KGQsIGkpIHsgcmV0dXJuIGkgPj0gcmVncmVzc2lvbi5zdGFydEluZGV4ICYmIGkgPD0gcmVncmVz
c2lvbi5lbmRJbmRleDsgfSkKKyAgICAgICAgICAgICAgICAuYXR0cigiY3giLCBmdW5jdGlvbihk
KSB7IHJldHVybiB4U2NhbGUoZC5jb21wbGV4aXR5KTsgfSkKKyAgICAgICAgICAgICAgICAuYXR0
cigiY3kiLCBmdW5jdGlvbihkKSB7IHJldHVybiB5U2NhbGUoZC5mcmFtZUxlbmd0aCk7IH0pCisg
ICAgICAgICAgICAgICAgLmF0dHIoInIiLCAyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZ3Jv
dXAgPSBzdmcuYXBwZW5kKCJnIikKKyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJzZXJpZXMg
YXZlcmFnZSIpCisgICAgICAgICAgICAuc2VsZWN0QWxsKCJjaXJjbGUiKQorICAgICAgICAgICAg
ICAgIC5kYXRhKGdyYXBoRGF0YS5jb21wbGV4aXR5QXZlcmFnZVNhbXBsZXMpCisgICAgICAgICAg
ICAgICAgLmVudGVyKCk7CisgICAgICAgIGdyb3VwLmFwcGVuZCgiY2lyY2xlIikKKyAgICAgICAg
ICAgIC5hdHRyKCJjeCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHhTY2FsZShkLmNvbXBsZXhpdHkp
OyB9KQorICAgICAgICAgICAgLmF0dHIoImN5IiwgZnVuY3Rpb24oZCkgeyByZXR1cm4geVNjYWxl
KGQuZnJhbWVMZW5ndGgpOyB9KQorICAgICAgICAgICAgLmF0dHIoInIiLCAzKQorICAgICAgICBn
cm91cC5hcHBlbmQoImxpbmUiKQorICAgICAgICAgICAgLmF0dHIoIngxIiwgZnVuY3Rpb24oZCkg
eyByZXR1cm4geFNjYWxlKGQuY29tcGxleGl0eSk7IH0pCisgICAgICAgICAgICAuYXR0cigieDIi
LCBmdW5jdGlvbihkKSB7IHJldHVybiB4U2NhbGUoZC5jb21wbGV4aXR5KTsgfSkKKyAgICAgICAg
ICAgIC5hdHRyKCJ5MSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHlTY2FsZShkLmZyYW1lTGVuZ3Ro
IC0gZC5zdGRldik7IH0pCisgICAgICAgICAgICAuYXR0cigieTIiLCBmdW5jdGlvbihkKSB7IHJl
dHVybiB5U2NhbGUoZC5mcmFtZUxlbmd0aCArIGQuc3RkZXYpOyB9KTsKKworICAgICAgICAvLyBD
dXJzb3IKKyAgICAgICAgdmFyIGN1cnNvckdyb3VwID0gc3ZnLmFwcGVuZCgiZyIpLmF0dHIoImNs
YXNzIiwgImN1cnNvciBoaWRkZW4iKTsKKyAgICAgICAgY3Vyc29yR3JvdXAuYXBwZW5kKCJsaW5l
IikKKyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJ4IikKKyAgICAgICAgICAgIC5hdHRyKCJ4
MSIsIDApCisgICAgICAgICAgICAuYXR0cigieDIiLCAwKQorICAgICAgICAgICAgLmF0dHIoInkx
IiwgeVNjYWxlKHlBeGlzLnNjYWxlKCkuZG9tYWluKClbMF0pICsgMTApCisgICAgICAgICAgICAu
YXR0cigieTIiLCB5U2NhbGUoeUF4aXMuc2NhbGUoKS5kb21haW4oKVsxXSkpOworICAgICAgICBj
dXJzb3JHcm91cC5hcHBlbmQoImxpbmUiKQorICAgICAgICAgICAgLmF0dHIoImNsYXNzIiwgInki
KQorICAgICAgICAgICAgLmF0dHIoIngxIiwgeFNjYWxlKDApIC0gMTApCisgICAgICAgICAgICAu
YXR0cigieDIiLCB4U2NhbGUoeEF4aXMuc2NhbGUoKS5kb21haW4oKVsxXSkpCisgICAgICAgICAg
ICAuYXR0cigieTEiLCAwKQorICAgICAgICAgICAgLmF0dHIoInkyIiwgMCkKKyAgICAgICAgY3Vy
c29yR3JvdXAuYXBwZW5kKCJ0ZXh0IikKKyAgICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJsYWJl
bCB4IikKKyAgICAgICAgICAgIC5hdHRyKCJ4IiwgMCkKKyAgICAgICAgICAgIC5hdHRyKCJ5Iiwg
eVNjYWxlKHlBeGlzLnNjYWxlKCkuZG9tYWluKClbMF0pICsgMTUpCisgICAgICAgICAgICAuYXR0
cigiYmFzZWxpbmUtc2hpZnQiLCAiLTEwMCUiKQorICAgICAgICAgICAgLmF0dHIoInRleHQtYW5j
aG9yIiwgIm1pZGRsZSIpOworICAgICAgICBjdXJzb3JHcm91cC5hcHBlbmQoInRleHQiKQorICAg
ICAgICAgICAgLmF0dHIoImNsYXNzIiwgImxhYmVsIHkiKQorICAgICAgICAgICAgLmF0dHIoIngi
LCB4U2NhbGUoMCkgLSAxNSkKKyAgICAgICAgICAgIC5hdHRyKCJ5IiwgMCkKKyAgICAgICAgICAg
IC5hdHRyKCJiYXNlbGluZS1zaGlmdCIsICItMzAlIikKKyAgICAgICAgICAgIC5hdHRyKCJ0ZXh0
LWFuY2hvciIsICJlbmQiKTsKKyAgICAgICAgLy8gQXJlYSB0byBoYW5kbGUgbW91c2UgZXZlbnRz
CisgICAgICAgIHZhciBhcmVhID0gc3ZnLmFwcGVuZCgicmVjdCIpCisgICAgICAgICAgICAuYXR0
cigiZmlsbCIsICJ0cmFuc3BhcmVudCIpCisgICAgICAgICAgICAuYXR0cigieCIsIDApCisgICAg
ICAgICAgICAuYXR0cigieSIsIDApCisgICAgICAgICAgICAuYXR0cigid2lkdGgiLCBzaXplLndp
ZHRoKQorICAgICAgICAgICAgLmF0dHIoImhlaWdodCIsIHNpemUuaGVpZ2h0KTsKKworICAgICAg
ICBhcmVhLm9uKCJtb3VzZW92ZXIiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoIiNjb21wbGV4aXR5LWdyYXBoIC5jdXJzb3IiKS5jbGFzc0xpc3QucmVt
b3ZlKCJoaWRkZW4iKTsKKyAgICAgICAgfSkub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjY29tcGxleGl0eS1ncmFwaCAuY3Vy
c29yIikuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CisgICAgICAgIH0pLm9uKCJtb3VzZW1vdmUi
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGQzLm1vdXNlKHRoaXMp
OworICAgICAgICAgICAgdmFyIGxvY2F0aW9uX2RvbWFpbiA9IFt4U2NhbGUuaW52ZXJ0KGxvY2F0
aW9uWzBdKSwgeVNjYWxlLmludmVydChsb2NhdGlvblsxXSldOworICAgICAgICAgICAgY3Vyc29y
R3JvdXAuc2VsZWN0KCJsaW5lLngiKQorICAgICAgICAgICAgICAgIC5hdHRyKCJ4MSIsIGxvY2F0
aW9uWzBdKQorICAgICAgICAgICAgICAgIC5hdHRyKCJ4MiIsIGxvY2F0aW9uWzBdKTsKKyAgICAg
ICAgICAgIGN1cnNvckdyb3VwLnNlbGVjdCgidGV4dC54IikKKyAgICAgICAgICAgICAgICAuYXR0
cigieCIsIGxvY2F0aW9uWzBdKQorICAgICAgICAgICAgICAgIC50ZXh0KGxvY2F0aW9uX2RvbWFp
blswXS50b0ZpeGVkKDEpKTsKKyAgICAgICAgICAgIGN1cnNvckdyb3VwLnNlbGVjdCgibGluZS55
IikKKyAgICAgICAgICAgICAgICAuYXR0cigieTEiLCBsb2NhdGlvblsxXSkKKyAgICAgICAgICAg
ICAgICAuYXR0cigieTIiLCBsb2NhdGlvblsxXSk7CisgICAgICAgICAgICBjdXJzb3JHcm91cC5z
ZWxlY3QoInRleHQueSIpCisgICAgICAgICAgICAgICAgLmF0dHIoInkiLCBsb2NhdGlvblsxXSkK
KyAgICAgICAgICAgICAgICAudGV4dCgoMTAwMCAvIGxvY2F0aW9uX2RvbWFpblsxXSkudG9GaXhl
ZCgxKSk7CisgICAgICAgIH0pOworICAgIH0sCisKICAgICBjcmVhdGVUaW1lR3JhcGg6IGZ1bmN0
aW9uKGdyYXBoRGF0YSwgbWFyZ2lucywgc2l6ZSkKICAgICB7CiAgICAgICAgIHZhciBzdmcgPSBk
My5zZWxlY3QoIiN0ZXN0LWdyYXBoLWRhdGEiKS5hcHBlbmQoInN2ZyIpCkBAIC01OSw3ICsyMzUs
MTQgQEAgVXRpbGl0aWVzLmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwg
ewogICAgICAgICAgICAgICAgIC5kb21haW4oWwogICAgICAgICAgICAgICAgICAgICBNYXRoLm1p
bihkMy5taW4oZ3JhcGhEYXRhLnNhbXBsZXMsIGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHMudGltZTsg
fSksIDApLAogICAgICAgICAgICAgICAgICAgICBkMy5tYXgoZ3JhcGhEYXRhLnNhbXBsZXMsIGZ1
bmN0aW9uKHMpIHsgcmV0dXJuIHMudGltZTsgfSldKTsKLSAgICAgICAgdmFyIGNvbXBsZXhpdHlN
YXggPSBkMy5tYXgoZ3JhcGhEYXRhLnNhbXBsZXMsIGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHMuY29t
cGxleGl0eTsgfSk7CisgICAgICAgIHZhciBjb21wbGV4aXR5TWF4ID0gMDsKKyAgICAgICAgaWYg
KGdyYXBoRGF0YS50aW1lUmVncmVzc2lvbnMpIHsKKyAgICAgICAgICAgIGdyYXBoRGF0YS50aW1l
UmVncmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAocmVncmVzc2lvbikgeworICAgICAgICAgICAg
ICAgIGlmIChyZWdyZXNzaW9uLmNvbXBsZXhpdHkpCisgICAgICAgICAgICAgICAgICAgIGNvbXBs
ZXhpdHlNYXggPSBNYXRoLm1heChjb21wbGV4aXR5TWF4LCByZWdyZXNzaW9uLm1heENvbXBsZXhp
dHkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY29tcGxl
eGl0eU1heCA9IGQzLm1heChncmFwaERhdGEuc2FtcGxlcywgZnVuY3Rpb24ocykgeyByZXR1cm4g
cy5jb21wbGV4aXR5OyB9KTsKIAogICAgICAgICB2YXIgeUxlZnQgPSBkMy5zY2FsZS5saW5lYXIo
KQogICAgICAgICAgICAgICAgIC5yYW5nZShbc2l6ZS5oZWlnaHQsIDBdKQpAQCAtOTgsNyArMjgx
LDcgQEAgVXRpbGl0aWVzLmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwg
ewogCiAgICAgICAgIC8vIHlMZWZ0LWF4aXMKICAgICAgICAgc3ZnLmFwcGVuZCgiZyIpCi0gICAg
ICAgICAgICAuYXR0cigiY2xhc3MiLCAieSBheGlzIikKKyAgICAgICAgICAgIC5hdHRyKCJjbGFz
cyIsICJ5TGVmdCBheGlzIikKICAgICAgICAgICAgIC5hdHRyKCJmaWxsIiwgIiM3QURENDkiKQog
ICAgICAgICAgICAgLmNhbGwoeUF4aXNMZWZ0KQogICAgICAgICAgICAgLmFwcGVuZCgidGV4dCIp
CkBAIC0xMTIsMTcgKzI5NSwxNyBAQCBVdGlsaXRpZXMuZXh0ZW5kT2JqZWN0KHdpbmRvdy5iZW5j
aG1hcmtDb250cm9sbGVyLCB7CiAKICAgICAgICAgLy8geVJpZ2h0LWF4aXMKICAgICAgICAgc3Zn
LmFwcGVuZCgiZyIpCi0gICAgICAgICAgICAuYXR0cigiY2xhc3MiLCAieSBheGlzIikKKyAgICAg
ICAgICAgIC5hdHRyKCJjbGFzcyIsICJ5UmlnaHQgYXhpcyIpCiAgICAgICAgICAgICAuYXR0cigi
ZmlsbCIsICIjRkE0OTI1IikKICAgICAgICAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNs
YXRlKCIgKyBzaXplLndpZHRoICsgIiwgMCkiKQogICAgICAgICAgICAgLmNhbGwoeUF4aXNSaWdo
dCkKICAgICAgICAgICAgIC5hcHBlbmQoInRleHQiKQogICAgICAgICAgICAgICAgIC5hdHRyKCJj
bGFzcyIsICJsYWJlbCIpCi0gICAgICAgICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsICJyb3Rh
dGUoLTkwKSIpCi0gICAgICAgICAgICAgICAgLmF0dHIoInkiLCA2KQorICAgICAgICAgICAgICAg
IC5hdHRyKCJ4IiwgOSkKKyAgICAgICAgICAgICAgICAuYXR0cigieSIsIC0yMCkKICAgICAgICAg
ICAgICAgICAuYXR0cigiZmlsbCIsICIjRkE0OTI1IikKICAgICAgICAgICAgICAgICAuYXR0cigi
ZHkiLCAiLjcxZW0iKQotICAgICAgICAgICAgICAgIC5zdHlsZSgidGV4dC1hbmNob3IiLCAiZW5k
IikKKyAgICAgICAgICAgICAgICAuc3R5bGUoInRleHQtYW5jaG9yIiwgInN0YXJ0IikKICAgICAg
ICAgICAgICAgICAudGV4dChheGVzWzFdKTsKIAogICAgICAgICAvLyBtYXJrcwpAQCAtMjA5LDYg
KzM5Miw0MSBAQCBVdGlsaXRpZXMuZXh0ZW5kT2JqZWN0KHdpbmRvdy5iZW5jaG1hcmtDb250cm9s
bGVyLCB7CiAgICAgICAgIGFkZERhdGEoInJhd0ZQUyIsIGFsbERhdGEsIGZ1bmN0aW9uKGQpIHsg
cmV0dXJuIHlSaWdodChkLmZyYW1lTGVuZ3RoKTsgfSwgMSk7CiAgICAgICAgIGFkZERhdGEoImZp
bHRlcmVkRlBTIiwgZmlsdGVyZWREYXRhLCBmdW5jdGlvbihkKSB7IHJldHVybiB5UmlnaHQoZC5z
bW9vdGhlZEZyYW1lTGVuZ3RoKTsgfSwgMik7CiAKKyAgICAgICAgLy8gcmVncmVzc2lvbnMKKyAg
ICAgICAgdmFyIHJlZ3Jlc3Npb25Hcm91cCA9IHN2Zy5hcHBlbmQoImciKQorICAgICAgICAgICAg
LmF0dHIoImlkIiwgInJlZ3Jlc3Npb25zIik7CisgICAgICAgIGlmIChncmFwaERhdGEudGltZVJl
Z3Jlc3Npb25zKSB7CisgICAgICAgICAgICB2YXIgY29tcGxleGl0aWVzID0gW107CisgICAgICAg
ICAgICBncmFwaERhdGEudGltZVJlZ3Jlc3Npb25zLmZvckVhY2goZnVuY3Rpb24gKHJlZ3Jlc3Np
b24pIHsKKyAgICAgICAgICAgICAgICByZWdyZXNzaW9uR3JvdXAuYXBwZW5kKCJsaW5lIikKKyAg
ICAgICAgICAgICAgICAgICAgLmF0dHIoIngxIiwgeChyZWdyZXNzaW9uLnNlZ21lbnQxWzBdWzBd
KSkKKyAgICAgICAgICAgICAgICAgICAgLmF0dHIoIngyIiwgeChyZWdyZXNzaW9uLnNlZ21lbnQx
WzFdWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgLmF0dHIoInkxIiwgeVJpZ2h0KHJlZ3Jlc3Np
b24uc2VnbWVudDFbMF1bMV0pKQorICAgICAgICAgICAgICAgICAgICAuYXR0cigieTIiLCB5Umln
aHQocmVncmVzc2lvbi5zZWdtZW50MVsxXVsxXSkpOworICAgICAgICAgICAgICAgIHJlZ3Jlc3Np
b25Hcm91cC5hcHBlbmQoImxpbmUiKQorICAgICAgICAgICAgICAgICAgICAuYXR0cigieDEiLCB4
KHJlZ3Jlc3Npb24uc2VnbWVudDJbMF1bMF0pKQorICAgICAgICAgICAgICAgICAgICAuYXR0cigi
eDIiLCB4KHJlZ3Jlc3Npb24uc2VnbWVudDJbMV1bMF0pKQorICAgICAgICAgICAgICAgICAgICAu
YXR0cigieTEiLCB5UmlnaHQocmVncmVzc2lvbi5zZWdtZW50MlswXVsxXSkpCisgICAgICAgICAg
ICAgICAgICAgIC5hdHRyKCJ5MiIsIHlSaWdodChyZWdyZXNzaW9uLnNlZ21lbnQyWzFdWzFdKSk7
CisgICAgICAgICAgICAgICAgLy8gaW5mbGVjdGlvbiBwb2ludAorICAgICAgICAgICAgICAgIHJl
Z3Jlc3Npb25Hcm91cC5hcHBlbmQoImNpcmNsZSIpCisgICAgICAgICAgICAgICAgICAgIC5hdHRy
KCJjeCIsIHgocmVncmVzc2lvbi5zZWdtZW50MVsxXVswXSkpCisgICAgICAgICAgICAgICAgICAg
IC5hdHRyKCJjeSIsIHlMZWZ0KHJlZ3Jlc3Npb24uY29tcGxleGl0eSkpCisgICAgICAgICAgICAg
ICAgICAgIC5hdHRyKCJyIiwgNSk7CisgICAgICAgICAgICAgICAgY29tcGxleGl0aWVzLnB1c2go
cmVncmVzc2lvbi5jb21wbGV4aXR5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYg
KGNvbXBsZXhpdGllcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2YXIgeUxlZnRDb21wbGV4
aXRpZXMgPSBkMy5zdmcuYXhpcygpCisgICAgICAgICAgICAgICAgICAgIC5zY2FsZSh5TGVmdCkK
KyAgICAgICAgICAgICAgICAgICAgLnRpY2tWYWx1ZXMoY29tcGxleGl0aWVzKQorICAgICAgICAg
ICAgICAgICAgICAudGlja1NpemUoMTApCisgICAgICAgICAgICAgICAgICAgIC5vcmllbnQoImxl
ZnQiKTsKKyAgICAgICAgICAgICAgICBzdmcuYXBwZW5kKCJnIikKKyAgICAgICAgICAgICAgICAg
ICAgLmF0dHIoImNsYXNzIiwgImNvbXBsZXhpdHkgeUxlZnQgYXhpcyIpCisgICAgICAgICAgICAg
ICAgICAgIC5jYWxsKHlMZWZ0Q29tcGxleGl0aWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIC8vIEFyZWEgdG8gaGFuZGxlIG1vdXNlIGV2ZW50cwogICAgICAgICB2YXIg
YXJlYSA9IHN2Zy5hcHBlbmQoInJlY3QiKQogICAgICAgICAgICAgLmF0dHIoImZpbGwiLCAidHJh
bnNwYXJlbnQiKQpAQCAtMjkxLDYgKzUwOSwxNSBAQCBVdGlsaXRpZXMuZXh0ZW5kT2JqZWN0KHdp
bmRvdy5iZW5jaG1hcmtDb250cm9sbGVyLCB7CiAgICAgICAgIH0KICAgICB9LAogCisgICAgb25D
b21wbGV4aXR5R3JhcGhPcHRpb25zQ2hhbmdlZDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBm
b3JtID0gZG9jdW1lbnQuZm9ybXNbImNvbXBsZXhpdHktZ3JhcGgtb3B0aW9ucyJdLmVsZW1lbnRz
OworICAgICAgICBiZW5jaG1hcmtDb250cm9sbGVyLl9zaG93T3JIaWRlTm9kZXMoZm9ybVsic2Vy
aWVzLXJhdyJdLmNoZWNrZWQsICIjY29tcGxleGl0eS1ncmFwaCAuc2VyaWVzLnJhdyIpOworICAg
ICAgICBiZW5jaG1hcmtDb250cm9sbGVyLl9zaG93T3JIaWRlTm9kZXMoZm9ybVsic2VyaWVzLWF2
ZXJhZ2UiXS5jaGVja2VkLCAiI2NvbXBsZXhpdHktZ3JhcGggLnNlcmllcy5hdmVyYWdlIik7Cisg
ICAgICAgIGJlbmNobWFya0NvbnRyb2xsZXIuX3Nob3dPckhpZGVOb2Rlcyhmb3JtWyJyZWdyZXNz
aW9uLXRpbWUtc2NvcmUiXS5jaGVja2VkLCAiI2NvbXBsZXhpdHktZ3JhcGggLm1lYW4uY29tcGxl
eGl0eSIpOworICAgICAgICBiZW5jaG1hcmtDb250cm9sbGVyLl9zaG93T3JIaWRlTm9kZXMoZm9y
bVsiY29tcGxleGl0eS1yZWdyZXNzaW9uLWFnZ3JlZ2F0ZS1yYXciXS5jaGVja2VkLCAiI2NvbXBs
ZXhpdHktZ3JhcGggLnJlZ3Jlc3Npb24ucmF3Iik7CisgICAgICAgIGJlbmNobWFya0NvbnRyb2xs
ZXIuX3Nob3dPckhpZGVOb2Rlcyhmb3JtWyJjb21wbGV4aXR5LXJlZ3Jlc3Npb24tYWdncmVnYXRl
LWF2ZXJhZ2UiXS5jaGVja2VkLCAiI2NvbXBsZXhpdHktZ3JhcGggLnJlZ3Jlc3Npb24uYXZlcmFn
ZSIpOworICAgIH0sCisKICAgICBvblRpbWVHcmFwaE9wdGlvbnNDaGFuZ2VkOiBmdW5jdGlvbigp
IHsKICAgICAgICAgdmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1sidGltZS1ncmFwaC1vcHRpb25z
Il0uZWxlbWVudHM7CiAgICAgICAgIGJlbmNobWFya0NvbnRyb2xsZXIuX3Nob3dPckhpZGVOb2Rl
cyhmb3JtWyJtYXJrZXJzIl0uY2hlY2tlZCwgIi5tYXJrZXIiKTsKQEAgLTMwMSwxMSArNTI4LDE0
IEBAIFV0aWxpdGllcy5leHRlbmRPYmplY3Qod2luZG93LmJlbmNobWFya0NvbnRyb2xsZXIsIHsK
ICAgICB9LAogCiAgICAgb25HcmFwaFR5cGVDaGFuZ2VkOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGZvcm0gPSBkb2N1bWVudC5mb3Jtc1siZ3JhcGgtdHlwZSJdLmVsZW1lbnRzOwogICAgICAg
ICB2YXIgZ3JhcGhEYXRhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QtZ3JhcGgtZGF0
YSIpLmdyYXBoRGF0YTsKLSAgICAgICAgdmFyIGlzVGltZVNlbGVjdGVkID0gdHJ1ZTsKKyAgICAg
ICAgdmFyIGlzVGltZVNlbGVjdGVkID0gZm9ybVsiZ3JhcGgtdHlwZSJdLnZhbHVlID09ICJ0aW1l
IjsKIAogICAgICAgICBiZW5jaG1hcmtDb250cm9sbGVyLl9zaG93T3JIaWRlTm9kZXMoaXNUaW1l
U2VsZWN0ZWQsICIjdGltZS1ncmFwaCIpOwogICAgICAgICBiZW5jaG1hcmtDb250cm9sbGVyLl9z
aG93T3JIaWRlTm9kZXMoaXNUaW1lU2VsZWN0ZWQsICJmb3JtW25hbWU9dGltZS1ncmFwaC1vcHRp
b25zXSIpOworICAgICAgICBiZW5jaG1hcmtDb250cm9sbGVyLl9zaG93T3JIaWRlTm9kZXMoIWlz
VGltZVNlbGVjdGVkLCAiI2NvbXBsZXhpdHktZ3JhcGgiKTsKKyAgICAgICAgYmVuY2htYXJrQ29u
dHJvbGxlci5fc2hvd09ySGlkZU5vZGVzKCFpc1RpbWVTZWxlY3RlZCwgImZvcm1bbmFtZT1jb21w
bGV4aXR5LWdyYXBoLW9wdGlvbnNdIik7CiAKICAgICAgICAgdmFyIHNjb3JlLCBtZWFuOwogICAg
ICAgICBpZiAoaXNUaW1lU2VsZWN0ZWQpIHsKQEAgLTMyNiw2ICs1NTYsMTkgQEAgVXRpbGl0aWVz
LmV4dGVuZE9iamVjdCh3aW5kb3cuYmVuY2htYXJrQ29udHJvbGxlciwgewogICAgICAgICAgICAg
ICAgICAgICByZWdyZXNzaW9uLmNvbmNlcm4udG9GaXhlZCgyKV0pOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbWVhbiA9IG1lYW4uam9pbigiIik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzY29yZSA9IFsKKyAgICAgICAgICAgICAgICAicmF3OiAiLAorICAgICAgICAgICAg
ICAgIGdyYXBoRGF0YS5jb21wbGV4aXR5UmVncmVzc2lvbi5jb21wbGV4aXR5LnRvRml4ZWQoMiks
CisgICAgICAgICAgICAgICAgIiwgYXZlcmFnZTogIiwKKyAgICAgICAgICAgICAgICBncmFwaERh
dGEuY29tcGxleGl0eUF2ZXJhZ2VSZWdyZXNzaW9uLmNvbXBsZXhpdHkudG9GaXhlZCgyKV0uam9p
bigiIik7CisKKyAgICAgICAgICAgIG1lYW4gPSBbCisgICAgICAgICAgICAgICAgInJhdzogwrEi
LAorICAgICAgICAgICAgICAgIGdyYXBoRGF0YS5jb21wbGV4aXR5UmVncmVzc2lvbi5zdGRldi50
b0ZpeGVkKDIpLAorICAgICAgICAgICAgICAgICJtcywgYXZlcmFnZTogwrEiLAorICAgICAgICAg
ICAgICAgIGdyYXBoRGF0YS5jb21wbGV4aXR5QXZlcmFnZVJlZ3Jlc3Npb24uc3RkZXYudG9GaXhl
ZCgyKSwKKyAgICAgICAgICAgICAgICAibXMiXS5qb2luKCIiKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHNlY3Rpb25zTWFuYWdlci5zZXRTZWN0aW9uU2NvcmUoInRlc3QtZ3JhcGgiLCBzY29yZSwg
bWVhbik7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2Vz
L2RlYnVnLXJ1bm5lci90ZXN0cy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNv
dXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCmluZGV4IGQzNjJkMzVlMDIwYTcyY2E3ZmY0NDI2
NDE2NWViNWY5ZjBiZDM3NmIuLjhiODU4NGFmMjcyN2ViZTc4YTFiYzU4MWI2Mzk4YWFjMDdkZTk1
YTAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvZGVi
dWctcnVubmVyL3Rlc3RzLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNv
dXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzCkBAIC0xLDEwICsxLDEwIEBACiBVdGlsaXRpZXMu
ZXh0ZW5kT2JqZWN0KEhlYWRlcnMsIHsKICAgICBkZXRhaWxzOiBbCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHRpdGxlOiBTdHJpbmdzLnRleHQucmVzdWx0cy5ncmFwaAorICAgICAgICAgICAgdGl0
bGU6IFN0cmluZ3MudGV4dC5ncmFwaAogICAgICAgICB9LAogICAgICAgICB7Ci0gICAgICAgICAg
ICB0aXRsZTogU3RyaW5ncy50ZXh0LmV4cGVyaW1lbnRzLmNvbXBsZXhpdHksCisgICAgICAgICAg
ICB0aXRsZTogU3RyaW5ncy50ZXh0LmNvbXBsZXhpdHksCiAgICAgICAgICAgICBjaGlsZHJlbjoK
ICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICB7CkBAIC0zMiw3ICszMiw3IEBAIFV0aWxp
dGllcy5leHRlbmRPYmplY3QoSGVhZGVycywgewogICAgICAgICAgICAgXQogICAgICAgICB9LAog
ICAgICAgICB7Ci0gICAgICAgICAgICB0aXRsZTogU3RyaW5ncy50ZXh0LmV4cGVyaW1lbnRzLmZy
YW1lUmF0ZSwKKyAgICAgICAgICAgIHRpdGxlOiBTdHJpbmdzLnRleHQuZnJhbWVSYXRlLAogICAg
ICAgICAgICAgY2hpbGRyZW46CiAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgewpAQCAt
NjUsNiArNjUsNTAgQEAgVXRpbGl0aWVzLmV4dGVuZE9iamVjdChIZWFkZXJzLCB7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICB0aXRsZTogU3RyaW5ncy50ZXh0Lm1lcmdlZFJhd0NvbXBsZXhpdHksCisgICAgICAgICAg
ICBjaGlsZHJlbjoKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhW1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5jb21wbGV4aXR5UmVncmVzc2lv
bl1bU3RyaW5ncy5qc29uLnJlZ3Jlc3Npb25zLmNvbXBsZXhpdHldLnRvRml4ZWQoMik7CisgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogImF2ZXJh
Z2UiCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHRleHQ6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsKxICIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVtTdHJpbmdzLmpzb24ucmVncmVzc2lvbnMuY29tcGxleGl0eVJl
Z3Jlc3Npb25dW1N0cmluZ3MuanNvbi5tZWFzdXJlbWVudHMuc3RkZXZdLnRvRml4ZWQoMiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1zIgorICAgICAgICAgICAgICAgICAgICAgICAg
XS5qb2luKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
Y2xhc3NOYW1lOiAic3RkZXYiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB0aXRsZTogU3RyaW5ncy50ZXh0Lm1lcmdl
ZEF2ZXJhZ2VDb21wbGV4aXR5LAorICAgICAgICAgICAgY2hpbGRyZW46CisgICAgICAgICAgICBb
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbihk
YXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtTdHJpbmdzLmpzb24u
cmVncmVzc2lvbnMuY29tcGxleGl0eUF2ZXJhZ2VSZWdyZXNzaW9uXVtTdHJpbmdzLmpzb24ucmVn
cmVzc2lvbnMuY29tcGxleGl0eV0udG9GaXhlZCgyKTsKKyAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAiYXZlcmFnZSIKKyAgICAgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rp
b24oZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiwrEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
W1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5jb21wbGV4aXR5QXZlcmFnZVJlZ3Jlc3Npb25dW1N0
cmluZ3MuanNvbi5tZWFzdXJlbWVudHMuc3RkZXZdLnRvRml4ZWQoMiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIm1zIgorICAgICAgICAgICAgICAgICAgICAgICAgXS5qb2luKCIiKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAi
c3RkZXYiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAogICAg
IF0KIH0pCiAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJj
ZXMvcnVubmVyL2FuaW1vbWV0ZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVz
b3VyY2VzL3J1bm5lci9hbmltb21ldGVyLmpzCmluZGV4IGMxNWQwYWY5M2Y3OTI5YjY5YjQ0ODZi
ZDkwZDIyZjAwZGVmNjVlMTUuLjA2ZTQzYjRjZmI2YTc2NzQ4OTI1ZThhNGQ5OTA3MjJhNzQ0NjRm
YTEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvcnVu
bmVyL2FuaW1vbWV0ZXIuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291
cmNlcy9ydW5uZXIvYW5pbW9tZXRlci5qcwpAQCAtNzAsMTIgKzcwLDE5IEBAIFJlc3VsdHNUYWJs
ZSA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKIAogICAgICAgICB0aGlzLl9mbGF0dGVuZWRIZWFk
ZXJzID0gW107CiAgICAgICAgIHRoaXMuX2hlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIp
IHsKKyAgICAgICAgICAgIGlmIChoZWFkZXIuZGlzYWJsZWQpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCiAgICAgICAgICAgICBpZiAoaGVhZGVyLmNoaWxkcmVuKQogICAgICAgICAgICAgICAg
IHRoaXMuX2ZsYXR0ZW5lZEhlYWRlcnMgPSB0aGlzLl9mbGF0dGVuZWRIZWFkZXJzLmNvbmNhdCho
ZWFkZXIuY2hpbGRyZW4pOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRoaXMu
X2ZsYXR0ZW5lZEhlYWRlcnMucHVzaChoZWFkZXIpOwogICAgICAgICB9LCB0aGlzKTsKIAorICAg
ICAgICB0aGlzLl9mbGF0dGVuZWRIZWFkZXJzID0gdGhpcy5fZmxhdHRlbmVkSGVhZGVycy5maWx0
ZXIoZnVuY3Rpb24gKGhlYWRlcikgeworICAgICAgICAgICAgcmV0dXJuICFoZWFkZXIuZGlzYWJs
ZWQ7CisgICAgICAgIH0pOworCiAgICAgICAgIHRoaXMuY2xlYXIoKTsKICAgICB9LCB7CiAKQEAg
LTkwLDggKzk3LDExIEBAIFJlc3VsdHNUYWJsZSA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAg
ICAgICAgdmFyIHJvdyA9IFV0aWxpdGllcy5jcmVhdGVFbGVtZW50KCJ0ciIsIHt9LCB0aGVhZCk7
CiAKICAgICAgICAgdGhpcy5faGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXIpIHsKKyAg
ICAgICAgICAgIGlmIChoZWFkZXIuZGlzYWJsZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CiAgICAgICAgICAgICB2YXIgdGggPSBVdGlsaXRpZXMuY3JlYXRlRWxlbWVudCgidGgiLCB7fSwg
cm93KTsKLSAgICAgICAgICAgIGlmIChoZWFkZXIudGl0bGUgIT0gU3RyaW5ncy50ZXh0LnJlc3Vs
dHMuZ3JhcGgpCisgICAgICAgICAgICBpZiAoaGVhZGVyLnRpdGxlICE9IFN0cmluZ3MudGV4dC5n
cmFwaCkKICAgICAgICAgICAgICAgICB0aC50ZXh0Q29udGVudCA9IGhlYWRlci50aXRsZTsKICAg
ICAgICAgICAgIGlmIChoZWFkZXIuY2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgdGguY29sU3Bh
biA9IGhlYWRlci5jaGlsZHJlbi5sZW5ndGg7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0cmluZ3MuanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1v
bWV0ZXIvcmVzb3VyY2VzL3N0cmluZ3MuanMKaW5kZXggZjllYmY2NzhkNDQ3ZTljYTMyYTU2NTdl
MmQ4NGU3NDAxY2NkYTFhOS4uY2MwM2JmMDdhMGMxYThmZmE2MWQ5MDU5MTkwMDA1NjYwZDI5NWQx
YSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9zdHJp
bmdzLmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvc3RyaW5n
cy5qcwpAQCAtNCwyNyArNCwxNiBAQCB2YXIgU3RyaW5ncyA9IHsKICAgICAgICAgc2NvcmU6ICJT
Y29yZSIsCiAgICAgICAgIHNhbXBsZXM6ICJTYW1wbGVzIiwKIAotICAgICAgICBleHBlcmltZW50
czogewotICAgICAgICAgICAgY29tcGxleGl0eTogIkNvbXBsZXhpdHkiLAotICAgICAgICAgICAg
ZnJhbWVSYXRlOiAiRlBTIgotICAgICAgICB9LAotCi0gICAgICAgIG1lYXN1cmVtZW50czogewot
ICAgICAgICAgICAgYXZlcmFnZTogIkF2Zy4iLAotICAgICAgICAgICAgY29uY2VybjogIlcuNSUi
LAotICAgICAgICAgICAgc3RkZXY6ICJTdGQuIiwKLSAgICAgICAgICAgIHBlcmNlbnQ6ICAiJSIK
LSAgICAgICAgfSwKLQotICAgICAgICByZXN1bHRzOiB7Ci0gICAgICAgICAgICByZXN1bHRzOiAi
UmVzdWx0cyIsCi0gICAgICAgICAgICBncmFwaDogIkdyYXBoIiwKLSAgICAgICAgICAgIGpzb246
ICJKU09OIgotICAgICAgICB9CisgICAgICAgIGNvbXBsZXhpdHk6ICJDb21wbGV4aXR5IiwKKyAg
ICAgICAgZnJhbWVSYXRlOiAiRlBTIiwKKyAgICAgICAgbWVyZ2VkUmF3Q29tcGxleGl0eTogIk1l
cmdlZCByYXciLAorICAgICAgICBtZXJnZWRBdmVyYWdlQ29tcGxleGl0eTogIk1lcmdlZCBhdmVy
YWdlIiwKKyAgICAgICAgZ3JhcGg6ICJHcmFwaCIKICAgICB9LAogICAgIGpzb246IHsKICAgICAg
ICAgc2NvcmU6ICJzY29yZSIsCiAgICAgICAgIHNhbXBsZXM6ICJzYW1wbGVzIiwKKyAgICAgICAg
Y29tcGxleGl0eUF2ZXJhZ2VTYW1wbGVzOiAiY29tcGxleGl0eUF2ZXJhZ2VTYW1wbGVzIiwKICAg
ICAgICAgbWFya3M6ICJtYXJrcyIsCiAKICAgICAgICAgdGFyZ2V0RnJhbWVMZW5ndGg6ICJ0YXJn
ZXRGcmFtZUxlbmd0aCIsCkBAIC0zNiw2ICsyNSwxOSBAQCB2YXIgU3RyaW5ncyA9IHsKICAgICAg
ICAgICAgIGZyYW1lUmF0ZTogImZyYW1lUmF0ZSIKICAgICAgICAgfSwKIAorICAgICAgICByZWdy
ZXNzaW9uczogeworICAgICAgICAgICAgdGltZVJlZ3Jlc3Npb25zOiAidGltZVJlZ3Jlc3Npb25z
IiwKKyAgICAgICAgICAgIGNvbXBsZXhpdHk6ICJjb21wbGV4aXR5IiwKKyAgICAgICAgICAgIG1h
eENvbXBsZXhpdHk6ICJtYXhDb21wbGV4aXR5IiwKKyAgICAgICAgICAgIHN0YXJ0SW5kZXg6ICJz
dGFydEluZGV4IiwKKyAgICAgICAgICAgIGVuZEluZGV4OiAiZW5kSW5kZXgiLAorCisgICAgICAg
ICAgICBjb21wbGV4aXR5UmVncmVzc2lvbjogImNvbXBsZXhpdHlSZWdyZXNzaW9uIiwKKyAgICAg
ICAgICAgIGNvbXBsZXhpdHlBdmVyYWdlUmVncmVzc2lvbjogImNvbXBsZXhpdHlBdmVyYWdlUmVn
cmVzc2lvbiIsCisgICAgICAgICAgICBzZWdtZW50MTogInNlZ21lbnQxIiwKKyAgICAgICAgICAg
IHNlZ21lbnQyOiAic2VnbWVudDIiCisgICAgICAgIH0sCisKICAgICAgICAgbWVhc3VyZW1lbnRz
OiB7CiAgICAgICAgICAgICBhdmVyYWdlOiAiYXZlcmFnZSIsCiAgICAgICAgICAgICBjb25jZXJu
OiAiY29uY2VybiIsCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVz
dHMvcmVzb3VyY2VzL21haW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvdGVzdHMv
cmVzb3VyY2VzL21haW4uanMKaW5kZXggMDU2ZmY3YmRkMGM1NGQ1YjNjNWViYzg1MWJmYmU0Y2Q4
YzMzZjgzYy4uODU0MWNjNjg4NWYxMTA4NTZiMzc5MzIwN2I2OTg1YzFjNDE0YTMwMSAxMDA2NDQK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Rlc3RzL3Jlc291cmNlcy9tYWluLmpz
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci90ZXN0cy9yZXNvdXJjZXMvbWFpbi5q
cwpAQCAtNiw3ICs2LDggQEAgQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVDbGFzcygKICAg
ICAgICAgdGhpcy5fc3RhcnRUaW1lc3RhbXAgPSAwOwogICAgICAgICB0aGlzLl9lbmRUaW1lc3Rh
bXAgPSBvcHRpb25zWyJ0ZXN0LWludGVydmFsIl07CiAgICAgICAgIC8vIERlZmF1bHQgZGF0YSBz
ZXJpZXM6IHRpbWVzdGFtcCwgY29tcGxleGl0eSwgZXN0aW1hdGVkRnJhbWVMZW5ndGgKLSAgICAg
ICAgdGhpcy5fc2FtcGxlciA9IG5ldyBTYW1wbGVyKG9wdGlvbnNbInNlcmllcy1jb3VudCJdIHx8
IDMsICg2MCAqIG9wdGlvbnNbInRlc3QtaW50ZXJ2YWwiXSAvIDEwMDApLCB0aGlzKTsKKyAgICAg
ICAgdmFyIHNhbXBsZVNpemUgPSBvcHRpb25zWyJzYW1wbGUtY2FwYWNpdHkiXSB8fCAoNjAgKiBv
cHRpb25zWyJ0ZXN0LWludGVydmFsIl0gLyAxMDAwKTsKKyAgICAgICAgdGhpcy5fc2FtcGxlciA9
IG5ldyBTYW1wbGVyKG9wdGlvbnNbInNlcmllcy1jb3VudCJdIHx8IDMsIHNhbXBsZVNpemUsIHRo
aXMpOwogICAgICAgICB0aGlzLl9tYXJrcyA9IHt9OwogCiAgICAgICAgIHRoaXMuX2ZyYW1lTGVu
Z3RoRXN0aW1hdG9yID0gbmV3IFNpbXBsZUthbG1hbkVzdGltYXRvcihvcHRpb25zWyJrYWxtYW4t
cHJvY2Vzcy1lcnJvciJdLCBvcHRpb25zWyJrYWxtYW4tbWVhc3VyZW1lbnQtZXJyb3IiXSk7CkBA
IC0yNTgsNiArMjU5LDQyOCBAQCBBZGFwdGl2ZUNvbnRyb2xsZXIgPSBVdGlsaXRpZXMuY3JlYXRl
U3ViY2xhc3MoQ29udHJvbGxlciwKICAgICB9CiB9KTsKIAorUmVncmVzc2lvbiA9IFV0aWxpdGll
cy5jcmVhdGVDbGFzcygKKyAgICBmdW5jdGlvbihzYW1wbGVzLCBnZXRDb21wbGV4aXR5LCBnZXRG
cmFtZUxlbmd0aCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIG9wdGlvbnMpCisgICAgeworICAgICAg
ICB2YXIgc2xvcGUgPSB0aGlzLl9jYWxjdWxhdGVSZWdyZXNzaW9uKHNhbXBsZXMsIGdldENvbXBs
ZXhpdHksIGdldEZyYW1lTGVuZ3RoLCBzdGFydEluZGV4LCBlbmRJbmRleCwgeworICAgICAgICAg
ICAgc2hvdWxkQ2xpcDogdHJ1ZSwKKyAgICAgICAgICAgIHMxOiAxMDAwLzYwLAorICAgICAgICAg
ICAgdDE6IDAKKyAgICAgICAgfSk7CisgICAgICAgIHZhciBmbGF0ID0gdGhpcy5fY2FsY3VsYXRl
UmVncmVzc2lvbihzYW1wbGVzLCBnZXRDb21wbGV4aXR5LCBnZXRGcmFtZUxlbmd0aCwgc3RhcnRJ
bmRleCwgZW5kSW5kZXgsIHsKKyAgICAgICAgICAgIHNob3VsZENsaXA6IHRydWUsCisgICAgICAg
ICAgICB0MTogMCwKKyAgICAgICAgICAgIHQyOiAwCisgICAgICAgIH0pOworICAgICAgICB2YXIg
ZGVzaXJlZDsKKyAgICAgICAgaWYgKHNsb3BlLmVycm9yIDwgZmxhdC5lcnJvcikKKyAgICAgICAg
ICAgIGRlc2lyZWQgPSBzbG9wZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVzaXJlZCA9
IGZsYXQ7CisKKyAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCwg
ZW5kSW5kZXgpOworICAgICAgICB0aGlzLmVuZEluZGV4ID0gTWF0aC5tYXgoc3RhcnRJbmRleCwg
ZW5kSW5kZXgpOworCisgICAgICAgIHRoaXMuY29tcGxleGl0eSA9IGRlc2lyZWQuY29tcGxleGl0
eTsKKyAgICAgICAgdGhpcy5zMSA9IGRlc2lyZWQuczE7CisgICAgICAgIHRoaXMudDEgPSBkZXNp
cmVkLnQxOworICAgICAgICB0aGlzLnMyID0gZGVzaXJlZC5zMjsKKyAgICAgICAgdGhpcy50MiA9
IGRlc2lyZWQudDI7CisgICAgICAgIHRoaXMuZXJyb3IgPSBkZXNpcmVkLmVycm9yOworICAgIH0s
IHsKKworICAgIF9jYWxjdWxhdGVSZWdyZXNzaW9uOiBmdW5jdGlvbihzYW1wbGVzLCBnZXRDb21w
bGV4aXR5LCBnZXRGcmFtZUxlbmd0aCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIG9wdGlvbnMpCisg
ICAgeworICAgICAgICAvLyBBc3N1bWUgYSByZWdyZXNzaW9uIG1vZGVsIHdoZXJlIHRoZXJlIGlz
IGFuIGluZmxlY3Rpb24gcG9pbnQgYXQKKyAgICAgICAgLy8gY29tcGxleGl0eV9wcmltZSB3aGVy
ZSBGUFMgYmVnaW5zIGRlY3JlYXNpbmcgbGluZWFybHkuIFRoZSBwcm9ibGVtCisgICAgICAgIC8v
IHRoZW4gaXMKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTWluaW1pemUgc3VtIG9mICh5IC0gbSle
MgorICAgICAgICAvLyB3aGVyZSAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBzMSArIHQxKngg
ICAgICAgICAgICAgICAgIHdoZW4geCA8IGNvbXBsZXhpdHlfcHJpbWUKKyAgICAgICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gczIgKyB0Mip4ICAgICAgICAgICAgICAgICB3
aGVuIHggPj0gY29tcGxleGl0eV9wcmltZQorICAgICAgICAvLyAgICAgICBzMSArIHQxKmNvbXBs
ZXhpdHlfcHJpbWUgPSBzMiArIHQyKmNvbXBsZXhpdHlfcHJpbWUKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8geCBpcyBjb21wbGV4aXR5LCB5IGlzIGZwcy4gSW4gdGhpcyBmb3JtdWxhdGlvbiBzMSA9
IDYwZnBzIGFuZCB0MSA9IDAKKworICAgICAgICB2YXIgaXRlcmF0aW9uRGlyZWN0aW9uID0gZW5k
SW5kZXggPiBzdGFydEluZGV4ID8gMSA6IC0xOworICAgICAgICB2YXIgbG93Q29tcGxleGl0eSA9
IGdldENvbXBsZXhpdHkoc2FtcGxlcywgc3RhcnRJbmRleCk7CisgICAgICAgIHZhciBoaWdoQ29t
cGxleGl0eSA9IGdldENvbXBsZXhpdHkoc2FtcGxlcywgZW5kSW5kZXgpOworICAgICAgICB2YXIg
YTEgPSAwLCBiMSA9IDAsIGMxID0gMCwgZDEgPSAwLCBoMSA9IDAsIGsxID0gMDsKKyAgICAgICAg
dmFyIGEyID0gMCwgYjIgPSAwLCBjMiA9IDAsIGQyID0gMCwgaDIgPSAwLCBrMiA9IDA7CisKKyAg
ICAgICAgLy8gSXRlcmF0ZSBmcm9tIGxvdyB0byBoaWdoIGNvbXBsZXhpdHkKKyAgICAgICAgZm9y
ICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGl0ZXJhdGlvbkRpcmVjdGlvbiAqIChlbmRJbmRleCAtIGkp
ID4gLTE7IGkgKz0gaXRlcmF0aW9uRGlyZWN0aW9uKSB7CisgICAgICAgICAgICB2YXIgeCA9IGdl
dENvbXBsZXhpdHkoc2FtcGxlcywgaSk7CisgICAgICAgICAgICB2YXIgeSA9IGdldEZyYW1lTGVu
Z3RoKHNhbXBsZXMsIGkpOworICAgICAgICAgICAgdmFyIHh4ID0geCAqIHg7CisgICAgICAgICAg
ICB2YXIgeXggPSB5ICogeDsKKyAgICAgICAgICAgIHZhciB5eSA9IHkgKiB5OworICAgICAgICAg
ICAgYTIgKz0gMTsKKyAgICAgICAgICAgIGIyICs9IHg7CisgICAgICAgICAgICBjMiArPSB4eDsK
KyAgICAgICAgICAgIGQyICs9IHk7CisgICAgICAgICAgICBoMiArPSB5eDsKKyAgICAgICAgICAg
IGsyICs9IHl5OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHMxX2Jlc3QsIHQxX2Jlc3QsIHMy
X2Jlc3QsIHQyX2Jlc3QsIHhfYmVzdCwgZXJyb3JfYmVzdCwgeF9wcmltZTsKKworICAgICAgICBm
dW5jdGlvbiBzZXRfeF9iZXN0KHhfcHJpbWUsIHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghb3B0aW9ucy5zaG91bGRDbGlwIHx8ICh4X3ByaW1lID49IGxvd0NvbXBsZXhpdHkgJiYgeF9w
cmltZSA8PSBoaWdoQ29tcGxleGl0eSkpCisgICAgICAgICAgICAgICAgeF9iZXN0ID0geF9wcmlt
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIERpc2NvbnRpbnVvdXMg
cGllY2V3aXNlIHJlZ3Jlc3Npb24KKyAgICAgICAgICAgICAgICB4X2Jlc3QgPSB4OworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIHN0YXJ0SW5kZXgg
dG8gZW5kSW5kZXggLSAxLCBpbmNsdXNpdmUKKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5k
ZXg7IGl0ZXJhdGlvbkRpcmVjdGlvbiAqIChlbmRJbmRleCAtIGkpID4gMDsgaSArPSBpdGVyYXRp
b25EaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIHZhciB4ID0gZ2V0Q29tcGxleGl0eShzYW1wbGVz
LCBpKTsKKyAgICAgICAgICAgIHZhciB5ID0gZ2V0RnJhbWVMZW5ndGgoc2FtcGxlcywgaSk7Cisg
ICAgICAgICAgICB2YXIgeHggPSB4ICogeDsKKyAgICAgICAgICAgIHZhciB5eCA9IHkgKiB4Owor
ICAgICAgICAgICAgdmFyIHl5ID0geSAqIHk7CisgICAgICAgICAgICAvLyBhMSwgYjEsIGV0Yy4g
aXMgc3VtIGZyb20gc3RhcnRJbmRleCB0byBpLCBpbmNsdXNpdmUKKyAgICAgICAgICAgIGExICs9
IDE7CisgICAgICAgICAgICBiMSArPSB4OworICAgICAgICAgICAgYzEgKz0geHg7CisgICAgICAg
ICAgICBkMSArPSB5OworICAgICAgICAgICAgaDEgKz0geXg7CisgICAgICAgICAgICBrMSArPSB5
eTsKKyAgICAgICAgICAgIC8vIGEyLCBiMiwgZXRjLiBpcyBzdW0gZnJvbSBpKzEgdG8gZW5kSW5k
ZXgsIGluY2x1c2l2ZQorICAgICAgICAgICAgYTIgLT0gMTsKKyAgICAgICAgICAgIGIyIC09IHg7
CisgICAgICAgICAgICBjMiAtPSB4eDsKKyAgICAgICAgICAgIGQyIC09IHk7CisgICAgICAgICAg
ICBoMiAtPSB5eDsKKyAgICAgICAgICAgIGsyIC09IHl5OworCisgICAgICAgICAgICB2YXIgQSA9
IGMxKmQxIC0gYjEqaDE7CisgICAgICAgICAgICB2YXIgQiA9IGExKmgxIC0gYjEqZDE7CisgICAg
ICAgICAgICB2YXIgQyA9IGExKmMxIC0gYjEqYjE7CisgICAgICAgICAgICB2YXIgRCA9IGMyKmQy
IC0gYjIqaDI7CisgICAgICAgICAgICB2YXIgRSA9IGEyKmgyIC0gYjIqZDI7CisgICAgICAgICAg
ICB2YXIgRiA9IGEyKmMyIC0gYjIqYjI7CisgICAgICAgICAgICB2YXIgczEgPSBvcHRpb25zLnMx
ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnMxIDogKEEgLyBDKTsKKyAgICAgICAgICAgIHZhciB0
MSA9IG9wdGlvbnMudDEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudDEgOiAoQiAvIEMpOworICAg
ICAgICAgICAgdmFyIHMyID0gb3B0aW9ucy5zMiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zMiA6
IChEIC8gRik7CisgICAgICAgICAgICB2YXIgdDIgPSBvcHRpb25zLnQyICE9PSB1bmRlZmluZWQg
PyBvcHRpb25zLnQyIDogKEUgLyBGKTsKKyAgICAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUg
dHdvIHNlZ21lbnRzIG1lZXQKKyAgICAgICAgICAgIHZhciB4X3ByaW1lID0gKHMxIC0gczIpIC8g
KHQyIC0gdDEpOworCisgICAgICAgICAgICB2YXIgZXJyb3IxID0gKGsxICsgYTEqczEqczEgKyBj
MSp0MSp0MSAtIDIqZDEqczEgLSAyKmgxKnQxICsgMipiMSpzMSp0MSkgfHwgMDsKKyAgICAgICAg
ICAgIHZhciBlcnJvcjIgPSAoazIgKyBhMipzMipzMiArIGMyKnQyKnQyIC0gMipkMipzMiAtIDIq
aDIqdDIgKyAyKmIyKnMyKnQyKSB8fCAwOworCisgICAgICAgICAgICBpZiAoaSA9PSBzdGFydElu
ZGV4KSB7CisgICAgICAgICAgICAgICAgZXJyb3JfYmVzdCA9IGVycm9yMSArIGVycm9yMjsKKyAg
ICAgICAgICAgICAgICBzMV9iZXN0ID0gczE7CisgICAgICAgICAgICAgICAgdDFfYmVzdCA9IHQx
OworICAgICAgICAgICAgICAgIHMyX2Jlc3QgPSBzMjsKKyAgICAgICAgICAgICAgICB0Ml9iZXN0
ID0gdDI7CisgICAgICAgICAgICAgICAgc2V0X3hfYmVzdCh4X3ByaW1lLCB4KTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUHJvamVj
dGVkIHBvaW50IGlzIG5vdCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBuZXh0IHNhbXBsZQorICAgICAg
ICAgICAgaWYgKHhfcHJpbWUgPiBnZXRDb21wbGV4aXR5KHNhbXBsZXMsIGkgKyBpdGVyYXRpb25E
aXJlY3Rpb24pIHx8IHhfcHJpbWUgPCB4KSB7CisgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRl
IGxhbWJkYSwgd2hpY2ggZGl2aWRlcyB0aGUgd2VpZ2h0IG9mIHRoaXMgc2FtcGxlIGJldHdlZW4g
dGhlIHR3byBsaW5lcworCisgICAgICAgICAgICAgICAgLy8gVGhlc2UgdmFsdWVzIHJlbW92ZSB0
aGUgaW5mbHVlbmNlIG9mIHRoaXMgc2FtcGxlCisgICAgICAgICAgICAgICAgdmFyIEkgPSBjMSAt
IDIqYjEqeCArIGExKnh4OworICAgICAgICAgICAgICAgIHZhciBIID0gQyAtIEk7CisgICAgICAg
ICAgICAgICAgdmFyIEcgPSBBICsgQip4IC0gQyp5OworCisgICAgICAgICAgICAgICAgdmFyIEog
PSBEICsgRSp4IC0gRip5OworICAgICAgICAgICAgICAgIHZhciBLID0gYzIgLSAyKmIyKnggKyBh
Mip4eDsKKworICAgICAgICAgICAgICAgIHZhciBsYW1iZGEgPSAoRypGICsgRypLIC0gSCpKKSAv
IChJKkogKyBHKkspOworICAgICAgICAgICAgICAgIGlmIChsYW1iZGEgPiAwICYmIGxhbWJkYSA8
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxhbWJkYTEgPSAxIC0gbGFtYmRhOworICAg
ICAgICAgICAgICAgICAgICBzMSA9IG9wdGlvbnMuczEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMu
czEgOiAoKEEgLSBsYW1iZGExKigtaDEqeCArIGQxKnh4ICsgYzEqeSAtIGIxKnl4KSkgLyAoQyAt
IGxhbWJkYTEqSSkpOworICAgICAgICAgICAgICAgICAgICB0MSA9IG9wdGlvbnMudDEgIT09IHVu
ZGVmaW5lZCA/IG9wdGlvbnMudDEgOiAoKEIgLSBsYW1iZGExKihoMSAtIGQxKnggLSBiMSp5ICsg
YTEqeXgpKSAvIChDIC0gbGFtYmRhMSpJKSk7CisgICAgICAgICAgICAgICAgICAgIHMyID0gb3B0
aW9ucy5zMiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zMiA6ICgoRCArIGxhbWJkYTEqKC1oMip4
ICsgZDIqeHggKyBjMip5IC0gYjIqeXgpKSAvIChGICsgbGFtYmRhMSpLKSk7CisgICAgICAgICAg
ICAgICAgICAgIHQyID0gb3B0aW9ucy50MiAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50MiA6ICgo
RSArIGxhbWJkYTEqKGgyIC0gZDIqeCAtIGIyKnkgKyBhMip5eCkpIC8gKEYgKyBsYW1iZGExKksp
KTsKKyAgICAgICAgICAgICAgICAgICAgeF9wcmltZSA9IChzMSAtIHMyKSAvICh0MiAtIHQxKTsK
KworICAgICAgICAgICAgICAgICAgICBlcnJvcjEgPSAoKGsxICsgYTEqczEqczEgKyBjMSp0MSp0
MSAtIDIqZDEqczEgLSAyKmgxKnQxICsgMipiMSpzMSp0MSkgLSBsYW1iZGExICogTWF0aC5wb3co
eSAtIChzMSArIHQxKngpLCAyKSkgfHwgMDsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IyID0g
KChrMiArIGEyKnMyKnMyICsgYzIqdDIqdDIgLSAyKmQyKnMyIC0gMipoMip0MiArIDIqYjIqczIq
dDIpICsgbGFtYmRhMSAqIE1hdGgucG93KHkgLSAoczIgKyB0Mip4KSwgMikpIHx8IDA7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXJyb3IxICsg
ZXJyb3IyIDwgZXJyb3JfYmVzdCkgeworICAgICAgICAgICAgICAgIGVycm9yX2Jlc3QgPSBlcnJv
cjEgKyBlcnJvcjI7CisgICAgICAgICAgICAgICAgczFfYmVzdCA9IHMxOworICAgICAgICAgICAg
ICAgIHQxX2Jlc3QgPSB0MTsKKyAgICAgICAgICAgICAgICBzMl9iZXN0ID0gczI7CisgICAgICAg
ICAgICAgICAgdDJfYmVzdCA9IHQyOworICAgICAgICAgICAgICAgIHNldF94X2Jlc3QoeF9wcmlt
ZSwgeCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgY29tcGxleGl0eTogeF9iZXN0LAorICAgICAgICAgICAgczE6IHMxX2Jlc3QsCisg
ICAgICAgICAgICB0MTogdDFfYmVzdCwKKyAgICAgICAgICAgIHMyOiBzMl9iZXN0LAorICAgICAg
ICAgICAgdDI6IHQyX2Jlc3QsCisgICAgICAgICAgICBlcnJvcjogZXJyb3JfYmVzdAorICAgICAg
ICB9OworICAgIH0KK30pOworCitSYW1wQ29udHJvbGxlciA9IFV0aWxpdGllcy5jcmVhdGVTdWJj
bGFzcyhDb250cm9sbGVyLAorICAgIGZ1bmN0aW9uKGJlbmNobWFyaywgb3B0aW9ucykKKyAgICB7
CisgICAgICAgIC8vIFRoZSB0aWVyIHdhcm11cCB0YWtlcyBhdCBtb3N0IDUgc2Vjb25kcworICAg
ICAgICBvcHRpb25zWyJzYW1wbGUtY2FwYWNpdHkiXSA9IChvcHRpb25zWyJ0ZXN0LWludGVydmFs
Il0gLyAxMDAwICsgNSkgKiA2MDsKKyAgICAgICAgQ29udHJvbGxlci5jYWxsKHRoaXMsIGJlbmNo
bWFyaywgb3B0aW9ucyk7CisKKyAgICAgICAgLy8gSW5pdGlhbGx5IHN0YXJ0IHdpdGggYSB0aWVy
IHRlc3QgdG8gZmluZCB0aGUgYm91bmRzCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2Ygb2JqZWN0
cyBpbiBhIHRpZXIgdGVzdCBpcyAxMF58X3RpZXJ8CisgICAgICAgIHRoaXMuX3RpZXIgPSAwOwor
ICAgICAgICAvLyBUaGUgdGltZXN0YW1wIGlzIGZpcnN0IHNldCBhZnRlciB0aGUgZmlyc3QgaW50
ZXJ2YWwgY29tcGxldGVzCisgICAgICAgIHRoaXMuX3RpZXJTdGFydFRpbWVzdGFtcCA9IDA7Cisg
ICAgICAgIC8vIElmIHRoZSBlbmdpbmUgY2FuIGhhbmRsZSB0aGUgdGllcidzIGNvbXBsZXhpdHkg
YXQgNjAgRlBTLCB0ZXN0IGZvciBhIHNob3J0CisgICAgICAgIC8vIHBlcmlvZCwgdGhlbiBtb3Zl
IG9uIHRvIHRoZSBuZXh0IHRpZXIKKyAgICAgICAgdGhpcy5fdGllckZhc3RUZXN0TGVuZ3RoID0g
MjUwOworICAgICAgICAvLyBJZiB0aGUgZW5naW5lIGlzIHVuZGVyIHN0cmVzcywgbGV0IHRoZSB0
ZXN0IHJ1biBhIGxpdHRsZSBsb25nZXIgdG8gbGV0CisgICAgICAgIC8vIHRoZSBtZWFzdXJlbWVu
dCBzZXR0bGUKKyAgICAgICAgdGhpcy5fdGllclNsb3dUZXN0TGVuZ3RoID0gNzUwOworICAgICAg
ICB0aGlzLl9tYXhpbXVtQ29tcGxleGl0eSA9IDA7CisgICAgICAgIHRoaXMuX21pbmltdW1UaWVy
ID0gMDsKKworICAgICAgICAvLyBBZnRlciB0aGUgdGllciByYW5nZSBpcyBkZXRlcm1pbmVkLCBm
aWd1cmUgb3V0IHRoZSBudW1iZXIgb2YgcmFtcCBpdGVyYXRpb25zCisgICAgICAgIHZhciBtaW5p
bXVtUmFtcExlbmd0aCA9IDMwMDA7CisgICAgICAgIHZhciB0b3RhbFJhbXBJdGVyYXRpb25zID0g
TWF0aC5tYXgoMSwgTWF0aC5mbG9vcih0aGlzLl9lbmRUaW1lc3RhbXAgLyBtaW5pbXVtUmFtcExl
bmd0aCkpOworICAgICAgICAvLyBHaXZlIGEgbGl0dGxlIGV4dHJhIHJvb20gdG8gcnVuIHNpbmNl
IHRoZSByYW1wcyB3b24ndCBiZSBleGFjdGx5IHRoaXMgbGVuZ3RoCisgICAgICAgIHRoaXMuX3Jh
bXBMZW5ndGggPSBNYXRoLmZsb29yKCh0aGlzLl9lbmRUaW1lc3RhbXAgLSB0b3RhbFJhbXBJdGVy
YXRpb25zICogdGhpcy5faW50ZXJ2YWxMZW5ndGgpIC8gdG90YWxSYW1wSXRlcmF0aW9ucyk7Cisg
ICAgICAgIHRoaXMuX3JhbXBXYXJtdXBMZW5ndGggPSAyMDA7CisgICAgICAgIHRoaXMuX3JhbXBE
aWRXYXJtdXAgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmFtcFJlZ3Jlc3Npb25zID0gW107CisK
KyAgICAgICAgLy8gQWRkIHNvbWUgdG9sZXJhbmNlOyBmcmFtZSBsZW5ndGhzIHNob3J0ZXIgdGhh
biB0aGlzIGFyZSBjb25zaWRlcmVkIHRvIGJlIEAgNjAgZnBzCisgICAgICAgIHRoaXMuX2ZwczYw
VGhyZXNob2xkID0gMTAwMC81ODsKKyAgICAgICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBj
b21wbGV4aXR5IHRoYXQgd2lsbCBnZXQgdXMgYXQgbGVhc3QgYXMgc2xvdyB0aGlzIHRocmVzaG9s
ZAorICAgICAgICB0aGlzLl9mcHNMb3dlc3RUaHJlc2hvbGQgPSAxMDAwLzMwOworCisgICAgICAg
IHRoaXMuX2ZpbmlzaGVkVGllclNhbXBsaW5nID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3N0YXJ0
ZWRSYW1wcyA9IGZhbHNlOworICAgICAgICB0aGlzLl9jb21wbGV4aXR5UHJpbWUgPSBuZXcgRXhw
ZXJpbWVudDsKKyAgICB9LCB7CisKKyAgICBzdGFydDogZnVuY3Rpb24oc3RhcnRUaW1lc3RhbXAs
IHN0YWdlKQorICAgIHsKKyAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuc3RhcnQuY2FsbCh0
aGlzLCBzdGFydFRpbWVzdGFtcCwgc3RhZ2UpOworICAgICAgICB0aGlzLl9yYW1wU3RhcnRUaW1l
c3RhbXAgPSAwOworICAgIH0sCisKKyAgICBkaWRGaW5pc2hJbnRlcnZhbDogZnVuY3Rpb24odGlt
ZXN0YW1wLCBzdGFnZSwgaW50ZXJ2YWxBdmVyYWdlRnJhbWVMZW5ndGgpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX2ZpbmlzaGVkVGllclNhbXBsaW5nKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fdGllclN0YXJ0VGltZXN0YW1wID4gMCAmJiB0aW1lc3RhbXAgPCB0aGlzLl90aWVyU3RhcnRU
aW1lc3RhbXAgKyB0aGlzLl90aWVyRmFzdFRlc3RMZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICB2YXIgY3VycmVudENvbXBsZXhpdHkgPSBzdGFnZS5jb21wbGV4
aXR5KCk7CisgICAgICAgICAgICB2YXIgY3VycmVudEZyYW1lTGVuZ3RoID0gdGhpcy5fZnJhbWVM
ZW5ndGhFc3RpbWF0b3IuZXN0aW1hdGU7CisgICAgICAgICAgICBpZiAoY3VycmVudEZyYW1lTGVu
Z3RoIDwgdGhpcy5fZnBzTG93ZXN0VGhyZXNob2xkKSB7CisgICAgICAgICAgICAgICAgdmFyIGlz
QW5pbWF0aW5nQXQ2MEZQUyA9IGN1cnJlbnRGcmFtZUxlbmd0aCA8IHRoaXMuX2ZwczYwVGhyZXNo
b2xkOworICAgICAgICAgICAgICAgIHZhciBoYXNGaW5pc2hlZFNsb3dUaWVyVGVzdCA9IHRpbWVz
dGFtcCA+IHRoaXMuX3RpZXJTdGFydFRpbWVzdGFtcCArIHRoaXMuX3RpZXJTbG93VGVzdExlbmd0
aDsKKworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG1lYXN1cmluZyBhdCA2MCBmcHMsIHNvIHF1
aWNrbHkgbW92ZSBvbiB0byB0aGUgbmV4dCB0aWVyLCBvcgorICAgICAgICAgICAgICAgIC8vIHdl
J3ZlIHNsb3dlciB0aGFuIDYwIGZwcywgYnV0IHdlJ3ZlIGxldCB0aGlzIHRpZXIgcnVuIGxvbmcg
ZW5vdWdoIHRvCisgICAgICAgICAgICAgICAgLy8gZ2V0IGFuIGVzdGltYXRlCisgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnRGcmFtZUxlbmd0aCA8IHRoaXMuX2ZwczYwVGhyZXNob2xkIHx8IHRp
bWVzdGFtcCA+IHRoaXMuX3RpZXJTdGFydFRpbWVzdGFtcCArIHRoaXMuX3RpZXJTbG93VGVzdExl
bmd0aCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0Q29tcGxleGl0eSA9IGN1cnJl
bnRDb21wbGV4aXR5OworICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RnJhbWVMZW5ndGgg
PSBjdXJyZW50RnJhbWVMZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGllclN0
YXJ0VGltZXN0YW1wID0gdGltZXN0YW1wOworICAgICAgICAgICAgICAgICAgICB0aGlzLl90aWVy
ICs9IC41OworICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRpZXJDb21wbGV4aXR5ID0gTWF0
aC5yb3VuZChNYXRoLnBvdygxMCwgdGhpcy5fdGllcikpOworICAgICAgICAgICAgICAgICAgICB0
aGlzLm1hcmsoIkNvbXBsZXhpdHk6ICIgKyBuZXh0VGllckNvbXBsZXhpdHksIHRpbWVzdGFtcCk7
CisKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2UudHVuZShuZXh0VGllckNvbXBsZXhpdHkgLSBj
dXJyZW50Q29tcGxleGl0eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZXN0YW1wIDwgdGhpcy5fdGllclN0YXJ0
VGltZXN0YW1wICsgdGhpcy5fdGllclNsb3dUZXN0TGVuZ3RoKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgdGhpcy5fZmluaXNoZWRUaWVyU2FtcGxpbmcgPSB0cnVlOwor
ICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSB0ZXN0IGxlbmd0aCBzbyB0aGF0IHRoZSBmdWxsIHRl
c3QgbGVuZ3RoIGlzIG1hZGUgb2YgdGhlIHJhbXBzCisgICAgICAgICAgICB0aGlzLl9lbmRUaW1l
c3RhbXAgKz0gdGltZXN0YW1wOworICAgICAgICAgICAgdGhpcy5tYXJrKFN0cmluZ3MuanNvbi5z
YW1wbGluZ1N0YXJ0VGltZU9mZnNldCwgdGltZXN0YW1wKTsKKworICAgICAgICAgICAgLy8gU29t
ZXRpbWVzIHRoaXMgbGFzdCB0aWVyIHdpbGwgZHJvcCB0aGUgZnJhbWUgbGVuZ3RoIHdlbGwgYmVs
b3cgdGhlIHRocmVzaG9sZAorICAgICAgICAgICAgLy8gQXZvaWQgZ29pbmcgZG93biB0aGF0IGZh
ciBzaW5jZSBpdCBtZWFucyBmZXdlciBtZWFzdXJlbWVudHMgYXJlIHRha2VuIGluIHRoZSA2MCBm
cHMgYXJlYQorICAgICAgICAgICAgLy8gSW50ZXJwb2xhdGUgYSBtYXhpbXVtIGNvbXBsZXhpdHkg
dGhhdCBnZXRzIHVzIGFyb3VuZCB0aGUgbG93ZXN0IHRocmVzaG9sZAorICAgICAgICAgICAgdGhp
cy5fbWF4aW11bUNvbXBsZXhpdHkgPSBNYXRoLmZsb29yKHRoaXMuX2xhc3RDb21wbGV4aXR5ICsg
KHRoaXMuX2Zwc0xvd2VzdFRocmVzaG9sZCAtIHRoaXMuX2xhc3RGcmFtZUxlbmd0aCkgLyAoY3Vy
cmVudEZyYW1lTGVuZ3RoIC0gdGhpcy5fbGFzdEZyYW1lTGVuZ3RoKSAqIChjdXJyZW50Q29tcGxl
eGl0eSAtIHRoaXMuX2xhc3RDb21wbGV4aXR5KSk7CisgICAgICAgICAgICBzdGFnZS50dW5lKHRo
aXMuX21heGltdW1Db21wbGV4aXR5IC0gY3VycmVudENvbXBsZXhpdHkpOworICAgICAgICAgICAg
dGhpcy5fcmFtcFN0YXJ0VGltZXN0YW1wID0gdGltZXN0YW1wOworICAgICAgICAgICAgdGhpcy5f
cmFtcERpZFdhcm11cCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5pc0ZyYW1lTGVuZ3RoRXN0
aW1hdG9yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWxDb3VudCA9
IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHRpbWVz
dGFtcCAtIHRoaXMuX3JhbXBTdGFydFRpbWVzdGFtcCkgPCB0aGlzLl9yYW1wV2FybXVwTGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBlbHNlIGlmICghdGhpcy5fcmFtcERpZFdh
cm11cCkgeworICAgICAgICAgICAgdGhpcy5fcmFtcERpZFdhcm11cCA9IHRydWU7CisgICAgICAg
ICAgICB0aGlzLl9jdXJyZW50UmFtcExlbmd0aCA9IHRoaXMuX3JhbXBTdGFydFRpbWVzdGFtcCAr
IHRoaXMuX3JhbXBMZW5ndGggLSB0aW1lc3RhbXA7CisgICAgICAgICAgICAvLyBTdGFydCB0aW1l
c3RhbXAgcmVwcmVzZW50cyBzdGFydCBvZiByYW1wIGRvd24sIGFmdGVyIHdhcm0gdXAKKyAgICAg
ICAgICAgIHRoaXMuX3JhbXBTdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICAgICAgICAg
IHRoaXMuX3JhbXBTdGFydEluZGV4ID0gdGhpcy5fc2FtcGxlci5zYW1wbGVDb3VudDsKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICB0dW5lOiBmdW5jdGlvbih0aW1lc3RhbXAsIHN0YWdlLCBkaWRG
aW5pc2hJbnRlcnZhbCkKKyAgICB7CisgICAgICAgIGlmICghZGlkRmluaXNoSW50ZXJ2YWwgfHwg
IXRoaXMuX3JhbXBEaWRXYXJtdXApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IHByb2dyZXNzID0gKHRpbWVzdGFtcCAtIHRoaXMuX3JhbXBTdGFydFRpbWVzdGFtcCkgLyB0aGlz
Ll9jdXJyZW50UmFtcExlbmd0aDsKKyAgICAgICAgdmFyIGRlc2lyZWRDb21wbGV4aXR5ID0gc3Rh
Z2UuY29tcGxleGl0eSgpOworICAgICAgICBpZiAocHJvZ3Jlc3MgPj0gMSkgeworICAgICAgICAg
ICAgdmFyIHJlZ3Jlc3Npb24gPSBuZXcgUmVncmVzc2lvbih0aGlzLl9zYW1wbGVyLnNhbXBsZXMs
IHRoaXMuX2dldENvbXBsZXhpdHksIHRoaXMuX2dldEZyYW1lTGVuZ3RoLAorICAgICAgICAgICAg
ICAgIHRoaXMuX3NhbXBsZXIuc2FtcGxlQ291bnQgLSAxLCB0aGlzLl9yYW1wU3RhcnRJbmRleCk7
CisgICAgICAgICAgICB0aGlzLl9yYW1wUmVncmVzc2lvbnMucHVzaChyZWdyZXNzaW9uKTsKKwor
ICAgICAgICAgICAgdGhpcy5fY29tcGxleGl0eVByaW1lLnNhbXBsZShyZWdyZXNzaW9uLmNvbXBs
ZXhpdHkpOworICAgICAgICAgICAgdGhpcy5fbWF4aW11bUNvbXBsZXhpdHkgPSBNYXRoLm1heCg1
LCBNYXRoLnJvdW5kKHRoaXMuX2NvbXBsZXhpdHlQcmltZS5tZWFuKCkgKiAyKSk7CisKKyAgICAg
ICAgICAgIC8vIE5leHQgcmFtcAorICAgICAgICAgICAgZGVzaXJlZENvbXBsZXhpdHkgPSB0aGlz
Ll9tYXhpbXVtQ29tcGxleGl0eTsKKyAgICAgICAgICAgIHRoaXMuX3JhbXBEaWRXYXJtdXAgPSBm
YWxzZTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVzdGFtcCByZXByZXNlbnRzIHN0YXJ0IG9m
IHJhbXAgaXRlcmF0aW9uIGFuZCB3YXJtIHVwCisgICAgICAgICAgICB0aGlzLl9yYW1wU3RhcnRU
aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZGVzaXJl
ZENvbXBsZXhpdHkgPSBNYXRoLnJvdW5kKCgxIC0gcHJvZ3Jlc3MpICogdGhpcy5fbWF4aW11bUNv
bXBsZXhpdHkpOworCisgICAgICAgIHN0YWdlLnR1bmUoZGVzaXJlZENvbXBsZXhpdHkgLSBzdGFn
ZS5jb21wbGV4aXR5KCkpOworICAgIH0sCisKKyAgICBfZ2V0Q29tcGxleGl0eTogZnVuY3Rpb24o
c2FtcGxlcywgaSkgeworICAgICAgICByZXR1cm4gc2FtcGxlc1sxXVtpXTsKKyAgICB9LAorCisg
ICAgX2dldEZyYW1lTGVuZ3RoOiBmdW5jdGlvbihzYW1wbGVzLCBpKSB7CisgICAgICAgIHJldHVy
biBzYW1wbGVzWzBdW2ldIC0gc2FtcGxlc1swXVtpIC0gMV07CisgICAgfSwKKworICAgIHByb2Nl
c3NTYW1wbGVzOiBmdW5jdGlvbihyZXN1bHRzKQorICAgIHsKKyAgICAgICAgQ29udHJvbGxlci5w
cm90b3R5cGUucHJvY2Vzc1NhbXBsZXMuY2FsbCh0aGlzLCByZXN1bHRzKTsKKworICAgICAgICAv
LyBIYXZlIHNhbXBsaW5nVGltZU9mZnNldCByZXByZXNlbnQgdGltZSAwCisgICAgICAgIHZhciBz
dGFydFRpbWVzdGFtcCA9IHRoaXMuX21hcmtzW1N0cmluZ3MuanNvbi5zYW1wbGluZ1N0YXJ0VGlt
ZU9mZnNldF0udGltZTsKKyAgICAgICAgcmVzdWx0c1tTdHJpbmdzLmpzb24uc2FtcGxlc10uZm9y
RWFjaChmdW5jdGlvbihzYW1wbGUpIHsKKyAgICAgICAgICAgIHNhbXBsZS50aW1lIC09IHN0YXJ0
VGltZXN0YW1wOworICAgICAgICB9KTsKKyAgICAgICAgZm9yICh2YXIgbWFya05hbWUgaW4gcmVz
dWx0c1tTdHJpbmdzLmpzb24ubWFya3NdKSB7CisgICAgICAgICAgICByZXN1bHRzW1N0cmluZ3Mu
anNvbi5tYXJrc11bbWFya05hbWVdLnRpbWUgLT0gc3RhcnRUaW1lc3RhbXA7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgc2FtcGxlcyA9IHJlc3VsdHNbU3RyaW5ncy5qc29uLnNhbXBsZXNdOwor
ICAgICAgICByZXN1bHRzW1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy50aW1lUmVncmVzc2lvbnNd
ID0gW107CisgICAgICAgIHZhciBjb21wbGV4aXR5UmVncmVzc2lvblNhbXBsZXMgPSBbXTsKKyAg
ICAgICAgdmFyIHRpbWVDb21wbGV4aXR5U2NvcmUgPSBuZXcgRXhwZXJpbWVudDsKKyAgICAgICAg
dGhpcy5fcmFtcFJlZ3Jlc3Npb25zLmZvckVhY2goZnVuY3Rpb24ocmFtcCkgeworICAgICAgICAg
ICAgdmFyIHN0YXJ0SW5kZXggPSByYW1wLnN0YXJ0SW5kZXgsIGVuZEluZGV4ID0gcmFtcC5lbmRJ
bmRleDsKKyAgICAgICAgICAgIHZhciBzdGFydFRpbWUgPSBzYW1wbGVzW3N0YXJ0SW5kZXhdLnRp
bWUsIGVuZFRpbWUgPSBzYW1wbGVzW2VuZEluZGV4XS50aW1lOworICAgICAgICAgICAgdmFyIHN0
YXJ0Q29tcGxleGl0eSA9IHNhbXBsZXNbc3RhcnRJbmRleF0uY29tcGxleGl0eSwgZW5kQ29tcGxl
eGl0eSA9IHNhbXBsZXNbZW5kSW5kZXhdLmNvbXBsZXhpdHk7CisKKyAgICAgICAgICAgIHRpbWVD
b21wbGV4aXR5U2NvcmUuc2FtcGxlKHJhbXAuY29tcGxleGl0eSk7CisKKyAgICAgICAgICAgIHZh
ciByZWdyZXNzaW9uID0ge307CisgICAgICAgICAgICByZXN1bHRzW1N0cmluZ3MuanNvbi5yZWdy
ZXNzaW9ucy50aW1lUmVncmVzc2lvbnNdLnB1c2gocmVncmVzc2lvbik7CisKKyAgICAgICAgICAg
IHZhciBwZXJjZW50YWdlID0gKHJhbXAuY29tcGxleGl0eSAtIHN0YXJ0Q29tcGxleGl0eSkgLyAo
ZW5kQ29tcGxleGl0eSAtIHN0YXJ0Q29tcGxleGl0eSk7CisgICAgICAgICAgICB2YXIgaW5mbGVj
dGlvblRpbWUgPSBzdGFydFRpbWUgKyBwZXJjZW50YWdlICogKGVuZFRpbWUgLSBzdGFydFRpbWUp
OworCisgICAgICAgICAgICByZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5zZWdt
ZW50MV0gPSBbCisgICAgICAgICAgICAgICAgW3N0YXJ0VGltZSwgcmFtcC5zMiArIHJhbXAudDIg
KiBzdGFydENvbXBsZXhpdHldLAorICAgICAgICAgICAgICAgIFtpbmZsZWN0aW9uVGltZSwgcmFt
cC5zMiArIHJhbXAudDIgKiByYW1wLmNvbXBsZXhpdHldCisgICAgICAgICAgICBdOworICAgICAg
ICAgICAgcmVncmVzc2lvbltTdHJpbmdzLmpzb24ucmVncmVzc2lvbnMuc2VnbWVudDJdID0gWwor
ICAgICAgICAgICAgICAgIFtpbmZsZWN0aW9uVGltZSwgcmFtcC5zMSArIHJhbXAudDEgKiByYW1w
LmNvbXBsZXhpdHldLAorICAgICAgICAgICAgICAgIFtlbmRUaW1lLCByYW1wLnMxICsgcmFtcC50
MSAqIGVuZENvbXBsZXhpdHldCisgICAgICAgICAgICBdOworICAgICAgICAgICAgcmVncmVzc2lv
bltTdHJpbmdzLmpzb24ucmVncmVzc2lvbnMuY29tcGxleGl0eV0gPSByYW1wLmNvbXBsZXhpdHk7
CisgICAgICAgICAgICByZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5tYXhDb21w
bGV4aXR5XSA9IE1hdGgubWF4KHN0YXJ0Q29tcGxleGl0eSwgZW5kQ29tcGxleGl0eSk7CisgICAg
ICAgICAgICByZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5zdGFydEluZGV4XSA9
IHN0YXJ0SW5kZXg7CisgICAgICAgICAgICByZWdyZXNzaW9uW1N0cmluZ3MuanNvbi5yZWdyZXNz
aW9ucy5lbmRJbmRleF0gPSBlbmRJbmRleDsKKworICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0
YXJ0SW5kZXg7IGogPD0gZW5kSW5kZXg7ICsraikKKyAgICAgICAgICAgICAgICBjb21wbGV4aXR5
UmVncmVzc2lvblNhbXBsZXMucHVzaChzYW1wbGVzW2pdKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gQWdncmVnYXRlIGFsbCBvZiB0aGUgcmFtcHMgaW50byBvbmUgYmlnIGRhdGFzZXQgYW5k
IGNhbGN1bGF0ZSBhIHJlZ3Jlc3Npb24gZnJvbSB0aGlzCisgICAgICAgIGNvbXBsZXhpdHlSZWdy
ZXNzaW9uU2FtcGxlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBh
LmNvbXBsZXhpdHkgLSBiLmNvbXBsZXhpdHk7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIFNh
bXBsZXMgYXZlcmFnZWQgYmFzZWQgb24gY29tcGxleGl0eQorICAgICAgICByZXN1bHRzW1N0cmlu
Z3MuanNvbi5jb21wbGV4aXR5QXZlcmFnZVNhbXBsZXNdID0gW107CisgICAgICAgIHZhciBjdXJy
ZW50Q29tcGxleGl0eSA9IC0xOworICAgICAgICB2YXIgZXhwZXJpbWVudEF0Q29tcGxleGl0eTsK
KyAgICAgICAgZnVuY3Rpb24gYWRkU2FtcGxlKCkgeworICAgICAgICAgICAgcmVzdWx0c1tTdHJp
bmdzLmpzb24uY29tcGxleGl0eUF2ZXJhZ2VTYW1wbGVzXS5wdXNoKHsKKyAgICAgICAgICAgICAg
ICBjb21wbGV4aXR5OiBjdXJyZW50Q29tcGxleGl0eSwKKyAgICAgICAgICAgICAgICBmcmFtZUxl
bmd0aDogZXhwZXJpbWVudEF0Q29tcGxleGl0eS5tZWFuKCksCisgICAgICAgICAgICAgICAgc3Rk
ZXY6IGV4cGVyaW1lbnRBdENvbXBsZXhpdHkuc3RhbmRhcmREZXZpYXRpb24oKSwKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIGNvbXBsZXhpdHlSZWdyZXNzaW9uU2FtcGxlcy5m
b3JFYWNoKGZ1bmN0aW9uKHNhbXBsZSkgeworICAgICAgICAgICAgaWYgKHNhbXBsZS5jb21wbGV4
aXR5ICE9IGN1cnJlbnRDb21wbGV4aXR5KSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRD
b21wbGV4aXR5ID4gLTEpCisgICAgICAgICAgICAgICAgICAgIGFkZFNhbXBsZSgpOworCisgICAg
ICAgICAgICAgICAgY3VycmVudENvbXBsZXhpdHkgPSBzYW1wbGUuY29tcGxleGl0eTsKKyAgICAg
ICAgICAgICAgICBleHBlcmltZW50QXRDb21wbGV4aXR5ID0gbmV3IEV4cGVyaW1lbnQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBleHBlcmltZW50QXRDb21wbGV4aXR5LnNhbXBsZShzYW1w
bGUuZnJhbWVMZW5ndGgpOworICAgICAgICB9KTsKKyAgICAgICAgLy8gRmluaXNoIG9mZiB0aGUg
bGFzdCBvbmUKKyAgICAgICAgYWRkU2FtcGxlKCk7CisKKyAgICAgICAgZnVuY3Rpb24gY2FsY3Vs
YXRlUmVncmVzc2lvbihzYW1wbGVzLCBrZXkpIHsKKyAgICAgICAgICAgIHZhciBjb21wbGV4aXR5
UmVncmVzc2lvbiA9IG5ldyBSZWdyZXNzaW9uKAorICAgICAgICAgICAgICAgIHNhbXBsZXMsCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKHNhbXBsZXMsIGkpIHsgcmV0dXJuIHNhbXBsZXNbaV0u
Y29tcGxleGl0eTsgfSwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAoc2FtcGxlcywgaSkgeyBy
ZXR1cm4gc2FtcGxlc1tpXS5mcmFtZUxlbmd0aDsgfSwKKyAgICAgICAgICAgICAgICAwLCBzYW1w
bGVzLmxlbmd0aCAtIDEKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICB2YXIgbWluQ29tcGxl
eGl0eSA9IHNhbXBsZXNbMF0uY29tcGxleGl0eTsKKyAgICAgICAgICAgIHZhciBtYXhDb21wbGV4
aXR5ID0gc2FtcGxlc1tzYW1wbGVzLmxlbmd0aCAtIDFdLmNvbXBsZXhpdHk7CisgICAgICAgICAg
ICB2YXIgcmVncmVzc2lvbiA9IHt9OworICAgICAgICAgICAgcmVzdWx0c1trZXldID0gcmVncmVz
c2lvbjsKKyAgICAgICAgICAgIHJlZ3Jlc3Npb25bU3RyaW5ncy5qc29uLnJlZ3Jlc3Npb25zLnNl
Z21lbnQxXSA9IFsKKyAgICAgICAgICAgICAgICBbbWluQ29tcGxleGl0eSwgY29tcGxleGl0eVJl
Z3Jlc3Npb24uczEgKyBjb21wbGV4aXR5UmVncmVzc2lvbi50MSAqIG1pbkNvbXBsZXhpdHldLAor
ICAgICAgICAgICAgICAgIFtjb21wbGV4aXR5UmVncmVzc2lvbi5jb21wbGV4aXR5LCBjb21wbGV4
aXR5UmVncmVzc2lvbi5zMSArIGNvbXBsZXhpdHlSZWdyZXNzaW9uLnQxICogY29tcGxleGl0eVJl
Z3Jlc3Npb24uY29tcGxleGl0eV0KKyAgICAgICAgICAgIF07CisgICAgICAgICAgICByZWdyZXNz
aW9uW1N0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5zZWdtZW50Ml0gPSBbCisgICAgICAgICAgICAg
ICAgW2NvbXBsZXhpdHlSZWdyZXNzaW9uLmNvbXBsZXhpdHksIGNvbXBsZXhpdHlSZWdyZXNzaW9u
LnMyICsgY29tcGxleGl0eVJlZ3Jlc3Npb24udDIgKiBjb21wbGV4aXR5UmVncmVzc2lvbi5jb21w
bGV4aXR5XSwKKyAgICAgICAgICAgICAgICBbbWF4Q29tcGxleGl0eSwgY29tcGxleGl0eVJlZ3Jl
c3Npb24uczIgKyBjb21wbGV4aXR5UmVncmVzc2lvbi50MiAqIG1heENvbXBsZXhpdHldCisgICAg
ICAgICAgICBdOworICAgICAgICAgICAgcmVncmVzc2lvbltTdHJpbmdzLmpzb24ucmVncmVzc2lv
bnMuY29tcGxleGl0eV0gPSBjb21wbGV4aXR5UmVncmVzc2lvbi5jb21wbGV4aXR5OworICAgICAg
ICAgICAgcmVncmVzc2lvbltTdHJpbmdzLmpzb24ubWVhc3VyZW1lbnRzLnN0ZGV2XSA9IE1hdGgu
c3FydChjb21wbGV4aXR5UmVncmVzc2lvbi5lcnJvciAvIHNhbXBsZXMubGVuZ3RoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhbGN1bGF0ZVJlZ3Jlc3Npb24oY29tcGxleGl0eVJlZ3Jlc3Npb25T
YW1wbGVzLCBTdHJpbmdzLmpzb24ucmVncmVzc2lvbnMuY29tcGxleGl0eVJlZ3Jlc3Npb24pOwor
ICAgICAgICBjYWxjdWxhdGVSZWdyZXNzaW9uKHJlc3VsdHNbU3RyaW5ncy5qc29uLmNvbXBsZXhp
dHlBdmVyYWdlU2FtcGxlc10sIFN0cmluZ3MuanNvbi5yZWdyZXNzaW9ucy5jb21wbGV4aXR5QXZl
cmFnZVJlZ3Jlc3Npb24pOworCisgICAgICAgIC8vIEZyYW1lIHJhdGUgZXhwZXJpbWVudCByZXN1
bHQgaXMgdW5uZWVkZWQKKyAgICAgICAgZGVsZXRlIHJlc3VsdHNbU3RyaW5ncy5qc29uLmV4cGVy
aW1lbnRzLmZyYW1lUmF0ZV07CisKKyAgICAgICAgcmVzdWx0c1tTdHJpbmdzLmpzb24uc2NvcmVd
ID0gdGltZUNvbXBsZXhpdHlTY29yZS5tZWFuKCk7CisgICAgICAgIHJlc3VsdHNbU3RyaW5ncy5q
c29uLmV4cGVyaW1lbnRzLmNvbXBsZXhpdHldID0ge307CisgICAgICAgIHJlc3VsdHNbU3RyaW5n
cy5qc29uLmV4cGVyaW1lbnRzLmNvbXBsZXhpdHldW1N0cmluZ3MuanNvbi5tZWFzdXJlbWVudHMu
YXZlcmFnZV0gPSB0aW1lQ29tcGxleGl0eVNjb3JlLm1lYW4oKTsKKyAgICAgICAgcmVzdWx0c1tT
dHJpbmdzLmpzb24uZXhwZXJpbWVudHMuY29tcGxleGl0eV1bU3RyaW5ncy5qc29uLm1lYXN1cmVt
ZW50cy5zdGRldl0gPSB0aW1lQ29tcGxleGl0eVNjb3JlLnN0YW5kYXJkRGV2aWF0aW9uKCk7Cisg
ICAgICAgIHJlc3VsdHNbU3RyaW5ncy5qc29uLmV4cGVyaW1lbnRzLmNvbXBsZXhpdHldW1N0cmlu
Z3MuanNvbi5tZWFzdXJlbWVudHMucGVyY2VudF0gPSB0aW1lQ29tcGxleGl0eVNjb3JlLnBlcmNl
bnRhZ2UoKTsKKyAgICB9Cit9KTsKKwogU3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlQ2xhc3MoCiAg
ICAgZnVuY3Rpb24oKQogICAgIHsKQEAgLTQzNSw5ICs4NTgsMTEgQEAgQmVuY2htYXJrID0gVXRp
bGl0aWVzLmNyZWF0ZUNsYXNzKAogICAgICAgICAgICAgdGhpcy5fY29udHJvbGxlciA9IG5ldyBT
dGVwQ29udHJvbGxlcih0aGlzLCBvcHRpb25zKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlICJhZGFwdGl2ZSI6Ci0gICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICB0aGlzLl9j
b250cm9sbGVyID0gbmV3IEFkYXB0aXZlQ29udHJvbGxlcih0aGlzLCBvcHRpb25zKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJyYW1wIjoKKyAgICAgICAgICAgIHRoaXMuX2Nv
bnRyb2xsZXIgPSBuZXcgUmFtcENvbnRyb2xsZXIodGhpcywgb3B0aW9ucyk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0sIHsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>