<?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>184419</bug_id>
          
          <creation_ts>2018-04-09 09:32:55 -0700</creation_ts>
          <short_desc>Write a script that detects chart changes by using v3 API.</short_desc>
          <delta_ts>2018-05-01 20:00:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          <dependson>184766</dependson>
    
    <dependson>184958</dependson>
    
    <dependson>185137</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1412898</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-09 09:32:55 -0700</bug_when>
    <thetext>Write a script that detects chart changes by using v3 API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412899</commentid>
    <comment_count>1</comment_count>
      <attachid>337503</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-09 09:38:20 -0700</bug_when>
    <thetext>Created attachment 337503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1414339</commentid>
    <comment_count>2</comment_count>
      <attachid>337503</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-13 00:49:54 -0700</bug_when>
    <thetext>Comment on attachment 337503
Patch

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

&gt; Websites/perf.webkit.org/public/v3/models/measurement-set.js:293
&gt; +        const asyncTaskIsAvailable = typeof module == &apos;undefined&apos; &amp;&amp; typeof window == &apos;undefined&apos;;

This should be a helper function / static variable on AsyncTask itself.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:2
&gt; +&apos;use strict&apos;;

No need to use strict mode.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:26
&gt; +    const configs = JSON.parse(fs.readFileSync(options[&apos;--change-detection-config-json&apos;], &apos;utf-8&apos;));

This isn&apos;t really a list/set of configurations so it should be called changeDetectionConfig instead.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:40
&gt; +    constructor(configs, remoteAPI, logger)

Ditto about calling the first argument simply config or changeDetectionConfig.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:42
&gt; +        this._configs = configs;

We should be parsing &amp; validating the parsed config here.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:53
&gt; +        try {
&gt; +            manifest = await Manifest.fetch();
&gt; +        } catch (reason) {

try-catch should be happening in the loop.
In general, we should almost never use try-catch in our codebase.
They hide errors &amp; make debugging much harder.
r- because of this.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:62
&gt; +            } catch(error) {
&gt; +                this._logger.log(`Failed analyzing &quot;${metric.fullName()}&quot; on &quot;${platform.name()}&quot; due to ${error}`);
&gt; +            }

Ditto. We shouldn&apos;t be try-catching it here.
Let it propagate all the way up to loop instead.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:81
&gt; +                        configurations.push([platform, metric]);

We should assert that we found valid platform &amp; metric.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:103
&gt; +        if (!segmentedValues || !segmentedValues.length)
&gt; +            return;

We should probably log something here.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:106
&gt; +        const ranges = Statistics.findRangesForChangeDetectionsWithWelchsTTest(rawValues, segmentedValues, 0.99).map((range) =&gt; {
&gt; +            return {

Just use (range) =&gt; ({~}) trick.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:117
&gt; +        const allAnalysisTasks = await AnalysisTask.fetchByPlatformAndMetric(platform.id(), metric.id());
&gt; +        const analysisTasks = allAnalysisTasks.filter((task) =&gt; task.startTime() &amp;&amp; task.endTime());

I&apos;m pretty sure all analysis tasks fetched by AnalysisTask.fetchByPlatformAndMetric are guaranteed to have startTime &amp; endTime.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:125
&gt; +            for (const range of ranges) {

This is O(N^2)... it probably doesn&apos;t matter though.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:130
&gt; +                    this._logger.info(`Found overlapped range: ${range.description} with task id: ${task.id()}`);

This is going to be really spammy because we&apos;ll be finding the same range over &amp; over once we created an analysis task.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:137
&gt; +        const filteredRanges = ranges.filter((range) =&gt; range.endPoint.time &gt;= startTime &amp;&amp; !range.overlappingAnalysisTasks.length)

What&apos;s the point of range.endPoint.time &gt;= startTime?

&gt; Websites/perf.webkit.org/tools/run-analysis.js:141
&gt; +        let summary, range = null;
&gt; +        for (range of filteredRanges) {

We&apos;re finding the last range??
Why don&apos;t we find the range with the biggest change instead?
I&apos;m pretty sure that&apos;s what I had in v2.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:158
&gt; +        const content = await AnalysisTask.create(summary, range.startPoint.id, range.endPoint.id);
&gt; +        const analysisTask = await AnalysisTask.fetchById(content[&apos;taskId&apos;]);
&gt; +        const startCommitSet = range.startPoint.commitSet();
&gt; +        const endCommitSet = range.endPoint.commitSet();
&gt; +        await TestGroup.createAndRefetchTestGroups(analysisTask, &apos;Confirm&apos;, this._configs.confirmTaskRepeatCount, [startCommitSet, endCommitSet]);

This will create a dangling analysis task if the creation of an analysis task succeeds but the creation of a test group fails.
Please use /privileged-api/create-test-group to create both of them at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1416460</commentid>
    <comment_count>3</comment_count>
      <attachid>337503</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-20 15:32:21 -0700</bug_when>
    <thetext>Comment on attachment 337503
Patch

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

&gt;&gt; Websites/perf.webkit.org/tools/run-analysis.js:137
&gt;&gt; +        const filteredRanges = ranges.filter((range) =&gt; range.endPoint.time &gt;= startTime &amp;&amp; !range.overlappingAnalysisTasks.length)
&gt; 
&gt; What&apos;s the point of range.endPoint.time &gt;= startTime?

I translated the logic from detect-change-script. I think what this is trying to do is the make sure at least part of the range should inside the time range specified by configurations.

&gt;&gt; Websites/perf.webkit.org/tools/run-analysis.js:141
&gt;&gt; +        for (range of filteredRanges) {
&gt; 
&gt; We&apos;re finding the last range??
&gt; Why don&apos;t we find the range with the biggest change instead?
&gt; I&apos;m pretty sure that&apos;s what I had in v2.

Actually, we don&apos;t. But that sounds a better strategy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418440</commentid>
    <comment_count>4</comment_count>
      <attachid>338979</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-26 23:51:08 -0700</bug_when>
    <thetext>Created attachment 338979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418934</commentid>
    <comment_count>5</comment_count>
      <attachid>338979</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-29 17:23:51 -0700</bug_when>
    <thetext>Comment on attachment 338979
Patch

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

r- because there is a significant amount of restructuring of the code we need to do here.
Also r- because we definitely need tests for this new script.

&gt; Websites/perf.webkit.org/public/v3/async-task.js:34
&gt; +        return typeof module == &apos;undefined&apos; &amp;&amp; typeof window == &apos;undefined&apos;;

This doesn&apos;t make sense. &quot;window&quot; is always defined inside a browser outside a WebWorker.
r- because of this bug. Also, we clearly need a browser test to make sure this function returns true inside a browser.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:24
&gt; +async function analysisLoop(options)

This function needs to have try-catch to make sure the script doesn&apos;t stop running after encountering the first exception.
But we shouldn&apos;t have try-catch anywhere else in the codebase.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:41
&gt; +class Analyzer {

This is an extremely generic name... It doesn&apos;t even tell us what it analyzes.
How about MeasurementSetAnalyzer?

&gt; Websites/perf.webkit.org/tools/run-analysis.js:45
&gt; +        this._testingConfigurations = Analyzer.configurationsForTesting(manifest);

If we&apos;re exposing Analyzer.configurationsForTesting as a static method,
it would be cleaner for the caller (analysisLoop) to call this method,
and then Analyzer to simply take the result.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:52
&gt; +        this._logger.info(&quot;Start detecting.&quot;);

&quot;Start detecting&quot; is probably not the most descriptive log.
It&apos;s probably better to say &quot;starting analysis&quot; since we&apos;re gonna add more analysis features to this script.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:57
&gt; +    static configurationsForTesting(manifest)

Please add a FIXME here to share this code with DashboardPage.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:82
&gt; +    async analyzeTestConfiguration(platform, metric)

This function should probably take a measurement set instead and be renamed to analyzeMeasurementSet.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:84
&gt; +        const measurementSet = MeasurementSet.findSet(platform.id(), metric.id(), platform.lastModified(metric));

Why isn&apos;t done during configurationsForTesting?

&gt; Websites/perf.webkit.org/tools/run-analysis.js:85
&gt; +        this._logger.info(`\n==== Analyzing the last ${this._changeDetectionConfigs.maxDays} days: &quot;${metric.fullName()}&quot; on &quot;${platform.name()}&quot; ====\n`);

It&apos;s kind of silly to log the number of days we&apos;re analyzing since that&apos;s identical for all platforms &amp; metrics.
Why don&apos;t we spit this out when we log &quot;start detecting&quot;.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:86
&gt; +        const endTime = Date.now();

This end time would be different for each platform/metric we fetch.
I think we should compute this once when we start the analysis so that they&apos;re consistent across platforms &amp; metrics.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:93
&gt; +        let segmentedValues = await measurementSet.fetchSegmentation(&apos;segmentTimeSeriesByMaximizingSchwarzCriterion&apos;, [], &apos;current&apos;, false);

Use const.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:100
&gt; +        const ranges = Statistics.findRangesForChangeDetectionsWithWelchsTTest(rawValues, segmentedValues, 0.99).map((range) =&gt;({

Either omit 0.99 or make it configurable.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:118
&gt; +                const disjoint = range.endPoint.seriesIndex &lt; taskStartPoint.seriesIndex

Nit: isDisjoint but with respect to what?
Maybe isDisjoint

&gt; Websites/perf.webkit.org/tools/run-analysis.js:122
&gt; +                if (!disjoint)
&gt; +                    range.overlappingAnalysisTasks.push(task);

This is silly. We&apos;re collecting the list of overlapping analysis tasks just to filter ranges in the next statement.
We should simply invert the nesting of these two loops, and omit ranges right away.
Also, we don&apos;t have to find starting &amp; ending points to check the overlapped-ness;
simply call startTime() / endTime() on the task itself. i.e.
ranges.filter((range) =&gt; {
    bool hasOverlappingTask = false;
    for (const task of analysisTasks) {
        bool taskEndsBeforeRangeStart = task.endTime() &lt; range.startPoint.time;
        bool taskStartsAfterRangeEnd = range.endPoint.time &lt; task.startTime();
        if (!(taskEndsBeforeRangeStart || taskStartsAfterRangeEnd))
            hasOverlappingTask = true;
    }
    return !hasOverlappingTask;
})

&gt; Websites/perf.webkit.org/tools/run-analysis.js:128
&gt; +        const filteredRanges = ranges.filter((range) =&gt; range.endPoint.time &gt;= startTime &amp;&amp; !range.overlappingAnalysisTasks.length)
&gt; +            .sort((a, b) =&gt; a.endPoint.time - b.endPoint.time);

Sounds like we should do this filtering before filtering ranges based on overlapping tasks since the latter computation is a lot more expensive.
You can merge that to the above filter code I wrote.
Also, there is no point in sorting them based on start/end time since we&apos;re picking the one with the largest change in the next loop.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:130
&gt; +        let summary, rangeWithMostSignificantChange = null, valueChangeSummaryForRangeWithMostSignificantChange = null;

Nit: Don&apos;t allocate multiple variables in a single statement like this.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:143
&gt; +            const currentChangeIsMoreSignificant = !rangeWithMostSignificantChange
&gt; +                || (valueChangeSummaryForRangeWithMostSignificantChange.changeType === valueChangeSummary.changeType
&gt; +                    &amp;&amp; Math.abs(valueChangeSummaryForRangeWithMostSignificantChange.relativeChange) &lt; Math.abs(valueChangeSummary.relativeChange))
&gt; +                || (valueChangeSummaryForRangeWithMostSignificantChange.changeType === progressionString
&gt; +                    &amp;&amp; valueChangeSummary.changeType === regressionString);

This is a very complicated logic.
1. We can instead, remember whether there was any regression in the previous filtering step,
2. Ignore all progressions if there were regressions
3. Sort them by diff.

But really, I&apos;m not certain if we want to always prioritize regressions over progressions.
e.g. if we had 50% progression and 0.5% regression, we probably want to figure out where the progression occurred
since that probably means the test is broken somehow.

&gt; Websites/perf.webkit.org/unit-tests/measurement-set-tests.js:44
&gt; -            assert.equal(requests[0].url, &apos;../data/measurement-set-1-1.json&apos;);
&gt; +            assert.equal(requests[0].url, &apos;/data/measurement-set-1-1.json&apos;);

Can we make this refactoring in a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419190</commentid>
    <comment_count>6</comment_count>
      <attachid>339165</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-04-30 17:29:22 -0700</bug_when>
    <thetext>Created attachment 339165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419245</commentid>
    <comment_count>7</comment_count>
      <attachid>339165</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-04-30 21:07:13 -0700</bug_when>
    <thetext>Comment on attachment 339165
Patch

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

We still need tests.

&gt; Websites/perf.webkit.org/public/v3/async-task.js:34
&gt; +        return typeof module === &apos;undefined&apos;;

We should just check directly typeof Worker.

&gt; Websites/perf.webkit.org/public/v3/models/bug.js:33
&gt; +
&gt; +

Reduce this to one blank line?

&gt; Websites/perf.webkit.org/tools/run-analysis.js:32
&gt; +        global.RemoteAPI = new RemoteAPI(serverConfig.server);

I don&apos;t think this makes sense. We should just construct a local instance.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:43
&gt; +    analyzer.showAnalysisStatistics();

I don&apos;t think we need this logging because we&apos;re logging whenever we analyze a new configuration.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:105
&gt; +    async analyzeMeasurementSet(platform, metric)

I think it&apos;s still better for this function to take in measurementSet.
Finding platform &amp; metric is cheap enough.
We should just assert that they&apos;re not null right away.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:108
&gt; +        this._logger.info(`\n==== &quot;${metric.fullName()}&quot; on &quot;${platform.name()}&quot; ====\n`);

I don&apos;t think we need to create blank lines before/after this.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:128
&gt; +                description: `series index range: [${range.startIndex} - ${range.endIndex}]`

Remove this.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:147
&gt; +        }).sort((a, b) =&gt; {
&gt; +            if (a.valueChangeSummary.changeType === b.valueChangeSummary.changeType)
&gt; +                return Math.abs(a.valueChangeSummary.relativeChange) - Math.abs(b.valueChangeSummary.relativeChange);
&gt; +            return a.valueChangeSummary.changeType === progressionString ? -1 : 1;
&gt; +        });

I don&apos;t think we should be sorting ranges like this.
Just find the one with the biggest value instead.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:157
&gt; +            this._logger.log(&apos;Detected:&apos;, summary);

I don&apos;t think we should be making logging like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419414</commentid>
    <comment_count>8</comment_count>
      <attachid>339165</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-05-01 13:47:42 -0700</bug_when>
    <thetext>Comment on attachment 339165
Patch

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

&gt;&gt; Websites/perf.webkit.org/tools/run-analysis.js:32
&gt;&gt; +        global.RemoteAPI = new RemoteAPI(serverConfig.server);
&gt; 
&gt; I don&apos;t think this makes sense. We should just construct a local instance.

We need to change the global object because this remote api is used by multiple places for example `Manifest.fetch`. We may consider we can find a way to do this without overwriting the global object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419508</commentid>
    <comment_count>9</comment_count>
      <attachid>339255</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2018-05-01 19:01:17 -0700</bug_when>
    <thetext>Created attachment 339255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419522</commentid>
    <comment_count>10</comment_count>
      <attachid>339255</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-01 20:00:56 -0700</bug_when>
    <thetext>Comment on attachment 339255
Patch

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

&gt; Websites/perf.webkit.org/browser-tests/time-series-chart-tests.js:6
&gt; +        expect(context.symbols.AsyncTask.isAvailable()).to.be(true);

This is nothing to do with time-series-chart. Please create a new test file instead.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:49
&gt; +class MeasurementSetAnalyzer {

This class should be moved to its own file inside tools/js/

&gt; Websites/perf.webkit.org/tools/run-analysis.js:52
&gt; +        this._changeDetectionConfigs = changeDetectionConfigs;

We shouldn&apos;t be storing the JSON we read off of a file like this.
This would make it a lot harder to figure out what you can and can&apos;t specify in the configuration.
We should instead make MeasurementSetAnalyzer take each configuration as an argument,
and store each configuration value separately.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:103
&gt; +        const rawValues = currentTimeSeries.values();

We should exit early without any error or warning when rawValues is empty.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:106
&gt; +            this._logger.warn(`Failed fetching segmentations for ${metric.fullName()}&quot; on &quot;${platform.name()}&quot;`);

Missing &quot; after &quot;for&quot; and before the full metric name.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:113
&gt; +            this._changeDetectionConfigs.tTestSignificance).map((range) =&gt;({

I really don&apos;t think it makes sense to make this configurable.
We almost never used any other value but 0.99.
We can make it configurable in the future when we need to.
Just omit the argument for now.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:136
&gt; +        filteredRanges.forEach((range) =&gt; {

I think for (const range of filteredRange) would probably read better
since the block here don&apos;t involve return, etc...

&gt; Websites/perf.webkit.org/tools/run-analysis.js:140
&gt; +            // Take a square root on progression relative value, so that we would not favor regression so
&gt; +            // much that we miss some huge progressions.

Instead of this comment, just give it a more descriptive name.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:141
&gt; +            const weightedSignificance = range.valueChangeSummary.changeType === regressionString ?

e.g. weightFavoringRegression.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:159
&gt; +        this._logger.info(`Creating analysis task and confirming: &quot;${summary}&quot;.`);

We should probably log this after we&apos;ve created analysis task along with its ID.

&gt; Websites/perf.webkit.org/tools/run-analysis.js:161
&gt; +        await AnalysisTask.create(summary, rangeWithMostSignificantChange.startPoint, rangeWithMostSignificantChange.endPoint,
&gt; +            &apos;Confirm&apos;, this._changeDetectionConfigs.confirmTaskRepeatCount);

I don&apos;t think it makes sense to have a single iteration count.
If this is a temporary treatment, it&apos;s better to hard-code it here with a FIXME instead.

&gt; Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js:15
&gt; +    beforeEach(() =&gt; {
&gt; +        PrivilegedAPI.configure(&apos;test&apos;, &apos;password&apos;);
&gt; +    });

Why do we need to configure this before each test case?

&gt; Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js:20
&gt; +            assert.equal(configurations.length, 0);

Use deepEqual with [] so that when this test fails, we&apos;d see the contents.

&gt; Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js:74
&gt; +        it(&apos;should not analyze and show a warning message if failed to fetch segnmentation&apos;, async () =&gt; {

Nit: segnmentation -&gt; segmentation.
I don&apos;t think this test case is valid, however. When there are no values in the time series, we shouldn&apos;t emit any error or warning.
Consequently, we need another test case which explicitly test segmentation to fail.

&gt; Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js:95
&gt; +            assert.deepEqual(logger.warn_logs, [&apos;Failed fetching segmentations for Some test : Some metric&quot; on &quot;Some platform&quot;&apos;]);

I don&apos;t think we should be emitting this error. When the graph is empty, it&apos;s expected that there won&apos;t be anything to investigate.
We should be successfully exiting without logging any errors or warnings.

&gt; Websites/perf.webkit.org/unit-tests/measurement-set-analyzer-tests.js:104
&gt; +            const measurementSetAnalyzer = new MeasurementSetAnalyzer(changeDetectionConfigs, [measurementSet], logger);
&gt; +            measurementSetAnalyzer._startTime = 4000;
&gt; +            measurementSetAnalyzer._endTime = 5000;

Modifying private instance variables like this isn&apos;t great.
It would mean that whenever we modify MeasurementSetAnalyzer, we have to update all these tests as well.
We should make startTime &amp; endTime simply arguments to MeasurementSetAnalyzer instead.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>337503</attachid>
            <date>2018-04-09 09:38:20 -0700</date>
            <delta_ts>2018-04-26 23:51:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184419-20180409093819.patch</filename>
            <type>text/plain</type>
            <size>32191</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMwNDQxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAwY2E0NWJhMzlhZmZiYWNlZTgzNjA5Zjg4NTg2OTQ4Mzk3YmVlOWQ2Li44M2VmMTc1MmJj
YWNjY2QxMjZkYzA1NWI5YTg3MjJjYTQ1MDFhYWNkIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxOC0wNC0wOSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBXcml0ZSBhIHNjcmlwdCB0aGF0IGRldGVjdHMgY2hhcnQg
Y2hhbmdlcyBieSB1c2luZyB2MyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODQ0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIHNjcmlwdCB0aGF0IGRldGVkdHMgY2hhcnQgY2hhbmdl
cyBhbmQgc2NoZWR1bGUgY29uZmlybWluZyBhbmFseXNpcyB0YXNrLgorCisgICAgICAgICogcHVi
bGljL3YzL21vZGVscy9idWcuanM6IEV4cG9ydCBhcyBhIG1vZHVsZS4KKyAgICAgICAgKiBwdWJs
aWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LXNldC5qczoKKyAgICAgICAgKE1lYXN1cmVtZW50U2V0
LnByb3RvdHlwZS5fY29uc3RydWN0VXJsKTogVXBkYXRlZCB0aGUgQVBJIHVybCBieSB1c2luZyBh
YnNvbHV0ZSB1cmwuCisgICAgICAgIChNZWFzdXJlbWVudFNldC5wcm90b3R5cGUuX2ludm9rZVNl
Z21lbnRhdGlvbkFsZ29yaXRobSk6IEFkZGVkIGEgY2hlY2sgdG8gYXZvaWQgdXNpbmcgQXN5bmNU
YXNrIHdoZW4gcnVubmluZyBpbiBOb2RlanMuCisgICAgICAgICogdG9vbHMvanMvdjMtbW9kZWxz
LmpzOiBBZGRlZCBpbXBvcnQgZm9yICdCdWcnIG9iamVjdC4KKyAgICAgICAgKiB0b29scy9ydW4t
YW5hbHlzaXMuanM6IEFkZGVkIHNjcmlwdCB0byBkZXRlY3QgY2hhcnQgY2hhbmdlcy4KKyAgICAg
ICAgKG1haW4pOgorICAgICAgICAoYXN5bmMuYW5hbHlzaXNMb29wKToKKyAgICAgICAgKHByb3Rv
dHlwZS5hc3luYy5hbmFseXplT25jZSk6CisgICAgICAgIChjb25maWd1cmF0aW9uc0ZvclRlc3Rp
bmcpOiBDcmVhdGUgdGVzdGluZyBjb25maWd1cmF0aW9ucyBiYXNlZCBvbiBtYW5pZmVzdC4KKyAg
ICAgICAgKHByb3RvdHlwZS5hc3luYy5hbmFseXplVGVzdENvbmZpZ3VyYXRpb24pOiBBbmFseXpl
cyBhIGNvbmZpZ3VyYXRpb25zIGluIGdpdmVuIGRhdGVzIGFuZCBjcmVhdGVzIGNvbmZpcm1pbmcg
QS9CCisgICAgICAgIHRhc2sgd2hlbiB0aGVyZSBpcyBubyBleGlzdGluZyBhbmFseXNpcyB0YXNr
IGZvciB0aGUgc2FtZSByYW5nZS4KKyAgICAgICAgKiB1bml0LXRlc3RzL21lYXN1cmVtZW50LXNl
dC10ZXN0cy5qczogVXBkYXRlZCB1bml0IHRlc3RzLgorICAgICAgICAoY29uc3Quc2V0IE1lYXN1
cmVtZW50U2V0KToKKwogMjAxOC0wNC0wNiAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFwcGxlLmNv
bT4KIAogICAgICAgICBBZGRlZCAnQ29tbWl0U2V0LmRpZmYnIHdoaWNoIHdpbGwgYmUgc2hhcmVk
IGJldHdlZW4gbXVsdGlwbGUgaW5kZXBlbmRlbnQgaW5jb21pbmcgY2hhbmdlcy4KZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1Zy5qcyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1Zy5qcwppbmRleCAwMzI5
YjdlMTQyYzY5ZDE3YWJlM2Y5ZTAyOGYzNGE3MTNjY2RiZWE0Li40OWEyMTRlYTdhNjg5OTljZTFl
MmM3YmQ0Mzg5YTcwN2VjZTVjYzIxIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL21vZGVscy9idWcuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9tb2RlbHMvYnVnLmpzCkBAIC0yOSwzICsyOSw3IEBAIGNsYXNzIEJ1ZyBleHRl
bmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgbGFiZWwoKSB7IHJldHVybiB0aGlzLmJ1Z051bWJl
cigpOyB9CiAgICAgdGl0bGUoKSB7IHJldHVybiBgJHt0aGlzLl9idWdUcmFja2VyLmxhYmVsKCl9
OiAke3RoaXMuYnVnTnVtYmVyKCl9YDsgfQogfQorCisKK2lmICh0eXBlb2YgbW9kdWxlICE9ICd1
bmRlZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLkJ1ZyA9IEJ1ZzsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMKaW5kZXggYWM0YjI0NTkwYmNmMWVm
OGMxMzI5OWNhMWYyYjMwZjlhNzUyZGIxOS4uMmRkOGIyYWQ0MjczMjg0M2ZjMmUxYzJhN2UyOTBh
ODRhY2RiYjEwNCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvbWVhc3VyZW1lbnQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LXNldC5qcwpAQCAtOTQsMTAgKzk0LDEwIEBA
IGNsYXNzIE1lYXN1cmVtZW50U2V0IHsKICAgICBfY29uc3RydWN0VXJsKHVzZUNhY2hlLCBjbHVz
dGVyRW5kVGltZSkKICAgICB7CiAgICAgICAgIGlmICghdXNlQ2FjaGUpIHsKLSAgICAgICAgICAg
IHJldHVybiBgLi4vYXBpL21lYXN1cmVtZW50LXNldD9wbGF0Zm9ybT0ke3RoaXMuX3BsYXRmb3Jt
SWR9Jm1ldHJpYz0ke3RoaXMuX21ldHJpY0lkfWA7CisgICAgICAgICAgICByZXR1cm4gYC9hcGkv
bWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPSR7dGhpcy5fcGxhdGZvcm1JZH0mbWV0cmljPSR7dGhp
cy5fbWV0cmljSWR9YDsKICAgICAgICAgfQogICAgICAgICB2YXIgdXJsOwotICAgICAgICB1cmwg
PSBgLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtJHt0aGlzLl9wbGF0Zm9ybUlkfS0ke3RoaXMuX21l
dHJpY0lkfWA7CisgICAgICAgIHVybCA9IGAvZGF0YS9tZWFzdXJlbWVudC1zZXQtJHt0aGlzLl9w
bGF0Zm9ybUlkfS0ke3RoaXMuX21ldHJpY0lkfWA7CiAgICAgICAgIGlmIChjbHVzdGVyRW5kVGlt
ZSkKICAgICAgICAgICAgIHVybCArPSAnLScgKyArY2x1c3RlckVuZFRpbWU7CiAgICAgICAgIHVy
bCArPSAnLmpzb24nOwpAQCAtMjkwLDcgKzI5MCw4IEBAIGNsYXNzIE1lYXN1cmVtZW50U2V0IHsK
ICAgICAgICAgdmFyIGFyZ3MgPSBbdGltZVNlcmllc1ZhbHVlc10uY29uY2F0KHBhcmFtZXRlcnMg
fHwgW10pOwogCiAgICAgICAgIHZhciB0aW1lU2VyaWVzSXNTaG9ydEVub3VnaEZvclN5bmNDb21w
dXRhdGlvbiA9IHRpbWVTZXJpZXNWYWx1ZXMubGVuZ3RoIDwgMTAwOwotICAgICAgICBpZiAodGlt
ZVNlcmllc0lzU2hvcnRFbm91Z2hGb3JTeW5jQ29tcHV0YXRpb24pIHsKKyAgICAgICAgY29uc3Qg
YXN5bmNUYXNrSXNBdmFpbGFibGUgPSB0eXBlb2YgbW9kdWxlID09ICd1bmRlZmluZWQnICYmIHR5
cGVvZiB3aW5kb3cgPT0gJ3VuZGVmaW5lZCc7CisgICAgICAgIGlmICh0aW1lU2VyaWVzSXNTaG9y
dEVub3VnaEZvclN5bmNDb21wdXRhdGlvbiB8fCAhYXN5bmNUYXNrSXNBdmFpbGFibGUpIHsKICAg
ICAgICAgICAgIEluc3RydW1lbnRhdGlvbi5zdGFydE1lYXN1cmluZ1RpbWUoJ19pbnZva2VTZWdt
ZW50YXRpb25BbGdvcml0aG0nLCAnc3luY1NlZ21lbnRhdGlvbicpOwogICAgICAgICAgICAgdmFy
IHNlZ21lbnRhdGlvbiA9IFN0YXRpc3RpY3Nbc2VnbWVudGF0aW9uTmFtZV0uYXBwbHkodGltZVNl
cmllc1ZhbHVlcywgYXJncyk7CiAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24uZW5kTWVhc3Vy
aW5nVGltZSgnX2ludm9rZVNlZ21lbnRhdGlvbkFsZ29yaXRobScsICdzeW5jU2VnbWVudGF0aW9u
Jyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9k
ZWxzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcwpp
bmRleCBkMGVmZTdjMGQ1MjA0NTg5ZDdiN2RmNjBkMWJjZjcxM2RiNTRhYTZjLi41OGViMjI3Mjdj
MTY0Y2YzY2Y5OWRlZGZlYTc5NGIzYjgxZjdmMDg1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMKQEAgLTExLDYgKzExLDcgQEAgaW1wb3J0RnJv
bVYzKCdtb2RlbHMvZGF0YS1tb2RlbC5qcycsICdEYXRhTW9kZWxPYmplY3QnKTsKIGltcG9ydEZy
b21WMygnbW9kZWxzL2RhdGEtbW9kZWwuanMnLCAnTGFiZWxlZE9iamVjdCcpOwogCiBpbXBvcnRG
cm9tVjMoJ21vZGVscy9hbmFseXNpcy10YXNrLmpzJywgJ0FuYWx5c2lzVGFzaycpOworaW1wb3J0
RnJvbVYzKCdtb2RlbHMvYnVnLmpzJywgJ0J1ZycpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVn
LXRyYWNrZXIuanMnLCAnQnVnVHJhY2tlcicpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGQt
cmVxdWVzdC5qcycsICdCdWlsZFJlcXVlc3QnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2J1aWxk
ZXIuanMnLCAnQnVpbGQnKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90
b29scy9ydW4tYW5hbHlzaXMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvcnVu
LWFuYWx5c2lzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0MThkMTU0ZmMwNGFjNDk3NGFmNGNiZDFjMzYwMDBj
M2UxNThmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9v
bHMvcnVuLWFuYWx5c2lzLmpzCkBAIC0wLDAgKzEsMTYyIEBACisjIS91c3IvbG9jYWwvYmluL25v
ZGUKKyd1c2Ugc3RyaWN0JzsKKworY29uc3QgZnMgPSByZXF1aXJlKCdmcycpOworY29uc3QgU3Rh
dGlzdGljcyA9IHJlcXVpcmUoJy4uL3B1YmxpYy9zaGFyZWQvc3RhdGlzdGljcycpOworY29uc3Qg
cGFyc2VBcmd1bWVudHMgPSByZXF1aXJlKCcuL2pzL3BhcnNlLWFyZ3VtZW50cy5qcycpLnBhcnNl
QXJndW1lbnRzOworY29uc3QgUmVtb3RlQVBJID0gcmVxdWlyZSgnLi9qcy9yZW1vdGUuanMnKS5S
ZW1vdGVBUEk7CityZXF1aXJlKCcuL2pzL3YzLW1vZGVscy5qcycpOworCitmdW5jdGlvbiBtYWlu
KGFyZ3YpCit7CisgICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRzKGFyZ3YsIFsKKyAg
ICAgICAge25hbWU6ICctLXNlcnZlci1jb25maWctanNvbicsIHJlcXVpcmVkOiB0cnVlfSwKKyAg
ICAgICAge25hbWU6ICctLWNoYW5nZS1kZXRlY3Rpb24tY29uZmlnLWpzb24nLCByZXF1aXJlZDog
dHJ1ZX0sCisgICAgICAgIHtuYW1lOiAnLS1zZWNvbmRzLXRvLXNsZWVwJywgdHlwZTogcGFyc2VG
bG9hdCwgZGVmYXVsdDogMTIwMH0sCisgICAgXSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisgICAg
ICAgIHJldHVybjsKKworICAgIGFuYWx5c2lzTG9vcChvcHRpb25zKTsKK30KKworYXN5bmMgZnVu
Y3Rpb24gYW5hbHlzaXNMb29wKG9wdGlvbnMpCit7CisgICAgY29uc3QgY29uZmlncyA9IEpTT04u
cGFyc2UoZnMucmVhZEZpbGVTeW5jKG9wdGlvbnNbJy0tY2hhbmdlLWRldGVjdGlvbi1jb25maWct
anNvbiddLCAndXRmLTgnKSk7CisgICAgY29uc3Qgc2VydmVyQ29uZmlnID0gSlNPTi5wYXJzZShm
cy5yZWFkRmlsZVN5bmMob3B0aW9uc1snLS1zZXJ2ZXItY29uZmlnLWpzb24nXSwgJ3V0Zi04Jykp
OworICAgIGNvbnN0IHNlY29uZHNUb1NsZWVwID0gb3B0aW9uc1snLS1zZWNvbmRzLXRvLXNsZWVw
J107CisgICAgZ2xvYmFsLlJlbW90ZUFQSSA9IG5ldyBSZW1vdGVBUEkoc2VydmVyQ29uZmlnLnNl
cnZlcik7CisKKyAgICBjb25zdCBhbmFseXplciA9IG5ldyBBbmFseXplcihjb25maWdzLCBnbG9i
YWwuUmVtb3RlQVBJLCBjb25zb2xlKTsKKyAgICBhd2FpdCBhbmFseXplci5hbmFseXplT25jZSgp
OworCisgICAgY29uc29sZS5sb2coYFNsZWVwaW5nIGZvciAke3NlY29uZHNUb1NsZWVwfSBzZWNv
bmRzLmApOworICAgIHNldFRpbWVvdXQoKCkgPT4gYW5hbHlzaXNMb29wKG9wdGlvbnMpLCBzZWNv
bmRzVG9TbGVlcCAqIDEwMDApOworfQorCisKK2NsYXNzIEFuYWx5emVyIHsKKyAgICBjb25zdHJ1
Y3Rvcihjb25maWdzLCByZW1vdGVBUEksIGxvZ2dlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2Nv
bmZpZ3MgPSBjb25maWdzOworICAgICAgICB0aGlzLl9yZW1vdGVBUEkgPSByZW1vdGVBUEk7Cisg
ICAgICAgIHRoaXMuX2xvZ2dlciA9IGxvZ2dlcjsKKyAgICB9CisKKyAgICBhc3luYyBhbmFseXpl
T25jZSgpCisgICAgeworICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygiU3RhcnQgZGV0ZWN0aW5n
LiIpOworICAgICAgICBsZXQgbWFuaWZlc3QgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgbWFuaWZlc3QgPSBhd2FpdCBNYW5pZmVzdC5mZXRjaCgpOworICAgICAgICB9IGNhdGNo
IChyZWFzb24pIHsKKyAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGZl
dGNoIG1hbmlmZXN0IGZpbGUnLCByZWFzb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGZvciAoY29uc3QgW3BsYXRmb3JtLCBtZXRyaWNdIG9mIEFuYWx5emVyLmNv
bmZpZ3VyYXRpb25zRm9yVGVzdGluZyhtYW5pZmVzdCkpIHsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hbmFseXplVGVzdENvbmZpZ3VyYXRpb24ocGxhdGZv
cm0sIG1ldHJpYyk7CisgICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fbG9nZ2VyLmxvZyhgRmFpbGVkIGFuYWx5emluZyAiJHttZXRyaWMuZnVsbE5hbWUo
KX0iIG9uICIke3BsYXRmb3JtLm5hbWUoKX0iIGR1ZSB0byAke2Vycm9yfWApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbmZpZ3VyYXRpb25zRm9yVGVz
dGluZyhtYW5pZmVzdCkKKyAgICB7CisgICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25zID0gW107
CisgICAgICAgIGZvciAoY29uc3QgZGFzaGJvYXJkIG9mIE9iamVjdC52YWx1ZXMobWFuaWZlc3Qu
ZGFzaGJvYXJkcykpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIGRhc2hib2FyZCkg
eworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiByb3cpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNlbGwubGVuZ3RoIDwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYXRmb3JtSWQgPSBwYXJz
ZUludChjZWxsWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldHJpY0lkID0g
cGFyc2VJbnQoY2VsbFsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocGxh
dGZvcm1JZCkgfHwgaXNOYU4obWV0cmljSWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBQbGF0
Zm9ybS5maW5kQnlJZChwbGF0Zm9ybUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG1ldHJpYyA9IE1ldHJpYy5maW5kQnlJZChtZXRyaWNJZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25maWd1cmF0aW9ucy5wdXNoKFtwbGF0Zm9ybSwgbWV0cmljXSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zOworICAgIH0KKworICAgIGFzeW5jIGFuYWx5
emVUZXN0Q29uZmlndXJhdGlvbihwbGF0Zm9ybSwgbWV0cmljKQorICAgIHsKKyAgICAgICAgY29u
c3QgbWVhc3VyZW1lbnRTZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0KHBsYXRmb3JtLmlkKCks
IG1ldHJpYy5pZCgpLCBwbGF0Zm9ybS5sYXN0TW9kaWZpZWQobWV0cmljKSk7CisgICAgICAgIHRo
aXMuX2xvZ2dlci5pbmZvKGBcbj09PT0gQW5hbHl6aW5nIHRoZSBsYXN0ICR7dGhpcy5fY29uZmln
cy5tYXhEYXlzfSBkYXlzOiAiJHttZXRyaWMuZnVsbE5hbWUoKX0iIG9uICIke3BsYXRmb3JtLm5h
bWUoKX0iID09PT1gKTsKKyAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7CisgICAg
ICAgIGNvbnN0IHN0YXJ0VGltZSA9IGVuZFRpbWUgLSB0aGlzLl9jb25maWdzLm1heERheXMgKiAy
NCAqIDM2MDAgKiAxMDAwOworCisgICAgICAgIGF3YWl0IG1lYXN1cmVtZW50U2V0LmZldGNoQmV0
d2VlbihzdGFydFRpbWUsIGVuZFRpbWUpOworICAgICAgICBjb25zdCBjdXJyZW50VGltZVNlcmll
cyA9IG1lYXN1cmVtZW50U2V0LmZldGNoZWRUaW1lU2VyaWVzKCdjdXJyZW50JywgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gY3VycmVudFRpbWVTZXJpZXMudmFsdWVz
KCk7CisKKyAgICAgICAgbGV0IHNlZ21lbnRlZFZhbHVlcyA9IGF3YWl0IG1lYXN1cmVtZW50U2V0
LmZldGNoU2VnbWVudGF0aW9uKCdzZWdtZW50VGltZVNlcmllc0J5TWF4aW1pemluZ1NjaHdhcnpD
cml0ZXJpb24nLCBbXSwgJ2N1cnJlbnQnLCBmYWxzZSk7CisKKyAgICAgICAgaWYgKCFzZWdtZW50
ZWRWYWx1ZXMgfHwgIXNlZ21lbnRlZFZhbHVlcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY29uc3QgcmFuZ2VzID0gU3RhdGlzdGljcy5maW5kUmFuZ2VzRm9yQ2hhbmdl
RGV0ZWN0aW9uc1dpdGhXZWxjaHNUVGVzdChyYXdWYWx1ZXMsIHNlZ21lbnRlZFZhbHVlcywgMC45
OSkubWFwKChyYW5nZSkgPT4geworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICBzdGFydFBvaW50OiBjdXJyZW50VGltZVNlcmllcy5maW5kUG9pbnRCeUluZGV4KHJhbmdlLnN0
YXJ0SW5kZXgpLAorICAgICAgICAgICAgICAgIGVuZFBvaW50OiBjdXJyZW50VGltZVNlcmllcy5m
aW5kUG9pbnRCeUluZGV4KHJhbmdlLmVuZEluZGV4KSwKKyAgICAgICAgICAgICAgICBzZWdtZW50
YXRpb25TdGFydFZhbHVlOiByYW5nZS5zZWdtZW50YXRpb25TdGFydFZhbHVlLAorICAgICAgICAg
ICAgICAgIHNlZ21lbnRhdGlvbkVuZFZhbHVlOiByYW5nZS5zZWdtZW50YXRpb25FbmRWYWx1ZSwK
KyAgICAgICAgICAgICAgICBvdmVybGFwcGluZ0FuYWx5c2lzVGFza3M6IFtdLAorICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOiBgc2VyaWVzIGluZGV4IHJhbmdlOiBbJHtyYW5nZS5zdGFydElu
ZGV4fSAtICR7cmFuZ2UuZW5kSW5kZXh9XWAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pOwor
CisgICAgICAgIGNvbnN0IGFsbEFuYWx5c2lzVGFza3MgPSBhd2FpdCBBbmFseXNpc1Rhc2suZmV0
Y2hCeVBsYXRmb3JtQW5kTWV0cmljKHBsYXRmb3JtLmlkKCksIG1ldHJpYy5pZCgpKTsKKyAgICAg
ICAgY29uc3QgYW5hbHlzaXNUYXNrcyA9IGFsbEFuYWx5c2lzVGFza3MuZmlsdGVyKCh0YXNrKSA9
PiB0YXNrLnN0YXJ0VGltZSgpICYmIHRhc2suZW5kVGltZSgpKTsKKworICAgICAgICBmb3IgKGNv
bnN0IHRhc2sgb2YgYW5hbHlzaXNUYXNrcykgeworICAgICAgICAgICAgY29uc3QgdGFza1N0YXJ0
UG9pbnQgPSBjdXJyZW50VGltZVNlcmllcy5maW5kQnlJZCh0YXNrLnN0YXJ0TWVhc3VyZW1lbnRJ
ZCgpKTsKKyAgICAgICAgICAgIGNvbnN0IHRhc2tFbmRQb2ludCA9IGN1cnJlbnRUaW1lU2VyaWVz
LmZpbmRCeUlkKHRhc2suZW5kTWVhc3VyZW1lbnRJZCgpKTsKKyAgICAgICAgICAgIGlmICghdGFz
a1N0YXJ0UG9pbnQgfHwgIXRhc2tFbmRQb2ludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgZm9yIChjb25zdCByYW5nZSBvZiByYW5nZXMpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBkaXNqb2ludCA9IHJhbmdlLmVuZFBvaW50LnNlcmllc0luZGV4IDwgdGFza1N0
YXJ0UG9pbnQuc2VyaWVzSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfHwgdGFza0VuZFBvaW50
LnNlcmllc0luZGV4IDwgcmFuZ2Uuc3RhcnRQb2ludC5zZXJpZXNJbmRleDsKKworICAgICAgICAg
ICAgICAgIGlmICghZGlzam9pbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2Vy
LmluZm8oYEZvdW5kIG92ZXJsYXBwZWQgcmFuZ2U6ICR7cmFuZ2UuZGVzY3JpcHRpb259IHdpdGgg
dGFzayBpZDogJHt0YXNrLmlkKCl9YCk7CisgICAgICAgICAgICAgICAgICAgIHJhbmdlLm92ZXJs
YXBwaW5nQW5hbHlzaXNUYXNrcy5wdXNoKHRhc2spOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgZmlsdGVyZWRSYW5nZXMgPSBy
YW5nZXMuZmlsdGVyKChyYW5nZSkgPT4gcmFuZ2UuZW5kUG9pbnQudGltZSA+PSBzdGFydFRpbWUg
JiYgIXJhbmdlLm92ZXJsYXBwaW5nQW5hbHlzaXNUYXNrcy5sZW5ndGgpCisgICAgICAgICAgICAu
c29ydCgoYSwgYikgPT4gYS5lbmRQb2ludC50aW1lIC0gYi5lbmRQb2ludC50aW1lKTsKKworICAg
ICAgICBsZXQgc3VtbWFyeSwgcmFuZ2UgPSBudWxsOworICAgICAgICBmb3IgKHJhbmdlIG9mIGZp
bHRlcmVkUmFuZ2VzKSB7CisgICAgICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZVN1bW1hcnkgPSBt
ZXRyaWMubGFiZWxGb3JEaWZmZXJlbmNlKHJhbmdlLnNlZ21lbnRhdGlvblN0YXJ0VmFsdWUsIHJh
bmdlLnNlZ21lbnRhdGlvbkVuZFZhbHVlLCAncHJvZ3Jlc3Npb24nLCAncmVncmVzc2lvbicpOwor
ICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSByYW5nZS5zdGFydFBvaW50LmNvbW1p
dFNldCgpOworICAgICAgICAgICAgY29uc3QgZW5kQ29tbWl0U2V0ID0gcmFuZ2UuZW5kUG9pbnQu
Y29tbWl0U2V0KCk7CisgICAgICAgICAgICBzdW1tYXJ5ID0gYCR7dmFsdWVDaGFuZ2VTdW1tYXJ5
LmNoYW5nZUxhYmVsfSBvbiAke3BsYXRmb3JtLm5hbWUoKX0gYmV0d2VlbiAke0NvbW1pdFNldC5k
aWZmKHN0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXQpfWA7CisgICAgICAgICAgICB0aGlzLl9s
b2dnZXIubG9nKCdEZXRlY3RlZDonLCBzdW1tYXJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghcmFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coJ05vdGhpbmcgdG8gYW5h
bHl6ZScpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
Y29udGVudCA9IGF3YWl0IEFuYWx5c2lzVGFzay5jcmVhdGUoc3VtbWFyeSwgcmFuZ2Uuc3RhcnRQ
b2ludC5pZCwgcmFuZ2UuZW5kUG9pbnQuaWQpOworICAgICAgICBjb25zdCBhbmFseXNpc1Rhc2sg
PSBhd2FpdCBBbmFseXNpc1Rhc2suZmV0Y2hCeUlkKGNvbnRlbnRbJ3Rhc2tJZCddKTsKKyAgICAg
ICAgY29uc3Qgc3RhcnRDb21taXRTZXQgPSByYW5nZS5zdGFydFBvaW50LmNvbW1pdFNldCgpOwor
ICAgICAgICBjb25zdCBlbmRDb21taXRTZXQgPSByYW5nZS5lbmRQb2ludC5jb21taXRTZXQoKTsK
KyAgICAgICAgYXdhaXQgVGVzdEdyb3VwLmNyZWF0ZUFuZFJlZmV0Y2hUZXN0R3JvdXBzKGFuYWx5
c2lzVGFzaywgJ0NvbmZpcm0nLCB0aGlzLl9jb25maWdzLmNvbmZpcm1UYXNrUmVwZWF0Q291bnQs
IFtzdGFydENvbW1pdFNldCwgZW5kQ29tbWl0U2V0XSk7CisgICAgfQorfQorCittYWluKHByb2Nl
c3MuYXJndik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtc2V0LXRlc3RzLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtc2V0LXRlc3Rz
LmpzCmluZGV4IDFiMmZhYjFhYTVmODI4MWM1OGQ0YmRjYzM4YTUzOWU1NTNmOGU3YTkuLjg4MjA5
MWY1NjBhNTVjNGViY2ViYmUzNmMyMjY0ODIxNDgwY2M5NmUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LXNldC10ZXN0cy5qcworKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9tZWFzdXJlbWVudC1zZXQtdGVz
dHMuanMKQEAgLTQxLDcgKzQxLDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4g
ewogICAgICAgICAgICAgICAgIGNhbGxDb3VudCsrOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNv
bicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21l
YXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNv
bHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogOTQ2Njg0ODAwMDAwLApAQCAt
NjcsNyArNjcsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAg
ICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMTAw
MCwgMjAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0u
dXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpz
b24nKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjYWxsQ291bnQsIDApOwogICAgICAgICB9
KTsKIApAQCAtNzcsNyArNzcsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7
CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDEwMDAsIDIwMDAsICgpID0+IGNhbGxDb3Vu
dCsrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwogICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKGNhbGxDb3VudCwgMCk7Ci0gICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24n
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFz
dXJlbWVudC1zZXQtMS0xLmpzb24nKTsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMjAw
MCwgMzAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAw
KTsKQEAgLTg4LDcgKzg4LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewog
ICAgICAgICAgICAgbGV0IGNhbGxDb3VudCA9IDA7CiAgICAgICAgICAgICBjb25zdCBwcm9taXNl
ID0gc2V0LmZldGNoQmV0d2VlbigyMDAwLCAzMDAwLCAoKSA9PiBjYWxsQ291bnQrKyk7CiAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEu
anNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5y
ZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTExMiw3
ICsxMTIsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAg
ICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBzZXQuZmV0
Y2hCZXR3ZWVuKDEwMDAsIDMwMDAsICgpID0+IGNhbGxDb3VudCsrKTsKICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1l
bnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewog
ICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLApAQCAtMTI4LDcgKzEyOCw3IEBA
IGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIHJldHVybiB3
YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwoY2FsbENvdW50LCAxKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNb
MV0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAuanNvbicpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvZGF0YS9tZWFzdXJlbWVu
dC1zZXQtMS0xLTIwMDAuanNvbicpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogCkBA
IC0xMzcsNyArMTM3LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAg
ICAgICAgICAgbGV0IGNhbGxDb3VudEZvcldhaXRpbmdDYWxsYmFjayA9IDA7CiAgICAgICAgICAg
ICBzZXQuZmV0Y2hCZXR3ZWVuKDIwMDAsIDMwMDAsICgpID0+IGNhbGxDb3VudEZvcldhaXRpbmdD
YWxsYmFjaysrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEp
OwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVh
c3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAg
ICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQn
OiAxMDAwLApAQCAtMTUzLDcgKzE1Myw3IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgp
ID0+IHsKICAgICAgICAgICAgIGxldCBjYWxsQ291bnQgPSAwOwogICAgICAgICAgICAgcmV0dXJu
IHdhaXRGb3JNZWFzdXJlbWVudFNldCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwotICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5q
c29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy9k
YXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7CiAKICAgICAgICAgICAgICAgICBz
ZXQuZmV0Y2hCZXR3ZWVuKDAsIDcwMDAsICgpID0+IGNhbGxDb3VudCsrKTsKIApAQCAtMTYyLDgg
KzE2Miw4IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50Rm9yV2FpdGluZ0NhbGxiYWNrLCAwKTsKICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAxKTsKICAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCA0KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAu
anNvbicpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1szXS51cmwsICcu
Li9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEt
MjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNdLnVy
bCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgfSk7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1l
bnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAg
ICAgIGNvbnN0IHByb21pc2UgPSBzZXQuZmV0Y2hCZXR3ZWVuKDI3MDcsIDQyMDcsICgpID0+IGNh
bGxDb3VudCsrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEp
OwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVh
c3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAg
ICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQn
OiAxMDAwLApAQCAtMTg3LDggKzE4Nyw4IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgp
ID0+IHsKIAogICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JNZWFzdXJlbWVudFNldCgpLnRoZW4o
KCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDMp
OwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00MDAw
Lmpzb24nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAn
L2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS0zMDAwLmpzb24nKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00
MDAwLmpzb24nKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAxKTsg
Ly8gNDAwMC00MjA3CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CkBAIC0xOTgsNyArMTk4
LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgbGV0
IGNhbGxDb3VudEZvcldhaXRpbmdDYWxsYmFjayA9IDA7CiAgICAgICAgICAgICBzZXQuZmV0Y2hC
ZXR3ZWVuKDMyMDAsIDM3MDAsICgpID0+IGNhbGxDb3VudEZvcldhaXRpbmdDYWxsYmFjaysrKTsK
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwotICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0
LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAn
L2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAgICAgIHJlcXVlc3Rz
WzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLApAQCAt
MjE0LDIxICsyMTQsMjEgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAg
ICAgICAgICAgbGV0IGNhbGxDb3VudCA9IDA7CiAgICAgICAgICAgICByZXR1cm4gd2FpdEZvck1l
YXN1cmVtZW50U2V0KCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlcXVlc3RzLmxlbmd0aCwgMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzWzFdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00MDAwLmpzb24nKTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2RhdGEvbWVhc3Vy
ZW1lbnQtc2V0LTEtMS00MDAwLmpzb24nKTsKICAgICAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3
ZWVuKDEyMDcsIDEyOTMsICgpID0+IGNhbGxDb3VudCsrKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCk7CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsK
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50Rm9yV2FpdGluZ0NhbGxiYWNr
LCAwKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAwKTsKICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAzKTsKLSAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1z
ZXQtMS0xLTIwMDAuanNvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
c1syXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAuanNvbicpOwogICAgICAg
ICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMTk2NCwgMzQwMSwgKCkgPT4gY2FsbENvdW50Kysp
OwogICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKTsKICAgICAg
ICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjYWxs
Q291bnRGb3JXYWl0aW5nQ2FsbGJhY2ssIDApOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChjYWxsQ291bnQsIDApOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5s
ZW5ndGgsIDQpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1szXS51cmws
ICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0x
LTEtMzAwMC5qc29uJyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKQEAgLTIzNyw3
ICsyMzcsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAg
ICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMCwgMzAw
MCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAn
Li4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsK
IAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAgICAgICAgICAgICAgICAgJ2Ns
dXN0ZXJTdGFydCc6IDIwMDAsCkBAIC0yNjIsNyArMjYyLDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVt
ZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgbGV0IHJlamVjdGVkID0gZmFsc2U7CiAgICAg
ICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDEwMDAsIDMwMDAsICgpID0+IGNhbGxDb3VudCsrKS5j
YXRjaCgoKSA9PiByZWplY3RlZCA9IHRydWUpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0u
dXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpz
b24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVqZWN0KDUwMCk7CiAKQEAgLTI3OCw3
ICsyNzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAg
ICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMTAwMCwg
MjAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJs
LCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24n
KTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAgICAgICAgICAgICAgICAg
J2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC0yOTQsNyArMjk0LDcgQEAgZGVzY3JpYmUoJ01lYXN1
cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JNZWFzdXJlbWVu
dFNldCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjYWxsQ291
bnQsIDApOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIp
OwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9hcGkv
bWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPTEmbWV0cmljPTEnKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2FwaS9tZWFzdXJlbWVudC1zZXQ/cGxhdGZv
cm09MSZtZXRyaWM9MScpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogCkBAIC0zMDMs
MTQgKzMwMywxNCBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAg
ICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMTAw
MCwgMjAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0u
dXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpz
b24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVqZWN0KDQwNCk7CiAKICAgICAgICAg
ICAgIHJldHVybiB3YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKS50aGVuKCgpID0+IHsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAwKTsKICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMV0udXJsLCAnLi4vYXBpL21lYXN1cmVtZW50LXNldD9wbGF0Zm9ybT0xJm1l
dHJpYz0xJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwg
Jy9hcGkvbWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPTEmbWV0cmljPTEnKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9KTsKIApAQCAtMzE5LDcgKzMxOSw3IEBAIGRlc2NyaWJlKCdNZWFzdXJl
bWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIGxldCBjYWxsQ291bnQgPSAwOwogICAgICAg
ICAgICAgc2V0LmZldGNoQmV0d2VlbigxMDAwLCAzMDAwLCAoKSA9PiBjYWxsQ291bnQrKyk7CiAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0x
LTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9k
YXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1sw
XS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTMz
OCw3ICszMzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG5vQ2FjaGVGZXRjaENvdW50LCAwKTsKICAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwoc2V0Ll9zb3J0ZWRDbHVzdGVycy5sZW5ndGgsIDEpOwogICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwotICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNl
dC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzFdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CiAKICAgICAg
ICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAgICAgJ2Ns
dXN0ZXJTdGFydCc6IDEwMDAsCkBAIC0zNTksNyArMzU5LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVt
ZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChub0NhY2hlRmV0
Y2hDb3VudCwgMCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHNldC5fc29ydGVkQ2x1
c3RlcnMubGVuZ3RoLCAyKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMu
bGVuZ3RoLCAzKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJs
LCAnLi4vYXBpL21lYXN1cmVtZW50LXNldD9wbGF0Zm9ybT0xJm1ldHJpYz0xJyk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9hcGkvbWVhc3VyZW1lbnQt
c2V0P3BsYXRmb3JtPTEmbWV0cmljPTEnKTsKIAogICAgICAgICAgICAgICAgIHJlcXVlc3RzWzJd
LnJlc29sdmUoewogICAgICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAg
LTM3OCw3ICszNzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG5vQ2FjaGVGZXRjaENvdW50LCAxKTsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoc2V0Ll9zb3J0ZWRDbHVzdGVycy5sZW5ndGgsIDIpOwogICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDQpOwotICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1szXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50
LXNldC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzWzNdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CiAKICAg
ICAgICAgICAgICAgICByZXF1ZXN0c1szXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAgICAg
J2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC00MDUsNyArNDA1LDcgQEAgZGVzY3JpYmUoJ01lYXN1
cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgbGV0IGNhbGxDb3VudCA9IDA7CiAgICAg
ICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDIwMDAsIDMwMDAsICgpID0+IGNhbGxDb3VudCsrKTsK
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwotICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0
LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAn
L2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAgICAgIGxldCBhbHRl
cm5hdGl2ZUNhbGxDb3VudCA9IDA7CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDIwMDAs
IDMwMDAsICgpID0+IGFsdGVybmF0aXZlQ2FsbENvdW50KyspOwpAQCAtNDMzLDcgKzQzMyw3IEBA
IGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIGxldCBjYWxs
Q291bnRGb3I0MDAwID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMzIwMCwgMzcw
MCwgKCkgPT4gY2FsbENvdW50Rm9yNDAwMCsrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXF1ZXN0cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBd
LnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5q
c29uJyk7CiAKICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAg
ICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLApAQCAtNDUyLDcgKzQ1Miw3IEBAIGRlc2NyaWJlKCdN
ZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yTWVhc3Vy
ZW1lbnRTZXQoKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2Fs
bENvdW50Rm9yNDAwMCwgMCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
Lmxlbmd0aCwgMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVy
bCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00MDAwLmpzb24nKTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0
LTEtMS00MDAwLmpzb24nKTsKIAogICAgICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMzcw
OCwgNDgwMCwgKCkgPT4gY2FsbENvdW50Rm9yNDAwMFRvNTAwMCsrKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCk7CkBAIC00NjUsNyArNDY1LDcgQEAgZGVz
Y3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNhbGxDb3VudEZvcjIwMDAsIDApOwog
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDMpOwotICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1syXS51cmwsICcuLi9kYXRhL21lYXN1cmVt
ZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzJdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CiAK
ICAgICAgICAgICAgICAgICByZXF1ZXN0c1syXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAg
ICAgJ2Zvcm1hdE1hcCc6IFtdLApAQCAtNDg2LDcgKzQ4Niw3IEBAIGRlc2NyaWJlKCdNZWFzdXJl
bWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChjYWxsQ291bnRGb3IyMDAwVG80MDAwLCAxKTsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCA0KTsKLSAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbM10udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQt
MS0xLTMwMDAuanNvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sz
XS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicpOwogCiAgICAgICAg
ICAgICAgICAgcmVxdWVzdHNbM10ucmVzb2x2ZSh7CiAgICAgICAgICAgICAgICAgICAgICdmb3Jt
YXRNYXAnOiBbXSwKQEAgLTUzMyw3ICs1MzMsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQn
LCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0
KDEsIDEsIDMwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNldC5mZXRjaEJldHdl
ZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3Ro
LCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAg
ICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0
YXJ0JzogMTAwMCwKQEAgLTU1Niw3ICs1NTYsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQn
LCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0
KDEsIDEsIDMwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNldC5mZXRjaEJldHdl
ZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3Ro
LCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAg
ICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0
YXJ0JzogMTAwMCwKQEAgLTU3OCw3ICs1NzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQn
LCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0
KDEsIDEsIDUwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNldC5mZXRjaEJldHdl
ZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3Ro
LCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAg
ICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0
YXJ0JzogMTAwMCwKQEAgLTU5Myw3ICs1OTMsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQn
LCAoKSA9PiB7CiAKICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKS50
aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3Ro
LCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnLi4v
ZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicpOworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTMw
MDAuanNvbicpOwogICAgICAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoewogICAgICAg
ICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKICAgICAgICAgICAgICAgICAgICAg
J2NsdXN0ZXJTaXplJzogMTAwMCwKQEAgLTYxMyw3ICs2MTMsNyBAQCBkZXNjcmliZSgnTWVhc3Vy
ZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVudFNl
dC5maW5kU2V0KDEsIDEsIDUwMDApOwogICAgICAgICAgICAgc2V0LmZldGNoQmV0d2VlbigyMDAw
LCAzMDAwKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwot
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVhc3Vy
ZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNb
MF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAgICAg
IHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQnOiAx
MDAwLApAQCAtNjI4LDcgKzYyOCw3IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+
IHsKIAogICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JNZWFzdXJlbWVudFNldCgpLnRoZW4oKCkg
PT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwot
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRhL21l
YXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlcXVlc3RzWzFdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29u
Jyk7CiAgICAgICAgICAgICAgICAgcmVxdWVzdHNbMV0ucmVzb2x2ZSh7CiAgICAgICAgICAgICAg
ICAgICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLAogICAgICAgICAgICAgICAgICAgICAnY2x1c3Rl
clNpemUnOiAxMDAwLApAQCAtNjQ4LDcgKzY0OCw3IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNl
dCcsICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IHNldCA9IE1lYXN1cmVtZW50U2V0LmZpbmRT
ZXQoMSwgMSwgNTAwMCk7CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDIwMDAsIDUwMDAp
OwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1z
ZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmws
ICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKIAogICAgICAgICAgICAgcmVxdWVz
dHNbMF0ucmVzb2x2ZSh7CiAgICAgICAgICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBA
IC02NjMsOCArNjYzLDggQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogCiAg
ICAgICAgICAgICByZXR1cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCkudGhlbigoKSA9PiB7CiAg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMyk7Ci0gICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1l
bnQtc2V0LTEtMS0zMDAwLmpzb24nKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHNbMl0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTQwMDAuanNvbicpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvZGF0YS9tZWFz
dXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0c1syXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTQwMDAuanNvbicp
OwogICAgICAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoewogICAgICAgICAgICAgICAg
ICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKICAgICAgICAgICAgICAgICAgICAgJ2NsdXN0ZXJT
aXplJzogMTAwMCwKQEAgLTY4Niw3ICs2ODYsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQn
LCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0
KDEsIDEsIDMwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNldC5mZXRjaEJldHdl
ZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3Ro
LCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAg
ICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0
YXJ0JzogMTAwMCwKQEAgLTc3NSw3ICs3NzUsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQn
LCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0
KDE1LCA3NjksIDE0ODQxMDU3Mzg3MzYpOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNl
dC5mZXRjaEJldHdlZW4oMTQ3NjQyNjQ4ODQ2NSwgMTQ4NDIwMzgwMTU3Myk7CiAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xNS03NjkuanNv
bicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21l
YXN1cmVtZW50LXNldC0xNS03NjkuanNvbicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5y
ZXNvbHZlKHNhbXBsZUNsdXN0ZXIpOwogCkBAIC05NzUsNyArOTc1LDcgQEAgZGVzY3JpYmUoJ01l
YXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgY29uc3Qgc2V0ID0gTWVhc3VyZW1l
bnRTZXQuZmluZFNldCgxLCAxLCA1MDAwKTsKICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBz
ZXQuZmV0Y2hCZXR3ZWVuKDQwMDAsIDUwMDApOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0u
dXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpz
b24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAgICAgICAgICAgICAg
ICAgJ2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBkZXNjcmliZSgn
TWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJl
bWVudFNldC5maW5kU2V0KDEsIDEsIDUwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9
IHNldC5mZXRjaEJldHdlZW4oMzAwMCwgNTAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sw
XS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEu
anNvbicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAg
ICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTEwMzAsNyArMTAzMCw3IEBAIGRlc2NyaWJl
KCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKIAogICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JN
ZWFzdXJlbWVudFNldCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0cy5sZW5ndGgsIDIpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1sxXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy9kYXRhL21lYXN1
cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldC5m
ZXRjaFNlZ21lbnRhdGlvbignc2VnbWVudFRpbWVTZXJpZXNCeU1heGltaXppbmdTY2h3YXJ6Q3Jp
dGVyaW9uJywgW10sICdjdXJyZW50JywgZmFsc2UpOwogICAgICAgICAgICAgfSkudGhlbigoc2Vn
bWVudGF0aW9uKSA9PiB7CiAgICAgICAgICAgICAgICAgY29uc3QgdGltZVNlcmllcyA9IHNldC5m
ZXRjaGVkVGltZVNlcmllcygnY3VycmVudCcsIGZhbHNlLCBmYWxzZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338979</attachid>
            <date>2018-04-26 23:51:08 -0700</date>
            <delta_ts>2018-04-30 17:29:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184419-20180426235107.patch</filename>
            <type>text/plain</type>
            <size>34426</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxMDg3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBiMzk5YmNiMThjNTJmMWJkMzczMTllYWJjODVlODUzYzIzODA2Yzc4Li43NGNjYWRlZjkz
MzVjMzZkMDQ2Zjc2YjU1MzliNDA0MTNjNDJmOWQzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxOC0wNC0yNSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBXcml0ZSBhIHNjcmlwdCB0aGF0IGRldGVjdHMgY2hhcnQg
Y2hhbmdlcyBieSB1c2luZyB2MyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODQ0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIHNjcmlwdCB0aGF0IGRldGVkdHMgY2hhcnQgY2hhbmdl
cyBhbmQgc2NoZWR1bGUgY29uZmlybWluZyBhbmFseXNpcyB0YXNrLgorCisgICAgICAgICogcHVi
bGljL3YzL2FzeW5jLXRhc2suanM6CisgICAgICAgIChBc3luY1Rhc2suaXNBdmFpbGFibGUpOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgQXN5bmNUYXNrIGlzIGF2YWlsYWJs
ZSBvciBub3QgYXMgJ1dvcmtlcicgaXMgbm90CisgICAgICAgIGF2YWlsYWJsZSBpbiBub2RlanMu
CisgICAgICAgIChBc3luY1Rhc2spOgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvYnVnLmpz
OiBFeHBvcnQgYXMgYSBtb2R1bGUuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9tZWFzdXJl
bWVudC1zZXQuanM6CisgICAgICAgIChNZWFzdXJlbWVudFNldC5wcm90b3R5cGUuX2NvbnN0cnVj
dFVybCk6IFVwZGF0ZWQgdGhlIEFQSSB1cmwgYnkgdXNpbmcgYWJzb2x1dGUgdXJsLgorICAgICAg
ICAoTWVhc3VyZW1lbnRTZXQucHJvdG90eXBlLl9pbnZva2VTZWdtZW50YXRpb25BbGdvcml0aG0p
OiBBZGRlZCBhIGNoZWNrIHRvIGF2b2lkIHVzaW5nIEFzeW5jVGFzayB3aGVuIHJ1bm5pbmcgaW4g
Tm9kZWpzLgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQpOgorICAgICAgICAqIHRvb2xzL2pzL3Yz
LW1vZGVscy5qczogQWRkZWQgaW1wb3J0IGZvciAnQnVnJyBvYmplY3QuCisgICAgICAgICogdG9v
bHMvcnVuLWFuYWx5c2lzLmpzOiBBZGRlZCBzY3JpcHQgdG8gZGV0ZWN0IGNoYXJ0IGNoYW5nZXMu
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKGFzeW5jLmFuYWx5c2lzTG9vcCk6CisgICAgICAg
IChwcm90b3R5cGUuYXN5bmMuYW5hbHl6ZU9uY2UpOgorICAgICAgICAoY29uZmlndXJhdGlvbnNG
b3JUZXN0aW5nKTogQ3JlYXRlIHRlc3RpbmcgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gbWFuaWZl
c3QuCisgICAgICAgIChwcm90b3R5cGUuYXN5bmMuYW5hbHl6ZVRlc3RDb25maWd1cmF0aW9uKTog
QW5hbHl6ZXMgYSBjb25maWd1cmF0aW9ucyBpbiBnaXZlbiBkYXRlcyBhbmQgY3JlYXRlcyBjb25m
aXJtaW5nIEEvQgorICAgICAgICB0YXNrIHdoZW4gdGhlcmUgaXMgbm8gZXhpc3RpbmcgYW5hbHlz
aXMgdGFzayBmb3IgdGhlIHNhbWUgcmFuZ2UuCisgICAgICAgICogdW5pdC10ZXN0cy9tZWFzdXJl
bWVudC1zZXQtdGVzdHMuanM6IFVwZGF0ZWQgdW5pdCB0ZXN0cy4KKyAgICAgICAgKGNvbnN0LnNl
dCBNZWFzdXJlbWVudFNldCk6CisKIDIwMTgtMDQtMjYgIERld2VpIFpodSAgPGRld2VpX3podUBh
cHBsZS5jb20+CiAKICAgICAgICAgRXh0ZW5kIGNyZWF0ZS1hbmFseXNpcy10ZXN0IEFQSSB0byBi
ZSBhYmxlIHRvIGNyZWF0ZSB3aXRoIGNvbmZpcm1pbmcgdGVzdCBncm91cC4KZGlmZiAtLWdpdCBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvYXN5bmMtdGFzay5qcyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvYXN5bmMtdGFzay5qcwppbmRleCAxMWI1NGZm
ZTM0ZmU1OTBkNWIwMzcxOGJhNGRhNzI2M2I4NGRlYTc1Li5kZmVmMDY1NGQ1YjM2MzZjNDMwMjdh
YWUwNzY0ZTk2NzZiZDBmODMxIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2FzeW5jLXRhc2suanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9hc3luYy10YXNrLmpzCkBAIC0yOSw2ICsyOSwxMCBAQCBjbGFzcyBBc3luY1Rhc2sg
ewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBzdGF0aWMgaXNBdmFpbGFibGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHR5cGVvZiBtb2R1bGUgPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdp
bmRvdyA9PSAndW5kZWZpbmVkJzsKKyAgICB9CiB9CiAKIEFzeW5jVGFzay5fYXN5bmNNZXNzYWdl
SWQgPSAwOwpAQCAtMTQ5LDMgKzE1Myw2IEBAIGlmICh0eXBlb2YgbW9kdWxlID09ICd1bmRlZmlu
ZWQnICYmIHR5cGVvZiB3aW5kb3cgPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9yCiAgICAg
aW1wb3J0U2NyaXB0cygnL3NoYXJlZC9zdGF0aXN0aWNzLmpzJyk7CiAgICAgb25tZXNzYWdlID0g
QXN5bmNUYXNrV29ya2VyLndvcmtlckRpZFJlY2lldmVNZXNzYWdlLmJpbmQoQXN5bmNUYXNrV29y
a2VyKTsKIH0KKworaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpCisgICAgbW9kdWxl
LmV4cG9ydHMuQXN5bmNUYXNrID0gQXN5bmNUYXNrOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxz
L2J1Zy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1Zy5q
cwppbmRleCAwMzI5YjdlMTQyYzY5ZDE3YWJlM2Y5ZTAyOGYzNGE3MTNjY2RiZWE0Li40OWEyMTRl
YTdhNjg5OTljZTFlMmM3YmQ0Mzg5YTcwN2VjZTVjYzIxIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWcuanMKKysrIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLmpzCkBAIC0yOSwzICsyOSw3IEBAIGNs
YXNzIEJ1ZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgbGFiZWwoKSB7IHJldHVybiB0
aGlzLmJ1Z051bWJlcigpOyB9CiAgICAgdGl0bGUoKSB7IHJldHVybiBgJHt0aGlzLl9idWdUcmFj
a2VyLmxhYmVsKCl9OiAke3RoaXMuYnVnTnVtYmVyKCl9YDsgfQogfQorCisKK2lmICh0eXBlb2Yg
bW9kdWxlICE9ICd1bmRlZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLkJ1ZyA9IEJ1ZzsKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMKaW5kZXggYWM0
YjI0NTkwYmNmMWVmOGMxMzI5OWNhMWYyYjMwZjlhNzUyZGIxOS4uZTRhOGEwNzZhZDEwMDgxZDBl
MWM5ZGVmN2Q3YzUwNmM0NzJiMzZmNSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LXNldC5qcwpAQCAtOTQs
MTAgKzk0LDEwIEBAIGNsYXNzIE1lYXN1cmVtZW50U2V0IHsKICAgICBfY29uc3RydWN0VXJsKHVz
ZUNhY2hlLCBjbHVzdGVyRW5kVGltZSkKICAgICB7CiAgICAgICAgIGlmICghdXNlQ2FjaGUpIHsK
LSAgICAgICAgICAgIHJldHVybiBgLi4vYXBpL21lYXN1cmVtZW50LXNldD9wbGF0Zm9ybT0ke3Ro
aXMuX3BsYXRmb3JtSWR9Jm1ldHJpYz0ke3RoaXMuX21ldHJpY0lkfWA7CisgICAgICAgICAgICBy
ZXR1cm4gYC9hcGkvbWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPSR7dGhpcy5fcGxhdGZvcm1JZH0m
bWV0cmljPSR7dGhpcy5fbWV0cmljSWR9YDsKICAgICAgICAgfQogICAgICAgICB2YXIgdXJsOwot
ICAgICAgICB1cmwgPSBgLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtJHt0aGlzLl9wbGF0Zm9ybUlk
fS0ke3RoaXMuX21ldHJpY0lkfWA7CisgICAgICAgIHVybCA9IGAvZGF0YS9tZWFzdXJlbWVudC1z
ZXQtJHt0aGlzLl9wbGF0Zm9ybUlkfS0ke3RoaXMuX21ldHJpY0lkfWA7CiAgICAgICAgIGlmIChj
bHVzdGVyRW5kVGltZSkKICAgICAgICAgICAgIHVybCArPSAnLScgKyArY2x1c3RlckVuZFRpbWU7
CiAgICAgICAgIHVybCArPSAnLmpzb24nOwpAQCAtMjkwLDcgKzI5MCw3IEBAIGNsYXNzIE1lYXN1
cmVtZW50U2V0IHsKICAgICAgICAgdmFyIGFyZ3MgPSBbdGltZVNlcmllc1ZhbHVlc10uY29uY2F0
KHBhcmFtZXRlcnMgfHwgW10pOwogCiAgICAgICAgIHZhciB0aW1lU2VyaWVzSXNTaG9ydEVub3Vn
aEZvclN5bmNDb21wdXRhdGlvbiA9IHRpbWVTZXJpZXNWYWx1ZXMubGVuZ3RoIDwgMTAwOwotICAg
ICAgICBpZiAodGltZVNlcmllc0lzU2hvcnRFbm91Z2hGb3JTeW5jQ29tcHV0YXRpb24pIHsKKyAg
ICAgICAgaWYgKHRpbWVTZXJpZXNJc1Nob3J0RW5vdWdoRm9yU3luY0NvbXB1dGF0aW9uIHx8ICFB
c3luY1Rhc2suaXNBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0
YXJ0TWVhc3VyaW5nVGltZSgnX2ludm9rZVNlZ21lbnRhdGlvbkFsZ29yaXRobScsICdzeW5jU2Vn
bWVudGF0aW9uJyk7CiAgICAgICAgICAgICB2YXIgc2VnbWVudGF0aW9uID0gU3RhdGlzdGljc1tz
ZWdtZW50YXRpb25OYW1lXS5hcHBseSh0aW1lU2VyaWVzVmFsdWVzLCBhcmdzKTsKICAgICAgICAg
ICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdfaW52b2tlU2VnbWVudGF0aW9u
QWxnb3JpdGhtJywgJ3N5bmNTZWdtZW50YXRpb24nKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCmluZGV4IDZjZmQ4M2I2NmRjNzE0ODJjMzk4ZjFi
ZTczN2NmNjA5N2M0YTk3MGEuLmUxYjI0OWM0ZjE3NDU0OWFkMDY4OWJlNjBlOWY3OWI3OWY3ZWJl
ODQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2Rl
bHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5q
cwpAQCAtMTEsNiArMTEsNyBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy9kYXRhLW1vZGVsLmpzJywg
J0RhdGFNb2RlbE9iamVjdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvZGF0YS1tb2RlbC5qcycs
ICdMYWJlbGVkT2JqZWN0Jyk7CiAKIGltcG9ydEZyb21WMygnbW9kZWxzL2FuYWx5c2lzLXRhc2su
anMnLCAnQW5hbHlzaXNUYXNrJyk7CitpbXBvcnRGcm9tVjMoJ21vZGVscy9idWcuanMnLCAnQnVn
Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWctdHJhY2tlci5qcycsICdCdWdUcmFja2VyJyk7
CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWlsZC1yZXF1ZXN0LmpzJywgJ0J1aWxkUmVxdWVzdCcp
OwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGRlci5qcycsICdCdWlsZCcpOwpAQCAtMzcsNSAr
MzgsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy91cGxvYWRlZC1maWxlLmpzJywgJ1VwbG9hZGVk
RmlsZScpOwogaW1wb3J0RnJvbVYzKCdpbnN0cnVtZW50YXRpb24uanMnLCAnSW5zdHJ1bWVudGF0
aW9uJyk7CiBpbXBvcnRGcm9tVjMoJ2xhemlseS1ldmFsdWF0ZWQtZnVuY3Rpb24uanMnLCAnTGF6
aWx5RXZhbHVhdGVkRnVuY3Rpb24nKTsKIGltcG9ydEZyb21WMygnY29tbWl0LXNldC1yYW5nZS1i
aXNlY3Rvci5qcycsICdDb21taXRTZXRSYW5nZUJpc2VjdG9yJyk7CitpbXBvcnRGcm9tVjMoJ2Fz
eW5jLXRhc2suanMnLCAnQXN5bmNUYXNrJyk7CiAKIGdsb2JhbC5TdGF0aXN0aWNzID0gcmVxdWly
ZSgnLi4vLi4vcHVibGljL3NoYXJlZC9zdGF0aXN0aWNzLmpzJyk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3J1
bi1hbmFseXNpcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9ydW4tYW5hbHlz
aXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWE0NjEzOWM3YzcxNmI4NDk1M2ZhMjE0MjM2NTdhZmU0YTg1ZmY0
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9ydW4t
YW5hbHlzaXMuanMKQEAgLTAsMCArMSwxNjYgQEAKKyMhL3Vzci9sb2NhbC9iaW4vbm9kZQorCitj
b25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7Citjb25zdCBTdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4v
cHVibGljL3NoYXJlZC9zdGF0aXN0aWNzJyk7Citjb25zdCBwYXJzZUFyZ3VtZW50cyA9IHJlcXVp
cmUoJy4vanMvcGFyc2UtYXJndW1lbnRzLmpzJykucGFyc2VBcmd1bWVudHM7Citjb25zdCBSZW1v
dGVBUEkgPSByZXF1aXJlKCcuL2pzL3JlbW90ZS5qcycpLlJlbW90ZUFQSTsKK3JlcXVpcmUoJy4v
anMvdjMtbW9kZWxzLmpzJyk7CitnbG9iYWwuUHJpdmlsZWdlZEFQSSA9IHJlcXVpcmUoJy4vanMv
cHJpdmlsZWdlZC1hcGkuanMnKS5Qcml2aWxlZ2VkQVBJOworCitmdW5jdGlvbiBtYWluKGFyZ3Yp
Cit7CisgICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRzKGFyZ3YsIFsKKyAgICAgICAg
e25hbWU6ICctLXNlcnZlci1jb25maWctanNvbicsIHJlcXVpcmVkOiB0cnVlfSwKKyAgICAgICAg
e25hbWU6ICctLWNoYW5nZS1kZXRlY3Rpb24tY29uZmlnLWpzb24nLCByZXF1aXJlZDogdHJ1ZX0s
CisgICAgICAgIHtuYW1lOiAnLS1zZWNvbmRzLXRvLXNsZWVwJywgdHlwZTogcGFyc2VGbG9hdCwg
ZGVmYXVsdDogMTIwMH0sCisgICAgXSk7CisKKyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJl
dHVybjsKKworICAgIGFuYWx5c2lzTG9vcChvcHRpb25zKTsKK30KKworYXN5bmMgZnVuY3Rpb24g
YW5hbHlzaXNMb29wKG9wdGlvbnMpCit7CisgICAgY29uc3QgY2hhbmdlRGV0ZWN0aW9uQ29uZmln
cyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKG9wdGlvbnNbJy0tY2hhbmdlLWRldGVjdGlv
bi1jb25maWctanNvbiddLCAndXRmLTgnKSk7CisgICAgY29uc3Qgc2VydmVyQ29uZmlnID0gSlNP
Ti5wYXJzZShmcy5yZWFkRmlsZVN5bmMob3B0aW9uc1snLS1zZXJ2ZXItY29uZmlnLWpzb24nXSwg
J3V0Zi04JykpOworICAgIGNvbnN0IHNlY29uZHNUb1NsZWVwID0gb3B0aW9uc1snLS1zZWNvbmRz
LXRvLXNsZWVwJ107CisgICAgZ2xvYmFsLlJlbW90ZUFQSSA9IG5ldyBSZW1vdGVBUEkoc2VydmVy
Q29uZmlnLnNlcnZlcik7CisgICAgUHJpdmlsZWdlZEFQSS5jb25maWd1cmUoc2VydmVyQ29uZmln
LnNsYXZlLm5hbWUsIHNlcnZlckNvbmZpZy5zbGF2ZS5wYXNzd29yZCk7CisKKyAgICBjb25zdCBt
YW5pZmVzdCA9IGF3YWl0IE1hbmlmZXN0LmZldGNoKCk7CisgICAgY29uc3QgYW5hbHl6ZXIgPSBu
ZXcgQW5hbHl6ZXIoY2hhbmdlRGV0ZWN0aW9uQ29uZmlncywgbWFuaWZlc3QsIGdsb2JhbC5SZW1v
dGVBUEksIGNvbnNvbGUpOworICAgIGF3YWl0IGFuYWx5emVyLmFuYWx5emVPbmNlKCk7CisKKyAg
ICBjb25zb2xlLmxvZyhgU2xlZXBpbmcgZm9yICR7c2Vjb25kc1RvU2xlZXB9IHNlY29uZHMuYCk7
CisgICAgc2V0VGltZW91dCgoKSA9PiBhbmFseXNpc0xvb3Aob3B0aW9ucyksIHNlY29uZHNUb1Ns
ZWVwICogMTAwMCk7Cit9CisKKworY2xhc3MgQW5hbHl6ZXIgeworICAgIGNvbnN0cnVjdG9yKGNo
YW5nZURldGVjdGlvbkNvbmZpZ3MsIG1hbmlmZXN0LCByZW1vdGVBUEksIGxvZ2dlcikKKyAgICB7
CisgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvbkNvbmZpZ3MgPSBjaGFuZ2VEZXRlY3Rpb25D
b25maWdzOworICAgICAgICB0aGlzLl90ZXN0aW5nQ29uZmlndXJhdGlvbnMgPSBBbmFseXplci5j
b25maWd1cmF0aW9uc0ZvclRlc3RpbmcobWFuaWZlc3QpOworICAgICAgICB0aGlzLl9yZW1vdGVB
UEkgPSByZW1vdGVBUEk7CisgICAgICAgIHRoaXMuX2xvZ2dlciA9IGxvZ2dlcjsKKyAgICB9CisK
KyAgICBhc3luYyBhbmFseXplT25jZSgpCisgICAgeworICAgICAgICB0aGlzLl9sb2dnZXIuaW5m
bygiU3RhcnQgZGV0ZWN0aW5nLiIpOworICAgICAgICBmb3IgKGNvbnN0IFtwbGF0Zm9ybSwgbWV0
cmljXSBvZiB0aGlzLl90ZXN0aW5nQ29uZmlndXJhdGlvbnMpCisgICAgICAgICAgICBhd2FpdCB0
aGlzLmFuYWx5emVUZXN0Q29uZmlndXJhdGlvbihwbGF0Zm9ybSwgbWV0cmljKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uZmlndXJhdGlvbnNGb3JUZXN0aW5nKG1hbmlmZXN0KQorICAgIHsKKyAg
ICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSBbXTsKKyAgICAgICAgZm9yIChjb25zdCBkYXNo
Ym9hcmQgb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5kYXNoYm9hcmRzKSkgeworICAgICAgICAg
ICAgZm9yIChjb25zdCByb3cgb2YgZGFzaGJvYXJkKSB7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBjZWxsIG9mIHJvdykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbCBpbnN0YW5j
ZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC5sZW5ndGggPCAy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcGxhdGZvcm1JZCA9IHBhcnNlSW50KGNlbGxbMF0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbWV0cmljSWQgPSBwYXJzZUludChjZWxsWzFdKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwbGF0Zm9ybUlkKSB8fCBpc05hTihtZXRyaWNJ
ZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZpbmRCeUlkKHBsYXRmb3JtSWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0cmljID0gTWV0cmljLmZpbmRCeUlk
KG1ldHJpY0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBsYXRm
b3JtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KG1ldHJpYyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5wdXNoKFtwbGF0Zm9ybSwgbWV0
cmljXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zOworICAgIH0K
KworICAgIGFzeW5jIGFuYWx5emVUZXN0Q29uZmlndXJhdGlvbihwbGF0Zm9ybSwgbWV0cmljKQor
ICAgIHsKKyAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRTZXQgPSBNZWFzdXJlbWVudFNldC5maW5k
U2V0KHBsYXRmb3JtLmlkKCksIG1ldHJpYy5pZCgpLCBwbGF0Zm9ybS5sYXN0TW9kaWZpZWQobWV0
cmljKSk7CisgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKGBcbj09PT0gQW5hbHl6aW5nIHRoZSBs
YXN0ICR7dGhpcy5fY2hhbmdlRGV0ZWN0aW9uQ29uZmlncy5tYXhEYXlzfSBkYXlzOiAiJHttZXRy
aWMuZnVsbE5hbWUoKX0iIG9uICIke3BsYXRmb3JtLm5hbWUoKX0iID09PT1cbmApOworICAgICAg
ICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0g
ZW5kVGltZSAtIHRoaXMuX2NoYW5nZURldGVjdGlvbkNvbmZpZ3MubWF4RGF5cyAqIDI0ICogMzYw
MCAqIDEwMDA7CisKKyAgICAgICAgYXdhaXQgbWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHN0
YXJ0VGltZSwgZW5kVGltZSk7CisgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lU2VyaWVzID0gbWVh
c3VyZW1lbnRTZXQuZmV0Y2hlZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOwor
ICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBjdXJyZW50VGltZVNlcmllcy52YWx1ZXMoKTsKKwor
ICAgICAgICBsZXQgc2VnbWVudGVkVmFsdWVzID0gYXdhaXQgbWVhc3VyZW1lbnRTZXQuZmV0Y2hT
ZWdtZW50YXRpb24oJ3NlZ21lbnRUaW1lU2VyaWVzQnlNYXhpbWl6aW5nU2Nod2FyekNyaXRlcmlv
bicsIFtdLCAnY3VycmVudCcsIGZhbHNlKTsKKworICAgICAgICBpZiAoIXNlZ21lbnRlZFZhbHVl
cyB8fCAhc2VnbWVudGVkVmFsdWVzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5fbG9nZ2Vy
Lndhcm4oYEZhaWxlZCBmZXRjaGluZyBzZWdtZW50YXRpb25zIGZvciAke21ldHJpYy5mdWxsTmFt
ZSgpfSIgb24gIiR7cGxhdGZvcm0ubmFtZSgpfSJgKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IHJhbmdlcyA9IFN0YXRpc3RpY3MuZmluZFJhbmdlc0Zv
ckNoYW5nZURldGVjdGlvbnNXaXRoV2VsY2hzVFRlc3QocmF3VmFsdWVzLCBzZWdtZW50ZWRWYWx1
ZXMsIDAuOTkpLm1hcCgocmFuZ2UpID0+KHsKKyAgICAgICAgICAgICAgICBzdGFydFBvaW50OiBj
dXJyZW50VGltZVNlcmllcy5maW5kUG9pbnRCeUluZGV4KHJhbmdlLnN0YXJ0SW5kZXgpLAorICAg
ICAgICAgICAgICAgIGVuZFBvaW50OiBjdXJyZW50VGltZVNlcmllcy5maW5kUG9pbnRCeUluZGV4
KHJhbmdlLmVuZEluZGV4KSwKKyAgICAgICAgICAgICAgICBzZWdtZW50YXRpb25TdGFydFZhbHVl
OiByYW5nZS5zZWdtZW50YXRpb25TdGFydFZhbHVlLAorICAgICAgICAgICAgICAgIHNlZ21lbnRh
dGlvbkVuZFZhbHVlOiByYW5nZS5zZWdtZW50YXRpb25FbmRWYWx1ZSwKKyAgICAgICAgICAgICAg
ICBvdmVybGFwcGluZ0FuYWx5c2lzVGFza3M6IFtdLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uOiBgc2VyaWVzIGluZGV4IHJhbmdlOiBbJHtyYW5nZS5zdGFydEluZGV4fSAtICR7cmFuZ2Uu
ZW5kSW5kZXh9XWAKKyAgICAgICAgICAgIH0pKTsKKworICAgICAgICBjb25zdCBhbmFseXNpc1Rh
c2tzID0gYXdhaXQgQW5hbHlzaXNUYXNrLmZldGNoQnlQbGF0Zm9ybUFuZE1ldHJpYyhwbGF0Zm9y
bS5pZCgpLCBtZXRyaWMuaWQoKSk7CisKKyAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIGFuYWx5
c2lzVGFza3MpIHsKKyAgICAgICAgICAgIGNvbnN0IHRhc2tTdGFydFBvaW50ID0gY3VycmVudFRp
bWVTZXJpZXMuZmluZEJ5SWQodGFzay5zdGFydE1lYXN1cmVtZW50SWQoKSk7CisgICAgICAgICAg
ICBjb25zdCB0YXNrRW5kUG9pbnQgPSBjdXJyZW50VGltZVNlcmllcy5maW5kQnlJZCh0YXNrLmVu
ZE1lYXN1cmVtZW50SWQoKSk7CisgICAgICAgICAgICBpZiAoIXRhc2tTdGFydFBvaW50IHx8ICF0
YXNrRW5kUG9pbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGZv
ciAoY29uc3QgcmFuZ2Ugb2YgcmFuZ2VzKSB7CisgICAgICAgICAgICAgICAgY29uc3QgZGlzam9p
bnQgPSByYW5nZS5lbmRQb2ludC5zZXJpZXNJbmRleCA8IHRhc2tTdGFydFBvaW50LnNlcmllc0lu
ZGV4CisgICAgICAgICAgICAgICAgICAgIHx8IHRhc2tFbmRQb2ludC5zZXJpZXNJbmRleCA8IHJh
bmdlLnN0YXJ0UG9pbnQuc2VyaWVzSW5kZXg7CisKKyAgICAgICAgICAgICAgICBpZiAoIWRpc2pv
aW50KQorICAgICAgICAgICAgICAgICAgICByYW5nZS5vdmVybGFwcGluZ0FuYWx5c2lzVGFza3Mu
cHVzaCh0YXNrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
ZmlsdGVyZWRSYW5nZXMgPSByYW5nZXMuZmlsdGVyKChyYW5nZSkgPT4gcmFuZ2UuZW5kUG9pbnQu
dGltZSA+PSBzdGFydFRpbWUgJiYgIXJhbmdlLm92ZXJsYXBwaW5nQW5hbHlzaXNUYXNrcy5sZW5n
dGgpCisgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5lbmRQb2ludC50aW1lIC0gYi5lbmRQ
b2ludC50aW1lKTsKKworICAgICAgICBsZXQgc3VtbWFyeSwgcmFuZ2VXaXRoTW9zdFNpZ25pZmlj
YW50Q2hhbmdlID0gbnVsbCwgdmFsdWVDaGFuZ2VTdW1tYXJ5Rm9yUmFuZ2VXaXRoTW9zdFNpZ25p
ZmljYW50Q2hhbmdlID0gbnVsbDsKKyAgICAgICAgY29uc3QgcHJvZ3Jlc3Npb25TdHJpbmcgPSAn
cHJvZ3Jlc3Npb24nOworICAgICAgICBjb25zdCByZWdyZXNzaW9uU3RyaW5nID0gJ3JlZ3Jlc3Np
b24nOworICAgICAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIGZpbHRlcmVkUmFuZ2VzKSB7CisgICAg
ICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZVN1bW1hcnkgPSBtZXRyaWMubGFiZWxGb3JEaWZmZXJl
bmNlKHJhbmdlLnNlZ21lbnRhdGlvblN0YXJ0VmFsdWUsIHJhbmdlLnNlZ21lbnRhdGlvbkVuZFZh
bHVlLAorICAgICAgICAgICAgICAgIHByb2dyZXNzaW9uU3RyaW5nLCByZWdyZXNzaW9uU3RyaW5n
KTsKKyAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29tbWl0U2V0ID0gcmFuZ2Uuc3RhcnRQb2ludC5j
b21taXRTZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IHJhbmdlLmVuZFBv
aW50LmNvbW1pdFNldCgpOworCisgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2hhbmdlSXNNb3Jl
U2lnbmlmaWNhbnQgPSAhcmFuZ2VXaXRoTW9zdFNpZ25pZmljYW50Q2hhbmdlCisgICAgICAgICAg
ICAgICAgfHwgKHZhbHVlQ2hhbmdlU3VtbWFyeUZvclJhbmdlV2l0aE1vc3RTaWduaWZpY2FudENo
YW5nZS5jaGFuZ2VUeXBlID09PSB2YWx1ZUNoYW5nZVN1bW1hcnkuY2hhbmdlVHlwZQorICAgICAg
ICAgICAgICAgICAgICAmJiBNYXRoLmFicyh2YWx1ZUNoYW5nZVN1bW1hcnlGb3JSYW5nZVdpdGhN
b3N0U2lnbmlmaWNhbnRDaGFuZ2UucmVsYXRpdmVDaGFuZ2UpIDwgTWF0aC5hYnModmFsdWVDaGFu
Z2VTdW1tYXJ5LnJlbGF0aXZlQ2hhbmdlKSkKKyAgICAgICAgICAgICAgICB8fCAodmFsdWVDaGFu
Z2VTdW1tYXJ5Rm9yUmFuZ2VXaXRoTW9zdFNpZ25pZmljYW50Q2hhbmdlLmNoYW5nZVR5cGUgPT09
IHByb2dyZXNzaW9uU3RyaW5nCisgICAgICAgICAgICAgICAgICAgICYmIHZhbHVlQ2hhbmdlU3Vt
bWFyeS5jaGFuZ2VUeXBlID09PSByZWdyZXNzaW9uU3RyaW5nKTsKKworICAgICAgICAgICAgY29u
c3QgY3VycmVudFN1bW1hcnkgPSBgUG90ZW50aWFsICR7dmFsdWVDaGFuZ2VTdW1tYXJ5LmNoYW5n
ZUxhYmVsfSBvbiAke3BsYXRmb3JtLm5hbWUoKX0gYmV0d2VlbiAke0NvbW1pdFNldC5kaWZmKHN0
YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXQpfWA7CisKKyAgICAgICAgICAgIGlmIChjdXJyZW50
Q2hhbmdlSXNNb3JlU2lnbmlmaWNhbnQpIHsKKyAgICAgICAgICAgICAgICByYW5nZVdpdGhNb3N0
U2lnbmlmaWNhbnRDaGFuZ2UgPSByYW5nZTsKKyAgICAgICAgICAgICAgICB2YWx1ZUNoYW5nZVN1
bW1hcnlGb3JSYW5nZVdpdGhNb3N0U2lnbmlmaWNhbnRDaGFuZ2UgPSB2YWx1ZUNoYW5nZVN1bW1h
cnk7CisgICAgICAgICAgICAgICAgc3VtbWFyeSA9IGN1cnJlbnRTdW1tYXJ5OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZygnRGV0ZWN0ZWQ6JywgY3VycmVudFN1
bW1hcnkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyYW5nZVdpdGhNb3N0U2lnbmlmaWNh
bnRDaGFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coJ05vdGhpbmcgdG8gYW5h
bHl6ZScpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5f
bG9nZ2VyLmxvZyhgQ3JlYXRpbmcgYW5hbHlzaXMgdGFzayBhbmQgY29uZmlybWluZzogIiR7c3Vt
bWFyeX0iLmApOworICAgICAgICBhd2FpdCBBbmFseXNpc1Rhc2suY3JlYXRlKHN1bW1hcnksIHJh
bmdlV2l0aE1vc3RTaWduaWZpY2FudENoYW5nZS5zdGFydFBvaW50LCByYW5nZVdpdGhNb3N0U2ln
bmlmaWNhbnRDaGFuZ2UuZW5kUG9pbnQsCisgICAgICAgICAgICAnQ29uZmlybScsIHRoaXMuX2No
YW5nZURldGVjdGlvbkNvbmZpZ3MuY29uZmlybVRhc2tSZXBlYXRDb3VudCk7CisgICAgfQorfQor
CittYWluKHByb2Nlc3MuYXJndik7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtc2V0
LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1l
bnQtc2V0LXRlc3RzLmpzCmluZGV4IDQ3MzkzZTA4N2JjNGU5YjRjYjJhYmZlMjQ2N2RiYzc3MTBh
YWIzODQuLmNmMDVlMDgwMmMwMTVhZmM5M2Q5M2E5YTQ4NmEwZDk2NTAyN2VmZmYgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LXNldC10
ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9tZWFzdXJl
bWVudC1zZXQtdGVzdHMuanMKQEAgLTQxLDcgKzQxLDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50
U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGNhbGxDb3VudCsrOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50
LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVy
bCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAgICByZXF1
ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogOTQ2Njg0
ODAwMDAwLApAQCAtNjcsNyArNjcsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9
PiB7CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRj
aEJldHdlZW4oMTAwMCwgMjAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVu
dC1zZXQtMS0xLmpzb24nKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjYWxsQ291bnQsIDAp
OwogICAgICAgICB9KTsKIApAQCAtNzcsNyArNzcsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRT
ZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDEwMDAsIDIwMDAsICgp
ID0+IGNhbGxDb3VudCsrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5n
dGgsIDEpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNhbGxDb3VudCwgMCk7Ci0gICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1z
ZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmws
ICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKICAgICAgICAgICAgIHNldC5mZXRj
aEJldHdlZW4oMjAwMCwgMzAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
Y2FsbENvdW50LCAwKTsKQEAgLTg4LDcgKzg4LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0
JywgKCkgPT4gewogICAgICAgICAgICAgbGV0IGNhbGxDb3VudCA9IDA7CiAgICAgICAgICAgICBj
b25zdCBwcm9taXNlID0gc2V0LmZldGNoQmV0d2VlbigyMDAwLCAzMDAwLCAoKSA9PiBjYWxsQ291
bnQrKyk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVt
ZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBd
LnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAgICBy
ZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAw
MCwKQEAgLTExMiw3ICsxMTIsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7
CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIGNvbnN0IHByb21p
c2UgPSBzZXQuZmV0Y2hCZXR3ZWVuKDEwMDAsIDMwMDAsICgpID0+IGNhbGxDb3VudCsrKTsKICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEt
MS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2Rh
dGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAgICAgIHJlcXVlc3RzWzBd
LnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLApAQCAtMTI4
LDcgKzEyOCw3IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAg
ICAgIHJldHVybiB3YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKS50aGVuKCgpID0+IHsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAxKTsKICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMV0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAuanNv
bicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvZGF0
YS9tZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAuanNvbicpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0pOwogCkBAIC0xMzcsNyArMTM3LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0Jywg
KCkgPT4gewogICAgICAgICAgICAgbGV0IGNhbGxDb3VudEZvcldhaXRpbmdDYWxsYmFjayA9IDA7
CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDIwMDAsIDMwMDAsICgpID0+IGNhbGxDb3Vu
dEZvcldhaXRpbmdDYWxsYmFjaysrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwg
Jy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7
CiAKICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdj
bHVzdGVyU3RhcnQnOiAxMDAwLApAQCAtMTUzLDcgKzE1Myw3IEBAIGRlc2NyaWJlKCdNZWFzdXJl
bWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIGxldCBjYWxsQ291bnQgPSAwOwogICAgICAg
ICAgICAgcmV0dXJuIHdhaXRGb3JNZWFzdXJlbWVudFNldCgpLnRoZW4oKCkgPT4gewogICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwotICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNl
dC0xLTEtMzAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzFdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7CiAKICAgICAg
ICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDAsIDcwMDAsICgpID0+IGNhbGxDb3VudCsrKTsK
IApAQCAtMTYyLDggKzE2Miw4IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsK
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50Rm9yV2FpdGluZ0NhbGxiYWNr
LCAwKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAxKTsKICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCA0KTsKLSAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1z
ZXQtMS0xLTIwMDAuanNvbicpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
c1szXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9kYXRhL21lYXN1cmVt
ZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzNdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKQEAgLTE3Miw3ICsxNzIsNyBAQCBkZXNjcmli
ZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0g
MDsKICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBzZXQuZmV0Y2hCZXR3ZWVuKDI3MDcsIDQy
MDcsICgpID0+IGNhbGxDb3VudCsrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwg
Jy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7
CiAKICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdj
bHVzdGVyU3RhcnQnOiAxMDAwLApAQCAtMTg3LDggKzE4Nyw4IEBAIGRlc2NyaWJlKCdNZWFzdXJl
bWVudFNldCcsICgpID0+IHsKIAogICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JNZWFzdXJlbWVu
dFNldCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
cy5sZW5ndGgsIDMpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51
cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7Ci0gICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQt
c2V0LTEtMS00MDAwLmpzb24nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMV0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS0zMDAwLmpzb24nKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnL2RhdGEvbWVhc3VyZW1l
bnQtc2V0LTEtMS00MDAwLmpzb24nKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2Fs
bENvdW50LCAxKTsgLy8gNDAwMC00MjA3CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CkBA
IC0xOTgsNyArMTk4LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAg
ICAgICAgICAgbGV0IGNhbGxDb3VudEZvcldhaXRpbmdDYWxsYmFjayA9IDA7CiAgICAgICAgICAg
ICBzZXQuZmV0Y2hCZXR3ZWVuKDMyMDAsIDM3MDAsICgpID0+IGNhbGxDb3VudEZvcldhaXRpbmdD
YWxsYmFjaysrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEp
OwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVh
c3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAg
ICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQn
OiAxMDAwLApAQCAtMjE0LDIxICsyMTQsMjEgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0Jywg
KCkgPT4gewogICAgICAgICAgICAgbGV0IGNhbGxDb3VudCA9IDA7CiAgICAgICAgICAgICByZXR1
cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00MDAw
Lmpzb24nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAn
L2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00MDAwLmpzb24nKTsKICAgICAgICAgICAgICAgICBz
ZXQuZmV0Y2hCZXR3ZWVuKDEyMDcsIDEyOTMsICgpID0+IGNhbGxDb3VudCsrKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCk7CiAgICAgICAgICAgICB9KS50
aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50Rm9yV2Fp
dGluZ0NhbGxiYWNrLCAwKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50
LCAwKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAzKTsK
LSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnLi4vZGF0YS9t
ZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAuanNvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0c1syXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTIwMDAuanNv
bicpOwogICAgICAgICAgICAgICAgIHNldC5mZXRjaEJldHdlZW4oMTk2NCwgMzQwMSwgKCkgPT4g
Y2FsbENvdW50KyspOwogICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yTWVhc3VyZW1lbnRT
ZXQoKTsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChjYWxsQ291bnRGb3JXYWl0aW5nQ2FsbGJhY2ssIDApOwogICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChjYWxsQ291bnQsIDApOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0cy5sZW5ndGgsIDQpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1szXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzNdLnVybCwgJy9kYXRhL21lYXN1
cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7
CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7
CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJl
dHdlZW4oMCwgMzAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQt
MS0xLmpzb24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAgICAgICAg
ICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDIwMDAsCkBAIC0yNjIsNyArMjYyLDcgQEAgZGVzY3Jp
YmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgbGV0IHJlamVjdGVkID0g
ZmFsc2U7CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDEwMDAsIDMwMDAsICgpID0+IGNh
bGxDb3VudCsrKS5jYXRjaCgoKSA9PiByZWplY3RlZCA9IHRydWUpOwogICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVu
dC1zZXQtMS0xLmpzb24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVqZWN0KDUwMCk7
CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7
CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJl
dHdlZW4oMTAwMCwgMjAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1z
ZXQtMS0xLmpzb24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAgICAg
ICAgICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC0yOTQsNyArMjk0LDcgQEAgZGVz
Y3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgcmV0dXJuIHdhaXRG
b3JNZWFzdXJlbWVudFNldCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChjYWxsQ291bnQsIDApOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
cy5sZW5ndGgsIDIpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51
cmwsICcuLi9hcGkvbWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPTEmbWV0cmljPTEnKTsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2FwaS9tZWFzdXJlbWVu
dC1zZXQ/cGxhdGZvcm09MSZtZXRyaWM9MScpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0p
OwogCkBAIC0zMDMsMTQgKzMwMywxNCBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9
PiB7CiAgICAgICAgICAgICBsZXQgY2FsbENvdW50ID0gMDsKICAgICAgICAgICAgIHNldC5mZXRj
aEJldHdlZW4oMTAwMCwgMjAwMCwgKCkgPT4gY2FsbENvdW50KyspOwogICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVu
dC1zZXQtMS0xLmpzb24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVqZWN0KDQwNCk7
CiAKICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKS50aGVuKCgpID0+
IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY2FsbENvdW50LCAwKTsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnLi4vYXBpL21lYXN1cmVtZW50LXNldD9w
bGF0Zm9ybT0xJm1ldHJpYz0xJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzWzFdLnVybCwgJy9hcGkvbWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPTEmbWV0cmljPTEnKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKIApAQCAtMzE5LDcgKzMxOSw3IEBAIGRlc2Ny
aWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIGxldCBjYWxsQ291bnQg
PSAwOwogICAgICAgICAgICAgc2V0LmZldGNoQmV0d2VlbigxMDAwLCAzMDAwLCAoKSA9PiBjYWxs
Q291bnQrKyk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsK
LSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1
cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAg
ICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0Jzog
MTAwMCwKQEAgLTMzOCw3ICszMzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9
PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG5vQ2FjaGVGZXRjaENvdW50LCAwKTsK
ICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoc2V0Ll9zb3J0ZWRDbHVzdGVycy5sZW5ndGgs
IDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwot
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRhL21l
YXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlcXVlc3RzWzFdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29u
Jyk7CiAKICAgICAgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsKICAgICAgICAgICAg
ICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC0zNTksNyArMzU5LDcgQEAgZGVzY3Jp
YmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChub0NhY2hlRmV0Y2hDb3VudCwgMCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHNl
dC5fc29ydGVkQ2x1c3RlcnMubGVuZ3RoLCAyKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHMubGVuZ3RoLCAzKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHNbMl0udXJsLCAnLi4vYXBpL21lYXN1cmVtZW50LXNldD9wbGF0Zm9ybT0xJm1ldHJpYz0x
Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9hcGkv
bWVhc3VyZW1lbnQtc2V0P3BsYXRmb3JtPTEmbWV0cmljPTEnKTsKIAogICAgICAgICAgICAgICAg
IHJlcXVlc3RzWzJdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0
JzogMTAwMCwKQEAgLTM3OCw3ICszNzgsNyBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAo
KSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG5vQ2FjaGVGZXRjaENvdW50LCAx
KTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoc2V0Ll9zb3J0ZWRDbHVzdGVycy5sZW5n
dGgsIDIpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDQp
OwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1szXS51cmwsICcuLi9kYXRh
L21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlcXVlc3RzWzNdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5q
c29uJyk7CiAKICAgICAgICAgICAgICAgICByZXF1ZXN0c1szXS5yZXNvbHZlKHsKICAgICAgICAg
ICAgICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC00MDUsNyArNDA1LDcgQEAgZGVz
Y3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgbGV0IGNhbGxDb3Vu
dCA9IDA7CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVuKDIwMDAsIDMwMDAsICgpID0+IGNh
bGxDb3VudCsrKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEp
OwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVh
c3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAg
ICAgIGxldCBhbHRlcm5hdGl2ZUNhbGxDb3VudCA9IDA7CiAgICAgICAgICAgICBzZXQuZmV0Y2hC
ZXR3ZWVuKDIwMDAsIDMwMDAsICgpID0+IGFsdGVybmF0aXZlQ2FsbENvdW50KyspOwpAQCAtNDMz
LDcgKzQzMyw3IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAg
ICAgIGxldCBjYWxsQ291bnRGb3I0MDAwID0gMDsKICAgICAgICAgICAgIHNldC5mZXRjaEJldHdl
ZW4oMzIwMCwgMzcwMCwgKCkgPT4gY2FsbENvdW50Rm9yNDAwMCsrKTsKICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlcXVlc3RzWzBdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1l
bnQtc2V0LTEtMS5qc29uJyk7CiAKICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewog
ICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLApAQCAtNDUyLDcgKzQ1Miw3IEBA
IGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIHJldHVybiB3
YWl0Rm9yTWVhc3VyZW1lbnRTZXQoKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwoY2FsbENvdW50Rm9yNDAwMCwgMCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlcXVlc3RzLmxlbmd0aCwgMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzWzFdLnVybCwgJy4uL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS00MDAwLmpzb24nKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJsLCAnL2RhdGEvbWVh
c3VyZW1lbnQtc2V0LTEtMS00MDAwLmpzb24nKTsKIAogICAgICAgICAgICAgICAgIHNldC5mZXRj
aEJldHdlZW4oMzcwOCwgNDgwMCwgKCkgPT4gY2FsbENvdW50Rm9yNDAwMFRvNTAwMCsrKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCk7CkBAIC00NjUsNyAr
NDY1LDcgQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAg
fSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNhbGxDb3VudEZv
cjIwMDAsIDApOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgs
IDMpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1syXS51cmwsICcuLi9k
YXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAwMC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMjAw
MC5qc29uJyk7CiAKICAgICAgICAgICAgICAgICByZXF1ZXN0c1syXS5yZXNvbHZlKHsKICAgICAg
ICAgICAgICAgICAgICAgJ2Zvcm1hdE1hcCc6IFtdLApAQCAtNDg2LDcgKzQ4Niw3IEBAIGRlc2Ny
aWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4g
ewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjYWxsQ291bnRGb3IyMDAwVG80MDAwLCAx
KTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCA0KTsKLSAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbM10udXJsLCAnLi4vZGF0YS9tZWFz
dXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0c1szXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicp
OwogCiAgICAgICAgICAgICAgICAgcmVxdWVzdHNbM10ucmVzb2x2ZSh7CiAgICAgICAgICAgICAg
ICAgICAgICdmb3JtYXRNYXAnOiBbXSwKQEAgLTUzMyw3ICs1MzMsNyBAQCBkZXNjcmliZSgnTWVh
c3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVu
dFNldC5maW5kU2V0KDEsIDEsIDMwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNl
dC5mZXRjaEJldHdlZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51
cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNv
bicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAg
ICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTU1Niw3ICs1NTYsNyBAQCBkZXNjcmliZSgnTWVh
c3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVu
dFNldC5maW5kU2V0KDEsIDEsIDMwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNl
dC5mZXRjaEJldHdlZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51
cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNv
bicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAg
ICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTU3OCw3ICs1NzgsNyBAQCBkZXNjcmliZSgnTWVh
c3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVu
dFNldC5maW5kU2V0KDEsIDEsIDUwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNl
dC5mZXRjaEJldHdlZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51
cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNv
bicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAg
ICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTU5Myw3ICs1OTMsNyBAQCBkZXNjcmliZSgnTWVh
c3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAKICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yTWVhc3Vy
ZW1lbnRTZXQoKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNb
MV0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvZGF0YS9tZWFzdXJlbWVu
dC1zZXQtMS0xLTMwMDAuanNvbicpOwogICAgICAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29s
dmUoewogICAgICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKICAgICAgICAg
ICAgICAgICAgICAgJ2NsdXN0ZXJTaXplJzogMTAwMCwKQEAgLTYxMyw3ICs2MTMsNyBAQCBkZXNj
cmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBN
ZWFzdXJlbWVudFNldC5maW5kU2V0KDEsIDEsIDUwMDApOwogICAgICAgICAgICAgc2V0LmZldGNo
QmV0d2VlbigyMDAwLCAzMDAwKTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5s
ZW5ndGgsIDEpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4u
L2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMF0udXJsLCAnL2RhdGEvbWVhc3VyZW1lbnQtc2V0LTEtMS5qc29uJyk7CiAK
ICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoewogICAgICAgICAgICAgICAgICdjbHVz
dGVyU3RhcnQnOiAxMDAwLApAQCAtNjI4LDcgKzYyOCw3IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVu
dFNldCcsICgpID0+IHsKIAogICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JNZWFzdXJlbWVudFNl
dCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5s
ZW5ndGgsIDIpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmws
ICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtMzAwMC5qc29uJyk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0x
LTEtMzAwMC5qc29uJyk7CiAgICAgICAgICAgICAgICAgcmVxdWVzdHNbMV0ucmVzb2x2ZSh7CiAg
ICAgICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLAogICAgICAgICAgICAgICAg
ICAgICAnY2x1c3RlclNpemUnOiAxMDAwLApAQCAtNjQ4LDcgKzY0OCw3IEBAIGRlc2NyaWJlKCdN
ZWFzdXJlbWVudFNldCcsICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IHNldCA9IE1lYXN1cmVt
ZW50U2V0LmZpbmRTZXQoMSwgMSwgNTAwMCk7CiAgICAgICAgICAgICBzZXQuZmV0Y2hCZXR3ZWVu
KDIwMDAsIDUwMDApOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwg
MSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9t
ZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKIAogICAgICAg
ICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAgICAgICAgICAgICAgICAgJ2NsdXN0ZXJTdGFy
dCc6IDEwMDAsCkBAIC02NjMsOCArNjYzLDggQEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0Jywg
KCkgPT4gewogCiAgICAgICAgICAgICByZXR1cm4gd2FpdEZvck1lYXN1cmVtZW50U2V0KCkudGhl
bigoKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwg
Myk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy4uL2Rh
dGEvbWVhc3VyZW1lbnQtc2V0LTEtMS0zMDAwLmpzb24nKTsKLSAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVxdWVzdHNbMl0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTQw
MDAuanNvbicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmws
ICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLTMwMDAuanNvbicpOworICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXF1ZXN0c1syXS51cmwsICcvZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0x
LTQwMDAuanNvbicpOwogICAgICAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoewogICAg
ICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKICAgICAgICAgICAgICAgICAg
ICAgJ2NsdXN0ZXJTaXplJzogMTAwMCwKQEAgLTY4Niw3ICs2ODYsNyBAQCBkZXNjcmliZSgnTWVh
c3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVu
dFNldC5maW5kU2V0KDEsIDEsIDMwMDApOwogICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNl
dC5mZXRjaEJldHdlZW4oMjAwMCwgMzAwMCk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51
cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNv
bicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsKICAgICAgICAgICAgICAg
ICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTc3NSw3ICs3NzUsNyBAQCBkZXNjcmliZSgnTWVh
c3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBzZXQgPSBNZWFzdXJlbWVu
dFNldC5maW5kU2V0KDE1LCA3NjksIDE0ODQxMDU3Mzg3MzYpOwogICAgICAgICAgICAgY29uc3Qg
cHJvbWlzZSA9IHNldC5mZXRjaEJldHdlZW4oMTQ3NjQyNjQ4ODQ2NSwgMTQ4NDIwMzgwMTU3Myk7
CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNl
dC0xNS03NjkuanNvbicpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVy
bCwgJy9kYXRhL21lYXN1cmVtZW50LXNldC0xNS03NjkuanNvbicpOwogCiAgICAgICAgICAgICBy
ZXF1ZXN0c1swXS5yZXNvbHZlKHNhbXBsZUNsdXN0ZXIpOwogCkBAIC05NzUsNyArOTc1LDcgQEAg
ZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgY29uc3Qgc2V0
ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNldCgxLCAxLCA1MDAwKTsKICAgICAgICAgICAgIGNvbnN0
IHByb21pc2UgPSBzZXQuZmV0Y2hCZXR3ZWVuKDQwMDAsIDUwMDApOwogICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHNbMF0udXJsLCAnLi4vZGF0YS9tZWFzdXJlbWVudC1zZXQtMS0xLmpzb24nKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcvZGF0YS9tZWFzdXJlbWVu
dC1zZXQtMS0xLmpzb24nKTsKIAogICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CiAg
ICAgICAgICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDEwMDAsCkBAIC0xMDE1LDcgKzEwMTUsNyBA
QCBkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXQnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBz
ZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0KDEsIDEsIDUwMDApOwogICAgICAgICAgICAgY29u
c3QgcHJvbWlzZSA9IHNldC5mZXRjaEJldHdlZW4oMzAwMCwgNTAwMCk7CiAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKLSAgICAgICAgICAgIGFzc2VydC5lcXVh
bChyZXF1ZXN0c1swXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEuanNvbicpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9kYXRhL21lYXN1cmVt
ZW50LXNldC0xLTEuanNvbicpOwogCiAgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHsK
ICAgICAgICAgICAgICAgICAnY2x1c3RlclN0YXJ0JzogMTAwMCwKQEAgLTEwMzAsNyArMTAzMCw3
IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudFNldCcsICgpID0+IHsKIAogICAgICAgICAgICAgcmV0
dXJuIHdhaXRGb3JNZWFzdXJlbWVudFNldCgpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwotICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcuLi9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAw
MC5qc29uJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwg
Jy9kYXRhL21lYXN1cmVtZW50LXNldC0xLTEtNDAwMC5qc29uJyk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHNldC5mZXRjaFNlZ21lbnRhdGlvbignc2VnbWVudFRpbWVTZXJpZXNCeU1heGltaXpp
bmdTY2h3YXJ6Q3JpdGVyaW9uJywgW10sICdjdXJyZW50JywgZmFsc2UpOwogICAgICAgICAgICAg
fSkudGhlbigoc2VnbWVudGF0aW9uKSA9PiB7CiAgICAgICAgICAgICAgICAgY29uc3QgdGltZVNl
cmllcyA9IHNldC5mZXRjaGVkVGltZVNlcmllcygnY3VycmVudCcsIGZhbHNlLCBmYWxzZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339165</attachid>
            <date>2018-04-30 17:29:22 -0700</date>
            <delta_ts>2018-05-01 19:01:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184419-20180430172922.patch</filename>
            <type>text/plain</type>
            <size>15793</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxMTg3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAwNDQ0MmVjOTljMjFmOTM5MWUxNjk4MGE4ZGI1N2MxZjkxYTE0ZThiLi5lYzRlNjU5ODE1
YTA2OTJmZDA2MTNkZDg5ZWJlODYyYjMyM2NkNjJmIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxOC0wNC0zMCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBXcml0ZSBhIHNjcmlwdCB0aGF0IGRldGVjdHMgY2hhcnQg
Y2hhbmdlcyBieSB1c2luZyB2MyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODQ0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIHNjcmlwdCB0aGF0IGRldGVkdHMgY2hhcnQgY2hhbmdl
cyBhbmQgc2NoZWR1bGUgY29uZmlybWluZyBhbmFseXNpcyB0YXNrLgorCisgICAgICAgICogYnJv
d3Nlci10ZXN0cy9pbmRleC5odG1sOiBBZGRlZCBpbXBvcnQgZm9yICdBc3luY1Rhc2snIGZvciB0
ZXN0aW5nLgorICAgICAgICAqIGJyb3dzZXItdGVzdHMvdGltZS1zZXJpZXMtY2hhcnQtdGVzdHMu
anM6IEFkZGVkIHVuaXQgdGVzdCBmb3IgJ0FzeW5jVGFzay5pc0F2YWlsYWJsZScgdG8gbWFrZSBz
dXJlIGl0IGlzCisgICAgICAgIGF2YWlsYWJsZSBpbiBicm93c2VyLgorICAgICAgICAqIHB1Ymxp
Yy92My9hc3luYy10YXNrLmpzOgorICAgICAgICAoQXN5bmNUYXNrLmlzQXZhaWxhYmxlKTogSGVs
cGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIEFzeW5jVGFzayBpcyBhdmFpbGFibGUg
b3Igbm90IGFzICdXb3JrZXInIGlzCisgICAgICAgIG5vdCBhdmFpbGFibGUgaW4gbm9kZWpzLgor
ICAgICAgICAoQXN5bmNUYXNrKToKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2J1Zy5qczog
RXhwb3J0IGFzIGEgbW9kdWxlLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1l
bnQtc2V0LmpzOgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQucHJvdG90eXBlLl9pbnZva2VTZWdt
ZW50YXRpb25BbGdvcml0aG0pOiBBZGRlZCBhIGNoZWNrIHRvIGF2b2lkIHVzaW5nIEFzeW5jVGFz
ayB3aGVuIHJ1bm5pbmcgaW4gTm9kZWpzLgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQpOgorICAg
ICAgICAqIHRvb2xzL2pzL3YzLW1vZGVscy5qczogQWRkZWQgaW1wb3J0IGZvciAnQnVnJyBvYmpl
Y3QuCisgICAgICAgICogdG9vbHMvcnVuLWFuYWx5c2lzLmpzOiBBZGRlZCB0aGlzIHNjcmlwdCB0
byBkZXRlY3QgbWVhc3VyZW1lbnQgc2V0IGNoYW5nZXMuCisgICAgICAgIChtYWluKToKKyAgICAg
ICAgKGFzeW5jLmFuYWx5c2lzTG9vcCk6CisgICAgICAgIChwcm90b3R5cGUuYXN5bmMuYW5hbHl6
ZU9uY2UpOgorICAgICAgICAocHJvdG90eXBlLnNob3dBbmFseXNpc1N0YXRpc3RpY3MpOiBBIGhl
bHBlciBmdW5jdGlvbiB0byBsb2cgdGhlIGFuYWx5c2lzIHJlc3VsdHMuCisgICAgICAgIChjb25m
aWd1cmF0aW9uc0ZvckFuYWx5c2lzKTogQ3JlYXRlcyB0ZXN0aW5nIGNvbmZpZ3VyYXRpb25zIGJh
c2VkIG9uIG1hbmlmZXN0LgorICAgICAgICAocHJvdG90eXBlLmFzeW5jLmFuYWx5emVNZWFzdXJl
bWVudFNldCk6IEFuYWx5emVzIGEgY29uZmlndXJhdGlvbiBpbiBnaXZlbiBkYXRlIHJhbmdlIGFu
ZCBjcmVhdGVzIGNvbmZpcm1pbmcgQS9CCisgICAgICAgIHRhc2sgd2hlbiB0aGVyZSBpcyBubyBl
eGlzdGluZyBhbmFseXNpcyB0YXNrIGZvciB0aGUgc2FtZSByYW5nZS4KKwogMjAxOC0wNC0zMCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmVhdGluZyBhIGN1
c3RvbSBhbmFseXNpcyB0YXNrIGFmdGVyIGZldGNoaW5nIGFsbCBhbmFseXNpcyB0YXNrcyBmYWls
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9pbmRl
eC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2Jyb3dzZXItdGVzdHMvaW5kZXguaHRt
bAppbmRleCA2YjI1ODE1ZjdlNTJhMmQzZWFiZWJjYThiOTEwYTlhM2Q0NjNhYWEyLi41OTcyMzUz
MzVlYzJmNTNiMjcxYTI4NjVmZjE2Y2VjN2JiMjZjNjFmIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9pbmRleC5odG1sCisrKyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9icm93c2VyLXRlc3RzL2luZGV4Lmh0bWwKQEAgLTIwOCw2ICsyMDgsNyBA
QCBjb25zdCBDaGFydFRlc3QgPSB7CiAgICAgaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpCiAg
ICAgewogICAgICAgICByZXR1cm4gY29udGV4dC5pbXBvcnRTY3JpcHRzKFsKKyAgICAgICAgICAg
ICdhc3luYy10YXNrLmpzJywKICAgICAgICAgICAgICcuLi9zaGFyZWQvc3RhdGlzdGljcy5qcycs
CiAgICAgICAgICAgICAnbGF6aWx5LWV2YWx1YXRlZC1mdW5jdGlvbi5qcycsCiAgICAgICAgICAg
ICAnaW5zdHJ1bWVudGF0aW9uLmpzJywKQEAgLTIyNiw3ICsyMjcsNyBAQCBjb25zdCBDaGFydFRl
c3QgPSB7CiAgICAgICAgICAgICAnY29tcG9uZW50cy90aW1lLXNlcmllcy1jaGFydC5qcycsCiAg
ICAgICAgICAgICAnY29tcG9uZW50cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC5qcydd
LAogICAgICAgICAgICAgJ0NvbXBvbmVudEJhc2UnLCAnVGltZVNlcmllc0NoYXJ0JywgJ0ludGVy
YWN0aXZlVGltZVNlcmllc0NoYXJ0JywKLSAgICAgICAgICAgICdQbGF0Zm9ybScsICdNZXRyaWMn
LCAnVGVzdCcsICdSZXBvc2l0b3J5JywgJ01lYXN1cmVtZW50U2V0JywgJ01vY2tSZW1vdGVBUEkn
KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICdQbGF0Zm9ybScsICdNZXRyaWMnLCAnVGVzdCcs
ICdSZXBvc2l0b3J5JywgJ01lYXN1cmVtZW50U2V0JywgJ01vY2tSZW1vdGVBUEknLCAnQXN5bmNU
YXNrJykudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuc3ltYm9s
cy5UaW1lU2VyaWVzQ2hhcnQ7CiAgICAgICAgICAgICB9KQogICAgIH0sCmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy90aW1lLXNlcmllcy1jaGFydC10
ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9icm93c2VyLXRlc3RzL3RpbWUtc2Vy
aWVzLWNoYXJ0LXRlc3RzLmpzCmluZGV4IDI3NTlhMGM0ZDMxODc0NTY4MmUyOWNjZDFkZjZmNDlk
MTg5MTIyOTAuLjljZTlkYTFmMjdkMjc4ZTZkNWNlNjNmOTNhMTcwYzQyZDUzOGNkZjIgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9icm93c2VyLXRlc3RzL3RpbWUtc2VyaWVz
LWNoYXJ0LXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9icm93c2VyLXRl
c3RzL3RpbWUtc2VyaWVzLWNoYXJ0LXRlc3RzLmpzCkBAIC0xLDUgKzEsMTAgQEAKIAogZGVzY3Jp
YmUoJ1RpbWVTZXJpZXNDaGFydCcsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIGhhdmUgIkFzeW5j
VGFzayIgYXZhaWxhYmxlIGZvciBjb21wdXRpbmcgc2VnbWVudGF0aW9uJywgYXN5bmMgKCkgPT4g
eworICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dDsKKyAgICAgICAg
YXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKKyAgICAgICAgZXhw
ZWN0KGNvbnRleHQuc3ltYm9scy5Bc3luY1Rhc2suaXNBdmFpbGFibGUoKSkudG8uYmUodHJ1ZSk7
CisgICAgfSk7CiAKICAgICBpdCgnc2hvdWxkIGJlIGNvbnN0cnVjdGlibGUgd2l0aCBhbiBlbXB0
eSBzb3VyZWMgbGlzdCBhbmQgYW4gZW1wdHkgb3B0aW9ucycsICgpID0+IHsKICAgICAgICAgcmV0
dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMobmV3IEJyb3dzaW5nQ29udGV4dCkudGhl
bigoVGltZVNlcmllc0NoYXJ0KSA9PiB7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2FzeW5jLXRhc2suanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2FzeW5jLXRhc2suanMKaW5kZXggMTFiNTRmZmUzNGZlNTkwZDViMDM3MThiYTRk
YTcyNjNiODRkZWE3NS4uZThjOTNmM2Y5NzhjOWJiNWUyNDE4ODZhZDMxMjg3NmNkZWZlN2E2YyAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9hc3luYy10YXNr
LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvYXN5bmMtdGFzay5q
cwpAQCAtMjksNiArMjksMTAgQEAgY2xhc3MgQXN5bmNUYXNrIHsKICAgICAgICAgfSk7CiAgICAg
fQogCisgICAgc3RhdGljIGlzQXZhaWxhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBl
b2YgbW9kdWxlID09PSAndW5kZWZpbmVkJzsKKyAgICB9CiB9CiAKIEFzeW5jVGFzay5fYXN5bmNN
ZXNzYWdlSWQgPSAwOwpAQCAtMTQ5LDMgKzE1Myw2IEBAIGlmICh0eXBlb2YgbW9kdWxlID09ICd1
bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cgPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9y
CiAgICAgaW1wb3J0U2NyaXB0cygnL3NoYXJlZC9zdGF0aXN0aWNzLmpzJyk7CiAgICAgb25tZXNz
YWdlID0gQXN5bmNUYXNrV29ya2VyLndvcmtlckRpZFJlY2lldmVNZXNzYWdlLmJpbmQoQXN5bmNU
YXNrV29ya2VyKTsKIH0KKworaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcpCisgICAg
bW9kdWxlLmV4cG9ydHMuQXN5bmNUYXNrID0gQXN5bmNUYXNrOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2J1Zy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxz
L2J1Zy5qcwppbmRleCAwMzI5YjdlMTQyYzY5ZDE3YWJlM2Y5ZTAyOGYzNGE3MTNjY2RiZWE0Li40
OWEyMTRlYTdhNjg5OTljZTFlMmM3YmQ0Mzg5YTcwN2VjZTVjYzIxIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWcuanMKKysrIGIvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLmpzCkBAIC0yOSwzICsyOSw3
IEBAIGNsYXNzIEJ1ZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgbGFiZWwoKSB7IHJl
dHVybiB0aGlzLmJ1Z051bWJlcigpOyB9CiAgICAgdGl0bGUoKSB7IHJldHVybiBgJHt0aGlzLl9i
dWdUcmFja2VyLmxhYmVsKCl9OiAke3RoaXMuYnVnTnVtYmVyKCl9YDsgfQogfQorCisKK2lmICh0
eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLkJ1ZyA9IEJ1
ZzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMKaW5k
ZXggNjVjOTViYzIyNGYxYjcxNGRjNjUxNWJhMmI2ZjczMTRjN2NjZTBkYi4uZTRhOGEwNzZhZDEw
MDgxZDBlMWM5ZGVmN2Q3YzUwNmM0NzJiMzZmNSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQtc2V0LmpzCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LXNldC5qcwpA
QCAtMjkwLDcgKzI5MCw3IEBAIGNsYXNzIE1lYXN1cmVtZW50U2V0IHsKICAgICAgICAgdmFyIGFy
Z3MgPSBbdGltZVNlcmllc1ZhbHVlc10uY29uY2F0KHBhcmFtZXRlcnMgfHwgW10pOwogCiAgICAg
ICAgIHZhciB0aW1lU2VyaWVzSXNTaG9ydEVub3VnaEZvclN5bmNDb21wdXRhdGlvbiA9IHRpbWVT
ZXJpZXNWYWx1ZXMubGVuZ3RoIDwgMTAwOwotICAgICAgICBpZiAodGltZVNlcmllc0lzU2hvcnRF
bm91Z2hGb3JTeW5jQ29tcHV0YXRpb24pIHsKKyAgICAgICAgaWYgKHRpbWVTZXJpZXNJc1Nob3J0
RW5vdWdoRm9yU3luY0NvbXB1dGF0aW9uIHx8ICFBc3luY1Rhc2suaXNBdmFpbGFibGUoKSkgewog
ICAgICAgICAgICAgSW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnX2ludm9rZVNl
Z21lbnRhdGlvbkFsZ29yaXRobScsICdzeW5jU2VnbWVudGF0aW9uJyk7CiAgICAgICAgICAgICB2
YXIgc2VnbWVudGF0aW9uID0gU3RhdGlzdGljc1tzZWdtZW50YXRpb25OYW1lXS5hcHBseSh0aW1l
U2VyaWVzVmFsdWVzLCBhcmdzKTsKICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFz
dXJpbmdUaW1lKCdfaW52b2tlU2VnbWVudGF0aW9uQWxnb3JpdGhtJywgJ3N5bmNTZWdtZW50YXRp
b24nKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1t
b2RlbHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpz
CmluZGV4IDZjZmQ4M2I2NmRjNzE0ODJjMzk4ZjFiZTczN2NmNjA5N2M0YTk3MGEuLmUxYjI0OWM0
ZjE3NDU0OWFkMDY4OWJlNjBlOWY3OWI3OWY3ZWJlODQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcwpAQCAtMTEsNiArMTEsNyBAQCBpbXBvcnRG
cm9tVjMoJ21vZGVscy9kYXRhLW1vZGVsLmpzJywgJ0RhdGFNb2RlbE9iamVjdCcpOwogaW1wb3J0
RnJvbVYzKCdtb2RlbHMvZGF0YS1tb2RlbC5qcycsICdMYWJlbGVkT2JqZWN0Jyk7CiAKIGltcG9y
dEZyb21WMygnbW9kZWxzL2FuYWx5c2lzLXRhc2suanMnLCAnQW5hbHlzaXNUYXNrJyk7CitpbXBv
cnRGcm9tVjMoJ21vZGVscy9idWcuanMnLCAnQnVnJyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9i
dWctdHJhY2tlci5qcycsICdCdWdUcmFja2VyJyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWls
ZC1yZXF1ZXN0LmpzJywgJ0J1aWxkUmVxdWVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVp
bGRlci5qcycsICdCdWlsZCcpOwpAQCAtMzcsNSArMzgsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVs
cy91cGxvYWRlZC1maWxlLmpzJywgJ1VwbG9hZGVkRmlsZScpOwogaW1wb3J0RnJvbVYzKCdpbnN0
cnVtZW50YXRpb24uanMnLCAnSW5zdHJ1bWVudGF0aW9uJyk7CiBpbXBvcnRGcm9tVjMoJ2xhemls
eS1ldmFsdWF0ZWQtZnVuY3Rpb24uanMnLCAnTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24nKTsKIGlt
cG9ydEZyb21WMygnY29tbWl0LXNldC1yYW5nZS1iaXNlY3Rvci5qcycsICdDb21taXRTZXRSYW5n
ZUJpc2VjdG9yJyk7CitpbXBvcnRGcm9tVjMoJ2FzeW5jLXRhc2suanMnLCAnQXN5bmNUYXNrJyk7
CiAKIGdsb2JhbC5TdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vLi4vcHVibGljL3NoYXJlZC9zdGF0
aXN0aWNzLmpzJyk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL3J1bi1hbmFseXNpcy5qcyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy90b29scy9ydW4tYW5hbHlzaXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjFlNDUxY2Zh
NTQ1ZDcwYzVjNTNhYjU5MWUwMDQ2MTlhMGM1NThkZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9ydW4tYW5hbHlzaXMuanMKQEAgLTAsMCArMSwxNzIg
QEAKKyMhL3Vzci9sb2NhbC9iaW4vbm9kZQorCitjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7Citj
b25zdCBTdGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vcHVibGljL3NoYXJlZC9zdGF0aXN0aWNzJyk7
Citjb25zdCBwYXJzZUFyZ3VtZW50cyA9IHJlcXVpcmUoJy4vanMvcGFyc2UtYXJndW1lbnRzLmpz
JykucGFyc2VBcmd1bWVudHM7Citjb25zdCBSZW1vdGVBUEkgPSByZXF1aXJlKCcuL2pzL3JlbW90
ZS5qcycpLlJlbW90ZUFQSTsKK3JlcXVpcmUoJy4vanMvdjMtbW9kZWxzLmpzJyk7CitnbG9iYWwu
UHJpdmlsZWdlZEFQSSA9IHJlcXVpcmUoJy4vanMvcHJpdmlsZWdlZC1hcGkuanMnKS5Qcml2aWxl
Z2VkQVBJOworCitmdW5jdGlvbiBtYWluKGFyZ3YpCit7CisgICAgY29uc3Qgb3B0aW9ucyA9IHBh
cnNlQXJndW1lbnRzKGFyZ3YsIFsKKyAgICAgICAge25hbWU6ICctLXNlcnZlci1jb25maWctanNv
bicsIHJlcXVpcmVkOiB0cnVlfSwKKyAgICAgICAge25hbWU6ICctLWNoYW5nZS1kZXRlY3Rpb24t
Y29uZmlnLWpzb24nLCByZXF1aXJlZDogdHJ1ZX0sCisgICAgICAgIHtuYW1lOiAnLS1zZWNvbmRz
LXRvLXNsZWVwJywgdHlwZTogcGFyc2VGbG9hdCwgZGVmYXVsdDogMTIwMH0sCisgICAgXSk7CisK
KyAgICBpZiAoIW9wdGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGFuYWx5c2lzTG9vcChv
cHRpb25zKTsKK30KKworYXN5bmMgZnVuY3Rpb24gYW5hbHlzaXNMb29wKG9wdGlvbnMpCit7Cisg
ICAgbGV0IHNlY29uZHNUb1NsZWVwOworICAgIGxldCBhbmFseXplciA9IG51bGw7CisgICAgdHJ5
IHsKKyAgICAgICAgY29uc3QgY2hhbmdlRGV0ZWN0aW9uQ29uZmlncyA9IEpTT04ucGFyc2UoZnMu
cmVhZEZpbGVTeW5jKG9wdGlvbnNbJy0tY2hhbmdlLWRldGVjdGlvbi1jb25maWctanNvbiddLCAn
dXRmLTgnKSk7CisgICAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVh
ZEZpbGVTeW5jKG9wdGlvbnNbJy0tc2VydmVyLWNvbmZpZy1qc29uJ10sICd1dGYtOCcpKTsKKyAg
ICAgICAgc2Vjb25kc1RvU2xlZXAgPSBvcHRpb25zWyctLXNlY29uZHMtdG8tc2xlZXAnXTsKKyAg
ICAgICAgZ2xvYmFsLlJlbW90ZUFQSSA9IG5ldyBSZW1vdGVBUEkoc2VydmVyQ29uZmlnLnNlcnZl
cik7CisgICAgICAgIFByaXZpbGVnZWRBUEkuY29uZmlndXJlKHNlcnZlckNvbmZpZy5zbGF2ZS5u
YW1lLCBzZXJ2ZXJDb25maWcuc2xhdmUucGFzc3dvcmQpOworCisgICAgICAgIGNvbnN0IG1hbmlm
ZXN0ID0gYXdhaXQgTWFuaWZlc3QuZmV0Y2goKTsKKyAgICAgICAgY29uc3QgdGVzdENvbmZpZ3Vy
YXRpb25zID0gTWVhc3VyZW1lbnRTZXRBbmFseXplci5jb25maWd1cmF0aW9uc0ZvckFuYWx5c2lz
KG1hbmlmZXN0KTsKKworICAgICAgICBhbmFseXplciA9IG5ldyBNZWFzdXJlbWVudFNldEFuYWx5
emVyKGNoYW5nZURldGVjdGlvbkNvbmZpZ3MsIHRlc3RDb25maWd1cmF0aW9ucywgZ2xvYmFsLlJl
bW90ZUFQSSwgY29uc29sZSk7CisgICAgICAgIGF3YWl0IGFuYWx5emVyLmFuYWx5emVPbmNlKCk7
CisgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgYW5h
bHl6ZSBtZWFzdXJlbWVudCBzZXRzIGR1ZSB0byAke2Vycm9yfWApOworICAgIH0KKyAgICBhbmFs
eXplci5zaG93QW5hbHlzaXNTdGF0aXN0aWNzKCk7CisKKyAgICBjb25zb2xlLmxvZyhgU2xlZXBp
bmcgZm9yICR7c2Vjb25kc1RvU2xlZXB9IHNlY29uZHMuYCk7CisgICAgc2V0VGltZW91dCgoKSA9
PiBhbmFseXNpc0xvb3Aob3B0aW9ucyksIHNlY29uZHNUb1NsZWVwICogMTAwMCk7Cit9CisKKwor
Y2xhc3MgTWVhc3VyZW1lbnRTZXRBbmFseXplciB7CisgICAgY29uc3RydWN0b3IoY2hhbmdlRGV0
ZWN0aW9uQ29uZmlncywgdGVzdENvbmZpZ3VyYXRpb25zLCByZW1vdGVBUEksIGxvZ2dlcikKKyAg
ICB7CisgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvbkNvbmZpZ3MgPSBjaGFuZ2VEZXRlY3Rp
b25Db25maWdzOworICAgICAgICB0aGlzLl9hbmFseXppbmdDb25maWd1cmF0aW9ucyA9IHRlc3RD
b25maWd1cmF0aW9uczsKKyAgICAgICAgdGhpcy5fcmVtb3RlQVBJID0gcmVtb3RlQVBJOworICAg
ICAgICB0aGlzLl9sb2dnZXIgPSBsb2dnZXI7CisKKyAgICAgICAgdGhpcy5fZW5kVGltZSA9IERh
dGUubm93KCk7CisgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMuX2VuZFRpbWUgLSB0aGlz
Ll9jaGFuZ2VEZXRlY3Rpb25Db25maWdzLm1heERheXMgKiAyNCAqIDM2MDAgKiAxMDAwOworICAg
ICAgICB0aGlzLl9hbmFseXplZENvbmZpZ3VyYXRpb25Db3VudCA9IDA7CisgICAgICAgIHRoaXMu
X2NyZWF0ZWRBbmFseXNpc1Rhc2tDb3VudCA9IDA7CisgICAgfQorCisgICAgYXN5bmMgYW5hbHl6
ZU9uY2UoKQorICAgIHsKKyAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oYFN0YXJ0IGFuYWx5emlu
ZyBsYXN0ICR7dGhpcy5fY2hhbmdlRGV0ZWN0aW9uQ29uZmlncy5tYXhEYXlzfSBkYXlzIG1lYXN1
cmVtZW50IHNldHMuYCk7CisgICAgICAgIGZvciAoY29uc3QgW3BsYXRmb3JtLCBtZXRyaWNdIG9m
IHRoaXMuX2FuYWx5emluZ0NvbmZpZ3VyYXRpb25zKSB7CisgICAgICAgICAgICBhd2FpdCB0aGlz
LmFuYWx5emVNZWFzdXJlbWVudFNldChwbGF0Zm9ybSwgbWV0cmljKTsKKyAgICAgICAgICAgIHRo
aXMuX2FuYWx5emVkQ29uZmlndXJhdGlvbkNvdW50ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzaG93QW5hbHlzaXNTdGF0aXN0aWNzKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xvZ2dl
ci5sb2coYEFuYWx5emVkICR7dGhpcy5fYW5hbHl6ZWRDb25maWd1cmF0aW9uQ291bnR9IG9mICR7
dGhpcy5fYW5hbHl6aW5nQ29uZmlndXJhdGlvbnMubGVuZ3RofSBjb25maWd1cmF0aW9ucy5gKTsK
KyAgICAgICAgdGhpcy5fbG9nZ2VyLmxvZyhgQ3JlYXRlZCAke3RoaXMuX2NyZWF0ZWRBbmFseXNp
c1Rhc2tDb3VudH0gYW5hbHlzaXMgdGFzayR7dGhpcy5fY3JlYXRlZEFuYWx5c2lzVGFza0NvdW50
ID8gJ3MnIDogJyd9LmApOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxk
IGJlIHNoYXJlZCB3aXRoIERhc2hib2FyZFBhZ2UuCisgICAgc3RhdGljIGNvbmZpZ3VyYXRpb25z
Rm9yQW5hbHlzaXMobWFuaWZlc3QpCisgICAgeworICAgICAgICBjb25zdCBjb25maWd1cmF0aW9u
cyA9IFtdOworICAgICAgICBmb3IgKGNvbnN0IGRhc2hib2FyZCBvZiBPYmplY3QudmFsdWVzKG1h
bmlmZXN0LmRhc2hib2FyZHMpKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXNo
Ym9hcmQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygcm93KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjZWxsLmxlbmd0aCA8IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGF0Zm9ybUlk
ID0gcGFyc2VJbnQoY2VsbFswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRy
aWNJZCA9IHBhcnNlSW50KGNlbGxbMV0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
TmFOKHBsYXRmb3JtSWQpIHx8IGlzTmFOKG1ldHJpY0lkKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYXRmb3Jt
ID0gUGxhdGZvcm0uZmluZEJ5SWQocGxhdGZvcm1JZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtZXRyaWMgPSBNZXRyaWMuZmluZEJ5SWQobWV0cmljSWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocGxhdGZvcm0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5hc3NlcnQobWV0cmljKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmZpZ3VyYXRpb25zLnB1c2goW3BsYXRmb3JtLCBtZXRyaWNdKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gY29uZmlndXJhdGlvbnM7CisgICAgfQorCisgICAgYXN5bmMgYW5hbHl6ZU1lYXN1
cmVtZW50U2V0KHBsYXRmb3JtLCBtZXRyaWMpCisgICAgeworICAgICAgICBjb25zdCBtZWFzdXJl
bWVudFNldCA9IE1lYXN1cmVtZW50U2V0LmZpbmRTZXQocGxhdGZvcm0uaWQoKSwgbWV0cmljLmlk
KCksIHBsYXRmb3JtLmxhc3RNb2RpZmllZChtZXRyaWMpKTsKKyAgICAgICAgdGhpcy5fbG9nZ2Vy
LmluZm8oYFxuPT09PSAiJHttZXRyaWMuZnVsbE5hbWUoKX0iIG9uICIke3BsYXRmb3JtLm5hbWUo
KX0iID09PT1cbmApOworCisgICAgICAgIGF3YWl0IG1lYXN1cmVtZW50U2V0LmZldGNoQmV0d2Vl
bih0aGlzLl9zdGFydFRpbWUsIHRoaXMuX2VuZFRpbWUpOworICAgICAgICBjb25zdCBjdXJyZW50
VGltZVNlcmllcyA9IG1lYXN1cmVtZW50U2V0LmZldGNoZWRUaW1lU2VyaWVzKCdjdXJyZW50Jywg
ZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gY3VycmVudFRpbWVTZXJp
ZXMudmFsdWVzKCk7CisgICAgICAgIGNvbnN0IHNlZ21lbnRlZFZhbHVlcyA9IGF3YWl0IG1lYXN1
cmVtZW50U2V0LmZldGNoU2VnbWVudGF0aW9uKCdzZWdtZW50VGltZVNlcmllc0J5TWF4aW1pemlu
Z1NjaHdhcnpDcml0ZXJpb24nLCBbXSwgJ2N1cnJlbnQnLCBmYWxzZSk7CisgICAgICAgIGlmICgh
c2VnbWVudGVkVmFsdWVzIHx8ICFzZWdtZW50ZWRWYWx1ZXMubGVuZ3RoKSB7CisgICAgICAgICAg
ICB0aGlzLl9sb2dnZXIud2FybihgRmFpbGVkIGZldGNoaW5nIHNlZ21lbnRhdGlvbnMgZm9yICR7
bWV0cmljLmZ1bGxOYW1lKCl9IiBvbiAiJHtwbGF0Zm9ybS5uYW1lKCl9ImApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgcHJvZ3Jlc3Npb25TdHJpbmcg
PSAncHJvZ3Jlc3Npb24nOworICAgICAgICBjb25zdCByZWdyZXNzaW9uU3RyaW5nID0gJ3JlZ3Jl
c3Npb24nOworICAgICAgICBjb25zdCByYW5nZXMgPSBTdGF0aXN0aWNzLmZpbmRSYW5nZXNGb3JD
aGFuZ2VEZXRlY3Rpb25zV2l0aFdlbGNoc1RUZXN0KHJhd1ZhbHVlcywgc2VnbWVudGVkVmFsdWVz
LAorICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uQ29uZmlncy50VGVzdFNpZ25maWNh
bmNlKS5tYXAoKHJhbmdlKSA9Pih7CisgICAgICAgICAgICAgICAgc3RhcnRQb2ludDogY3VycmVu
dFRpbWVTZXJpZXMuZmluZFBvaW50QnlJbmRleChyYW5nZS5zdGFydEluZGV4KSwKKyAgICAgICAg
ICAgICAgICBlbmRQb2ludDogY3VycmVudFRpbWVTZXJpZXMuZmluZFBvaW50QnlJbmRleChyYW5n
ZS5lbmRJbmRleCksCisgICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2VTdW1tYXJ5OiBtZXRyaWMu
bGFiZWxGb3JEaWZmZXJlbmNlKHJhbmdlLnNlZ21lbnRhdGlvblN0YXJ0VmFsdWUsIHJhbmdlLnNl
Z21lbnRhdGlvbkVuZFZhbHVlLAorICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc2lvblN0cmlu
ZywgcmVncmVzc2lvblN0cmluZyksCisgICAgICAgICAgICAgICAgb3ZlcmxhcHBpbmdBbmFseXNp
c1Rhc2tzOiBbXSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYHNlcmllcyBpbmRleCBy
YW5nZTogWyR7cmFuZ2Uuc3RhcnRJbmRleH0gLSAke3JhbmdlLmVuZEluZGV4fV1gCisgICAgICAg
ICAgICB9KSk7CisKKyAgICAgICAgY29uc3QgYW5hbHlzaXNUYXNrcyA9IGF3YWl0IEFuYWx5c2lz
VGFzay5mZXRjaEJ5UGxhdGZvcm1BbmRNZXRyaWMocGxhdGZvcm0uaWQoKSwgbWV0cmljLmlkKCkp
OworICAgICAgICBjb25zdCBmaWx0ZXJlZFJhbmdlcyA9IHJhbmdlcy5maWx0ZXIoKHJhbmdlKSA9
PiB7CisgICAgICAgICAgICBjb25zdCByYW5nZUVuZHNCZWZvcmVBbmFseXNpc1N0YXJ0cyA9IHJh
bmdlLmVuZFBvaW50LnRpbWUgPCB0aGlzLl9zdGFydFRpbWU7CisgICAgICAgICAgICBpZiAocmFu
Z2VFbmRzQmVmb3JlQW5hbHlzaXNTdGFydHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgZm9yIChjb25zdCB0YXNrIG9mIGFuYWx5c2lzVGFza3MpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCB0YXNrRW5kc0JlZm9yZVJhbmdlU3RhcnQgPSB0YXNrLmVuZFRpbWUo
KSA8IHJhbmdlLnN0YXJ0UG9pbnQudGltZTsKKyAgICAgICAgICAgICAgICBjb25zdCB0YXNrU3Rh
cnRzQWZ0ZXJSYW5nZUVuZCA9IHJhbmdlLmVuZFBvaW50LnRpbWUgPCB0YXNrLnN0YXJ0VGltZSgp
OworICAgICAgICAgICAgICAgIGlmICghKHRhc2tFbmRzQmVmb3JlUmFuZ2VTdGFydCB8fCB0YXNr
U3RhcnRzQWZ0ZXJSYW5nZUVuZCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KS5zb3J0
KChhLCBiKSA9PiB7CisgICAgICAgICAgICBpZiAoYS52YWx1ZUNoYW5nZVN1bW1hcnkuY2hhbmdl
VHlwZSA9PT0gYi52YWx1ZUNoYW5nZVN1bW1hcnkuY2hhbmdlVHlwZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWF0aC5hYnMoYS52YWx1ZUNoYW5nZVN1bW1hcnkucmVsYXRpdmVDaGFuZ2UpIC0g
TWF0aC5hYnMoYi52YWx1ZUNoYW5nZVN1bW1hcnkucmVsYXRpdmVDaGFuZ2UpOworICAgICAgICAg
ICAgcmV0dXJuIGEudmFsdWVDaGFuZ2VTdW1tYXJ5LmNoYW5nZVR5cGUgPT09IHByb2dyZXNzaW9u
U3RyaW5nID8gLTEgOiAxOworICAgICAgICB9KTsKKworICAgICAgICBsZXQgc3VtbWFyeTsKKyAg
ICAgICAgbGV0IHJhbmdlV2l0aE1vc3RTaWduaWZpY2FudENoYW5nZSA9IG51bGw7CisKKyAgICAg
ICAgZmlsdGVyZWRSYW5nZXMuZm9yRWFjaCgocmFuZ2UpID0+IHsKKyAgICAgICAgICAgIGNvbnN0
IHN0YXJ0Q29tbWl0U2V0ID0gcmFuZ2Uuc3RhcnRQb2ludC5jb21taXRTZXQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IHJhbmdlLmVuZFBvaW50LmNvbW1pdFNldCgpOworICAg
ICAgICAgICAgc3VtbWFyeSA9IGBQb3RlbnRpYWwgJHtyYW5nZS52YWx1ZUNoYW5nZVN1bW1hcnku
Y2hhbmdlTGFiZWx9IG9uICR7cGxhdGZvcm0ubmFtZSgpfSBiZXR3ZWVuICR7Q29tbWl0U2V0LmRp
ZmYoc3RhcnRDb21taXRTZXQsIGVuZENvbW1pdFNldCl9YDsKKyAgICAgICAgICAgIHJhbmdlV2l0
aE1vc3RTaWduaWZpY2FudENoYW5nZSA9IHJhbmdlOworICAgICAgICAgICAgdGhpcy5fbG9nZ2Vy
LmxvZygnRGV0ZWN0ZWQ6Jywgc3VtbWFyeSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICgh
cmFuZ2VXaXRoTW9zdFNpZ25pZmljYW50Q2hhbmdlKSB7CisgICAgICAgICAgICB0aGlzLl9sb2dn
ZXIubG9nKCdOb3RoaW5nIHRvIGFuYWx5emUnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMuX2xvZ2dlci5sb2coYENyZWF0aW5nIGFuYWx5c2lzIHRhc2sg
YW5kIGNvbmZpcm1pbmc6ICIke3N1bW1hcnl9Ii5gKTsKKyAgICAgICAgYXdhaXQgQW5hbHlzaXNU
YXNrLmNyZWF0ZShzdW1tYXJ5LCByYW5nZVdpdGhNb3N0U2lnbmlmaWNhbnRDaGFuZ2Uuc3RhcnRQ
b2ludCwgcmFuZ2VXaXRoTW9zdFNpZ25pZmljYW50Q2hhbmdlLmVuZFBvaW50LAorICAgICAgICAg
ICAgJ0NvbmZpcm0nLCB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25Db25maWdzLmNvbmZpcm1UYXNrUmVw
ZWF0Q291bnQpOworICAgICAgICB0aGlzLl9jcmVhdGVkQW5hbHlzaXNUYXNrQ291bnQgKz0gMTsK
KyAgICB9Cit9CisKK21haW4ocHJvY2Vzcy5hcmd2KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339255</attachid>
            <date>2018-05-01 19:01:17 -0700</date>
            <delta_ts>2018-05-01 20:00:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-184419-20180501190116.patch</filename>
            <type>text/plain</type>
            <size>37540</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMxMTg3CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAwNDQ0MmVjOTljMjFmOTM5MWUxNjk4MGE4ZGI1N2MxZjkxYTE0ZThiLi4xZDVmYjkzZGMy
MDIzNzNmYzY3ODU0ODIxOTljOGNkZjc5MDBmNmY4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxOC0wNS0wMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBXcml0ZSBhIHNjcmlwdCB0aGF0IGRldGVjdHMgY2hhcnQg
Y2hhbmdlcyBieSB1c2luZyB2MyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODQ0MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIHNjcmlwdCB0aGF0IGRldGVjdHMgY2hhcnQgY2hhbmdl
cyBhbmQgc2NoZWR1bGUgY29uZmlybWluZyBhbmFseXNpcyB0YXNrLgorCisgICAgICAgICogYnJv
d3Nlci10ZXN0cy9pbmRleC5odG1sOiBBZGRlZCBpbXBvcnQgZm9yICdBc3luY1Rhc2snIGZvciB0
ZXN0aW5nLgorICAgICAgICAqIGJyb3dzZXItdGVzdHMvdGltZS1zZXJpZXMtY2hhcnQtdGVzdHMu
anM6IEFkZGVkIHVuaXQgdGVzdCBmb3IgJ0FzeW5jVGFzay5pc0F2YWlsYWJsZScgdG8gbWFrZSBz
dXJlIGl0IGlzCisgICAgICAgIGF2YWlsYWJsZSBpbiBicm93c2VyLgorICAgICAgICAqIHB1Ymxp
Yy92My9hc3luYy10YXNrLmpzOgorICAgICAgICAoQXN5bmNUYXNrLmlzQXZhaWxhYmxlKTogSGVs
cGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIEFzeW5jVGFzayBpcyBhdmFpbGFibGUg
b3Igbm90IGFzICdXb3JrZXInIGlzCisgICAgICAgIG5vdCBhdmFpbGFibGUgaW4gbm9kZWpzLgor
ICAgICAgICAoQXN5bmNUYXNrKToKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2J1Zy5qczog
RXhwb3J0IGFzIGEgbW9kdWxlLgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvbWVhc3VyZW1l
bnQtc2V0LmpzOgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQucHJvdG90eXBlLl9pbnZva2VTZWdt
ZW50YXRpb25BbGdvcml0aG0pOiBBZGRlZCBhIGNoZWNrIHRvIGF2b2lkIHVzaW5nIEFzeW5jVGFz
ayB3aGVuIHJ1bm5pbmcgaW4gTm9kZWpzLgorICAgICAgICAoTWVhc3VyZW1lbnRTZXQpOgorICAg
ICAgICAqIHRvb2xzL2pzL3YzLW1vZGVscy5qczogQWRkZWQgaW1wb3J0IGZvciAnQnVnJyBvYmpl
Y3QuCisgICAgICAgICogdG9vbHMvcnVuLWFuYWx5c2lzLmpzOiBBZGRlZCB0aGlzIHNjcmlwdCB0
byBkZXRlY3QgbWVhc3VyZW1lbnQgc2V0IGNoYW5nZXMuCisgICAgICAgIChtYWluKToKKyAgICAg
ICAgKGFzeW5jLmFuYWx5c2lzTG9vcCk6CisgICAgICAgIChwcm90b3R5cGUuYXN5bmMuYW5hbHl6
ZU9uY2UpOgorICAgICAgICAobWVhc3VyZW1lbnRTZXRMaXN0Rm9yQW5hbHlzaXMpOgorICAgICAg
ICAocHJvdG90eXBlLmFzeW5jLl9hbmFseXplTWVhc3VyZW1lbnRTZXQpOiBBbmFseXplcyBhIGNv
bmZpZ3VyYXRpb24gaW4gZ2l2ZW4gZGF0ZSByYW5nZSBhbmQgY3JlYXRlcyBjb25maXJtaW5nIEEv
QgorICAgICAgICB0YXNrIHdoZW4gdGhlcmUgaXMgbm8gZXhpc3RpbmcgYW5hbHlzaXMgdGFzayBm
b3IgdGhlIHNhbWUgcmFuZ2UuCisgICAgICAgICogdW5pdC10ZXN0cy9tZWFzdXJlbWVudC1zZXQt
YW5hbHl6ZXItdGVzdHMuanM6IEFkZGVkIHVuaXQgdGVzdHMgZm9yIE1lYXN1cmVtZW50U2V0QW5h
bHl6ZXIuCisgICAgICAgICogdW5pdC10ZXN0cy9yZXNvdXJjZXMvbW9jay12My1tb2RlbHMuanM6
IFJlc2V0ICdNZWFzdXJlbWVudFNldC5fc2V0JyBldmVyeSB0aW1lLgorICAgICAgICBVcGRhdGUg
bW9jayBwbGF0Zm9ybSB0byBpbmNsdWRlIGxhc3RNb2RpZmllZEJ5TWV0cmljIGluZm9ybWF0aW9u
LgorICAgICAgICAoTW9ja01vZGVscy5pbmplY3QpOgorCiAyMDE4LTA0LTMwICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIENyZWF0aW5nIGEgY3VzdG9tIGFuYWx5
c2lzIHRhc2sgYWZ0ZXIgZmV0Y2hpbmcgYWxsIGFuYWx5c2lzIHRhc2tzIGZhaWwKZGlmZiAtLWdp
dCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9icm93c2VyLXRlc3RzL2luZGV4Lmh0bWwgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9pbmRleC5odG1sCmluZGV4IDZi
MjU4MTVmN2U1MmEyZDNlYWJlYmNhOGI5MTBhOWEzZDQ2M2FhYTIuLjU5NzIzNTMzNWVjMmY1M2Iy
NzFhMjg2NWZmMTZjZWM3YmIyNmM2MWYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9icm93c2VyLXRlc3RzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL2Jyb3dzZXItdGVzdHMvaW5kZXguaHRtbApAQCAtMjA4LDYgKzIwOCw3IEBAIGNvbnN0IENo
YXJ0VGVzdCA9IHsKICAgICBpbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBjb250ZXh0LmltcG9ydFNjcmlwdHMoWworICAgICAgICAgICAgJ2FzeW5jLXRh
c2suanMnLAogICAgICAgICAgICAgJy4uL3NoYXJlZC9zdGF0aXN0aWNzLmpzJywKICAgICAgICAg
ICAgICdsYXppbHktZXZhbHVhdGVkLWZ1bmN0aW9uLmpzJywKICAgICAgICAgICAgICdpbnN0cnVt
ZW50YXRpb24uanMnLApAQCAtMjI2LDcgKzIyNyw3IEBAIGNvbnN0IENoYXJ0VGVzdCA9IHsKICAg
ICAgICAgICAgICdjb21wb25lbnRzL3RpbWUtc2VyaWVzLWNoYXJ0LmpzJywKICAgICAgICAgICAg
ICdjb21wb25lbnRzL2ludGVyYWN0aXZlLXRpbWUtc2VyaWVzLWNoYXJ0LmpzJ10sCiAgICAgICAg
ICAgICAnQ29tcG9uZW50QmFzZScsICdUaW1lU2VyaWVzQ2hhcnQnLCAnSW50ZXJhY3RpdmVUaW1l
U2VyaWVzQ2hhcnQnLAotICAgICAgICAgICAgJ1BsYXRmb3JtJywgJ01ldHJpYycsICdUZXN0Jywg
J1JlcG9zaXRvcnknLCAnTWVhc3VyZW1lbnRTZXQnLCAnTW9ja1JlbW90ZUFQSScpLnRoZW4oKCkg
PT4geworICAgICAgICAgICAgJ1BsYXRmb3JtJywgJ01ldHJpYycsICdUZXN0JywgJ1JlcG9zaXRv
cnknLCAnTWVhc3VyZW1lbnRTZXQnLCAnTW9ja1JlbW90ZUFQSScsICdBc3luY1Rhc2snKS50aGVu
KCgpID0+IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5zeW1ib2xzLlRpbWVTZXJp
ZXNDaGFydDsKICAgICAgICAgICAgIH0pCiAgICAgfSwKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9icm93c2VyLXRlc3RzL3RpbWUtc2VyaWVzLWNoYXJ0LXRlc3RzLmpzIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2Jyb3dzZXItdGVzdHMvdGltZS1zZXJpZXMtY2hhcnQt
dGVzdHMuanMKaW5kZXggMjc1OWEwYzRkMzE4NzQ1NjgyZTI5Y2NkMWRmNmY0OWQxODkxMjI5MC4u
OWNlOWRhMWYyN2QyNzhlNmQ1Y2U2M2Y5M2ExNzBjNDJkNTM4Y2RmMiAxMDA2NDQKLS0tIGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL2Jyb3dzZXItdGVzdHMvdGltZS1zZXJpZXMtY2hhcnQtdGVz
dHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2Jyb3dzZXItdGVzdHMvdGltZS1z
ZXJpZXMtY2hhcnQtdGVzdHMuanMKQEAgLTEsNSArMSwxMCBAQAogCiBkZXNjcmliZSgnVGltZVNl
cmllc0NoYXJ0JywgKCkgPT4geworICAgIGl0KCdzaG91bGQgaGF2ZSAiQXN5bmNUYXNrIiBhdmFp
bGFibGUgZm9yIGNvbXB1dGluZyBzZWdtZW50YXRpb24nLCBhc3luYyAoKSA9PiB7CisgICAgICAg
IGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0OworICAgICAgICBhd2FpdCBDaGFy
dFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICBleHBlY3QoY29udGV4
dC5zeW1ib2xzLkFzeW5jVGFzay5pc0F2YWlsYWJsZSgpKS50by5iZSh0cnVlKTsKKyAgICB9KTsK
IAogICAgIGl0KCdzaG91bGQgYmUgY29uc3RydWN0aWJsZSB3aXRoIGFuIGVtcHR5IHNvdXJlYyBs
aXN0IGFuZCBhbiBlbXB0eSBvcHRpb25zJywgKCkgPT4gewogICAgICAgICByZXR1cm4gQ2hhcnRU
ZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KS50aGVuKChUaW1lU2Vy
aWVzQ2hhcnQpID0+IHsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvYXN5bmMtdGFzay5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
YXN5bmMtdGFzay5qcwppbmRleCAxMWI1NGZmZTM0ZmU1OTBkNWIwMzcxOGJhNGRhNzI2M2I4NGRl
YTc1Li5lZTgxYzg0MDViOWQ1YzhiZDI0Y2ExZDk2NzIxMDYyZTUxMjA3YmYwIDEwMDY0NAotLS0g
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2FzeW5jLXRhc2suanMKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9hc3luYy10YXNrLmpzCkBAIC0yOSw2
ICsyOSwxMCBAQCBjbGFzcyBBc3luY1Rhc2sgewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBz
dGF0aWMgaXNBdmFpbGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVvZiBXb3JrZXIg
IT09ICd1bmRlZmluZWQnOworICAgIH0KIH0KIAogQXN5bmNUYXNrLl9hc3luY01lc3NhZ2VJZCA9
IDA7CkBAIC0xNDksMyArMTUzLDYgQEAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gJ3VuZGVmaW5lZCcg
JiYgdHlwZW9mIHdpbmRvdyA9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3IKICAgICBpbXBv
cnRTY3JpcHRzKCcvc2hhcmVkL3N0YXRpc3RpY3MuanMnKTsKICAgICBvbm1lc3NhZ2UgPSBBc3lu
Y1Rhc2tXb3JrZXIud29ya2VyRGlkUmVjaWV2ZU1lc3NhZ2UuYmluZChBc3luY1Rhc2tXb3JrZXIp
OwogfQorCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykKKyAgICBtb2R1bGUuZXhw
b3J0cy5Bc3luY1Rhc2sgPSBBc3luY1Rhc2s7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYnVn
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvYnVnLmpzCmlu
ZGV4IDAzMjliN2UxNDJjNjlkMTdhYmUzZjllMDI4ZjM0YTcxM2NjZGJlYTQuLmMxNTg4NjcxOTJh
NmQwZjc3ZGU5M2FmOGE3OGM5OTgyZTA1MWYxNjUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2J1Zy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9idWcuanMKQEAgLTI5LDMgKzI5LDYgQEAgY2xhc3Mg
QnVnIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBsYWJlbCgpIHsgcmV0dXJuIHRoaXMu
YnVnTnVtYmVyKCk7IH0KICAgICB0aXRsZSgpIHsgcmV0dXJuIGAke3RoaXMuX2J1Z1RyYWNrZXIu
bGFiZWwoKX06ICR7dGhpcy5idWdOdW1iZXIoKX1gOyB9CiB9CisKK2lmICh0eXBlb2YgbW9kdWxl
ICE9ICd1bmRlZmluZWQnKQorICAgIG1vZHVsZS5leHBvcnRzLkJ1ZyA9IEJ1ZzsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9tZWFzdXJlbWVudC1zZXQuanMKaW5kZXggNjVjOTViYzIy
NGYxYjcxNGRjNjUxNWJhMmI2ZjczMTRjN2NjZTBkYi4uZTRhOGEwNzZhZDEwMDgxZDBlMWM5ZGVm
N2Q3YzUwNmM0NzJiMzZmNSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvbWVhc3VyZW1lbnQtc2V0LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL21lYXN1cmVtZW50LXNldC5qcwpAQCAtMjkwLDcgKzI5
MCw3IEBAIGNsYXNzIE1lYXN1cmVtZW50U2V0IHsKICAgICAgICAgdmFyIGFyZ3MgPSBbdGltZVNl
cmllc1ZhbHVlc10uY29uY2F0KHBhcmFtZXRlcnMgfHwgW10pOwogCiAgICAgICAgIHZhciB0aW1l
U2VyaWVzSXNTaG9ydEVub3VnaEZvclN5bmNDb21wdXRhdGlvbiA9IHRpbWVTZXJpZXNWYWx1ZXMu
bGVuZ3RoIDwgMTAwOwotICAgICAgICBpZiAodGltZVNlcmllc0lzU2hvcnRFbm91Z2hGb3JTeW5j
Q29tcHV0YXRpb24pIHsKKyAgICAgICAgaWYgKHRpbWVTZXJpZXNJc1Nob3J0RW5vdWdoRm9yU3lu
Y0NvbXB1dGF0aW9uIHx8ICFBc3luY1Rhc2suaXNBdmFpbGFibGUoKSkgewogICAgICAgICAgICAg
SW5zdHJ1bWVudGF0aW9uLnN0YXJ0TWVhc3VyaW5nVGltZSgnX2ludm9rZVNlZ21lbnRhdGlvbkFs
Z29yaXRobScsICdzeW5jU2VnbWVudGF0aW9uJyk7CiAgICAgICAgICAgICB2YXIgc2VnbWVudGF0
aW9uID0gU3RhdGlzdGljc1tzZWdtZW50YXRpb25OYW1lXS5hcHBseSh0aW1lU2VyaWVzVmFsdWVz
LCBhcmdzKTsKICAgICAgICAgICAgIEluc3RydW1lbnRhdGlvbi5lbmRNZWFzdXJpbmdUaW1lKCdf
aW52b2tlU2VnbWVudGF0aW9uQWxnb3JpdGhtJywgJ3N5bmNTZWdtZW50YXRpb24nKTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCmluZGV4IDZjZmQ4
M2I2NmRjNzE0ODJjMzk4ZjFiZTczN2NmNjA5N2M0YTk3MGEuLmUxYjI0OWM0ZjE3NDU0OWFkMDY4
OWJlNjBlOWY3OWI3OWY3ZWJlODQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy90b29scy9qcy92My1tb2RlbHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rv
b2xzL2pzL3YzLW1vZGVscy5qcwpAQCAtMTEsNiArMTEsNyBAQCBpbXBvcnRGcm9tVjMoJ21vZGVs
cy9kYXRhLW1vZGVsLmpzJywgJ0RhdGFNb2RlbE9iamVjdCcpOwogaW1wb3J0RnJvbVYzKCdtb2Rl
bHMvZGF0YS1tb2RlbC5qcycsICdMYWJlbGVkT2JqZWN0Jyk7CiAKIGltcG9ydEZyb21WMygnbW9k
ZWxzL2FuYWx5c2lzLXRhc2suanMnLCAnQW5hbHlzaXNUYXNrJyk7CitpbXBvcnRGcm9tVjMoJ21v
ZGVscy9idWcuanMnLCAnQnVnJyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWctdHJhY2tlci5q
cycsICdCdWdUcmFja2VyJyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWlsZC1yZXF1ZXN0Lmpz
JywgJ0J1aWxkUmVxdWVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGRlci5qcycsICdC
dWlsZCcpOwpAQCAtMzcsNSArMzgsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy91cGxvYWRlZC1m
aWxlLmpzJywgJ1VwbG9hZGVkRmlsZScpOwogaW1wb3J0RnJvbVYzKCdpbnN0cnVtZW50YXRpb24u
anMnLCAnSW5zdHJ1bWVudGF0aW9uJyk7CiBpbXBvcnRGcm9tVjMoJ2xhemlseS1ldmFsdWF0ZWQt
ZnVuY3Rpb24uanMnLCAnTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24nKTsKIGltcG9ydEZyb21WMygn
Y29tbWl0LXNldC1yYW5nZS1iaXNlY3Rvci5qcycsICdDb21taXRTZXRSYW5nZUJpc2VjdG9yJyk7
CitpbXBvcnRGcm9tVjMoJ2FzeW5jLXRhc2suanMnLCAnQXN5bmNUYXNrJyk7CiAKIGdsb2JhbC5T
dGF0aXN0aWNzID0gcmVxdWlyZSgnLi4vLi4vcHVibGljL3NoYXJlZC9zdGF0aXN0aWNzLmpzJyk7
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3Rvb2xzL3J1bi1hbmFseXNpcy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy90b29scy9ydW4tYW5hbHlzaXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzVjZTM1NDJiMDExMzc1NzExMjFh
YWJiNDIyOWU4NTM1NGMyN2U5NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy90b29scy9ydW4tYW5hbHlzaXMuanMKQEAgLTAsMCArMSwxNjkgQEAKKyMhL3Vzci9s
b2NhbC9iaW4vbm9kZQorCitjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7Citjb25zdCBTdGF0aXN0
aWNzID0gcmVxdWlyZSgnLi4vcHVibGljL3NoYXJlZC9zdGF0aXN0aWNzJyk7Citjb25zdCBwYXJz
ZUFyZ3VtZW50cyA9IHJlcXVpcmUoJy4vanMvcGFyc2UtYXJndW1lbnRzLmpzJykucGFyc2VBcmd1
bWVudHM7Citjb25zdCBSZW1vdGVBUEkgPSByZXF1aXJlKCcuL2pzL3JlbW90ZS5qcycpLlJlbW90
ZUFQSTsKK3JlcXVpcmUoJy4vanMvdjMtbW9kZWxzLmpzJyk7CitnbG9iYWwuUHJpdmlsZWdlZEFQ
SSA9IHJlcXVpcmUoJy4vanMvcHJpdmlsZWdlZC1hcGkuanMnKS5Qcml2aWxlZ2VkQVBJOworCitm
dW5jdGlvbiBtYWluKGFyZ3YpCit7CisgICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJndW1lbnRz
KGFyZ3YsIFsKKyAgICAgICAge25hbWU6ICctLXNlcnZlci1jb25maWctanNvbicsIHJlcXVpcmVk
OiB0cnVlfSwKKyAgICAgICAge25hbWU6ICctLWNoYW5nZS1kZXRlY3Rpb24tY29uZmlnLWpzb24n
LCByZXF1aXJlZDogdHJ1ZX0sCisgICAgICAgIHtuYW1lOiAnLS1zZWNvbmRzLXRvLXNsZWVwJywg
dHlwZTogcGFyc2VGbG9hdCwgZGVmYXVsdDogMTIwMH0sCisgICAgXSk7CisKKyAgICBpZiAoIW9w
dGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIGFuYWx5c2lzTG9vcChvcHRpb25zKTsKK30K
KworYXN5bmMgZnVuY3Rpb24gYW5hbHlzaXNMb29wKG9wdGlvbnMpCit7CisgICAgbGV0IHNlY29u
ZHNUb1NsZWVwOworICAgIGxldCBhbmFseXplciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAg
Y29uc3QgY2hhbmdlRGV0ZWN0aW9uQ29uZmlncyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5j
KG9wdGlvbnNbJy0tY2hhbmdlLWRldGVjdGlvbi1jb25maWctanNvbiddLCAndXRmLTgnKSk7Cisg
ICAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKG9w
dGlvbnNbJy0tc2VydmVyLWNvbmZpZy1qc29uJ10sICd1dGYtOCcpKTsKKyAgICAgICAgc2Vjb25k
c1RvU2xlZXAgPSBvcHRpb25zWyctLXNlY29uZHMtdG8tc2xlZXAnXTsKKyAgICAgICAgZ2xvYmFs
LlJlbW90ZUFQSSA9IG5ldyBSZW1vdGVBUEkoc2VydmVyQ29uZmlnLnNlcnZlcik7CisgICAgICAg
IFByaXZpbGVnZWRBUEkuY29uZmlndXJlKHNlcnZlckNvbmZpZy5zbGF2ZS5uYW1lLCBzZXJ2ZXJD
b25maWcuc2xhdmUucGFzc3dvcmQpOworCisgICAgICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQg
TWFuaWZlc3QuZmV0Y2goKTsKKyAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRTZXRMaXN0ID0gTWVh
c3VyZW1lbnRTZXRBbmFseXplci5tZWFzdXJlbWVudFNldExpc3RGb3JBbmFseXNpcyhtYW5pZmVz
dCk7CisKKyAgICAgICAgYW5hbHl6ZXIgPSBuZXcgTWVhc3VyZW1lbnRTZXRBbmFseXplcihjaGFu
Z2VEZXRlY3Rpb25Db25maWdzLCBtZWFzdXJlbWVudFNldExpc3QsIGNvbnNvbGUpOworICAgICAg
ICBhd2FpdCBhbmFseXplci5hbmFseXplT25jZSgpOworICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAg
ICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIGFuYWx5emUgbWVhc3VyZW1lbnQgc2V0cyBkdWUg
dG8gJHtlcnJvcn1gKTsKKyAgICB9CisKKyAgICBjb25zb2xlLmxvZyhgU2xlZXBpbmcgZm9yICR7
c2Vjb25kc1RvU2xlZXB9IHNlY29uZHMuYCk7CisgICAgc2V0VGltZW91dCgoKSA9PiBhbmFseXNp
c0xvb3Aob3B0aW9ucyksIHNlY29uZHNUb1NsZWVwICogMTAwMCk7Cit9CisKKworY2xhc3MgTWVh
c3VyZW1lbnRTZXRBbmFseXplciB7CisgICAgY29uc3RydWN0b3IoY2hhbmdlRGV0ZWN0aW9uQ29u
ZmlncywgbWVhc3VyZW1lbnRTZXRMaXN0LCBsb2dnZXIpCisgICAgeworICAgICAgICB0aGlzLl9j
aGFuZ2VEZXRlY3Rpb25Db25maWdzID0gY2hhbmdlRGV0ZWN0aW9uQ29uZmlnczsKKyAgICAgICAg
dGhpcy5fbWVhc3VyZW1lbnRTZXRMaXN0ID0gbWVhc3VyZW1lbnRTZXRMaXN0OworICAgICAgICB0
aGlzLl9sb2dnZXIgPSBsb2dnZXI7CisKKyAgICAgICAgdGhpcy5fZW5kVGltZSA9IERhdGUubm93
KCk7CisgICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRoaXMuX2VuZFRpbWUgLSB0aGlzLl9jaGFu
Z2VEZXRlY3Rpb25Db25maWdzLm1heERheXMgKiAyNCAqIDM2MDAgKiAxMDAwOworICAgIH0KKwor
ICAgIGFzeW5jIGFuYWx5emVPbmNlKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZv
KGBTdGFydCBhbmFseXppbmcgbGFzdCAke3RoaXMuX2NoYW5nZURldGVjdGlvbkNvbmZpZ3MubWF4
RGF5c30gZGF5cyBtZWFzdXJlbWVudCBzZXRzLmApOworICAgICAgICBmb3IgKGNvbnN0IG1lYXN1
cmVtZW50U2V0IG9mIHRoaXMuX21lYXN1cmVtZW50U2V0TGlzdCkKKyAgICAgICAgICAgIGF3YWl0
IHRoaXMuX2FuYWx5emVNZWFzdXJlbWVudFNldChtZWFzdXJlbWVudFNldCk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggRGFzaGJvYXJkUGFn
ZS4KKyAgICBzdGF0aWMgbWVhc3VyZW1lbnRTZXRMaXN0Rm9yQW5hbHlzaXMobWFuaWZlc3QpCisg
ICAgeworICAgICAgICBjb25zdCBtZWFzdXJlbWVudFNldExpc3QgPSBbXTsKKyAgICAgICAgZm9y
IChjb25zdCBkYXNoYm9hcmQgb2YgT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5kYXNoYm9hcmRzKSkg
eworICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZGFzaGJvYXJkKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHJvdykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2VsbCBpbnN0YW5jZW9mIEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2Vs
bC5sZW5ndGggPCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhdGZvcm1JZCA9IHBhcnNlSW50KGNlbGxbMF0p
OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0cmljSWQgPSBwYXJzZUludChjZWxs
WzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwbGF0Zm9ybUlkKSB8fCBp
c05hTihtZXRyaWNJZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IFBsYXRmb3JtLmZpbmRCeUlk
KHBsYXRmb3JtSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0cmljID0gTWV0
cmljLmZpbmRCeUlkKG1ldHJpY0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHBsYXRmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KG1ldHJpYyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0
ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNldChwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSwgcGxh
dGZvcm0ubGFzdE1vZGlmaWVkKG1ldHJpYykpOworICAgICAgICAgICAgICAgICAgICAgICAgY29u
c29sZS5hc3NlcnQobWVhc3VyZW1lbnRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVh
c3VyZW1lbnRTZXRMaXN0LnB1c2gobWVhc3VyZW1lbnRTZXQpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBtZWFzdXJlbWVudFNldExpc3Q7CisgICAgfQorCisgICAgYXN5bmMgX2FuYWx5emVN
ZWFzdXJlbWVudFNldChtZWFzdXJlbWVudFNldCkKKyAgICB7CisgICAgICAgIGNvbnN0IG1ldHJp
YyA9IE1ldHJpYy5maW5kQnlJZChtZWFzdXJlbWVudFNldC5tZXRyaWNJZCgpKTsKKyAgICAgICAg
Y29uc3QgcGxhdGZvcm0gPSBQbGF0Zm9ybS5maW5kQnlJZChtZWFzdXJlbWVudFNldC5wbGF0Zm9y
bUlkKCkpOworICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhgPT09PSAiJHttZXRyaWMuZnVsbE5h
bWUoKX0iIG9uICIke3BsYXRmb3JtLm5hbWUoKX0iID09PT1gKTsKKyAgICAgICAgYXdhaXQgbWVh
c3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVuKHRoaXMuX3N0YXJ0VGltZSwgdGhpcy5fZW5kVGltZSk7
CisgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lU2VyaWVzID0gbWVhc3VyZW1lbnRTZXQuZmV0Y2hl
ZFRpbWVTZXJpZXMoJ2N1cnJlbnQnLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjb25zdCByYXdW
YWx1ZXMgPSBjdXJyZW50VGltZVNlcmllcy52YWx1ZXMoKTsKKyAgICAgICAgY29uc3Qgc2VnbWVu
dGVkVmFsdWVzID0gYXdhaXQgbWVhc3VyZW1lbnRTZXQuZmV0Y2hTZWdtZW50YXRpb24oJ3NlZ21l
bnRUaW1lU2VyaWVzQnlNYXhpbWl6aW5nU2Nod2FyekNyaXRlcmlvbicsIFtdLCAnY3VycmVudCcs
IGZhbHNlKTsKKyAgICAgICAgaWYgKCFzZWdtZW50ZWRWYWx1ZXMgfHwgIXNlZ21lbnRlZFZhbHVl
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKGBGYWlsZWQgZmV0Y2hp
bmcgc2VnbWVudGF0aW9ucyBmb3IgJHttZXRyaWMuZnVsbE5hbWUoKX0iIG9uICIke3BsYXRmb3Jt
Lm5hbWUoKX0iYCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBj
b25zdCBwcm9ncmVzc2lvblN0cmluZyA9ICdwcm9ncmVzc2lvbic7CisgICAgICAgIGNvbnN0IHJl
Z3Jlc3Npb25TdHJpbmcgPSAncmVncmVzc2lvbic7CisgICAgICAgIGNvbnN0IHJhbmdlcyA9IFN0
YXRpc3RpY3MuZmluZFJhbmdlc0ZvckNoYW5nZURldGVjdGlvbnNXaXRoV2VsY2hzVFRlc3QocmF3
VmFsdWVzLCBzZWdtZW50ZWRWYWx1ZXMsCisgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rp
b25Db25maWdzLnRUZXN0U2lnbmlmaWNhbmNlKS5tYXAoKHJhbmdlKSA9Pih7CisgICAgICAgICAg
ICAgICAgc3RhcnRQb2ludDogY3VycmVudFRpbWVTZXJpZXMuZmluZFBvaW50QnlJbmRleChyYW5n
ZS5zdGFydEluZGV4KSwKKyAgICAgICAgICAgICAgICBlbmRQb2ludDogY3VycmVudFRpbWVTZXJp
ZXMuZmluZFBvaW50QnlJbmRleChyYW5nZS5lbmRJbmRleCksCisgICAgICAgICAgICAgICAgdmFs
dWVDaGFuZ2VTdW1tYXJ5OiBtZXRyaWMubGFiZWxGb3JEaWZmZXJlbmNlKHJhbmdlLnNlZ21lbnRh
dGlvblN0YXJ0VmFsdWUsIHJhbmdlLnNlZ21lbnRhdGlvbkVuZFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICBwcm9ncmVzc2lvblN0cmluZywgcmVncmVzc2lvblN0cmluZykKKyAgICAgICAgICAg
IH0pKTsKKworICAgICAgICBjb25zdCBhbmFseXNpc1Rhc2tzID0gYXdhaXQgQW5hbHlzaXNUYXNr
LmZldGNoQnlQbGF0Zm9ybUFuZE1ldHJpYyhwbGF0Zm9ybS5pZCgpLCBtZXRyaWMuaWQoKSk7Cisg
ICAgICAgIGNvbnN0IGZpbHRlcmVkUmFuZ2VzID0gcmFuZ2VzLmZpbHRlcigocmFuZ2UpID0+IHsK
KyAgICAgICAgICAgIGNvbnN0IHJhbmdlRW5kc0JlZm9yZUFuYWx5c2lzU3RhcnRzID0gcmFuZ2Uu
ZW5kUG9pbnQudGltZSA8IHRoaXMuX3N0YXJ0VGltZTsKKyAgICAgICAgICAgIGlmIChyYW5nZUVu
ZHNCZWZvcmVBbmFseXNpc1N0YXJ0cykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgYW5hbHlzaXNUYXNrcykgeworICAgICAgICAg
ICAgICAgIGNvbnN0IHRhc2tFbmRzQmVmb3JlUmFuZ2VTdGFydCA9IHRhc2suZW5kVGltZSgpIDwg
cmFuZ2Uuc3RhcnRQb2ludC50aW1lOworICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tTdGFydHNB
ZnRlclJhbmdlRW5kID0gcmFuZ2UuZW5kUG9pbnQudGltZSA8IHRhc2suc3RhcnRUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCEodGFza0VuZHNCZWZvcmVSYW5nZVN0YXJ0IHx8IHRhc2tTdGFy
dHNBZnRlclJhbmdlRW5kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworCisgICAg
ICAgIGxldCByYW5nZVdpdGhNb3N0U2lnbmlmaWNhbnRDaGFuZ2UgPSBudWxsOworICAgICAgICBs
ZXQgbGFyZ2VzdFdlaWdodGVkU2lnbmlmaWNhbmNlID0gMDsKKyAgICAgICAgZmlsdGVyZWRSYW5n
ZXMuZm9yRWFjaCgocmFuZ2UpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlQ2hhbmdl
QWJzb2x1dGVWYWx1ZSA9IE1hdGguYWJzKHJhbmdlLnZhbHVlQ2hhbmdlU3VtbWFyeS5yZWxhdGl2
ZUNoYW5nZSk7CisKKyAgICAgICAgICAgIC8vIFRha2UgYSBzcXVhcmUgcm9vdCBvbiBwcm9ncmVz
c2lvbiByZWxhdGl2ZSB2YWx1ZSwgc28gdGhhdCB3ZSB3b3VsZCBub3QgZmF2b3IgcmVncmVzc2lv
biBzbworICAgICAgICAgICAgLy8gbXVjaCB0aGF0IHdlIG1pc3Mgc29tZSBodWdlIHByb2dyZXNz
aW9ucy4KKyAgICAgICAgICAgIGNvbnN0IHdlaWdodGVkU2lnbmlmaWNhbmNlID0gcmFuZ2UudmFs
dWVDaGFuZ2VTdW1tYXJ5LmNoYW5nZVR5cGUgPT09IHJlZ3Jlc3Npb25TdHJpbmcgPworICAgICAg
ICAgICAgICAgIHJlbGF0aXZlQ2hhbmdlQWJzb2x1dGVWYWx1ZSA6IE1hdGguc3FydChyZWxhdGl2
ZUNoYW5nZUFic29sdXRlVmFsdWUpOworCisgICAgICAgICAgICBpZiAod2VpZ2h0ZWRTaWduaWZp
Y2FuY2UgPiBsYXJnZXN0V2VpZ2h0ZWRTaWduaWZpY2FuY2UpIHsKKyAgICAgICAgICAgICAgICBs
YXJnZXN0V2VpZ2h0ZWRTaWduaWZpY2FuY2UgPSB3ZWlnaHRlZFNpZ25pZmljYW5jZTsKKyAgICAg
ICAgICAgICAgICByYW5nZVdpdGhNb3N0U2lnbmlmaWNhbnRDaGFuZ2UgPSByYW5nZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCFyYW5nZVdpdGhNb3N0U2lnbmlm
aWNhbnRDaGFuZ2UpIHsKKyAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdOb3RoaW5nIHRv
IGFuYWx5emUnKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IHN0YXJ0Q29tbWl0U2V0ID0gcmFuZ2VXaXRoTW9zdFNpZ25pZmljYW50Q2hhbmdlLnN0YXJ0
UG9pbnQuY29tbWl0U2V0KCk7CisgICAgICAgIGNvbnN0IGVuZENvbW1pdFNldCA9IHJhbmdlV2l0
aE1vc3RTaWduaWZpY2FudENoYW5nZS5lbmRQb2ludC5jb21taXRTZXQoKTsKKyAgICAgICAgY29u
c3Qgc3VtbWFyeSA9IGBQb3RlbnRpYWwgJHtyYW5nZVdpdGhNb3N0U2lnbmlmaWNhbnRDaGFuZ2Uu
dmFsdWVDaGFuZ2VTdW1tYXJ5LmNoYW5nZUxhYmVsfSBvbiAke3BsYXRmb3JtLm5hbWUoKX0gYmV0
d2VlbiAke0NvbW1pdFNldC5kaWZmKHN0YXJ0Q29tbWl0U2V0LCBlbmRDb21taXRTZXQpfWA7CisK
KyAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oYENyZWF0aW5nIGFuYWx5c2lzIHRhc2sgYW5kIGNv
bmZpcm1pbmc6ICIke3N1bW1hcnl9Ii5gKTsKKyAgICAgICAgYXdhaXQgQW5hbHlzaXNUYXNrLmNy
ZWF0ZShzdW1tYXJ5LCByYW5nZVdpdGhNb3N0U2lnbmlmaWNhbnRDaGFuZ2Uuc3RhcnRQb2ludCwg
cmFuZ2VXaXRoTW9zdFNpZ25pZmljYW50Q2hhbmdlLmVuZFBvaW50LAorICAgICAgICAgICAgJ0Nv
bmZpcm0nLCB0aGlzLl9jaGFuZ2VEZXRlY3Rpb25Db25maWdzLmNvbmZpcm1UYXNrUmVwZWF0Q291
bnQpOworICAgIH0KK30KKworaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKQorICAgIG1haW4o
cHJvY2Vzcy5hcmd2KTsKKworaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKQorICAg
IG1vZHVsZS5leHBvcnRzLk1lYXN1cmVtZW50U2V0QW5hbHl6ZXIgPSBNZWFzdXJlbWVudFNldEFu
YWx5emVyOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LXNldC1hbmFseXplci10ZXN0
cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LXNl
dC1hbmFseXplci10ZXN0cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGI5MDNlZGE5YjRiMzI5ODI1YzAzYjVj
MGU3MTFjNzhlMmY3NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtc2V0LWFuYWx5emVyLXRlc3RzLmpzCkBAIC0wLDAg
KzEsMzY1IEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2Vy
dCcpOworY29uc3QgTW9ja1JlbW90ZUFQSSA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL21vY2stcmVt
b3RlLWFwaS5qcycpLk1vY2tSZW1vdGVBUEk7Citjb25zdCBNb2NrTW9kZWxzID0gcmVxdWlyZSgn
Li9yZXNvdXJjZXMvbW9jay12My1tb2RlbHMuanMnKS5Nb2NrTW9kZWxzOworcmVxdWlyZSgnLi4v
dG9vbHMvanMvdjMtbW9kZWxzLmpzJyk7Citjb25zdCBNZWFzdXJlbWVudFNldEFuYWx5emVyID0g
cmVxdWlyZSgnLi4vdG9vbHMvcnVuLWFuYWx5c2lzJykuTWVhc3VyZW1lbnRTZXRBbmFseXplcjsK
K2NvbnN0IE5vZGVQcml2aWxlZ2VkQVBJID0gcmVxdWlyZSgnLi4vdG9vbHMvanMvcHJpdmlsZWdl
ZC1hcGkuanMnKS5Qcml2aWxlZ2VkQVBJOworCitkZXNjcmliZSgnTWVhc3VyZW1lbnRTZXRBbmFs
eXplcicsICgpID0+IHsKKyAgICBNb2NrTW9kZWxzLmluamVjdCgpOworICAgIGNvbnN0IHJlcXVl
c3RzID0gTW9ja1JlbW90ZUFQSS5pbmplY3QoJ2h0dHA6Ly9idWlsZC53ZWJraXQub3JnJywgTm9k
ZVByaXZpbGVnZWRBUEkpOworICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBQcml2aWxl
Z2VkQVBJLmNvbmZpZ3VyZSgndGVzdCcsICdwYXNzd29yZCcpOworICAgIH0pOworCisgICAgZGVz
Y3JpYmUoJ21lYXN1cmVtZW50U2V0TGlzdEZvckFuYWx5c2lzJywgKCkgPT4geworICAgICAgICBp
dCgnc2hvdWxkIGdlbmVyYXRlIGVtcHR5IGxpc3QgaWYgbm8gZGFzaGJvYXJkIGNvbmZpZ3VyYXRp
b25zJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSAgTWVhc3Vy
ZW1lbnRTZXRBbmFseXplci5tZWFzdXJlbWVudFNldExpc3RGb3JBbmFseXNpcyh7ZGFzaGJvYXJk
czoge319KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb25maWd1cmF0aW9ucy5sZW5ndGgs
IDApOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgbGlzdCBv
ZiBtZWFzdXJlbWVudCBzZXQnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb25maWd1cmF0
aW9ucyA9IE1lYXN1cmVtZW50U2V0QW5hbHl6ZXIubWVhc3VyZW1lbnRTZXRMaXN0Rm9yQW5hbHlz
aXMoe2Rhc2hib2FyZHM6IHsKKyAgICAgICAgICAgICAgICAibWFjT1MiOiBbWyJzb21lIG1ldHJp
YyIsICJwbHQtbWVhbiJdLCBbWydTb21lIFBsYXRmb3JtJ10sIFs2NSwgMjg4NF0sIFs2NSwgMTE1
OF1dXQorICAgICAgICAgICAgfX0pOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbmZpZ3Vy
YXRpb25zLmxlbmd0aCwgMik7CisgICAgICAgICAgICBjb25zdCBbbWVhc3VyZW1lbnRTZXQwLCBt
ZWFzdXJlbWVudFNldDFdID0gY29uZmlndXJhdGlvbnM7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwobWVhc3VyZW1lbnRTZXQwLm1ldHJpY0lkKCksIE1vY2tNb2RlbHMuc29tZU1ldHJpYy5pZCgp
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChtZWFzdXJlbWVudFNldDAucGxhdGZvcm1JZCgp
LCBNb2NrTW9kZWxzLnNvbWVQbGF0Zm9ybS5pZCgpKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVh
bChtZWFzdXJlbWVudFNldDEubWV0cmljSWQoKSwgTW9ja01vZGVscy5wbHRNZWFuLmlkKCkpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG1lYXN1cmVtZW50U2V0MS5wbGF0Zm9ybUlkKCksIE1v
Y2tNb2RlbHMuc29tZVBsYXRmb3JtLmlkKCkpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAg
IGZ1bmN0aW9uIG1vY2tMb2dnZXIoKQorICAgIHsKKyAgICAgICAgY29uc3QgaW5mb19sb2dzID0g
W107CisgICAgICAgIGNvbnN0IGVycm9yX2xvZ3MgPVtdOworICAgICAgICBjb25zdCB3YXJuX2xv
Z3MgPSBbXTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGluZm86IChtZXNzYWdlKSA9
PiBpbmZvX2xvZ3MucHVzaChtZXNzYWdlKSwKKyAgICAgICAgICAgIHdhcm46IChtZXNzYWdlKSA9
PiB3YXJuX2xvZ3MucHVzaChtZXNzYWdlKSwKKyAgICAgICAgICAgIGVycm9yOiAobWVzc2FnZSkg
PT4gZXJyb3JfbG9ncy5wdXNoKG1lc3NhZ2UpLAorICAgICAgICAgICAgaW5mb19sb2dzLCBlcnJv
cl9sb2dzLCB3YXJuX2xvZ3MKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBkZXNjcmliZSgnYW5h
bHl6ZU9uY2UnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHNpbXBsZVNlZ21lbnRhYmxlVmFsdWVz
ID0gWworICAgICAgICAgICAgMTU0Ni41NjAzLCAxNTQ4LjE1MzYsIDE1NjMuNTQ1MiwgMTUzOS43
ODIzLCAxNTQ2LjQxODQsIDE1NDguOTI5OSwgMTUzMi41NDQ0LCAxNTQ2LjI4MDAsIDE1NDcuMTc2
MCwgMTU1MS4zNTA3LAorICAgICAgICAgICAgMTU0OC4zMjc3LCAxNTQ0Ljc2NzMsIDE1NDIuNzE1
NywgMTUzOC4xNzAwLCAxNTM4LjA5NDgsIDE1NDMuMDM2NCwgMTUzNy45NzM3LCAxNTQyLjI2MTEs
IDE1NDMuOTY4NSwgMTU0Ni40OTAxLAorICAgICAgICAgICAgMTU0NC40MDgwLCAxNTQwLjg2NzEs
IDE1MzcuMzM1MywgMTU0OS40MzMxLCAxNTQxLjQ0MzYsIDE1NDQuMTI5OSwgMTU1MC4xNzcwLCAx
NTUzLjE4NzIsIDE1NDkuMzQxNywgMTU0Mi4zNzg4LAorICAgICAgICAgICAgMTU0My41MDk0LCAx
NTQxLjc5MDUsIDE1MzcuNjYyNSwgMTU0Ny4zODQwLCAxNTM4LjUxODUsIDE1NDkuNjc2NCwgMTU1
Ni42MTM4LCAxNTUyLjA0NzYsIDE1NDEuNzYyOSwgMTU0NC43MDA2LAorICAgICAgICAgICAgLyog
c2VnbWVudHMgY2hhbmdlcyBoZXJlICovCisgICAgICAgICAgICAxNTg3LjEzOTAsIDE1OTQuNTQ1
MSwgMTU4Ni4yNDMwLCAxNTk2LjczMTAsIDE1NDguMTQyMworICAgICAgICBdOworCisgICAgICAg
IGNvbnN0IGRhdGFCZWZvcmVTbWFsbFByb2dyZXNzaW9uID0gWzE1ODcuMTM5MCwgMTU5NC41NDUx
LCAxNTg2LjI0MzAsIDE1OTYuNzMxMCwgMTU0OC4xNDIzXTsKKyAgICAgICAgY29uc3QgZGF0YUJl
Zm9yZUh1Z2hQcm9ncmVzc2lvbiA9IFsxNzAwLjEzOTAsIDE3MDQuNTQ1MSwgMTcwMy4yNDMwLCAx
NzA2LjczMTAsIDE2ODkuMTQyM107CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZVNhbXBsZVJ1bnMo
dmFsdWVzLCBzdGFydFJ1bklkLCBzdGFydFRpbWUsIHRpbWVJbmNyZW1lbnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGxldCBydW5JZCA9IHN0YXJ0UnVuSWQ7CisgICAgICAgICAgICBsZXQgYnVp
bGRJZCA9IDM0MDA7CisgICAgICAgICAgICBsZXQgYnVpbGROdW1iZXIgPSAxOworICAgICAgICAg
ICAgbGV0IGNvbW1pdF9pZCA9IDE7CisgICAgICAgICAgICBsZXQgcmV2aXNpb24gPSAxOworICAg
ICAgICAgICAgY29uc3QgbWFrZVJ1biA9ICh2YWx1ZSwgY29tbWl0VGltZSkgPT4gW3J1bklkKyss
IHZhbHVlLCAxLCB2YWx1ZSwgdmFsdWUsIGZhbHNlLCBbW2NvbW1pdF9pZCsrLCBNb2NrTW9kZWxz
LndlYmtpdC5pZCgpLCByZXZpc2lvbisrLCAwLCAwXV0sIGNvbW1pdFRpbWUsIGNvbW1pdFRpbWUg
KyAxMCwgYnVpbGRJZCsrLCBidWlsZE51bWJlcisrLCBNb2NrTW9kZWxzLmJ1aWxkZXIuaWQoKV07
CisgICAgICAgICAgICB0aW1lSW5jcmVtZW50ID0gTWF0aC5mbG9vcih0aW1lSW5jcmVtZW50KTsK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IG1ha2VSdW4o
dmFsdWUsIHN0YXJ0VGltZSArIGluZGV4ICogdGltZUluY3JlbWVudCkpOworICAgICAgICB9CisK
KyAgICAgICAgaXQoJ3Nob3VsZCBub3QgYW5hbHl6ZSBhbmQgc2hvdyBhIHdhcm5pbmcgbWVzc2Fn
ZSBpZiBmYWlsZWQgdG8gZmV0Y2ggc2Vnbm1lbnRhdGlvbicsIGFzeW5jICgpID0+IHsKKyAgICAg
ICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0ID0gTWVhc3VyZW1lbnRTZXQuZmluZFNldChNb2Nr
TW9kZWxzLnNvbWVQbGF0Zm9ybS5pZCgpLCBNb2NrTW9kZWxzLnNvbWVNZXRyaWMuaWQoKSwgNTAw
MCk7CisgICAgICAgICAgICBjb25zdCBjaGFuZ2VEZXRlY3Rpb25Db25maWdzID0ge3RUZXN0U2ln
bmlmaWNhbmNlOiAwLjk5LCBtYXhEYXlzOiAxMCwgY29uZmlybVRhc2tSZXBlYXRDb3VudDogNH07
CisgICAgICAgICAgICBjb25zdCBsb2dnZXIgPSBtb2NrTG9nZ2VyKCk7CisgICAgICAgICAgICBj
b25zdCBtZWFzdXJlbWVudFNldEFuYWx5emVyID0gbmV3IE1lYXN1cmVtZW50U2V0QW5hbHl6ZXIo
Y2hhbmdlRGV0ZWN0aW9uQ29uZmlncywgW21lYXN1cmVtZW50U2V0XSwgbG9nZ2VyKTsKKyAgICAg
ICAgICAgIGNvbnN0IGFuYWx5c2lzUHJvbWlzZSA9IG1lYXN1cmVtZW50U2V0QW5hbHl6ZXIuYW5h
bHl6ZU9uY2UobWVhc3VyZW1lbnRTZXQpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJs
LCBgL2RhdGEvbWVhc3VyZW1lbnQtc2V0LSR7TW9ja01vZGVscy5zb21lUGxhdGZvcm0uaWQoKX0t
JHtNb2NrTW9kZWxzLnNvbWVNZXRyaWMuaWQoKX0uanNvbmApOworICAgICAgICAgICAgcmVxdWVz
dHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NsdXN0ZXJTdGFydCc6IDk0NjY4NDgw
MDAwMCwKKyAgICAgICAgICAgICAgICAnY2x1c3RlclNpemUnOiA1MTg0MDAwMDAwLAorICAgICAg
ICAgICAgICAgICdmb3JtYXRNYXAnOiBbXSwKKyAgICAgICAgICAgICAgICAnY29uZmlndXJhdGlv
bnMnOiB7Y3VycmVudDogW119LAorICAgICAgICAgICAgICAgICdzdGFydFRpbWUnOiAxNTI1MjEx
NzU0OTg5LAorICAgICAgICAgICAgICAgICdlbmRUaW1lJzogMTUyNTIxMTc3MjAwMCwKKyAgICAg
ICAgICAgICAgICAnbGFzdE1vZGlmaWVkJzogMTUyNTIxMTc3NDk4OSwKKyAgICAgICAgICAgICAg
ICAnY2x1c3RlckNvdW50JzogNSwKKyAgICAgICAgICAgICAgICAnc3RhdHVzJzogJ09LJ30pOwor
ICAgICAgICAgICAgYXdhaXQgYW5hbHlzaXNQcm9taXNlOworICAgICAgICAgICAgYXNzZXJ0LmRl
ZXBFcXVhbChsb2dnZXIuaW5mb19sb2dzLCBbJ1N0YXJ0IGFuYWx5emluZyBsYXN0IDEwIGRheXMg
bWVhc3VyZW1lbnQgc2V0cy4nLCAnPT09PSAiU29tZSB0ZXN0IDogU29tZSBtZXRyaWMiIG9uICJT
b21lIHBsYXRmb3JtIiA9PT09J10pOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChsb2dn
ZXIuZXJyb3JfbG9ncywgW10pOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChsb2dnZXIu
d2Fybl9sb2dzLCBbJ0ZhaWxlZCBmZXRjaGluZyBzZWdtZW50YXRpb25zIGZvciBTb21lIHRlc3Qg
OiBTb21lIG1ldHJpYyIgb24gIlNvbWUgcGxhdGZvcm0iJ10pOworICAgICAgICB9KTsKKworICAg
ICAgICBpdCgnc2hvdWxkIG5vdCBhbmFseXplIGlmIG5vIHJlZ3Jlc3Npb24gaXMgZGV0ZWN0ZWQn
LCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBtZWFzdXJlbWVudFNldCA9IE1lYXN1
cmVtZW50U2V0LmZpbmRTZXQoTW9ja01vZGVscy5zb21lUGxhdGZvcm0uaWQoKSwgTW9ja01vZGVs
cy5zb21lTWV0cmljLmlkKCksIDUwMDApOworICAgICAgICAgICAgY29uc3QgY2hhbmdlRGV0ZWN0
aW9uQ29uZmlncyA9IHt0VGVzdFNpZ25pZmljYW5jZTogMC45OSwgbWF4RGF5czogMTAsIGNvbmZp
cm1UYXNrUmVwZWF0Q291bnQ6IDR9OworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbW9ja0xv
Z2dlcigpOworICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRTZXRBbmFseXplciA9IG5ldyBN
ZWFzdXJlbWVudFNldEFuYWx5emVyKGNoYW5nZURldGVjdGlvbkNvbmZpZ3MsIFttZWFzdXJlbWVu
dFNldF0sIGxvZ2dlcik7CisgICAgICAgICAgICBtZWFzdXJlbWVudFNldEFuYWx5emVyLl9zdGFy
dFRpbWUgPSA0MDAwOworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXRBbmFseXplci5fZW5kVGlt
ZSA9IDUwMDA7CisgICAgICAgICAgICBjb25zdCBhbmFseXNpc1Byb21pc2UgPSBtZWFzdXJlbWVu
dFNldEFuYWx5emVyLmFuYWx5emVPbmNlKG1lYXN1cmVtZW50U2V0KTsKKworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMF0udXJsLCBgL2RhdGEvbWVhc3VyZW1lbnQtc2V0LSR7TW9ja01vZGVscy5z
b21lUGxhdGZvcm0uaWQoKX0tJHtNb2NrTW9kZWxzLnNvbWVNZXRyaWMuaWQoKX0uanNvbmApOwor
ICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2NsdXN0
ZXJTdGFydCc6IDEwMDAsCisgICAgICAgICAgICAgICAgJ2NsdXN0ZXJTaXplJzogMTAwMCwKKyAg
ICAgICAgICAgICAgICAnZm9ybWF0TWFwJzogWydpZCcsICdtZWFuJywgJ2l0ZXJhdGlvbkNvdW50
JywgJ3N1bScsICdzcXVhcmVTdW0nLCAnbWFya2VkT3V0bGllcicsICdyZXZpc2lvbnMnLCAnY29t
bWl0VGltZScsICdidWlsZCcsICdidWlsZFRpbWUnLCAnYnVpbGROdW1iZXInLCAnYnVpbGRlcidd
LAorICAgICAgICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6IHtjdXJyZW50OiBtYWtlU2FtcGxl
UnVucyhzaW1wbGVTZWdtZW50YWJsZVZhbHVlcy5zbGljZSgwLCAzOSksIDY0MDAsIDQwMDAsIDEw
MDAgLyA1MCl9LAorICAgICAgICAgICAgICAgICdzdGFydFRpbWUnOiA0MDAwLAorICAgICAgICAg
ICAgICAgICdlbmRUaW1lJzogNTAwMCwKKyAgICAgICAgICAgICAgICAnbGFzdE1vZGlmaWVkJzog
NTAwMCwKKyAgICAgICAgICAgICAgICAnY2x1c3RlckNvdW50JzogNCwKKyAgICAgICAgICAgICAg
ICAnc3RhdHVzJzogJ09LJ30pOworCisgICAgICAgICAgICBhd2FpdCBNb2NrUmVtb3RlQVBJLndh
aXRGb3JSZXF1ZXN0KCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3Ro
LCAyKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvYXBpL2Fu
YWx5c2lzLXRhc2tzP3BsYXRmb3JtPTY1Jm1ldHJpYz0yODg0Jyk7CisgICAgICAgICAgICByZXF1
ZXN0c1sxXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICBhbmFseXNpc1Rhc2tzOiBbXSwKKyAg
ICAgICAgICAgICAgICBidWdzOiBbXSwKKyAgICAgICAgICAgICAgICBjb21taXRzOiBbXSwKKyAg
ICAgICAgICAgICAgICBzdGF0dXM6ICdPSycKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICBhd2FpdCBhbmFseXNpc1Byb21pc2U7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGxv
Z2dlci5pbmZvX2xvZ3MsIFsnU3RhcnQgYW5hbHl6aW5nIGxhc3QgMTAgZGF5cyBtZWFzdXJlbWVu
dCBzZXRzLicsCisgICAgICAgICAgICAgICAgJz09PT0gIlNvbWUgdGVzdCA6IFNvbWUgbWV0cmlj
IiBvbiAiU29tZSBwbGF0Zm9ybSIgPT09PScsICdOb3RoaW5nIHRvIGFuYWx5emUnXSk7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwobG9nZ2VyLndhcm5fbG9ncy5sZW5ndGgsIDApOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGxvZ2dlci5lcnJvcl9sb2dzLmxlbmd0aCwgMCk7CisgICAgICAg
IH0pOworCisgICAgICAgIGl0KCdzaG91bGQgYW5hbHl6ZSBpZiBhIG5ldyByZWdyZXNzaW9uIGlz
IGRldGVjdGVkJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRT
ZXQgPSBNZWFzdXJlbWVudFNldC5maW5kU2V0KE1vY2tNb2RlbHMuc29tZVBsYXRmb3JtLmlkKCks
IE1vY2tNb2RlbHMuc29tZU1ldHJpYy5pZCgpLCA1MDAwKTsKKyAgICAgICAgICAgIGNvbnN0IGNo
YW5nZURldGVjdGlvbkNvbmZpZ3MgPSB7dFRlc3RTaWduaWZpY2FuY2U6IDAuOTksIG1heERheXM6
IDEwLCBjb25maXJtVGFza1JlcGVhdENvdW50OiA0fTsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dl
ciA9IG1vY2tMb2dnZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0QW5hbHl6
ZXIgPSBuZXcgTWVhc3VyZW1lbnRTZXRBbmFseXplcihjaGFuZ2VEZXRlY3Rpb25Db25maWdzLCBb
bWVhc3VyZW1lbnRTZXRdLCBsb2dnZXIpOworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXRBbmFs
eXplci5fc3RhcnRUaW1lID0gNDAwMDsKKyAgICAgICAgICAgIG1lYXN1cmVtZW50U2V0QW5hbHl6
ZXIuX2VuZFRpbWUgPSA1MDAwOworICAgICAgICAgICAgY29uc3QgYW5hbHlzaXNQcm9taXNlID0g
bWVhc3VyZW1lbnRTZXRBbmFseXplci5hbmFseXplT25jZShtZWFzdXJlbWVudFNldCk7CisKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgYC9kYXRhL21lYXN1cmVtZW50LXNldC0ke01v
Y2tNb2RlbHMuc29tZVBsYXRmb3JtLmlkKCl9LSR7TW9ja01vZGVscy5zb21lTWV0cmljLmlkKCl9
Lmpzb25gKTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAgICAg
ICAgICdjbHVzdGVyU3RhcnQnOiAxMDAwLAorICAgICAgICAgICAgICAgICdjbHVzdGVyU2l6ZSc6
IDEwMDAsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdE1hcCc6IFsnaWQnLCAnbWVhbicsICdpdGVy
YXRpb25Db3VudCcsICdzdW0nLCAnc3F1YXJlU3VtJywgJ21hcmtlZE91dGxpZXInLCAncmV2aXNp
b25zJywgJ2NvbW1pdFRpbWUnLCAnYnVpbGQnLCAnYnVpbGRUaW1lJywgJ2J1aWxkTnVtYmVyJywg
J2J1aWxkZXInXSwKKyAgICAgICAgICAgICAgICAnY29uZmlndXJhdGlvbnMnOiB7Y3VycmVudDog
bWFrZVNhbXBsZVJ1bnMoc2ltcGxlU2VnbWVudGFibGVWYWx1ZXMsIDY0MDAsIDQwMDAsIDEwMDAg
LyA1MCl9LAorICAgICAgICAgICAgICAgICdzdGFydFRpbWUnOiA0MDAwLAorICAgICAgICAgICAg
ICAgICdlbmRUaW1lJzogNTAwMCwKKyAgICAgICAgICAgICAgICAnbGFzdE1vZGlmaWVkJzogNTAw
MCwKKyAgICAgICAgICAgICAgICAnY2x1c3RlckNvdW50JzogNCwKKyAgICAgICAgICAgICAgICAn
c3RhdHVzJzogJ09LJ30pOworCisgICAgICAgICAgICBhd2FpdCBNb2NrUmVtb3RlQVBJLndhaXRG
b3JSZXF1ZXN0KCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAy
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvYXBpL2FuYWx5
c2lzLXRhc2tzP3BsYXRmb3JtPTY1Jm1ldHJpYz0yODg0Jyk7CisgICAgICAgICAgICByZXF1ZXN0
c1sxXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICBhbmFseXNpc1Rhc2tzOiBbXSwKKyAgICAg
ICAgICAgICAgICBidWdzOiBbXSwKKyAgICAgICAgICAgICAgICBjb21taXRzOiBbXSwKKyAgICAg
ICAgICAgICAgICBzdGF0dXM6ICdPSycKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBh
d2FpdCBNb2NrUmVtb3RlQVBJLndhaXRGb3JSZXF1ZXN0KCk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAzKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1syXS51cmwsICcvcHJpdmlsZWdlZC1hcGkvY3JlYXRlLWFuYWx5c2lzLXRhc2snKTsKKyAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVxdWVzdHNbMl0uZGF0YSwgeworICAgICAgICAg
ICAgICAgIHNsYXZlTmFtZTogJ3Rlc3QnLAorICAgICAgICAgICAgICAgIHNsYXZlUGFzc3dvcmQ6
ICdwYXNzd29yZCcsCisgICAgICAgICAgICAgICAgbmFtZTogJ1BvdGVudGlhbCAyLjM4JSByZWdy
ZXNzaW9uIG9uIFNvbWUgcGxhdGZvcm0gYmV0d2VlbiBXZWJLaXQ6IHIzNS1yNDQnLAorICAgICAg
ICAgICAgICAgIHN0YXJ0UnVuOiA2NDM0LAorICAgICAgICAgICAgICAgIGVuZFJ1bjogNjQ0MywK
KyAgICAgICAgICAgICAgICByZXBldGl0aW9uQ291bnQ6IDQsCisgICAgICAgICAgICAgICAgdGVz
dEdyb3VwTmFtZTogJ0NvbmZpcm0nLAorICAgICAgICAgICAgICAgIHJldmlzaW9uU2V0czogW3sn
MTEnOiB7cmV2aXNpb246IDM1LCBvd25lclJldmlzaW9uOiBudWxsLCBwYXRjaDogbnVsbH19LAor
ICAgICAgICAgICAgICAgICAgICB7JzExJzoge3JldmlzaW9uOiA0NCwgb3duZXJSZXZpc2lvbjog
bnVsbCwgcGF0Y2g6IG51bGx9fV0KKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVxdWVz
dHNbMl0ucmVzb2x2ZSgpOworCisgICAgICAgICAgICBhd2FpdCBhbmFseXNpc1Byb21pc2U7Cisg
ICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGxvZ2dlci5pbmZvX2xvZ3MsIFsnU3RhcnQgYW5h
bHl6aW5nIGxhc3QgMTAgZGF5cyBtZWFzdXJlbWVudCBzZXRzLicsCisgICAgICAgICAgICAgICAg
Jz09PT0gIlNvbWUgdGVzdCA6IFNvbWUgbWV0cmljIiBvbiAiU29tZSBwbGF0Zm9ybSIgPT09PScs
CisgICAgICAgICAgICAgICAgJ0NyZWF0aW5nIGFuYWx5c2lzIHRhc2sgYW5kIGNvbmZpcm1pbmc6
ICJQb3RlbnRpYWwgMi4zOCUgcmVncmVzc2lvbiBvbiBTb21lIHBsYXRmb3JtIGJldHdlZW4gV2Vi
S2l0OiByMzUtcjQ0Ii4nXSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwobG9nZ2VyLndhcm5f
bG9ncy5sZW5ndGgsIDApOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGxvZ2dlci5lcnJvcl9s
b2dzLmxlbmd0aCwgMCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgbm90IGFu
YWx5emUgaWYgdGhlcmUgaXMgYW4gb3ZlcmxhcHBlZCBleGlzdGluZyBhbmFseXNpcyB0YXNrJywg
YXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRTZXQgPSBNZWFzdXJl
bWVudFNldC5maW5kU2V0KE1vY2tNb2RlbHMuc29tZVBsYXRmb3JtLmlkKCksIE1vY2tNb2RlbHMu
c29tZU1ldHJpYy5pZCgpLCA1MDAwKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYW5nZURldGVjdGlv
bkNvbmZpZ3MgPSB7dFRlc3RTaWduaWZpY2FuY2U6IDAuOTksIG1heERheXM6IDEwLCBjb25maXJt
VGFza1JlcGVhdENvdW50OiA0fTsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG1vY2tMb2dn
ZXIoKTsKKyAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0QW5hbHl6ZXIgPSBuZXcgTWVh
c3VyZW1lbnRTZXRBbmFseXplcihjaGFuZ2VEZXRlY3Rpb25Db25maWdzLCBbbWVhc3VyZW1lbnRT
ZXRdLCBsb2dnZXIpOworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXRBbmFseXplci5fc3RhcnRU
aW1lID0gNDAwMDsKKyAgICAgICAgICAgIG1lYXN1cmVtZW50U2V0QW5hbHl6ZXIuX2VuZFRpbWUg
PSA1MDAwOworICAgICAgICAgICAgY29uc3QgYW5hbHlzaXNQcm9taXNlID0gbWVhc3VyZW1lbnRT
ZXRBbmFseXplci5hbmFseXplT25jZShtZWFzdXJlbWVudFNldCk7CisKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlcXVlc3RzWzBdLnVybCwgYC9kYXRhL21lYXN1cmVtZW50LXNldC0ke01vY2tNb2RlbHMuc29t
ZVBsYXRmb3JtLmlkKCl9LSR7TW9ja01vZGVscy5zb21lTWV0cmljLmlkKCl9Lmpzb25gKTsKKyAg
ICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjbHVzdGVy
U3RhcnQnOiAxMDAwLAorICAgICAgICAgICAgICAgICdjbHVzdGVyU2l6ZSc6IDEwMDAsCisgICAg
ICAgICAgICAgICAgJ2Zvcm1hdE1hcCc6IFsnaWQnLCAnbWVhbicsICdpdGVyYXRpb25Db3VudCcs
ICdzdW0nLCAnc3F1YXJlU3VtJywgJ21hcmtlZE91dGxpZXInLCAncmV2aXNpb25zJywgJ2NvbW1p
dFRpbWUnLCAnYnVpbGQnLCAnYnVpbGRUaW1lJywgJ2J1aWxkTnVtYmVyJywgJ2J1aWxkZXInXSwK
KyAgICAgICAgICAgICAgICAnY29uZmlndXJhdGlvbnMnOiB7Y3VycmVudDogbWFrZVNhbXBsZVJ1
bnMoc2ltcGxlU2VnbWVudGFibGVWYWx1ZXMsIDY0MDAsIDQwMDAsIDEwMDAgLyA1MCl9LAorICAg
ICAgICAgICAgICAgICdzdGFydFRpbWUnOiA0MDAwLAorICAgICAgICAgICAgICAgICdlbmRUaW1l
JzogNTAwMCwKKyAgICAgICAgICAgICAgICAnbGFzdE1vZGlmaWVkJzogNTAwMCwKKyAgICAgICAg
ICAgICAgICAnY2x1c3RlckNvdW50JzogNCwKKyAgICAgICAgICAgICAgICAnc3RhdHVzJzogJ09L
J30pOworCisgICAgICAgICAgICBhd2FpdCBNb2NrUmVtb3RlQVBJLndhaXRGb3JSZXF1ZXN0KCk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAyKTsKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvYXBpL2FuYWx5c2lzLXRhc2tzP3Bs
YXRmb3JtPTY1Jm1ldHJpYz0yODg0Jyk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZl
KHsKKyAgICAgICAgICAgICAgICBhbmFseXNpc1Rhc2tzOiBbeworICAgICAgICAgICAgICAgICAg
ICBhdXRob3I6IG51bGwsCisgICAgICAgICAgICAgICAgICAgIGJ1Z3M6IFtdLAorICAgICAgICAg
ICAgICAgICAgICBidWlsZFJlcXVlc3RDb3VudDogMTQsCisgICAgICAgICAgICAgICAgICAgIGZp
bmlzaGVkQnVpbGRSZXF1ZXN0Q291bnQ6IDYsCisgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5
OiAnaWRlbnRpZmllZCcsCisgICAgICAgICAgICAgICAgICAgIGNhdXNlczogW10sCisgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZWRBdDogNDUwMCwKKyAgICAgICAgICAgICAgICAgICAgZW5kUnVu
OiA2NDM0LAorICAgICAgICAgICAgICAgICAgICBlbmRSdW5UaW1lOiAgNTAwMCwKKyAgICAgICAg
ICAgICAgICAgICAgZml4ZXM6IFtdLAorICAgICAgICAgICAgICAgICAgICBpZDogMTA4MiwKKyAg
ICAgICAgICAgICAgICAgICAgbWV0cmljOiBNb2NrTW9kZWxzLnNvbWVNZXRyaWMuaWQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgbmFtZTogJ1BvdGVudGlhbCAyLjM4JSByZWdyZXNzaW9uIG9uIFNv
bWUgcGxhdGZvcm0gYmV0d2VlbiBXZWJLaXQ6IHIzNS1yNDQnLAorICAgICAgICAgICAgICAgICAg
ICBuZWVkZWQ6IG51bGwsCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBNb2NrTW9kZWxz
LnNvbWVQbGF0Zm9ybS5pZCgpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHQ6ICdyZWdyZXNz
aW9uJywKKyAgICAgICAgICAgICAgICAgICAgc2VnbWVudGF0aW9uU3RyYXRlZ3k6IDEsCisgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0UnVuOiA2NDM0LAorICAgICAgICAgICAgICAgICAgICBzdGF0
clJ1blRpbWU6IDQwMDAsCisgICAgICAgICAgICAgICAgICAgIHRlc3RSYW5nZVN0cmF0ZWd5OiAy
CisgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgYnVnczogW10sCisgICAgICAg
ICAgICAgICAgY29tbWl0czogW10sCisgICAgICAgICAgICAgICAgc3RhdHVzOiAnT0snCisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgYXdhaXQgYW5hbHlzaXNQcm9taXNlOworICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChsb2dnZXIuaW5mb19sb2dzLCBbJ1N0YXJ0IGFuYWx5emlu
ZyBsYXN0IDEwIGRheXMgbWVhc3VyZW1lbnQgc2V0cy4nLAorICAgICAgICAgICAgICAgICc9PT09
ICJTb21lIHRlc3QgOiBTb21lIG1ldHJpYyIgb24gIlNvbWUgcGxhdGZvcm0iID09PT0nLCAnTm90
aGluZyB0byBhbmFseXplJ10pOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGxvZ2dlci53YXJu
X2xvZ3MubGVuZ3RoLCAwKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChsb2dnZXIuZXJyb3Jf
bG9ncy5sZW5ndGgsIDApOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGZhdm9y
IHJlZ3Jlc3Npb24gaWYgdGhlIHByb2dyZXNzaW9uIGlzIG5vdCBiaWcgZW5vdWdoJywgYXN5bmMg
KCkgPT4geworICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRTZXQgPSBNZWFzdXJlbWVudFNl
dC5maW5kU2V0KE1vY2tNb2RlbHMuc29tZVBsYXRmb3JtLmlkKCksIE1vY2tNb2RlbHMuc29tZU1l
dHJpYy5pZCgpLCA1MDAwKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYW5nZURldGVjdGlvbkNvbmZp
Z3MgPSB7dFRlc3RTaWduaWZpY2FuY2U6IDAuOTksIG1heERheXM6IDEwLCBjb25maXJtVGFza1Jl
cGVhdENvdW50OiA0fTsKKyAgICAgICAgICAgIGNvbnN0IGxvZ2dlciA9IG1vY2tMb2dnZXIoKTsK
KyAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50U2V0QW5hbHl6ZXIgPSBuZXcgTWVhc3VyZW1l
bnRTZXRBbmFseXplcihjaGFuZ2VEZXRlY3Rpb25Db25maWdzLCBbbWVhc3VyZW1lbnRTZXRdLCBs
b2dnZXIpOworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXRBbmFseXplci5fc3RhcnRUaW1lID0g
NDAwMDsKKyAgICAgICAgICAgIG1lYXN1cmVtZW50U2V0QW5hbHl6ZXIuX2VuZFRpbWUgPSA1MDAw
OworICAgICAgICAgICAgY29uc3QgYW5hbHlzaXNQcm9taXNlID0gbWVhc3VyZW1lbnRTZXRBbmFs
eXplci5hbmFseXplT25jZShtZWFzdXJlbWVudFNldCk7CisKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzWzBdLnVybCwgYC9kYXRhL21lYXN1cmVtZW50LXNldC0ke01vY2tNb2RlbHMuc29tZVBsYXRm
b3JtLmlkKCl9LSR7TW9ja01vZGVscy5zb21lTWV0cmljLmlkKCl9Lmpzb25gKTsKKyAgICAgICAg
ICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoeworICAgICAgICAgICAgICAgICdjbHVzdGVyU3RhcnQn
OiAxMDAwLAorICAgICAgICAgICAgICAgICdjbHVzdGVyU2l6ZSc6IDEwMDAsCisgICAgICAgICAg
ICAgICAgJ2Zvcm1hdE1hcCc6IFsnaWQnLCAnbWVhbicsICdpdGVyYXRpb25Db3VudCcsICdzdW0n
LCAnc3F1YXJlU3VtJywgJ21hcmtlZE91dGxpZXInLCAncmV2aXNpb25zJywgJ2NvbW1pdFRpbWUn
LCAnYnVpbGQnLCAnYnVpbGRUaW1lJywgJ2J1aWxkTnVtYmVyJywgJ2J1aWxkZXInXSwKKyAgICAg
ICAgICAgICAgICAnY29uZmlndXJhdGlvbnMnOiB7Y3VycmVudDogbWFrZVNhbXBsZVJ1bnMoZGF0
YUJlZm9yZVNtYWxsUHJvZ3Jlc3Npb24uY29uY2F0KHNpbXBsZVNlZ21lbnRhYmxlVmFsdWVzKSwg
NjQwMCwgNDAwMCwgMTAwMCAvIDUwKX0sCisgICAgICAgICAgICAgICAgJ3N0YXJ0VGltZSc6IDQw
MDAsCisgICAgICAgICAgICAgICAgJ2VuZFRpbWUnOiA1MDAwLAorICAgICAgICAgICAgICAgICds
YXN0TW9kaWZpZWQnOiA1MDAwLAorICAgICAgICAgICAgICAgICdjbHVzdGVyQ291bnQnOiA0LAor
ICAgICAgICAgICAgICAgICdzdGF0dXMnOiAnT0snfSk7CisKKyAgICAgICAgICAgIGF3YWl0IE1v
Y2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXF1ZXN0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFd
LnVybCwgJy9hcGkvYW5hbHlzaXMtdGFza3M/cGxhdGZvcm09NjUmbWV0cmljPTI4ODQnKTsKKyAg
ICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoeworICAgICAgICAgICAgICAgIGFuYWx5c2lz
VGFza3M6IFtdLAorICAgICAgICAgICAgICAgIGJ1Z3M6IFtdLAorICAgICAgICAgICAgICAgIGNv
bW1pdHM6IFtdLAorICAgICAgICAgICAgICAgIHN0YXR1czogJ09LJworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIGF3YWl0IE1vY2tSZW1vdGVBUEkud2FpdEZvclJlcXVlc3QoKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDMpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy9wcml2aWxlZ2VkLWFwaS9jcmVhdGUtYW5h
bHlzaXMtdGFzaycpOworICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXF1ZXN0c1syXS5k
YXRhLCB7CisgICAgICAgICAgICAgICAgc2xhdmVOYW1lOiAndGVzdCcsCisgICAgICAgICAgICAg
ICAgc2xhdmVQYXNzd29yZDogJ3Bhc3N3b3JkJywKKyAgICAgICAgICAgICAgICBuYW1lOiAnUG90
ZW50aWFsIDIuMzglIHJlZ3Jlc3Npb24gb24gU29tZSBwbGF0Zm9ybSBiZXR3ZWVuIFdlYktpdDog
cjQwLXI0OScsCisgICAgICAgICAgICAgICAgc3RhcnRSdW46IDY0MzksCisgICAgICAgICAgICAg
ICAgZW5kUnVuOiA2NDQ4LAorICAgICAgICAgICAgICAgIHJlcGV0aXRpb25Db3VudDogNCwKKyAg
ICAgICAgICAgICAgICB0ZXN0R3JvdXBOYW1lOiAnQ29uZmlybScsCisgICAgICAgICAgICAgICAg
cmV2aXNpb25TZXRzOiBbeycxMSc6IHtyZXZpc2lvbjogNDAsIG93bmVyUmV2aXNpb246IG51bGws
IHBhdGNoOiBudWxsfX0sCisgICAgICAgICAgICAgICAgICAgIHsnMTEnOiB7cmV2aXNpb246IDQ5
LCBvd25lclJldmlzaW9uOiBudWxsLCBwYXRjaDogbnVsbH19XQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICByZXF1ZXN0c1syXS5yZXNvbHZlKCk7CisKKyAgICAgICAgICAgIGF3YWl0IGFu
YWx5c2lzUHJvbWlzZTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwobG9nZ2VyLmluZm9f
bG9ncywgWydTdGFydCBhbmFseXppbmcgbGFzdCAxMCBkYXlzIG1lYXN1cmVtZW50IHNldHMuJywK
KyAgICAgICAgICAgICAgICAnPT09PSAiU29tZSB0ZXN0IDogU29tZSBtZXRyaWMiIG9uICJTb21l
IHBsYXRmb3JtIiA9PT09JywKKyAgICAgICAgICAgICAgICAnQ3JlYXRpbmcgYW5hbHlzaXMgdGFz
ayBhbmQgY29uZmlybWluZzogIlBvdGVudGlhbCAyLjM4JSByZWdyZXNzaW9uIG9uIFNvbWUgcGxh
dGZvcm0gYmV0d2VlbiBXZWJLaXQ6IHI0MC1yNDkiLiddKTsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChsb2dnZXIud2Fybl9sb2dzLmxlbmd0aCwgMCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwobG9nZ2VyLmVycm9yX2xvZ3MubGVuZ3RoLCAwKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
aXQoJ3Nob3VsZCBjaG9vc2UgYW5hbHl6ZSBwcm9ncmVzc2lvbiB3aGVuIGl0IGlzIGJpZyBlbm91
Z2gnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBtZWFzdXJlbWVudFNldCA9IE1l
YXN1cmVtZW50U2V0LmZpbmRTZXQoTW9ja01vZGVscy5zb21lUGxhdGZvcm0uaWQoKSwgTW9ja01v
ZGVscy5zb21lTWV0cmljLmlkKCksIDUwMDApOworICAgICAgICAgICAgY29uc3QgY2hhbmdlRGV0
ZWN0aW9uQ29uZmlncyA9IHt0VGVzdFNpZ25pZmljYW5jZTogMC45OSwgbWF4RGF5czogMTAsIGNv
bmZpcm1UYXNrUmVwZWF0Q291bnQ6IDR9OworICAgICAgICAgICAgY29uc3QgbG9nZ2VyID0gbW9j
a0xvZ2dlcigpOworICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRTZXRBbmFseXplciA9IG5l
dyBNZWFzdXJlbWVudFNldEFuYWx5emVyKGNoYW5nZURldGVjdGlvbkNvbmZpZ3MsIFttZWFzdXJl
bWVudFNldF0sIGxvZ2dlcik7CisgICAgICAgICAgICBtZWFzdXJlbWVudFNldEFuYWx5emVyLl9z
dGFydFRpbWUgPSA0MDAwOworICAgICAgICAgICAgbWVhc3VyZW1lbnRTZXRBbmFseXplci5fZW5k
VGltZSA9IDUwMDA7CisgICAgICAgICAgICBjb25zdCBhbmFseXNpc1Byb21pc2UgPSBtZWFzdXJl
bWVudFNldEFuYWx5emVyLmFuYWx5emVPbmNlKG1lYXN1cmVtZW50U2V0KTsKKworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwocmVxdWVzdHNbMF0udXJsLCBgL2RhdGEvbWVhc3VyZW1lbnQtc2V0LSR7TW9ja01vZGVs
cy5zb21lUGxhdGZvcm0uaWQoKX0tJHtNb2NrTW9kZWxzLnNvbWVNZXRyaWMuaWQoKX0uanNvbmAp
OworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgJ2Ns
dXN0ZXJTdGFydCc6IDEwMDAsCisgICAgICAgICAgICAgICAgJ2NsdXN0ZXJTaXplJzogMTAwMCwK
KyAgICAgICAgICAgICAgICAnZm9ybWF0TWFwJzogWydpZCcsICdtZWFuJywgJ2l0ZXJhdGlvbkNv
dW50JywgJ3N1bScsICdzcXVhcmVTdW0nLCAnbWFya2VkT3V0bGllcicsICdyZXZpc2lvbnMnLCAn
Y29tbWl0VGltZScsICdidWlsZCcsICdidWlsZFRpbWUnLCAnYnVpbGROdW1iZXInLCAnYnVpbGRl
ciddLAorICAgICAgICAgICAgICAgICdjb25maWd1cmF0aW9ucyc6IHtjdXJyZW50OiBtYWtlU2Ft
cGxlUnVucyhkYXRhQmVmb3JlSHVnaFByb2dyZXNzaW9uLmNvbmNhdChzaW1wbGVTZWdtZW50YWJs
ZVZhbHVlcyksIDY0MDAsIDQwMDAsIDEwMDAgLyA1MCl9LAorICAgICAgICAgICAgICAgICdzdGFy
dFRpbWUnOiA0MDAwLAorICAgICAgICAgICAgICAgICdlbmRUaW1lJzogNTAwMCwKKyAgICAgICAg
ICAgICAgICAnbGFzdE1vZGlmaWVkJzogNTAwMCwKKyAgICAgICAgICAgICAgICAnY2x1c3RlckNv
dW50JzogNCwKKyAgICAgICAgICAgICAgICAnc3RhdHVzJzogJ09LJ30pOworCisgICAgICAgICAg
ICBhd2FpdCBNb2NrUmVtb3RlQVBJLndhaXRGb3JSZXF1ZXN0KCk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXF1ZXN0c1sxXS51cmwsICcvYXBpL2FuYWx5c2lzLXRhc2tzP3BsYXRmb3JtPTY1Jm1ldHJpYz0y
ODg0Jyk7CisgICAgICAgICAgICByZXF1ZXN0c1sxXS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAg
ICBhbmFseXNpc1Rhc2tzOiBbXSwKKyAgICAgICAgICAgICAgICBidWdzOiBbXSwKKyAgICAgICAg
ICAgICAgICBjb21taXRzOiBbXSwKKyAgICAgICAgICAgICAgICBzdGF0dXM6ICdPSycKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICBhd2FpdCBNb2NrUmVtb3RlQVBJLndhaXRGb3JSZXF1
ZXN0KCk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAzKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1syXS51cmwsICcvcHJpdmlsZWdlZC1hcGkv
Y3JlYXRlLWFuYWx5c2lzLXRhc2snKTsKKyAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVx
dWVzdHNbMl0uZGF0YSwgeworICAgICAgICAgICAgICAgIHNsYXZlTmFtZTogJ3Rlc3QnLAorICAg
ICAgICAgICAgICAgIHNsYXZlUGFzc3dvcmQ6ICdwYXNzd29yZCcsCisgICAgICAgICAgICAgICAg
bmFtZTogJ1BvdGVudGlhbCA5LjE1JSBwcm9ncmVzc2lvbiBvbiBTb21lIHBsYXRmb3JtIGJldHdl
ZW4gV2ViS2l0OiByMy1yOCcsCisgICAgICAgICAgICAgICAgc3RhcnRSdW46IDY0MDIsCisgICAg
ICAgICAgICAgICAgZW5kUnVuOiA2NDA3LAorICAgICAgICAgICAgICAgIHJlcGV0aXRpb25Db3Vu
dDogNCwKKyAgICAgICAgICAgICAgICB0ZXN0R3JvdXBOYW1lOiAnQ29uZmlybScsCisgICAgICAg
ICAgICAgICAgcmV2aXNpb25TZXRzOiBbeycxMSc6IHtyZXZpc2lvbjogMywgb3duZXJSZXZpc2lv
bjogbnVsbCwgcGF0Y2g6IG51bGx9fSwKKyAgICAgICAgICAgICAgICAgICAgeycxMSc6IHtyZXZp
c2lvbjogOCwgb3duZXJSZXZpc2lvbjogbnVsbCwgcGF0Y2g6IG51bGx9fV0KKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcmVxdWVzdHNbMl0ucmVzb2x2ZSgpOworCisgICAgICAgICAgICBh
d2FpdCBhbmFseXNpc1Byb21pc2U7CisgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGxvZ2dl
ci5pbmZvX2xvZ3MsIFsnU3RhcnQgYW5hbHl6aW5nIGxhc3QgMTAgZGF5cyBtZWFzdXJlbWVudCBz
ZXRzLicsCisgICAgICAgICAgICAgICAgJz09PT0gIlNvbWUgdGVzdCA6IFNvbWUgbWV0cmljIiBv
biAiU29tZSBwbGF0Zm9ybSIgPT09PScsCisgICAgICAgICAgICAgICAgJ0NyZWF0aW5nIGFuYWx5
c2lzIHRhc2sgYW5kIGNvbmZpcm1pbmc6ICJQb3RlbnRpYWwgOS4xNSUgcHJvZ3Jlc3Npb24gb24g
U29tZSBwbGF0Zm9ybSBiZXR3ZWVuIFdlYktpdDogcjMtcjgiLiddKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChsb2dnZXIud2Fybl9sb2dzLmxlbmd0aCwgMCk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwobG9nZ2VyLmVycm9yX2xvZ3MubGVuZ3RoLCAwKTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9yZXNvdXJjZXMvbW9jay12My1tb2RlbHMuanMg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9yZXNvdXJjZXMvbW9jay12My1t
b2RlbHMuanMKaW5kZXggYzQyNzdiMDgxM2IwNGY3ZmU2YjI0ZDE5ZTQzMTc4ZjJhYmI0Njc2YS4u
YjdjMzlhMzIwNzNmNTNhNmM4ZDYzNjI0OTcxMTdjMWJiMmNlNjkwZSAxMDA2NDQKLS0tIGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvcmVzb3VyY2VzL21vY2stdjMtbW9kZWxz
LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL3Jlc291cmNlcy9t
b2NrLXYzLW1vZGVscy5qcwpAQCAtMTQsNiArMTQsNyBAQCB2YXIgTW9ja01vZGVscyA9IHsKICAg
ICAgICAgICAgIFRlc3RHcm91cC5jbGVhclN0YXRpY01hcCgpOwogICAgICAgICAgICAgQnVpbGRS
ZXF1ZXN0LmNsZWFyU3RhdGljTWFwKCk7CiAgICAgICAgICAgICBUcmlnZ2VyYWJsZS5jbGVhclN0
YXRpY01hcCgpOworICAgICAgICAgICAgTWVhc3VyZW1lbnRTZXQuX3NldCA9IG51bGw7CiAKICAg
ICAgICAgICAgIE1vY2tNb2RlbHMub3N4ID0gUmVwb3NpdG9yeS5lbnN1cmVTaW5nbGV0b24oOSwg
e25hbWU6ICdPUyBYJ30pOwogICAgICAgICAgICAgTW9ja01vZGVscy5pb3MgPSBSZXBvc2l0b3J5
LmVuc3VyZVNpbmdsZXRvbigyMiwge25hbWU6ICdpT1MnfSk7CkBAIC0yNyw3ICsyOCw4IEBAIHZh
ciBNb2NrTW9kZWxzID0gewogCiAgICAgICAgICAgICBNb2NrTW9kZWxzLnNvbWVUZXN0ID0gVGVz
dC5lbnN1cmVTaW5nbGV0b24oMSwge25hbWU6ICdTb21lIHRlc3QnfSk7CiAgICAgICAgICAgICBN
b2NrTW9kZWxzLnNvbWVNZXRyaWMgPSBNZXRyaWMuZW5zdXJlU2luZ2xldG9uKDI4ODQsIHtuYW1l
OiAnU29tZSBtZXRyaWMnLCB0ZXN0OiBNb2NrTW9kZWxzLnNvbWVUZXN0fSk7Ci0gICAgICAgICAg
ICBNb2NrTW9kZWxzLnNvbWVQbGF0Zm9ybSA9IFBsYXRmb3JtLmVuc3VyZVNpbmdsZXRvbig2NSwg
e25hbWU6ICdTb21lIHBsYXRmb3JtJywgbWV0cmljczogW01vY2tNb2RlbHMuc29tZU1ldHJpY119
KTsKKyAgICAgICAgICAgIE1vY2tNb2RlbHMuc29tZVBsYXRmb3JtID0gUGxhdGZvcm0uZW5zdXJl
U2luZ2xldG9uKDY1LCB7bmFtZTogJ1NvbWUgcGxhdGZvcm0nLCBtZXRyaWNzOiBbTW9ja01vZGVs
cy5zb21lTWV0cmljXSwKKyAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWRCeU1ldHJpYzogeycy
ODg0JzogNTAwMCwgJzExNTgnOiA1MDAwfX0pOwogCiAgICAgICAgICAgICBNb2NrTW9kZWxzLnNw
ZWVkb21ldGVyID0gVGVzdC5lbnN1cmVTaW5nbGV0b24oMTkyOCwge25hbWU6ICdTcGVlZG9tZXRl
cid9KTsKICAgICAgICAgICAgIE1vY2tNb2RlbHMuamV0c3RyZWFtID0gVGVzdC5lbnN1cmVTaW5n
bGV0b24oMTg4Niwge25hbWU6ICdKZXRTdHJlYW0nfSk7Cg==
</data>
<flag name="review"
          id="357499"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>