<?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>177993</bug_id>
          
          <creation_ts>2017-10-05 22:11:08 -0700</creation_ts>
          <short_desc>Add UI for A/B testing on owned commits.</short_desc>
          <delta_ts>2019-07-29 15:15:47 -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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>dewei_zhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>joepeck</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1357462</commentid>
    <comment_count>0</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2017-10-05 22:11:08 -0700</bug_when>
    <thetext>Add UI for A/B testing on owned commits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357463</commentid>
    <comment_count>1</comment_count>
      <attachid>322989</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-10-05 22:11:45 -0700</bug_when>
    <thetext>Created attachment 322989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357852</commentid>
    <comment_count>2</comment_count>
      <attachid>323075</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-10-06 18:43:56 -0700</bug_when>
    <thetext>Created attachment 323075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366521</commentid>
    <comment_count>3</comment_count>
      <attachid>323075</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-31 13:08:01 -0700</bug_when>
    <thetext>Comment on attachment 323075
Patch

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

&gt; Websites/perf.webkit.org/ChangeLog:70
&gt; +        (CommitLog.prototype.label): Remove the logic that adds &apos;r&apos; prefix to svn revision since some revisions from a repository sometimes are labeled with &apos;r&apos; sometimes are not.

Why? That sounds like a bug somewhere. revision() should never return a value with &apos;r&apos; prefix.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:1
&gt; +class RevisionInfoRowBase {

&quot;RevisionInfo&quot; doesn&apos;t convey the fact this is a table row.
I think it&apos;s better call it CustomRevisionTableRow or something.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:29
&gt; +class RevisionInfoRow extends RevisionInfoRowBase {

We should call it CustomRevisionTableRevisionTopLevelRow or something.
CustomRevisionTableRevisionOwnerRow? but that&apos;s weird because not all top-level repositories are owners.
CustomRevisionTableRevisionMajorRow? that&apos;s kind of vague.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:49
&gt; +    addOwnedRevisionInfoRowAsync() { return this.loadOwnedCommits().then(() =&gt; this.addOwnedRevisionInfoRow(new OwnedRevisionInfoRow(this))); }
&gt; +
&gt; +    removeOwnedRevisionInfoRow(ownedRevisionRow) { this._ownedRevisionInfoRows.splice(this._ownedRevisionInfoRows.indexOf(ownedRevisionRow), 1); }
&gt; +
&gt; +    changedOwnedRepositoryNames() { return this._changedOwnedRepositoryNames; }
&gt; +
&gt; +    ownedRevisionInfoRows() { return this._ownedRevisionInfoRows; }
&gt; +
&gt; +    addOwnedRevisionInfoRow(ownedRevisionInfoRow) { this._ownedRevisionInfoRows.push(ownedRevisionInfoRow); }

This is a lot of methods only defined in this subclass.
It&apos;s usually a good indication that we&apos;ve got the abstraction wrong.
In general, if you find yourself adding lots of method to expose different kinds of internal objects,
then we&apos;ve got a wrong abstraction / interface for the job.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:87
&gt; +        return this.labels().reduce((chainedPromise, label) =&gt; {
&gt; +            const revision = this._revisionSectionsByLabel[label].revision();
&gt; +            return chainedPromise.then(() =&gt; {
&gt; +                return CommitLog.fetchForSingleRevision(this._repository, revision);
&gt; +            }).then((fullCommit) =&gt; {
&gt; +                console.assert(fullCommit.length === 1);
&gt; +                const commit = fullCommit[0];
&gt; +                fullCommitList.push(commit);
&gt; +                indexToLabel.push(label);
&gt; +                return commit.fetchOwnedCommits();
&gt; +            });
&gt; +        }, Promise.resolve()).then(() =&gt; {

Why are we fetching these values in serial? We should do it in parallel.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:88
&gt; +            CommitLog.diffMultipleOwnedCommits.apply(CommitLog, fullCommitList).forEach((commits, repository) =&gt; {

Do CommitLog.diffMultipleOwnedCommits(...fullCommitList).

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:93
&gt; +            this._changedOwnedRepositoryNames = [...this._ownedCommitDifferences.keys()].map((repository) =&gt; repository.name()).sort();

Why are we sorting this?

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:100
&gt; +    constructor(rowOwner, repository=null, commitSetMap=null)

Nit: Need a space around =.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:109
&gt; +        const repository = this._owner.repository().findOwnedRepositoryByName(repositoryName);
&gt; +        if (!repository || !this._owner.changedOwnedRepositoryNames().includes(repositoryName))

It&apos;s very strange to ask another row about which repositories are owned, etc...
I think this code should really be living in Repository class itself.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:125
&gt; +class RevisionSection {

We shouldn&apos;t give this class such a generic name since it could collide with some other class name.
Call it CustomRevisionTableRevision?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366687</commentid>
    <comment_count>4</comment_count>
      <attachid>323075</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-10-31 17:11:08 -0700</bug_when>
    <thetext>Comment on attachment 323075
Patch

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

&gt;&gt; Websites/perf.webkit.org/ChangeLog:70
&gt;&gt; +        (CommitLog.prototype.label): Remove the logic that adds &apos;r&apos; prefix to svn revision since some revisions from a repository sometimes are labeled with &apos;r&apos; sometimes are not.
&gt; 
&gt; Why? That sounds like a bug somewhere. revision() should never return a value with &apos;r&apos; prefix.

Revisions from same repository could be like &apos;123&apos; and &apos;123.1&apos;. For 123, label will add &apos;r&apos; as prefix. However, for &apos;123.1&apos;, it will not be prefixed with &apos;r&apos;.
Another way is we specify certain type of characters are allowed to occur in a revision (e.g. (. , -)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366696</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-31 17:28:22 -0700</bug_when>
    <thetext>(In reply to dewei_zhu from comment #4)
&gt; Comment on attachment 323075 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323075&amp;action=review
&gt; 
&gt; &gt;&gt; Websites/perf.webkit.org/ChangeLog:70
&gt; &gt;&gt; +        (CommitLog.prototype.label): Remove the logic that adds &apos;r&apos; prefix to svn revision since some revisions from a repository sometimes are labeled with &apos;r&apos; sometimes are not.
&gt; &gt; 
&gt; &gt; Why? That sounds like a bug somewhere. revision() should never return a value with &apos;r&apos; prefix.
&gt; 
&gt; Revisions from same repository could be like &apos;123&apos; and &apos;123.1&apos;. For 123,
&gt; label will add &apos;r&apos; as prefix. However, for &apos;123.1&apos;, it will not be prefixed
&gt; with &apos;r&apos;.
&gt; Another way is we specify certain type of characters are allowed to occur in
&gt; a revision (e.g. (. , -)).

I see. This really stems from the fact we don&apos;t know whether a given repository uses a number like revision, hash like revision, or a version number. We should probably add a new field to repositories table (e.g. repository_type where type is an enum of {number, hash, version}) so that we can explicitly specify this. We should do it in a separate patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372496</commentid>
    <comment_count>6</comment_count>
      <attachid>327035</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-11-15 16:36:56 -0800</bug_when>
    <thetext>Created attachment 327035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372498</commentid>
    <comment_count>7</comment_count>
      <attachid>327035</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-11-15 16:39:05 -0800</bug_when>
    <thetext>Comment on attachment 327035
Patch

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

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:8
&gt; +class IntermediateCommitSet {

I would prefer to move this to the commit-set.js if there is a place to share common used helper function like &apos;ensureSetForMap&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373891</commentid>
    <comment_count>8</comment_count>
      <attachid>327035</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-20 17:44:47 -0800</bug_when>
    <thetext>Comment on attachment 327035
Patch

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

New patch looks much better!

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:21
&gt; +        candidates.forEach((candidate) =&gt; {

Why don&apos;t we just use for (const candidate of candidates) instead?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:46
&gt; +        if (this._currentCandidateIndex  &gt;= this._currentCandidateList.length)

Nit: Two spaces before &gt;=.
It&apos;s very strange to make this range enforcement inside a function named _candidateElementForCurrentIndexIndex.
I think it&apos;s cleaner to do this inside _didArrowUpOrDown since that&apos;s where these values are incremented / decremented.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:67
&gt; +    _didArrowUpOrDown(isArrowDown)

I think it&apos;s better to name this function based on what it does
e.g. _moveCandidate(forward)
Instead of calling this based on when they&apos;re called like didArrowUpOrDown.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:71
&gt; +            this._currentCandidateIndex = (isArrowDown ? 0 : this._currentCandidateList.length - 1);

There is no need for parenthesis here.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:74
&gt; +            this._currentCandidateIndex += (isArrowDown ? 1 : -1);

Ditto.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:92
&gt; +        textField.addEventListener(&apos;input&apos;, () =&gt; this.renderReplace(candidateList, this._createCandidateListLazily.evaluate(this._candidates, textField.value)));

You shouldn&apos;t be calling this.renderReplace without outside (i.e. render() is not in the call stack) like this.
Use this.enqueueToRender() instead. r- because of this.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:94
&gt; +        textField.addEventListener(&apos;focusout&apos;, () =&gt; {

Use &quot;blur&quot; instead of &quot;focusout&quot; if you&apos;re using &quot;focus&quot; event.
&quot;focusout&quot; pairs with &quot;focusin&quot;.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:95
&gt; +            this.content(&apos;candidate-list&apos;).style.display = &apos;none&apos;;

Don&apos;t set the style directly like this. Again, in our components mode,
you should be able to call render() function anytime, and get to exactly the same state.
So this visibility of the candidate list should be stored as a separate state,
and this should be only calling this.enqueueToRender().

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:100
&gt; +            candidateList.style.display = null;
&gt; +            this.renderReplace(candidateList, this._createCandidateListLazily.evaluate(this._candidates, textField.value))

Again, don&apos;t directly call this.renderReplace outside render() function.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:105
&gt; +            if (event.key === &apos;ArrowDown&apos; || event.key === &apos;ArrowUp&apos;)
&gt; +                this._didArrowUpOrDown(event.key === &apos;ArrowDown&apos;);
&gt; +            if(event.key === &apos;Tab&apos; || event.key === &apos;Enter&apos;)

I&apos;m a bit surprised that event.key contains these human-readable names
since I often end up writing code which compares key code.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:114
&gt; +                &lt;input id=&apos;text-field&apos;/&gt;

Nit: You&apos;re indenting twice here.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:131
&gt; +                transition: background 250ms ease-in;

Nice.

&gt;&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:8
&gt;&gt; +class IntermediateCommitSet {
&gt; 
&gt; I would prefer to move this to the commit-set.js if there is a place to share common used helper function like &apos;ensureSetForMap&apos;

Moving this to commit-set.js makes a lot of sense to me.
Since ensureSetForMap is only used once in this class, and it&apos;s such a simple function,
I think it&apos;s fine to just duplicate the code there.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:34
&gt; +        if (!ownerCommit)
&gt; +            return;
&gt; +        const repositorySet = ensureSetForMap(this._ownedRepositoriesByOwnerRepository, ownerCommit.repository());
&gt; +        repositorySet.add(repository);

Since having an owner comment isn&apos;t always expected, it&apos;s more semantically clear to use &quot;if&quot; without an early return as in:
if (ownerCommit) {
    ~
}

We prefer early exists over nested if&apos;s but only if follows the normal logic.
i.e. the last statement of the function should be what would &quot;normally&quot; happen.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:46
&gt; +        }
&gt; +        else if (this._ownedRepositoriesByOwnerRepository.has(repository)) {

Nit: } and else if should be on the same line.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:48
&gt; +            ownedRepositories.forEach((ownedRepository) =&gt; this._commitByRepository.delete(ownedRepository));

It&apos;s usually cleaner to use &quot;for (const X of Y)&quot; loop in cases like this.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:62
&gt; +            return commit.fetchOwnedCommits();

I think it&apos;s cleaner to nest promises here as in:
commit.fetchOwnedCommits().then(~).
Because it&apos;s confusing that the early return above also ends up running &quot;then&quot; below.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:74
&gt; +    topLevelRepositories() { return Repository.sortByNamePreferringOnesWithURL(this.repositories().filter((repository) =&gt; !this.ownerCommitForRepository(repository))); }

These aren&apos;t all top-level, right? They&apos;re owners repositories in this commit set.
Why don&apos;t we call it like highestLevelRepositories or owernessRepositories?

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:95
&gt; +        this._ownerRevisionMap = {};

Why don&apos;t we use Map instead? A lot of code does uses {~} but that&apos;s mostly for historical reasons.
In new code, we should use Map whenever we want a hash map.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:195
&gt; +            const ownsCommits = Object.values(commitSetMap).map((commitSet) =&gt; commitSet.commitForRepository(repository).ownsCommits()).every((value) =&gt; value);

Can we add some helper function to Repository or CommitSet
(probably a better place per layering) to do this check?

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:196
&gt; +            const countForRowsWithUndeterminedRepository = this._incompletedRowForOwnerRepository.get(repository) || 0;

What does &quot;undetermined repository&quot; mean? Surely we know the repository???
Are we talking about the repository for which all revision values are not known yet?
If so, something like &quot;incomplete revisions&quot; is probably a better name.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:201
&gt; +            [...ownedRepositories].forEach((ownedRepository, index) =&gt; {

What&apos;s the point of using spread here? Isn&apos;t ownedRepositories just an array?
If it&apos;s a set, etc... you can use &quot;for (const repository of ownedRepositories)&quot; instead,
which probably reads better anyway.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:206
&gt; +            if (countForRowsWithUndeterminedRepository === 0 )

Nit: a space after 0.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:209
&gt; +            const commits = Object.values(commitSetMap).map((commitSet) =&gt; commitSet.commitForRepository(repository));

This would read much saner if we used a Map for commitSetMap: commitSetMap.values().

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:241
&gt; +        const actionName = `owned-commit-${repository.label()}`;

This is not right.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:247
&gt; +        minusButton.listenToAction(actionName, () =&gt; {

Since you&apos;re calling listenToAction on each minus button,
you should be able to listen to &quot;activate&quot; (button-base provides this) here.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:260
&gt; +        const actionName = `incompleted-row-${ownerRepository.label()}-${index}`;

Again, we shouldn&apos;t be run-time configuring action name.
Think of action name like Objective-C selector name, or a DOM event name.
They&apos;re never runtime configured like this, and there is no need to do that.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:271
&gt; +        const cells = [element(&apos;td&apos;, {class: &apos;owner-repository-label&apos;}), element(&apos;th&apos;, new ComboBox(&apos;&apos;, (repositoryName) =&gt; {
&gt; +            const targetRepository = changedRepositories.find((repository) =&gt; repositoryName === repository.name());
&gt; +            const ownedCommitsIterator = commitDiff.get(targetRepository)[Symbol.iterator]();
&gt; +            Object.values(commitSetMap).forEach((commitSet) =&gt; {
&gt; +                commitSet.setCommitForRepository(targetRepository, ownedCommitsIterator.next().value);
&gt; +            });
&gt; +            const value = this._incompletedRowForOwnerRepository.get(ownerRepository);
&gt; +            this._incompletedRowForOwnerRepository.set(ownerRepository, value - 1);
&gt; +            this.enqueueToRender();
&gt; +        }, changedRepositories.map((repository) =&gt; repository.name()))), element(&apos;td&apos;, {colspan: labelCount * (labelCount + 1)})];

Please split this callback as a separate helper function. It&apos;s way too long to be included in here.

&gt; Websites/perf.webkit.org/public/v3/components/minus-button.js:7
&gt; +    constructor(eventName)
&gt; +    {
&gt; +        super(&apos;minus-button&apos;);
&gt; +        this._eventName = eventName || &apos;minus-button-event&apos;
&gt; +    }

As I stated where this is used. This code is wrong. Action name should never be runtime configurable.
There should be no need to differentiate an action dispatched in one button to another by its name.
There are components which must communicate which item within a single component is picked,
but they communicate it via an argument to dispatchAction.
However, since each minus button does exactly one thing (removes that one particular item),
the button shouldn&apos;t have to communicate anything to the embedder. r- because of this.

&gt; Websites/perf.webkit.org/public/v3/components/minus-button.js:27
&gt; +        a {
&gt; +            padding-top: 0.12rem;
&gt; +        }`;

We also shouldn&apos;t have to add this.
The CSS used to include this button has a problem instead.

&gt; Websites/perf.webkit.org/public/v3/components/plus-button.js:6
&gt; +        super(&apos;plus-button&apos;);
&gt; +        this._eventName = eventName || &apos;plus-button-event&apos;;

Ditto about not making this runtime configurable.

&gt; Websites/perf.webkit.org/public/v3/components/plus-button.js:28
&gt; +        a {
&gt; +            padding-top: 0.12rem;
&gt; +        }`;

Ditto about this CSS.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:-44
&gt; -        var revision = this.revision();
&gt; -        if (parseInt(revision) == revision) // e.g. r12345
&gt; -            return &apos;r&apos; + revision;

Again, we really need to come up with a better workaround than simply removing this feature.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:125
&gt; -    static diffOwnedCommits(previousCommit, currentCommit)
&gt; +    static diffMultipleOwnedCommits(...commits)

What are diff&apos;ing? Are these commits owned commits or owner commits?
The semantics of this function is very unclear from the name or its arguments.
Also, the result of this function appears to be a single map which contains a single value.
What is the value of that map relative to this function&apos;s argument?
All of that should be clear from the function name.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:131
&gt; +        for (let commit of commits) {
&gt; +            console.assert(commit);
&gt; +            console.assert(commit._ownedCommits);
&gt; +        }

This is rather expensive assertion. Can&apos;t we do it as we traverse through commits?

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:134
&gt; +        const ownedCommitRepositories = new Set(ownedCommitMapList.map((ownedCommitMap) =&gt; Array.from(ownedCommitMap.keys())).reduce((a, b) =&gt; a.concat(b)));

I think a more canonical way to write would be:
[].concat(...ownedCommitMapList.map(~)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1379491</commentid>
    <comment_count>9</comment_count>
      <attachid>328791</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-12-07 23:02:30 -0800</bug_when>
    <thetext>Created attachment 328791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382089</commentid>
    <comment_count>10</comment_count>
      <attachid>328791</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-15 00:58:13 -0800</bug_when>
    <thetext>Comment on attachment 328791
Patch

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

I think we need to split the changes to CommitLog and the addition of IntermediateCommitSet into a separate patch to make this patch manageable.

&gt; Websites/perf.webkit.org/ChangeLog:8
&gt; +        Customizable test group form should support specifying and A/B testing owned commits.

You should add a high description of what you&apos;re adding &amp; what you&apos;re changing.

&gt; Websites/perf.webkit.org/ChangeLog:23
&gt; +        (CustomizableTestGroupForm):

You should really explain why you&apos;re replacing dictionaries with map.
In theory, there should be a change log description for each code change you&apos;re making.

&gt; Websites/perf.webkit.org/ChangeLog:61
&gt; +        (IntermediateCommitSet): In order to support owned commits, commit set should support mutation as we may add/remove commits for a repository.
&gt; +        This variant of commit set supports remove/update commits for repositories.

You should explain the difference between IntermediateCommitSet and CustomCommitSet.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:3
&gt; +    constructor(defaultValue, didUpdateValue, candidates)

This argument order seems backwards. It should take the list of candidates first and then the default value.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:7
&gt; +        this._didUpdateValue = didUpdateValue;

Don&apos;t use a callback in new code. Use dispatchAction &amp; listenToAction combo instead.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:13
&gt; +        this._selectedItemValue = &apos;&apos;;

Why isn&apos;t this initialized to null instead?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:18
&gt; +    _createCandidateList(candidates, keyword)

I would call &quot;keyword&quot; just &quot;key&quot;.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:22
&gt; +        const startsWithKeywordList = [];

&quot;startsWithKeyword&quot; list is an awkward name. How about candidatesStartingWithKey?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:23
&gt; +        const containsWithKeywordList = [];

candidatesContainingKey? contains with keyword doesn&apos;t make much sense as a phrase.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:24
&gt; +        for (const candidate of candidates) {

You should add some sort of a cap so that we don&apos;t end up showing too many results (might be slow to build a large DOM like that).

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:29
&gt; +            if (keyword &amp;&amp; !candidateInLowerCase.includes(keyword.toLowerCase()))
&gt; +                continue;
&gt; +
&gt; +            if (candidateInLowerCase.startsWith(keyword.toLowerCase()))

Instead of calling includes &amp; startsWith and thereby searching each string twice, just call indexOf.
If the result is -1, it doesn&apos;t contain the keyword. If it&apos;s 0, then it starts with the keyword.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:38
&gt; +            item.addEventListener(&apos;mousedown&apos;, () =&gt; {

Why are you creating link and then manually attaching an event listener?
Just use link(candidate, () =&gt; ~).

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:43
&gt; +            this._elementByCandidateName.set(candidate, item);

Why do we need a map from the candidate to its item like this?
Since each candidate generates exactly one element in your design,
you can just create an array and use _currentCandidateIndex to access the right element.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:73
&gt; +            if(event.key === &apos;Tab&apos; || event.key === &apos;Enter&apos;) {

Nit: Need a space between if and (. Why tab? Why is that special?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:95
&gt; +        if (!this._inputValue.length)

This function should check the value of _currentCandidateIndex.
If it&apos;s not null, then the user had already picked a candidate so there is no need to do the work here.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:97
&gt; +        const matchingCandidates = this._candidates.filter((candidate) =&gt; candidate.toLowerCase().includes(this._inputValue.toLowerCase()));

Why don&apos;t we find the first two matching candidates instead of finding all of them?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:119
&gt; +        if (candidateElement) {
&gt; +            if (previousElement)
&gt; +                previousElement.className = null;
&gt; +            candidateElement.className = &apos;selected&apos;;

This should be a enqueueToRender call instead.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:130
&gt; +        textField.value = this._inputValue;

You shouldn&apos;t always re-set the input element&apos;s value like this.
That would reset the caret position each time, which would be annoying user experience.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:140
&gt; +            &lt;input id=&apos;text-field&apos;/&gt;

Don&apos;t use self-closing syntax in HTML5.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:153
&gt; +            }
&gt; +            ul:empty {

Please add a blank line between each CSS rule.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:161
&gt; +                padding-left: 0.3rem;
&gt; +                padding-right: 0.3rem;
&gt; +                padding-bottom: 0.2rem;

Use the short hand: padding: 0.1rem 0.3rem.
This would expand to padding-left/right: 0.3rem and padding-top/bottom: 0.1rem.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:168
&gt; +                margin-top: -0.1rem;

Use 0.1rem padding for top-bottom instead of using a negative margin like this.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:185
&gt; +            li a:hover, a.selected {

You&apos;re missing li for the second selector.
li a:hover, a.selected expands to &quot;li a:hover&quot; and &quot;a.selected&quot;, not &quot;li a.selected&quot;.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:1
&gt; +function ensureSetForMap(map, key) {

I don&apos;t think we need this helper. It&apos;s only used once.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:23
&gt; +        for (const label in map)

Do: for (const label of map.keys()) instead. It&apos;s more canonical &amp; descriptive way of iterating over keys of a map.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:74
&gt; -        this._renderCustomRevisionTableLazily.evaluate(this._commitSetMap, this._isCustomized);
&gt; +        this._renderCustomRevisionTable(this._commitSetMap, this._isCustomized);

This would force the reconstruction of table in each render call. That&apos;s not okay.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:118
&gt; +            const ownsCommits = [...commitSetMap.values()].map((commitSet) =&gt; commitSet.ownsCommitsForRepository(repository)).every((value) =&gt; value);

Why isn&apos;t this just a call to every? map(f).every((x) =&gt; x) is equivalent to every(f).

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:125
&gt; +                const lastRow = index === ownedRepositories.size - 1 &amp;&amp; incompleteRowCount === 0;

Don&apos;t compare against 0: https://webkit.org/code-style-guidelines/#zero-comparison

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:129
&gt; +            if (incompleteRowCount === 0)

Ditto.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:59
&gt; -        if (this == previousCommit)
&gt; +        if (this === previousCommit)

Why ===? This change should be explained in the change log.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:71
&gt; +        else if (to.length === 40) // e.g. git hash

What&apos;s the point of using ===? There&apos;s no difference.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:113
&gt; +            this._ownedCommits.forEach((ownedCommit) =&gt; {
&gt; +                ownedCommit.setOwnerCommits(this);
&gt; +                this._ownedCommitByOwnedRepository.set(ownedCommit.repository(), ownedCommit);
&gt; +            });

We should add tests to verify these changes are working as intended.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:136
&gt; +        const ownedCommitRepositories = new Set([].concat(
&gt; +            ...ownedCommitMapList.map((ownedCommitMap) =&gt; Array.from(ownedCommitMap.keys()))));

All these constructs to concat arrays with spread just to flatten nested arrays is really hard to read.
Just write two nested loops.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:80
&gt; +    

Nit: Trailing whitespace.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:256
&gt; +function ensureSetForMap(map, key) {

I don&apos;t think we need this helper. It&apos;s only used once and it&apos;s a simple code.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:267
&gt; +class IntermediateCommitSet {
&gt; +
&gt; +    constructor(commitSet)
&gt; +    {
&gt; +        this._commitByRepository = new Map;
&gt; +        this._ownedRepositoriesByOwnerRepository = new Map;

Not only do IntermediateCommitSet store commits instead of revision number, it also stores owned repositories for each commit?
That&apos;s a significant difference worth mentioning in the change log.
Also, IntermediateCommitSet is too vague of a name.
Someone who isn&apos;t familiar with this code can&apos;t tell the difference between CustomCommitSet and IntermediateCommitSet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383093</commentid>
    <comment_count>11</comment_count>
      <attachid>329750</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-12-19 01:37:12 -0800</bug_when>
    <thetext>Created attachment 329750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383537</commentid>
    <comment_count>12</comment_count>
      <attachid>329750</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-19 21:35:10 -0800</bug_when>
    <thetext>Comment on attachment 329750
Patch

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

&gt; Websites/perf.webkit.org/ChangeLog:57
&gt; +        (CommitLog.prototype.label):

You should explain what kind of change you&apos;re making and why the change is needed.

&gt; Websites/perf.webkit.org/ChangeLog:62
&gt; +        (CommitLog.ownedCommitDifferenceForOwnerCommits): A more generic version of which compares multiple owned commits.

How generic is new version? A change log comment should clarify that as well as why this generalization is needed.

&gt; Websites/perf.webkit.org/ChangeLog:69
&gt; +        (IntermediateCommitSet): In order to support owned commits, commit set should support mutation as we may add/remove commits for a repository.
&gt; +        This variant of commit set supports remove/update commits for repositories. IntermediateCommitSet provides a super set of functionalities of CustomCommitSet.
&gt; +        It stores CommitLog object rather than the revision, allows updating and removing a commit as well as fetching owned commits for a commit.

Why can&apos;t we just make CustomCommitSet support all the features of IntermediateCommitSet then?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:35
&gt; +            const item = link(candidate, () =&gt; null);

What&apos;s up with the empty arrow function?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:41
&gt; +            item.className = candidate == selectedCandidate ? &apos;selected&apos; : null;

We shouldn&apos;t be re-constructing the entire list each time the current candidate moves.
Instead, simply update the className in a separate lazily evaluated function.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:75
&gt; +                this._moveCandidate(event.key === &apos;ArrowDown&apos;);
&gt; +                this.enqueueToRender();

_moveCandidate should be the one to call enqueueToRender.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:83
&gt; +    _candidateElementForCurrentIndexIndex() { return this._elementByCandidateName.get(this._candidateNameForCurrentIndex()); }

This function is only used once. It&apos;s better to inline the code in where it&apos;s used.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:122
&gt; +    _renderCandidateList(candidates, inputValue, selectedCandidate, showCandidateList) {

Nit: { should be on a new line.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:125
&gt; +        this.renderReplace(candidateList, this._createCandidateListLazily.evaluate(candidates, inputValue, selectedCandidate));

Again, _createCandidateList should be the one calling renderReplace.
Otherwise, we would mutate the entire tree each time.
Also, please order functions in the order they&apos;re used top-down.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:136
&gt; +        this._constructTextFieldLazily.evaluate();
&gt; +        this._renderCandidateListLazily.evaluate(this._candidates, this._inputValue, this._candidateNameForCurrentIndex(), this._showCandidateList);

Please move _constructTextField and _renderCandidateList after this function.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:83
&gt; +        for (const label of commitSetMap.keys()) {
&gt; +            for (const repository of commitSetMap.get(label).highestLevelRepositories()) {

If you&apos;re immediately getting the commit set out of it, then you can do 
for (const [label, commitSet] of commitSetMap)
instead.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:114
&gt; +            const ownsCommits = [...commitSetMap.values()].every((commitSet) =&gt; commitSet.ownsCommitsForRepository(repository));

Use Array.from(commitSetMap.values()) instead.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:120
&gt; +            for (const [index, ownedRepository] of [...ownedRepositories].entries()) {

What the heck is the point of converting Set to an array and then calling entries on it?
That&apos;s a lot of temporary objects being created.
It&apos;s better to have a separate local variable for count instead.
e.g.
let index = 0;
for (const ownedRepository of ownedRepositories) {
    ...
    index++;
}
But this whole lastRow thing is completely unnecessary. See my comment below for CSS.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:128
&gt; +            const commits = [...commitSetMap.values()].map((commitSet) =&gt; commitSet.commitForRepository(repository));

Use Array.from(commitSetMap.values()) instead.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:130
&gt; +            for (let i = 0; i &lt; incompleteRowCount; i++)

It doesn&apos;t make much sense to have more than one incomplete row. We should just forbid that in UI instead.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:158
&gt; +    _constructTableRowForCommitsWithOwner(commitSetMap, repository, ownerRepository, lastRow) {

{ should be on a new line.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:174
&gt;      }
&gt; +    _constructRowWithoutRepositorySpecified(commitSetMap, ownerRepository, commitDiff, lastRow)

Need a blank line between functions.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:262
&gt; +            #custom-table .last-owned-row td.owner-repository-label {
&gt; +                border-bottom: solid 1px #ddd;
&gt; +            }

Use &quot;#custom-table tr:last-child td.owner-repository-label&quot; instead

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:69
&gt; -        if (parseInt(from) == from) { // e.g. r12345.
&gt; -            fromRevisionForURL = (parseInt(from) + 1).toString;
&gt; +        if (parseInt(from) == from)// e.g. r12345.

Why are you removing the logic to add +1? This should clearly needs to be explained in the change log.
Also, presumably you&apos;re only doing this for owned commits so we should be able to check the repository type,
and not add &quot;r&quot; or add 1 just for owned commits only for owned commits.

In the long term, we should store a new field to the repository table in the database indicating
the repository type such as SVN, Git, etc...

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:259
&gt; +            CommitLog.fetchForSingleRevision(repository, commit.revision()).then(() =&gt; {

WTF!? Constructor of an object shouldn&apos;t have a side-effect like this.
It should be the responsible of the users of this object to fetch data at an appropriate time.
r- because of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383870</commentid>
    <comment_count>13</comment_count>
      <attachid>329750</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-12-20 16:02:12 -0800</bug_when>
    <thetext>Comment on attachment 329750
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:35
&gt;&gt; +            const item = link(candidate, () =&gt; null);
&gt; 
&gt; What&apos;s up with the empty arrow function?

createLink assumes at least 2 arguments are supplied when called.
Otherwise, onclick event will be registered undefined and an error will be raised at &apos;callback.call(this, event);&apos; of ComponentBase.createEventHandler.
Another alternative is change ComponentBase.createEventHandler to not call callback when it is undefined.

&gt;&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:262
&gt;&gt; +            }
&gt; 
&gt; Use &quot;#custom-table tr:last-child td.owner-repository-label&quot; instead

This may not work for some cases.
This class should really be renamed to &apos;last-row-for-owned-repository&apos;. It is not granted the last row of owned repository is the last row of the table.

&gt;&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:69
&gt;&gt; +        if (parseInt(from) == from)// e.g. r12345.
&gt; 
&gt; Why are you removing the logic to add +1? This should clearly needs to be explained in the change log.
&gt; Also, presumably you&apos;re only doing this for owned commits so we should be able to check the repository type,
&gt; and not add &quot;r&quot; or add 1 just for owned commits only for owned commits.
&gt; 
&gt; In the long term, we should store a new field to the repository table in the database indicating
&gt; the repository type such as SVN, Git, etc...

Actually, &apos;fromRevisionForURL&apos; is an unused variable. Do we actually want 
&quot;label = `r${fromRevisionForURL}-r${this.revision()}`;&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384038</commentid>
    <comment_count>14</comment_count>
      <attachid>330009</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-12-20 22:30:56 -0800</bug_when>
    <thetext>Created attachment 330009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384050</commentid>
    <comment_count>15</comment_count>
      <attachid>330009</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-21 00:00:03 -0800</bug_when>
    <thetext>Comment on attachment 330009
Patch

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

&gt; Websites/perf.webkit.org/ChangeLog:13
&gt; +        Introduce &apos;IntermediateCommitSet&apos; to achieve the goal of specifying owned commits for A/B test.
&gt; +        In order to support configure A/B testing that may need to add/remove owned commits, CommitSet may be the closest thing we can get. However, it is a subclass of DataModelObject,
&gt; +        which means CommitSet is a representation of &apos;commit_sets&apos; table and can only be updated from server data. Thus, we want something like CustomCommitSet that is not a representation
&gt; +        of database table, but unlike CommitSet, it should store information about commits rather than a revision. As a result, IntermediateCommitSet is introduced. For a longer term, we may replace
&gt; +        CustomCommitSet with IntermediateCommitSet as it carries more information and could potentially simplify some CustomCommitSet related APIs by using commit id instead of commit revision.

Please wrap these long lines after ~120 characters.

&gt; Websites/perf.webkit.org/public/v3/components/button-base.js:10
&gt; +    disable()

Instead of adding two methods like this, just add setDisabled instead. &quot;disabled&quot; is a well understood concept in HTML at large.

&gt; Websites/perf.webkit.org/public/v3/components/button-base.js:32
&gt; +        this.content(&apos;button&apos;).className = this._enabled ? null : &apos;disabled&apos;;

Instead of adding a class, add a content attribute &quot;disabled&quot;; e.g.
if (this._enabled)
    this.content(&apos;button&apos;).removeAttribute(&apos;disabled&apos;)
else
    this.content(&apos;button&apos;).setAttribute(&apos;disabled&apos;, &apos;&apos;)

&gt; Websites/perf.webkit.org/public/v3/components/button-base.js:63
&gt; +            a.disabled {

And use a[disabled] to select an &quot;a&quot; element with disabled attribute.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:29
&gt; +    _constructTextField()

Rename this to _renderTextField.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:56
&gt; +            if (event.key === &apos;ArrowDown&apos; || event.key === &apos;ArrowUp&apos;) {
&gt; +                this._moveCandidate(event.key === &apos;ArrowDown&apos;);
&gt; +            } else if (event.key === &apos;Tab&apos; || event.key === &apos;Enter&apos;) {

Nit: No curly brackets around a single line statement.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:104
&gt; +    _renderCandidateList(candidates, inputValue, previouslySelectedCandidateName, selectedCandidate, showCandidateList)
&gt; +    {
&gt; +        this._createCandidateListLazily.evaluate(candidates, inputValue);

I don&apos;t think this nesting of function makes sense.
What we need is _renderCandidateList which renders the list as currently done in _createCandidateList,
and then a separate function which updates the currently selected candidate as done in this function.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:108
&gt; +        const previouslySelectedCandidateElement = this._elementByCandidateName.get(previouslySelectedCandidateName);

As I&apos;ve repeatedly stated, there is no point in creating a map like this.
Just create an array of elements and address them by an index.
In fact, _renderCandidateList should return an array of elements and this function should take it as an arugment
so that this function would get involved whenever the list changes as well.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:112
&gt; +        const selectedCandidateElement = this._elementByCandidateName.get(selectedCandidate);

Ditto. We shouldn&apos;t be converting an index to name and back to an element
when we can simply convert an index to its corresponding element.
You could even do: this.content(&apos;candidate-list&apos;).children[currentCandidateIndex]
but I think an explicit array would be better.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:119
&gt; +    _createCandidateList(candidates, key)

This should be renamed to _renderCandidateList.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:137
&gt; +            item.addEventListener(&apos;mousedown&apos;, () =&gt; {

Add a FIXME to use link()&apos;s callback instead, and state why we&apos;re doing this instead.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:52
&gt; +                    this._isCustomized = true;
&gt; +                    this._fetchingCommitPromises = [];

You should check that this function hadn&apos;t been called multiple times since we&apos;ve started fetching data.
i.e. you should check that _commitSetMap and _fetchingCommitPromises are the ones we set here.
Otherwise, when the user reacts faster than the network (e.g. network is stable),
we run the risk of overriding what the user did (because e.g. the fetching of data scheduled earlier finishes later).

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:140
&gt; +            const ownsCommits = Array.from(commitSetMap.values()).every((commitSet) =&gt; commitSet.ownsCommitsForRepository(repository));

Why does this nee to be every? Who owns commit?
We should use a more descriptive variable name here.
e.g. allCommitSetSpecifiesOwnerCommit.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:141
&gt; +            const hasIncompleteRow = this._hasIncompletedRowForOwnerRepository.get(repository);

We should rename variable to _hasIncompletedOwnedRepository and pass it as an argument instead of implicitly depending on it here.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:175
&gt; +                this._hasIncompletedRowForOwnerRepository.set(repository, true);

Rendering functions shouldn&apos;t be depending on instance variable like this.
It happens to work now because _hasIncompletedRowForOwnerRepository&apos;s value only gets updated when the list of repositories
but an implicit dependency like that are bad.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:205
&gt; +    _constructRowWithoutRepositorySpecified(commitSetMap, ownerRepository, commitDiff)

We should clarify that this is for an owned repository/commit in its name.
e.g. _constructTableRowForIncompleteOwnedCommits

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:209
&gt; +        const changedRepositories = [...commitDiff.keys()];

Use Array.from.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:216
&gt; +            const ownedCommitsIterator = commitDiff.get(targetRepository).values();
&gt; +            for (const commitSet of commitSetMap.values())

Just do: for (let i = 0; i &lt; commitSetList.length; i++) commitSet.setCommitForRepository(targetRepository, ownedCommitList[I])
after converting iterables to arrays.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:222
&gt; +        const cells = [element(&apos;td&apos;, {class: &apos;owner-repository-label&apos;}), element(&apos;th&apos;, comboBox), element(&apos;td&apos;, {colspan: labelCount * (labelCount + 1)})];

You might wanna define a local variable like numberOfCellsPerConfiguration = labelCount + 1 to make this math clear.
Also, call it as configurationCount instead of labelCount.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:257
&gt; +        this._ownedRepositoriesByOwnerRepository = new Map;

Why not just this._ownerToOwnedRepositories?

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:263
&gt; +    fetchFullCommits()

I&apos;d call this fetchCommitLogs instead.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:267
&gt; +            fetchingPromises.push(this.updateCommitForRepositoryWithRevision(repository, commit.revision()));

I think we should extract the logic to fetch commit logs out of updateCommitForRepositoryWithRevision and avoid calling setCommitForRepository.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:271
&gt; +    setCommitForRepository(repository, commit, ownerCommit = null)

Please move this to after updateCommitForRepositoryWithRevision.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:304
&gt; +    updateCommitForRepositoryWithRevision(repository, revision)

This should be renamed to updateRevisionForOwnerRepository or something to clarify the relationship with other commits.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:306
&gt; +        let commit = null;

Move this to the callback.

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:307
&gt; +        return CommitLog.fetchForSingleRevision(repository, revision).then((commits) =&gt; {

Since this fetch can re-order things, we need to check that the current revision for which we&apos;re fetching commit is the one we fetched.
So at minimum, we need to store what the current repository to revision mappings are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384257</commentid>
    <comment_count>16</comment_count>
      <attachid>330009</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-21 14:13:42 -0800</bug_when>
    <thetext>Comment on attachment 330009
Patch

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

&gt;&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:29
&gt;&gt; +    _constructTextField()
&gt; 
&gt; Rename this to _renderTextField.

Actually, do this in didConstructShadowTree instead.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:33
&gt; +            this._inputValue = textField.value;

We should access this.content(&apos;text-field&apos;).value instead.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:109
&gt; +        if (previouslySelectedCandidateElement)

We could just do: this.content(&apos;candidate-list&apos;).querySelector(&apos;.selected&apos;).classList.remove(&apos;selected&apos;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384336</commentid>
    <comment_count>17</comment_count>
      <attachid>330082</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-12-21 17:26:58 -0800</bug_when>
    <thetext>Created attachment 330082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384337</commentid>
    <comment_count>18</comment_count>
      <attachid>330083</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-12-21 17:35:01 -0800</bug_when>
    <thetext>Created attachment 330083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384389</commentid>
    <comment_count>19</comment_count>
      <attachid>330083</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-21 20:56:34 -0800</bug_when>
    <thetext>Comment on attachment 330083
Patch

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

&gt; Websites/perf.webkit.org/public/v3/components/button-base.js:7
&gt; +    constructor(name, disabled = false)
&gt; +    {
&gt; +        super(name);
&gt; +        this._disabled = disabled;

Let&apos;s not do this. Just initialize this._disabled = false for now.

In the current custom elements API, constructors aren&apos;t really supposed to take any arguments.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:42
&gt; +                const candidate = this._candidateNameForCurrentIndex();

Just inline _candidateNameForCurrentIndex here instead of adding the helper since it&apos;s only used once.
Also, what happens when candidate is null?
Also, shouldn&apos;t we run the same logic as the one in _autoCompleteIfOnlyOneMatchingItem()
when there is no currently selected item but there is exactly one item?

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:53
&gt; +        this._renderCandidateListLazily.evaluate(this._candidates, this.content(&apos;text-field&apos;).value);
&gt; +        this._updateCandidateListLazily.evaluate(this._candidateElementForCurrentIndex(), this._showCandidateList);

Just inline _candidateElementList here instead of adding the helper.
Also, _renderCandidateList should simply return the candidateElementList instead of storing it as an instance variable.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:57
&gt; +    _candidateNameForCurrentIndex() { return this._currentCandidateIndex === null ? null : this._candidateList[this._currentCandidateIndex]; }
&gt; +    _candidateElementForCurrentIndex() { return this._currentCandidateIndex === null ? null : this._candidateElementList[this._currentCandidateIndex]; }

Remove these helper functions.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:88
&gt; +            this._currentCandidateIndex += forward ? 1 : -1;
&gt; +            if (this._currentCandidateIndex &gt;= this._candidateList.length)
&gt; +                this._currentCandidateIndex = this._candidateList.length - 1;
&gt; +            if (this._currentCandidateIndex &lt; 0)
&gt; +                this._currentCandidateIndex = 0;

Instead of keep referring to this._currentCandidateIndex,
I think it&apos;s cleaner to have a local variable like &quot;newIndex&quot; and assign to it at the end.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:117
&gt; +            if (key &amp;&amp; searchResult === -1)

A more canonical way to check for the return value of indexOf is searchResult &lt; 0.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:125
&gt; +        this._candidateElementList = this._candidateList.map((candidate) =&gt; {

Declare this as a local variable.

&gt; Websites/perf.webkit.org/public/v3/components/combo-box.js:137
&gt; +    }

And return it here.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:44
&gt; +                if (this._fetchingCommitPromises.length)
&gt; +                    return;

I don&apos;t think we should exit early here.
In the case the user had clicked on customize multiple times,
we want to use the latest commit sets to override the commit sets
for which we&apos;re currently fetching results.

&gt; Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js:155
&gt; +                tableBodyList.push(element(&apos;tbody&apos;, rows));

Why are we adding an empty tbody here??

&gt; Websites/perf.webkit.org/public/v3/components/minus-button.js:5
&gt; +    constructor(disabled=false)
&gt; +    {
&gt; +        super(&apos;minus-button&apos;, disabled);

Please get rid of this.

&gt; Websites/perf.webkit.org/public/v3/components/plus-button.js:6
&gt; +    constructor(disabled=false)
&gt; +    {
&gt; +        super(&apos;plus-button&apos;, disabled);
&gt; +    }

Ditto.

&gt; Websites/perf.webkit.org/public/v3/models/commit-log.js:104
&gt; +            this._ownedCommits.forEach((ownedCommit) =&gt; ownedCommit.setOwnerCommits(this));

We do that the first time we fetched owned commits, right?
Why do we need to do it here again?

&gt; Websites/perf.webkit.org/public/v3/models/commit-set.js:314
&gt; +        console.assert(repository instanceof Repository);

You should also remove the entry from this._fetchingPromiseByRepository.
Please add a test where we&apos;d start fetching commit logs but a repository is removed before the fetching completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556739</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-07-29 15:05:28 -0700</bug_when>
    <thetext>Did this land? Should the bug be closed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556750</commentid>
    <comment_count>21</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2019-07-29 15:15:47 -0700</bug_when>
    <thetext>Yes, this has been landed in r226259. Sorry, I should have updated this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322989</attachid>
            <date>2017-10-05 22:11:45 -0700</date>
            <delta_ts>2017-10-06 18:43:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171005221144.patch</filename>
            <type>text/plain</type>
            <size>46536</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTU2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA0YmVhMWZkNjU0ZjUxZTk4OTkwNmY2Mjk3YjllOWE4NjNjM2ZjNjA3Li5lNWI0NGY0YmQ2
OTAzNGY0YTIyMWI3OThjYjQ5NmI3MmM3YzVlMzM1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxNy0xMC0wNSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9u
ZW50cy9jb21iby1ib3guanM6IEFkZGVkIGEgY29tYm8tYm94IHdoaWNoIHN1cHBvcnRzIGF1dG8g
Y29tcGxldGlvbi4KKyAgICAgICAgKENvbWJvQm94KToKKyAgICAgICAgKENvbWJvQm94LnByb3Rv
dHlwZS5fY3JlYXRlQ2FuZGlkYXRlTGlzdCk6IENyZWF0ZSBhbiBodG1sIGxpc3QgYmFzZWQgb24g
Y2FuZGlkYXRlcy4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlkYXRlRWxlbWVu
dEZvckN1cnJlbnRJbmRleEluZGV4KTogUmV0dXJucyBjdXJyZW50bHkgZm9jdXNlZCBsaXN0IGVs
ZW1lbnQuCisgICAgICAgIChDb21ib0JveC5wcm90b3R5cGUuX2NhbmRpZGF0ZU5hbWVGb3JDdXJy
ZW50SW5kZXgpOiBSZXR1cm5zIGN1cnJlbnRseSBmb2N1c2VkIGNhbmRpZGF0ZS4KKyAgICAgICAg
KENvbWJvQm94LnByb3RvdHlwZS5fYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0Y2hpbmdJdGVtKTog
U3VwcG9ydHMgYXV0byBjb21wbGV0aW9uLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9k
aWRBcnJvd1VwT3JEb3duKTogU3VwcG9ydHMgYXJyb3cgdXAvZG93bi4KKyAgICAgICAgKENvbWJv
Qm94LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoQ29tYm9Cb3guaHRtbFRlbXBsYXRlKToK
KyAgICAgICAgKENvbWJvQm94LmNzc1RlbXBsYXRlKToKKyAgICAgICAgKiBwdWJsaWMvdjMvY29t
cG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzOgorICAgICAgICAoUmV2aXNp
b25JbmZvUm93QmFzZSk6IEJhc2UgY2xhc3MgZm9yIGRlY3JpYmluZyBhIHJvdyB0aGF0IGNvbnRh
aW5zIHJldmlzaW9uIGluZm9ybWF0aW9uLgorICAgICAgICAoUmV2aXNpb25JbmZvUm93QmFzZS5w
cm90b3R5cGUucmVwb3NpdG9yeSk6IFJldHVybnMgdGhlIHJlcG9zaXRvcnkgb2YgdGhpcyByb3cu
CisgICAgICAgIChSZXZpc2lvbkluZm9Sb3dCYXNlLnByb3RvdHlwZS5yZXZpc2lvblNlY3Rpb25G
b3JMYWJlbCk6IFJldHVybnMgYSByZXZpc2lvbiBzZWN0aW9uIGZvciBhIGxhYmVsLgorICAgICAg
ICAoUmV2aXNpb25JbmZvUm93QmFzZS5wcm90b3R5cGUuZGlkUmV2aXNpb25DaGFuZ2UpOiBEZWZh
dWx0IGltcGxlbWVudGF0aW9uIHdoZW4gcmV2aXNpb24gb24gdGhpcyByb3cgY2hhbmdlZC4KKyAg
ICAgICAgKFJldmlzaW9uSW5mb1Jvd0Jhc2UucHJvdG90eXBlLnJldmlzaW9uRm9yTGFiZWwpOiBS
ZXR1cm5zIGEgcmV2aXNpb24gZm9yIGEgbGFiZWwuCisgICAgICAgIChSZXZpc2lvbkluZm9Sb3dC
YXNlLnByb3RvdHlwZS5sYWJlbHMpOiBSZXR1cm5zIGFsbCBsYWJlbHMgaW4gYSByb3cuCisgICAg
ICAgIChSZXZpc2lvbkluZm9Sb3dCYXNlLnByb3RvdHlwZS5hbGxSZXZpc2lvbnNBcmVTZXQpOiBS
ZXR1cm5zIHdoZXRoZXIgcmV2aXNpb25zIG9uIHRoaXMgcm93IGFyZSBzZXQuCisgICAgICAgIChS
ZXZpc2lvbkluZm9Sb3cpOiBSZXZpc2lvbiBpbmZvcm1hdGlvbiBmb3IgYSByb3cgd2l0aCByZXBv
c2l0b3J5IHRoYXQgaXMgbm90IGFuIG93bmVkIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKFJldmlz
aW9uSW5mb1Jvdy5wcm90b3R5cGUuYWRkT3duZWRSZXZpc2lvbkluZm9Sb3dBc3luYyk6IEFkZCBv
d25lZCByZXZpc2lvbiBpbmYgcm93IGFmdGVyIGxvYWRpbmcgb3duZWQgY29tbWl0cyBpbmZvcm1h
dGlvbi4KKyAgICAgICAgKFJldmlzaW9uSW5mb1Jvdy5wcm90b3R5cGUucmVtb3ZlT3duZWRSZXZp
c2lvbkluZm9Sb3cpOiBSZW1vdmUgYW4gZ2l2ZW4gb3duZWQgcmV2aXNpb24gaW5mbyByb3cuCisg
ICAgICAgIChSZXZpc2lvbkluZm9Sb3cucHJvdG90eXBlLmNoYW5nZWRPd25lZFJlcG9zaXRvcnlO
YW1lcyk6IFJldHVybnMgYSBsaXN0IG9mIG93bmVkIHJlcG9zaXRvcnkgbmFtZXMgdGhvc2UgaGFz
IGNoYW5nZWQgYmV0d2VlbiBjb21taXRzIGluIHRoaXMgcm93LgorICAgICAgICAoUmV2aXNpb25J
bmZvUm93LnByb3RvdHlwZS5vd25lZFJldmlzaW9uSW5mb1Jvd3MpOiBSZXR1cm5zIGEgbGlzdCBv
ZiBvd25lZCByZXZpc2lvbiBpbmZvIHJvd3MuCisgICAgICAgIChSZXZpc2lvbkluZm9Sb3cucHJv
dG90eXBlLmFkZE93bmVkUmV2aXNpb25JbmZvUm93KTogQWRkIGFuIG93bmVkIHJldmlzaW9uIGlu
Zm8gcm93LgorICAgICAgICAoUmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5kaWRSZXZpc2lvbkNo
YW5nZSk6IFJlc2V0IG93bmVkIHJvdyBzdGF0dXMgd2hlbiByZXZpc2lvbiBvbiB0aGlzIHJvdyBj
aGFuZ2VkLgorICAgICAgICAoUmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5hbGxSZXZpc2lvbnNB
cmVTZXQpOiBDaGVjayB3aGV0aGVyIGFsbCByZXZpc2lvbnMgYXJlIHNldCBvbiBjdXJyZW50IHJv
dyBhbmQgb3duZWQgcm93cy4KKyAgICAgICAgKFJldmlzaW9uSW5mb1Jvdy5wcm90b3R5cGUuY29t
bWl0RGlmZmVyZW5jZUZvclJlcG9zaXRvcnkpOiBSZXR1cm4gYSBvYmplY3QgdGhhdCBjb250YWlu
cyBjb21taXQgZGlmZmVyZW50IGZvciBhIGdpdmUgcmVwb3NpdG9yeS4KKyAgICAgICAgKFJldmlz
aW9uSW5mb1Jvdy5wcm90b3R5cGUubG9hZE93bmVkQ29tbWl0cyk6IExvYWQgb3duZWQgY29tbWl0
cyBpbmZvcm1hdGlvbi4KKyAgICAgICAgKE93bmVkUmV2aXNpb25JbmZvUm93KTogT3duZWQgcmV2
aXNpb24gaW5mbyByb3cgd2hpY2ggbWF5IG5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgcmVwb3Np
dG9yeS4KKyAgICAgICAgKE93bmVkUmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5zZXRSZXBvc2l0
b3J5QnlOYW1lKTogU2V0cyByZXBvc2l0b3J5IGZvciB0aGlzIHJvdy4KKyAgICAgICAgKE93bmVk
UmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5vd25lclJldmlzaW9uRm9yTGFiZWwpOiBSZXR1cm5z
IHRoZSByZXZpc2lvbiBmb3IgYSBsYWJlbC4KKyAgICAgICAgKFJldmlzaW9uU2VjdGlvbik6IENv
bnRhaW5zIGluZm9ybWF0aW9uIGZvciByZXZpc2lvbiBhbmQgcmFkaW8gYnV0dG9ucy4KKyAgICAg
ICAgKFJldmlzaW9uU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlKTogVXBkYXRlcyBjaGVja2VkIGxh
YmVsIGFuZCByZXZpc2lvbiB3aGVuIHJldmlzaW9uIGNoYW5nZWQuCisgICAgICAgIChSZXZpc2lv
blNlY3Rpb24ucHJvdG90eXBlLnJldmlzaW9uKTogUmV0dXJucyBhIHJldmlzaW9uIG9mIGN1cnJl
bnQgcmV2aXNpb24gc2VjdGlvbi4KKyAgICAgICAgKFJldmlzaW9uU2VjdGlvbi5wcm90b3R5cGUu
ZGVmYXVsdFJldmlzaW9uKTogUmV0dXJucyB0aGUgZGVmYXVsdCByZXZpc2lvbiBvZiBjdXJyZW50
IHJldmlzaW9uIHNlY3Rpb24uCisgICAgICAgIChSZXZpc2lvblNlY3Rpb24ucHJvdG90eXBlLmNo
ZWNrZWRMYWJlbCk6IFJldHVybnMgY2hlY2tlZCBsYWJlbCBmb3IgY3VycmVudCByZXZpc2lvbiBz
ZWN0aW9uLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSk6IE1ha2UgdGhpcyBm
b3JtIHN1cHBvcnQgc3BlY2lmeWluZyBvd25lZCByZXZpc2lvbiBpbmZvcm1hdGlvbnMuCisgICAg
ICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5kaWRDb25zdHJ1Y3RTaGFk
b3dUcmVlKTogQWRkZWQgbG9naWMgdG8gY29tcHV0ZSBpbnRpYWwgcmV2aXNpb24gaW5mbyB3aGVu
IGNsaWNraW5nIHRoZSAnQ3VzdG9taXplJyBsaW5rLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVz
dEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbXB1dGVJbml0aWFsUmV2aXNpb25JbmZvKTogQ29tcHV0
ZSBpbml0aWFsIHJldmlzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgdGFibGUuCisgICAgICAgIChD
dXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29tcHV0ZUNvbW1pdFNldE1hcCk6
IENvbXB1dGUgdGhlIGNvbW1pdCBzZXQgZm9yIEEvQiB0ZXN0aW5nLgorICAgICAgICAoQ3VzdG9t
aXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUucmVuZGVyKTogVXBkYXRlZC4KKyAgICAgICAg
KEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9yZW5kZXJDdXN0b21SZXZpc2lv
blRhYmxlKTogUmVuZGVycyBhIGN1c3RvbSByZXZpc2lvbiB0YWJsZS4KKyAgICAgICAgKEN1c3Rv
bWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RPd25lZFJldmlzaW9uSW5m
b1Jvd3MpOiBDb25zdHJ1Y3Qgb3duZWQgcmV2aXNpb24gaW5mbyByb3dzIGZyb20gYSBnaXZlbiBv
d25lciByZXZpc2lvbiBpbmZvIHJvdy4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZv
cm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RDZWxsc0luUm93KTogQ29uc3RydWN0IHJvd3MgZm9yIHRv
cCBsZXZlbCByZXBvc2l0b3JpZXMuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3Jt
LmNzc1RlbXBsYXRlKToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90
eXBlLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyk6IERlbGV0ZWQuCisgICAgICAgICog
cHVibGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzOiBBZGRlZCBhIG1pbnVzIGJ1dHRv
bi4KKyAgICAgICAgKE1pbnVzQnV0dG9uKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLnByb3RvdHlw
ZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLmJ1dHRvbkNv
bnRlbnQpOgorICAgICAgICAoTWludXNCdXR0b24uY3NzVGVtcGxhdGUpOgorICAgICAgICAqIHB1
YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanM6CisgICAgICAgIChPd25l
ZENvbW1pdFZpZXdlci5wcm90b3R5cGUuX3JlbmRlck93bmVkQ29tbWl0VGFibGUpOgorICAgICAg
ICAqIHB1YmxpYy92My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpzOiBBZGRlZCBhIHBsdXMgYnV0
dG9uLgorICAgICAgICAoUGx1c0J1dHRvbik6CisgICAgICAgIChQbHVzQnV0dG9uLnByb3RvdHlw
ZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKFBsdXNCdXR0b24uYnV0dG9uQ29u
dGVudCk6CisgICAgICAgIChQbHVzQnV0dG9uLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKiBwdWJs
aWMvdjMvaW5kZXguaHRtbDogQWRkZWQgcGx1cy9taW51cyBidXR0b25zIGFuZCBjb21iby1ib3gu
CisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzOgorICAgICAgICAoQ29t
bWl0TG9nLnByb3RvdHlwZS5sYWJlbCk6IFJlbW92ZSB0aGUgbG9naWMgdGhhdCBhZGRzICdyJyBw
cmVmaXggdG8gc3ZuIHJldmlzaW9uIHNpbmNlIHNvbWUgcmV2aXNpb25zIGZyb20gYSByZXBvc2l0
b3J5IHNvbWV0aW1lcyBhcmUgbGFiZWxlZCB3aXRoICdyJyBzb21ldGltZXMgYXJlIG5vdC4KKyAg
ICAgICAgKENvbW1pdExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHMpOiBBIG1vcmUgZ2VuZXJp
YyB2ZXJzaW9uIG9mIHdoaWNoIGNvbXBhcmVzIG11bHRpcGxlIG93bmVkIGNvbW1pdHMuCisgICAg
ICAgIChDb21taXRMb2cuZGlmZk93bmVkQ29tbWl0cyk6IERlbGV0ZWQuCisgICAgICAgICogcHVi
bGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzOgorICAgICAgICAoQ29tbWl0U2V0LnByb3RvdHlw
ZS5vd25lZFJlcG9zaXRvcmllcyk6IFJldHVybnMgYSBsaXN0IG9mIG93bmVkIHJlcG9zaXRvcmll
cy4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL3JlcG9zaXRvcnkuanM6CisgICAgICAgIChS
ZXBvc2l0b3J5LnByb3RvdHlwZS5maW5kT3duZWRSZXBvc2l0b3J5QnlOYW1lKTogUmV0dXJucyBh
biBvd25lZCByZXBvc2l0b3J5IGJ5IGEgZ2l2ZW4gbmFtZS4KKyAgICAgICAgKiB1bml0LXRlc3Rz
L2NvbW1pdC1sb2ctdGVzdHMuanM6CisgICAgICAgIChhc3NlcnQuZGVlcEVxdWFsLndlYmtpdENv
bW1pdC5kaWZmKTogVXBkYXRlIHVuaXQgdGVzdHMuCisgICAgICAgICogdW5pdC10ZXN0cy9tZWFz
dXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzOiBVcGRhdGUgdW5pdCB0ZXN0cy4KKyAgICAgICAgKiB1
bml0LXRlc3RzL21lYXN1cmVtZW50LXNldC10ZXN0cy5qczogVXBkYXRlIHVuaXQgdGVzdHMuCisK
IDIwMTctMDktMjggIERld2VpIFpodSAgPGRld2VpX3podUBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIHN5bmNpbmcgc2NyaXB0IHRvIGJlIGFibGUgdG8gYnVpbGQgYmluYXJ5IGZvciBjb21t
aXQgc2V0IHdpdGggb3duZWQgY29tbWl0cy4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJhY2JlZTc0NmJjZjhkZTY2OTc4OWJmY2YzMWNiY2FjYThmY2EwZTIKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8t
Ym94LmpzCkBAIC0wLDAgKzEsMTY1IEBACitjbGFzcyBDb21ib0JveCBleHRlbmRzIENvbXBvbmVu
dEJhc2UKK3sKKyAgICBjb25zdHJ1Y3RvcihjYWxjdWxhdGVEZWZhdWx0VmFsdWUsIGRpZFVwZGF0
ZVZhbHVlLCBjYW5kaWRhdGVzKQorICAgIHsKKyAgICAgICAgc3VwZXIoJ2NvbWJvLWJveCcpOwor
ICAgICAgICB0aGlzLl9jYWxjdWxhdGVEZWZhdWx0VmFsdWUgPSBjYWxjdWxhdGVEZWZhdWx0VmFs
dWU7CisgICAgICAgIHRoaXMuX2RpZFVwZGF0ZVZhbHVlID0gZGlkVXBkYXRlVmFsdWU7CisgICAg
ICAgIHRoaXMuX2NhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzOworICAgICAgICB0aGlzLl9jdXJyZW50
Q2FuZGlkYXRlTGlzdCA9IFtdOworICAgICAgICB0aGlzLl9jYW5kaWRhdGVOYW1lVG9FbGVtZW50
TWFwcGluZyA9IHt9OworICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSBudWxs
OworICAgICAgICB0aGlzLl9jcmVhdGVDYW5kaWRhdGVMaXN0TGF6aWx5ID0gbmV3IExhemlseUV2
YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX2NyZWF0ZUNhbmRpZGF0ZUxpc3QuYmluZCh0aGlzKSk7Cisg
ICAgfQorCisgICAgX2NyZWF0ZUNhbmRpZGF0ZUxpc3QoY2FuZGlkYXRlcywga2V5d29yZCkKKyAg
ICB7CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7
CisgICAgICAgIGNvbnN0IGxpbmsgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUxpbms7CisgICAgICAg
IGNvbnN0IHN0YXJ0c1dpdGhLZXl3b3JkTGlzdCA9IFtdOworICAgICAgICBjb25zdCBjb250YWlu
c1dpdGhLZXl3b3JkTGlzdCA9IFtdOworICAgICAgICBjYW5kaWRhdGVzLmZvckVhY2goKGNhbmRp
ZGF0ZSkgPT4geworICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlSW5Mb3dlckNhc2UgPSBjYW5k
aWRhdGUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIGlmIChrZXl3b3JkICYmICFjYW5kaWRh
dGVJbkxvd2VyQ2FzZS5pbmNsdWRlcyhrZXl3b3JkLnRvTG93ZXJDYXNlKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUluTG93ZXJDYXNlLnN0
YXJ0c1dpdGgoa2V5d29yZC50b0xvd2VyQ2FzZSgpKSkKKyAgICAgICAgICAgICAgICBzdGFydHNX
aXRoS2V5d29yZExpc3QucHVzaChjYW5kaWRhdGUpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNvbnRhaW5zV2l0aEtleXdvcmRMaXN0LnB1c2goY2FuZGlkYXRlKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0ID0gc3RhcnRzV2l0aEtl
eXdvcmRMaXN0LmNvbmNhdChjb250YWluc1dpdGhLZXl3b3JkTGlzdCk7CisgICAgICAgIHRoaXMu
X2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IG51bGw7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJy
ZW50Q2FuZGlkYXRlTGlzdC5tYXAoKGNhbmRpZGF0ZSkgPT4geworICAgICAgICAgICAgY29uc3Qg
aXRlbSA9IGxpbmsoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5l
cignbW91c2Vkb3duJywgKCkgPT4geworICAgICAgICAgICAgICAgIHRoaXMuX2RpZFVwZGF0ZVZh
bHVlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50KCdjYW5kaWRhdGUt
bGlzdCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHRoaXMuX2NhbmRpZGF0ZU5hbWVUb0VsZW1lbnRNYXBwaW5nW2NhbmRpZGF0ZV0gPSBpdGVt
OworICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ2xpJywgaXRlbSk7CisgICAgICAgIH0pCisg
ICAgfQorCisgICAgX2NhbmRpZGF0ZUVsZW1lbnRGb3JDdXJyZW50SW5kZXhJbmRleCgpCisgICAg
eworICAgICAgICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ICA+PSB0aGlzLl9jdXJy
ZW50Q2FuZGlkYXRlTGlzdC5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlk
YXRlSW5kZXggPSB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlTGlzdC5sZW5ndGggLSAxOworICAgICAg
ICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4IDwgMCkKKyAgICAgICAgICAgIHRoaXMu
X2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IDA7CisgICAgICAgIHJldHVybiB0aGlzLl9jYW5kaWRh
dGVOYW1lVG9FbGVtZW50TWFwcGluZ1t0aGlzLl9jYW5kaWRhdGVOYW1lRm9yQ3VycmVudEluZGV4
KCldOworICAgIH0KKworICAgIF9jYW5kaWRhdGVOYW1lRm9yQ3VycmVudEluZGV4KCkgeyByZXR1
cm4gdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3RbdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4
XTsgfQorCisgICAgX2F1dG9Db21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRlbSgpCisgICAgewor
ICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5jb250ZW50KCd0ZXh0LWZpZWxkJykudmFs
dWU7CisgICAgICAgIGlmICghaW5wdXRWYWx1ZS5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2FuZGlkYXRlcyA9IHRoaXMuX2NhbmRpZGF0ZXMuZmls
dGVyKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGlucHV0
VmFsdWUudG9Mb3dlckNhc2UoKSkpOworICAgICAgICBpZiAobWF0Y2hpbmdDYW5kaWRhdGVzLmxl
bmd0aCA9PT0gMSkKKyAgICAgICAgICAgIHRoaXMuX2RpZFVwZGF0ZVZhbHVlKG1hdGNoaW5nQ2Fu
ZGlkYXRlc1swXSk7CisgICAgICAgIGVsc2UgaWYgKG1hdGNoaW5nQ2FuZGlkYXRlcy5sZW5ndGgg
PT09IDAgJiYgdGhpcy5fY2FuZGlkYXRlcy5sZW5ndGgpCisgICAgICAgICAgICB0aGlzLmNvbnRl
bnQoJ3RleHQtZmllbGQnKS52YWx1ZSA9ICcnOworICAgIH0KKworICAgIF9kaWRBcnJvd1VwT3JE
b3duKGlzQXJyb3dEb3duKQorICAgIHsKKyAgICAgICAgbGV0IHByZXZpb3VzRWxlbWVudCA9IG51
bGw7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPT09IG51bGwpCisg
ICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSAoaXNBcnJvd0Rvd24gPyAw
IDogdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3QubGVuZ3RoIC0gMSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50ID0gdGhpcy5fY2FuZGlkYXRlRWxlbWVudEZv
ckN1cnJlbnRJbmRleEluZGV4KCk7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRl
SW5kZXggKz0gKGlzQXJyb3dEb3duID8gMSA6IC0xKTsKKyAgICAgICAgfQorICAgICAgICBjb25z
dCBjYW5kaWRhdGVFbGVtZW50ID0gdGhpcy5fY2FuZGlkYXRlRWxlbWVudEZvckN1cnJlbnRJbmRl
eEluZGV4KCk7CisgICAgICAgIGlmIChjYW5kaWRhdGVFbGVtZW50KSB7CisgICAgICAgICAgICBp
ZiAocHJldmlvdXNFbGVtZW50KQorICAgICAgICAgICAgICAgIHByZXZpb3VzRWxlbWVudC5jbGFz
c05hbWUgPSBudWxsOworICAgICAgICAgICAgY2FuZGlkYXRlRWxlbWVudC5jbGFzc05hbWUgPSAn
c2VsZWN0ZWQnOworICAgICAgICAgICAgdGhpcy5jb250ZW50KCd0ZXh0LWZpZWxkJykudmFsdWUg
PSB0aGlzLl9jYW5kaWRhdGVOYW1lRm9yQ3VycmVudEluZGV4KCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisKKyAgICAg
ICAgY29uc3QgY2FuZGlkYXRlTGlzdCA9IHRoaXMuY29udGVudCgnY2FuZGlkYXRlLWxpc3QnKTsK
KyAgICAgICAgY29uc3QgdGV4dEZpZWxkID0gdGhpcy5jb250ZW50KCd0ZXh0LWZpZWxkJyk7Cisg
ICAgICAgIHRleHRGaWVsZC52YWx1ZSA9IHRoaXMuX2NhbGN1bGF0ZURlZmF1bHRWYWx1ZSgpOwor
ICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLnJl
bmRlclJlcGxhY2UoY2FuZGlkYXRlTGlzdCwgdGhpcy5fY3JlYXRlQ2FuZGlkYXRlTGlzdExhemls
eS5ldmFsdWF0ZSh0aGlzLl9jYW5kaWRhdGVzLCB0ZXh0RmllbGQudmFsdWUpKSk7CisgICAgICAg
IHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB0aGlzLl9hdXRvQ29t
cGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKSk7CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVu
dExpc3RlbmVyKCdmb2N1c291dCcsICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudCgn
Y2FuZGlkYXRlLWxpc3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICAgICAgdGhp
cy5fYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0Y2hpbmdJdGVtKCk7CisgICAgICAgIH0pOworICAg
ICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoZXZlbnQpID0+IHsKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZUxpc3Quc3R5bGUuZGlzcGxheSA9IG51bGw7CisgICAgICAgICAg
ICB0aGlzLnJlbmRlclJlcGxhY2UoY2FuZGlkYXRlTGlzdCwgdGhpcy5fY3JlYXRlQ2FuZGlkYXRl
TGlzdExhemlseS5ldmFsdWF0ZSh0aGlzLl9jYW5kaWRhdGVzLCB0ZXh0RmllbGQudmFsdWUpKQor
ICAgICAgICB9KTsKKyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24n
LCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT0gJ0Fycm93RG93bicg
fHwgZXZlbnQua2V5ID09ICdBcnJvd1VwJykKKyAgICAgICAgICAgICAgICB0aGlzLl9kaWRBcnJv
d1VwT3JEb3duKGV2ZW50LmtleSA9PSAnQXJyb3dEb3duJyk7CisgICAgICAgICAgICBpZihldmVu
dC5rZXkgPT0gJ1RhYicgfHwgZXZlbnQua2V5ID09ICdFbnRlcicpCisgICAgICAgICAgICAgICAg
dGhpcy5fYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0Y2hpbmdJdGVtKCk7CisgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCdjb21ib3gtYm94JyksIFt0
ZXh0RmllbGQsIGNhbmRpZGF0ZUxpc3RdKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBs
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGRpdiBpZD0nY29tYm94LWJveCc+CisgICAg
ICAgICAgICAgICAgPGlucHV0IGlkPSd0ZXh0LWZpZWxkJy8+CisgICAgICAgICAgICAgICAgPHVs
IGlkPSJjYW5kaWRhdGUtbGlzdCI+PC91bD4KKyAgICAgICAgICAgIDwvZGl2PmA7CisgICAgfQor
CisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgCisgICAg
ICAgICAgICBkaXYgeworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAg
ICAgICAgICAgICBoZWlnaHQ6IDEuNHJlbTsKKyAgICAgICAgICAgICAgICBsZWZ0OiAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdWw6ZW1wdHkgeworICAgICAgICAgICAgICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bCB7CisgICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAyNTBtcyBlYXNlLWluOworICAgICAgICAgICAgICAg
IG1hcmdpbjogMDsKKyAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDAuM3JlbTsKKyAgICAg
ICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjNyZW07CisgICAgICAgICAgICAgICAgcGFkZGlu
Zy1ib3R0b206IDAuMnJlbTsKKyAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOworICAg
ICAgICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOworICAgICAgICAgICAgICAgIGJhY2tncm91
bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7CisgICAgICAgICAgICAgICAgYm9yZGVyOiBz
b2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICB0b3A6IDEuNXJlbTsKKyAgICAgICAgICAg
ICAgICBib3JkZXItcmFkaXVzOiAwLjJyZW07CisgICAgICAgICAgICAgICAgei1pbmRleDogMTA7
CisgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTAuMXJlbTsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgICAgICAgICAgICAgbWluLXdpZHRoOiA4LjVyZW07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBsaSB7CisgICAgICAgICAgICAgICAgdGV4dC1hbGln
bjogbGVmdDsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpIGEgeworICAgICAgICAgICAg
ICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDAu
OHJlbTsKKyAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICBk
aXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpIGE6aG92ZXIsIGEu
c2VsZWN0ZWQgeworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUx
LCAwLjEpOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KK30KKworQ29tcG9uZW50
QmFzZS5kZWZpbmVFbGVtZW50KCdjb21iby1ib3gnLCBDb21ib0JveCk7CmRpZmYgLS1naXQgYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxl
LXRlc3QtZ3JvdXAtZm9ybS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
Y29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCmluZGV4IDQ2OTM4MDE5
Y2IzNWEyODA5NGU3ZjIwOGUyMzJkZjRkMjA1NjlmMmIuLmFlMDgyNGFmNjRhNWMzNDgwMWQ5YTI2
ZGQzN2VlODA2MWJlZGM5NzYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFi
bGUtdGVzdC1ncm91cC1mb3JtLmpzCkBAIC0xLDMgKzEsMTQ0IEBACitjbGFzcyBSZXZpc2lvbklu
Zm9Sb3dCYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihyZXBvc2l0b3J5LCBjb21taXRTZXRNYXApCisg
ICAgeworICAgICAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeTsKKyAgICAgICAgdGhp
cy5fcmV2aXNpb25TZWN0aW9uc0J5TGFiZWwgPSB7fTsKKworICAgICAgICBpZiAocmVwb3NpdG9y
eSAmJiBjb21taXRTZXRNYXApIHsKKyAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbW1pdFNldE1h
cCkuZm9yRWFjaCgobGFiZWwpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXQgPSBj
b21taXRTZXRNYXBbbGFiZWxdLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAg
ICAgICAgICAgICAgY29uc3QgcmV2aXNpb24gPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6
ICcnOworICAgICAgICAgICAgICAgIHRoaXMuX3JldmlzaW9uU2VjdGlvbnNCeUxhYmVsW2xhYmVs
XSA9IG5ldyBSZXZpc2lvblNlY3Rpb24ocmV2aXNpb24sIGxhYmVsLCB0aGlzKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIHJlcG9zaXRvcnkoKSB7IHJldHVybiB0aGlz
Ll9yZXBvc2l0b3J5OyB9CisgICAgcmV2aXNpb25TZWN0aW9uRm9yTGFiZWwobGFiZWwpIHsgcmV0
dXJuIHRoaXMuX3JldmlzaW9uU2VjdGlvbnNCeUxhYmVsW2xhYmVsXTsgfQorICAgIGRpZFJldmlz
aW9uQ2hhbmdlKCkge307CisgICAgcmV2aXNpb25Gb3JMYWJlbChsYWJlbCkgeyByZXR1cm4gdGhp
cy5yZXZpc2lvblNlY3Rpb25Gb3JMYWJlbChsYWJlbCkucmV2aXNpb24oKTsgfQorICAgIGxhYmVs
cygpIHsgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3JldmlzaW9uU2VjdGlvbnNCeUxhYmVsKS5z
b3J0KCk7IH0KKyAgICBhbGxSZXZpc2lvbnNBcmVTZXQoKSB7CisgICAgICAgIGZvciAobGV0IGxh
YmVsIG9mIHRoaXMubGFiZWxzKCkpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5yZXZpc2lvbkZv
ckxhYmVsKGxhYmVsKS5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworY2xhc3MgUmV2aXNpb25J
bmZvUm93IGV4dGVuZHMgUmV2aXNpb25JbmZvUm93QmFzZSB7CisKKyAgICBjb25zdHJ1Y3Rvcihy
ZXBvc2l0b3J5LCBjb21taXRTZXRNYXApCisgICAgeworICAgICAgICBzdXBlcihyZXBvc2l0b3J5
LCBjb21taXRTZXRNYXApOworICAgICAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeTsK
KyAgICAgICAgdGhpcy5fb3duZWRDb21taXRzID0gW107CisgICAgICAgIHRoaXMuX293bmVkQ29t
bWl0RGlmZmVyZW5jZXMgPSBuZXcgTWFwOworICAgICAgICB0aGlzLl9vd25lZFJldmlzaW9uSW5m
b1Jvd3MgPSBbXTsKKyAgICAgICAgdGhpcy5fY2hhbmdlZE93bmVkUmVwb3NpdG9yeU5hbWVzID0g
W107CisgICAgfQorCisgICAgYWRkT3duZWRSZXZpc2lvbkluZm9Sb3dBc3luYygpIHsgcmV0dXJu
IHRoaXMubG9hZE93bmVkQ29tbWl0cygpLnRoZW4oKCkgPT4gdGhpcy5hZGRPd25lZFJldmlzaW9u
SW5mb1JvdyhuZXcgT3duZWRSZXZpc2lvbkluZm9Sb3codGhpcykpKTsgfQorCisgICAgcmVtb3Zl
T3duZWRSZXZpc2lvbkluZm9Sb3cob3duZWRSZXZpc2lvblJvdykgeyB0aGlzLl9vd25lZFJldmlz
aW9uSW5mb1Jvd3Muc3BsaWNlKHRoaXMuX293bmVkUmV2aXNpb25JbmZvUm93cy5pbmRleE9mKG93
bmVkUmV2aXNpb25Sb3cpLCAxKTsgfQorCisgICAgY2hhbmdlZE93bmVkUmVwb3NpdG9yeU5hbWVz
KCkgeyByZXR1cm4gdGhpcy5fY2hhbmdlZE93bmVkUmVwb3NpdG9yeU5hbWVzOyB9CisKKyAgICBv
d25lZFJldmlzaW9uSW5mb1Jvd3MoKSB7IHJldHVybiB0aGlzLl9vd25lZFJldmlzaW9uSW5mb1Jv
d3M7IH0KKworICAgIGFkZE93bmVkUmV2aXNpb25JbmZvUm93KG93bmVkUmV2aXNpb25JbmZvUm93
KSB7IHRoaXMuX293bmVkUmV2aXNpb25JbmZvUm93cy5wdXNoKG93bmVkUmV2aXNpb25JbmZvUm93
KTsgfQorCisgICAgZGlkUmV2aXNpb25DaGFuZ2UoKQorICAgIHsKKyAgICAgICAgdGhpcy5fb3du
ZWRDb21taXRzID0gW107CisgICAgICAgIHRoaXMuX293bmVkQ29tbWl0RGlmZmVyZW5jZXMuY2xl
YXIoKTsKKyAgICAgICAgdGhpcy5fb3duZWRSZXZpc2lvbkluZm9Sb3dzID0gW107CisgICAgICAg
IHRoaXMuX2NoYW5nZWRPd25lZFJlcG9zaXRvcnlOYW1lcyA9IFtdOworICAgIH0KKworICAgIGFs
bFJldmlzaW9uc0FyZVNldCgpCisgICAgeworICAgICAgICBpZiAoIXN1cGVyLmFsbFJldmlzaW9u
c0FyZVNldCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGhp
cy5vd25lZFJldmlzaW9uSW5mb1Jvd3MoKS5ldmVyeSgob3duZWRSZXZpc2lvblJvdykgPT4gb3du
ZWRSZXZpc2lvblJvdy5hbGxSZXZpc2lvbnNBcmVTZXQoKSk7CisgICAgfQorCisgICAgY29tbWl0
RGlmZmVyZW5jZUZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fb3duZWRD
b21taXREaWZmZXJlbmNlcy5nZXQocmVwb3NpdG9yeSk7IH0KKworICAgIGxvYWRPd25lZENvbW1p
dHMoKSB7CisgICAgICAgIGlmICh0aGlzLl9vd25lZENvbW1pdERpZmZlcmVuY2VzLnNpemUpCisg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisKKyAgICAgICAgY29uc3QgaW5k
ZXhUb0xhYmVsID0gW107CisgICAgICAgIGNvbnN0IGZ1bGxDb21taXRMaXN0ID0gW107CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMubGFiZWxzKCkucmVkdWNlKChjaGFpbmVkUHJvbWlzZSwgbGFiZWwp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uID0gdGhpcy5fcmV2aXNpb25TZWN0aW9u
c0J5TGFiZWxbbGFiZWxdLnJldmlzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gY2hhaW5lZFBy
b21pc2UudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbW1pdExvZy5mZXRj
aEZvclNpbmdsZVJldmlzaW9uKHRoaXMuX3JlcG9zaXRvcnksIHJldmlzaW9uKTsKKyAgICAgICAg
ICAgIH0pLnRoZW4oKGZ1bGxDb21taXQpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmFz
c2VydChmdWxsQ29tbWl0Lmxlbmd0aCA9PT0gMSk7CisgICAgICAgICAgICAgICAgY29uc3QgY29t
bWl0ID0gZnVsbENvbW1pdFswXTsKKyAgICAgICAgICAgICAgICBmdWxsQ29tbWl0TGlzdC5wdXNo
KGNvbW1pdCk7CisgICAgICAgICAgICAgICAgaW5kZXhUb0xhYmVsLnB1c2gobGFiZWwpOworICAg
ICAgICAgICAgICAgIHJldHVybiBjb21taXQuZmV0Y2hPd25lZENvbW1pdHMoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSkudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICBDb21taXRMb2cuZGlmZk11bHRpcGxlT3duZWRDb21taXRzLmFwcGx5KENvbW1pdExv
ZywgZnVsbENvbW1pdExpc3QpLmZvckVhY2goKGNvbW1pdHMsIHJlcG9zaXRvcnkpID0+IHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBsYWJlbFRvQ29tbWl0ID0ge307CisgICAgICAgICAgICAgICAg
Y29tbWl0cy5mb3JFYWNoKChjb21taXQsIGluZGV4KSA9PiBsYWJlbFRvQ29tbWl0W2luZGV4VG9M
YWJlbFtpbmRleF1dID0gY29tbWl0KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vd25lZENvbW1p
dERpZmZlcmVuY2VzLnNldChyZXBvc2l0b3J5LCBsYWJlbFRvQ29tbWl0KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgdGhpcy5fY2hhbmdlZE93bmVkUmVwb3NpdG9yeU5hbWVzID0gWy4u
LnRoaXMuX293bmVkQ29tbWl0RGlmZmVyZW5jZXMua2V5cygpXS5tYXAoKHJlcG9zaXRvcnkpID0+
IHJlcG9zaXRvcnkubmFtZSgpKS5zb3J0KCk7CisgICAgICAgIH0pOworICAgIH0KK30KKworY2xh
c3MgT3duZWRSZXZpc2lvbkluZm9Sb3cgZXh0ZW5kcyBSZXZpc2lvbkluZm9Sb3dCYXNlIHsKKwor
ICAgIGNvbnN0cnVjdG9yKHJvd093bmVyLCByZXBvc2l0b3J5PW51bGwsIGNvbW1pdFNldE1hcD1u
dWxsKQorICAgIHsKKyAgICAgICAgc3VwZXIocmVwb3NpdG9yeSwgY29tbWl0U2V0TWFwKTsKKyAg
ICAgICAgdGhpcy5fb3duZXIgPSByb3dPd25lcjsKKyAgICB9CisKKyAgICBzZXRSZXBvc2l0b3J5
QnlOYW1lKHJlcG9zaXRvcnlOYW1lKQorICAgIHsKKyAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9
IHRoaXMuX293bmVyLnJlcG9zaXRvcnkoKS5maW5kT3duZWRSZXBvc2l0b3J5QnlOYW1lKHJlcG9z
aXRvcnlOYW1lKTsKKyAgICAgICAgaWYgKCFyZXBvc2l0b3J5IHx8ICF0aGlzLl9vd25lci5jaGFu
Z2VkT3duZWRSZXBvc2l0b3J5TmFtZXMoKS5pbmNsdWRlcyhyZXBvc2l0b3J5TmFtZSkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fcmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7
CisKKyAgICAgICAgZm9yIChsZXQgW2xhYmVsLCBjb21taXRdIG9mIE9iamVjdC5lbnRyaWVzKHRo
aXMuX293bmVyLmNvbW1pdERpZmZlcmVuY2VGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSkKKyAg
ICAgICAgICAgIHRoaXMuX3JldmlzaW9uU2VjdGlvbnNCeUxhYmVsW2xhYmVsXSA9IG5ldyBSZXZp
c2lvblNlY3Rpb24oY29tbWl0LnJldmlzaW9uKCksIGxhYmVsLCB0aGlzKTsKKyAgICB9CisKKyAg
ICBvd25lclJldmlzaW9uRm9yTGFiZWwobGFiZWwpIHsKKyAgICAgICAgY29uc3QgY2hlY2tlZExh
YmVsID0gdGhpcy5fcmV2aXNpb25TZWN0aW9uc0J5TGFiZWxbbGFiZWxdLmNoZWNrZWRMYWJlbCgp
OworICAgICAgICByZXR1cm4gdGhpcy5fb3duZXIucmV2aXNpb25Gb3JMYWJlbChjaGVja2VkTGFi
ZWwpOworICAgIH0KK30KKworY2xhc3MgUmV2aXNpb25TZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3Rv
cihyZXZpc2lvbiwgY2hlY2tlZExhYmVsLCByb3cpCisgICAgeworICAgICAgICB0aGlzLl9kZWZh
dWx0UmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgdGhpcy5fcmV2aXNpb24gPSByZXZpc2lv
bjsKKyAgICAgICAgdGhpcy5fY2hlY2tlZExhYmVsID0gY2hlY2tlZExhYmVsOworICAgICAgICB0
aGlzLl9yb3cgPSByb3c7CisgICAgfQorCisgICAgdXBkYXRlKG5ld1JldmlzaW9uLCBjaGVja2Vk
TGFiZWwpIHsKKyAgICAgICAgdGhpcy5fcmV2aXNpb24gPSBuZXdSZXZpc2lvbjsKKyAgICAgICAg
dGhpcy5fY2hlY2tlZExhYmVsID0gY2hlY2tlZExhYmVsOworICAgICAgICB0aGlzLl9yb3cuZGlk
UmV2aXNpb25DaGFuZ2UoKTsKKyAgICB9CisKKyAgICByZXZpc2lvbigpIHsgcmV0dXJuIHRoaXMu
X3JldmlzaW9uOyB9CisgICAgZGVmYXVsdFJldmlzaW9uKCkgeyByZXR1cm4gdGhpcy5fZGVmYXVs
dFJldmlzaW9uOyB9CisgICAgY2hlY2tlZExhYmVsKCkgeyByZXR1cm4gdGhpcy5fY2hlY2tlZExh
YmVsOyB9Cit9CiAKIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0
R3JvdXBGb3JtIHsKIApAQCAtNyw5ICsxNDgsMTAgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdy
b3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICB0aGlzLl9jb21taXRTZXRN
YXAgPSBudWxsOwogICAgICAgICB0aGlzLl9uYW1lID0gbnVsbDsKICAgICAgICAgdGhpcy5faXND
dXN0b21pemVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307
CisgICAgICAgIHRoaXMuX2xhYmVscyA9IG51bGw7CisgICAgICAgIHRoaXMuX3JldmlzaW9uSW5m
b1Jvd3MgPSBbXTsKIAotICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlTGF6
aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3JlbmRlckN1c3RvbVJldmlz
aW9uVGFibGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2NvbXB1dGVJbml0aWFsUmV2aXNp
b25JbmZvTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX2NvbXB1dGVJ
bml0aWFsUmV2aXNpb25JbmZvLmJpbmQodGhpcykpOwogICAgIH0KIAogICAgIHNldENvbW1pdFNl
dE1hcChtYXApCkBAIC0zMiwzMSArMTc0LDcyIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91
cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgbmFtZUNvbnRyb2wub25pbnB1
dCA9ICgpID0+IHsKICAgICAgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lQ29udHJvbC52YWx1ZTsK
ICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
fTsKIAogICAgICAgICB0aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1saW5rJykub25jbGljayA9IHRo
aXMuY3JlYXRlRXZlbnRIYW5kbGVyKCgpID0+IHsKICAgICAgICAgICAgIHRoaXMuX2lzQ3VzdG9t
aXplZCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9jb21wdXRlSW5pdGlhbFJldmlzaW9uSW5m
b0xhemlseS5ldmFsdWF0ZSh0aGlzLl9jb21taXRTZXRNYXApOwogICAgICAgICAgICAgdGhpcy5l
bnF1ZXVlVG9SZW5kZXIoKTsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgX2NvbXB1dGVJbml0
aWFsUmV2aXNpb25JbmZvKGNvbW1pdFNldE1hcCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xhYmVs
cyA9IE9iamVjdC5rZXlzKGNvbW1pdFNldE1hcCkuc29ydCgpOworCisgICAgICAgIGNvbnN0IHJl
cG9zaXRvcnlTZXQgPSBuZXcgU2V0OworICAgICAgICBjb25zdCBjb25zdHJ1Y3RlZE93bmVkUmVw
b3NpdG9yaWVzID0gbmV3IFNldDsKKyAgICAgICAgdGhpcy5fbGFiZWxzLmZvckVhY2goKGxhYmVs
KSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRTZXQgPSBjb21taXRTZXRNYXBbbGFiZWxd
OworICAgICAgICAgICAgY29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmZvckVhY2goKHJlcG9zaXRv
cnkpID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1pdFNldC5vd25lckNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlTZXQu
YWRkKHJlcG9zaXRvcnkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBj
b25zdCByZXBvc2l0b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVz
V2l0aFVSTChBcnJheS5mcm9tKHJlcG9zaXRvcnlTZXQudmFsdWVzKCkpKTsKKyAgICAgICAgdGhp
cy5fcmV2aXNpb25JbmZvUm93cyA9IHJlcG9zaXRvcnlMaXN0Lm1hcCgocmVwb3NpdG9yeSkgPT4g
eworICAgICAgICAgICAgY29uc3QgcmV2aXNpb25JbmZvUm93ID0gbmV3IFJldmlzaW9uSW5mb1Jv
dyhyZXBvc2l0b3J5LCBjb21taXRTZXRNYXApOworICAgICAgICAgICAgdGhpcy5fbGFiZWxzLmZv
ckVhY2goKGxhYmVsKSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3Jp
ZXMgPSBjb21taXRTZXRNYXBbbGFiZWxdLm93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGlmICghb3duZWRSZXBvc2l0b3JpZXMp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIG93bmVkUmVw
b3NpdG9yaWVzLmZvckVhY2goKG93bmVkUmVwb3NpdG9yeSkgPT4geworICAgICAgICAgICAgICAg
ICAgICBpZiAoY29uc3RydWN0ZWRPd25lZFJlcG9zaXRvcmllcy5oYXMob3duZWRSZXBvc2l0b3J5
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
cmV2aXNpb25JbmZvUm93LmFkZE93bmVkUmV2aXNpb25JbmZvUm93KG5ldyBPd25lZFJldmlzaW9u
SW5mb1JvdyhyZXZpc2lvbkluZm9Sb3csIG93bmVkUmVwb3NpdG9yeSwgY29tbWl0U2V0TWFwKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdGVkT3duZWRSZXBvc2l0b3JpZXMuYWRkKG93
bmVkUmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGlmIChyZXZpc2lvbkluZm9Sb3cub3duZWRSZXZpc2lvbkluZm9Sb3dzKCkubGVu
Z3RoKQorICAgICAgICAgICAgICAgIHJldmlzaW9uSW5mb1Jvdy5sb2FkT3duZWRDb21taXRzKCku
dGhlbigoKSA9PiB0aGlzLmVucXVldWVUb1JlbmRlcigpLCAoKSA9PiBhbGVydCgnRmFpbGVkIGZl
dGNoaW5nIHNvbWUgb3duZWQgY29tbWl0LicpKTsKKyAgICAgICAgICAgIHJldHVybiByZXZpc2lv
bkluZm9Sb3c7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIF9jb21wdXRlQ29tbWl0U2V0TWFw
KCkKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2NvbW1pdFNldE1hcCk7CiAg
ICAgICAgIGlmICghdGhpcy5faXNDdXN0b21pemVkKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2NvbW1pdFNldE1hcDsKIAogICAgICAgICBjb25zdCBtYXAgPSB7fTsKLSAgICAgICAgZm9yIChj
b25zdCBsYWJlbCBpbiB0aGlzLl9jb21taXRTZXRNYXApIHsKLSAgICAgICAgICAgIGNvbnN0IG9y
aWdpbmFsQ29tbWl0U2V0ID0gdGhpcy5fY29tbWl0U2V0TWFwOwotICAgICAgICAgICAgY29uc3Qg
Y3VzdG9tQ29tbWl0U2V0ID0gbmV3IEN1c3RvbUNvbW1pdFNldDsKLSAgICAgICAgICAgIGZvciAo
bGV0IHJlcG9zaXRvcnkgb2YgdGhpcy5fY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3JpZXMo
KSkgewotICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gdGhpcy5fcmV2aXNp
b25FZGl0b3JNYXBbbGFiZWxdLmdldChyZXBvc2l0b3J5KTsKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmFzc2VydChyZXZpc2lvbkVkaXRvcik7Ci0gICAgICAgICAgICAgICAgY3VzdG9tQ29tbWl0
U2V0LnNldFJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvci52
YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXBbbGFiZWxdID0gY3VzdG9tQ29t
bWl0U2V0OwotICAgICAgICB9CisgICAgICAgIHRoaXMuX2xhYmVscy5mb3JFYWNoKChsYWJlbCkg
PT4geyBtYXBbbGFiZWxdID0gbmV3IEN1c3RvbUNvbW1pdFNldDsgfSk7CisgICAgICAgIHRoaXMu
X3JldmlzaW9uSW5mb1Jvd3MuZm9yRWFjaCgocmV2aXNpb25JbmZvUm93KSA9PiB7CisgICAgICAg
ICAgICByZXZpc2lvbkluZm9Sb3cubGFiZWxzKCkuZm9yRWFjaCgobGFiZWwpID0+IHsKKyAgICAg
ICAgICAgICAgICBtYXBbbGFiZWxdLnNldFJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXZpc2lvbklu
Zm9Sb3cucmVwb3NpdG9yeSgpLCByZXZpc2lvbkluZm9Sb3cucmV2aXNpb25Gb3JMYWJlbChsYWJl
bCkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmICghcmV2aXNpb25JbmZvUm93
Lm93bmVkUmV2aXNpb25JbmZvUm93cygpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgcmV2aXNpb25JbmZvUm93Lm93bmVkUmV2aXNpb25JbmZvUm93cygpLmZvckVhY2go
KG93bmVkUmV2aXNpb25JbmZvUm93KSA9PiB7CisgICAgICAgICAgICAgICAgb3duZWRSZXZpc2lv
bkluZm9Sb3cubGFiZWxzKCkuZm9yRWFjaCgobGFiZWwpID0+IHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcmV2aXNpb24gPSBvd25lZFJldmlzaW9uSW5mb1Jvdy5yZXZpc2lvbkZvckxhYmVs
KGxhYmVsKTsKKyAgICAgICAgICAgICAgICAgICAgbWFwW2xhYmVsXS5zZXRSZXZpc2lvbkZvclJl
cG9zaXRvcnkob3duZWRSZXZpc2lvbkluZm9Sb3cucmVwb3NpdG9yeSgpLCByZXZpc2lvbiwgbnVs
bCwgb3duZWRSZXZpc2lvbkluZm9Sb3cub3duZXJSZXZpc2lvbkZvckxhYmVsKGxhYmVsKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKICAgICAg
ICAgcmV0dXJuIG1hcDsKICAgICB9CiAKQEAgLTY0LDY3ICsyNDcsMTIzIEBAIGNsYXNzIEN1c3Rv
bWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICB7CiAgICAg
ICAgIHN1cGVyLnJlbmRlcigpOwogCi0gICAgICAgIHRoaXMuY29udGVudCgnc3RhcnQtYnV0dG9u
JykuZGlzYWJsZWQgPSAhKHRoaXMuX2NvbW1pdFNldE1hcCAmJiB0aGlzLl9uYW1lKTsKKyAgICAg
ICAgY29uc3QgYWxsUmV2aXNpb25zQXJlU2V0ID0gdGhpcy5fcmV2aXNpb25JbmZvUm93cy5ldmVy
eSgocmV2aXNpb25JbmZvUm93KSA9PiByZXZpc2lvbkluZm9Sb3cuYWxsUmV2aXNpb25zQXJlU2V0
KCkpOworICAgICAgICB0aGlzLmNvbnRlbnQoJ3N0YXJ0LWJ1dHRvbicpLmRpc2FibGVkID0gISh0
aGlzLl9jb21taXRTZXRNYXAgJiYgdGhpcy5fbmFtZSAmJiBhbGxSZXZpc2lvbnNBcmVTZXQpOwog
ICAgICAgICB0aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1saW5rLWNvbnRhaW5lcicpLnN0eWxlLmRp
c3BsYXkgPSAhdGhpcy5fY29tbWl0U2V0TWFwID8gJ25vbmUnIDogbnVsbDsKIAotICAgICAgICB0
aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlTGF6aWx5LmV2YWx1YXRlKHRoaXMuX2NvbW1p
dFNldE1hcCwgdGhpcy5faXNDdXN0b21pemVkKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ3VzdG9t
UmV2aXNpb25UYWJsZSh0aGlzLl9sYWJlbHMsIHRoaXMuX3JldmlzaW9uSW5mb1Jvd3MsIHRoaXMu
X2lzQ3VzdG9taXplZCk7CiAgICAgfQogCi0gICAgX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGUo
Y29tbWl0U2V0TWFwLCBpc0N1c3RvbWl6ZWQpCisgICAgX3JlbmRlckN1c3RvbVJldmlzaW9uVGFi
bGUobGFiZWxzLCByZXZpc2lvbkluZm9Sb3dzLCBpc0N1c3RvbWl6ZWQpCiAgICAgewotICAgICAg
ICBpZiAoIWNvbW1pdFNldE1hcCB8fCAhaXNDdXN0b21pemVkKSB7CisgICAgICAgIGlmICghaXND
dXN0b21pemVkKSB7CiAgICAgICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50
KCdjdXN0b20tdGFibGUnKSwgW10pOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAg
IH0KIAotICAgICAgICBjb25zdCByZXBvc2l0b3J5U2V0ID0gbmV3IFNldDsKLSAgICAgICAgY29u
c3QgY29tbWl0U2V0TGFiZWxzID0gW107Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFw
ID0ge307Ci0gICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKSB7Ci0gICAg
ICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBv
c2l0b3JpZXMoKSkKLSAgICAgICAgICAgICAgICByZXBvc2l0b3J5U2V0LmFkZChyZXBvc2l0b3J5
KTsKLSAgICAgICAgICAgIGNvbW1pdFNldExhYmVscy5wdXNoKGxhYmVsKTsKLSAgICAgICAgICAg
IHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwW2xhYmVsXSA9IG5ldyBNYXA7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjb25zdCByZXBvc2l0b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZl
cnJpbmdPbmVzV2l0aFVSTChBcnJheS5mcm9tKHJlcG9zaXRvcnlTZXQudmFsdWVzKCkpKTsKICAg
ICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAg
ICAgbGV0IHJvd3MgPSBbXTsKKyAgICAgICAgcmV2aXNpb25JbmZvUm93cy5mb3JFYWNoKChyZXZp
c2lvbkluZm9Sb3cpID0+IHsKKyAgICAgICAgICAgIHJvd3MucHVzaChlbGVtZW50KCd0cicsIHRo
aXMuX2NvbnN0cnVjdENlbGxzSW5Sb3cocmV2aXNpb25JbmZvUm93LCBsYWJlbHMpKSk7CisgICAg
ICAgICAgICByb3dzID0gcm93cy5jb25jYXQodGhpcy5fY29uc3RydWN0T3duZWRSZXZpc2lvbklu
Zm9Sb3dzKHJldmlzaW9uSW5mb1JvdywgbGFiZWxzKSk7CisgICAgICAgIH0pOwogICAgICAgICB0
aGlzLnJlbmRlclJlcGxhY2UodGhpcy5jb250ZW50KCdjdXN0b20tdGFibGUnKSwgWwogICAgICAg
ICAgICAgZWxlbWVudCgndGhlYWQnLAogICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RyJywKLSAg
ICAgICAgICAgICAgICAgICAgW2VsZW1lbnQoJ3RkJywgJ1JlcG9zaXRvcnknKSwgY29tbWl0U2V0
TGFiZWxzLm1hcCgobGFiZWwpID0+IGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldExh
YmVscy5sZW5ndGggKyAxfSwgbGFiZWwpKV0pKSwKLSAgICAgICAgICAgIGVsZW1lbnQoJ3Rib2R5
JywKLSAgICAgICAgICAgICAgICByZXBvc2l0b3J5TGlzdC5tYXAoKHJlcG9zaXRvcnkpID0+IHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGgnLCByZXBvc2l0
b3J5LmxhYmVsKCkpXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBsYWJlbCBpbiBj
b21taXRTZXRNYXApCi0gICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKHRoaXMuX2Nv
bnN0cnVjdFJldmlzaW9uUmFkaW9CdXR0b25zKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgbGFi
ZWwpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOwot
ICAgICAgICAgICAgICAgIH0pKV0pOwotCi0gICAgICAgIHJldHVybiByZXBvc2l0b3J5TGlzdDsK
KyAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnQoJ3RkJywge2NvbHNwYW46IDJ9LCAnUmVwb3Np
dG9yeScpLCBsYWJlbHMubWFwKChsYWJlbCkgPT4gZWxlbWVudCgndGQnLCB7Y29sc3BhbjogbGFi
ZWxzLmxlbmd0aCArIDF9LCBsYWJlbCkpLCBlbGVtZW50KCd0ZCcpXSkpLAorICAgICAgICAgICAg
ZWxlbWVudCgndGJvZHknLCByb3dzKQorICAgICAgICBdKTsKICAgICB9CiAKLSAgICBfY29uc3Ry
dWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCByb3dMYWJl
bCkKKyAgICBfY29uc3RydWN0T3duZWRSZXZpc2lvbkluZm9Sb3dzKG93bmVyUmV2aXNpb25JbmZv
Um93LCBjb21taXRTZXRMYWJlbHMpCiAgICAgewogICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29t
cG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OwotICAgICAgICBjb25zdCByZXZpc2lvbkVkaXRvciA9
IGVsZW1lbnQoJ2lucHV0Jyk7CisgICAgICAgIGNvbnN0IHJvd3MgPSBvd25lclJldmlzaW9uSW5m
b1Jvdy5vd25lZFJldmlzaW9uSW5mb1Jvd3MoKTsKKyAgICAgICAgcmV0dXJuIG93bmVyUmV2aXNp
b25JbmZvUm93Lm93bmVkUmV2aXNpb25JbmZvUm93cygpLm1hcCgob3duZWRSZXZpc2lvbkluZm9S
b3csIGkpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IG93bmVkUmVwb3NpdG9yeSA9IG93bmVkUmV2
aXNpb25JbmZvUm93LnJlcG9zaXRvcnkoKTsKKyAgICAgICAgICAgIGNvbnN0IGVkaXRvclZhbHVl
ID0gKCkgPT4gb3duZWRSZXBvc2l0b3J5ID8gIG93bmVkUmVwb3NpdG9yeS5uYW1lKCkgOiAnJzsK
KyAgICAgICAgICAgIGNvbnN0IGVkaXRvclVwZGF0ZVZhbHVlID0gKHZhbHVlKSA9PiB7CisgICAg
ICAgICAgICAgICAgb3duZWRSZXZpc2lvbkluZm9Sb3cuc2V0UmVwb3NpdG9yeUJ5TmFtZSh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW2VsZW1lbnQoJ3RkJywge2NsYXNzOiAn
b3duZXItcmVwb3NpdG9yeS1sYWJlbCd9LCApLCBlbGVtZW50KCd0ZCcsIG5ldyBDb21ib0JveChl
ZGl0b3JWYWx1ZSwgZWRpdG9yVXBkYXRlVmFsdWUsIG93bmVyUmV2aXNpb25JbmZvUm93LmNoYW5n
ZWRPd25lZFJlcG9zaXRvcnlOYW1lcygpKSldOworICAgICAgICAgICAgb3duZXJSZXZpc2lvbklu
Zm9Sb3cubGFiZWxzKCkuZm9yRWFjaCgoZGVmYXVsdExhYmVsKSA9PiB7CisgICAgICAgICAgICAg
ICAgY29uc3QgcmV2aXNpb25TZWN0aW9uID0gb3duZWRSZXZpc2lvbkluZm9Sb3cucmV2aXNpb25T
ZWN0aW9uRm9yTGFiZWwoZGVmYXVsdExhYmVsKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJldmlz
aW9uU2VjdGlvbikgeworICAgICAgICAgICAgICAgICAgICAvLyBQdXNoIHBsYWNlIGhvbGRlcnMK
KyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBPYmplY3Qua2V5cyhjb21t
aXRTZXRMYWJlbHMpLmxlbmd0aCArIDE7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNl
bGxzLnB1c2goZWxlbWVudCgndGQnKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsZXQgcmV2aXNpb25FZGl0b3IgPSBu
dWxsOworICAgICAgICAgICAgICAgIGlmICghcmV2aXNpb25TZWN0aW9uLnJldmlzaW9uKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2aXNpb25WYWx1ZSA9ICgpID0+IHJldmlzaW9u
U2VjdGlvbi5yZXZpc2lvbigpOworICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZpc2lvblVw
ZGF0ZVZhbHVlID0gKHZhbHVlKSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lv
blNlY3Rpb24udXBkYXRlKHZhbHVlLCBkZWZhdWx0TGFiZWwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0RGlmZmVyZW5jZUZvclJlcG9zaXRvcnkgPSBv
d25lclJldmlzaW9uSW5mb1Jvdy5jb21taXREaWZmZXJlbmNlRm9yUmVwb3NpdG9yeShvd25lZFJl
dmlzaW9uSW5mb1Jvdy5yZXBvc2l0b3J5KCkpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBy
ZXZpc2lvbkZvckxhYmVsID0gY29tbWl0RGlmZmVyZW5jZUZvclJlcG9zaXRvcnkgPyBjb21taXRE
aWZmZXJlbmNlRm9yUmVwb3NpdG9yeVtkZWZhdWx0TGFiZWxdLnJldmlzaW9uKCkgOiAnJzsKKyAg
ICAgICAgICAgICAgICAgICAgcmV2aXNpb25FZGl0b3IgPSBuZXcgQ29tYm9Cb3gocmV2aXNpb25W
YWx1ZSwgcmV2aXNpb25VcGRhdGVWYWx1ZSwgW3JldmlzaW9uRm9yTGFiZWxdKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25FZGl0b3IgPSBlbGVt
ZW50KCdpbnB1dCcsIHt2YWx1ZTogcmV2aXNpb25TZWN0aW9uLnJldmlzaW9uKCksIGRpc2FibGVk
OiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsgcmV2aXNp
b25TZWN0aW9uLnVwZGF0ZShyZXZpc2lvbkVkaXRvci52YWx1ZSwgZGVmYXVsdExhYmVsKTsgfX0p
OworICAgICAgICAgICAgICAgIGNvbW1pdFNldExhYmVscy5mb3JFYWNoKChsYWJlbCkgPT4gY2Vs
bHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSYWRpb0J1dHRvbnMobGFiZWwsIHJldmlzaW9uU2VjdGlv
biwgcmV2aXNpb25FZGl0b3IsIGRlZmF1bHRMYWJlbCwgb3duZWRSZXZpc2lvbkluZm9Sb3cpKSk7
CisgICAgICAgICAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIHJldmlzaW9uRWRpdG9y
KSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IGAk
e293bmVyUmV2aXNpb25JbmZvUm93LnJlcG9zaXRvcnkoKS5sYWJlbCgpfS1vd25lZC1jb21taXQt
JHtpfWA7CisgICAgICAgICAgICBjb25zdCBtaW51c0J1dHRvbiA9IG5ldyBNaW51c0J1dHRvbihh
Y3Rpb25OYW1lKTsKKyAgICAgICAgICAgIG1pbnVzQnV0dG9uLmxpc3RlblRvQWN0aW9uKGFjdGlv
bk5hbWUsICgpID0+IHsKKyAgICAgICAgICAgICAgICBvd25lclJldmlzaW9uSW5mb1Jvdy5yZW1v
dmVPd25lZFJldmlzaW9uSW5mb1Jvdyhvd25lZFJldmlzaW9uSW5mb1Jvdyk7CisgICAgICAgICAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIG1pbnVzQnV0dG9uKSk7CiAKLSAgICAgICAgdGhp
cy5fcmV2aXNpb25FZGl0b3JNYXBbcm93TGFiZWxdLnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVk
aXRvcik7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCB7J2NsYXNzJzogaSA9PT0g
cm93cy5sZW5ndGggLSAxID8gJ2xhc3Qtb3duZWQtcm93JyA6ICcnfSwgY2VsbHMpOworICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICBfY29uc3RydWN0UmFkaW9CdXR0b25zKGxhYmVsLCByZXZpc2lv
blNlY3Rpb24sIHJldmlzaW9uRWRpdG9yLCBkZWZhdWx0TGFiZWwsIHJldmlzaW9uSW5mb1Jvdykg
eworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50Owor
ICAgICAgICBjb25zdCBjaGVja2VkID0gbGFiZWwgPT09IHJldmlzaW9uU2VjdGlvbi5jaGVja2Vk
TGFiZWwoKTsKKyAgICAgICAgY29uc3QgcmFkaW9CdXR0b24gPSBlbGVtZW50KCdpbnB1dCcsIHt0
eXBlOiAncmFkaW8nLCBuYW1lOiBgJHtkZWZhdWx0TGFiZWx9LSR7cmV2aXNpb25JbmZvUm93LnJl
cG9zaXRvcnkoKS5pZCgpfS1yYWRpb2AsIGNoZWNrZWQsCisgICAgICAgICAgICBvbmNoYW5nZTog
KCkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JldmlzaW9uID0gcmV2aXNpb25JbmZv
Um93LnJldmlzaW9uU2VjdGlvbkZvckxhYmVsKGxhYmVsKS5kZWZhdWx0UmV2aXNpb24oKTsKKyAg
ICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvci52YWx1ZSA9IG5ld1JldmlzaW9uOworICAgICAg
ICAgICAgICAgIHJldmlzaW9uU2VjdGlvbi51cGRhdGUobmV3UmV2aXNpb24sIGxhYmVsKTsKKyAg
ICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9fSk7CisgICAg
ICAgIHJldHVybiBlbGVtZW50KCd0ZCcsIGVsZW1lbnQoJ2xhYmVsJywgW3JhZGlvQnV0dG9uLCBs
YWJlbF0pKTsKKyAgICB9CiAKLSAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTsKLSAgICAgICAgZm9y
IChsZXQgbGFiZWxUb0Nob29zZSBpbiBjb21taXRTZXRNYXApIHsKLSAgICAgICAgICAgIGNvbnN0
IGNvbW1pdCA9IGNvbW1pdFNldE1hcFtsYWJlbFRvQ2hvb3NlXS5jb21taXRGb3JSZXBvc2l0b3J5
KHJlcG9zaXRvcnkpOwotICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGxhYmVsVG9DaG9vc2Ug
PT0gcm93TGFiZWw7Ci0gICAgICAgICAgICBjb25zdCByYWRpb0J1dHRvbiA9IGVsZW1lbnQoJ2lu
cHV0Jywge3R5cGU6ICdyYWRpbycsIG5hbWU6IGAke3Jvd0xhYmVsfS0ke3JlcG9zaXRvcnkuaWQo
KX0tcmFkaW9gLCBjaGVja2VkLAotICAgICAgICAgICAgICAgIG9uY2hhbmdlOiAoKSA9PiB7IHJl
dmlzaW9uRWRpdG9yLnZhbHVlID0gY29tbWl0ID8gY29tbWl0LnJldmlzaW9uKCkgOiAnJzsgfX0p
OworICAgIF9jb25zdHJ1Y3RDZWxsc0luUm93KHJldmlzaW9uSW5mb1JvdywgY29tbWl0U2V0TGFi
ZWxzKQorICAgIHsKKyAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRl
RWxlbWVudDsKKyAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGgnLCB7Y29sc3Bhbjog
Mn0sIHJldmlzaW9uSW5mb1Jvdy5yZXBvc2l0b3J5KCkubGFiZWwoKSldOworICAgICAgICByZXZp
c2lvbkluZm9Sb3cubGFiZWxzKCkuZm9yRWFjaCgoZGVmYXVsdExhYmVsKSA9PiB7CisgICAgICAg
ICAgICBjb25zdCByZXZpc2lvblNlY3Rpb24gPSByZXZpc2lvbkluZm9Sb3cucmV2aXNpb25TZWN0
aW9uRm9yTGFiZWwoZGVmYXVsdExhYmVsKTsKKyAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uRWRp
dG9yID0gZWxlbWVudCgnaW5wdXQnLCB7dmFsdWU6IHJldmlzaW9uU2VjdGlvbi5yZXZpc2lvbigp
LCBvbmNoYW5nZTogKCkgPT4geworICAgICAgICAgICAgICAgIHJldmlzaW9uU2VjdGlvbi51cGRh
dGUocmV2aXNpb25FZGl0b3IudmFsdWUsIGRlZmF1bHRMYWJlbCk7CisgICAgICAgICAgICAgICAg
dGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgIH19KTsKKyAgICAgICAgICAgIGNv
bW1pdFNldExhYmVscy5mb3JFYWNoKChsYWJlbCkgPT4geworICAgICAgICAgICAgICAgIGNlbGxz
LnB1c2godGhpcy5fY29uc3RydWN0UmFkaW9CdXR0b25zKGxhYmVsLCByZXZpc2lvblNlY3Rpb24s
IHJldmlzaW9uRWRpdG9yLCBkZWZhdWx0TGFiZWwsIHJldmlzaW9uSW5mb1JvdykpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgcmV2aXNpb25F
ZGl0b3IpKTsKKyAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIGlmIChjaGVja2VkKQotICAgICAg
ICAgICAgICAgIHJldmlzaW9uRWRpdG9yLnZhbHVlID0gY29tbWl0ID8gY29tbWl0LnJldmlzaW9u
KCkgOiAnJzsKLSAgICAgICAgICAgIG5vZGVzLnB1c2goZWxlbWVudCgndGQnLCBlbGVtZW50KCds
YWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFiZWxUb0Nob29zZV0pKSk7CisgICAgICAgIGlmICghcmV2
aXNpb25JbmZvUm93LnJlcG9zaXRvcnkoKS5vd25lZFJlcG9zaXRvcmllcygpKSB7CisgICAgICAg
ICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJykpOyAvLyBFbXB0eSBjZWxsIGlmIG5vIHBsdXMg
YnV0dG9uCisgICAgICAgICAgICByZXR1cm4gY2VsbHM7CiAgICAgICAgIH0KLSAgICAgICAgbm9k
ZXMucHVzaChlbGVtZW50KCd0ZCcsIHJldmlzaW9uRWRpdG9yKSk7CiAKLSAgICAgICAgcmV0dXJu
IG5vZGVzOworICAgICAgICBjb25zdCBwbHVzQnV0dG9uID0gbmV3IFBsdXNCdXR0b24ocmV2aXNp
b25JbmZvUm93LnJlcG9zaXRvcnkoKS5sYWJlbCgpKTsKKyAgICAgICAgcGx1c0J1dHRvbi5saXN0
ZW5Ub0FjdGlvbihyZXZpc2lvbkluZm9Sb3cucmVwb3NpdG9yeSgpLmxhYmVsKCksICgpID0+IHJl
dmlzaW9uSW5mb1Jvdy5hZGRPd25lZFJldmlzaW9uSW5mb1Jvd0FzeW5jKCkudGhlbigoKSA9PiB0
aGlzLmVucXVldWVUb1JlbmRlcigpLCAoKSA9PiBhbGVydCgnRmFpbGVkIGZldGNoaW5nIHNvbWUg
b3duZWQgY29tbWl0cycpKSk7CisgICAgICAgIGNlbGxzLnB1c2goZWxlbWVudCgndGQnLCBwbHVz
QnV0dG9uKSk7CisgICAgICAgIHJldHVybiBjZWxsczsKICAgICB9CiAKICAgICBzdGF0aWMgY3Nz
VGVtcGxhdGUoKQpAQCAtMTUwLDYgKzM4OSwyMSBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3Jv
dXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgICAgICAgICAgZm9udC1zaXpl
OiAwLjlyZW07CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGQu
b3duZXItcmVwb3NpdG9yeS1sYWJlbCB7CisgICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogc29s
aWQgMnB4IHRyYW5zcGFyZW50OworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlk
IDFweCB0cmFuc3BhcmVudDsKKyAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDJyZW07CisgICAg
ICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICNjdXN0b20tdGFibGUgLmxhc3Qtb3duZWQtcm93IHRkLm93bmVyLXJlcG9zaXRvcnktbGFi
ZWwgeworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGRkOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRoIHsKKyAgICAgICAgICAg
ICAgICBtaW4td2lkdGg6IDEycmVtOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAjY3Vz
dG9tLXRhYmxlIHRoZWFkIHRkLAogICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0aCB7CiAgICAg
ICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9taW51cy1idXR0b24uanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzI4YTFlYTViNTY2YjBlNzk3MDg4ZWFhMTEwMDMwY2Q4ZjVkODBlMwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9u
ZW50cy9taW51cy1idXR0b24uanMKQEAgLTAsMCArMSwzMyBAQAorCitjbGFzcyBNaW51c0J1dHRv
biBleHRlbmRzIEJ1dHRvbkJhc2UgeworICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSkKKyAgICB7
CisgICAgICAgIHN1cGVyKCdtaW51cy1idXR0b24nKTsKKyAgICAgICAgdGhpcy5fZXZlbnROYW1l
ID0gZXZlbnROYW1lIHx8ICdtaW51cy1idXR0b24tZXZlbnQnCisgICAgfQorCisgICAgZGlkQ29u
c3RydWN0U2hhZG93VHJlZSgpCisgICAgeworICAgICAgICB0aGlzLmNvbnRlbnQoJ2J1dHRvbicp
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4g
eworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbih0aGlzLl9ldmVudE5hbWUpOworICAg
ICAgICB9KSk7CisgICAgfQorCisgICAgc3RhdGljIGJ1dHRvbkNvbnRlbnQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGA8ZyBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBpZD0iaWNv
biI+CisgICAgICAgICAgICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgZmlsbD0idHJh
bnNwYXJlbnQiLz4KKyAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjUsNTAgNzUsNTAiIC8+
CisgICAgICAgIDwvZz5gOworICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gc3VwZXIuY3NzVGVtcGxhdGUoKSArIGAKKyAgICAgICAgYSB7Cisg
ICAgICAgICAgICBwYWRkaW5nLXRvcDogMC4xMnJlbTsKKyAgICAgICAgfWA7CisgICAgfQorfQor
CitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ21pbnVzLWJ1dHRvbicsIE1pbnVzQnV0dG9u
KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9u
ZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMKaW5kZXggNjhmNzQzMzg1
YjQ1MDVlOWVmZWQ3ZDRmNGYwN2RmYzZmNWYxMmUxMi4uMDliOTQ0YWZhZTY3NDE2NTQ4OGY2Y2Uy
MzI0YTQyYTlhNGYyNDkwNCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIu
anMKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgT3duZWRDb21taXRWaWV3ZXIgZXh0ZW5kcyBDb21w
b25lbnRCYXNlIHsKICAgICAgICAgaWYgKCFwcmV2aW91c093bmVkQ29tbWl0cyB8fCAhY3VycmVu
dE93bmVkQ29tbWl0cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBkaWZm
ZXJlbmNlID0gQ29tbWl0TG9nLmRpZmZPd25lZENvbW1pdHModGhpcy5fcHJldmlvdXNDb21taXQs
IHRoaXMuX2N1cnJlbnRDb21taXQpOworICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gQ29tbWl0
TG9nLmRpZmZNdWx0aXBsZU93bmVkQ29tbWl0cyh0aGlzLl9wcmV2aW91c0NvbW1pdCwgdGhpcy5f
Y3VycmVudENvbW1pdCk7CiAgICAgICAgIGNvbnN0IHNvcnRlZFJlcG9zaXRvcmllcyA9IFJlcG9z
aXRvcnkuc29ydEJ5TmFtZShbLi4uZGlmZmVyZW5jZS5rZXlzKCldKTsKICAgICAgICAgY29uc3Qg
ZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKIApkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpz
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3BsdXMtYnV0
dG9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjJhZTgwZGMxNDAzMjNiNmE4MDc0MDNkMjRmMDk2MjcxY2M0ZDg4
NzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMKQEAgLTAsMCArMSwzNCBAQAorCitjbGFzcyBQbHVz
QnV0dG9uIGV4dGVuZHMgQnV0dG9uQmFzZSB7CisgICAgY29uc3RydWN0b3IoZXZlbnROYW1lKQor
ICAgIHsKKyAgICAgICAgc3VwZXIoJ3BsdXMtYnV0dG9uJyk7CisgICAgICAgIHRoaXMuX2V2ZW50
TmFtZSA9IGV2ZW50TmFtZSB8fCAncGx1cy1idXR0b24tZXZlbnQnOworICAgIH0KKworICAgIGRp
ZENvbnN0cnVjdFNoYWRvd1RyZWUoKQorICAgIHsKKyAgICAgICAgdGhpcy5jb250ZW50KCdidXR0
b24nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY3JlYXRlRXZlbnRIYW5kbGVyKCgp
ID0+IHsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24odGhpcy5fZXZlbnROYW1lKTsK
KyAgICAgICAgfSkpOworICAgIH0KKworICAgIHN0YXRpYyBidXR0b25Db250ZW50KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBgPGcgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgaWQ9
Imljb24iPgorICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIGZpbGw9
InRyYW5zcGFyZW50Ii8+CisgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjUwLDI1IDUwLDc1
IiAvPgorICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyNSw1MCA3NSw1MCIgLz4KKyAgICAg
ICAgPC9nPmA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdXBlci5jc3NUZW1wbGF0ZSgpICsgYAorICAgICAgICBhIHsKKyAgICAgICAg
ICAgIHBhZGRpbmctdG9wOiAwLjEycmVtOworICAgICAgICB9YDsKKyAgICB9Cit9CisKK0NvbXBv
bmVudEJhc2UuZGVmaW5lRWxlbWVudCgncGx1cy1idXR0b24nLCBQbHVzQnV0dG9uKTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbCBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAppbmRleCA0NmU2YWRj
NDRlMjI3NTQ5MDgxNzUwMjRmMDlkYzU5MGFkMmRhYWQyLi4yN2Q4NGU0N2Y4NGJiMWEwZjcwN2Y0
ODM2OTkzZmFjNmVlODFlZTA4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9pbmRleC5odG1sCkBAIC05OCw2ICs5OCw5IEBAIFJ1biB0b29scy9idW5kbGUtdjMtc2Ny
aXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9kdWN0aW9uLmApOwogICAgICAg
ICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jdXN0b20tYW5hbHlzaXMtdGFzay1jb25maWd1cmF0
b3IuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jdXN0b20t
Y29uZmlndXJhdGlvbi10ZXN0LWdyb3VwLWZvcm0uanMiPjwvc2NyaXB0PgogICAgICAgICA8c2Ny
aXB0IHNyYz0iY29tcG9uZW50cy9pbnN0YW50LWZpbGUtdXBsb2FkZXIuanMiPjwvc2NyaXB0Pgor
ICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9wbHVzLWJ1dHRvbi5qcyI+PC9zY3JpcHQ+
CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcyI+PC9zY3Jp
cHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2NvbWJvLWJveC5qcyI+PC9zY3Jp
cHQ+CiAKICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2UuanMiPjwvc2NyaXB0PgogICAg
ICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS1yb3V0ZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxv
Zy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1s
b2cuanMKaW5kZXggN2JlNDIxNDU2Y2FkZDVmYjMwZjNjM2MyYzU3MGNlMmViZGExNzI3MS4uMThh
NzFkZGY0NGY0YjcxNGFhM2U2M2Y0ZWZhMTc1MGYwNGYyZmZkNiAxMDA2NDQKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcworKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCkBA
IC0zOSwxMCArMzksOCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3Qg
ewogCiAgICAgbGFiZWwoKQogICAgIHsKLSAgICAgICAgdmFyIHJldmlzaW9uID0gdGhpcy5yZXZp
c2lvbigpOwotICAgICAgICBpZiAocGFyc2VJbnQocmV2aXNpb24pID09IHJldmlzaW9uKSAvLyBl
LmcuIHIxMjM0NQotICAgICAgICAgICAgcmV0dXJuICdyJyArIHJldmlzaW9uOwotICAgICAgICBl
bHNlIGlmIChyZXZpc2lvbi5sZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKKyAgICAgICAg
Y29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uKCk7CisgICAgICAgIGlmIChyZXZpc2lvbi5s
ZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKICAgICAgICAgICAgIHJldHVybiByZXZpc2lv
bi5zdWJzdHJpbmcoMCwgOCk7CiAgICAgICAgIHJldHVybiByZXZpc2lvbjsKICAgICB9CkBAIC0x
MTEsMjMgKzEwOSwyMyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3Qg
ewogICAgICAgICByZXR1cm4gb3duZWRDb21taXRNYXA7CiAgICAgfQogCi0gICAgc3RhdGljIGRp
ZmZPd25lZENvbW1pdHMocHJldmlvdXNDb21taXQsIGN1cnJlbnRDb21taXQpCisgICAgc3RhdGlj
IGRpZmZNdWx0aXBsZU93bmVkQ29tbWl0cyguLi5jb21taXRzKQogICAgIHsKLSAgICAgICAgY29u
c29sZS5hc3NlcnQocHJldmlvdXNDb21taXQpOwotICAgICAgICBjb25zb2xlLmFzc2VydChjdXJy
ZW50Q29tbWl0KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJldmlvdXNDb21taXQuX293bmVk
Q29tbWl0cyk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJlbnRDb21taXQuX293bmVkQ29t
bWl0cyk7Ci0KLSAgICAgICAgY29uc3QgcHJldmlvdXNPd25lZENvbW1pdE1hcCA9IHByZXZpb3Vz
Q29tbWl0Ll9idWlsZE93bmVkQ29tbWl0TWFwKCk7Ci0gICAgICAgIGNvbnN0IGN1cnJlbnRPd25l
ZENvbW1pdE1hcCA9IGN1cnJlbnRDb21taXQuX2J1aWxkT3duZWRDb21taXRNYXAoKTsKLSAgICAg
ICAgY29uc3Qgb3duZWRDb21taXRSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KFsuLi5jdXJyZW50T3du
ZWRDb21taXRNYXAua2V5cygpLCAuLi5wcmV2aW91c093bmVkQ29tbWl0TWFwLmtleXMoKV0pOwor
ICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRzLmxlbmd0aCA+PSAyKTsKKyAgICAgICAgZm9y
IChsZXQgY29tbWl0IG9mIGNvbW1pdHMpIHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNv
bW1pdCk7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXQuX293bmVkQ29tbWl0cyk7
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBvd25lZENvbW1pdE1hcExpc3QgPSBjb21taXRz
Lm1hcCgoY29tbWl0KSA9PiBjb21taXQuX2J1aWxkT3duZWRDb21taXRNYXAoKSk7CisgICAgICAg
IGNvbnN0IG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzID0gbmV3IFNldChvd25lZENvbW1pdE1hcExp
c3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gQXJyYXkuZnJvbShvd25lZENvbW1pdE1hcC5rZXlz
KCkpKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpKSk7CiAgICAgICAgIGNvbnN0IGRpZmZl
cmVuY2UgPSBuZXcgTWFwOwogCiAgICAgICAgIG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzLmZvckVh
Y2goKG93bmVkQ29tbWl0UmVwb3NpdG9yeSkgPT4gewotICAgICAgICAgICAgY29uc3QgY3VycmVu
dFJldmlzaW9uID0gY3VycmVudE93bmVkQ29tbWl0TWFwLmdldChvd25lZENvbW1pdFJlcG9zaXRv
cnkpOwotICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSZXZpc2lvbiA9IHByZXZpb3VzT3duZWRD
b21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSk7Ci0gICAgICAgICAgICBpZiAoY3Vy
cmVudFJldmlzaW9uICE9IHByZXZpb3VzUmV2aXNpb24pCi0gICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZS5zZXQob3duZWRDb21taXRSZXBvc2l0b3J5LCBbcHJldmlvdXNSZXZpc2lvbiwgY3VycmVu
dFJldmlzaW9uXSk7CisgICAgICAgICAgICBjb25zdCByZXZpc2lvbnMgPSBvd25lZENvbW1pdE1h
cExpc3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gb3duZWRDb21taXRNYXAuZ2V0KG93bmVkQ29t
bWl0UmVwb3NpdG9yeSkpOworICAgICAgICAgICAgY29uc3QgdW5pcXVlUmV2aXNpb25zID0gbmV3
IFNldChyZXZpc2lvbnMpOworICAgICAgICAgICAgaWYgKHVuaXF1ZVJldmlzaW9ucy5zaXplID4g
MSkKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlLnNldChvd25lZENvbW1pdFJlcG9zaXRvcnks
IHJldmlzaW9ucyk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIHJldHVybiBkaWZmZXJlbmNlOwpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29t
bWl0LXNldC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2Nv
bW1pdC1zZXQuanMKaW5kZXggYjE3OGFjODBlNTIzZDQwYWZmMWNlZDJmMjk3NDQ2MDk4MjY1NmVm
Ny4uZWE5MTZlOWJlNTc3NzQ3N2NmNDExYTFkMjVkZWY5MjBiOWVkMTc4MCAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0
LmpzCkBAIC03MCw4ICs3MCw4IEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9i
amVjdCB7CiAgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlz
Ll9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CiAgICAgb3duZXJDb21t
aXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb0Nv
bW1pdE93bmVyTWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIHRvcExldmVsUmVwb3NpdG9yaWVz
KCkgeyByZXR1cm4gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKHRo
aXMuX3JlcG9zaXRvcmllcy5maWx0ZXIoKHJlcG9zaXRvcnkpID0+ICF0aGlzLm93bmVyUmV2aXNp
b25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSk7IH0KLQogICAgIG93bmVkUmVwb3NpdG9yaWVz
Rm9yT3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVyUmVwb3Np
dG9yeVRvT3duZWRSZXBvc2l0b3JpZXNNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CisgICAgb3duZWRS
ZXBvc2l0b3JpZXMoKSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3JpZXMuZmlsdGVyKChyZXBvc2l0
b3J5KSA9PiByZXBvc2l0b3J5Lm93bmVySWQpOyB9OwogCiAgICAgcmV2aXNpb25Gb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpCiAgICAgewpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvcmVwb3NpdG9yeS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3JlcG9zaXRvcnkuanMKaW5kZXggMDg5ZjYyZTI0MTdlZWIx
ZTUwNDQ4ZDZiYzA1Nzc2ZGI4NjY1N2FkZC4uZTNjNzQ3N2MzMWU5MTUzOTc1N2Q4NzAwNzI0NzQz
NWM1MmUyYjc5MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvcmVwb3NpdG9yeS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzCkBAIC0yNiw2ICsyNiwxMiBAQCBjbGFzcyBSZXBv
c2l0b3J5IGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAgIHJldHVybiBtYXAgPyBtYXBb
bmFtZV0gOiBudWxsOwogICAgIH0KIAorICAgIGZpbmRPd25lZFJlcG9zaXRvcnlCeU5hbWUobmFt
ZSkKKyAgICB7CisgICAgICAgIGNvbnN0IG93bmVyc2hpcHMgPSB0aGlzLm5hbWVkU3RhdGljTWFw
KCdyZXBvc2l0b3J5T3duZXJzaGlwcycpOworICAgICAgICByZXR1cm4gb3duZXJzaGlwcyA/IG93
bmVyc2hpcHNbdGhpcy5pZCgpXS5maW5kKChyZXBvc2l0b3J5KSA9PiByZXBvc2l0b3J5Lm5hbWUo
KSA9PSBuYW1lKSA6IG51bGw7CisgICAgfQorCiAgICAgaGFzVXJsRm9yUmV2aXNpb24oKSB7IHJl
dHVybiAhIXRoaXMuX3VybDsgfQogCiAgICAgdXJsRm9yUmV2aXNpb24oY3VycmVudFJldmlzaW9u
KQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0
LWxvZy10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1p
dC1sb2ctdGVzdHMuanMKaW5kZXggM2IzMWU1YzA3MWQxY2MwNWNjOGE4YzBkNDZiZjNkNWEzNjdl
ZjMwOS4uNzI5ZDQyNDc5N2RhYTU5YTY0M2M4NmQ3ZThlZDk1ZjgxNTcyOTMyNyAxMDA2NDQKLS0t
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5q
cworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRl
c3RzLmpzCkBAIC05NCw4ICs5NCw4IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAo
KSB7CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIAogICAgIGRlc2NyaWJlKCdsYWJlbCcsIGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgaXQoJ3Nob3VsZCBwcmVmaXggU1ZOIHJldmlzaW9uIHdpdGgg
InIiJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdENvbW1p
dCgpLmxhYmVsKCksICdyMjAwODA1Jyk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBT
Vk4gcmV2aXNpb24iJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdl
YmtpdENvbW1pdCgpLmxhYmVsKCksICcyMDA4MDUnKTsKICAgICAgICAgfSk7CiAKICAgICAgICAg
aXQoJ3Nob3VsZCB0cnVuY2F0ZSBhIEdpdCBoYXNoIGF0IDh0aCBjaGFyYWN0ZXInLCBmdW5jdGlv
biAoKSB7CkBAIC0xMDgsOCArMTA4LDggQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9u
ICgpIHsKICAgICB9KTsKIAogICAgIGRlc2NyaWJlKCd0aXRsZScsIGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgaXQoJ3Nob3VsZCBwcmVmaXggU1ZOIHJldmlzaW9uIHdpdGggInIiJywgZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdENvbW1pdCgpLnRpdGxlKCksICdX
ZWJLaXQgYXQgcjIwMDgwNScpOworICAgICAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgU1ZOIHJl
dmlzaW9uIicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRD
b21taXQoKS50aXRsZSgpLCAnV2ViS2l0IGF0IDIwMDgwNScpOwogICAgICAgICB9KTsKIAogICAg
ICAgICBpdCgnc2hvdWxkIHRydW5jYXRlIGEgR2l0IGhhc2ggYXQgOHRoIGNoYXJhY3RlcicsIGZ1
bmN0aW9uICgpIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVu
Y3Rpb24gKCkgewogICAgIGRlc2NyaWJlKCdkaWZmJywgZnVuY3Rpb24gKCkgewogICAgICAgICBp
dCgnc2hvdWxkIHVzZSBsYWJlbCgpIGFzIHRoZSBsYWJlbCB0aGUgcHJldmlvdXMgY29tbWl0IGlz
IG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHdl
YmtpdENvbW1pdCgpLmRpZmYoKSwgewotICAgICAgICAgICAgICAgIGxhYmVsOiAncjIwMDgwNScs
CisgICAgICAgICAgICAgICAgbGFiZWw6ICcyMDA4MDUnLAogICAgICAgICAgICAgICAgIHVybDog
J2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIwMDgwNScsCiAgICAgICAgICAgICAg
ICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQKICAgICAgICAgICAgIH0pOwpAQCAtMjg3
LDcgKzI4Nyw3IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAoKSB7CiAKICAgICAg
ICAgICAgICAgICByZXR1cm4gb3RoZXJGZXRjaGluZ1Byb21pc2U7CiAgICAgICAgICAgICB9KS50
aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gQ29tbWl0TG9n
LmRpZmZPd25lZENvbW1pdHMob25lQ29tbWl0LCBvdGhlckNvbW1pdCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHMo
b25lQ29tbWl0LCBvdGhlckNvbW1pdCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGRp
ZmZlcmVuY2Uuc2l6ZSwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGRpZmZlcmVu
Y2Uua2V5cygpLm5leHQoKS52YWx1ZSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpOwogICAg
ICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9tZWFzdXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtYWRhcHRvci10ZXN0cy5qcwppbmRleCAyNGE0OTA3
MjE3NmNhMTQ0Y2JmZmEzZGEwYWFkODJkMGY3ZDY5ODdhLi5mMThkNWZiMTg4MjA5YWU5ZTA2Nzg2
OWUyN2UwYjM1OWM3OGUyMGI2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
dW5pdC10ZXN0cy9tZWFzdXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LWFkYXB0b3ItdGVzdHMuanMKQEAg
LTEwNyw4ICsxMDcsOCBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRBZGFwdG9yJywgZnVuY3Rpb24g
KCkgewogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5pZCgpLCAyMjIpOwogICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKCtjb21taXQudGltZSgpLCAxNDQ3NzA3MDU1NTc2KTsKICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChjb21taXQucmV2aXNpb24oKSwgJzE5MjQ4MycpOwotICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAncjE5MjQ4MycpOwotICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2ViS2l0IGF0IHIxOTI0ODMnKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQubGFiZWwoKSwgJzE5MjQ4MycpOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2ViS2l0IGF0IDE5MjQ4MycpOwog
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC51cmwoKSwgJ2h0dHA6Ly90cmFjLndlYmtp
dC5vcmcvY2hhbmdlc2V0LzE5MjQ4MycpOwogICAgICAgICB9KTsKIApAQCAtMTIyLDQgKzEyMiw0
IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudEFkYXB0b3InLCBmdW5jdGlvbiAoKSB7CiAgICAgICAg
IH0pOwogCiAgICAgfSk7Ci19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9KTsKZGlm
ZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50
LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1
cmVtZW50LXNldC10ZXN0cy5qcwppbmRleCBkZDI4YTA3ZWQ0MzhkOWQ1Njg5OTdlZDc2Y2YwMmY2
Nzc5NDUzZjJmLi41Nzc4ZGY3NmEzM2QwMDdhMDE5NTQwMDJjM2VmYmVhOWU5YmY0YzY5IDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9tZWFzdXJlbWVudC1z
ZXQtdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVh
c3VyZW1lbnQtc2V0LXRlc3RzLmpzCkBAIC04MTMsOCArODEzLDggQEAgZGVzY3JpYmUoJ01lYXN1
cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQu
cmV2aXNpb24oKSwgJzIxMDA5NicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21t
aXQubWVzc2FnZSgpLCBudWxsKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0
LnVybCgpLCAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjEwMDk2Jyk7Ci0gICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAncjIxMDA5NicpOwotICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQudGl0bGUoKSwgJ1dlYktpdCBhdCByMjEw
MDk2Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAnMjEw
MDk2Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2Vi
S2l0IGF0IDIxMDA5NicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRTZXQu
bGF0ZXN0Q29tbWl0VGltZSgpLCBjb21taXRUaW1lKTsKIAogICAgICAgICAgICAgICAgIGNvbnN0
IGJ1aWxkID0gcG9pbnQuYnVpbGQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323075</attachid>
            <date>2017-10-06 18:43:56 -0700</date>
            <delta_ts>2017-11-15 16:36:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171006184355.patch</filename>
            <type>text/plain</type>
            <size>37320</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTU2CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCA0YmVhMWZkNjU0ZjUxZTk4OTkwNmY2Mjk3YjllOWE4NjNjM2ZjNjA3Li5lNWI0NGY0YmQ2
OTAzNGY0YTIyMWI3OThjYjQ5NmI3MmM3YzVlMzM1IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxNy0xMC0wNSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9u
ZW50cy9jb21iby1ib3guanM6IEFkZGVkIGEgY29tYm8tYm94IHdoaWNoIHN1cHBvcnRzIGF1dG8g
Y29tcGxldGlvbi4KKyAgICAgICAgKENvbWJvQm94KToKKyAgICAgICAgKENvbWJvQm94LnByb3Rv
dHlwZS5fY3JlYXRlQ2FuZGlkYXRlTGlzdCk6IENyZWF0ZSBhbiBodG1sIGxpc3QgYmFzZWQgb24g
Y2FuZGlkYXRlcy4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlkYXRlRWxlbWVu
dEZvckN1cnJlbnRJbmRleEluZGV4KTogUmV0dXJucyBjdXJyZW50bHkgZm9jdXNlZCBsaXN0IGVs
ZW1lbnQuCisgICAgICAgIChDb21ib0JveC5wcm90b3R5cGUuX2NhbmRpZGF0ZU5hbWVGb3JDdXJy
ZW50SW5kZXgpOiBSZXR1cm5zIGN1cnJlbnRseSBmb2N1c2VkIGNhbmRpZGF0ZS4KKyAgICAgICAg
KENvbWJvQm94LnByb3RvdHlwZS5fYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0Y2hpbmdJdGVtKTog
U3VwcG9ydHMgYXV0byBjb21wbGV0aW9uLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9k
aWRBcnJvd1VwT3JEb3duKTogU3VwcG9ydHMgYXJyb3cgdXAvZG93bi4KKyAgICAgICAgKENvbWJv
Qm94LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoQ29tYm9Cb3guaHRtbFRlbXBsYXRlKToK
KyAgICAgICAgKENvbWJvQm94LmNzc1RlbXBsYXRlKToKKyAgICAgICAgKiBwdWJsaWMvdjMvY29t
cG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzOgorICAgICAgICAoUmV2aXNp
b25JbmZvUm93QmFzZSk6IEJhc2UgY2xhc3MgZm9yIGRlY3JpYmluZyBhIHJvdyB0aGF0IGNvbnRh
aW5zIHJldmlzaW9uIGluZm9ybWF0aW9uLgorICAgICAgICAoUmV2aXNpb25JbmZvUm93QmFzZS5w
cm90b3R5cGUucmVwb3NpdG9yeSk6IFJldHVybnMgdGhlIHJlcG9zaXRvcnkgb2YgdGhpcyByb3cu
CisgICAgICAgIChSZXZpc2lvbkluZm9Sb3dCYXNlLnByb3RvdHlwZS5yZXZpc2lvblNlY3Rpb25G
b3JMYWJlbCk6IFJldHVybnMgYSByZXZpc2lvbiBzZWN0aW9uIGZvciBhIGxhYmVsLgorICAgICAg
ICAoUmV2aXNpb25JbmZvUm93QmFzZS5wcm90b3R5cGUuZGlkUmV2aXNpb25DaGFuZ2UpOiBEZWZh
dWx0IGltcGxlbWVudGF0aW9uIHdoZW4gcmV2aXNpb24gb24gdGhpcyByb3cgY2hhbmdlZC4KKyAg
ICAgICAgKFJldmlzaW9uSW5mb1Jvd0Jhc2UucHJvdG90eXBlLnJldmlzaW9uRm9yTGFiZWwpOiBS
ZXR1cm5zIGEgcmV2aXNpb24gZm9yIGEgbGFiZWwuCisgICAgICAgIChSZXZpc2lvbkluZm9Sb3dC
YXNlLnByb3RvdHlwZS5sYWJlbHMpOiBSZXR1cm5zIGFsbCBsYWJlbHMgaW4gYSByb3cuCisgICAg
ICAgIChSZXZpc2lvbkluZm9Sb3dCYXNlLnByb3RvdHlwZS5hbGxSZXZpc2lvbnNBcmVTZXQpOiBS
ZXR1cm5zIHdoZXRoZXIgcmV2aXNpb25zIG9uIHRoaXMgcm93IGFyZSBzZXQuCisgICAgICAgIChS
ZXZpc2lvbkluZm9Sb3cpOiBSZXZpc2lvbiBpbmZvcm1hdGlvbiBmb3IgYSByb3cgd2l0aCByZXBv
c2l0b3J5IHRoYXQgaXMgbm90IGFuIG93bmVkIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKFJldmlz
aW9uSW5mb1Jvdy5wcm90b3R5cGUuYWRkT3duZWRSZXZpc2lvbkluZm9Sb3dBc3luYyk6IEFkZCBv
d25lZCByZXZpc2lvbiBpbmYgcm93IGFmdGVyIGxvYWRpbmcgb3duZWQgY29tbWl0cyBpbmZvcm1h
dGlvbi4KKyAgICAgICAgKFJldmlzaW9uSW5mb1Jvdy5wcm90b3R5cGUucmVtb3ZlT3duZWRSZXZp
c2lvbkluZm9Sb3cpOiBSZW1vdmUgYW4gZ2l2ZW4gb3duZWQgcmV2aXNpb24gaW5mbyByb3cuCisg
ICAgICAgIChSZXZpc2lvbkluZm9Sb3cucHJvdG90eXBlLmNoYW5nZWRPd25lZFJlcG9zaXRvcnlO
YW1lcyk6IFJldHVybnMgYSBsaXN0IG9mIG93bmVkIHJlcG9zaXRvcnkgbmFtZXMgdGhvc2UgaGFz
IGNoYW5nZWQgYmV0d2VlbiBjb21taXRzIGluIHRoaXMgcm93LgorICAgICAgICAoUmV2aXNpb25J
bmZvUm93LnByb3RvdHlwZS5vd25lZFJldmlzaW9uSW5mb1Jvd3MpOiBSZXR1cm5zIGEgbGlzdCBv
ZiBvd25lZCByZXZpc2lvbiBpbmZvIHJvd3MuCisgICAgICAgIChSZXZpc2lvbkluZm9Sb3cucHJv
dG90eXBlLmFkZE93bmVkUmV2aXNpb25JbmZvUm93KTogQWRkIGFuIG93bmVkIHJldmlzaW9uIGlu
Zm8gcm93LgorICAgICAgICAoUmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5kaWRSZXZpc2lvbkNo
YW5nZSk6IFJlc2V0IG93bmVkIHJvdyBzdGF0dXMgd2hlbiByZXZpc2lvbiBvbiB0aGlzIHJvdyBj
aGFuZ2VkLgorICAgICAgICAoUmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5hbGxSZXZpc2lvbnNB
cmVTZXQpOiBDaGVjayB3aGV0aGVyIGFsbCByZXZpc2lvbnMgYXJlIHNldCBvbiBjdXJyZW50IHJv
dyBhbmQgb3duZWQgcm93cy4KKyAgICAgICAgKFJldmlzaW9uSW5mb1Jvdy5wcm90b3R5cGUuY29t
bWl0RGlmZmVyZW5jZUZvclJlcG9zaXRvcnkpOiBSZXR1cm4gYSBvYmplY3QgdGhhdCBjb250YWlu
cyBjb21taXQgZGlmZmVyZW50IGZvciBhIGdpdmUgcmVwb3NpdG9yeS4KKyAgICAgICAgKFJldmlz
aW9uSW5mb1Jvdy5wcm90b3R5cGUubG9hZE93bmVkQ29tbWl0cyk6IExvYWQgb3duZWQgY29tbWl0
cyBpbmZvcm1hdGlvbi4KKyAgICAgICAgKE93bmVkUmV2aXNpb25JbmZvUm93KTogT3duZWQgcmV2
aXNpb24gaW5mbyByb3cgd2hpY2ggbWF5IG5vdCBiZSBpbml0aWFsaXplZCB3aXRoIGEgcmVwb3Np
dG9yeS4KKyAgICAgICAgKE93bmVkUmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5zZXRSZXBvc2l0
b3J5QnlOYW1lKTogU2V0cyByZXBvc2l0b3J5IGZvciB0aGlzIHJvdy4KKyAgICAgICAgKE93bmVk
UmV2aXNpb25JbmZvUm93LnByb3RvdHlwZS5vd25lclJldmlzaW9uRm9yTGFiZWwpOiBSZXR1cm5z
IHRoZSByZXZpc2lvbiBmb3IgYSBsYWJlbC4KKyAgICAgICAgKFJldmlzaW9uU2VjdGlvbik6IENv
bnRhaW5zIGluZm9ybWF0aW9uIGZvciByZXZpc2lvbiBhbmQgcmFkaW8gYnV0dG9ucy4KKyAgICAg
ICAgKFJldmlzaW9uU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlKTogVXBkYXRlcyBjaGVja2VkIGxh
YmVsIGFuZCByZXZpc2lvbiB3aGVuIHJldmlzaW9uIGNoYW5nZWQuCisgICAgICAgIChSZXZpc2lv
blNlY3Rpb24ucHJvdG90eXBlLnJldmlzaW9uKTogUmV0dXJucyBhIHJldmlzaW9uIG9mIGN1cnJl
bnQgcmV2aXNpb24gc2VjdGlvbi4KKyAgICAgICAgKFJldmlzaW9uU2VjdGlvbi5wcm90b3R5cGUu
ZGVmYXVsdFJldmlzaW9uKTogUmV0dXJucyB0aGUgZGVmYXVsdCByZXZpc2lvbiBvZiBjdXJyZW50
IHJldmlzaW9uIHNlY3Rpb24uCisgICAgICAgIChSZXZpc2lvblNlY3Rpb24ucHJvdG90eXBlLmNo
ZWNrZWRMYWJlbCk6IFJldHVybnMgY2hlY2tlZCBsYWJlbCBmb3IgY3VycmVudCByZXZpc2lvbiBz
ZWN0aW9uLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSk6IE1ha2UgdGhpcyBm
b3JtIHN1cHBvcnQgc3BlY2lmeWluZyBvd25lZCByZXZpc2lvbiBpbmZvcm1hdGlvbnMuCisgICAg
ICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5kaWRDb25zdHJ1Y3RTaGFk
b3dUcmVlKTogQWRkZWQgbG9naWMgdG8gY29tcHV0ZSBpbnRpYWwgcmV2aXNpb24gaW5mbyB3aGVu
IGNsaWNraW5nIHRoZSAnQ3VzdG9taXplJyBsaW5rLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVz
dEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbXB1dGVJbml0aWFsUmV2aXNpb25JbmZvKTogQ29tcHV0
ZSBpbml0aWFsIHJldmlzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgdGFibGUuCisgICAgICAgIChD
dXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29tcHV0ZUNvbW1pdFNldE1hcCk6
IENvbXB1dGUgdGhlIGNvbW1pdCBzZXQgZm9yIEEvQiB0ZXN0aW5nLgorICAgICAgICAoQ3VzdG9t
aXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUucmVuZGVyKTogVXBkYXRlZC4KKyAgICAgICAg
KEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9yZW5kZXJDdXN0b21SZXZpc2lv
blRhYmxlKTogUmVuZGVycyBhIGN1c3RvbSByZXZpc2lvbiB0YWJsZS4KKyAgICAgICAgKEN1c3Rv
bWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RPd25lZFJldmlzaW9uSW5m
b1Jvd3MpOiBDb25zdHJ1Y3Qgb3duZWQgcmV2aXNpb24gaW5mbyByb3dzIGZyb20gYSBnaXZlbiBv
d25lciByZXZpc2lvbiBpbmZvIHJvdy4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZv
cm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RDZWxsc0luUm93KTogQ29uc3RydWN0IHJvd3MgZm9yIHRv
cCBsZXZlbCByZXBvc2l0b3JpZXMuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3Jt
LmNzc1RlbXBsYXRlKToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90
eXBlLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyk6IERlbGV0ZWQuCisgICAgICAgICog
cHVibGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzOiBBZGRlZCBhIG1pbnVzIGJ1dHRv
bi4KKyAgICAgICAgKE1pbnVzQnV0dG9uKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLnByb3RvdHlw
ZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLmJ1dHRvbkNv
bnRlbnQpOgorICAgICAgICAoTWludXNCdXR0b24uY3NzVGVtcGxhdGUpOgorICAgICAgICAqIHB1
YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanM6CisgICAgICAgIChPd25l
ZENvbW1pdFZpZXdlci5wcm90b3R5cGUuX3JlbmRlck93bmVkQ29tbWl0VGFibGUpOgorICAgICAg
ICAqIHB1YmxpYy92My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpzOiBBZGRlZCBhIHBsdXMgYnV0
dG9uLgorICAgICAgICAoUGx1c0J1dHRvbik6CisgICAgICAgIChQbHVzQnV0dG9uLnByb3RvdHlw
ZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKFBsdXNCdXR0b24uYnV0dG9uQ29u
dGVudCk6CisgICAgICAgIChQbHVzQnV0dG9uLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKiBwdWJs
aWMvdjMvaW5kZXguaHRtbDogQWRkZWQgcGx1cy9taW51cyBidXR0b25zIGFuZCBjb21iby1ib3gu
CisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzOgorICAgICAgICAoQ29t
bWl0TG9nLnByb3RvdHlwZS5sYWJlbCk6IFJlbW92ZSB0aGUgbG9naWMgdGhhdCBhZGRzICdyJyBw
cmVmaXggdG8gc3ZuIHJldmlzaW9uIHNpbmNlIHNvbWUgcmV2aXNpb25zIGZyb20gYSByZXBvc2l0
b3J5IHNvbWV0aW1lcyBhcmUgbGFiZWxlZCB3aXRoICdyJyBzb21ldGltZXMgYXJlIG5vdC4KKyAg
ICAgICAgKENvbW1pdExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHMpOiBBIG1vcmUgZ2VuZXJp
YyB2ZXJzaW9uIG9mIHdoaWNoIGNvbXBhcmVzIG11bHRpcGxlIG93bmVkIGNvbW1pdHMuCisgICAg
ICAgIChDb21taXRMb2cuZGlmZk93bmVkQ29tbWl0cyk6IERlbGV0ZWQuCisgICAgICAgICogcHVi
bGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzOgorICAgICAgICAoQ29tbWl0U2V0LnByb3RvdHlw
ZS5vd25lZFJlcG9zaXRvcmllcyk6IFJldHVybnMgYSBsaXN0IG9mIG93bmVkIHJlcG9zaXRvcmll
cy4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL3JlcG9zaXRvcnkuanM6CisgICAgICAgIChS
ZXBvc2l0b3J5LnByb3RvdHlwZS5maW5kT3duZWRSZXBvc2l0b3J5QnlOYW1lKTogUmV0dXJucyBh
biBvd25lZCByZXBvc2l0b3J5IGJ5IGEgZ2l2ZW4gbmFtZS4KKyAgICAgICAgKiB1bml0LXRlc3Rz
L2NvbW1pdC1sb2ctdGVzdHMuanM6CisgICAgICAgIChhc3NlcnQuZGVlcEVxdWFsLndlYmtpdENv
bW1pdC5kaWZmKTogVXBkYXRlIHVuaXQgdGVzdHMuCisgICAgICAgICogdW5pdC10ZXN0cy9tZWFz
dXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzOiBVcGRhdGUgdW5pdCB0ZXN0cy4KKyAgICAgICAgKiB1
bml0LXRlc3RzL21lYXN1cmVtZW50LXNldC10ZXN0cy5qczogVXBkYXRlIHVuaXQgdGVzdHMuCisK
IDIwMTctMDktMjggIERld2VpIFpodSAgPGRld2VpX3podUBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIHN5bmNpbmcgc2NyaXB0IHRvIGJlIGFibGUgdG8gYnVpbGQgYmluYXJ5IGZvciBjb21t
aXQgc2V0IHdpdGggb3duZWQgY29tbWl0cy4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3Jt
LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3Rv
bWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKaW5kZXggNDY5MzgwMTljYjM1YTI4MDk0ZTdmMjA4
ZTIzMmRmNGQyMDU2OWYyYi4uMjcyYWI1YTA4MDZmOTVkYjNkZmJhMmY4ZTI4NjgwM2YwMDc1Yjlh
ZiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZv
cm0uanMKQEAgLTEsMyArMSwxNDcgQEAKK2NsYXNzIFJldmlzaW9uSW5mb1Jvd0Jhc2UgeworICAg
IGNvbnN0cnVjdG9yKHJlcG9zaXRvcnksIGNvbW1pdFNldE1hcCkKKyAgICB7CisgICAgICAgIHRo
aXMuX3JlcG9zaXRvcnkgPSByZXBvc2l0b3J5OworICAgICAgICB0aGlzLl9yZXZpc2lvblNlY3Rp
b25zQnlMYWJlbCA9IHt9OworCisgICAgICAgIGlmIChyZXBvc2l0b3J5ICYmIGNvbW1pdFNldE1h
cCkgeworICAgICAgICAgICAgT2JqZWN0LmtleXMoY29tbWl0U2V0TWFwKS5mb3JFYWNoKChsYWJl
bCkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1pdFNldE1hcFtsYWJl
bF0uY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBjb25z
dCByZXZpc2lvbiA9IGNvbW1pdCA/IGNvbW1pdC5yZXZpc2lvbigpIDogJyc7CisgICAgICAgICAg
ICAgICAgdGhpcy5fcmV2aXNpb25TZWN0aW9uc0J5TGFiZWxbbGFiZWxdID0gbmV3IFJldmlzaW9u
U2VjdGlvbihyZXZpc2lvbiwgbGFiZWwsIHRoaXMpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmVwb3NpdG9yeSgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnk7IH0K
KyAgICByZXZpc2lvblNlY3Rpb25Gb3JMYWJlbChsYWJlbCkgeyByZXR1cm4gdGhpcy5fcmV2aXNp
b25TZWN0aW9uc0J5TGFiZWxbbGFiZWxdOyB9CisgICAgZGlkUmV2aXNpb25DaGFuZ2UoKSB7fTsK
KyAgICByZXZpc2lvbkZvckxhYmVsKGxhYmVsKSB7IHJldHVybiB0aGlzLnJldmlzaW9uU2VjdGlv
bkZvckxhYmVsKGxhYmVsKS5yZXZpc2lvbigpOyB9CisgICAgbGFiZWxzKCkgeyByZXR1cm4gT2Jq
ZWN0LmtleXModGhpcy5fcmV2aXNpb25TZWN0aW9uc0J5TGFiZWwpLnNvcnQoKTsgfQorICAgIGFs
bFJldmlzaW9uc0FyZVNldCgpIHsKKyAgICAgICAgZm9yIChsZXQgbGFiZWwgb2YgdGhpcy5sYWJl
bHMoKSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLnJldmlzaW9uRm9yTGFiZWwobGFiZWwpLmxl
bmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCitjbGFzcyBSZXZpc2lvbkluZm9Sb3cgZXh0ZW5kcyBS
ZXZpc2lvbkluZm9Sb3dCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKHJlcG9zaXRvcnksIGNvbW1p
dFNldE1hcCkKKyAgICB7CisgICAgICAgIHN1cGVyKHJlcG9zaXRvcnksIGNvbW1pdFNldE1hcCk7
CisgICAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSByZXBvc2l0b3J5OworICAgICAgICB0aGlzLl9v
d25lZENvbW1pdHMgPSBbXTsKKyAgICAgICAgdGhpcy5fb3duZWRDb21taXREaWZmZXJlbmNlcyA9
IG5ldyBNYXA7CisgICAgICAgIHRoaXMuX293bmVkUmV2aXNpb25JbmZvUm93cyA9IFtdOworICAg
ICAgICB0aGlzLl9jaGFuZ2VkT3duZWRSZXBvc2l0b3J5TmFtZXMgPSBbXTsKKyAgICB9CisKKyAg
ICBhZGRPd25lZFJldmlzaW9uSW5mb1Jvd0FzeW5jKCkgeyByZXR1cm4gdGhpcy5sb2FkT3duZWRD
b21taXRzKCkudGhlbigoKSA9PiB0aGlzLmFkZE93bmVkUmV2aXNpb25JbmZvUm93KG5ldyBPd25l
ZFJldmlzaW9uSW5mb1Jvdyh0aGlzKSkpOyB9CisKKyAgICByZW1vdmVPd25lZFJldmlzaW9uSW5m
b1Jvdyhvd25lZFJldmlzaW9uUm93KSB7IHRoaXMuX293bmVkUmV2aXNpb25JbmZvUm93cy5zcGxp
Y2UodGhpcy5fb3duZWRSZXZpc2lvbkluZm9Sb3dzLmluZGV4T2Yob3duZWRSZXZpc2lvblJvdyks
IDEpOyB9CisKKyAgICBjaGFuZ2VkT3duZWRSZXBvc2l0b3J5TmFtZXMoKSB7IHJldHVybiB0aGlz
Ll9jaGFuZ2VkT3duZWRSZXBvc2l0b3J5TmFtZXM7IH0KKworICAgIG93bmVkUmV2aXNpb25JbmZv
Um93cygpIHsgcmV0dXJuIHRoaXMuX293bmVkUmV2aXNpb25JbmZvUm93czsgfQorCisgICAgYWRk
T3duZWRSZXZpc2lvbkluZm9Sb3cob3duZWRSZXZpc2lvbkluZm9Sb3cpIHsgdGhpcy5fb3duZWRS
ZXZpc2lvbkluZm9Sb3dzLnB1c2gob3duZWRSZXZpc2lvbkluZm9Sb3cpOyB9CisKKyAgICBkaWRS
ZXZpc2lvbkNoYW5nZSgpCisgICAgeworICAgICAgICB0aGlzLl9vd25lZENvbW1pdHMgPSBbXTsK
KyAgICAgICAgdGhpcy5fb3duZWRDb21taXREaWZmZXJlbmNlcy5jbGVhcigpOworICAgICAgICB0
aGlzLl9vd25lZFJldmlzaW9uSW5mb1Jvd3MgPSBbXTsKKyAgICAgICAgdGhpcy5fY2hhbmdlZE93
bmVkUmVwb3NpdG9yeU5hbWVzID0gW107CisgICAgfQorCisgICAgYWxsUmV2aXNpb25zQXJlU2V0
KCkKKyAgICB7CisgICAgICAgIGlmICghc3VwZXIuYWxsUmV2aXNpb25zQXJlU2V0KCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0aGlzLm93bmVkUmV2aXNpb25J
bmZvUm93cygpLmV2ZXJ5KChvd25lZFJldmlzaW9uUm93KSA9PiBvd25lZFJldmlzaW9uUm93LmFs
bFJldmlzaW9uc0FyZVNldCgpKTsKKyAgICB9CisKKyAgICBjb21taXREaWZmZXJlbmNlRm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1pdERpZmZlcmVuY2Vz
LmdldChyZXBvc2l0b3J5KTsgfQorCisgICAgbG9hZE93bmVkQ29tbWl0cygpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fb3duZWRDb21taXREaWZmZXJlbmNlcy5zaXplKQorICAgICAgICAgICAg
cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworCisgICAgICAgIGNvbnN0IGluZGV4VG9MYWJlbCA9
IFtdOworICAgICAgICBjb25zdCBmdWxsQ29tbWl0TGlzdCA9IFtdOworCisgICAgICAgIHJldHVy
biB0aGlzLmxhYmVscygpLnJlZHVjZSgoY2hhaW5lZFByb21pc2UsIGxhYmVsKSA9PiB7CisgICAg
ICAgICAgICBjb25zdCByZXZpc2lvbiA9IHRoaXMuX3JldmlzaW9uU2VjdGlvbnNCeUxhYmVsW2xh
YmVsXS5yZXZpc2lvbigpOworICAgICAgICAgICAgcmV0dXJuIGNoYWluZWRQcm9taXNlLnRoZW4o
KCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBDb21taXRMb2cuZmV0Y2hGb3JTaW5nbGVS
ZXZpc2lvbih0aGlzLl9yZXBvc2l0b3J5LCByZXZpc2lvbik7CisgICAgICAgICAgICB9KS50aGVu
KChmdWxsQ29tbWl0KSA9PiB7CisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZnVsbENv
bW1pdC5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGZ1bGxD
b21taXRbMF07CisgICAgICAgICAgICAgICAgZnVsbENvbW1pdExpc3QucHVzaChjb21taXQpOwor
ICAgICAgICAgICAgICAgIGluZGV4VG9MYWJlbC5wdXNoKGxhYmVsKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgQ29t
bWl0TG9nLmRpZmZNdWx0aXBsZU93bmVkQ29tbWl0cy5hcHBseShDb21taXRMb2csIGZ1bGxDb21t
aXRMaXN0KS5mb3JFYWNoKChjb21taXRzLCByZXBvc2l0b3J5KSA9PiB7CisgICAgICAgICAgICAg
ICAgY29uc3QgbGFiZWxUb0NvbW1pdCA9IHt9OworICAgICAgICAgICAgICAgIGNvbW1pdHMuZm9y
RWFjaCgoY29tbWl0LCBpbmRleCkgPT4gbGFiZWxUb0NvbW1pdFtpbmRleFRvTGFiZWxbaW5kZXhd
XSA9IGNvbW1pdCk7CisgICAgICAgICAgICAgICAgdGhpcy5fb3duZWRDb21taXREaWZmZXJlbmNl
cy5zZXQocmVwb3NpdG9yeSwgbGFiZWxUb0NvbW1pdCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHRoaXMuX2NoYW5nZWRPd25lZFJlcG9zaXRvcnlOYW1lcyA9IFsuLi50aGlzLl9vd25l
ZENvbW1pdERpZmZlcmVuY2VzLmtleXMoKV0ubWFwKChyZXBvc2l0b3J5KSA9PiByZXBvc2l0b3J5
Lm5hbWUoKSkuc29ydCgpOworICAgICAgICB9KTsKKyAgICB9Cit9CisKK2NsYXNzIE93bmVkUmV2
aXNpb25JbmZvUm93IGV4dGVuZHMgUmV2aXNpb25JbmZvUm93QmFzZSB7CisKKyAgICBjb25zdHJ1
Y3Rvcihyb3dPd25lciwgcmVwb3NpdG9yeT1udWxsLCBjb21taXRTZXRNYXA9bnVsbCkKKyAgICB7
CisgICAgICAgIHN1cGVyKHJlcG9zaXRvcnksIGNvbW1pdFNldE1hcCk7CisgICAgICAgIHRoaXMu
X293bmVyID0gcm93T3duZXI7CisgICAgfQorCisgICAgc2V0UmVwb3NpdG9yeUJ5TmFtZShyZXBv
c2l0b3J5TmFtZSkKKyAgICB7CisgICAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSB0aGlzLl9vd25l
ci5yZXBvc2l0b3J5KCkuZmluZE93bmVkUmVwb3NpdG9yeUJ5TmFtZShyZXBvc2l0b3J5TmFtZSk7
CisgICAgICAgIGlmICghcmVwb3NpdG9yeSB8fCAhdGhpcy5fb3duZXIuY2hhbmdlZE93bmVkUmVw
b3NpdG9yeU5hbWVzKCkuaW5jbHVkZXMocmVwb3NpdG9yeU5hbWUpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHRoaXMuX3JlcG9zaXRvcnkgPSByZXBvc2l0b3J5OworCisgICAgICAg
IGZvciAobGV0IFtsYWJlbCwgY29tbWl0XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9vd25lci5j
b21taXREaWZmZXJlbmNlRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSkpCisgICAgICAgICAgICB0
aGlzLl9yZXZpc2lvblNlY3Rpb25zQnlMYWJlbFtsYWJlbF0gPSBuZXcgUmV2aXNpb25TZWN0aW9u
KGNvbW1pdC5yZXZpc2lvbigpLCBsYWJlbCwgdGhpcyk7CisgICAgfQorCisgICAgb3duZXJSZXZp
c2lvbkZvckxhYmVsKGxhYmVsKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hlY2tlZExhYmVsID0g
dGhpcy5fcmV2aXNpb25TZWN0aW9uc0J5TGFiZWxbbGFiZWxdLmNoZWNrZWRMYWJlbCgpOworICAg
ICAgICByZXR1cm4gdGhpcy5fb3duZXIucmV2aXNpb25Gb3JMYWJlbChjaGVja2VkTGFiZWwpOwor
ICAgIH0KK30KKworY2xhc3MgUmV2aXNpb25TZWN0aW9uIHsKKyAgICBjb25zdHJ1Y3RvcihyZXZp
c2lvbiwgY2hlY2tlZExhYmVsLCByb3cpCisgICAgeworICAgICAgICB0aGlzLl9kZWZhdWx0UmV2
aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgdGhpcy5fcmV2aXNpb24gPSByZXZpc2lvbjsKKyAg
ICAgICAgdGhpcy5fY2hlY2tlZExhYmVsID0gY2hlY2tlZExhYmVsOworICAgICAgICB0aGlzLl9y
b3cgPSByb3c7CisgICAgfQorCisgICAgdXBkYXRlKG5ld1JldmlzaW9uLCBjaGVja2VkTGFiZWwp
CisgICAgeworICAgICAgICB0aGlzLl9yZXZpc2lvbiA9IG5ld1JldmlzaW9uOworICAgICAgICB0
aGlzLl9jaGVja2VkTGFiZWwgPSBjaGVja2VkTGFiZWw7CisgICAgICAgIHRoaXMuX3Jvdy5kaWRS
ZXZpc2lvbkNoYW5nZSgpOworICAgIH0KKworICAgIHJldmlzaW9uKCkgeyByZXR1cm4gdGhpcy5f
cmV2aXNpb247IH0KKyAgICBkZWZhdWx0UmV2aXNpb24oKSB7IHJldHVybiB0aGlzLl9kZWZhdWx0
UmV2aXNpb247IH0KKyAgICBjaGVja2VkTGFiZWwoKSB7IHJldHVybiB0aGlzLl9jaGVja2VkTGFi
ZWw7IH0KK30KIAogY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RH
cm91cEZvcm0gewogCkBAIC03LDkgKzE1MSwxMCBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3Jv
dXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIHRoaXMuX2NvbW1pdFNldE1h
cCA9IG51bGw7CiAgICAgICAgIHRoaXMuX25hbWUgPSBudWxsOwogICAgICAgICB0aGlzLl9pc0N1
c3RvbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAgPSB7fTsK
KyAgICAgICAgdGhpcy5fbGFiZWxzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25JbmZv
Um93cyA9IFtdOwogCi0gICAgICAgIHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGVMYXpp
bHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fcmVuZGVyQ3VzdG9tUmV2aXNp
b25UYWJsZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fY29tcHV0ZUluaXRpYWxSZXZpc2lv
bkluZm9MYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fY29tcHV0ZUlu
aXRpYWxSZXZpc2lvbkluZm8uYmluZCh0aGlzKSk7CiAgICAgfQogCiAgICAgc2V0Q29tbWl0U2V0
TWFwKG1hcCkKQEAgLTMyLDMxICsxNzcsNzIgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICBuYW1lQ29udHJvbC5vbmlucHV0
ID0gKCkgPT4gewogICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWVDb250cm9sLnZhbHVlOwog
ICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKLSAgICAgICAgfQorICAgICAgICB9
OwogCiAgICAgICAgIHRoaXMuY29udGVudCgnY3VzdG9taXplLWxpbmsnKS5vbmNsaWNrID0gdGhp
cy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4gewogICAgICAgICAgICAgdGhpcy5faXNDdXN0b21p
emVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVJbml0aWFsUmV2aXNpb25JbmZv
TGF6aWx5LmV2YWx1YXRlKHRoaXMuX2NvbW1pdFNldE1hcCk7CiAgICAgICAgICAgICB0aGlzLmVu
cXVldWVUb1JlbmRlcigpOwogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBfY29tcHV0ZUluaXRp
YWxSZXZpc2lvbkluZm8oY29tbWl0U2V0TWFwKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFiZWxz
ID0gT2JqZWN0LmtleXMoY29tbWl0U2V0TWFwKS5zb3J0KCk7CisKKyAgICAgICAgY29uc3QgcmVw
b3NpdG9yeVNldCA9IG5ldyBTZXQ7CisgICAgICAgIGNvbnN0IGNvbnN0cnVjdGVkT3duZWRSZXBv
c2l0b3JpZXMgPSBuZXcgU2V0OworICAgICAgICB0aGlzLl9sYWJlbHMuZm9yRWFjaCgobGFiZWwp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldCA9IGNvbW1pdFNldE1hcFtsYWJlbF07
CisgICAgICAgICAgICBjb21taXRTZXQucmVwb3NpdG9yaWVzKCkuZm9yRWFjaCgocmVwb3NpdG9y
eSkgPT4geworICAgICAgICAgICAgICAgIGlmICghY29tbWl0U2V0Lm93bmVyQ29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5h
ZGQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIGNv
bnN0IHJlcG9zaXRvcnlMaXN0ID0gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNX
aXRoVVJMKEFycmF5LmZyb20ocmVwb3NpdG9yeVNldC52YWx1ZXMoKSkpOworICAgICAgICB0aGlz
Ll9yZXZpc2lvbkluZm9Sb3dzID0gcmVwb3NpdG9yeUxpc3QubWFwKChyZXBvc2l0b3J5KSA9PiB7
CisgICAgICAgICAgICBjb25zdCByZXZpc2lvbkluZm9Sb3cgPSBuZXcgUmV2aXNpb25JbmZvUm93
KHJlcG9zaXRvcnksIGNvbW1pdFNldE1hcCk7CisgICAgICAgICAgICB0aGlzLl9sYWJlbHMuZm9y
RWFjaCgobGFiZWwpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBvd25lZFJlcG9zaXRvcmll
cyA9IGNvbW1pdFNldE1hcFtsYWJlbF0ub3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRv
cnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKCFvd25lZFJlcG9zaXRvcmllcykK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgb3duZWRSZXBv
c2l0b3JpZXMuZm9yRWFjaCgob3duZWRSZXBvc2l0b3J5KSA9PiB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb25zdHJ1Y3RlZE93bmVkUmVwb3NpdG9yaWVzLmhhcyhvd25lZFJlcG9zaXRvcnkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbkluZm9Sb3cuYWRkT3duZWRSZXZpc2lvbkluZm9Sb3cobmV3IE93bmVkUmV2aXNpb25J
bmZvUm93KHJldmlzaW9uSW5mb1Jvdywgb3duZWRSZXBvc2l0b3J5LCBjb21taXRTZXRNYXApKTsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0ZWRPd25lZFJlcG9zaXRvcmllcy5hZGQob3du
ZWRSZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaWYgKHJldmlzaW9uSW5mb1Jvdy5vd25lZFJldmlzaW9uSW5mb1Jvd3MoKS5sZW5n
dGgpCisgICAgICAgICAgICAgICAgcmV2aXNpb25JbmZvUm93LmxvYWRPd25lZENvbW1pdHMoKS50
aGVuKCgpID0+IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCksICgpID0+IGFsZXJ0KCdGYWlsZWQgZmV0
Y2hpbmcgc29tZSBvd25lZCBjb21taXQuJykpOworICAgICAgICAgICAgcmV0dXJuIHJldmlzaW9u
SW5mb1JvdzsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgX2NvbXB1dGVDb21taXRTZXRNYXAo
KQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fY29tbWl0U2V0TWFwKTsKICAg
ICAgICAgaWYgKCF0aGlzLl9pc0N1c3RvbWl6ZWQpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Y29tbWl0U2V0TWFwOwogCiAgICAgICAgIGNvbnN0IG1hcCA9IHt9OwotICAgICAgICBmb3IgKGNv
bnN0IGxhYmVsIGluIHRoaXMuX2NvbW1pdFNldE1hcCkgewotICAgICAgICAgICAgY29uc3Qgb3Jp
Z2luYWxDb21taXRTZXQgPSB0aGlzLl9jb21taXRTZXRNYXA7Ci0gICAgICAgICAgICBjb25zdCBj
dXN0b21Db21taXRTZXQgPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OwotICAgICAgICAgICAgZm9yIChs
ZXQgcmVwb3NpdG9yeSBvZiB0aGlzLl9jb21taXRTZXRNYXBbbGFiZWxdLnJlcG9zaXRvcmllcygp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSB0aGlzLl9yZXZpc2lv
bkVkaXRvck1hcFtsYWJlbF0uZ2V0KHJlcG9zaXRvcnkpOwotICAgICAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHJldmlzaW9uRWRpdG9yKTsKLSAgICAgICAgICAgICAgICBjdXN0b21Db21taXRT
ZXQuc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIHJldmlzaW9uRWRpdG9yLnZh
bHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcFtsYWJlbF0gPSBjdXN0b21Db21t
aXRTZXQ7Ci0gICAgICAgIH0KKyAgICAgICAgdGhpcy5fbGFiZWxzLmZvckVhY2goKGxhYmVsKSA9
PiB7IG1hcFtsYWJlbF0gPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OyB9KTsKKyAgICAgICAgdGhpcy5f
cmV2aXNpb25JbmZvUm93cy5mb3JFYWNoKChyZXZpc2lvbkluZm9Sb3cpID0+IHsKKyAgICAgICAg
ICAgIHJldmlzaW9uSW5mb1Jvdy5sYWJlbHMoKS5mb3JFYWNoKChsYWJlbCkgPT4geworICAgICAg
ICAgICAgICAgIG1hcFtsYWJlbF0uc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJldmlzaW9uSW5m
b1Jvdy5yZXBvc2l0b3J5KCksIHJldmlzaW9uSW5mb1Jvdy5yZXZpc2lvbkZvckxhYmVsKGxhYmVs
KSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKCFyZXZpc2lvbkluZm9Sb3cu
b3duZWRSZXZpc2lvbkluZm9Sb3dzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICByZXZpc2lvbkluZm9Sb3cub3duZWRSZXZpc2lvbkluZm9Sb3dzKCkuZm9yRWFjaCgo
b3duZWRSZXZpc2lvbkluZm9Sb3cpID0+IHsKKyAgICAgICAgICAgICAgICBvd25lZFJldmlzaW9u
SW5mb1Jvdy5sYWJlbHMoKS5mb3JFYWNoKChsYWJlbCkgPT4geworICAgICAgICAgICAgICAgICAg
ICBjb25zdCByZXZpc2lvbiA9IG93bmVkUmV2aXNpb25JbmZvUm93LnJldmlzaW9uRm9yTGFiZWwo
bGFiZWwpOworICAgICAgICAgICAgICAgICAgICBtYXBbbGFiZWxdLnNldFJldmlzaW9uRm9yUmVw
b3NpdG9yeShvd25lZFJldmlzaW9uSW5mb1Jvdy5yZXBvc2l0b3J5KCksIHJldmlzaW9uLCBudWxs
LCBvd25lZFJldmlzaW9uSW5mb1Jvdy5vd25lclJldmlzaW9uRm9yTGFiZWwobGFiZWwpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKwogICAgICAg
ICByZXR1cm4gbWFwOwogICAgIH0KIApAQCAtNjQsNjcgKzI1MCwxMjMgQEAgY2xhc3MgQ3VzdG9t
aXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgIHsKICAgICAg
ICAgc3VwZXIucmVuZGVyKCk7CiAKLSAgICAgICAgdGhpcy5jb250ZW50KCdzdGFydC1idXR0b24n
KS5kaXNhYmxlZCA9ICEodGhpcy5fY29tbWl0U2V0TWFwICYmIHRoaXMuX25hbWUpOworICAgICAg
ICBjb25zdCBhbGxSZXZpc2lvbnNBcmVTZXQgPSB0aGlzLl9yZXZpc2lvbkluZm9Sb3dzLmV2ZXJ5
KChyZXZpc2lvbkluZm9Sb3cpID0+IHJldmlzaW9uSW5mb1Jvdy5hbGxSZXZpc2lvbnNBcmVTZXQo
KSk7CisgICAgICAgIHRoaXMuY29udGVudCgnc3RhcnQtYnV0dG9uJykuZGlzYWJsZWQgPSAhKHRo
aXMuX2NvbW1pdFNldE1hcCAmJiB0aGlzLl9uYW1lICYmIGFsbFJldmlzaW9uc0FyZVNldCk7CiAg
ICAgICAgIHRoaXMuY29udGVudCgnY3VzdG9taXplLWxpbmstY29udGFpbmVyJykuc3R5bGUuZGlz
cGxheSA9ICF0aGlzLl9jb21taXRTZXRNYXAgPyAnbm9uZScgOiBudWxsOwogCi0gICAgICAgIHRo
aXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGVMYXppbHkuZXZhbHVhdGUodGhpcy5fY29tbWl0
U2V0TWFwLCB0aGlzLl9pc0N1c3RvbWl6ZWQpOworICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21S
ZXZpc2lvblRhYmxlKHRoaXMuX2xhYmVscywgdGhpcy5fcmV2aXNpb25JbmZvUm93cywgdGhpcy5f
aXNDdXN0b21pemVkKTsKICAgICB9CiAKLSAgICBfcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZShj
b21taXRTZXRNYXAsIGlzQ3VzdG9taXplZCkKKyAgICBfcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJs
ZShsYWJlbHMsIHJldmlzaW9uSW5mb1Jvd3MsIGlzQ3VzdG9taXplZCkKICAgICB7Ci0gICAgICAg
IGlmICghY29tbWl0U2V0TWFwIHx8ICFpc0N1c3RvbWl6ZWQpIHsKKyAgICAgICAgaWYgKCFpc0N1
c3RvbWl6ZWQpIHsKICAgICAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQo
J2N1c3RvbS10YWJsZScpLCBbXSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnN0IHJlcG9zaXRvcnlTZXQgPSBuZXcgU2V0OwotICAgICAgICBjb25z
dCBjb21taXRTZXRMYWJlbHMgPSBbXTsKLSAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAg
PSB7fTsKLSAgICAgICAgZm9yIChjb25zdCBsYWJlbCBpbiBjb21taXRTZXRNYXApIHsKLSAgICAg
ICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBjb21taXRTZXRNYXBbbGFiZWxdLnJlcG9z
aXRvcmllcygpKQotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlTZXQuYWRkKHJlcG9zaXRvcnkp
OwotICAgICAgICAgICAgY29tbWl0U2V0TGFiZWxzLnB1c2gobGFiZWwpOwotICAgICAgICAgICAg
dGhpcy5fcmV2aXNpb25FZGl0b3JNYXBbbGFiZWxdID0gbmV3IE1hcDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnN0IHJlcG9zaXRvcnlMaXN0ID0gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVy
cmluZ09uZXNXaXRoVVJMKEFycmF5LmZyb20ocmVwb3NpdG9yeVNldC52YWx1ZXMoKSkpOwogICAg
ICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAg
ICBsZXQgcm93cyA9IFtdOworICAgICAgICByZXZpc2lvbkluZm9Sb3dzLmZvckVhY2goKHJldmlz
aW9uSW5mb1JvdykgPT4geworICAgICAgICAgICAgcm93cy5wdXNoKGVsZW1lbnQoJ3RyJywgdGhp
cy5fY29uc3RydWN0Q2VsbHNJblJvdyhyZXZpc2lvbkluZm9Sb3csIGxhYmVscykpKTsKKyAgICAg
ICAgICAgIHJvd3MgPSByb3dzLmNvbmNhdCh0aGlzLl9jb25zdHJ1Y3RPd25lZFJldmlzaW9uSW5m
b1Jvd3MocmV2aXNpb25JbmZvUm93LCBsYWJlbHMpKTsKKyAgICAgICAgfSk7CiAgICAgICAgIHRo
aXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoJ2N1c3RvbS10YWJsZScpLCBbCiAgICAgICAg
ICAgICBlbGVtZW50KCd0aGVhZCcsCiAgICAgICAgICAgICAgICAgZWxlbWVudCgndHInLAotICAg
ICAgICAgICAgICAgICAgICBbZWxlbWVudCgndGQnLCAnUmVwb3NpdG9yeScpLCBjb21taXRTZXRM
YWJlbHMubWFwKChsYWJlbCkgPT4gZWxlbWVudCgndGQnLCB7Y29sc3BhbjogY29tbWl0U2V0TGFi
ZWxzLmxlbmd0aCArIDF9LCBsYWJlbCkpXSkpLAotICAgICAgICAgICAgZWxlbWVudCgndGJvZHkn
LAotICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlMaXN0Lm1hcCgocmVwb3NpdG9yeSkgPT4gewot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50KCd0aCcsIHJlcG9zaXRv
cnkubGFiZWwoKSldOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIGNv
bW1pdFNldE1hcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5fY29u
c3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBsYWJl
bCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCBjZWxscyk7Ci0g
ICAgICAgICAgICAgICAgfSkpXSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlcG9zaXRvcnlMaXN0Owor
ICAgICAgICAgICAgICAgICAgICBbZWxlbWVudCgndGQnLCB7Y29sc3BhbjogMn0sICdSZXBvc2l0
b3J5JyksIGxhYmVscy5tYXAoKGxhYmVsKSA9PiBlbGVtZW50KCd0ZCcsIHtjb2xzcGFuOiBsYWJl
bHMubGVuZ3RoICsgMX0sIGxhYmVsKSksIGVsZW1lbnQoJ3RkJyldKSksCisgICAgICAgICAgICBl
bGVtZW50KCd0Ym9keScsIHJvd3MpCisgICAgICAgIF0pOwogICAgIH0KIAotICAgIF9jb25zdHJ1
Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIHJvd0xhYmVs
KQorICAgIF9jb25zdHJ1Y3RPd25lZFJldmlzaW9uSW5mb1Jvd3Mob3duZXJSZXZpc2lvbkluZm9S
b3csIGNvbW1pdFNldExhYmVscykKICAgICB7CiAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21w
b25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Ci0gICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0g
ZWxlbWVudCgnaW5wdXQnKTsKKyAgICAgICAgY29uc3Qgcm93cyA9IG93bmVyUmV2aXNpb25JbmZv
Um93Lm93bmVkUmV2aXNpb25JbmZvUm93cygpOworICAgICAgICByZXR1cm4gb3duZXJSZXZpc2lv
bkluZm9Sb3cub3duZWRSZXZpc2lvbkluZm9Sb3dzKCkubWFwKChvd25lZFJldmlzaW9uSW5mb1Jv
dywgaSkgPT4geworICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3J5ID0gb3duZWRSZXZp
c2lvbkluZm9Sb3cucmVwb3NpdG9yeSgpOworICAgICAgICAgICAgY29uc3QgZWRpdG9yVmFsdWUg
PSAoKSA9PiBvd25lZFJlcG9zaXRvcnkgPyAgb3duZWRSZXBvc2l0b3J5Lm5hbWUoKSA6ICcnOwor
ICAgICAgICAgICAgY29uc3QgZWRpdG9yVXBkYXRlVmFsdWUgPSAodmFsdWUpID0+IHsKKyAgICAg
ICAgICAgICAgICBvd25lZFJldmlzaW9uSW5mb1Jvdy5zZXRSZXBvc2l0b3J5QnlOYW1lKHZhbHVl
KTsKKyAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGQnLCB7Y2xhc3M6ICdv
d25lci1yZXBvc2l0b3J5LWxhYmVsJ30sICksIGVsZW1lbnQoJ3RkJywgbmV3IENvbWJvQm94KGVk
aXRvclZhbHVlLCBlZGl0b3JVcGRhdGVWYWx1ZSwgb3duZXJSZXZpc2lvbkluZm9Sb3cuY2hhbmdl
ZE93bmVkUmVwb3NpdG9yeU5hbWVzKCkpKV07CisgICAgICAgICAgICBvd25lclJldmlzaW9uSW5m
b1Jvdy5sYWJlbHMoKS5mb3JFYWNoKChkZWZhdWx0TGFiZWwpID0+IHsKKyAgICAgICAgICAgICAg
ICBjb25zdCByZXZpc2lvblNlY3Rpb24gPSBvd25lZFJldmlzaW9uSW5mb1Jvdy5yZXZpc2lvblNl
Y3Rpb25Gb3JMYWJlbChkZWZhdWx0TGFiZWwpOworICAgICAgICAgICAgICAgIGlmICghcmV2aXNp
b25TZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFB1c2ggcGxhY2UgaG9sZGVycwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE9iamVjdC5rZXlzKGNvbW1p
dFNldExhYmVscykubGVuZ3RoICsgMTsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgY2Vs
bHMucHVzaChlbGVtZW50KCd0ZCcpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxldCByZXZpc2lvbkVkaXRvciA9IG51
bGw7CisgICAgICAgICAgICAgICAgaWYgKCFyZXZpc2lvblNlY3Rpb24ucmV2aXNpb24oKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZpc2lvblZhbHVlID0gKCkgPT4gcmV2aXNpb25T
ZWN0aW9uLnJldmlzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uVXBk
YXRlVmFsdWUgPSAodmFsdWUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
U2VjdGlvbi51cGRhdGUodmFsdWUsIGRlZmF1bHRMYWJlbCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjb21taXREaWZmZXJlbmNlRm9yUmVwb3NpdG9yeSA9IG93
bmVyUmV2aXNpb25JbmZvUm93LmNvbW1pdERpZmZlcmVuY2VGb3JSZXBvc2l0b3J5KG93bmVkUmV2
aXNpb25JbmZvUm93LnJlcG9zaXRvcnkoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmlzaW9uRm9yTGFiZWwgPSBjb21taXREaWZmZXJlbmNlRm9yUmVwb3NpdG9yeSA/IGNvbW1pdERp
ZmZlcmVuY2VGb3JSZXBvc2l0b3J5W2RlZmF1bHRMYWJlbF0ucmV2aXNpb24oKSA6ICcnOworICAg
ICAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvciA9IG5ldyBDb21ib0JveChyZXZpc2lvblZh
bHVlLCByZXZpc2lvblVwZGF0ZVZhbHVlLCBbcmV2aXNpb25Gb3JMYWJlbF0pOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvciA9IGVsZW1l
bnQoJ2lucHV0Jywge3ZhbHVlOiByZXZpc2lvblNlY3Rpb24ucmV2aXNpb24oKSwgZGlzYWJsZWQ6
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZTogKCkgPT4geyByZXZpc2lv
blNlY3Rpb24udXBkYXRlKHJldmlzaW9uRWRpdG9yLnZhbHVlLCBkZWZhdWx0TGFiZWwpOyB9fSk7
CisgICAgICAgICAgICAgICAgY29tbWl0U2V0TGFiZWxzLmZvckVhY2goKGxhYmVsKSA9PiBjZWxs
cy5wdXNoKHRoaXMuX2NvbnN0cnVjdFJhZGlvQnV0dG9ucyhsYWJlbCwgcmV2aXNpb25TZWN0aW9u
LCByZXZpc2lvbkVkaXRvciwgZGVmYXVsdExhYmVsLCBvd25lZFJldmlzaW9uSW5mb1JvdykpKTsK
KyAgICAgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgcmV2aXNpb25FZGl0b3Ip
KTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwW3Jv
d0xhYmVsXS5zZXQocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IpOworICAgICAgICAgICAgY29u
c3QgYWN0aW9uTmFtZSA9IGAke293bmVyUmV2aXNpb25JbmZvUm93LnJlcG9zaXRvcnkoKS5sYWJl
bCgpfS1vd25lZC1jb21taXQtJHtpfWA7CisgICAgICAgICAgICBjb25zdCBtaW51c0J1dHRvbiA9
IG5ldyBNaW51c0J1dHRvbihhY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIG1pbnVzQnV0dG9uLmxp
c3RlblRvQWN0aW9uKGFjdGlvbk5hbWUsICgpID0+IHsKKyAgICAgICAgICAgICAgICBvd25lclJl
dmlzaW9uSW5mb1Jvdy5yZW1vdmVPd25lZFJldmlzaW9uSW5mb1Jvdyhvd25lZFJldmlzaW9uSW5m
b1Jvdyk7CisgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIG1pbnVzQnV0dG9u
KSk7CiAKLSAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTsKLSAgICAgICAgZm9yIChsZXQgbGFiZWxU
b0Nob29zZSBpbiBjb21taXRTZXRNYXApIHsKLSAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNv
bW1pdFNldE1hcFtsYWJlbFRvQ2hvb3NlXS5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkp
OwotICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGxhYmVsVG9DaG9vc2UgPT0gcm93TGFiZWw7
Ci0gICAgICAgICAgICBjb25zdCByYWRpb0J1dHRvbiA9IGVsZW1lbnQoJ2lucHV0Jywge3R5cGU6
ICdyYWRpbycsIG5hbWU6IGAke3Jvd0xhYmVsfS0ke3JlcG9zaXRvcnkuaWQoKX0tcmFkaW9gLCBj
aGVja2VkLAotICAgICAgICAgICAgICAgIG9uY2hhbmdlOiAoKSA9PiB7IHJldmlzaW9uRWRpdG9y
LnZhbHVlID0gY29tbWl0ID8gY29tbWl0LnJldmlzaW9uKCkgOiAnJzsgfX0pOworICAgICAgICAg
ICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgeydjbGFzcyc6IGkgPT09IHJvd3MubGVuZ3RoIC0gMSA/
ICdsYXN0LW93bmVkLXJvdycgOiAnJ30sIGNlbGxzKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgX2NvbnN0cnVjdFJhZGlvQnV0dG9ucyhsYWJlbCwgcmV2aXNpb25TZWN0aW9uLCByZXZpc2lv
bkVkaXRvciwgZGVmYXVsdExhYmVsLCByZXZpc2lvbkluZm9Sb3cpIHsKKyAgICAgICAgY29uc3Qg
ZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29uc3QgY2hl
Y2tlZCA9IGxhYmVsID09PSByZXZpc2lvblNlY3Rpb24uY2hlY2tlZExhYmVsKCk7CisgICAgICAg
IGNvbnN0IHJhZGlvQnV0dG9uID0gZWxlbWVudCgnaW5wdXQnLCB7dHlwZTogJ3JhZGlvJywgbmFt
ZTogYCR7ZGVmYXVsdExhYmVsfS0ke3JldmlzaW9uSW5mb1Jvdy5yZXBvc2l0b3J5KCkuaWQoKX0t
cmFkaW9gLCBjaGVja2VkLAorICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBuZXdSZXZpc2lvbiA9IHJldmlzaW9uSW5mb1Jvdy5yZXZpc2lvblNlY3Rp
b25Gb3JMYWJlbChsYWJlbCkuZGVmYXVsdFJldmlzaW9uKCk7CisgICAgICAgICAgICAgICAgcmV2
aXNpb25FZGl0b3IudmFsdWUgPSBuZXdSZXZpc2lvbjsKKyAgICAgICAgICAgICAgICByZXZpc2lv
blNlY3Rpb24udXBkYXRlKG5ld1JldmlzaW9uLCBsYWJlbCk7CisgICAgICAgICAgICAgICAgdGhp
cy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfX0pOworICAgICAgICByZXR1cm4gZWxlbWVu
dCgndGQnLCBlbGVtZW50KCdsYWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFiZWxdKSk7CisgICAgfQog
Ci0gICAgICAgICAgICBpZiAoY2hlY2tlZCkKLSAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRv
ci52YWx1ZSA9IGNvbW1pdCA/IGNvbW1pdC5yZXZpc2lvbigpIDogJyc7Ci0gICAgICAgICAgICBu
b2Rlcy5wdXNoKGVsZW1lbnQoJ3RkJywgZWxlbWVudCgnbGFiZWwnLCBbcmFkaW9CdXR0b24sIGxh
YmVsVG9DaG9vc2VdKSkpOworICAgIF9jb25zdHJ1Y3RDZWxsc0luUm93KHJldmlzaW9uSW5mb1Jv
dywgY29tbWl0U2V0TGFiZWxzKQorICAgIHsKKyAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBv
bmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgn
dGgnLCB7Y29sc3BhbjogMn0sIHJldmlzaW9uSW5mb1Jvdy5yZXBvc2l0b3J5KCkubGFiZWwoKSld
OworICAgICAgICByZXZpc2lvbkluZm9Sb3cubGFiZWxzKCkuZm9yRWFjaCgoZGVmYXVsdExhYmVs
KSA9PiB7CisgICAgICAgICAgICBjb25zdCByZXZpc2lvblNlY3Rpb24gPSByZXZpc2lvbkluZm9S
b3cucmV2aXNpb25TZWN0aW9uRm9yTGFiZWwoZGVmYXVsdExhYmVsKTsKKyAgICAgICAgICAgIGNv
bnN0IHJldmlzaW9uRWRpdG9yID0gZWxlbWVudCgnaW5wdXQnLCB7dmFsdWU6IHJldmlzaW9uU2Vj
dGlvbi5yZXZpc2lvbigpLCBvbmNoYW5nZTogKCkgPT4geworICAgICAgICAgICAgICAgIHJldmlz
aW9uU2VjdGlvbi51cGRhdGUocmV2aXNpb25FZGl0b3IudmFsdWUsIGRlZmF1bHRMYWJlbCk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgIH19KTsK
KyAgICAgICAgICAgIGNvbW1pdFNldExhYmVscy5mb3JFYWNoKChsYWJlbCkgPT4geworICAgICAg
ICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5fY29uc3RydWN0UmFkaW9CdXR0b25zKGxhYmVsLCBy
ZXZpc2lvblNlY3Rpb24sIHJldmlzaW9uRWRpdG9yLCBkZWZhdWx0TGFiZWwsIHJldmlzaW9uSW5m
b1JvdykpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQo
J3RkJywgcmV2aXNpb25FZGl0b3IpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCFyZXZp
c2lvbkluZm9Sb3cucmVwb3NpdG9yeSgpLm93bmVkUmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAg
ICAgIGNlbGxzLnB1c2goZWxlbWVudCgndGQnKSk7IC8vIEVtcHR5IGNlbGwgaWYgbm8gcGx1cyBi
dXR0b24KKyAgICAgICAgICAgIHJldHVybiBjZWxsczsKICAgICAgICAgfQotICAgICAgICBub2Rl
cy5wdXNoKGVsZW1lbnQoJ3RkJywgcmV2aXNpb25FZGl0b3IpKTsKIAotICAgICAgICByZXR1cm4g
bm9kZXM7CisgICAgICAgIGNvbnN0IHBsdXNCdXR0b24gPSBuZXcgUGx1c0J1dHRvbihyZXZpc2lv
bkluZm9Sb3cucmVwb3NpdG9yeSgpLmxhYmVsKCkpOworICAgICAgICBwbHVzQnV0dG9uLmxpc3Rl
blRvQWN0aW9uKHJldmlzaW9uSW5mb1Jvdy5yZXBvc2l0b3J5KCkubGFiZWwoKSwgKCkgPT4gcmV2
aXNpb25JbmZvUm93LmFkZE93bmVkUmV2aXNpb25JbmZvUm93QXN5bmMoKS50aGVuKCgpID0+IHRo
aXMuZW5xdWV1ZVRvUmVuZGVyKCksICgpID0+IGFsZXJ0KCdGYWlsZWQgZmV0Y2hpbmcgc29tZSBv
d25lZCBjb21taXRzJykpKTsKKyAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIHBsdXNC
dXR0b24pKTsKKyAgICAgICAgcmV0dXJuIGNlbGxzOwogICAgIH0KIAogICAgIHN0YXRpYyBjc3NU
ZW1wbGF0ZSgpCkBAIC0xNTAsNiArMzkyLDIxIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91
cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgICAgICBmb250LXNpemU6
IDAuOXJlbTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0ZC5v
d25lci1yZXBvc2l0b3J5LWxhYmVsIHsKKyAgICAgICAgICAgICAgICBib3JkZXItdG9wOiBzb2xp
ZCAycHggdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQg
MXB4IHRyYW5zcGFyZW50OworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMnJlbTsKKyAgICAg
ICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgI2N1c3RvbS10YWJsZSAubGFzdC1vd25lZC1yb3cgdGQub3duZXItcmVwb3NpdG9yeS1sYWJl
bCB7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkZGQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGggeworICAgICAgICAgICAg
ICAgIG1pbi13aWR0aDogMTJyZW07CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgICNjdXN0
b20tdGFibGUgdGhlYWQgdGQsCiAgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRoIHsKICAgICAg
ICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvb3duZWQtY29tbWl0LXZpZXdlci5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21t
aXQtdmlld2VyLmpzCmluZGV4IDY4Zjc0MzM4NWI0NTA1ZTllZmVkN2Q0ZjRmMDdkZmM2ZjVmMTJl
MTIuLjA5Yjk0NGFmYWU2NzQxNjU0ODhmNmNlMjMyNGE0MmE5YTRmMjQ5MDQgMTAwNjQ0Ci0tLSBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21t
aXQtdmlld2VyLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIE93
bmVkQ29tbWl0Vmlld2VyIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgIGlmICghcHJl
dmlvdXNPd25lZENvbW1pdHMgfHwgIWN1cnJlbnRPd25lZENvbW1pdHMpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmT3duZWRD
b21taXRzKHRoaXMuX3ByZXZpb3VzQ29tbWl0LCB0aGlzLl9jdXJyZW50Q29tbWl0KTsKKyAgICAg
ICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHMo
dGhpcy5fcHJldmlvdXNDb21taXQsIHRoaXMuX2N1cnJlbnRDb21taXQpOwogICAgICAgICBjb25z
dCBzb3J0ZWRSZXBvc2l0b3JpZXMgPSBSZXBvc2l0b3J5LnNvcnRCeU5hbWUoWy4uLmRpZmZlcmVu
Y2Uua2V5cygpXSk7CiAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0
ZUVsZW1lbnQ7CiAKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvaW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXgu
aHRtbAppbmRleCA0NmU2YWRjNDRlMjI3NTQ5MDgxNzUwMjRmMDlkYzU5MGFkMmRhYWQyLi4yN2Q4
NGU0N2Y4NGJiMWEwZjcwN2Y0ODM2OTkzZmFjNmVlODFlZTA4IDEwMDY0NAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC05OCw2ICs5OCw5IEBAIFJ1biB0
b29scy9idW5kbGUtdjMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9k
dWN0aW9uLmApOwogICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jdXN0b20tYW5hbHlz
aXMtdGFzay1jb25maWd1cmF0b3IuanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0i
Y29tcG9uZW50cy9jdXN0b20tY29uZmlndXJhdGlvbi10ZXN0LWdyb3VwLWZvcm0uanMiPjwvc2Ny
aXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9pbnN0YW50LWZpbGUtdXBsb2Fk
ZXIuanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9wbHVzLWJ1
dHRvbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL21pbnVz
LWJ1dHRvbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2Nv
bWJvLWJveC5qcyI+PC9zY3JpcHQ+CiAKICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Uu
anMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS1yb3V0ZXIuanMi
Pjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9tb2RlbHMvY29tbWl0LWxvZy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2NvbW1pdC1sb2cuanMKaW5kZXggN2JlNDIxNDU2Y2FkZDVmYjMwZjNjM2MyYzU3
MGNlMmViZGExNzI3MS4uMThhNzFkZGY0NGY0YjcxNGFhM2U2M2Y0ZWZhMTc1MGYwNGYyZmZkNiAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29t
bWl0LWxvZy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVs
cy9jb21taXQtbG9nLmpzCkBAIC0zOSwxMCArMzksOCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5k
cyBEYXRhTW9kZWxPYmplY3QgewogCiAgICAgbGFiZWwoKQogICAgIHsKLSAgICAgICAgdmFyIHJl
dmlzaW9uID0gdGhpcy5yZXZpc2lvbigpOwotICAgICAgICBpZiAocGFyc2VJbnQocmV2aXNpb24p
ID09IHJldmlzaW9uKSAvLyBlLmcuIHIxMjM0NQotICAgICAgICAgICAgcmV0dXJuICdyJyArIHJl
dmlzaW9uOwotICAgICAgICBlbHNlIGlmIChyZXZpc2lvbi5sZW5ndGggPT0gNDApIC8vIGUuZy4g
Z2l0IGhhc2gKKyAgICAgICAgY29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uKCk7CisgICAg
ICAgIGlmIChyZXZpc2lvbi5sZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKICAgICAgICAg
ICAgIHJldHVybiByZXZpc2lvbi5zdWJzdHJpbmcoMCwgOCk7CiAgICAgICAgIHJldHVybiByZXZp
c2lvbjsKICAgICB9CkBAIC0xMTEsMjMgKzEwOSwyMyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5k
cyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICByZXR1cm4gb3duZWRDb21taXRNYXA7CiAgICAg
fQogCi0gICAgc3RhdGljIGRpZmZPd25lZENvbW1pdHMocHJldmlvdXNDb21taXQsIGN1cnJlbnRD
b21taXQpCisgICAgc3RhdGljIGRpZmZNdWx0aXBsZU93bmVkQ29tbWl0cyguLi5jb21taXRzKQog
ICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJldmlvdXNDb21taXQpOwotICAgICAgICBj
b25zb2xlLmFzc2VydChjdXJyZW50Q29tbWl0KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJl
dmlvdXNDb21taXQuX293bmVkQ29tbWl0cyk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJl
bnRDb21taXQuX293bmVkQ29tbWl0cyk7Ci0KLSAgICAgICAgY29uc3QgcHJldmlvdXNPd25lZENv
bW1pdE1hcCA9IHByZXZpb3VzQ29tbWl0Ll9idWlsZE93bmVkQ29tbWl0TWFwKCk7Ci0gICAgICAg
IGNvbnN0IGN1cnJlbnRPd25lZENvbW1pdE1hcCA9IGN1cnJlbnRDb21taXQuX2J1aWxkT3duZWRD
b21taXRNYXAoKTsKLSAgICAgICAgY29uc3Qgb3duZWRDb21taXRSZXBvc2l0b3JpZXMgPSBuZXcg
U2V0KFsuLi5jdXJyZW50T3duZWRDb21taXRNYXAua2V5cygpLCAuLi5wcmV2aW91c093bmVkQ29t
bWl0TWFwLmtleXMoKV0pOworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRzLmxlbmd0aCA+
PSAyKTsKKyAgICAgICAgZm9yIChsZXQgY29tbWl0IG9mIGNvbW1pdHMpIHsKKyAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KGNvbW1pdCk7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChjb21t
aXQuX293bmVkQ29tbWl0cyk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBvd25lZENvbW1p
dE1hcExpc3QgPSBjb21taXRzLm1hcCgoY29tbWl0KSA9PiBjb21taXQuX2J1aWxkT3duZWRDb21t
aXRNYXAoKSk7CisgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzID0gbmV3IFNl
dChvd25lZENvbW1pdE1hcExpc3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gQXJyYXkuZnJvbShv
d25lZENvbW1pdE1hcC5rZXlzKCkpKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpKSk7CiAg
ICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgTWFwOwogCiAgICAgICAgIG93bmVkQ29tbWl0
UmVwb3NpdG9yaWVzLmZvckVhY2goKG93bmVkQ29tbWl0UmVwb3NpdG9yeSkgPT4gewotICAgICAg
ICAgICAgY29uc3QgY3VycmVudFJldmlzaW9uID0gY3VycmVudE93bmVkQ29tbWl0TWFwLmdldChv
d25lZENvbW1pdFJlcG9zaXRvcnkpOwotICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSZXZpc2lv
biA9IHByZXZpb3VzT3duZWRDb21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSk7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudFJldmlzaW9uICE9IHByZXZpb3VzUmV2aXNpb24pCi0gICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZS5zZXQob3duZWRDb21taXRSZXBvc2l0b3J5LCBbcHJldmlv
dXNSZXZpc2lvbiwgY3VycmVudFJldmlzaW9uXSk7CisgICAgICAgICAgICBjb25zdCByZXZpc2lv
bnMgPSBvd25lZENvbW1pdE1hcExpc3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gb3duZWRDb21t
aXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSkpOworICAgICAgICAgICAgY29uc3QgdW5p
cXVlUmV2aXNpb25zID0gbmV3IFNldChyZXZpc2lvbnMpOworICAgICAgICAgICAgaWYgKHVuaXF1
ZVJldmlzaW9ucy5zaXplID4gMSkKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlLnNldChvd25l
ZENvbW1pdFJlcG9zaXRvcnksIHJldmlzaW9ucyk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIHJl
dHVybiBkaWZmZXJlbmNlOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggYjE3OGFjODBlNTIzZDQwYWZmMWNl
ZDJmMjk3NDQ2MDk4MjY1NmVmNy4uZWE5MTZlOWJlNTc3NzQ3N2NmNDExYTFkMjVkZWY5MjBiOWVk
MTc4MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2Rl
bHMvY29tbWl0LXNldC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L21vZGVscy9jb21taXQtc2V0LmpzCkBAIC03MCw4ICs3MCw4IEBAIGNsYXNzIENvbW1pdFNldCBl
eHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0
b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkp
OyB9CiAgICAgb3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRo
aXMuX3JlcG9zaXRvcnlUb0NvbW1pdE93bmVyTWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIHRv
cExldmVsUmVwb3NpdG9yaWVzKCkgeyByZXR1cm4gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVy
cmluZ09uZXNXaXRoVVJMKHRoaXMuX3JlcG9zaXRvcmllcy5maWx0ZXIoKHJlcG9zaXRvcnkpID0+
ICF0aGlzLm93bmVyUmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSk7IH0KLQogICAg
IG93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJu
IHRoaXMuX293bmVyUmVwb3NpdG9yeVRvT3duZWRSZXBvc2l0b3JpZXNNYXAuZ2V0KHJlcG9zaXRv
cnkpOyB9CisgICAgb3duZWRSZXBvc2l0b3JpZXMoKSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3Jp
ZXMuZmlsdGVyKChyZXBvc2l0b3J5KSA9PiByZXBvc2l0b3J5Lm93bmVySWQpOyB9OwogCiAgICAg
cmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCiAgICAgewpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvcmVwb3NpdG9yeS5qcyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL3JlcG9zaXRvcnkuanMKaW5k
ZXggMDg5ZjYyZTI0MTdlZWIxZTUwNDQ4ZDZiYzA1Nzc2ZGI4NjY1N2FkZC4uZTNjNzQ3N2MzMWU5
MTUzOTc1N2Q4NzAwNzI0NzQzNWM1MmUyYjc5MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvcmVwb3NpdG9yeS5qcworKysgYi9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9yZXBvc2l0b3J5LmpzCkBAIC0yNiw2ICsy
NiwxMiBAQCBjbGFzcyBSZXBvc2l0b3J5IGV4dGVuZHMgTGFiZWxlZE9iamVjdCB7CiAgICAgICAg
IHJldHVybiBtYXAgPyBtYXBbbmFtZV0gOiBudWxsOwogICAgIH0KIAorICAgIGZpbmRPd25lZFJl
cG9zaXRvcnlCeU5hbWUobmFtZSkKKyAgICB7CisgICAgICAgIGNvbnN0IG93bmVyc2hpcHMgPSB0
aGlzLm5hbWVkU3RhdGljTWFwKCdyZXBvc2l0b3J5T3duZXJzaGlwcycpOworICAgICAgICByZXR1
cm4gb3duZXJzaGlwcyA/IG93bmVyc2hpcHNbdGhpcy5pZCgpXS5maW5kKChyZXBvc2l0b3J5KSA9
PiByZXBvc2l0b3J5Lm5hbWUoKSA9PSBuYW1lKSA6IG51bGw7CisgICAgfQorCiAgICAgaGFzVXJs
Rm9yUmV2aXNpb24oKSB7IHJldHVybiAhIXRoaXMuX3VybDsgfQogCiAgICAgdXJsRm9yUmV2aXNp
b24oY3VycmVudFJldmlzaW9uKQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMKaW5kZXggM2IzMWU1YzA3MWQxY2MwNWNj
OGE4YzBkNDZiZjNkNWEzNjdlZjMwOS4uNzI5ZDQyNDc5N2RhYTU5YTY0M2M4NmQ3ZThlZDk1Zjgx
NTcyOTMyNyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMv
Y29tbWl0LWxvZy10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCkBAIC05NCw4ICs5NCw4IEBAIGRlc2NyaWJlKCdDb21t
aXRMb2cnLCBmdW5jdGlvbiAoKSB7CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIAogICAgIGRl
c2NyaWJlKCdsYWJlbCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaXQoJ3Nob3VsZCBwcmVmaXgg
U1ZOIHJldmlzaW9uIHdpdGggInIiJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHdlYmtpdENvbW1pdCgpLmxhYmVsKCksICdyMjAwODA1Jyk7CisgICAgICAgIGl0KCdz
aG91bGQgbm90IG1vZGlmeSBTVk4gcmV2aXNpb24iJywgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHdlYmtpdENvbW1pdCgpLmxhYmVsKCksICcyMDA4MDUnKTsKICAgICAg
ICAgfSk7CiAKICAgICAgICAgaXQoJ3Nob3VsZCB0cnVuY2F0ZSBhIEdpdCBoYXNoIGF0IDh0aCBj
aGFyYWN0ZXInLCBmdW5jdGlvbiAoKSB7CkBAIC0xMDgsOCArMTA4LDggQEAgZGVzY3JpYmUoJ0Nv
bW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICB9KTsKIAogICAgIGRlc2NyaWJlKCd0aXRsZScs
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaXQoJ3Nob3VsZCBwcmVmaXggU1ZOIHJldmlzaW9uIHdp
dGggInIiJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdENv
bW1pdCgpLnRpdGxlKCksICdXZWJLaXQgYXQgcjIwMDgwNScpOworICAgICAgICBpdCgnc2hvdWxk
IG5vdCBtb2RpZnkgU1ZOIHJldmlzaW9uIicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbCh3ZWJraXRDb21taXQoKS50aXRsZSgpLCAnV2ViS2l0IGF0IDIwMDgwNScpOwog
ICAgICAgICB9KTsKIAogICAgICAgICBpdCgnc2hvdWxkIHRydW5jYXRlIGEgR2l0IGhhc2ggYXQg
OHRoIGNoYXJhY3RlcicsIGZ1bmN0aW9uICgpIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCBkZXNjcmli
ZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgIGRlc2NyaWJlKCdkaWZmJywgZnVuY3Rp
b24gKCkgewogICAgICAgICBpdCgnc2hvdWxkIHVzZSBsYWJlbCgpIGFzIHRoZSBsYWJlbCB0aGUg
cHJldmlvdXMgY29tbWl0IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICBh
c3NlcnQuZGVlcEVxdWFsKHdlYmtpdENvbW1pdCgpLmRpZmYoKSwgewotICAgICAgICAgICAgICAg
IGxhYmVsOiAncjIwMDgwNScsCisgICAgICAgICAgICAgICAgbGFiZWw6ICcyMDA4MDUnLAogICAg
ICAgICAgICAgICAgIHVybDogJ2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIwMDgw
NScsCiAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQKICAgICAg
ICAgICAgIH0pOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5j
dGlvbiAoKSB7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXJGZXRjaGluZ1Byb21pc2U7
CiAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBkaWZm
ZXJlbmNlID0gQ29tbWl0TG9nLmRpZmZPd25lZENvbW1pdHMob25lQ29tbWl0LCBvdGhlckNvbW1p
dCk7CisgICAgICAgICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmTXVs
dGlwbGVPd25lZENvbW1pdHMob25lQ29tbWl0LCBvdGhlckNvbW1pdCk7CiAgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGRpZmZlcmVuY2Uuc2l6ZSwgMSk7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGRpZmZlcmVuY2Uua2V5cygpLm5leHQoKS52YWx1ZSwgTW9ja01vZGVscy5vd25l
ZFJlcG9zaXRvcnkpOwogICAgICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdW5pdC10ZXN0cy9tZWFzdXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtYWRhcHRvci10ZXN0
cy5qcwppbmRleCAyNGE0OTA3MjE3NmNhMTQ0Y2JmZmEzZGEwYWFkODJkMGY3ZDY5ODdhLi5mMThk
NWZiMTg4MjA5YWU5ZTA2Nzg2OWUyN2UwYjM1OWM3OGUyMGI2IDEwMDY0NAotLS0gYS9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9tZWFzdXJlbWVudC1hZGFwdG9yLXRlc3RzLmpz
CisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LWFk
YXB0b3ItdGVzdHMuanMKQEAgLTEwNyw4ICsxMDcsOCBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRB
ZGFwdG9yJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5p
ZCgpLCAyMjIpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKCtjb21taXQudGltZSgpLCAxNDQ3
NzA3MDU1NTc2KTsKICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQucmV2aXNpb24oKSwg
JzE5MjQ4MycpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAncjE5
MjQ4MycpOwotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2ViS2l0
IGF0IHIxOTI0ODMnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQubGFiZWwoKSwg
JzE5MjQ4MycpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2Vi
S2l0IGF0IDE5MjQ4MycpOwogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC51cmwoKSwg
J2h0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE5MjQ4MycpOwogICAgICAgICB9KTsK
IApAQCAtMTIyLDQgKzEyMiw0IEBAIGRlc2NyaWJlKCdNZWFzdXJlbWVudEFkYXB0b3InLCBmdW5j
dGlvbiAoKSB7CiAgICAgICAgIH0pOwogCiAgICAgfSk7Ci19KTsKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCit9KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0
LXRlc3RzL21lYXN1cmVtZW50LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy91bml0LXRlc3RzL21lYXN1cmVtZW50LXNldC10ZXN0cy5qcwppbmRleCBkZDI4YTA3ZWQ0Mzhk
OWQ1Njg5OTdlZDc2Y2YwMmY2Nzc5NDUzZjJmLi41Nzc4ZGY3NmEzM2QwMDdhMDE5NTQwMDJjM2Vm
YmVhOWU5YmY0YzY5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9tZWFzdXJlbWVudC1zZXQtdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtc2V0LXRlc3RzLmpzCkBAIC04MTMsOCArODEzLDgg
QEAgZGVzY3JpYmUoJ01lYXN1cmVtZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChjb21taXQucmV2aXNpb24oKSwgJzIxMDA5NicpOwogICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChjb21taXQubWVzc2FnZSgpLCBudWxsKTsKICAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0LnVybCgpLCAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMjEwMDk2Jyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgp
LCAncjIxMDA5NicpOwotICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQudGl0bGUo
KSwgJ1dlYktpdCBhdCByMjEwMDk2Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNv
bW1pdC5sYWJlbCgpLCAnMjEwMDk2Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNv
bW1pdC50aXRsZSgpLCAnV2ViS2l0IGF0IDIxMDA5NicpOwogICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChjb21taXRTZXQubGF0ZXN0Q29tbWl0VGltZSgpLCBjb21taXRUaW1lKTsKIAogICAg
ICAgICAgICAgICAgIGNvbnN0IGJ1aWxkID0gcG9pbnQuYnVpbGQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327035</attachid>
            <date>2017-11-15 16:36:56 -0800</date>
            <delta_ts>2017-12-07 23:02:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171115163656.patch</filename>
            <type>text/plain</type>
            <size>43227</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTA1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAyMDFlNGI0NmY1ZmJiOTZmZDVhNjI1Zjc4ODVjYWRiZTAxNTQ1YWQyLi4xZmE0NTM0MzBk
NDYyYzE1MmIwYTRiNDYyZDg1OGVmMWM3ZGI1MTYzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NSBAQAorMjAxNy0xMS0xNSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9u
ZW50cy9jb21iby1ib3guanM6IEFkZGVkLgorICAgICAgICAoQ29tYm9Cb3gpOgorICAgICAgICAo
Q29tYm9Cb3gucHJvdG90eXBlLl9jcmVhdGVDYW5kaWRhdGVMaXN0KTogQ3JlYXRlIGFuIGh0bWwg
bGlzdCBiYXNlZCBvbiBjYW5kaWRhdGVzLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9j
YW5kaWRhdGVFbGVtZW50Rm9yQ3VycmVudEluZGV4SW5kZXgpOiBSZXR1cm5zIGN1cnJlbnRseSBm
b2N1c2VkIGxpc3QgZWxlbWVudC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlk
YXRlTmFtZUZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgY3VycmVudGx5IGZvY3VzZWQgY2FuZGlk
YXRlLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVN
YXRjaGluZ0l0ZW0pOiBTdXBwb3J0cyBhdXRvIGNvbXBsZXRpb24uCisgICAgICAgIChDb21ib0Jv
eC5wcm90b3R5cGUuX2RpZEFycm93VXBPckRvd24pOiBTdXBwb3J0cyBhcnJvdyB1cC9kb3duLgor
ICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChDb21ib0JveC5o
dG1sVGVtcGxhdGUpOgorICAgICAgICAoQ29tYm9Cb3guY3NzVGVtcGxhdGUpOgorICAgICAgICAq
IHB1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanM6Cisg
ICAgICAgIChlbnN1cmVTZXRGb3JNYXApOiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY3JlYXRlIGEg
U2V0IGZvciBrZXkgaWYgbm90IGV4aXN0cyBhbmQgcmV0dXJuIHRoZSBlbnRyeSBrZXkgcG9pbnRz
IHRvLgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0KTogSW4gb3JkZXIgdG8gc3VwcG9y
dCBvd25lZCBjb21taXRzLCBjb21taXQgc2V0IHNob3VsZCBzdXBwb3J0IG11dGF0aW9uIGFzIHdl
IG1heSBhZGQvcmVtb3ZlIGNvbW1pdHMgZm9yIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgICAgIFRo
aXMgdmFyaWFudCBvZiBjb21taXQgc2V0IHN1cHBvcnRzIHJlbW92ZS91cGRhdGUgY29tbWl0cyBm
b3IgcmVwb3NpdG9yaWVzLgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlw
ZS5zZXRDb21taXRGb3JSZXBvc2l0b3J5KTogU2V0cyBhIGNvbW1pdCBmb3IgYSByZXBvc2l0b3J5
IGluIGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBl
LnJlbW92ZUNvbW1pdEZvclJlcG9zaXRvcnkpOiBSZW1vdmVzIGEgY29tbWl0IGZvciBhIHJlcG9z
aXRvcnkgaW4gY29tbWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90
b3R5cGUudXBkYXRlQ29tbWl0Rm9yUmVwb3NpdG9yeSk6IFVwZGF0ZXMgYSBjb21taXQgZm9yIGEg
cmVwb3NpdG9yeSBieSBnaXZlbiBhIHJldmlzaW9uIG9mIHRoZSByZXBvc2l0b3J5LgorICAgICAg
ICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5yZXBvc2l0b3JpZXMpOiBSZXR1cm5z
IGFsbCByZXBvc2l0b3JpZXMgaW4gdGhlIGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlh
dGVDb21taXRTZXQucHJvdG90eXBlLnRvcExldmVsUmVwb3NpdG9yaWVzKTogUmV0dXJucyBhbGwg
cmVwb3NpdG9yaWVzIHRob3NlIGRvbid0IGhhdmUgYW4gb3duZXIuCisgICAgICAgIChJbnRlcm1l
ZGlhdGVDb21taXRTZXQucHJvdG90eXBlLmNvbW1pdEZvclJlcG9zaXRvcnkpOiBSZXR1cm5zIGEg
Y29tbWl0IGZvciBhIGdpdmVuIHJlcG9zaXRvcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21t
aXRTZXQucHJvdG90eXBlLm93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KTogUmV0
dXJucyBhbGwgcmVwb3NpdG9yaWVzIG93bmVkIGJ5IGEgZ2l2ZW4gcmVwb3NpdG9yeSBpbiBjdXJy
ZW50IGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBl
Lm93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeSk6IFJldHVybnMgb3duZXIgY29tbWl0IGZvciBhIGdp
dmVuIG93bmVkIHJlcG9zaXRvcnkuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3Jt
KToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLnNldENvbW1p
dFNldE1hcCk6IENvbnZlcnRzIENvbW1pdFNldHMgaW4gQ29tbWl0U2V0TWFwIHRvIEludGVybWVk
aWF0ZUNvbW1pdFNldC4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90
eXBlLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUpOgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdy
b3VwRm9ybS5wcm90b3R5cGUuX2NvbXB1dGVDb21taXRTZXRNYXApOiBBZGRlZCB0aGUgbG9naWMg
dG8gY29udmVydCBhIEludGVybWVkaWF0ZUNvbW1pdFNldCB0byBhIEN1c3RvbUNvbW1pdFNldC4K
KyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLnJlbmRlcik6Cisg
ICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fcmVuZGVyQ3VzdG9t
UmV2aXNpb25UYWJsZSk6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3Rv
dHlwZS5fY29uc3RydWN0VGFibGVSb3dzKTogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBm
b3IgYnVpbGRpbmcgdGFibGUgcm93cyBpbmNsdWRpbmcgcm93cyB0aGUgY29tbWl0cyBvZiB3aGlj
aCBoYXZlIG93bmVycyBhbmQgdGhlIHJvd3Mgd2l0aCB1bnNwZWNpZmllZCByZXBvc2l0b3J5Lgor
ICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRh
YmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRPd25lcik6IEJ1aWxkIGEgdGFibGUgcm93IGZvciBhIHRv
cCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5w
cm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcik6IEJ1aWxkIGEg
dGFibGUgcm93IGZvciByZXBvc2l0b3J5IHdpdGggb3duZXIuCisgICAgICAgIChDdXN0b21pemFi
bGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0Um93V2l0aG91dFJlcG9zaXRvcnlT
cGVjaWZpZWQpOiBCdWlsZCBhIHRhYmxlIHJvdyBmb3IgYW4gdW5zcGVjaWZpZWQgcmVwb3NpdG9y
eS4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1
Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyk6IFVwZGF0ZSB0aGUgbG9naWMgdG8gc3VwcG9ydCBidWls
ZCByYWRpbyBidXR0b25zIGZvciB0aGUgb3duZWQgcmVwb3NpdG9yeSByb3dzLgorICAgICAgICAo
Q3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5jc3NUZW1wbGF0ZSk6CisgICAgICAgICogcHVibGlj
L3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzOiBBZGRlZCBhIG1pbnVzIGJ1dHRvbi4KKyAg
ICAgICAgKE1pbnVzQnV0dG9uKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLnByb3RvdHlwZS5kaWRD
b25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLmJ1dHRvbkNvbnRlbnQp
OgorICAgICAgICAoTWludXNCdXR0b24uY3NzVGVtcGxhdGUpOgorICAgICAgICAqIHB1YmxpYy92
My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanM6CisgICAgICAgIChPd25lZENvbW1p
dFZpZXdlci5wcm90b3R5cGUuX3JlbmRlck93bmVkQ29tbWl0VGFibGUpOgorICAgICAgICAqIHB1
YmxpYy92My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpzOiBBZGRlZCBhIHBsdXMgYnV0dG9uLgor
ICAgICAgICAoUGx1c0J1dHRvbik6CisgICAgICAgIChQbHVzQnV0dG9uLnByb3RvdHlwZS5kaWRD
b25zdHJ1Y3RTaGFkb3dUcmVlKToKKyAgICAgICAgKFBsdXNCdXR0b24uYnV0dG9uQ29udGVudCk6
CisgICAgICAgIChQbHVzQnV0dG9uLmNzc1RlbXBsYXRlKToKKyAgICAgICAgKiBwdWJsaWMvdjMv
aW5kZXguaHRtbDoKKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanM6Cisg
ICAgICAgIChDb21taXRMb2cpOgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5vd25lckNv
bW1pdCk6IFJldHVybnMgdGhlIG93bmVyIGNvbW1pdCBvZiB0aGlzIGNvbW1pdC4KKyAgICAgICAg
KENvbW1pdExvZy5wcm90b3R5cGUuc2V0T3duZXJDb21taXRzKTogU2V0cyB0aGUgb3duZXIgb2Yg
dGhpcyBjb21taXQuCisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBlLmxhYmVsKTogUmVtb3Zl
ZCB0aGUgbG9naWMgdGhhdCBhZGRzICdyJyBwcmVmaXggdG8gc3ZuIHJldmlzaW9uIHNpbmNlIHNv
bWUgcmV2aXNpb25zIGZyb20gYSByZXBvc2l0b3J5IHNvbWV0aW1lcyBhcmUgbGFiZWxlZCB3aXRo
ICdyJyBzb21ldGltZXMgYXJlIG5vdC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUub3du
ZWRDb21taXRGb3JPd25lZFJlcG9zaXRvcnkpOiAKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5
cGUuZmV0Y2hPd25lZENvbW1pdHMpOiBTZXRzIHRoZSBvd25lciBmb3IgdGhvc2Ugb3duZWQgY29t
bWl0cy4gVGhlIG93bmVyIG9mIGEgY29tbWl0IHdpdGggbXVsdGlwbGUgb3duZXIgY29tbWl0cyB3
aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4K
KyAgICAgICAgKENvbW1pdExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHMpOiBBIG1vcmUgZ2Vu
ZXJpYyB2ZXJzaW9uIG9mIHdoaWNoIGNvbXBhcmVzIG11bHRpcGxlIG93bmVkIGNvbW1pdHMuCisg
ICAgICAgIChDb21taXRMb2cuZGlmZk93bmVkQ29tbWl0cyk6IERlbGV0ZWQuCisgICAgICAgICog
cHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzOgorICAgICAgICAoQ29tbWl0U2V0LnByb3Rv
dHlwZS5jb21taXRGb3JSZXBvc2l0b3J5KTogUmV0dXJucyBjb21taXQgZm9yIGEgZ2l2ZW4gcmVw
b3NpdG9yeS4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanM6CisgICAg
ICAgIChhc3NlcnQuZGVlcEVxdWFsLndlYmtpdENvbW1pdC5kaWZmKTogVXBkYXRlZCB1bml0IHRl
c3RzLgorICAgICAgICAqIHVuaXQtdGVzdHMvbWVhc3VyZW1lbnQtYWRhcHRvci10ZXN0cy5qczog
VXBkYXRlZCB1bml0IHRlc3RzLgorICAgICAgICAqIHVuaXQtdGVzdHMvbWVhc3VyZW1lbnQtc2V0
LXRlc3RzLmpzOiBVcGRhdGUgdW5pdCB0ZXN0cy4KKwogMjAxNy0xMS0wMiAgRGV3ZWkgWmh1ICA8
ZGV3ZWlfemh1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcGxhdGZvcm0gYXJndW1lbnQgZm9y
IHN5bmNpbmcgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL2NvbWJvLWJveC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmJhNDNhMTQ5
MjUxMDdkODM0ZWUxYmQ2NmQ0MzNhZDJkZjlmMzVjMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMKQEAg
LTAsMCArMSwxNjUgQEAKK2NsYXNzIENvbWJvQm94IGV4dGVuZHMgQ29tcG9uZW50QmFzZQorewor
ICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRWYWx1ZSwgZGlkVXBkYXRlVmFsdWUsIGNhbmRpZGF0ZXMp
CisgICAgeworICAgICAgICBzdXBlcignY29tYm8tYm94Jyk7CisgICAgICAgIHRoaXMuX2RlZmF1
bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgdGhpcy5fZGlkVXBkYXRlVmFsdWUgPSBk
aWRVcGRhdGVWYWx1ZTsKKyAgICAgICAgdGhpcy5fY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXM7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0ID0gW107CisgICAgICAgIHRoaXMuX2Nh
bmRpZGF0ZU5hbWVUb0VsZW1lbnRNYXBwaW5nID0ge307CisgICAgICAgIHRoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleCA9IG51bGw7CisgICAgICAgIHRoaXMuX2NyZWF0ZUNhbmRpZGF0ZUxpc3RM
YXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fY3JlYXRlQ2FuZGlkYXRl
TGlzdC5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBfY3JlYXRlQ2FuZGlkYXRlTGlzdChjYW5k
aWRhdGVzLCBrZXl3b3JkKQorICAgIHsKKyAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVu
dEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29uc3QgbGluayA9IENvbXBvbmVudEJhc2Uu
Y3JlYXRlTGluazsKKyAgICAgICAgY29uc3Qgc3RhcnRzV2l0aEtleXdvcmRMaXN0ID0gW107Cisg
ICAgICAgIGNvbnN0IGNvbnRhaW5zV2l0aEtleXdvcmRMaXN0ID0gW107CisgICAgICAgIGNhbmRp
ZGF0ZXMuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjYW5kaWRh
dGVJbkxvd2VyQ2FzZSA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaWYg
KGtleXdvcmQgJiYgIWNhbmRpZGF0ZUluTG93ZXJDYXNlLmluY2x1ZGVzKGtleXdvcmQudG9Mb3dl
ckNhc2UoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoY2Fu
ZGlkYXRlSW5Mb3dlckNhc2Uuc3RhcnRzV2l0aChrZXl3b3JkLnRvTG93ZXJDYXNlKCkpKQorICAg
ICAgICAgICAgICAgIHN0YXJ0c1dpdGhLZXl3b3JkTGlzdC5wdXNoKGNhbmRpZGF0ZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGFpbnNXaXRoS2V5d29yZExpc3QucHVz
aChjYW5kaWRhdGUpOworICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0
ZUxpc3QgPSBzdGFydHNXaXRoS2V5d29yZExpc3QuY29uY2F0KGNvbnRhaW5zV2l0aEtleXdvcmRM
aXN0KTsKKyAgICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gbnVsbDsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0Lm1hcCgoY2FuZGlkYXRlKSA9PiB7
CisgICAgICAgICAgICBjb25zdCBpdGVtID0gbGluayhjYW5kaWRhdGUpOworICAgICAgICAgICAg
aXRlbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fZGlkVXBkYXRlVmFsdWUoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICB0aGlz
LmNvbnRlbnQoJ2NhbmRpZGF0ZS1saXN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fY2FuZGlkYXRlTmFtZVRvRWxlbWVudE1hcHBp
bmdbY2FuZGlkYXRlXSA9IGl0ZW07CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGknLCBp
dGVtKTsKKyAgICAgICAgfSkKKyAgICB9CisKKyAgICBfY2FuZGlkYXRlRWxlbWVudEZvckN1cnJl
bnRJbmRleEluZGV4KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2FuZGlkYXRl
SW5kZXggID49IHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0Lmxlbmd0aCkKKyAgICAgICAgICAg
IHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0
Lmxlbmd0aCAtIDE7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPCAw
KQorICAgICAgICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gMDsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2NhbmRpZGF0ZU5hbWVUb0VsZW1lbnRNYXBwaW5nW3RoaXMuX2NhbmRpZGF0
ZU5hbWVGb3JDdXJyZW50SW5kZXgoKV07CisgICAgfQorCisgICAgX2NhbmRpZGF0ZU5hbWVGb3JD
dXJyZW50SW5kZXgoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlTGlzdFt0aGlzLl9j
dXJyZW50Q2FuZGlkYXRlSW5kZXhdOyB9CisKKyAgICBfYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0
Y2hpbmdJdGVtKCkKKyAgICB7CisgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLmNvbnRl
bnQoJ3RleHQtZmllbGQnKS52YWx1ZTsKKyAgICAgICAgaWYgKCFpbnB1dFZhbHVlLmxlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29uc3QgbWF0Y2hpbmdDYW5kaWRhdGVzID0g
dGhpcy5fY2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnRvTG93ZXJD
YXNlKCkuaW5jbHVkZXMoaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7CisgICAgICAgIGlmICht
YXRjaGluZ0NhbmRpZGF0ZXMubGVuZ3RoID09PSAxKQorICAgICAgICAgICAgdGhpcy5fZGlkVXBk
YXRlVmFsdWUobWF0Y2hpbmdDYW5kaWRhdGVzWzBdKTsKKyAgICAgICAgZWxzZSBpZiAobWF0Y2hp
bmdDYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9jYW5kaWRhdGVzLmxlbmd0aCkKKyAg
ICAgICAgICAgIHRoaXMuY29udGVudCgndGV4dC1maWVsZCcpLnZhbHVlID0gJyc7CisgICAgfQor
CisgICAgX2RpZEFycm93VXBPckRvd24oaXNBcnJvd0Rvd24pCisgICAgeworICAgICAgICBsZXQg
cHJldmlvdXNFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDYW5kaWRh
dGVJbmRleCA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRl
eCA9IChpc0Fycm93RG93biA/IDAgOiB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlTGlzdC5sZW5ndGgg
LSAxKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSB0aGlz
Ll9jYW5kaWRhdGVFbGVtZW50Rm9yQ3VycmVudEluZGV4SW5kZXgoKTsKKyAgICAgICAgICAgIHRo
aXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCArPSAoaXNBcnJvd0Rvd24gPyAxIDogLTEpOworICAg
ICAgICB9CisgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUVsZW1lbnQgPSB0aGlzLl9jYW5kaWRhdGVF
bGVtZW50Rm9yQ3VycmVudEluZGV4SW5kZXgoKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1l
bnQpIHsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c0VsZW1lbnQpCisgICAgICAgICAgICAgICAg
cHJldmlvdXNFbGVtZW50LmNsYXNzTmFtZSA9IG51bGw7CisgICAgICAgICAgICBjYW5kaWRhdGVF
bGVtZW50LmNsYXNzTmFtZSA9ICdzZWxlY3RlZCc7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnQo
J3RleHQtZmllbGQnKS52YWx1ZSA9IHRoaXMuX2NhbmRpZGF0ZU5hbWVGb3JDdXJyZW50SW5kZXgo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBl
ci5yZW5kZXIoKTsKKworICAgICAgICBjb25zdCBjYW5kaWRhdGVMaXN0ID0gdGhpcy5jb250ZW50
KCdjYW5kaWRhdGUtbGlzdCcpOworICAgICAgICBjb25zdCB0ZXh0RmllbGQgPSB0aGlzLmNvbnRl
bnQoJ3RleHQtZmllbGQnKTsKKyAgICAgICAgdGV4dEZpZWxkLnZhbHVlID0gdGhpcy5fZGVmYXVs
dFZhbHVlOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9
PiB0aGlzLnJlbmRlclJlcGxhY2UoY2FuZGlkYXRlTGlzdCwgdGhpcy5fY3JlYXRlQ2FuZGlkYXRl
TGlzdExhemlseS5ldmFsdWF0ZSh0aGlzLl9jYW5kaWRhdGVzLCB0ZXh0RmllbGQudmFsdWUpKSk7
CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB0aGlz
Ll9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKSk7CisgICAgICAgIHRleHRGaWVs
ZC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMu
Y29udGVudCgnY2FuZGlkYXRlLWxpc3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAg
ICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0Y2hpbmdJdGVtKCk7CisgICAgICAg
IH0pOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoZXZlbnQp
ID0+IHsKKyAgICAgICAgICAgIGNhbmRpZGF0ZUxpc3Quc3R5bGUuZGlzcGxheSA9IG51bGw7Cisg
ICAgICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UoY2FuZGlkYXRlTGlzdCwgdGhpcy5fY3JlYXRl
Q2FuZGlkYXRlTGlzdExhemlseS5ldmFsdWF0ZSh0aGlzLl9jYW5kaWRhdGVzLCB0ZXh0RmllbGQu
dmFsdWUpKQorICAgICAgICB9KTsKKyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIo
J2tleWRvd24nLCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdB
cnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKQorICAgICAgICAgICAgICAgIHRo
aXMuX2RpZEFycm93VXBPckRvd24oZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7CisgICAgICAg
ICAgICBpZihldmVudC5rZXkgPT09ICdUYWInIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoJ2Nv
bWJveC1ib3gnKSwgW3RleHRGaWVsZCwgY2FuZGlkYXRlTGlzdF0pOworICAgIH0KKworICAgIHN0
YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IGlkPSdjb21i
b3gtYm94Jz4KKyAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3RleHQtZmllbGQnLz4KKyAgICAg
ICAgICAgICAgICA8dWwgaWQ9ImNhbmRpZGF0ZS1saXN0Ij48L3VsPgorICAgICAgICAgICAgPC9k
aXY+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGAKKyAgICAgICAgICAgIGRpdiB7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IHJl
bGF0aXZlOworICAgICAgICAgICAgICAgIGhlaWdodDogMS40cmVtOworICAgICAgICAgICAgICAg
IGxlZnQ6IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bDplbXB0eSB7CisgICAgICAg
ICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVsIHsK
KyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zIGVhc2UtaW47Cisg
ICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDog
MC4zcmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuM3JlbTsKKyAgICAgICAg
ICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4ycmVtOworICAgICAgICAgICAgICAgIGxpc3Qtc3R5
bGU6IG5vbmU7CisgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CisgICAgICAgICAg
ICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKKyAgICAgICAgICAg
ICAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIHRvcDogMS41cmVt
OworICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMnJlbTsKKyAgICAgICAgICAgICAg
ICB6LWluZGV4OiAxMDsKKyAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMC4xcmVtOworICAg
ICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBtaW4td2lk
dGg6IDguNXJlbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpIHsKKyAgICAgICAgICAg
ICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAg
ICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGkgYSB7
CisgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgICAgICAgICAg
IGZvbnQtc2l6ZTogMC44cmVtOworICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0OworICAg
ICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bGkgYTpob3ZlciwgYS5zZWxlY3RlZCB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdi
YSgyMDQsIDE1MywgNTEsIDAuMSk7CisgICAgICAgICAgICB9CisgICAgICAgIGA7CisgICAgfQor
fQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ2NvbWJvLWJveCcsIENvbWJvQm94KTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50
cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMK
aW5kZXggNDY5MzgwMTljYjM1YTI4MDk0ZTdmMjA4ZTIzMmRmNGQyMDU2OWYyYi4uMTcwMDA1ZGU1
NDBlYzNhNzlkNmU1N2M2NWM1ZDcwMGQ1YjRkMjI2YyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3Vw
LWZvcm0uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKQEAgLTEsNCArMSw4OCBAQAogCitm
dW5jdGlvbiBlbnN1cmVTZXRGb3JNYXAobWFwLCBrZXkpIHsKKyAgICBpZiAoIW1hcC5oYXMoa2V5
KSkKKyAgICAgICAgbWFwLnNldChrZXksIG5ldyBTZXQpOworICAgIHJldHVybiBtYXAuZ2V0KGtl
eSk7Cit9CisKK2NsYXNzIEludGVybWVkaWF0ZUNvbW1pdFNldCB7CisKKyAgICBjb25zdHJ1Y3Rv
cihjb21taXRTZXQpCisgICAgeworICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkgPSBu
ZXcgTWFwOworICAgICAgICB0aGlzLl9vd25lZFJlcG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5
ID0gbmV3IE1hcDsKKyAgICAgICAgY29tbWl0U2V0LnJlcG9zaXRvcmllcygpLmZvckVhY2goKHJl
cG9zaXRvcnkpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1pdFNldC5jb21t
aXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgQ29tbWl0TG9nLmZldGNo
Rm9yU2luZ2xlUmV2aXNpb24ocmVwb3NpdG9yeSwgY29tbWl0LnJldmlzaW9uKCkpLnRoZW4oKCkg
PT4geworICAgICAgICAgICAgICAgIGlmICghY29tbWl0Lm93bnNDb21taXRzKCkpCisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBjb21t
aXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bW1pdC5mZXRjaE93bmVkQ29tbWl0cygpLnRoZW4oKCkgPT4gdGhpcy5zZXRDb21taXRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnksIGNvbW1pdCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHNldENvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgY29tbWl0
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJl
cG9zaXRvcnkpOworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXQgaW5zdGFuY2VvZiBDb21t
aXRMb2cpOworICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnks
IGNvbW1pdCk7CisgICAgICAgIGNvbnN0IG93bmVyQ29tbWl0ID0gY29tbWl0Lm93bmVyQ29tbWl0
KCk7CisgICAgICAgIGlmICghb3duZXJDb21taXQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNvbnN0IHJlcG9zaXRvcnlTZXQgPSBlbnN1cmVTZXRGb3JNYXAodGhpcy5fb3duZWRSZXBv
c2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeSwgb3duZXJDb21taXQucmVwb3NpdG9yeSgpKTsKKyAg
ICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVwb3NpdG9yeSk7CisgICAgfQorCisgICAgcmVtb3Zl
Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQorICAgIHsKKyAgICAgICAgY29uc29sZS5h
c3NlcnQocmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJlcG9zaXRvcnkpOworICAgICAgICBjb25zdCBv
d25lckNvbW1pdCA9IHRoaXMub3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOwor
ICAgICAgICBpZiAob3duZXJDb21taXQpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlcG9zaXRvcnlT
ZXQgPSB0aGlzLl9vd25lZFJlcG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmdldChvd25lckNv
bW1pdC5yZXBvc2l0b3J5KCkpOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocmVwb3NpdG9y
eVNldC5oYXMocmVwb3NpdG9yeSkpOworICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5kZWxldGUo
cmVwb3NpdG9yeSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodGhpcy5fb3duZWRSZXBv
c2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5oYXMocmVwb3NpdG9yeSkpIHsKKyAgICAgICAgICAg
IGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzID0gdGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93bmVy
UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBvd25lZFJlcG9zaXRvcmll
cy5mb3JFYWNoKChvd25lZFJlcG9zaXRvcnkpID0+IHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeS5k
ZWxldGUob3duZWRSZXBvc2l0b3J5KSk7CisgICAgICAgICAgICB0aGlzLl9vd25lZFJlcG9zaXRv
cmllc0J5T3duZXJSZXBvc2l0b3J5LmRlbGV0ZShyZXBvc2l0b3J5KTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZGVsZXRlKHJlcG9zaXRvcnkpOworICAgIH0K
KworICAgIHVwZGF0ZUNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb24pCisg
ICAgeworICAgICAgICBsZXQgY29tbWl0ID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIENvbW1pdExv
Zy5mZXRjaEZvclNpbmdsZVJldmlzaW9uKHJlcG9zaXRvcnksIHJldmlzaW9uKS50aGVuKChjb21t
aXRzKSA9PiB7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRzLmxlbmd0aCA9PT0g
MSk7CisgICAgICAgICAgICBjb21taXQgPSBjb21taXRzWzBdOworICAgICAgICAgICAgaWYgKCFj
b21taXQub3duc0NvbW1pdHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCk7CisgICAgICAgIH0pLnRoZW4oKCkg
PT4geworICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSB0aGlzLl9vd25lZFJl
cG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
IHRoaXMucmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
IHRoaXMuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBjb21taXQpOworICAgICAg
ICAgICAgb3duZWRSZXBvc2l0b3JpZXMuZm9yRWFjaCgob3duZWRSZXBvc2l0b3J5KSA9PiB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5zZXRDb21taXRGb3JSZXBvc2l0b3J5KG93bmVkUmVwb3NpdG9y
eSwgY29tbWl0Lm93bmVkQ29tbWl0Rm9yT3duZWRSZXBvc2l0b3J5KG93bmVkUmVwb3NpdG9yeSkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJlcG9zaXRvcmll
cygpIHsgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LmtleXMoKSk7
IH0KKyAgICB0b3BMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnkuc29ydEJ5
TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLnJlcG9zaXRvcmllcygpLmZpbHRlcigocmVw
b3NpdG9yeSkgPT4gIXRoaXMub3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSk7
IH0KKyAgICBjb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX2Nv
bW1pdEJ5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7IH0KKyAgICBvd25lZFJlcG9zaXRvcmll
c0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lZFJlcG9z
aXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsgfQorICAgIG93bmVyQ29t
bWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQorICAgIHsKKyAgICAgICAgY29uc3QgY29tbWl0
ID0gdGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgaWYg
KCFjb21taXQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIGNvbW1p
dC5vd25lckNvbW1pdCgpOworICAgIH0KK30KKwogY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogCiAgICAgY29uc3RydWN0b3IoKQpAQCAtOCwx
MyArOTIsMTUgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RH
cm91cEZvcm0gewogICAgICAgICB0aGlzLl9uYW1lID0gbnVsbDsKICAgICAgICAgdGhpcy5faXND
dXN0b21pemVkID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307
Ci0KLSAgICAgICAgdGhpcy5fcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZUxhemlseSA9IG5ldyBM
YXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlLmJp
bmQodGhpcykpOworICAgICAgICB0aGlzLl9vd25lclJldmlzaW9uTWFwID0ge307CisgICAgICAg
IHRoaXMuX2luY29tcGxldGVkUm93Rm9yT3duZXJSZXBvc2l0b3J5ID0gbmV3IE1hcDsKICAgICB9
CiAKICAgICBzZXRDb21taXRTZXRNYXAobWFwKQogICAgIHsKLSAgICAgICAgdGhpcy5fY29tbWl0
U2V0TWFwID0gbWFwOworICAgICAgICB0aGlzLl9jb21taXRTZXRNYXAgPSB7fTsKKyAgICAgICAg
Zm9yIChjb25zdCBsYWJlbCBpbiBtYXApCisgICAgICAgICAgICB0aGlzLl9jb21taXRTZXRNYXBb
bGFiZWxdID0gbmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChtYXBbbGFiZWxdKTsKICAgICAgICAg
dGhpcy5faXNDdXN0b21pemVkID0gZmFsc2U7CiAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVy
KCk7CiAgICAgfQpAQCAtMzIsNyArMTE4LDcgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICBuYW1lQ29udHJvbC5vbmlucHV0
ID0gKCkgPT4gewogICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWVDb250cm9sLnZhbHVlOwog
ICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKLSAgICAgICAgfQorICAgICAgICB9
OwogCiAgICAgICAgIHRoaXMuY29udGVudCgnY3VzdG9taXplLWxpbmsnKS5vbmNsaWNrID0gdGhp
cy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4gewogICAgICAgICAgICAgdGhpcy5faXNDdXN0b21p
emVkID0gdHJ1ZTsKQEAgLTQzLDE3ICsxMjksMTQgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdy
b3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgIF9jb21wdXRlQ29tbWl0U2V0TWFw
KCkKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2NvbW1pdFNldE1hcCk7Ci0g
ICAgICAgIGlmICghdGhpcy5faXNDdXN0b21pemVkKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2NvbW1pdFNldE1hcDsKLQogICAgICAgICBjb25zdCBtYXAgPSB7fTsKICAgICAgICAgZm9yIChj
b25zdCBsYWJlbCBpbiB0aGlzLl9jb21taXRTZXRNYXApIHsKLSAgICAgICAgICAgIGNvbnN0IG9y
aWdpbmFsQ29tbWl0U2V0ID0gdGhpcy5fY29tbWl0U2V0TWFwOwogICAgICAgICAgICAgY29uc3Qg
Y3VzdG9tQ29tbWl0U2V0ID0gbmV3IEN1c3RvbUNvbW1pdFNldDsKICAgICAgICAgICAgIGZvciAo
bGV0IHJlcG9zaXRvcnkgb2YgdGhpcy5fY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3JpZXMo
KSkgewogICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gdGhpcy5fcmV2aXNp
b25FZGl0b3JNYXBbbGFiZWxdLmdldChyZXBvc2l0b3J5KTsKICAgICAgICAgICAgICAgICBjb25z
b2xlLmFzc2VydChyZXZpc2lvbkVkaXRvcik7Ci0gICAgICAgICAgICAgICAgY3VzdG9tQ29tbWl0
U2V0LnNldFJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvci52
YWx1ZSk7CisgICAgICAgICAgICAgICAgY29uc3Qgb3duZXJSZXZpc2lvbiA9IHRoaXMuX293bmVy
UmV2aXNpb25NYXBbbGFiZWxdLmdldChyZXBvc2l0b3J5KSB8fCBudWxsOworICAgICAgICAgICAg
ICAgIGN1c3RvbUNvbW1pdFNldC5zZXRSZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwg
cmV2aXNpb25FZGl0b3IudmFsdWUsIG51bGwsIG93bmVyUmV2aXNpb24pOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgbWFwW2xhYmVsXSA9IGN1c3RvbUNvbW1pdFNldDsKICAgICAgICAgfQpA
QCAtNjcsNyArMTUwLDcgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRz
IFRlc3RHcm91cEZvcm0gewogICAgICAgICB0aGlzLmNvbnRlbnQoJ3N0YXJ0LWJ1dHRvbicpLmRp
c2FibGVkID0gISh0aGlzLl9jb21taXRTZXRNYXAgJiYgdGhpcy5fbmFtZSk7CiAgICAgICAgIHRo
aXMuY29udGVudCgnY3VzdG9taXplLWxpbmstY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICF0
aGlzLl9jb21taXRTZXRNYXAgPyAnbm9uZScgOiBudWxsOwogCi0gICAgICAgIHRoaXMuX3JlbmRl
ckN1c3RvbVJldmlzaW9uVGFibGVMYXppbHkuZXZhbHVhdGUodGhpcy5fY29tbWl0U2V0TWFwLCB0
aGlzLl9pc0N1c3RvbWl6ZWQpOworICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRh
YmxlKHRoaXMuX2NvbW1pdFNldE1hcCwgdGhpcy5faXNDdXN0b21pemVkKTsKICAgICB9CiAKICAg
ICBfcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZShjb21taXRTZXRNYXAsIGlzQ3VzdG9taXplZCkK
QEAgLTc4LDEzICsxNjEsMjEgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRl
bmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgcmVwb3NpdG9y
eVNldCA9IG5ldyBTZXQ7CisgICAgICAgIGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0
b3J5ID0gbmV3IE1hcDsKICAgICAgICAgY29uc3QgY29tbWl0U2V0TGFiZWxzID0gW107CiAgICAg
ICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307CiAgICAgICAgIGZvciAoY29uc3QgbGFi
ZWwgaW4gY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkg
b2YgY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3JpZXMoKSkKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgcmVwb3NpdG9yeSBvZiBjb21taXRTZXRNYXBbbGFiZWxdLnRvcExldmVsUmVwb3NpdG9y
aWVzKCkpIHsKICAgICAgICAgICAgICAgICByZXBvc2l0b3J5U2V0LmFkZChyZXBvc2l0b3J5KTsK
KyAgICAgICAgICAgICAgICBjb25zdCBvd25lZFJlcG9zaXRvcmllcyA9IGNvbW1pdFNldE1hcFts
YWJlbF0ub3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7Cisg
ICAgICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3J5U2V0ID0gZW5zdXJlU2V0Rm9yTWFw
KG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5LCByZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW93bmVkUmVwb3NpdG9yaWVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBvd25lZFJlcG9zaXRvcmllcy5mb3JFYWNoKChvd25lZFJlcG9z
aXRvcnkpID0+IG93bmVkUmVwb3NpdG9yeVNldC5hZGQob3duZWRSZXBvc2l0b3J5KSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjb21taXRTZXRMYWJlbHMucHVzaChsYWJlbCk7CiAgICAg
ICAgICAgICB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcFtsYWJlbF0gPSBuZXcgTWFwOworICAgICAg
ICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcFtsYWJlbF0gPSBuZXcgTWFwOwogICAgICAgICB9
CiAKICAgICAgICAgY29uc3QgcmVwb3NpdG9yeUxpc3QgPSBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQ
cmVmZXJyaW5nT25lc1dpdGhVUkwoQXJyYXkuZnJvbShyZXBvc2l0b3J5U2V0LnZhbHVlcygpKSk7
CkBAIC05MiwyMiArMTgzLDExNSBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4
dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZSh0aGlzLmNv
bnRlbnQoJ2N1c3RvbS10YWJsZScpLCBbCiAgICAgICAgICAgICBlbGVtZW50KCd0aGVhZCcsCiAg
ICAgICAgICAgICAgICAgZWxlbWVudCgndHInLAotICAgICAgICAgICAgICAgICAgICBbZWxlbWVu
dCgndGQnLCAnUmVwb3NpdG9yeScpLCBjb21taXRTZXRMYWJlbHMubWFwKChsYWJlbCkgPT4gZWxl
bWVudCgndGQnLCB7Y29sc3BhbjogY29tbWl0U2V0TGFiZWxzLmxlbmd0aCArIDF9LCBsYWJlbCkp
XSkpLAotICAgICAgICAgICAgZWxlbWVudCgndGJvZHknLAotICAgICAgICAgICAgICAgIHJlcG9z
aXRvcnlMaXN0Lm1hcCgocmVwb3NpdG9yeSkgPT4gewotICAgICAgICAgICAgICAgICAgICBjb25z
dCBjZWxscyA9IFtlbGVtZW50KCd0aCcsIHJlcG9zaXRvcnkubGFiZWwoKSldOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIGNvbW1pdFNldE1hcCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5fY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRv
bnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBsYWJlbCkpOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudCgndHInLCBjZWxscyk7Ci0gICAgICAgICAgICAgICAgfSkpXSk7Cisg
ICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsIHtjb2xzcGFuOiAyfSwgJ1JlcG9zaXRv
cnknKSwgY29tbWl0U2V0TGFiZWxzLm1hcCgobGFiZWwpID0+IGVsZW1lbnQoJ3RkJywge2NvbHNw
YW46IGNvbW1pdFNldExhYmVscy5sZW5ndGggKyAxfSwgbGFiZWwpKV0pKSwKKyAgICAgICAgICAg
IGVsZW1lbnQoJ3Rib2R5JywgdGhpcy5fY29uc3RydWN0VGFibGVSb3dzKHJlcG9zaXRvcnlMaXN0
LCBjb21taXRTZXRNYXAsIG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5KSldKTsKIAogICAg
ICAgICByZXR1cm4gcmVwb3NpdG9yeUxpc3Q7CiAgICAgfQogCi0gICAgX2NvbnN0cnVjdFJldmlz
aW9uUmFkaW9CdXR0b25zKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgcm93TGFiZWwpCisgICAg
X2NvbnN0cnVjdFRhYmxlUm93cyhyZXBvc2l0b3J5TGlzdCwgY29tbWl0U2V0TWFwLCBvd25lZFJl
cG9zaXRvcmllc0J5UmVwb3NpdG9yeSkgeworICAgICAgICBjb25zdCByb3dzID0gW107CisgICAg
ICAgIHJlcG9zaXRvcnlMaXN0LmZvckVhY2goKHJlcG9zaXRvcnkpID0+IHsKKyAgICAgICAgICAg
IGNvbnN0IG93bnNDb21taXRzID0gT2JqZWN0LnZhbHVlcyhjb21taXRTZXRNYXApLm1hcCgoY29t
bWl0U2V0KSA9PiBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KS5vd25z
Q29tbWl0cygpKS5ldmVyeSgodmFsdWUpID0+IHZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0IGNv
dW50Rm9yUm93c1dpdGhVbmRldGVybWluZWRSZXBvc2l0b3J5ID0gdGhpcy5faW5jb21wbGV0ZWRS
b3dGb3JPd25lclJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpIHx8IDA7CisgICAgICAgICAgICBj
b25zdCBvd25lZFJlcG9zaXRvcmllcyA9IG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5Lmdl
dChyZXBvc2l0b3J5KTsKKworICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMuX2NvbnN0cnVjdFRh
YmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRPd25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIG93
bnNDb21taXRzKSk7CisKKyAgICAgICAgICAgIFsuLi5vd25lZFJlcG9zaXRvcmllc10uZm9yRWFj
aCgob3duZWRSZXBvc2l0b3J5LCBpbmRleCkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IGxh
c3RSb3cgPSBpbmRleCA9PT0gb3duZWRSZXBvc2l0b3JpZXMuc2l6ZSAtIDEgJiYgY291bnRGb3JS
b3dzV2l0aFVuZGV0ZXJtaW5lZFJlcG9zaXRvcnkgPT09IDA7CisgICAgICAgICAgICAgICAgcm93
cy5wdXNoKHRoaXMuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcihjb21taXRT
ZXRNYXAsIG93bmVkUmVwb3NpdG9yeSwgcmVwb3NpdG9yeSwgbGFzdFJvdykpOworICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgIGlmIChjb3VudEZvclJvd3NXaXRoVW5kZXRlcm1pbmVkUmVw
b3NpdG9yeSA9PT0gMCApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBj
b25zdCBjb21taXRzID0gT2JqZWN0LnZhbHVlcyhjb21taXRTZXRNYXApLm1hcCgoY29tbWl0U2V0
KSA9PiBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSk7CisgICAgICAg
ICAgICBjb25zdCBjb21taXREaWZmID0gQ29tbWl0TG9nLmRpZmZNdWx0aXBsZU93bmVkQ29tbWl0
cyguLi5jb21taXRzKTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRGb3JS
b3dzV2l0aFVuZGV0ZXJtaW5lZFJlcG9zaXRvcnk7IGkrKykKKyAgICAgICAgICAgICAgICByb3dz
LnB1c2godGhpcy5fY29uc3RydWN0Um93V2l0aG91dFJlcG9zaXRvcnlTcGVjaWZpZWQoY29tbWl0
U2V0TWFwLCByZXBvc2l0b3J5LCBjb21taXREaWZmLCBpLCBpID09IGNvdW50Rm9yUm93c1dpdGhV
bmRldGVybWluZWRSZXBvc2l0b3J5IC0gMSkpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
IHJvd3M7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRP
d25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIG93bnNSZXBvc2l0b3JpZXMpIHsKKyAgICAg
ICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAg
Y29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGgnLCB7Y29sc3BhbjogMn0sIHJlcG9zaXRvcnkubGFi
ZWwoKSldOworCisgICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKQorICAg
ICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhj
b21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVsLCBudWxsLCBvd25zUmVwb3NpdG9yaWVzKSk7
CisKKyAgICAgICAgaWYgKG93bnNSZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IHBs
dXNCdXR0b24gPSBuZXcgUGx1c0J1dHRvbihyZXBvc2l0b3J5LmxhYmVsKCkpOworICAgICAgICAg
ICAgcGx1c0J1dHRvbi5saXN0ZW5Ub0FjdGlvbihyZXBvc2l0b3J5LmxhYmVsKCksICgpID0+IHsK
KyAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2luY29tcGxldGVkUm93Rm9yT3du
ZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KSB8fCAwOworICAgICAgICAgICAgICAgIHRoaXMu
X2luY29tcGxldGVkUm93Rm9yT3duZXJSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCB2YWx1ZSAr
IDEpOworICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIGNlbGxzLnB1c2goZWxlbWVudCgndGQnLCBwbHVzQnV0dG9uKSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcpKTsK
KworICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCBjZWxscyk7CisgICAgfQorCisgICAgX2Nv
bnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRv
cnksIG93bmVyUmVwb3NpdG9yeSwgbGFzdFJvdykgeworICAgICAgICBjb25zdCBlbGVtZW50ID0g
Q29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVt
ZW50KCd0ZCcsIHtjbGFzczogJ293bmVyLXJlcG9zaXRvcnktbGFiZWwnfSksIGVsZW1lbnQoJ3Ro
JywgcmVwb3NpdG9yeS5sYWJlbCgpKV07CisgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBgb3du
ZWQtY29tbWl0LSR7cmVwb3NpdG9yeS5sYWJlbCgpfWA7CisgICAgICAgIGNvbnN0IG1pbnVzQnV0
dG9uID0gbmV3IE1pbnVzQnV0dG9uKGFjdGlvbk5hbWUpOworCisgICAgICAgIGZvciAoY29uc3Qg
bGFiZWwgaW4gY29tbWl0U2V0TWFwKQorICAgICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25z
dHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVs
LCBvd25lclJlcG9zaXRvcnksIGZhbHNlKSk7CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVu
VG9BY3Rpb24oYWN0aW9uTmFtZSwgKCkgPT4geworICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhj
b21taXRTZXRNYXApLmZvckVhY2goKGNvbW1pdFNldCkgPT4gY29tbWl0U2V0LnJlbW92ZUNvbW1p
dEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9S
ZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNlbGxzLnB1c2goZWxlbWVudCgndGQnLCBt
aW51c0J1dHRvbikpOworCisgICAgICAgIHJldHVybiBlbGVtZW50KCd0cicsIHsnY2xhc3MnOiBs
YXN0Um93ID8gJ2xhc3Qtb3duZWQtcm93JyA6ICcnfSwgY2VsbHMpOworICAgIH0KKworICAgIF9j
b25zdHJ1Y3RSb3dXaXRob3V0UmVwb3NpdG9yeVNwZWNpZmllZChjb21taXRTZXRNYXAsIG93bmVy
UmVwb3NpdG9yeSwgY29tbWl0RGlmZiwgaW5kZXgsIGxhc3RSb3cpIHsKKyAgICAgICAgY29uc3Qg
ZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29uc3QgbGFi
ZWxDb3VudCA9ICBPYmplY3Qua2V5cyhjb21taXRTZXRNYXApLmxlbmd0aDsKKyAgICAgICAgY29u
c3QgY2hhbmdlZFJlcG9zaXRvcmllcyA9IFsuLi5jb21taXREaWZmLmtleXMoKV07CisgICAgICAg
IGNvbnN0IGFjdGlvbk5hbWUgPSBgaW5jb21wbGV0ZWQtcm93LSR7b3duZXJSZXBvc2l0b3J5Lmxh
YmVsKCl9LSR7aW5kZXh9YDsKKyAgICAgICAgY29uc3QgbWludXNCdXR0b24gPSBuZXcgTWludXNC
dXR0b24oYWN0aW9uTmFtZSk7CisgICAgICAgIGNvbnN0IGNlbGxzID0gW2VsZW1lbnQoJ3RkJywg
e2NsYXNzOiAnb3duZXItcmVwb3NpdG9yeS1sYWJlbCd9KSwgZWxlbWVudCgndGgnLCBuZXcgQ29t
Ym9Cb3goJycsIChyZXBvc2l0b3J5TmFtZSkgPT4geworICAgICAgICAgICAgY29uc3QgdGFyZ2V0
UmVwb3NpdG9yeSA9IGNoYW5nZWRSZXBvc2l0b3JpZXMuZmluZCgocmVwb3NpdG9yeSkgPT4gcmVw
b3NpdG9yeU5hbWUgPT09IHJlcG9zaXRvcnkubmFtZSgpKTsKKyAgICAgICAgICAgIGNvbnN0IG93
bmVkQ29tbWl0c0l0ZXJhdG9yID0gY29tbWl0RGlmZi5nZXQodGFyZ2V0UmVwb3NpdG9yeSlbU3lt
Ym9sLml0ZXJhdG9yXSgpOworICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhjb21taXRTZXRNYXAp
LmZvckVhY2goKGNvbW1pdFNldCkgPT4geworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRD
b21taXRGb3JSZXBvc2l0b3J5KHRhcmdldFJlcG9zaXRvcnksIG93bmVkQ29tbWl0c0l0ZXJhdG9y
Lm5leHQoKS52YWx1ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IHZhbHVl
ID0gdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuZ2V0KG93bmVyUmVwb3Np
dG9yeSk7CisgICAgICAgICAgICB0aGlzLl9pbmNvbXBsZXRlZFJvd0Zvck93bmVyUmVwb3NpdG9y
eS5zZXQob3duZXJSZXBvc2l0b3J5LCB2YWx1ZSAtIDEpOworICAgICAgICAgICAgdGhpcy5lbnF1
ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSwgY2hhbmdlZFJlcG9zaXRvcmllcy5tYXAoKHJlcG9z
aXRvcnkpID0+IHJlcG9zaXRvcnkubmFtZSgpKSkpLCBlbGVtZW50KCd0ZCcsIHtjb2xzcGFuOiBs
YWJlbENvdW50ICogKGxhYmVsQ291bnQgKyAxKX0pXTsKKworICAgICAgICBtaW51c0J1dHRvbi5s
aXN0ZW5Ub0FjdGlvbihhY3Rpb25OYW1lLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCB2YWx1
ZSA9IHRoaXMuX2luY29tcGxldGVkUm93Rm9yT3duZXJSZXBvc2l0b3J5LmdldChvd25lclJlcG9z
aXRvcnkpOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodmFsdWUgPiAwKTsKKyAgICAgICAg
ICAgIHRoaXMuX2luY29tcGxldGVkUm93Rm9yT3duZXJSZXBvc2l0b3J5LnNldChvd25lclJlcG9z
aXRvcnksIHZhbHVlIC0gMSk7CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwor
ICAgICAgICB9KTsKKyAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIG1pbnVzQnV0dG9u
KSk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgeydjbGFzcyc6IGxhc3RSb3cgPyAn
bGFzdC1vd25lZC1yb3cnIDogJyd9LCBjZWxscyk7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFJl
dmlzaW9uUmFkaW9CdXR0b25zKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgcm93TGFiZWwsIG93
bmVyUmVwb3NpdG9yeSwgb3duc1JlcG9zaXRvcmllcykKICAgICB7CiAgICAgICAgIGNvbnN0IGVs
ZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Ci0gICAgICAgIGNvbnN0IHJldmlz
aW9uRWRpdG9yID0gZWxlbWVudCgnaW5wdXQnKTsKKyAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0
b3IgPSBlbGVtZW50KCdpbnB1dCcsIHtkaXNhYmxlZDogISFvd25lclJlcG9zaXRvcnksCisgICAg
ICAgICAgICBvbmNoYW5nZTogKCkgPT4geworICAgICAgICAgICAgICAgIGlmICghb3duc1JlcG9z
aXRvcmllcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNv
bW1pdFNldE1hcFtyb3dMYWJlbF0udXBkYXRlQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5
LCByZXZpc2lvbkVkaXRvci52YWx1ZSkudGhlbigKKyAgICAgICAgICAgICAgICAgICAgKCkgPT4g
dGhpcy5lbnF1ZXVlVG9SZW5kZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgKCkgPT4gcmV2aXNp
b25FZGl0b3IudmFsdWUgPSAnJyk7CisgICAgICAgICAgICB9fSk7CiAKICAgICAgICAgdGhpcy5f
cmV2aXNpb25FZGl0b3JNYXBbcm93TGFiZWxdLnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRv
cik7CiAKQEAgLTExNiwxMCArMzAwLDE3IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZv
cm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNv
bW1pdFNldE1hcFtsYWJlbFRvQ2hvb3NlXS5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkp
OwogICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGxhYmVsVG9DaG9vc2UgPT0gcm93TGFiZWw7
CiAgICAgICAgICAgICBjb25zdCByYWRpb0J1dHRvbiA9IGVsZW1lbnQoJ2lucHV0Jywge3R5cGU6
ICdyYWRpbycsIG5hbWU6IGAke3Jvd0xhYmVsfS0ke3JlcG9zaXRvcnkuaWQoKX0tcmFkaW9gLCBj
aGVja2VkLAotICAgICAgICAgICAgICAgIG9uY2hhbmdlOiAoKSA9PiB7IHJldmlzaW9uRWRpdG9y
LnZhbHVlID0gY29tbWl0ID8gY29tbWl0LnJldmlzaW9uKCkgOiAnJzsgfX0pOworICAgICAgICAg
ICAgICAgIG9uY2hhbmdlOiAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uRWRp
dG9yLnZhbHVlID0gY29tbWl0ID8gY29tbWl0LnJldmlzaW9uKCkgOiAnJzsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbW1pdCAmJiBjb21taXQub3duZXJDb21taXQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX293bmVyUmV2aXNpb25NYXBbcm93TGFiZWxdLnNldChyZXBvc2l0
b3J5LCBjb21taXQub3duZXJDb21taXQoKS5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9
fSk7CiAKLSAgICAgICAgICAgIGlmIChjaGVja2VkKQorICAgICAgICAgICAgaWYgKGNoZWNrZWQp
IHsKICAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvci52YWx1ZSA9IGNvbW1pdCA/IGNvbW1p
dC5yZXZpc2lvbigpIDogJyc7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdCAmJiBjb21taXQu
b3duZXJDb21taXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1h
cFtyb3dMYWJlbF0uc2V0KHJlcG9zaXRvcnksIGNvbW1pdC5vd25lckNvbW1pdCgpLnJldmlzaW9u
KCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZXMucHVzaChlbGVtZW50KCd0ZCcs
IGVsZW1lbnQoJ2xhYmVsJywgW3JhZGlvQnV0dG9uLCBsYWJlbFRvQ2hvb3NlXSkpKTsKICAgICAg
ICAgfQogICAgICAgICBub2Rlcy5wdXNoKGVsZW1lbnQoJ3RkJywgcmV2aXNpb25FZGl0b3IpKTsK
QEAgLTEzOSw2ICszMzAsMjEgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRl
bmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICAgICAgICAgIG1hcmdpbjogMXJlbSAwOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRkLm93bmVyLXJlcG9zaXRv
cnktbGFiZWwgeworICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDJweCB0cmFuc3Bh
cmVudDsKKyAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggdHJhbnNwYXJl
bnQ7CisgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAycmVtOworICAgICAgICAgICAgICAgIHRl
eHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjY3VzdG9tLXRh
YmxlIC5sYXN0LW93bmVkLXJvdyB0ZC5vd25lci1yZXBvc2l0b3J5LWxhYmVsIHsKKyAgICAgICAg
ICAgICAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggI2RkZDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0aCB7CisgICAgICAgICAgICAgICAgbWluLXdpZHRo
OiAxMnJlbTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgI2N1c3RvbS10YWJsZSwKICAg
ICAgICAgICAgICNjdXN0b20tdGFibGUgdGQsCiAgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRo
IHsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9u
ZW50cy9taW51cy1idXR0b24uanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4NDcwZDEwMzNiN2UxN2Mw
MWE1N2QyZGFkOWQ4ZmIxZmFjY2I5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzCkBAIC0wLDAg
KzEsMzEgQEAKKworY2xhc3MgTWludXNCdXR0b24gZXh0ZW5kcyBCdXR0b25CYXNlIHsKKyAgICBj
b25zdHJ1Y3RvcihldmVudE5hbWUpCisgICAgeworICAgICAgICBzdXBlcignbWludXMtYnV0dG9u
Jyk7CisgICAgICAgIHRoaXMuX2V2ZW50TmFtZSA9IGV2ZW50TmFtZSB8fCAnbWludXMtYnV0dG9u
LWV2ZW50JworICAgIH0KKworICAgIGRpZENvbnN0cnVjdFNoYWRvd1RyZWUoKQorICAgIHsKKyAg
ICAgICAgdGhpcy5jb250ZW50KCdidXR0b24nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRo
aXMuY3JlYXRlRXZlbnRIYW5kbGVyKCgpID0+IHRoaXMuZGlzcGF0Y2hBY3Rpb24odGhpcy5fZXZl
bnROYW1lKSkpOworICAgIH0KKworICAgIHN0YXRpYyBidXR0b25Db250ZW50KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBgPGcgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgaWQ9Imlj
b24iPgorICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIGZpbGw9InRy
YW5zcGFyZW50Ii8+CisgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI1LDUwIDc1LDUwIiAv
PgorICAgICAgICA8L2c+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVtcGxhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN1cGVyLmNzc1RlbXBsYXRlKCkgKyBgCisgICAgICAgIGEgewor
ICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuMTJyZW07CisgICAgICAgIH1gOworICAgIH0KK30K
KworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdtaW51cy1idXR0b24nLCBNaW51c0J1dHRv
bik7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvb3duZWQtY29tbWl0LXZpZXdlci5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzCmluZGV4IDY4Zjc0MzM4
NWI0NTA1ZTllZmVkN2Q0ZjRmMDdkZmM2ZjVmMTJlMTIuLjA5Yjk0NGFmYWU2NzQxNjU0ODhmNmNl
MjMyNGE0MmE5YTRmMjQ5MDQgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzCisrKyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21taXQtdmlld2Vy
LmpzCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIE93bmVkQ29tbWl0Vmlld2VyIGV4dGVuZHMgQ29t
cG9uZW50QmFzZSB7CiAgICAgICAgIGlmICghcHJldmlvdXNPd25lZENvbW1pdHMgfHwgIWN1cnJl
bnRPd25lZENvbW1pdHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgY29uc3QgZGlm
ZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmT3duZWRDb21taXRzKHRoaXMuX3ByZXZpb3VzQ29tbWl0
LCB0aGlzLl9jdXJyZW50Q29tbWl0KTsKKyAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1p
dExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHModGhpcy5fcHJldmlvdXNDb21taXQsIHRoaXMu
X2N1cnJlbnRDb21taXQpOwogICAgICAgICBjb25zdCBzb3J0ZWRSZXBvc2l0b3JpZXMgPSBSZXBv
c2l0b3J5LnNvcnRCeU5hbWUoWy4uLmRpZmZlcmVuY2Uua2V5cygpXSk7CiAgICAgICAgIGNvbnN0
IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CiAKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1dHRvbi5q
cyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1
dHRvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wMWQzYTdjMjlmYjUxNGQyYmUyNmEwYjU4NTFlOTkzNjhlMGMw
YWJlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpzCkBAIC0wLDAgKzEsMzIgQEAKKworY2xhc3MgUGx1
c0J1dHRvbiBleHRlbmRzIEJ1dHRvbkJhc2UgeworICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSkK
KyAgICB7CisgICAgICAgIHN1cGVyKCdwbHVzLWJ1dHRvbicpOworICAgICAgICB0aGlzLl9ldmVu
dE5hbWUgPSBldmVudE5hbWUgfHwgJ3BsdXMtYnV0dG9uLWV2ZW50JzsKKyAgICB9CisKKyAgICBk
aWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCkKKyAgICB7CisgICAgICAgIHRoaXMuY29udGVudCgnYnV0
dG9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNyZWF0ZUV2ZW50SGFuZGxlcigo
KSA9PiB0aGlzLmRpc3BhdGNoQWN0aW9uKHRoaXMuX2V2ZW50TmFtZSkpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYnV0dG9uQ29udGVudCgpCisgICAgeworICAgICAgICByZXR1cm4gYDxnIHN0cm9r
ZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIGlkPSJpY29uIj4KKyAgICAgICAgICAgIDxjaXJj
bGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxsPSJ0cmFuc3BhcmVudCIvPgorICAgICAgICAg
ICAgPHBvbHlnb24gcG9pbnRzPSI1MCwyNSA1MCw3NSIgLz4KKyAgICAgICAgICAgIDxwb2x5Z29u
IHBvaW50cz0iMjUsNTAgNzUsNTAiIC8+CisgICAgICAgIDwvZz5gOworICAgIH0KKworICAgIHN0
YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gc3VwZXIuY3NzVGVtcGxh
dGUoKSArIGAKKyAgICAgICAgYSB7CisgICAgICAgICAgICBwYWRkaW5nLXRvcDogMC4xMnJlbTsK
KyAgICAgICAgfWA7CisgICAgfQorfQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ3Bs
dXMtYnV0dG9uJywgUGx1c0J1dHRvbik7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2luZGV4Lmh0bWwKaW5kZXggNDZlNmFkYzQ0ZTIyNzU0OTA4MTc1MDI0ZjA5ZGM1OTBh
ZDJkYWFkMi4uMjdkODRlNDdmODRiYjFhMGY3MDdmNDgzNjk5M2ZhYzZlZTgxZWUwOCAxMDA2NDQK
LS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbApAQCAtOTgsNiAr
OTgsOSBAQCBSdW4gdG9vbHMvYnVuZGxlLXYzLXNjcmlwdHMgdG8gc3BlZWQgdXAgdGhlIGxvYWQg
dGltZSBmb3IgcHJvZHVjdGlvbi5gKTsKICAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMv
Y3VzdG9tLWFuYWx5c2lzLXRhc2stY29uZmlndXJhdG9yLmpzIj48L3NjcmlwdD4KICAgICAgICAg
PHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvY3VzdG9tLWNvbmZpZ3VyYXRpb24tdGVzdC1ncm91cC1m
b3JtLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvaW5zdGFu
dC1maWxlLXVwbG9hZGVyLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBv
bmVudHMvcGx1cy1idXR0b24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29t
cG9uZW50cy9taW51cy1idXR0b24uanMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0i
Y29tcG9uZW50cy9jb21iby1ib3guanMiPjwvc2NyaXB0PgogCiAgICAgICAgIDxzY3JpcHQgc3Jj
PSJwYWdlcy9wYWdlLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3Bh
Z2Utcm91dGVyLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCmluZGV4IDdiZTQyMTQ1NmNhZGQ1
ZmIzMGYzYzNjMmM1NzBjZTJlYmRhMTcyNzEuLmRmNWYyMjFiYTMxODE4NDVkMjQ0OWRmYzc0N2Uz
M2YxYjA4ODNiZWUgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvbW9kZWxzL2NvbW1pdC1sb2cuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwpAQCAtMTIsNiArMTIsOCBAQCBjbGFzcyBDb21t
aXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICBpZiAodGhpcy5fcmVtb3Rl
SWQpCiAgICAgICAgICAgICB0aGlzLmVuc3VyZU5hbWVkU3RhdGljTWFwKCdyZW1vdGVJZCcpW3Ro
aXMuX3JlbW90ZUlkXSA9IHRoaXM7CiAgICAgICAgIHRoaXMuX293bmVkQ29tbWl0cyA9IG51bGw7
CisgICAgICAgIHRoaXMuX293bmVyQ29tbWl0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb3duZWRD
b21taXRCeU93bmVkUmVwb3NpdG9yeSA9IG5ldyBNYXA7CiAgICAgfQogCiAgICAgdXBkYXRlU2lu
Z2xldG9uKHJhd0RhdGEpCkBAIC0zNiwxMyArMzgsMTQgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVu
ZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBtZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0
YVsnbWVzc2FnZSddOyB9CiAgICAgdXJsKCkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeS51cmxG
b3JSZXZpc2lvbih0aGlzLl9yYXdEYXRhWydyZXZpc2lvbiddKTsgfQogICAgIG93bnNDb21taXRz
KCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnb3duc0NvbW1pdHMnXTsgfQorICAgIG93bmVyQ29t
bWl0KCkgeyByZXR1cm4gdGhpcy5fb3duZXJDb21taXQ7IH0KKworICAgIHNldE93bmVyQ29tbWl0
cyhvd25lckNvbW1pdCkgeyB0aGlzLl9vd25lckNvbW1pdCA9IG93bmVyQ29tbWl0OyB9CiAKICAg
ICBsYWJlbCgpCiAgICAgewotICAgICAgICB2YXIgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uKCk7
Ci0gICAgICAgIGlmIChwYXJzZUludChyZXZpc2lvbikgPT0gcmV2aXNpb24pIC8vIGUuZy4gcjEy
MzQ1Ci0gICAgICAgICAgICByZXR1cm4gJ3InICsgcmV2aXNpb247Ci0gICAgICAgIGVsc2UgaWYg
KHJldmlzaW9uLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAorICAgICAgICBjb25zdCBy
ZXZpc2lvbiA9IHRoaXMucmV2aXNpb24oKTsKKyAgICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCA9
PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAogICAgICAgICAgICAgcmV0dXJuIHJldmlzaW9uLnN1YnN0
cmluZygwLCA4KTsKICAgICAgICAgcmV0dXJuIHJldmlzaW9uOwogICAgIH0KQEAgLTg2LDYgKzg5
LDggQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAg
fSk7CiAgICAgfQogCisgICAgb3duZWRDb21taXRGb3JPd25lZFJlcG9zaXRvcnkob3duZWRSZXBv
c2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1pdEJ5T3duZWRSZXBvc2l0b3J5LmdldChv
d25lZFJlcG9zaXRvcnkpOyB9CisKICAgICBmZXRjaE93bmVkQ29tbWl0cygpCiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMucmVwb3NpdG9yeSgpLm93bmVkUmVwb3NpdG9yaWVzKCkpCkBAIC05NCwx
MSArOTksMTcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAg
ICAgICAgaWYgKCF0aGlzLm93bnNDb21taXRzKCkpCiAgICAgICAgICAgICByZXR1cm4gUHJvbWlz
ZS5yZWplY3QoKTsKIAotICAgICAgICBpZiAodGhpcy5fb3duZWRDb21taXRzKQorICAgICAgICBp
ZiAodGhpcy5fb3duZWRDb21taXRzKSB7CisgICAgICAgICAgICB0aGlzLl9vd25lZENvbW1pdHMu
Zm9yRWFjaCgob3duZWRDb21taXQpID0+IG93bmVkQ29tbWl0LnNldE93bmVyQ29tbWl0cyh0aGlz
KSk7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX293bmVkQ29tbWl0
cyk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmNhY2hlZEZldGNoKGAu
Li9hcGkvY29tbWl0cy8ke3RoaXMucmVwb3NpdG9yeSgpLmlkKCl9L293bmVkLWNvbW1pdHM/b3du
ZXItcmV2aXNpb249JHtlc2NhcGUodGhpcy5yZXZpc2lvbigpKX1gKS50aGVuKChkYXRhKSA9PiB7
CiAgICAgICAgICAgICB0aGlzLl9vd25lZENvbW1pdHMgPSBDb21taXRMb2cuX2NvbnN0cnVjdEZy
b21SYXdEYXRhKGRhdGEpOworICAgICAgICAgICAgdGhpcy5fb3duZWRDb21taXRzLmZvckVhY2go
KG93bmVkQ29tbWl0KSA9PiB7CisgICAgICAgICAgICAgICAgb3duZWRDb21taXQuc2V0T3duZXJD
b21taXRzKHRoaXMpOworICAgICAgICAgICAgICAgIHRoaXMuX293bmVkQ29tbWl0QnlPd25lZFJl
cG9zaXRvcnkuc2V0KG93bmVkQ29tbWl0LnJlcG9zaXRvcnkoKSwgb3duZWRDb21taXQpOworICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3duZWRDb21taXRzOwogICAg
ICAgICB9KTsKICAgICB9CkBAIC0xMTEsMjMgKzEyMiwyMyBAQCBjbGFzcyBDb21taXRMb2cgZXh0
ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICByZXR1cm4gb3duZWRDb21taXRNYXA7CiAg
ICAgfQogCi0gICAgc3RhdGljIGRpZmZPd25lZENvbW1pdHMocHJldmlvdXNDb21taXQsIGN1cnJl
bnRDb21taXQpCisgICAgc3RhdGljIGRpZmZNdWx0aXBsZU93bmVkQ29tbWl0cyguLi5jb21taXRz
KQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQocHJldmlvdXNDb21taXQpOwotICAgICAg
ICBjb25zb2xlLmFzc2VydChjdXJyZW50Q29tbWl0KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQo
cHJldmlvdXNDb21taXQuX293bmVkQ29tbWl0cyk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1
cnJlbnRDb21taXQuX293bmVkQ29tbWl0cyk7Ci0KLSAgICAgICAgY29uc3QgcHJldmlvdXNPd25l
ZENvbW1pdE1hcCA9IHByZXZpb3VzQ29tbWl0Ll9idWlsZE93bmVkQ29tbWl0TWFwKCk7Ci0gICAg
ICAgIGNvbnN0IGN1cnJlbnRPd25lZENvbW1pdE1hcCA9IGN1cnJlbnRDb21taXQuX2J1aWxkT3du
ZWRDb21taXRNYXAoKTsKLSAgICAgICAgY29uc3Qgb3duZWRDb21taXRSZXBvc2l0b3JpZXMgPSBu
ZXcgU2V0KFsuLi5jdXJyZW50T3duZWRDb21taXRNYXAua2V5cygpLCAuLi5wcmV2aW91c093bmVk
Q29tbWl0TWFwLmtleXMoKV0pOworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRzLmxlbmd0
aCA+PSAyKTsKKyAgICAgICAgZm9yIChsZXQgY29tbWl0IG9mIGNvbW1pdHMpIHsKKyAgICAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdCk7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChj
b21taXQuX293bmVkQ29tbWl0cyk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBvd25lZENv
bW1pdE1hcExpc3QgPSBjb21taXRzLm1hcCgoY29tbWl0KSA9PiBjb21taXQuX2J1aWxkT3duZWRD
b21taXRNYXAoKSk7CisgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzID0gbmV3
IFNldChvd25lZENvbW1pdE1hcExpc3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gQXJyYXkuZnJv
bShvd25lZENvbW1pdE1hcC5rZXlzKCkpKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpKSk7
CiAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgTWFwOwogCiAgICAgICAgIG93bmVkQ29t
bWl0UmVwb3NpdG9yaWVzLmZvckVhY2goKG93bmVkQ29tbWl0UmVwb3NpdG9yeSkgPT4gewotICAg
ICAgICAgICAgY29uc3QgY3VycmVudFJldmlzaW9uID0gY3VycmVudE93bmVkQ29tbWl0TWFwLmdl
dChvd25lZENvbW1pdFJlcG9zaXRvcnkpOwotICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSZXZp
c2lvbiA9IHByZXZpb3VzT3duZWRDb21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSk7
Ci0gICAgICAgICAgICBpZiAoY3VycmVudFJldmlzaW9uICE9IHByZXZpb3VzUmV2aXNpb24pCi0g
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZS5zZXQob3duZWRDb21taXRSZXBvc2l0b3J5LCBbcHJl
dmlvdXNSZXZpc2lvbiwgY3VycmVudFJldmlzaW9uXSk7CisgICAgICAgICAgICBjb25zdCBvd25l
ZENvbW1pdHMgPSBvd25lZENvbW1pdE1hcExpc3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gb3du
ZWRDb21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSkpOworICAgICAgICAgICAgY29u
c3QgdW5pcXVlT3duZWRDb21taXRzID0gbmV3IFNldChvd25lZENvbW1pdHMpOworICAgICAgICAg
ICAgaWYgKHVuaXF1ZU93bmVkQ29tbWl0cy5zaXplID4gMSkKKyAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlLnNldChvd25lZENvbW1pdFJlcG9zaXRvcnksIG93bmVkQ29tbWl0cyk7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIHJldHVybiBkaWZmZXJlbmNlOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggYjE3
OGFjODBlNTIzZDQwYWZmMWNlZDJmMjk3NDQ2MDk4MjY1NmVmNy4uOTk2YWU5Nzk0MmE5ZDEyYmMw
NGU2YjlkN2M4NmU2ZGQ5ZDhhZDMxMyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCkBAIC03Myw2ICs3MywxMCBA
QCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogCiAgICAgb3duZWRS
ZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5f
b3duZXJSZXBvc2l0b3J5VG9Pd25lZFJlcG9zaXRvcmllc01hcC5nZXQocmVwb3NpdG9yeSk7IH0K
IAorICAgIGNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkpOworICAgIH0K
ICAgICByZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKICAgICB7CiAgICAgICAgIHZh
ciBjb21taXQgPSB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkpOwpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxv
Zy10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1s
b2ctdGVzdHMuanMKaW5kZXggM2IzMWU1YzA3MWQxY2MwNWNjOGE4YzBkNDZiZjNkNWEzNjdlZjMw
OS4uNzI5ZDQyNDc5N2RhYTU5YTY0M2M4NmQ3ZThlZDk1ZjgxNTcyOTMyNyAxMDA2NDQKLS0tIGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcwor
KysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3Rz
LmpzCkBAIC05NCw4ICs5NCw4IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAoKSB7
CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIAogICAgIGRlc2NyaWJlKCdsYWJlbCcsIGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgaXQoJ3Nob3VsZCBwcmVmaXggU1ZOIHJldmlzaW9uIHdpdGggInIi
JywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdENvbW1pdCgp
LmxhYmVsKCksICdyMjAwODA1Jyk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IG1vZGlmeSBTVk4g
cmV2aXNpb24iJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtp
dENvbW1pdCgpLmxhYmVsKCksICcyMDA4MDUnKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgaXQo
J3Nob3VsZCB0cnVuY2F0ZSBhIEdpdCBoYXNoIGF0IDh0aCBjaGFyYWN0ZXInLCBmdW5jdGlvbiAo
KSB7CkBAIC0xMDgsOCArMTA4LDggQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgp
IHsKICAgICB9KTsKIAogICAgIGRlc2NyaWJlKCd0aXRsZScsIGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgaXQoJ3Nob3VsZCBwcmVmaXggU1ZOIHJldmlzaW9uIHdpdGggInIiJywgZnVuY3Rpb24gKCkg
ewotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHdlYmtpdENvbW1pdCgpLnRpdGxlKCksICdXZWJL
aXQgYXQgcjIwMDgwNScpOworICAgICAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgU1ZOIHJldmlz
aW9uIicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbCh3ZWJraXRDb21t
aXQoKS50aXRsZSgpLCAnV2ViS2l0IGF0IDIwMDgwNScpOwogICAgICAgICB9KTsKIAogICAgICAg
ICBpdCgnc2hvdWxkIHRydW5jYXRlIGEgR2l0IGhhc2ggYXQgOHRoIGNoYXJhY3RlcicsIGZ1bmN0
aW9uICgpIHsKQEAgLTEyNCw3ICsxMjQsNyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rp
b24gKCkgewogICAgIGRlc2NyaWJlKCdkaWZmJywgZnVuY3Rpb24gKCkgewogICAgICAgICBpdCgn
c2hvdWxkIHVzZSBsYWJlbCgpIGFzIHRoZSBsYWJlbCB0aGUgcHJldmlvdXMgY29tbWl0IGlzIG1p
c3NpbmcnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKHdlYmtp
dENvbW1pdCgpLmRpZmYoKSwgewotICAgICAgICAgICAgICAgIGxhYmVsOiAncjIwMDgwNScsCisg
ICAgICAgICAgICAgICAgbGFiZWw6ICcyMDA4MDUnLAogICAgICAgICAgICAgICAgIHVybDogJ2h0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIwMDgwNScsCiAgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQKICAgICAgICAgICAgIH0pOwpAQCAtMjg3LDcg
KzI4Nyw3IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAoKSB7CiAKICAgICAgICAg
ICAgICAgICByZXR1cm4gb3RoZXJGZXRjaGluZ1Byb21pc2U7CiAgICAgICAgICAgICB9KS50aGVu
KCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gQ29tbWl0TG9nLmRp
ZmZPd25lZENvbW1pdHMob25lQ29tbWl0LCBvdGhlckNvbW1pdCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmTXVsdGlwbGVPd25lZENvbW1pdHMob25l
Q29tbWl0LCBvdGhlckNvbW1pdCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGRpZmZl
cmVuY2Uuc2l6ZSwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGRpZmZlcmVuY2Uu
a2V5cygpLm5leHQoKS52YWx1ZSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpOwogICAgICAg
ICAgICAgfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0
cy9tZWFzdXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3VuaXQtdGVzdHMvbWVhc3VyZW1lbnQtYWRhcHRvci10ZXN0cy5qcwppbmRleCAyNGE0OTA3MjE3
NmNhMTQ0Y2JmZmEzZGEwYWFkODJkMGY3ZDY5ODdhLi5mMThkNWZiMTg4MjA5YWU5ZTA2Nzg2OWUy
N2UwYjM1OWM3OGUyMGI2IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5p
dC10ZXN0cy9tZWFzdXJlbWVudC1hZGFwdG9yLXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LWFkYXB0b3ItdGVzdHMuanMKQEAgLTEw
Nyw4ICsxMDcsOCBAQCBkZXNjcmliZSgnTWVhc3VyZW1lbnRBZGFwdG9yJywgZnVuY3Rpb24gKCkg
ewogICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5pZCgpLCAyMjIpOwogICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKCtjb21taXQudGltZSgpLCAxNDQ3NzA3MDU1NTc2KTsKICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChjb21taXQucmV2aXNpb24oKSwgJzE5MjQ4MycpOwotICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAncjE5MjQ4MycpOwotICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2ViS2l0IGF0IHIxOTI0ODMnKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChjb21taXQubGFiZWwoKSwgJzE5MjQ4MycpOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2ViS2l0IGF0IDE5MjQ4MycpOwogICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC51cmwoKSwgJ2h0dHA6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzE5MjQ4MycpOwogICAgICAgICB9KTsKIApAQCAtMTIyLDQgKzEyMiw0IEBA
IGRlc2NyaWJlKCdNZWFzdXJlbWVudEFkYXB0b3InLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgIH0p
OwogCiAgICAgfSk7Ci19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9KTsKZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVtZW50LXNl
dC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL21lYXN1cmVt
ZW50LXNldC10ZXN0cy5qcwppbmRleCBkZDI4YTA3ZWQ0MzhkOWQ1Njg5OTdlZDc2Y2YwMmY2Nzc5
NDUzZjJmLi41Nzc4ZGY3NmEzM2QwMDdhMDE5NTQwMDJjM2VmYmVhOWU5YmY0YzY5IDEwMDY0NAot
LS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9tZWFzdXJlbWVudC1zZXQt
dGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvbWVhc3Vy
ZW1lbnQtc2V0LXRlc3RzLmpzCkBAIC04MTMsOCArODEzLDggQEAgZGVzY3JpYmUoJ01lYXN1cmVt
ZW50U2V0JywgKCkgPT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQucmV2
aXNpb24oKSwgJzIxMDA5NicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQu
bWVzc2FnZSgpLCBudWxsKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LnVy
bCgpLCAnaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjEwMDk2Jyk7Ci0gICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAncjIxMDA5NicpOwotICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQudGl0bGUoKSwgJ1dlYktpdCBhdCByMjEwMDk2
Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5sYWJlbCgpLCAnMjEwMDk2
Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC50aXRsZSgpLCAnV2ViS2l0
IGF0IDIxMDA5NicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXRTZXQubGF0
ZXN0Q29tbWl0VGltZSgpLCBjb21taXRUaW1lKTsKIAogICAgICAgICAgICAgICAgIGNvbnN0IGJ1
aWxkID0gcG9pbnQuYnVpbGQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328791</attachid>
            <date>2017-12-07 23:02:30 -0800</date>
            <delta_ts>2017-12-19 01:37:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171207230230.patch</filename>
            <type>text/plain</type>
            <size>49428</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTA1CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCAyMDFlNGI0NmY1ZmJiOTZmZDVhNjI1Zjc4ODVjYWRiZTAxNTQ1YWQyLi5hZDIxMDE0NmM3
ZDk4N2Q3N2I2ZDllNGY0NjAwMGIyMTBkYjVhMmUyIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxNy0xMi0wNyAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9u
ZW50cy9jb21iby1ib3guanM6IEFkZGVkLgorICAgICAgICAoQ29tYm9Cb3gpOgorICAgICAgICAo
Q29tYm9Cb3gucHJvdG90eXBlLl9jcmVhdGVDYW5kaWRhdGVMaXN0KTogQ3JlYXRlIGFuIGh0bWwg
bGlzdCBiYXNlZCBvbiBjYW5kaWRhdGVzLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9j
b25zdHJ1Y3RUZXh0RmllbGQpOgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9jYW5kaWRh
dGVFbGVtZW50Rm9yQ3VycmVudEluZGV4SW5kZXgpOiBSZXR1cm5zIGN1cnJlbnRseSBmb2N1c2Vk
IGxpc3QgZWxlbWVudC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlkYXRlTmFt
ZUZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgY3VycmVudGx5IGZvY3VzZWQgY2FuZGlkYXRlLgor
ICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGlu
Z0l0ZW0pOiBTdXBwb3J0cyBhdXRvIGNvbXBsZXRpb24uCisgICAgICAgIChDb21ib0JveC5wcm90
b3R5cGUuX21vdmVDYW5kaWRhdGUpOiBTdXBwb3J0cyBhcnJvdyB1cC9kb3duLgorICAgICAgICAo
Q29tYm9Cb3gucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChDb21ib0JveC5odG1sVGVtcGxh
dGUpOgorICAgICAgICAoQ29tYm9Cb3guY3NzVGVtcGxhdGUpOgorICAgICAgICAqIHB1YmxpYy92
My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanM6CisgICAgICAgIChl
bnN1cmVTZXRGb3JNYXApOiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY3JlYXRlIGEgU2V0IGZvciBr
ZXkgaWYgbm90IGV4aXN0cyBhbmQgcmV0dXJuIHRoZSBlbnRyeSBrZXkgcG9pbnRzIHRvLgorICAg
ICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSk6CisgICAgICAgIChDdXN0b21pemFibGVU
ZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5zZXRDb21taXRTZXRNYXApOiBDb252ZXJ0cyBDb21taXRT
ZXRzIGluIENvbW1pdFNldE1hcCB0byBJbnRlcm1lZGlhdGVDb21taXRTZXQuCisgICAgICAgIChD
dXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVl
KToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb21wdXRl
Q29tbWl0U2V0TWFwKTogQWRkZWQgdGhlIGxvZ2ljIHRvIGNvbnZlcnQgYSBJbnRlcm1lZGlhdGVD
b21taXRTZXQgdG8gYSBDdXN0b21Db21taXRTZXQuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0
R3JvdXBGb3JtLnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdy
b3VwRm9ybS5wcm90b3R5cGUuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGUpOgorICAgICAgICAo
Q3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93cyk6
IFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGJ1aWxkaW5nIHRhYmxlIHJvd3MgaW5j
bHVkaW5nIHJvd3MgdGhlCisgICAgICAgIGNvbW1pdHMgb2Ygd2hpY2ggaGF2ZSBvd25lcnMgYW5k
IHRoZSByb3dzIHdpdGggdW5zcGVjaWZpZWQgcmVwb3NpdG9yeS4KKyAgICAgICAgKEN1c3RvbWl6
YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNX
aXRob3V0T3duZXIpOiBCdWlsZCBhIHRhYmxlIHJvdyBmb3IgYSB0b3AgbGV2ZWwgcmVwb3NpdG9y
eS4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1
Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRoT3duZXIpOiBCdWlsZCBhIHRhYmxlIHJvdyBmb3IgcmVw
b3NpdG9yeSB3aXRoIG93bmVyLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5w
cm90b3R5cGUuX2NvbnN0cnVjdFJvd1dpdGhvdXRSZXBvc2l0b3J5U3BlY2lmaWVkKToKKyAgICAg
ICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RSb3dXaXRo
b3V0UmVwb3NpdG9yeVNwZWNpZmllZCk6IEJ1aWxkIGEgdGFibGUgcm93IGZvciBhbiB1bnNwZWNp
ZmllZCByZXBvc2l0b3J5LgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90
b3R5cGUuX2NvbnN0cnVjdFJldmlzaW9uUmFkaW9CdXR0b25zKTogVXBkYXRlIHRoZSBsb2dpYyB0
byBzdXBwb3J0IGJ1aWxkIHJhZGlvIGJ1dHRvbnMgZm9yIHRoZSBvd25lZCByZXBvc2l0b3J5IHJv
d3MuCisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzOiBBZGRl
ZCBhIG1pbnVzIGJ1dHRvbi4KKyAgICAgICAgKE1pbnVzQnV0dG9uKToKKyAgICAgICAgKE1pbnVz
QnV0dG9uLmJ1dHRvbkNvbnRlbnQpOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL293
bmVkLWNvbW1pdC12aWV3ZXIuanM6CisgICAgICAgIChPd25lZENvbW1pdFZpZXdlci5wcm90b3R5
cGUuX3JlbmRlck93bmVkQ29tbWl0VGFibGUpOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25l
bnRzL3BsdXMtYnV0dG9uLmpzOiBBZGRlZCBhIHBsdXMgYnV0dG9uLgorICAgICAgICAoUGx1c0J1
dHRvbik6CisgICAgICAgIChQbHVzQnV0dG9uLmJ1dHRvbkNvbnRlbnQpOgorICAgICAgICAqIHB1
YmxpYy92My9pbmRleC5odG1sOgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxv
Zy5qczoKKyAgICAgICAgKENvbW1pdExvZyk6CisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBl
Lm93bmVkQ29tbWl0cyk6CisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBlLm93bmVyQ29tbWl0
KTogUmV0dXJucyB0aGUgb3duZXIgY29tbWl0IG9mIHRoaXMgY29tbWl0LgorICAgICAgICAoQ29t
bWl0TG9nLnByb3RvdHlwZS5zZXRPd25lckNvbW1pdHMpOiBTZXRzIHRoZSBvd25lciBvZiB0aGlz
IGNvbW1pdC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUubGFiZWwpOgorICAgICAgICAo
Q29tbWl0TG9nLnByb3RvdHlwZS5kaWZmKToKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUu
b3duZWRDb21taXRGb3JPd25lZFJlcG9zaXRvcnkpOgorICAgICAgICAoQ29tbWl0TG9nLnByb3Rv
dHlwZS5mZXRjaE93bmVkQ29tbWl0cyk6IFNldHMgdGhlIG93bmVyIGZvciB0aG9zZSBvd25lZCBj
b21taXRzLiBUaGUgb3duZXIgb2YgYSBjb21taXQgd2l0aCBtdWx0aXBsZSBvd25lcgorICAgICAg
ICBjb21taXRzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgZWFjaCB0aW1lIHRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkLgorICAgICAgICAoQ29tbWl0TG9nLm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93
bmVyQ29tbWl0cyk6IEEgbW9yZSBnZW5lcmljIHZlcnNpb24gb2Ygd2hpY2ggY29tcGFyZXMgbXVs
dGlwbGUgb3duZWQgY29tbWl0cy4KKyAgICAgICAgKENvbW1pdExvZy5kaWZmT3duZWRDb21taXRz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanM6Cisg
ICAgICAgIChDb21taXRTZXQucHJvdG90eXBlLmNvbW1pdEZvclJlcG9zaXRvcnkpOgorICAgICAg
ICAoZW5zdXJlU2V0Rm9yTWFwKTogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZSBhIFNldCBm
b3Iga2V5IGlmIG5vdCBleGlzdHMgYW5kIHJldHVybiB0aGUgZW50cnkga2V5IHBvaW50cyB0by4K
KyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldCk6IEluIG9yZGVyIHRvIHN1cHBvcnQgb3du
ZWQgY29tbWl0cywgY29tbWl0IHNldCBzaG91bGQgc3VwcG9ydCBtdXRhdGlvbiBhcyB3ZSBtYXkg
YWRkL3JlbW92ZSBjb21taXRzIGZvciBhIHJlcG9zaXRvcnkuCisgICAgICAgIFRoaXMgdmFyaWFu
dCBvZiBjb21taXQgc2V0IHN1cHBvcnRzIHJlbW92ZS91cGRhdGUgY29tbWl0cyBmb3IgcmVwb3Np
dG9yaWVzLgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5zZXRDb21t
aXRGb3JSZXBvc2l0b3J5KTogU2V0cyBhIGNvbW1pdCBmb3IgYSByZXBvc2l0b3J5IGluIGNvbW1p
dCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLnJlbW92ZUNv
bW1pdEZvclJlcG9zaXRvcnkpOiBSZW1vdmVzIGEgY29tbWl0IGZvciBhIHJlcG9zaXRvcnkgaW4g
Y29tbWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUudXBk
YXRlQ29tbWl0Rm9yUmVwb3NpdG9yeSk6IFVwZGF0ZXMgYSBjb21taXQgZm9yIGEgcmVwb3NpdG9y
eSBieSBnaXZlbiBhIHJldmlzaW9uIG9mIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAoSW50ZXJt
ZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5vd25zQ29tbWl0c0ZvclJlcG9zaXRvcnkpOgorICAg
ICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5yZXBvc2l0b3JpZXMpOiBSZXR1
cm5zIGFsbCByZXBvc2l0b3JpZXMgaW4gdGhlIGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1l
ZGlhdGVDb21taXRTZXQucHJvdG90eXBlLmhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcyk6IFJldHVy
bnMgYWxsIHJlcG9zaXRvcmllcyB0aG9zZSBkb24ndCBoYXZlIGFuIG93bmVyLgorICAgICAgICAo
SW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5jb21taXRGb3JSZXBvc2l0b3J5KTogUmV0
dXJucyBhIGNvbW1pdCBmb3IgYSBnaXZlbiByZXBvc2l0b3J5LgorICAgICAgICAoSW50ZXJtZWRp
YXRlQ29tbWl0U2V0LnByb3RvdHlwZS5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9y
eSk6IFJldHVybnMgYWxsIHJlcG9zaXRvcmllcyBvd25lZCBieSBhIGdpdmVuIHJlcG9zaXRvcnkg
aW4gY3VycmVudCBjb21taXQgc2V0LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnBy
b3RvdHlwZS5vd25lckNvbW1pdEZvclJlcG9zaXRvcnkpOiBSZXR1cm5zIG93bmVyIGNvbW1pdCBm
b3IgYSBnaXZlbiBvd25lZCByZXBvc2l0b3J5LgorICAgICAgICAqIHRvb2xzL2pzL3YzLW1vZGVs
cy5qczoKKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanM6CisgICAgICAg
ICogdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzOiBBZGRlZCB1bml0IHRlc3RzIGZvciBJ
bnRlcm1lZGlhdGVDb21taXRTZXQuCisKIDIwMTctMTEtMDIgIERld2VpIFpodSAgPGRld2VpX3po
dUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHBsYXRmb3JtIGFyZ3VtZW50IGZvciBzeW5jaW5n
IHNjcmlwdC4KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
Y29tcG9uZW50cy9jb21iby1ib3guanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL2NvbXBvbmVudHMvY29tYm8tYm94LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwNTQxNTUyOGNiYTM0NzI0
NmRmYTg2NjQ1MmQwY2U5MDkyZDYyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94LmpzCkBAIC0wLDAgKzEs
MTkyIEBACitjbGFzcyBDb21ib0JveCBleHRlbmRzIENvbXBvbmVudEJhc2UKK3sKKyAgICBjb25z
dHJ1Y3RvcihkZWZhdWx0VmFsdWUsIGRpZFVwZGF0ZVZhbHVlLCBjYW5kaWRhdGVzKQorICAgIHsK
KyAgICAgICAgc3VwZXIoJ2NvbWJvLWJveCcpOworICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0g
ZGVmYXVsdFZhbHVlOworICAgICAgICB0aGlzLl9kaWRVcGRhdGVWYWx1ZSA9IGRpZFVwZGF0ZVZh
bHVlOworICAgICAgICB0aGlzLl9jYW5kaWRhdGVzID0gY2FuZGlkYXRlczsKKyAgICAgICAgdGhp
cy5fY3VycmVudENhbmRpZGF0ZUxpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5fZWxlbWVudEJ5Q2Fu
ZGlkYXRlTmFtZSA9IG5ldyBNYXA7CisgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRl
eCA9IG51bGw7CisgICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX3NlbGVjdGVkSXRlbVZhbHVlID0gJyc7CisgICAgICAgIHRoaXMuX2NyZWF0ZUNh
bmRpZGF0ZUxpc3RMYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fY3Jl
YXRlQ2FuZGlkYXRlTGlzdC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fY29uc3RydWN0VGV4
dEZpZWxkTGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX2NvbnN0cnVj
dFRleHRGaWVsZC5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBfY3JlYXRlQ2FuZGlkYXRlTGlz
dChjYW5kaWRhdGVzLCBrZXl3b3JkKQorICAgIHsKKyAgICAgICAgY29uc3QgZWxlbWVudCA9IENv
bXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29uc3QgbGluayA9IENvbXBvbmVu
dEJhc2UuY3JlYXRlTGluazsKKyAgICAgICAgY29uc3Qgc3RhcnRzV2l0aEtleXdvcmRMaXN0ID0g
W107CisgICAgICAgIGNvbnN0IGNvbnRhaW5zV2l0aEtleXdvcmRMaXN0ID0gW107CisgICAgICAg
IGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGNvbnN0
IGNhbmRpZGF0ZUluTG93ZXJDYXNlID0gY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCk7CisgICAgICAg
ICAgICBpZiAoa2V5d29yZCAmJiAhY2FuZGlkYXRlSW5Mb3dlckNhc2UuaW5jbHVkZXMoa2V5d29y
ZC50b0xvd2VyQ2FzZSgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZUluTG93ZXJDYXNlLnN0YXJ0c1dpdGgoa2V5d29yZC50b0xvd2VyQ2Fz
ZSgpKSkKKyAgICAgICAgICAgICAgICBzdGFydHNXaXRoS2V5d29yZExpc3QucHVzaChjYW5kaWRh
dGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRhaW5zV2l0aEtleXdv
cmRMaXN0LnB1c2goY2FuZGlkYXRlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jdXJyZW50
Q2FuZGlkYXRlTGlzdCA9IHN0YXJ0c1dpdGhLZXl3b3JkTGlzdC5jb25jYXQoY29udGFpbnNXaXRo
S2V5d29yZExpc3QpOworICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSBudWxs
OworICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3QubWFwKChjYW5kaWRh
dGUpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBsaW5rKGNhbmRpZGF0ZSk7CisgICAg
ICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAg
IHRoaXMuX2RpZFVwZGF0ZVZhbHVlKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5l
bnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy5fZWxl
bWVudEJ5Q2FuZGlkYXRlTmFtZS5zZXQoY2FuZGlkYXRlLCBpdGVtKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50KCdsaScsIGl0ZW0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBfY29u
c3RydWN0VGV4dEZpZWxkKCkKKyAgICB7CisgICAgICAgIGNvbnN0IHRleHRGaWVsZCA9IHRoaXMu
Y29udGVudCgndGV4dC1maWVsZCcpOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5l
cignaW5wdXQnLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gdGV4dEZp
ZWxkLnZhbHVlOworICAgICAgICAgICAgdGhpcy5fc2hvd0NhbmRpZGF0ZUxpc3QgPSB0cnVlOwor
ICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7CisgICAgICAgICAg
ICB0aGlzLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKQorICAgICAgICB9KTsK
KyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoKSA9PiB7CisgICAg
ICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gdGV4dEZpZWxkLnZhbHVlOworICAgICAgICAgICAg
dGhpcy5fc2hvd0NhbmRpZGF0ZUxpc3QgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX2F1dG9D
b21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRlbSgpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVl
VG9SZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVudExpc3Rl
bmVyKCdmb2N1cycsICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2lucHV0VmFsdWUgPSB0ZXh0RmllbGQudmFsdWU7
CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAg
ICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHsKKyAg
ICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0g
J0Fycm93VXAnKQorICAgICAgICAgICAgICAgIHRoaXMuX21vdmVDYW5kaWRhdGUoZXZlbnQua2V5
ID09PSAnQXJyb3dEb3duJyk7CisgICAgICAgICAgICBpZihldmVudC5rZXkgPT09ICdUYWInIHx8
IGV2ZW50LmtleSA9PT0gJ0VudGVyJykgeworICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0VmFs
dWUgPSB0aGlzLl9zZWxlY3RlZEl0ZW1WYWx1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hdXRv
Q29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVu
cXVldWVUb1JlbmRlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHRleHRGaWVsZDsKKyAgICB9CisKKyAgICBfY2FuZGlkYXRlRWxlbWVudEZvckN1cnJlbnRJ
bmRleEluZGV4KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5k
ZXggPj0gdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3QubGVuZ3RoKQorICAgICAgICAgICAgdGhp
cy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3QubGVu
Z3RoIC0gMTsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA8IDApCisg
ICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSAwOworICAgICAgICByZXR1
cm4gdGhpcy5fZWxlbWVudEJ5Q2FuZGlkYXRlTmFtZS5nZXQodGhpcy5fY2FuZGlkYXRlTmFtZUZv
ckN1cnJlbnRJbmRleCgpKTsKKyAgICB9CisKKyAgICBfY2FuZGlkYXRlTmFtZUZvckN1cnJlbnRJ
bmRleCgpIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0W3RoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleF07IH0KKworICAgIF9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0
ZW0oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9pbnB1dFZhbHVlLmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY29uc3QgbWF0Y2hpbmdDYW5kaWRhdGVzID0gdGhpcy5f
Y2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCku
aW5jbHVkZXModGhpcy5faW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7CisgICAgICAgIGlmICht
YXRjaGluZ0NhbmRpZGF0ZXMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLl9pbnB1
dFZhbHVlID0gbWF0Y2hpbmdDYW5kaWRhdGVzWzBdOworICAgICAgICAgICAgdGhpcy5fZGlkVXBk
YXRlVmFsdWUobWF0Y2hpbmdDYW5kaWRhdGVzWzBdKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChtYXRjaGluZ0NhbmRpZGF0ZXMubGVuZ3RoID09PSAwICYmIHRoaXMuX2NhbmRpZGF0ZXMu
bGVuZ3RoKQorICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9ICcnOworICAgIH0KKworICAg
IF9tb3ZlQ2FuZGlkYXRlKGZvcndhcmQpCisgICAgeworICAgICAgICBsZXQgcHJldmlvdXNFbGVt
ZW50ID0gbnVsbDsKKyAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9PT0g
bnVsbCkKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IGZvcndhcmQg
PyAwIDogdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3QubGVuZ3RoIC0gMTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBwcmV2aW91c0VsZW1lbnQgPSB0aGlzLl9jYW5kaWRhdGVFbGVtZW50
Rm9yQ3VycmVudEluZGV4SW5kZXgoKTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRh
dGVJbmRleCArPSBmb3J3YXJkID8gMSA6IC0xOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNh
bmRpZGF0ZUVsZW1lbnQgPSB0aGlzLl9jYW5kaWRhdGVFbGVtZW50Rm9yQ3VycmVudEluZGV4SW5k
ZXgoKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChw
cmV2aW91c0VsZW1lbnQpCisgICAgICAgICAgICAgICAgcHJldmlvdXNFbGVtZW50LmNsYXNzTmFt
ZSA9IG51bGw7CisgICAgICAgICAgICBjYW5kaWRhdGVFbGVtZW50LmNsYXNzTmFtZSA9ICdzZWxl
Y3RlZCc7CisgICAgICAgICAgICBjYW5kaWRhdGVFbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVk
ZWQoKTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbVZhbHVlID0gdGhpcy5fY2FuZGlk
YXRlTmFtZUZvckN1cnJlbnRJbmRleCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVuZGVy
KCkKKyAgICB7CisgICAgICAgIHN1cGVyLnJlbmRlcigpOworCisgICAgICAgIGNvbnN0IHRleHRG
aWVsZCA9IHRoaXMuX2NvbnN0cnVjdFRleHRGaWVsZExhemlseS5ldmFsdWF0ZSgpOworICAgICAg
ICB0ZXh0RmllbGQudmFsdWUgPSB0aGlzLl9pbnB1dFZhbHVlOworCisgICAgICAgIGNvbnN0IGNh
bmRpZGF0ZUxpc3QgPSB0aGlzLmNvbnRlbnQoJ2NhbmRpZGF0ZS1saXN0Jyk7CisgICAgICAgIGNh
bmRpZGF0ZUxpc3Quc3R5bGUuZGlzcGxheSA9IHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID8gbnVs
bCA6ICdub25lJzsKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKGNhbmRpZGF0ZUxpc3QsIHRo
aXMuX2NyZWF0ZUNhbmRpZGF0ZUxpc3RMYXppbHkuZXZhbHVhdGUodGhpcy5fY2FuZGlkYXRlcywg
dGhpcy5faW5wdXRWYWx1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGA8ZGl2IGlkPSdjb21ib3gtYm94Jz4KKyAgICAgICAgICAg
IDxpbnB1dCBpZD0ndGV4dC1maWVsZCcvPgorICAgICAgICAgICAgPHVsIGlkPSJjYW5kaWRhdGUt
bGlzdCI+PC91bD4KKyAgICAgICAgPC9kaXY+YDsKKyAgICB9CisKKyAgICBzdGF0aWMgY3NzVGVt
cGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGAKKyAgICAgICAgICAgIGRpdiB7CisgICAg
ICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgICAgICAgICAgICAgIGhlaWdodDog
MS40cmVtOworICAgICAgICAgICAgICAgIGxlZnQ6IDA7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB1bDplbXB0eSB7CisgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHVsIHsKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNr
Z3JvdW5kIDI1MG1zIGVhc2UtaW47CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAg
ICAgICAgICAgIHBhZGRpbmctbGVmdDogMC4zcmVtOworICAgICAgICAgICAgICAgIHBhZGRpbmct
cmlnaHQ6IDAuM3JlbTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4ycmVtOwor
ICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CisgICAgICAgICAgICAgICAgYmFja2dy
b3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKKyAgICAgICAgICAgICAgICBib3JkZXI6
IHNvbGlkIDFweCAjY2NjOworICAgICAgICAgICAgICAgIHRvcDogMS41cmVtOworICAgICAgICAg
ICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMnJlbTsKKyAgICAgICAgICAgICAgICB6LWluZGV4OiAx
MDsKKyAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtMC4xcmVtOworICAgICAgICAgICAgICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDguNXJlbTsK
KyAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMHJlbTsKKyAgICAgICAgICAgICAgICBvdmVy
ZmxvdzogYXV0bzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpIHsKKyAgICAgICAgICAg
ICAgICB0ZXh0LWFsaWduOiBsZWZ0OworICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKKyAgICAg
ICAgICAgICAgICBwYWRkaW5nOiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGkgYSB7
CisgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgICAgICAgICAgICAg
IGZvbnQtc2l6ZTogMC44cmVtOworICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0OworICAg
ICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bGkgYTpob3ZlciwgYS5zZWxlY3RlZCB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdi
YSgyMDQsIDE1MywgNTEsIDAuMSk7CisgICAgICAgICAgICB9CisgICAgICAgIGA7CisgICAgfQor
fQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ2NvbWJvLWJveCcsIENvbWJvQm94KTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50
cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMK
aW5kZXggNDY5MzgwMTljYjM1YTI4MDk0ZTdmMjA4ZTIzMmRmNGQyMDU2OWYyYi4uOTQzN2MxYWQ2
YTcwYWNhOGUwNjY0NDI0NzJjMWI0MWIwNGY1MTk0OSAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3Vw
LWZvcm0uanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMKQEAgLTEsMyArMSw4IEBACitmdW5j
dGlvbiBlbnN1cmVTZXRGb3JNYXAobWFwLCBrZXkpIHsKKyAgICBpZiAoIW1hcC5oYXMoa2V5KSkK
KyAgICAgICAgbWFwLnNldChrZXksIG5ldyBTZXQpOworICAgIHJldHVybiBtYXAuZ2V0KGtleSk7
Cit9CiAKIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBG
b3JtIHsKIApAQCAtNywxNCArMTIsMTYgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9y
bSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICB0aGlzLl9jb21taXRTZXRNYXAgPSBu
dWxsOwogICAgICAgICB0aGlzLl9uYW1lID0gbnVsbDsKICAgICAgICAgdGhpcy5faXNDdXN0b21p
emVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307Ci0KLSAg
ICAgICAgdGhpcy5fcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZUxhemlseSA9IG5ldyBMYXppbHlF
dmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlLmJpbmQodGhp
cykpOworICAgICAgICB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcCA9IG5ldyBNYXA7CisgICAgICAg
IHRoaXMuX293bmVyUmV2aXNpb25NYXAgPSBuZXcgTWFwOworICAgICAgICB0aGlzLl9pbmNvbXBs
ZXRlZFJvd0Zvck93bmVyUmVwb3NpdG9yeSA9IG5ldyBNYXA7CiAgICAgfQogCiAgICAgc2V0Q29t
bWl0U2V0TWFwKG1hcCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2NvbW1pdFNldE1hcCA9IG1hcDsK
KyAgICAgICAgdGhpcy5fY29tbWl0U2V0TWFwID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25z
dCBsYWJlbCBpbiBtYXApCisgICAgICAgICAgICB0aGlzLl9jb21taXRTZXRNYXAuc2V0KGxhYmVs
LCBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG1hcFtsYWJlbF0pKTsKICAgICAgICAgdGhpcy5f
aXNDdXN0b21pemVkID0gZmFsc2U7CiAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAg
ICAgfQpAQCAtMzIsNyArMzksNyBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4
dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIG5hbWVDb250cm9sLm9uaW5wdXQgPSAoKSA9
PiB7CiAgICAgICAgICAgICB0aGlzLl9uYW1lID0gbmFtZUNvbnRyb2wudmFsdWU7CiAgICAgICAg
ICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwotICAgICAgICB9CisgICAgICAgIH07CiAKICAg
ICAgICAgdGhpcy5jb250ZW50KCdjdXN0b21pemUtbGluaycpLm9uY2xpY2sgPSB0aGlzLmNyZWF0
ZUV2ZW50SGFuZGxlcigoKSA9PiB7CiAgICAgICAgICAgICB0aGlzLl9pc0N1c3RvbWl6ZWQgPSB0
cnVlOwpAQCAtNDMsMTcgKzUwLDE0IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0g
ZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICBfY29tcHV0ZUNvbW1pdFNldE1hcCgpCiAgICAg
ewogICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jb21taXRTZXRNYXApOwotICAgICAgICBp
ZiAoIXRoaXMuX2lzQ3VzdG9taXplZCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21taXRT
ZXRNYXA7Ci0KICAgICAgICAgY29uc3QgbWFwID0ge307Ci0gICAgICAgIGZvciAoY29uc3QgbGFi
ZWwgaW4gdGhpcy5fY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAgICBjb25zdCBvcmlnaW5hbENv
bW1pdFNldCA9IHRoaXMuX2NvbW1pdFNldE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBsYWJlbCBv
ZiB0aGlzLl9jb21taXRTZXRNYXAua2V5cygpKSB7CiAgICAgICAgICAgICBjb25zdCBjdXN0b21D
b21taXRTZXQgPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OwotICAgICAgICAgICAgZm9yIChsZXQgcmVw
b3NpdG9yeSBvZiB0aGlzLl9jb21taXRTZXRNYXBbbGFiZWxdLnJlcG9zaXRvcmllcygpKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSB0aGlzLl9yZXZpc2lvbkVkaXRv
ck1hcFtsYWJlbF0uZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgZm9yIChsZXQgcmVwb3Np
dG9yeSBvZiB0aGlzLl9jb21taXRTZXRNYXAuZ2V0KGxhYmVsKS5yZXBvc2l0b3JpZXMoKSkgewor
ICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gdGhpcy5fcmV2aXNpb25FZGl0
b3JNYXAuZ2V0KGxhYmVsKS5nZXQocmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQocmV2aXNpb25FZGl0b3IpOwotICAgICAgICAgICAgICAgIGN1c3RvbUNvbW1pdFNl
dC5zZXRSZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFs
dWUpOworICAgICAgICAgICAgICAgIGNvbnN0IG93bmVyUmV2aXNpb24gPSB0aGlzLl9vd25lclJl
dmlzaW9uTWFwLmdldChsYWJlbCkuZ2V0KHJlcG9zaXRvcnkpIHx8IG51bGw7CisgICAgICAgICAg
ICAgICAgY3VzdG9tQ29tbWl0U2V0LnNldFJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5
LCByZXZpc2lvbkVkaXRvci52YWx1ZSwgbnVsbCwgb3duZXJSZXZpc2lvbik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBtYXBbbGFiZWxdID0gY3VzdG9tQ29tbWl0U2V0OwogICAgICAgICB9
CkBAIC02Nyw3ICs3MSw3IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5k
cyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgdGhpcy5jb250ZW50KCdzdGFydC1idXR0b24nKS5k
aXNhYmxlZCA9ICEodGhpcy5fY29tbWl0U2V0TWFwICYmIHRoaXMuX25hbWUpOwogICAgICAgICB0
aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1saW5rLWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPSAh
dGhpcy5fY29tbWl0U2V0TWFwID8gJ25vbmUnIDogbnVsbDsKIAotICAgICAgICB0aGlzLl9yZW5k
ZXJDdXN0b21SZXZpc2lvblRhYmxlTGF6aWx5LmV2YWx1YXRlKHRoaXMuX2NvbW1pdFNldE1hcCwg
dGhpcy5faXNDdXN0b21pemVkKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ3VzdG9tUmV2aXNpb25U
YWJsZSh0aGlzLl9jb21taXRTZXRNYXAsIHRoaXMuX2lzQ3VzdG9taXplZCk7CiAgICAgfQogCiAg
ICAgX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGUoY29tbWl0U2V0TWFwLCBpc0N1c3RvbWl6ZWQp
CkBAIC03OCwxMyArODIsMjIgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRl
bmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgcmVwb3NpdG9y
eVNldCA9IG5ldyBTZXQ7CisgICAgICAgIGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0
b3J5ID0gbmV3IE1hcDsKICAgICAgICAgY29uc3QgY29tbWl0U2V0TGFiZWxzID0gW107Ci0gICAg
ICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307Ci0gICAgICAgIGZvciAoY29uc3QgbGFi
ZWwgaW4gY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkg
b2YgY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3JpZXMoKSkKKyAgICAgICAgdGhpcy5fcmV2
aXNpb25FZGl0b3JNYXAgPSBuZXcgTWFwOworICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGNv
bW1pdFNldE1hcC5rZXlzKCkpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBv
ZiBjb21taXRTZXRNYXAuZ2V0KGxhYmVsKS5oaWdoZXN0TGV2ZWxSZXBvc2l0b3JpZXMoKSkgewog
ICAgICAgICAgICAgICAgIHJlcG9zaXRvcnlTZXQuYWRkKHJlcG9zaXRvcnkpOworICAgICAgICAg
ICAgICAgIGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzID0gY29tbWl0U2V0TWFwLmdldChsYWJlbCku
b3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3J5U2V0ID0gZW5zdXJlU2V0Rm9yTWFwKG93bmVk
UmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5LCByZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW93bmVkUmVwb3NpdG9yaWVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IG93bmVkUmVwb3NpdG9yeSBvZiBvd25lZFJlcG9zaXRv
cmllcykKKyAgICAgICAgICAgICAgICAgICAgb3duZWRSZXBvc2l0b3J5U2V0LmFkZChvd25lZFJl
cG9zaXRvcnkpCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb21taXRTZXRMYWJlbHMucHVz
aChsYWJlbCk7Ci0gICAgICAgICAgICB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcFtsYWJlbF0gPSBu
ZXcgTWFwOworICAgICAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAuc2V0KGxhYmVsLCBu
ZXcgTWFwKTsKKyAgICAgICAgICAgIHRoaXMuX293bmVyUmV2aXNpb25NYXAuc2V0KGxhYmVsLCBu
ZXcgTWFwKTsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IHJlcG9zaXRvcnlMaXN0ID0gUmVw
b3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKEFycmF5LmZyb20ocmVwb3Np
dG9yeVNldC52YWx1ZXMoKSkpOwpAQCAtOTIsMzQgKzEwNSwxNDEgQEAgY2xhc3MgQ3VzdG9taXph
YmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICB0aGlzLnJl
bmRlclJlcGxhY2UodGhpcy5jb250ZW50KCdjdXN0b20tdGFibGUnKSwgWwogICAgICAgICAgICAg
ZWxlbWVudCgndGhlYWQnLAogICAgICAgICAgICAgICAgIGVsZW1lbnQoJ3RyJywKLSAgICAgICAg
ICAgICAgICAgICAgW2VsZW1lbnQoJ3RkJywgJ1JlcG9zaXRvcnknKSwgY29tbWl0U2V0TGFiZWxz
Lm1hcCgobGFiZWwpID0+IGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldExhYmVscy5s
ZW5ndGggKyAxfSwgbGFiZWwpKV0pKSwKLSAgICAgICAgICAgIGVsZW1lbnQoJ3Rib2R5JywKLSAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5TGlzdC5tYXAoKHJlcG9zaXRvcnkpID0+IHsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGgnLCByZXBvc2l0b3J5Lmxh
YmVsKCkpXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBsYWJlbCBpbiBjb21taXRT
ZXRNYXApCi0gICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5wdXNoKHRoaXMuX2NvbnN0cnVj
dFJldmlzaW9uUmFkaW9CdXR0b25zKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgbGFiZWwpKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOwotICAgICAg
ICAgICAgICAgIH0pKV0pOworICAgICAgICAgICAgICAgICAgICBbZWxlbWVudCgndGQnLCB7Y29s
c3BhbjogMn0sICdSZXBvc2l0b3J5JyksIGNvbW1pdFNldExhYmVscy5tYXAoKGxhYmVsKSA9PiBl
bGVtZW50KCd0ZCcsIHtjb2xzcGFuOiBjb21taXRTZXRMYWJlbHMubGVuZ3RoICsgMX0sIGxhYmVs
KSldKSksCisgICAgICAgICAgICBlbGVtZW50KCd0Ym9keScsIHRoaXMuX2NvbnN0cnVjdFRhYmxl
Um93cyhyZXBvc2l0b3J5TGlzdCwgY29tbWl0U2V0TWFwLCBvd25lZFJlcG9zaXRvcmllc0J5UmVw
b3NpdG9yeSkpXSk7CiAKICAgICAgICAgcmV0dXJuIHJlcG9zaXRvcnlMaXN0OwogICAgIH0KIAot
ICAgIF9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRv
cnksIHJvd0xhYmVsKQorICAgIF9jb25zdHJ1Y3RUYWJsZVJvd3MocmVwb3NpdG9yeUxpc3QsIGNv
bW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnkpCiAgICAgeworICAgICAg
ICBjb25zdCByb3dzID0gW107CisgICAgICAgIGZvcihjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9z
aXRvcnlMaXN0KSB7CisgICAgICAgICAgICBjb25zdCBvd25zQ29tbWl0cyA9IFsuLi5jb21taXRT
ZXRNYXAudmFsdWVzKCldLm1hcCgoY29tbWl0U2V0KSA9PiBjb21taXRTZXQub3duc0NvbW1pdHNG
b3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKS5ldmVyeSgodmFsdWUpID0+IHZhbHVlKTsKKyAgICAg
ICAgICAgIGNvbnN0IGluY29tcGxldGVSb3dDb3VudCA9IHRoaXMuX2luY29tcGxldGVkUm93Rm9y
T3duZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KSB8fCAwOworICAgICAgICAgICAgY29uc3Qg
b3duZWRSZXBvc2l0b3JpZXMgPSBvd25lZFJlcG9zaXRvcmllc0J5UmVwb3NpdG9yeS5nZXQocmVw
b3NpdG9yeSk7CisKKyAgICAgICAgICAgIHJvd3MucHVzaCh0aGlzLl9jb25zdHJ1Y3RUYWJsZVJv
d0ZvckNvbW1pdHNXaXRob3V0T3duZXIoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBvd25zQ29t
bWl0cykpOworCisgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgb3duZWRSZXBvc2l0b3J5
XSBvZiBbLi4ub3duZWRSZXBvc2l0b3JpZXNdLmVudHJpZXMoKSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IGxhc3RSb3cgPSBpbmRleCA9PT0gb3duZWRSZXBvc2l0b3JpZXMuc2l6ZSAtIDEgJiYg
aW5jb21wbGV0ZVJvd0NvdW50ID09PSAwOworICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0aGlz
Ll9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRoT3duZXIoY29tbWl0U2V0TWFwLCBvd25l
ZFJlcG9zaXRvcnksIHJlcG9zaXRvcnksIGxhc3RSb3cpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGluY29tcGxldGVSb3dDb3VudCA9PT0gMCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IFsuLi5jb21taXRTZXRNYXAu
dmFsdWVzKCldLm1hcCgoY29tbWl0U2V0KSA9PiBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KSk7CisgICAgICAgICAgICBjb25zdCBjb21taXREaWZmID0gQ29tbWl0TG9n
Lm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyguLi5jb21taXRzKTsKKyAgICAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5jb21wbGV0ZVJvd0NvdW50OyBpKyspCisgICAg
ICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMuX2NvbnN0cnVjdFJvd1dpdGhvdXRSZXBvc2l0b3J5
U3BlY2lmaWVkKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgY29tbWl0RGlmZiwgaSwgaSA9PT0g
aW5jb21wbGV0ZVJvd0NvdW50IC0gMSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByb3dz
OworICAgIH0KKworICAgIF9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRob3V0T3duZXIo
Y29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBvd25zUmVwb3NpdG9yaWVzKQorICAgIHsKKyAgICAg
ICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAg
Y29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGgnLCB7Y29sc3BhbjogMn0sIHJlcG9zaXRvcnkubGFi
ZWwoKSldOworCisgICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgY29tbWl0U2V0TWFwLmtleXMo
KSkKKyAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5fY29uc3RydWN0UmV2aXNpb25SYWRpb0J1
dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBsYWJlbCwgbnVsbCwgb3duc1JlcG9zaXRv
cmllcykpOworCisgICAgICAgIGlmIChvd25zUmVwb3NpdG9yaWVzKSB7CisgICAgICAgICAgICBj
b25zdCBwbHVzQnV0dG9uID0gbmV3IFBsdXNCdXR0b24oKTsKKyAgICAgICAgICAgIHBsdXNCdXR0
b24ubGlzdGVuVG9BY3Rpb24oJ2FjdGl2YXRlJywgKCkgPT4geworICAgICAgICAgICAgICAgIGNv
bnN0IHZhbHVlID0gdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuZ2V0KHJl
cG9zaXRvcnkpIHx8IDA7CisgICAgICAgICAgICAgICAgdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JP
d25lclJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnksIHZhbHVlICsgMSk7CisgICAgICAgICAgICAg
ICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
Y2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIHBsdXNCdXR0b24pKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJykpOworCisgICAgICAgIHJldHVybiBl
bGVtZW50KCd0cicsIGNlbGxzKTsKKyAgICB9CisKKyAgICBfY29uc3RydWN0VGFibGVSb3dGb3JD
b21taXRzV2l0aE93bmVyKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgb3duZXJSZXBvc2l0b3J5
LCBsYXN0Um93KSB7CiAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0
ZUVsZW1lbnQ7Ci0gICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gZWxlbWVudCgnaW5wdXQn
KTsKKyAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGQnLCB7Y2xhc3M6ICdvd25lci1y
ZXBvc2l0b3J5LWxhYmVsJ30pLCBlbGVtZW50KCd0aCcsIHJlcG9zaXRvcnkubGFiZWwoKSldOwor
ICAgICAgICBjb25zdCBtaW51c0J1dHRvbiA9IG5ldyBNaW51c0J1dHRvbigpOworCisgICAgICAg
IGZvciAoY29uc3QgbGFiZWwgb2YgY29tbWl0U2V0TWFwLmtleXMoKSkKKyAgICAgICAgICAgIGNl
bGxzLnB1c2godGhpcy5fY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFw
LCByZXBvc2l0b3J5LCBsYWJlbCwgb3duZXJSZXBvc2l0b3J5LCBmYWxzZSkpOwogCi0gICAgICAg
IHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwW3Jvd0xhYmVsXS5zZXQocmVwb3NpdG9yeSwgcmV2aXNp
b25FZGl0b3IpOworICAgICAgICBtaW51c0J1dHRvbi5saXN0ZW5Ub0FjdGlvbignYWN0aXZhdGUn
LCAoKSA9PiB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbW1pdFNldCBvZiBjb21taXRTZXRN
YXAudmFsdWVzKCkpCisgICAgICAgICAgICAgICAgY29tbWl0U2V0LnJlbW92ZUNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSkKKyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7
CisgICAgICAgIH0pOworICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgbWludXNCdXR0
b24pKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgeydjbGFzcyc6IGxhc3RSb3cgPyAn
bGFzdC1vd25lZC1yb3cnIDogJyd9LCBjZWxscyk7CisgICAgfQorCisgICAgX2NhbGxiYWNrRm9y
Q29tYm9Cb3hWYWx1ZVVwZGF0ZShjb21taXRTZXRNYXAsIGNoYW5nZWRSZXBvc2l0b3JpZXMsIGNv
bW1pdERpZmYsIG93bmVyUmVwb3NpdG9yeSkKKyAgICB7CisgICAgICAgIHJldHVybiAocmVwb3Np
dG9yeU5hbWUpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IHRhcmdldFJlcG9zaXRvcnkgPSBjaGFu
Z2VkUmVwb3NpdG9yaWVzLmZpbmQoKHJlcG9zaXRvcnkpID0+IHJlcG9zaXRvcnlOYW1lID09PSBy
ZXBvc2l0b3J5Lm5hbWUoKSk7CisgICAgICAgICAgICBjb25zdCBvd25lZENvbW1pdHNJdGVyYXRv
ciA9IGNvbW1pdERpZmYuZ2V0KHRhcmdldFJlcG9zaXRvcnkpLnZhbHVlcygpOworICAgICAgICAg
ICAgZm9yIChjb25zdCBjb21taXRTZXQgb2YgY29tbWl0U2V0TWFwLnZhbHVlcygpKQorICAgICAg
ICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KHRhcmdldFJlcG9zaXRv
cnksIG93bmVkQ29tbWl0c0l0ZXJhdG9yLm5leHQoKS52YWx1ZSk7CisgICAgICAgICAgICBjb25z
dCB2YWx1ZSA9IHRoaXMuX2luY29tcGxldGVkUm93Rm9yT3duZXJSZXBvc2l0b3J5LmdldChvd25l
clJlcG9zaXRvcnkpOworICAgICAgICAgICAgdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JPd25lclJl
cG9zaXRvcnkuc2V0KG93bmVyUmVwb3NpdG9yeSwgdmFsdWUgLSAxKTsKKyAgICAgICAgICAgIHRo
aXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgX2NvbnN0cnVj
dFJvd1dpdGhvdXRSZXBvc2l0b3J5U3BlY2lmaWVkKGNvbW1pdFNldE1hcCwgb3duZXJSZXBvc2l0
b3J5LCBjb21taXREaWZmLCBpbmRleCwgbGFzdFJvdykKKyAgICB7CisgICAgICAgIGNvbnN0IGVs
ZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7CisgICAgICAgIGNvbnN0IGxhYmVs
Q291bnQgPSAgY29tbWl0U2V0TWFwLnNpemU7CisgICAgICAgIGNvbnN0IGNoYW5nZWRSZXBvc2l0
b3JpZXMgPSBbLi4uY29tbWl0RGlmZi5rZXlzKCldOworICAgICAgICBjb25zdCBtaW51c0J1dHRv
biA9IG5ldyBNaW51c0J1dHRvbigpOworICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50KCd0
ZCcsIHtjbGFzczogJ293bmVyLXJlcG9zaXRvcnktbGFiZWwnfSksIGVsZW1lbnQoJ3RoJywgbmV3
IENvbWJvQm94KCcnLAorICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tGb3JDb21ib0JveFZhbHVl
VXBkYXRlKGNvbW1pdFNldE1hcCwgY2hhbmdlZFJlcG9zaXRvcmllcywgY29tbWl0RGlmZiwgb3du
ZXJSZXBvc2l0b3J5KSwKKyAgICAgICAgICAgIGNoYW5nZWRSZXBvc2l0b3JpZXMubWFwKChyZXBv
c2l0b3J5KSA9PiByZXBvc2l0b3J5Lm5hbWUoKSkuc29ydCgpKSksIGVsZW1lbnQoJ3RkJywge2Nv
bHNwYW46IGxhYmVsQ291bnQgKiAobGFiZWxDb3VudCArIDEpfSldOworCisgICAgICAgIG1pbnVz
QnV0dG9uLmxpc3RlblRvQWN0aW9uKCdhY3RpdmF0ZScsICgpID0+IHsKKyAgICAgICAgICAgIGNv
bnN0IHZhbHVlID0gdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuZ2V0KG93
bmVyUmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh2YWx1ZSA+IDApOwor
ICAgICAgICAgICAgdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuc2V0KG93
bmVyUmVwb3NpdG9yeSwgdmFsdWUgLSAxKTsKKyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVu
ZGVyKCk7CisgICAgICAgIH0pOworICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgbWlu
dXNCdXR0b24pKTsKKworICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCB7J2NsYXNzJzogbGFz
dFJvdyA/ICdsYXN0LW93bmVkLXJvdycgOiAnJ30sIGNlbGxzKTsKKyAgICB9CisKKyAgICBfY29u
c3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCByb3dM
YWJlbCwgb3duZXJSZXBvc2l0b3J5LCBvd25zUmVwb3NpdG9yaWVzKQorICAgIHsKKyAgICAgICAg
Y29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29u
c3QgcmV2aXNpb25FZGl0b3IgPSBlbGVtZW50KCdpbnB1dCcsIHtkaXNhYmxlZDogISFvd25lclJl
cG9zaXRvcnksCisgICAgICAgICAgICBvbmNoYW5nZTogKCkgPT4geworICAgICAgICAgICAgICAg
IGlmICghb3duc1JlcG9zaXRvcmllcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIGNvbW1pdFNldE1hcC5nZXQocm93TGFiZWwpLnVwZGF0ZUNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUpLnRoZW4oCisgICAgICAg
ICAgICAgICAgICAgICgpID0+IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCksCisgICAgICAgICAgICAg
ICAgICAgICgpID0+IHJldmlzaW9uRWRpdG9yLnZhbHVlID0gJycpOworICAgICAgICAgICAgfX0p
OworCisgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwLmdldChyb3dMYWJlbCkuc2V0KHJl
cG9zaXRvcnksIHJldmlzaW9uRWRpdG9yKTsKIAogICAgICAgICBjb25zdCBub2RlcyA9IFtdOwot
ICAgICAgICBmb3IgKGxldCBsYWJlbFRvQ2hvb3NlIGluIGNvbW1pdFNldE1hcCkgewotICAgICAg
ICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0U2V0TWFwW2xhYmVsVG9DaG9vc2VdLmNvbW1pdEZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgIGZvciAoY29uc3QgbGFiZWxUb0Nob29z
ZSBvZiBjb21taXRTZXRNYXAua2V5cygpKSB7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBj
b21taXRTZXRNYXAuZ2V0KGxhYmVsVG9DaG9vc2UpLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3Np
dG9yeSk7CiAgICAgICAgICAgICBjb25zdCBjaGVja2VkID0gbGFiZWxUb0Nob29zZSA9PSByb3dM
YWJlbDsKICAgICAgICAgICAgIGNvbnN0IHJhZGlvQnV0dG9uID0gZWxlbWVudCgnaW5wdXQnLCB7
dHlwZTogJ3JhZGlvJywgbmFtZTogYCR7cm93TGFiZWx9LSR7cmVwb3NpdG9yeS5pZCgpfS1yYWRp
b2AsIGNoZWNrZWQsCi0gICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsgcmV2aXNpb25F
ZGl0b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOyB9fSk7CisgICAg
ICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNp
b25FZGl0b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY29tbWl0ICYmIGNvbW1pdC5vd25lckNvbW1pdCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcC5nZXQocm93TGFiZWwpLnNl
dChyZXBvc2l0b3J5LCBjb21taXQub3duZXJDb21taXQoKS5yZXZpc2lvbigpKTsKKyAgICAgICAg
ICAgICAgICB9fSk7CiAKLSAgICAgICAgICAgIGlmIChjaGVja2VkKQorICAgICAgICAgICAgaWYg
KGNoZWNrZWQpIHsKICAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvci52YWx1ZSA9IGNvbW1p
dCA/IGNvbW1pdC5yZXZpc2lvbigpIDogJyc7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdCAm
JiBjb21taXQub3duZXJDb21taXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJS
ZXZpc2lvbk1hcC5nZXQocm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCBjb21taXQub3duZXJDb21t
aXQoKS5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGVzLnB1c2go
ZWxlbWVudCgndGQnLCBlbGVtZW50KCdsYWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFiZWxUb0Nob29z
ZV0pKSk7CiAgICAgICAgIH0KICAgICAgICAgbm9kZXMucHVzaChlbGVtZW50KCd0ZCcsIHJldmlz
aW9uRWRpdG9yKSk7CkBAIC0xMzksNiArMjU5LDIxIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RH
cm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgICAgICBtYXJnaW46
IDFyZW0gMDsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0ZC5v
d25lci1yZXBvc2l0b3J5LWxhYmVsIHsKKyAgICAgICAgICAgICAgICBib3JkZXItdG9wOiBzb2xp
ZCAycHggdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQg
MXB4IHRyYW5zcGFyZW50OworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMnJlbTsKKyAgICAg
ICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgI2N1c3RvbS10YWJsZSAubGFzdC1vd25lZC1yb3cgdGQub3duZXItcmVwb3NpdG9yeS1sYWJl
bCB7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkZGQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGggeworICAgICAgICAgICAg
ICAgIG1pbi13aWR0aDogMTJyZW07CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgICNjdXN0
b20tdGFibGUsCiAgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRkLAogICAgICAgICAgICAgI2N1
c3RvbS10YWJsZSB0aCB7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDk1
NjY1MzFhMDNjODlmNWM0OWIyNWI3MTBkYzUxOWI2MDYyYjFlCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRv
bi5qcwpAQCAtMCwwICsxLDE3IEBACisKK2NsYXNzIE1pbnVzQnV0dG9uIGV4dGVuZHMgQnV0dG9u
QmFzZSB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoJ21pbnVzLWJ1
dHRvbicpOworICAgIH0KKworICAgIHN0YXRpYyBidXR0b25Db250ZW50KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBgPGcgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgaWQ9Imljb24i
PgorICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIGZpbGw9InRyYW5z
cGFyZW50Ii8+CisgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI1LDUwIDc1LDUwIiAvPgor
ICAgICAgICA8L2c+YDsKKyAgICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgn
bWludXMtYnV0dG9uJywgTWludXNCdXR0b24pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvb3duZWQtY29tbWl0
LXZpZXdlci5qcwppbmRleCA2OGY3NDMzODViNDUwNWU5ZWZlZDdkNGY0ZjA3ZGZjNmY1ZjEyZTEy
Li41ZWMyZTZmN2UyMTA0ZTEwNTM0NGM2ZTMxOThjMTZhZTA0NTNkMmYzIDEwMDY0NAotLS0gYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvb3duZWQtY29tbWl0
LXZpZXdlci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvb3duZWQtY29tbWl0LXZpZXdlci5qcwpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBPd25l
ZENvbW1pdFZpZXdlciBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICBpZiAoIXByZXZp
b3VzT3duZWRDb21taXRzIHx8ICFjdXJyZW50T3duZWRDb21taXRzKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cuZGlmZk93bmVkQ29t
bWl0cyh0aGlzLl9wcmV2aW91c0NvbW1pdCwgdGhpcy5fY3VycmVudENvbW1pdCk7CisgICAgICAg
IGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3du
ZXJDb21taXRzKHRoaXMuX3ByZXZpb3VzQ29tbWl0LCB0aGlzLl9jdXJyZW50Q29tbWl0KTsKICAg
ICAgICAgY29uc3Qgc29ydGVkUmVwb3NpdG9yaWVzID0gUmVwb3NpdG9yeS5zb3J0QnlOYW1lKFsu
Li5kaWZmZXJlbmNlLmtleXMoKV0pOwogICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50
QmFzZS5jcmVhdGVFbGVtZW50OwogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OGMzYzZhZjVmM2MxOWEzZGEwOGYzZDU0N2EwNmFiYzczMzUyNjBjNgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1
dHRvbi5qcwpAQCAtMCwwICsxLDE4IEBACisKK2NsYXNzIFBsdXNCdXR0b24gZXh0ZW5kcyBCdXR0
b25CYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihldmVudE5hbWUpCisgICAgeworICAgICAgICBzdXBl
cigncGx1cy1idXR0b24nKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYnV0dG9uQ29udGVudCgpCisg
ICAgeworICAgICAgICByZXR1cm4gYDxnIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAi
IGlkPSJpY29uIj4KKyAgICAgICAgICAgIDxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBm
aWxsPSJ0cmFuc3BhcmVudCIvPgorICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI1MCwyNSA1
MCw3NSIgLz4KKyAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjUsNTAgNzUsNTAiIC8+Cisg
ICAgICAgIDwvZz5gOworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdw
bHVzLWJ1dHRvbicsIFBsdXNCdXR0b24pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9pbmRleC5odG1sCmluZGV4IDQ2ZTZhZGM0NGUyMjc1NDkwODE3NTAyNGYwOWRjNTkw
YWQyZGFhZDIuLjI3ZDg0ZTQ3Zjg0YmIxYTBmNzA3ZjQ4MzY5OTNmYWM2ZWU4MWVlMDggMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAorKysg
Yi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAgLTk4LDYg
Kzk4LDkgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2Fk
IHRpbWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRz
L2N1c3RvbS1hbmFseXNpcy10YXNrLWNvbmZpZ3VyYXRvci5qcyI+PC9zY3JpcHQ+CiAgICAgICAg
IDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2N1c3RvbS1jb25maWd1cmF0aW9uLXRlc3QtZ3JvdXAt
Zm9ybS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2luc3Rh
bnQtZmlsZS11cGxvYWRlci5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21w
b25lbnRzL3BsdXMtYnV0dG9uLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImNv
bXBvbmVudHMvbWludXMtYnV0dG9uLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
ImNvbXBvbmVudHMvY29tYm8tYm94LmpzIj48L3NjcmlwdD4KIAogICAgICAgICA8c2NyaXB0IHNy
Yz0icGFnZXMvcGFnZS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9w
YWdlLXJvdXRlci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwppbmRleCA3YmU0MjE0NTZjYWRk
NWZiMzBmM2MzYzJjNTcwY2UyZWJkYTE3MjcxLi5hYTZiNDZiZmE5NWRiNzY4Y2VlNWM5ZTUyNzkz
ZGQxNmJhZTgzOTY4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL21vZGVscy9jb21taXQtbG9nLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9w
dWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMKQEAgLTEyLDYgKzEyLDggQEAgY2xhc3MgQ29t
bWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgaWYgKHRoaXMuX3JlbW90
ZUlkKQogICAgICAgICAgICAgdGhpcy5lbnN1cmVOYW1lZFN0YXRpY01hcCgncmVtb3RlSWQnKVt0
aGlzLl9yZW1vdGVJZF0gPSB0aGlzOwogICAgICAgICB0aGlzLl9vd25lZENvbW1pdHMgPSBudWxs
OworICAgICAgICB0aGlzLl9vd25lckNvbW1pdCA9IG51bGw7CisgICAgICAgIHRoaXMuX293bmVk
Q29tbWl0QnlPd25lZFJlcG9zaXRvcnkgPSBuZXcgTWFwOwogICAgIH0KIAogICAgIHVwZGF0ZVNp
bmdsZXRvbihyYXdEYXRhKQpAQCAtMzYsMTMgKzM4LDE3IEBAIGNsYXNzIENvbW1pdExvZyBleHRl
bmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgbWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuX3Jhd0Rh
dGFbJ21lc3NhZ2UnXTsgfQogICAgIHVybCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnkudXJs
Rm9yUmV2aXNpb24odGhpcy5fcmF3RGF0YVsncmV2aXNpb24nXSk7IH0KICAgICBvd25zQ29tbWl0
cygpIHsgcmV0dXJuIHRoaXMuX3Jhd0RhdGFbJ293bnNDb21taXRzJ107IH0KKyAgICBvd25lZENv
bW1pdHMoKSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1pdHM7IH0KKyAgICBvd25lckNvbW1pdCgp
IHsgcmV0dXJuIHRoaXMuX293bmVyQ29tbWl0OyB9CisKKyAgICBzZXRPd25lckNvbW1pdHMob3du
ZXJDb21taXQpIHsgdGhpcy5fb3duZXJDb21taXQgPSBvd25lckNvbW1pdDsgfQogCiAgICAgbGFi
ZWwoKQogICAgIHsKLSAgICAgICAgdmFyIHJldmlzaW9uID0gdGhpcy5yZXZpc2lvbigpOworICAg
ICAgICBjb25zdCByZXZpc2lvbiA9IHRoaXMucmV2aXNpb24oKTsKICAgICAgICAgaWYgKHBhcnNl
SW50KHJldmlzaW9uKSA9PSByZXZpc2lvbikgLy8gZS5nLiByMTIzNDUKICAgICAgICAgICAgIHJl
dHVybiAncicgKyByZXZpc2lvbjsKLSAgICAgICAgZWxzZSBpZiAocmV2aXNpb24ubGVuZ3RoID09
IDQwKSAvLyBlLmcuIGdpdCBoYXNoCisgICAgICAgIGlmIChyZXZpc2lvbi5sZW5ndGggPT0gNDAp
IC8vIGUuZy4gZ2l0IGhhc2gKICAgICAgICAgICAgIHJldHVybiByZXZpc2lvbi5zdWJzdHJpbmco
MCwgOCk7CiAgICAgICAgIHJldHVybiByZXZpc2lvbjsKICAgICB9CkBAIC01MCw3ICs1Niw3IEBA
IGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAKICAgICBkaWZmKHBy
ZXZpb3VzQ29tbWl0KQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gcHJldmlvdXNDb21taXQp
CisgICAgICAgIGlmICh0aGlzID09PSBwcmV2aW91c0NvbW1pdCkKICAgICAgICAgICAgIHByZXZp
b3VzQ29tbWl0ID0gbnVsbDsKIAogICAgICAgICBjb25zdCByZXBvc2l0b3J5ID0gdGhpcy5fcmVw
b3NpdG9yeTsKQEAgLTU5LDEyICs2NSwxMCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRh
TW9kZWxPYmplY3QgewogCiAgICAgICAgIGNvbnN0IHRvID0gdGhpcy5yZXZpc2lvbigpOwogICAg
ICAgICBjb25zdCBmcm9tID0gcHJldmlvdXNDb21taXQucmV2aXNpb24oKTsKLSAgICAgICAgbGV0
IGZyb21SZXZpc2lvbkZvclVSTCA9IGZyb207CiAgICAgICAgIGxldCBsYWJlbCA9IG51bGw7Ci0g
ICAgICAgIGlmIChwYXJzZUludChmcm9tKSA9PSBmcm9tKSB7IC8vIGUuZy4gcjEyMzQ1LgotICAg
ICAgICAgICAgZnJvbVJldmlzaW9uRm9yVVJMID0gKHBhcnNlSW50KGZyb20pICsgMSkudG9TdHJp
bmc7CisgICAgICAgIGlmIChwYXJzZUludChmcm9tKSA9PSBmcm9tKS8vIGUuZy4gcjEyMzQ1Lgog
ICAgICAgICAgICAgbGFiZWwgPSBgciR7ZnJvbX0tciR7dGhpcy5yZXZpc2lvbigpfWA7Ci0gICAg
ICAgIH0gZWxzZSBpZiAodG8ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNoCisgICAgICAg
IGVsc2UgaWYgKHRvLmxlbmd0aCA9PT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKICAgICAgICAgICAg
IGxhYmVsID0gYCR7ZnJvbS5zdWJzdHJpbmcoMCwgOCl9Li4ke3RvLnN1YnN0cmluZygwLCA4KX1g
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYWJlbCA9IGAke2Zyb219IC0gJHt0b31gOwpA
QCAtODYsNiArOTAsOCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3Qg
ewogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBvd25lZENvbW1pdEZvck93bmVkUmVwb3NpdG9y
eShvd25lZFJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVkQ29tbWl0QnlPd25lZFJlcG9z
aXRvcnkuZ2V0KG93bmVkUmVwb3NpdG9yeSk7IH0KKwogICAgIGZldGNoT3duZWRDb21taXRzKCkK
ICAgICB7CiAgICAgICAgIGlmICghdGhpcy5yZXBvc2l0b3J5KCkub3duZWRSZXBvc2l0b3JpZXMo
KSkKQEAgLTk0LDExICsxMDAsMTcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVs
T2JqZWN0IHsKICAgICAgICAgaWYgKCF0aGlzLm93bnNDb21taXRzKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZWplY3QoKTsKIAotICAgICAgICBpZiAodGhpcy5fb3duZWRDb21taXRz
KQorICAgICAgICBpZiAodGhpcy5fb3duZWRDb21taXRzKSB7CisgICAgICAgICAgICB0aGlzLl9v
d25lZENvbW1pdHMuZm9yRWFjaCgob3duZWRDb21taXQpID0+IG93bmVkQ29tbWl0LnNldE93bmVy
Q29tbWl0cyh0aGlzKSk7CiAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMu
X293bmVkQ29tbWl0cyk7CisgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmNh
Y2hlZEZldGNoKGAuLi9hcGkvY29tbWl0cy8ke3RoaXMucmVwb3NpdG9yeSgpLmlkKCl9L293bmVk
LWNvbW1pdHM/b3duZXItcmV2aXNpb249JHtlc2NhcGUodGhpcy5yZXZpc2lvbigpKX1gKS50aGVu
KChkYXRhKSA9PiB7CiAgICAgICAgICAgICB0aGlzLl9vd25lZENvbW1pdHMgPSBDb21taXRMb2cu
X2NvbnN0cnVjdEZyb21SYXdEYXRhKGRhdGEpOworICAgICAgICAgICAgdGhpcy5fb3duZWRDb21t
aXRzLmZvckVhY2goKG93bmVkQ29tbWl0KSA9PiB7CisgICAgICAgICAgICAgICAgb3duZWRDb21t
aXQuc2V0T3duZXJDb21taXRzKHRoaXMpOworICAgICAgICAgICAgICAgIHRoaXMuX293bmVkQ29t
bWl0QnlPd25lZFJlcG9zaXRvcnkuc2V0KG93bmVkQ29tbWl0LnJlcG9zaXRvcnkoKSwgb3duZWRD
b21taXQpOworICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3duZWRD
b21taXRzOwogICAgICAgICB9KTsKICAgICB9CkBAIC0xMTEsMjUgKzEyMywyNiBAQCBjbGFzcyBD
b21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgICAgICByZXR1cm4gb3duZWRD
b21taXRNYXA7CiAgICAgfQogCi0gICAgc3RhdGljIGRpZmZPd25lZENvbW1pdHMocHJldmlvdXND
b21taXQsIGN1cnJlbnRDb21taXQpCisgICAgc3RhdGljIG93bmVkQ29tbWl0RGlmZmVyZW5jZUZv
ck93bmVyQ29tbWl0cyguLi5jb21taXRzKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQo
cHJldmlvdXNDb21taXQpOwotICAgICAgICBjb25zb2xlLmFzc2VydChjdXJyZW50Q29tbWl0KTsK
LSAgICAgICAgY29uc29sZS5hc3NlcnQocHJldmlvdXNDb21taXQuX293bmVkQ29tbWl0cyk7Ci0g
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJlbnRDb21taXQuX293bmVkQ29tbWl0cyk7Ci0KLSAg
ICAgICAgY29uc3QgcHJldmlvdXNPd25lZENvbW1pdE1hcCA9IHByZXZpb3VzQ29tbWl0Ll9idWls
ZE93bmVkQ29tbWl0TWFwKCk7Ci0gICAgICAgIGNvbnN0IGN1cnJlbnRPd25lZENvbW1pdE1hcCA9
IGN1cnJlbnRDb21taXQuX2J1aWxkT3duZWRDb21taXRNYXAoKTsKLSAgICAgICAgY29uc3Qgb3du
ZWRDb21taXRSZXBvc2l0b3JpZXMgPSBuZXcgU2V0KFsuLi5jdXJyZW50T3duZWRDb21taXRNYXAu
a2V5cygpLCAuLi5wcmV2aW91c093bmVkQ29tbWl0TWFwLmtleXMoKV0pOworICAgICAgICBjb25z
b2xlLmFzc2VydChjb21taXRzLmxlbmd0aCA+PSAyKTsKKworICAgICAgICBjb25zdCBvd25lZENv
bW1pdE1hcExpc3QgPSBjb21taXRzLm1hcCgoY29tbWl0KSA9PiB7CisgICAgICAgICAgICBjb25z
b2xlLmFzc2VydChjb21taXQpOworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoY29tbWl0Ll9v
d25lZENvbW1pdHMpOworICAgICAgICAgICAgcmV0dXJuIGNvbW1pdC5fYnVpbGRPd25lZENvbW1p
dE1hcCgpOworICAgICAgICB9KTsKKyAgICAgICAgY29uc3Qgb3duZWRDb21taXRSZXBvc2l0b3Jp
ZXMgPSBuZXcgU2V0KFtdLmNvbmNhdCgKKyAgICAgICAgICAgIC4uLm93bmVkQ29tbWl0TWFwTGlz
dC5tYXAoKG93bmVkQ29tbWl0TWFwKSA9PiBBcnJheS5mcm9tKG93bmVkQ29tbWl0TWFwLmtleXMo
KSkpKSk7CisKICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IG5ldyBNYXA7CiAKICAgICAgICAg
b3duZWRDb21taXRSZXBvc2l0b3JpZXMuZm9yRWFjaCgob3duZWRDb21taXRSZXBvc2l0b3J5KSA9
PiB7Ci0gICAgICAgICAgICBjb25zdCBjdXJyZW50UmV2aXNpb24gPSBjdXJyZW50T3duZWRDb21t
aXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSk7Ci0gICAgICAgICAgICBjb25zdCBwcmV2
aW91c1JldmlzaW9uID0gcHJldmlvdXNPd25lZENvbW1pdE1hcC5nZXQob3duZWRDb21taXRSZXBv
c2l0b3J5KTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UmV2aXNpb24gIT0gcHJldmlvdXNSZXZp
c2lvbikKLSAgICAgICAgICAgICAgICBkaWZmZXJlbmNlLnNldChvd25lZENvbW1pdFJlcG9zaXRv
cnksIFtwcmV2aW91c1JldmlzaW9uLCBjdXJyZW50UmV2aXNpb25dKTsKKyAgICAgICAgICAgIGNv
bnN0IG93bmVkQ29tbWl0cyA9IG93bmVkQ29tbWl0TWFwTGlzdC5tYXAoKG93bmVkQ29tbWl0TWFw
KSA9PiBvd25lZENvbW1pdE1hcC5nZXQob3duZWRDb21taXRSZXBvc2l0b3J5KSk7CisgICAgICAg
ICAgICBjb25zdCB1bmlxdWVPd25lZENvbW1pdHMgPSBuZXcgU2V0KG93bmVkQ29tbWl0cyk7Cisg
ICAgICAgICAgICBpZiAodW5pcXVlT3duZWRDb21taXRzLnNpemUgPiAxKQorICAgICAgICAgICAg
ICAgIGRpZmZlcmVuY2Uuc2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSwgb3duZWRDb21taXRzKTsK
ICAgICAgICAgfSk7Ci0KICAgICAgICAgcmV0dXJuIGRpZmZlcmVuY2U7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQt
c2V0LmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0
LXNldC5qcwppbmRleCBiMTc4YWM4MGU1MjNkNDBhZmYxY2VkMmYyOTc0NDYwOTgyNjU2ZWY3Li5k
NGQwNzVlNDdkZjNiMDRmODdmZjFjMjkxNmExZGE4ZmRkNzQ4ZjdkIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMK
QEAgLTczLDYgKzczLDExIEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9iamVj
dCB7CiAKICAgICBvd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5
KSB7IHJldHVybiB0aGlzLl9vd25lclJlcG9zaXRvcnlUb093bmVkUmVwb3NpdG9yaWVzTWFwLmdl
dChyZXBvc2l0b3J5KTsgfQogCisgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE1hcC5nZXQocmVw
b3NpdG9yeSk7CisgICAgfQorICAgIAogICAgIHJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBvc2l0
b3J5KQogICAgIHsKICAgICAgICAgdmFyIGNvbW1pdCA9IHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1p
dE1hcC5nZXQocmVwb3NpdG9yeSk7CkBAIC0yNDgsOCArMjUzLDk3IEBAIGNsYXNzIEN1c3RvbUNv
bW1pdFNldCB7CiAgICAgfQogfQogCitmdW5jdGlvbiBlbnN1cmVTZXRGb3JNYXAobWFwLCBrZXkp
IHsKKyAgICBpZiAoIW1hcC5oYXMoa2V5KSkKKyAgICAgICAgbWFwLnNldChrZXksIG5ldyBTZXQp
OworICAgIHJldHVybiBtYXAuZ2V0KGtleSk7Cit9CisKK2NsYXNzIEludGVybWVkaWF0ZUNvbW1p
dFNldCB7CisKKyAgICBjb25zdHJ1Y3Rvcihjb21taXRTZXQpCisgICAgeworICAgICAgICB0aGlz
Ll9jb21taXRCeVJlcG9zaXRvcnkgPSBuZXcgTWFwOworICAgICAgICB0aGlzLl9vd25lZFJlcG9z
aXRvcmllc0J5T3duZXJSZXBvc2l0b3J5ID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBy
ZXBvc2l0b3J5IG9mIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgY29u
c3QgY29tbWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7Cisg
ICAgICAgICAgICBDb21taXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCBj
b21taXQucmV2aXNpb24oKSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFjb21t
aXQub3duc0NvbW1pdHMoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb21taXRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCkudGhlbigo
KSA9PiB0aGlzLnNldENvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgY29tbWl0KSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNldENvbW1pdEZvclJlcG9z
aXRvcnkocmVwb3NpdG9yeSwgY29tbWl0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
cmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJlcG9zaXRvcnkpOworICAgICAgICBjb25zb2xlLmFzc2Vy
dChjb21taXQgaW5zdGFuY2VvZiBDb21taXRMb2cpOworICAgICAgICB0aGlzLl9jb21taXRCeVJl
cG9zaXRvcnkuc2V0KHJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgIGNvbnN0IG93bmVyQ29t
bWl0ID0gY29tbWl0Lm93bmVyQ29tbWl0KCk7CisgICAgICAgIGlmIChvd25lckNvbW1pdCkgewor
ICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yeVNldCA9IGVuc3VyZVNldEZvck1hcCh0aGlzLl9v
d25lZFJlcG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LCBvd25lckNvbW1pdC5yZXBvc2l0b3J5
KCkpOworICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVwb3NpdG9yeSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChyZXBvc2l0b3J5IGluc3RhbmNlb2YgUmVwb3Np
dG9yeSk7CisgICAgICAgIGNvbnN0IG93bmVyQ29tbWl0ID0gdGhpcy5vd25lckNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgIGlmIChvd25lckNvbW1pdCkgeworICAgICAg
ICAgICAgY29uc3QgcmVwb3NpdG9yeVNldCA9IHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25l
clJlcG9zaXRvcnkuZ2V0KG93bmVyQ29tbWl0LnJlcG9zaXRvcnkoKSk7CisgICAgICAgICAgICBj
b25zb2xlLmFzc2VydChyZXBvc2l0b3J5U2V0LmhhcyhyZXBvc2l0b3J5KSk7CisgICAgICAgICAg
ICByZXBvc2l0b3J5U2V0LmRlbGV0ZShyZXBvc2l0b3J5KTsKKyAgICAgICAgfSBlbHNlIGlmICh0
aGlzLl9vd25lZFJlcG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmhhcyhyZXBvc2l0b3J5KSkg
eworICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSB0aGlzLl9vd25lZFJlcG9z
aXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGZv
ciAoY29uc3Qgb3duZWRSZXBvc2l0b3J5IG9mIG93bmVkUmVwb3NpdG9yaWVzKQorICAgICAgICAg
ICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeS5kZWxldGUob3duZWRSZXBvc2l0b3J5KTsK
KyAgICAgICAgICAgIHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnkuZGVs
ZXRlKHJlcG9zaXRvcnkpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3Np
dG9yeS5kZWxldGUocmVwb3NpdG9yeSk7CisgICAgfQorCisgICAgdXBkYXRlQ29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5LCByZXZpc2lvbikKKyAgICB7CisgICAgICAgIGxldCBjb21taXQg
PSBudWxsOworICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmZldGNoRm9yU2luZ2xlUmV2aXNpb24o
cmVwb3NpdG9yeSwgcmV2aXNpb24pLnRoZW4oKGNvbW1pdHMpID0+IHsKKyAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KGNvbW1pdHMubGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGNvbW1pdCA9
IGNvbW1pdHNbMF07CisgICAgICAgICAgICBpZiAoIWNvbW1pdC5vd25zQ29tbWl0cygpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBjb21taXQuZmV0Y2hPd25l
ZENvbW1pdHMoKS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBvd25lZFJlcG9z
aXRvcmllcyA9IHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnkuZ2V0KHJl
cG9zaXRvcnkpOworICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICB0aGlzLnNldENvbW1pdEZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSwgY29tbWl0KTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG93bmVk
UmVwb3NpdG9yeSBvZiBvd25lZFJlcG9zaXRvcmllcykKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5zZXRDb21taXRGb3JSZXBvc2l0b3J5KG93bmVkUmVwb3NpdG9yeSwgY29tbWl0Lm93bmVkQ29t
bWl0Rm9yT3duZWRSZXBvc2l0b3J5KG93bmVkUmVwb3NpdG9yeSkpCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgb3duc0NvbW1pdHNGb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5jb21taXRGb3JSZXBvc2l0b3J5KHJl
cG9zaXRvcnkpLm93bnNDb21taXRzKCk7CisgICAgfQorCisgICAgcmVwb3NpdG9yaWVzKCkgeyBy
ZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkua2V5cygpKTsgfQorICAg
IGhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnkuc29ydEJ5TmFt
ZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLnJlcG9zaXRvcmllcygpLmZpbHRlcigocmVwb3Np
dG9yeSkgPT4gIXRoaXMub3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSk7IH0K
KyAgICBjb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX2NvbW1p
dEJ5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7IH0KKyAgICBvd25lZFJlcG9zaXRvcmllc0Zv
ck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lZFJlcG9zaXRv
cmllc0J5T3duZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsgfQorICAgIG93bmVyQ29tbWl0
Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQorICAgIHsKKyAgICAgICAgY29uc3QgY29tbWl0ID0g
dGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgaWYgKCFj
b21taXQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIGNvbW1pdC5v
d25lckNvbW1pdCgpOworICAgIH0KK30KKwogaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5l
ZCcpIHsKICAgICBtb2R1bGUuZXhwb3J0cy5Db21taXRTZXQgPSBDb21taXRTZXQ7CiAgICAgbW9k
dWxlLmV4cG9ydHMuTWVhc3VyZW1lbnRDb21taXRTZXQgPSBNZWFzdXJlbWVudENvbW1pdFNldDsK
ICAgICBtb2R1bGUuZXhwb3J0cy5DdXN0b21Db21taXRTZXQgPSBDdXN0b21Db21taXRTZXQ7Cisg
ICAgbW9kdWxlLmV4cG9ydHMuSW50ZXJtZWRpYXRlQ29tbWl0U2V0ID0gSW50ZXJtZWRpYXRlQ29t
bWl0U2V0OwogfQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pz
L3YzLW1vZGVscy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2Rl
bHMuanMKaW5kZXggYWFkOGUxZTQwMmY3MmZjMzY3NzE4ZjI0NmMwODc1MDBiMDMzMDIwMi4uZDBl
ZmU3YzBkNTIwNDU4OWQ3YjdkZjYwZDFiY2Y3MTNkYjU0YWE2YyAxMDA2NDQKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcworKysgYi9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCkBAIC0xNiw3ICsxNiw2IEBAIGlt
cG9ydEZyb21WMygnbW9kZWxzL2J1aWxkLXJlcXVlc3QuanMnLCAnQnVpbGRSZXF1ZXN0Jyk7CiBp
bXBvcnRGcm9tVjMoJ21vZGVscy9idWlsZGVyLmpzJywgJ0J1aWxkJyk7CiBpbXBvcnRGcm9tVjMo
J21vZGVscy9idWlsZGVyLmpzJywgJ0J1aWxkZXInKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2Nv
bW1pdC1sb2cuanMnLCAnQ29tbWl0TG9nJyk7Ci1pbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQt
c2V0LmpzJywgJ0N1c3RvbUNvbW1pdFNldCcpCiBpbXBvcnRGcm9tVjMoJ21vZGVscy9tYW5pZmVz
dC5qcycsICdNYW5pZmVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvbWVhc3VyZW1lbnQtYWRh
cHRvci5qcycsICdNZWFzdXJlbWVudEFkYXB0b3InKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL21l
YXN1cmVtZW50LWNsdXN0ZXIuanMnLCAnTWVhc3VyZW1lbnRDbHVzdGVyJyk7CkBAIC0yNyw2ICsy
Niw3IEBAIGltcG9ydEZyb21WMygnbW9kZWxzL3JlcG9zaXRvcnkuanMnLCAnUmVwb3NpdG9yeScp
OwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LXNldC5qcycsICdNZWFzdXJlbWVudENvbW1p
dFNldCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LXNldC5qcycsICdDb21taXRTZXQn
KTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2NvbW1pdC1zZXQuanMnLCAnQ3VzdG9tQ29tbWl0U2V0
Jyk7CitpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQtc2V0LmpzJywgJ0ludGVybWVkaWF0ZUNv
bW1pdFNldCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvdGVzdC5qcycsICdUZXN0Jyk7CiBpbXBv
cnRGcm9tVjMoJ21vZGVscy90ZXN0LWdyb3VwLmpzJywgJ1Rlc3RHcm91cCcpOwogaW1wb3J0RnJv
bVYzKCdtb2RlbHMvdGltZS1zZXJpZXMuanMnLCAnVGltZVNlcmllcycpOwpkaWZmIC0tZ2l0IGEv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMK
aW5kZXggM2IzMWU1YzA3MWQxY2MwNWNjOGE4YzBkNDZiZjNkNWEzNjdlZjMwOS4uODhlOTVmZDFk
ZjIzYzgyMjdjOWExYTU3M2I3ZTA5ZmNhOTE1MGU1MCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVy
Zi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0cy5qcworKysgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCkBAIC0yNDEs
MTIgKzI0MSwxMiBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAg
ICB9KTsKICAgICB9KTsKIAotICAgIGRlc2NyaWJlKCdkaWZmT3duZWRDb21taXRzJywgKCkgPT4g
eworICAgIGRlc2NyaWJlKCdvd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25lckNvbW1pdHMnLCAo
KSA9PiB7CiAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4gewogICAgICAgICAgICAgTW9ja1JlbW90
ZUFQSS5yZXNldCgpOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBk
aWZmZXJlbmNlIGJldHdlZW4gMiBvd25lZC1jb21taXRzJywgKCkgPT4geworICAgICAgICBpdCgn
c2hvdWxkIHJldHVybiBkaWZmZXJlbmNlIGJldHdlZW4gb3duZWQtY29tbWl0cyBvZiAyIG93bmVy
IGNvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBvbmVDb21taXQgPSBvd25lckNv
bW1pdCgpOwogICAgICAgICAgICAgY29uc3Qgb3RoZXJDb21taXQgPSBvdGhlck93bmVyQ29tbWl0
KCk7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBvbmVDb21taXQuZmV0Y2hP
d25lZENvbW1pdHMoKTsKQEAgLTI4Nyw3ICsyODcsNyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywg
ZnVuY3Rpb24gKCkgewogCiAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyRmV0Y2hpbmdQcm9t
aXNlOwogICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
ZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmT3duZWRDb21taXRzKG9uZUNvbW1pdCwgb3RoZXJD
b21taXQpOworICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cub3du
ZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzKG9uZUNvbW1pdCwgb3RoZXJDb21taXQp
OwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChkaWZmZXJlbmNlLnNpemUsIDEpOwogICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChkaWZmZXJlbmNlLmtleXMoKS5uZXh0KCkudmFsdWUs
IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KTsKICAgICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0
IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5q
cyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMu
anMKaW5kZXggYWI3NmQ1ODljZWJkMjAwNTdiM2E3OWM2ODhhNTZhMzU4NmYwMDhmNy4uNjU0M2Jk
ZDJiNzE0MzVmZDk4MmZkZjlhN2RjN2E3OTEyMGFjNTYwZCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0z
LDYgKzMsNyBAQAogY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7CiByZXF1aXJlKCcu
Li90b29scy9qcy92My1tb2RlbHMuanMnKTsKIGNvbnN0IE1vY2tNb2RlbHMgPSByZXF1aXJlKCcu
L3Jlc291cmNlcy9tb2NrLXYzLW1vZGVscy5qcycpLk1vY2tNb2RlbHM7Citjb25zdCBNb2NrUmVt
b3RlQVBJID0gcmVxdWlyZSgnLi4vdW5pdC10ZXN0cy9yZXNvdXJjZXMvbW9jay1yZW1vdGUtYXBp
LmpzJykuTW9ja1JlbW90ZUFQSTsKIAogZnVuY3Rpb24gY3JlYXRlUGF0Y2goKQogewpAQCAtNTEs
NiArNTIsMTExIEBAIGZ1bmN0aW9uIGN1c3RvbUNvbW1pdFNldFdpdGhPd25lZFJlcG9zaXRvcnlI
YXNTYW1lTmFtZUFzTm90T3duZWRSZXBvc2l0b3J5KCkKICAgICByZXR1cm4gY3VzdG9tQ29tbWl0
U2V0OwogfQogCitmdW5jdGlvbiBvd25lckNvbW1pdCgpCit7CisgICAgcmV0dXJuIG5ldyBDb21t
aXRMb2coNSwgeworICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9y
eSwKKyAgICAgICAgcmV2aXNpb246ICdvd25lci1jb21taXQtMCcsCisgICAgICAgIG93bnNDb21t
aXRzOiB0cnVlLAorICAgICAgICB0aW1lOiBudWxsLAorICAgIH0pOworfQorCitkZXNjcmliZSgn
SW50ZXJtZWRpYXRlQ29tbWl0U2V0JywgKCkgPT4geworICAgIE1vY2tSZW1vdGVBUEkuaW5qZWN0
KCk7CisgICAgTW9ja01vZGVscy5pbmplY3QoKTsKKworICAgIGRlc2NyaWJlKCdzZXRDb21taXRG
b3JSZXBvc2l0b3J5JywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIGFsbG93IHNldCBjb21t
aXQgZm9yIG93bmVyIHJlcG9zaXRvcnknLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21t
aXRTZXQgPSBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG5ldyBDb21taXRTZXQpOworICAgICAg
ICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsKKyAgICAgICAgICAgIGNvbW1pdFNl
dC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBjb21t
aXQpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdCwgY29tbWl0U2V0LmNvbW1pdEZv
clJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnkpKTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBzZXQgY29tbWl0IGZvciBvd25lZCByZXBvc2l0b3J5
JywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0gbmV3IEludGVybWVkaWF0
ZUNvbW1pdFNldChuZXcgQ29tbWl0U2V0KTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IG93
bmVyQ29tbWl0KCk7CisKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZSA9IGNvbW1p
dC5mZXRjaE93bmVkQ29tbWl0cygpOworICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBNb2Nr
UmVtb3RlQVBJLnJlcXVlc3RzOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxl
bmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4v
YXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNpb249b3duZXItY29tbWl0
LTAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS5tZXRob2QsICdHRVQn
KTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAg
ICAgICAgICAgICBpZDogMjMzLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMub3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAgICAgICAgICAgICAgcmV2aXNpb246ICc2Zjhi
MGRiYmRhOTVhNDQwNTAzYjg4ZGIxZGQwM2RhZDNhN2IwN2ZiJywKKyAgICAgICAgICAgICAgICB0
aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCisgICAgICAg
ICAgICB9XX0pOworCisgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKCkg
PT4geworICAgICAgICAgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0ID0gY29tbWl0Lm93bmVkQ29t
bWl0cygpWzBdOworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0
b3J5KE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBjb21taXQpOworICAgICAgICAgICAgICAg
IGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0
b3J5LCBvd25lZENvbW1pdCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdCwg
Y29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnkp
KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXQsIGNvbW1pdFNldC5j
b21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChjb21taXRTZXQucmVwb3NpdG9yaWVzKCksIFtNb2Nr
TW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnldKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdyZW1v
dmVDb21taXRGb3JSZXBvc2l0b3J5JywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIHJlbW92
ZSBvd25lZCBjb21taXRzIHdoZW4gb3duZXIgY29tbWl0IGlzIHJlbW92ZWQnLCAoKSA9PiB7Cisg
ICAgICAgICAgICBjb25zdCBjb21taXRTZXQgPSBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG5l
dyBDb21taXRTZXQpOworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsK
KworICAgICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3duZWRD
b21taXRzKCk7CisgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVx
dWVzdHM7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0cy8x
MTEvb3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj1vd25lci1jb21taXQtMCcpOworICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworCisgICAgICAg
ICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHtjb21taXRzOiBbeworICAgICAgICAgICAgICAgIGlk
OiAyMzMsCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lZFJlcG9z
aXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJzZmOGIwZGJiZGE5NWE0NDA1
MDNiODhkYjFkZDAzZGFkM2E3YjA3ZmInLAorICAgICAgICAgICAgICAgIHRpbWU6ICsobmV3IERh
dGUoJzIwMTYtMDUtMTNUMDA6NTU6NTcuODQxMzQ0WicpKSwKKyAgICAgICAgICAgIH1dfSk7CisK
KyAgICAgICAgICAgIHJldHVybiBmZXRjaGluZ1Byb21pc2UudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25l
clJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1p
dEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnksIGNvbW1pdC5vd25lZENv
bW1pdHMoKVswXSk7CisgICAgICAgICAgICAgICAgY29tbWl0U2V0LnJlbW92ZUNvbW1pdEZvclJl
cG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnkpOworICAgICAgICAgICAgICAgIGFz
c2VydC5kZWVwRXF1YWwoY29tbWl0U2V0LnJlcG9zaXRvcmllcygpLCBbXSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBub3QgcmVtb3ZlIG93bmVy
IGNvbW1pdHMgd2hlbiBvd25lZCBjb21taXQgaXMgcmVtb3ZlZCcsICgpID0+IHsKKyAgICAgICAg
ICAgIGNvbnN0IGNvbW1pdFNldCA9IG5ldyBJbnRlcm1lZGlhdGVDb21taXRTZXQobmV3IENvbW1p
dFNldCk7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBvd25lckNvbW1pdCgpOworCisgICAg
ICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBjb21taXQuZmV0Y2hPd25lZENvbW1pdHMo
KTsKKyAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2FwaS9jb21taXRzLzExMS9vd25l
ZC1jb21taXRzP293bmVyLXJldmlzaW9uPW93bmVyLWNvbW1pdC0wJyk7CisgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHNbMF0ubWV0aG9kLCAnR0VUJyk7CisKKyAgICAgICAgICAgIHJl
cXVlc3RzWzBdLnJlc29sdmUoe2NvbW1pdHM6IFt7CisgICAgICAgICAgICAgICAgaWQ6IDIzMywK
KyAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeS5p
ZCgpLAorICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRi
MWRkMDNkYWQzYTdiMDdmYicsCisgICAgICAgICAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAx
Ni0wNS0xM1QwMDo1NTo1Ny44NDEzNDRaJykpLAorICAgICAgICAgICAgfV19KTsKKworICAgICAg
ICAgICAgcmV0dXJuIGZldGNoaW5nUHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAg
ICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93bmVyUmVwb3Np
dG9yeSwgY29tbWl0KTsKKyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVw
b3NpdG9yeShNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwgY29tbWl0Lm93bmVkQ29tbWl0cygp
WzBdKTsKKyAgICAgICAgICAgICAgICBjb21taXRTZXQucmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9y
eShNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRl
ZXBFcXVhbChjb21taXRTZXQucmVwb3NpdG9yaWVzKCksIFtNb2NrTW9kZWxzLm93bmVyUmVwb3Np
dG9yeV0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgfSk7CisKK30pOwor
CiBkZXNjcmliZSgnQ3VzdG9tQ29tbWl0U2V0JywgKCkgPT4gewogICAgIE1vY2tNb2RlbHMuaW5q
ZWN0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329750</attachid>
            <date>2017-12-19 01:37:12 -0800</date>
            <delta_ts>2017-12-20 22:30:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171219013712.patch</filename>
            <type>text/plain</type>
            <size>53738</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDgxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMTNlMjdhZDkwYjFiZjY5YjVjNjYwYzRmMDkxYzZmNGQ1NzRlYjhlLi45YmFiOTQyOGY0
MjhkZjA0NzMyNjEwOWIyNTQ1N2FlMDQ3ZTc3NDk4IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw4NSBAQAorMjAxNy0xMi0xOSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisgICAgICAgIEludHJvZHVjZSAnSW50ZXJtZWRp
YXRlQ29tbWl0U2V0JyB0byB0cmFjayB0aGUgc3RhdGUgb2YgY29tbWl0IHNldCB3aGlsZSBzcGVj
aWZ5aW5nIGFuIEEvQiB0ZXN0cy4KKyAgICAgICAgSXQgaXMgYSBDb21taXRTZXQgdmFyaWFudCBz
dXBwb3J0cyB1cGRhdGUvcmVtb3ZlIGNvbW1pdHMgYXMgd2UgbmVlZCB0aGUgYWJpbGl0eSB0byB1
cGRhdGUvcmVtb3ZlIGNvbW1pdHMuCisgICAgICAgIEludGVybWVkaWF0ZUNvbW1pdFNldCBpcyB2
ZXJ5IHNpbWlsYXIgdG8gdGhlIG9yaWdpbmFsIENvbW1pdFNldCBidXQgd2l0aCBleHRlbmRlZCBh
YmlsaXR5IGFuZCBpcyBub3QKKyAgICAgICAgYSBzdWJjbGFzcyBvZiBEYXRhTW9kZWxPYmplY3Qs
IHdoaWNoIG1lYW5zIGl0IGlzIG5vdCBhIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0YWJhc2UgdGFi
bGUuCisgICAgICAgIEl0IGFsc28gaGFzIHNvbWUgc2ltaWxhcml0eSB0byBDdXN0b21Db21taXRT
ZXQsIGJ1dCBpdCBhY2NlcHRzIGEgY29tbWl0IHJhdGhlciB0aGFuIGEgcmV2aXNpb24uCisgICAg
ICAgIEJ5IGRvaW5nIHNvLCBpdCBoYXMgdGhlIGFiaWxpdHkgdG8gZmV0Y2ggb3duZWQgY29tbWl0
IGluZm9ybWF0aW9uIGZvciBhbiBvd25lciBjb21taXQuCisKKyAgICAgICAgKiBwdWJsaWMvdjMv
Y29tcG9uZW50cy9jb21iby1ib3guanM6IEFkZGVkLgorICAgICAgICAoQ29tYm9Cb3gpOgorICAg
ICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9jcmVhdGVDYW5kaWRhdGVMaXN0KTogQ3JlYXRlIGFu
IGh0bWwgbGlzdCBiYXNlZCBvbiBjYW5kaWRhdGVzLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90
eXBlLl9jb25zdHJ1Y3RUZXh0RmllbGQpOgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9j
YW5kaWRhdGVFbGVtZW50Rm9yQ3VycmVudEluZGV4SW5kZXgpOiBSZXR1cm5zIGN1cnJlbnRseSBm
b2N1c2VkIGxpc3QgZWxlbWVudC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlk
YXRlTmFtZUZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgY3VycmVudGx5IGZvY3VzZWQgY2FuZGlk
YXRlLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVN
YXRjaGluZ0l0ZW0pOiBTdXBwb3J0cyBhdXRvIGNvbXBsZXRpb24uCisgICAgICAgIChDb21ib0Jv
eC5wcm90b3R5cGUuX21vdmVDYW5kaWRhdGUpOiBTdXBwb3J0cyBhcnJvdyB1cC9kb3duLgorICAg
ICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChDb21ib0JveC5wcm90
b3R5cGUuX3JlbmRlckNhbmRpZGF0ZUxpc3QpOiBUaGlzIGZ1bmN0aW9uIGNhbGxzIF9jcmVhdGVD
YW5kaWRhdGVMaXN0CisgICAgICAgIGJ1dCBhbHNvIHNjcm9sbCB0aGUgbGlzdCB0byBhIHByb3Bl
ciBwbGFjZSBpZiBuZWNlc3NhcnkuCisgICAgICAgIChDb21ib0JveC5odG1sVGVtcGxhdGUpOgor
ICAgICAgICAoQ29tYm9Cb3guY3NzVGVtcGxhdGUpOgorICAgICAgICAqIHB1YmxpYy92My9jb21w
b25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanM6CisgICAgICAgIChDdXN0b21p
emFibGVUZXN0R3JvdXBGb3JtKToKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0u
cHJvdG90eXBlLnNldENvbW1pdFNldE1hcCk6IENvbnZlcnRzIENvbW1pdFNldHMgaW4gQ29tbWl0
U2V0TWFwIHRvIEludGVybWVkaWF0ZUNvbW1pdFNldC4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRl
c3RHcm91cEZvcm0ucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRvd1RyZWUpOgorICAgICAgICAo
Q3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbXB1dGVDb21taXRTZXRNYXAp
OiBBZGRlZCB0aGUgbG9naWMgdG8gY29udmVydCBhIEludGVybWVkaWF0ZUNvbW1pdFNldCB0byBh
IEN1c3RvbUNvbW1pdFNldC4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJv
dG90eXBlLnJlbmRlcik6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3Rv
dHlwZS5fcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZSk6CisgICAgICAgIChDdXN0b21pemFibGVU
ZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0VGFibGVSb3dzKTogVGhpcyBmdW5jdGlv
biBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGFibGUgcm93cyBpbmNsdWRpbmcgcm93cyB0
aGUKKyAgICAgICAgY29tbWl0cyBvZiB3aGljaCBoYXZlIG93bmVycyBhbmQgdGhlIHJvd3Mgd2l0
aCB1bnNwZWNpZmllZCByZXBvc2l0b3J5LgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRPd25lcik6
IEJ1aWxkIGEgdGFibGUgcm93IGZvciBhIHRvcCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICAo
Q3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93Rm9y
Q29tbWl0c1dpdGhPd25lcik6IEJ1aWxkIGEgdGFibGUgcm93IGZvciByZXBvc2l0b3J5IHdpdGgg
b3duZXIuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29u
c3RydWN0Um93V2l0aG91dFJlcG9zaXRvcnlTcGVjaWZpZWQpOiBCdWlsZCBhIHRhYmxlIHJvdyBm
b3IgYW4gdW5zcGVjaWZpZWQgcmVwb3NpdG9yeS4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RH
cm91cEZvcm0ucHJvdG90eXBlLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyk6IFVwZGF0
ZSB0aGUgbG9naWMgdG8gc3VwcG9ydCBidWlsZCByYWRpbyBidXR0b25zIGZvciB0aGUgb3duZWQg
cmVwb3NpdG9yeSByb3dzLgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5jc3NU
ZW1wbGF0ZSk6CisgICAgICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpz
OiBBZGRlZC4KKyAgICAgICAgKE1pbnVzQnV0dG9uKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLmJ1
dHRvbkNvbnRlbnQpOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1p
dC12aWV3ZXIuanM6CisgICAgICAgIChPd25lZENvbW1pdFZpZXdlci5wcm90b3R5cGUuX3JlbmRl
ck93bmVkQ29tbWl0VGFibGUpOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL3BsdXMt
YnV0dG9uLmpzOiBBZGRlZC4KKyAgICAgICAgKFBsdXNCdXR0b24pOgorICAgICAgICAoUGx1c0J1
dHRvbi5idXR0b25Db250ZW50KToKKyAgICAgICAgKiBwdWJsaWMvdjMvaW5kZXguaHRtbDogQWRk
ZWQgbmV3IGNvbXBvbmVudHMuCisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9n
LmpzOiBBZGRlZCBvd25lciBhbmQgb3duZWQgY29tbWl0IGluZm9ybWF0aW9uLgorICAgICAgICAo
Q29tbWl0TG9nKToKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUub3duZWRDb21taXRzKTog
UmV0dXJucyBhIGxpc3Qgb2YgY29tbWl0cyBvd25lZCBieSBjdXJyZW50IGNvbW1pdC4KKyAgICAg
ICAgKENvbW1pdExvZy5wcm90b3R5cGUub3duZXJDb21taXQpOiBSZXR1cm4gb3duZXIgY29tbWl0
IG9mIGN1cnJlbnQgY29tbWl0LgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5zZXRPd25l
ckNvbW1pdHMpOiBTZXQgb3duZXIgY29tbWl0IG9mIGN1cnJlbnQgY29tbWl0LgorICAgICAgICAo
Q29tbWl0TG9nLnByb3RvdHlwZS5sYWJlbCk6CisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBl
LmRpZmYpOiBSZW1vdmUgdW51c2VkICdmcm9tUmV2aXNpb25Gb3JVUkwnIGFuZCB0aW55IGNvZGUg
Y2xlYW51cC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUub3duZWRDb21taXRGb3JPd25l
ZFJlcG9zaXRvcnkpOgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5mZXRjaE93bmVkQ29t
bWl0cyk6IFNldHMgdGhlIG93bmVyIGZvciB0aG9zZSBvd25lZCBjb21taXRzLiBUaGUgb3duZXIg
b2YgYSBjb21taXQgd2l0aCBtdWx0aXBsZSBvd25lcgorICAgICAgICBjb21taXRzIHdpbGwgYmUg
b3ZlcndyaXR0ZW4gYnkgZWFjaCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICAgICAg
ICAoQ29tbWl0TG9nLm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyk6IEEgbW9y
ZSBnZW5lcmljIHZlcnNpb24gb2Ygd2hpY2ggY29tcGFyZXMgbXVsdGlwbGUgb3duZWQgY29tbWl0
cy4KKyAgICAgICAgKENvbW1pdExvZy5kaWZmT3duZWRDb21taXRzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanM6CisgICAgICAgIChDb21taXRTZXQu
cHJvdG90eXBlLnRvcExldmVsUmVwb3NpdG9yaWVzKToKKyAgICAgICAgKENvbW1pdFNldC5wcm90
b3R5cGUuY29tbWl0Rm9yUmVwb3NpdG9yeSk6CisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRT
ZXQpOiBJbiBvcmRlciB0byBzdXBwb3J0IG93bmVkIGNvbW1pdHMsIGNvbW1pdCBzZXQgc2hvdWxk
IHN1cHBvcnQgbXV0YXRpb24gYXMgd2UgbWF5IGFkZC9yZW1vdmUgY29tbWl0cyBmb3IgYSByZXBv
c2l0b3J5LgorICAgICAgICBUaGlzIHZhcmlhbnQgb2YgY29tbWl0IHNldCBzdXBwb3J0cyByZW1v
dmUvdXBkYXRlIGNvbW1pdHMgZm9yIHJlcG9zaXRvcmllcy4gSW50ZXJtZWRpYXRlQ29tbWl0U2V0
IHByb3ZpZGVzIGEgc3VwZXIgc2V0IG9mIGZ1bmN0aW9uYWxpdGllcyBvZiBDdXN0b21Db21taXRT
ZXQuCisgICAgICAgIEl0IHN0b3JlcyBDb21taXRMb2cgb2JqZWN0IHJhdGhlciB0aGFuIHRoZSBy
ZXZpc2lvbiwgYWxsb3dzIHVwZGF0aW5nIGFuZCByZW1vdmluZyBhIGNvbW1pdCBhcyB3ZWxsIGFz
IGZldGNoaW5nIG93bmVkIGNvbW1pdHMgZm9yIGEgY29tbWl0LgorICAgICAgICAoSW50ZXJtZWRp
YXRlQ29tbWl0U2V0LnByb3RvdHlwZS5zZXRDb21taXRGb3JSZXBvc2l0b3J5KTogU2V0cyBhIGNv
bW1pdCBmb3IgYSByZXBvc2l0b3J5IGluIGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlh
dGVDb21taXRTZXQucHJvdG90eXBlLnJlbW92ZUNvbW1pdEZvclJlcG9zaXRvcnkpOiBSZW1vdmVz
IGEgY29tbWl0IGZvciBhIHJlcG9zaXRvcnkgaW4gY29tbWl0IHNldC4KKyAgICAgICAgKEludGVy
bWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUudXBkYXRlQ29tbWl0Rm9yUmVwb3NpdG9yeSk6IFVw
ZGF0ZXMgYSBjb21taXQgZm9yIGEgcmVwb3NpdG9yeSBieSBnaXZlbiBhIHJldmlzaW9uIG9mIHRo
ZSByZXBvc2l0b3J5LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5v
d25zQ29tbWl0c0ZvclJlcG9zaXRvcnkpOgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0
LnByb3RvdHlwZS5yZXBvc2l0b3JpZXMpOiBSZXR1cm5zIGFsbCByZXBvc2l0b3JpZXMgaW4gdGhl
IGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLmhp
Z2hlc3RMZXZlbFJlcG9zaXRvcmllcyk6IFJldHVybnMgYWxsIHJlcG9zaXRvcmllcyB0aG9zZSBk
b24ndCBoYXZlIGFuIG93bmVyLgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3Rv
dHlwZS5jb21taXRGb3JSZXBvc2l0b3J5KTogUmV0dXJucyBhIGNvbW1pdCBmb3IgYSBnaXZlbiBy
ZXBvc2l0b3J5LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5vd25l
ZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeSk6IFJldHVybnMgYWxsIHJlcG9zaXRvcmll
cyBvd25lZCBieSBhIGdpdmVuIHJlcG9zaXRvcnkgaW4gY3VycmVudCBjb21taXQgc2V0LgorICAg
ICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5vd25lckNvbW1pdEZvclJlcG9z
aXRvcnkpOiBSZXR1cm5zIG93bmVyIGNvbW1pdCBmb3IgYSBnaXZlbiBvd25lZCByZXBvc2l0b3J5
LgorICAgICAgICAqIHRvb2xzL2pzL3YzLW1vZGVscy5qczoKKyAgICAgICAgKiB1bml0LXRlc3Rz
L2NvbW1pdC1sb2ctdGVzdHMuanM6IFVwZGF0ZWQgdW5pdHRlc3Qgd2hpY2ggdGVzdHMgJ293bmVy
Q29tbWl0JyBmdW5jdGlvbi4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMu
anM6IEFkZGVkIHVuaXQgdGVzdHMgZm9yIEludGVybWVkaWF0ZUNvbW1pdFNldC4KKwogMjAxNy0x
Mi0xMyAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSB0
ZXN0IGZyZXNobmVzcyBwYWdlLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9jb21wb25lbnRzL2NvbWJvLWJveC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiM2Q0
OTZmZWU3Y2EyYmU3NGMzYzliMzk0NjFhY2EzZmRlMzUzZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMK
QEAgLTAsMCArMSwxOTcgQEAKK2NsYXNzIENvbWJvQm94IGV4dGVuZHMgQ29tcG9uZW50QmFzZQor
eworICAgIGNvbnN0cnVjdG9yKGNhbmRpZGF0ZXMsIGRlZmF1bHRWYWx1ZSwgbWF4Q2FuZGlkYXRl
TGlzdExlbmd0aCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdjb21iby1ib3gnKTsKKyAgICAgICAg
dGhpcy5fY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXM7CisgICAgICAgIHRoaXMuX2lucHV0VmFsdWUg
PSBkZWZhdWx0VmFsdWU7CisgICAgICAgIHRoaXMuX21heENhbmRpZGF0ZUxpc3RMZW5ndGggPSBt
YXhDYW5kaWRhdGVMaXN0TGVuZ3RoIHx8IDEwMDA7CisgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5k
aWRhdGVMaXN0ID0gW107CisgICAgICAgIHRoaXMuX2VsZW1lbnRCeUNhbmRpZGF0ZU5hbWUgPSBu
ZXcgTWFwOworICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSBudWxsOworICAg
ICAgICB0aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCA9IGZhbHNlOworICAgICAgICB0aGlzLl9jcmVh
dGVDYW5kaWRhdGVMaXN0TGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMu
X2NyZWF0ZUNhbmRpZGF0ZUxpc3QuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2NvbnN0cnVj
dFRleHRGaWVsZExhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9jb25z
dHJ1Y3RUZXh0RmllbGQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3JlbmRlckNhbmRpZGF0
ZUxpc3RMYXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fcmVuZGVyQ2Fu
ZGlkYXRlTGlzdC5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBfY3JlYXRlQ2FuZGlkYXRlTGlz
dChjYW5kaWRhdGVzLCBrZXksIHNlbGVjdGVkQ2FuZGlkYXRlKQorICAgIHsKKyAgICAgICAgY29u
c3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29uc3Qg
bGluayA9IENvbXBvbmVudEJhc2UuY3JlYXRlTGluazsKKyAgICAgICAgY29uc3QgY2FuZGlkYXRl
c1N0YXJ0aW5nV2l0aEtleSA9IFtdOworICAgICAgICBjb25zdCBjYW5kaWRhdGVzQ29udGFpbmlu
Z0tleSA9IFtdOworICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7
CisgICAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSBjYW5kaWRhdGUudG9Mb3dlckNhc2Uo
KS5pbmRleE9mKGtleS50b0xvd2VyQ2FzZSgpKTsKKyAgICAgICAgICAgIGlmIChrZXkgJiYgc2Vh
cmNoUmVzdWx0ID09PSAtMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICghc2VhcmNoUmVzdWx0KQorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXNTdGFydGluZ1dp
dGhLZXkucHVzaChjYW5kaWRhdGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGNhbmRpZGF0ZXNDb250YWluaW5nS2V5LnB1c2goY2FuZGlkYXRlKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlTGlzdCA9IGNhbmRpZGF0ZXNTdGFydGluZ1dpdGhL
ZXkuY29uY2F0KGNhbmRpZGF0ZXNDb250YWluaW5nS2V5KS5zbGljZSgwLCB0aGlzLl9tYXhDYW5k
aWRhdGVMaXN0TGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVM
aXN0Lm1hcCgoY2FuZGlkYXRlKSA9PiB7CisgICAgICAgICAgICBjb25zdCBpdGVtID0gbGluayhj
YW5kaWRhdGUsICgpID0+IG51bGwpOworICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVy
KCdtb3VzZWRvd24nLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9
IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKCd1cGRhdGUn
LCBjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gY2FuZGlkYXRlID09
IHNlbGVjdGVkQ2FuZGlkYXRlID8gJ3NlbGVjdGVkJyA6IG51bGw7CisKKyAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnRCeUNhbmRpZGF0ZU5hbWUuc2V0KGNhbmRpZGF0ZSwgaXRlbSk7CisgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudCgnbGknLCBpdGVtKTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgX2NvbnN0cnVjdFRleHRGaWVsZCgpCisgICAgeworICAgICAgICBjb25zdCB0ZXh0RmllbGQg
PSB0aGlzLmNvbnRlbnQoJ3RleHQtZmllbGQnKTsKKyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50
TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4geworICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9
IHRleHRGaWVsZC52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IG51bGw7Cisg
ICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAgICAg
dGV4dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsKKyAgICAgICAgICAg
IHRoaXMuX2F1dG9Db21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRlbSgpOworICAgICAgICAgICAg
dGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICAg
IHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4geworICAgICAgICAgICAg
dGhpcy5faW5wdXRWYWx1ZSA9IHRleHRGaWVsZC52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3No
b3dDYW5kaWRhdGVMaXN0ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVJ
Zk9ubHlPbmVNYXRjaGluZ0l0ZW0oKTsKKyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVy
KCk7CisgICAgICAgIH0pOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignZm9j
dXMnLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCA9IHRydWU7
CisgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gdGV4dEZpZWxkLnZhbHVlOworICAgICAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRleHRG
aWVsZC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7CisgICAgICAgICAg
ICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1Vw
JykgeworICAgICAgICAgICAgICAgIHRoaXMuX21vdmVDYW5kaWRhdGUoZXZlbnQua2V5ID09PSAn
QXJyb3dEb3duJyk7CisgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyB8fCBldmVudC5rZXkgPT09
ICdFbnRlcicpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLl9jYW5k
aWRhdGVOYW1lRm9yQ3VycmVudEluZGV4KCk7CisgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRj
aEFjdGlvbigndXBkYXRlJywgY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgX2NhbmRpZGF0ZUVsZW1lbnRGb3JDdXJyZW50SW5kZXhJbmRleCgpIHsg
cmV0dXJuIHRoaXMuX2VsZW1lbnRCeUNhbmRpZGF0ZU5hbWUuZ2V0KHRoaXMuX2NhbmRpZGF0ZU5h
bWVGb3JDdXJyZW50SW5kZXgoKSk7IH0KKworICAgIF9jYW5kaWRhdGVOYW1lRm9yQ3VycmVudElu
ZGV4KCkgeyByZXR1cm4gdGhpcy5fY3VycmVudENhbmRpZGF0ZUxpc3RbdGhpcy5fY3VycmVudENh
bmRpZGF0ZUluZGV4XTsgfQorCisgICAgX2F1dG9Db21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRl
bSgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2lucHV0VmFsdWUubGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBtYXRjaGluZ0NhbmRpZGF0ZUNvdW50ID0gMDsK
KyAgICAgICAgbGV0IG1hdGNoaW5nQ2FuZGlkYXRlID0gbnVsbDsKKyAgICAgICAgY29uc3QgaW5w
dXRWYWx1ZUluTG93ZXJDYXNlID0gdGhpcy5faW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpOworICAg
ICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiB0aGlzLl9jYW5kaWRhdGVzKSB7CisgICAgICAg
ICAgICBpZiAoY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaW5wdXRWYWx1ZUluTG93
ZXJDYXNlKSkgeworICAgICAgICAgICAgICAgIG1hdGNoaW5nQ2FuZGlkYXRlQ291bnQgKz0gMTsK
KyAgICAgICAgICAgICAgICBtYXRjaGluZ0NhbmRpZGF0ZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaGluZ0NhbmRpZGF0ZUNvdW50ID4gMSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hpbmdDYW5kaWRh
dGVDb3VudCA9PT0gMSkgeworICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9IG1hdGNoaW5n
Q2FuZGlkYXRlOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbigndXBkYXRlJywgbWF0
Y2hpbmdDYW5kaWRhdGUpOworICAgICAgICB9CisgICAgfQorCisgICAgX21vdmVDYW5kaWRhdGUo
Zm9yd2FyZCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXgg
PT09IG51bGwpCisgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSBmb3J3
YXJkID8gMCA6IHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0Lmxlbmd0aCAtIDE7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ICs9IGZvcndh
cmQgPyAxIDogLTE7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4
ID49IHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVMaXN0Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0
aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlTGlzdC5s
ZW5ndGggLSAxOworICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA8
IDApCisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gMDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIF9yZW5kZXJDYW5kaWRhdGVMaXN0KGNhbmRpZGF0ZXMsIGlu
cHV0VmFsdWUsIHNlbGVjdGVkQ2FuZGlkYXRlLCBzaG93Q2FuZGlkYXRlTGlzdCkgeworICAgICAg
ICBjb25zdCBjYW5kaWRhdGVMaXN0ID0gdGhpcy5jb250ZW50KCdjYW5kaWRhdGUtbGlzdCcpOwor
ICAgICAgICBjYW5kaWRhdGVMaXN0LnN0eWxlLmRpc3BsYXkgPSBzaG93Q2FuZGlkYXRlTGlzdCA/
IG51bGwgOiAnbm9uZSc7CisgICAgICAgIHRoaXMucmVuZGVyUmVwbGFjZShjYW5kaWRhdGVMaXN0
LCB0aGlzLl9jcmVhdGVDYW5kaWRhdGVMaXN0TGF6aWx5LmV2YWx1YXRlKGNhbmRpZGF0ZXMsIGlu
cHV0VmFsdWUsIHNlbGVjdGVkQ2FuZGlkYXRlKSk7CisgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUVs
ZW1lbnQgPSB0aGlzLl9jYW5kaWRhdGVFbGVtZW50Rm9yQ3VycmVudEluZGV4SW5kZXgoKTsKKyAg
ICAgICAgaWYoY2FuZGlkYXRlRWxlbWVudCkKKyAgICAgICAgICAgIGNhbmRpZGF0ZUVsZW1lbnQu
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpOworICAgIH0KKworICAgIHJlbmRlcigpCisgICAgewor
ICAgICAgICBzdXBlci5yZW5kZXIoKTsKKworICAgICAgICB0aGlzLl9jb25zdHJ1Y3RUZXh0Rmll
bGRMYXppbHkuZXZhbHVhdGUoKTsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ2FuZGlkYXRlTGlzdExh
emlseS5ldmFsdWF0ZSh0aGlzLl9jYW5kaWRhdGVzLCB0aGlzLl9pbnB1dFZhbHVlLCB0aGlzLl9j
YW5kaWRhdGVOYW1lRm9yQ3VycmVudEluZGV4KCksIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRlbXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBgPGRpdiBpZD0nY29tYm94LWJveCc+CisgICAgICAgICAgICA8aW5wdXQgaWQ9J3RleHQtZmll
bGQnPjwvaW5wdXQ+CisgICAgICAgICAgICA8dWwgaWQ9ImNhbmRpZGF0ZS1saXN0Ij48L3VsPgor
ICAgICAgICA8L2Rpdj5gOworICAgIH0KKworICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYAorICAgICAgICAgICAgZGl2IHsKKyAgICAgICAgICAgICAgICBw
b3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAxLjRyZW07CisgICAg
ICAgICAgICAgICAgbGVmdDogMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdWw6ZW1w
dHkgeworICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHVsIHsKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1
MG1zIGVhc2UtaW47CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAg
IHBhZGRpbmc6IDAuMXJlbSAwLjNyZW07CisgICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9u
ZTsKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUp
OworICAgICAgICAgICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAg
ICAgdG9wOiAxLjVyZW07CisgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMC4ycmVtOwor
ICAgICAgICAgICAgICAgIHotaW5kZXg6IDEwOworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDguNXJlbTsKKyAgICAgICAgICAg
ICAgICBtYXgtaGVpZ2h0OiAxMHJlbTsKKyAgICAgICAgICAgICAgICBvdmVyZmxvdzogYXV0bzsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGkgeworICAgICAgICAgICAgICAgIHRleHQt
YWxpZ246IGxlZnQ7CisgICAgICAgICAgICAgICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAg
IHBhZGRpbmc6IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpIGEgeworICAgICAg
ICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgICAgICAgICAgICBmb250LXNp
emU6IDAuOHJlbTsKKyAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAgICAg
ICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGkgYTpo
b3ZlciwKKyAgICAgICAgICAgIGxpIGEuc2VsZWN0ZWQgeworICAgICAgICAgICAgICAgIGJhY2tn
cm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAwLjEpOworICAgICAgICAgICAgfQorICAgICAgICBg
OworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdjb21iby1ib3gnLCBD
b21ib0JveCk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5qcyBiL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91
cC1mb3JtLmpzCmluZGV4IDQ2OTM4MDE5Y2IzNWEyODA5NGU3ZjIwOGUyMzJkZjRkMjA1NjlmMmIu
LjQyZDJkMWNjMTVmM2UyNjI4MTg1NjE4ZDdlOTE2NzA4NjExOWIwNmEgMTAwNjQ0Ci0tLSBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUt
dGVzdC1ncm91cC1mb3JtLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCkBAIC0xLDQgKzEs
MyBAQAotCiBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3Vw
Rm9ybSB7CiAKICAgICBjb25zdHJ1Y3RvcigpCkBAIC03LDE0ICs2LDE2IEBAIGNsYXNzIEN1c3Rv
bWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgdGhp
cy5fY29tbWl0U2V0TWFwID0gbnVsbDsKICAgICAgICAgdGhpcy5fbmFtZSA9IG51bGw7CiAgICAg
ICAgIHRoaXMuX2lzQ3VzdG9taXplZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9yZXZpc2lvbkVk
aXRvck1hcCA9IHt9OwotCi0gICAgICAgIHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGVM
YXppbHkgPSBuZXcgTGF6aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fcmVuZGVyQ3VzdG9tUmV2
aXNpb25UYWJsZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAg
PSBuZXcgTWFwOworICAgICAgICB0aGlzLl9vd25lclJldmlzaW9uTWFwID0gbmV3IE1hcDsKKyAg
ICAgICAgdGhpcy5faW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkgPSBuZXcgTWFwOwog
ICAgIH0KIAogICAgIHNldENvbW1pdFNldE1hcChtYXApCiAgICAgewotICAgICAgICB0aGlzLl9j
b21taXRTZXRNYXAgPSBtYXA7CisgICAgICAgIHRoaXMuX2NvbW1pdFNldE1hcCA9IG5ldyBNYXA7
CisgICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gbWFwKQorICAgICAgICAgICAgdGhpcy5fY29t
bWl0U2V0TWFwLnNldChsYWJlbCwgbmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChtYXBbbGFiZWxd
KSk7CiAgICAgICAgIHRoaXMuX2lzQ3VzdG9taXplZCA9IGZhbHNlOwogICAgICAgICB0aGlzLmVu
cXVldWVUb1JlbmRlcigpOwogICAgIH0KQEAgLTMyLDcgKzMzLDcgQEAgY2xhc3MgQ3VzdG9taXph
YmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICBuYW1lQ29u
dHJvbC5vbmlucHV0ID0gKCkgPT4gewogICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWVDb250
cm9sLnZhbHVlOwogICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKLSAgICAgICAg
fQorICAgICAgICB9OwogCiAgICAgICAgIHRoaXMuY29udGVudCgnY3VzdG9taXplLWxpbmsnKS5v
bmNsaWNrID0gdGhpcy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4gewogICAgICAgICAgICAgdGhp
cy5faXNDdXN0b21pemVkID0gdHJ1ZTsKQEAgLTQzLDE3ICs0NCwxNCBAQCBjbGFzcyBDdXN0b21p
emFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgX2NvbXB1dGVD
b21taXRTZXRNYXAoKQogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fY29tbWl0
U2V0TWFwKTsKLSAgICAgICAgaWYgKCF0aGlzLl9pc0N1c3RvbWl6ZWQpCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fY29tbWl0U2V0TWFwOwotCiAgICAgICAgIGNvbnN0IG1hcCA9IHt9OwotICAg
ICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIHRoaXMuX2NvbW1pdFNldE1hcCkgewotICAgICAgICAg
ICAgY29uc3Qgb3JpZ2luYWxDb21taXRTZXQgPSB0aGlzLl9jb21taXRTZXRNYXA7CisgICAgICAg
IGZvciAoY29uc3QgbGFiZWwgb2YgdGhpcy5fY29tbWl0U2V0TWFwLmtleXMoKSkgewogICAgICAg
ICAgICAgY29uc3QgY3VzdG9tQ29tbWl0U2V0ID0gbmV3IEN1c3RvbUNvbW1pdFNldDsKLSAgICAg
ICAgICAgIGZvciAobGV0IHJlcG9zaXRvcnkgb2YgdGhpcy5fY29tbWl0U2V0TWFwW2xhYmVsXS5y
ZXBvc2l0b3JpZXMoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0g
dGhpcy5fcmV2aXNpb25FZGl0b3JNYXBbbGFiZWxdLmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAg
ICAgIGZvciAobGV0IHJlcG9zaXRvcnkgb2YgdGhpcy5fY29tbWl0U2V0TWFwLmdldChsYWJlbCku
cmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCByZXZpc2lvbkVkaXRvciA9
IHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwLmdldChsYWJlbCkuZ2V0KHJlcG9zaXRvcnkpOwogICAg
ICAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJldmlzaW9uRWRpdG9yKTsKLSAgICAgICAgICAg
ICAgICBjdXN0b21Db21taXRTZXQuc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnks
IHJldmlzaW9uRWRpdG9yLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBjb25zdCBvd25lclJldmlz
aW9uID0gdGhpcy5fb3duZXJSZXZpc2lvbk1hcC5nZXQobGFiZWwpLmdldChyZXBvc2l0b3J5KSB8
fCBudWxsOworICAgICAgICAgICAgICAgIGN1c3RvbUNvbW1pdFNldC5zZXRSZXZpc2lvbkZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUsIG51bGwsIG93bmVyUmV2
aXNpb24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWFwW2xhYmVsXSA9IGN1c3RvbUNv
bW1pdFNldDsKICAgICAgICAgfQpAQCAtNjcsMjQgKzY1LDM3IEBAIGNsYXNzIEN1c3RvbWl6YWJs
ZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgdGhpcy5jb250
ZW50KCdzdGFydC1idXR0b24nKS5kaXNhYmxlZCA9ICEodGhpcy5fY29tbWl0U2V0TWFwICYmIHRo
aXMuX25hbWUpOwogICAgICAgICB0aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1saW5rLWNvbnRhaW5l
cicpLnN0eWxlLmRpc3BsYXkgPSAhdGhpcy5fY29tbWl0U2V0TWFwID8gJ25vbmUnIDogbnVsbDsK
IAotICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlTGF6aWx5LmV2YWx1YXRl
KHRoaXMuX2NvbW1pdFNldE1hcCwgdGhpcy5faXNDdXN0b21pemVkKTsKKyAgICAgICAgdGhpcy5f
cmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZSh0aGlzLl9jb21taXRTZXRNYXAsIHRoaXMuX2lzQ3Vz
dG9taXplZCk7CiAgICAgfQogCiAgICAgX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGUoY29tbWl0
U2V0TWFwLCBpc0N1c3RvbWl6ZWQpCiAgICAgewogICAgICAgICBpZiAoIWNvbW1pdFNldE1hcCB8
fCAhaXNDdXN0b21pemVkKSB7CiAgICAgICAgICAgICB0aGlzLnJlbmRlclJlcGxhY2UodGhpcy5j
b250ZW50KCdjdXN0b20tdGFibGUnKSwgW10pOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCByZXBvc2l0b3J5
U2V0ID0gbmV3IFNldDsKKyAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRv
cnkgPSBuZXcgTWFwOwogICAgICAgICBjb25zdCBjb21taXRTZXRMYWJlbHMgPSBbXTsKLSAgICAg
ICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAgPSB7fTsKLSAgICAgICAgZm9yIChjb25zdCBsYWJl
bCBpbiBjb21taXRTZXRNYXApIHsKLSAgICAgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBv
ZiBjb21taXRTZXRNYXBbbGFiZWxdLnJlcG9zaXRvcmllcygpKQorICAgICAgICB0aGlzLl9yZXZp
c2lvbkVkaXRvck1hcCA9IG5ldyBNYXA7CisgICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2YgY29t
bWl0U2V0TWFwLmtleXMoKSkgeworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9m
IGNvbW1pdFNldE1hcC5nZXQobGFiZWwpLmhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcygpKSB7CiAg
ICAgICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVwb3NpdG9yeSk7CisgICAgICAgICAg
ICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSBjb21taXRTZXRNYXAuZ2V0KGxhYmVsKS5v
d25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKworICAgICAg
ICAgICAgICAgIGlmICghb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFvd25lZFJlcG9zaXRvcmllc0J5UmVwb3Np
dG9yeS5oYXMocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgICAgIG93bmVkUmVwb3NpdG9y
aWVzQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBuZXcgU2V0KTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBvd25lZFJlcG9zaXRvcnlTZXQgPSBvd25lZFJlcG9zaXRvcmllc0J5UmVwb3NpdG9y
eS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvd25lZFJlcG9z
aXRvcnkgb2Ygb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAgIG93bmVkUmVw
b3NpdG9yeVNldC5hZGQob3duZWRSZXBvc2l0b3J5KQorICAgICAgICAgICAgfQogICAgICAgICAg
ICAgY29tbWl0U2V0TGFiZWxzLnB1c2gobGFiZWwpOwotICAgICAgICAgICAgdGhpcy5fcmV2aXNp
b25FZGl0b3JNYXBbbGFiZWxdID0gbmV3IE1hcDsKKyAgICAgICAgICAgIHRoaXMuX3JldmlzaW9u
RWRpdG9yTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CisgICAgICAgICAgICB0aGlzLl9vd25lclJl
dmlzaW9uTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CiAgICAgICAgIH0KIAogICAgICAgICBjb25z
dCByZXBvc2l0b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0
aFVSTChBcnJheS5mcm9tKHJlcG9zaXRvcnlTZXQudmFsdWVzKCkpKTsKQEAgLTkyLDM0ICsxMDMs
MTM0IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBG
b3JtIHsKICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnY3VzdG9tLXRh
YmxlJyksIFsKICAgICAgICAgICAgIGVsZW1lbnQoJ3RoZWFkJywKICAgICAgICAgICAgICAgICBl
bGVtZW50KCd0cicsCi0gICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsICdSZXBvc2l0
b3J5JyksIGNvbW1pdFNldExhYmVscy5tYXAoKGxhYmVsKSA9PiBlbGVtZW50KCd0ZCcsIHtjb2xz
cGFuOiBjb21taXRTZXRMYWJlbHMubGVuZ3RoICsgMX0sIGxhYmVsKSldKSksCi0gICAgICAgICAg
ICBlbGVtZW50KCd0Ym9keScsCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeUxpc3QubWFwKChy
ZXBvc2l0b3J5KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW2VsZW1l
bnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKV07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKQotICAgICAgICAgICAgICAgICAgICAgICAgY2Vs
bHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAs
IHJlcG9zaXRvcnksIGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50
KCd0cicsIGNlbGxzKTsKLSAgICAgICAgICAgICAgICB9KSldKTsKLQotICAgICAgICByZXR1cm4g
cmVwb3NpdG9yeUxpc3Q7CisgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsIHtjb2xz
cGFuOiAyfSwgJ1JlcG9zaXRvcnknKSwgY29tbWl0U2V0TGFiZWxzLm1hcCgobGFiZWwpID0+IGVs
ZW1lbnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldExhYmVscy5sZW5ndGggKyAxfSwgbGFiZWwp
KV0pKSwKKyAgICAgICAgICAgIGVsZW1lbnQoJ3Rib2R5JywgdGhpcy5fY29uc3RydWN0VGFibGVS
b3dzKHJlcG9zaXRvcnlMaXN0LCBjb21taXRTZXRNYXAsIG93bmVkUmVwb3NpdG9yaWVzQnlSZXBv
c2l0b3J5KSldKTsKKyAgICB9CisKKyAgICBfY29uc3RydWN0VGFibGVSb3dzKHJlcG9zaXRvcnlM
aXN0LCBjb21taXRTZXRNYXAsIG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5KQorICAgIHsK
KyAgICAgICAgY29uc3Qgcm93cyA9IFtdOworICAgICAgICBmb3IoY29uc3QgcmVwb3NpdG9yeSBv
ZiByZXBvc2l0b3J5TGlzdCkgeworICAgICAgICAgICAgY29uc3Qgb3duc0NvbW1pdHMgPSBbLi4u
Y29tbWl0U2V0TWFwLnZhbHVlcygpXS5ldmVyeSgoY29tbWl0U2V0KSA9PiBjb21taXRTZXQub3du
c0NvbW1pdHNGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgIGNvbnN0IGlu
Y29tcGxldGVSb3dDb3VudCA9IHRoaXMuX2luY29tcGxldGVkUm93Rm9yT3duZXJSZXBvc2l0b3J5
LmdldChyZXBvc2l0b3J5KSB8fCAwOworICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3Jp
ZXMgPSBvd25lZFJlcG9zaXRvcmllc0J5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSkgfHwgW107
CisKKyAgICAgICAgICAgIHJvd3MucHVzaCh0aGlzLl9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1p
dHNXaXRob3V0T3duZXIoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBvd25zQ29tbWl0cykpOwor
CisgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgb3duZWRSZXBvc2l0b3J5XSBvZiBbLi4u
b3duZWRSZXBvc2l0b3JpZXNdLmVudHJpZXMoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGxh
c3RSb3cgPSBpbmRleCA9PT0gb3duZWRSZXBvc2l0b3JpZXMuc2l6ZSAtIDEgJiYgIWluY29tcGxl
dGVSb3dDb3VudDsKKyAgICAgICAgICAgICAgICByb3dzLnB1c2godGhpcy5fY29uc3RydWN0VGFi
bGVSb3dGb3JDb21taXRzV2l0aE93bmVyKGNvbW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3J5LCBy
ZXBvc2l0b3J5LCBsYXN0Um93KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
aW5jb21wbGV0ZVJvd0NvdW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
ICAgICBjb25zdCBjb21taXRzID0gWy4uLmNvbW1pdFNldE1hcC52YWx1ZXMoKV0ubWFwKChjb21t
aXRTZXQpID0+IGNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKTsKKyAg
ICAgICAgICAgIGNvbnN0IGNvbW1pdERpZmYgPSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJl
bmNlRm9yT3duZXJDb21taXRzKC4uLmNvbW1pdHMpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBpbmNvbXBsZXRlUm93Q291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICByb3dzLnB1
c2godGhpcy5fY29uc3RydWN0Um93V2l0aG91dFJlcG9zaXRvcnlTcGVjaWZpZWQoY29tbWl0U2V0
TWFwLCByZXBvc2l0b3J5LCBjb21taXREaWZmLCBpID09PSBpbmNvbXBsZXRlUm93Q291bnQgLSAx
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJvd3M7CisgICAgfQorCisgICAgX2NvbnN0
cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRPd25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRv
cnksIG93bnNSZXBvc2l0b3JpZXMpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29t
cG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50
KCd0aCcsIHtjb2xzcGFuOiAyfSwgcmVwb3NpdG9yeS5sYWJlbCgpKV07CisKKyAgICAgICAgZm9y
IChjb25zdCBsYWJlbCBvZiBjb21taXRTZXRNYXAua2V5cygpKQorICAgICAgICAgICAgY2VsbHMu
cHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJl
cG9zaXRvcnksIGxhYmVsLCBudWxsLCBvd25zUmVwb3NpdG9yaWVzKSk7CisKKyAgICAgICAgaWYg
KG93bnNSZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IHBsdXNCdXR0b24gPSBuZXcg
UGx1c0J1dHRvbigpOworICAgICAgICAgICAgcGx1c0J1dHRvbi5saXN0ZW5Ub0FjdGlvbignYWN0
aXZhdGUnLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9pbmNv
bXBsZXRlZFJvd0Zvck93bmVyUmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSkgfHwgMDsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9pbmNvbXBsZXRlZFJvd0Zvck93bmVyUmVwb3NpdG9yeS5zZXQocmVw
b3NpdG9yeSwgdmFsdWUgKyAxKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3Rk
JywgcGx1c0J1dHRvbikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNlbGxzLnB1c2go
ZWxlbWVudCgndGQnKSk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOwor
ICAgIH0KKworICAgIF9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRoT3duZXIoY29tbWl0
U2V0TWFwLCByZXBvc2l0b3J5LCBvd25lclJlcG9zaXRvcnksIGxhc3RSb3cpIHsKKyAgICAgICAg
Y29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAgY29u
c3QgY2VsbHMgPSBbZWxlbWVudCgndGQnLCB7Y2xhc3M6ICdvd25lci1yZXBvc2l0b3J5LWxhYmVs
J30pLCBlbGVtZW50KCd0aCcsIHJlcG9zaXRvcnkubGFiZWwoKSldOworICAgICAgICBjb25zdCBt
aW51c0J1dHRvbiA9IG5ldyBNaW51c0J1dHRvbigpOworCisgICAgICAgIGZvciAoY29uc3QgbGFi
ZWwgb2YgY29tbWl0U2V0TWFwLmtleXMoKSkKKyAgICAgICAgICAgIGNlbGxzLnB1c2godGhpcy5f
Y29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBs
YWJlbCwgb3duZXJSZXBvc2l0b3J5LCBmYWxzZSkpOworCisgICAgICAgIG1pbnVzQnV0dG9uLmxp
c3RlblRvQWN0aW9uKCdhY3RpdmF0ZScsICgpID0+IHsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
Y29tbWl0U2V0IG9mIGNvbW1pdFNldE1hcC52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICBjb21t
aXRTZXQucmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQorICAgICAgICAgICAg
dGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNlbGxzLnB1c2go
ZWxlbWVudCgndGQnLCBtaW51c0J1dHRvbikpOworICAgICAgICByZXR1cm4gZWxlbWVudCgndHIn
LCB7J2NsYXNzJzogbGFzdFJvdyA/ICdsYXN0LW93bmVkLXJvdycgOiAnJ30sIGNlbGxzKTsKICAg
ICB9CisgICAgX2NvbnN0cnVjdFJvd1dpdGhvdXRSZXBvc2l0b3J5U3BlY2lmaWVkKGNvbW1pdFNl
dE1hcCwgb3duZXJSZXBvc2l0b3J5LCBjb21taXREaWZmLCBsYXN0Um93KQorICAgIHsKKyAgICAg
ICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKKyAgICAgICAg
Y29uc3QgbGFiZWxDb3VudCA9ICBjb21taXRTZXRNYXAuc2l6ZTsKKyAgICAgICAgY29uc3QgY2hh
bmdlZFJlcG9zaXRvcmllcyA9IFsuLi5jb21taXREaWZmLmtleXMoKV07CisgICAgICAgIGNvbnN0
IG1pbnVzQnV0dG9uID0gbmV3IE1pbnVzQnV0dG9uKCk7CisgICAgICAgIGNvbnN0IGNvbWJvQm94
ID0gbmV3IENvbWJvQm94KGNoYW5nZWRSZXBvc2l0b3JpZXMubWFwKChyZXBvc2l0b3J5KSA9PiBy
ZXBvc2l0b3J5Lm5hbWUoKSkuc29ydCgpLCAnJyk7CiAKLSAgICBfY29uc3RydWN0UmV2aXNpb25S
YWRpb0J1dHRvbnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCByb3dMYWJlbCkKKyAgICAgICAg
Y29tYm9Cb3gubGlzdGVuVG9BY3Rpb24oJ3VwZGF0ZScsIChyZXBvc2l0b3J5TmFtZSkgPT4gewor
ICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVwb3NpdG9yeSA9IGNoYW5nZWRSZXBvc2l0b3JpZXMu
ZmluZCgocmVwb3NpdG9yeSkgPT4gcmVwb3NpdG9yeU5hbWUgPT09IHJlcG9zaXRvcnkubmFtZSgp
KTsKKyAgICAgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0c0l0ZXJhdG9yID0gY29tbWl0RGlmZi5n
ZXQodGFyZ2V0UmVwb3NpdG9yeSkudmFsdWVzKCk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNv
bW1pdFNldCBvZiBjb21taXRTZXRNYXAudmFsdWVzKCkpCisgICAgICAgICAgICAgICAgY29tbWl0
U2V0LnNldENvbW1pdEZvclJlcG9zaXRvcnkodGFyZ2V0UmVwb3NpdG9yeSwgb3duZWRDb21taXRz
SXRlcmF0b3IubmV4dCgpLnZhbHVlKTsKKyAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5f
aW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuZ2V0KG93bmVyUmVwb3NpdG9yeSk7Cisg
ICAgICAgICAgICB0aGlzLl9pbmNvbXBsZXRlZFJvd0Zvck93bmVyUmVwb3NpdG9yeS5zZXQob3du
ZXJSZXBvc2l0b3J5LCB2YWx1ZSAtIDEpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGQn
LCB7Y2xhc3M6ICdvd25lci1yZXBvc2l0b3J5LWxhYmVsJ30pLCBlbGVtZW50KCd0aCcsIGNvbWJv
Qm94KSwgZWxlbWVudCgndGQnLCB7Y29sc3BhbjogbGFiZWxDb3VudCAqIChsYWJlbENvdW50ICsg
MSl9KV07CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVuVG9BY3Rpb24oJ2FjdGl2YXRlJywg
KCkgPT4geworICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9pbmNvbXBsZXRlZFJvd0Zv
ck93bmVyUmVwb3NpdG9yeS5nZXQob3duZXJSZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHZhbHVlID4gMCk7CisgICAgICAgICAgICB0aGlzLl9pbmNvbXBsZXRlZFJvd0Zv
ck93bmVyUmVwb3NpdG9yeS5zZXQob3duZXJSZXBvc2l0b3J5LCB2YWx1ZSAtIDEpOworICAgICAg
ICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNlbGxz
LnB1c2goZWxlbWVudCgndGQnLCBtaW51c0J1dHRvbikpOworCisgICAgICAgIHJldHVybiBlbGVt
ZW50KCd0cicsIHsnY2xhc3MnOiBsYXN0Um93ID8gJ2xhc3Qtb3duZWQtcm93JyA6ICcnfSwgY2Vs
bHMpOworICAgIH0KKworICAgIF9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRT
ZXRNYXAsIHJlcG9zaXRvcnksIHJvd0xhYmVsLCBvd25lclJlcG9zaXRvcnksIG93bnNSZXBvc2l0
b3JpZXMpCiAgICAgewogICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVh
dGVFbGVtZW50OwotICAgICAgICBjb25zdCByZXZpc2lvbkVkaXRvciA9IGVsZW1lbnQoJ2lucHV0
Jyk7CisgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gZWxlbWVudCgnaW5wdXQnLCB7ZGlz
YWJsZWQ6ICEhb3duZXJSZXBvc2l0b3J5LAorICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsK
KyAgICAgICAgICAgICAgICBpZiAoIW93bnNSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb21taXRTZXRNYXAuZ2V0KHJvd0xhYmVsKS51
cGRhdGVDb21taXRGb3JSZXBvc2l0b3J5V2l0aFJldmlzaW9uKHJlcG9zaXRvcnksIHJldmlzaW9u
RWRpdG9yLnZhbHVlKS5jYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgKCkgPT4gcmV2aXNpb25F
ZGl0b3IudmFsdWUgPSAnJyk7CisgICAgICAgICAgICB9fSk7CiAKLSAgICAgICAgdGhpcy5fcmV2
aXNpb25FZGl0b3JNYXBbcm93TGFiZWxdLnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvcik7
CisgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwLmdldChyb3dMYWJlbCkuc2V0KHJlcG9z
aXRvcnksIHJldmlzaW9uRWRpdG9yKTsKIAogICAgICAgICBjb25zdCBub2RlcyA9IFtdOwotICAg
ICAgICBmb3IgKGxldCBsYWJlbFRvQ2hvb3NlIGluIGNvbW1pdFNldE1hcCkgewotICAgICAgICAg
ICAgY29uc3QgY29tbWl0ID0gY29tbWl0U2V0TWFwW2xhYmVsVG9DaG9vc2VdLmNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgIGZvciAoY29uc3QgbGFiZWxUb0Nob29zZSBv
ZiBjb21taXRTZXRNYXAua2V5cygpKSB7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBjb21t
aXRTZXRNYXAuZ2V0KGxhYmVsVG9DaG9vc2UpLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9y
eSk7CiAgICAgICAgICAgICBjb25zdCBjaGVja2VkID0gbGFiZWxUb0Nob29zZSA9PSByb3dMYWJl
bDsKICAgICAgICAgICAgIGNvbnN0IHJhZGlvQnV0dG9uID0gZWxlbWVudCgnaW5wdXQnLCB7dHlw
ZTogJ3JhZGlvJywgbmFtZTogYCR7cm93TGFiZWx9LSR7cmVwb3NpdG9yeS5pZCgpfS1yYWRpb2As
IGNoZWNrZWQsCi0gICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsgcmV2aXNpb25FZGl0
b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOyB9fSk7CisgICAgICAg
ICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25F
ZGl0b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY29tbWl0ICYmIGNvbW1pdC5vd25lckNvbW1pdCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcC5nZXQocm93TGFiZWwpLnNldChy
ZXBvc2l0b3J5LCBjb21taXQub3duZXJDb21taXQoKS5yZXZpc2lvbigpKTsKKyAgICAgICAgICAg
ICAgICB9fSk7CiAKLSAgICAgICAgICAgIGlmIChjaGVja2VkKQorICAgICAgICAgICAgaWYgKGNo
ZWNrZWQpIHsKICAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvci52YWx1ZSA9IGNvbW1pdCA/
IGNvbW1pdC5yZXZpc2lvbigpIDogJyc7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdCAmJiBj
b21taXQub3duZXJDb21taXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJSZXZp
c2lvbk1hcC5nZXQocm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCBjb21taXQub3duZXJDb21taXQo
KS5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGVzLnB1c2goZWxl
bWVudCgndGQnLCBlbGVtZW50KCdsYWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFiZWxUb0Nob29zZV0p
KSk7CiAgICAgICAgIH0KICAgICAgICAgbm9kZXMucHVzaChlbGVtZW50KCd0ZCcsIHJldmlzaW9u
RWRpdG9yKSk7CkBAIC0xMzksNiArMjUwLDIxIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91
cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgICAgICBtYXJnaW46IDFy
ZW0gMDsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0ZC5vd25l
ci1yZXBvc2l0b3J5LWxhYmVsIHsKKyAgICAgICAgICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAy
cHggdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4
IHRyYW5zcGFyZW50OworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMnJlbTsKKyAgICAgICAg
ICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
I2N1c3RvbS10YWJsZSAubGFzdC1vd25lZC1yb3cgdGQub3duZXItcmVwb3NpdG9yeS1sYWJlbCB7
CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkZGQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGggeworICAgICAgICAgICAgICAg
IG1pbi13aWR0aDogMTJyZW07CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgICNjdXN0b20t
dGFibGUsCiAgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRkLAogICAgICAgICAgICAgI2N1c3Rv
bS10YWJsZSB0aCB7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGlj
L3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDk1NjY1
MzFhMDNjODlmNWM0OWIyNWI3MTBkYzUxOWI2MDYyYjFlCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
c2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5q
cwpAQCAtMCwwICsxLDE3IEBACisKK2NsYXNzIE1pbnVzQnV0dG9uIGV4dGVuZHMgQnV0dG9uQmFz
ZSB7CisgICAgY29uc3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoJ21pbnVzLWJ1dHRv
bicpOworICAgIH0KKworICAgIHN0YXRpYyBidXR0b25Db250ZW50KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBgPGcgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIxMCIgaWQ9Imljb24iPgor
ICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIGZpbGw9InRyYW5zcGFy
ZW50Ii8+CisgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI1LDUwIDc1LDUwIiAvPgorICAg
ICAgICA8L2c+YDsKKyAgICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnbWlu
dXMtYnV0dG9uJywgTWludXNCdXR0b24pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMgYi9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvb3duZWQtY29tbWl0LXZp
ZXdlci5qcwppbmRleCA2OGY3NDMzODViNDUwNWU5ZWZlZDdkNGY0ZjA3ZGZjNmY1ZjEyZTEyLi41
ZWMyZTZmN2UyMTA0ZTEwNTM0NGM2ZTMxOThjMTZhZTA0NTNkMmYzIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvb3duZWQtY29tbWl0LXZp
ZXdlci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVu
dHMvb3duZWQtY29tbWl0LXZpZXdlci5qcwpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBPd25lZENv
bW1pdFZpZXdlciBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICBpZiAoIXByZXZpb3Vz
T3duZWRDb21taXRzIHx8ICFjdXJyZW50T3duZWRDb21taXRzKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cuZGlmZk93bmVkQ29tbWl0
cyh0aGlzLl9wcmV2aW91c0NvbW1pdCwgdGhpcy5fY3VycmVudENvbW1pdCk7CisgICAgICAgIGNv
bnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJD
b21taXRzKHRoaXMuX3ByZXZpb3VzQ29tbWl0LCB0aGlzLl9jdXJyZW50Q29tbWl0KTsKICAgICAg
ICAgY29uc3Qgc29ydGVkUmVwb3NpdG9yaWVzID0gUmVwb3NpdG9yeS5zb3J0QnlOYW1lKFsuLi5k
aWZmZXJlbmNlLmtleXMoKV0pOwogICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFz
ZS5jcmVhdGVFbGVtZW50OwogCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMz
YzZhZjVmM2MxOWEzZGEwOGYzZDU0N2EwNmFiYzczMzUyNjBjNgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1dHRv
bi5qcwpAQCAtMCwwICsxLDE4IEBACisKK2NsYXNzIFBsdXNCdXR0b24gZXh0ZW5kcyBCdXR0b25C
YXNlIHsKKyAgICBjb25zdHJ1Y3RvcihldmVudE5hbWUpCisgICAgeworICAgICAgICBzdXBlcign
cGx1cy1idXR0b24nKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYnV0dG9uQ29udGVudCgpCisgICAg
eworICAgICAgICByZXR1cm4gYDxnIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIGlk
PSJpY29uIj4KKyAgICAgICAgICAgIDxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxs
PSJ0cmFuc3BhcmVudCIvPgorICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI1MCwyNSA1MCw3
NSIgLz4KKyAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjUsNTAgNzUsNTAiIC8+CisgICAg
ICAgIDwvZz5gOworICAgIH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdwbHVz
LWJ1dHRvbicsIFBsdXNCdXR0b24pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9pbmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1Ymxp
Yy92My9pbmRleC5odG1sCmluZGV4IDFhMjFjMGY2NTc5OTMzOTZlMzk3YWYwMmZjYTc3MGUzOWEx
NDdkZDkuLjAyMzNmOTZmZWFlNzgzN2U4MmQ3MDQxMDI3NzYwZWE1ZTAxYmUzYmYgMTAwNjQ0Ci0t
LSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAorKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAgLTk5LDYgKzk5
LDkgQEAgUnVuIHRvb2xzL2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRp
bWUgZm9yIHByb2R1Y3Rpb24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2N1
c3RvbS1jb25maWd1cmF0aW9uLXRlc3QtZ3JvdXAtZm9ybS5qcyI+PC9zY3JpcHQ+CiAgICAgICAg
IDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2luc3RhbnQtZmlsZS11cGxvYWRlci5qcyI+PC9zY3Jp
cHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2ZyZXNobmVzcy1pbmRpY2F0b3Iu
anMiPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9wbHVzLWJ1dHRv
bi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL21pbnVzLWJ1
dHRvbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2NvbWJv
LWJveC5qcyI+PC9zY3JpcHQ+CiAKICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2UuanMi
Pjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS1yb3V0ZXIuanMiPjwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9t
b2RlbHMvY29tbWl0LWxvZy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
bW9kZWxzL2NvbW1pdC1sb2cuanMKaW5kZXggN2JlNDIxNDU2Y2FkZDVmYjMwZjNjM2MyYzU3MGNl
MmViZGExNzI3MS4uMjEzYmVmYmQ5M2JhNWZlNGNmNzRhODhmZjBmZmFmN2ZlZDNjZjQ4MiAxMDA2
NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0
LWxvZy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzCkBAIC0xMiw2ICsxMiw4IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERh
dGFNb2RlbE9iamVjdCB7CiAgICAgICAgIGlmICh0aGlzLl9yZW1vdGVJZCkKICAgICAgICAgICAg
IHRoaXMuZW5zdXJlTmFtZWRTdGF0aWNNYXAoJ3JlbW90ZUlkJylbdGhpcy5fcmVtb3RlSWRdID0g
dGhpczsKICAgICAgICAgdGhpcy5fb3duZWRDb21taXRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
b3duZXJDb21taXQgPSBudWxsOworICAgICAgICB0aGlzLl9vd25lZENvbW1pdEJ5T3duZWRSZXBv
c2l0b3J5ID0gbmV3IE1hcDsKICAgICB9CiAKICAgICB1cGRhdGVTaW5nbGV0b24ocmF3RGF0YSkK
QEAgLTM2LDEzICszOCwxNyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmpl
Y3QgewogICAgIG1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydtZXNzYWdlJ107IH0K
ICAgICB1cmwoKSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5LnVybEZvclJldmlzaW9uKHRoaXMu
X3Jhd0RhdGFbJ3JldmlzaW9uJ10pOyB9CiAgICAgb3duc0NvbW1pdHMoKSB7IHJldHVybiB0aGlz
Ll9yYXdEYXRhWydvd25zQ29tbWl0cyddOyB9CisgICAgb3duZWRDb21taXRzKCkgeyByZXR1cm4g
dGhpcy5fb3duZWRDb21taXRzOyB9CisgICAgb3duZXJDb21taXQoKSB7IHJldHVybiB0aGlzLl9v
d25lckNvbW1pdDsgfQorCisgICAgc2V0T3duZXJDb21taXRzKG93bmVyQ29tbWl0KSB7IHRoaXMu
X293bmVyQ29tbWl0ID0gb3duZXJDb21taXQ7IH0KIAogICAgIGxhYmVsKCkKICAgICB7Ci0gICAg
ICAgIHZhciByZXZpc2lvbiA9IHRoaXMucmV2aXNpb24oKTsKKyAgICAgICAgY29uc3QgcmV2aXNp
b24gPSB0aGlzLnJldmlzaW9uKCk7CiAgICAgICAgIGlmIChwYXJzZUludChyZXZpc2lvbikgPT0g
cmV2aXNpb24pIC8vIGUuZy4gcjEyMzQ1CiAgICAgICAgICAgICByZXR1cm4gJ3InICsgcmV2aXNp
b247Ci0gICAgICAgIGVsc2UgaWYgKHJldmlzaW9uLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQg
aGFzaAorICAgICAgICBpZiAocmV2aXNpb24ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNo
CiAgICAgICAgICAgICByZXR1cm4gcmV2aXNpb24uc3Vic3RyaW5nKDAsIDgpOwogICAgICAgICBy
ZXR1cm4gcmV2aXNpb247CiAgICAgfQpAQCAtNTksMTIgKzY1LDEwIEBAIGNsYXNzIENvbW1pdExv
ZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAKICAgICAgICAgY29uc3QgdG8gPSB0aGlzLnJl
dmlzaW9uKCk7CiAgICAgICAgIGNvbnN0IGZyb20gPSBwcmV2aW91c0NvbW1pdC5yZXZpc2lvbigp
OwotICAgICAgICBsZXQgZnJvbVJldmlzaW9uRm9yVVJMID0gZnJvbTsKICAgICAgICAgbGV0IGxh
YmVsID0gbnVsbDsKLSAgICAgICAgaWYgKHBhcnNlSW50KGZyb20pID09IGZyb20pIHsgLy8gZS5n
LiByMTIzNDUuCi0gICAgICAgICAgICBmcm9tUmV2aXNpb25Gb3JVUkwgPSAocGFyc2VJbnQoZnJv
bSkgKyAxKS50b1N0cmluZzsKKyAgICAgICAgaWYgKHBhcnNlSW50KGZyb20pID09IGZyb20pLy8g
ZS5nLiByMTIzNDUuCiAgICAgICAgICAgICBsYWJlbCA9IGByJHtmcm9tfS1yJHt0aGlzLnJldmlz
aW9uKCl9YDsKLSAgICAgICAgfSBlbHNlIGlmICh0by5sZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0
IGhhc2gKKyAgICAgICAgZWxzZSBpZiAodG8ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNo
CiAgICAgICAgICAgICBsYWJlbCA9IGAke2Zyb20uc3Vic3RyaW5nKDAsIDgpfS4uJHt0by5zdWJz
dHJpbmcoMCwgOCl9YDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGFiZWwgPSBgJHtmcm9t
fSAtICR7dG99YDsKQEAgLTg2LDYgKzkwLDggQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0
YU1vZGVsT2JqZWN0IHsKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgb3duZWRDb21taXRGb3JP
d25lZFJlcG9zaXRvcnkob3duZWRSZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1p
dEJ5T3duZWRSZXBvc2l0b3J5LmdldChvd25lZFJlcG9zaXRvcnkpOyB9CisKICAgICBmZXRjaE93
bmVkQ29tbWl0cygpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMucmVwb3NpdG9yeSgpLm93bmVk
UmVwb3NpdG9yaWVzKCkpCkBAIC05NCwxMSArMTAwLDE3IEBAIGNsYXNzIENvbW1pdExvZyBleHRl
bmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgICAgIGlmICghdGhpcy5vd25zQ29tbWl0cygpKQog
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7CiAKLSAgICAgICAgaWYgKHRoaXMu
X293bmVkQ29tbWl0cykKKyAgICAgICAgaWYgKHRoaXMuX293bmVkQ29tbWl0cykgeworICAgICAg
ICAgICAgdGhpcy5fb3duZWRDb21taXRzLmZvckVhY2goKG93bmVkQ29tbWl0KSA9PiBvd25lZENv
bW1pdC5zZXRPd25lckNvbW1pdHModGhpcykpOwogICAgICAgICAgICAgcmV0dXJuIFByb21pc2Uu
cmVzb2x2ZSh0aGlzLl9vd25lZENvbW1pdHMpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJu
IENvbW1pdExvZy5jYWNoZWRGZXRjaChgLi4vYXBpL2NvbW1pdHMvJHt0aGlzLnJlcG9zaXRvcnko
KS5pZCgpfS9vd25lZC1jb21taXRzP293bmVyLXJldmlzaW9uPSR7ZXNjYXBlKHRoaXMucmV2aXNp
b24oKSl9YCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgdGhpcy5fb3duZWRDb21taXRz
ID0gQ29tbWl0TG9nLl9jb25zdHJ1Y3RGcm9tUmF3RGF0YShkYXRhKTsKKyAgICAgICAgICAgIHRo
aXMuX293bmVkQ29tbWl0cy5mb3JFYWNoKChvd25lZENvbW1pdCkgPT4geworICAgICAgICAgICAg
ICAgIG93bmVkQ29tbWl0LnNldE93bmVyQ29tbWl0cyh0aGlzKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9vd25lZENvbW1pdEJ5T3duZWRSZXBvc2l0b3J5LnNldChvd25lZENvbW1pdC5yZXBvc2l0
b3J5KCksIG93bmVkQ29tbWl0KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX293bmVkQ29tbWl0czsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTExLDI1ICsxMjMs
MjcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAg
cmV0dXJuIG93bmVkQ29tbWl0TWFwOwogICAgIH0KIAotICAgIHN0YXRpYyBkaWZmT3duZWRDb21t
aXRzKHByZXZpb3VzQ29tbWl0LCBjdXJyZW50Q29tbWl0KQorICAgIHN0YXRpYyBvd25lZENvbW1p
dERpZmZlcmVuY2VGb3JPd25lckNvbW1pdHMoLi4uY29tbWl0cykKICAgICB7Ci0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHByZXZpb3VzQ29tbWl0KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoY3Vy
cmVudENvbW1pdCk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByZXZpb3VzQ29tbWl0Ll9vd25l
ZENvbW1pdHMpOwotICAgICAgICBjb25zb2xlLmFzc2VydChjdXJyZW50Q29tbWl0Ll9vd25lZENv
bW1pdHMpOwotCi0gICAgICAgIGNvbnN0IHByZXZpb3VzT3duZWRDb21taXRNYXAgPSBwcmV2aW91
c0NvbW1pdC5fYnVpbGRPd25lZENvbW1pdE1hcCgpOwotICAgICAgICBjb25zdCBjdXJyZW50T3du
ZWRDb21taXRNYXAgPSBjdXJyZW50Q29tbWl0Ll9idWlsZE93bmVkQ29tbWl0TWFwKCk7Ci0gICAg
ICAgIGNvbnN0IG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzID0gbmV3IFNldChbLi4uY3VycmVudE93
bmVkQ29tbWl0TWFwLmtleXMoKSwgLi4ucHJldmlvdXNPd25lZENvbW1pdE1hcC5rZXlzKCldKTsK
LSAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IG5ldyBNYXA7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KGNvbW1pdHMubGVuZ3RoID49IDIpOworCisgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0UmVw
b3NpdG9yaWVzID0gbmV3IFNldDsKKyAgICAgICAgY29uc3Qgb3duZWRDb21taXRNYXBMaXN0ID0g
Y29tbWl0cy5tYXAoKGNvbW1pdCkgPT4geworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoY29t
bWl0KTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdC5fb3duZWRDb21taXRzKTsK
KyAgICAgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0TWFwID0gY29tbWl0Ll9idWlsZE93bmVkQ29t
bWl0TWFwKCk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2Ygb3duZWRDb21t
aXRNYXAua2V5cygpKQorICAgICAgICAgICAgICAgIG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzLmFk
ZChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIHJldHVybiBvd25lZENvbW1pdE1hcDsKKyAgICAg
ICAgfSk7CiAKKyAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IG5ldyBNYXA7CiAgICAgICAgIG93
bmVkQ29tbWl0UmVwb3NpdG9yaWVzLmZvckVhY2goKG93bmVkQ29tbWl0UmVwb3NpdG9yeSkgPT4g
ewotICAgICAgICAgICAgY29uc3QgY3VycmVudFJldmlzaW9uID0gY3VycmVudE93bmVkQ29tbWl0
TWFwLmdldChvd25lZENvbW1pdFJlcG9zaXRvcnkpOwotICAgICAgICAgICAgY29uc3QgcHJldmlv
dXNSZXZpc2lvbiA9IHByZXZpb3VzT3duZWRDb21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3Np
dG9yeSk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFJldmlzaW9uICE9IHByZXZpb3VzUmV2aXNp
b24pCi0gICAgICAgICAgICAgICAgZGlmZmVyZW5jZS5zZXQob3duZWRDb21taXRSZXBvc2l0b3J5
LCBbcHJldmlvdXNSZXZpc2lvbiwgY3VycmVudFJldmlzaW9uXSk7CisgICAgICAgICAgICBjb25z
dCBvd25lZENvbW1pdHMgPSBvd25lZENvbW1pdE1hcExpc3QubWFwKChvd25lZENvbW1pdE1hcCkg
PT4gb3duZWRDb21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSkpOworICAgICAgICAg
ICAgY29uc3QgdW5pcXVlT3duZWRDb21taXRzID0gbmV3IFNldChvd25lZENvbW1pdHMpOworICAg
ICAgICAgICAgaWYgKHVuaXF1ZU93bmVkQ29tbWl0cy5zaXplID4gMSkKKyAgICAgICAgICAgICAg
ICBkaWZmZXJlbmNlLnNldChvd25lZENvbW1pdFJlcG9zaXRvcnksIG93bmVkQ29tbWl0cyk7CiAg
ICAgICAgIH0pOwotCiAgICAgICAgIHJldHVybiBkaWZmZXJlbmNlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNl
dC5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1z
ZXQuanMKaW5kZXggYjE3OGFjODBlNTIzZDQwYWZmMWNlZDJmMjk3NDQ2MDk4MjY1NmVmNy4uYTE1
M2IyYzRiODc5ZGFhZTBjMTliYTE5ZTE1N2Y0NzhiODQwODk4ZiAxMDA2NDQKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcworKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCkBA
IC03MCw4ICs3MCw4IEBAIGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7
CiAgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBv
c2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CiAgICAgb3duZXJDb21taXRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE93
bmVyTWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIHRvcExldmVsUmVwb3NpdG9yaWVzKCkgeyBy
ZXR1cm4gUmVwb3NpdG9yeS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKHRoaXMuX3Jl
cG9zaXRvcmllcy5maWx0ZXIoKHJlcG9zaXRvcnkpID0+ICF0aGlzLm93bmVyUmV2aXNpb25Gb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnkpKSk7IH0KLQogICAgIG93bmVkUmVwb3NpdG9yaWVzRm9yT3du
ZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVyUmVwb3NpdG9yeVRv
T3duZWRSZXBvc2l0b3JpZXNNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CisgICAgY29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAu
Z2V0KHJlcG9zaXRvcnkpOyB9CiAKICAgICByZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9y
eSkKICAgICB7CkBAIC0yNDgsOCArMjQ4LDg1IEBAIGNsYXNzIEN1c3RvbUNvbW1pdFNldCB7CiAg
ICAgfQogfQogCitjbGFzcyBJbnRlcm1lZGlhdGVDb21taXRTZXQgeworCisgICAgY29uc3RydWN0
b3IoY29tbWl0U2V0KQorICAgIHsKKyAgICAgICAgdGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5ID0g
bmV3IE1hcDsKKyAgICAgICAgdGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93bmVyUmVwb3NpdG9y
eSA9IG5ldyBNYXA7CisgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBjb21taXRTZXQu
cmVwb3NpdG9yaWVzKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1pdFNldC5j
b21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgQ29tbWl0TG9nLmZl
dGNoRm9yU2luZ2xlUmV2aXNpb24ocmVwb3NpdG9yeSwgY29tbWl0LnJldmlzaW9uKCkpLnRoZW4o
KCkgPT4geworICAgICAgICAgICAgICAgIGlmICghY29tbWl0Lm93bnNDb21taXRzKCkpCisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBj
b21taXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpLnRoZW4oKCkgPT4gdGhpcy5zZXRDb21taXRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnksIGNvbW1pdCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzZXRDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIGNvbW1p
dCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcG9zaXRvcnkgaW5zdGFuY2VvZiBS
ZXBvc2l0b3J5KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY29tbWl0IGluc3RhbmNlb2YgQ29t
bWl0TG9nKTsKKyAgICAgICAgdGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5
LCBjb21taXQpOworICAgICAgICBjb25zdCBvd25lckNvbW1pdCA9IGNvbW1pdC5vd25lckNvbW1p
dCgpOworICAgICAgICBpZiAob3duZXJDb21taXQpIHsKKyAgICAgICAgICAgIGNvbnN0IG93bmVy
UmVwb3NpdG9yeSA9IG93bmVyQ29tbWl0LnJlcG9zaXRvcnkoKTsKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5oYXMob3duZXJSZXBvc2l0
b3J5KSkKKyAgICAgICAgICAgICAgICB0aGlzLl9vd25lZFJlcG9zaXRvcmllc0J5T3duZXJSZXBv
c2l0b3J5LnNldChvd25lclJlcG9zaXRvcnksIG5ldyBTZXQpOworICAgICAgICAgICAgY29uc3Qg
cmVwb3NpdG9yeVNldCA9IHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnku
Z2V0KG93bmVyUmVwb3NpdG9yeSk7CisgICAgICAgICAgICByZXBvc2l0b3J5U2V0LmFkZChyZXBv
c2l0b3J5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlbW92ZUNvbW1pdEZvclJlcG9zaXRv
cnkocmVwb3NpdG9yeSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcG9zaXRvcnkg
aW5zdGFuY2VvZiBSZXBvc2l0b3J5KTsKKyAgICAgICAgY29uc3Qgb3duZXJDb21taXQgPSB0aGlz
Lm93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgaWYgKG93bmVy
Q29tbWl0KSB7CisgICAgICAgICAgICBjb25zdCByZXBvc2l0b3J5U2V0ID0gdGhpcy5fb3duZWRS
ZXBvc2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5nZXQob3duZXJDb21taXQucmVwb3NpdG9yeSgp
KTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcG9zaXRvcnlTZXQuaGFzKHJlcG9zaXRv
cnkpKTsKKyAgICAgICAgICAgIHJlcG9zaXRvcnlTZXQuZGVsZXRlKHJlcG9zaXRvcnkpOworICAg
ICAgICB9IGVsc2UgaWYgKHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnku
aGFzKHJlcG9zaXRvcnkpKSB7CisgICAgICAgICAgICBjb25zdCBvd25lZFJlcG9zaXRvcmllcyA9
IHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkp
OworICAgICAgICAgICAgZm9yIChjb25zdCBvd25lZFJlcG9zaXRvcnkgb2Ygb3duZWRSZXBvc2l0
b3JpZXMpCisgICAgICAgICAgICAgICAgdGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LmRlbGV0ZShv
d25lZFJlcG9zaXRvcnkpOworICAgICAgICAgICAgdGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93
bmVyUmVwb3NpdG9yeS5kZWxldGUocmVwb3NpdG9yeSk7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fY29tbWl0QnlSZXBvc2l0b3J5LmRlbGV0ZShyZXBvc2l0b3J5KTsKKyAgICB9CisKKyAgICB1
cGRhdGVDb21taXRGb3JSZXBvc2l0b3J5V2l0aFJldmlzaW9uKHJlcG9zaXRvcnksIHJldmlzaW9u
KQorICAgIHsKKyAgICAgICAgbGV0IGNvbW1pdCA9IG51bGw7CisgICAgICAgIHJldHVybiBDb21t
aXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCByZXZpc2lvbikudGhlbigo
Y29tbWl0cykgPT4geworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoY29tbWl0cy5sZW5ndGgg
PT09IDEpOworICAgICAgICAgICAgY29tbWl0ID0gY29tbWl0c1swXTsKKyAgICAgICAgICAgIGlm
ICghY29tbWl0Lm93bnNDb21taXRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpLnRoZW4oKCkgPT4gdGhpcy5z
ZXRDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIGNvbW1pdCkpOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICBvd25zQ29tbWl0c0ZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1
cm4gdGhpcy5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpLm93bnNDb21taXRzKCk7IH0K
KworICAgIHJlcG9zaXRvcmllcygpIHsgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fY29tbWl0QnlS
ZXBvc2l0b3J5LmtleXMoKSk7IH0KKyAgICBoaWdoZXN0TGV2ZWxSZXBvc2l0b3JpZXMoKSB7IHJl
dHVybiBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwodGhpcy5yZXBv
c2l0b3JpZXMoKS5maWx0ZXIoKHJlcG9zaXRvcnkpID0+ICF0aGlzLm93bmVyQ29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KSkpOyB9CisgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0
b3J5KSB7IHJldHVybiB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpOyB9
CisgICAgb3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyBy
ZXR1cm4gdGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5nZXQocmVwb3Np
dG9yeSk7IH0KKyAgICBvd25lckNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKKyAgICB7
CisgICAgICAgIGNvbnN0IGNvbW1pdCA9IHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeS5nZXQocmVw
b3NpdG9yeSk7CisgICAgICAgIGlmICghY29tbWl0KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgICAgIHJldHVybiBjb21taXQub3duZXJDb21taXQoKTsKKyAgICB9Cit9CisKIGlmICh0
eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnKSB7CiAgICAgbW9kdWxlLmV4cG9ydHMuQ29tbWl0
U2V0ID0gQ29tbWl0U2V0OwogICAgIG1vZHVsZS5leHBvcnRzLk1lYXN1cmVtZW50Q29tbWl0U2V0
ID0gTWVhc3VyZW1lbnRDb21taXRTZXQ7CiAgICAgbW9kdWxlLmV4cG9ydHMuQ3VzdG9tQ29tbWl0
U2V0ID0gQ3VzdG9tQ29tbWl0U2V0OworICAgIG1vZHVsZS5leHBvcnRzLkludGVybWVkaWF0ZUNv
bW1pdFNldCA9IEludGVybWVkaWF0ZUNvbW1pdFNldDsKIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCmluZGV4IGFhZDhlMWU0MDJmNzJmYzM2Nzcx
OGYyNDZjMDg3NTAwYjAzMzAyMDIuLmQwZWZlN2MwZDUyMDQ1ODlkN2I3ZGY2MGQxYmNmNzEzZGI1
NGFhNmMgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1t
b2RlbHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVs
cy5qcwpAQCAtMTYsNyArMTYsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWlsZC1yZXF1ZXN0
LmpzJywgJ0J1aWxkUmVxdWVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGRlci5qcycs
ICdCdWlsZCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGRlci5qcycsICdCdWlsZGVyJyk7
CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQtbG9nLmpzJywgJ0NvbW1pdExvZycpOwotaW1w
b3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LXNldC5qcycsICdDdXN0b21Db21taXRTZXQnKQogaW1w
b3J0RnJvbVYzKCdtb2RlbHMvbWFuaWZlc3QuanMnLCAnTWFuaWZlc3QnKTsKIGltcG9ydEZyb21W
MygnbW9kZWxzL21lYXN1cmVtZW50LWFkYXB0b3IuanMnLCAnTWVhc3VyZW1lbnRBZGFwdG9yJyk7
CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9tZWFzdXJlbWVudC1jbHVzdGVyLmpzJywgJ01lYXN1cmVt
ZW50Q2x1c3RlcicpOwpAQCAtMjcsNiArMjYsNyBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy9yZXBv
c2l0b3J5LmpzJywgJ1JlcG9zaXRvcnknKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2NvbW1pdC1z
ZXQuanMnLCAnTWVhc3VyZW1lbnRDb21taXRTZXQnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2Nv
bW1pdC1zZXQuanMnLCAnQ29tbWl0U2V0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQt
c2V0LmpzJywgJ0N1c3RvbUNvbW1pdFNldCcpOworaW1wb3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0
LXNldC5qcycsICdJbnRlcm1lZGlhdGVDb21taXRTZXQnKTsKIGltcG9ydEZyb21WMygnbW9kZWxz
L3Rlc3QuanMnLCAnVGVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvdGVzdC1ncm91cC5qcycs
ICdUZXN0R3JvdXAnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL3RpbWUtc2VyaWVzLmpzJywgJ1Rp
bWVTZXJpZXMnKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRl
c3RzL2NvbW1pdC1sb2ctdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCmluZGV4IDNiMzFlNWMwNzFkMWNjMDVjYzhhOGMwZDQ2
YmYzZDVhMzY3ZWYzMDkuLmQ5MjYzYjA0ODE3Mzc5ZTAxZmU4NGNjOGIzZTRlMWMzMDAwZTc0MTUg
MTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1s
b2ctdGVzdHMuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29t
bWl0LWxvZy10ZXN0cy5qcwpAQCAtMTkxLDcgKzE5MSw4IEBAIGRlc2NyaWJlKCdDb21taXRMb2cn
LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJu
IG93bmVkLWNvbW1pdCBmb3IgYSB2YWxpZCBjb21taXQgcmV2aXNpb24nLCAoKSA9PiB7Ci0gICAg
ICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBvd25lckNvbW1pdCgpLmZldGNoT3duZWRD
b21taXRzKCk7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBvd25lckNvbW1pdCgpOworICAg
ICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3duZWRDb21taXRz
KCk7CiAgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVzdHM7
CiAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3du
ZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj0xMC4xMS40JTIwMTVFNjUnKTsKQEAgLTIwOCw2ICsy
MDksNyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxz
Lm93bmVkUmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29t
bWl0c1swXS5yZXZpc2lvbigpLCAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRkMDNkYWQzYTdi
MDdmYicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0uaWQo
KSwgMjMzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLm93
bmVyQ29tbWl0KCksIGNvbW1pdCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKQEAg
LTIzMyw2ICsyMzUsNyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBN
b2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG93bmVkQ29tbWl0c1swXS5yZXZpc2lvbigpLCAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRk
MDNkYWQzYTdiMDdmYicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1p
dHNbMF0uaWQoKSwgMjMzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21t
aXRzWzBdLm93bmVyQ29tbWl0KCksIGNvbW1pdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOwogICAgICAgICAgICAgfSkudGhlbigob3duZWRDb21t
aXRzKSA9PiB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwg
MSk7CkBAIC0yNDEsMTIgKzI0NCwxMiBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24g
KCkgewogICAgICAgICB9KTsKICAgICB9KTsKIAotICAgIGRlc2NyaWJlKCdkaWZmT3duZWRDb21t
aXRzJywgKCkgPT4geworICAgIGRlc2NyaWJlKCdvd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25l
ckNvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4gewogICAgICAgICAg
ICAgTW9ja1JlbW90ZUFQSS5yZXNldCgpOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hv
dWxkIHJldHVybiBkaWZmZXJlbmNlIGJldHdlZW4gMiBvd25lZC1jb21taXRzJywgKCkgPT4gewor
ICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkaWZmZXJlbmNlIGJldHdlZW4gb3duZWQtY29tbWl0
cyBvZiAyIG93bmVyIGNvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBvbmVDb21t
aXQgPSBvd25lckNvbW1pdCgpOwogICAgICAgICAgICAgY29uc3Qgb3RoZXJDb21taXQgPSBvdGhl
ck93bmVyQ29tbWl0KCk7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBvbmVD
b21taXQuZmV0Y2hPd25lZENvbW1pdHMoKTsKQEAgLTI2Nyw3ICsyNzAsMTcgQEAgZGVzY3JpYmUo
J0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICB0aW1lOiArKG5ldyBE
YXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCiAgICAgICAgICAgICB9XX0pOwog
Ci0gICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKCkgPT4geworICAgICAg
ICAgICAgcmV0dXJuIGZldGNoaW5nUHJvbWlzZS50aGVuKChvd25lZENvbW1pdHMpID0+IHsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzLmxlbmd0aCwgMik7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5yZXBvc2l0b3J5KCksIE1v
Y2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
b3duZWRDb21taXRzWzBdLnJldmlzaW9uKCksICc2ZjhiMGRiYmRhOTVhNDQwNTAzYjg4ZGIxZGQw
M2RhZDNhN2IwN2ZiJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0
c1swXS5pZCgpLCAyMzMpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1p
dHNbMF0ub3duZXJDb21taXQoKSwgb25lQ29tbWl0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3duZWRDb21taXRzWzFdLnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy53ZWJraXRHaXQp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMV0ucmV2aXNpb24o
KSwgJzA0YTZjNzIwMzhmMGI3NzFhMTkyNDhjYTI1NDllMTI1ODYxN2I1ZmMnKTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzFdLmlkKCksIDI5OSk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5vd25lckNvbW1pdCgpLCBvbmVD
b21taXQpOworCiAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJGZXRjaGluZ1Byb21pc2UgPSBv
dGhlckNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOwogICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXF1ZXN0c1sxXS51cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3duZWQtY29tbWl0cz9vd25lci1y
ZXZpc2lvbj0xMC4xMS40JTIwMTVFNjYnKTsKQEAgLTI4Niw4ICsyOTksMTcgQEAgZGVzY3JpYmUo
J0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICB9XX0pOwogCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG90aGVyRmV0Y2hpbmdQcm9taXNlOwotICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExv
Zy5kaWZmT3duZWRDb21taXRzKG9uZUNvbW1pdCwgb3RoZXJDb21taXQpOworICAgICAgICAgICAg
fSkudGhlbigob3duZWRDb21taXRzKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG93bmVkQ29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChv
d25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5yZXZpc2lvbigp
LCAnZDUwOTllMDNiNDgyYWJkZDc3ZjZjNGRjYjg3NWFmZDA1YmRhNWFiOCcpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0uaWQoKSwgMjM0KTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLm93bmVyQ29tbWl0KCksIG90aGVy
Q29tbWl0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzFdLnJl
cG9zaXRvcnkoKSwgTW9ja01vZGVscy53ZWJraXRHaXQpOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChvd25lZENvbW1pdHNbMV0ucmV2aXNpb24oKSwgJzA0YTZjNzIwMzhmMGI3NzFhMTky
NDhjYTI1NDllMTI1ODYxN2I1ZmMnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3du
ZWRDb21taXRzWzFdLmlkKCksIDI5OSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93
bmVkQ29tbWl0c1sxXS5vd25lckNvbW1pdCgpLCBvdGhlckNvbW1pdCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5vd25lZENvbW1pdERpZmZlcmVuY2VGb3JP
d25lckNvbW1pdHMob25lQ29tbWl0LCBvdGhlckNvbW1pdCk7CiAgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKGRpZmZlcmVuY2Uuc2l6ZSwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGRpZmZlcmVuY2Uua2V5cygpLm5leHQoKS52YWx1ZSwgTW9ja01vZGVscy5vd25lZFJlcG9z
aXRvcnkpOwogICAgICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvdW5pdC10ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcwppbmRleCBhYjc2ZDU4OWNlYmQy
MDA1N2IzYTc5YzY4OGE1NmEzNTg2ZjAwOGY3Li42NTQzYmRkMmI3MTQzNWZkOTgyZmRmOWE3ZGM3
YTc5MTIwYWM1NjBkIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91
bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKQEAgLTMsNiArMyw3IEBACiBjb25zdCBhc3Nl
cnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKIHJlcXVpcmUoJy4uL3Rvb2xzL2pzL3YzLW1vZGVscy5q
cycpOwogY29uc3QgTW9ja01vZGVscyA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL21vY2stdjMtbW9k
ZWxzLmpzJykuTW9ja01vZGVsczsKK2NvbnN0IE1vY2tSZW1vdGVBUEkgPSByZXF1aXJlKCcuLi91
bml0LXRlc3RzL3Jlc291cmNlcy9tb2NrLXJlbW90ZS1hcGkuanMnKS5Nb2NrUmVtb3RlQVBJOwog
CiBmdW5jdGlvbiBjcmVhdGVQYXRjaCgpCiB7CkBAIC01MSw2ICs1MiwxMTEgQEAgZnVuY3Rpb24g
Y3VzdG9tQ29tbWl0U2V0V2l0aE93bmVkUmVwb3NpdG9yeUhhc1NhbWVOYW1lQXNOb3RPd25lZFJl
cG9zaXRvcnkoKQogICAgIHJldHVybiBjdXN0b21Db21taXRTZXQ7CiB9CiAKK2Z1bmN0aW9uIG93
bmVyQ29tbWl0KCkKK3sKKyAgICByZXR1cm4gbmV3IENvbW1pdExvZyg1LCB7CisgICAgICAgIHJl
cG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LAorICAgICAgICByZXZpc2lvbjog
J293bmVyLWNvbW1pdC0wJywKKyAgICAgICAgb3duc0NvbW1pdHM6IHRydWUsCisgICAgICAgIHRp
bWU6IG51bGwsCisgICAgfSk7Cit9CisKK2Rlc2NyaWJlKCdJbnRlcm1lZGlhdGVDb21taXRTZXQn
LCAoKSA9PiB7CisgICAgTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKKyAgICBNb2NrTW9kZWxzLmlu
amVjdCgpOworCisgICAgZGVzY3JpYmUoJ3NldENvbW1pdEZvclJlcG9zaXRvcnknLCAoKSA9PiB7
CisgICAgICAgIGl0KCdzaG91bGQgYWxsb3cgc2V0IGNvbW1pdCBmb3Igb3duZXIgcmVwb3NpdG9y
eScsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldCA9IG5ldyBJbnRlcm1lZGlh
dGVDb21taXRTZXQobmV3IENvbW1pdFNldCk7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBv
d25lckNvbW1pdCgpOworICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9zaXRv
cnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwoY29tbWl0LCBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxz
Lm93bmVyUmVwb3NpdG9yeSkpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGFs
bG93IHNldCBjb21taXQgZm9yIG93bmVkIHJlcG9zaXRvcnknLCAoKSA9PiB7CisgICAgICAgICAg
ICBjb25zdCBjb21taXRTZXQgPSBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG5ldyBDb21taXRT
ZXQpOworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsKKworICAgICAg
ICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCk7
CisgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVzdHM7Cisg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3duZWQt
Y29tbWl0cz9vd25lci1yZXZpc2lvbj1vd25lci1jb21taXQtMCcpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworCisgICAgICAgICAgICByZXF1
ZXN0c1swXS5yZXNvbHZlKHtjb21taXRzOiBbeworICAgICAgICAgICAgICAgIGlkOiAyMzMsCisg
ICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkuaWQo
KSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFk
ZDAzZGFkM2E3YjA3ZmInLAorICAgICAgICAgICAgICAgIHRpbWU6ICsobmV3IERhdGUoJzIwMTYt
MDUtMTNUMDA6NTU6NTcuODQxMzQ0WicpKSwKKyAgICAgICAgICAgIH1dfSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBmZXRjaGluZ1Byb21pc2UudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAg
Y29uc3Qgb3duZWRDb21taXQgPSBjb21taXQub3duZWRDb21taXRzKClbMF07CisgICAgICAgICAg
ICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJl
cG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZv
clJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnksIG93bmVkQ29tbWl0KTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LCBjb21taXRTZXQuY29tbWl0Rm9yUmVw
b3NpdG9yeShNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSkpOworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChvd25lZENvbW1pdCwgY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9j
a01vZGVscy5vd25lZFJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVx
dWFsKGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSwgW01vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5
LCBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeV0pOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ3JlbW92ZUNvbW1pdEZvclJlcG9zaXRvcnkn
LCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIG93bmVkIGNvbW1pdHMgd2hlbiBv
d25lciBjb21taXQgaXMgcmVtb3ZlZCcsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1p
dFNldCA9IG5ldyBJbnRlcm1lZGlhdGVDb21taXRTZXQobmV3IENvbW1pdFNldCk7CisgICAgICAg
ICAgICBjb25zdCBjb21taXQgPSBvd25lckNvbW1pdCgpOworCisgICAgICAgICAgICBjb25zdCBm
ZXRjaGluZ1Byb21pc2UgPSBjb21taXQuZmV0Y2hPd25lZENvbW1pdHMoKTsKKyAgICAgICAgICAg
IGNvbnN0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KHJlcXVlc3RzWzBdLnVybCwgJy4uL2FwaS9jb21taXRzLzExMS9vd25lZC1jb21taXRzP293bmVy
LXJldmlzaW9uPW93bmVyLWNvbW1pdC0wJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHNbMF0ubWV0aG9kLCAnR0VUJyk7CisKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29s
dmUoe2NvbW1pdHM6IFt7CisgICAgICAgICAgICAgICAgaWQ6IDIzMywKKyAgICAgICAgICAgICAg
ICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeS5pZCgpLAorICAgICAgICAg
ICAgICAgIHJldmlzaW9uOiAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRkMDNkYWQzYTdiMDdm
YicsCisgICAgICAgICAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAxNi0wNS0xM1QwMDo1NTo1
Ny44NDEzNDRaJykpLAorICAgICAgICAgICAgfV19KTsKKworICAgICAgICAgICAgcmV0dXJuIGZl
dGNoaW5nUHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0
Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgY29tbWl0KTsK
KyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9k
ZWxzLm93bmVkUmVwb3NpdG9yeSwgY29tbWl0Lm93bmVkQ29tbWl0cygpWzBdKTsKKyAgICAgICAg
ICAgICAgICBjb21taXRTZXQucmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93
bmVyUmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChjb21taXRT
ZXQucmVwb3NpdG9yaWVzKCksIFtdKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKwor
ICAgICAgICBpdCgnc2hvdWxkIG5vdCByZW1vdmUgb3duZXIgY29tbWl0cyB3aGVuIG93bmVkIGNv
bW1pdCBpcyByZW1vdmVkJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0g
bmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChuZXcgQ29tbWl0U2V0KTsKKyAgICAgICAgICAgIGNv
bnN0IGNvbW1pdCA9IG93bmVyQ29tbWl0KCk7CisKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5n
UHJvbWlzZSA9IGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOworICAgICAgICAgICAgY29uc3Qg
cmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNp
b249b3duZXItY29tbWl0LTAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sw
XS5tZXRob2QsICdHRVQnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29t
bWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDogMjMzLAorICAgICAgICAgICAgICAgIHJlcG9z
aXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAgICAgICAgICAgICAg
cmV2aXNpb246ICc2ZjhiMGRiYmRhOTVhNDQwNTAzYjg4ZGIxZGQwM2RhZDNhN2IwN2ZiJywKKyAg
ICAgICAgICAgICAgICB0aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0
NFonKSksCisgICAgICAgICAgICB9XX0pOworCisgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQ
cm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRG
b3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBjb21taXQpOworICAgICAg
ICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3du
ZWRSZXBvc2l0b3J5LCBjb21taXQub3duZWRDb21taXRzKClbMF0pOworICAgICAgICAgICAgICAg
IGNvbW1pdFNldC5yZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBv
c2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGNvbW1pdFNldC5yZXBv
c2l0b3JpZXMoKSwgW01vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5XSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisKKyAgICB9KTsKKworfSk7CisKIGRlc2NyaWJlKCdDdXN0b21Db21t
aXRTZXQnLCAoKSA9PiB7CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330009</attachid>
            <date>2017-12-20 22:30:56 -0800</date>
            <delta_ts>2017-12-21 17:26:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171220223056.patch</filename>
            <type>text/plain</type>
            <size>61004</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDgxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMTNlMjdhZDkwYjFiZjY5YjVjNjYwYzRmMDkxYzZmNGQ1NzRlYjhlLi5mNmE5YWY4ODgy
MDNmZDRjYmI1NWQwNmE4MmE0MThiYWExYmVkYzRlIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw5MiBAQAorMjAxNy0xMi0yMCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisgICAgICAgIEludHJvZHVjZSAnSW50ZXJtZWRp
YXRlQ29tbWl0U2V0JyB0byBhY2hpZXZlIHRoZSBnb2FsIG9mIHNwZWNpZnlpbmcgb3duZWQgY29t
bWl0cyBmb3IgQS9CIHRlc3QuCisgICAgICAgIEluIG9yZGVyIHRvIHN1cHBvcnQgY29uZmlndXJl
IEEvQiB0ZXN0aW5nIHRoYXQgbWF5IG5lZWQgdG8gYWRkL3JlbW92ZSBvd25lZCBjb21taXRzLCBD
b21taXRTZXQgbWF5IGJlIHRoZSBjbG9zZXN0IHRoaW5nIHdlIGNhbiBnZXQuIEhvd2V2ZXIsIGl0
IGlzIGEgc3ViY2xhc3Mgb2YgRGF0YU1vZGVsT2JqZWN0LAorICAgICAgICB3aGljaCBtZWFucyBD
b21taXRTZXQgaXMgYSByZXByZXNlbnRhdGlvbiBvZiAnY29tbWl0X3NldHMnIHRhYmxlIGFuZCBj
YW4gb25seSBiZSB1cGRhdGVkIGZyb20gc2VydmVyIGRhdGEuIFRodXMsIHdlIHdhbnQgc29tZXRo
aW5nIGxpa2UgQ3VzdG9tQ29tbWl0U2V0IHRoYXQgaXMgbm90IGEgcmVwcmVzZW50YXRpb24KKyAg
ICAgICAgb2YgZGF0YWJhc2UgdGFibGUsIGJ1dCB1bmxpa2UgQ29tbWl0U2V0LCBpdCBzaG91bGQg
c3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0cyByYXRoZXIgdGhhbiBhIHJldmlzaW9uLiBB
cyBhIHJlc3VsdCwgSW50ZXJtZWRpYXRlQ29tbWl0U2V0IGlzIGludHJvZHVjZWQuIEZvciBhIGxv
bmdlciB0ZXJtLCB3ZSBtYXkgcmVwbGFjZQorICAgICAgICBDdXN0b21Db21taXRTZXQgd2l0aCBJ
bnRlcm1lZGlhdGVDb21taXRTZXQgYXMgaXQgY2FycmllcyBtb3JlIGluZm9ybWF0aW9uIGFuZCBj
b3VsZCBwb3RlbnRpYWxseSBzaW1wbGlmeSBzb21lIEN1c3RvbUNvbW1pdFNldCByZWxhdGVkIEFQ
SXMgYnkgdXNpbmcgY29tbWl0IGlkIGluc3RlYWQgb2YgY29tbWl0IHJldmlzaW9uLgorICAgICAg
ICBFeHRlbmQgQnV0dG9uQmFzZSBjbGFzcyBzbyB0aGF0IHdlIGNhbiBlbmFibGUvZGlzYWJsZSBh
IGJ1dHRvbi4KKworICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpz
OiBBZGRlZCB0aGUgYWJpbGl0eSB0byBlbmFibGUvZGlzYWJsZSBhIGJ1dHRvbi4KKyAgICAgICAg
KEJ1dHRvbkJhc2UpOgorICAgICAgICAoQnV0dG9uQmFzZS5wcm90b3R5cGUuZGlzYWJsZSk6IERp
c2FibGUgdGhlIGJ1dHRvbi4KKyAgICAgICAgKEJ1dHRvbkJhc2UucHJvdG90eXBlLmVuYWJsZSk6
IEVuYWJsZSB0aGUgYnV0dG9uLgorICAgICAgICAoQnV0dG9uQmFzZS5wcm90b3R5cGUucmVuZGVy
KToKKyAgICAgICAgKEJ1dHRvbkJhc2UuY3NzVGVtcGxhdGUpOiBBZGRlZCBjc3MgY2xhc3MgZm9y
IGRpc2FibGVkIGJ1dHRvbi4KKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1i
b3guanM6IEFkZGVkLgorICAgICAgICAoQ29tYm9Cb3gpOgorICAgICAgICAoQ29tYm9Cb3gucHJv
dG90eXBlLnJlbmRlcik6CisgICAgICAgIChDb21ib0JveC5wcm90b3R5cGUuX2NvbnN0cnVjdFRl
eHRGaWVsZCk6IENvbnN0cnVjdCB0ZXh0IGZpZWxkIGZvciB1c2VyIGlucHV0LgorICAgICAgICAo
Q29tYm9Cb3gucHJvdG90eXBlLl9jYW5kaWRhdGVOYW1lRm9ySW5kZXgpOiBSZXR1cm5zIGEgbGlz
dCBlbGVtZW50IGJhc2VkIG9uIHRoZSBpbmRleC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlw
ZS5fYXV0b0NvbXBsZXRlSWZPbmx5T25lTWF0Y2hpbmdJdGVtKTogU3VwcG9ydHMgYXV0byBjb21w
bGV0aW9uLgorICAgICAgICAoQ29tYm9Cb3gucHJvdG90eXBlLl9tb3ZlQ2FuZGlkYXRlKTogU3Vw
cG9ydHMgYXJyb3cgdXAvZG93bi4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fcmVuZGVy
Q2FuZGlkYXRlTGlzdCk6IFRoaXMgZnVuY3Rpb24gY2FsbHMgX2NyZWF0ZUNhbmRpZGF0ZUxpc3QK
KyAgICAgICAgYnV0IGFsc28gc2Nyb2xsIHRoZSBsaXN0IHRvIGEgcHJvcGVyIHBsYWNlIGlmIG5l
Y2Vzc2FyeS4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY3JlYXRlQ2FuZGlkYXRlTGlz
dCk6IENyZWF0ZSBhbiBodG1sIGxpc3QgYmFzZWQgb24gY2FuZGlkYXRlcy4KKyAgICAgICAgKENv
bWJvQm94Lmh0bWxUZW1wbGF0ZSk6CisgICAgICAgIChDb21ib0JveC5jc3NUZW1wbGF0ZSk6Cisg
ICAgICAgICogcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9y
bS5qczoKKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0pOgorICAgICAgICAoQ3Vz
dG9taXphYmxlVGVzdEdyb3VwRm9ybS5wcm90b3R5cGUuZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6
IE9ubHkgZmV0Y2ggdGhlIGZ1bGwgY29tbWl0cyB3aGVuIHdlIGFib3V0IHRvIGNyZWF0ZSBhIGN1
c3RvbWl6ZWQgQS9CIHRlc3RzLgorICAgICAgICBVc2UgJ3RoaXMuX2ZldGNoaW5nQ29tbWl0UHJv
bWlzZXMnIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZldGNoIGhhcyBzdGFydGVkIHRvIGF2b2lkIHBv
dGVudGlhbCB1bm5lY2Vzc2FyeSByZS1mZXRjaC4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RH
cm91cEZvcm0ucHJvdG90eXBlLl9jb21wdXRlQ29tbWl0U2V0TWFwKTogQ29tcHV0ZSB0aGUgQ3Vz
dG9tQ29tbWl0U2V0IGJhc2VkIG9uIEludGVybWVkaWF0ZUNvbW1pdFNldCBhbmQKKyAgICAgICAg
b3RoZXIgcmV2aXNpb24gcmVsYXRlZCBpbmZvcm1hdGlvbiBpbiBzb21lIG1hcC4KKyAgICAgICAg
KEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChD
dXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fcmVuZGVyQ3VzdG9tUmV2aXNpb25U
YWJsZSk6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29u
c3RydWN0VGFibGVCb2R5TGlzdCk6IFRoaXMgZnVuY3Rpb24gYnVpbGRzIHRhYmxlIGJvZHkgZm9y
IGVhY2ggaGlnaGVzdCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICBJdCB3aWxsIGFsc28gaW5j
bHVkZSB0aGUgb3duZWQgcmVwb3NpdG9yeSByb3dzIGluIHRoZSBzYW1lIHRhYmxlIGJvZHkgaWYg
dGhlIGNvbW1pdHMgZm9yIGhpZ2hlc3QgbGV2ZWwgcmVwb3NpdG9yeSBvd25zIG90aGVyIGNvbW1p
dHMuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3Ry
dWN0VGFibGVSb3dGb3JDb21taXRzV2l0aG91dE93bmVyKTogQnVpbGQgYSB0YWJsZSByb3cgZm9y
IGEgaGlnaGVzdCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdy
b3VwRm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcik6
IEJ1aWxkIGEgdGFibGUgcm93IGZvciByZXBvc2l0b3J5IHdpdGggb3duZXIuCisgICAgICAgIChD
dXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0Um93V2l0aG91dFJl
cG9zaXRvcnlTcGVjaWZpZWQpOiBCdWlsZCBhIHRhYmxlIHJvdyBmb3IgYW4gdW5zcGVjaWZpZWQg
cmVwb3NpdG9yeS4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBl
Ll9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyk6IFVwZGF0ZSB0aGUgbG9naWMgdG8gc3Vw
cG9ydCBidWlsZCByYWRpbyBidXR0b25zIGZvciB0aGUgb3duZWQgcmVwb3NpdG9yeSByb3dzLgor
ICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybS5jc3NUZW1wbGF0ZSk6CisgICAgICAg
ICogcHVibGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzOiBBZGRlZC4KKyAgICAgICAg
KE1pbnVzQnV0dG9uKToKKyAgICAgICAgKE1pbnVzQnV0dG9uLmJ1dHRvbkNvbnRlbnQpOgorICAg
ICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanM6CisgICAg
ICAgIChPd25lZENvbW1pdFZpZXdlci5wcm90b3R5cGUuX3JlbmRlck93bmVkQ29tbWl0VGFibGUp
OgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKFBsdXNCdXR0b24pOgorICAgICAgICAoUGx1c0J1dHRvbi5idXR0b25Db250ZW50
KToKKyAgICAgICAgKiBwdWJsaWMvdjMvaW5kZXguaHRtbDogQWRkZWQgbmV3IGNvbXBvbmVudHMu
CisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzOiBBZGRlZCBvd25lciBh
bmQgb3duZWQgY29tbWl0IGluZm9ybWF0aW9uLgorICAgICAgICAoQ29tbWl0TG9nKToKKyAgICAg
ICAgKENvbW1pdExvZy5wcm90b3R5cGUub3duZWRDb21taXRzKTogUmV0dXJucyBhIGxpc3Qgb2Yg
Y29tbWl0cyBvd25lZCBieSBjdXJyZW50IGNvbW1pdC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90
b3R5cGUub3duZXJDb21taXQpOiBSZXR1cm4gb3duZXIgY29tbWl0IG9mIGN1cnJlbnQgY29tbWl0
LgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5zZXRPd25lckNvbW1pdHMpOiBTZXQgb3du
ZXIgY29tbWl0IG9mIGN1cnJlbnQgY29tbWl0LgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlw
ZS5sYWJlbCk6IFJlbW92ZSB1bm5lY2Vzc2FyeSAnZWxzZScuCisgICAgICAgIChDb21taXRMb2cu
cHJvdG90eXBlLmRpZmYpOiBSZW1vdmUgdW51c2VkICdmcm9tUmV2aXNpb25Gb3JVUkwnIGFuZCB0
aW55IGNvZGUgY2xlYW51cC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUub3duZWRDb21t
aXRGb3JPd25lZFJlcG9zaXRvcnkpOgorICAgICAgICAoQ29tbWl0TG9nLnByb3RvdHlwZS5mZXRj
aE93bmVkQ29tbWl0cyk6IFNldHMgdGhlIG93bmVyIGZvciB0aG9zZSBvd25lZCBjb21taXRzLiBU
aGUgb3duZXIgb2YgYSBjb21taXQgd2l0aCBtdWx0aXBsZSBvd25lcgorICAgICAgICBjb21taXRz
IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgZWFjaCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
LgorICAgICAgICAoQ29tbWl0TG9nLm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0
cyk6IEEgbW9yZSBnZW5lcmljIHZlcnNpb24gb2YgZGlmZk93bmVkQ29tbWl0cy4gZGlmZk93bmVk
Q29tbWl0cyBvbmx5IGFjY2VwdHMgMiBjb21taXRzLAorICAgICAgICBidXQgb3duZWRDb21taXRE
aWZmZXJlbmNlRm9yT3duZXJDb21taXRzIHN1cHBvcnRzIG11bHRpcGxlIGNvbW1pdHMuCisgICAg
ICAgIChDb21taXRMb2cuZGlmZk93bmVkQ29tbWl0cyk6IERlbGV0ZWQgYW5kIHNob3VsZCB1c2Ug
J0NvbW1pdExvZy5vd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25lckNvbW1pdHMnIGluc3RlYWQu
CisgICAgICAgICogcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzOgorICAgICAgICAoQ29t
bWl0U2V0LnByb3RvdHlwZS50b3BMZXZlbFJlcG9zaXRvcmllcyk6CisgICAgICAgIChDb21taXRT
ZXQucHJvdG90eXBlLmNvbW1pdEZvclJlcG9zaXRvcnkpOgorICAgICAgICAoSW50ZXJtZWRpYXRl
Q29tbWl0U2V0KTogVGFrZSBDb21taXRTZXQgYXMgYXJndW1lbnQsIG5vdGUgdGhlIGNvbW1pdCBm
cm9tIENvbW1pdFNldCBkb2Vzbid0IGNvbnRhaW5zIGZ1bGwgaW5mb3JtYXRpb24gb2YgdGhlIGNv
bW1pdC4KKyAgICAgICAgQWx3YXlzIGNhbGwgJ2ZldGNoRnVsbENvbW1pdHMnIG9uY2UgYmVmb3Jl
IGFueSBmdXJ0aGVyIHVzYWdlcy4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90
b3R5cGUuZmV0Y2hGdWxsQ29tbWl0cyk6IEZldGNoIGNvbW1pdCBpbmZvcm1hdGlvbiBhbmQgY29t
bWl0cyBvd25lZCBieSBjdXJyZW50IGNvbW1pdHMgaWYgbmVjZXNzYXJ5LgorICAgICAgICAoSW50
ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5zZXRDb21taXRGb3JSZXBvc2l0b3J5KTogU2V0
cyBhIGNvbW1pdCBmb3IgYSByZXBvc2l0b3J5IGluIGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRl
cm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLnJlbW92ZUNvbW1pdEZvclJlcG9zaXRvcnkpOiBS
ZW1vdmVzIGEgY29tbWl0IGZvciBhIHJlcG9zaXRvcnkgaW4gY29tbWl0IHNldC4KKyAgICAgICAg
KEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUudXBkYXRlQ29tbWl0Rm9yUmVwb3NpdG9y
eSk6IFVwZGF0ZXMgYSBjb21taXQgZm9yIGEgcmVwb3NpdG9yeSBieSBnaXZlbiBhIHJldmlzaW9u
IG9mIHRoZSByZXBvc2l0b3J5LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3Rv
dHlwZS5vd25zQ29tbWl0c0ZvclJlcG9zaXRvcnkpOgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29t
bWl0U2V0LnByb3RvdHlwZS5yZXBvc2l0b3JpZXMpOiBSZXR1cm5zIGFsbCByZXBvc2l0b3JpZXMg
aW4gdGhlIGNvbW1pdCBzZXQuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90
eXBlLmhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcyk6IFJldHVybnMgYWxsIHJlcG9zaXRvcmllcyB0
aG9zZSBkb24ndCBoYXZlIGFuIG93bmVyLgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0
LnByb3RvdHlwZS5jb21taXRGb3JSZXBvc2l0b3J5KTogUmV0dXJucyBhIGNvbW1pdCBmb3IgYSBn
aXZlbiByZXBvc2l0b3J5LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlw
ZS5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeSk6IFJldHVybnMgYWxsIHJlcG9z
aXRvcmllcyBvd25lZCBieSBhIGdpdmVuIHJlcG9zaXRvcnkgaW4gY3VycmVudCBjb21taXQgc2V0
LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5vd25lckNvbW1pdEZv
clJlcG9zaXRvcnkpOiBSZXR1cm5zIG93bmVyIGNvbW1pdCBmb3IgYSBnaXZlbiBvd25lZCByZXBv
c2l0b3J5LgorICAgICAgICAqIHRvb2xzL2pzL3YzLW1vZGVscy5qczogQWRkZWQgaW1wb3J0IGZv
ciAnSW50ZXJtZWRpYXRlQ29tbWl0U2V0Jy4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1s
b2ctdGVzdHMuanM6IFVwZGF0ZWQgdW5pdHRlc3Qgd2hpY2ggdGVzdHMgJ293bmVyQ29tbWl0JyBm
dW5jdGlvbi4KKyAgICAgICAgKiB1bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanM6IEFkZGVk
IHVuaXQgdGVzdHMgZm9yIEludGVybWVkaWF0ZUNvbW1pdFNldC4KKwogMjAxNy0xMi0xMyAgRGV3
ZWkgWmh1ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSB0ZXN0IGZyZXNo
bmVzcyBwYWdlLgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpzCmluZGV4IDM2NDM5ZmNlODE2YmMzMDMy
MTc1ZTlhNWEyMjNhZDg1Y2ZlNTA2ZGIuLjhhNGM3NjYzZDc2OWJiMzI2NGUwZjk1Zjg5ZDg3ZDUx
MDIyMWVmZmIgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
Y29tcG9uZW50cy9idXR0b24tYmFzZS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcv
cHVibGljL3YzL2NvbXBvbmVudHMvYnV0dG9uLWJhc2UuanMKQEAgLTEsNSArMSwyNCBAQAogCiBj
bGFzcyBCdXR0b25CYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CisKKyAgICBjb25zdHJ1Y3Rv
cihuYW1lLCBlbmFibGVkID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIHN1cGVyKG5hbWUpOworICAg
ICAgICB0aGlzLl9lbmFibGVkID0gZW5hYmxlZDsKKyAgICB9CisKKyAgICBkaXNhYmxlKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5lbnF1ZXVl
VG9SZW5kZXIoKTsKKyAgICB9CisKKyAgICBlbmFibGUoKQorICAgIHsKKyAgICAgICAgdGhpcy5f
ZW5hYmxlZCA9IHRydWU7CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQor
CiAgICAgZGlkQ29uc3RydWN0U2hhZG93VHJlZSgpCiAgICAgewogICAgICAgICB0aGlzLmNvbnRl
bnQoJ2J1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jcmVhdGVFdmVudEhh
bmRsZXIoKCkgPT4gewpAQCAtNyw2ICsyNiwxMiBAQCBjbGFzcyBCdXR0b25CYXNlIGV4dGVuZHMg
Q29tcG9uZW50QmFzZSB7CiAgICAgICAgIH0pKTsKICAgICB9CiAKKyAgICByZW5kZXIoKQorICAg
IHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisgICAgICAgIHRoaXMuY29udGVudCgnYnV0dG9u
JykuY2xhc3NOYW1lID0gdGhpcy5fZW5hYmxlZCA/IG51bGwgOiAnZGlzYWJsZWQnOworICAgIH0K
KwogICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGA8YSBp
ZD0iYnV0dG9uIiBocmVmPSIjIj48c3ZnIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4ke3RoaXMuYnV0
dG9uQ29udGVudCgpfTwvc3ZnPjwvYT5gOwpAQCAtMzUsNiArNjAsMTIgQEAgY2xhc3MgQnV0dG9u
QmFzZSBleHRlbmRzIENvbXBvbmVudEJhc2UgewogICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAu
NjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgYS5kaXNhYmxlZCB7CisgICAgICAgICAg
ICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgICAgICAgICAgICAgY3Vyc29yOiBkZWZh
dWx0OworICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuMjsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgc3ZnIHsKICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9jb21iby1ib3guanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvY29tYm8tYm94LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhOTdlZWNjZGQ4YjlhNjI5MzVh
MTA2N2M4MWRjZTdmZmM1ODExMDUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94LmpzCkBAIC0wLDAgKzEsMjA2
IEBACitjbGFzcyBDb21ib0JveCBleHRlbmRzIENvbXBvbmVudEJhc2UgeworCisgICAgY29uc3Ry
dWN0b3IoY2FuZGlkYXRlcywgZGVmYXVsdFZhbHVlLCBtYXhDYW5kaWRhdGVMaXN0TGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgc3VwZXIoJ2NvbWJvLWJveCcpOworICAgICAgICB0aGlzLl9jYW5kaWRh
dGVzID0gY2FuZGlkYXRlczsKKyAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9IGRlZmF1bHRWYWx1
ZTsKKyAgICAgICAgdGhpcy5fbWF4Q2FuZGlkYXRlTGlzdExlbmd0aCA9IG1heENhbmRpZGF0ZUxp
c3RMZW5ndGggfHwgMTAwMDsKKyAgICAgICAgdGhpcy5fY2FuZGlkYXRlTGlzdCA9IFtdOworICAg
ICAgICB0aGlzLl9lbGVtZW50QnlDYW5kaWRhdGVOYW1lID0gbmV3IE1hcDsKKyAgICAgICAgdGhp
cy5fcHJldmlvdXNDYW5kaWRhdGVJbmRleCA9IG51bGw7CisgICAgICAgIHRoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleCA9IG51bGw7CisgICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID0g
ZmFsc2U7CisgICAgICAgIHRoaXMuX2NyZWF0ZUNhbmRpZGF0ZUxpc3RMYXppbHkgPSBuZXcgTGF6
aWx5RXZhbHVhdGVkRnVuY3Rpb24odGhpcy5fY3JlYXRlQ2FuZGlkYXRlTGlzdC5iaW5kKHRoaXMp
KTsKKyAgICAgICAgdGhpcy5fY29uc3RydWN0VGV4dEZpZWxkTGF6aWx5ID0gbmV3IExhemlseUV2
YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX2NvbnN0cnVjdFRleHRGaWVsZC5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgdGhpcy5fcmVuZGVyQ2FuZGlkYXRlTGlzdExhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0
ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDYW5kaWRhdGVMaXN0LmJpbmQodGhpcykpOworICAgIH0K
KworICAgIHJlbmRlcigpCisgICAgeworICAgICAgICBzdXBlci5yZW5kZXIoKTsKKworICAgICAg
ICB0aGlzLl9jb25zdHJ1Y3RUZXh0RmllbGRMYXppbHkuZXZhbHVhdGUoKTsKKworICAgICAgICB0
aGlzLl9yZW5kZXJDYW5kaWRhdGVMaXN0TGF6aWx5LmV2YWx1YXRlKHRoaXMuX2NhbmRpZGF0ZXMs
IHRoaXMuX2lucHV0VmFsdWUsIHRoaXMuX2NhbmRpZGF0ZU5hbWVGb3JJbmRleCh0aGlzLl9wcmV2
aW91c0NhbmRpZGF0ZUluZGV4KSwKKyAgICAgICAgICAgIHRoaXMuX2NhbmRpZGF0ZU5hbWVGb3JJ
bmRleCh0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXgpLCB0aGlzLl9zaG93Q2FuZGlkYXRlTGlz
dCk7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRleHRGaWVsZCgpCisgICAgeworICAgICAgICBj
b25zdCB0ZXh0RmllbGQgPSB0aGlzLmNvbnRlbnQoJ3RleHQtZmllbGQnKTsKKyAgICAgICAgdGV4
dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4geworICAgICAgICAgICAgdGhp
cy5faW5wdXRWYWx1ZSA9IHRleHRGaWVsZC52YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dD
YW5kaWRhdGVMaXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJ
bmRleCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAg
ICB9KTsKKyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+
IHsKKyAgICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRlbSgp
OworICAgICAgICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gbnVsbDsKKyAgICAg
ICAgfSk7CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKCkgPT4g
eworICAgICAgICAgICAgdGhpcy5faW5wdXRWYWx1ZSA9IHRleHRGaWVsZC52YWx1ZTsKKyAgICAg
ICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID0gZmFsc2U7CisgICAgICAgICAgICB0aGlz
Ll9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKTsKKyAgICAgICAgICAgIHRoaXMu
ZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIH0pOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZl
bnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9zaG93Q2FuZGlk
YXRlTGlzdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9pbnB1dFZhbHVlID0gdGV4dEZpZWxk
LnZhbHVlOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9
PiB7CisgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5r
ZXkgPT09ICdBcnJvd1VwJykgeworICAgICAgICAgICAgICAgIHRoaXMuX21vdmVDYW5kaWRhdGUo
ZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50
LmtleSA9PT0gJ1RhYicgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgY2FuZGlkYXRlID0gdGhpcy5fY2FuZGlkYXRlTmFtZUZvckluZGV4KHRoaXMuX2N1
cnJlbnRDYW5kaWRhdGVJbmRleCk7CisgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlv
bigndXBkYXRlJywgY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
fQorCisgICAgX2NhbmRpZGF0ZU5hbWVGb3JJbmRleChpbmRleCkgeyByZXR1cm4gaW5kZXggPT09
IG51bGwgPyBudWxsIDogdGhpcy5fY2FuZGlkYXRlTGlzdFtpbmRleF07IH0KKworICAgIF9hdXRv
Q29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9pbnB1dFZhbHVlLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQg
bWF0Y2hpbmdDYW5kaWRhdGVDb3VudCA9IDA7CisgICAgICAgIGxldCBtYXRjaGluZ0NhbmRpZGF0
ZSA9IG51bGw7CisgICAgICAgIGNvbnN0IGlucHV0VmFsdWVJbkxvd2VyQ2FzZSA9IHRoaXMuX2lu
cHV0VmFsdWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2Yg
dGhpcy5fY2FuZGlkYXRlcykgeworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS50b0xvd2VyQ2Fz
ZSgpLmluY2x1ZGVzKGlucHV0VmFsdWVJbkxvd2VyQ2FzZSkpIHsKKyAgICAgICAgICAgICAgICBt
YXRjaGluZ0NhbmRpZGF0ZUNvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgbWF0Y2hpbmdDYW5k
aWRhdGUgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0Y2hp
bmdDYW5kaWRhdGVDb3VudCA+IDEpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1hdGNoaW5nQ2FuZGlkYXRlQ291bnQgPT09IDEpIHsKKyAgICAgICAgICAg
IHRoaXMuX2lucHV0VmFsdWUgPSBtYXRjaGluZ0NhbmRpZGF0ZTsKKyAgICAgICAgICAgIHRoaXMu
ZGlzcGF0Y2hBY3Rpb24oJ3VwZGF0ZScsIG1hdGNoaW5nQ2FuZGlkYXRlKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIF9tb3ZlQ2FuZGlkYXRlKGZvcndhcmQpCisgICAgeworICAgICAgICB0aGlz
Ll9wcmV2aW91c0NhbmRpZGF0ZUluZGV4ID0gdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4Owor
ICAgICAgICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID09PSBudWxsKQorICAgICAg
ICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gZm9yd2FyZCA/IDAgOiB0aGlzLl9j
YW5kaWRhdGVMaXN0Lmxlbmd0aCAtIDE7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhp
cy5fY3VycmVudENhbmRpZGF0ZUluZGV4ICs9IGZvcndhcmQgPyAxIDogLTE7CisgICAgICAgICAg
ICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID49IHRoaXMuX2NhbmRpZGF0ZUxpc3Qu
bGVuZ3RoKQorICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IHRo
aXMuX2NhbmRpZGF0ZUxpc3QubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jdXJy
ZW50Q2FuZGlkYXRlSW5kZXggPCAwKQorICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5k
aWRhdGVJbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKKyAgICB9CisKKyAgICBfcmVuZGVyQ2FuZGlkYXRlTGlzdChjYW5kaWRhdGVzLCBpbnB1dFZh
bHVlLCBwcmV2aW91c2x5U2VsZWN0ZWRDYW5kaWRhdGVOYW1lLCBzZWxlY3RlZENhbmRpZGF0ZSwg
c2hvd0NhbmRpZGF0ZUxpc3QpCisgICAgeworICAgICAgICB0aGlzLl9jcmVhdGVDYW5kaWRhdGVM
aXN0TGF6aWx5LmV2YWx1YXRlKGNhbmRpZGF0ZXMsIGlucHV0VmFsdWUpOworCisgICAgICAgIHRo
aXMuY29udGVudCgnY2FuZGlkYXRlLWxpc3QnKS5zdHlsZS5kaXNwbGF5ID0gc2hvd0NhbmRpZGF0
ZUxpc3QgPyBudWxsIDogJ25vbmUnOworCisgICAgICAgIGNvbnN0IHByZXZpb3VzbHlTZWxlY3Rl
ZENhbmRpZGF0ZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50QnlDYW5kaWRhdGVOYW1lLmdldChwcmV2
aW91c2x5U2VsZWN0ZWRDYW5kaWRhdGVOYW1lKTsKKyAgICAgICAgaWYgKHByZXZpb3VzbHlTZWxl
Y3RlZENhbmRpZGF0ZUVsZW1lbnQpCisgICAgICAgICAgICBwcmV2aW91c2x5U2VsZWN0ZWRDYW5k
aWRhdGVFbGVtZW50LmNsYXNzTmFtZSA9IG51bGw7CisKKyAgICAgICAgY29uc3Qgc2VsZWN0ZWRD
YW5kaWRhdGVFbGVtZW50ID0gdGhpcy5fZWxlbWVudEJ5Q2FuZGlkYXRlTmFtZS5nZXQoc2VsZWN0
ZWRDYW5kaWRhdGUpOworICAgICAgICBpZiAoc2VsZWN0ZWRDYW5kaWRhdGVFbGVtZW50KSB7Cisg
ICAgICAgICAgICBzZWxlY3RlZENhbmRpZGF0ZUVsZW1lbnQuY2xhc3NOYW1lID0gJ3NlbGVjdGVk
JzsKKyAgICAgICAgICAgIHNlbGVjdGVkQ2FuZGlkYXRlRWxlbWVudC5zY3JvbGxJbnRvVmlld0lm
TmVlZGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfY3JlYXRlQ2FuZGlkYXRlTGlzdChj
YW5kaWRhdGVzLCBrZXkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50
QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBsaW5rID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVMaW5rOworICAgICAgICBjb25zdCBjYW5kaWRhdGVzU3RhcnRpbmdXaXRoS2V5ID0gW107
CisgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXNDb250YWluaW5nS2V5ID0gW107CisgICAgICAgIGZv
ciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IHNl
YXJjaFJlc3VsdCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoa2V5LnRvTG93ZXJD
YXNlKCkpOworICAgICAgICAgICAgaWYgKGtleSAmJiBzZWFyY2hSZXN1bHQgPT09IC0xKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFzZWFyY2hSZXN1bHQpCisg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlc1N0YXJ0aW5nV2l0aEtleS5wdXNoKGNhbmRpZGF0ZSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlc0NvbnRhaW5pbmdL
ZXkucHVzaChjYW5kaWRhdGUpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NhbmRpZGF0ZUxp
c3QgPSBjYW5kaWRhdGVzU3RhcnRpbmdXaXRoS2V5LmNvbmNhdChjYW5kaWRhdGVzQ29udGFpbmlu
Z0tleSkuc2xpY2UoMCwgdGhpcy5fbWF4Q2FuZGlkYXRlTGlzdExlbmd0aCk7CisgICAgICAgIHRo
aXMucmVuZGVyUmVwbGFjZSh0aGlzLmNvbnRlbnQoJ2NhbmRpZGF0ZS1saXN0JyksIHRoaXMuX2Nh
bmRpZGF0ZUxpc3QubWFwKChjYW5kaWRhdGUpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGl0ZW0g
PSBsaW5rKGNhbmRpZGF0ZSwgKCkgPT4gbnVsbCk7CisgICAgICAgICAgICBpdGVtLmFkZEV2ZW50
TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9pbnB1
dFZhbHVlID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hBY3Rpb24o
J3VwZGF0ZScsIGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5k
ZXIoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlzLl9lbGVtZW50QnlDYW5k
aWRhdGVOYW1lLnNldChjYW5kaWRhdGUsIGl0ZW0pOworICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQoJ2xpJywgaXRlbSk7CisgICAgICAgIH0pKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaHRtbFRl
bXBsYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGRpdiBpZD0nY29tYm94LWJveCc+Cisg
ICAgICAgICAgICA8aW5wdXQgaWQ9J3RleHQtZmllbGQnPjwvaW5wdXQ+CisgICAgICAgICAgICA8
dWwgaWQ9ImNhbmRpZGF0ZS1saXN0Ij48L3VsPgorICAgICAgICA8L2Rpdj5gOworICAgIH0KKwor
ICAgIHN0YXRpYyBjc3NUZW1wbGF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYAorICAgICAg
ICAgICAgZGl2IHsKKyAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAgICAg
ICAgICAgICAgaGVpZ2h0OiAxLjRyZW07CisgICAgICAgICAgICAgICAgbGVmdDogMDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdWw6ZW1wdHkgeworICAgICAgICAgICAgICAgIGRpc3Bs
YXk6IG5vbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVsIHsKKyAgICAgICAgICAg
ICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDI1MG1zIGVhc2UtaW47CisgICAgICAgICAgICAg
ICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuMXJlbSAwLjNyZW07Cisg
ICAgICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKKyAgICAgICAgICAgICAgICBiYWNrZ3Jv
dW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOworICAgICAgICAgICAgICAgIGJvcmRlcjog
c29saWQgMXB4ICNjY2M7CisgICAgICAgICAgICAgICAgdG9wOiAxLjVyZW07CisgICAgICAgICAg
ICAgICAgYm9yZGVyLXJhZGl1czogMC4ycmVtOworICAgICAgICAgICAgICAgIHotaW5kZXg6IDEw
OworICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgICAgICBt
aW4td2lkdGg6IDguNXJlbTsKKyAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAxMHJlbTsKKyAg
ICAgICAgICAgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbGkgeworICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgICAgICAgICAg
ICAgbWFyZ2luOiAwOworICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGxpIGEgeworICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjog
bm9uZTsKKyAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTsKKyAgICAgICAgICAgICAg
ICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbGkgYTpob3ZlciwKKyAgICAgICAgICAgIGxpIGEuc2Vs
ZWN0ZWQgeworICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAxNTMsIDUxLCAw
LjEpOworICAgICAgICAgICAgfQorICAgICAgICBgOworICAgIH0KK30KKworQ29tcG9uZW50QmFz
ZS5kZWZpbmVFbGVtZW50KCdjb21iby1ib3gnLCBDb21ib0JveCk7CmRpZmYgLS1naXQgYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRl
c3QtZ3JvdXAtZm9ybS5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCmluZGV4IDQ2OTM4MDE5Y2Iz
NWEyODA5NGU3ZjIwOGUyMzJkZjRkMjA1NjlmMmIuLjIxOGYwZTEzNTJhZjY0NjQ2YmU3ODAwNGNl
Mjk0YjA0NjNhZTJmZDAgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUtdGVzdC1ncm91cC1mb3JtLmpzCisrKyBiL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9jdXN0b21pemFibGUt
dGVzdC1ncm91cC1mb3JtLmpzCkBAIC0xLDQgKzEsMyBAQAotCiBjbGFzcyBDdXN0b21pemFibGVU
ZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAKICAgICBjb25zdHJ1Y3Rvcigp
CkBAIC03LDkgKzYsMTEgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRz
IFRlc3RHcm91cEZvcm0gewogICAgICAgICB0aGlzLl9jb21taXRTZXRNYXAgPSBudWxsOwogICAg
ICAgICB0aGlzLl9uYW1lID0gbnVsbDsKICAgICAgICAgdGhpcy5faXNDdXN0b21pemVkID0gZmFs
c2U7Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307Ci0KLSAgICAgICAgdGhp
cy5fcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJsZUxhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRG
dW5jdGlvbih0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlLmJpbmQodGhpcykpOworICAg
ICAgICB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcCA9IG51bGw7CisgICAgICAgIHRoaXMuX293bmVy
UmV2aXNpb25NYXAgPSBudWxsOworICAgICAgICB0aGlzLl9jaGVja2VkTGFiZWxCeVBvc2l0aW9u
ID0gbmV3IE1hcDsKKyAgICAgICAgdGhpcy5faGFzSW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9z
aXRvcnkgPSBuZXcgTWFwOworICAgICAgICB0aGlzLl9mZXRjaGluZ0NvbW1pdFByb21pc2VzID0g
W107CiAgICAgfQogCiAgICAgc2V0Q29tbWl0U2V0TWFwKG1hcCkKQEAgLTMyLDkgKzMzLDI4IEBA
IGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsK
ICAgICAgICAgbmFtZUNvbnRyb2wub25pbnB1dCA9ICgpID0+IHsKICAgICAgICAgICAgIHRoaXMu
X25hbWUgPSBuYW1lQ29udHJvbC52YWx1ZTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVu
ZGVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgfTsKIAogICAgICAgICB0aGlzLmNvbnRlbnQoJ2N1
c3RvbWl6ZS1saW5rJykub25jbGljayA9IHRoaXMuY3JlYXRlRXZlbnRIYW5kbGVyKCgpID0+IHsK
KyAgICAgICAgICAgIGlmICghdGhpcy5faXNDdXN0b21pemVkKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX2ZldGNoaW5nQ29tbWl0UHJvbWlzZXMubGVuZ3RoKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbW1pdFNldE1h
cCA9IHRoaXMuX2NvbW1pdFNldE1hcDsKKyAgICAgICAgICAgICAgICB0aGlzLl9jb21taXRTZXRN
YXAgPSBuZXcgTWFwOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gb3JpZ2lu
YWxDb21taXRTZXRNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJtZWRpYXRl
Q29tbWl0U2V0ID0gbmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChvcmlnaW5hbENvbW1pdFNldE1h
cFtsYWJlbF0pOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9mZXRjaGluZ0NvbW1pdFByb21p
c2VzLnB1c2goaW50ZXJtZWRpYXRlQ29tbWl0U2V0LmZldGNoRnVsbENvbW1pdHMoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1pdFNldE1hcC5zZXQobGFiZWwsIGludGVybWVkaWF0
ZUNvbW1pdFNldCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBQ
cm9taXNlLmFsbCh0aGlzLl9mZXRjaGluZ0NvbW1pdFByb21pc2VzKS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5faXNDdXN0b21pemVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fZmV0Y2hpbmdDb21taXRQcm9taXNlcyA9IFtdOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIG9yaWdpbmFsQ29tbWl0U2V0TWFwKQorICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tlZExhYmVsQnlQb3NpdGlvbi5zZXQobGFiZWws
IG5ldyBNYXApOworICAgICAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5faXND
dXN0b21pemVkID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAg
ICAgICAgIH0pOwpAQCAtNDcsMTMgKzY3LDE0IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91
cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
b21taXRTZXRNYXA7CiAKICAgICAgICAgY29uc3QgbWFwID0ge307Ci0gICAgICAgIGZvciAoY29u
c3QgbGFiZWwgaW4gdGhpcy5fY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAgICBjb25zdCBvcmln
aW5hbENvbW1pdFNldCA9IHRoaXMuX2NvbW1pdFNldE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBb
bGFiZWwsIGNvbW1pdFNldF0gb2YgdGhpcy5fY29tbWl0U2V0TWFwKSB7CiAgICAgICAgICAgICBj
b25zdCBjdXN0b21Db21taXRTZXQgPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OwotICAgICAgICAgICAg
Zm9yIChsZXQgcmVwb3NpdG9yeSBvZiB0aGlzLl9jb21taXRTZXRNYXBbbGFiZWxdLnJlcG9zaXRv
cmllcygpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSB0aGlzLl9y
ZXZpc2lvbkVkaXRvck1hcFtsYWJlbF0uZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgZm9y
IChjb25zdCByZXBvc2l0b3J5IG9mIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAu
Z2V0KGxhYmVsKS5nZXQocmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgY29uc29sZS5hc3Nl
cnQocmV2aXNpb25FZGl0b3IpOwotICAgICAgICAgICAgICAgIGN1c3RvbUNvbW1pdFNldC5zZXRS
ZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IG93bmVyUmV2aXNpb24gPSB0aGlzLl9vd25lclJldmlzaW9u
TWFwLmdldChsYWJlbCkuZ2V0KHJlcG9zaXRvcnkpIHx8IG51bGw7CisKKyAgICAgICAgICAgICAg
ICBjdXN0b21Db21taXRTZXQuc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIHJl
dmlzaW9uRWRpdG9yLnZhbHVlLCBudWxsLCBvd25lclJldmlzaW9uKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1hcFtsYWJlbF0gPSBjdXN0b21Db21taXRTZXQ7CiAgICAgICAgIH0KQEAg
LTY3LDI0ICs4OCwzOCBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMg
VGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIHRoaXMuY29udGVudCgnc3RhcnQtYnV0dG9uJykuZGlz
YWJsZWQgPSAhKHRoaXMuX2NvbW1pdFNldE1hcCAmJiB0aGlzLl9uYW1lKTsKICAgICAgICAgdGhp
cy5jb250ZW50KCdjdXN0b21pemUtbGluay1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gIXRo
aXMuX2NvbW1pdFNldE1hcCA/ICdub25lJyA6IG51bGw7CiAKLSAgICAgICAgdGhpcy5fcmVuZGVy
Q3VzdG9tUmV2aXNpb25UYWJsZUxhemlseS5ldmFsdWF0ZSh0aGlzLl9jb21taXRTZXRNYXAsIHRo
aXMuX2lzQ3VzdG9taXplZCk7CisgICAgICAgIHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFi
bGUodGhpcy5fY29tbWl0U2V0TWFwLCB0aGlzLl9pc0N1c3RvbWl6ZWQpOwogICAgIH0KIAogICAg
IF9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlKGNvbW1pdFNldE1hcCwgaXNDdXN0b21pemVkKQog
ICAgIHsKICAgICAgICAgaWYgKCFjb21taXRTZXRNYXAgfHwgIWlzQ3VzdG9taXplZCkgewogICAg
ICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnY3VzdG9tLXRhYmxlJyks
IFtdKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgY29uc3QgcmVwb3NpdG9yeVNldCA9IG5ldyBTZXQ7CisgICAgICAg
IGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5ID0gbmV3IE1hcDsKICAgICAgICAg
Y29uc3QgY29tbWl0U2V0TGFiZWxzID0gW107Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9y
TWFwID0ge307Ci0gICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKSB7Ci0g
ICAgICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0TWFwW2xhYmVsXS5y
ZXBvc2l0b3JpZXMoKSkKKyAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAgPSBuZXcgTWFw
OworICAgICAgICB0aGlzLl9vd25lclJldmlzaW9uTWFwID0gbmV3IE1hcDsKKyAgICAgICAgZm9y
IChjb25zdCBbbGFiZWwsIGNvbW1pdFNldF0gb2YgY29tbWl0U2V0TWFwKSB7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0LmhpZ2hlc3RMZXZlbFJlcG9zaXRv
cmllcygpKSB7CiAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVwb3NpdG9yeSk7
CisgICAgICAgICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSBjb21taXRTZXRNYXAu
Z2V0KGxhYmVsKS5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5
KTsKKworICAgICAgICAgICAgICAgIGlmICghb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFvd25lZFJlcG9zaXRv
cmllc0J5UmVwb3NpdG9yeS5oYXMocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgICAgIG93
bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBuZXcgU2V0KTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBvd25lZFJlcG9zaXRvcnlTZXQgPSBvd25lZFJlcG9zaXRvcmll
c0J5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBvd25lZFJlcG9zaXRvcnkgb2Ygb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAg
ICAgIG93bmVkUmVwb3NpdG9yeVNldC5hZGQob3duZWRSZXBvc2l0b3J5KQorICAgICAgICAgICAg
fQogICAgICAgICAgICAgY29tbWl0U2V0TGFiZWxzLnB1c2gobGFiZWwpOwotICAgICAgICAgICAg
dGhpcy5fcmV2aXNpb25FZGl0b3JNYXBbbGFiZWxdID0gbmV3IE1hcDsKKyAgICAgICAgICAgIHRo
aXMuX3JldmlzaW9uRWRpdG9yTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CisgICAgICAgICAgICB0
aGlzLl9vd25lclJldmlzaW9uTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjb25zdCByZXBvc2l0b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZl
cnJpbmdPbmVzV2l0aFVSTChBcnJheS5mcm9tKHJlcG9zaXRvcnlTZXQudmFsdWVzKCkpKTsKQEAg
LTkyLDM0ICsxMjcsMTQwIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5k
cyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVu
dCgnY3VzdG9tLXRhYmxlJyksIFsKICAgICAgICAgICAgIGVsZW1lbnQoJ3RoZWFkJywKICAgICAg
ICAgICAgICAgICBlbGVtZW50KCd0cicsCi0gICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0
ZCcsICdSZXBvc2l0b3J5JyksIGNvbW1pdFNldExhYmVscy5tYXAoKGxhYmVsKSA9PiBlbGVtZW50
KCd0ZCcsIHtjb2xzcGFuOiBjb21taXRTZXRMYWJlbHMubGVuZ3RoICsgMX0sIGxhYmVsKSldKSks
Ci0gICAgICAgICAgICBlbGVtZW50KCd0Ym9keScsCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9y
eUxpc3QubWFwKChyZXBvc2l0b3J5KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNl
bGxzID0gW2VsZW1lbnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKV07Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhj
b21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50KCd0cicsIGNlbGxzKTsKLSAgICAgICAgICAgICAgICB9KSldKTsKLQotICAg
ICAgICByZXR1cm4gcmVwb3NpdG9yeUxpc3Q7CisgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50
KCd0ZCcsIHtjb2xzcGFuOiAyfSwgJ1JlcG9zaXRvcnknKSwgY29tbWl0U2V0TGFiZWxzLm1hcCgo
bGFiZWwpID0+IGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldExhYmVscy5sZW5ndGgg
KyAxfSwgbGFiZWwpKSwgZWxlbWVudCgndGQnKV0pKSwKKyAgICAgICAgICAgIHRoaXMuX2NvbnN0
cnVjdFRhYmxlQm9keUxpc3QocmVwb3NpdG9yeUxpc3QsIGNvbW1pdFNldE1hcCwgb3duZWRSZXBv
c2l0b3JpZXNCeVJlcG9zaXRvcnkpXSk7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRhYmxlQm9k
eUxpc3QocmVwb3NpdG9yeUxpc3QsIGNvbW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3JpZXNCeVJl
cG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCB0YWJsZUJvZHlMaXN0ID0gW107CisgICAgICAg
IGZvcihjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcnlMaXN0KSB7CisgICAgICAgICAgICBj
b25zdCByb3dzID0gW107CisgICAgICAgICAgICBjb25zdCBvd25zQ29tbWl0cyA9IEFycmF5LmZy
b20oY29tbWl0U2V0TWFwLnZhbHVlcygpKS5ldmVyeSgoY29tbWl0U2V0KSA9PiBjb21taXRTZXQu
b3duc0NvbW1pdHNGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgIGNvbnN0
IGhhc0luY29tcGxldGVSb3cgPSB0aGlzLl9oYXNJbmNvbXBsZXRlZFJvd0Zvck93bmVyUmVwb3Np
dG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25zdCBvd25lZFJlcG9zaXRvcmll
cyA9IG93bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKworICAg
ICAgICAgICAgcm93cy5wdXNoKHRoaXMuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhv
dXRPd25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIG93bnNDb21taXRzKSk7CisKKyAgICAg
ICAgICAgIGlmICgoIW93bmVkUmVwb3NpdG9yaWVzIHx8ICFvd25lZFJlcG9zaXRvcmllcy5zaXpl
KSAmJiAhaGFzSW5jb21wbGV0ZVJvdykgeworICAgICAgICAgICAgICAgIHRhYmxlQm9keUxpc3Qu
cHVzaChlbGVtZW50KCd0Ym9keScsIHJvd3MpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChjb25zdCBvd25lZFJlcG9zaXRvcnkg
b2Ygb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMuX2Nv
bnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcihjb21taXRTZXRNYXAsIG93bmVkUmVw
b3NpdG9yeSwgcmVwb3NpdG9yeSkpOworCisgICAgICAgICAgICBpZiAoaGFzSW5jb21wbGV0ZVJv
dykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdHMgPSBBcnJheS5mcm9tKGNvbW1pdFNl
dE1hcC52YWx1ZXMoKSkubWFwKChjb21taXRTZXQpID0+IGNvbW1pdFNldC5jb21taXRGb3JSZXBv
c2l0b3J5KHJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBjb21taXREaWZmID0g
Q29tbWl0TG9nLm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyguLi5jb21taXRz
KTsKKyAgICAgICAgICAgICAgICByb3dzLnB1c2godGhpcy5fY29uc3RydWN0Um93V2l0aG91dFJl
cG9zaXRvcnlTcGVjaWZpZWQoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBjb21taXREaWZmKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZUJvZHlMaXN0LnB1c2goZWxlbWVudCgn
dGJvZHknLCByb3dzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhYmxlQm9keUxpc3Q7
CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRPd25lcihj
b21taXRTZXRNYXAsIHJlcG9zaXRvcnksIG93bnNSZXBvc2l0b3JpZXMpCisgICAgeworICAgICAg
ICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBj
b25zdCBjZWxscyA9IFtlbGVtZW50KCd0aCcsIHtjb2xzcGFuOiAyfSwgcmVwb3NpdG9yeS5sYWJl
bCgpKV07CisKKyAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiBjb21taXRTZXRNYXAua2V5cygp
KQorICAgICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0
dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVsLCBudWxsLCBvd25zUmVwb3NpdG9y
aWVzKSk7CisKKyAgICAgICAgaWYgKG93bnNSZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGNv
bnN0IHBsdXNCdXR0b24gPSBuZXcgUGx1c0J1dHRvbigpOworICAgICAgICAgICAgcGx1c0J1dHRv
bi5saXN0ZW5Ub0FjdGlvbignYWN0aXZhdGUnLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhp
cy5faGFzSW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnksIHRy
dWUpOworICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9oYXNJbmNvbXBsZXRlZFJvd0Zvck93bmVyUmVw
b3NpdG9yeS5nZXQocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgcGx1c0J1dHRvbi5kaXNh
YmxlKCk7CisgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgcGx1c0J1dHRvbikp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNlbGxzLnB1c2goZWxlbWVudCgndGQnKSk7
CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOworICAgIH0KKworICAgIF9j
b25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRoT3duZXIoY29tbWl0U2V0TWFwLCByZXBvc2l0
b3J5LCBvd25lclJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29t
cG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50
KCd0ZCcsIHtjbGFzczogJ293bmVyLXJlcG9zaXRvcnktbGFiZWwnfSksIGVsZW1lbnQoJ3RoJywg
cmVwb3NpdG9yeS5sYWJlbCgpKV07CisgICAgICAgIGNvbnN0IG1pbnVzQnV0dG9uID0gbmV3IE1p
bnVzQnV0dG9uKCk7CisKKyAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiBjb21taXRTZXRNYXAu
a2V5cygpKQorICAgICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJh
ZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVsLCBvd25lclJlcG9zaXRv
cnksIGZhbHNlKSk7CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVuVG9BY3Rpb24oJ2FjdGl2
YXRlJywgKCkgPT4geworICAgICAgICAgICAgZm9yIChjb25zdCBjb21taXRTZXQgb2YgY29tbWl0
U2V0TWFwLnZhbHVlcygpKQorICAgICAgICAgICAgICAgIGNvbW1pdFNldC5yZW1vdmVDb21taXRG
b3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOworICAgICAgICB9KTsKKyAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcsIG1pbnVz
QnV0dG9uKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50KCd0cicsIGNlbGxzKTsKKyAgICB9CisK
KyAgICBfY29uc3RydWN0Um93V2l0aG91dFJlcG9zaXRvcnlTcGVjaWZpZWQoY29tbWl0U2V0TWFw
LCBvd25lclJlcG9zaXRvcnksIGNvbW1pdERpZmYpCisgICAgeworICAgICAgICBjb25zdCBlbGVt
ZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBsYWJlbENv
dW50ID0gIGNvbW1pdFNldE1hcC5zaXplOworICAgICAgICBjb25zdCBjaGFuZ2VkUmVwb3NpdG9y
aWVzID0gWy4uLmNvbW1pdERpZmYua2V5cygpXTsKKyAgICAgICAgY29uc3QgbWludXNCdXR0b24g
PSBuZXcgTWludXNCdXR0b24oKTsKKyAgICAgICAgY29uc3QgY29tYm9Cb3ggPSBuZXcgQ29tYm9C
b3goY2hhbmdlZFJlcG9zaXRvcmllcy5tYXAoKHJlcG9zaXRvcnkpID0+IHJlcG9zaXRvcnkubmFt
ZSgpKS5zb3J0KCksICcnKTsKKworICAgICAgICBjb21ib0JveC5saXN0ZW5Ub0FjdGlvbigndXBk
YXRlJywgKHJlcG9zaXRvcnlOYW1lKSA9PiB7CisgICAgICAgICAgICBjb25zdCB0YXJnZXRSZXBv
c2l0b3J5ID0gY2hhbmdlZFJlcG9zaXRvcmllcy5maW5kKChyZXBvc2l0b3J5KSA9PiByZXBvc2l0
b3J5TmFtZSA9PT0gcmVwb3NpdG9yeS5uYW1lKCkpOworICAgICAgICAgICAgY29uc3Qgb3duZWRD
b21taXRzSXRlcmF0b3IgPSBjb21taXREaWZmLmdldCh0YXJnZXRSZXBvc2l0b3J5KS52YWx1ZXMo
KTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgY29tbWl0U2V0IG9mIGNvbW1pdFNldE1hcC52YWx1
ZXMoKSkKKyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeSh0
YXJnZXRSZXBvc2l0b3J5LCBvd25lZENvbW1pdHNJdGVyYXRvci5uZXh0KCkudmFsdWUpOworICAg
ICAgICAgICAgdGhpcy5faGFzSW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRvcnkuc2V0KG93
bmVyUmVwb3NpdG9yeSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGQnLCB7
Y2xhc3M6ICdvd25lci1yZXBvc2l0b3J5LWxhYmVsJ30pLCBlbGVtZW50KCd0aCcsIGNvbWJvQm94
KSwgZWxlbWVudCgndGQnLCB7Y29sc3BhbjogbGFiZWxDb3VudCAqIChsYWJlbENvdW50ICsgMSl9
KV07CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVuVG9BY3Rpb24oJ2FjdGl2YXRlJywgKCkg
PT4geworICAgICAgICAgICAgdGhpcy5faGFzSW5jb21wbGV0ZWRSb3dGb3JPd25lclJlcG9zaXRv
cnkuc2V0KG93bmVyUmVwb3NpdG9yeSwgZmFsc2UpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVl
VG9SZW5kZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNlbGxzLnB1c2goZWxlbWVudCgndGQn
LCBtaW51c0J1dHRvbikpOworCisgICAgICAgIHJldHVybiBlbGVtZW50KCd0cicsIGNlbGxzKTsK
ICAgICB9CiAKLSAgICBfY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0U2V0TWFw
LCByZXBvc2l0b3J5LCByb3dMYWJlbCkKKyAgICBfY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRv
bnMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCByb3dMYWJlbCwgb3duZXJSZXBvc2l0b3J5LCBv
d25zUmVwb3NpdG9yaWVzKQogICAgIHsKICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVu
dEJhc2UuY3JlYXRlRWxlbWVudDsKLSAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSBlbGVt
ZW50KCdpbnB1dCcpOworICAgICAgICBjb25zdCByZXZpc2lvbkVkaXRvciA9IGVsZW1lbnQoJ2lu
cHV0Jywge2Rpc2FibGVkOiAhIW93bmVyUmVwb3NpdG9yeSwKKyAgICAgICAgICAgIG9uY2hhbmdl
OiAoKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFvd25zUmVwb3NpdG9yaWVzKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29tbWl0U2V0TWFwLmdldChy
b3dMYWJlbCkudXBkYXRlQ29tbWl0Rm9yUmVwb3NpdG9yeVdpdGhSZXZpc2lvbihyZXBvc2l0b3J5
LCByZXZpc2lvbkVkaXRvci52YWx1ZSkuY2F0Y2goCisgICAgICAgICAgICAgICAgICAgICgpID0+
IHJldmlzaW9uRWRpdG9yLnZhbHVlID0gJycpOworICAgICAgICAgICAgfX0pOwogCi0gICAgICAg
IHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwW3Jvd0xhYmVsXS5zZXQocmVwb3NpdG9yeSwgcmV2aXNp
b25FZGl0b3IpOworICAgICAgICB0aGlzLl9yZXZpc2lvbkVkaXRvck1hcC5nZXQocm93TGFiZWwp
LnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvcik7CiAKICAgICAgICAgY29uc3Qgbm9kZXMg
PSBbXTsKLSAgICAgICAgZm9yIChsZXQgbGFiZWxUb0Nob29zZSBpbiBjb21taXRTZXRNYXApIHsK
LSAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1pdFNldE1hcFtsYWJlbFRvQ2hvb3NlXS5j
b21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOwotICAgICAgICAgICAgY29uc3QgY2hlY2tl
ZCA9IGxhYmVsVG9DaG9vc2UgPT0gcm93TGFiZWw7CisgICAgICAgIGZvciAoY29uc3QgbGFiZWxU
b0Nob29zZSBvZiBjb21taXRTZXRNYXAua2V5cygpKSB7CisgICAgICAgICAgICBjb25zdCBjb21t
aXQgPSBjb21taXRTZXRNYXAuZ2V0KGxhYmVsVG9DaG9vc2UpLmNvbW1pdEZvclJlcG9zaXRvcnko
cmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25zdCBjaGVja2VkTGFiZWwgPSB0aGlzLl9jaGVj
a2VkTGFiZWxCeVBvc2l0aW9uLmdldChyb3dMYWJlbCkuZ2V0KHJlcG9zaXRvcnkpIHx8IHJvd0xh
YmVsOworICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9ICBsYWJlbFRvQ2hvb3NlID09IGNoZWNr
ZWRMYWJlbDsKICAgICAgICAgICAgIGNvbnN0IHJhZGlvQnV0dG9uID0gZWxlbWVudCgnaW5wdXQn
LCB7dHlwZTogJ3JhZGlvJywgbmFtZTogYCR7cm93TGFiZWx9LSR7cmVwb3NpdG9yeS5pZCgpfS1y
YWRpb2AsIGNoZWNrZWQsCi0gICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsgcmV2aXNp
b25FZGl0b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOyB9fSk7Cisg
ICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fY2hlY2tlZExhYmVsQnlQb3NpdGlvbi5nZXQocm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCBs
YWJlbFRvQ2hvb3NlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25FZGl0b3IudmFsdWUg
PSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcnOworICAgICAgICAgICAgICAgICAgICBp
ZiAoY29tbWl0ICYmIGNvbW1pdC5vd25lckNvbW1pdCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcC5nZXQocm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCBj
b21taXQub3duZXJDb21taXQoKS5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9fSk7CiAK
LSAgICAgICAgICAgIGlmIChjaGVja2VkKQorICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHsKICAg
ICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvci52YWx1ZSA9IGNvbW1pdCA/IGNvbW1pdC5yZXZp
c2lvbigpIDogJyc7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1pdCAmJiBjb21taXQub3duZXJD
b21taXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcC5nZXQo
cm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCBjb21taXQub3duZXJDb21taXQoKS5yZXZpc2lvbigp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGVzLnB1c2goZWxlbWVudCgndGQnLCBl
bGVtZW50KCdsYWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFiZWxUb0Nob29zZV0pKSk7CiAgICAgICAg
IH0KICAgICAgICAgbm9kZXMucHVzaChlbGVtZW50KCd0ZCcsIHJldmlzaW9uRWRpdG9yKSk7CkBA
IC0xMzksNiArMjgwLDIxIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5k
cyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgICAgICBtYXJnaW46IDFyZW0gMDsKICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0ZC5vd25lci1yZXBvc2l0b3J5
LWxhYmVsIHsKKyAgICAgICAgICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAycHggdHJhbnNwYXJl
bnQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IHRyYW5zcGFyZW50
OworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMnJlbTsKKyAgICAgICAgICAgICAgICB0ZXh0
LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI2N1c3RvbS10YWJs
ZSB0cjpsYXN0LWNoaWxkIHRkLm93bmVyLXJlcG9zaXRvcnktbGFiZWwgeworICAgICAgICAgICAg
ICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGRkOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAjY3VzdG9tLXRhYmxlIHRoIHsKKyAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDEy
cmVtOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAjY3VzdG9tLXRhYmxlLAogICAgICAg
ICAgICAgI2N1c3RvbS10YWJsZSB0ZCwKICAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGggewpk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRz
L21pbnVzLWJ1dHRvbi5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29t
cG9uZW50cy9taW51cy1idXR0b24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDA5NTY2NTMxYTAzYzg5ZjVjNDli
MjViNzEwZGM1MTliNjA2MmIxZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9taW51cy1idXR0b24uanMKQEAgLTAsMCArMSwx
NyBAQAorCitjbGFzcyBNaW51c0J1dHRvbiBleHRlbmRzIEJ1dHRvbkJhc2UgeworICAgIGNvbnN0
cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHN1cGVyKCdtaW51cy1idXR0b24nKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgYnV0dG9uQ29udGVudCgpCisgICAgeworICAgICAgICByZXR1cm4gYDxnIHN0
cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIGlkPSJpY29uIj4KKyAgICAgICAgICAgIDxj
aXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxsPSJ0cmFuc3BhcmVudCIvPgorICAgICAg
ICAgICAgPHBvbHlnb24gcG9pbnRzPSIyNSw1MCA3NSw1MCIgLz4KKyAgICAgICAgPC9nPmA7Cisg
ICAgfQorfQorCitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ21pbnVzLWJ1dHRvbicsIE1p
bnVzQnV0dG9uKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMKaW5kZXgg
NjhmNzQzMzg1YjQ1MDVlOWVmZWQ3ZDRmNGYwN2RmYzZmNWYxMmUxMi4uNWVjMmU2ZjdlMjEwNGUx
MDUzNDRjNmUzMTk4YzE2YWUwNDUzZDJmMyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJr
aXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1p
dC12aWV3ZXIuanMKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgT3duZWRDb21taXRWaWV3ZXIgZXh0
ZW5kcyBDb21wb25lbnRCYXNlIHsKICAgICAgICAgaWYgKCFwcmV2aW91c093bmVkQ29tbWl0cyB8
fCAhY3VycmVudE93bmVkQ29tbWl0cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBj
b25zdCBkaWZmZXJlbmNlID0gQ29tbWl0TG9nLmRpZmZPd25lZENvbW1pdHModGhpcy5fcHJldmlv
dXNDb21taXQsIHRoaXMuX2N1cnJlbnRDb21taXQpOworICAgICAgICBjb25zdCBkaWZmZXJlbmNl
ID0gQ29tbWl0TG9nLm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyh0aGlzLl9w
cmV2aW91c0NvbW1pdCwgdGhpcy5fY3VycmVudENvbW1pdCk7CiAgICAgICAgIGNvbnN0IHNvcnRl
ZFJlcG9zaXRvcmllcyA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZShbLi4uZGlmZmVyZW5jZS5rZXlz
KCldKTsKICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVu
dDsKIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21w
b25lbnRzL3BsdXMtYnV0dG9uLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92
My9jb21wb25lbnRzL3BsdXMtYnV0dG9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjM2M2YWY1ZjNjMTlhM2Rh
MDhmM2Q1NDdhMDZhYmM3MzM1MjYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMKQEAgLTAsMCAr
MSwxOCBAQAorCitjbGFzcyBQbHVzQnV0dG9uIGV4dGVuZHMgQnV0dG9uQmFzZSB7CisgICAgY29u
c3RydWN0b3IoZXZlbnROYW1lKQorICAgIHsKKyAgICAgICAgc3VwZXIoJ3BsdXMtYnV0dG9uJyk7
CisgICAgfQorCisgICAgc3RhdGljIGJ1dHRvbkNvbnRlbnQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGA8ZyBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBpZD0iaWNvbiI+CisgICAg
ICAgICAgICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgZmlsbD0idHJhbnNwYXJlbnQi
Lz4KKyAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNTAsMjUgNTAsNzUiIC8+CisgICAgICAg
ICAgICA8cG9seWdvbiBwb2ludHM9IjI1LDUwIDc1LDUwIiAvPgorICAgICAgICA8L2c+YDsKKyAg
ICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgncGx1cy1idXR0b24nLCBQbHVz
QnV0dG9uKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMv
aW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRt
bAppbmRleCAxYTIxYzBmNjU3OTkzMzk2ZTM5N2FmMDJmY2E3NzBlMzlhMTQ3ZGQ5Li4wMjMzZjk2
ZmVhZTc4MzdlODJkNzA0MTAyNzc2MGVhNWUwMWJlM2JmIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC05OSw2ICs5OSw5IEBAIFJ1biB0b29s
cy9idW5kbGUtdjMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBwcm9kdWN0
aW9uLmApOwogICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jdXN0b20tY29uZmlndXJh
dGlvbi10ZXN0LWdyb3VwLWZvcm0uanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0IHNyYz0i
Y29tcG9uZW50cy9pbnN0YW50LWZpbGUtdXBsb2FkZXIuanMiPjwvc2NyaXB0PgogICAgICAgICA8
c2NyaXB0IHNyYz0iY29tcG9uZW50cy9mcmVzaG5lc3MtaW5kaWNhdG9yLmpzIj48L3NjcmlwdD4K
KyAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvcGx1cy1idXR0b24uanMiPjwvc2NyaXB0
PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9taW51cy1idXR0b24uanMiPjwvc2Ny
aXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jb21iby1ib3guanMiPjwvc2Ny
aXB0PgogCiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9wYWdlLmpzIj48L3NjcmlwdD4KICAg
ICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Utcm91dGVyLmpzIj48L3NjcmlwdD4KZGlmZiAt
LWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1s
b2cuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQt
bG9nLmpzCmluZGV4IDdiZTQyMTQ1NmNhZGQ1ZmIzMGYzYzNjMmM1NzBjZTJlYmRhMTcyNzEuLjIx
M2JlZmJkOTNiYTVmZTRjZjc0YTg4ZmYwZmZhZjdmZWQzY2Y0ODIgMTAwNjQ0Ci0tLSBhL1dlYnNp
dGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcwpA
QCAtMTIsNiArMTIsOCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3Qg
ewogICAgICAgICBpZiAodGhpcy5fcmVtb3RlSWQpCiAgICAgICAgICAgICB0aGlzLmVuc3VyZU5h
bWVkU3RhdGljTWFwKCdyZW1vdGVJZCcpW3RoaXMuX3JlbW90ZUlkXSA9IHRoaXM7CiAgICAgICAg
IHRoaXMuX293bmVkQ29tbWl0cyA9IG51bGw7CisgICAgICAgIHRoaXMuX293bmVyQ29tbWl0ID0g
bnVsbDsKKyAgICAgICAgdGhpcy5fb3duZWRDb21taXRCeU93bmVkUmVwb3NpdG9yeSA9IG5ldyBN
YXA7CiAgICAgfQogCiAgICAgdXBkYXRlU2luZ2xldG9uKHJhd0RhdGEpCkBAIC0zNiwxMyArMzgs
MTcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICBtZXNz
YWdlKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnbWVzc2FnZSddOyB9CiAgICAgdXJsKCkgeyBy
ZXR1cm4gdGhpcy5fcmVwb3NpdG9yeS51cmxGb3JSZXZpc2lvbih0aGlzLl9yYXdEYXRhWydyZXZp
c2lvbiddKTsgfQogICAgIG93bnNDb21taXRzKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnb3du
c0NvbW1pdHMnXTsgfQorICAgIG93bmVkQ29tbWl0cygpIHsgcmV0dXJuIHRoaXMuX293bmVkQ29t
bWl0czsgfQorICAgIG93bmVyQ29tbWl0KCkgeyByZXR1cm4gdGhpcy5fb3duZXJDb21taXQ7IH0K
KworICAgIHNldE93bmVyQ29tbWl0cyhvd25lckNvbW1pdCkgeyB0aGlzLl9vd25lckNvbW1pdCA9
IG93bmVyQ29tbWl0OyB9CiAKICAgICBsYWJlbCgpCiAgICAgewotICAgICAgICB2YXIgcmV2aXNp
b24gPSB0aGlzLnJldmlzaW9uKCk7CisgICAgICAgIGNvbnN0IHJldmlzaW9uID0gdGhpcy5yZXZp
c2lvbigpOwogICAgICAgICBpZiAocGFyc2VJbnQocmV2aXNpb24pID09IHJldmlzaW9uKSAvLyBl
LmcuIHIxMjM0NQogICAgICAgICAgICAgcmV0dXJuICdyJyArIHJldmlzaW9uOwotICAgICAgICBl
bHNlIGlmIChyZXZpc2lvbi5sZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKKyAgICAgICAg
aWYgKHJldmlzaW9uLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAogICAgICAgICAgICAg
cmV0dXJuIHJldmlzaW9uLnN1YnN0cmluZygwLCA4KTsKICAgICAgICAgcmV0dXJuIHJldmlzaW9u
OwogICAgIH0KQEAgLTU5LDEyICs2NSwxMCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRh
TW9kZWxPYmplY3QgewogCiAgICAgICAgIGNvbnN0IHRvID0gdGhpcy5yZXZpc2lvbigpOwogICAg
ICAgICBjb25zdCBmcm9tID0gcHJldmlvdXNDb21taXQucmV2aXNpb24oKTsKLSAgICAgICAgbGV0
IGZyb21SZXZpc2lvbkZvclVSTCA9IGZyb207CiAgICAgICAgIGxldCBsYWJlbCA9IG51bGw7Ci0g
ICAgICAgIGlmIChwYXJzZUludChmcm9tKSA9PSBmcm9tKSB7IC8vIGUuZy4gcjEyMzQ1LgotICAg
ICAgICAgICAgZnJvbVJldmlzaW9uRm9yVVJMID0gKHBhcnNlSW50KGZyb20pICsgMSkudG9TdHJp
bmc7CisgICAgICAgIGlmIChwYXJzZUludChmcm9tKSA9PSBmcm9tKS8vIGUuZy4gcjEyMzQ1Lgog
ICAgICAgICAgICAgbGFiZWwgPSBgciR7ZnJvbX0tciR7dGhpcy5yZXZpc2lvbigpfWA7Ci0gICAg
ICAgIH0gZWxzZSBpZiAodG8ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNoCisgICAgICAg
IGVsc2UgaWYgKHRvLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAogICAgICAgICAgICAg
bGFiZWwgPSBgJHtmcm9tLnN1YnN0cmluZygwLCA4KX0uLiR7dG8uc3Vic3RyaW5nKDAsIDgpfWA7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxhYmVsID0gYCR7ZnJvbX0gLSAke3RvfWA7CkBA
IC04Niw2ICs5MCw4IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7
CiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIG93bmVkQ29tbWl0Rm9yT3duZWRSZXBvc2l0b3J5
KG93bmVkUmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fb3duZWRDb21taXRCeU93bmVkUmVwb3Np
dG9yeS5nZXQob3duZWRSZXBvc2l0b3J5KTsgfQorCiAgICAgZmV0Y2hPd25lZENvbW1pdHMoKQog
ICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnJlcG9zaXRvcnkoKS5vd25lZFJlcG9zaXRvcmllcygp
KQpAQCAtOTQsMTEgKzEwMCwxNyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxP
YmplY3QgewogICAgICAgICBpZiAoIXRoaXMub3duc0NvbW1pdHMoKSkKICAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlamVjdCgpOwogCi0gICAgICAgIGlmICh0aGlzLl9vd25lZENvbW1pdHMp
CisgICAgICAgIGlmICh0aGlzLl9vd25lZENvbW1pdHMpIHsKKyAgICAgICAgICAgIHRoaXMuX293
bmVkQ29tbWl0cy5mb3JFYWNoKChvd25lZENvbW1pdCkgPT4gb3duZWRDb21taXQuc2V0T3duZXJD
b21taXRzKHRoaXMpKTsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5f
b3duZWRDb21taXRzKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBDb21taXRMb2cuY2Fj
aGVkRmV0Y2goYC4uL2FwaS9jb21taXRzLyR7dGhpcy5yZXBvc2l0b3J5KCkuaWQoKX0vb3duZWQt
Y29tbWl0cz9vd25lci1yZXZpc2lvbj0ke2VzY2FwZSh0aGlzLnJldmlzaW9uKCkpfWApLnRoZW4o
KGRhdGEpID0+IHsKICAgICAgICAgICAgIHRoaXMuX293bmVkQ29tbWl0cyA9IENvbW1pdExvZy5f
Y29uc3RydWN0RnJvbVJhd0RhdGEoZGF0YSk7CisgICAgICAgICAgICB0aGlzLl9vd25lZENvbW1p
dHMuZm9yRWFjaCgob3duZWRDb21taXQpID0+IHsKKyAgICAgICAgICAgICAgICBvd25lZENvbW1p
dC5zZXRPd25lckNvbW1pdHModGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fb3duZWRDb21t
aXRCeU93bmVkUmVwb3NpdG9yeS5zZXQob3duZWRDb21taXQucmVwb3NpdG9yeSgpLCBvd25lZENv
bW1pdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9vd25lZENv
bW1pdHM7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTExMSwyNSArMTIzLDI3IEBAIGNsYXNzIENv
bW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBvd25lZENv
bW1pdE1hcDsKICAgICB9CiAKLSAgICBzdGF0aWMgZGlmZk93bmVkQ29tbWl0cyhwcmV2aW91c0Nv
bW1pdCwgY3VycmVudENvbW1pdCkKKyAgICBzdGF0aWMgb3duZWRDb21taXREaWZmZXJlbmNlRm9y
T3duZXJDb21taXRzKC4uLmNvbW1pdHMpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydChw
cmV2aW91c0NvbW1pdCk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJlbnRDb21taXQpOwot
ICAgICAgICBjb25zb2xlLmFzc2VydChwcmV2aW91c0NvbW1pdC5fb3duZWRDb21taXRzKTsKLSAg
ICAgICAgY29uc29sZS5hc3NlcnQoY3VycmVudENvbW1pdC5fb3duZWRDb21taXRzKTsKLQotICAg
ICAgICBjb25zdCBwcmV2aW91c093bmVkQ29tbWl0TWFwID0gcHJldmlvdXNDb21taXQuX2J1aWxk
T3duZWRDb21taXRNYXAoKTsKLSAgICAgICAgY29uc3QgY3VycmVudE93bmVkQ29tbWl0TWFwID0g
Y3VycmVudENvbW1pdC5fYnVpbGRPd25lZENvbW1pdE1hcCgpOwotICAgICAgICBjb25zdCBvd25l
ZENvbW1pdFJlcG9zaXRvcmllcyA9IG5ldyBTZXQoWy4uLmN1cnJlbnRPd25lZENvbW1pdE1hcC5r
ZXlzKCksIC4uLnByZXZpb3VzT3duZWRDb21taXRNYXAua2V5cygpXSk7Ci0gICAgICAgIGNvbnN0
IGRpZmZlcmVuY2UgPSBuZXcgTWFwOworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRzLmxl
bmd0aCA+PSAyKTsKKworICAgICAgICBjb25zdCBvd25lZENvbW1pdFJlcG9zaXRvcmllcyA9IG5l
dyBTZXQ7CisgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0TWFwTGlzdCA9IGNvbW1pdHMubWFwKChj
b21taXQpID0+IHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdCk7CisgICAgICAg
ICAgICBjb25zb2xlLmFzc2VydChjb21taXQuX293bmVkQ29tbWl0cyk7CisgICAgICAgICAgICBj
b25zdCBvd25lZENvbW1pdE1hcCA9IGNvbW1pdC5fYnVpbGRPd25lZENvbW1pdE1hcCgpOworICAg
ICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIG93bmVkQ29tbWl0TWFwLmtleXMoKSkK
KyAgICAgICAgICAgICAgICBvd25lZENvbW1pdFJlcG9zaXRvcmllcy5hZGQocmVwb3NpdG9yeSk7
CisgICAgICAgICAgICByZXR1cm4gb3duZWRDb21taXRNYXA7CisgICAgICAgIH0pOwogCisgICAg
ICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgTWFwOwogICAgICAgICBvd25lZENvbW1pdFJlcG9z
aXRvcmllcy5mb3JFYWNoKChvd25lZENvbW1pdFJlcG9zaXRvcnkpID0+IHsKLSAgICAgICAgICAg
IGNvbnN0IGN1cnJlbnRSZXZpc2lvbiA9IGN1cnJlbnRPd25lZENvbW1pdE1hcC5nZXQob3duZWRD
b21taXRSZXBvc2l0b3J5KTsKLSAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUmV2aXNpb24gPSBw
cmV2aW91c093bmVkQ29tbWl0TWFwLmdldChvd25lZENvbW1pdFJlcG9zaXRvcnkpOwotICAgICAg
ICAgICAgaWYgKGN1cnJlbnRSZXZpc2lvbiAhPSBwcmV2aW91c1JldmlzaW9uKQotICAgICAgICAg
ICAgICAgIGRpZmZlcmVuY2Uuc2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSwgW3ByZXZpb3VzUmV2
aXNpb24sIGN1cnJlbnRSZXZpc2lvbl0pOworICAgICAgICAgICAgY29uc3Qgb3duZWRDb21taXRz
ID0gb3duZWRDb21taXRNYXBMaXN0Lm1hcCgob3duZWRDb21taXRNYXApID0+IG93bmVkQ29tbWl0
TWFwLmdldChvd25lZENvbW1pdFJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgIGNvbnN0IHVuaXF1
ZU93bmVkQ29tbWl0cyA9IG5ldyBTZXQob3duZWRDb21taXRzKTsKKyAgICAgICAgICAgIGlmICh1
bmlxdWVPd25lZENvbW1pdHMuc2l6ZSA+IDEpCisgICAgICAgICAgICAgICAgZGlmZmVyZW5jZS5z
ZXQob3duZWRDb21taXRSZXBvc2l0b3J5LCBvd25lZENvbW1pdHMpOwogICAgICAgICB9KTsKLQog
ICAgICAgICByZXR1cm4gZGlmZmVyZW5jZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMgYi9XZWJzaXRl
cy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCmluZGV4IGIx
NzhhYzgwZTUyM2Q0MGFmZjFjZWQyZjI5NzQ0NjA5ODI2NTZlZjcuLjQ5NDM5ZTViZDdlMzJhNGM3
OTJlOTU0NWU0MTBlMGU0NzY2NzFmMDEgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKKysrIGIvV2Vic2l0ZXMvcGVyZi53
ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwpAQCAtNzAsOCArNzAsOCBA
QCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIGNvbW1pdEZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvQ29tbWl0
TWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIG93bmVyQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRPd25lck1hcC5nZXQocmVw
b3NpdG9yeSk7IH0KICAgICB0b3BMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRv
cnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLl9yZXBvc2l0b3JpZXMuZmls
dGVyKChyZXBvc2l0b3J5KSA9PiAhdGhpcy5vd25lclJldmlzaW9uRm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KSkpOyB9Ci0KICAgICBvd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShy
ZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lclJlcG9zaXRvcnlUb093bmVkUmVwb3NpdG9y
aWVzTWFwLmdldChyZXBvc2l0b3J5KTsgfQorICAgIGNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3Np
dG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvQ29tbWl0TWFwLmdldChyZXBvc2l0b3J5
KTsgfQogCiAgICAgcmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCiAgICAgewpAQCAt
MjQ4LDggKzI0OCw5MCBAQCBjbGFzcyBDdXN0b21Db21taXRTZXQgewogICAgIH0KIH0KIAorY2xh
c3MgSW50ZXJtZWRpYXRlQ29tbWl0U2V0IHsKKworICAgIGNvbnN0cnVjdG9yKGNvbW1pdFNldCkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdFNldCBpbnN0YW5jZW9mIENvbW1p
dFNldCk7CisgICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeSA9IG5ldyBNYXA7CisgICAg
ICAgIHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnkgPSBuZXcgTWFwOwor
CisgICAgICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBjb21taXRTZXQucmVwb3NpdG9yaWVz
KCkpCisgICAgICAgICAgICB0aGlzLnNldENvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwg
Y29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSksIGNvbW1pdFNldC5vd25l
ckNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpOworICAgIH0KKworICAgIGZldGNoRnVs
bENvbW1pdHMoKQorICAgIHsKKyAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlcyA9IFtdOwor
ICAgICAgICBmb3IgKGNvbnN0IFtyZXBvc2l0b3J5LCBjb21taXRdIG9mIHRoaXMuX2NvbW1pdEJ5
UmVwb3NpdG9yeSkKKyAgICAgICAgICAgIGZldGNoaW5nUHJvbWlzZXMucHVzaCh0aGlzLnVwZGF0
ZUNvbW1pdEZvclJlcG9zaXRvcnlXaXRoUmV2aXNpb24ocmVwb3NpdG9yeSwgY29tbWl0LnJldmlz
aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGZldGNoaW5nUHJvbWlzZXMpOwor
ICAgIH0KKworICAgIHNldENvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgY29tbWl0LCBv
d25lckNvbW1pdCA9IG51bGwpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChyZXBvc2l0
b3J5IGluc3RhbmNlb2YgUmVwb3NpdG9yeSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1p
dCBpbnN0YW5jZW9mIENvbW1pdExvZyk7CisgICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9y
eS5zZXQocmVwb3NpdG9yeSwgY29tbWl0KTsKKyAgICAgICAgaWYgKCFvd25lckNvbW1pdCkKKyAg
ICAgICAgICAgIG93bmVyQ29tbWl0ID0gY29tbWl0Lm93bmVyQ29tbWl0KCk7CisgICAgICAgIGlm
IChvd25lckNvbW1pdCkgeworICAgICAgICAgICAgY29uc3Qgb3duZXJSZXBvc2l0b3J5ID0gb3du
ZXJDb21taXQucmVwb3NpdG9yeSgpOworICAgICAgICAgICAgaWYgKCF0aGlzLl9vd25lZFJlcG9z
aXRvcmllc0J5T3duZXJSZXBvc2l0b3J5Lmhhcyhvd25lclJlcG9zaXRvcnkpKQorICAgICAgICAg
ICAgICAgIHRoaXMuX293bmVkUmVwb3NpdG9yaWVzQnlPd25lclJlcG9zaXRvcnkuc2V0KG93bmVy
UmVwb3NpdG9yeSwgbmV3IFNldCk7CisgICAgICAgICAgICBjb25zdCByZXBvc2l0b3J5U2V0ID0g
dGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5nZXQob3duZXJSZXBvc2l0
b3J5KTsKKyAgICAgICAgICAgIHJlcG9zaXRvcnlTZXQuYWRkKHJlcG9zaXRvcnkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KQor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJlcG9z
aXRvcnkpOworICAgICAgICBjb25zdCBvd25lckNvbW1pdCA9IHRoaXMub3duZXJDb21taXRGb3JS
ZXBvc2l0b3J5KHJlcG9zaXRvcnkpOworICAgICAgICBpZiAob3duZXJDb21taXQpIHsKKyAgICAg
ICAgICAgIGNvbnN0IHJlcG9zaXRvcnlTZXQgPSB0aGlzLl9vd25lZFJlcG9zaXRvcmllc0J5T3du
ZXJSZXBvc2l0b3J5LmdldChvd25lckNvbW1pdC5yZXBvc2l0b3J5KCkpOworICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQocmVwb3NpdG9yeVNldC5oYXMocmVwb3NpdG9yeSkpOworICAgICAgICAg
ICAgcmVwb3NpdG9yeVNldC5kZWxldGUocmVwb3NpdG9yeSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5fb3duZWRSZXBvc2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5oYXMocmVwb3NpdG9yeSkp
IHsKKyAgICAgICAgICAgIGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzID0gdGhpcy5fb3duZWRSZXBv
c2l0b3JpZXNCeU93bmVyUmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBm
b3IgKGNvbnN0IG93bmVkUmVwb3NpdG9yeSBvZiBvd25lZFJlcG9zaXRvcmllcykKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZGVsZXRlKG93bmVkUmVwb3NpdG9yeSk7
CisgICAgICAgICAgICB0aGlzLl9vd25lZFJlcG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmRl
bGV0ZShyZXBvc2l0b3J5KTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9z
aXRvcnkuZGVsZXRlKHJlcG9zaXRvcnkpOworICAgIH0KKworICAgIHVwZGF0ZUNvbW1pdEZvclJl
cG9zaXRvcnlXaXRoUmV2aXNpb24ocmVwb3NpdG9yeSwgcmV2aXNpb24pCisgICAgeworICAgICAg
ICBsZXQgY29tbWl0ID0gbnVsbDsKKyAgICAgICAgcmV0dXJuIENvbW1pdExvZy5mZXRjaEZvclNp
bmdsZVJldmlzaW9uKHJlcG9zaXRvcnksIHJldmlzaW9uKS50aGVuKChjb21taXRzKSA9PiB7Cisg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRzLmxlbmd0aCA9PT0gMSk7CisgICAgICAg
ICAgICBjb21taXQgPSBjb21taXRzWzBdOworICAgICAgICAgICAgaWYgKCFjb21taXQub3duc0Nv
bW1pdHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gY29t
bWl0LmZldGNoT3duZWRDb21taXRzKCkudGhlbigoKSA9PiB0aGlzLnNldENvbW1pdEZvclJlcG9z
aXRvcnkocmVwb3NpdG9yeSwgY29tbWl0KSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIG93
bnNDb21taXRzRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLmNvbW1pdEZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSkub3duc0NvbW1pdHMoKTsgfQorCisgICAgcmVwb3NpdG9y
aWVzKCkgeyByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkua2V5cygp
KTsgfQorICAgIGhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJlcG9zaXRvcnku
c29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLnJlcG9zaXRvcmllcygpLmZpbHRl
cigocmVwb3NpdG9yeSkgPT4gIXRoaXMub3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRv
cnkpKSk7IH0KKyAgICBjb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpIHsgcmV0dXJuIHRo
aXMuX2NvbW1pdEJ5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7IH0KKyAgICBvd25lZFJlcG9z
aXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25l
ZFJlcG9zaXRvcmllc0J5T3duZXJSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsgfQorCisgICAg
b3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25z
dCBjb21taXQgPSB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkpOworICAg
ICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1
cm4gY29tbWl0Lm93bmVyQ29tbWl0KCk7CisgICAgfQorfQorCiBpZiAodHlwZW9mIG1vZHVsZSAh
PSAndW5kZWZpbmVkJykgewogICAgIG1vZHVsZS5leHBvcnRzLkNvbW1pdFNldCA9IENvbW1pdFNl
dDsKICAgICBtb2R1bGUuZXhwb3J0cy5NZWFzdXJlbWVudENvbW1pdFNldCA9IE1lYXN1cmVtZW50
Q29tbWl0U2V0OwogICAgIG1vZHVsZS5leHBvcnRzLkN1c3RvbUNvbW1pdFNldCA9IEN1c3RvbUNv
bW1pdFNldDsKKyAgICBtb2R1bGUuZXhwb3J0cy5JbnRlcm1lZGlhdGVDb21taXRTZXQgPSBJbnRl
cm1lZGlhdGVDb21taXRTZXQ7CiB9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xz
L2pzL3YzLW1vZGVscy5qcwppbmRleCBhYWQ4ZTFlNDAyZjcyZmMzNjc3MThmMjQ2YzA4NzUwMGIw
MzMwMjAyLi5kMGVmZTdjMGQ1MjA0NTg5ZDdiN2RmNjBkMWJjZjcxM2RiNTRhYTZjIDEwMDY0NAot
LS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzCisrKyBi
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMKQEAgLTE2LDcg
KzE2LDYgQEAgaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGQtcmVxdWVzdC5qcycsICdCdWlsZFJl
cXVlc3QnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2J1aWxkZXIuanMnLCAnQnVpbGQnKTsKIGlt
cG9ydEZyb21WMygnbW9kZWxzL2J1aWxkZXIuanMnLCAnQnVpbGRlcicpOwogaW1wb3J0RnJvbVYz
KCdtb2RlbHMvY29tbWl0LWxvZy5qcycsICdDb21taXRMb2cnKTsKLWltcG9ydEZyb21WMygnbW9k
ZWxzL2NvbW1pdC1zZXQuanMnLCAnQ3VzdG9tQ29tbWl0U2V0JykKIGltcG9ydEZyb21WMygnbW9k
ZWxzL21hbmlmZXN0LmpzJywgJ01hbmlmZXN0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9tZWFz
dXJlbWVudC1hZGFwdG9yLmpzJywgJ01lYXN1cmVtZW50QWRhcHRvcicpOwogaW1wb3J0RnJvbVYz
KCdtb2RlbHMvbWVhc3VyZW1lbnQtY2x1c3Rlci5qcycsICdNZWFzdXJlbWVudENsdXN0ZXInKTsK
QEAgLTI3LDYgKzI2LDcgQEAgaW1wb3J0RnJvbVYzKCdtb2RlbHMvcmVwb3NpdG9yeS5qcycsICdS
ZXBvc2l0b3J5Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQtc2V0LmpzJywgJ01lYXN1
cmVtZW50Q29tbWl0U2V0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQtc2V0LmpzJywg
J0NvbW1pdFNldCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LXNldC5qcycsICdDdXN0
b21Db21taXRTZXQnKTsKK2ltcG9ydEZyb21WMygnbW9kZWxzL2NvbW1pdC1zZXQuanMnLCAnSW50
ZXJtZWRpYXRlQ29tbWl0U2V0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy90ZXN0LmpzJywgJ1Rl
c3QnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL3Rlc3QtZ3JvdXAuanMnLCAnVGVzdEdyb3VwJyk7
CiBpbXBvcnRGcm9tVjMoJ21vZGVscy90aW1lLXNlcmllcy5qcycsICdUaW1lU2VyaWVzJyk7CmRp
ZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9n
LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxv
Zy10ZXN0cy5qcwppbmRleCAzYjMxZTVjMDcxZDFjYzA1Y2M4YThjMGQ0NmJmM2Q1YTM2N2VmMzA5
Li5kOTI2M2IwNDgxNzM3OWUwMWZlODRjYzhiM2U0ZTFjMzAwMGU3NDE1IDEwMDY0NAotLS0gYS9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRlc3RzLmpzCisr
KyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMu
anMKQEAgLTE5MSw3ICsxOTEsOCBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkg
ewogICAgICAgICB9KTsKIAogICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBvd25lZC1jb21taXQg
Zm9yIGEgdmFsaWQgY29tbWl0IHJldmlzaW9uJywgKCkgPT4gewotICAgICAgICAgICAgY29uc3Qg
ZmV0Y2hpbmdQcm9taXNlID0gb3duZXJDb21taXQoKS5mZXRjaE93bmVkQ29tbWl0cygpOworICAg
ICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsKKyAgICAgICAgICAgIGNvbnN0
IGZldGNoaW5nUHJvbWlzZSA9IGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOwogICAgICAgICAg
ICAgY29uc3QgcmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOwogICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3du
ZXItcmV2aXNpb249MTAuMTEuNCUyMDE1RTY1Jyk7CkBAIC0yMDgsNiArMjA5LDcgQEAgZGVzY3Jp
YmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3duZWRDb21taXRzWzBdLnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRv
cnkpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmV2aXNp
b24oKSwgJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFkZDAzZGFkM2E3YjA3ZmInKTsKICAgICAg
ICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLmlkKCksIDIzMyk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5vd25lckNvbW1pdCgpLCBj
b21taXQpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogCkBAIC0yMzMsNiArMjM1LDcg
QEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy5vd25l
ZFJlcG9zaXRvcnkpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNb
MF0ucmV2aXNpb24oKSwgJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFkZDAzZGFkM2E3YjA3ZmIn
KTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLmlkKCksIDIz
Myk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5vd25lckNv
bW1pdCgpLCBjb21taXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb21taXQuZmV0Y2hPd25l
ZENvbW1pdHMoKTsKICAgICAgICAgICAgIH0pLnRoZW4oKG93bmVkQ29tbWl0cykgPT4gewogICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwpAQCAtMjQxLDEy
ICsyNDQsMTIgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAg
fSk7CiAgICAgfSk7CiAKLSAgICBkZXNjcmliZSgnZGlmZk93bmVkQ29tbWl0cycsICgpID0+IHsK
KyAgICBkZXNjcmliZSgnb3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzJywgKCkg
PT4gewogICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKICAgICAgICAgICAgIE1vY2tSZW1vdGVB
UEkucmVzZXQoKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZGlm
ZmVyZW5jZSBiZXR3ZWVuIDIgb3duZWQtY29tbWl0cycsICgpID0+IHsKKyAgICAgICAgaXQoJ3No
b3VsZCByZXR1cm4gZGlmZmVyZW5jZSBiZXR3ZWVuIG93bmVkLWNvbW1pdHMgb2YgMiBvd25lciBj
b21taXRzJywgKCkgPT4gewogICAgICAgICAgICAgY29uc3Qgb25lQ29tbWl0ID0gb3duZXJDb21t
aXQoKTsKICAgICAgICAgICAgIGNvbnN0IG90aGVyQ29tbWl0ID0gb3RoZXJPd25lckNvbW1pdCgp
OwogICAgICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gb25lQ29tbWl0LmZldGNoT3du
ZWRDb21taXRzKCk7CkBAIC0yNjcsNyArMjcwLDE3IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAxNi0wNS0x
M1QwMDo1NTo1Ny44NDEzNDRaJykpLAogICAgICAgICAgICAgfV19KTsKIAotICAgICAgICAgICAg
cmV0dXJuIGZldGNoaW5nUHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBm
ZXRjaGluZ1Byb21pc2UudGhlbigob3duZWRDb21taXRzKSA9PiB7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFz
c2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxzLm93bmVk
UmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sw
XS5yZXZpc2lvbigpLCAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRkMDNkYWQzYTdiMDdmYicp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0uaWQoKSwgMjMz
KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLm93bmVyQ29t
bWl0KCksIG9uZUNvbW1pdCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29t
bWl0c1sxXS5yZXBvc2l0b3J5KCksIE1vY2tNb2RlbHMud2Via2l0R2l0KTsKKyAgICAgICAgICAg
ICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzFdLnJldmlzaW9uKCksICcwNGE2YzcyMDM4
ZjBiNzcxYTE5MjQ4Y2EyNTQ5ZTEyNTg2MTdiNWZjJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5pZCgpLCAyOTkpOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChvd25lZENvbW1pdHNbMV0ub3duZXJDb21taXQoKSwgb25lQ29tbWl0KTsKKwogICAg
ICAgICAgICAgICAgIGNvbnN0IG90aGVyRmV0Y2hpbmdQcm9taXNlID0gb3RoZXJDb21taXQuZmV0
Y2hPd25lZENvbW1pdHMoKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMu
bGVuZ3RoLCAyKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0udXJs
LCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNpb249MTAuMTEu
NCUyMDE1RTY2Jyk7CkBAIC0yODYsOCArMjk5LDE3IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgfV19KTsKIAogICAgICAgICAgICAgICAgIHJl
dHVybiBvdGhlckZldGNoaW5nUHJvbWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewot
ICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cuZGlmZk93bmVkQ29t
bWl0cyhvbmVDb21taXQsIG90aGVyQ29tbWl0KTsKKyAgICAgICAgICAgIH0pLnRoZW4oKG93bmVk
Q29tbWl0cykgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHMu
bGVuZ3RoLCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBd
LnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpOworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmV2aXNpb24oKSwgJ2Q1MDk5ZTAzYjQ4
MmFiZGQ3N2Y2YzRkY2I4NzVhZmQwNWJkYTVhYjgnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwob3duZWRDb21taXRzWzBdLmlkKCksIDIzNCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKG93bmVkQ29tbWl0c1swXS5vd25lckNvbW1pdCgpLCBvdGhlckNvbW1pdCk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5yZXBvc2l0b3J5KCksIE1v
Y2tNb2RlbHMud2Via2l0R2l0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRD
b21taXRzWzFdLnJldmlzaW9uKCksICcwNGE2YzcyMDM4ZjBiNzcxYTE5MjQ4Y2EyNTQ5ZTEyNTg2
MTdiNWZjJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5p
ZCgpLCAyOTkpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMV0u
b3duZXJDb21taXQoKSwgb3RoZXJDb21taXQpOworICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZl
cmVuY2UgPSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzKG9u
ZUNvbW1pdCwgb3RoZXJDb21taXQpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChkaWZm
ZXJlbmNlLnNpemUsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChkaWZmZXJlbmNl
LmtleXMoKS5uZXh0KCkudmFsdWUsIE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KTsKICAgICAg
ICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVz
dHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRl
c3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggYWI3NmQ1ODljZWJkMjAwNTdiM2E3OWM2ODhh
NTZhMzU4NmYwMDhmNy4uNDc1YjczYmQ2M2Y1ZGNmZGZjYzM0MDA4YWJiZTYyZDNmMTk3OTI2ZiAx
MDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LXNl
dC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21t
aXQtc2V0LXRlc3RzLmpzCkBAIC0zLDYgKzMsNyBAQAogY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgn
YXNzZXJ0Jyk7CiByZXF1aXJlKCcuLi90b29scy9qcy92My1tb2RlbHMuanMnKTsKIGNvbnN0IE1v
Y2tNb2RlbHMgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9tb2NrLXYzLW1vZGVscy5qcycpLk1vY2tN
b2RlbHM7Citjb25zdCBNb2NrUmVtb3RlQVBJID0gcmVxdWlyZSgnLi4vdW5pdC10ZXN0cy9yZXNv
dXJjZXMvbW9jay1yZW1vdGUtYXBpLmpzJykuTW9ja1JlbW90ZUFQSTsKIAogZnVuY3Rpb24gY3Jl
YXRlUGF0Y2goKQogewpAQCAtNTEsNiArNTIsMjAwIEBAIGZ1bmN0aW9uIGN1c3RvbUNvbW1pdFNl
dFdpdGhPd25lZFJlcG9zaXRvcnlIYXNTYW1lTmFtZUFzTm90T3duZWRSZXBvc2l0b3J5KCkKICAg
ICByZXR1cm4gY3VzdG9tQ29tbWl0U2V0OwogfQogCitmdW5jdGlvbiBvd25lckNvbW1pdCgpCit7
CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNSwgeworICAgICAgICByZXBvc2l0b3J5OiBNb2Nr
TW9kZWxzLm93bmVyUmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdvd25lci1jb21taXQt
MCcsCisgICAgICAgIG93bnNDb21taXRzOiB0cnVlLAorICAgICAgICB0aW1lOiBudWxsLAorICAg
IH0pOworfQorCitmdW5jdGlvbiBwYXJ0aWFsT3duZXJDb21taXQoKQoreworICAgIHJldHVybiBu
ZXcgQ29tbWl0TG9nKDUsIHsKKyAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lclJl
cG9zaXRvcnksCisgICAgICAgIHJldmlzaW9uOiAnb3duZXItY29tbWl0LTAnLAorICAgICAgICBv
d25zQ29tbWl0czogbnVsbCwKKyAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAxNi0wNS0xM1Qw
MDo1NTo1Ny44NDEzNDRaJykpLAorICAgIH0pOworfQorCitmdW5jdGlvbiBvd25lZENvbW1pdCgp
Cit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNiwgeworICAgICAgICByZXBvc2l0b3J5OiBN
b2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdvd25lZC1jb21t
aXQtMCcsCisgICAgICAgIG93bnNDb21taXRzOiBudWxsLAorICAgICAgICB0aW1lOiAxNDU2OTMy
Nzc0MDAwCisgICAgfSk7Cit9CisKK2Rlc2NyaWJlKCdJbnRlcm1lZGlhdGVDb21taXRTZXQnLCAo
KSA9PiB7CisgICAgTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKKyAgICBNb2NrTW9kZWxzLmluamVj
dCgpOworCisgICAgZGVzY3JpYmUoJ3NldENvbW1pdEZvclJlcG9zaXRvcnknLCAoKSA9PiB7Cisg
ICAgICAgIGl0KCdzaG91bGQgYWxsb3cgc2V0IGNvbW1pdCBmb3Igb3duZXIgcmVwb3NpdG9yeScs
ICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldCA9IG5ldyBJbnRlcm1lZGlhdGVD
b21taXRTZXQobmV3IENvbW1pdFNldCk7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBvd25l
ckNvbW1pdCgpOworICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9zaXRvcnko
TW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICBhc3NlcnQu
ZXF1YWwoY29tbWl0LCBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93
bmVyUmVwb3NpdG9yeSkpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGFsbG93
IHNldCBjb21taXQgZm9yIG93bmVkIHJlcG9zaXRvcnknLCAoKSA9PiB7CisgICAgICAgICAgICBj
b25zdCBjb21taXRTZXQgPSBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG5ldyBDb21taXRTZXQp
OworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsKKworICAgICAgICAg
ICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCk7Cisg
ICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVzdHM7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3duZWQtY29t
bWl0cz9vd25lci1yZXZpc2lvbj1vd25lci1jb21taXQtMCcpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworCisgICAgICAgICAgICByZXF1ZXN0
c1swXS5yZXNvbHZlKHtjb21taXRzOiBbeworICAgICAgICAgICAgICAgIGlkOiAyMzMsCisgICAg
ICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkuaWQoKSwK
KyAgICAgICAgICAgICAgICByZXZpc2lvbjogJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFkZDAz
ZGFkM2E3YjA3ZmInLAorICAgICAgICAgICAgICAgIHRpbWU6ICsobmV3IERhdGUoJzIwMTYtMDUt
MTNUMDA6NTU6NTcuODQxMzQ0WicpKSwKKyAgICAgICAgICAgIH1dfSk7CisKKworICAgICAgICAg
ICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDog
NSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9y
eSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0wJywKKyAgICAgICAg
ICAgICAgICBvd25zQ29tbWl0czogdHJ1ZSwKKyAgICAgICAgICAgICAgICB0aW1lOiArKG5ldyBE
YXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCisgICAgICAgICAgICB9XX0pOwor
CisgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKCkgPT4geworICAgICAg
ICAgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0ID0gY29tbWl0Lm93bmVkQ29tbWl0cygpWzBdOwor
ICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2Rl
bHMub3duZXJSZXBvc2l0b3J5LCBjb21taXQpOworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5z
ZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LCBvd25lZENv
bW1pdCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdCwgY29tbWl0U2V0LmNv
bW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnkpKTsKKyAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXQsIGNvbW1pdFNldC5jb21taXRGb3JSZXBv
c2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmRlZXBFcXVhbChjb21taXRTZXQucmVwb3NpdG9yaWVzKCksIFtNb2NrTW9kZWxzLm93bmVy
UmVwb3NpdG9yeSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnldKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdmZXRjaEZ1bGxDb21taXRz
JywgKCkgPT4geworCisKKyAgICAgICAgaXQoJ3Nob3VsZCBmZXRjaCBmdWxsIGNvbW1pdHMnLCAg
KCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gcGFydGlhbE93bmVyQ29tbWl0KCk7
CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0Lm93bnNDb21taXRzKCksIG51bGwpOwor
ICAgICAgICAgICAgY29uc3Qgb3duZWQgPSBvd25lZENvbW1pdCgpOworCisgICAgICAgICAgICBj
b25zdCBjb21taXRTZXQgPSBDb21taXRTZXQuZW5zdXJlU2luZ2xldG9uKCc1MzI0NjQ1NicsIHty
ZXZpc2lvbkl0ZW1zOiBbe2NvbW1pdH0sIHtjb21taXQ6IG93bmVkLCBvd25lckNvbW1pdDogY29t
bWl0fV19KTsKKyAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZUNvbW1pdFNldCA9bmV3IElu
dGVybWVkaWF0ZUNvbW1pdFNldChjb21taXRTZXQpOworICAgICAgICAgICAgY29uc3QgZmV0Y2hp
bmdQcm9taXNlID0gaW50ZXJtZWRpYXRlQ29tbWl0U2V0LmZldGNoRnVsbENvbW1pdHMoKTsKKwor
ICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMik7CisgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnL2FwaS9jb21taXRzLzExMS9vd25lci1jb21t
aXQtMCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dF
VCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy9hcGkvY29t
bWl0cy8xMTIvb3duZWQtY29tbWl0LTAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1
ZXN0c1sxXS5tZXRob2QsICdHRVQnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2
ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICBy
ZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICBy
ZXZpc2lvbjogJ293bmVyLWNvbW1pdC0wJywKKyAgICAgICAgICAgICAgICBvd25zQ29tbWl0czog
dHJ1ZSwKKyAgICAgICAgICAgICAgICB0aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1LTEzVDAwOjU1
OjU3Ljg0MTM0NFonKSksCisgICAgICAgICAgICB9XX0pOworICAgICAgICAgICAgcmVxdWVzdHNb
MV0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAg
ICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwKKyAgICAgICAg
ICAgICAgICByZXZpc2lvbjogJ293bmVkLWNvbW1pdC0wJywKKyAgICAgICAgICAgICAgICBvd25z
Q29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgdGltZTogMTQ1NjkzMjc3NDAwMCwKKyAg
ICAgICAgICAgIH1dfSk7CisKKyAgICAgICAgICAgIHJldHVybiBNb2NrUmVtb3RlQVBJLndhaXRG
b3JSZXF1ZXN0KCkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzJdLnVybCwgJy4uL2FwaS9jb21taXRzLzExMS9vd25lZC1jb21taXRzP293bmVyLXJldmlzaW9u
PW93bmVyLWNvbW1pdC0wJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3Rz
WzJdLm1ldGhvZCwgJ0dFVCcpOworCisgICAgICAgICAgICAgICAgcmVxdWVzdHNbMl0ucmVzb2x2
ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAgICAgICAgaWQ6IDYsCisgICAgICAgICAgICAg
ICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3duZWQtY29tbWl0LTAnLAorICAgICAgICAgICAg
ICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHRpbWU6IDE0
NTY5MzI3NzQwMDAsCisgICAgICAgICAgICAgICAgfV19KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmV0Y2hpbmdQcm9taXNlOworICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0KGNvbW1pdC5vd25zQ29tbWl0cygpKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwoY29tbWl0Lm93bmVkQ29tbWl0cygpLmxlbmd0aCwgMSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5vd25lZENvbW1pdHMoKVswXSwgb3duZWQpOworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZC5vd25lckNvbW1pdCgpLCBjb21taXQpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZC5yZXBvc2l0b3J5KCksIE1vY2tNb2Rl
bHMub3duZWRSZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW50ZXJt
ZWRpYXRlQ29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9z
aXRvcnkpLCBvd25lZCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludGVybWVkaWF0
ZUNvbW1pdFNldC5vd25lckNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9z
aXRvcnkpLCBjb21taXQpOworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW50ZXJt
ZWRpYXRlQ29tbWl0U2V0LnJlcG9zaXRvcmllcygpLCBbTW9ja01vZGVscy5vd25lclJlcG9zaXRv
cnksIE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5XSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgncmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9y
eScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZW1vdmUgb3duZWQgY29tbWl0cyB3aGVu
IG93bmVyIGNvbW1pdCBpcyByZW1vdmVkJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29t
bWl0U2V0ID0gbmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChuZXcgQ29tbWl0U2V0KTsKKyAgICAg
ICAgICAgIGNvbnN0IGNvbW1pdCA9IG93bmVyQ29tbWl0KCk7CisKKyAgICAgICAgICAgIGNvbnN0
IGZldGNoaW5nUHJvbWlzZSA9IGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOworICAgICAgICAg
ICAgY29uc3QgcmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3du
ZXItcmV2aXNpb249b3duZXItY29tbWl0LTAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChy
ZXF1ZXN0c1swXS5tZXRob2QsICdHRVQnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVz
b2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDogMjMzLAorICAgICAgICAgICAg
ICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAgICAg
ICAgICAgICAgcmV2aXNpb246ICc2ZjhiMGRiYmRhOTVhNDQwNTAzYjg4ZGIxZGQwM2RhZDNhN2Iw
N2ZiJywKKyAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogdHJ1ZQorICAgICAgICAgICAgfV19
KTsKKworICAgICAgICAgICAgcmV0dXJuIGZldGNoaW5nUHJvbWlzZS50aGVuKCgpID0+IHsKKyAg
ICAgICAgICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxz
Lm93bmVyUmVwb3NpdG9yeSwgY29tbWl0KTsKKyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0
Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwgY29tbWl0Lm93
bmVkQ29tbWl0cygpWzBdKTsKKyAgICAgICAgICAgICAgICBjb21taXRTZXQucmVtb3ZlQ29tbWl0
Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmRlZXBFcXVhbChjb21taXRTZXQucmVwb3NpdG9yaWVzKCksIFtdKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIG5vdCByZW1vdmUg
b3duZXIgY29tbWl0cyB3aGVuIG93bmVkIGNvbW1pdCBpcyByZW1vdmVkJywgKCkgPT4geworICAg
ICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0gbmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChuZXcg
Q29tbWl0U2V0KTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IG93bmVyQ29tbWl0KCk7CisK
KyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZSA9IGNvbW1pdC5mZXRjaE93bmVkQ29t
bWl0cygpOworICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVl
c3RzOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CisgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTEx
L293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNpb249b3duZXItY29tbWl0LTAnKTsKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS5tZXRob2QsICdHRVQnKTsKKworICAgICAgICAg
ICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDog
MjMzLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0
b3J5LmlkKCksCisgICAgICAgICAgICAgICAgcmV2aXNpb246ICc2ZjhiMGRiYmRhOTVhNDQwNTAz
Yjg4ZGIxZGQwM2RhZDNhN2IwN2ZiJywKKyAgICAgICAgICAgICAgICB0aW1lOiArKG5ldyBEYXRl
KCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCisgICAgICAgICAgICB9XX0pOworCisg
ICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAg
ICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZXJS
ZXBvc2l0b3J5LCBjb21taXQpOworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRG
b3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LCBjb21taXQub3duZWRDb21t
aXRzKClbMF0pOworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5yZW1vdmVDb21taXRGb3JSZXBv
c2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZGVlcEVxdWFsKGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSwgW01vY2tNb2RlbHMub3duZXJS
ZXBvc2l0b3J5XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICB9KTsKKwor
fSk7CisKIGRlc2NyaWJlKCdDdXN0b21Db21taXRTZXQnLCAoKSA9PiB7CiAgICAgTW9ja01vZGVs
cy5pbmplY3QoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330082</attachid>
            <date>2017-12-21 17:26:58 -0800</date>
            <delta_ts>2017-12-21 17:34:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171221172657.patch</filename>
            <type>text/plain</type>
            <size>64276</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDgxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMTNlMjdhZDkwYjFiZjY5YjVjNjYwYzRmMDkxYzZmNGQ1NzRlYjhlLi5kM2E0NTBiNWJj
YTA0ODg5MTQzM2VkNjY1ZDg2OTkxMDM5OTU5NTQwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw5NCBAQAorMjAxNy0xMi0yMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisgICAgICAgIEludHJvZHVjZSAnSW50ZXJtZWRp
YXRlQ29tbWl0U2V0JyB0byBhY2hpZXZlIHRoZSBnb2FsIG9mIHNwZWNpZnlpbmcgb3duZWQgY29t
bWl0cyBmb3IgQS9CIHRlc3QuCisgICAgICAgIEluIG9yZGVyIHRvIHN1cHBvcnQgY29uZmlndXJl
IEEvQiB0ZXN0aW5nIHRoYXQgbWF5IG5lZWQgdG8gYWRkL3JlbW92ZSBvd25lZCBjb21taXRzLCBD
b21taXRTZXQgbWF5IGJlIHRoZQorICAgICAgICBjbG9zZXN0IHRoaW5nIHdlIGNhbiBnZXQuIEhv
d2V2ZXIsIGl0IGlzIGEgc3ViY2xhc3Mgb2YgRGF0YU1vZGVsT2JqZWN0LCB3aGljaCBtZWFucyBD
b21taXRTZXQgaXMgYSByZXByZXNlbnRhdGlvbgorICAgICAgICBvZiAnY29tbWl0X3NldHMnIHRh
YmxlIGFuZCBjYW4gb25seSBiZSB1cGRhdGVkIGZyb20gc2VydmVyIGRhdGEuIFRodXMsIHdlIHdh
bnQgc29tZXRoaW5nIGxpa2UgQ3VzdG9tQ29tbWl0U2V0IHRoYXQKKyAgICAgICAgaXMgbm90IGEg
cmVwcmVzZW50YXRpb24gb2YgZGF0YWJhc2UgdGFibGUsIGJ1dCB1bmxpa2UgQ3VzdG9tQ29tbWl0
U2V0LCBpdCBzaG91bGQgc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0cworICAgICAgICBy
YXRoZXIgdGhhbiBhIHJldmlzaW9uLiBBcyBhIHJlc3VsdCwgSW50ZXJtZWRpYXRlQ29tbWl0U2V0
IGlzIGludHJvZHVjZWQuIEZvciBhIGxvbmdlciB0ZXJtLCB3ZSBtYXkgcmVwbGFjZQorICAgICAg
ICBDdXN0b21Db21taXRTZXQgd2l0aCBJbnRlcm1lZGlhdGVDb21taXRTZXQgYXMgaXQgY2Fycmll
cyBtb3JlIGluZm9ybWF0aW9uIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBzaW1wbGlmeSBzb21lCisg
ICAgICAgIEN1c3RvbUNvbW1pdFNldCByZWxhdGVkIEFQSXMgYnkgdXNpbmcgY29tbWl0IGlkIGlu
c3RlYWQgb2YgY29tbWl0IHJldmlzaW9uLgorICAgICAgICBFeHRlbmQgQnV0dG9uQmFzZSBjbGFz
cyBzbyB0aGF0IHdlIGNhbiBlbmFibGUvZGlzYWJsZSBhIGJ1dHRvbi4KKworICAgICAgICAqIHB1
YmxpYy92My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpzOgorICAgICAgICAoQnV0dG9uQmFzZSk6
CisgICAgICAgIChCdXR0b25CYXNlLnByb3RvdHlwZS5zZXREaXNhYmxlZCk6IEVuYWJsZS9kaXNh
YmxlIGEgYnV0dG9uLgorICAgICAgICAoQnV0dG9uQmFzZS5wcm90b3R5cGUucmVuZGVyKToKKyAg
ICAgICAgKEJ1dHRvbkJhc2UuY3NzVGVtcGxhdGUpOiBBZGRlZCBjc3MgcnVsZSBmb3IgZGlzYWJs
ZWQgYnV0dG9uLgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2NvbWJvLWJveC5qczog
QWRkZWQuCisgICAgICAgIChDb21ib0JveCk6CisgICAgICAgIChDb21ib0JveC5wcm90b3R5cGUu
ZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6IFNldHVwIHRleHQgZmllbGQuCisgICAgICAgIChDb21i
b0JveC5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2Fu
ZGlkYXRlTmFtZUZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgY2FuZGlkYXRlIG5hbWUgYmFzZWQg
b24gY3VycmVudCBpbmRleC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlkYXRl
RWxlbWVudEZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgYSBsaXN0IGVsZW1lbnQgYmFzZWQgb24g
Y3VycmVudCBpbmRleC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fYXV0b0NvbXBsZXRl
SWZPbmx5T25lTWF0Y2hpbmdJdGVtKTogU3VwcG9ydHMgYXV0byBjb21wbGV0aW9uLgorICAgICAg
ICAoQ29tYm9Cb3gucHJvdG90eXBlLl9tb3ZlQ2FuZGlkYXRlKTogU3VwcG9ydHMgYXJyb3cgdXAv
ZG93bi4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fdXBkYXRlQ2FuZGlkYXRlTGlzdCk6
IEhpZGUvdW5oaWRlIGNhbmRpZGF0ZSBsaXN0IGFuZCBoaWdoLWxpZ2h0IHNlbGVjdGVkIGNhbmRp
ZGF0ZS4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fcmVuZGVyQ2FuZGlkYXRlTGlzdCk6
IFJlbmRlciBjYW5kaWRhdGUgbGlzdCBiYXNlIG9uIHZhbHVlIG9uIHRleHQgZmllbGQuCisgICAg
ICAgIChDb21ib0JveC5odG1sVGVtcGxhdGUpOgorICAgICAgICAoQ29tYm9Cb3guY3NzVGVtcGxh
dGUpOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdy
b3VwLWZvcm0uanM6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtKToKKyAgICAg
ICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRv
d1RyZWUpOiBPbmx5IGZldGNoIHRoZSBmdWxsIGNvbW1pdHMgd2hlbiB3ZSBhYm91dCB0byBjcmVh
dGUgYSBjdXN0b21pemVkIEEvQiB0ZXN0cy4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91
cEZvcm0ucHJvdG90eXBlLl9jb21wdXRlQ29tbWl0U2V0TWFwKTogQ29tcHV0ZSB0aGUgQ3VzdG9t
Q29tbWl0U2V0IGJhc2VkIG9uIEludGVybWVkaWF0ZUNvbW1pdFNldCBhbmQKKyAgICAgICAgb3Ro
ZXIgcmV2aXNpb24gcmVsYXRlZCBpbmZvcm1hdGlvbiBpbiBzb21lIG1hcC4KKyAgICAgICAgKEN1
c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChDdXN0
b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJs
ZSk6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3Ry
dWN0VGFibGVCb2R5TGlzdCk6IFRoaXMgZnVuY3Rpb24gYnVpbGRzIHRhYmxlIGJvZHkgZm9yIGVh
Y2ggaGlnaGVzdCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICBJdCB3aWxsIGFsc28gaW5jbHVk
ZSB0aGUgb3duZWQgcmVwb3NpdG9yeSByb3dzIGluIHRoZSBzYW1lIHRhYmxlIGJvZHkgaWYgdGhl
IGNvbW1pdHMgZm9yIGhpZ2hlc3QgbGV2ZWwgcmVwb3NpdG9yeSBvd25zIG90aGVyIGNvbW1pdHMu
CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0
VGFibGVSb3dGb3JDb21taXRzV2l0aG91dE93bmVyKTogQnVpbGQgYSB0YWJsZSByb3cgZm9yIGEg
aGlnaGVzdCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcik6IEJ1
aWxkIGEgdGFibGUgcm93IGZvciByZXBvc2l0b3J5IHdpdGggb3duZXIuCisgICAgICAgIChDdXN0
b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0VGFibGVSb3dGb3JJbmNv
bXBsZXRlT3duZWRDb21taXRzKTogQnVpbGQgYSB0YWJsZSByb3cgZm9yIGFuIHVuc3BlY2lmaWVk
IHJlcG9zaXRvcnkuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlw
ZS5fY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMpOiBVcGRhdGUgdGhlIGxvZ2ljIHRvIHN1
cHBvcnQgYnVpbGQgcmFkaW8gYnV0dG9ucyBmb3IgdGhlIG93bmVkIHJlcG9zaXRvcnkgcm93cy4K
KyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0uY3NzVGVtcGxhdGUpOgorICAgICAg
ICAqIHB1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qczogQWRkZWQuCisgICAgICAg
IChNaW51c0J1dHRvbik6CisgICAgICAgIChNaW51c0J1dHRvbi5idXR0b25Db250ZW50KToKKyAg
ICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzOgorICAg
ICAgICAoT3duZWRDb21taXRWaWV3ZXIucHJvdG90eXBlLl9yZW5kZXJPd25lZENvbW1pdFRhYmxl
KToKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1dHRvbi5qczogQWRkZWQu
CisgICAgICAgIChQbHVzQnV0dG9uKToKKyAgICAgICAgKFBsdXNCdXR0b24uYnV0dG9uQ29udGVu
dCk6CisgICAgICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZGVkIG5ldyBjb21wb25lbnRz
LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qczogQWRkZWQgb3duZXIg
YW5kIG93bmVkIGNvbW1pdCBpbmZvcm1hdGlvbi4KKyAgICAgICAgKENvbW1pdExvZyk6CisgICAg
ICAgIChDb21taXRMb2cucHJvdG90eXBlLm93bmVkQ29tbWl0cyk6IFJldHVybnMgYSBsaXN0IG9m
IGNvbW1pdHMgb3duZWQgYnkgY3VycmVudCBjb21taXQuCisgICAgICAgIChDb21taXRMb2cucHJv
dG90eXBlLm93bmVyQ29tbWl0KTogUmV0dXJuIG93bmVyIGNvbW1pdCBvZiBjdXJyZW50IGNvbW1p
dC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUuc2V0T3duZXJDb21taXRzKTogU2V0IG93
bmVyIGNvbW1pdCBvZiBjdXJyZW50IGNvbW1pdC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5
cGUubGFiZWwpOiBSZW1vdmUgdW5uZWNlc3NhcnkgJ2Vsc2UnLgorICAgICAgICAoQ29tbWl0TG9n
LnByb3RvdHlwZS5kaWZmKTogUmVtb3ZlIHVudXNlZCAnZnJvbVJldmlzaW9uRm9yVVJMJyBhbmQg
dGlueSBjb2RlIGNsZWFudXAuCisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBlLm93bmVkQ29t
bWl0Rm9yT3duZWRSZXBvc2l0b3J5KToKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUuZmV0
Y2hPd25lZENvbW1pdHMpOiBTZXRzIHRoZSBvd25lciBmb3IgdGhvc2Ugb3duZWQgY29tbWl0cy4g
VGhlIG93bmVyIG9mIGEgY29tbWl0IHdpdGggbXVsdGlwbGUgb3duZXIKKyAgICAgICAgY29tbWl0
cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZC4KKyAgICAgICAgKENvbW1pdExvZy5vd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25lckNvbW1p
dHMpOiBBIG1vcmUgZ2VuZXJpYyB2ZXJzaW9uIG9mIGRpZmZPd25lZENvbW1pdHMuIGRpZmZPd25l
ZENvbW1pdHMgb25seSBhY2NlcHRzIDIgY29tbWl0cywKKyAgICAgICAgYnV0IG93bmVkQ29tbWl0
RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyBzdXBwb3J0cyBtdWx0aXBsZSBjb21taXRzLgorICAg
ICAgICAoQ29tbWl0TG9nLmRpZmZPd25lZENvbW1pdHMpOiBEZWxldGVkIGFuZCBzaG91bGQgdXNl
ICdDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzJyBpbnN0ZWFk
LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qczoKKyAgICAgICAgKENv
bW1pdFNldC5wcm90b3R5cGUudG9wTGV2ZWxSZXBvc2l0b3JpZXMpOgorICAgICAgICAoQ29tbWl0
U2V0LnByb3RvdHlwZS5jb21taXRGb3JSZXBvc2l0b3J5KToKKyAgICAgICAgKEludGVybWVkaWF0
ZUNvbW1pdFNldCk6IFRha2UgQ29tbWl0U2V0IGFzIGFyZ3VtZW50LCBub3RlIHRoZSBjb21taXQg
ZnJvbSBDb21taXRTZXQgZG9lc24ndCBjb250YWlucyBmdWxsIGluZm9ybWF0aW9uIG9mIHRoZSBj
b21taXQuCisgICAgICAgIEFsd2F5cyBjYWxsICdmZXRjaEZ1bGxDb21taXRzJyBvbmNlIGJlZm9y
ZSBhbnkgZnVydGhlciB1c2FnZXMuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJv
dG90eXBlLmZldGNoQ29tbWl0TG9ncyk6IEZldGNoIGFsbCBjb21taXRzIGluZm9ybWF0aW9uIGlu
IGN1cnJlbnQgY29tbWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90
b3R5cGUuX2ZldGNoQ29tbWl0TG9nQW5kT3duZWRDb21taXRzKTogRmV0Y2ggY29tbWl0IGxvZyBh
bmQgb3duZWQgY29tbWl0cyBpZiBuZWNlc3NhcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21t
aXRTZXQucHJvdG90eXBlLnVwZGF0ZVJldmlzaW9uRm9yT3duZXJSZXBvc2l0b3J5KTogVXBkYXRl
cyBhIGNvbW1pdCBmb3IgYSByZXBvc2l0b3J5IGJ5IGdpdmVuIGEgcmV2aXNpb24gb2YgdGhlIHJl
cG9zaXRvcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLnNldENv
bW1pdEZvclJlcG9zaXRvcnkpOiBTZXRzIGEgY29tbWl0IGZvciBhIHJlcG9zaXRvcnkgaW4gY29t
bWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUucmVtb3Zl
Q29tbWl0Rm9yUmVwb3NpdG9yeSk6IFJlbW92ZXMgYSBjb21taXQgZm9yIGEgcmVwb3NpdG9yeSBp
biBjb21taXQgc2V0LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5v
d25zQ29tbWl0c0ZvclJlcG9zaXRvcnkpOiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvbW1pdCBmb3Ig
cmVwb3NpdG9yeSBvd25zIGNvbW1pdHMuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQu
cHJvdG90eXBlLnJlcG9zaXRvcmllcyk6IFJldHVybnMgYWxsIHJlcG9zaXRvcmllcyBpbiB0aGUg
Y29tbWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUuaGln
aGVzdExldmVsUmVwb3NpdG9yaWVzKTogUmV0dXJucyBhbGwgcmVwb3NpdG9yaWVzIHRob3NlIGRv
bid0IGhhdmUgYW4gb3duZXIuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90
eXBlLmNvbW1pdEZvclJlcG9zaXRvcnkpOiBSZXR1cm5zIGEgY29tbWl0IGZvciBhIGdpdmVuIHJl
cG9zaXRvcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLm93bmVk
UmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KTogUmV0dXJucyBhbGwgcmVwb3NpdG9yaWVz
IG93bmVkIGJ5IGEgZ2l2ZW4gcmVwb3NpdG9yeSBpbiBjdXJyZW50IGNvbW1pdCBzZXQuCisgICAg
ICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLm93bmVyQ29tbWl0Rm9yUmVwb3Np
dG9yeSk6IFJldHVybnMgb3duZXIgY29tbWl0IGZvciBhIGdpdmVuIG93bmVkIHJlcG9zaXRvcnku
CisgICAgICAgICogdG9vbHMvanMvdjMtbW9kZWxzLmpzOiBBZGRlZCBpbXBvcnQgZm9yICdJbnRl
cm1lZGlhdGVDb21taXRTZXQnLgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0
cy5qczogVXBkYXRlZCB1bml0dGVzdCB3aGljaCB0ZXN0cyAnb3duZXJDb21taXQnIGZ1bmN0aW9u
LgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qczogQWRkZWQgdW5pdCB0
ZXN0cyBmb3IgSW50ZXJtZWRpYXRlQ29tbWl0U2V0LgorCiAyMDE3LTEyLTEzICBEZXdlaSBaaHUg
IDxkZXdlaV96aHVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHRlc3QgZnJlc2huZXNzIHBh
Z2UuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvYnV0dG9uLWJhc2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvYnV0dG9uLWJhc2UuanMKaW5kZXggMzY0MzlmY2U4MTZiYzMwMzIxNzVlOWE1
YTIyM2FkODVjZmU1MDZkYi4uZDQzZmU3YTQ5MWY0MGVlODExZmU2ZWE3ZjgxMjM3ZDU2MmZhYjE2
OCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2J1dHRvbi1iYXNlLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9idXR0b24tYmFzZS5qcwpAQCAtMSw1ICsxLDE4IEBACiAKIGNsYXNzIEJ1
dHRvbkJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKG5hbWUs
IGRpc2FibGVkID0gZmFsc2UpCisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAg
dGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgICB9CisKKyAgICBzZXREaXNhYmxlZChkaXNh
YmxlZCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7CisgICAgICAg
IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCiAgICAgZGlkQ29uc3RydWN0U2hhZG93
VHJlZSgpCiAgICAgewogICAgICAgICB0aGlzLmNvbnRlbnQoJ2J1dHRvbicpLmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgdGhpcy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4gewpAQCAtNyw2ICsy
MCwxNSBAQCBjbGFzcyBCdXR0b25CYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAg
IH0pKTsKICAgICB9CiAKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVy
KCk7CisgICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkKKyAgICAgICAgICAgIHRoaXMuY29udGVu
dCgnYnV0dG9uJykuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGhpcy5jb250ZW50KCdidXR0b24nKS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2Fi
bGVkJyk7CisgICAgfQorCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gYDxhIGlkPSJidXR0b24iIGhyZWY9IiMiPjxzdmcgdmlld0JveD0iMCAwIDEwMCAx
MDAiPiR7dGhpcy5idXR0b25Db250ZW50KCl9PC9zdmc+PC9hPmA7CkBAIC0zNSw2ICs1NywxMiBA
QCBjbGFzcyBCdXR0b25CYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgICAgICAg
ICAgb3BhY2l0eTogMC42OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBhW2Rpc2FibGVk
XSB7CisgICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgICAgICAgICAg
ICAgY3Vyc29yOiBkZWZhdWx0OworICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuMjsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgc3ZnIHsKICAgICAgICAgICAgICAgICBkaXNwbGF5OiBi
bG9jazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZDcw
NTk3MWViYjg3NzRmNzAwZWZiMGQ3ZmJlMGEwNDQ3MjkyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94Lmpz
CkBAIC0wLDAgKzEsMTk3IEBACitjbGFzcyBDb21ib0JveCBleHRlbmRzIENvbXBvbmVudEJhc2Ug
eworCisgICAgY29uc3RydWN0b3IoY2FuZGlkYXRlcywgbWF4Q2FuZGlkYXRlTGlzdExlbmd0aCkK
KyAgICB7CisgICAgICAgIHN1cGVyKCdjb21iby1ib3gnKTsKKyAgICAgICAgdGhpcy5fY2FuZGlk
YXRlcyA9IGNhbmRpZGF0ZXM7CisgICAgICAgIHRoaXMuX21heENhbmRpZGF0ZUxpc3RMZW5ndGgg
PSBtYXhDYW5kaWRhdGVMaXN0TGVuZ3RoIHx8IDEwMDA7CisgICAgICAgIHRoaXMuX2NhbmRpZGF0
ZUxpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5fY2FuZGlkYXRlRWxlbWVudExpc3QgPSBbXTsKKyAg
ICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
c2hvd0NhbmRpZGF0ZUxpc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ2FuZGlkYXRl
TGlzdExhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDYW5k
aWRhdGVMaXN0LmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl91cGRhdGVDYW5kaWRhdGVMaXN0
TGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3VwZGF0ZUNhbmRpZGF0
ZUxpc3QuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgZGlkQ29uc3RydWN0U2hhZG93VHJlZSgp
CisgICAgeworICAgICAgICBzdXBlci5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCk7CisgICAgICAg
IGNvbnN0IHRleHRGaWVsZCA9IHRoaXMuY29udGVudCgndGV4dC1maWVsZCcpOworICAgICAgICB0
ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7CisgICAgICAgICAgICB0
aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50
Q2FuZGlkYXRlSW5kZXggPSBudWxsOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFu
Z2UnLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRj
aGluZ0l0ZW0oKTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IG51
bGw7CisgICAgICAgIH0pOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignYmx1
cicsICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID0gZmFsc2U7
CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKTsK
KyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIH0pOworICAgICAg
ICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7CisgICAgICAgICAg
ICB0aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLmVucXVl
dWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlz
dGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXkg
PT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKQorICAgICAgICAgICAg
ICAgIHRoaXMuX21vdmVDYW5kaWRhdGUoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7CisgICAg
ICAgICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdUYWInIHx8IGV2ZW50LmtleSA9PT0gJ0Vu
dGVyJykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMuX2NhbmRpZGF0
ZUVsZW1lbnRGb3JDdXJyZW50SW5kZXgoKTsKKyAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNo
QWN0aW9uKCd1cGRhdGUnLCBjYW5kaWRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisK
KyAgICAgICAgdGhpcy5fcmVuZGVyQ2FuZGlkYXRlTGlzdExhemlseS5ldmFsdWF0ZSh0aGlzLl9j
YW5kaWRhdGVzLCB0aGlzLmNvbnRlbnQoJ3RleHQtZmllbGQnKS52YWx1ZSk7CisgICAgICAgIHRo
aXMuX3VwZGF0ZUNhbmRpZGF0ZUxpc3RMYXppbHkuZXZhbHVhdGUodGhpcy5fY2FuZGlkYXRlTmFt
ZUZvckN1cnJlbnRJbmRleCgpLCB0aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCk7CisgICAgfQorCisg
ICAgX2NhbmRpZGF0ZU5hbWVGb3JDdXJyZW50SW5kZXgoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50
Q2FuZGlkYXRlSW5kZXggPT09IG51bGwgPyBudWxsIDogdGhpcy5fY2FuZGlkYXRlTGlzdFt0aGlz
Ll9jdXJyZW50Q2FuZGlkYXRlSW5kZXhdOyB9CisgICAgX2NhbmRpZGF0ZUVsZW1lbnRGb3JDdXJy
ZW50SW5kZXgoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPT09IG51bGwg
PyBudWxsIDogdGhpcy5fY2FuZGlkYXRlRWxlbWVudExpc3RbdGhpcy5fY3VycmVudENhbmRpZGF0
ZUluZGV4XTsgfQorCisgICAgX2F1dG9Db21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRlbSgpCisg
ICAgeworICAgICAgICBjb25zdCB0ZXh0RmllbGRWYWx1ZUluTG93ZXJDYXNlID0gdGhpcy5jb250
ZW50KCd0ZXh0LWZpZWxkJykudmFsdWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgaWYgKCF0ZXh0
RmllbGRWYWx1ZUluTG93ZXJDYXNlLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBsZXQgbWF0Y2hpbmdDYW5kaWRhdGVDb3VudCA9IDA7CisgICAgICAgIGxldCBtYXRjaGlu
Z0NhbmRpZGF0ZSA9IG51bGw7CisgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHRoaXMu
X2NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudG9Mb3dlckNhc2UoKS5p
bmNsdWRlcyh0ZXh0RmllbGRWYWx1ZUluTG93ZXJDYXNlKSkgeworICAgICAgICAgICAgICAgIG1h
dGNoaW5nQ2FuZGlkYXRlQ291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICBtYXRjaGluZ0NhbmRp
ZGF0ZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaGlu
Z0NhbmRpZGF0ZUNvdW50ID4gMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWF0Y2hpbmdDYW5kaWRhdGVDb3VudCA9PT0gMSkKKyAgICAgICAgICAgIHRo
aXMuZGlzcGF0Y2hBY3Rpb24oJ3VwZGF0ZScsIG1hdGNoaW5nQ2FuZGlkYXRlKTsKKyAgICB9CisK
KyAgICBfbW92ZUNhbmRpZGF0ZShmb3J3YXJkKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1
cnJlbnRDYW5kaWRhdGVJbmRleCA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleCA9IGZvcndhcmQgPyAwIDogdGhpcy5fY2FuZGlkYXRlTGlzdC5sZW5ndGgg
LSAxOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJ
bmRleCArPSBmb3J3YXJkID8gMSA6IC0xOworICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleCA+PSB0aGlzLl9jYW5kaWRhdGVMaXN0Lmxlbmd0aCkKKyAgICAgICAgICAg
ICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSB0aGlzLl9jYW5kaWRhdGVMaXN0Lmxl
bmd0aCAtIDE7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4IDwg
MCkKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSAwOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCisgICAgX3Vw
ZGF0ZUNhbmRpZGF0ZUxpc3Qoc2VsZWN0ZWRDYW5kaWRhdGVFbGVtZW50LCBzaG93Q2FuZGlkYXRl
TGlzdCkKKyAgICB7CisKKyAgICAgICAgY29uc3QgY2FuZGlkYXRlTGlzdCA9IHRoaXMuY29udGVu
dCgnY2FuZGlkYXRlLWxpc3QnKTsKKyAgICAgICAgY2FuZGlkYXRlTGlzdC5zdHlsZS5kaXNwbGF5
ID0gc2hvd0NhbmRpZGF0ZUxpc3QgPyBudWxsIDogJ25vbmUnOworCisgICAgICAgIGNvbnN0IHBy
ZXZpb3VzbHlTZWxlY3RlZENhbmRpZGF0ZUVsZW1lbnQgPSBjYW5kaWRhdGVMaXN0LnF1ZXJ5U2Vs
ZWN0b3IoJy5zZWxlY3RlZCcpOworICAgICAgICBpZiAocHJldmlvdXNseVNlbGVjdGVkQ2FuZGlk
YXRlRWxlbWVudCkKKyAgICAgICAgICAgIHByZXZpb3VzbHlTZWxlY3RlZENhbmRpZGF0ZUVsZW1l
bnQuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTsKKworICAgICAgICBpZiAoc2VsZWN0ZWRD
YW5kaWRhdGVFbGVtZW50KSB7CisgICAgICAgICAgICBzZWxlY3RlZENhbmRpZGF0ZUVsZW1lbnQu
Y2xhc3NOYW1lID0gJ3NlbGVjdGVkJzsKKyAgICAgICAgICAgIHNlbGVjdGVkQ2FuZGlkYXRlRWxl
bWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBf
cmVuZGVyQ2FuZGlkYXRlTGlzdChjYW5kaWRhdGVzLCBrZXkpCisgICAgeworICAgICAgICBjb25z
dCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBs
aW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworICAgICAgICBjb25zdCBjYW5kaWRhdGVz
U3RhcnRpbmdXaXRoS2V5ID0gW107CisgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXNDb250YWluaW5n
S2V5ID0gW107CisgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHsK
KyAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgp
LmluZGV4T2Yoa2V5LnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgaWYgKGtleSAmJiBzZWFy
Y2hSZXN1bHQgPT09IC0xKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKCFzZWFyY2hSZXN1bHQpCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlc1N0YXJ0aW5nV2l0
aEtleS5wdXNoKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Y2FuZGlkYXRlc0NvbnRhaW5pbmdLZXkucHVzaChjYW5kaWRhdGUpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2NhbmRpZGF0ZUxpc3QgPSBjYW5kaWRhdGVzU3RhcnRpbmdXaXRoS2V5LmNvbmNh
dChjYW5kaWRhdGVzQ29udGFpbmluZ0tleSkuc2xpY2UoMCwgdGhpcy5fbWF4Q2FuZGlkYXRlTGlz
dExlbmd0aCk7CisgICAgICAgIHRoaXMuX2NhbmRpZGF0ZUVsZW1lbnRMaXN0ID0gdGhpcy5fY2Fu
ZGlkYXRlTGlzdC5tYXAoKGNhbmRpZGF0ZSkgPT4geworICAgICAgICAgICAgY29uc3QgaXRlbSA9
IGxpbmsoY2FuZGlkYXRlLCAoKSA9PiBudWxsKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgdXNlICdvbmxpY2snIGNhbGxiYWNrIHByb3ZpZGVkIGJ5ICdDb21wb25lbnRCYXNlLmNy
ZWF0ZUxpbmsnLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAvLyAnYmx1cicg
ZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlICdvbmxpY2snLCB3ZSBoYXZlIHRvIHVzZSAn
bW91c2Vkb3duJyBpbnN0ZWFkLgorICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdt
b3VzZWRvd24nLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbign
dXBkYXRlJywgY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGknLCBp
dGVtKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29u
dGVudCgnY2FuZGlkYXRlLWxpc3QnKSwgdGhpcy5fY2FuZGlkYXRlRWxlbWVudExpc3QpOworICAg
IH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8
ZGl2IGlkPSdjb21ib3gtYm94Jz4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ndGV4dC1maWVsZCc+
PC9pbnB1dD4KKyAgICAgICAgICAgIDx1bCBpZD0iY2FuZGlkYXRlLWxpc3QiPjwvdWw+CisgICAg
ICAgIDwvZGl2PmA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBgCisgICAgICAgICAgICBkaXYgeworICAgICAgICAgICAgICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEuNHJlbTsKKyAgICAgICAg
ICAgICAgICBsZWZ0OiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bDplbXB0eSB7
CisgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdWwgeworICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXMg
ZWFzZS1pbjsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMC4xcmVtIDAuM3JlbTsKKyAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwor
ICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cisg
ICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICB0
b3A6IDEuNXJlbTsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjJyZW07CisgICAg
ICAgICAgICAgICAgei1pbmRleDogMTA7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogOC41cmVtOworICAgICAgICAgICAgICAg
IG1heC1oZWlnaHQ6IDEwcmVtOworICAgICAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBsaSB7CisgICAgICAgICAgICAgICAgdGV4dC1hbGln
bjogbGVmdDsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGk6aG92ZXIsCisgICAgICAg
ICAgICBsaS5zZWxlY3RlZCB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMDQs
IDE1MywgNTEsIDAuMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpIGEgeworICAg
ICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgICAgICAgICAgICBmb250
LXNpemU6IDAuOHJlbTsKKyAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAg
ICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYDsKKyAgICB9
Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY29tYm8tYm94JywgQ29tYm9Cb3gp
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5q
cwppbmRleCA0NjkzODAxOWNiMzVhMjgwOTRlN2YyMDhlMjMyZGY0ZDIwNTY5ZjJiLi5jNDljZjdi
MTljMDQ3MDgwNGQxYTkwNTBjMDA5YjFhNTMwZDVlZDQyIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3Jv
dXAtZm9ybS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5qcwpAQCAtMSw0ICsxLDMgQEAKLQog
Y2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewog
CiAgICAgY29uc3RydWN0b3IoKQpAQCAtNywxNSArNiwyMCBAQCBjbGFzcyBDdXN0b21pemFibGVU
ZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIHRoaXMuX2NvbW1p
dFNldE1hcCA9IG51bGw7CiAgICAgICAgIHRoaXMuX25hbWUgPSBudWxsOwogICAgICAgICB0aGlz
Ll9pc0N1c3RvbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAg
PSB7fTsKLQotICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlTGF6aWx5ID0g
bmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFi
bGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcCA9IG51bGw7CisgICAgICAgIHRoaXMuX2No
ZWNrZWRMYWJlbEJ5UG9zaXRpb24gPSBudWxsOworICAgICAgICB0aGlzLl9oYXNJbmNvbXBsZXRl
T3duZWRSZXBvc2l0b3J5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZmV0Y2hpbmdDb21taXRQcm9t
aXNlcyA9IFtdOwogICAgIH0KIAogICAgIHNldENvbW1pdFNldE1hcChtYXApCiAgICAgewogICAg
ICAgICB0aGlzLl9jb21taXRTZXRNYXAgPSBtYXA7CiAgICAgICAgIHRoaXMuX2lzQ3VzdG9taXpl
ZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9mZXRjaGluZ0NvbW1pdFByb21pc2VzID0gW107Cisg
ICAgICAgIHRoaXMuX2NoZWNrZWRMYWJlbEJ5UG9zaXRpb24gPSBuZXcgTWFwOworICAgICAgICB0
aGlzLl9oYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5ID0gbmV3IE1hcDsKICAgICAgICAgdGhp
cy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKQEAgLTMyLDkgKzM2LDMzIEBAIGNsYXNzIEN1
c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAg
bmFtZUNvbnRyb2wub25pbnB1dCA9ICgpID0+IHsKICAgICAgICAgICAgIHRoaXMuX25hbWUgPSBu
YW1lQ29udHJvbC52YWx1ZTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgfTsKIAogICAgICAgICB0aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1s
aW5rJykub25jbGljayA9IHRoaXMuY3JlYXRlRXZlbnRIYW5kbGVyKCgpID0+IHsKKyAgICAgICAg
ICAgIGlmICghdGhpcy5faXNDdXN0b21pemVkKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2ZldGNoaW5nQ29tbWl0UHJvbWlzZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbW1pdFNldE1hcCA9IHRoaXMu
X2NvbW1pdFNldE1hcDsKKyAgICAgICAgICAgICAgICBjb25zdCBmZXRjaGluZ0NvbW1pdFByb21p
c2VzID0gW107CisgICAgICAgICAgICAgICAgdGhpcy5fY29tbWl0U2V0TWFwID0gbmV3IE1hcDsK
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIG9yaWdpbmFsQ29tbWl0U2V0TWFw
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZUNvbW1pdFNldCA9IG5l
dyBJbnRlcm1lZGlhdGVDb21taXRTZXQob3JpZ2luYWxDb21taXRTZXRNYXBbbGFiZWxdKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmV0Y2hpbmdDb21taXRQcm9taXNlcy5wdXNoKGludGVybWVkaWF0
ZUNvbW1pdFNldC5mZXRjaENvbW1pdExvZ3MoKSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2NvbW1pdFNldE1hcC5zZXQobGFiZWwsIGludGVybWVkaWF0ZUNvbW1pdFNldCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX2ZldGNoaW5nQ29tbWl0UHJvbWlzZXMg
PSBmZXRjaGluZ0NvbW1pdFByb21pc2VzOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UuYWxsKGZldGNoaW5nQ29tbWl0UHJvbWlzZXMpLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fZmV0Y2hpbmdDb21taXRQcm9taXNlcyAhPT0gZmV0Y2hpbmdDb21t
aXRQcm9taXNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5faXNDdXN0b21pemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fZmV0Y2hpbmdDb21taXRQcm9taXNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IGxhYmVsIGluIG9yaWdpbmFsQ29tbWl0U2V0TWFwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fY2hlY2tlZExhYmVsQnlQb3NpdGlvbi5zZXQobGFiZWwsIG5ldyBNYXAp
OworICAgICAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5faXNDdXN0b21pemVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIH0p
OwpAQCAtNDcsMTMgKzc1LDE0IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0
ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21taXRTZXRN
YXA7CiAKICAgICAgICAgY29uc3QgbWFwID0ge307Ci0gICAgICAgIGZvciAoY29uc3QgbGFiZWwg
aW4gdGhpcy5fY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbW1p
dFNldCA9IHRoaXMuX2NvbW1pdFNldE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGNv
bW1pdFNldF0gb2YgdGhpcy5fY29tbWl0U2V0TWFwKSB7CiAgICAgICAgICAgICBjb25zdCBjdXN0
b21Db21taXRTZXQgPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OwotICAgICAgICAgICAgZm9yIChsZXQg
cmVwb3NpdG9yeSBvZiB0aGlzLl9jb21taXRTZXRNYXBbbGFiZWxdLnJlcG9zaXRvcmllcygpKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSB0aGlzLl9yZXZpc2lvbkVk
aXRvck1hcFtsYWJlbF0uZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgZm9yIChjb25zdCBy
ZXBvc2l0b3J5IG9mIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IHJldmlzaW9uRWRpdG9yID0gdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAuZ2V0KGxhYmVs
KS5nZXQocmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocmV2aXNp
b25FZGl0b3IpOwotICAgICAgICAgICAgICAgIGN1c3RvbUNvbW1pdFNldC5zZXRSZXZpc2lvbkZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUpOworICAgICAgICAg
ICAgICAgIGNvbnN0IG93bmVyUmV2aXNpb24gPSB0aGlzLl9vd25lclJldmlzaW9uTWFwLmdldChs
YWJlbCkuZ2V0KHJlcG9zaXRvcnkpIHx8IG51bGw7CisKKyAgICAgICAgICAgICAgICBjdXN0b21D
b21taXRTZXQuc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIHJldmlzaW9uRWRp
dG9yLnZhbHVlLCBudWxsLCBvd25lclJldmlzaW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1hcFtsYWJlbF0gPSBjdXN0b21Db21taXRTZXQ7CiAgICAgICAgIH0KQEAgLTY3LDI0ICs5
NiwzOCBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3Vw
Rm9ybSB7CiAgICAgICAgIHRoaXMuY29udGVudCgnc3RhcnQtYnV0dG9uJykuZGlzYWJsZWQgPSAh
KHRoaXMuX2NvbW1pdFNldE1hcCAmJiB0aGlzLl9uYW1lKTsKICAgICAgICAgdGhpcy5jb250ZW50
KCdjdXN0b21pemUtbGluay1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gIXRoaXMuX2NvbW1p
dFNldE1hcCA/ICdub25lJyA6IG51bGw7CiAKLSAgICAgICAgdGhpcy5fcmVuZGVyQ3VzdG9tUmV2
aXNpb25UYWJsZUxhemlseS5ldmFsdWF0ZSh0aGlzLl9jb21taXRTZXRNYXAsIHRoaXMuX2lzQ3Vz
dG9taXplZCk7CisgICAgICAgIHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGUodGhpcy5f
Y29tbWl0U2V0TWFwLCB0aGlzLl9pc0N1c3RvbWl6ZWQpOwogICAgIH0KIAogICAgIF9yZW5kZXJD
dXN0b21SZXZpc2lvblRhYmxlKGNvbW1pdFNldE1hcCwgaXNDdXN0b21pemVkKQogICAgIHsKICAg
ICAgICAgaWYgKCFjb21taXRTZXRNYXAgfHwgIWlzQ3VzdG9taXplZCkgewogICAgICAgICAgICAg
dGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnY3VzdG9tLXRhYmxlJyksIFtdKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgY29uc3QgcmVwb3NpdG9yeVNldCA9IG5ldyBTZXQ7CisgICAgICAgIGNvbnN0IG93
bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5ID0gbmV3IE1hcDsKICAgICAgICAgY29uc3QgY29t
bWl0U2V0TGFiZWxzID0gW107Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307
Ci0gICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAg
ICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3Jp
ZXMoKSkKKyAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAgPSBuZXcgTWFwOworICAgICAg
ICB0aGlzLl9vd25lclJldmlzaW9uTWFwID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBb
bGFiZWwsIGNvbW1pdFNldF0gb2YgY29tbWl0U2V0TWFwKSB7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0LmhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcygpKSB7
CiAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSBjb21taXRTZXRNYXAuZ2V0KGxhYmVs
KS5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKworICAg
ICAgICAgICAgICAgIGlmICghb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFvd25lZFJlcG9zaXRvcmllc0J5UmVw
b3NpdG9yeS5oYXMocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgICAgIG93bmVkUmVwb3Np
dG9yaWVzQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBuZXcgU2V0KTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBvd25lZFJlcG9zaXRvcnlTZXQgPSBvd25lZFJlcG9zaXRvcmllc0J5UmVwb3Np
dG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvd25lZFJl
cG9zaXRvcnkgb2Ygb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAgIG93bmVk
UmVwb3NpdG9yeVNldC5hZGQob3duZWRSZXBvc2l0b3J5KQorICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY29tbWl0U2V0TGFiZWxzLnB1c2gobGFiZWwpOwotICAgICAgICAgICAgdGhpcy5fcmV2
aXNpb25FZGl0b3JNYXBbbGFiZWxdID0gbmV3IE1hcDsKKyAgICAgICAgICAgIHRoaXMuX3Jldmlz
aW9uRWRpdG9yTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CisgICAgICAgICAgICB0aGlzLl9vd25l
clJldmlzaW9uTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CiAgICAgICAgIH0KIAogICAgICAgICBj
b25zdCByZXBvc2l0b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVz
V2l0aFVSTChBcnJheS5mcm9tKHJlcG9zaXRvcnlTZXQudmFsdWVzKCkpKTsKQEAgLTkyLDM0ICsx
MzUsMTQ0IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3Jv
dXBGb3JtIHsKICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnY3VzdG9t
LXRhYmxlJyksIFsKICAgICAgICAgICAgIGVsZW1lbnQoJ3RoZWFkJywKICAgICAgICAgICAgICAg
ICBlbGVtZW50KCd0cicsCi0gICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsICdSZXBv
c2l0b3J5JyksIGNvbW1pdFNldExhYmVscy5tYXAoKGxhYmVsKSA9PiBlbGVtZW50KCd0ZCcsIHtj
b2xzcGFuOiBjb21taXRTZXRMYWJlbHMubGVuZ3RoICsgMX0sIGxhYmVsKSldKSksCi0gICAgICAg
ICAgICBlbGVtZW50KCd0Ym9keScsCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeUxpc3QubWFw
KChyZXBvc2l0b3J5KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW2Vs
ZW1lbnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKV07Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2VsbHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRN
YXAsIHJlcG9zaXRvcnksIGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50KCd0cicsIGNlbGxzKTsKLSAgICAgICAgICAgICAgICB9KSldKTsKLQotICAgICAgICByZXR1
cm4gcmVwb3NpdG9yeUxpc3Q7CisgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsIHtj
b2xzcGFuOiAyfSwgJ1JlcG9zaXRvcnknKSwgY29tbWl0U2V0TGFiZWxzLm1hcCgobGFiZWwpID0+
IGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldExhYmVscy5sZW5ndGggKyAxfSwgbGFi
ZWwpKSwgZWxlbWVudCgndGQnKV0pKSwKKyAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFRhYmxl
Qm9keUxpc3QocmVwb3NpdG9yeUxpc3QsIGNvbW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3JpZXNC
eVJlcG9zaXRvcnksIHRoaXMuX2hhc0luY29tcGxldGVPd25lZFJlcG9zaXRvcnkpXSk7CisgICAg
fQorCisgICAgX2NvbnN0cnVjdFRhYmxlQm9keUxpc3QocmVwb3NpdG9yeUxpc3QsIGNvbW1pdFNl
dE1hcCwgb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnksIGhhc0luY29tcGxldGVPd25lZFJl
cG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCB0YWJsZUJvZHlMaXN0ID0gW107CisgICAgICAg
IGZvcihjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcnlMaXN0KSB7CisgICAgICAgICAgICBj
b25zdCByb3dzID0gW107CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRTcGVjaWZpZXNP
d25lckNvbW1pdCA9IEFycmF5LmZyb20oY29tbWl0U2V0TWFwLnZhbHVlcygpKS5ldmVyeSgoY29t
bWl0U2V0KSA9PiBjb21taXRTZXQub3duc0NvbW1pdHNGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkp
KTsKKyAgICAgICAgICAgIGNvbnN0IGhhc0luY29tcGxldGVSb3cgPSBoYXNJbmNvbXBsZXRlT3du
ZWRSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IG93bmVkUmVw
b3NpdG9yaWVzID0gb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkp
OworCisgICAgICAgICAgICByb3dzLnB1c2godGhpcy5fY29uc3RydWN0VGFibGVSb3dGb3JDb21t
aXRzV2l0aG91dE93bmVyKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgYWxsQ29tbWl0U2V0U3Bl
Y2lmaWVzT3duZXJDb21taXQsIGhhc0luY29tcGxldGVPd25lZFJlcG9zaXRvcnkpKTsKKworICAg
ICAgICAgICAgaWYgKCghb3duZWRSZXBvc2l0b3JpZXMgfHwgIW93bmVkUmVwb3NpdG9yaWVzLnNp
emUpICYmICFoYXNJbmNvbXBsZXRlUm93KSB7CisgICAgICAgICAgICAgICAgdGFibGVCb2R5TGlz
dC5wdXNoKGVsZW1lbnQoJ3Rib2R5Jywgcm93cykpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGNvbnN0IG93bmVkUmVwb3NpdG9y
eSBvZiBvd25lZFJlcG9zaXRvcmllcykKKyAgICAgICAgICAgICAgICByb3dzLnB1c2godGhpcy5f
Y29uc3RydWN0VGFibGVSb3dGb3JDb21taXRzV2l0aE93bmVyKGNvbW1pdFNldE1hcCwgb3duZWRS
ZXBvc2l0b3J5LCByZXBvc2l0b3J5KSk7CisKKyAgICAgICAgICAgIGlmIChoYXNJbmNvbXBsZXRl
Um93KSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IEFycmF5LmZyb20oY29tbWl0
U2V0TWFwLnZhbHVlcygpKS5tYXAoKGNvbW1pdFNldCkgPT4gY29tbWl0U2V0LmNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdERpZmYg
PSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzKC4uLmNvbW1p
dHMpOworICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0aGlzLl9jb25zdHJ1Y3RUYWJsZVJvd0Zv
ckluY29tcGxldGVPd25lZENvbW1pdHMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBjb21taXRE
aWZmKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZUJvZHlMaXN0LnB1c2goZWxl
bWVudCgndGJvZHknLCByb3dzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhYmxlQm9k
eUxpc3Q7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRP
d25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIG93bnNSZXBvc2l0b3JpZXMsIGhhc0luY29t
cGxldGVPd25lZFJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29t
cG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50
KCd0aCcsIHtjb2xzcGFuOiAyfSwgcmVwb3NpdG9yeS5sYWJlbCgpKV07CisKKyAgICAgICAgZm9y
IChjb25zdCBsYWJlbCBvZiBjb21taXRTZXRNYXAua2V5cygpKQorICAgICAgICAgICAgY2VsbHMu
cHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJl
cG9zaXRvcnksIGxhYmVsLCBudWxsLCBvd25zUmVwb3NpdG9yaWVzKSk7CisKKyAgICAgICAgaWYg
KG93bnNSZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IHBsdXNCdXR0b24gPSBuZXcg
UGx1c0J1dHRvbihoYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KSk7
CisgICAgICAgICAgICBwbHVzQnV0dG9uLmxpc3RlblRvQWN0aW9uKCdhY3RpdmF0ZScsICgpID0+
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9oYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5LnNl
dChyZXBvc2l0b3J5LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3Rk
JywgcGx1c0J1dHRvbikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNlbGxzLnB1c2go
ZWxlbWVudCgndGQnKSk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOwor
ICAgIH0KKworICAgIF9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRoT3duZXIoY29tbWl0
U2V0TWFwLCByZXBvc2l0b3J5LCBvd25lclJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25z
dCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBj
ZWxscyA9IFtlbGVtZW50KCd0ZCcsIHtjbGFzczogJ293bmVyLXJlcG9zaXRvcnktbGFiZWwnfSks
IGVsZW1lbnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKV07CisgICAgICAgIGNvbnN0IG1pbnVz
QnV0dG9uID0gbmV3IE1pbnVzQnV0dG9uKCk7CisKKyAgICAgICAgZm9yIChjb25zdCBsYWJlbCBv
ZiBjb21taXRTZXRNYXAua2V5cygpKQorICAgICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25z
dHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVs
LCBvd25lclJlcG9zaXRvcnksIGZhbHNlKSk7CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVu
VG9BY3Rpb24oJ2FjdGl2YXRlJywgKCkgPT4geworICAgICAgICAgICAgZm9yIChjb25zdCBjb21t
aXRTZXQgb2YgY29tbWl0U2V0TWFwLnZhbHVlcygpKQorICAgICAgICAgICAgICAgIGNvbW1pdFNl
dC5yZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCisgICAgICAgICAgICB0aGlz
LmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAgICAgY2VsbHMucHVzaChlbGVt
ZW50KCd0ZCcsIG1pbnVzQnV0dG9uKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50KCd0cicsIGNl
bGxzKTsKICAgICB9CiAKLSAgICBfY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0
U2V0TWFwLCByZXBvc2l0b3J5LCByb3dMYWJlbCkKKyAgICBfY29uc3RydWN0VGFibGVSb3dGb3JJ
bmNvbXBsZXRlT3duZWRDb21taXRzKGNvbW1pdFNldE1hcCwgb3duZXJSZXBvc2l0b3J5LCBjb21t
aXREaWZmKQogICAgIHsKICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3Jl
YXRlRWxlbWVudDsKLSAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSBlbGVtZW50KCdpbnB1
dCcpOworICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uQ291bnQgPSAgY29tbWl0U2V0TWFwLnNp
emU7CisgICAgICAgIGNvbnN0IG51bWJlck9mQ2VsbHNQZXJDb25maWd1cmF0aW9uID0gY29uZmln
dXJhdGlvbkNvdW50ICsgMTsKKyAgICAgICAgY29uc3QgY2hhbmdlZFJlcG9zaXRvcmllcyA9IEFy
cmF5LmZyb20oY29tbWl0RGlmZi5rZXlzKCkpOworICAgICAgICBjb25zdCBtaW51c0J1dHRvbiA9
IG5ldyBNaW51c0J1dHRvbigpOworICAgICAgICBjb25zdCBjb21ib0JveCA9IG5ldyBDb21ib0Jv
eChjaGFuZ2VkUmVwb3NpdG9yaWVzLm1hcCgocmVwb3NpdG9yeSkgPT4gcmVwb3NpdG9yeS5uYW1l
KCkpLnNvcnQoKSk7CiAKLSAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXBbcm93TGFiZWxd
LnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvcik7CisgICAgICAgIGNvbWJvQm94Lmxpc3Rl
blRvQWN0aW9uKCd1cGRhdGUnLCAocmVwb3NpdG9yeU5hbWUpID0+IHsKKyAgICAgICAgICAgIGNv
bnN0IHRhcmdldFJlcG9zaXRvcnkgPSBjaGFuZ2VkUmVwb3NpdG9yaWVzLmZpbmQoKHJlcG9zaXRv
cnkpID0+IHJlcG9zaXRvcnlOYW1lID09PSByZXBvc2l0b3J5Lm5hbWUoKSk7CisgICAgICAgICAg
ICBjb25zdCBvd25lZENvbW1pdERpZmZlcmVuY2VGb3JSZXBvc2l0b3J5ID0gQXJyYXkuZnJvbShj
b21taXREaWZmLmdldCh0YXJnZXRSZXBvc2l0b3J5KS52YWx1ZXMoKSk7CisgICAgICAgICAgICBj
b25zdCBjb21taXRTZXRMaXN0ID0gQXJyYXkuZnJvbShjb21taXRTZXRNYXAudmFsdWVzKCkpOwor
CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChvd25lZENvbW1pdERpZmZlcmVuY2VGb3JSZXBv
c2l0b3J5Lmxlbmd0aCA9PT0gY29tbWl0U2V0TGlzdC5sZW5ndGgpOworICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBjb21taXRTZXRMaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
ICAgIGNvbW1pdFNldExpc3RbaV0uc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeSh0YXJnZXRSZXBvc2l0
b3J5LCBvd25lZENvbW1pdERpZmZlcmVuY2VGb3JSZXBvc2l0b3J5W2ldKTsKKyAgICAgICAgICAg
IGZvciAoY29uc3QgY29tbWl0U2V0IG9mIGNvbW1pdFNldE1hcC52YWx1ZXMoKSkKKyAgICAgICAg
ICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeSh0YXJnZXRSZXBvc2l0b3J5
LCBvd25lZENvbW1pdHNJdGVyYXRvci5uZXh0KCkudmFsdWUpOworICAgICAgICAgICAgdGhpcy5f
aGFzSW5jb21wbGV0ZU93bmVkUmVwb3NpdG9yeS5zZXQob3duZXJSZXBvc2l0b3J5LCBmYWxzZSk7
CisgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKworICAg
ICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50KCd0ZCcsIHtjbGFzczogJ293bmVyLXJlcG9zaXRv
cnktbGFiZWwnfSksIGVsZW1lbnQoJ3RoJywgY29tYm9Cb3gpLCBlbGVtZW50KCd0ZCcsIHtjb2xz
cGFuOiBjb25maWd1cmF0aW9uQ291bnQgKiBudW1iZXJPZkNlbGxzUGVyQ29uZmlndXJhdGlvbn0p
XTsKKworICAgICAgICBtaW51c0J1dHRvbi5saXN0ZW5Ub0FjdGlvbignYWN0aXZhdGUnLCAoKSA9
PiB7CisgICAgICAgICAgICB0aGlzLl9oYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5LnNldChv
d25lclJlcG9zaXRvcnksIGZhbHNlKTsKKyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVy
KCk7CisgICAgICAgIH0pOworICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3RkJywgbWludXNC
dXR0b24pKTsKKworICAgICAgICByZXR1cm4gZWxlbWVudCgndHInLCBjZWxscyk7CisgICAgfQor
CisgICAgX2NvbnN0cnVjdFJldmlzaW9uUmFkaW9CdXR0b25zKGNvbW1pdFNldE1hcCwgcmVwb3Np
dG9yeSwgcm93TGFiZWwsIG93bmVyUmVwb3NpdG9yeSwgb3duc1JlcG9zaXRvcmllcykKKyAgICB7
CisgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBDb21wb25lbnRCYXNlLmNyZWF0ZUVsZW1lbnQ7Cisg
ICAgICAgIGNvbnN0IHJldmlzaW9uRWRpdG9yID0gZWxlbWVudCgnaW5wdXQnLCB7ZGlzYWJsZWQ6
ICEhb3duZXJSZXBvc2l0b3J5LAorICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsKKyAgICAg
ICAgICAgICAgICBpZiAoIW93bnNSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBjb21taXRTZXRNYXAuZ2V0KHJvd0xhYmVsKS51cGRhdGVS
ZXZpc2lvbkZvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvci52YWx1
ZSkuY2F0Y2goCisgICAgICAgICAgICAgICAgICAgICgpID0+IHJldmlzaW9uRWRpdG9yLnZhbHVl
ID0gJycpOworICAgICAgICAgICAgfX0pOworCisgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9y
TWFwLmdldChyb3dMYWJlbCkuc2V0KHJlcG9zaXRvcnksIHJldmlzaW9uRWRpdG9yKTsKIAogICAg
ICAgICBjb25zdCBub2RlcyA9IFtdOwotICAgICAgICBmb3IgKGxldCBsYWJlbFRvQ2hvb3NlIGlu
IGNvbW1pdFNldE1hcCkgewotICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0U2V0TWFw
W2xhYmVsVG9DaG9vc2VdLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7Ci0gICAgICAg
ICAgICBjb25zdCBjaGVja2VkID0gbGFiZWxUb0Nob29zZSA9PSByb3dMYWJlbDsKKyAgICAgICAg
Zm9yIChjb25zdCBsYWJlbFRvQ2hvb3NlIG9mIGNvbW1pdFNldE1hcC5rZXlzKCkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1pdFNldE1hcC5nZXQobGFiZWxUb0Nob29zZSkuY29t
bWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRM
YWJlbCA9IHRoaXMuX2NoZWNrZWRMYWJlbEJ5UG9zaXRpb24uZ2V0KHJvd0xhYmVsKS5nZXQocmVw
b3NpdG9yeSkgfHwgcm93TGFiZWw7CisgICAgICAgICAgICBjb25zdCBjaGVja2VkID0gIGxhYmVs
VG9DaG9vc2UgPT0gY2hlY2tlZExhYmVsOwogICAgICAgICAgICAgY29uc3QgcmFkaW9CdXR0b24g
PSBlbGVtZW50KCdpbnB1dCcsIHt0eXBlOiAncmFkaW8nLCBuYW1lOiBgJHtyb3dMYWJlbH0tJHty
ZXBvc2l0b3J5LmlkKCl9LXJhZGlvYCwgY2hlY2tlZCwKLSAgICAgICAgICAgICAgICBvbmNoYW5n
ZTogKCkgPT4geyByZXZpc2lvbkVkaXRvci52YWx1ZSA9IGNvbW1pdCA/IGNvbW1pdC5yZXZpc2lv
bigpIDogJyc7IH19KTsKKyAgICAgICAgICAgICAgICBvbmNoYW5nZTogKCkgPT4geworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9jaGVja2VkTGFiZWxCeVBvc2l0aW9uLmdldChyb3dMYWJlbCku
c2V0KHJlcG9zaXRvcnksIGxhYmVsVG9DaG9vc2UpOworICAgICAgICAgICAgICAgICAgICByZXZp
c2lvbkVkaXRvci52YWx1ZSA9IGNvbW1pdCA/IGNvbW1pdC5yZXZpc2lvbigpIDogJyc7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21taXQgJiYgY29tbWl0Lm93bmVyQ29tbWl0KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9vd25lclJldmlzaW9uTWFwLmdldChyb3dMYWJlbCku
c2V0KHJlcG9zaXRvcnksIGNvbW1pdC5vd25lckNvbW1pdCgpLnJldmlzaW9uKCkpOworICAgICAg
ICAgICAgICAgIH19KTsKIAotICAgICAgICAgICAgaWYgKGNoZWNrZWQpCisgICAgICAgICAgICBp
ZiAoY2hlY2tlZCkgewogICAgICAgICAgICAgICAgIHJldmlzaW9uRWRpdG9yLnZhbHVlID0gY29t
bWl0ID8gY29tbWl0LnJldmlzaW9uKCkgOiAnJzsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWl0
ICYmIGNvbW1pdC5vd25lckNvbW1pdCgpKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9vd25l
clJldmlzaW9uTWFwLmdldChyb3dMYWJlbCkuc2V0KHJlcG9zaXRvcnksIGNvbW1pdC5vd25lckNv
bW1pdCgpLnJldmlzaW9uKCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZXMucHVz
aChlbGVtZW50KCd0ZCcsIGVsZW1lbnQoJ2xhYmVsJywgW3JhZGlvQnV0dG9uLCBsYWJlbFRvQ2hv
b3NlXSkpKTsKICAgICAgICAgfQogICAgICAgICBub2Rlcy5wdXNoKGVsZW1lbnQoJ3RkJywgcmV2
aXNpb25FZGl0b3IpKTsKQEAgLTEzOSw2ICsyOTIsMjEgQEAgY2xhc3MgQ3VzdG9taXphYmxlVGVz
dEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewogICAgICAgICAgICAgICAgIG1hcmdp
bjogMXJlbSAwOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRk
Lm93bmVyLXJlcG9zaXRvcnktbGFiZWwgeworICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IHNv
bGlkIDJweCB0cmFuc3BhcmVudDsKKyAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiBzb2xp
ZCAxcHggdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAycmVtOworICAg
ICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAjY3VzdG9tLXRhYmxlIHRyOmxhc3QtY2hpbGQgdGQub3duZXItcmVwb3NpdG9yeS1sYWJl
bCB7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICNkZGQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICNjdXN0b20tdGFibGUgdGggeworICAgICAgICAgICAg
ICAgIG1pbi13aWR0aDogMTJyZW07CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgICNjdXN0
b20tdGFibGUsCiAgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRkLAogICAgICAgICAgICAgI2N1
c3RvbS10YWJsZSB0aCB7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVi
bGljL3YzL2NvbXBvbmVudHMvbWludXMtYnV0dG9uLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYmQy
NzlkMzM4ZDAwMjMzYjRhNGE4OWQyMDA4OGQzNGU0ZDNkYjViCi0tLSAvZGV2L251bGwKKysrIGIv
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRv
bi5qcwpAQCAtMCwwICsxLDE3IEBACisKK2NsYXNzIE1pbnVzQnV0dG9uIGV4dGVuZHMgQnV0dG9u
QmFzZSB7CisgICAgY29uc3RydWN0b3IoZGlzYWJsZWQ9ZmFsc2UpCisgICAgeworICAgICAgICBz
dXBlcignbWludXMtYnV0dG9uJywgZGlzYWJsZWQpOworICAgIH0KKworICAgIHN0YXRpYyBidXR0
b25Db250ZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBgPGcgc3Ryb2tlPSJibGFjayIgc3Ry
b2tlLXdpZHRoPSIxMCIgaWQ9Imljb24iPgorICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAiIGN5
PSI1MCIgcj0iNDAiIGZpbGw9InRyYW5zcGFyZW50Ii8+CisgICAgICAgICAgICA8cG9seWdvbiBw
b2ludHM9IjI1LDUwIDc1LDUwIiAvPgorICAgICAgICA8L2c+YDsKKyAgICB9Cit9CisKK0NvbXBv
bmVudEJhc2UuZGVmaW5lRWxlbWVudCgnbWludXMtYnV0dG9uJywgTWludXNCdXR0b24pOwpkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293
bmVkLWNvbW1pdC12aWV3ZXIuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvb3duZWQtY29tbWl0LXZpZXdlci5qcwppbmRleCA2OGY3NDMzODViNDUwNWU5
ZWZlZDdkNGY0ZjA3ZGZjNmY1ZjEyZTEyLi41ZWMyZTZmN2UyMTA0ZTEwNTM0NGM2ZTMxOThjMTZh
ZTA0NTNkMmYzIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvb3duZWQtY29tbWl0LXZpZXdlci5qcworKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvb3duZWQtY29tbWl0LXZpZXdlci5qcwpAQCAt
NDMsNyArNDMsNyBAQCBjbGFzcyBPd25lZENvbW1pdFZpZXdlciBleHRlbmRzIENvbXBvbmVudEJh
c2UgewogICAgICAgICBpZiAoIXByZXZpb3VzT3duZWRDb21taXRzIHx8ICFjdXJyZW50T3duZWRD
b21taXRzKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IGRpZmZlcmVuY2Ug
PSBDb21taXRMb2cuZGlmZk93bmVkQ29tbWl0cyh0aGlzLl9wcmV2aW91c0NvbW1pdCwgdGhpcy5f
Y3VycmVudENvbW1pdCk7CisgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cub3du
ZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzKHRoaXMuX3ByZXZpb3VzQ29tbWl0LCB0
aGlzLl9jdXJyZW50Q29tbWl0KTsKICAgICAgICAgY29uc3Qgc29ydGVkUmVwb3NpdG9yaWVzID0g
UmVwb3NpdG9yeS5zb3J0QnlOYW1lKFsuLi5kaWZmZXJlbmNlLmtleXMoKV0pOwogICAgICAgICBj
b25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OwogCmRpZmYgLS1naXQg
YS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0
b24uanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1
cy1idXR0b24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQ5OGU2Mzk2NTA0NzIzODEyN2EzODE3NWI4ZWZlNDE1
ZDYzNmVkMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1dHRvbi5qcwpAQCAtMCwwICsxLDE4IEBACisKK2NsYXNz
IFBsdXNCdXR0b24gZXh0ZW5kcyBCdXR0b25CYXNlIHsKKyAgICBjb25zdHJ1Y3RvcihkaXNhYmxl
ZD1mYWxzZSkKKyAgICB7CisgICAgICAgIHN1cGVyKCdwbHVzLWJ1dHRvbicsIGRpc2FibGVkKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYnV0dG9uQ29udGVudCgpCisgICAgeworICAgICAgICByZXR1
cm4gYDxnIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMTAiIGlkPSJpY29uIj4KKyAgICAg
ICAgICAgIDxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxsPSJ0cmFuc3BhcmVudCIv
PgorICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI1MCwyNSA1MCw3NSIgLz4KKyAgICAgICAg
ICAgIDxwb2x5Z29uIHBvaW50cz0iMjUsNTAgNzUsNTAiIC8+CisgICAgICAgIDwvZz5gOworICAg
IH0KK30KKworQ29tcG9uZW50QmFzZS5kZWZpbmVFbGVtZW50KCdwbHVzLWJ1dHRvbicsIFBsdXNC
dXR0b24pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9p
bmRleC5odG1sIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1s
CmluZGV4IDFhMjFjMGY2NTc5OTMzOTZlMzk3YWYwMmZjYTc3MGUzOWExNDdkZDkuLjAyMzNmOTZm
ZWFlNzgzN2U4MmQ3MDQxMDI3NzYwZWE1ZTAxYmUzYmYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3Bl
cmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5kZXguaHRtbAorKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKQEAgLTk5LDYgKzk5LDkgQEAgUnVuIHRvb2xz
L2J1bmRsZS12My1zY3JpcHRzIHRvIHNwZWVkIHVwIHRoZSBsb2FkIHRpbWUgZm9yIHByb2R1Y3Rp
b24uYCk7CiAgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2N1c3RvbS1jb25maWd1cmF0
aW9uLXRlc3QtZ3JvdXAtZm9ybS5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJj
b21wb25lbnRzL2luc3RhbnQtZmlsZS11cGxvYWRlci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxz
Y3JpcHQgc3JjPSJjb21wb25lbnRzL2ZyZXNobmVzcy1pbmRpY2F0b3IuanMiPjwvc2NyaXB0Pgor
ICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9wbHVzLWJ1dHRvbi5qcyI+PC9zY3JpcHQ+
CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcyI+PC9zY3Jp
cHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2NvbWJvLWJveC5qcyI+PC9zY3Jp
cHQ+CiAKICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2UuanMiPjwvc2NyaXB0PgogICAg
ICAgICA8c2NyaXB0IHNyYz0icGFnZXMvcGFnZS1yb3V0ZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxv
Zy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1s
b2cuanMKaW5kZXggN2JlNDIxNDU2Y2FkZDVmYjMwZjNjM2MyYzU3MGNlMmViZGExNzI3MS4uMjEz
YmVmYmQ5M2JhNWZlNGNmNzRhODhmZjBmZmFmN2ZlZDNjZjQ4MiAxMDA2NDQKLS0tIGEvV2Vic2l0
ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qcworKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtbG9nLmpzCkBA
IC0xMiw2ICsxMiw4IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7
CiAgICAgICAgIGlmICh0aGlzLl9yZW1vdGVJZCkKICAgICAgICAgICAgIHRoaXMuZW5zdXJlTmFt
ZWRTdGF0aWNNYXAoJ3JlbW90ZUlkJylbdGhpcy5fcmVtb3RlSWRdID0gdGhpczsKICAgICAgICAg
dGhpcy5fb3duZWRDb21taXRzID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb3duZXJDb21taXQgPSBu
dWxsOworICAgICAgICB0aGlzLl9vd25lZENvbW1pdEJ5T3duZWRSZXBvc2l0b3J5ID0gbmV3IE1h
cDsKICAgICB9CiAKICAgICB1cGRhdGVTaW5nbGV0b24ocmF3RGF0YSkKQEAgLTM2LDEzICszOCwx
NyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIG1lc3Nh
Z2UoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydtZXNzYWdlJ107IH0KICAgICB1cmwoKSB7IHJl
dHVybiB0aGlzLl9yZXBvc2l0b3J5LnVybEZvclJldmlzaW9uKHRoaXMuX3Jhd0RhdGFbJ3Jldmlz
aW9uJ10pOyB9CiAgICAgb3duc0NvbW1pdHMoKSB7IHJldHVybiB0aGlzLl9yYXdEYXRhWydvd25z
Q29tbWl0cyddOyB9CisgICAgb3duZWRDb21taXRzKCkgeyByZXR1cm4gdGhpcy5fb3duZWRDb21t
aXRzOyB9CisgICAgb3duZXJDb21taXQoKSB7IHJldHVybiB0aGlzLl9vd25lckNvbW1pdDsgfQor
CisgICAgc2V0T3duZXJDb21taXRzKG93bmVyQ29tbWl0KSB7IHRoaXMuX293bmVyQ29tbWl0ID0g
b3duZXJDb21taXQ7IH0KIAogICAgIGxhYmVsKCkKICAgICB7Ci0gICAgICAgIHZhciByZXZpc2lv
biA9IHRoaXMucmV2aXNpb24oKTsKKyAgICAgICAgY29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlz
aW9uKCk7CiAgICAgICAgIGlmIChwYXJzZUludChyZXZpc2lvbikgPT0gcmV2aXNpb24pIC8vIGUu
Zy4gcjEyMzQ1CiAgICAgICAgICAgICByZXR1cm4gJ3InICsgcmV2aXNpb247Ci0gICAgICAgIGVs
c2UgaWYgKHJldmlzaW9uLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAorICAgICAgICBp
ZiAocmV2aXNpb24ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNoCiAgICAgICAgICAgICBy
ZXR1cm4gcmV2aXNpb24uc3Vic3RyaW5nKDAsIDgpOwogICAgICAgICByZXR1cm4gcmV2aXNpb247
CiAgICAgfQpAQCAtNTksMTIgKzY1LDEwIEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFN
b2RlbE9iamVjdCB7CiAKICAgICAgICAgY29uc3QgdG8gPSB0aGlzLnJldmlzaW9uKCk7CiAgICAg
ICAgIGNvbnN0IGZyb20gPSBwcmV2aW91c0NvbW1pdC5yZXZpc2lvbigpOwotICAgICAgICBsZXQg
ZnJvbVJldmlzaW9uRm9yVVJMID0gZnJvbTsKICAgICAgICAgbGV0IGxhYmVsID0gbnVsbDsKLSAg
ICAgICAgaWYgKHBhcnNlSW50KGZyb20pID09IGZyb20pIHsgLy8gZS5nLiByMTIzNDUuCi0gICAg
ICAgICAgICBmcm9tUmV2aXNpb25Gb3JVUkwgPSAocGFyc2VJbnQoZnJvbSkgKyAxKS50b1N0cmlu
ZzsKKyAgICAgICAgaWYgKHBhcnNlSW50KGZyb20pID09IGZyb20pLy8gZS5nLiByMTIzNDUuCiAg
ICAgICAgICAgICBsYWJlbCA9IGByJHtmcm9tfS1yJHt0aGlzLnJldmlzaW9uKCl9YDsKLSAgICAg
ICAgfSBlbHNlIGlmICh0by5sZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKKyAgICAgICAg
ZWxzZSBpZiAodG8ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNoCiAgICAgICAgICAgICBs
YWJlbCA9IGAke2Zyb20uc3Vic3RyaW5nKDAsIDgpfS4uJHt0by5zdWJzdHJpbmcoMCwgOCl9YDsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGFiZWwgPSBgJHtmcm9tfSAtICR7dG99YDsKQEAg
LTg2LDYgKzkwLDggQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsK
ICAgICAgICAgfSk7CiAgICAgfQogCisgICAgb3duZWRDb21taXRGb3JPd25lZFJlcG9zaXRvcnko
b3duZWRSZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lZENvbW1pdEJ5T3duZWRSZXBvc2l0
b3J5LmdldChvd25lZFJlcG9zaXRvcnkpOyB9CisKICAgICBmZXRjaE93bmVkQ29tbWl0cygpCiAg
ICAgewogICAgICAgICBpZiAoIXRoaXMucmVwb3NpdG9yeSgpLm93bmVkUmVwb3NpdG9yaWVzKCkp
CkBAIC05NCwxMSArMTAwLDE3IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9i
amVjdCB7CiAgICAgICAgIGlmICghdGhpcy5vd25zQ29tbWl0cygpKQogICAgICAgICAgICAgcmV0
dXJuIFByb21pc2UucmVqZWN0KCk7CiAKLSAgICAgICAgaWYgKHRoaXMuX293bmVkQ29tbWl0cykK
KyAgICAgICAgaWYgKHRoaXMuX293bmVkQ29tbWl0cykgeworICAgICAgICAgICAgdGhpcy5fb3du
ZWRDb21taXRzLmZvckVhY2goKG93bmVkQ29tbWl0KSA9PiBvd25lZENvbW1pdC5zZXRPd25lckNv
bW1pdHModGhpcykpOwogICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9v
d25lZENvbW1pdHMpOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIENvbW1pdExvZy5jYWNo
ZWRGZXRjaChgLi4vYXBpL2NvbW1pdHMvJHt0aGlzLnJlcG9zaXRvcnkoKS5pZCgpfS9vd25lZC1j
b21taXRzP293bmVyLXJldmlzaW9uPSR7ZXNjYXBlKHRoaXMucmV2aXNpb24oKSl9YCkudGhlbigo
ZGF0YSkgPT4gewogICAgICAgICAgICAgdGhpcy5fb3duZWRDb21taXRzID0gQ29tbWl0TG9nLl9j
b25zdHJ1Y3RGcm9tUmF3RGF0YShkYXRhKTsKKyAgICAgICAgICAgIHRoaXMuX293bmVkQ29tbWl0
cy5mb3JFYWNoKChvd25lZENvbW1pdCkgPT4geworICAgICAgICAgICAgICAgIG93bmVkQ29tbWl0
LnNldE93bmVyQ29tbWl0cyh0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9vd25lZENvbW1p
dEJ5T3duZWRSZXBvc2l0b3J5LnNldChvd25lZENvbW1pdC5yZXBvc2l0b3J5KCksIG93bmVkQ29t
bWl0KTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX293bmVkQ29t
bWl0czsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtMTExLDI1ICsxMjMsMjcgQEAgY2xhc3MgQ29t
bWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIG93bmVkQ29t
bWl0TWFwOwogICAgIH0KIAotICAgIHN0YXRpYyBkaWZmT3duZWRDb21taXRzKHByZXZpb3VzQ29t
bWl0LCBjdXJyZW50Q29tbWl0KQorICAgIHN0YXRpYyBvd25lZENvbW1pdERpZmZlcmVuY2VGb3JP
d25lckNvbW1pdHMoLi4uY29tbWl0cykKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHBy
ZXZpb3VzQ29tbWl0KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoY3VycmVudENvbW1pdCk7Ci0g
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHByZXZpb3VzQ29tbWl0Ll9vd25lZENvbW1pdHMpOwotICAg
ICAgICBjb25zb2xlLmFzc2VydChjdXJyZW50Q29tbWl0Ll9vd25lZENvbW1pdHMpOwotCi0gICAg
ICAgIGNvbnN0IHByZXZpb3VzT3duZWRDb21taXRNYXAgPSBwcmV2aW91c0NvbW1pdC5fYnVpbGRP
d25lZENvbW1pdE1hcCgpOwotICAgICAgICBjb25zdCBjdXJyZW50T3duZWRDb21taXRNYXAgPSBj
dXJyZW50Q29tbWl0Ll9idWlsZE93bmVkQ29tbWl0TWFwKCk7Ci0gICAgICAgIGNvbnN0IG93bmVk
Q29tbWl0UmVwb3NpdG9yaWVzID0gbmV3IFNldChbLi4uY3VycmVudE93bmVkQ29tbWl0TWFwLmtl
eXMoKSwgLi4ucHJldmlvdXNPd25lZENvbW1pdE1hcC5rZXlzKCldKTsKLSAgICAgICAgY29uc3Qg
ZGlmZmVyZW5jZSA9IG5ldyBNYXA7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdHMubGVu
Z3RoID49IDIpOworCisgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzID0gbmV3
IFNldDsKKyAgICAgICAgY29uc3Qgb3duZWRDb21taXRNYXBMaXN0ID0gY29tbWl0cy5tYXAoKGNv
bW1pdCkgPT4geworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoY29tbWl0KTsKKyAgICAgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdC5fb3duZWRDb21taXRzKTsKKyAgICAgICAgICAgIGNv
bnN0IG93bmVkQ29tbWl0TWFwID0gY29tbWl0Ll9idWlsZE93bmVkQ29tbWl0TWFwKCk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2Ygb3duZWRDb21taXRNYXAua2V5cygpKQor
ICAgICAgICAgICAgICAgIG93bmVkQ29tbWl0UmVwb3NpdG9yaWVzLmFkZChyZXBvc2l0b3J5KTsK
KyAgICAgICAgICAgIHJldHVybiBvd25lZENvbW1pdE1hcDsKKyAgICAgICAgfSk7CiAKKyAgICAg
ICAgY29uc3QgZGlmZmVyZW5jZSA9IG5ldyBNYXA7CiAgICAgICAgIG93bmVkQ29tbWl0UmVwb3Np
dG9yaWVzLmZvckVhY2goKG93bmVkQ29tbWl0UmVwb3NpdG9yeSkgPT4gewotICAgICAgICAgICAg
Y29uc3QgY3VycmVudFJldmlzaW9uID0gY3VycmVudE93bmVkQ29tbWl0TWFwLmdldChvd25lZENv
bW1pdFJlcG9zaXRvcnkpOwotICAgICAgICAgICAgY29uc3QgcHJldmlvdXNSZXZpc2lvbiA9IHBy
ZXZpb3VzT3duZWRDb21taXRNYXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSk7Ci0gICAgICAg
ICAgICBpZiAoY3VycmVudFJldmlzaW9uICE9IHByZXZpb3VzUmV2aXNpb24pCi0gICAgICAgICAg
ICAgICAgZGlmZmVyZW5jZS5zZXQob3duZWRDb21taXRSZXBvc2l0b3J5LCBbcHJldmlvdXNSZXZp
c2lvbiwgY3VycmVudFJldmlzaW9uXSk7CisgICAgICAgICAgICBjb25zdCBvd25lZENvbW1pdHMg
PSBvd25lZENvbW1pdE1hcExpc3QubWFwKChvd25lZENvbW1pdE1hcCkgPT4gb3duZWRDb21taXRN
YXAuZ2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSkpOworICAgICAgICAgICAgY29uc3QgdW5pcXVl
T3duZWRDb21taXRzID0gbmV3IFNldChvd25lZENvbW1pdHMpOworICAgICAgICAgICAgaWYgKHVu
aXF1ZU93bmVkQ29tbWl0cy5zaXplID4gMSkKKyAgICAgICAgICAgICAgICBkaWZmZXJlbmNlLnNl
dChvd25lZENvbW1pdFJlcG9zaXRvcnksIG93bmVkQ29tbWl0cyk7CiAgICAgICAgIH0pOwotCiAg
ICAgICAgIHJldHVybiBkaWZmZXJlbmNlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcyBiL1dlYnNpdGVz
L3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKaW5kZXggYjE3
OGFjODBlNTIzZDQwYWZmMWNlZDJmMjk3NDQ2MDk4MjY1NmVmNy4uNTczYzQ2MjFhMGNlNTg0Yjdi
Y2Y3MmMyOTZkNTMwZjE0MWJiYmEzNiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcworKysgYi9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCkBAIC03MCw4ICs3MCw4IEBA
IGNsYXNzIENvbW1pdFNldCBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgY29tbWl0Rm9y
UmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRN
YXAuZ2V0KHJlcG9zaXRvcnkpOyB9CiAgICAgb3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpIHsgcmV0dXJuIHRoaXMuX3JlcG9zaXRvcnlUb0NvbW1pdE93bmVyTWFwLmdldChyZXBv
c2l0b3J5KTsgfQogICAgIHRvcExldmVsUmVwb3NpdG9yaWVzKCkgeyByZXR1cm4gUmVwb3NpdG9y
eS5zb3J0QnlOYW1lUHJlZmVycmluZ09uZXNXaXRoVVJMKHRoaXMuX3JlcG9zaXRvcmllcy5maWx0
ZXIoKHJlcG9zaXRvcnkpID0+ICF0aGlzLm93bmVyUmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9z
aXRvcnkpKSk7IH0KLQogICAgIG93bmVkUmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KHJl
cG9zaXRvcnkpIHsgcmV0dXJuIHRoaXMuX293bmVyUmVwb3NpdG9yeVRvT3duZWRSZXBvc2l0b3Jp
ZXNNYXAuZ2V0KHJlcG9zaXRvcnkpOyB9CisgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0
b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRNYXAuZ2V0KHJlcG9zaXRvcnkp
OyB9CiAKICAgICByZXZpc2lvbkZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKICAgICB7CkBAIC0y
NDgsOCArMjQ4LDEwMyBAQCBjbGFzcyBDdXN0b21Db21taXRTZXQgewogICAgIH0KIH0KIAorY2xh
c3MgSW50ZXJtZWRpYXRlQ29tbWl0U2V0IHsKKworICAgIGNvbnN0cnVjdG9yKGNvbW1pdFNldCkK
KyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdFNldCBpbnN0YW5jZW9mIENvbW1p
dFNldCk7CisgICAgICAgIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeSA9IG5ldyBNYXA7CisgICAg
ICAgIHRoaXMuX293bmVyVG9Pd25lZFJlcG9zaXRvcmllcyA9IG5ldyBNYXA7CisgICAgICAgIHRo
aXMuX2ZldGNoaW5nUHJvbWlzZUJ5UmVwb3NpdG9yeSA9IG5ldyBNYXA7CisKKyAgICAgICAgZm9y
IChjb25zdCByZXBvc2l0b3J5IG9mIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSkKKyAgICAgICAg
ICAgIHRoaXMuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBjb21taXRTZXQuY29t
bWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSwgY29tbWl0U2V0Lm93bmVyQ29tbWl0Rm9yUmVw
b3NpdG9yeShyZXBvc2l0b3J5KSk7CisgICAgfQorCisgICAgZmV0Y2hDb21taXRMb2dzKCkKKyAg
ICB7CisgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZXMgPSBbXTsKKyAgICAgICAgZm9yIChj
b25zdCBbcmVwb3NpdG9yeSwgY29tbWl0XSBvZiB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkpCisg
ICAgICAgICAgICBmZXRjaGluZ1Byb21pc2VzLnB1c2godGhpcy5fZmV0Y2hDb21taXRMb2dBbmRP
d25lZENvbW1pdHMocmVwb3NpdG9yeSwgY29tbWl0LnJldmlzaW9uKCkpKTsKKyAgICAgICAgcmV0
dXJuIFByb21pc2UuYWxsKGZldGNoaW5nUHJvbWlzZXMpOworICAgIH0KKworICAgIF9mZXRjaENv
bW1pdExvZ0FuZE93bmVkQ29tbWl0cyhyZXBvc2l0b3J5LCByZXZpc2lvbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBDb21taXRMb2cuZmV0Y2hGb3JTaW5nbGVSZXZpc2lvbihyZXBvc2l0b3J5LCBy
ZXZpc2lvbikudGhlbigoY29tbWl0cykgPT4geworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQo
Y29tbWl0cy5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gY29tbWl0
c1swXTsKKyAgICAgICAgICAgIGlmICghY29tbWl0Lm93bnNDb21taXRzKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbW1pdDsKKyAgICAgICAgICAgIHJldHVybiBjb21taXQuZmV0Y2hPd25l
ZENvbW1pdHMoKS50aGVuKCgpID0+IGNvbW1pdCk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHVwZGF0ZVJldmlzaW9uRm9yT3duZXJSZXBvc2l0b3J5KHJlcG9zaXRvcnksIHJldmlzaW9uKQor
ICAgIHsKKyAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gdGhpcy5fZmV0Y2hDb21taXRM
b2dBbmRPd25lZENvbW1pdHMocmVwb3NpdG9yeSwgcmV2aXNpb24pOworICAgICAgICB0aGlzLl9m
ZXRjaGluZ1Byb21pc2VCeVJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnksIGZldGNoaW5nUHJvbWlz
ZSk7CisgICAgICAgIHJldHVybiBmZXRjaGluZ1Byb21pc2UudGhlbigoY29tbWl0KSA9PiB7Cisg
ICAgICAgICAgICBjb25zdCBjdXJyZW50RmV0Y2hpbmdQcm9taXNlID0gdGhpcy5fZmV0Y2hpbmdQ
cm9taXNlQnlSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50RmV0Y2hpbmdQcm9taXNlICE9PSBmZXRjaGluZ1Byb21pc2UpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgdGhpcy5fZmV0Y2hpbmdQcm9taXNlQnlSZXBvc2l0b3J5LnNl
dChyZXBvc2l0b3J5LCBudWxsKTsKKyAgICAgICAgICAgIHRoaXMuc2V0Q29tbWl0Rm9yUmVwb3Np
dG9yeShyZXBvc2l0b3J5LCBjb21taXQpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzZXRD
b21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIGNvbW1pdCwgb3duZXJDb21taXQgPSBudWxs
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQocmVwb3NpdG9yeSBpbnN0YW5jZW9mIFJl
cG9zaXRvcnkpOworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXQgaW5zdGFuY2VvZiBDb21t
aXRMb2cpOworICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuc2V0KHJlcG9zaXRvcnks
IGNvbW1pdCk7CisgICAgICAgIGlmICghb3duZXJDb21taXQpCisgICAgICAgICAgICBvd25lckNv
bW1pdCA9IGNvbW1pdC5vd25lckNvbW1pdCgpOworICAgICAgICBpZiAob3duZXJDb21taXQpIHsK
KyAgICAgICAgICAgIGNvbnN0IG93bmVyUmVwb3NpdG9yeSA9IG93bmVyQ29tbWl0LnJlcG9zaXRv
cnkoKTsKKyAgICAgICAgICAgIGlmICghdGhpcy5fb3duZXJUb093bmVkUmVwb3NpdG9yaWVzLmhh
cyhvd25lclJlcG9zaXRvcnkpKQorICAgICAgICAgICAgICAgIHRoaXMuX293bmVyVG9Pd25lZFJl
cG9zaXRvcmllcy5zZXQob3duZXJSZXBvc2l0b3J5LCBuZXcgU2V0KTsKKyAgICAgICAgICAgIGNv
bnN0IHJlcG9zaXRvcnlTZXQgPSB0aGlzLl9vd25lclRvT3duZWRSZXBvc2l0b3JpZXMuZ2V0KG93
bmVyUmVwb3NpdG9yeSk7CisgICAgICAgICAgICByZXBvc2l0b3J5U2V0LmFkZChyZXBvc2l0b3J5
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlbW92ZUNvbW1pdEZvclJlcG9zaXRvcnkocmVw
b3NpdG9yeSkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcG9zaXRvcnkgaW5zdGFu
Y2VvZiBSZXBvc2l0b3J5KTsKKyAgICAgICAgY29uc3Qgb3duZXJDb21taXQgPSB0aGlzLm93bmVy
Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKyAgICAgICAgaWYgKG93bmVyQ29tbWl0
KSB7CisgICAgICAgICAgICBjb25zdCByZXBvc2l0b3J5U2V0ID0gdGhpcy5fb3duZXJUb093bmVk
UmVwb3NpdG9yaWVzLmdldChvd25lckNvbW1pdC5yZXBvc2l0b3J5KCkpOworICAgICAgICAgICAg
Y29uc29sZS5hc3NlcnQocmVwb3NpdG9yeVNldC5oYXMocmVwb3NpdG9yeSkpOworICAgICAgICAg
ICAgcmVwb3NpdG9yeVNldC5kZWxldGUocmVwb3NpdG9yeSk7CisgICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5fb3duZXJUb093bmVkUmVwb3NpdG9yaWVzLmhhcyhyZXBvc2l0b3J5KSkgeworICAgICAg
ICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSB0aGlzLl9vd25lclRvT3duZWRSZXBvc2l0
b3JpZXMuZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgZm9yIChjb25zdCBvd25lZFJlcG9z
aXRvcnkgb2Ygb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgdGhpcy5fY29tbWl0
QnlSZXBvc2l0b3J5LmRlbGV0ZShvd25lZFJlcG9zaXRvcnkpOworICAgICAgICAgICAgdGhpcy5f
b3duZXJUb093bmVkUmVwb3NpdG9yaWVzLmRlbGV0ZShyZXBvc2l0b3J5KTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZGVsZXRlKHJlcG9zaXRvcnkpOworICAg
IH0KKworICAgIG93bnNDb21taXRzRm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0
aGlzLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkub3duc0NvbW1pdHMoKTsgfQorCisg
ICAgcmVwb3NpdG9yaWVzKCkgeyByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9jb21taXRCeVJlcG9z
aXRvcnkua2V5cygpKTsgfQorICAgIGhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJu
IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLnJlcG9zaXRv
cmllcygpLmZpbHRlcigocmVwb3NpdG9yeSkgPT4gIXRoaXMub3duZXJDb21taXRGb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpKSk7IH0KKyAgICBjb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkp
IHsgcmV0dXJuIHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7IH0KKyAg
ICBvd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KSB7IHJldHVy
biB0aGlzLl9vd25lclRvT3duZWRSZXBvc2l0b3JpZXMuZ2V0KHJlcG9zaXRvcnkpOyB9CisKKyAg
ICBvd25lckNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkKKyAgICB7CisgICAgICAgIGNv
bnN0IGNvbW1pdCA9IHRoaXMuX2NvbW1pdEJ5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7Cisg
ICAgICAgIGlmICghY29tbWl0KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJl
dHVybiBjb21taXQub3duZXJDb21taXQoKTsKKyAgICB9Cit9CisKIGlmICh0eXBlb2YgbW9kdWxl
ICE9ICd1bmRlZmluZWQnKSB7CiAgICAgbW9kdWxlLmV4cG9ydHMuQ29tbWl0U2V0ID0gQ29tbWl0
U2V0OwogICAgIG1vZHVsZS5leHBvcnRzLk1lYXN1cmVtZW50Q29tbWl0U2V0ID0gTWVhc3VyZW1l
bnRDb21taXRTZXQ7CiAgICAgbW9kdWxlLmV4cG9ydHMuQ3VzdG9tQ29tbWl0U2V0ID0gQ3VzdG9t
Q29tbWl0U2V0OworICAgIG1vZHVsZS5leHBvcnRzLkludGVybWVkaWF0ZUNvbW1pdFNldCA9IElu
dGVybWVkaWF0ZUNvbW1pdFNldDsKIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0
Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9v
bHMvanMvdjMtbW9kZWxzLmpzCmluZGV4IGFhZDhlMWU0MDJmNzJmYzM2NzcxOGYyNDZjMDg3NTAw
YjAzMzAyMDIuLmQwZWZlN2MwZDUyMDQ1ODlkN2I3ZGY2MGQxYmNmNzEzZGI1NGFhNmMgMTAwNjQ0
Ci0tLSBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMKKysr
IGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcwpAQCAtMTYs
NyArMTYsNiBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy9idWlsZC1yZXF1ZXN0LmpzJywgJ0J1aWxk
UmVxdWVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGRlci5qcycsICdCdWlsZCcpOwog
aW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGRlci5qcycsICdCdWlsZGVyJyk7CiBpbXBvcnRGcm9t
VjMoJ21vZGVscy9jb21taXQtbG9nLmpzJywgJ0NvbW1pdExvZycpOwotaW1wb3J0RnJvbVYzKCdt
b2RlbHMvY29tbWl0LXNldC5qcycsICdDdXN0b21Db21taXRTZXQnKQogaW1wb3J0RnJvbVYzKCdt
b2RlbHMvbWFuaWZlc3QuanMnLCAnTWFuaWZlc3QnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL21l
YXN1cmVtZW50LWFkYXB0b3IuanMnLCAnTWVhc3VyZW1lbnRBZGFwdG9yJyk7CiBpbXBvcnRGcm9t
VjMoJ21vZGVscy9tZWFzdXJlbWVudC1jbHVzdGVyLmpzJywgJ01lYXN1cmVtZW50Q2x1c3Rlcicp
OwpAQCAtMjcsNiArMjYsNyBAQCBpbXBvcnRGcm9tVjMoJ21vZGVscy9yZXBvc2l0b3J5LmpzJywg
J1JlcG9zaXRvcnknKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2NvbW1pdC1zZXQuanMnLCAnTWVh
c3VyZW1lbnRDb21taXRTZXQnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2NvbW1pdC1zZXQuanMn
LCAnQ29tbWl0U2V0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQtc2V0LmpzJywgJ0N1
c3RvbUNvbW1pdFNldCcpOworaW1wb3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LXNldC5qcycsICdJ
bnRlcm1lZGlhdGVDb21taXRTZXQnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL3Rlc3QuanMnLCAn
VGVzdCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvdGVzdC1ncm91cC5qcycsICdUZXN0R3JvdXAn
KTsKIGltcG9ydEZyb21WMygnbW9kZWxzL3RpbWUtc2VyaWVzLmpzJywgJ1RpbWVTZXJpZXMnKTsK
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1s
b2ctdGVzdHMuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQt
bG9nLXRlc3RzLmpzCmluZGV4IDNiMzFlNWMwNzFkMWNjMDVjYzhhOGMwZDQ2YmYzZDVhMzY3ZWYz
MDkuLmQ5MjYzYjA0ODE3Mzc5ZTAxZmU4NGNjOGIzZTRlMWMzMDAwZTc0MTUgMTAwNjQ0Ci0tLSBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1sb2ctdGVzdHMuanMK
KysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0
cy5qcwpAQCAtMTkxLDcgKzE5MSw4IEBAIGRlc2NyaWJlKCdDb21taXRMb2cnLCBmdW5jdGlvbiAo
KSB7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG93bmVkLWNvbW1p
dCBmb3IgYSB2YWxpZCBjb21taXQgcmV2aXNpb24nLCAoKSA9PiB7Ci0gICAgICAgICAgICBjb25z
dCBmZXRjaGluZ1Byb21pc2UgPSBvd25lckNvbW1pdCgpLmZldGNoT3duZWRDb21taXRzKCk7Cisg
ICAgICAgICAgICBjb25zdCBjb21taXQgPSBvd25lckNvbW1pdCgpOworICAgICAgICAgICAgY29u
c3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCk7CiAgICAgICAg
ICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVzdHM7CiAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3duZWQtY29tbWl0cz9v
d25lci1yZXZpc2lvbj0xMC4xMS40JTIwMTVFNjUnKTsKQEAgLTIwOCw2ICsyMDksNyBAQCBkZXNj
cmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChvd25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxzLm93bmVkUmVwb3Np
dG9yeSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5yZXZp
c2lvbigpLCAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRkMDNkYWQzYTdiMDdmYicpOwogICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0uaWQoKSwgMjMzKTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLm93bmVyQ29tbWl0KCks
IGNvbW1pdCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAKQEAgLTIzMyw2ICsyMzUs
NyBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAg
IGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxzLm93
bmVkUmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0
c1swXS5yZXZpc2lvbigpLCAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRkMDNkYWQzYTdiMDdm
YicpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0uaWQoKSwg
MjMzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLm93bmVy
Q29tbWl0KCksIGNvbW1pdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdC5mZXRjaE93
bmVkQ29tbWl0cygpOwogICAgICAgICAgICAgfSkudGhlbigob3duZWRDb21taXRzKSA9PiB7CiAg
ICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CkBAIC0yNDEs
MTIgKzI0NCwxMiBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVuY3Rpb24gKCkgewogICAgICAg
ICB9KTsKICAgICB9KTsKIAotICAgIGRlc2NyaWJlKCdkaWZmT3duZWRDb21taXRzJywgKCkgPT4g
eworICAgIGRlc2NyaWJlKCdvd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25lckNvbW1pdHMnLCAo
KSA9PiB7CiAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4gewogICAgICAgICAgICAgTW9ja1JlbW90
ZUFQSS5yZXNldCgpOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBk
aWZmZXJlbmNlIGJldHdlZW4gMiBvd25lZC1jb21taXRzJywgKCkgPT4geworICAgICAgICBpdCgn
c2hvdWxkIHJldHVybiBkaWZmZXJlbmNlIGJldHdlZW4gb3duZWQtY29tbWl0cyBvZiAyIG93bmVy
IGNvbW1pdHMnLCAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBvbmVDb21taXQgPSBvd25lckNv
bW1pdCgpOwogICAgICAgICAgICAgY29uc3Qgb3RoZXJDb21taXQgPSBvdGhlck93bmVyQ29tbWl0
KCk7CiAgICAgICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBvbmVDb21taXQuZmV0Y2hP
d25lZENvbW1pdHMoKTsKQEAgLTI2Nyw3ICsyNzAsMTcgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycs
IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICB0aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1
LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCiAgICAgICAgICAgICB9XX0pOwogCi0gICAgICAgICAg
ICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgcmV0dXJu
IGZldGNoaW5nUHJvbWlzZS50aGVuKChvd25lZENvbW1pdHMpID0+IHsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzLmxlbmd0aCwgMik7CisgICAgICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5yZXBvc2l0b3J5KCksIE1vY2tNb2RlbHMub3du
ZWRSZXBvc2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRz
WzBdLnJldmlzaW9uKCksICc2ZjhiMGRiYmRhOTVhNDQwNTAzYjg4ZGIxZGQwM2RhZDNhN2IwN2Zi
Jyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5pZCgpLCAy
MzMpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ub3duZXJD
b21taXQoKSwgb25lQ29tbWl0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRD
b21taXRzWzFdLnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy53ZWJraXRHaXQpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMV0ucmV2aXNpb24oKSwgJzA0YTZjNzIw
MzhmMGI3NzFhMTkyNDhjYTI1NDllMTI1ODYxN2I1ZmMnKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwob3duZWRDb21taXRzWzFdLmlkKCksIDI5OSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5vd25lckNvbW1pdCgpLCBvbmVDb21taXQpOworCiAg
ICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJGZXRjaGluZ1Byb21pc2UgPSBvdGhlckNvbW1pdC5m
ZXRjaE93bmVkQ29tbWl0cygpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0
cy5sZW5ndGgsIDIpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51
cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj0xMC4x
MS40JTIwMTVFNjYnKTsKQEAgLTI4Niw4ICsyOTksMTcgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycs
IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICB9XX0pOwogCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG90aGVyRmV0Y2hpbmdQcm9taXNlOwotICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IENvbW1pdExvZy5kaWZmT3duZWRD
b21taXRzKG9uZUNvbW1pdCwgb3RoZXJDb21taXQpOworICAgICAgICAgICAgfSkudGhlbigob3du
ZWRDb21taXRzKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0
cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNb
MF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5yZXZpc2lvbigpLCAnZDUwOTllMDNi
NDgyYWJkZDc3ZjZjNGRjYjg3NWFmZDA1YmRhNWFiOCcpOworICAgICAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChvd25lZENvbW1pdHNbMF0uaWQoKSwgMjM0KTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwob3duZWRDb21taXRzWzBdLm93bmVyQ29tbWl0KCksIG90aGVyQ29tbWl0KTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzFdLnJlcG9zaXRvcnkoKSwg
TW9ja01vZGVscy53ZWJraXRHaXQpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25l
ZENvbW1pdHNbMV0ucmV2aXNpb24oKSwgJzA0YTZjNzIwMzhmMGI3NzFhMTkyNDhjYTI1NDllMTI1
ODYxN2I1ZmMnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzFd
LmlkKCksIDI5OSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sx
XS5vd25lckNvbW1pdCgpLCBvdGhlckNvbW1pdCk7CisgICAgICAgICAgICAgICAgY29uc3QgZGlm
ZmVyZW5jZSA9IENvbW1pdExvZy5vd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25lckNvbW1pdHMo
b25lQ29tbWl0LCBvdGhlckNvbW1pdCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGRp
ZmZlcmVuY2Uuc2l6ZSwgMSk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGRpZmZlcmVu
Y2Uua2V5cygpLm5leHQoKS52YWx1ZSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpOwogICAg
ICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQt
dGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcwppbmRleCBhYjc2ZDU4OWNlYmQyMDA1N2IzYTc5YzY4
OGE1NmEzNTg2ZjAwOGY3Li4xNGRhMTBlNmNhYTdkNGMxYjNiZTYzZGYwZTBkOWViMTQ3YTYyNzBk
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQt
c2V0LXRlc3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2Nv
bW1pdC1zZXQtdGVzdHMuanMKQEAgLTMsNiArMyw3IEBACiBjb25zdCBhc3NlcnQgPSByZXF1aXJl
KCdhc3NlcnQnKTsKIHJlcXVpcmUoJy4uL3Rvb2xzL2pzL3YzLW1vZGVscy5qcycpOwogY29uc3Qg
TW9ja01vZGVscyA9IHJlcXVpcmUoJy4vcmVzb3VyY2VzL21vY2stdjMtbW9kZWxzLmpzJykuTW9j
a01vZGVsczsKK2NvbnN0IE1vY2tSZW1vdGVBUEkgPSByZXF1aXJlKCcuLi91bml0LXRlc3RzL3Jl
c291cmNlcy9tb2NrLXJlbW90ZS1hcGkuanMnKS5Nb2NrUmVtb3RlQVBJOwogCiBmdW5jdGlvbiBj
cmVhdGVQYXRjaCgpCiB7CkBAIC01MSw2ICs1MiwyNDUgQEAgZnVuY3Rpb24gY3VzdG9tQ29tbWl0
U2V0V2l0aE93bmVkUmVwb3NpdG9yeUhhc1NhbWVOYW1lQXNOb3RPd25lZFJlcG9zaXRvcnkoKQog
ICAgIHJldHVybiBjdXN0b21Db21taXRTZXQ7CiB9CiAKK2Z1bmN0aW9uIG93bmVyQ29tbWl0KCkK
K3sKKyAgICByZXR1cm4gbmV3IENvbW1pdExvZyg1LCB7CisgICAgICAgIHJlcG9zaXRvcnk6IE1v
Y2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LAorICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1p
dC0wJywKKyAgICAgICAgb3duc0NvbW1pdHM6IHRydWUsCisgICAgICAgIHRpbWU6IG51bGwsCisg
ICAgfSk7Cit9CisKK2Z1bmN0aW9uIHBhcnRpYWxPd25lckNvbW1pdCgpCit7CisgICAgcmV0dXJu
IG5ldyBDb21taXRMb2coNSwgeworICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVy
UmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdvd25lci1jb21taXQtMCcsCisgICAgICAg
IG93bnNDb21taXRzOiBudWxsLAorICAgICAgICB0aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1LTEz
VDAwOjU1OjU3Ljg0MTM0NFonKSksCisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIG93bmVkQ29tbWl0
KCkKK3sKKyAgICByZXR1cm4gbmV3IENvbW1pdExvZyg2LCB7CisgICAgICAgIHJlcG9zaXRvcnk6
IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LAorICAgICAgICByZXZpc2lvbjogJ293bmVkLWNv
bW1pdC0wJywKKyAgICAgICAgb3duc0NvbW1pdHM6IG51bGwsCisgICAgICAgIHRpbWU6IDE0NTY5
MzI3NzQwMDAKKyAgICB9KTsKK30KKworZGVzY3JpYmUoJ0ludGVybWVkaWF0ZUNvbW1pdFNldCcs
ICgpID0+IHsKKyAgICBNb2NrUmVtb3RlQVBJLmluamVjdCgpOworICAgIE1vY2tNb2RlbHMuaW5q
ZWN0KCk7CisKKyAgICBkZXNjcmliZSgnc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeScsICgpID0+IHsK
KyAgICAgICAgaXQoJ3Nob3VsZCBhbGxvdyBzZXQgY29tbWl0IGZvciBvd25lciByZXBvc2l0b3J5
JywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0gbmV3IEludGVybWVkaWF0
ZUNvbW1pdFNldChuZXcgQ29tbWl0U2V0KTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IG93
bmVyQ29tbWl0KCk7CisgICAgICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9y
eShNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgY29tbWl0KTsKKyAgICAgICAgICAgIGFzc2Vy
dC5lcXVhbChjb21taXQsIGNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMu
b3duZXJSZXBvc2l0b3J5KSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgYWxs
b3cgc2V0IGNvbW1pdCBmb3Igb3duZWQgcmVwb3NpdG9yeScsICgpID0+IHsKKyAgICAgICAgICAg
IGNvbnN0IGNvbW1pdFNldCA9IG5ldyBJbnRlcm1lZGlhdGVDb21taXRTZXQobmV3IENvbW1pdFNl
dCk7CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBvd25lckNvbW1pdCgpOworCisgICAgICAg
ICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBjb21taXQuZmV0Y2hPd25lZENvbW1pdHMoKTsK
KyAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKKyAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOworICAgICAgICAgICAg
YXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy4uL2FwaS9jb21taXRzLzExMS9vd25lZC1j
b21taXRzP293bmVyLXJldmlzaW9uPW93bmVyLWNvbW1pdC0wJyk7CisgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwocmVxdWVzdHNbMF0ubWV0aG9kLCAnR0VUJyk7CisKKyAgICAgICAgICAgIHJlcXVl
c3RzWzBdLnJlc29sdmUoe2NvbW1pdHM6IFt7CisgICAgICAgICAgICAgICAgaWQ6IDIzMywKKyAg
ICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeS5pZCgp
LAorICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRk
MDNkYWQzYTdiMDdmYicsCisgICAgICAgICAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAxNi0w
NS0xM1QwMDo1NTo1Ny44NDEzNDRaJykpLAorICAgICAgICAgICAgfV19KTsKKworCisgICAgICAg
ICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHtjb21taXRzOiBbeworICAgICAgICAgICAgICAgIGlk
OiA1LAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMub3duZXJSZXBvc2l0
b3J5LAorICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnb3duZXItY29tbWl0LTAnLAorICAgICAg
ICAgICAgICAgIG93bnNDb21taXRzOiB0cnVlLAorICAgICAgICAgICAgICAgIHRpbWU6ICsobmV3
IERhdGUoJzIwMTYtMDUtMTNUMDA6NTU6NTcuODQxMzQ0WicpKSwKKyAgICAgICAgICAgIH1dfSk7
CisKKyAgICAgICAgICAgIHJldHVybiBmZXRjaGluZ1Byb21pc2UudGhlbigoKSA9PiB7CisgICAg
ICAgICAgICAgICAgY29uc3Qgb3duZWRDb21taXQgPSBjb21taXQub3duZWRDb21taXRzKClbMF07
CisgICAgICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01v
ZGVscy5vd25lclJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICAgICAgY29tbWl0U2V0
LnNldENvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnksIG93bmVk
Q29tbWl0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LCBjb21taXRTZXQu
Y29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSkpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdCwgY29tbWl0U2V0LmNvbW1pdEZvclJl
cG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZGVlcEVxdWFsKGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSwgW01vY2tNb2RlbHMub3du
ZXJSZXBvc2l0b3J5LCBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeV0pOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ2ZldGNoQ29tbWl0TG9n
cycsICgpID0+IHsKKworICAgICAgICBpdCgnc2hvdWxkIGZldGNoIENvbW1pdExvZyBvYmplY3Qg
d2l0aCBvd25lZCBjb21taXRzIGluZm9ybWF0aW9uJywgICgpID0+IHsKKyAgICAgICAgICAgIGNv
bnN0IGNvbW1pdCA9IHBhcnRpYWxPd25lckNvbW1pdCgpOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKGNvbW1pdC5vd25zQ29tbWl0cygpLCBudWxsKTsKKyAgICAgICAgICAgIGNvbnN0IG93bmVk
ID0gb3duZWRDb21taXQoKTsKKworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0gQ29tbWl0
U2V0LmVuc3VyZVNpbmdsZXRvbignNTMyNDY0NTYnLCB7cmV2aXNpb25JdGVtczogW3tjb21taXR9
LCB7Y29tbWl0OiBvd25lZCwgb3duZXJDb21taXQ6IGNvbW1pdH1dfSk7CisgICAgICAgICAgICBj
b25zdCBpbnRlcm1lZGlhdGVDb21taXRTZXQgPW5ldyBJbnRlcm1lZGlhdGVDb21taXRTZXQoY29t
bWl0U2V0KTsKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZSA9IGludGVybWVkaWF0
ZUNvbW1pdFNldC5mZXRjaENvbW1pdExvZ3MoKTsKKworICAgICAgICAgICAgY29uc3QgcmVxdWVz
dHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJl
cXVlc3RzLmxlbmd0aCwgMik7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0u
dXJsLCAnL2FwaS9jb21taXRzLzExMS9vd25lci1jb21taXQtMCcpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworICAgICAgICAgICAgYXNzZXJ0
LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy9hcGkvY29tbWl0cy8xMTIvb3duZWQtY29tbWl0LTAn
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS5tZXRob2QsICdHRVQnKTsK
KworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAg
ICAgICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93
bmVyUmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0w
JywKKyAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogdHJ1ZSwKKyAgICAgICAgICAgICAgICB0
aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCisgICAgICAg
ICAgICB9XX0pOworICAgICAgICAgICAgcmVxdWVzdHNbMV0ucmVzb2x2ZSh7Y29tbWl0czogW3sK
KyAgICAgICAgICAgICAgICBpZDogNiwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2Nr
TW9kZWxzLm93bmVkUmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVk
LWNvbW1pdC0wJywKKyAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisgICAgICAg
ICAgICAgICAgdGltZTogMTQ1NjkzMjc3NDAwMCwKKyAgICAgICAgICAgIH1dfSk7CisKKyAgICAg
ICAgICAgIHJldHVybiBNb2NrUmVtb3RlQVBJLndhaXRGb3JSZXF1ZXN0KCkudGhlbigoKSA9PiB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMyk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLnVybCwgJy4uL2FwaS9jb21taXRz
LzExMS9vd25lZC1jb21taXRzP293bmVyLXJldmlzaW9uPW93bmVyLWNvbW1pdC0wJyk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzJdLm1ldGhvZCwgJ0dFVCcpOworCisg
ICAgICAgICAgICAgICAgcmVxdWVzdHNbMl0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAg
ICAgICAgICAgICAgaWQ6IDYsCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tN
b2RlbHMub3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9u
OiAnb3duZWQtY29tbWl0LTAnLAorICAgICAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFs
c2UsCisgICAgICAgICAgICAgICAgICAgIHRpbWU6IDE0NTY5MzI3NzQwMDAsCisgICAgICAgICAg
ICAgICAgfV19KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlOworICAg
ICAgICAgICAgfSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbW1pdC5v
d25zQ29tbWl0cygpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0Lm93bmVk
Q29tbWl0cygpLmxlbmd0aCwgMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1p
dC5vd25lZENvbW1pdHMoKVswXSwgb3duZWQpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChvd25lZC5vd25lckNvbW1pdCgpLCBjb21taXQpOworICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChvd25lZC5yZXBvc2l0b3J5KCksIE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoaW50ZXJtZWRpYXRlQ29tbWl0U2V0LmNvbW1pdEZv
clJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpLCBvd25lZCk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKGludGVybWVkaWF0ZUNvbW1pdFNldC5vd25lckNvbW1pdEZv
clJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpLCBjb21taXQpOworICAgICAg
ICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoaW50ZXJtZWRpYXRlQ29tbWl0U2V0LnJlcG9zaXRv
cmllcygpLCBbTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksIE1vY2tNb2RlbHMub3duZWRSZXBv
c2l0b3J5XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBk
ZXNjcmliZSgndXBkYXRlUmV2aXNpb25Gb3JPd25lclJlcG9zaXRvcnknLCAoKSA9PiB7CisKKyAg
ICAgICAgaXQoJ3Nob3VsZCB1cGRhdGUgQ29tbWl0U2V0IGJhc2VkIG9uIHRoZSBsYXRlc3QgaW52
b2NhdGlvbicsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldCA9IG5ldyBJbnRl
cm1lZGlhdGVDb21taXRTZXQobmV3IENvbW1pdFNldCk7CisgICAgICAgICAgICBjb25zdCBmaXJz
dFVwZGF0ZVByb21pc2UgPSBjb21taXRTZXQudXBkYXRlUmV2aXNpb25Gb3JPd25lclJlcG9zaXRv
cnkoTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTAnKTsKKyAgICAgICAgICAgIGNv
bnN0IHNlY29uZFVwZGF0ZVByb21pc2UgPSBjb21taXRTZXQudXBkYXRlUmV2aXNpb25Gb3JPd25l
clJlcG9zaXRvcnkoTW9ja01vZGVscy53ZWJraXQsICd3ZWJraXQtY29tbWl0LTEnKTsKKyAgICAg
ICAgICAgIGNvbnN0IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKKworICAgICAg
ICAgICAgYXNzZXJ0KHJlcXVlc3RzLmxlbmd0aCwgMik7CisgICAgICAgICAgICBhc3NlcnQuZXF1
YWwocmVxdWVzdHNbMF0udXJsLCAnL2FwaS9jb21taXRzLzExL3dlYmtpdC1jb21taXQtMCcpOwor
ICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzFdLnVybCwgJy9hcGkvY29tbWl0cy8xMS93
ZWJraXQtY29tbWl0LTEnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS5t
ZXRob2QsICdHRVQnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMV0ucmVzb2x2ZSh7Y29tbWl0
czogW3sKKyAgICAgICAgICAgICAgICBpZDogMjAxOCwKKyAgICAgICAgICAgICAgICByZXBvc2l0
b3J5OiBNb2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgIHJldmlzaW9uOiAn
d2Via2l0LWNvbW1pdC0xJywKKyAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogZmFsc2UsCisg
ICAgICAgICAgICAgICAgdGltZTogMTQ1NjkzMjc3NDAwMCwKKyAgICAgICAgICAgIH1dfSk7CisK
KyAgICAgICAgICAgIGxldCBjb21taXQgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIHNlY29u
ZFVwZGF0ZVByb21pc2UudGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgY29tbWl0ID0gY29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy53ZWJraXQpOworCisgICAgICAg
ICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAgICAg
ICAgICAgaWQ6IDIwMTcsCisgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2Rl
bHMud2Via2l0LmlkKCksCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiAnd2Via2l0LWNv
bW1pdC0wJywKKyAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICB0aW1lOiAxNDU2OTMyNzczMDAwLAorICAgICAgICAgICAgICAgIH1dfSk7
CisKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LnJldmlzaW9uKCksICd3ZWJr
aXQtY29tbWl0LTEnKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwoY29tbWl0LmlkKCks
IDIwMTgpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0VXBkYXRlUHJvbWlzZTsKKyAg
ICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRD
b21taXQgPSBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLndlYmtpdCk7
CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdCwgY3VycmVudENvbW1pdCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdy
ZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5JywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIHJl
bW92ZSBvd25lZCBjb21taXRzIHdoZW4gb3duZXIgY29tbWl0IGlzIHJlbW92ZWQnLCAoKSA9PiB7
CisgICAgICAgICAgICBjb25zdCBjb21taXRTZXQgPSBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0
KG5ldyBDb21taXRTZXQpOworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQo
KTsKKworICAgICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3du
ZWRDb21taXRzKCk7CisgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEku
cmVxdWVzdHM7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsK
KyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0
cy8xMTEvb3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj1vd25lci1jb21taXQtMCcpOworICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworCisgICAg
ICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHtjb21taXRzOiBbeworICAgICAgICAgICAgICAg
IGlkOiAyMzMsCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lZFJl
cG9zaXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJzZmOGIwZGJiZGE5NWE0
NDA1MDNiODhkYjFkZDAzZGFkM2E3YjA3ZmInLAorICAgICAgICAgICAgICAgIG93bnNDb21taXRz
OiB0cnVlCisgICAgICAgICAgICB9XX0pOworCisgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQ
cm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRG
b3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBjb21taXQpOworICAgICAg
ICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3du
ZWRSZXBvc2l0b3J5LCBjb21taXQub3duZWRDb21taXRzKClbMF0pOworICAgICAgICAgICAgICAg
IGNvbW1pdFNldC5yZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZXJSZXBv
c2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGNvbW1pdFNldC5yZXBv
c2l0b3JpZXMoKSwgW10pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGl0KCdzaG91bGQgbm90IHJlbW92ZSBvd25lciBjb21taXRzIHdoZW4gb3duZWQgY29tbWl0IGlz
IHJlbW92ZWQnLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRTZXQgPSBuZXcgSW50
ZXJtZWRpYXRlQ29tbWl0U2V0KG5ldyBDb21taXRTZXQpOworICAgICAgICAgICAgY29uc3QgY29t
bWl0ID0gb3duZXJDb21taXQoKTsKKworICAgICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNl
ID0gY29tbWl0LmZldGNoT3duZWRDb21taXRzKCk7CisgICAgICAgICAgICBjb25zdCByZXF1ZXN0
cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVzdHM7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVx
dWVzdHMubGVuZ3RoLCAxKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51
cmwsICcuLi9hcGkvY29tbWl0cy8xMTEvb3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj1vd25l
ci1jb21taXQtMCcpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhv
ZCwgJ0dFVCcpOworCisgICAgICAgICAgICByZXF1ZXN0c1swXS5yZXNvbHZlKHtjb21taXRzOiBb
eworICAgICAgICAgICAgICAgIGlkOiAyMzMsCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTog
TW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkuaWQoKSwKKyAgICAgICAgICAgICAgICByZXZpc2lv
bjogJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFkZDAzZGFkM2E3YjA3ZmInLAorICAgICAgICAg
ICAgICAgIHRpbWU6ICsobmV3IERhdGUoJzIwMTYtMDUtMTNUMDA6NTU6NTcuODQxMzQ0WicpKSwK
KyAgICAgICAgICAgIH1dfSk7CisKKyAgICAgICAgICAgIHJldHVybiBmZXRjaGluZ1Byb21pc2Uu
dGhlbigoKSA9PiB7CisgICAgICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9z
aXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAgICAg
ICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9z
aXRvcnksIGNvbW1pdC5vd25lZENvbW1pdHMoKVswXSk7CisgICAgICAgICAgICAgICAgY29tbWl0
U2V0LnJlbW92ZUNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkp
OworICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoY29tbWl0U2V0LnJlcG9zaXRvcmll
cygpLCBbTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnldKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKworICAgIH0pOworCit9KTsKKwogZGVzY3JpYmUoJ0N1c3RvbUNvbW1pdFNldCcs
ICgpID0+IHsKICAgICBNb2NrTW9kZWxzLmluamVjdCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330083</attachid>
            <date>2017-12-21 17:35:01 -0800</date>
            <delta_ts>2017-12-21 20:56:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177993-20171221173500.patch</filename>
            <type>text/plain</type>
            <size>64112</size>
            <attacher>dewei_zhu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MDgxCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvQ2hhbmdlTG9nIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwpp
bmRleCBkMTNlMjdhZDkwYjFiZjY5YjVjNjYwYzRmMDkxYzZmNGQ1NzRlYjhlLi5kM2E0NTBiNWJj
YTA0ODg5MTQzM2VkNjY1ZDg2OTkxMDM5OTU5NTQwIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw5NCBAQAorMjAxNy0xMi0yMSAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgVUkgZm9yIEEvQiB0ZXN0aW5nIG9uIG93bmVkIGNv
bW1pdHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzc5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
dXN0b21pemFibGUgdGVzdCBncm91cCBmb3JtIHNob3VsZCBzdXBwb3J0IHNwZWNpZnlpbmcgYW5k
IEEvQiB0ZXN0aW5nIG93bmVkIGNvbW1pdHMuCisgICAgICAgIEludHJvZHVjZSAnSW50ZXJtZWRp
YXRlQ29tbWl0U2V0JyB0byBhY2hpZXZlIHRoZSBnb2FsIG9mIHNwZWNpZnlpbmcgb3duZWQgY29t
bWl0cyBmb3IgQS9CIHRlc3QuCisgICAgICAgIEluIG9yZGVyIHRvIHN1cHBvcnQgY29uZmlndXJl
IEEvQiB0ZXN0aW5nIHRoYXQgbWF5IG5lZWQgdG8gYWRkL3JlbW92ZSBvd25lZCBjb21taXRzLCBD
b21taXRTZXQgbWF5IGJlIHRoZQorICAgICAgICBjbG9zZXN0IHRoaW5nIHdlIGNhbiBnZXQuIEhv
d2V2ZXIsIGl0IGlzIGEgc3ViY2xhc3Mgb2YgRGF0YU1vZGVsT2JqZWN0LCB3aGljaCBtZWFucyBD
b21taXRTZXQgaXMgYSByZXByZXNlbnRhdGlvbgorICAgICAgICBvZiAnY29tbWl0X3NldHMnIHRh
YmxlIGFuZCBjYW4gb25seSBiZSB1cGRhdGVkIGZyb20gc2VydmVyIGRhdGEuIFRodXMsIHdlIHdh
bnQgc29tZXRoaW5nIGxpa2UgQ3VzdG9tQ29tbWl0U2V0IHRoYXQKKyAgICAgICAgaXMgbm90IGEg
cmVwcmVzZW50YXRpb24gb2YgZGF0YWJhc2UgdGFibGUsIGJ1dCB1bmxpa2UgQ3VzdG9tQ29tbWl0
U2V0LCBpdCBzaG91bGQgc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0cworICAgICAgICBy
YXRoZXIgdGhhbiBhIHJldmlzaW9uLiBBcyBhIHJlc3VsdCwgSW50ZXJtZWRpYXRlQ29tbWl0U2V0
IGlzIGludHJvZHVjZWQuIEZvciBhIGxvbmdlciB0ZXJtLCB3ZSBtYXkgcmVwbGFjZQorICAgICAg
ICBDdXN0b21Db21taXRTZXQgd2l0aCBJbnRlcm1lZGlhdGVDb21taXRTZXQgYXMgaXQgY2Fycmll
cyBtb3JlIGluZm9ybWF0aW9uIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBzaW1wbGlmeSBzb21lCisg
ICAgICAgIEN1c3RvbUNvbW1pdFNldCByZWxhdGVkIEFQSXMgYnkgdXNpbmcgY29tbWl0IGlkIGlu
c3RlYWQgb2YgY29tbWl0IHJldmlzaW9uLgorICAgICAgICBFeHRlbmQgQnV0dG9uQmFzZSBjbGFz
cyBzbyB0aGF0IHdlIGNhbiBlbmFibGUvZGlzYWJsZSBhIGJ1dHRvbi4KKworICAgICAgICAqIHB1
YmxpYy92My9jb21wb25lbnRzL2J1dHRvbi1iYXNlLmpzOgorICAgICAgICAoQnV0dG9uQmFzZSk6
CisgICAgICAgIChCdXR0b25CYXNlLnByb3RvdHlwZS5zZXREaXNhYmxlZCk6IEVuYWJsZS9kaXNh
YmxlIGEgYnV0dG9uLgorICAgICAgICAoQnV0dG9uQmFzZS5wcm90b3R5cGUucmVuZGVyKToKKyAg
ICAgICAgKEJ1dHRvbkJhc2UuY3NzVGVtcGxhdGUpOiBBZGRlZCBjc3MgcnVsZSBmb3IgZGlzYWJs
ZWQgYnV0dG9uLgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2NvbWJvLWJveC5qczog
QWRkZWQuCisgICAgICAgIChDb21ib0JveCk6CisgICAgICAgIChDb21ib0JveC5wcm90b3R5cGUu
ZGlkQ29uc3RydWN0U2hhZG93VHJlZSk6IFNldHVwIHRleHQgZmllbGQuCisgICAgICAgIChDb21i
b0JveC5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2Fu
ZGlkYXRlTmFtZUZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgY2FuZGlkYXRlIG5hbWUgYmFzZWQg
b24gY3VycmVudCBpbmRleC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fY2FuZGlkYXRl
RWxlbWVudEZvckN1cnJlbnRJbmRleCk6IFJldHVybnMgYSBsaXN0IGVsZW1lbnQgYmFzZWQgb24g
Y3VycmVudCBpbmRleC4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fYXV0b0NvbXBsZXRl
SWZPbmx5T25lTWF0Y2hpbmdJdGVtKTogU3VwcG9ydHMgYXV0byBjb21wbGV0aW9uLgorICAgICAg
ICAoQ29tYm9Cb3gucHJvdG90eXBlLl9tb3ZlQ2FuZGlkYXRlKTogU3VwcG9ydHMgYXJyb3cgdXAv
ZG93bi4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fdXBkYXRlQ2FuZGlkYXRlTGlzdCk6
IEhpZGUvdW5oaWRlIGNhbmRpZGF0ZSBsaXN0IGFuZCBoaWdoLWxpZ2h0IHNlbGVjdGVkIGNhbmRp
ZGF0ZS4KKyAgICAgICAgKENvbWJvQm94LnByb3RvdHlwZS5fcmVuZGVyQ2FuZGlkYXRlTGlzdCk6
IFJlbmRlciBjYW5kaWRhdGUgbGlzdCBiYXNlIG9uIHZhbHVlIG9uIHRleHQgZmllbGQuCisgICAg
ICAgIChDb21ib0JveC5odG1sVGVtcGxhdGUpOgorICAgICAgICAoQ29tYm9Cb3guY3NzVGVtcGxh
dGUpOgorICAgICAgICAqIHB1YmxpYy92My9jb21wb25lbnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdy
b3VwLWZvcm0uanM6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtKToKKyAgICAg
ICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLmRpZENvbnN0cnVjdFNoYWRv
d1RyZWUpOiBPbmx5IGZldGNoIHRoZSBmdWxsIGNvbW1pdHMgd2hlbiB3ZSBhYm91dCB0byBjcmVh
dGUgYSBjdXN0b21pemVkIEEvQiB0ZXN0cy4KKyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91
cEZvcm0ucHJvdG90eXBlLl9jb21wdXRlQ29tbWl0U2V0TWFwKTogQ29tcHV0ZSB0aGUgQ3VzdG9t
Q29tbWl0U2V0IGJhc2VkIG9uIEludGVybWVkaWF0ZUNvbW1pdFNldCBhbmQKKyAgICAgICAgb3Ro
ZXIgcmV2aXNpb24gcmVsYXRlZCBpbmZvcm1hdGlvbiBpbiBzb21lIG1hcC4KKyAgICAgICAgKEN1
c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0ucHJvdG90eXBlLnJlbmRlcik6CisgICAgICAgIChDdXN0
b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fcmVuZGVyQ3VzdG9tUmV2aXNpb25UYWJs
ZSk6CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3Ry
dWN0VGFibGVCb2R5TGlzdCk6IFRoaXMgZnVuY3Rpb24gYnVpbGRzIHRhYmxlIGJvZHkgZm9yIGVh
Y2ggaGlnaGVzdCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICBJdCB3aWxsIGFsc28gaW5jbHVk
ZSB0aGUgb3duZWQgcmVwb3NpdG9yeSByb3dzIGluIHRoZSBzYW1lIHRhYmxlIGJvZHkgaWYgdGhl
IGNvbW1pdHMgZm9yIGhpZ2hlc3QgbGV2ZWwgcmVwb3NpdG9yeSBvd25zIG90aGVyIGNvbW1pdHMu
CisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0
VGFibGVSb3dGb3JDb21taXRzV2l0aG91dE93bmVyKTogQnVpbGQgYSB0YWJsZSByb3cgZm9yIGEg
aGlnaGVzdCBsZXZlbCByZXBvc2l0b3J5LgorICAgICAgICAoQ3VzdG9taXphYmxlVGVzdEdyb3Vw
Rm9ybS5wcm90b3R5cGUuX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhPd25lcik6IEJ1
aWxkIGEgdGFibGUgcm93IGZvciByZXBvc2l0b3J5IHdpdGggb3duZXIuCisgICAgICAgIChDdXN0
b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlwZS5fY29uc3RydWN0VGFibGVSb3dGb3JJbmNv
bXBsZXRlT3duZWRDb21taXRzKTogQnVpbGQgYSB0YWJsZSByb3cgZm9yIGFuIHVuc3BlY2lmaWVk
IHJlcG9zaXRvcnkuCisgICAgICAgIChDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtLnByb3RvdHlw
ZS5fY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMpOiBVcGRhdGUgdGhlIGxvZ2ljIHRvIHN1
cHBvcnQgYnVpbGQgcmFkaW8gYnV0dG9ucyBmb3IgdGhlIG93bmVkIHJlcG9zaXRvcnkgcm93cy4K
KyAgICAgICAgKEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0uY3NzVGVtcGxhdGUpOgorICAgICAg
ICAqIHB1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qczogQWRkZWQuCisgICAgICAg
IChNaW51c0J1dHRvbik6CisgICAgICAgIChNaW51c0J1dHRvbi5idXR0b25Db250ZW50KToKKyAg
ICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzOgorICAg
ICAgICAoT3duZWRDb21taXRWaWV3ZXIucHJvdG90eXBlLl9yZW5kZXJPd25lZENvbW1pdFRhYmxl
KToKKyAgICAgICAgKiBwdWJsaWMvdjMvY29tcG9uZW50cy9wbHVzLWJ1dHRvbi5qczogQWRkZWQu
CisgICAgICAgIChQbHVzQnV0dG9uKToKKyAgICAgICAgKFBsdXNCdXR0b24uYnV0dG9uQ29udGVu
dCk6CisgICAgICAgICogcHVibGljL3YzL2luZGV4Lmh0bWw6IEFkZGVkIG5ldyBjb21wb25lbnRz
LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LWxvZy5qczogQWRkZWQgb3duZXIg
YW5kIG93bmVkIGNvbW1pdCBpbmZvcm1hdGlvbi4KKyAgICAgICAgKENvbW1pdExvZyk6CisgICAg
ICAgIChDb21taXRMb2cucHJvdG90eXBlLm93bmVkQ29tbWl0cyk6IFJldHVybnMgYSBsaXN0IG9m
IGNvbW1pdHMgb3duZWQgYnkgY3VycmVudCBjb21taXQuCisgICAgICAgIChDb21taXRMb2cucHJv
dG90eXBlLm93bmVyQ29tbWl0KTogUmV0dXJuIG93bmVyIGNvbW1pdCBvZiBjdXJyZW50IGNvbW1p
dC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUuc2V0T3duZXJDb21taXRzKTogU2V0IG93
bmVyIGNvbW1pdCBvZiBjdXJyZW50IGNvbW1pdC4KKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5
cGUubGFiZWwpOiBSZW1vdmUgdW5uZWNlc3NhcnkgJ2Vsc2UnLgorICAgICAgICAoQ29tbWl0TG9n
LnByb3RvdHlwZS5kaWZmKTogUmVtb3ZlIHVudXNlZCAnZnJvbVJldmlzaW9uRm9yVVJMJyBhbmQg
dGlueSBjb2RlIGNsZWFudXAuCisgICAgICAgIChDb21taXRMb2cucHJvdG90eXBlLm93bmVkQ29t
bWl0Rm9yT3duZWRSZXBvc2l0b3J5KToKKyAgICAgICAgKENvbW1pdExvZy5wcm90b3R5cGUuZmV0
Y2hPd25lZENvbW1pdHMpOiBTZXRzIHRoZSBvd25lciBmb3IgdGhvc2Ugb3duZWQgY29tbWl0cy4g
VGhlIG93bmVyIG9mIGEgY29tbWl0IHdpdGggbXVsdGlwbGUgb3duZXIKKyAgICAgICAgY29tbWl0
cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZC4KKyAgICAgICAgKENvbW1pdExvZy5vd25lZENvbW1pdERpZmZlcmVuY2VGb3JPd25lckNvbW1p
dHMpOiBBIG1vcmUgZ2VuZXJpYyB2ZXJzaW9uIG9mIGRpZmZPd25lZENvbW1pdHMuIGRpZmZPd25l
ZENvbW1pdHMgb25seSBhY2NlcHRzIDIgY29tbWl0cywKKyAgICAgICAgYnV0IG93bmVkQ29tbWl0
RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyBzdXBwb3J0cyBtdWx0aXBsZSBjb21taXRzLgorICAg
ICAgICAoQ29tbWl0TG9nLmRpZmZPd25lZENvbW1pdHMpOiBEZWxldGVkIGFuZCBzaG91bGQgdXNl
ICdDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzJyBpbnN0ZWFk
LgorICAgICAgICAqIHB1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qczoKKyAgICAgICAgKENv
bW1pdFNldC5wcm90b3R5cGUudG9wTGV2ZWxSZXBvc2l0b3JpZXMpOgorICAgICAgICAoQ29tbWl0
U2V0LnByb3RvdHlwZS5jb21taXRGb3JSZXBvc2l0b3J5KToKKyAgICAgICAgKEludGVybWVkaWF0
ZUNvbW1pdFNldCk6IFRha2UgQ29tbWl0U2V0IGFzIGFyZ3VtZW50LCBub3RlIHRoZSBjb21taXQg
ZnJvbSBDb21taXRTZXQgZG9lc24ndCBjb250YWlucyBmdWxsIGluZm9ybWF0aW9uIG9mIHRoZSBj
b21taXQuCisgICAgICAgIEFsd2F5cyBjYWxsICdmZXRjaEZ1bGxDb21taXRzJyBvbmNlIGJlZm9y
ZSBhbnkgZnVydGhlciB1c2FnZXMuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJv
dG90eXBlLmZldGNoQ29tbWl0TG9ncyk6IEZldGNoIGFsbCBjb21taXRzIGluZm9ybWF0aW9uIGlu
IGN1cnJlbnQgY29tbWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90
b3R5cGUuX2ZldGNoQ29tbWl0TG9nQW5kT3duZWRDb21taXRzKTogRmV0Y2ggY29tbWl0IGxvZyBh
bmQgb3duZWQgY29tbWl0cyBpZiBuZWNlc3NhcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21t
aXRTZXQucHJvdG90eXBlLnVwZGF0ZVJldmlzaW9uRm9yT3duZXJSZXBvc2l0b3J5KTogVXBkYXRl
cyBhIGNvbW1pdCBmb3IgYSByZXBvc2l0b3J5IGJ5IGdpdmVuIGEgcmV2aXNpb24gb2YgdGhlIHJl
cG9zaXRvcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLnNldENv
bW1pdEZvclJlcG9zaXRvcnkpOiBTZXRzIGEgY29tbWl0IGZvciBhIHJlcG9zaXRvcnkgaW4gY29t
bWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUucmVtb3Zl
Q29tbWl0Rm9yUmVwb3NpdG9yeSk6IFJlbW92ZXMgYSBjb21taXQgZm9yIGEgcmVwb3NpdG9yeSBp
biBjb21taXQgc2V0LgorICAgICAgICAoSW50ZXJtZWRpYXRlQ29tbWl0U2V0LnByb3RvdHlwZS5v
d25zQ29tbWl0c0ZvclJlcG9zaXRvcnkpOiBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvbW1pdCBmb3Ig
cmVwb3NpdG9yeSBvd25zIGNvbW1pdHMuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQu
cHJvdG90eXBlLnJlcG9zaXRvcmllcyk6IFJldHVybnMgYWxsIHJlcG9zaXRvcmllcyBpbiB0aGUg
Y29tbWl0IHNldC4KKyAgICAgICAgKEludGVybWVkaWF0ZUNvbW1pdFNldC5wcm90b3R5cGUuaGln
aGVzdExldmVsUmVwb3NpdG9yaWVzKTogUmV0dXJucyBhbGwgcmVwb3NpdG9yaWVzIHRob3NlIGRv
bid0IGhhdmUgYW4gb3duZXIuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90
eXBlLmNvbW1pdEZvclJlcG9zaXRvcnkpOiBSZXR1cm5zIGEgY29tbWl0IGZvciBhIGdpdmVuIHJl
cG9zaXRvcnkuCisgICAgICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLm93bmVk
UmVwb3NpdG9yaWVzRm9yT3duZXJSZXBvc2l0b3J5KTogUmV0dXJucyBhbGwgcmVwb3NpdG9yaWVz
IG93bmVkIGJ5IGEgZ2l2ZW4gcmVwb3NpdG9yeSBpbiBjdXJyZW50IGNvbW1pdCBzZXQuCisgICAg
ICAgIChJbnRlcm1lZGlhdGVDb21taXRTZXQucHJvdG90eXBlLm93bmVyQ29tbWl0Rm9yUmVwb3Np
dG9yeSk6IFJldHVybnMgb3duZXIgY29tbWl0IGZvciBhIGdpdmVuIG93bmVkIHJlcG9zaXRvcnku
CisgICAgICAgICogdG9vbHMvanMvdjMtbW9kZWxzLmpzOiBBZGRlZCBpbXBvcnQgZm9yICdJbnRl
cm1lZGlhdGVDb21taXRTZXQnLgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LWxvZy10ZXN0
cy5qczogVXBkYXRlZCB1bml0dGVzdCB3aGljaCB0ZXN0cyAnb3duZXJDb21taXQnIGZ1bmN0aW9u
LgorICAgICAgICAqIHVuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qczogQWRkZWQgdW5pdCB0
ZXN0cyBmb3IgSW50ZXJtZWRpYXRlQ29tbWl0U2V0LgorCiAyMDE3LTEyLTEzICBEZXdlaSBaaHUg
IDxkZXdlaV96aHVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHRlc3QgZnJlc2huZXNzIHBh
Z2UuCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvYnV0dG9uLWJhc2UuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3Yz
L2NvbXBvbmVudHMvYnV0dG9uLWJhc2UuanMKaW5kZXggMzY0MzlmY2U4MTZiYzMwMzIxNzVlOWE1
YTIyM2FkODVjZmU1MDZkYi4uZDQzZmU3YTQ5MWY0MGVlODExZmU2ZWE3ZjgxMjM3ZDU2MmZhYjE2
OCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2J1dHRvbi1iYXNlLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMv
djMvY29tcG9uZW50cy9idXR0b24tYmFzZS5qcwpAQCAtMSw1ICsxLDE4IEBACiAKIGNsYXNzIEJ1
dHRvbkJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHsKKworICAgIGNvbnN0cnVjdG9yKG5hbWUs
IGRpc2FibGVkID0gZmFsc2UpCisgICAgeworICAgICAgICBzdXBlcihuYW1lKTsKKyAgICAgICAg
dGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgICB9CisKKyAgICBzZXREaXNhYmxlZChkaXNh
YmxlZCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZWQ7CisgICAgICAg
IHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCiAgICAgZGlkQ29uc3RydWN0U2hhZG93
VHJlZSgpCiAgICAgewogICAgICAgICB0aGlzLmNvbnRlbnQoJ2J1dHRvbicpLmFkZEV2ZW50TGlz
dGVuZXIoJ2NsaWNrJywgdGhpcy5jcmVhdGVFdmVudEhhbmRsZXIoKCkgPT4gewpAQCAtNyw2ICsy
MCwxNSBAQCBjbGFzcyBCdXR0b25CYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAg
IH0pKTsKICAgICB9CiAKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVy
KCk7CisgICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkKKyAgICAgICAgICAgIHRoaXMuY29udGVu
dCgnYnV0dG9uJykuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdGhpcy5jb250ZW50KCdidXR0b24nKS5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2Fi
bGVkJyk7CisgICAgfQorCiAgICAgc3RhdGljIGh0bWxUZW1wbGF0ZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gYDxhIGlkPSJidXR0b24iIGhyZWY9IiMiPjxzdmcgdmlld0JveD0iMCAwIDEwMCAx
MDAiPiR7dGhpcy5idXR0b25Db250ZW50KCl9PC9zdmc+PC9hPmA7CkBAIC0zNSw2ICs1NywxMiBA
QCBjbGFzcyBCdXR0b25CYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSB7CiAgICAgICAgICAgICAg
ICAgb3BhY2l0eTogMC42OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBhW2Rpc2FibGVk
XSB7CisgICAgICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgICAgICAgICAgICAg
ICAgY3Vyc29yOiBkZWZhdWx0OworICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuMjsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgc3ZnIHsKICAgICAgICAgICAgICAgICBkaXNwbGF5OiBi
bG9jazsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy9wdWJsaWMvdjMvY29tcG9uZW50cy9jb21iby1ib3guanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5Y2Vk
Y2FhOWUzYTBlNGZjM2NlMDZjYzdiYzFlNDg5MDhlOGFlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY29tYm8tYm94Lmpz
CkBAIC0wLDAgKzEsMTk3IEBACitjbGFzcyBDb21ib0JveCBleHRlbmRzIENvbXBvbmVudEJhc2Ug
eworCisgICAgY29uc3RydWN0b3IoY2FuZGlkYXRlcywgbWF4Q2FuZGlkYXRlTGlzdExlbmd0aCkK
KyAgICB7CisgICAgICAgIHN1cGVyKCdjb21iby1ib3gnKTsKKyAgICAgICAgdGhpcy5fY2FuZGlk
YXRlcyA9IGNhbmRpZGF0ZXM7CisgICAgICAgIHRoaXMuX21heENhbmRpZGF0ZUxpc3RMZW5ndGgg
PSBtYXhDYW5kaWRhdGVMaXN0TGVuZ3RoIHx8IDEwMDA7CisgICAgICAgIHRoaXMuX2NhbmRpZGF0
ZUxpc3QgPSBbXTsKKyAgICAgICAgdGhpcy5fY2FuZGlkYXRlRWxlbWVudExpc3QgPSBbXTsKKyAg
ICAgICAgdGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4ID0gbnVsbDsKKyAgICAgICAgdGhpcy5f
c2hvd0NhbmRpZGF0ZUxpc3QgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fcmVuZGVyQ2FuZGlkYXRl
TGlzdExhemlseSA9IG5ldyBMYXppbHlFdmFsdWF0ZWRGdW5jdGlvbih0aGlzLl9yZW5kZXJDYW5k
aWRhdGVMaXN0LmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl91cGRhdGVDYW5kaWRhdGVMaXN0
TGF6aWx5ID0gbmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3VwZGF0ZUNhbmRpZGF0
ZUxpc3QuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgZGlkQ29uc3RydWN0U2hhZG93VHJlZSgp
CisgICAgeworICAgICAgICBzdXBlci5kaWRDb25zdHJ1Y3RTaGFkb3dUcmVlKCk7CisgICAgICAg
IGNvbnN0IHRleHRGaWVsZCA9IHRoaXMuY29udGVudCgndGV4dC1maWVsZCcpOworICAgICAgICB0
ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7CisgICAgICAgICAgICB0
aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9jdXJyZW50
Q2FuZGlkYXRlSW5kZXggPSBudWxsOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHRleHRGaWVsZC5hZGRFdmVudExpc3RlbmVyKCdjaGFu
Z2UnLCAoKSA9PiB7CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRj
aGluZ0l0ZW0oKTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJbmRleCA9IG51
bGw7CisgICAgICAgIH0pOworICAgICAgICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignYmx1
cicsICgpID0+IHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dDYW5kaWRhdGVMaXN0ID0gZmFsc2U7
CisgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVJZk9ubHlPbmVNYXRjaGluZ0l0ZW0oKTsK
KyAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgICAgIH0pOworICAgICAg
ICB0ZXh0RmllbGQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7CisgICAgICAgICAg
ICB0aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLmVucXVl
dWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAgICAgdGV4dEZpZWxkLmFkZEV2ZW50TGlz
dGVuZXIoJ2tleWRvd24nLCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXkg
PT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKQorICAgICAgICAgICAg
ICAgIHRoaXMuX21vdmVDYW5kaWRhdGUoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7CisgICAg
ICAgICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdUYWInIHx8IGV2ZW50LmtleSA9PT0gJ0Vu
dGVyJykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMuX2NhbmRpZGF0
ZU5hbWVGb3JDdXJyZW50SW5kZXgoKTsKKyAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoQWN0
aW9uKCd1cGRhdGUnLCBjYW5kaWRhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICByZW5kZXIoKQorICAgIHsKKyAgICAgICAgc3VwZXIucmVuZGVyKCk7CisKKyAg
ICAgICAgdGhpcy5fcmVuZGVyQ2FuZGlkYXRlTGlzdExhemlseS5ldmFsdWF0ZSh0aGlzLl9jYW5k
aWRhdGVzLCB0aGlzLmNvbnRlbnQoJ3RleHQtZmllbGQnKS52YWx1ZSk7CisgICAgICAgIHRoaXMu
X3VwZGF0ZUNhbmRpZGF0ZUxpc3RMYXppbHkuZXZhbHVhdGUodGhpcy5fY2FuZGlkYXRlRWxlbWVu
dEZvckN1cnJlbnRJbmRleCgpLCB0aGlzLl9zaG93Q2FuZGlkYXRlTGlzdCk7CisgICAgfQorCisg
ICAgX2NhbmRpZGF0ZU5hbWVGb3JDdXJyZW50SW5kZXgoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50
Q2FuZGlkYXRlSW5kZXggPT09IG51bGwgPyBudWxsIDogdGhpcy5fY2FuZGlkYXRlTGlzdFt0aGlz
Ll9jdXJyZW50Q2FuZGlkYXRlSW5kZXhdOyB9CisgICAgX2NhbmRpZGF0ZUVsZW1lbnRGb3JDdXJy
ZW50SW5kZXgoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPT09IG51bGwg
PyBudWxsIDogdGhpcy5fY2FuZGlkYXRlRWxlbWVudExpc3RbdGhpcy5fY3VycmVudENhbmRpZGF0
ZUluZGV4XTsgfQorCisgICAgX2F1dG9Db21wbGV0ZUlmT25seU9uZU1hdGNoaW5nSXRlbSgpCisg
ICAgeworICAgICAgICBjb25zdCB0ZXh0RmllbGRWYWx1ZUluTG93ZXJDYXNlID0gdGhpcy5jb250
ZW50KCd0ZXh0LWZpZWxkJykudmFsdWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgaWYgKCF0ZXh0
RmllbGRWYWx1ZUluTG93ZXJDYXNlLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBsZXQgbWF0Y2hpbmdDYW5kaWRhdGVDb3VudCA9IDA7CisgICAgICAgIGxldCBtYXRjaGlu
Z0NhbmRpZGF0ZSA9IG51bGw7CisgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHRoaXMu
X2NhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUudG9Mb3dlckNhc2UoKS5p
bmNsdWRlcyh0ZXh0RmllbGRWYWx1ZUluTG93ZXJDYXNlKSkgeworICAgICAgICAgICAgICAgIG1h
dGNoaW5nQ2FuZGlkYXRlQ291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICBtYXRjaGluZ0NhbmRp
ZGF0ZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaGlu
Z0NhbmRpZGF0ZUNvdW50ID4gMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWF0Y2hpbmdDYW5kaWRhdGVDb3VudCA9PT0gMSkKKyAgICAgICAgICAgIHRo
aXMuZGlzcGF0Y2hBY3Rpb24oJ3VwZGF0ZScsIG1hdGNoaW5nQ2FuZGlkYXRlKTsKKyAgICB9CisK
KyAgICBfbW92ZUNhbmRpZGF0ZShmb3J3YXJkKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2N1
cnJlbnRDYW5kaWRhdGVJbmRleCA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleCA9IGZvcndhcmQgPyAwIDogdGhpcy5fY2FuZGlkYXRlTGlzdC5sZW5ndGgg
LSAxOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDYW5kaWRhdGVJ
bmRleCArPSBmb3J3YXJkID8gMSA6IC0xOworICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRD
YW5kaWRhdGVJbmRleCA+PSB0aGlzLl9jYW5kaWRhdGVMaXN0Lmxlbmd0aCkKKyAgICAgICAgICAg
ICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSB0aGlzLl9jYW5kaWRhdGVMaXN0Lmxl
bmd0aCAtIDE7CisgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENhbmRpZGF0ZUluZGV4IDwg
MCkKKyAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2FuZGlkYXRlSW5kZXggPSAwOworICAg
ICAgICB9CisgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CisgICAgfQorCisgICAgX3Vw
ZGF0ZUNhbmRpZGF0ZUxpc3Qoc2VsZWN0ZWRDYW5kaWRhdGVFbGVtZW50LCBzaG93Q2FuZGlkYXRl
TGlzdCkKKyAgICB7CisKKyAgICAgICAgY29uc3QgY2FuZGlkYXRlTGlzdCA9IHRoaXMuY29udGVu
dCgnY2FuZGlkYXRlLWxpc3QnKTsKKyAgICAgICAgY2FuZGlkYXRlTGlzdC5zdHlsZS5kaXNwbGF5
ID0gc2hvd0NhbmRpZGF0ZUxpc3QgPyBudWxsIDogJ25vbmUnOworCisgICAgICAgIGNvbnN0IHBy
ZXZpb3VzbHlTZWxlY3RlZENhbmRpZGF0ZUVsZW1lbnQgPSBjYW5kaWRhdGVMaXN0LnF1ZXJ5U2Vs
ZWN0b3IoJy5zZWxlY3RlZCcpOworICAgICAgICBpZiAocHJldmlvdXNseVNlbGVjdGVkQ2FuZGlk
YXRlRWxlbWVudCkKKyAgICAgICAgICAgIHByZXZpb3VzbHlTZWxlY3RlZENhbmRpZGF0ZUVsZW1l
bnQuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTsKKworICAgICAgICBpZiAoc2VsZWN0ZWRD
YW5kaWRhdGVFbGVtZW50KSB7CisgICAgICAgICAgICBzZWxlY3RlZENhbmRpZGF0ZUVsZW1lbnQu
Y2xhc3NOYW1lID0gJ3NlbGVjdGVkJzsKKyAgICAgICAgICAgIHNlbGVjdGVkQ2FuZGlkYXRlRWxl
bWVudC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBf
cmVuZGVyQ2FuZGlkYXRlTGlzdChjYW5kaWRhdGVzLCBrZXkpCisgICAgeworICAgICAgICBjb25z
dCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBs
aW5rID0gQ29tcG9uZW50QmFzZS5jcmVhdGVMaW5rOworICAgICAgICBjb25zdCBjYW5kaWRhdGVz
U3RhcnRpbmdXaXRoS2V5ID0gW107CisgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXNDb250YWluaW5n
S2V5ID0gW107CisgICAgICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIGNhbmRpZGF0ZXMpIHsK
KyAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdCA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgp
LmluZGV4T2Yoa2V5LnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgaWYgKGtleSAmJiBzZWFy
Y2hSZXN1bHQgPT09IC0xKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKCFzZWFyY2hSZXN1bHQpCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlc1N0YXJ0aW5nV2l0
aEtleS5wdXNoKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Y2FuZGlkYXRlc0NvbnRhaW5pbmdLZXkucHVzaChjYW5kaWRhdGUpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2NhbmRpZGF0ZUxpc3QgPSBjYW5kaWRhdGVzU3RhcnRpbmdXaXRoS2V5LmNvbmNh
dChjYW5kaWRhdGVzQ29udGFpbmluZ0tleSkuc2xpY2UoMCwgdGhpcy5fbWF4Q2FuZGlkYXRlTGlz
dExlbmd0aCk7CisgICAgICAgIHRoaXMuX2NhbmRpZGF0ZUVsZW1lbnRMaXN0ID0gdGhpcy5fY2Fu
ZGlkYXRlTGlzdC5tYXAoKGNhbmRpZGF0ZSkgPT4geworICAgICAgICAgICAgY29uc3QgaXRlbSA9
IGxpbmsoY2FuZGlkYXRlLCAoKSA9PiBudWxsKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgdXNlICdvbmxpY2snIGNhbGxiYWNrIHByb3ZpZGVkIGJ5ICdDb21wb25lbnRCYXNlLmNy
ZWF0ZUxpbmsnLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAvLyAnYmx1cicg
ZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlICdvbmxpY2snLCB3ZSBoYXZlIHRvIHVzZSAn
bW91c2Vkb3duJyBpbnN0ZWFkLgorICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdt
b3VzZWRvd24nLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEFjdGlvbign
dXBkYXRlJywgY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudCgnbGknLCBp
dGVtKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29u
dGVudCgnY2FuZGlkYXRlLWxpc3QnKSwgdGhpcy5fY2FuZGlkYXRlRWxlbWVudExpc3QpOworICAg
IH0KKworICAgIHN0YXRpYyBodG1sVGVtcGxhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGA8
ZGl2IGlkPSdjb21ib3gtYm94Jz4KKyAgICAgICAgICAgIDxpbnB1dCBpZD0ndGV4dC1maWVsZCc+
PC9pbnB1dD4KKyAgICAgICAgICAgIDx1bCBpZD0iY2FuZGlkYXRlLWxpc3QiPjwvdWw+CisgICAg
ICAgIDwvZGl2PmA7CisgICAgfQorCisgICAgc3RhdGljIGNzc1RlbXBsYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBgCisgICAgICAgICAgICBkaXYgeworICAgICAgICAgICAgICAgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDEuNHJlbTsKKyAgICAgICAg
ICAgICAgICBsZWZ0OiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bDplbXB0eSB7
CisgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdWwgeworICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMjUwbXMg
ZWFzZS1pbjsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMC4xcmVtIDAuM3JlbTsKKyAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lOwor
ICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cisg
ICAgICAgICAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICAgICAgICAgICAgICB0
b3A6IDEuNXJlbTsKKyAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjJyZW07CisgICAg
ICAgICAgICAgICAgei1pbmRleDogMTA7CisgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29s
dXRlOworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogOC41cmVtOworICAgICAgICAgICAgICAg
IG1heC1oZWlnaHQ6IDEwcmVtOworICAgICAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBsaSB7CisgICAgICAgICAgICAgICAgdGV4dC1hbGln
bjogbGVmdDsKKyAgICAgICAgICAgICAgICBtYXJnaW46IDA7CisgICAgICAgICAgICAgICAgcGFk
ZGluZzogMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGk6aG92ZXIsCisgICAgICAg
ICAgICBsaS5zZWxlY3RlZCB7CisgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMDQs
IDE1MywgNTEsIDAuMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpIGEgeworICAg
ICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICAgICAgICAgICAgICBmb250
LXNpemU6IDAuOHJlbTsKKyAgICAgICAgICAgICAgICBjb2xvcjogaW5oZXJpdDsKKyAgICAgICAg
ICAgICAgICBkaXNwbGF5OiBibG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgYDsKKyAgICB9
Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgnY29tYm8tYm94JywgQ29tYm9Cb3gp
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL2N1c3RvbWl6YWJsZS10ZXN0LWdyb3VwLWZvcm0uanMgYi9XZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5q
cwppbmRleCA0NjkzODAxOWNiMzVhMjgwOTRlN2YyMDhlMjMyZGY0ZDIwNTY5ZjJiLi5jYzAxYWFi
YzdlMTdhNWRkMmUxNWFjYjljNmYzMDY4ODc1ZDAxMTg5IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9w
ZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBvbmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3Jv
dXAtZm9ybS5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2NvbXBv
bmVudHMvY3VzdG9taXphYmxlLXRlc3QtZ3JvdXAtZm9ybS5qcwpAQCAtMSw0ICsxLDMgQEAKLQog
Y2xhc3MgQ3VzdG9taXphYmxlVGVzdEdyb3VwRm9ybSBleHRlbmRzIFRlc3RHcm91cEZvcm0gewog
CiAgICAgY29uc3RydWN0b3IoKQpAQCAtNywxNSArNiwyMCBAQCBjbGFzcyBDdXN0b21pemFibGVU
ZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3VwRm9ybSB7CiAgICAgICAgIHRoaXMuX2NvbW1p
dFNldE1hcCA9IG51bGw7CiAgICAgICAgIHRoaXMuX25hbWUgPSBudWxsOwogICAgICAgICB0aGlz
Ll9pc0N1c3RvbWl6ZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAg
PSB7fTsKLQotICAgICAgICB0aGlzLl9yZW5kZXJDdXN0b21SZXZpc2lvblRhYmxlTGF6aWx5ID0g
bmV3IExhemlseUV2YWx1YXRlZEZ1bmN0aW9uKHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFi
bGUuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0gbnVsbDsK
KyAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcCA9IG51bGw7CisgICAgICAgIHRoaXMuX2No
ZWNrZWRMYWJlbEJ5UG9zaXRpb24gPSBudWxsOworICAgICAgICB0aGlzLl9oYXNJbmNvbXBsZXRl
T3duZWRSZXBvc2l0b3J5ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fZmV0Y2hpbmdDb21taXRQcm9t
aXNlcyA9IFtdOwogICAgIH0KIAogICAgIHNldENvbW1pdFNldE1hcChtYXApCiAgICAgewogICAg
ICAgICB0aGlzLl9jb21taXRTZXRNYXAgPSBtYXA7CiAgICAgICAgIHRoaXMuX2lzQ3VzdG9taXpl
ZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9mZXRjaGluZ0NvbW1pdFByb21pc2VzID0gW107Cisg
ICAgICAgIHRoaXMuX2NoZWNrZWRMYWJlbEJ5UG9zaXRpb24gPSBuZXcgTWFwOworICAgICAgICB0
aGlzLl9oYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5ID0gbmV3IE1hcDsKICAgICAgICAgdGhp
cy5lbnF1ZXVlVG9SZW5kZXIoKTsKICAgICB9CiAKQEAgLTMyLDkgKzM2LDMzIEBAIGNsYXNzIEN1
c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAg
bmFtZUNvbnRyb2wub25pbnB1dCA9ICgpID0+IHsKICAgICAgICAgICAgIHRoaXMuX25hbWUgPSBu
YW1lQ29udHJvbC52YWx1ZTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgfTsKIAogICAgICAgICB0aGlzLmNvbnRlbnQoJ2N1c3RvbWl6ZS1s
aW5rJykub25jbGljayA9IHRoaXMuY3JlYXRlRXZlbnRIYW5kbGVyKCgpID0+IHsKKyAgICAgICAg
ICAgIGlmICghdGhpcy5faXNDdXN0b21pemVkKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2ZldGNoaW5nQ29tbWl0UHJvbWlzZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbW1pdFNldE1hcCA9IHRoaXMu
X2NvbW1pdFNldE1hcDsKKyAgICAgICAgICAgICAgICBjb25zdCBmZXRjaGluZ0NvbW1pdFByb21p
c2VzID0gW107CisgICAgICAgICAgICAgICAgdGhpcy5fY29tbWl0U2V0TWFwID0gbmV3IE1hcDsK
KyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIGluIG9yaWdpbmFsQ29tbWl0U2V0TWFw
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybWVkaWF0ZUNvbW1pdFNldCA9IG5l
dyBJbnRlcm1lZGlhdGVDb21taXRTZXQob3JpZ2luYWxDb21taXRTZXRNYXBbbGFiZWxdKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmV0Y2hpbmdDb21taXRQcm9taXNlcy5wdXNoKGludGVybWVkaWF0
ZUNvbW1pdFNldC5mZXRjaENvbW1pdExvZ3MoKSk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2NvbW1pdFNldE1hcC5zZXQobGFiZWwsIGludGVybWVkaWF0ZUNvbW1pdFNldCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRoaXMuX2ZldGNoaW5nQ29tbWl0UHJvbWlzZXMg
PSBmZXRjaGluZ0NvbW1pdFByb21pc2VzOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFByb21p
c2UuYWxsKGZldGNoaW5nQ29tbWl0UHJvbWlzZXMpLnRoZW4oKCkgPT4geworICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fZmV0Y2hpbmdDb21taXRQcm9taXNlcyAhPT0gZmV0Y2hpbmdDb21t
aXRQcm9taXNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5faXNDdXN0b21pemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fZmV0Y2hpbmdDb21taXRQcm9taXNlcyA9IFtdOworICAgICAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IGxhYmVsIGluIG9yaWdpbmFsQ29tbWl0U2V0TWFwKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fY2hlY2tlZExhYmVsQnlQb3NpdGlvbi5zZXQobGFiZWwsIG5ldyBNYXAp
OworICAgICAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRlcigpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5faXNDdXN0b21pemVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZVRvUmVuZGVyKCk7CiAgICAgICAgIH0p
OwpAQCAtNDcsMTMgKzc1LDE0IEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0
ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb21taXRTZXRN
YXA7CiAKICAgICAgICAgY29uc3QgbWFwID0ge307Ci0gICAgICAgIGZvciAoY29uc3QgbGFiZWwg
aW4gdGhpcy5fY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbW1p
dFNldCA9IHRoaXMuX2NvbW1pdFNldE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGNv
bW1pdFNldF0gb2YgdGhpcy5fY29tbWl0U2V0TWFwKSB7CiAgICAgICAgICAgICBjb25zdCBjdXN0
b21Db21taXRTZXQgPSBuZXcgQ3VzdG9tQ29tbWl0U2V0OwotICAgICAgICAgICAgZm9yIChsZXQg
cmVwb3NpdG9yeSBvZiB0aGlzLl9jb21taXRTZXRNYXBbbGFiZWxdLnJlcG9zaXRvcmllcygpKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSB0aGlzLl9yZXZpc2lvbkVk
aXRvck1hcFtsYWJlbF0uZ2V0KHJlcG9zaXRvcnkpOworICAgICAgICAgICAgZm9yIChjb25zdCBy
ZXBvc2l0b3J5IG9mIGNvbW1pdFNldC5yZXBvc2l0b3JpZXMoKSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IHJldmlzaW9uRWRpdG9yID0gdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAuZ2V0KGxhYmVs
KS5nZXQocmVwb3NpdG9yeSk7CiAgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQocmV2aXNp
b25FZGl0b3IpOwotICAgICAgICAgICAgICAgIGN1c3RvbUNvbW1pdFNldC5zZXRSZXZpc2lvbkZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0b3IudmFsdWUpOworICAgICAgICAg
ICAgICAgIGNvbnN0IG93bmVyUmV2aXNpb24gPSB0aGlzLl9vd25lclJldmlzaW9uTWFwLmdldChs
YWJlbCkuZ2V0KHJlcG9zaXRvcnkpIHx8IG51bGw7CisKKyAgICAgICAgICAgICAgICBjdXN0b21D
b21taXRTZXQuc2V0UmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnksIHJldmlzaW9uRWRp
dG9yLnZhbHVlLCBudWxsLCBvd25lclJldmlzaW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1hcFtsYWJlbF0gPSBjdXN0b21Db21taXRTZXQ7CiAgICAgICAgIH0KQEAgLTY3LDI0ICs5
NiwzOCBAQCBjbGFzcyBDdXN0b21pemFibGVUZXN0R3JvdXBGb3JtIGV4dGVuZHMgVGVzdEdyb3Vw
Rm9ybSB7CiAgICAgICAgIHRoaXMuY29udGVudCgnc3RhcnQtYnV0dG9uJykuZGlzYWJsZWQgPSAh
KHRoaXMuX2NvbW1pdFNldE1hcCAmJiB0aGlzLl9uYW1lKTsKICAgICAgICAgdGhpcy5jb250ZW50
KCdjdXN0b21pemUtbGluay1jb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0gIXRoaXMuX2NvbW1p
dFNldE1hcCA/ICdub25lJyA6IG51bGw7CiAKLSAgICAgICAgdGhpcy5fcmVuZGVyQ3VzdG9tUmV2
aXNpb25UYWJsZUxhemlseS5ldmFsdWF0ZSh0aGlzLl9jb21taXRTZXRNYXAsIHRoaXMuX2lzQ3Vz
dG9taXplZCk7CisgICAgICAgIHRoaXMuX3JlbmRlckN1c3RvbVJldmlzaW9uVGFibGUodGhpcy5f
Y29tbWl0U2V0TWFwLCB0aGlzLl9pc0N1c3RvbWl6ZWQpOwogICAgIH0KIAogICAgIF9yZW5kZXJD
dXN0b21SZXZpc2lvblRhYmxlKGNvbW1pdFNldE1hcCwgaXNDdXN0b21pemVkKQogICAgIHsKICAg
ICAgICAgaWYgKCFjb21taXRTZXRNYXAgfHwgIWlzQ3VzdG9taXplZCkgewogICAgICAgICAgICAg
dGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnY3VzdG9tLXRhYmxlJyksIFtdKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgY29uc3QgcmVwb3NpdG9yeVNldCA9IG5ldyBTZXQ7CisgICAgICAgIGNvbnN0IG93
bmVkUmVwb3NpdG9yaWVzQnlSZXBvc2l0b3J5ID0gbmV3IE1hcDsKICAgICAgICAgY29uc3QgY29t
bWl0U2V0TGFiZWxzID0gW107Ci0gICAgICAgIHRoaXMuX3JldmlzaW9uRWRpdG9yTWFwID0ge307
Ci0gICAgICAgIGZvciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKSB7Ci0gICAgICAgICAg
ICBmb3IgKGNvbnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0TWFwW2xhYmVsXS5yZXBvc2l0b3Jp
ZXMoKSkKKyAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXAgPSBuZXcgTWFwOworICAgICAg
ICB0aGlzLl9vd25lclJldmlzaW9uTWFwID0gbmV3IE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBb
bGFiZWwsIGNvbW1pdFNldF0gb2YgY29tbWl0U2V0TWFwKSB7CisgICAgICAgICAgICBmb3IgKGNv
bnN0IHJlcG9zaXRvcnkgb2YgY29tbWl0U2V0LmhpZ2hlc3RMZXZlbFJlcG9zaXRvcmllcygpKSB7
CiAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVwb3NpdG9yeSk7CisgICAgICAg
ICAgICAgICAgY29uc3Qgb3duZWRSZXBvc2l0b3JpZXMgPSBjb21taXRTZXRNYXAuZ2V0KGxhYmVs
KS5vd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5KTsKKworICAg
ICAgICAgICAgICAgIGlmICghb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFvd25lZFJlcG9zaXRvcmllc0J5UmVw
b3NpdG9yeS5oYXMocmVwb3NpdG9yeSkpCisgICAgICAgICAgICAgICAgICAgIG93bmVkUmVwb3Np
dG9yaWVzQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBuZXcgU2V0KTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBvd25lZFJlcG9zaXRvcnlTZXQgPSBvd25lZFJlcG9zaXRvcmllc0J5UmVwb3Np
dG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvd25lZFJl
cG9zaXRvcnkgb2Ygb3duZWRSZXBvc2l0b3JpZXMpCisgICAgICAgICAgICAgICAgICAgIG93bmVk
UmVwb3NpdG9yeVNldC5hZGQob3duZWRSZXBvc2l0b3J5KQorICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY29tbWl0U2V0TGFiZWxzLnB1c2gobGFiZWwpOwotICAgICAgICAgICAgdGhpcy5fcmV2
aXNpb25FZGl0b3JNYXBbbGFiZWxdID0gbmV3IE1hcDsKKyAgICAgICAgICAgIHRoaXMuX3Jldmlz
aW9uRWRpdG9yTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CisgICAgICAgICAgICB0aGlzLl9vd25l
clJldmlzaW9uTWFwLnNldChsYWJlbCwgbmV3IE1hcCk7CiAgICAgICAgIH0KIAogICAgICAgICBj
b25zdCByZXBvc2l0b3J5TGlzdCA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVz
V2l0aFVSTChBcnJheS5mcm9tKHJlcG9zaXRvcnlTZXQudmFsdWVzKCkpKTsKQEAgLTkyLDM0ICsx
MzUsMTQyIEBAIGNsYXNzIEN1c3RvbWl6YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3Jv
dXBGb3JtIHsKICAgICAgICAgdGhpcy5yZW5kZXJSZXBsYWNlKHRoaXMuY29udGVudCgnY3VzdG9t
LXRhYmxlJyksIFsKICAgICAgICAgICAgIGVsZW1lbnQoJ3RoZWFkJywKICAgICAgICAgICAgICAg
ICBlbGVtZW50KCd0cicsCi0gICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsICdSZXBv
c2l0b3J5JyksIGNvbW1pdFNldExhYmVscy5tYXAoKGxhYmVsKSA9PiBlbGVtZW50KCd0ZCcsIHtj
b2xzcGFuOiBjb21taXRTZXRMYWJlbHMubGVuZ3RoICsgMX0sIGxhYmVsKSldKSksCi0gICAgICAg
ICAgICBlbGVtZW50KCd0Ym9keScsCi0gICAgICAgICAgICAgICAgcmVwb3NpdG9yeUxpc3QubWFw
KChyZXBvc2l0b3J5KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxzID0gW2Vs
ZW1lbnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKV07Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoY29uc3QgbGFiZWwgaW4gY29tbWl0U2V0TWFwKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2VsbHMucHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRN
YXAsIHJlcG9zaXRvcnksIGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50KCd0cicsIGNlbGxzKTsKLSAgICAgICAgICAgICAgICB9KSldKTsKLQotICAgICAgICByZXR1
cm4gcmVwb3NpdG9yeUxpc3Q7CisgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50KCd0ZCcsIHtj
b2xzcGFuOiAyfSwgJ1JlcG9zaXRvcnknKSwgY29tbWl0U2V0TGFiZWxzLm1hcCgobGFiZWwpID0+
IGVsZW1lbnQoJ3RkJywge2NvbHNwYW46IGNvbW1pdFNldExhYmVscy5sZW5ndGggKyAxfSwgbGFi
ZWwpKSwgZWxlbWVudCgndGQnKV0pKSwKKyAgICAgICAgICAgIHRoaXMuX2NvbnN0cnVjdFRhYmxl
Qm9keUxpc3QocmVwb3NpdG9yeUxpc3QsIGNvbW1pdFNldE1hcCwgb3duZWRSZXBvc2l0b3JpZXNC
eVJlcG9zaXRvcnksIHRoaXMuX2hhc0luY29tcGxldGVPd25lZFJlcG9zaXRvcnkpXSk7CisgICAg
fQorCisgICAgX2NvbnN0cnVjdFRhYmxlQm9keUxpc3QocmVwb3NpdG9yeUxpc3QsIGNvbW1pdFNl
dE1hcCwgb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnksIGhhc0luY29tcGxldGVPd25lZFJl
cG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5j
cmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCB0YWJsZUJvZHlMaXN0ID0gW107CisgICAgICAg
IGZvcihjb25zdCByZXBvc2l0b3J5IG9mIHJlcG9zaXRvcnlMaXN0KSB7CisgICAgICAgICAgICBj
b25zdCByb3dzID0gW107CisgICAgICAgICAgICBjb25zdCBhbGxDb21taXRTZXRTcGVjaWZpZXNP
d25lckNvbW1pdCA9IEFycmF5LmZyb20oY29tbWl0U2V0TWFwLnZhbHVlcygpKS5ldmVyeSgoY29t
bWl0U2V0KSA9PiBjb21taXRTZXQub3duc0NvbW1pdHNGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkp
KTsKKyAgICAgICAgICAgIGNvbnN0IGhhc0luY29tcGxldGVSb3cgPSBoYXNJbmNvbXBsZXRlT3du
ZWRSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGNvbnN0IG93bmVkUmVw
b3NpdG9yaWVzID0gb3duZWRSZXBvc2l0b3JpZXNCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkp
OworCisgICAgICAgICAgICByb3dzLnB1c2godGhpcy5fY29uc3RydWN0VGFibGVSb3dGb3JDb21t
aXRzV2l0aG91dE93bmVyKGNvbW1pdFNldE1hcCwgcmVwb3NpdG9yeSwgYWxsQ29tbWl0U2V0U3Bl
Y2lmaWVzT3duZXJDb21taXQsIGhhc0luY29tcGxldGVPd25lZFJlcG9zaXRvcnkpKTsKKworICAg
ICAgICAgICAgaWYgKCghb3duZWRSZXBvc2l0b3JpZXMgfHwgIW93bmVkUmVwb3NpdG9yaWVzLnNp
emUpICYmICFoYXNJbmNvbXBsZXRlUm93KSB7CisgICAgICAgICAgICAgICAgdGFibGVCb2R5TGlz
dC5wdXNoKGVsZW1lbnQoJ3Rib2R5Jywgcm93cykpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGNvbnN0IG93bmVkUmVwb3NpdG9y
eSBvZiBvd25lZFJlcG9zaXRvcmllcykKKyAgICAgICAgICAgICAgICByb3dzLnB1c2godGhpcy5f
Y29uc3RydWN0VGFibGVSb3dGb3JDb21taXRzV2l0aE93bmVyKGNvbW1pdFNldE1hcCwgb3duZWRS
ZXBvc2l0b3J5LCByZXBvc2l0b3J5KSk7CisKKyAgICAgICAgICAgIGlmIChoYXNJbmNvbXBsZXRl
Um93KSB7CisgICAgICAgICAgICAgICAgY29uc3QgY29tbWl0cyA9IEFycmF5LmZyb20oY29tbWl0
U2V0TWFwLnZhbHVlcygpKS5tYXAoKGNvbW1pdFNldCkgPT4gY29tbWl0U2V0LmNvbW1pdEZvclJl
cG9zaXRvcnkocmVwb3NpdG9yeSkpOworICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1pdERpZmYg
PSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21taXRzKC4uLmNvbW1p
dHMpOworICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0aGlzLl9jb25zdHJ1Y3RUYWJsZVJvd0Zv
ckluY29tcGxldGVPd25lZENvbW1pdHMoY29tbWl0U2V0TWFwLCByZXBvc2l0b3J5LCBjb21taXRE
aWZmKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZUJvZHlMaXN0LnB1c2goZWxl
bWVudCgndGJvZHknLCByb3dzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRhYmxlQm9k
eUxpc3Q7CisgICAgfQorCisgICAgX2NvbnN0cnVjdFRhYmxlUm93Rm9yQ29tbWl0c1dpdGhvdXRP
d25lcihjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIG93bnNSZXBvc2l0b3JpZXMsIGhhc0luY29t
cGxldGVPd25lZFJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29t
cG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBjZWxscyA9IFtlbGVtZW50
KCd0aCcsIHtjb2xzcGFuOiAyfSwgcmVwb3NpdG9yeS5sYWJlbCgpKV07CisKKyAgICAgICAgZm9y
IChjb25zdCBsYWJlbCBvZiBjb21taXRTZXRNYXAua2V5cygpKQorICAgICAgICAgICAgY2VsbHMu
cHVzaCh0aGlzLl9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJl
cG9zaXRvcnksIGxhYmVsLCBudWxsLCBvd25zUmVwb3NpdG9yaWVzKSk7CisKKyAgICAgICAgaWYg
KG93bnNSZXBvc2l0b3JpZXMpIHsKKyAgICAgICAgICAgIGNvbnN0IHBsdXNCdXR0b24gPSBuZXcg
UGx1c0J1dHRvbihoYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5LmdldChyZXBvc2l0b3J5KSk7
CisgICAgICAgICAgICBwbHVzQnV0dG9uLmxpc3RlblRvQWN0aW9uKCdhY3RpdmF0ZScsICgpID0+
IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9oYXNJbmNvbXBsZXRlT3duZWRSZXBvc2l0b3J5LnNl
dChyZXBvc2l0b3J5LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLmVucXVldWVUb1JlbmRl
cigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjZWxscy5wdXNoKGVsZW1lbnQoJ3Rk
JywgcGx1c0J1dHRvbikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNlbGxzLnB1c2go
ZWxlbWVudCgndGQnKSk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOwor
ICAgIH0KKworICAgIF9jb25zdHJ1Y3RUYWJsZVJvd0ZvckNvbW1pdHNXaXRoT3duZXIoY29tbWl0
U2V0TWFwLCByZXBvc2l0b3J5LCBvd25lclJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25z
dCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVtZW50OworICAgICAgICBjb25zdCBj
ZWxscyA9IFtlbGVtZW50KCd0ZCcsIHtjbGFzczogJ293bmVyLXJlcG9zaXRvcnktbGFiZWwnfSks
IGVsZW1lbnQoJ3RoJywgcmVwb3NpdG9yeS5sYWJlbCgpKV07CisgICAgICAgIGNvbnN0IG1pbnVz
QnV0dG9uID0gbmV3IE1pbnVzQnV0dG9uKCk7CisKKyAgICAgICAgZm9yIChjb25zdCBsYWJlbCBv
ZiBjb21taXRTZXRNYXAua2V5cygpKQorICAgICAgICAgICAgY2VsbHMucHVzaCh0aGlzLl9jb25z
dHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAsIHJlcG9zaXRvcnksIGxhYmVs
LCBvd25lclJlcG9zaXRvcnksIGZhbHNlKSk7CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVu
VG9BY3Rpb24oJ2FjdGl2YXRlJywgKCkgPT4geworICAgICAgICAgICAgZm9yIChjb25zdCBjb21t
aXRTZXQgb2YgY29tbWl0U2V0TWFwLnZhbHVlcygpKQorICAgICAgICAgICAgICAgIGNvbW1pdFNl
dC5yZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCisgICAgICAgICAgICB0aGlz
LmVucXVldWVUb1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAgICAgY2VsbHMucHVzaChlbGVt
ZW50KCd0ZCcsIG1pbnVzQnV0dG9uKSk7CisgICAgICAgIHJldHVybiBlbGVtZW50KCd0cicsIGNl
bGxzKTsKICAgICB9CiAKLSAgICBfY29uc3RydWN0UmV2aXNpb25SYWRpb0J1dHRvbnMoY29tbWl0
U2V0TWFwLCByZXBvc2l0b3J5LCByb3dMYWJlbCkKKyAgICBfY29uc3RydWN0VGFibGVSb3dGb3JJ
bmNvbXBsZXRlT3duZWRDb21taXRzKGNvbW1pdFNldE1hcCwgb3duZXJSZXBvc2l0b3J5LCBjb21t
aXREaWZmKQogICAgIHsKICAgICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3Jl
YXRlRWxlbWVudDsKLSAgICAgICAgY29uc3QgcmV2aXNpb25FZGl0b3IgPSBlbGVtZW50KCdpbnB1
dCcpOworICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uQ291bnQgPSAgY29tbWl0U2V0TWFwLnNp
emU7CisgICAgICAgIGNvbnN0IG51bWJlck9mQ2VsbHNQZXJDb25maWd1cmF0aW9uID0gY29uZmln
dXJhdGlvbkNvdW50ICsgMTsKKyAgICAgICAgY29uc3QgY2hhbmdlZFJlcG9zaXRvcmllcyA9IEFy
cmF5LmZyb20oY29tbWl0RGlmZi5rZXlzKCkpOworICAgICAgICBjb25zdCBtaW51c0J1dHRvbiA9
IG5ldyBNaW51c0J1dHRvbigpOworICAgICAgICBjb25zdCBjb21ib0JveCA9IG5ldyBDb21ib0Jv
eChjaGFuZ2VkUmVwb3NpdG9yaWVzLm1hcCgocmVwb3NpdG9yeSkgPT4gcmVwb3NpdG9yeS5uYW1l
KCkpLnNvcnQoKSk7CiAKLSAgICAgICAgdGhpcy5fcmV2aXNpb25FZGl0b3JNYXBbcm93TGFiZWxd
LnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvcik7CisgICAgICAgIGNvbWJvQm94Lmxpc3Rl
blRvQWN0aW9uKCd1cGRhdGUnLCAocmVwb3NpdG9yeU5hbWUpID0+IHsKKyAgICAgICAgICAgIGNv
bnN0IHRhcmdldFJlcG9zaXRvcnkgPSBjaGFuZ2VkUmVwb3NpdG9yaWVzLmZpbmQoKHJlcG9zaXRv
cnkpID0+IHJlcG9zaXRvcnlOYW1lID09PSByZXBvc2l0b3J5Lm5hbWUoKSk7CisgICAgICAgICAg
ICBjb25zdCBvd25lZENvbW1pdERpZmZlcmVuY2VGb3JSZXBvc2l0b3J5ID0gQXJyYXkuZnJvbShj
b21taXREaWZmLmdldCh0YXJnZXRSZXBvc2l0b3J5KS52YWx1ZXMoKSk7CisgICAgICAgICAgICBj
b25zdCBjb21taXRTZXRMaXN0ID0gQXJyYXkuZnJvbShjb21taXRTZXRNYXAudmFsdWVzKCkpOwor
CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChvd25lZENvbW1pdERpZmZlcmVuY2VGb3JSZXBv
c2l0b3J5Lmxlbmd0aCA9PT0gY29tbWl0U2V0TGlzdC5sZW5ndGgpOworICAgICAgICAgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCBjb21taXRTZXRMaXN0Lmxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
ICAgIGNvbW1pdFNldExpc3RbaV0uc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeSh0YXJnZXRSZXBvc2l0
b3J5LCBvd25lZENvbW1pdERpZmZlcmVuY2VGb3JSZXBvc2l0b3J5W2ldKTsKKyAgICAgICAgICAg
IHRoaXMuX2hhc0luY29tcGxldGVPd25lZFJlcG9zaXRvcnkuc2V0KG93bmVyUmVwb3NpdG9yeSwg
ZmFsc2UpOworICAgICAgICAgICAgdGhpcy5lbnF1ZXVlVG9SZW5kZXIoKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgY29uc3QgY2VsbHMgPSBbZWxlbWVudCgndGQnLCB7Y2xhc3M6ICdvd25lci1y
ZXBvc2l0b3J5LWxhYmVsJ30pLCBlbGVtZW50KCd0aCcsIGNvbWJvQm94KSwgZWxlbWVudCgndGQn
LCB7Y29sc3BhbjogY29uZmlndXJhdGlvbkNvdW50ICogbnVtYmVyT2ZDZWxsc1BlckNvbmZpZ3Vy
YXRpb259KV07CisKKyAgICAgICAgbWludXNCdXR0b24ubGlzdGVuVG9BY3Rpb24oJ2FjdGl2YXRl
JywgKCkgPT4geworICAgICAgICAgICAgdGhpcy5faGFzSW5jb21wbGV0ZU93bmVkUmVwb3NpdG9y
eS5zZXQob3duZXJSZXBvc2l0b3J5LCBmYWxzZSk7CisgICAgICAgICAgICB0aGlzLmVucXVldWVU
b1JlbmRlcigpOworICAgICAgICB9KTsKKyAgICAgICAgY2VsbHMucHVzaChlbGVtZW50KCd0ZCcs
IG1pbnVzQnV0dG9uKSk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQoJ3RyJywgY2VsbHMpOwor
ICAgIH0KKworICAgIF9jb25zdHJ1Y3RSZXZpc2lvblJhZGlvQnV0dG9ucyhjb21taXRTZXRNYXAs
IHJlcG9zaXRvcnksIHJvd0xhYmVsLCBvd25lclJlcG9zaXRvcnksIG93bnNSZXBvc2l0b3JpZXMp
CisgICAgeworICAgICAgICBjb25zdCBlbGVtZW50ID0gQ29tcG9uZW50QmFzZS5jcmVhdGVFbGVt
ZW50OworICAgICAgICBjb25zdCByZXZpc2lvbkVkaXRvciA9IGVsZW1lbnQoJ2lucHV0Jywge2Rp
c2FibGVkOiAhIW93bmVyUmVwb3NpdG9yeSwKKyAgICAgICAgICAgIG9uY2hhbmdlOiAoKSA9PiB7
CisgICAgICAgICAgICAgICAgaWYgKCFvd25zUmVwb3NpdG9yaWVzKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29tbWl0U2V0TWFwLmdldChyb3dMYWJlbCku
dXBkYXRlUmV2aXNpb25Gb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgcmV2aXNpb25FZGl0
b3IudmFsdWUpLmNhdGNoKAorICAgICAgICAgICAgICAgICAgICAoKSA9PiByZXZpc2lvbkVkaXRv
ci52YWx1ZSA9ICcnKTsKKyAgICAgICAgICAgIH19KTsKKworICAgICAgICB0aGlzLl9yZXZpc2lv
bkVkaXRvck1hcC5nZXQocm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCByZXZpc2lvbkVkaXRvcik7
CiAKICAgICAgICAgY29uc3Qgbm9kZXMgPSBbXTsKLSAgICAgICAgZm9yIChsZXQgbGFiZWxUb0No
b29zZSBpbiBjb21taXRTZXRNYXApIHsKLSAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IGNvbW1p
dFNldE1hcFtsYWJlbFRvQ2hvb3NlXS5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpOwot
ICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGxhYmVsVG9DaG9vc2UgPT0gcm93TGFiZWw7Cisg
ICAgICAgIGZvciAoY29uc3QgbGFiZWxUb0Nob29zZSBvZiBjb21taXRTZXRNYXAua2V5cygpKSB7
CisgICAgICAgICAgICBjb25zdCBjb21taXQgPSBjb21taXRTZXRNYXAuZ2V0KGxhYmVsVG9DaG9v
c2UpLmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBjb25zdCBj
aGVja2VkTGFiZWwgPSB0aGlzLl9jaGVja2VkTGFiZWxCeVBvc2l0aW9uLmdldChyb3dMYWJlbCku
Z2V0KHJlcG9zaXRvcnkpIHx8IHJvd0xhYmVsOworICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9
ICBsYWJlbFRvQ2hvb3NlID09IGNoZWNrZWRMYWJlbDsKICAgICAgICAgICAgIGNvbnN0IHJhZGlv
QnV0dG9uID0gZWxlbWVudCgnaW5wdXQnLCB7dHlwZTogJ3JhZGlvJywgbmFtZTogYCR7cm93TGFi
ZWx9LSR7cmVwb3NpdG9yeS5pZCgpfS1yYWRpb2AsIGNoZWNrZWQsCi0gICAgICAgICAgICAgICAg
b25jaGFuZ2U6ICgpID0+IHsgcmV2aXNpb25FZGl0b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQu
cmV2aXNpb24oKSA6ICcnOyB9fSk7CisgICAgICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tlZExhYmVsQnlQb3NpdGlvbi5nZXQocm93
TGFiZWwpLnNldChyZXBvc2l0b3J5LCBsYWJlbFRvQ2hvb3NlKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV2aXNpb25FZGl0b3IudmFsdWUgPSBjb21taXQgPyBjb21taXQucmV2aXNpb24oKSA6ICcn
OworICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0ICYmIGNvbW1pdC5vd25lckNvbW1pdCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJSZXZpc2lvbk1hcC5nZXQocm93
TGFiZWwpLnNldChyZXBvc2l0b3J5LCBjb21taXQub3duZXJDb21taXQoKS5yZXZpc2lvbigpKTsK
KyAgICAgICAgICAgICAgICB9fSk7CiAKLSAgICAgICAgICAgIGlmIChjaGVja2VkKQorICAgICAg
ICAgICAgaWYgKGNoZWNrZWQpIHsKICAgICAgICAgICAgICAgICByZXZpc2lvbkVkaXRvci52YWx1
ZSA9IGNvbW1pdCA/IGNvbW1pdC5yZXZpc2lvbigpIDogJyc7CisgICAgICAgICAgICAgICAgaWYg
KGNvbW1pdCAmJiBjb21taXQub3duZXJDb21taXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fb3duZXJSZXZpc2lvbk1hcC5nZXQocm93TGFiZWwpLnNldChyZXBvc2l0b3J5LCBjb21taXQu
b3duZXJDb21taXQoKS5yZXZpc2lvbigpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5v
ZGVzLnB1c2goZWxlbWVudCgndGQnLCBlbGVtZW50KCdsYWJlbCcsIFtyYWRpb0J1dHRvbiwgbGFi
ZWxUb0Nob29zZV0pKSk7CiAgICAgICAgIH0KICAgICAgICAgbm9kZXMucHVzaChlbGVtZW50KCd0
ZCcsIHJldmlzaW9uRWRpdG9yKSk7CkBAIC0xMzksNiArMjkwLDIxIEBAIGNsYXNzIEN1c3RvbWl6
YWJsZVRlc3RHcm91cEZvcm0gZXh0ZW5kcyBUZXN0R3JvdXBGb3JtIHsKICAgICAgICAgICAgICAg
ICBtYXJnaW46IDFyZW0gMDsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgI2N1c3RvbS10
YWJsZSB0ZC5vd25lci1yZXBvc2l0b3J5LWxhYmVsIHsKKyAgICAgICAgICAgICAgICBib3JkZXIt
dG9wOiBzb2xpZCAycHggdHJhbnNwYXJlbnQ7CisgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRv
bTogc29saWQgMXB4IHRyYW5zcGFyZW50OworICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMnJl
bTsKKyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0cjpsYXN0LWNoaWxkIHRkLm93bmVyLXJlcG9zaXRv
cnktbGFiZWwgeworICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjZGRk
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjY3VzdG9tLXRhYmxlIHRoIHsKKyAgICAg
ICAgICAgICAgICBtaW4td2lkdGg6IDEycmVtOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAjY3VzdG9tLXRhYmxlLAogICAgICAgICAgICAgI2N1c3RvbS10YWJsZSB0ZCwKICAgICAgICAg
ICAgICNjdXN0b20tdGFibGUgdGggewpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3B1YmxpYy92My9jb21wb25lbnRzL21pbnVzLWJ1dHRvbi5qcyBiL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9taW51cy1idXR0b24uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmJkMjc5ZDMzOGQwMDIzM2I0YTRhODlkMjAwODhkMzRlNGQzZGI1YgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9uZW50cy9taW51
cy1idXR0b24uanMKQEAgLTAsMCArMSwxNyBAQAorCitjbGFzcyBNaW51c0J1dHRvbiBleHRlbmRz
IEJ1dHRvbkJhc2UgeworICAgIGNvbnN0cnVjdG9yKGRpc2FibGVkPWZhbHNlKQorICAgIHsKKyAg
ICAgICAgc3VwZXIoJ21pbnVzLWJ1dHRvbicsIGRpc2FibGVkKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYnV0dG9uQ29udGVudCgpCisgICAgeworICAgICAgICByZXR1cm4gYDxnIHN0cm9rZT0iYmxh
Y2siIHN0cm9rZS13aWR0aD0iMTAiIGlkPSJpY29uIj4KKyAgICAgICAgICAgIDxjaXJjbGUgY3g9
IjUwIiBjeT0iNTAiIHI9IjQwIiBmaWxsPSJ0cmFuc3BhcmVudCIvPgorICAgICAgICAgICAgPHBv
bHlnb24gcG9pbnRzPSIyNSw1MCA3NSw1MCIgLz4KKyAgICAgICAgPC9nPmA7CisgICAgfQorfQor
CitDb21wb25lbnRCYXNlLmRlZmluZUVsZW1lbnQoJ21pbnVzLWJ1dHRvbicsIE1pbnVzQnV0dG9u
KTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvY29tcG9u
ZW50cy9vd25lZC1jb21taXQtdmlld2VyLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMKaW5kZXggNjhmNzQzMzg1
YjQ1MDVlOWVmZWQ3ZDRmNGYwN2RmYzZmNWYxMmUxMi4uNWVjMmU2ZjdlMjEwNGUxMDUzNDRjNmUz
MTk4YzE2YWUwNDUzZDJmMyAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1
YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL293bmVkLWNvbW1pdC12aWV3ZXIu
anMKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgT3duZWRDb21taXRWaWV3ZXIgZXh0ZW5kcyBDb21w
b25lbnRCYXNlIHsKICAgICAgICAgaWYgKCFwcmV2aW91c093bmVkQ29tbWl0cyB8fCAhY3VycmVu
dE93bmVkQ29tbWl0cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBkaWZm
ZXJlbmNlID0gQ29tbWl0TG9nLmRpZmZPd25lZENvbW1pdHModGhpcy5fcHJldmlvdXNDb21taXQs
IHRoaXMuX2N1cnJlbnRDb21taXQpOworICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gQ29tbWl0
TG9nLm93bmVkQ29tbWl0RGlmZmVyZW5jZUZvck93bmVyQ29tbWl0cyh0aGlzLl9wcmV2aW91c0Nv
bW1pdCwgdGhpcy5fY3VycmVudENvbW1pdCk7CiAgICAgICAgIGNvbnN0IHNvcnRlZFJlcG9zaXRv
cmllcyA9IFJlcG9zaXRvcnkuc29ydEJ5TmFtZShbLi4uZGlmZmVyZW5jZS5rZXlzKCldKTsKICAg
ICAgICAgY29uc3QgZWxlbWVudCA9IENvbXBvbmVudEJhc2UuY3JlYXRlRWxlbWVudDsKIApkaWZm
IC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25lbnRzL3Bs
dXMtYnV0dG9uLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9jb21wb25l
bnRzL3BsdXMtYnV0dG9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0OThlNjM5NjUwNDcyMzgxMjdhMzgxNzVi
OGVmZTQxNWQ2MzZlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5v
cmcvcHVibGljL3YzL2NvbXBvbmVudHMvcGx1cy1idXR0b24uanMKQEAgLTAsMCArMSwxOCBAQAor
CitjbGFzcyBQbHVzQnV0dG9uIGV4dGVuZHMgQnV0dG9uQmFzZSB7CisgICAgY29uc3RydWN0b3Io
ZGlzYWJsZWQ9ZmFsc2UpCisgICAgeworICAgICAgICBzdXBlcigncGx1cy1idXR0b24nLCBkaXNh
YmxlZCk7CisgICAgfQorCisgICAgc3RhdGljIGJ1dHRvbkNvbnRlbnQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGA8ZyBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEwIiBpZD0iaWNvbiI+
CisgICAgICAgICAgICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgZmlsbD0idHJhbnNw
YXJlbnQiLz4KKyAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNTAsMjUgNTAsNzUiIC8+Cisg
ICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI1LDUwIDc1LDUwIiAvPgorICAgICAgICA8L2c+
YDsKKyAgICB9Cit9CisKK0NvbXBvbmVudEJhc2UuZGVmaW5lRWxlbWVudCgncGx1cy1idXR0b24n
LCBQbHVzQnV0dG9uKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJs
aWMvdjMvaW5kZXguaHRtbCBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvaW5k
ZXguaHRtbAppbmRleCAxYTIxYzBmNjU3OTkzMzk2ZTM5N2FmMDJmY2E3NzBlMzlhMTQ3ZGQ5Li4w
MjMzZjk2ZmVhZTc4MzdlODJkNzA0MTAyNzc2MGVhNWUwMWJlM2JmIDEwMDY0NAotLS0gYS9XZWJz
aXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL2luZGV4Lmh0bWwKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9pbmRleC5odG1sCkBAIC05OSw2ICs5OSw5IEBAIFJ1
biB0b29scy9idW5kbGUtdjMtc2NyaXB0cyB0byBzcGVlZCB1cCB0aGUgbG9hZCB0aW1lIGZvciBw
cm9kdWN0aW9uLmApOwogICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jdXN0b20tY29u
ZmlndXJhdGlvbi10ZXN0LWdyb3VwLWZvcm0uanMiPjwvc2NyaXB0PgogICAgICAgICA8c2NyaXB0
IHNyYz0iY29tcG9uZW50cy9pbnN0YW50LWZpbGUtdXBsb2FkZXIuanMiPjwvc2NyaXB0PgogICAg
ICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9mcmVzaG5lc3MtaW5kaWNhdG9yLmpzIj48L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvcGx1cy1idXR0b24uanMiPjwv
c2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9taW51cy1idXR0b24uanMi
Pjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0IHNyYz0iY29tcG9uZW50cy9jb21iby1ib3guanMi
Pjwvc2NyaXB0PgogCiAgICAgICAgIDxzY3JpcHQgc3JjPSJwYWdlcy9wYWdlLmpzIj48L3Njcmlw
dD4KICAgICAgICAgPHNjcmlwdCBzcmM9InBhZ2VzL3BhZ2Utcm91dGVyLmpzIj48L3NjcmlwdD4K
ZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2Nv
bW1pdC1sb2cuanMgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9j
b21taXQtbG9nLmpzCmluZGV4IDdiZTQyMTQ1NmNhZGQ1ZmIzMGYzYzNjMmM1NzBjZTJlYmRhMTcy
NzEuLjIxM2JlZmJkOTNiYTVmZTRjZjc0YTg4ZmYwZmZhZjdmZWQzY2Y0ODIgMTAwNjQ0Ci0tLSBh
L1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1sb2cuanMK
KysrIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LWxv
Zy5qcwpAQCAtMTIsNiArMTIsOCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRhTW9kZWxP
YmplY3QgewogICAgICAgICBpZiAodGhpcy5fcmVtb3RlSWQpCiAgICAgICAgICAgICB0aGlzLmVu
c3VyZU5hbWVkU3RhdGljTWFwKCdyZW1vdGVJZCcpW3RoaXMuX3JlbW90ZUlkXSA9IHRoaXM7CiAg
ICAgICAgIHRoaXMuX293bmVkQ29tbWl0cyA9IG51bGw7CisgICAgICAgIHRoaXMuX293bmVyQ29t
bWl0ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fb3duZWRDb21taXRCeU93bmVkUmVwb3NpdG9yeSA9
IG5ldyBNYXA7CiAgICAgfQogCiAgICAgdXBkYXRlU2luZ2xldG9uKHJhd0RhdGEpCkBAIC0zNiwx
MyArMzgsMTcgQEAgY2xhc3MgQ29tbWl0TG9nIGV4dGVuZHMgRGF0YU1vZGVsT2JqZWN0IHsKICAg
ICBtZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0YVsnbWVzc2FnZSddOyB9CiAgICAgdXJs
KCkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeS51cmxGb3JSZXZpc2lvbih0aGlzLl9yYXdEYXRh
WydyZXZpc2lvbiddKTsgfQogICAgIG93bnNDb21taXRzKCkgeyByZXR1cm4gdGhpcy5fcmF3RGF0
YVsnb3duc0NvbW1pdHMnXTsgfQorICAgIG93bmVkQ29tbWl0cygpIHsgcmV0dXJuIHRoaXMuX293
bmVkQ29tbWl0czsgfQorICAgIG93bmVyQ29tbWl0KCkgeyByZXR1cm4gdGhpcy5fb3duZXJDb21t
aXQ7IH0KKworICAgIHNldE93bmVyQ29tbWl0cyhvd25lckNvbW1pdCkgeyB0aGlzLl9vd25lckNv
bW1pdCA9IG93bmVyQ29tbWl0OyB9CiAKICAgICBsYWJlbCgpCiAgICAgewotICAgICAgICB2YXIg
cmV2aXNpb24gPSB0aGlzLnJldmlzaW9uKCk7CisgICAgICAgIGNvbnN0IHJldmlzaW9uID0gdGhp
cy5yZXZpc2lvbigpOwogICAgICAgICBpZiAocGFyc2VJbnQocmV2aXNpb24pID09IHJldmlzaW9u
KSAvLyBlLmcuIHIxMjM0NQogICAgICAgICAgICAgcmV0dXJuICdyJyArIHJldmlzaW9uOwotICAg
ICAgICBlbHNlIGlmIChyZXZpc2lvbi5sZW5ndGggPT0gNDApIC8vIGUuZy4gZ2l0IGhhc2gKKyAg
ICAgICAgaWYgKHJldmlzaW9uLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAogICAgICAg
ICAgICAgcmV0dXJuIHJldmlzaW9uLnN1YnN0cmluZygwLCA4KTsKICAgICAgICAgcmV0dXJuIHJl
dmlzaW9uOwogICAgIH0KQEAgLTU5LDEyICs2NSwxMCBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5k
cyBEYXRhTW9kZWxPYmplY3QgewogCiAgICAgICAgIGNvbnN0IHRvID0gdGhpcy5yZXZpc2lvbigp
OwogICAgICAgICBjb25zdCBmcm9tID0gcHJldmlvdXNDb21taXQucmV2aXNpb24oKTsKLSAgICAg
ICAgbGV0IGZyb21SZXZpc2lvbkZvclVSTCA9IGZyb207CiAgICAgICAgIGxldCBsYWJlbCA9IG51
bGw7Ci0gICAgICAgIGlmIChwYXJzZUludChmcm9tKSA9PSBmcm9tKSB7IC8vIGUuZy4gcjEyMzQ1
LgotICAgICAgICAgICAgZnJvbVJldmlzaW9uRm9yVVJMID0gKHBhcnNlSW50KGZyb20pICsgMSku
dG9TdHJpbmc7CisgICAgICAgIGlmIChwYXJzZUludChmcm9tKSA9PSBmcm9tKS8vIGUuZy4gcjEy
MzQ1LgogICAgICAgICAgICAgbGFiZWwgPSBgciR7ZnJvbX0tciR7dGhpcy5yZXZpc2lvbigpfWA7
Ci0gICAgICAgIH0gZWxzZSBpZiAodG8ubGVuZ3RoID09IDQwKSAvLyBlLmcuIGdpdCBoYXNoCisg
ICAgICAgIGVsc2UgaWYgKHRvLmxlbmd0aCA9PSA0MCkgLy8gZS5nLiBnaXQgaGFzaAogICAgICAg
ICAgICAgbGFiZWwgPSBgJHtmcm9tLnN1YnN0cmluZygwLCA4KX0uLiR7dG8uc3Vic3RyaW5nKDAs
IDgpfWA7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxhYmVsID0gYCR7ZnJvbX0gLSAke3Rv
fWA7CkBAIC04Niw2ICs5MCw4IEBAIGNsYXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9i
amVjdCB7CiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIG93bmVkQ29tbWl0Rm9yT3duZWRSZXBv
c2l0b3J5KG93bmVkUmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fb3duZWRDb21taXRCeU93bmVk
UmVwb3NpdG9yeS5nZXQob3duZWRSZXBvc2l0b3J5KTsgfQorCiAgICAgZmV0Y2hPd25lZENvbW1p
dHMoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnJlcG9zaXRvcnkoKS5vd25lZFJlcG9zaXRv
cmllcygpKQpAQCAtOTQsMTEgKzEwMCwxNyBAQCBjbGFzcyBDb21taXRMb2cgZXh0ZW5kcyBEYXRh
TW9kZWxPYmplY3QgewogICAgICAgICBpZiAoIXRoaXMub3duc0NvbW1pdHMoKSkKICAgICAgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpOwogCi0gICAgICAgIGlmICh0aGlzLl9vd25lZENv
bW1pdHMpCisgICAgICAgIGlmICh0aGlzLl9vd25lZENvbW1pdHMpIHsKKyAgICAgICAgICAgIHRo
aXMuX293bmVkQ29tbWl0cy5mb3JFYWNoKChvd25lZENvbW1pdCkgPT4gb3duZWRDb21taXQuc2V0
T3duZXJDb21taXRzKHRoaXMpKTsKICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUo
dGhpcy5fb3duZWRDb21taXRzKTsKKyAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBDb21taXRM
b2cuY2FjaGVkRmV0Y2goYC4uL2FwaS9jb21taXRzLyR7dGhpcy5yZXBvc2l0b3J5KCkuaWQoKX0v
b3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj0ke2VzY2FwZSh0aGlzLnJldmlzaW9uKCkpfWAp
LnRoZW4oKGRhdGEpID0+IHsKICAgICAgICAgICAgIHRoaXMuX293bmVkQ29tbWl0cyA9IENvbW1p
dExvZy5fY29uc3RydWN0RnJvbVJhd0RhdGEoZGF0YSk7CisgICAgICAgICAgICB0aGlzLl9vd25l
ZENvbW1pdHMuZm9yRWFjaCgob3duZWRDb21taXQpID0+IHsKKyAgICAgICAgICAgICAgICBvd25l
ZENvbW1pdC5zZXRPd25lckNvbW1pdHModGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5fb3du
ZWRDb21taXRCeU93bmVkUmVwb3NpdG9yeS5zZXQob3duZWRDb21taXQucmVwb3NpdG9yeSgpLCBv
d25lZENvbW1pdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9v
d25lZENvbW1pdHM7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTExMSwyNSArMTIzLDI3IEBAIGNs
YXNzIENvbW1pdExvZyBleHRlbmRzIERhdGFNb2RlbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBv
d25lZENvbW1pdE1hcDsKICAgICB9CiAKLSAgICBzdGF0aWMgZGlmZk93bmVkQ29tbWl0cyhwcmV2
aW91c0NvbW1pdCwgY3VycmVudENvbW1pdCkKKyAgICBzdGF0aWMgb3duZWRDb21taXREaWZmZXJl
bmNlRm9yT3duZXJDb21taXRzKC4uLmNvbW1pdHMpCiAgICAgewotICAgICAgICBjb25zb2xlLmFz
c2VydChwcmV2aW91c0NvbW1pdCk7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KGN1cnJlbnRDb21t
aXQpOwotICAgICAgICBjb25zb2xlLmFzc2VydChwcmV2aW91c0NvbW1pdC5fb3duZWRDb21taXRz
KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoY3VycmVudENvbW1pdC5fb3duZWRDb21taXRzKTsK
LQotICAgICAgICBjb25zdCBwcmV2aW91c093bmVkQ29tbWl0TWFwID0gcHJldmlvdXNDb21taXQu
X2J1aWxkT3duZWRDb21taXRNYXAoKTsKLSAgICAgICAgY29uc3QgY3VycmVudE93bmVkQ29tbWl0
TWFwID0gY3VycmVudENvbW1pdC5fYnVpbGRPd25lZENvbW1pdE1hcCgpOwotICAgICAgICBjb25z
dCBvd25lZENvbW1pdFJlcG9zaXRvcmllcyA9IG5ldyBTZXQoWy4uLmN1cnJlbnRPd25lZENvbW1p
dE1hcC5rZXlzKCksIC4uLnByZXZpb3VzT3duZWRDb21taXRNYXAua2V5cygpXSk7Ci0gICAgICAg
IGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgTWFwOworICAgICAgICBjb25zb2xlLmFzc2VydChjb21t
aXRzLmxlbmd0aCA+PSAyKTsKKworICAgICAgICBjb25zdCBvd25lZENvbW1pdFJlcG9zaXRvcmll
cyA9IG5ldyBTZXQ7CisgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0TWFwTGlzdCA9IGNvbW1pdHMu
bWFwKChjb21taXQpID0+IHsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGNvbW1pdCk7Cisg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXQuX293bmVkQ29tbWl0cyk7CisgICAgICAg
ICAgICBjb25zdCBvd25lZENvbW1pdE1hcCA9IGNvbW1pdC5fYnVpbGRPd25lZENvbW1pdE1hcCgp
OworICAgICAgICAgICAgZm9yIChjb25zdCByZXBvc2l0b3J5IG9mIG93bmVkQ29tbWl0TWFwLmtl
eXMoKSkKKyAgICAgICAgICAgICAgICBvd25lZENvbW1pdFJlcG9zaXRvcmllcy5hZGQocmVwb3Np
dG9yeSk7CisgICAgICAgICAgICByZXR1cm4gb3duZWRDb21taXRNYXA7CisgICAgICAgIH0pOwog
CisgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgTWFwOwogICAgICAgICBvd25lZENvbW1p
dFJlcG9zaXRvcmllcy5mb3JFYWNoKChvd25lZENvbW1pdFJlcG9zaXRvcnkpID0+IHsKLSAgICAg
ICAgICAgIGNvbnN0IGN1cnJlbnRSZXZpc2lvbiA9IGN1cnJlbnRPd25lZENvbW1pdE1hcC5nZXQo
b3duZWRDb21taXRSZXBvc2l0b3J5KTsKLSAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUmV2aXNp
b24gPSBwcmV2aW91c093bmVkQ29tbWl0TWFwLmdldChvd25lZENvbW1pdFJlcG9zaXRvcnkpOwot
ICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXZpc2lvbiAhPSBwcmV2aW91c1JldmlzaW9uKQotICAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2Uuc2V0KG93bmVkQ29tbWl0UmVwb3NpdG9yeSwgW3ByZXZp
b3VzUmV2aXNpb24sIGN1cnJlbnRSZXZpc2lvbl0pOworICAgICAgICAgICAgY29uc3Qgb3duZWRD
b21taXRzID0gb3duZWRDb21taXRNYXBMaXN0Lm1hcCgob3duZWRDb21taXRNYXApID0+IG93bmVk
Q29tbWl0TWFwLmdldChvd25lZENvbW1pdFJlcG9zaXRvcnkpKTsKKyAgICAgICAgICAgIGNvbnN0
IHVuaXF1ZU93bmVkQ29tbWl0cyA9IG5ldyBTZXQob3duZWRDb21taXRzKTsKKyAgICAgICAgICAg
IGlmICh1bmlxdWVPd25lZENvbW1pdHMuc2l6ZSA+IDEpCisgICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZS5zZXQob3duZWRDb21taXRSZXBvc2l0b3J5LCBvd25lZENvbW1pdHMpOwogICAgICAgICB9
KTsKLQogICAgICAgICByZXR1cm4gZGlmZmVyZW5jZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL3BlcmYud2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMgYi9X
ZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvcHVibGljL3YzL21vZGVscy9jb21taXQtc2V0LmpzCmlu
ZGV4IGIxNzhhYzgwZTUyM2Q0MGFmZjFjZWQyZjI5NzQ0NjA5ODI2NTZlZjcuLjU3M2M0NjIxYTBj
ZTU4NGI3YmNmNzJjMjk2ZDUzMGYxNDFiYmJhMzYgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3BlcmYu
d2Via2l0Lm9yZy9wdWJsaWMvdjMvbW9kZWxzL2NvbW1pdC1zZXQuanMKKysrIGIvV2Vic2l0ZXMv
cGVyZi53ZWJraXQub3JnL3B1YmxpYy92My9tb2RlbHMvY29tbWl0LXNldC5qcwpAQCAtNzAsOCAr
NzAsOCBAQCBjbGFzcyBDb21taXRTZXQgZXh0ZW5kcyBEYXRhTW9kZWxPYmplY3QgewogICAgIGNv
bW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRv
Q29tbWl0TWFwLmdldChyZXBvc2l0b3J5KTsgfQogICAgIG93bmVyQ29tbWl0Rm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9yZXBvc2l0b3J5VG9Db21taXRPd25lck1hcC5n
ZXQocmVwb3NpdG9yeSk7IH0KICAgICB0b3BMZXZlbFJlcG9zaXRvcmllcygpIHsgcmV0dXJuIFJl
cG9zaXRvcnkuc29ydEJ5TmFtZVByZWZlcnJpbmdPbmVzV2l0aFVSTCh0aGlzLl9yZXBvc2l0b3Jp
ZXMuZmlsdGVyKChyZXBvc2l0b3J5KSA9PiAhdGhpcy5vd25lclJldmlzaW9uRm9yUmVwb3NpdG9y
eShyZXBvc2l0b3J5KSkpOyB9Ci0KICAgICBvd25lZFJlcG9zaXRvcmllc0Zvck93bmVyUmVwb3Np
dG9yeShyZXBvc2l0b3J5KSB7IHJldHVybiB0aGlzLl9vd25lclJlcG9zaXRvcnlUb093bmVkUmVw
b3NpdG9yaWVzTWFwLmdldChyZXBvc2l0b3J5KTsgfQorICAgIGNvbW1pdEZvclJlcG9zaXRvcnko
cmVwb3NpdG9yeSkgeyByZXR1cm4gdGhpcy5fcmVwb3NpdG9yeVRvQ29tbWl0TWFwLmdldChyZXBv
c2l0b3J5KTsgfQogCiAgICAgcmV2aXNpb25Gb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCiAgICAg
ewpAQCAtMjQ4LDggKzI0OCwxMDMgQEAgY2xhc3MgQ3VzdG9tQ29tbWl0U2V0IHsKICAgICB9CiB9
CiAKK2NsYXNzIEludGVybWVkaWF0ZUNvbW1pdFNldCB7CisKKyAgICBjb25zdHJ1Y3Rvcihjb21t
aXRTZXQpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChjb21taXRTZXQgaW5zdGFuY2Vv
ZiBDb21taXRTZXQpOworICAgICAgICB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkgPSBuZXcgTWFw
OworICAgICAgICB0aGlzLl9vd25lclRvT3duZWRSZXBvc2l0b3JpZXMgPSBuZXcgTWFwOworICAg
ICAgICB0aGlzLl9mZXRjaGluZ1Byb21pc2VCeVJlcG9zaXRvcnkgPSBuZXcgTWFwOworCisgICAg
ICAgIGZvciAoY29uc3QgcmVwb3NpdG9yeSBvZiBjb21taXRTZXQucmVwb3NpdG9yaWVzKCkpCisg
ICAgICAgICAgICB0aGlzLnNldENvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSwgY29tbWl0
U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSksIGNvbW1pdFNldC5vd25lckNvbW1p
dEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkpOworICAgIH0KKworICAgIGZldGNoQ29tbWl0TG9n
cygpCisgICAgeworICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2VzID0gW107CisgICAgICAg
IGZvciAoY29uc3QgW3JlcG9zaXRvcnksIGNvbW1pdF0gb2YgdGhpcy5fY29tbWl0QnlSZXBvc2l0
b3J5KQorICAgICAgICAgICAgZmV0Y2hpbmdQcm9taXNlcy5wdXNoKHRoaXMuX2ZldGNoQ29tbWl0
TG9nQW5kT3duZWRDb21taXRzKHJlcG9zaXRvcnksIGNvbW1pdC5yZXZpc2lvbigpKSk7CisgICAg
ICAgIHJldHVybiBQcm9taXNlLmFsbChmZXRjaGluZ1Byb21pc2VzKTsKKyAgICB9CisKKyAgICBf
ZmV0Y2hDb21taXRMb2dBbmRPd25lZENvbW1pdHMocmVwb3NpdG9yeSwgcmV2aXNpb24pCisgICAg
eworICAgICAgICByZXR1cm4gQ29tbWl0TG9nLmZldGNoRm9yU2luZ2xlUmV2aXNpb24ocmVwb3Np
dG9yeSwgcmV2aXNpb24pLnRoZW4oKGNvbW1pdHMpID0+IHsKKyAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KGNvbW1pdHMubGVuZ3RoID09PSAxKTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9
IGNvbW1pdHNbMF07CisgICAgICAgICAgICBpZiAoIWNvbW1pdC5vd25zQ29tbWl0cygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjb21taXQ7CisgICAgICAgICAgICByZXR1cm4gY29tbWl0LmZl
dGNoT3duZWRDb21taXRzKCkudGhlbigoKSA9PiBjb21taXQpOworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICB1cGRhdGVSZXZpc2lvbkZvck93bmVyUmVwb3NpdG9yeShyZXBvc2l0b3J5LCByZXZp
c2lvbikKKyAgICB7CisgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZSA9IHRoaXMuX2ZldGNo
Q29tbWl0TG9nQW5kT3duZWRDb21taXRzKHJlcG9zaXRvcnksIHJldmlzaW9uKTsKKyAgICAgICAg
dGhpcy5fZmV0Y2hpbmdQcm9taXNlQnlSZXBvc2l0b3J5LnNldChyZXBvc2l0b3J5LCBmZXRjaGlu
Z1Byb21pc2UpOworICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKGNvbW1pdCkg
PT4geworICAgICAgICAgICAgY29uc3QgY3VycmVudEZldGNoaW5nUHJvbWlzZSA9IHRoaXMuX2Zl
dGNoaW5nUHJvbWlzZUJ5UmVwb3NpdG9yeS5nZXQocmVwb3NpdG9yeSk7CisgICAgICAgICAgICBp
ZiAoY3VycmVudEZldGNoaW5nUHJvbWlzZSAhPT0gZmV0Y2hpbmdQcm9taXNlKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHRoaXMuX2ZldGNoaW5nUHJvbWlzZUJ5UmVwb3Np
dG9yeS5zZXQocmVwb3NpdG9yeSwgbnVsbCk7CisgICAgICAgICAgICB0aGlzLnNldENvbW1pdEZv
clJlcG9zaXRvcnkocmVwb3NpdG9yeSwgY29tbWl0KTsKKyAgICAgICAgfSk7CisgICAgfQorCisg
ICAgc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShyZXBvc2l0b3J5LCBjb21taXQsIG93bmVyQ29tbWl0
ID0gbnVsbCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcG9zaXRvcnkgaW5zdGFu
Y2VvZiBSZXBvc2l0b3J5KTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY29tbWl0IGluc3RhbmNl
b2YgQ29tbWl0TG9nKTsKKyAgICAgICAgdGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LnNldChyZXBv
c2l0b3J5LCBjb21taXQpOworICAgICAgICBpZiAoIW93bmVyQ29tbWl0KQorICAgICAgICAgICAg
b3duZXJDb21taXQgPSBjb21taXQub3duZXJDb21taXQoKTsKKyAgICAgICAgaWYgKG93bmVyQ29t
bWl0KSB7CisgICAgICAgICAgICBjb25zdCBvd25lclJlcG9zaXRvcnkgPSBvd25lckNvbW1pdC5y
ZXBvc2l0b3J5KCk7CisgICAgICAgICAgICBpZiAoIXRoaXMuX293bmVyVG9Pd25lZFJlcG9zaXRv
cmllcy5oYXMob3duZXJSZXBvc2l0b3J5KSkKKyAgICAgICAgICAgICAgICB0aGlzLl9vd25lclRv
T3duZWRSZXBvc2l0b3JpZXMuc2V0KG93bmVyUmVwb3NpdG9yeSwgbmV3IFNldCk7CisgICAgICAg
ICAgICBjb25zdCByZXBvc2l0b3J5U2V0ID0gdGhpcy5fb3duZXJUb093bmVkUmVwb3NpdG9yaWVz
LmdldChvd25lclJlcG9zaXRvcnkpOworICAgICAgICAgICAgcmVwb3NpdG9yeVNldC5hZGQocmVw
b3NpdG9yeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZW1vdmVDb21taXRGb3JSZXBvc2l0
b3J5KHJlcG9zaXRvcnkpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChyZXBvc2l0b3J5
IGluc3RhbmNlb2YgUmVwb3NpdG9yeSk7CisgICAgICAgIGNvbnN0IG93bmVyQ29tbWl0ID0gdGhp
cy5vd25lckNvbW1pdEZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSk7CisgICAgICAgIGlmIChvd25l
ckNvbW1pdCkgeworICAgICAgICAgICAgY29uc3QgcmVwb3NpdG9yeVNldCA9IHRoaXMuX293bmVy
VG9Pd25lZFJlcG9zaXRvcmllcy5nZXQob3duZXJDb21taXQucmVwb3NpdG9yeSgpKTsKKyAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJlcG9zaXRvcnlTZXQuaGFzKHJlcG9zaXRvcnkpKTsKKyAg
ICAgICAgICAgIHJlcG9zaXRvcnlTZXQuZGVsZXRlKHJlcG9zaXRvcnkpOworICAgICAgICB9IGVs
c2UgaWYgKHRoaXMuX293bmVyVG9Pd25lZFJlcG9zaXRvcmllcy5oYXMocmVwb3NpdG9yeSkpIHsK
KyAgICAgICAgICAgIGNvbnN0IG93bmVkUmVwb3NpdG9yaWVzID0gdGhpcy5fb3duZXJUb093bmVk
UmVwb3NpdG9yaWVzLmdldChyZXBvc2l0b3J5KTsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgb3du
ZWRSZXBvc2l0b3J5IG9mIG93bmVkUmVwb3NpdG9yaWVzKQorICAgICAgICAgICAgICAgIHRoaXMu
X2NvbW1pdEJ5UmVwb3NpdG9yeS5kZWxldGUob3duZWRSZXBvc2l0b3J5KTsKKyAgICAgICAgICAg
IHRoaXMuX293bmVyVG9Pd25lZFJlcG9zaXRvcmllcy5kZWxldGUocmVwb3NpdG9yeSk7CisgICAg
ICAgIH0KKyAgICAgICAgdGhpcy5fY29tbWl0QnlSZXBvc2l0b3J5LmRlbGV0ZShyZXBvc2l0b3J5
KTsKKyAgICB9CisKKyAgICBvd25zQ29tbWl0c0ZvclJlcG9zaXRvcnkocmVwb3NpdG9yeSkgeyBy
ZXR1cm4gdGhpcy5jb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpLm93bnNDb21taXRzKCk7
IH0KKworICAgIHJlcG9zaXRvcmllcygpIHsgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fY29tbWl0
QnlSZXBvc2l0b3J5LmtleXMoKSk7IH0KKyAgICBoaWdoZXN0TGV2ZWxSZXBvc2l0b3JpZXMoKSB7
IHJldHVybiBSZXBvc2l0b3J5LnNvcnRCeU5hbWVQcmVmZXJyaW5nT25lc1dpdGhVUkwodGhpcy5y
ZXBvc2l0b3JpZXMoKS5maWx0ZXIoKHJlcG9zaXRvcnkpID0+ICF0aGlzLm93bmVyQ29tbWl0Rm9y
UmVwb3NpdG9yeShyZXBvc2l0b3J5KSkpOyB9CisgICAgY29tbWl0Rm9yUmVwb3NpdG9yeShyZXBv
c2l0b3J5KSB7IHJldHVybiB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRvcnkp
OyB9CisgICAgb3duZWRSZXBvc2l0b3JpZXNGb3JPd25lclJlcG9zaXRvcnkocmVwb3NpdG9yeSkg
eyByZXR1cm4gdGhpcy5fb3duZXJUb093bmVkUmVwb3NpdG9yaWVzLmdldChyZXBvc2l0b3J5KTsg
fQorCisgICAgb3duZXJDb21taXRGb3JSZXBvc2l0b3J5KHJlcG9zaXRvcnkpCisgICAgeworICAg
ICAgICBjb25zdCBjb21taXQgPSB0aGlzLl9jb21taXRCeVJlcG9zaXRvcnkuZ2V0KHJlcG9zaXRv
cnkpOworICAgICAgICBpZiAoIWNvbW1pdCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICByZXR1cm4gY29tbWl0Lm93bmVyQ29tbWl0KCk7CisgICAgfQorfQorCiBpZiAodHlwZW9m
IG1vZHVsZSAhPSAndW5kZWZpbmVkJykgewogICAgIG1vZHVsZS5leHBvcnRzLkNvbW1pdFNldCA9
IENvbW1pdFNldDsKICAgICBtb2R1bGUuZXhwb3J0cy5NZWFzdXJlbWVudENvbW1pdFNldCA9IE1l
YXN1cmVtZW50Q29tbWl0U2V0OwogICAgIG1vZHVsZS5leHBvcnRzLkN1c3RvbUNvbW1pdFNldCA9
IEN1c3RvbUNvbW1pdFNldDsKKyAgICBtb2R1bGUuZXhwb3J0cy5JbnRlcm1lZGlhdGVDb21taXRT
ZXQgPSBJbnRlcm1lZGlhdGVDb21taXRTZXQ7CiB9CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJm
LndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQu
b3JnL3Rvb2xzL2pzL3YzLW1vZGVscy5qcwppbmRleCBhYWQ4ZTFlNDAyZjcyZmMzNjc3MThmMjQ2
YzA4NzUwMGIwMzMwMjAyLi5kMGVmZTdjMGQ1MjA0NTg5ZDdiN2RmNjBkMWJjZjcxM2RiNTRhYTZj
IDEwMDY0NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdG9vbHMvanMvdjMtbW9kZWxz
LmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy90b29scy9qcy92My1tb2RlbHMuanMK
QEAgLTE2LDcgKzE2LDYgQEAgaW1wb3J0RnJvbVYzKCdtb2RlbHMvYnVpbGQtcmVxdWVzdC5qcycs
ICdCdWlsZFJlcXVlc3QnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2J1aWxkZXIuanMnLCAnQnVp
bGQnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL2J1aWxkZXIuanMnLCAnQnVpbGRlcicpOwogaW1w
b3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LWxvZy5qcycsICdDb21taXRMb2cnKTsKLWltcG9ydEZy
b21WMygnbW9kZWxzL2NvbW1pdC1zZXQuanMnLCAnQ3VzdG9tQ29tbWl0U2V0JykKIGltcG9ydEZy
b21WMygnbW9kZWxzL21hbmlmZXN0LmpzJywgJ01hbmlmZXN0Jyk7CiBpbXBvcnRGcm9tVjMoJ21v
ZGVscy9tZWFzdXJlbWVudC1hZGFwdG9yLmpzJywgJ01lYXN1cmVtZW50QWRhcHRvcicpOwogaW1w
b3J0RnJvbVYzKCdtb2RlbHMvbWVhc3VyZW1lbnQtY2x1c3Rlci5qcycsICdNZWFzdXJlbWVudENs
dXN0ZXInKTsKQEAgLTI3LDYgKzI2LDcgQEAgaW1wb3J0RnJvbVYzKCdtb2RlbHMvcmVwb3NpdG9y
eS5qcycsICdSZXBvc2l0b3J5Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQtc2V0Lmpz
JywgJ01lYXN1cmVtZW50Q29tbWl0U2V0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy9jb21taXQt
c2V0LmpzJywgJ0NvbW1pdFNldCcpOwogaW1wb3J0RnJvbVYzKCdtb2RlbHMvY29tbWl0LXNldC5q
cycsICdDdXN0b21Db21taXRTZXQnKTsKK2ltcG9ydEZyb21WMygnbW9kZWxzL2NvbW1pdC1zZXQu
anMnLCAnSW50ZXJtZWRpYXRlQ29tbWl0U2V0Jyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy90ZXN0
LmpzJywgJ1Rlc3QnKTsKIGltcG9ydEZyb21WMygnbW9kZWxzL3Rlc3QtZ3JvdXAuanMnLCAnVGVz
dEdyb3VwJyk7CiBpbXBvcnRGcm9tVjMoJ21vZGVscy90aW1lLXNlcmllcy5qcycsICdUaW1lU2Vy
aWVzJyk7CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9j
b21taXQtbG9nLXRlc3RzLmpzIGIvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMv
Y29tbWl0LWxvZy10ZXN0cy5qcwppbmRleCAzYjMxZTVjMDcxZDFjYzA1Y2M4YThjMGQ0NmJmM2Q1
YTM2N2VmMzA5Li5kOTI2M2IwNDgxNzM3OWUwMWZlODRjYzhiM2U0ZTFjMzAwMGU3NDE1IDEwMDY0
NAotLS0gYS9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10ZXN0cy9jb21taXQtbG9nLXRl
c3RzLmpzCisrKyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy91bml0LXRlc3RzL2NvbW1pdC1s
b2ctdGVzdHMuanMKQEAgLTE5MSw3ICsxOTEsOCBAQCBkZXNjcmliZSgnQ29tbWl0TG9nJywgZnVu
Y3Rpb24gKCkgewogICAgICAgICB9KTsKIAogICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBvd25l
ZC1jb21taXQgZm9yIGEgdmFsaWQgY29tbWl0IHJldmlzaW9uJywgKCkgPT4gewotICAgICAgICAg
ICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gb3duZXJDb21taXQoKS5mZXRjaE93bmVkQ29tbWl0
cygpOworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZSA9IGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOwog
ICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOwogICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CiAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNv
bW1pdHM/b3duZXItcmV2aXNpb249MTAuMTEuNCUyMDE1RTY1Jyk7CkBAIC0yMDgsNiArMjA5LDcg
QEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy5vd25l
ZFJlcG9zaXRvcnkpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNb
MF0ucmV2aXNpb24oKSwgJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFkZDAzZGFkM2E3YjA3ZmIn
KTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLmlkKCksIDIz
Myk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5vd25lckNv
bW1pdCgpLCBjb21taXQpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogCkBAIC0yMzMs
NiArMjM1LDcgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAg
ICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLnJlcG9zaXRvcnkoKSwgTW9ja01v
ZGVscy5vd25lZFJlcG9zaXRvcnkpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25l
ZENvbW1pdHNbMF0ucmV2aXNpb24oKSwgJzZmOGIwZGJiZGE5NWE0NDA1MDNiODhkYjFkZDAzZGFk
M2E3YjA3ZmInKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBd
LmlkKCksIDIzMyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sw
XS5vd25lckNvbW1pdCgpLCBjb21taXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb21taXQu
ZmV0Y2hPd25lZENvbW1pdHMoKTsKICAgICAgICAgICAgIH0pLnRoZW4oKG93bmVkQ29tbWl0cykg
PT4gewogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDEpOwpA
QCAtMjQxLDEyICsyNDQsMTIgQEAgZGVzY3JpYmUoJ0NvbW1pdExvZycsIGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgfSk7CiAgICAgfSk7CiAKLSAgICBkZXNjcmliZSgnZGlmZk93bmVkQ29tbWl0cycs
ICgpID0+IHsKKyAgICBkZXNjcmliZSgnb3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJDb21t
aXRzJywgKCkgPT4gewogICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKICAgICAgICAgICAgIE1v
Y2tSZW1vdGVBUEkucmVzZXQoKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gZGlmZmVyZW5jZSBiZXR3ZWVuIDIgb3duZWQtY29tbWl0cycsICgpID0+IHsKKyAgICAg
ICAgaXQoJ3Nob3VsZCByZXR1cm4gZGlmZmVyZW5jZSBiZXR3ZWVuIG93bmVkLWNvbW1pdHMgb2Yg
MiBvd25lciBjb21taXRzJywgKCkgPT4gewogICAgICAgICAgICAgY29uc3Qgb25lQ29tbWl0ID0g
b3duZXJDb21taXQoKTsKICAgICAgICAgICAgIGNvbnN0IG90aGVyQ29tbWl0ID0gb3RoZXJPd25l
ckNvbW1pdCgpOwogICAgICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gb25lQ29tbWl0
LmZldGNoT3duZWRDb21taXRzKCk7CkBAIC0yNjcsNyArMjcwLDE3IEBAIGRlc2NyaWJlKCdDb21t
aXRMb2cnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgn
MjAxNi0wNS0xM1QwMDo1NTo1Ny44NDEzNDRaJykpLAogICAgICAgICAgICAgfV19KTsKIAotICAg
ICAgICAgICAgcmV0dXJuIGZldGNoaW5nUHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAg
IHJldHVybiBmZXRjaGluZ1Byb21pc2UudGhlbigob3duZWRDb21taXRzKSA9PiB7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0cy5sZW5ndGgsIDIpOworICAgICAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmVwb3NpdG9yeSgpLCBNb2NrTW9k
ZWxzLm93bmVkUmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVk
Q29tbWl0c1swXS5yZXZpc2lvbigpLCAnNmY4YjBkYmJkYTk1YTQ0MDUwM2I4OGRiMWRkMDNkYWQz
YTdiMDdmYicpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0u
aWQoKSwgMjMzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBd
Lm93bmVyQ29tbWl0KCksIG9uZUNvbW1pdCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFs
KG93bmVkQ29tbWl0c1sxXS5yZXBvc2l0b3J5KCksIE1vY2tNb2RlbHMud2Via2l0R2l0KTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzFdLnJldmlzaW9uKCksICcw
NGE2YzcyMDM4ZjBiNzcxYTE5MjQ4Y2EyNTQ5ZTEyNTg2MTdiNWZjJyk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5pZCgpLCAyOTkpOworICAgICAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMV0ub3duZXJDb21taXQoKSwgb25lQ29tbWl0
KTsKKwogICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyRmV0Y2hpbmdQcm9taXNlID0gb3RoZXJD
b21taXQuZmV0Y2hPd25lZENvbW1pdHMoKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwo
cmVxdWVzdHMubGVuZ3RoLCAyKTsKICAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMV0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNp
b249MTAuMTEuNCUyMDE1RTY2Jyk7CkBAIC0yODYsOCArMjk5LDE3IEBAIGRlc2NyaWJlKCdDb21t
aXRMb2cnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgfV19KTsKIAogICAgICAgICAg
ICAgICAgIHJldHVybiBvdGhlckZldGNoaW5nUHJvbWlzZTsKLSAgICAgICAgICAgIH0pLnRoZW4o
KCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cuZGlm
Zk93bmVkQ29tbWl0cyhvbmVDb21taXQsIG90aGVyQ29tbWl0KTsKKyAgICAgICAgICAgIH0pLnRo
ZW4oKG93bmVkQ29tbWl0cykgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25l
ZENvbW1pdHMubGVuZ3RoLCAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRD
b21taXRzWzBdLnJlcG9zaXRvcnkoKSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnkpOworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENvbW1pdHNbMF0ucmV2aXNpb24oKSwgJ2Q1
MDk5ZTAzYjQ4MmFiZGQ3N2Y2YzRkY2I4NzVhZmQwNWJkYTVhYjgnKTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwob3duZWRDb21taXRzWzBdLmlkKCksIDIzNCk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1swXS5vd25lckNvbW1pdCgpLCBvdGhlckNvbW1p
dCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29tbWl0c1sxXS5yZXBvc2l0
b3J5KCksIE1vY2tNb2RlbHMud2Via2l0R2l0KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1
YWwob3duZWRDb21taXRzWzFdLnJldmlzaW9uKCksICcwNGE2YzcyMDM4ZjBiNzcxYTE5MjQ4Y2Ey
NTQ5ZTEyNTg2MTdiNWZjJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKG93bmVkQ29t
bWl0c1sxXS5pZCgpLCAyOTkpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChvd25lZENv
bW1pdHNbMV0ub3duZXJDb21taXQoKSwgb3RoZXJDb21taXQpOworICAgICAgICAgICAgICAgIGNv
bnN0IGRpZmZlcmVuY2UgPSBDb21taXRMb2cub3duZWRDb21taXREaWZmZXJlbmNlRm9yT3duZXJD
b21taXRzKG9uZUNvbW1pdCwgb3RoZXJDb21taXQpOwogICAgICAgICAgICAgICAgIGFzc2VydC5l
cXVhbChkaWZmZXJlbmNlLnNpemUsIDEpOwogICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChk
aWZmZXJlbmNlLmtleXMoKS5uZXh0KCkudmFsdWUsIE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5
KTsKICAgICAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3Jn
L3VuaXQtdGVzdHMvY29tbWl0LXNldC10ZXN0cy5qcyBiL1dlYnNpdGVzL3BlcmYud2Via2l0Lm9y
Zy91bml0LXRlc3RzL2NvbW1pdC1zZXQtdGVzdHMuanMKaW5kZXggYWI3NmQ1ODljZWJkMjAwNTdi
M2E3OWM2ODhhNTZhMzU4NmYwMDhmNy4uMTRkYTEwZTZjYWE3ZDRjMWIzYmU2M2RmMGUwZDllYjE0
N2E2MjcwZCAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL3VuaXQtdGVzdHMv
Y29tbWl0LXNldC10ZXN0cy5qcworKysgYi9XZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvdW5pdC10
ZXN0cy9jb21taXQtc2V0LXRlc3RzLmpzCkBAIC0zLDYgKzMsNyBAQAogY29uc3QgYXNzZXJ0ID0g
cmVxdWlyZSgnYXNzZXJ0Jyk7CiByZXF1aXJlKCcuLi90b29scy9qcy92My1tb2RlbHMuanMnKTsK
IGNvbnN0IE1vY2tNb2RlbHMgPSByZXF1aXJlKCcuL3Jlc291cmNlcy9tb2NrLXYzLW1vZGVscy5q
cycpLk1vY2tNb2RlbHM7Citjb25zdCBNb2NrUmVtb3RlQVBJID0gcmVxdWlyZSgnLi4vdW5pdC10
ZXN0cy9yZXNvdXJjZXMvbW9jay1yZW1vdGUtYXBpLmpzJykuTW9ja1JlbW90ZUFQSTsKIAogZnVu
Y3Rpb24gY3JlYXRlUGF0Y2goKQogewpAQCAtNTEsNiArNTIsMjQ1IEBAIGZ1bmN0aW9uIGN1c3Rv
bUNvbW1pdFNldFdpdGhPd25lZFJlcG9zaXRvcnlIYXNTYW1lTmFtZUFzTm90T3duZWRSZXBvc2l0
b3J5KCkKICAgICByZXR1cm4gY3VzdG9tQ29tbWl0U2V0OwogfQogCitmdW5jdGlvbiBvd25lckNv
bW1pdCgpCit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNSwgeworICAgICAgICByZXBvc2l0
b3J5OiBNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdvd25l
ci1jb21taXQtMCcsCisgICAgICAgIG93bnNDb21taXRzOiB0cnVlLAorICAgICAgICB0aW1lOiBu
dWxsLAorICAgIH0pOworfQorCitmdW5jdGlvbiBwYXJ0aWFsT3duZXJDb21taXQoKQoreworICAg
IHJldHVybiBuZXcgQ29tbWl0TG9nKDUsIHsKKyAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVs
cy5vd25lclJlcG9zaXRvcnksCisgICAgICAgIHJldmlzaW9uOiAnb3duZXItY29tbWl0LTAnLAor
ICAgICAgICBvd25zQ29tbWl0czogbnVsbCwKKyAgICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAx
Ni0wNS0xM1QwMDo1NTo1Ny44NDEzNDRaJykpLAorICAgIH0pOworfQorCitmdW5jdGlvbiBvd25l
ZENvbW1pdCgpCit7CisgICAgcmV0dXJuIG5ldyBDb21taXRMb2coNiwgeworICAgICAgICByZXBv
c2l0b3J5OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeSwKKyAgICAgICAgcmV2aXNpb246ICdv
d25lZC1jb21taXQtMCcsCisgICAgICAgIG93bnNDb21taXRzOiBudWxsLAorICAgICAgICB0aW1l
OiAxNDU2OTMyNzc0MDAwCisgICAgfSk7Cit9CisKK2Rlc2NyaWJlKCdJbnRlcm1lZGlhdGVDb21t
aXRTZXQnLCAoKSA9PiB7CisgICAgTW9ja1JlbW90ZUFQSS5pbmplY3QoKTsKKyAgICBNb2NrTW9k
ZWxzLmluamVjdCgpOworCisgICAgZGVzY3JpYmUoJ3NldENvbW1pdEZvclJlcG9zaXRvcnknLCAo
KSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgYWxsb3cgc2V0IGNvbW1pdCBmb3Igb3duZXIgcmVw
b3NpdG9yeScsICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldCA9IG5ldyBJbnRl
cm1lZGlhdGVDb21taXRTZXQobmV3IENvbW1pdFNldCk7CisgICAgICAgICAgICBjb25zdCBjb21t
aXQgPSBvd25lckNvbW1pdCgpOworICAgICAgICAgICAgY29tbWl0U2V0LnNldENvbW1pdEZvclJl
cG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnksIGNvbW1pdCk7CisgICAgICAgICAg
ICBhc3NlcnQuZXF1YWwoY29tbWl0LCBjb21taXRTZXQuY29tbWl0Rm9yUmVwb3NpdG9yeShNb2Nr
TW9kZWxzLm93bmVyUmVwb3NpdG9yeSkpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hv
dWxkIGFsbG93IHNldCBjb21taXQgZm9yIG93bmVkIHJlcG9zaXRvcnknLCAoKSA9PiB7CisgICAg
ICAgICAgICBjb25zdCBjb21taXRTZXQgPSBuZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG5ldyBD
b21taXRTZXQpOworICAgICAgICAgICAgY29uc3QgY29tbWl0ID0gb3duZXJDb21taXQoKTsKKwor
ICAgICAgICAgICAgY29uc3QgZmV0Y2hpbmdQcm9taXNlID0gY29tbWl0LmZldGNoT3duZWRDb21t
aXRzKCk7CisgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVz
dHM7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHMubGVuZ3RoLCAxKTsKKyAgICAg
ICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS51cmwsICcuLi9hcGkvY29tbWl0cy8xMTEv
b3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj1vd25lci1jb21taXQtMCcpOworICAgICAgICAg
ICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLm1ldGhvZCwgJ0dFVCcpOworCisgICAgICAgICAg
ICByZXF1ZXN0c1swXS5yZXNvbHZlKHtjb21taXRzOiBbeworICAgICAgICAgICAgICAgIGlkOiAy
MzMsCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01vZGVscy5vd25lZFJlcG9zaXRv
cnkuaWQoKSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJzZmOGIwZGJiZGE5NWE0NDA1MDNi
ODhkYjFkZDAzZGFkM2E3YjA3ZmInLAorICAgICAgICAgICAgICAgIHRpbWU6ICsobmV3IERhdGUo
JzIwMTYtMDUtMTNUMDA6NTU6NTcuODQxMzQ0WicpKSwKKyAgICAgICAgICAgIH1dfSk7CisKKwor
ICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAgICAg
ICAgICBpZDogNSwKKyAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBNb2NrTW9kZWxzLm93bmVy
UmVwb3NpdG9yeSwKKyAgICAgICAgICAgICAgICByZXZpc2lvbjogJ293bmVyLWNvbW1pdC0wJywK
KyAgICAgICAgICAgICAgICBvd25zQ29tbWl0czogdHJ1ZSwKKyAgICAgICAgICAgICAgICB0aW1l
OiArKG5ldyBEYXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0NFonKSksCisgICAgICAgICAg
ICB9XX0pOworCisgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQcm9taXNlLnRoZW4oKCkgPT4g
eworICAgICAgICAgICAgICAgIGNvbnN0IG93bmVkQ29tbWl0ID0gY29tbWl0Lm93bmVkQ29tbWl0
cygpWzBdOworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5
KE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBjb21taXQpOworICAgICAgICAgICAgICAgIGNv
bW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5
LCBvd25lZENvbW1pdCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdCwgY29t
bWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy5vd25lclJlcG9zaXRvcnkpKTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXF1YWwob3duZWRDb21taXQsIGNvbW1pdFNldC5jb21t
aXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KSk7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0LmRlZXBFcXVhbChjb21taXRTZXQucmVwb3NpdG9yaWVzKCksIFtNb2NrTW9k
ZWxzLm93bmVyUmVwb3NpdG9yeSwgTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnldKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdmZXRjaENv
bW1pdExvZ3MnLCAoKSA9PiB7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBmZXRjaCBDb21taXRMb2cg
b2JqZWN0IHdpdGggb3duZWQgY29tbWl0cyBpbmZvcm1hdGlvbicsICAoKSA9PiB7CisgICAgICAg
ICAgICBjb25zdCBjb21taXQgPSBwYXJ0aWFsT3duZXJDb21taXQoKTsKKyAgICAgICAgICAgIGFz
c2VydC5lcXVhbChjb21taXQub3duc0NvbW1pdHMoKSwgbnVsbCk7CisgICAgICAgICAgICBjb25z
dCBvd25lZCA9IG93bmVkQ29tbWl0KCk7CisKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdFNldCA9
IENvbW1pdFNldC5lbnN1cmVTaW5nbGV0b24oJzUzMjQ2NDU2Jywge3JldmlzaW9uSXRlbXM6IFt7
Y29tbWl0fSwge2NvbW1pdDogb3duZWQsIG93bmVyQ29tbWl0OiBjb21taXR9XX0pOworICAgICAg
ICAgICAgY29uc3QgaW50ZXJtZWRpYXRlQ29tbWl0U2V0ID1uZXcgSW50ZXJtZWRpYXRlQ29tbWl0
U2V0KGNvbW1pdFNldCk7CisgICAgICAgICAgICBjb25zdCBmZXRjaGluZ1Byb21pc2UgPSBpbnRl
cm1lZGlhdGVDb21taXRTZXQuZmV0Y2hDb21taXRMb2dzKCk7CisKKyAgICAgICAgICAgIGNvbnN0
IHJlcXVlc3RzID0gTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKKyAgICAgICAgICAgIGFzc2VydC5l
cXVhbChyZXF1ZXN0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVl
c3RzWzBdLnVybCwgJy9hcGkvY29tbWl0cy8xMTEvb3duZXItY29tbWl0LTAnKTsKKyAgICAgICAg
ICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS5tZXRob2QsICdHRVQnKTsKKyAgICAgICAgICAg
IGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvYXBpL2NvbW1pdHMvMTEyL293bmVkLWNv
bW1pdC0wJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMV0ubWV0aG9kLCAn
R0VUJyk7CisKKyAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoe2NvbW1pdHM6IFt7Cisg
ICAgICAgICAgICAgICAgaWQ6IDUsCisgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogTW9ja01v
ZGVscy5vd25lclJlcG9zaXRvcnksCisgICAgICAgICAgICAgICAgcmV2aXNpb246ICdvd25lci1j
b21taXQtMCcsCisgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IHRydWUsCisgICAgICAgICAg
ICAgICAgdGltZTogKyhuZXcgRGF0ZSgnMjAxNi0wNS0xM1QwMDo1NTo1Ny44NDEzNDRaJykpLAor
ICAgICAgICAgICAgfV19KTsKKyAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUoe2NvbW1p
dHM6IFt7CisgICAgICAgICAgICAgICAgaWQ6IDYsCisgICAgICAgICAgICAgICAgcmVwb3NpdG9y
eTogTW9ja01vZGVscy5vd25lZFJlcG9zaXRvcnksCisgICAgICAgICAgICAgICAgcmV2aXNpb246
ICdvd25lZC1jb21taXQtMCcsCisgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZhbHNlLAor
ICAgICAgICAgICAgICAgIHRpbWU6IDE0NTY5MzI3NzQwMDAsCisgICAgICAgICAgICB9XX0pOwor
CisgICAgICAgICAgICByZXR1cm4gTW9ja1JlbW90ZUFQSS53YWl0Rm9yUmVxdWVzdCgpLnRoZW4o
KCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0cy5sZW5ndGgsIDMp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1syXS51cmwsICcuLi9hcGkv
Y29tbWl0cy8xMTEvb3duZWQtY29tbWl0cz9vd25lci1yZXZpc2lvbj1vd25lci1jb21taXQtMCcp
OworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1syXS5tZXRob2QsICdHRVQn
KTsKKworICAgICAgICAgICAgICAgIHJlcXVlc3RzWzJdLnJlc29sdmUoe2NvbW1pdHM6IFt7Cisg
ICAgICAgICAgICAgICAgICAgIGlkOiA2LAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5
OiBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9yeS5pZCgpLAorICAgICAgICAgICAgICAgICAgICBy
ZXZpc2lvbjogJ293bmVkLWNvbW1pdC0wJywKKyAgICAgICAgICAgICAgICAgICAgb3duc0NvbW1p
dHM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICB0aW1lOiAxNDU2OTMyNzc0MDAwLAorICAg
ICAgICAgICAgICAgIH1dfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoaW5nUHJvbWlz
ZTsKKyAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGFzc2VydChj
b21taXQub3duc0NvbW1pdHMoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1p
dC5vd25lZENvbW1pdHMoKS5sZW5ndGgsIDEpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVh
bChjb21taXQub3duZWRDb21taXRzKClbMF0sIG93bmVkKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQuZXF1YWwob3duZWQub3duZXJDb21taXQoKSwgY29tbWl0KTsKKyAgICAgICAgICAgICAgICBh
c3NlcnQuZXF1YWwob3duZWQucmVwb3NpdG9yeSgpLCBNb2NrTW9kZWxzLm93bmVkUmVwb3NpdG9y
eSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGludGVybWVkaWF0ZUNvbW1pdFNldC5j
b21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KSwgb3duZWQpOwor
ICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChpbnRlcm1lZGlhdGVDb21taXRTZXQub3duZXJD
b21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5KSwgY29tbWl0KTsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGludGVybWVkaWF0ZUNvbW1pdFNldC5y
ZXBvc2l0b3JpZXMoKSwgW01vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBNb2NrTW9kZWxzLm93
bmVkUmVwb3NpdG9yeV0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
CisgICAgZGVzY3JpYmUoJ3VwZGF0ZVJldmlzaW9uRm9yT3duZXJSZXBvc2l0b3J5JywgKCkgPT4g
eworCisgICAgICAgIGl0KCdzaG91bGQgdXBkYXRlIENvbW1pdFNldCBiYXNlZCBvbiB0aGUgbGF0
ZXN0IGludm9jYXRpb24nLCAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb21taXRTZXQgPSBu
ZXcgSW50ZXJtZWRpYXRlQ29tbWl0U2V0KG5ldyBDb21taXRTZXQpOworICAgICAgICAgICAgY29u
c3QgZmlyc3RVcGRhdGVQcm9taXNlID0gY29tbWl0U2V0LnVwZGF0ZVJldmlzaW9uRm9yT3duZXJS
ZXBvc2l0b3J5KE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0wJyk7CisgICAgICAg
ICAgICBjb25zdCBzZWNvbmRVcGRhdGVQcm9taXNlID0gY29tbWl0U2V0LnVwZGF0ZVJldmlzaW9u
Rm9yT3duZXJSZXBvc2l0b3J5KE1vY2tNb2RlbHMud2Via2l0LCAnd2Via2l0LWNvbW1pdC0xJyk7
CisgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IE1vY2tSZW1vdGVBUEkucmVxdWVzdHM7CisK
KyAgICAgICAgICAgIGFzc2VydChyZXF1ZXN0cy5sZW5ndGgsIDIpOworICAgICAgICAgICAgYXNz
ZXJ0LmVxdWFsKHJlcXVlc3RzWzBdLnVybCwgJy9hcGkvY29tbWl0cy8xMS93ZWJraXQtY29tbWl0
LTAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS5tZXRob2QsICdHRVQn
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sxXS51cmwsICcvYXBpL2NvbW1p
dHMvMTEvd2Via2l0LWNvbW1pdC0xJyk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMV0ubWV0aG9kLCAnR0VUJyk7CisKKyAgICAgICAgICAgIHJlcXVlc3RzWzFdLnJlc29sdmUo
e2NvbW1pdHM6IFt7CisgICAgICAgICAgICAgICAgaWQ6IDIwMTgsCisgICAgICAgICAgICAgICAg
cmVwb3NpdG9yeTogTW9ja01vZGVscy53ZWJraXQuaWQoKSwKKyAgICAgICAgICAgICAgICByZXZp
c2lvbjogJ3dlYmtpdC1jb21taXQtMScsCisgICAgICAgICAgICAgICAgb3duc0NvbW1pdHM6IGZh
bHNlLAorICAgICAgICAgICAgICAgIHRpbWU6IDE0NTY5MzI3NzQwMDAsCisgICAgICAgICAgICB9
XX0pOworCisgICAgICAgICAgICBsZXQgY29tbWl0ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVy
biBzZWNvbmRVcGRhdGVQcm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGNvbW1p
dCA9IGNvbW1pdFNldC5jb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMud2Via2l0KTsKKwor
ICAgICAgICAgICAgICAgIHJlcXVlc3RzWzBdLnJlc29sdmUoe2NvbW1pdHM6IFt7CisgICAgICAg
ICAgICAgICAgICAgIGlkOiAyMDE3LAorICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiBN
b2NrTW9kZWxzLndlYmtpdC5pZCgpLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbjogJ3dl
YmtpdC1jb21taXQtMCcsCisgICAgICAgICAgICAgICAgICAgIG93bnNDb21taXRzOiBmYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgdGltZTogMTQ1NjkzMjc3MzAwMCwKKyAgICAgICAgICAgICAg
ICB9XX0pOworCisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1pdC5yZXZpc2lvbigp
LCAnd2Via2l0LWNvbW1pdC0xJyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbW1p
dC5pZCgpLCAyMDE4KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdFVwZGF0ZVByb21p
c2U7CisgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBj
dXJyZW50Q29tbWl0ID0gY29tbWl0U2V0LmNvbW1pdEZvclJlcG9zaXRvcnkoTW9ja01vZGVscy53
ZWJraXQpOworICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChjb21taXQsIGN1cnJlbnRDb21t
aXQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgfSk7CisKKyAgICBkZXNj
cmliZSgncmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9yeScsICgpID0+IHsKKyAgICAgICAgaXQoJ3No
b3VsZCByZW1vdmUgb3duZWQgY29tbWl0cyB3aGVuIG93bmVyIGNvbW1pdCBpcyByZW1vdmVkJywg
KCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0gbmV3IEludGVybWVkaWF0ZUNv
bW1pdFNldChuZXcgQ29tbWl0U2V0KTsKKyAgICAgICAgICAgIGNvbnN0IGNvbW1pdCA9IG93bmVy
Q29tbWl0KCk7CisKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5nUHJvbWlzZSA9IGNvbW1pdC5m
ZXRjaE93bmVkQ29tbWl0cygpOworICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBNb2NrUmVt
b3RlQVBJLnJlcXVlc3RzOworICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKHJlcXVlc3RzLmxlbmd0
aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVzdHNbMF0udXJsLCAnLi4vYXBp
L2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNpb249b3duZXItY29tbWl0LTAn
KTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1swXS5tZXRob2QsICdHRVQnKTsK
KworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29tbWl0czogW3sKKyAgICAgICAg
ICAgICAgICBpZDogMjMzLAorICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IE1vY2tNb2RlbHMu
b3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAgICAgICAgICAgICAgcmV2aXNpb246ICc2ZjhiMGRi
YmRhOTVhNDQwNTAzYjg4ZGIxZGQwM2RhZDNhN2IwN2ZiJywKKyAgICAgICAgICAgICAgICBvd25z
Q29tbWl0czogdHJ1ZQorICAgICAgICAgICAgfV19KTsKKworICAgICAgICAgICAgcmV0dXJuIGZl
dGNoaW5nUHJvbWlzZS50aGVuKCgpID0+IHsKKyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0
Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93bmVyUmVwb3NpdG9yeSwgY29tbWl0KTsK
KyAgICAgICAgICAgICAgICBjb21taXRTZXQuc2V0Q29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9k
ZWxzLm93bmVkUmVwb3NpdG9yeSwgY29tbWl0Lm93bmVkQ29tbWl0cygpWzBdKTsKKyAgICAgICAg
ICAgICAgICBjb21taXRTZXQucmVtb3ZlQ29tbWl0Rm9yUmVwb3NpdG9yeShNb2NrTW9kZWxzLm93
bmVyUmVwb3NpdG9yeSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChjb21taXRT
ZXQucmVwb3NpdG9yaWVzKCksIFtdKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKwor
ICAgICAgICBpdCgnc2hvdWxkIG5vdCByZW1vdmUgb3duZXIgY29tbWl0cyB3aGVuIG93bmVkIGNv
bW1pdCBpcyByZW1vdmVkJywgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29tbWl0U2V0ID0g
bmV3IEludGVybWVkaWF0ZUNvbW1pdFNldChuZXcgQ29tbWl0U2V0KTsKKyAgICAgICAgICAgIGNv
bnN0IGNvbW1pdCA9IG93bmVyQ29tbWl0KCk7CisKKyAgICAgICAgICAgIGNvbnN0IGZldGNoaW5n
UHJvbWlzZSA9IGNvbW1pdC5mZXRjaE93bmVkQ29tbWl0cygpOworICAgICAgICAgICAgY29uc3Qg
cmVxdWVzdHMgPSBNb2NrUmVtb3RlQVBJLnJlcXVlc3RzOworICAgICAgICAgICAgYXNzZXJ0LmVx
dWFsKHJlcXVlc3RzLmxlbmd0aCwgMSk7CisgICAgICAgICAgICBhc3NlcnQuZXF1YWwocmVxdWVz
dHNbMF0udXJsLCAnLi4vYXBpL2NvbW1pdHMvMTExL293bmVkLWNvbW1pdHM/b3duZXItcmV2aXNp
b249b3duZXItY29tbWl0LTAnKTsKKyAgICAgICAgICAgIGFzc2VydC5lcXVhbChyZXF1ZXN0c1sw
XS5tZXRob2QsICdHRVQnKTsKKworICAgICAgICAgICAgcmVxdWVzdHNbMF0ucmVzb2x2ZSh7Y29t
bWl0czogW3sKKyAgICAgICAgICAgICAgICBpZDogMjMzLAorICAgICAgICAgICAgICAgIHJlcG9z
aXRvcnk6IE1vY2tNb2RlbHMub3duZWRSZXBvc2l0b3J5LmlkKCksCisgICAgICAgICAgICAgICAg
cmV2aXNpb246ICc2ZjhiMGRiYmRhOTVhNDQwNTAzYjg4ZGIxZGQwM2RhZDNhN2IwN2ZiJywKKyAg
ICAgICAgICAgICAgICB0aW1lOiArKG5ldyBEYXRlKCcyMDE2LTA1LTEzVDAwOjU1OjU3Ljg0MTM0
NFonKSksCisgICAgICAgICAgICB9XX0pOworCisgICAgICAgICAgICByZXR1cm4gZmV0Y2hpbmdQ
cm9taXNlLnRoZW4oKCkgPT4geworICAgICAgICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRG
b3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5LCBjb21taXQpOworICAgICAg
ICAgICAgICAgIGNvbW1pdFNldC5zZXRDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3du
ZWRSZXBvc2l0b3J5LCBjb21taXQub3duZWRDb21taXRzKClbMF0pOworICAgICAgICAgICAgICAg
IGNvbW1pdFNldC5yZW1vdmVDb21taXRGb3JSZXBvc2l0b3J5KE1vY2tNb2RlbHMub3duZWRSZXBv
c2l0b3J5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKGNvbW1pdFNldC5yZXBv
c2l0b3JpZXMoKSwgW01vY2tNb2RlbHMub3duZXJSZXBvc2l0b3J5XSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisKKyAgICB9KTsKKworfSk7CisKIGRlc2NyaWJlKCdDdXN0b21Db21t
aXRTZXQnLCAoKSA9PiB7CiAgICAgTW9ja01vZGVscy5pbmplY3QoKTsKIAo=
</data>
<flag name="review"
          id="349129"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>