<?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>135777</bug_id>
          
          <creation_ts>2014-08-08 16:22:13 -0700</creation_ts>
          <short_desc>Web Inspector: SourceCode.requestContent should return a promise</short_desc>
          <delta_ts>2014-12-29 07:31:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Jonathan Wells">jonowells</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027993</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-08 16:22:13 -0700</bug_when>
    <thetext>Death to spaghetti callbacks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027994</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-08-08 16:22:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/17965804&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048300</commentid>
    <comment_count>2</comment_count>
      <attachid>241451</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-12 16:39:56 -0800</bug_when>
    <thetext>Created attachment 241451
[PATCH] Work in progress.

Here is a basic attempt to make this change. There is a bug in this code. The attempt to create this._activeRequestContentPromise. For some reason when it comes time to resolve this in processContent, this._activeRequestContentPromise is undefined. I&apos;m not sure why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048313</commentid>
    <comment_count>3</comment_count>
      <attachid>241451</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-12 17:53:21 -0800</bug_when>
    <thetext>Comment on attachment 241451
[PATCH] Work in progress.

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:104
&gt; +            sourceCode.requestContent().then(retrieveAnalyzerMessages.bind(this));

You could think about inlining some of these callback functions if they aren&apos;t used anywhere else. It seems like some of these async chains (especially further below) are manually hooked up now, and would require some more careful refactoring to fully exploit the promise-based task style.


There has been some disagreement in the past as to whether it&apos;s better to explicitly bind |this| in said inlined functions, or capture something like |var manager = this;| and use it inside the function.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:129
&gt; +        if (!this._activeRequestContentPromise)

I would add braces here for the multi-line true branch.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:131
&gt; +                if (this._contentReceived)

In what other ways could this be already set? It seems that this gets more sticky as the number of states increases. Can we use promises in all places that request content from backend, rather than just here?

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:138
&gt; +                    this.requestContentFromBackendIfNeeded();

The promise will never resolve if reaching the else if or else branches.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:217
&gt; +        this.requestContentFromBackend().then(this._processContent);

missing .bind(this)

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:268
&gt; +        this._activeRequestContentPromise.resolve({

This won&apos;t work. |Promise.prototype.resolve| is not a method; more generally you can&apos;t modify the state of a promise from outside the function used to create the Promise.
So, this implies that _processContent needs to go inside the function passed to |new Promise(...)|. That&apos;s why this refactoring is nontrivial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048490</commentid>
    <comment_count>4</comment_count>
      <attachid>241501</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-13 14:28:33 -0800</bug_when>
    <thetext>Created attachment 241501
[PATCH] Revised attempt.

This actually seems to work. A second stored promise was utilized. I&apos;m wondering though, I probably need to invalidate or remove these promises in case the content changes? What else would need to be considered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048506</commentid>
    <comment_count>5</comment_count>
      <attachid>241501</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-13 14:52:22 -0800</bug_when>
    <thetext>Comment on attachment 241501
[PATCH] Revised attempt.

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

Getting better!  As for invalidating the promise, I don&apos;t know how SourceCode lifetimes work. If the content keeps changing, then you can keep a map of revision# --&gt; content promise and include the revision# in the parameters object?

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:548
&gt;      {

A convention I have started following (but which is still up for debate) is to annotate a function with what type of value the promise will resolve to. And, maybe add a more wordy comment if the type could be multiple things.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:552
&gt; +            return NetworkAgent.getResponseBody(this._requestIdentifier);

Use .promise for now.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:559
&gt; +        return Promise.resolve();

Should this be Promise.reject()? I think that callers should be handling success and failure cases differently... and doing it with resolve/reject seems less sketchy than expecting &apos;null&apos;.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:159
&gt; +            makeSyntaxTreeAndCallCallback(parameters.error ? null : parameters.content);

For example, this could be like so:

this.requestContent()
    .then(function success(parameters) { ... })
    .catch(function error(message) { ... })

Note that I put catch chained onto .then; if you give it as a second parameter (i.e., requestContent().then(fn succ() { ... }, fn err() { ... }) then you will miss any exceptions thrown by the then() callback.

(also, I prefer putting .then on a newline with more indentation, but I think Joe and Tim prefer it as written. So, YMMV?)

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:130
&gt; +            this._activeRequestContentPromise = new Promise(function (resolve, reject) {

The double promise pattern seems unnecessary. you can do this instead, i think:

if (!this._activeRequestContentPromise) {
    this._activeRequestContentPromise = new Promise(function(resolve, reject) {
        if (!this.canRequestContentFromBackend())
            return Promise.reject();
        return this.requestContentFromBackend().then(this._processContent.bind(this));
    }
}

This will return the promise that&apos;s fulfilled after _processContent has run, after the SourceCode instance has been updated with the payload. _processContent already resolves with the parameters object, so it would be passed on to any clients that .then() the promise from requestContent().

I have no strong feelings about whether to return Promise.resolve() or Promise.reject() in the case where there&apos;s nothing to fetch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049619</commentid>
    <comment_count>6</comment_count>
      <attachid>241823</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-18 15:52:19 -0800</bug_when>
    <thetext>Created attachment 241823
[PATCH] updated WIP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049629</commentid>
    <comment_count>7</comment_count>
      <attachid>241823</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-18 16:16:14 -0800</bug_when>
    <thetext>Comment on attachment 241823
[PATCH] updated WIP.

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

Looking almost ready to land.. have you tested the affected functions manually?

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:615
&gt;          if (this.canRequestContentFromBackend())

You might as well do this unconditionally, since it will just fill in the promise slot with a rejected promise if not possible.

I&apos;m assuming that SourceCode.canRequestContentFromBackend() is invariant in all subclasses, right? If not, then we would need to think about an invalidation strategy.

(If it is invariant, then we can make this clearer by storing .canRequestContentFromBackend on the constructor, then look up this.constuctor.canRequestContentFromBackend. However, we haven&apos;t done that in many other places, so maybe a comment on the SourceCode method would be better.)

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:672
&gt; +        this.requestContent().then(function() {

maybe do this?

.then(function(content) { image.src = content.sourceCode.contentURL; })

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:158
&gt; +        this.requestContent().then(function(parameters) {

nice.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:130
&gt; +            this._activeRequestContentPromise = new Promise(function(resolve, reject) {

Even simpler: SourceCode.processContent returns a resolved promise, so we can do:

if (!this.canRequestContentFromBackend())
    this._activeRequestContentPromise = Promise.reject(...);
else
    this._activeRequestContentPromise = this.requestContentFromBackend().then(this._processContent.bind(this));

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:-201
&gt; -    requestContentFromBackendIfNeeded: function()

wohooo

&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:136
&gt; +        return NetworkAgent.loadResource.promise(frameIdentifier, this.url).then(sourceMapResourceLoaded.bind(this)); // then sourceMapResourceLoaded.bind(this)

what&apos;s the comment for?

&gt; Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js:96
&gt;          if (this.resource.failed) {

should this be just &apos;resource&apos;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049639</commentid>
    <comment_count>8</comment_count>
      <attachid>241823</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-18 16:26:52 -0800</bug_when>
    <thetext>Comment on attachment 241823
[PATCH] updated WIP.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:615
&gt;&gt;          if (this.canRequestContentFromBackend())
&gt; 
&gt; You might as well do this unconditionally, since it will just fill in the promise slot with a rejected promise if not possible.
&gt; 
&gt; I&apos;m assuming that SourceCode.canRequestContentFromBackend() is invariant in all subclasses, right? If not, then we would need to think about an invalidation strategy.
&gt; 
&gt; (If it is invariant, then we can make this clearer by storing .canRequestContentFromBackend on the constructor, then look up this.constuctor.canRequestContentFromBackend. However, we haven&apos;t done that in many other places, so maybe a comment on the SourceCode method would be better.)

It&apos;s variant. Resource, SourceMapResource, and CSSStyleSheet look for different things. This check could be done however in requestContentFromBackend() which is similarly variant across these types.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:130
&gt;&gt; +            this._activeRequestContentPromise = new Promise(function(resolve, reject) {
&gt; 
&gt; Even simpler: SourceCode.processContent returns a resolved promise, so we can do:
&gt; 
&gt; if (!this.canRequestContentFromBackend())
&gt;     this._activeRequestContentPromise = Promise.reject(...);
&gt; else
&gt;     this._activeRequestContentPromise = this.requestContentFromBackend().then(this._processContent.bind(this));

Ah! Nice. I like.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:136
&gt;&gt; +        return NetworkAgent.loadResource.promise(frameIdentifier, this.url).then(sourceMapResourceLoaded.bind(this)); // then sourceMapResourceLoaded.bind(this)
&gt; 
&gt; what&apos;s the comment for?

It was to remind myself to add a then somewhere for sourceMapResourceLoaded. I then realized that it was an inline function. Aaaaaaaand then I left it in. Will just go ahead and clean that up.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js:96
&gt;&gt;          if (this.resource.failed) {
&gt; 
&gt; should this be just &apos;resource&apos;?

Mmmmm, so there&apos;s Resource#markAsFailed() which sets this. This is used in FrameResourceManager on a stored resource, and this is used in SourceMapResource on itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049643</commentid>
    <comment_count>9</comment_count>
      <attachid>241823</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-18 16:31:31 -0800</bug_when>
    <thetext>Comment on attachment 241823
[PATCH] updated WIP.

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:615
&gt;&gt;&gt;          if (this.canRequestContentFromBackend())
&gt;&gt; 
&gt;&gt; You might as well do this unconditionally, since it will just fill in the promise slot with a rejected promise if not possible.
&gt;&gt; 
&gt;&gt; I&apos;m assuming that SourceCode.canRequestContentFromBackend() is invariant in all subclasses, right? If not, then we would need to think about an invalidation strategy.
&gt;&gt; 
&gt;&gt; (If it is invariant, then we can make this clearer by storing .canRequestContentFromBackend on the constructor, then look up this.constuctor.canRequestContentFromBackend. However, we haven&apos;t done that in many other places, so maybe a comment on the SourceCode method would be better.)
&gt; 
&gt; It&apos;s variant. Resource, SourceMapResource, and CSSStyleSheet look for different things. This check could be done however in requestContentFromBackend() which is similarly variant across these types.

Well, it definitely changes per subclass. :) I was asking whether its result changes over time.

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js:96
&gt;&gt;&gt;          if (this.resource.failed) {
&gt;&gt; 
&gt;&gt; should this be just &apos;resource&apos;?
&gt; 
&gt; Mmmmm, so there&apos;s Resource#markAsFailed() which sets this. This is used in FrameResourceManager on a stored resource, and this is used in SourceMapResource on itself.

Ah, ok. If it&apos;s not used, you should remove the local variable. It was only named before so that the argument list was accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049646</commentid>
    <comment_count>10</comment_count>
      <attachid>241823</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-18 16:35:59 -0800</bug_when>
    <thetext>Comment on attachment 241823
[PATCH] updated WIP.

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:615
&gt;&gt;&gt;&gt;          if (this.canRequestContentFromBackend())
&gt;&gt;&gt; 
&gt;&gt;&gt; You might as well do this unconditionally, since it will just fill in the promise slot with a rejected promise if not possible.
&gt;&gt;&gt; 
&gt;&gt;&gt; I&apos;m assuming that SourceCode.canRequestContentFromBackend() is invariant in all subclasses, right? If not, then we would need to think about an invalidation strategy.
&gt;&gt;&gt; 
&gt;&gt;&gt; (If it is invariant, then we can make this clearer by storing .canRequestContentFromBackend on the constructor, then look up this.constuctor.canRequestContentFromBackend. However, we haven&apos;t done that in many other places, so maybe a comment on the SourceCode method would be better.)
&gt;&gt; 
&gt;&gt; It&apos;s variant. Resource, SourceMapResource, and CSSStyleSheet look for different things. This check could be done however in requestContentFromBackend() which is similarly variant across these types.
&gt; 
&gt; Well, it definitely changes per subclass. :) I was asking whether its result changes over time.

OH! of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049657</commentid>
    <comment_count>11</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-18 16:49:21 -0800</bug_when>
    <thetext>Regarding landability, so far source loads as expected but I am testing in more detail. I have no idea yet if source maps work either. I&apos;m unsure of my changes there but I think I got it right....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050305</commentid>
    <comment_count>12</comment_count>
      <attachid>242001</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-11-20 16:26:17 -0800</bug_when>
    <thetext>Created attachment 242001
[PATCH] Very close, one refresh bug.

Here is an update that works well except for that refreshing the page causes an error in the inspector in SourceCodeTextEditor.js because of these changes. Looking into that. I think it&apos;s really close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053931</commentid>
    <comment_count>13</comment_count>
      <attachid>242962</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-12-09 13:52:23 -0800</bug_when>
    <thetext>Created attachment 242962
[PATCH] fix for review.

This patch has been tested with source maps, resources that doesn&apos;t exist on the server, page navigations, etc. It is, as best as I can tell, complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053962</commentid>
    <comment_count>14</comment_count>
      <attachid>242968</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-12-09 15:03:15 -0800</bug_when>
    <thetext>Created attachment 242968
[PATCH] fix for review ver 2.

Forgot to remove an unnecessary line of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054680</commentid>
    <comment_count>15</comment_count>
      <attachid>242968</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-12-11 16:36:09 -0800</bug_when>
    <thetext>Comment on attachment 242968
[PATCH] fix for review ver 2.

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

Looks good except for the listener leaking. Please fix that and post another patch or land yourself.

&gt; Source/WebInspectorUI/ChangeLog:11
&gt; +        if an content request error needs to be handled. Fix a bug where the appropriate error message for an

if an -&gt; if a

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:-561
&gt; -        // There is no request identifier or frame to request content from. Return false to cause the

I would preserve the first sentence of the comment.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:689
&gt; +                this.addEventListener(WebInspector.Resource.Event.LoadingDidFinish, resolve);

This will leak the promise because the WebInspector.Resource keep a hard reference to the listener. You need to use WebInspector.EventListener; see DebuggerManager&apos;s resume, stepOver, etc to see how I avoided this.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:34
&gt; +    //this._contentRequested = false;

Oops

&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:81
&gt;  

Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055709</commentid>
    <comment_count>16</comment_count>
      <attachid>242968</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-12-15 12:46:41 -0800</bug_when>
    <thetext>Comment on attachment 242968
[PATCH] fix for review ver 2.

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

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleSheet.js:129
&gt; +            return Promise.reject({ message: &quot;There is no identifier to request content with.&quot; });

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:559
&gt; +        return Promise.reject({
&gt; +            message: &quot;Content request failed.&quot;
&gt; +        });

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:682
&gt; +        if (this._failed)

This needs braces since the body of the condition is multi-line.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:685
&gt; +            return Promise.reject({
&gt; +                message: &quot;An error occurred trying to load the resource.&quot;
&gt; +            });

Shouldn&apos;t this be an Error object? Per http://trac.webkit.org/wiki/WebInspectorCodingStyleGuide#PromiseGotchas.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:687
&gt; +        if (!this._finishThenRequestContentPromise)

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:118
&gt; +            return Promise.reject({ message: &quot;There is no identifier to request content with.&quot; });

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:186
&gt; +        return Promise.reject({
&gt; +            message: &quot;Needs to be implemented by a subclass.&quot;
&gt; +        });

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceMapResource.js:127
&gt; +            return Promise.reject({ message: &quot;error: no NetworkAgent.loadResource&quot; });

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056701</commentid>
    <comment_count>17</comment_count>
      <attachid>242968</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-12-17 18:09:50 -0800</bug_when>
    <thetext>Comment on attachment 242968
[PATCH] fix for review ver 2.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:689
&gt;&gt; +                this.addEventListener(WebInspector.Resource.Event.LoadingDidFinish, resolve);
&gt; 
&gt; This will leak the promise because the WebInspector.Resource keep a hard reference to the listener. You need to use WebInspector.EventListener; see DebuggerManager&apos;s resume, stepOver, etc to see how I avoided this.

Is that not ok? The idea is to have a promise that is fulfilled that is returned after the content has been successfully requested. Seems like with your solution I&apos;ll have to go back to something like this._contentLoaded = true; somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056704</commentid>
    <comment_count>18</comment_count>
      <attachid>242968</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-12-17 18:14:11 -0800</bug_when>
    <thetext>Comment on attachment 242968
[PATCH] fix for review ver 2.

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:689
&gt;&gt;&gt; +                this.addEventListener(WebInspector.Resource.Event.LoadingDidFinish, resolve);
&gt;&gt; 
&gt;&gt; This will leak the promise because the WebInspector.Resource keep a hard reference to the listener. You need to use WebInspector.EventListener; see DebuggerManager&apos;s resume, stepOver, etc to see how I avoided this.
&gt; 
&gt; Is that not ok? The idea is to have a promise that is fulfilled that is returned after the content has been successfully requested. Seems like with your solution I&apos;ll have to go back to something like this._contentLoaded = true; somewhere.

The current design of caching the promise is totally fine.

What I&apos;m concerned about is the promise never being GC&apos;d even if we navigate to a different inspected page.
In that case I would expect the promises from the old page to be eventually GC&apos;d. If the promise is bound to |this| then it seems the Resource won&apos;t get GC&apos;d either, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057105</commentid>
    <comment_count>19</comment_count>
      <attachid>242968</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-12-19 11:28:14 -0800</bug_when>
    <thetext>Comment on attachment 242968
[PATCH] fix for review ver 2.

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:689
&gt;&gt;&gt;&gt; +                this.addEventListener(WebInspector.Resource.Event.LoadingDidFinish, resolve);
&gt;&gt;&gt; 
&gt;&gt;&gt; This will leak the promise because the WebInspector.Resource keep a hard reference to the listener. You need to use WebInspector.EventListener; see DebuggerManager&apos;s resume, stepOver, etc to see how I avoided this.
&gt;&gt; 
&gt;&gt; Is that not ok? The idea is to have a promise that is fulfilled that is returned after the content has been successfully requested. Seems like with your solution I&apos;ll have to go back to something like this._contentLoaded = true; somewhere.
&gt; 
&gt; The current design of caching the promise is totally fine.
&gt; 
&gt; What I&apos;m concerned about is the promise never being GC&apos;d even if we navigate to a different inspected page.
&gt; In that case I would expect the promises from the old page to be eventually GC&apos;d. If the promise is bound to |this| then it seems the Resource won&apos;t get GC&apos;d either, no?

Hmm, I don&apos;t think there is a leak here. &quot;this.addEventListener&quot; is an instance adding an event listener. Yes, there is a cycle between the resource / promise / and event listener, but that is fine as long as the objects cannot be referenced from the rest of the heap (GC roots), then the set of objects will get GC&apos;d.

Normally the leaks we worry about are event listeners on constructors (WebInspector.Resource.addEventListener) not instances. Because the constructor will never go away, and it will forever hold onto its listeners. Instances however, will go away. In this case, resources are destroyed when you navigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057219</commentid>
    <comment_count>20</comment_count>
      <attachid>243586</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-12-19 16:21:14 -0800</bug_when>
    <thetext>Created attachment 243586
[PATCH] fix for review ver 3.

Changes addressed. Also fixes bug with viewing source with debugger statements and other Script content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058092</commentid>
    <comment_count>21</comment_count>
      <attachid>243586</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-29 07:31:19 -0800</bug_when>
    <thetext>Comment on attachment 243586
[PATCH] fix for review ver 3.

Clearing flags on attachment: 243586

Committed r177791: &lt;http://trac.webkit.org/changeset/177791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058093</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-29 07:31:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241451</attachid>
            <date>2014-11-12 16:39:56 -0800</date>
            <delta_ts>2014-11-18 15:52:19 -0800</delta_ts>
            <desc>[PATCH] Work in progress.</desc>
            <filename>promiseswip.diff</filename>
            <type>text/plain</type>
            <size>14753</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwppbmRleCA5NjM4YmZmLi4wOGNmMTYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BbmFseXplck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC04Nyw3ICs4Nyw3IEBA
IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gcmV0cmll
dmVBbmFseXplck1lc3NhZ2VzKCkKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6
ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZh
ciBhbmFseXplck1lc3NhZ2VzID0gW107CiAgICAgICAgICAgICAgICAgdmFyIHJhd0FuYWx5emVy
TWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0aGlzLl9lc2xp
bnRDb25maWcpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdl
cyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRl
bnQocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQodGhpcykpOworICAgICAgICAgICAgc291
cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJp
bmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxl
TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0NTU1N0eWxlTWFuYWdlci5qcwppbmRleCA3YWE2NGFiLi45ZTFjODhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHls
ZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCkBAIC0zMTAsOCArMzEwLDExIEBAIFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoc3R5bGVTaGVldCk7CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hl
ZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRT
dHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIg
c3R5bGVTaGVldCA9IHBhcmFtZXRlcnMuc291cmNlQ29kZTsKKyAgICAgICAgICAgIHZhciBjb250
ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAgICAgICAgICBkZWxldGUgc3R5bGVTaGVl
dC5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0OwogCiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChz
dHlsZVNoZWV0LnVybCk7CkBAIC0zNDcsNyArMzUwLDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gc3R5bGVTaGVldFJlYWR5
KCkKICAgICAgICAgewotICAgICAgICAgICAgc3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudChmZXRj
aGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBzdHlsZVNoZWV0
LnJlcXVlc3RDb250ZW50KCkudGhlbihmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlz
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBhcHBseVN0eWxlU2hlZXRDaGFuZ2Vz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggODAyZTJiNy4uZTNjNzY5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHls
ZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RP
TU5vZGVTdHlsZXMuanMKQEAgLTQwNSw4ICs0MDUsMTAgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGVT
dHlsZXMucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRl
bnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRTdHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJz
KQogICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGVudCA9IHBhcmFtZXRlcnMuY29udGVu
dDsKKwogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGUuc3R5bGVTaGVldFRleHRSYW5n
ZSk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlLnN0eWxlU2hlZXRUZXh0UmFuZ2UpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0OCw3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbmVlZHNSZWZyZXNoID0gdHJ1ZTsK
ICAgICAgICAgdGhpcy5faWdub3JlTmV4dENvbnRlbnREaWRDaGFuZ2VGb3JTdHlsZVNoZWV0ID0g
c3R5bGUub3duZXJTdHlsZVNoZWV0OwogCi0gICAgICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5y
ZXF1ZXN0Q29udGVudChmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAg
ICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZmV0Y2hlZFN0
eWxlU2hlZXRDb250ZW50LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBjaGFuZ2VQcm9wZXJ0
eTogZnVuY3Rpb24ocHJvcGVydHksIG5hbWUsIHZhbHVlLCBwcmlvcml0eSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcwpp
bmRleCBmM2JiZGIwLi5kZWNiOGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCkBAIC01NDgsMTkgKzU0OCwxNSBA
QCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgLy8g
SWYgd2UgaGF2ZSB0aGUgcmVxdWVzdElkZW50aWZpZXIgd2UgY2FuIGdldCB0aGUgYWN0dWFsIHJl
c3BvbnNlIGZvciB0aGlzIHNwZWNpZmljIHJlc291cmNlLgogICAgICAgICAvLyBPdGhlcndpc2Ug
dGhlIGNvbnRlbnQgd2lsbCBiZSBjYWNoZWQgcmVzb3VyY2UgZGF0YSwgd2hpY2ggbWlnaHQgbm90
IGV4aXN0IGFueW1vcmUuCi0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0SWRlbnRpZmllcikgewot
ICAgICAgICAgICAgTmV0d29ya0FnZW50LmdldFJlc3BvbnNlQm9keSh0aGlzLl9yZXF1ZXN0SWRl
bnRpZmllciwgY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RJZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJu
IE5ldHdvcmtBZ2VudC5nZXRSZXNwb25zZUJvZHkodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpOwog
Ci0gICAgICAgIGlmICh0aGlzLl9wYXJlbnRGcmFtZSkgewotICAgICAgICAgICAgUGFnZUFnZW50
LmdldFJlc291cmNlQ29udGVudCh0aGlzLl9wYXJlbnRGcmFtZS5pZCwgdGhpcy5fdXJsLCBjYWxs
YmFjayk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fcGFyZW50RnJhbWUpCisgICAgICAgICAgICByZXR1cm4gUGFnZUFnZW50LmdldFJlc291
cmNlQ29udGVudC5wcm9taXNlKHRoaXMuX3BhcmVudEZyYW1lLmlkLCB0aGlzLl91cmwpOwogCi0g
ICAgICAgIC8vIFRoZXJlIGlzIG5vIHJlcXVlc3QgaWRlbnRpZmllciBvciBmcmFtZSB0byByZXF1
ZXN0IGNvbnRlbnQgZnJvbS4gUmV0dXJuIGZhbHNlIHRvIGNhdXNlIHRoZQotICAgICAgICAvLyBw
ZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBjb250ZW50LgotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIHJlcXVlc3QgaWRlbnRpZmllciBvciBmcmFtZSB0
byByZXF1ZXN0IGNvbnRlbnQgZnJvbS4gUmV0dXJuIGEgcmVzb2x2ZWQgcHJvbWlzZSB0byBjYXVz
ZSB0aGUKKyAgICAgICAgLy8gcGVuZGluZyBjYWxsZXJzIHRvIGdldCBudWxsIGNvbnRlbnQuCisg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICB9LAogCiAgICAgaW5jcmVhc2VT
aXplOiBmdW5jdGlvbihkYXRhTGVuZ3RoLCBlbGFwc2VkVGltZSkKQEAgLTY3Niw3ICs2NzIsNyBA
QCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICBpbWFnZS5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgaW1hZ2VEaWRMb2FkLmJpbmQodGhpcyksIGZhbHNlKTsKIAog
ICAgICAgICAvLyBTZXQgdGhlIGltYWdlIHNvdXJjZSBvbmNlIHdlJ3ZlIG9idGFpbmVkIHRoZSBi
YXNlNjQtZW5jb2RlZCBVUkwgZm9yIGl0LgotICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KCkudGhlbihmdW5jdGlvbigp
IHsKICAgICAgICAgICAgIGltYWdlLnNyYyA9IHRoaXMuY29udGVudFVSTDsKICAgICAgICAgfS5i
aW5kKHRoaXMpKTsKICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKaW5kZXggYjRjOWUyOS4uMmNiNmQ4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
LmpzCkBAIC0xNTUsOCArMTU1LDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnJlcXVlc3RD
b250ZW50KGZ1bmN0aW9uKGVycm9yLCBzb3VyY2VUZXh0KSB7Ci0gICAgICAgICAgICBtYWtlU3lu
dGF4VHJlZUFuZENhbGxDYWxsYmFjayhlcnJvciA/IG51bGwgOiBzb3VyY2VUZXh0KTsKKyAgICAg
ICAgdGhpcy5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZnVuY3Rpb24ocGFyYW1ldGVycykgeworICAg
ICAgICAgICAgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2socGFyYW1ldGVycy5lcnJvciA/
IG51bGwgOiBwYXJhbWV0ZXJzLmNvbnRlbnQpOwogICAgICAgICB9KTsKICAgICB9LAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNl
Q29kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3Vy
Y2VDb2RlLmpzCmluZGV4IGRiZWEwMTkuLmUxNTc4YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCkBAIC0z
NCw2ICszNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlID0gZnVuY3Rpb24oKQogCiAgICAg
dGhpcy5fc291cmNlTWFwcyA9IG51bGw7CiAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0g
bnVsbDsKKyAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0Q29udGVudFByb21pc2UgPSBudWxsOwogfTsK
IAogV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0
b3IuU291cmNlQ29kZSk7CkBAIC0xMjMsMjAgKzEyNCwyMSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LkZvcm1hdHRlckRpZENoYW5nZSk7CiAgICAg
fSwKIAotICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICByZXF1ZXN0
Q29udGVudDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodHlwZW9m
IGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKTsKLSAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAh
PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9wZW5k
aW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0KLSAgICAgICAgaWYg
KHRoaXMuX2NvbnRlbnRSZWNlaXZlZCkgewotICAgICAgICAgICAgLy8gQ2FsbCBfc2VydmljZVBl
bmRpbmdDb250ZW50UmVxdWVzdHMgb24gYSB0aW1lb3V0IHRvIGZvcmNlIGNhbGxiYWNrcyB0byBi
ZSBhc3luY2hyb25vdXMuCi0gICAgICAgICAgICBpZiAoIXRoaXMuX3NlcnZpY2VQZW5kaW5nQ29u
dGVudFJlcXVlc3RzVGltZW91dElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2Vy
dmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQo
dGhpcy5zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0cy5iaW5kKHRoaXMpLCAwKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAg
ICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZElmTmVlZGVkKCk7CisgICAgICAg
IGlmICghdGhpcy5fYWN0aXZlUmVxdWVzdENvbnRlbnRQcm9taXNlKQorICAgICAgICAgICAgdGhp
cy5fYWN0aXZlUmVxdWVzdENvbnRlbnRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZWNlaXZl
ZCkKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzb3VyY2VDb2RlOiB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhp
cy5fY29udGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NEVuY29kZWQ6IHRoaXMu
YmFzZTY0RW5jb2RlZAorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmICh0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQoKTsKKyAgICAg
ICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVJlcXVl
c3RDb250ZW50UHJvbWlzZTsKICAgICB9LAogCiAgICAgY3JlYXRlU291cmNlQ29kZUxvY2F0aW9u
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCkBAIC0xNjQsNiArMTY2LDkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAgICBpZiAocmV2aXNp
b24gIT09IHRoaXMuX2N1cnJlbnRSZXZpc2lvbikKICAgICAgICAgICAgIHJldHVybjsKIAorICAg
ICAgICBpZiAodGhpcy5fYWN0aXZlUmVxdWVzdENvbnRlbnRQcm9taXNlKQorICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2FjdGl2ZVJlcXVlc3RDb250ZW50UHJvbWlzZTsKKwogICAgICAgICB0aGlz
LmhhbmRsZUN1cnJlbnRSZXZpc2lvbkNvbnRlbnRDaGFuZ2UoKTsKIAogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5FdmVudC5Db250
ZW50RGlkQ2hhbmdlKTsKQEAgLTE5Miw3ICsxOTcsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9LAogCi0gICAgcmVx
dWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgcmVxdWVzdENv
bnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50
ZWQgYnkgc3ViY2xhc3Nlcy4KICAgICAgICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUgaW1w
bGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4iKTsKQEAgLTIwNCwyMCArMjA5LDEyIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLmNhblJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBp
ZiAoIXRoaXMuX3BlbmRpbmdDb250ZW50UmVxdWVzdENhbGxiYWNrcy5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQ
ZW5kaW5nKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1
ZXN0UmVzcG9uc2VQZW5kaW5nID0gdHJ1ZTsKIAotICAgICAgICBpZiAodGhpcy5yZXF1ZXN0Q29u
dGVudEZyb21CYWNrZW5kKHRoaXMuX3Byb2Nlc3NDb250ZW50LmJpbmQodGhpcykpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFNpbmNlIHJlcXVlc3RDb250ZW50RnJvbUJhY2tl
bmQgcmV0dXJuZWQgZmFsc2UsIGp1c3QgY2FsbCBfcHJvY2Vzc0NvbnRlbnQsCi0gICAgICAgIC8v
IHdoaWNoIHdpbGwgY2F1c2UgdGhlIHBlbmRpbmcgY2FsbGJhY2tzIHRvIGdldCBudWxsIGNvbnRl
bnQuCi0gICAgICAgIHRoaXMuX3Byb2Nlc3NDb250ZW50KCk7CisgICAgICAgIHRoaXMucmVxdWVz
dENvbnRlbnRGcm9tQmFja2VuZCgpLnRoZW4odGhpcy5fcHJvY2Vzc0NvbnRlbnQpOwogICAgIH0s
CiAKICAgICBzZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0czogZnVuY3Rpb24oZm9yY2UpCkBA
IC0yNDcsOCArMjQ0LDE0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsK
IAogICAgIC8vIFByaXZhdGUKIAotICAgIF9wcm9jZXNzQ29udGVudDogZnVuY3Rpb24oZXJyb3Is
IGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAgX3Byb2Nlc3NDb250ZW50OiBmdW5jdGlvbihw
YXJhbWV0ZXJzKQogICAgIHsKKyAgICAgICAgY29uc29sZS5sb2coInByb2Nlc3MiLCBwYXJhbWV0
ZXJzKTsKKyAgICAgICAgY29uc29sZS5sb2coImxldCdzIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIHBy
b21pc2UiLCB0aGlzLl9hY3RpdmVSZXF1ZXN0Q29udGVudFByb21pc2UpOworICAgICAgICB2YXIg
ZXJyb3IgPSBwYXJhbWV0ZXJzLmVycm9yOworICAgICAgICB2YXIgY29udGVudCA9IHBhcmFtZXRl
cnMuY29udGVudDsKKyAgICAgICAgdmFyIGJhc2U2NEVuY29kZWQgPSBwYXJhbWV0ZXJzLmJhc2U2
NEVuY29kZWQ7CisKICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICAgY29uc29sZS5lcnJv
cihlcnJvcik7CiAKQEAgLTI2Miw3ICsyNjUsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUu
cHJvdG90eXBlID0gewogICAgICAgICByZXZpc2lvbi5jb250ZW50SXNCYXNlNjRFbmNvZGVkID0g
YmFzZTY0RW5jb2RlZCB8fCBmYWxzZTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2lnbm9yZVJldmlz
aW9uQ29udGVudERpZENoYW5nZUV2ZW50OwogCi0gICAgICAgIHRoaXMuc2VydmljZVBlbmRpbmdD
b250ZW50UmVxdWVzdHMoKTsKKyAgICAgICAgdGhpcy5fYWN0aXZlUmVxdWVzdENvbnRlbnRQcm9t
aXNlLnJlc29sdmUoeworICAgICAgICAgICAgc291cmNlQ29kZTogdGhpcywKKyAgICAgICAgICAg
IGVycm9yOiBlcnJvciwKKyAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsCisgICAgICAgICAg
ICBiYXNlNjRFbmNvZGVkOiBiYXNlNjRFbmNvZGVkCisgICAgICAgIH0pOwogICAgIH0KIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jl
c291cmNlQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzCmluZGV4IDBiOTk0YWQuLjhjMGYwOTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291
cmNlQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvUmVzb3VyY2VDb250ZW50Vmlldy5qcwpAQCAtNDMsNyArNDMsNyBAQCBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VDb250ZW50VmlldyA9IGZ1bmN0aW9uKHJlc291cmNlLCBzdHlsZUNsYXNz
TmFtZSkKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9t
b3VzZVdhc0NsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgLy8gUmVxdWVzdCBjb250
ZW50IGxhc3Qgc28gdGhlIHNwaW5uZXIgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZCBpbiBjYXNlIHRo
ZSBjb250ZW50IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KLSAgICByZXNvdXJjZS5yZXF1ZXN0
Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOworICAgIHJlc291cmNl
LnJlcXVlc3RDb250ZW50KCkudGhlbih0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykp
OwogCiAgICAgaWYgKCF0aGlzLm1hbmFnZXNPd25Jc3N1ZXMpIHsKICAgICAgICAgV2ViSW5zcGVj
dG9yLmlzc3VlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFn
ZXIuRXZlbnQuSXNzdWVXYXNBZGRlZCwgdGhpcy5faXNzdWVXYXNBZGRlZCwgdGhpcyk7CkBAIC04
Niw4ICs4NiwxMiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUg
PSB7CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY29udGVudEF2YWlsYWJsZTogZnVuY3Rpb24o
cmVzb3VyY2UsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAgX2NvbnRlbnRBdmFpbGFibGU6
IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCiAgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSBwYXJh
bWV0ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250
ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2Rl
ZDsKKwogICAgICAgICAvLyBDaGVjayBmb3IgZmFpbGVkIGxvYWRzLgogICAgICAgICBpZiAodGhp
cy5yZXNvdXJjZS5mYWlsZWQpIHsKICAgICAgICAgICAgIC8vIERvbid0IHNob3cgYW4gZXJyb3Ig
bWVzc2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVycm9yIG1lc3NhZ2Ugc2hvd2luZyAobGlr
ZSBvbmUgYWRkZWQgYnkgYWRkSXNzdWUuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5q
cwppbmRleCBmNjY4MjEzLi45NTg1ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qcwpAQCAtNzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Ig
PSBmdW5jdGlvbihzb3VyY2VDb2RlKQogICAgIGVsc2UKICAgICAgICAgdGhpcy5fc291cmNlQ29k
ZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1h
cEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwogCi0gICAgc291
cmNlQ29kZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykp
OworICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHRoaXMuX2NvbnRlbnRBdmFp
bGFibGUuYmluZCh0aGlzKSk7CiAKICAgICAvLyBGSVhNRTogQ21kK0wgc2hvcmN1dCBkb2Vzbid0
IGFjdHVhbGx5IHdvcmsuCiAgICAgbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmQsICJMIiwgdGhpcy5z
aG93R29Ub0xpbmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5lbGVtZW50KTsKQEAgLTQzNiw4ICs0
MzYsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAgfSwKIAotICAgIF9jb250
ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihzb3VyY2VDb2RlLCBjb250ZW50LCBiYXNlNjRFbmNvZGVk
KQorICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAgIHsKKyAg
ICAgICAgdmFyIHNvdXJjZUNvZGUgPSBwYXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgIHZh
ciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2Rl
ZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsKKwogICAgICAgICBjb25zb2xlLmFzc2VydChz
b3VyY2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQo
IWJhc2U2NEVuY29kZWQpOwogCkBAIC02MzksNyArNjQzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbmxpbmVTY3Jp
cHRDb250ZW50UG9wdWxhdGVkID0gcGVuZGluZ1JlcXVlc3RDb3VudDsKIAotICAgICAgICBmdW5j
dGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKGVycm9yLCBjb250ZW50KQorICAgICAgICBmdW5j
dGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgc3RpbGwgd2FpdGluZyBmb3IgY29udGVu
dCBmcm9tIG90aGVyIHNjcmlwdHMuCiAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nUmVxdWVzdENv
dW50KQpAQCAtNjg5LDcgKzY5Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGJvdW5kU2NyaXB0Q29udGVudEF2YWlsYWJs
ZSA9IHNjcmlwdENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKTsKICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgc2NyaXB0c1tpXS5y
ZXF1ZXN0Q29udGVudChib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUpOworICAgICAgICAgICAg
c2NyaXB0c1tpXS5yZXF1ZXN0Q29udGVudCgpLnRoZW4oYm91bmRTY3JpcHRDb250ZW50QXZhaWxh
YmxlKTsKICAgICB9LAogCiAgICAgX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQ6IGZ1bmN0aW9u
KCkKQEAgLTcwNyw4ICs3MTEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogICAgICAgICBjb25zb2xlLmFzc2VydChzY3JpcHRzWzBdLnJhbmdlLnN0
YXJ0TGluZSA9PT0gMCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdHNbMF0ucmFuZ2Uu
c3RhcnRDb2x1bW4gPT09IDApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFp
bGFibGUoZXJyb3IsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFp
bGFibGUocGFyYW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBw
YXJhbWV0ZXJzLmNvbnRlbnQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVxdWVzdGluZ1Nj
cmlwdENvbnRlbnQ7CiAKICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZSBmdWxsIGNvbnRlbnQg
cG9wdWxhdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMgYXN5bmMgY2FsbGJhY2suCkBAIC03MjMs
NyArNzI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVudCA9IHRydWU7CiAKLSAg
ICAgICAgc2NyaXB0c1swXS5yZXF1ZXN0Q29udGVudChzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJp
bmQodGhpcykpOworICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250ZW50KCkudGhlbihzY3Jp
cHRDb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfbWF0Y2hlc1Nv
dXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241501</attachid>
            <date>2014-11-13 14:28:33 -0800</date>
            <delta_ts>2014-11-18 15:52:19 -0800</delta_ts>
            <desc>[PATCH] Revised attempt.</desc>
            <filename>promise2.diff</filename>
            <type>text/plain</type>
            <size>14759</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwppbmRleCA5NjM4YmZmLi4wOGNmMTYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BbmFseXplck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC04Nyw3ICs4Nyw3IEBA
IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gcmV0cmll
dmVBbmFseXplck1lc3NhZ2VzKCkKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6
ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZh
ciBhbmFseXplck1lc3NhZ2VzID0gW107CiAgICAgICAgICAgICAgICAgdmFyIHJhd0FuYWx5emVy
TWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0aGlzLl9lc2xp
bnRDb25maWcpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdl
cyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRl
bnQocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQodGhpcykpOworICAgICAgICAgICAgc291
cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJp
bmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxl
TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0NTU1N0eWxlTWFuYWdlci5qcwppbmRleCA3YWE2NGFiLi45ZTFjODhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHls
ZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCkBAIC0zMTAsOCArMzEwLDExIEBAIFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoc3R5bGVTaGVldCk7CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hl
ZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRT
dHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIg
c3R5bGVTaGVldCA9IHBhcmFtZXRlcnMuc291cmNlQ29kZTsKKyAgICAgICAgICAgIHZhciBjb250
ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAgICAgICAgICBkZWxldGUgc3R5bGVTaGVl
dC5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0OwogCiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChz
dHlsZVNoZWV0LnVybCk7CkBAIC0zNDcsNyArMzUwLDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gc3R5bGVTaGVldFJlYWR5
KCkKICAgICAgICAgewotICAgICAgICAgICAgc3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudChmZXRj
aGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBzdHlsZVNoZWV0
LnJlcXVlc3RDb250ZW50KCkudGhlbihmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlz
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBhcHBseVN0eWxlU2hlZXRDaGFuZ2Vz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggODAyZTJiNy4uZTNjNzY5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHls
ZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RP
TU5vZGVTdHlsZXMuanMKQEAgLTQwNSw4ICs0MDUsMTAgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGVT
dHlsZXMucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRl
bnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRTdHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJz
KQogICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGVudCA9IHBhcmFtZXRlcnMuY29udGVu
dDsKKwogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGUuc3R5bGVTaGVldFRleHRSYW5n
ZSk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlLnN0eWxlU2hlZXRUZXh0UmFuZ2UpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0OCw3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbmVlZHNSZWZyZXNoID0gdHJ1ZTsK
ICAgICAgICAgdGhpcy5faWdub3JlTmV4dENvbnRlbnREaWRDaGFuZ2VGb3JTdHlsZVNoZWV0ID0g
c3R5bGUub3duZXJTdHlsZVNoZWV0OwogCi0gICAgICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5y
ZXF1ZXN0Q29udGVudChmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAg
ICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZmV0Y2hlZFN0
eWxlU2hlZXRDb250ZW50LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBjaGFuZ2VQcm9wZXJ0
eTogZnVuY3Rpb24ocHJvcGVydHksIG5hbWUsIHZhbHVlLCBwcmlvcml0eSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcwpp
bmRleCBmM2JiZGIwLi5kZWNiOGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCkBAIC01NDgsMTkgKzU0OCwxNSBA
QCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgLy8g
SWYgd2UgaGF2ZSB0aGUgcmVxdWVzdElkZW50aWZpZXIgd2UgY2FuIGdldCB0aGUgYWN0dWFsIHJl
c3BvbnNlIGZvciB0aGlzIHNwZWNpZmljIHJlc291cmNlLgogICAgICAgICAvLyBPdGhlcndpc2Ug
dGhlIGNvbnRlbnQgd2lsbCBiZSBjYWNoZWQgcmVzb3VyY2UgZGF0YSwgd2hpY2ggbWlnaHQgbm90
IGV4aXN0IGFueW1vcmUuCi0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0SWRlbnRpZmllcikgewot
ICAgICAgICAgICAgTmV0d29ya0FnZW50LmdldFJlc3BvbnNlQm9keSh0aGlzLl9yZXF1ZXN0SWRl
bnRpZmllciwgY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RJZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJu
IE5ldHdvcmtBZ2VudC5nZXRSZXNwb25zZUJvZHkodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpOwog
Ci0gICAgICAgIGlmICh0aGlzLl9wYXJlbnRGcmFtZSkgewotICAgICAgICAgICAgUGFnZUFnZW50
LmdldFJlc291cmNlQ29udGVudCh0aGlzLl9wYXJlbnRGcmFtZS5pZCwgdGhpcy5fdXJsLCBjYWxs
YmFjayk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
dGhpcy5fcGFyZW50RnJhbWUpCisgICAgICAgICAgICByZXR1cm4gUGFnZUFnZW50LmdldFJlc291
cmNlQ29udGVudC5wcm9taXNlKHRoaXMuX3BhcmVudEZyYW1lLmlkLCB0aGlzLl91cmwpOwogCi0g
ICAgICAgIC8vIFRoZXJlIGlzIG5vIHJlcXVlc3QgaWRlbnRpZmllciBvciBmcmFtZSB0byByZXF1
ZXN0IGNvbnRlbnQgZnJvbS4gUmV0dXJuIGZhbHNlIHRvIGNhdXNlIHRoZQotICAgICAgICAvLyBw
ZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBjb250ZW50LgotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIHJlcXVlc3QgaWRlbnRpZmllciBvciBmcmFtZSB0
byByZXF1ZXN0IGNvbnRlbnQgZnJvbS4gUmV0dXJuIGEgcmVzb2x2ZWQgcHJvbWlzZSB0byBjYXVz
ZSB0aGUKKyAgICAgICAgLy8gcGVuZGluZyBjYWxsZXJzIHRvIGdldCBudWxsIGNvbnRlbnQuCisg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICB9LAogCiAgICAgaW5jcmVhc2VT
aXplOiBmdW5jdGlvbihkYXRhTGVuZ3RoLCBlbGFwc2VkVGltZSkKQEAgLTY3Niw3ICs2NzIsNyBA
QCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICBpbWFnZS5hZGRF
dmVudExpc3RlbmVyKCJsb2FkIiwgaW1hZ2VEaWRMb2FkLmJpbmQodGhpcyksIGZhbHNlKTsKIAog
ICAgICAgICAvLyBTZXQgdGhlIGltYWdlIHNvdXJjZSBvbmNlIHdlJ3ZlIG9idGFpbmVkIHRoZSBi
YXNlNjQtZW5jb2RlZCBVUkwgZm9yIGl0LgotICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KCkudGhlbihmdW5jdGlvbigp
IHsKICAgICAgICAgICAgIGltYWdlLnNyYyA9IHRoaXMuY29udGVudFVSTDsKICAgICAgICAgfS5i
aW5kKHRoaXMpKTsKICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKaW5kZXggYjRjOWUyOS4uMmNiNmQ4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
LmpzCkBAIC0xNTUsOCArMTU1LDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnJlcXVlc3RD
b250ZW50KGZ1bmN0aW9uKGVycm9yLCBzb3VyY2VUZXh0KSB7Ci0gICAgICAgICAgICBtYWtlU3lu
dGF4VHJlZUFuZENhbGxDYWxsYmFjayhlcnJvciA/IG51bGwgOiBzb3VyY2VUZXh0KTsKKyAgICAg
ICAgdGhpcy5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZnVuY3Rpb24ocGFyYW1ldGVycykgeworICAg
ICAgICAgICAgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2socGFyYW1ldGVycy5lcnJvciA/
IG51bGwgOiBwYXJhbWV0ZXJzLmNvbnRlbnQpOwogICAgICAgICB9KTsKICAgICB9LAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNl
Q29kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3Vy
Y2VDb2RlLmpzCmluZGV4IGRiZWEwMTkuLmE0ZTZlNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCkBAIC0z
NCw2ICszNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlID0gZnVuY3Rpb24oKQogCiAgICAg
dGhpcy5fc291cmNlTWFwcyA9IG51bGw7CiAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0g
bnVsbDsKKyAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0Q29udGVudFByb21pc2UgPSBudWxsOwogfTsK
IAogV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0
b3IuU291cmNlQ29kZSk7CkBAIC0xMjMsMjAgKzEyNCwxNiBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LkZvcm1hdHRlckRpZENoYW5nZSk7CiAgICAg
fSwKIAotICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICByZXF1ZXN0
Q29udGVudDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodHlwZW9m
IGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKTsKLSAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAh
PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9wZW5k
aW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgICAgIGlmICgh
dGhpcy5fYWN0aXZlUmVxdWVzdENvbnRlbnRQcm9taXNlKSB7CisgICAgICAgICAgICB0aGlzLl9h
Y3RpdmVSZXF1ZXN0Q29udGVudFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuUmVxdWVzdENvbnRlbnRG
cm9tQmFja2VuZCgpKQorICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50RnJv
bUJhY2tlbmRJZk5lZWRlZCgpLnRoZW4ocmVzb2x2ZSk7CisgICAgICAgICAgICB9LmJpbmQodGhp
cykpOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZWNlaXZlZCkgewot
ICAgICAgICAgICAgLy8gQ2FsbCBfc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMgb24gYSB0
aW1lb3V0IHRvIGZvcmNlIGNhbGxiYWNrcyB0byBiZSBhc3luY2hyb25vdXMuCi0gICAgICAgICAg
ICBpZiAoIXRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzVGltZW91dElkZW50aWZp
ZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNU
aW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQodGhpcy5zZXJ2aWNlUGVuZGluZ0NvbnRlbnRS
ZXF1ZXN0cy5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhblJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnRG
cm9tQmFja2VuZElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVSZXF1ZXN0
Q29udGVudFByb21pc2U7CiAgICAgfSwKIAogICAgIGNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbjog
ZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQpAQCAtMTY0LDYgKzE2MSw5IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHJldmlzaW9u
ICE9PSB0aGlzLl9jdXJyZW50UmV2aXNpb24pCiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgaWYgKHRoaXMuX2FjdGl2ZVJlcXVlc3RDb250ZW50UHJvbWlzZSkKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9hY3RpdmVSZXF1ZXN0Q29udGVudFByb21pc2U7CisKICAgICAgICAgdGhpcy5o
YW5kbGVDdXJyZW50UmV2aXNpb25Db250ZW50Q2hhbmdlKCk7CiAKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29udGVu
dERpZENoYW5nZSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUu
cHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSwKIAotICAgIHJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHJlcXVlc3RDb250
ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIEltcGxlbWVudGVk
IGJ5IHN1YmNsYXNzZXMuCiAgICAgICAgIGNvbnNvbGUuZXJyb3IoIk5lZWRzIHRvIGJlIGltcGxl
bWVudGVkIGJ5IGEgc3ViY2xhc3MuIik7CkBAIC0yMDIsMjIgKzIwMiwxMSBAQCBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSk7CiAgICAgICAgIGlmICghdGhp
cy5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MubGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSgpOwogCi0gICAgICAgIGlmICh0aGlzLl9jb250ZW50UmVxdWVzdFJlc3BvbnNlUGVuZGluZykK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jb250ZW50UmVxdWVzdFJlc3Bv
bnNlUGVuZGluZyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKHRoaXMucmVxdWVzdENvbnRlbnRGcm9t
QmFja2VuZCh0aGlzLl9wcm9jZXNzQ29udGVudC5iaW5kKHRoaXMpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICAvLyBTaW5jZSByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kIHJldHVy
bmVkIGZhbHNlLCBqdXN0IGNhbGwgX3Byb2Nlc3NDb250ZW50LAotICAgICAgICAvLyB3aGljaCB3
aWxsIGNhdXNlIHRoZSBwZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBjb250ZW50LgotICAg
ICAgICB0aGlzLl9wcm9jZXNzQ29udGVudCgpOworICAgICAgICBpZiAoIXRoaXMuX2NvbnRlbnRS
ZXF1ZXN0UHJvbWlzZSkKKyAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0UHJvbWlzZSA9
IHRoaXMucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpLnRoZW4odGhpcy5fcHJvY2Vzc0NvbnRl
bnQuYmluZCh0aGlzKSk7CisgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50UmVxdWVzdFByb21p
c2U7CiAgICAgfSwKIAogICAgIHNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzOiBmdW5jdGlv
bihmb3JjZSkKQEAgLTI0NywxMiArMjM2LDE1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnBy
b3RvdHlwZSA9IHsKIAogICAgIC8vIFByaXZhdGUKIAotICAgIF9wcm9jZXNzQ29udGVudDogZnVu
Y3Rpb24oZXJyb3IsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAgX3Byb2Nlc3NDb250ZW50
OiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAgIHsKKyAgICAgICAgdmFyIGVycm9yID0gcGFyYW1l
dGVycy5lcnJvcjsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQ7Cisg
ICAgICAgIHZhciBiYXNlNjRFbmNvZGVkID0gcGFyYW1ldGVycy5iYXNlNjRFbmNvZGVkOworCiAg
ICAgICAgIGlmIChlcnJvcikKICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwogCi0g
ICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gZmFsc2U7CiAgICAg
ICAgIHRoaXMuX2NvbnRlbnRSZWNlaXZlZCA9IHRydWU7CiAKICAgICAgICAgdmFyIHJldmlzaW9u
ID0gdGhpcy5yZXZpc2lvbkZvclJlcXVlc3RlZENvbnRlbnQ7CkBAIC0yNjIsNyArMjU0LDEyIEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV2aXNpb24u
Y29udGVudElzQmFzZTY0RW5jb2RlZCA9IGJhc2U2NEVuY29kZWQgfHwgZmFsc2U7CiAgICAgICAg
IGRlbGV0ZSB0aGlzLl9pZ25vcmVSZXZpc2lvbkNvbnRlbnREaWRDaGFuZ2VFdmVudDsKIAotICAg
ICAgICB0aGlzLnNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzKCk7CisgICAgICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoeworICAgICAgICAgICAgc291cmNlQ29kZTogdGhpcywKKyAgICAg
ICAgICAgIGVycm9yOiBlcnJvciwKKyAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsCisgICAg
ICAgICAgICBiYXNlNjRFbmNvZGVkOiBiYXNlNjRFbmNvZGVkCisgICAgICAgIH0pOwogICAgIH0K
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1Jlc291cmNlQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzCmluZGV4IDBiOTk0YWQuLjhjMGYw
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1Jlc291cmNlQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvUmVzb3VyY2VDb250ZW50Vmlldy5qcwpAQCAtNDMsNyArNDMsNyBAQCBX
ZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50VmlldyA9IGZ1bmN0aW9uKHJlc291cmNlLCBzdHls
ZUNsYXNzTmFtZSkKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0
aGlzLl9tb3VzZVdhc0NsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgLy8gUmVxdWVz
dCBjb250ZW50IGxhc3Qgc28gdGhlIHNwaW5uZXIgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZCBpbiBj
YXNlIHRoZSBjb250ZW50IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KLSAgICByZXNvdXJjZS5y
ZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOworICAgIHJl
c291cmNlLnJlcXVlc3RDb250ZW50KCkudGhlbih0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQo
dGhpcykpOwogCiAgICAgaWYgKCF0aGlzLm1hbmFnZXNPd25Jc3N1ZXMpIHsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLmlzc3VlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Jc3N1
ZU1hbmFnZXIuRXZlbnQuSXNzdWVXYXNBZGRlZCwgdGhpcy5faXNzdWVXYXNBZGRlZCwgdGhpcyk7
CkBAIC04Niw4ICs4NiwxMiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90
b3R5cGUgPSB7CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY29udGVudEF2YWlsYWJsZTogZnVu
Y3Rpb24ocmVzb3VyY2UsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAgX2NvbnRlbnRBdmFp
bGFibGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCiAgICAgeworICAgICAgICB2YXIgcmVzb3VyY2Ug
PSBwYXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVy
cy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0
RW5jb2RlZDsKKwogICAgICAgICAvLyBDaGVjayBmb3IgZmFpbGVkIGxvYWRzLgogICAgICAgICBp
ZiAodGhpcy5yZXNvdXJjZS5mYWlsZWQpIHsKICAgICAgICAgICAgIC8vIERvbid0IHNob3cgYW4g
ZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVycm9yIG1lc3NhZ2Ugc2hvd2lu
ZyAobGlrZSBvbmUgYWRkZWQgYnkgYWRkSXNzdWUuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVk
aXRvci5qcwppbmRleCBmNjY4MjEzLi45NTg1ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4
dEVkaXRvci5qcwpAQCAtNzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlKQogICAgIGVsc2UKICAgICAgICAgdGhpcy5fc291
cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNv
dXJjZU1hcEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwogCi0g
ICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQo
dGhpcykpOworICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHRoaXMuX2NvbnRl
bnRBdmFpbGFibGUuYmluZCh0aGlzKSk7CiAKICAgICAvLyBGSVhNRTogQ21kK0wgc2hvcmN1dCBk
b2Vzbid0IGFjdHVhbGx5IHdvcmsuCiAgICAgbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmQsICJMIiwg
dGhpcy5zaG93R29Ub0xpbmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5lbGVtZW50KTsKQEAgLTQz
Niw4ICs0MzYsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAgfSwKIAotICAg
IF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihzb3VyY2VDb2RlLCBjb250ZW50LCBiYXNlNjRF
bmNvZGVkKQorICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAg
IHsKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSBwYXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAg
ICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0
RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsKKwogICAgICAgICBjb25zb2xlLmFz
c2VydChzb3VyY2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlKTsKICAgICAgICAgY29uc29sZS5h
c3NlcnQoIWJhc2U2NEVuY29kZWQpOwogCkBAIC02MzksNyArNjQzLDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbmxp
bmVTY3JpcHRDb250ZW50UG9wdWxhdGVkID0gcGVuZGluZ1JlcXVlc3RDb3VudDsKIAotICAgICAg
ICBmdW5jdGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKGVycm9yLCBjb250ZW50KQorICAgICAg
ICBmdW5jdGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgc3RpbGwgd2FpdGluZyBmb3Ig
Y29udGVudCBmcm9tIG90aGVyIHNjcmlwdHMuCiAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nUmVx
dWVzdENvdW50KQpAQCAtNjg5LDcgKzY5Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGJvdW5kU2NyaXB0Q29udGVudEF2
YWlsYWJsZSA9IHNjcmlwdENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKTsKICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgc2NyaXB0
c1tpXS5yZXF1ZXN0Q29udGVudChib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUpOworICAgICAg
ICAgICAgc2NyaXB0c1tpXS5yZXF1ZXN0Q29udGVudCgpLnRoZW4oYm91bmRTY3JpcHRDb250ZW50
QXZhaWxhYmxlKTsKICAgICB9LAogCiAgICAgX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQ6IGZ1
bmN0aW9uKCkKQEAgLTcwNyw4ICs3MTEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBjb25zb2xlLmFzc2VydChzY3JpcHRzWzBdLnJh
bmdlLnN0YXJ0TGluZSA9PT0gMCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdHNbMF0u
cmFuZ2Uuc3RhcnRDb2x1bW4gPT09IDApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRl
bnRBdmFpbGFibGUoZXJyb3IsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRl
bnRBdmFpbGFibGUocGFyYW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRl
bnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVxdWVz
dGluZ1NjcmlwdENvbnRlbnQ7CiAKICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZSBmdWxsIGNv
bnRlbnQgcG9wdWxhdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMgYXN5bmMgY2FsbGJhY2suCkBA
IC03MjMsNyArNzI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVudCA9IHRydWU7
CiAKLSAgICAgICAgc2NyaXB0c1swXS5yZXF1ZXN0Q29udGVudChzY3JpcHRDb250ZW50QXZhaWxh
YmxlLmJpbmQodGhpcykpOworICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250ZW50KCkudGhl
bihzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfbWF0
Y2hlc1NvdXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241823</attachid>
            <date>2014-11-18 15:52:19 -0800</date>
            <delta_ts>2014-12-09 13:52:23 -0800</delta_ts>
            <desc>[PATCH] updated WIP.</desc>
            <filename>promises.diff</filename>
            <type>text/plain</type>
            <size>20450</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwppbmRleCA5NjM4YmZmLi4wOGNmMTYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BbmFseXplck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC04Nyw3ICs4Nyw3IEBA
IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gcmV0cmll
dmVBbmFseXplck1lc3NhZ2VzKCkKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6
ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZh
ciBhbmFseXplck1lc3NhZ2VzID0gW107CiAgICAgICAgICAgICAgICAgdmFyIHJhd0FuYWx5emVy
TWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0aGlzLl9lc2xp
bnRDb25maWcpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdl
cyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRl
bnQocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQodGhpcykpOworICAgICAgICAgICAgc291
cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJp
bmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxl
TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0NTU1N0eWxlTWFuYWdlci5qcwppbmRleCA3YWE2NGFiLi45ZTFjODhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHls
ZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCkBAIC0zMTAsOCArMzEwLDExIEBAIFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoc3R5bGVTaGVldCk7CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hl
ZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRT
dHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIg
c3R5bGVTaGVldCA9IHBhcmFtZXRlcnMuc291cmNlQ29kZTsKKyAgICAgICAgICAgIHZhciBjb250
ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAgICAgICAgICBkZWxldGUgc3R5bGVTaGVl
dC5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0OwogCiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChz
dHlsZVNoZWV0LnVybCk7CkBAIC0zNDcsNyArMzUwLDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gc3R5bGVTaGVldFJlYWR5
KCkKICAgICAgICAgewotICAgICAgICAgICAgc3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudChmZXRj
aGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBzdHlsZVNoZWV0
LnJlcXVlc3RDb250ZW50KCkudGhlbihmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlz
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBhcHBseVN0eWxlU2hlZXRDaGFuZ2Vz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9DU1NTdHlsZVNoZWV0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0NTU1N0eWxlU2hlZXQuanMKaW5kZXggNTFkOWU2Zi4uNDI1N2I2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hl
ZXQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NT
U1N0eWxlU2hlZXQuanMKQEAgLTEyNywxNiArMTI3LDE1IEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZVNoZWV0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuICEhdGhpcy5faWQ7CiAgICAgfSwK
IAotICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAg
IHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlm
ICghdGhpcy5faWQpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGlkZW50aWZpZXIgdG8g
cmVxdWVzdCBjb250ZW50IHdpdGguIFJldHVybiBmYWxzZSB0byBjYXVzZSB0aGUKKyAgICAgICAg
ICAgIC8vIFRoZXJlIGlzIG5vIGlkZW50aWZpZXIgdG8gcmVxdWVzdCBjb250ZW50IHdpdGguIFJl
amVjdCB0aGUgcHJvbWlzZSB0byBjYXVzZSB0aGUKICAgICAgICAgICAgIC8vIHBlbmRpbmcgY2Fs
bGJhY2tzIHRvIGdldCBudWxsIGNvbnRlbnQuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBtZXNzYWdlOiAiVGhlcmUgaXMgbm8g
aWRlbnRpZmllciB0byByZXF1ZXN0IGNvbnRlbnQgd2l0aC4iIH0pOwogICAgICAgICB9CiAKLSAg
ICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVTaGVldFRleHQodGhpcy5faWQsIGNhbGxiYWNrKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDU1NBZ2VudC5nZXRTdHlsZVNoZWV0
VGV4dC5wcm9taXNlKHRoaXMuX2lkKTsKICAgICB9LAogCiAgICAgbm90ZUNvbnRlbnREaWRDaGFu
Z2U6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggODAyZTJiNy4uZTNjNzY5
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L0RPTU5vZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQwNSw4ICs0MDUsMTAgQEAgV2ViSW5zcGVj
dG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHN0eWxl
U2hlZXQsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRTdHlsZVNoZWV0Q29udGVu
dChwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGVudCA9IHBhcmFt
ZXRlcnMuY29udGVudDsKKwogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGUuc3R5bGVT
aGVldFRleHRSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlLnN0eWxlU2hlZXRUZXh0UmFu
Z2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0OCw3IEBAIFdlYkluc3Bl
Y3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbmVlZHNSZWZy
ZXNoID0gdHJ1ZTsKICAgICAgICAgdGhpcy5faWdub3JlTmV4dENvbnRlbnREaWRDaGFuZ2VGb3JT
dHlsZVNoZWV0ID0gc3R5bGUub3duZXJTdHlsZVNoZWV0OwogCi0gICAgICAgIHN0eWxlLm93bmVy
U3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudChmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0
aGlzKSk7CisgICAgICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudCgpLnRo
ZW4oZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBj
aGFuZ2VQcm9wZXJ0eTogZnVuY3Rpb24ocHJvcGVydHksIG5hbWUsIHZhbHVlLCBwcmlvcml0eSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9S
ZXNvdXJjZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9S
ZXNvdXJjZS5qcwppbmRleCBmM2JiZGIwLi5lMDgxYmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCkBAIC01NDQs
MjMgKzU0NCwxOSBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAg
ICByZXR1cm4gdGhpcy5fZmluaXNoZWQ7CiAgICAgfSwKIAotICAgIHJlcXVlc3RDb250ZW50RnJv
bUJhY2tlbmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tl
bmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgdGhlIHJlcXVlc3RJ
ZGVudGlmaWVyIHdlIGNhbiBnZXQgdGhlIGFjdHVhbCByZXNwb25zZSBmb3IgdGhpcyBzcGVjaWZp
YyByZXNvdXJjZS4KICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBjb250ZW50IHdpbGwgYmUgY2Fj
aGVkIHJlc291cmNlIGRhdGEsIHdoaWNoIG1pZ2h0IG5vdCBleGlzdCBhbnltb3JlLgotICAgICAg
ICBpZiAodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIE5ldHdvcmtBZ2Vu
dC5nZXRSZXNwb25zZUJvZHkodGhpcy5fcmVxdWVzdElkZW50aWZpZXIsIGNhbGxiYWNrKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yZXF1
ZXN0SWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrQWdlbnQuZ2V0UmVzcG9u
c2VCb2R5LnByb21pc2UodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpOwogCi0gICAgICAgIGlmICh0
aGlzLl9wYXJlbnRGcmFtZSkgewotICAgICAgICAgICAgUGFnZUFnZW50LmdldFJlc291cmNlQ29u
dGVudCh0aGlzLl9wYXJlbnRGcmFtZS5pZCwgdGhpcy5fdXJsLCBjYWxsYmFjayk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcGFyZW50RnJh
bWUpCisgICAgICAgICAgICByZXR1cm4gUGFnZUFnZW50LmdldFJlc291cmNlQ29udGVudC5wcm9t
aXNlKHRoaXMuX3BhcmVudEZyYW1lLmlkLCB0aGlzLl91cmwpOwogCi0gICAgICAgIC8vIFRoZXJl
IGlzIG5vIHJlcXVlc3QgaWRlbnRpZmllciBvciBmcmFtZSB0byByZXF1ZXN0IGNvbnRlbnQgZnJv
bS4gUmV0dXJuIGZhbHNlIHRvIGNhdXNlIHRoZQotICAgICAgICAvLyBwZW5kaW5nIGNhbGxiYWNr
cyB0byBnZXQgbnVsbCBjb250ZW50LgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlamVjdCh7CisgICAgICAgICAgICBtZXNzYWdlOiAiQ29udGVudCByZXF1
ZXN0IGZhaWxlZC4iCisgICAgICAgIH0pOwogICAgIH0sCiAKICAgICBpbmNyZWFzZVNpemU6IGZ1
bmN0aW9uKGRhdGFMZW5ndGgsIGVsYXBzZWRUaW1lKQpAQCAtNjE3LDcgKzYxMyw3IEBAIFdlYklu
c3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5UaW1lc3RhbXBzRGlkQ2hh
bmdlKTsKIAogICAgICAgICBpZiAodGhpcy5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKCkp
Ci0gICAgICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmRJZk5lZWRlZCgpOwor
ICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudCgpOwogICAgIH0sCiAKICAgICBtYXJrQXNG
YWlsZWQ6IGZ1bmN0aW9uKGNhbmNlbGVkLCBlbGFwc2VkVGltZSkKQEAgLTYzMCw5ICs2MjYsNiBA
QCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5Mb2FkaW5n
RGlkRmFpbCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5FdmVudC5UaW1lc3RhbXBzRGlkQ2hhbmdlKTsKLQotICAgICAgICAvLyBG
b3JjZSB0aGUgY29udGVudCByZXF1ZXN0cyB0byBiZSBzZXJ2aWNlZC4gVGhleSB3aWxsIGdldCBu
dWxsIGFzIHRoZSBjb250ZW50LgotICAgICAgICB0aGlzLnNlcnZpY2VQZW5kaW5nQ29udGVudFJl
cXVlc3RzKHRydWUpOwogICAgIH0sCiAKICAgICByZXZlcnRNYXJrQXNGaW5pc2hlZDogZnVuY3Rp
b24oKQpAQCAtNjc2LDcgKzY2OSw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBpbWFnZURpZExvYWQu
YmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgICAgIC8vIFNldCB0aGUgaW1hZ2Ugc291cmNlIG9u
Y2Ugd2UndmUgb2J0YWluZWQgdGhlIGJhc2U2NC1lbmNvZGVkIFVSTCBmb3IgaXQuCi0gICAgICAg
IHRoaXMucmVxdWVzdENvbnRlbnQoZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVxdWVzdENv
bnRlbnQoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdGhpcy5j
b250ZW50VVJMOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwppbmRleCBi
NGM5ZTI5Li4yNmY2NWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKQEAgLTE1NSw4ICsxNTUsMTAgQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KGZ1bmN0aW9uKGVycm9yLCBzb3VyY2VUZXh0
KSB7Ci0gICAgICAgICAgICBtYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayhlcnJvciA/IG51
bGwgOiBzb3VyY2VUZXh0KTsKKyAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZnVu
Y3Rpb24ocGFyYW1ldGVycykgeworICAgICAgICAgICAgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2Fs
bGJhY2socGFyYW1ldGVycy5jb250ZW50KTsKKyAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJy
b3IpIHsKKyAgICAgICAgICAgIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrKG51bGwpOwog
ICAgICAgICB9KTsKICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCmluZGV4IGRiZWEwMTkuLmMzNzlm
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9Tb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9Tb3VyY2VDb2RlLmpzCkBAIC0zNCw2ICszNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5fc291cmNlTWFwcyA9IG51bGw7CiAgICAg
dGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKKyAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0
Q29udGVudFByb21pc2UgPSBudWxsOwogfTsKIAogV2ViSW5zcGVjdG9yLk9iamVjdC5hZGRDb25z
dHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0b3IuU291cmNlQ29kZSk7CkBAIC0xMjMsMjAgKzEy
NCwxNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50
LkZvcm1hdHRlckRpZENoYW5nZSk7CiAgICAgfSwKIAotICAgIHJlcXVlc3RDb250ZW50OiBmdW5j
dGlvbihjYWxsYmFjaykKKyAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgY29uc29sZS5hc3NlcnQodHlwZW9mIGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKTsKLSAg
ICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MucHVz
aChjYWxsYmFjayk7CisgICAgICAgIGlmICghdGhpcy5fYWN0aXZlUmVxdWVzdENvbnRlbnRQcm9t
aXNlKSB7CisgICAgICAgICAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0Q29udGVudFByb21pc2UgPSBu
ZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKQorICAgICAgICAgICAgICAg
ICAgICByZWplY3QoeyBtZXNzYWdlOiAiVGhpcyBzb3VyY2UgY29kZSB0eXBlIGNhbm5vdCByZXF1
ZXN0IGNvbnRlbnQgZnJvbSB0aGUgYmFja2VuZC4iIH0pOworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKS50aGVuKHRoaXMuX3Byb2Nlc3NDb250
ZW50LmJpbmQodGhpcykpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KTsKKyAgICAgICAgICAg
IH0uYmluZCh0aGlzKSk7CisgICAgICAgIH0KIAotICAgICAgICBpZiAodGhpcy5fY29udGVudFJl
Y2VpdmVkKSB7Ci0gICAgICAgICAgICAvLyBDYWxsIF9zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1
ZXN0cyBvbiBhIHRpbWVvdXQgdG8gZm9yY2UgY2FsbGJhY2tzIHRvIGJlIGFzeW5jaHJvbm91cy4K
LSAgICAgICAgICAgIGlmICghdGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1l
b3V0SWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXJ2aWNlUGVuZGluZ0NvbnRl
bnRSZXF1ZXN0c1RpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dCh0aGlzLnNlcnZpY2VQZW5k
aW5nQ29udGVudFJlcXVlc3RzLmJpbmQodGhpcyksIDApOwotICAgICAgICB9IGVsc2UgaWYgKHRo
aXMuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKQotICAgICAgICAgICAgdGhpcy5yZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Fj
dGl2ZVJlcXVlc3RDb250ZW50UHJvbWlzZTsKICAgICB9LAogCiAgICAgY3JlYXRlU291cmNlQ29k
ZUxvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCkBAIC0xOTIsNjgg
KzE5MCwxOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9LAogCi0gICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDog
ZnVuY3Rpb24oY2FsbGJhY2spCisgICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICAgICAg
ICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4i
KTsKICAgICB9LAogCi0gICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZElmTmVlZGVkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmNhblJlcXVlc3RDb250
ZW50RnJvbUJhY2tlbmQoKSk7Ci0gICAgICAgIGlmICghdGhpcy5jYW5SZXF1ZXN0Q29udGVudEZy
b21CYWNrZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9w
ZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICh0aGlzLl9jb250ZW50UmVxdWVzdFJlc3BvbnNlUGVuZGluZykKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jb250ZW50UmVxdWVzdFJlc3BvbnNl
UGVuZGluZyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKHRoaXMucmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZCh0aGlzLl9wcm9jZXNzQ29udGVudC5iaW5kKHRoaXMpKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAvLyBTaW5jZSByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kIHJldHVybmVk
IGZhbHNlLCBqdXN0IGNhbGwgX3Byb2Nlc3NDb250ZW50LAotICAgICAgICAvLyB3aGljaCB3aWxs
IGNhdXNlIHRoZSBwZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBjb250ZW50LgotICAgICAg
ICB0aGlzLl9wcm9jZXNzQ29udGVudCgpOwotICAgIH0sCi0KLSAgICBzZXJ2aWNlUGVuZGluZ0Nv
bnRlbnRSZXF1ZXN0czogZnVuY3Rpb24oZm9yY2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5f
c2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllcikgewotICAgICAg
ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzVGlt
ZW91dElkZW50aWZpZXIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlcnZpY2VQZW5kaW5n
Q29udGVudFJlcXVlc3RzVGltZW91dElkZW50aWZpZXI7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGb3JjZSB0aGUgY29udGVudCByZXF1ZXN0cyB0byBiZSBzZW50LiBUbyBkbyB0aGlzIGNvcnJl
Y3RseSB3ZSBhbHNvIGZvcmNlCi0gICAgICAgIC8vIF9jb250ZW50UmVjZWl2ZWQgdG8gYmUgdHJ1
ZSBzbyBmdXR1cmUgY2FsbHMgdG8gcmVxdWVzdENvbnRlbnQgZ28gdGhyb3VnaC4KLSAgICAgICAg
aWYgKGZvcmNlKQotICAgICAgICAgICAgdGhpcy5fY29udGVudFJlY2VpdmVkID0gdHJ1ZTsKLQot
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jb250ZW50UmVjZWl2ZWQpOwotICAgICAgICBp
ZiAoIXRoaXMuX2NvbnRlbnRSZWNlaXZlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAvLyBNb3ZlIHRoZSBjYWxsYmFja3MgaW50byBhIGxvY2FsIGFuZCBjbGVhciBfcGVuZGluZ0Nv
bnRlbnRSZXF1ZXN0Q2FsbGJhY2tzIHNvCi0gICAgICAgIC8vIGNhbGxiYWNrcyB0aGF0IG1pZ2h0
IGNhbGwgcmVxdWVzdENvbnRlbnQgYWdhaW4gd2lsbCBub3QgbW9kaWZ5IHRoZSBhcnJheS4KLSAg
ICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX3BlbmRpbmdDb250ZW50UmVxdWVzdENhbGxiYWNr
czsKLSAgICAgICAgdGhpcy5fcGVuZGluZ0NvbnRlbnRSZXF1ZXN0Q2FsbGJhY2tzID0gW107Ci0K
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBjYWxsYmFja3NbaV0odGhpcywgdGhpcy5jb250ZW50LCB0aGlzLmNvbnRlbnRJc0Jh
c2U2NEVuY29kZWQpOwotICAgIH0sCi0KICAgICAvLyBQcml2YXRlCiAKLSAgICBfcHJvY2Vzc0Nv
bnRlbnQ6IGZ1bmN0aW9uKGVycm9yLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKQorICAgIF9wcm9j
ZXNzQ29udGVudDogZnVuY3Rpb24ocGFyYW1ldGVycykKICAgICB7Ci0gICAgICAgIGlmIChlcnJv
cikKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotCi0gICAgICAgIHRoaXMuX2Nv
bnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX2NvbnRl
bnRSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250
ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2Rl
ZDsKIAogICAgICAgICB2YXIgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uRm9yUmVxdWVzdGVkQ29u
dGVudDsKIApAQCAtMjYyLDcgKzIxMCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldmlzaW9uLmNvbnRlbnRJc0Jhc2U2NEVuY29kZWQgPSBiYXNl
NjRFbmNvZGVkIHx8IGZhbHNlOwogICAgICAgICBkZWxldGUgdGhpcy5faWdub3JlUmV2aXNpb25D
b250ZW50RGlkQ2hhbmdlRXZlbnQ7CiAKLSAgICAgICAgdGhpcy5zZXJ2aWNlUGVuZGluZ0NvbnRl
bnRSZXF1ZXN0cygpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAg
ICAgIHNvdXJjZUNvZGU6IHRoaXMsCisgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LAorICAg
ICAgICAgICAgYmFzZTY0RW5jb2RlZDogYmFzZTY0RW5jb2RlZAorICAgICAgICB9KTsKICAgICB9
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMKaW5kZXggOGQ4OThhMi4uODVlNWZm
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L1NvdXJjZU1hcFJlc291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcwpAQCAtODIsNiArODIsNyBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlID0gewogCiAgICAgcmVxdWVzdENv
bnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgeworICAgICAgICAvLyBG
SVhNRTogTWF5IG5vdCBzdGlsbCBiZSBuZWVkZWQuCiAgICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1
ZXN0ZWQgPSB0cnVlOwogCiAgICAgICAgIC8vIFJldmVydCB0aGUgbWFya0FzRmluaXNoZWQgdGhh
dCB3YXMgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuCkBAIC05MCwyMiArOTEsMjMgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGlubGlu
ZUNvbnRlbnQgPSB0aGlzLl9zb3VyY2VNYXAuc291cmNlQ29udGVudCh0aGlzLnVybCk7CiAgICAg
ICAgIGlmIChpbmxpbmVDb250ZW50KSB7CiAgICAgICAgICAgICAvLyBGb3JjZSBpbmxpbmUgY29u
dGVudCB0byBiZSBhc3luY2hyb25vdXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIGxvYWQgcGF0dGVy
bi4KLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGRvbid0IGtub3cgdGhlIE1JTUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQu
IEd1ZXNzIGJ5IGFuYWx5emluZyB0aGUgY29udGVudD8KLSAgICAgICAgICAgICAgICBzb3VyY2VN
YXBSZXNvdXJjZUxvYWRlZC5jYWxsKHRoaXMsIG51bGwsIGlubGluZUNvbnRlbnQsIHRoaXMubWlt
ZVR5cGUsIDIwMCk7Ci0gICAgICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGRvbid0IGtub3cgdGhlIE1JTUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1
ZXNzIGJ5IGFuYWx5emluZyB0aGUgY29udGVudD8KKyAgICAgICAgICAgIC8vIFJldHVybnMgYSBw
cm9taXNlLgorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZU1hcFJlc291cmNlTG9hZGVkLmNhbGwo
dGhpcywgbnVsbCwgaW5saW5lQ29udGVudCwgdGhpcy5taW1lVHlwZSwgMjAwKTsKKyAgICAgICAg
fQogCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZnVuY3Rpb24gc291cmNlTWFw
UmVzb3VyY2VMb2FkRXJyb3IoZXJyb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMubWFy
a0FzRmFpbGVkKCk7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBtZXNzYWdl
OiBlcnJvciB9KTsKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHNvdXJjZU1hcFJlc291
cmNlTG9hZGVkKGVycm9yLCBib2R5LCBtaW1lVHlwZSwgc3RhdHVzQ29kZSkKKyAgICAgICAgZnVu
Y3Rpb24gc291cmNlTWFwUmVzb3VyY2VMb2FkZWQoYm9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IGJhc2U2NGVuY29kZWQgPSBmYWxzZTsKIAot
ICAgICAgICAgICAgaWYgKGVycm9yIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5tYXJrQXNGYWlsZWQoKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJv
ciwgYm9keSwgYmFzZTY0ZW5jb2RlZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgaWYgKHN0YXR1c0NvZGUgPj0gNDAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNv
dXJjZU1hcFJlc291cmNlTG9hZEVycm9yKGVycm9yLCBib2R5LCBtKQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHBpY2tpbmcgdGhlIGJlc3Qg
TUlNRS10eXBlLiBSaWdodCBub3cgdGhlIGZpbGUgZXh0ZW5zaW9uIGlzIHRoZSBiZXN0IGJldC4K
QEAgLTExMywxMiArMTE1LDE1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHRoaXMubWFya0FzRmluaXNoZWQoKTsKIAotICAgICAg
ICAgICAgY2FsbGJhY2sobnVsbCwgYm9keSwgYmFzZTY0ZW5jb2RlZCk7CisgICAgICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICBjb250ZW50OiBib2R5LAor
ICAgICAgICAgICAgICAgIGJhc2U2NGVuY29kZWQ6IGJhc2U2NGVuY29kZWQKKyAgICAgICAgICAg
IH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFOZXR3b3JrQWdlbnQubG9hZFJlc291cmNl
KSB7CiAgICAgICAgICAgICBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZC5jYWxsKHRoaXMsICJlcnJv
cjogbm8gTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsgbWVzc2FnZTogImVycm9y
OiBubyBOZXR3b3JrQWdlbnQubG9hZFJlc291cmNlIiB9KTsKICAgICAgICAgfQogCiAgICAgICAg
IHZhciBmcmFtZUlkZW50aWZpZXIgPSBudWxsOwpAQCAtMTI4LDkgKzEzMyw3IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghZnJhbWVJ
ZGVudGlmaWVyKQogICAgICAgICAgICAgZnJhbWVJZGVudGlmaWVyID0gV2ViSW5zcGVjdG9yLmZy
YW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZS5pZDsKIAotICAgICAgICBOZXR3b3JrQWdlbnQu
bG9hZFJlc291cmNlKGZyYW1lSWRlbnRpZmllciwgdGhpcy51cmwsIHNvdXJjZU1hcFJlc291cmNl
TG9hZGVkLmJpbmQodGhpcykpOwotCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZS5wcm9taXNlKGZyYW1lSWRlbnRpZmllciwgdGhp
cy51cmwpLnRoZW4oc291cmNlTWFwUmVzb3VyY2VMb2FkZWQuYmluZCh0aGlzKSk7IC8vIHRoZW4g
c291cmNlTWFwUmVzb3VyY2VMb2FkZWQuYmluZCh0aGlzKQogICAgIH0sCiAKICAgICBjcmVhdGVT
b3VyY2VDb2RlTG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291
cmNlQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzCmluZGV4IDBiOTk0YWQuLjhjMGYwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNl
Q29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvUmVzb3VyY2VDb250ZW50Vmlldy5qcwpAQCAtNDMsNyArNDMsNyBAQCBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VDb250ZW50VmlldyA9IGZ1bmN0aW9uKHJlc291cmNlLCBzdHlsZUNsYXNzTmFt
ZSkKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9tb3Vz
ZVdhc0NsaWNrZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgLy8gUmVxdWVzdCBjb250ZW50
IGxhc3Qgc28gdGhlIHNwaW5uZXIgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBj
b250ZW50IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KLSAgICByZXNvdXJjZS5yZXF1ZXN0Q29u
dGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOworICAgIHJlc291cmNlLnJl
cXVlc3RDb250ZW50KCkudGhlbih0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwog
CiAgICAgaWYgKCF0aGlzLm1hbmFnZXNPd25Jc3N1ZXMpIHsKICAgICAgICAgV2ViSW5zcGVjdG9y
Lmlzc3VlTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIu
RXZlbnQuSXNzdWVXYXNBZGRlZCwgdGhpcy5faXNzdWVXYXNBZGRlZCwgdGhpcyk7CkBAIC04Niw4
ICs4NiwxMiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7
CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY29udGVudEF2YWlsYWJsZTogZnVuY3Rpb24ocmVz
b3VyY2UsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAgX2NvbnRlbnRBdmFpbGFibGU6IGZ1
bmN0aW9uKHBhcmFtZXRlcnMpCiAgICAgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSBwYXJhbWV0
ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50
OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsK
KwogICAgICAgICAvLyBDaGVjayBmb3IgZmFpbGVkIGxvYWRzLgogICAgICAgICBpZiAodGhpcy5y
ZXNvdXJjZS5mYWlsZWQpIHsKICAgICAgICAgICAgIC8vIERvbid0IHNob3cgYW4gZXJyb3IgbWVz
c2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVycm9yIG1lc3NhZ2Ugc2hvd2luZyAobGlrZSBv
bmUgYWRkZWQgYnkgYWRkSXNzdWUuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwpp
bmRleCBmNjY4MjEzLi45NTg1ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5q
cwpAQCAtNzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBm
dW5jdGlvbihzb3VyY2VDb2RlKQogICAgIGVsc2UKICAgICAgICAgdGhpcy5fc291cmNlQ29kZS5h
ZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFk
ZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwogCi0gICAgc291cmNl
Q29kZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwor
ICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHRoaXMuX2NvbnRlbnRBdmFpbGFi
bGUuYmluZCh0aGlzKSk7CiAKICAgICAvLyBGSVhNRTogQ21kK0wgc2hvcmN1dCBkb2Vzbid0IGFj
dHVhbGx5IHdvcmsuCiAgICAgbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmQsICJMIiwgdGhpcy5zaG93
R29Ub0xpbmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5lbGVtZW50KTsKQEAgLTQzNiw4ICs0MzYs
MTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAgfSwKIAotICAgIF9jb250ZW50
QXZhaWxhYmxlOiBmdW5jdGlvbihzb3VyY2VDb2RlLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKQor
ICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAgIHsKKyAgICAg
ICAgdmFyIHNvdXJjZUNvZGUgPSBwYXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgIHZhciBj
b250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9
IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsKKwogICAgICAgICBjb25zb2xlLmFzc2VydChzb3Vy
Y2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWJh
c2U2NEVuY29kZWQpOwogCkBAIC02MzksNyArNjQzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbmxpbmVTY3JpcHRD
b250ZW50UG9wdWxhdGVkID0gcGVuZGluZ1JlcXVlc3RDb3VudDsKIAotICAgICAgICBmdW5jdGlv
biBzY3JpcHRDb250ZW50QXZhaWxhYmxlKGVycm9yLCBjb250ZW50KQorICAgICAgICBmdW5jdGlv
biBzY3JpcHRDb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgc3RpbGwgd2FpdGluZyBmb3IgY29udGVudCBm
cm9tIG90aGVyIHNjcmlwdHMuCiAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nUmVxdWVzdENvdW50
KQpAQCAtNjg5LDcgKzY5Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGJvdW5kU2NyaXB0Q29udGVudEF2YWlsYWJsZSA9
IHNjcmlwdENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKTsKICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgc2NyaXB0c1tpXS5yZXF1
ZXN0Q29udGVudChib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUpOworICAgICAgICAgICAgc2Ny
aXB0c1tpXS5yZXF1ZXN0Q29udGVudCgpLnRoZW4oYm91bmRTY3JpcHRDb250ZW50QXZhaWxhYmxl
KTsKICAgICB9LAogCiAgICAgX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQ6IGZ1bmN0aW9uKCkK
QEAgLTcwNyw4ICs3MTEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90eXBlID0gewogICAgICAgICBjb25zb2xlLmFzc2VydChzY3JpcHRzWzBdLnJhbmdlLnN0YXJ0
TGluZSA9PT0gMCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdHNbMF0ucmFuZ2Uuc3Rh
cnRDb2x1bW4gPT09IDApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFi
bGUoZXJyb3IsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFi
bGUocGFyYW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJh
bWV0ZXJzLmNvbnRlbnQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVxdWVzdGluZ1Njcmlw
dENvbnRlbnQ7CiAKICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZSBmdWxsIGNvbnRlbnQgcG9w
dWxhdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMgYXN5bmMgY2FsbGJhY2suCkBAIC03MjMsNyAr
NzI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsK
IAogICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVudCA9IHRydWU7CiAKLSAgICAg
ICAgc2NyaXB0c1swXS5yZXF1ZXN0Q29udGVudChzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJpbmQo
dGhpcykpOworICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250ZW50KCkudGhlbihzY3JpcHRD
b250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfbWF0Y2hlc1NvdXJj
ZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242001</attachid>
            <date>2014-11-20 16:26:17 -0800</date>
            <delta_ts>2014-12-09 13:52:23 -0800</delta_ts>
            <desc>[PATCH] Very close, one refresh bug.</desc>
            <filename>promises3.diff</filename>
            <type>text/plain</type>
            <size>22738</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwppbmRleCA5NjM4YmZmLi4wOGNmMTYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BbmFseXplck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC04Nyw3ICs4Nyw3IEBA
IFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gcmV0cmll
dmVBbmFseXplck1lc3NhZ2VzKCkKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6
ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZh
ciBhbmFseXplck1lc3NhZ2VzID0gW107CiAgICAgICAgICAgICAgICAgdmFyIHJhd0FuYWx5emVy
TWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNlQ29kZS5jb250ZW50LCB0aGlzLl9lc2xp
bnRDb25maWcpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFn
ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdl
cyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRl
bnQocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQodGhpcykpOworICAgICAgICAgICAgc291
cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJp
bmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxl
TWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0NTU1N0eWxlTWFuYWdlci5qcwppbmRleCA3YWE2NGFiLi45ZTFjODhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHls
ZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCkBAIC0zMTAsOCArMzEwLDExIEBAIFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQoc3R5bGVTaGVldCk7CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hl
ZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRT
dHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIg
c3R5bGVTaGVldCA9IHBhcmFtZXRlcnMuc291cmNlQ29kZTsKKyAgICAgICAgICAgIHZhciBjb250
ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAgICAgICAgICBkZWxldGUgc3R5bGVTaGVl
dC5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0OwogCiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChz
dHlsZVNoZWV0LnVybCk7CkBAIC0zNDcsNyArMzUwLDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gc3R5bGVTaGVldFJlYWR5
KCkKICAgICAgICAgewotICAgICAgICAgICAgc3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudChmZXRj
aGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBzdHlsZVNoZWV0
LnJlcXVlc3RDb250ZW50KCkudGhlbihmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlz
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBhcHBseVN0eWxlU2hlZXRDaGFuZ2Vz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9DU1NTdHlsZVNoZWV0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0NTU1N0eWxlU2hlZXQuanMKaW5kZXggNTFkOWU2Zi4uZDQ1NDIyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hl
ZXQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NT
U1N0eWxlU2hlZXQuanMKQEAgLTEyMSwyMiArMTIxLDE1IEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZVNoZWV0LnByb3RvdHlwZSA9IHsKICAgICAgICAgQ1NTQWdlbnQuc2V0U3R5bGVTaGVldFRleHQo
dGhpcy5faWQsIHRoaXMuY3VycmVudFJldmlzaW9uLmNvbnRlbnQsIGNvbnRlbnREaWRDaGFuZ2Uu
YmluZCh0aGlzKSk7CiAgICAgfSwKIAotICAgIGNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIGNhbiByZXF1ZXN0IGNvbnRlbnQgaWYg
d2UgaGF2ZSBhbiBpZC4KLSAgICAgICAgcmV0dXJuICEhdGhpcy5faWQ7Ci0gICAgfSwKLQotICAg
IHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5faWQpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGlkZW50aWZpZXIgdG8gcmVxdWVz
dCBjb250ZW50IHdpdGguIFJldHVybiBmYWxzZSB0byBjYXVzZSB0aGUKKyAgICAgICAgICAgIC8v
IFRoZXJlIGlzIG5vIGlkZW50aWZpZXIgdG8gcmVxdWVzdCBjb250ZW50IHdpdGguIFJlamVjdCB0
aGUgcHJvbWlzZSB0byBjYXVzZSB0aGUKICAgICAgICAgICAgIC8vIHBlbmRpbmcgY2FsbGJhY2tz
IHRvIGdldCBudWxsIGNvbnRlbnQuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBtZXNzYWdlOiAiVGhlcmUgaXMgbm8gaWRlbnRp
ZmllciB0byByZXF1ZXN0IGNvbnRlbnQgd2l0aC4iIH0pOwogICAgICAgICB9CiAKLSAgICAgICAg
Q1NTQWdlbnQuZ2V0U3R5bGVTaGVldFRleHQodGhpcy5faWQsIGNhbGxiYWNrKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDU1NBZ2VudC5nZXRTdHlsZVNoZWV0VGV4dC5w
cm9taXNlKHRoaXMuX2lkKTsKICAgICB9LAogCiAgICAgbm90ZUNvbnRlbnREaWRDaGFuZ2U6IGZ1
bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggODAyZTJiNy4uZTNjNzY5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5v
ZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQwNSw4ICs0MDUsMTAgQEAgV2ViSW5zcGVjdG9yLkRP
TU5vZGVTdHlsZXMucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHN0eWxlU2hlZXQs
IGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNoZWRTdHlsZVNoZWV0Q29udGVudChwYXJh
bWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGVudCA9IHBhcmFtZXRlcnMu
Y29udGVudDsKKwogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGUuc3R5bGVTaGVldFRl
eHRSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXN0eWxlLnN0eWxlU2hlZXRUZXh0UmFuZ2UpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcgKzQ0OCw3IEBAIFdlYkluc3BlY3Rvci5E
T01Ob2RlU3R5bGVzLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbmVlZHNSZWZyZXNoID0g
dHJ1ZTsKICAgICAgICAgdGhpcy5faWdub3JlTmV4dENvbnRlbnREaWRDaGFuZ2VGb3JTdHlsZVNo
ZWV0ID0gc3R5bGUub3duZXJTdHlsZVNoZWV0OwogCi0gICAgICAgIHN0eWxlLm93bmVyU3R5bGVT
aGVldC5yZXF1ZXN0Q29udGVudChmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7
CisgICAgICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZmV0
Y2hlZFN0eWxlU2hlZXRDb250ZW50LmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBjaGFuZ2VQ
cm9wZXJ0eTogZnVuY3Rpb24ocHJvcGVydHksIG5hbWUsIHZhbHVlLCBwcmlvcml0eSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJj
ZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJj
ZS5qcwppbmRleCBmM2JiZGIwLi4yYzczMmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCkBAIC01MzksMjggKzUz
OSwxOSBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQuVGlt
ZXN0YW1wc0RpZENoYW5nZSk7CiAgICAgfSwKIAotICAgIGNhblJlcXVlc3RDb250ZW50RnJvbUJh
Y2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZDsK
LSAgICB9LAotCi0gICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJh
Y2spCisgICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgcmVxdWVzdElkZW50aWZpZXIgd2UgY2FuIGdldCB0aGUg
YWN0dWFsIHJlc3BvbnNlIGZvciB0aGlzIHNwZWNpZmljIHJlc291cmNlLgogICAgICAgICAvLyBP
dGhlcndpc2UgdGhlIGNvbnRlbnQgd2lsbCBiZSBjYWNoZWQgcmVzb3VyY2UgZGF0YSwgd2hpY2gg
bWlnaHQgbm90IGV4aXN0IGFueW1vcmUuCi0gICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0SWRlbnRp
ZmllcikgewotICAgICAgICAgICAgTmV0d29ya0FnZW50LmdldFJlc3BvbnNlQm9keSh0aGlzLl9y
ZXF1ZXN0SWRlbnRpZmllciwgY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RJZGVudGlmaWVyKQorICAgICAgICAg
ICAgcmV0dXJuIE5ldHdvcmtBZ2VudC5nZXRSZXNwb25zZUJvZHkucHJvbWlzZSh0aGlzLl9yZXF1
ZXN0SWRlbnRpZmllcik7CiAKLSAgICAgICAgaWYgKHRoaXMuX3BhcmVudEZyYW1lKSB7Ci0gICAg
ICAgICAgICBQYWdlQWdlbnQuZ2V0UmVzb3VyY2VDb250ZW50KHRoaXMuX3BhcmVudEZyYW1lLmlk
LCB0aGlzLl91cmwsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9wYXJlbnRGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBQ
YWdlQWdlbnQuZ2V0UmVzb3VyY2VDb250ZW50LnByb21pc2UodGhpcy5fcGFyZW50RnJhbWUuaWQs
IHRoaXMuX3VybCk7CiAKLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gcmVxdWVzdCBpZGVudGlmaWVy
IG9yIGZyYW1lIHRvIHJlcXVlc3QgY29udGVudCBmcm9tLiBSZXR1cm4gZmFsc2UgdG8gY2F1c2Ug
dGhlCi0gICAgICAgIC8vIHBlbmRpbmcgY2FsbGJhY2tzIHRvIGdldCBudWxsIGNvbnRlbnQuCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHsKKyAg
ICAgICAgICAgIG1lc3NhZ2U6ICJDb250ZW50IHJlcXVlc3QgZmFpbGVkLiIKKyAgICAgICAgfSk7
CiAgICAgfSwKIAogICAgIGluY3JlYXNlU2l6ZTogZnVuY3Rpb24oZGF0YUxlbmd0aCwgZWxhcHNl
ZFRpbWUpCkBAIC02MTYsOCArNjA3LDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
LlJlc291cmNlLkV2ZW50LkxvYWRpbmdEaWRGaW5pc2gpOwogICAgICAgICB0aGlzLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQuVGltZXN0YW1wc0Rp
ZENoYW5nZSk7CiAKLSAgICAgICAgaWYgKHRoaXMuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2Vu
ZCgpKQotICAgICAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQo
KTsKKyAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudCgpOwogICAgIH0sCiAKICAgICBtYXJrQXNG
YWlsZWQ6IGZ1bmN0aW9uKGNhbmNlbGVkLCBlbGFwc2VkVGltZSkKQEAgLTYzMCw5ICs2MjAsNiBA
QCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5Mb2FkaW5n
RGlkRmFpbCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5FdmVudC5UaW1lc3RhbXBzRGlkQ2hhbmdlKTsKLQotICAgICAgICAvLyBG
b3JjZSB0aGUgY29udGVudCByZXF1ZXN0cyB0byBiZSBzZXJ2aWNlZC4gVGhleSB3aWxsIGdldCBu
dWxsIGFzIHRoZSBjb250ZW50LgotICAgICAgICB0aGlzLnNlcnZpY2VQZW5kaW5nQ29udGVudFJl
cXVlc3RzKHRydWUpOwogICAgIH0sCiAKICAgICByZXZlcnRNYXJrQXNGaW5pc2hlZDogZnVuY3Rp
b24oKQpAQCAtNjc2LDggKzY2Myw4IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBpbWFnZURpZExvYWQu
YmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgICAgIC8vIFNldCB0aGUgaW1hZ2Ugc291cmNlIG9u
Y2Ugd2UndmUgb2J0YWluZWQgdGhlIGJhc2U2NC1lbmNvZGVkIFVSTCBmb3IgaXQuCi0gICAgICAg
IHRoaXMucmVxdWVzdENvbnRlbnQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpbWFnZS5zcmMg
PSB0aGlzLmNvbnRlbnRVUkw7CisgICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQoKS50aGVuKGZ1
bmN0aW9uKGNvbnRlbnQpIHsKKyAgICAgICAgICAgIGltYWdlLnNyYyA9IGNvbnRlbnQuc291cmNl
Q29kZS5jb250ZW50VVJMOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0Lmpz
CmluZGV4IGI0YzllMjkuLjgzNDBjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwpAQCAtMTEwLDIyICsxMTAsMTUgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9z
Y3JpcHRTeW50YXhUcmVlOwogICAgIH0sCiAKLSAgICBjYW5SZXF1ZXN0Q29udGVudEZyb21CYWNr
ZW5kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBXZSBjYW4gcmVxdWVzdCBjb250ZW50
IGlmIHdlIGhhdmUgYW4gaWQuCi0gICAgICAgIHJldHVybiAhIXRoaXMuX2lkOwotICAgIH0sCi0K
ICAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5faWQpIHsKICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGlk
ZW50aWZpZXIgdG8gcmVxdWVzdCBjb250ZW50IHdpdGguIFJldHVybiBmYWxzZSB0byBjYXVzZSB0
aGUKICAgICAgICAgICAgIC8vIHBlbmRpbmcgY2FsbGJhY2tzIHRvIGdldCBudWxsIGNvbnRlbnQu
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QoeyBtZXNzYWdlOiAiVGhlcmUgaXMgbm8gaWRlbnRpZmllciB0byByZXF1ZXN0IGNvbnRl
bnQgd2l0aC4iIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgRGVidWdnZXJBZ2VudC5nZXRTY3Jp
cHRTb3VyY2UodGhpcy5faWQsIGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBEZWJ1Z2dlckFnZW50LmdldFNjcmlwdFNvdXJjZS5wcm9taXNlKHRoaXMuX2lk
KTsKICAgICB9LAogCiAgICAgc2F2ZUlkZW50aXR5VG9Db29raWU6IGZ1bmN0aW9uKGNvb2tpZSkK
QEAgLTE1NSw4ICsxNDgsMTAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLnJlcXVlc3RDb250
ZW50KGZ1bmN0aW9uKGVycm9yLCBzb3VyY2VUZXh0KSB7Ci0gICAgICAgICAgICBtYWtlU3ludGF4
VHJlZUFuZENhbGxDYWxsYmFjayhlcnJvciA/IG51bGwgOiBzb3VyY2VUZXh0KTsKKyAgICAgICAg
dGhpcy5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZnVuY3Rpb24ocGFyYW1ldGVycykgeworICAgICAg
ICAgICAgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2socGFyYW1ldGVycy5jb250ZW50KTsK
KyAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgIG1ha2VTeW50
YXhUcmVlQW5kQ2FsbENhbGxiYWNrKG51bGwpOwogICAgICAgICB9KTsKICAgICB9LAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNl
Q29kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3Vy
Y2VDb2RlLmpzCmluZGV4IGRiZWEwMTkuLmIzZTlhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCkBAIC0z
NCw2ICszNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlID0gZnVuY3Rpb24oKQogCiAgICAg
dGhpcy5fc291cmNlTWFwcyA9IG51bGw7CiAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0g
bnVsbDsKKyAgICB0aGlzLl9yZXF1ZXN0Q29udGVudFByb21pc2UgPSBudWxsOwogfTsKIAogV2Vi
SW5zcGVjdG9yLk9iamVjdC5hZGRDb25zdHJ1Y3RvckZ1bmN0aW9ucyhXZWJJbnNwZWN0b3IuU291
cmNlQ29kZSk7CkBAIC0xMjMsMjAgKzEyNCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LkZvcm1hdHRlckRpZENoYW5nZSk7CiAgICAgfSwKIAot
ICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICByZXF1ZXN0Q29udGVu
dDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodHlwZW9mIGNhbGxi
YWNrID09PSAiZnVuY3Rpb24iKTsKLSAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1
bmN0aW9uIikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9wZW5kaW5nQ29u
dGVudFJlcXVlc3RDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgICAgIHRoaXMuX3JlcXVl
c3RDb250ZW50UHJvbWlzZSA9IHRoaXMuX3JlcXVlc3RDb250ZW50UHJvbWlzZSB8fCB0aGlzLnJl
cXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKS50aGVuKHRoaXMuX3Byb2Nlc3NDb250ZW50LmJpbmQo
dGhpcykpOwogCi0gICAgICAgIGlmICh0aGlzLl9jb250ZW50UmVjZWl2ZWQpIHsKLSAgICAgICAg
ICAgIC8vIENhbGwgX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzIG9uIGEgdGltZW91dCB0
byBmb3JjZSBjYWxsYmFja3MgdG8gYmUgYXN5bmNocm9ub3VzLgotICAgICAgICAgICAgaWYgKCF0
aGlzLl9zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0c1RpbWVvdXRJZGVudGlmaWVyKQotICAg
ICAgICAgICAgICAgIHRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzVGltZW91dElk
ZW50aWZpZXIgPSBzZXRUaW1lb3V0KHRoaXMuc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMu
YmluZCh0aGlzKSwgMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5SZXF1ZXN0Q29udGVu
dEZyb21CYWNrZW5kKCkpCi0gICAgICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50RnJvbUJhY2tl
bmRJZk5lZWRlZCgpOworICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdENvbnRlbnRQcm9taXNl
OwogICAgIH0sCiAKICAgICBjcmVhdGVTb3VyY2VDb2RlTG9jYXRpb246IGZ1bmN0aW9uKGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcikKQEAgLTE4NSw3NSArMTc3LDE4IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29udGVudFJlY2VpdmVkID0g
ZmFsc2U7CiAgICAgfSwKIAotICAgIGNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCi0gICAg
ICAgIGNvbnNvbGUuZXJyb3IoIk5lZWRzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGEgc3ViY2xhc3Mu
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgcmVxdWVzdENvbnRlbnRG
cm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgcmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xh
c3Nlcy4KICAgICAgICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgYnkg
YSBzdWJjbGFzcy4iKTsKICAgICB9LAogCi0gICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZElm
TmVlZGVkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmNh
blJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSk7Ci0gICAgICAgIGlmICghdGhpcy5jYW5SZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKCF0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MubGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0aGlzLl9jb250ZW50UmVxdWVzdFJlc3BvbnNl
UGVuZGluZykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jb250ZW50UmVx
dWVzdFJlc3BvbnNlUGVuZGluZyA9IHRydWU7Ci0KLSAgICAgICAgaWYgKHRoaXMucmVxdWVzdENv
bnRlbnRGcm9tQmFja2VuZCh0aGlzLl9wcm9jZXNzQ29udGVudC5iaW5kKHRoaXMpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBTaW5jZSByZXF1ZXN0Q29udGVudEZyb21CYWNr
ZW5kIHJldHVybmVkIGZhbHNlLCBqdXN0IGNhbGwgX3Byb2Nlc3NDb250ZW50LAotICAgICAgICAv
LyB3aGljaCB3aWxsIGNhdXNlIHRoZSBwZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBjb250
ZW50LgotICAgICAgICB0aGlzLl9wcm9jZXNzQ29udGVudCgpOwotICAgIH0sCi0KLSAgICBzZXJ2
aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0czogZnVuY3Rpb24oZm9yY2UpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmll
cikgewotICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVu
dFJlcXVlc3RzVGltZW91dElkZW50aWZpZXIpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nl
cnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzVGltZW91dElkZW50aWZpZXI7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBGb3JjZSB0aGUgY29udGVudCByZXF1ZXN0cyB0byBiZSBzZW50LiBUbyBk
byB0aGlzIGNvcnJlY3RseSB3ZSBhbHNvIGZvcmNlCi0gICAgICAgIC8vIF9jb250ZW50UmVjZWl2
ZWQgdG8gYmUgdHJ1ZSBzbyBmdXR1cmUgY2FsbHMgdG8gcmVxdWVzdENvbnRlbnQgZ28gdGhyb3Vn
aC4KLSAgICAgICAgaWYgKGZvcmNlKQotICAgICAgICAgICAgdGhpcy5fY29udGVudFJlY2VpdmVk
ID0gdHJ1ZTsKLQotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9jb250ZW50UmVjZWl2ZWQp
OwotICAgICAgICBpZiAoIXRoaXMuX2NvbnRlbnRSZWNlaXZlZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAvLyBNb3ZlIHRoZSBjYWxsYmFja3MgaW50byBhIGxvY2FsIGFuZCBjbGVh
ciBfcGVuZGluZ0NvbnRlbnRSZXF1ZXN0Q2FsbGJhY2tzIHNvCi0gICAgICAgIC8vIGNhbGxiYWNr
cyB0aGF0IG1pZ2h0IGNhbGwgcmVxdWVzdENvbnRlbnQgYWdhaW4gd2lsbCBub3QgbW9kaWZ5IHRo
ZSBhcnJheS4KLSAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX3BlbmRpbmdDb250ZW50UmVx
dWVzdENhbGxiYWNrczsKLSAgICAgICAgdGhpcy5fcGVuZGluZ0NvbnRlbnRSZXF1ZXN0Q2FsbGJh
Y2tzID0gW107Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICBjYWxsYmFja3NbaV0odGhpcywgdGhpcy5jb250ZW50LCB0aGlz
LmNvbnRlbnRJc0Jhc2U2NEVuY29kZWQpOwotICAgIH0sCi0KICAgICAvLyBQcml2YXRlCiAKLSAg
ICBfcHJvY2Vzc0NvbnRlbnQ6IGZ1bmN0aW9uKGVycm9yLCBjb250ZW50LCBiYXNlNjRFbmNvZGVk
KQorICAgIF9wcm9jZXNzQ29udGVudDogZnVuY3Rpb24ocGFyYW1ldGVycykKICAgICB7Ci0gICAg
ICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotCi0gICAg
ICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAg
IHRoaXMuX2NvbnRlbnRSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIHZhciBjb250ZW50ID0gcGFy
YW1ldGVycy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFtZXRlcnMu
YmFzZTY0RW5jb2RlZDsKIAogICAgICAgICB2YXIgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uRm9y
UmVxdWVzdGVkQ29udGVudDsKIApAQCAtMjYyLDcgKzE5NywxMSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldmlzaW9uLmNvbnRlbnRJc0Jhc2U2NEVu
Y29kZWQgPSBiYXNlNjRFbmNvZGVkIHx8IGZhbHNlOwogICAgICAgICBkZWxldGUgdGhpcy5faWdu
b3JlUmV2aXNpb25Db250ZW50RGlkQ2hhbmdlRXZlbnQ7CiAKLSAgICAgICAgdGhpcy5zZXJ2aWNl
UGVuZGluZ0NvbnRlbnRSZXF1ZXN0cygpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KHsKKyAgICAgICAgICAgIHNvdXJjZUNvZGU6IHRoaXMsCisgICAgICAgICAgICBjb250ZW50OiBj
b250ZW50LAorICAgICAgICAgICAgYmFzZTY0RW5jb2RlZDogYmFzZTY0RW5jb2RlZAorICAgICAg
ICB9KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMKaW5kZXggOGQ4
OThhMi4uYmIzODEzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL1NvdXJjZU1hcFJlc291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcwpAQCAtMzEsNyAr
MzEsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UgPSBmdW5jdGlvbih1cmwsIHNv
dXJjZU1hcCkKICAgICBjb25zb2xlLmFzc2VydChzb3VyY2VNYXApOwogCiAgICAgdGhpcy5fc291
cmNlTWFwID0gc291cmNlTWFwOwotICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0ZWQgPSBmYWxzZTsK
KyAgICAvL3RoaXMuX2NvbnRlbnRSZXF1ZXN0ZWQgPSBmYWxzZTsKIAogICAgIHZhciBpbmhlcml0
ZWRNSU1FVHlwZSA9IHRoaXMuX3NvdXJjZU1hcC5vcmlnaW5hbFNvdXJjZUNvZGUgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgPyB0aGlzLl9zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VD
b2RlLnN5bnRoZXRpY01JTUVUeXBlIDogbnVsbDsKIApAQCAtNzUsMTQgKzc1LDkgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJl
c291cmNlVVJMQ29tcG9uZW50cy5wYXRoLnN1YnN0cmluZyhzb3VyY2VNYXBwaW5nQmFzZVBhdGhV
UkxDb21wb25lbnRzLnBhdGgubGVuZ3RoLCByZXNvdXJjZVVSTENvbXBvbmVudHMubGVuZ3RoKTsK
ICAgICB9LAogCi0gICAgY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuICF0aGlzLl9jb250ZW50UmVxdWVzdGVkOwotICAgIH0sCi0K
ICAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7
Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0ZWQgPSB0cnVlOworICAgICAgICAvL3RoaXMu
X2NvbnRlbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCiAgICAgICAgIC8vIFJldmVydCB0aGUgbWFya0Fz
RmluaXNoZWQgdGhhdCB3YXMgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IuCiAgICAgICAgIHRoaXMu
cmV2ZXJ0TWFya0FzRmluaXNoZWQoKTsKQEAgLTkwLDIyICs4NSwyOCBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICB2YXIgaW5saW5lQ29udGVu
dCA9IHRoaXMuX3NvdXJjZU1hcC5zb3VyY2VDb250ZW50KHRoaXMudXJsKTsKICAgICAgICAgaWYg
KGlubGluZUNvbnRlbnQpIHsKICAgICAgICAgICAgIC8vIEZvcmNlIGlubGluZSBjb250ZW50IHRv
IGJlIGFzeW5jaHJvbm91cyB0byBtYXRjaCB0aGUgZXhwZWN0ZWQgbG9hZCBwYXR0ZXJuLgotICAg
ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2UgZG9uJ3Qga25vdyB0aGUgTUlNRS10eXBlIGZvciBpbmxpbmUgY29udGVudC4gR3Vlc3Mg
YnkgYW5hbHl6aW5nIHRoZSBjb250ZW50PwotICAgICAgICAgICAgICAgIHNvdXJjZU1hcFJlc291
cmNlTG9hZGVkLmNhbGwodGhpcywgbnVsbCwgaW5saW5lQ29udGVudCwgdGhpcy5taW1lVHlwZSwg
MjAwKTsKLSAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
V2UgZG9uJ3Qga25vdyB0aGUgTUlNRS10eXBlIGZvciBpbmxpbmUgY29udGVudC4gR3Vlc3MgYnkg
YW5hbHl6aW5nIHRoZSBjb250ZW50PworICAgICAgICAgICAgLy8gUmV0dXJucyBhIHByb21pc2Uu
CisgICAgICAgICAgICByZXR1cm4gc291cmNlTWFwUmVzb3VyY2VMb2FkZWQuY2FsbCh0aGlzLCBu
dWxsLCBpbmxpbmVDb250ZW50LCB0aGlzLm1pbWVUeXBlLCAyMDApOworICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBmdW5jdGlvbiBzb3VyY2VNYXBSZXNvdXJj
ZUxvYWRFcnJvcihlcnJvciwgYm9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRoaXMubWFya0FzRmFpbGVkKCk7CisgICAgICAgICAgICByZXR1cm4gUHJv
bWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IsCisgICAgICAgICAg
ICAgICAgY29udGVudDogYm9keS5jb250ZW50LAorICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBt
aW1lVHlwZSwKKyAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlCisgICAgICAg
ICAgICB9KTsKICAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIHNvdXJjZU1hcFJlc291cmNl
TG9hZGVkKGVycm9yLCBib2R5LCBtaW1lVHlwZSwgc3RhdHVzQ29kZSkKKyAgICAgICAgZnVuY3Rp
b24gc291cmNlTWFwUmVzb3VyY2VMb2FkZWQoYm9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IGJhc2U2NGVuY29kZWQgPSBmYWxzZTsKIAotICAg
ICAgICAgICAgaWYgKGVycm9yIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5tYXJrQXNGYWlsZWQoKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciwg
Ym9keSwgYmFzZTY0ZW5jb2RlZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgaWYgKHN0YXR1c0NvZGUgPj0gNDAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJj
ZU1hcFJlc291cmNlTG9hZEVycm9yKGVycm9yLCBib2R5LCBtaW1lVHlwZSwgc3RhdHVzQ29kZSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
cGlja2luZyB0aGUgYmVzdCBNSU1FLXR5cGUuIFJpZ2h0IG5vdyB0aGUgZmlsZSBleHRlbnNpb24g
aXMgdGhlIGJlc3QgYmV0LgpAQCAtMTEzLDEyICsxMTQsMTcgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZU1hcFJlc291cmNlLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgdGhpcy5tYXJrQXNGaW5p
c2hlZCgpOwogCi0gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBib2R5LCBiYXNlNjRlbmNvZGVk
KTsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeworICAgICAgICAgICAgICAg
IGNvbnRlbnQ6IGJvZHkuY29udGVudCwKKyAgICAgICAgICAgICAgICBtaW1lVHlwZTogbWltZVR5
cGUsCisgICAgICAgICAgICAgICAgYmFzZTY0ZW5jb2RlZDogYmFzZTY0ZW5jb2RlZCwKKyAgICAg
ICAgICAgICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlCisgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZSkgewogICAgICAg
ICAgICAgc291cmNlTWFwUmVzb3VyY2VMb2FkZWQuY2FsbCh0aGlzLCAiZXJyb3I6IG5vIE5ldHdv
cmtBZ2VudC5sb2FkUmVzb3VyY2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IG1lc3NhZ2U6ICJlcnJvcjogbm8gTmV0d29y
a0FnZW50LmxvYWRSZXNvdXJjZSIgfSk7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgZnJhbWVJ
ZGVudGlmaWVyID0gbnVsbDsKQEAgLTEyOCw5ICsxMzQsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
TWFwUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIWZyYW1lSWRlbnRpZmllcikK
ICAgICAgICAgICAgIGZyYW1lSWRlbnRpZmllciA9IFdlYkluc3BlY3Rvci5mcmFtZVJlc291cmNl
TWFuYWdlci5tYWluRnJhbWUuaWQ7CiAKLSAgICAgICAgTmV0d29ya0FnZW50LmxvYWRSZXNvdXJj
ZShmcmFtZUlkZW50aWZpZXIsIHRoaXMudXJsLCBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZC5iaW5k
KHRoaXMpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtB
Z2VudC5sb2FkUmVzb3VyY2UucHJvbWlzZShmcmFtZUlkZW50aWZpZXIsIHRoaXMudXJsKS50aGVu
KHNvdXJjZU1hcFJlc291cmNlTG9hZGVkLmJpbmQodGhpcykpLmNhdGNoKHNvdXJjZU1hcFJlc291
cmNlTG9hZEVycm9yLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBjcmVhdGVTb3VyY2VDb2Rl
TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlQ29udGVu
dFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNv
dXJjZUNvbnRlbnRWaWV3LmpzCmluZGV4IDBiOTk0YWQuLmY4YjczMzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlQ29udGVudFZp
ZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVz
b3VyY2VDb250ZW50Vmlldy5qcwpAQCAtNDMsNyArNDMsNyBAQCBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VDb250ZW50VmlldyA9IGZ1bmN0aW9uKHJlc291cmNlLCBzdHlsZUNsYXNzTmFtZSkKICAgICB0
aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9tb3VzZVdhc0NsaWNr
ZWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgLy8gUmVxdWVzdCBjb250ZW50IGxhc3Qgc28g
dGhlIHNwaW5uZXIgd2lsbCBhbHdheXMgYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBjb250ZW50IGlz
IGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4KLSAgICByZXNvdXJjZS5yZXF1ZXN0Q29udGVudCh0aGlz
Ll9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOworICAgIHJlc291cmNlLnJlcXVlc3RDb250
ZW50KCkudGhlbih0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogCiAgICAgaWYg
KCF0aGlzLm1hbmFnZXNPd25Jc3N1ZXMpIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmlzc3VlTWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIuRXZlbnQuSXNz
dWVXYXNBZGRlZCwgdGhpcy5faXNzdWVXYXNBZGRlZCwgdGhpcyk7CkBAIC04NiwxMCArODYsMTQg
QEAgV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAg
Ly8gUHJpdmF0ZQogCi0gICAgX2NvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKHJlc291cmNlLCBj
b250ZW50LCBiYXNlNjRFbmNvZGVkKQorICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihw
YXJhbWV0ZXJzKQogICAgIHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gcGFyYW1ldGVycy5zb3Vy
Y2VDb2RlOworICAgICAgICB2YXIgY29udGVudCA9IHBhcmFtZXRlcnMuY29udGVudDsKKyAgICAg
ICAgdmFyIGJhc2U2NEVuY29kZWQgPSBwYXJhbWV0ZXJzLmJhc2U2NEVuY29kZWQ7CisKICAgICAg
ICAgLy8gQ2hlY2sgZm9yIGZhaWxlZCBsb2Fkcy4KLSAgICAgICAgaWYgKHRoaXMucmVzb3VyY2Uu
ZmFpbGVkKSB7CisgICAgICAgIGlmIChyZXNvdXJjZS5mYWlsZWQpIHsKICAgICAgICAgICAgIC8v
IERvbid0IHNob3cgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVycm9y
IG1lc3NhZ2Ugc2hvd2luZyAobGlrZSBvbmUgYWRkZWQgYnkgYWRkSXNzdWUuKQogICAgICAgICAg
ICAgaWYgKHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWVzc2FnZS10ZXh0LXZpZXcuZXJy
b3IiKSkKICAgICAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRp
dG9yLmpzCmluZGV4IGY2NjgyMTMuLjk1ODVkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0
RWRpdG9yLmpzCkBAIC03MCw3ICs3MCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCiAgICAgZWxzZQogICAgICAgICB0aGlzLl9zb3Vy
Y2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291
cmNlTWFwQWRkZWQsIHRoaXMuX3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhpcyk7CiAKLSAg
ICBzb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50KHRoaXMuX2NvbnRlbnRBdmFpbGFibGUuYmluZCh0
aGlzKSk7CisgICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4odGhpcy5fY29udGVu
dEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKIAogICAgIC8vIEZJWE1FOiBDbWQrTCBzaG9yY3V0IGRv
ZXNuJ3QgYWN0dWFsbHkgd29yay4KICAgICBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRj
dXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29tbWFuZCwgIkwiLCB0
aGlzLnNob3dHb1RvTGluZURpYWxvZy5iaW5kKHRoaXMpLCB0aGlzLmVsZW1lbnQpOwpAQCAtNDM2
LDggKzQzNiwxMiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLl9jb250ZW50RGlkUG9wdWxhdGUoKTsKICAgICB9LAogCi0gICAg
X2NvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKHNvdXJjZUNvZGUsIGNvbnRlbnQsIGJhc2U2NEVu
Y29kZWQpCisgICAgX2NvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCiAgICAg
eworICAgICAgICB2YXIgc291cmNlQ29kZSA9IHBhcmFtZXRlcnMuc291cmNlQ29kZTsKKyAgICAg
ICAgdmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQ7CisgICAgICAgIHZhciBiYXNlNjRF
bmNvZGVkID0gcGFyYW1ldGVycy5iYXNlNjRFbmNvZGVkOworCiAgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHNvdXJjZUNvZGUgPT09IHRoaXMuX3NvdXJjZUNvZGUpOwogICAgICAgICBjb25zb2xlLmFz
c2VydCghYmFzZTY0RW5jb2RlZCk7CiAKQEAgLTYzOSw3ICs2NDMsNyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2lubGlu
ZVNjcmlwdENvbnRlbnRQb3B1bGF0ZWQgPSBwZW5kaW5nUmVxdWVzdENvdW50OwogCi0gICAgICAg
IGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFibGUoZXJyb3IsIGNvbnRlbnQpCisgICAgICAg
IGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFibGUocGFyYW1ldGVycykKICAgICAgICAgewog
ICAgICAgICAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBj
b250ZW50IGZyb20gb3RoZXIgc2NyaXB0cy4KICAgICAgICAgICAgIGlmICgtLXBlbmRpbmdSZXF1
ZXN0Q291bnQpCkBAIC02ODksNyArNjkzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgYm91bmRTY3JpcHRDb250ZW50QXZh
aWxhYmxlID0gc2NyaXB0Q29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpOwogICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzY3JpcHRz
W2ldLnJlcXVlc3RDb250ZW50KGJvdW5kU2NyaXB0Q29udGVudEF2YWlsYWJsZSk7CisgICAgICAg
ICAgICBzY3JpcHRzW2ldLnJlcXVlc3RDb250ZW50KCkudGhlbihib3VuZFNjcmlwdENvbnRlbnRB
dmFpbGFibGUpOwogICAgIH0sCiAKICAgICBfcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudDogZnVu
Y3Rpb24oKQpAQCAtNzA3LDggKzcxMSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdHNbMF0ucmFu
Z2Uuc3RhcnRMaW5lID09PSAwKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0c1swXS5y
YW5nZS5zdGFydENvbHVtbiA9PT0gMCk7CiAKLSAgICAgICAgZnVuY3Rpb24gc2NyaXB0Q29udGVu
dEF2YWlsYWJsZShlcnJvciwgY29udGVudCkKKyAgICAgICAgZnVuY3Rpb24gc2NyaXB0Q29udGVu
dEF2YWlsYWJsZShwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGVu
dCA9IHBhcmFtZXRlcnMuY29udGVudDsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZXF1ZXN0
aW5nU2NyaXB0Q29udGVudDsKIAogICAgICAgICAgICAgLy8gQWJvcnQgaWYgdGhlIGZ1bGwgY29u
dGVudCBwb3B1bGF0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhpcyBhc3luYyBjYWxsYmFjay4KQEAg
LTcyMyw3ICs3MjgsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlID0gewogCiAgICAgICAgIHRoaXMuX3JlcXVlc3RpbmdTY3JpcHRDb250ZW50ID0gdHJ1ZTsK
IAotICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250ZW50KHNjcmlwdENvbnRlbnRBdmFpbGFi
bGUuYmluZCh0aGlzKSk7CisgICAgICAgIHNjcmlwdHNbMF0ucmVxdWVzdENvbnRlbnQoKS50aGVu
KHNjcmlwdENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9tYXRj
aGVzU291cmNlQ29kZUxvY2F0aW9uOiBmdW5jdGlvbihzb3VyY2VDb2RlTG9jYXRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242962</attachid>
            <date>2014-12-09 13:52:23 -0800</date>
            <delta_ts>2014-12-09 15:03:15 -0800</delta_ts>
            <desc>[PATCH] fix for review.</desc>
            <filename>contentpromise.diff</filename>
            <type>text/plain</type>
            <size>29507</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDZiZDZkNzcuLmYwZTM5YTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE0LTEyLTA5ICBKb25hdGhhbiBXZWxs
cyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogU291cmNl
Q29kZS5yZXF1ZXN0Q29udGVudCBzaG91bGQgcmV0dXJuIGEgcHJvbWlzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1Nzc3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIFNvdXJjZUNvZGUuanMg
dG8gcmVxdWVzdCBjb250ZW50IGZyb20gdGhlIGJhY2tlbmQgdXNpbmcgUHJvbWlzZXMuIENoYW5n
ZSBSZXNvdXJjZS5qcyB0byB1c2UgdGhpcyBuZXcKKyAgICAgICAgYXBwcm9hY2ggd2hlbiBkZXRl
cm1pbmluZyB3aGV0aGVyIGEgcmVzb3VyY2UgbG9hZCBoYXMgZmluaXNoZWQuIENoYW5nZSBhbGwg
Y2FsbHMgdG8gdGhlIG9sZGVyCisgICAgICAgIFNvdXJjZUNvZGUjcmVxdWVzdENvbnRlbnRGcm9t
QmFja2VuZElmTmVlZGVkIHRvIHNpbXBseSB1c2UgcmVxdWVzdENvbnRlbnQgYW5kIHVzZSBhIGNh
dGNoIGZ1bmN0aW9uCisgICAgICAgIGlmIGFuIGNvbnRlbnQgcmVxdWVzdCBlcnJvciBuZWVkcyB0
byBiZSBoYW5kbGVkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFs
eXplck1hbmFnZXIuanM6CisgICAgICAgIChzZXQgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdl
ci5wcm90b3R5cGUuZ2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGUuKToKKyAgICAgICAg
KHNldCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbmFseXplck1l
c3NhZ2VzRm9yU291cmNlQ29kZSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9DU1NTdHlsZU1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5h
Z2VyLnByb3RvdHlwZS5fdXBkYXRlUmVzb3VyY2VDb250ZW50LmZldGNoZWRTdHlsZVNoZWV0Q29u
dGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5f
dXBkYXRlUmVzb3VyY2VDb250ZW50LnN0eWxlU2hlZXRSZWFkeSk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NTdHlsZVNoZWV0LnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5jYW5SZXF1ZXN0Q29udGVu
dEZyb21CYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9E
T01Ob2RlU3R5bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJv
dG90eXBlLmNoYW5nZVN0eWxlVGV4dCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
UmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmNh
blJlcXVlc3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5
cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2UucHJvdG90eXBlLm1hcmtBc0ZpbmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZS5wcm90b3R5cGUubWFya0FzRmFpbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZS5wcm90b3R5cGUuZ2V0SW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZS5wcm90b3R5cGUuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6IERlbGV0ZWQu
CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2NyaXB0U3ludGF4
VHJlZS5jYXRjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5jYW5S
ZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5yZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
LnByb3RvdHlwZS5fcHJvY2Vzc0NvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGUucHJvdG90eXBlLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50
RnJvbUJhY2tlbmRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlQ29kZS5wcm90b3R5cGUuc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMpOiBEZWxldGVk
LgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZU1hcFJlc291cmNlLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZC5zb3VyY2VNYXBSZXNvdXJjZUxvYWRFcnJvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZS5jYW5SZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZC5zb3Vy
Y2VNYXBSZXNvdXJjZUxvYWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291
cmNlQ29udGVudFZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZp
ZXcucHJvdG90eXBlLl9jb250ZW50QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudEVycm9yKToKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnRBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVX
aXRoSW5saW5lU2NyaXB0Q29udGVudC5zY3JpcHRDb250ZW50QXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3BvcHVsYXRlV2l0
aElubGluZVNjcmlwdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVU
ZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudCk6CisKIDIwMTQt
MTItMDUgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBVbmNhdWdodCBFeGNlcHRpb25zIHdoZW4gYXR0ZW1wdGluZyB0byBzaG93
IENvbnRlbnQgRmxvdwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCmluZGV4IDk2
MzhiZmYuLjA4Y2YxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMKQEAg
LTg3LDcgKzg3LDcgQEAgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBm
dW5jdGlvbiByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMoKQorICAgICAgICAgICAgZnVuY3Rpb24g
cmV0cmlldmVBbmFseXplck1lc3NhZ2VzKHByb3BlcnRpZXMpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgdmFyIGFuYWx5emVyTWVzc2FnZXMgPSBbXTsKICAgICAgICAgICAgICAgICB2
YXIgcmF3QW5hbHl6ZXJNZXNzYWdlcyA9IGFuYWx5emVyLnZlcmlmeShzb3VyY2VDb2RlLmNvbnRl
bnQsIHRoaXMuX2VzbGludENvbmZpZyk7CkBAIC0xMDEsNyArMTAxLDcgQEAgV2ViSW5zcGVjdG9y
LkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZShh
bmFseXplck1lc3NhZ2VzKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc291cmNlQ29k
ZS5yZXF1ZXN0Q29udGVudChyZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMuYmluZCh0aGlzKSk7Cisg
ICAgICAgICAgICBzb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50KCkudGhlbihyZXRyaWV2ZUFuYWx5
emVyTWVzc2FnZXMuYmluZCh0aGlzKSk7CiAgICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICAgfSwK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCmluZGV4IDdhYTY0YWIuLjllMWM4
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMKQEAgLTMxMCw4ICszMTAs
MTEgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydChzdHlsZVNoZWV0KTsKIAotICAgICAgICBmdW5jdGlvbiBm
ZXRjaGVkU3R5bGVTaGVldENvbnRlbnQoc3R5bGVTaGVldCwgY29udGVudCkKKyAgICAgICAgZnVu
Y3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHBhcmFtZXRlcnMpCiAgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gcGFyYW1ldGVycy5zb3VyY2VDb2RlOworICAgICAg
ICAgICAgdmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQ7CisKICAgICAgICAgICAgIGRl
bGV0ZSBzdHlsZVNoZWV0Ll9fcGVuZGluZ0NoYW5nZVRpbWVvdXQ7CiAKICAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHN0eWxlU2hlZXQudXJsKTsKQEAgLTM0Nyw3ICszNTAsNyBAQCBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBmdW5jdGlvbiBz
dHlsZVNoZWV0UmVhZHkoKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdHlsZVNoZWV0LnJlcXVl
c3RDb250ZW50KGZldGNoZWRTdHlsZVNoZWV0Q29udGVudC5iaW5kKHRoaXMpKTsKKyAgICAgICAg
ICAgIHN0eWxlU2hlZXQucmVxdWVzdENvbnRlbnQoKS50aGVuKGZldGNoZWRTdHlsZVNoZWV0Q29u
dGVudC5iaW5kKHRoaXMpKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIGFwcGx5U3R5
bGVTaGVldENoYW5nZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qcwppbmRleCA1MWQ5ZTZmLi5kNDU0
MjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQ1NTU3R5bGVTaGVldC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qcwpAQCAtMTIxLDIyICsxMjEsMTUgQEAgV2ViSW5z
cGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlID0gewogICAgICAgICBDU1NBZ2VudC5zZXRT
dHlsZVNoZWV0VGV4dCh0aGlzLl9pZCwgdGhpcy5jdXJyZW50UmV2aXNpb24uY29udGVudCwgY29u
dGVudERpZENoYW5nZS5iaW5kKHRoaXMpKTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVzdENvbnRl
bnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuIHJlcXVl
c3QgY29udGVudCBpZiB3ZSBoYXZlIGFuIGlkLgotICAgICAgICByZXR1cm4gISF0aGlzLl9pZDsK
LSAgICB9LAotCi0gICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJh
Y2spCisgICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgaWYgKCF0aGlzLl9pZCkgewotICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gaWRlbnRp
ZmllciB0byByZXF1ZXN0IGNvbnRlbnQgd2l0aC4gUmV0dXJuIGZhbHNlIHRvIGNhdXNlIHRoZQor
ICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gaWRlbnRpZmllciB0byByZXF1ZXN0IGNvbnRlbnQg
d2l0aC4gUmVqZWN0IHRoZSBwcm9taXNlIHRvIGNhdXNlIHRoZQogICAgICAgICAgICAgLy8gcGVu
ZGluZyBjYWxsYmFja3MgdG8gZ2V0IG51bGwgY29udGVudC4KLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IG1lc3NhZ2U6ICJUaGVy
ZSBpcyBubyBpZGVudGlmaWVyIHRvIHJlcXVlc3QgY29udGVudCB3aXRoLiIgfSk7CiAgICAgICAg
IH0KIAotICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZVNoZWV0VGV4dCh0aGlzLl9pZCwgY2FsbGJh
Y2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIENTU0FnZW50LmdldFN0
eWxlU2hlZXRUZXh0LnByb21pc2UodGhpcy5faWQpOwogICAgIH0sCiAKICAgICBub3RlQ29udGVu
dERpZENoYW5nZTogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwppbmRleCA4MDJlMmI3
Li5lM2M3Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwpAQCAtNDA1LDggKzQwNSwxMCBAQCBX
ZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBmZXRjaGVkU3R5bGVTaGVldENvbnRl
bnQoc3R5bGVTaGVldCwgY29udGVudCkKKyAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hl
ZXRDb250ZW50KHBhcmFtZXRlcnMpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjb250ZW50
ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChzdHls
ZS5zdHlsZVNoZWV0VGV4dFJhbmdlKTsKICAgICAgICAgICAgIGlmICghc3R5bGUuc3R5bGVTaGVl
dFRleHRSYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00NDYsNyArNDQ4LDcgQEAg
V2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9u
ZWVkc1JlZnJlc2ggPSB0cnVlOwogICAgICAgICB0aGlzLl9pZ25vcmVOZXh0Q29udGVudERpZENo
YW5nZUZvclN0eWxlU2hlZXQgPSBzdHlsZS5vd25lclN0eWxlU2hlZXQ7CiAKLSAgICAgICAgc3R5
bGUub3duZXJTdHlsZVNoZWV0LnJlcXVlc3RDb250ZW50KGZldGNoZWRTdHlsZVNoZWV0Q29udGVu
dC5iaW5kKHRoaXMpKTsKKyAgICAgICAgc3R5bGUub3duZXJTdHlsZVNoZWV0LnJlcXVlc3RDb250
ZW50KCkudGhlbihmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CiAgICAgfSwK
IAogICAgIGNoYW5nZVByb3BlcnR5OiBmdW5jdGlvbihwcm9wZXJ0eSwgbmFtZSwgdmFsdWUsIHBy
aW9yaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1Jlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1Jlc291cmNlLmpzCmluZGV4IGYzYmJkYjAuLjQyODE5ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMK
QEAgLTUzOSwyOCArNTM5LDI0IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNv
dXJjZS5FdmVudC5UaW1lc3RhbXBzRGlkQ2hhbmdlKTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVz
dENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQorICAgIGNhblJlcXVlc3RDb250ZW50OiBm
dW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoZWQ7CiAgICAgfSwK
IAotICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAg
IHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8v
IElmIHdlIGhhdmUgdGhlIHJlcXVlc3RJZGVudGlmaWVyIHdlIGNhbiBnZXQgdGhlIGFjdHVhbCBy
ZXNwb25zZSBmb3IgdGhpcyBzcGVjaWZpYyByZXNvdXJjZS4KICAgICAgICAgLy8gT3RoZXJ3aXNl
IHRoZSBjb250ZW50IHdpbGwgYmUgY2FjaGVkIHJlc291cmNlIGRhdGEsIHdoaWNoIG1pZ2h0IG5v
dCBleGlzdCBhbnltb3JlLgotICAgICAgICBpZiAodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpIHsK
LSAgICAgICAgICAgIE5ldHdvcmtBZ2VudC5nZXRSZXNwb25zZUJvZHkodGhpcy5fcmVxdWVzdElk
ZW50aWZpZXIsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0SWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVy
biBOZXR3b3JrQWdlbnQuZ2V0UmVzcG9uc2VCb2R5LnByb21pc2UodGhpcy5fcmVxdWVzdElkZW50
aWZpZXIpOwogCi0gICAgICAgIGlmICh0aGlzLl9wYXJlbnRGcmFtZSkgewotICAgICAgICAgICAg
UGFnZUFnZW50LmdldFJlc291cmNlQ29udGVudCh0aGlzLl9wYXJlbnRGcmFtZS5pZCwgdGhpcy5f
dXJsLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAodGhpcy5fcGFyZW50RnJhbWUpCisgICAgICAgICAgICByZXR1cm4gUGFnZUFnZW50
LmdldFJlc291cmNlQ29udGVudC5wcm9taXNlKHRoaXMuX3BhcmVudEZyYW1lLmlkLCB0aGlzLl91
cmwpOwogCi0gICAgICAgIC8vIFRoZXJlIGlzIG5vIHJlcXVlc3QgaWRlbnRpZmllciBvciBmcmFt
ZSB0byByZXF1ZXN0IGNvbnRlbnQgZnJvbS4gUmV0dXJuIGZhbHNlIHRvIGNhdXNlIHRoZQotICAg
ICAgICAvLyBwZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBjb250ZW50LgotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7CisgICAgICAgICAg
ICBtZXNzYWdlOiAiQ29udGVudCByZXF1ZXN0IGZhaWxlZC4iCisgICAgICAgIH0pOwogICAgIH0s
CiAKICAgICBpbmNyZWFzZVNpemU6IGZ1bmN0aW9uKGRhdGFMZW5ndGgsIGVsYXBzZWRUaW1lKQpA
QCAtNjEzLDExICs2MDksMTEgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlOwogICAgICAgICB0aGlzLl9maW5pc2hlZE9y
RmFpbGVkVGltZXN0YW1wID0gZWxhcHNlZFRpbWUgfHwgTmFOOwogCisgICAgICAgIGlmICh0aGlz
Ll9maW5pc2hUaGVuUmVxdWVzdENvbnRlbnRQcm9taXNlKQorICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2ZpbmlzaFRoZW5SZXF1ZXN0Q29udGVudFByb21pc2U7CisKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlc291cmNlLkV2ZW50LkxvYWRpbmdE
aWRGaW5pc2gpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuRXZlbnQuVGltZXN0YW1wc0RpZENoYW5nZSk7Ci0KLSAgICAgICAgaWYg
KHRoaXMuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKQotICAgICAgICAgICAgdGhpcy5y
ZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQoKTsKICAgICB9LAogCiAgICAgbWFya0Fz
RmFpbGVkOiBmdW5jdGlvbihjYW5jZWxlZCwgZWxhcHNlZFRpbWUpCkBAIC02MzAsOSArNjI2LDYg
QEAgV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQuTG9hZGlu
Z0RpZEZhaWwpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuRXZlbnQuVGltZXN0YW1wc0RpZENoYW5nZSk7Ci0KLSAgICAgICAgLy8g
Rm9yY2UgdGhlIGNvbnRlbnQgcmVxdWVzdHMgdG8gYmUgc2VydmljZWQuIFRoZXkgd2lsbCBnZXQg
bnVsbCBhcyB0aGUgY29udGVudC4KLSAgICAgICAgdGhpcy5zZXJ2aWNlUGVuZGluZ0NvbnRlbnRS
ZXF1ZXN0cyh0cnVlKTsKICAgICB9LAogCiAgICAgcmV2ZXJ0TWFya0FzRmluaXNoZWQ6IGZ1bmN0
aW9uKCkKQEAgLTY3Niw5ICs2NjksMjggQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGltYWdlRGlkTG9h
ZC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBpbWFnZSBzb3VyY2Ug
b25jZSB3ZSd2ZSBvYnRhaW5lZCB0aGUgYmFzZTY0LWVuY29kZWQgVVJMIGZvciBpdC4KLSAgICAg
ICAgdGhpcy5yZXF1ZXN0Q29udGVudChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGltYWdlLnNy
YyA9IHRoaXMuY29udGVudFVSTDsKLSAgICAgICAgfS5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhp
cy5yZXF1ZXN0Q29udGVudCgpLnRoZW4oZnVuY3Rpb24oY29udGVudCkgeworICAgICAgICAgICAg
aW1hZ2Uuc3JjID0gY29udGVudC5zb3VyY2VDb2RlLmNvbnRlbnRVUkw7CisgICAgICAgIH0pOwor
ICAgIH0sCisKKyAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2ZpbmlzaGVkKQorICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudC5jYWxsKHRoaXMpOworCisgICAgICAgIGlm
ICh0aGlzLl9mYWlsZWQpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeworICAg
ICAgICAgICAgICAgIG1lc3NhZ2U6ICJBbiBlcnJvciBvY2N1cnJlZCB0cnlpbmcgdG8gbG9hZCB0
aGUgcmVzb3VyY2UuIgorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9maW5p
c2hUaGVuUmVxdWVzdENvbnRlbnRQcm9taXNlKQorICAgICAgICAgICAgdGhpcy5fZmluaXNoVGhl
blJlcXVlc3RDb250ZW50UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLlJlc291cmNlLkV2ZW50LkxvYWRpbmdEaWRGaW5pc2gsIHJlc29sdmUpOworICAgICAgICAg
ICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQu
TG9hZGluZ0RpZEZhaWwsIHJlamVjdCk7CisgICAgICAgICAgICB9LmJpbmQodGhpcykpLnRoZW4o
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50LmJpbmQodGhp
cykpOworCisgICAgICAgIHJldHVybiB0aGlzLl9maW5pc2hUaGVuUmVxdWVzdENvbnRlbnRQcm9t
aXNlOwogICAgIH0sCiAKICAgICBhc3NvY2lhdGVXaXRoU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
U2NyaXB0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Nj
cmlwdC5qcwppbmRleCBiNGM5ZTI5Li44MzQwYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKQEAgLTExMCwyMiArMTEw
LDE1IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
dGhpcy5fc2NyaXB0U3ludGF4VHJlZTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVzdENvbnRlbnRG
cm9tQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gV2UgY2FuIHJlcXVlc3Qg
Y29udGVudCBpZiB3ZSBoYXZlIGFuIGlkLgotICAgICAgICByZXR1cm4gISF0aGlzLl9pZDsKLSAg
ICB9LAotCiAgICAgcmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2sp
CiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2lkKSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBp
cyBubyBpZGVudGlmaWVyIHRvIHJlcXVlc3QgY29udGVudCB3aXRoLiBSZXR1cm4gZmFsc2UgdG8g
Y2F1c2UgdGhlCiAgICAgICAgICAgICAvLyBwZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBj
b250ZW50LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KHsgbWVzc2FnZTogIlRoZXJlIGlzIG5vIGlkZW50aWZpZXIgdG8gcmVxdWVz
dCBjb250ZW50IHdpdGguIiB9KTsKICAgICAgICAgfQogCi0gICAgICAgIERlYnVnZ2VyQWdlbnQu
Z2V0U2NyaXB0U291cmNlKHRoaXMuX2lkLCBjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gRGVidWdnZXJBZ2VudC5nZXRTY3JpcHRTb3VyY2UucHJvbWlzZSh0
aGlzLl9pZCk7CiAgICAgfSwKIAogICAgIHNhdmVJZGVudGl0eVRvQ29va2llOiBmdW5jdGlvbihj
b29raWUpCkBAIC0xNTUsOCArMTQ4LDEwIEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5yZXF1
ZXN0Q29udGVudChmdW5jdGlvbihlcnJvciwgc291cmNlVGV4dCkgewotICAgICAgICAgICAgbWFr
ZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2soZXJyb3IgPyBudWxsIDogc291cmNlVGV4dCk7Cisg
ICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQoKS50aGVuKGZ1bmN0aW9uKHBhcmFtZXRlcnMpIHsK
KyAgICAgICAgICAgIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrKHBhcmFtZXRlcnMuY29u
dGVudCk7CisgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICBt
YWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayhudWxsKTsKICAgICAgICAgfSk7CiAgICAgfSwK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L1NvdXJjZUNvZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvU291cmNlQ29kZS5qcwppbmRleCBkYmVhMDE5Li5jNTA0OTk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5q
cwpAQCAtMzQsNiArMzQsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZSA9IGZ1bmN0aW9uKCkK
IAogICAgIHRoaXMuX3NvdXJjZU1hcHMgPSBudWxsOwogICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJj
ZU1hcCA9IG51bGw7CisgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRQcm9taXNlID0gbnVsbDsKIH07
CiAKIFdlYkluc3BlY3Rvci5PYmplY3QuYWRkQ29uc3RydWN0b3JGdW5jdGlvbnMoV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGUpOwpAQCAtNDEsNyArNDIsOSBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0LmFk
ZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlKTsKIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlLkV2ZW50ID0gewogICAgIENvbnRlbnREaWRDaGFuZ2U6ICJzb3VyY2Ut
Y29kZS1jb250ZW50LWRpZC1jaGFuZ2UiLAogICAgIFNvdXJjZU1hcEFkZGVkOiAic291cmNlLWNv
ZGUtc291cmNlLW1hcC1hZGRlZCIsCi0gICAgRm9ybWF0dGVyRGlkQ2hhbmdlOiAic291cmNlLWNv
ZGUtZm9ybWF0dGVyLWRpZC1jaGFuZ2UiCisgICAgRm9ybWF0dGVyRGlkQ2hhbmdlOiAic291cmNl
LWNvZGUtZm9ybWF0dGVyLWRpZC1jaGFuZ2UiLAorICAgIExvYWRpbmdEaWRGaW5pc2g6ICJzb3Vy
Y2UtY29kZS1sb2FkaW5nLWRpZC1maW5pc2giLAorICAgIExvYWRpbmdEaWRGYWlsOiAic291cmNl
LWNvZGUtbG9hZGluZy1kaWQtZmFpbCIKIH07CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnBy
b3RvdHlwZSA9IHsKQEAgLTEyMywyMCArMTI2LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuRm9ybWF0dGVyRGlkQ2hhbmdlKTsKICAgICB9LAog
Ci0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHJlcXVlc3RDb250
ZW50OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBjb25zb2xlLmFzc2VydCh0eXBlb2YgY2Fs
bGJhY2sgPT09ICJmdW5jdGlvbiIpOwotICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAi
ZnVuY3Rpb24iKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3BlbmRpbmdD
b250ZW50UmVxdWVzdENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICAgICAgdGhpcy5fcmVx
dWVzdENvbnRlbnRQcm9taXNlID0gdGhpcy5fcmVxdWVzdENvbnRlbnRQcm9taXNlIHx8IHRoaXMu
cmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpLnRoZW4odGhpcy5fcHJvY2Vzc0NvbnRlbnQuYmlu
ZCh0aGlzKSk7CiAKLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZWNlaXZlZCkgewotICAgICAg
ICAgICAgLy8gQ2FsbCBfc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMgb24gYSB0aW1lb3V0
IHRvIGZvcmNlIGNhbGxiYWNrcyB0byBiZSBhc3luY2hyb25vdXMuCi0gICAgICAgICAgICBpZiAo
IXRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzVGltZW91dElkZW50aWZpZXIpCi0g
ICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0
SWRlbnRpZmllciA9IHNldFRpbWVvdXQodGhpcy5zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0
cy5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhblJlcXVlc3RDb250
ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q29udGVudFByb21p
c2U7CiAgICAgfSwKIAogICAgIGNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24obGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyKQpAQCAtMTg1LDc1ICsxNzksMjIgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jb250ZW50UmVjZWl2ZWQg
PSBmYWxzZTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KLSAg
ICAgICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFz
cy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICByZXF1ZXN0Q29udGVu
dEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICByZXF1ZXN0Q29udGVudEZyb21C
YWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBzdWJj
bGFzc2VzLgogICAgICAgICBjb25zb2xlLmVycm9yKCJOZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBi
eSBhIHN1YmNsYXNzLiIpOwotICAgIH0sCi0KLSAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5k
SWZOZWVkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
Y2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKTsKLSAgICAgICAgaWYgKCF0aGlzLmNhblJl
cXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAoIXRoaXMuX3BlbmRpbmdDb250ZW50UmVxdWVzdENhbGxiYWNrcy5sZW5ndGgpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9u
c2VQZW5kaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2NvbnRlbnRS
ZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gdHJ1ZTsKLQotICAgICAgICBpZiAodGhpcy5yZXF1ZXN0
Q29udGVudEZyb21CYWNrZW5kKHRoaXMuX3Byb2Nlc3NDb250ZW50LmJpbmQodGhpcykpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFNpbmNlIHJlcXVlc3RDb250ZW50RnJvbUJh
Y2tlbmQgcmV0dXJuZWQgZmFsc2UsIGp1c3QgY2FsbCBfcHJvY2Vzc0NvbnRlbnQsCi0gICAgICAg
IC8vIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHBlbmRpbmcgY2FsbGJhY2tzIHRvIGdldCBudWxsIGNv
bnRlbnQuCi0gICAgICAgIHRoaXMuX3Byb2Nlc3NDb250ZW50KCk7Ci0gICAgfSwKLQotICAgIHNl
cnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzOiBmdW5jdGlvbihmb3JjZSkKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0c1RpbWVvdXRJZGVudGlm
aWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VydmljZVBlbmRpbmdDb250
ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllcik7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5f
c2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllcjsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIEZvcmNlIHRoZSBjb250ZW50IHJlcXVlc3RzIHRvIGJlIHNlbnQuIFRv
IGRvIHRoaXMgY29ycmVjdGx5IHdlIGFsc28gZm9yY2UKLSAgICAgICAgLy8gX2NvbnRlbnRSZWNl
aXZlZCB0byBiZSB0cnVlIHNvIGZ1dHVyZSBjYWxscyB0byByZXF1ZXN0Q29udGVudCBnbyB0aHJv
dWdoLgotICAgICAgICBpZiAoZm9yY2UpCi0gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVjZWl2
ZWQgPSB0cnVlOwotCi0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2NvbnRlbnRSZWNlaXZl
ZCk7Ci0gICAgICAgIGlmICghdGhpcy5fY29udGVudFJlY2VpdmVkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGNhbGxiYWNrcyBpbnRvIGEgbG9jYWwgYW5kIGNs
ZWFyIF9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3Mgc28KLSAgICAgICAgLy8gY2FsbGJh
Y2tzIHRoYXQgbWlnaHQgY2FsbCByZXF1ZXN0Q29udGVudCBhZ2FpbiB3aWxsIG5vdCBtb2RpZnkg
dGhlIGFycmF5LgotICAgICAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fcGVuZGluZ0NvbnRlbnRS
ZXF1ZXN0Q2FsbGJhY2tzOwotICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxs
YmFja3MgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxiYWNrc1tpXSh0aGlzLCB0aGlzLmNvbnRlbnQsIHRo
aXMuY29udGVudElzQmFzZTY0RW5jb2RlZCk7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVj
dCh7CisgICAgICAgICAgICBtZXNzYWdlOiAiTmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBz
dWJjbGFzcy4iCisgICAgICAgIH0pOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBf
cHJvY2Vzc0NvbnRlbnQ6IGZ1bmN0aW9uKGVycm9yLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKQor
ICAgIF9wcm9jZXNzQ29udGVudDogZnVuY3Rpb24ocGFyYW1ldGVycykKICAgICB7Ci0gICAgICAg
IGlmIChlcnJvcikKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotCi0gICAgICAg
IHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgIHRo
aXMuX2NvbnRlbnRSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIC8vIFNvbWUgYmFja2VuZCBBUElz
IHJldHVybiBgY29udGVudGAgd2hpbGUgb3RoZXJzIHJldHVybiBgYm9keWAuCisgICAgICAgIHZh
ciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50IHx8IHBhcmFtZXRlcnMuYm9keTsKKyAgICAg
ICAgdmFyIGJhc2U2NEVuY29kZWQgPSBwYXJhbWV0ZXJzLmJhc2U2NEVuY29kZWQ7CiAKICAgICAg
ICAgdmFyIHJldmlzaW9uID0gdGhpcy5yZXZpc2lvbkZvclJlcXVlc3RlZENvbnRlbnQ7CiAKQEAg
LTI2Miw3ICsyMDMsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0gewog
ICAgICAgICByZXZpc2lvbi5jb250ZW50SXNCYXNlNjRFbmNvZGVkID0gYmFzZTY0RW5jb2RlZCB8
fCBmYWxzZTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2lnbm9yZVJldmlzaW9uQ29udGVudERpZENo
YW5nZUV2ZW50OwogCi0gICAgICAgIHRoaXMuc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMo
KTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgICAgICBzb3VyY2VD
b2RlOiB0aGlzLAorICAgICAgICAgICAgY29udGVudDogY29udGVudCwKKyAgICAgICAgICAgIGJh
c2U2NEVuY29kZWQ6IGJhc2U2NEVuY29kZWQKKyAgICAgICAgfSk7CiAgICAgfQogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJj
ZU1hcFJlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL1NvdXJjZU1hcFJlc291cmNlLmpzCmluZGV4IDhkODk4YTIuLmJiMzgxMzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBS
ZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvU291cmNlTWFwUmVzb3VyY2UuanMKQEAgLTMxLDcgKzMxLDcgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZU1hcFJlc291cmNlID0gZnVuY3Rpb24odXJsLCBzb3VyY2VNYXApCiAgICAgY29uc29sZS5h
c3NlcnQoc291cmNlTWFwKTsKIAogICAgIHRoaXMuX3NvdXJjZU1hcCA9IHNvdXJjZU1hcDsKLSAg
ICB0aGlzLl9jb250ZW50UmVxdWVzdGVkID0gZmFsc2U7CisgICAgLy90aGlzLl9jb250ZW50UmVx
dWVzdGVkID0gZmFsc2U7CiAKICAgICB2YXIgaW5oZXJpdGVkTUlNRVR5cGUgPSB0aGlzLl9zb3Vy
Y2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNl
ID8gdGhpcy5fc291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZS5zeW50aGV0aWNNSU1FVHlwZSA6
IG51bGw7CiAKQEAgLTc1LDE0ICs3NSw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByZXNvdXJjZVVSTENvbXBvbmVudHMucGF0
aC5zdWJzdHJpbmcoc291cmNlTWFwcGluZ0Jhc2VQYXRoVVJMQ29tcG9uZW50cy5wYXRoLmxlbmd0
aCwgcmVzb3VyY2VVUkxDb21wb25lbnRzLmxlbmd0aCk7CiAgICAgfSwKIAotICAgIGNhblJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAh
dGhpcy5fY29udGVudFJlcXVlc3RlZDsKLSAgICB9LAotCiAgICAgcmVxdWVzdENvbnRlbnRGcm9t
QmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICB0aGlzLl9jb250ZW50
UmVxdWVzdGVkID0gdHJ1ZTsKKyAgICAgICAgLy90aGlzLl9jb250ZW50UmVxdWVzdGVkID0gdHJ1
ZTsKIAogICAgICAgICAvLyBSZXZlcnQgdGhlIG1hcmtBc0ZpbmlzaGVkIHRoYXQgd2FzIGRvbmUg
aW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgICB0aGlzLnJldmVydE1hcmtBc0ZpbmlzaGVkKCk7
CkBAIC05MCwyMiArODUsMjggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdmFyIGlubGluZUNvbnRlbnQgPSB0aGlzLl9zb3VyY2VNYXAuc291
cmNlQ29udGVudCh0aGlzLnVybCk7CiAgICAgICAgIGlmIChpbmxpbmVDb250ZW50KSB7CiAgICAg
ICAgICAgICAvLyBGb3JjZSBpbmxpbmUgY29udGVudCB0byBiZSBhc3luY2hyb25vdXMgdG8gbWF0
Y2ggdGhlIGV4cGVjdGVkIGxvYWQgcGF0dGVybi4KLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGtub3cgdGhlIE1J
TUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1ZXNzIGJ5IGFuYWx5emluZyB0aGUgY29udGVu
dD8KLSAgICAgICAgICAgICAgICBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZC5jYWxsKHRoaXMsIG51
bGwsIGlubGluZUNvbnRlbnQsIHRoaXMubWltZVR5cGUsIDIwMCk7Ci0gICAgICAgICAgICB9LmJp
bmQodGhpcykpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGtub3cgdGhlIE1JTUUt
dHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1ZXNzIGJ5IGFuYWx5emluZyB0aGUgY29udGVudD8K
KyAgICAgICAgICAgIC8vIFJldHVybnMgYSBwcm9taXNlLgorICAgICAgICAgICAgcmV0dXJuIHNv
dXJjZU1hcFJlc291cmNlTG9hZGVkLmNhbGwodGhpcywgbnVsbCwgaW5saW5lQ29udGVudCwgdGhp
cy5taW1lVHlwZSwgMjAwKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZnVuY3Rpb24gc291cmNlTWFwUmVzb3VyY2VMb2FkRXJyb3IoZXJyb3IsIGJvZHks
IG1pbWVUeXBlLCBzdGF0dXNDb2RlKQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLm1hcmtB
c0ZhaWxlZCgpOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAg
ICAgICAgICAgZXJyb3I6IGVycm9yLAorICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGJvZHkuY29u
dGVudCwKKyAgICAgICAgICAgICAgICBtaW1lVHlwZTogbWltZVR5cGUsCisgICAgICAgICAgICAg
ICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZQorICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBmdW5jdGlvbiBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZChlcnJvciwgYm9keSwgbWlt
ZVR5cGUsIHN0YXR1c0NvZGUpCisgICAgICAgIGZ1bmN0aW9uIHNvdXJjZU1hcFJlc291cmNlTG9h
ZGVkKGJvZHksIG1pbWVUeXBlLCBzdGF0dXNDb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBj
b25zdCBiYXNlNjRlbmNvZGVkID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmIChlcnJvciB8fCBz
dGF0dXNDb2RlID49IDQwMCkgewotICAgICAgICAgICAgICAgIHRoaXMubWFya0FzRmFpbGVkKCk7
Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIGJvZHksIGJhc2U2NGVuY29kZWQpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID49IDQw
MCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VNYXBSZXNvdXJjZUxvYWRFcnJvcihl
cnJvciwgYm9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHBpY2tpbmcgdGhlIGJlc3QgTUlNRS10
eXBlLiBSaWdodCBub3cgdGhlIGZpbGUgZXh0ZW5zaW9uIGlzIHRoZSBiZXN0IGJldC4KQEAgLTEx
MywxMiArMTE0LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgICAgIHRoaXMubWFya0FzRmluaXNoZWQoKTsKIAotICAgICAgICAgICAg
Y2FsbGJhY2sobnVsbCwgYm9keSwgYmFzZTY0ZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICBjb250ZW50OiBib2R5LmNvbnRlbnQs
CisgICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAorICAgICAgICAgICAgICAgIGJh
c2U2NGVuY29kZWQ6IGJhc2U2NGVuY29kZWQsCisgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTog
c3RhdHVzQ29kZQorICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIU5l
dHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UpIHsKICAgICAgICAgICAgIHNvdXJjZU1hcFJlc291cmNl
TG9hZGVkLmNhbGwodGhpcywgImVycm9yOiBubyBOZXR3b3JrQWdlbnQubG9hZFJlc291cmNlIik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5y
ZWplY3QoeyBtZXNzYWdlOiAiZXJyb3I6IG5vIE5ldHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UiIH0p
OwogICAgICAgICB9CiAKICAgICAgICAgdmFyIGZyYW1lSWRlbnRpZmllciA9IG51bGw7CkBAIC0x
MjgsOSArMTM0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZSA9
IHsKICAgICAgICAgaWYgKCFmcmFtZUlkZW50aWZpZXIpCiAgICAgICAgICAgICBmcmFtZUlkZW50
aWZpZXIgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIubWFpbkZyYW1lLmlkOwog
Ci0gICAgICAgIE5ldHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UoZnJhbWVJZGVudGlmaWVyLCB0aGlz
LnVybCwgc291cmNlTWFwUmVzb3VyY2VMb2FkZWQuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHJldHVybiBOZXR3b3JrQWdlbnQubG9hZFJlc291cmNlLnByb21p
c2UoZnJhbWVJZGVudGlmaWVyLCB0aGlzLnVybCkudGhlbihzb3VyY2VNYXBSZXNvdXJjZUxvYWRl
ZC5iaW5kKHRoaXMpKS5jYXRjaChzb3VyY2VNYXBSZXNvdXJjZUxvYWRFcnJvci5iaW5kKHRoaXMp
KTsKICAgICB9LAogCiAgICAgY3JlYXRlU291cmNlQ29kZUxvY2F0aW9uOiBmdW5jdGlvbihsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2VDb250ZW50Vmlldy5qcwppbmRl
eCAwYjk5NGFkLi5lNjBhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlQ29udGVudFZpZXcuanMKQEAg
LTQzLDcgKzQzLDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcgPSBmdW5jdGlv
bihyZXNvdXJjZSwgc3R5bGVDbGFzc05hbWUpCiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoImNsaWNrIiwgdGhpcy5fbW91c2VXYXNDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsK
IAogICAgIC8vIFJlcXVlc3QgY29udGVudCBsYXN0IHNvIHRoZSBzcGlubmVyIHdpbGwgYWx3YXlz
IGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgY29udGVudCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUu
Ci0gICAgcmVzb3VyY2UucmVxdWVzdENvbnRlbnQodGhpcy5fY29udGVudEF2YWlsYWJsZS5iaW5k
KHRoaXMpKTsKKyAgICByZXNvdXJjZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4odGhpcy5fY29udGVu
dEF2YWlsYWJsZS5iaW5kKHRoaXMpKS5jYXRjaCh0aGlzLl9jb250ZW50RXJyb3IuYmluZCh0aGlz
KSk7CiAKICAgICBpZiAoIXRoaXMubWFuYWdlc093bklzc3VlcykgewogICAgICAgICBXZWJJbnNw
ZWN0b3IuaXNzdWVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLklzc3VlTWFu
YWdlci5FdmVudC5Jc3N1ZVdhc0FkZGVkLCB0aGlzLl9pc3N1ZVdhc0FkZGVkLCB0aGlzKTsKQEAg
LTg2LDIxICs4NiwyMCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5
cGUgPSB7CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY29udGVudEF2YWlsYWJsZTogZnVuY3Rp
b24ocmVzb3VyY2UsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAgX2NvbnRlbnRBdmFpbGFi
bGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCiAgICAgewotICAgICAgICAvLyBDaGVjayBmb3IgZmFp
bGVkIGxvYWRzLgotICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5mYWlsZWQpIHsKLSAgICAgICAg
ICAgIC8vIERvbid0IHNob3cgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFu
IGVycm9yIG1lc3NhZ2Ugc2hvd2luZyAobGlrZSBvbmUgYWRkZWQgYnkgYWRkSXNzdWUuKQotICAg
ICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIubWVzc2FnZS10ZXh0LXZp
ZXcuZXJyb3IiKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKFdlYkluc3BlY3Rvci5jcmVhdGVNZXNzYWdlVGV4dFZpZXcoV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJBbiBlcnJvciBvY2N1cnJlZCB0cnlpbmcgdG8gbG9hZCB0aGUgcmVzb3VyY2UuIiks
IHRydWUpKTsKKyAgICAgICAgLy8gQ29udGVudCBpcyByZWFkeSB0byBzaG93LCBjYWxsIHRoZSBw
dWJsaWMgbWV0aG9kIG5vdy4KKyAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlKHBhcmFtZXRl
cnMuY29udGVudCwgcGFyYW1ldGVycy5iYXNlNjRFbmNvZGVkKTsKKyAgICB9LAorCisgICAgX2Nv
bnRlbnRFcnJvcjogZnVuY3Rpb24ocGFyYW1ldGVycykKKyAgICB7CisgICAgICAgIC8vIERvbid0
IHNob3cgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGVycm9yIG1lc3Nh
Z2Ugc2hvd2luZyAobGlrZSBvbmUgYWRkZWQgYnkgYWRkSXNzdWUuKQorICAgICAgICBpZiAodGhp
cy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tZXNzYWdlLXRleHQtdmlldy5lcnJvciIpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgLy8gQ29udGVudCBpcyByZWFk
eSB0byBzaG93LCBjYWxsIHRoZSBwdWJsaWMgbWV0aG9kIG5vdy4KLSAgICAgICAgdGhpcy5jb250
ZW50QXZhaWxhYmxlKGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpOworICAgICAgICB0aGlzLmVsZW1l
bnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKFdl
Ykluc3BlY3Rvci5jcmVhdGVNZXNzYWdlVGV4dFZpZXcoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKHBh
cmFtZXRlcnMubWVzc2FnZSksIHRydWUpKTsKICAgICB9LAogCiAgICAgX2lzc3VlV2FzQWRkZWQ6
IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwppbmRleCBm
NjY4MjEzLi45NTg1ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwpAQCAt
NzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBmdW5jdGlv
bihzb3VyY2VDb2RlKQogICAgIGVsc2UKICAgICAgICAgdGhpcy5fc291cmNlQ29kZS5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFkZGVkLCB0
aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwogCi0gICAgc291cmNlQ29kZS5y
ZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOworICAgIHNv
dXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHRoaXMuX2NvbnRlbnRBdmFpbGFibGUuYmlu
ZCh0aGlzKSk7CiAKICAgICAvLyBGSVhNRTogQ21kK0wgc2hvcmN1dCBkb2Vzbid0IGFjdHVhbGx5
IHdvcmsuCiAgICAgbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmQsICJMIiwgdGhpcy5zaG93R29Ub0xp
bmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5lbGVtZW50KTsKQEAgLTQzNiw4ICs0MzYsMTIgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAgfSwKIAotICAgIF9jb250ZW50QXZhaWxh
YmxlOiBmdW5jdGlvbihzb3VyY2VDb2RlLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKQorICAgIF9j
b250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAgIHsKKyAgICAgICAgdmFy
IHNvdXJjZUNvZGUgPSBwYXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgIHZhciBjb250ZW50
ID0gcGFyYW1ldGVycy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFt
ZXRlcnMuYmFzZTY0RW5jb2RlZDsKKwogICAgICAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2Rl
ID09PSB0aGlzLl9zb3VyY2VDb2RlKTsKICAgICAgICAgY29uc29sZS5hc3NlcnQoIWJhc2U2NEVu
Y29kZWQpOwogCkBAIC02MzksNyArNjQzLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbmxpbmVTY3JpcHRDb250ZW50
UG9wdWxhdGVkID0gcGVuZGluZ1JlcXVlc3RDb3VudDsKIAotICAgICAgICBmdW5jdGlvbiBzY3Jp
cHRDb250ZW50QXZhaWxhYmxlKGVycm9yLCBjb250ZW50KQorICAgICAgICBmdW5jdGlvbiBzY3Jp
cHRDb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8v
IFJldHVybiBlYXJseSBpZiB3ZSBhcmUgc3RpbGwgd2FpdGluZyBmb3IgY29udGVudCBmcm9tIG90
aGVyIHNjcmlwdHMuCiAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nUmVxdWVzdENvdW50KQpAQCAt
Njg5LDcgKzY5Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgdmFyIGJvdW5kU2NyaXB0Q29udGVudEF2YWlsYWJsZSA9IHNjcmlw
dENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgc2NyaXB0c1tpXS5yZXF1ZXN0Q29u
dGVudChib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUpOworICAgICAgICAgICAgc2NyaXB0c1tp
XS5yZXF1ZXN0Q29udGVudCgpLnRoZW4oYm91bmRTY3JpcHRDb250ZW50QXZhaWxhYmxlKTsKICAg
ICB9LAogCiAgICAgX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQ6IGZ1bmN0aW9uKCkKQEAgLTcw
Nyw4ICs3MTEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICBjb25zb2xlLmFzc2VydChzY3JpcHRzWzBdLnJhbmdlLnN0YXJ0TGluZSA9
PT0gMCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdHNbMF0ucmFuZ2Uuc3RhcnRDb2x1
bW4gPT09IDApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFibGUoZXJy
b3IsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFibGUocGFy
YW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJz
LmNvbnRlbnQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVxdWVzdGluZ1NjcmlwdENvbnRl
bnQ7CiAKICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZSBmdWxsIGNvbnRlbnQgcG9wdWxhdGVk
IHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMgYXN5bmMgY2FsbGJhY2suCkBAIC03MjMsNyArNzI4LDcg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAg
ICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVudCA9IHRydWU7CiAKLSAgICAgICAgc2Ny
aXB0c1swXS5yZXF1ZXN0Q29udGVudChzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykp
OworICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250ZW50KCkudGhlbihzY3JpcHRDb250ZW50
QXZhaWxhYmxlLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfbWF0Y2hlc1NvdXJjZUNvZGVM
b2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242968</attachid>
            <date>2014-12-09 15:03:15 -0800</date>
            <delta_ts>2014-12-19 16:21:14 -0800</delta_ts>
            <desc>[PATCH] fix for review ver 2.</desc>
            <filename>contentpromise.diff</filename>
            <type>text/plain</type>
            <size>29864</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDZiZDZkNzcuLmMyYTljNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE0LTEyLTA5ICBKb25hdGhhbiBXZWxs
cyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogU291cmNl
Q29kZS5yZXF1ZXN0Q29udGVudCBzaG91bGQgcmV0dXJuIGEgcHJvbWlzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1Nzc3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIFNvdXJjZUNvZGUuanMg
dG8gcmVxdWVzdCBjb250ZW50IGZyb20gdGhlIGJhY2tlbmQgdXNpbmcgUHJvbWlzZXMuIENoYW5n
ZSBSZXNvdXJjZS5qcyB0byB1c2UgdGhpcyBuZXcKKyAgICAgICAgYXBwcm9hY2ggd2hlbiBkZXRl
cm1pbmluZyB3aGV0aGVyIGEgcmVzb3VyY2UgbG9hZCBoYXMgZmluaXNoZWQuIENoYW5nZSBhbGwg
Y2FsbHMgdG8gdGhlIG9sZGVyCisgICAgICAgIFNvdXJjZUNvZGUjcmVxdWVzdENvbnRlbnRGcm9t
QmFja2VuZElmTmVlZGVkIHRvIHNpbXBseSB1c2UgcmVxdWVzdENvbnRlbnQgYW5kIHVzZSBhIGNh
dGNoIGZ1bmN0aW9uCisgICAgICAgIGlmIGFuIGNvbnRlbnQgcmVxdWVzdCBlcnJvciBuZWVkcyB0
byBiZSBoYW5kbGVkLiBGaXggYSBidWcgd2hlcmUgdGhlIGFwcHJvcHJpYXRlIGVycm9yIG1lc3Nh
Z2UgZm9yIGFuCisgICAgICAgIGludmFsaWQgcmVzb3VyY2Ugd2Fzbid0IHNob3dpbmcgaW4gdGhl
IHJlc291cmNlIGNvbnRlbnQgdmlldy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzOgorICAgICAgICAoc2V0IFdlYkluc3BlY3Rvci5BbmFs
eXplck1hbmFnZXIucHJvdG90eXBlLmdldEFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlLik6
CisgICAgICAgIChzZXQgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlci5wcm90b3R5cGUuZ2V0
QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNT
U1N0eWxlTWFuYWdlci5wcm90b3R5cGUuX3VwZGF0ZVJlc291cmNlQ29udGVudC5mZXRjaGVkU3R5
bGVTaGVldENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5w
cm90b3R5cGUuX3VwZGF0ZVJlc291cmNlQ29udGVudC5zdHlsZVNoZWV0UmVhZHkpOgorICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2Vu
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuY2FuUmVx
dWVzdENvbnRlbnRGcm9tQmFja2VuZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5jaGFuZ2VTdHlsZVRleHQpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvTW9kZWxzL1Jlc291cmNlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlLnBy
b3RvdHlwZS5jYW5SZXF1ZXN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlJlc291cmNlLnByb3RvdHlwZS5tYXJrQXNGaW5pc2hlZCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZhaWxlZCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmdldEltYWdlU2l6ZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQp
OiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJh
Y2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUucmVxdWVzdFNj
cmlwdFN5bnRheFRyZWUuY2F0Y2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90
b3R5cGUuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6IERlbGV0ZWQuCisgICAgICAgICog
VXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlw
ZS5yZXF1ZXN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90
b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZS5wcm90b3R5cGUuX3Byb2Nlc3NDb250ZW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5yZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3Rz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNv
dXJjZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250
ZW50RnJvbUJhY2tlbmQuc291cmNlTWFwUmVzb3VyY2VMb2FkRXJyb3IpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudEZyb21C
YWNrZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5
cGUuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJh
Y2tlbmQuc291cmNlTWFwUmVzb3VyY2VMb2FkZWQpOiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvVmlld3MvUmVzb3VyY2VDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJj
ZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudEF2YWlsYWJsZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2VDb250ZW50Vmlldy5wcm90b3R5cGUuX2NvbnRlbnRFcnJvcik6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9jb250ZW50QXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUu
X3BvcHVsYXRlV2l0aElubGluZVNjcmlwdENvbnRlbnQuc2NyaXB0Q29udGVudEF2YWlsYWJsZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9w
b3B1bGF0ZVdpdGhJbmxpbmVTY3JpcHRDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQp
OgorCiAyMDE0LTEyLTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5jYXVnaHQgRXhjZXB0aW9ucyB3aGVuIGF0dGVtcHRp
bmcgdG8gc2hvdyBDb250ZW50IEZsb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5q
cwppbmRleCA5NjM4YmZmLi4wOGNmMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1hbmFnZXIuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5h
Z2VyLmpzCkBAIC04Nyw3ICs4Nyw3IEBAIFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgZnVuY3Rpb24gcmV0cmlldmVBbmFseXplck1lc3NhZ2VzKCkKKyAgICAgICAgICAg
IGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6ZXJNZXNzYWdlcyhwcm9wZXJ0aWVzKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHZhciBhbmFseXplck1lc3NhZ2VzID0gW107CiAgICAgICAg
ICAgICAgICAgdmFyIHJhd0FuYWx5emVyTWVzc2FnZXMgPSBhbmFseXplci52ZXJpZnkoc291cmNl
Q29kZS5jb250ZW50LCB0aGlzLl9lc2xpbnRDb25maWcpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIFdl
Ykluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAg
IHJlc29sdmUoYW5hbHl6ZXJNZXNzYWdlcyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQo
dGhpcykpOworICAgICAgICAgICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCgpLnRoZW4ocmV0
cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQodGhpcykpOwogICAgICAgICB9LmJpbmQodGhpcykp
OwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcwppbmRleCA3YWE2
NGFiLi45ZTFjODhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCkBAIC0z
MTAsOCArMzEwLDExIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGVTaGVldCk7CiAKLSAgICAgICAg
ZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRlbnQpCisg
ICAgICAgIGZ1bmN0aW9uIGZldGNoZWRTdHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJzKQogICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IHBhcmFtZXRlcnMuc291cmNlQ29k
ZTsKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAg
ICAgICAgICBkZWxldGUgc3R5bGVTaGVldC5fX3BlbmRpbmdDaGFuZ2VUaW1lb3V0OwogCiAgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChzdHlsZVNoZWV0LnVybCk7CkBAIC0zNDcsNyArMzUwLDcg
QEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAg
ZnVuY3Rpb24gc3R5bGVTaGVldFJlYWR5KCkKICAgICAgICAgewotICAgICAgICAgICAgc3R5bGVT
aGVldC5yZXF1ZXN0Q29udGVudChmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7
CisgICAgICAgICAgICBzdHlsZVNoZWV0LnJlcXVlc3RDb250ZW50KCkudGhlbihmZXRjaGVkU3R5
bGVTaGVldENvbnRlbnQuYmluZCh0aGlzKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlv
biBhcHBseVN0eWxlU2hlZXRDaGFuZ2VzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0LmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanMKaW5kZXggNTFk
OWU2Zi4uZDQ1NDIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxlU2hlZXQuanMKQEAgLTEyMSwyMiArMTIxLDE1
IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZSA9IHsKICAgICAgICAgQ1NT
QWdlbnQuc2V0U3R5bGVTaGVldFRleHQodGhpcy5faWQsIHRoaXMuY3VycmVudFJldmlzaW9uLmNv
bnRlbnQsIGNvbnRlbnREaWRDaGFuZ2UuYmluZCh0aGlzKSk7CiAgICAgfSwKIAotICAgIGNhblJl
cXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIFdl
IGNhbiByZXF1ZXN0IGNvbnRlbnQgaWYgd2UgaGF2ZSBhbiBpZC4KLSAgICAgICAgcmV0dXJuICEh
dGhpcy5faWQ7Ci0gICAgfSwKLQotICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0
aW9uKGNhbGxiYWNrKQorICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIGlmICghdGhpcy5faWQpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIGlz
IG5vIGlkZW50aWZpZXIgdG8gcmVxdWVzdCBjb250ZW50IHdpdGguIFJldHVybiBmYWxzZSB0byBj
YXVzZSB0aGUKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGlkZW50aWZpZXIgdG8gcmVxdWVz
dCBjb250ZW50IHdpdGguIFJlamVjdCB0aGUgcHJvbWlzZSB0byBjYXVzZSB0aGUKICAgICAgICAg
ICAgIC8vIHBlbmRpbmcgY2FsbGJhY2tzIHRvIGdldCBudWxsIGNvbnRlbnQuCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBtZXNz
YWdlOiAiVGhlcmUgaXMgbm8gaWRlbnRpZmllciB0byByZXF1ZXN0IGNvbnRlbnQgd2l0aC4iIH0p
OwogICAgICAgICB9CiAKLSAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVTaGVldFRleHQodGhpcy5f
aWQsIGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBDU1NB
Z2VudC5nZXRTdHlsZVNoZWV0VGV4dC5wcm9taXNlKHRoaXMuX2lkKTsKICAgICB9LAogCiAgICAg
bm90ZUNvbnRlbnREaWRDaGFuZ2U6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5k
ZXggODAyZTJiNy4uZTNjNzY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQwNSw4ICs0
MDUsMTAgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxl
U2hlZXRDb250ZW50KHN0eWxlU2hlZXQsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIGZldGNo
ZWRTdHlsZVNoZWV0Q29udGVudChwYXJhbWV0ZXJzKQogICAgICAgICB7CisgICAgICAgICAgICB2
YXIgY29udGVudCA9IHBhcmFtZXRlcnMuY29udGVudDsKKwogICAgICAgICAgICAgY29uc29sZS5h
c3NlcnQoc3R5bGUuc3R5bGVTaGVldFRleHRSYW5nZSk7CiAgICAgICAgICAgICBpZiAoIXN0eWxl
LnN0eWxlU2hlZXRUZXh0UmFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDQ2LDcg
KzQ0OCw3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdGhpcy5fbmVlZHNSZWZyZXNoID0gdHJ1ZTsKICAgICAgICAgdGhpcy5faWdub3JlTmV4dENv
bnRlbnREaWRDaGFuZ2VGb3JTdHlsZVNoZWV0ID0gc3R5bGUub3duZXJTdHlsZVNoZWV0OwogCi0g
ICAgICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5yZXF1ZXN0Q29udGVudChmZXRjaGVkU3R5bGVT
aGVldENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgIHN0eWxlLm93bmVyU3R5bGVTaGVldC5y
ZXF1ZXN0Q29udGVudCgpLnRoZW4oZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50LmJpbmQodGhpcykp
OwogICAgIH0sCiAKICAgICBjaGFuZ2VQcm9wZXJ0eTogZnVuY3Rpb24ocHJvcGVydHksIG5hbWUs
IHZhbHVlLCBwcmlvcml0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcwppbmRleCBmM2JiZGIwLi40MjgxOWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3Vy
Y2UuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jl
c291cmNlLmpzCkBAIC01MzksMjggKzUzOSwyNCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UuRXZlbnQuVGltZXN0YW1wc0RpZENoYW5nZSk7CiAgICAgfSwKIAotICAg
IGNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKKyAgICBjYW5SZXF1ZXN0
Q29udGVudDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaGVk
OwogICAgIH0sCiAKLSAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxs
YmFjaykKKyAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICAvLyBJZiB3ZSBoYXZlIHRoZSByZXF1ZXN0SWRlbnRpZmllciB3ZSBjYW4gZ2V0IHRo
ZSBhY3R1YWwgcmVzcG9uc2UgZm9yIHRoaXMgc3BlY2lmaWMgcmVzb3VyY2UuCiAgICAgICAgIC8v
IE90aGVyd2lzZSB0aGUgY29udGVudCB3aWxsIGJlIGNhY2hlZCByZXNvdXJjZSBkYXRhLCB3aGlj
aCBtaWdodCBub3QgZXhpc3QgYW55bW9yZS4KLSAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RJZGVu
dGlmaWVyKSB7Ci0gICAgICAgICAgICBOZXR3b3JrQWdlbnQuZ2V0UmVzcG9uc2VCb2R5KHRoaXMu
X3JlcXVlc3RJZGVudGlmaWVyLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpCisgICAgICAg
ICAgICByZXR1cm4gTmV0d29ya0FnZW50LmdldFJlc3BvbnNlQm9keS5wcm9taXNlKHRoaXMuX3Jl
cXVlc3RJZGVudGlmaWVyKTsKIAotICAgICAgICBpZiAodGhpcy5fcGFyZW50RnJhbWUpIHsKLSAg
ICAgICAgICAgIFBhZ2VBZ2VudC5nZXRSZXNvdXJjZUNvbnRlbnQodGhpcy5fcGFyZW50RnJhbWUu
aWQsIHRoaXMuX3VybCwgY2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKHRoaXMuX3BhcmVudEZyYW1lKQorICAgICAgICAgICAgcmV0dXJu
IFBhZ2VBZ2VudC5nZXRSZXNvdXJjZUNvbnRlbnQucHJvbWlzZSh0aGlzLl9wYXJlbnRGcmFtZS5p
ZCwgdGhpcy5fdXJsKTsKIAotICAgICAgICAvLyBUaGVyZSBpcyBubyByZXF1ZXN0IGlkZW50aWZp
ZXIgb3IgZnJhbWUgdG8gcmVxdWVzdCBjb250ZW50IGZyb20uIFJldHVybiBmYWxzZSB0byBjYXVz
ZSB0aGUKLSAgICAgICAgLy8gcGVuZGluZyBjYWxsYmFja3MgdG8gZ2V0IG51bGwgY29udGVudC4K
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoewor
ICAgICAgICAgICAgbWVzc2FnZTogIkNvbnRlbnQgcmVxdWVzdCBmYWlsZWQuIgorICAgICAgICB9
KTsKICAgICB9LAogCiAgICAgaW5jcmVhc2VTaXplOiBmdW5jdGlvbihkYXRhTGVuZ3RoLCBlbGFw
c2VkVGltZSkKQEAgLTYxMywxMSArNjA5LDExIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAgdGhpcy5f
ZmluaXNoZWRPckZhaWxlZFRpbWVzdGFtcCA9IGVsYXBzZWRUaW1lIHx8IE5hTjsKIAorICAgICAg
ICBpZiAodGhpcy5fZmluaXNoVGhlblJlcXVlc3RDb250ZW50UHJvbWlzZSkKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9maW5pc2hUaGVuUmVxdWVzdENvbnRlbnRQcm9taXNlOworCiAgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVu
dC5Mb2FkaW5nRGlkRmluaXNoKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLlJlc291cmNlLkV2ZW50LlRpbWVzdGFtcHNEaWRDaGFuZ2UpOwotCi0g
ICAgICAgIGlmICh0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAg
ICAgIHRoaXMucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZElmTmVlZGVkKCk7CiAgICAgfSwKIAog
ICAgIG1hcmtBc0ZhaWxlZDogZnVuY3Rpb24oY2FuY2VsZWQsIGVsYXBzZWRUaW1lKQpAQCAtNjMw
LDkgKzYyNiw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJlc291cmNlLkV2
ZW50LkxvYWRpbmdEaWRGYWlsKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLlJlc291cmNlLkV2ZW50LlRpbWVzdGFtcHNEaWRDaGFuZ2UpOwotCi0g
ICAgICAgIC8vIEZvcmNlIHRoZSBjb250ZW50IHJlcXVlc3RzIHRvIGJlIHNlcnZpY2VkLiBUaGV5
IHdpbGwgZ2V0IG51bGwgYXMgdGhlIGNvbnRlbnQuCi0gICAgICAgIHRoaXMuc2VydmljZVBlbmRp
bmdDb250ZW50UmVxdWVzdHModHJ1ZSk7CiAgICAgfSwKIAogICAgIHJldmVydE1hcmtBc0Zpbmlz
aGVkOiBmdW5jdGlvbigpCkBAIC02NzYsOSArNjY5LDI4IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBp
bWFnZURpZExvYWQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgICAgIC8vIFNldCB0aGUgaW1h
Z2Ugc291cmNlIG9uY2Ugd2UndmUgb2J0YWluZWQgdGhlIGJhc2U2NC1lbmNvZGVkIFVSTCBmb3Ig
aXQuCi0gICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICBpbWFnZS5zcmMgPSB0aGlzLmNvbnRlbnRVUkw7Ci0gICAgICAgIH0uYmluZCh0aGlzKSk7Cisg
ICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQoKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHsKKyAg
ICAgICAgICAgIGltYWdlLnNyYyA9IGNvbnRlbnQuc291cmNlQ29kZS5jb250ZW50VVJMOworICAg
ICAgICB9KTsKKyAgICB9LAorCisgICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLl9maW5pc2hlZCkKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnQuY2FsbCh0aGlzKTsKKwor
ICAgICAgICBpZiAodGhpcy5fZmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVq
ZWN0KHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlOiAiQW4gZXJyb3Igb2NjdXJyZWQgdHJ5aW5n
IHRvIGxvYWQgdGhlIHJlc291cmNlLiIKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGlmICgh
dGhpcy5fZmluaXNoVGhlblJlcXVlc3RDb250ZW50UHJvbWlzZSkKKyAgICAgICAgICAgIHRoaXMu
X2ZpbmlzaFRoZW5SZXF1ZXN0Q29udGVudFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAo
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5Mb2FkaW5nRGlkRmluaXNoLCByZXNvbHZlKTsK
KyAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJlc291
cmNlLkV2ZW50LkxvYWRpbmdEaWRGYWlsLCByZWplY3QpOworICAgICAgICAgICAgfS5iaW5kKHRo
aXMpKS50aGVuKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVu
dC5iaW5kKHRoaXMpKTsKKworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVGhlblJlcXVlc3RD
b250ZW50UHJvbWlzZTsKICAgICB9LAogCiAgICAgYXNzb2NpYXRlV2l0aFNjcmlwdDogZnVuY3Rp
b24oc2NyaXB0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9TY3JpcHQuanMKaW5kZXggYjRjOWUyOS4uODM0MGMzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCkBAIC0x
MTAsMjIgKzExMCwxNSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX3NjcmlwdFN5bnRheFRyZWU7CiAgICAgfSwKIAotICAgIGNhblJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIGNh
biByZXF1ZXN0IGNvbnRlbnQgaWYgd2UgaGF2ZSBhbiBpZC4KLSAgICAgICAgcmV0dXJuICEhdGhp
cy5faWQ7Ci0gICAgfSwKLQogICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9u
KGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pZCkgewogICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gaWRlbnRpZmllciB0byByZXF1ZXN0IGNvbnRlbnQgd2l0aC4gUmV0dXJu
IGZhbHNlIHRvIGNhdXNlIHRoZQogICAgICAgICAgICAgLy8gcGVuZGluZyBjYWxsYmFja3MgdG8g
Z2V0IG51bGwgY29udGVudC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdCh7IG1lc3NhZ2U6ICJUaGVyZSBpcyBubyBpZGVudGlmaWVy
IHRvIHJlcXVlc3QgY29udGVudCB3aXRoLiIgfSk7CiAgICAgICAgIH0KIAotICAgICAgICBEZWJ1
Z2dlckFnZW50LmdldFNjcmlwdFNvdXJjZSh0aGlzLl9pZCwgY2FsbGJhY2spOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQuZ2V0U2NyaXB0U291cmNl
LnByb21pc2UodGhpcy5faWQpOwogICAgIH0sCiAKICAgICBzYXZlSWRlbnRpdHlUb0Nvb2tpZTog
ZnVuY3Rpb24oY29va2llKQpAQCAtMTU1LDggKzE0OCwxMCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IHRoaXMucmVxdWVzdENvbnRlbnQoZnVuY3Rpb24oZXJyb3IsIHNvdXJjZVRleHQpIHsKLSAgICAg
ICAgICAgIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrKGVycm9yID8gbnVsbCA6IHNvdXJj
ZVRleHQpOworICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KCkudGhlbihmdW5jdGlvbihwYXJh
bWV0ZXJzKSB7CisgICAgICAgICAgICBtYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayhwYXJh
bWV0ZXJzLmNvbnRlbnQpOworICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikgeworICAg
ICAgICAgICAgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2sobnVsbCk7CiAgICAgICAgIH0p
OwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKaW5kZXggZGJlYTAxOS4uOTQ2MGJiNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNv
ZGUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Nv
dXJjZUNvZGUuanMKQEAgLTI3LDEzICsyNywxMiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZSA9
IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CiAKLSAg
ICB0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MgPSBbXTsKLQogICAgIHRoaXMu
X29yaWdpbmFsUmV2aXNpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVSZXZpc2lvbih0
aGlzLCBudWxsLCBmYWxzZSk7CiAgICAgdGhpcy5fY3VycmVudFJldmlzaW9uID0gdGhpcy5fb3Jp
Z2luYWxSZXZpc2lvbjsKIAogICAgIHRoaXMuX3NvdXJjZU1hcHMgPSBudWxsOwogICAgIHRoaXMu
X2Zvcm1hdHRlclNvdXJjZU1hcCA9IG51bGw7CisgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRQcm9t
aXNlID0gbnVsbDsKIH07CiAKIFdlYkluc3BlY3Rvci5PYmplY3QuYWRkQ29uc3RydWN0b3JGdW5j
dGlvbnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUpOwpAQCAtNDEsNyArNDAsOSBAQCBXZWJJbnNw
ZWN0b3IuT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlKTsKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50ID0gewogICAgIENvbnRlbnREaWRD
aGFuZ2U6ICJzb3VyY2UtY29kZS1jb250ZW50LWRpZC1jaGFuZ2UiLAogICAgIFNvdXJjZU1hcEFk
ZGVkOiAic291cmNlLWNvZGUtc291cmNlLW1hcC1hZGRlZCIsCi0gICAgRm9ybWF0dGVyRGlkQ2hh
bmdlOiAic291cmNlLWNvZGUtZm9ybWF0dGVyLWRpZC1jaGFuZ2UiCisgICAgRm9ybWF0dGVyRGlk
Q2hhbmdlOiAic291cmNlLWNvZGUtZm9ybWF0dGVyLWRpZC1jaGFuZ2UiLAorICAgIExvYWRpbmdE
aWRGaW5pc2g6ICJzb3VyY2UtY29kZS1sb2FkaW5nLWRpZC1maW5pc2giLAorICAgIExvYWRpbmdE
aWRGYWlsOiAic291cmNlLWNvZGUtbG9hZGluZy1kaWQtZmFpbCIKIH07CiAKIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKQEAgLTEyMywyMCArMTI0LDExIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuRm9ybWF0dGVyRGlkQ2hh
bmdlKTsKICAgICB9LAogCi0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQor
ICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBjb25zb2xlLmFz
c2VydCh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpOwotICAgICAgICBpZiAodHlwZW9m
IGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLl9yZXF1ZXN0Q29udGVudFByb21pc2UgPSB0aGlzLl9yZXF1ZXN0Q29udGVudFByb21pc2Ug
fHwgdGhpcy5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKCkudGhlbih0aGlzLl9wcm9jZXNzQ29u
dGVudC5iaW5kKHRoaXMpKTsKIAotICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RD
YWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRSZWNl
aXZlZCkgewotICAgICAgICAgICAgLy8gQ2FsbCBfc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVz
dHMgb24gYSB0aW1lb3V0IHRvIGZvcmNlIGNhbGxiYWNrcyB0byBiZSBhc3luY2hyb25vdXMuCi0g
ICAgICAgICAgICBpZiAoIXRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzVGltZW91
dElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50
UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQodGhpcy5zZXJ2aWNlUGVuZGlu
Z0NvbnRlbnRSZXF1ZXN0cy5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGlz
LmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAgICAgIHRoaXMucmVxdWVz
dENvbnRlbnRGcm9tQmFja2VuZElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXF1
ZXN0Q29udGVudFByb21pc2U7CiAgICAgfSwKIAogICAgIGNyZWF0ZVNvdXJjZUNvZGVMb2NhdGlv
bjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQpAQCAtMTg1LDc1ICsxNzcsMjIg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9j
b250ZW50UmVjZWl2ZWQgPSBmYWxzZTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVzdENvbnRlbnRG
cm9tQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkg
c3ViY2xhc3Nlcy4KLSAgICAgICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUgaW1wbGVtZW50
ZWQgYnkgYSBzdWJjbGFzcy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAg
ICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICByZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICAvLyBJbXBs
ZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogICAgICAgICBjb25zb2xlLmVycm9yKCJOZWVkcyB0byBi
ZSBpbXBsZW1lbnRlZCBieSBhIHN1YmNsYXNzLiIpOwotICAgIH0sCi0KLSAgICByZXF1ZXN0Q29u
dGVudEZyb21CYWNrZW5kSWZOZWVkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRoaXMuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKTsKLSAgICAgICAg
aWYgKCF0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdDb250ZW50UmVxdWVzdENhbGxiYWNr
cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX2NvbnRl
bnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gdHJ1ZTsKLQotICAgICAgICBp
ZiAodGhpcy5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKHRoaXMuX3Byb2Nlc3NDb250ZW50LmJp
bmQodGhpcykpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFNpbmNlIHJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQgcmV0dXJuZWQgZmFsc2UsIGp1c3QgY2FsbCBfcHJvY2Vzc0Nv
bnRlbnQsCi0gICAgICAgIC8vIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHBlbmRpbmcgY2FsbGJhY2tz
IHRvIGdldCBudWxsIGNvbnRlbnQuCi0gICAgICAgIHRoaXMuX3Byb2Nlc3NDb250ZW50KCk7Ci0g
ICAgfSwKLQotICAgIHNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzOiBmdW5jdGlvbihmb3Jj
ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0
c1RpbWVvdXRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Vy
dmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllcik7Ci0gICAgICAgICAg
ICBkZWxldGUgdGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRp
ZmllcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZvcmNlIHRoZSBjb250ZW50IHJlcXVlc3Rz
IHRvIGJlIHNlbnQuIFRvIGRvIHRoaXMgY29ycmVjdGx5IHdlIGFsc28gZm9yY2UKLSAgICAgICAg
Ly8gX2NvbnRlbnRSZWNlaXZlZCB0byBiZSB0cnVlIHNvIGZ1dHVyZSBjYWxscyB0byByZXF1ZXN0
Q29udGVudCBnbyB0aHJvdWdoLgotICAgICAgICBpZiAoZm9yY2UpCi0gICAgICAgICAgICB0aGlz
Ll9jb250ZW50UmVjZWl2ZWQgPSB0cnVlOwotCi0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
X2NvbnRlbnRSZWNlaXZlZCk7Ci0gICAgICAgIGlmICghdGhpcy5fY29udGVudFJlY2VpdmVkKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGNhbGxiYWNrcyBpbnRv
IGEgbG9jYWwgYW5kIGNsZWFyIF9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3Mgc28KLSAg
ICAgICAgLy8gY2FsbGJhY2tzIHRoYXQgbWlnaHQgY2FsbCByZXF1ZXN0Q29udGVudCBhZ2FpbiB3
aWxsIG5vdCBtb2RpZnkgdGhlIGFycmF5LgotICAgICAgICB2YXIgY2FsbGJhY2tzID0gdGhpcy5f
cGVuZGluZ0NvbnRlbnRSZXF1ZXN0Q2FsbGJhY2tzOwotICAgICAgICB0aGlzLl9wZW5kaW5nQ29u
dGVudFJlcXVlc3RDYWxsYmFja3MgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGNhbGxiYWNrcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxiYWNrc1tpXSh0aGlzLCB0
aGlzLmNvbnRlbnQsIHRoaXMuY29udGVudElzQmFzZTY0RW5jb2RlZCk7CisgICAgICAgIHJldHVy
biBQcm9taXNlLnJlamVjdCh7CisgICAgICAgICAgICBtZXNzYWdlOiAiTmVlZHMgdG8gYmUgaW1w
bGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4iCisgICAgICAgIH0pOwogICAgIH0sCiAKICAgICAvLyBQ
cml2YXRlCiAKLSAgICBfcHJvY2Vzc0NvbnRlbnQ6IGZ1bmN0aW9uKGVycm9yLCBjb250ZW50LCBi
YXNlNjRFbmNvZGVkKQorICAgIF9wcm9jZXNzQ29udGVudDogZnVuY3Rpb24ocGFyYW1ldGVycykK
ICAgICB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJy
b3IpOwotCi0gICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gZmFs
c2U7Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIC8vIFNv
bWUgYmFja2VuZCBBUElzIHJldHVybiBgY29udGVudGAgd2hpbGUgb3RoZXJzIHJldHVybiBgYm9k
eWAuCisgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50IHx8IHBhcmFtZXRl
cnMuYm9keTsKKyAgICAgICAgdmFyIGJhc2U2NEVuY29kZWQgPSBwYXJhbWV0ZXJzLmJhc2U2NEVu
Y29kZWQ7CiAKICAgICAgICAgdmFyIHJldmlzaW9uID0gdGhpcy5yZXZpc2lvbkZvclJlcXVlc3Rl
ZENvbnRlbnQ7CiAKQEAgLTI2Miw3ICsyMDEsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUu
cHJvdG90eXBlID0gewogICAgICAgICByZXZpc2lvbi5jb250ZW50SXNCYXNlNjRFbmNvZGVkID0g
YmFzZTY0RW5jb2RlZCB8fCBmYWxzZTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2lnbm9yZVJldmlz
aW9uQ29udGVudERpZENoYW5nZUV2ZW50OwogCi0gICAgICAgIHRoaXMuc2VydmljZVBlbmRpbmdD
b250ZW50UmVxdWVzdHMoKTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAg
ICAgICAgICBzb3VyY2VDb2RlOiB0aGlzLAorICAgICAgICAgICAgY29udGVudDogY29udGVudCwK
KyAgICAgICAgICAgIGJhc2U2NEVuY29kZWQ6IGJhc2U2NEVuY29kZWQKKyAgICAgICAgfSk7CiAg
ICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NvdXJjZU1hcFJlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZU1hcFJlc291cmNlLmpzCmluZGV4IDhkODk4YTIuLmJi
MzgxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9Tb3VyY2VNYXBSZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMKQEAgLTMxLDcgKzMxLDcgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlID0gZnVuY3Rpb24odXJsLCBzb3VyY2VNYXAp
CiAgICAgY29uc29sZS5hc3NlcnQoc291cmNlTWFwKTsKIAogICAgIHRoaXMuX3NvdXJjZU1hcCA9
IHNvdXJjZU1hcDsKLSAgICB0aGlzLl9jb250ZW50UmVxdWVzdGVkID0gZmFsc2U7CisgICAgLy90
aGlzLl9jb250ZW50UmVxdWVzdGVkID0gZmFsc2U7CiAKICAgICB2YXIgaW5oZXJpdGVkTUlNRVR5
cGUgPSB0aGlzLl9zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlJlc291cmNlID8gdGhpcy5fc291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZS5zeW50
aGV0aWNNSU1FVHlwZSA6IG51bGw7CiAKQEAgLTc1LDE0ICs3NSw5IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByZXNvdXJjZVVS
TENvbXBvbmVudHMucGF0aC5zdWJzdHJpbmcoc291cmNlTWFwcGluZ0Jhc2VQYXRoVVJMQ29tcG9u
ZW50cy5wYXRoLmxlbmd0aCwgcmVzb3VyY2VVUkxDb21wb25lbnRzLmxlbmd0aCk7CiAgICAgfSwK
IAotICAgIGNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAhdGhpcy5fY29udGVudFJlcXVlc3RlZDsKLSAgICB9LAotCiAgICAgcmVx
dWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAg
ICB0aGlzLl9jb250ZW50UmVxdWVzdGVkID0gdHJ1ZTsKKyAgICAgICAgLy90aGlzLl9jb250ZW50
UmVxdWVzdGVkID0gdHJ1ZTsKIAogICAgICAgICAvLyBSZXZlcnQgdGhlIG1hcmtBc0ZpbmlzaGVk
IHRoYXQgd2FzIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgICB0aGlzLnJldmVydE1h
cmtBc0ZpbmlzaGVkKCk7CkBAIC05MCwyMiArODUsMjggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cFJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGlubGluZUNvbnRlbnQgPSB0aGlz
Ll9zb3VyY2VNYXAuc291cmNlQ29udGVudCh0aGlzLnVybCk7CiAgICAgICAgIGlmIChpbmxpbmVD
b250ZW50KSB7CiAgICAgICAgICAgICAvLyBGb3JjZSBpbmxpbmUgY29udGVudCB0byBiZSBhc3lu
Y2hyb25vdXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIGxvYWQgcGF0dGVybi4KLSAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRv
bid0IGtub3cgdGhlIE1JTUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1ZXNzIGJ5IGFuYWx5
emluZyB0aGUgY29udGVudD8KLSAgICAgICAgICAgICAgICBzb3VyY2VNYXBSZXNvdXJjZUxvYWRl
ZC5jYWxsKHRoaXMsIG51bGwsIGlubGluZUNvbnRlbnQsIHRoaXMubWltZVR5cGUsIDIwMCk7Ci0g
ICAgICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0
IGtub3cgdGhlIE1JTUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1ZXNzIGJ5IGFuYWx5emlu
ZyB0aGUgY29udGVudD8KKyAgICAgICAgICAgIC8vIFJldHVybnMgYSBwcm9taXNlLgorICAgICAg
ICAgICAgcmV0dXJuIHNvdXJjZU1hcFJlc291cmNlTG9hZGVkLmNhbGwodGhpcywgbnVsbCwgaW5s
aW5lQ29udGVudCwgdGhpcy5taW1lVHlwZSwgMjAwKTsKKyAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZnVuY3Rpb24gc291cmNlTWFwUmVzb3VyY2VMb2FkRXJy
b3IoZXJyb3IsIGJvZHksIG1pbWVUeXBlLCBzdGF0dXNDb2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICB0aGlzLm1hcmtBc0ZhaWxlZCgpOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSh7CisgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLAorICAgICAgICAgICAgICAgIGNv
bnRlbnQ6IGJvZHkuY29udGVudCwKKyAgICAgICAgICAgICAgICBtaW1lVHlwZTogbWltZVR5cGUs
CisgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZQorICAgICAgICAgICAgfSk7
CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZChl
cnJvciwgYm9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUpCisgICAgICAgIGZ1bmN0aW9uIHNvdXJj
ZU1hcFJlc291cmNlTG9hZGVkKGJvZHksIG1pbWVUeXBlLCBzdGF0dXNDb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBjb25zdCBiYXNlNjRlbmNvZGVkID0gZmFsc2U7CiAKLSAgICAgICAgICAg
IGlmIChlcnJvciB8fCBzdGF0dXNDb2RlID49IDQwMCkgewotICAgICAgICAgICAgICAgIHRoaXMu
bWFya0FzRmFpbGVkKCk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIGJvZHksIGJh
c2U2NGVuY29kZWQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChz
dGF0dXNDb2RlID49IDQwMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VNYXBSZXNv
dXJjZUxvYWRFcnJvcihlcnJvciwgYm9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHBpY2tpbmcg
dGhlIGJlc3QgTUlNRS10eXBlLiBSaWdodCBub3cgdGhlIGZpbGUgZXh0ZW5zaW9uIGlzIHRoZSBi
ZXN0IGJldC4KQEAgLTExMywxMiArMTE0LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNv
dXJjZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHRoaXMubWFya0FzRmluaXNoZWQoKTsK
IAotICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgYm9keSwgYmFzZTY0ZW5jb2RlZCk7CisgICAg
ICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICAgICAgICBjb250ZW50
OiBib2R5LmNvbnRlbnQsCisgICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLAorICAg
ICAgICAgICAgICAgIGJhc2U2NGVuY29kZWQ6IGJhc2U2NGVuY29kZWQsCisgICAgICAgICAgICAg
ICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZQorICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIU5ldHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UpIHsKICAgICAgICAgICAgIHNv
dXJjZU1hcFJlc291cmNlTG9hZGVkLmNhbGwodGhpcywgImVycm9yOiBubyBOZXR3b3JrQWdlbnQu
bG9hZFJlc291cmNlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBtZXNzYWdlOiAiZXJyb3I6IG5vIE5ldHdvcmtBZ2VudC5s
b2FkUmVzb3VyY2UiIH0pOwogICAgICAgICB9CiAKICAgICAgICAgdmFyIGZyYW1lSWRlbnRpZmll
ciA9IG51bGw7CkBAIC0xMjgsOSArMTM0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291
cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFmcmFtZUlkZW50aWZpZXIpCiAgICAgICAg
ICAgICBmcmFtZUlkZW50aWZpZXIgPSBXZWJJbnNwZWN0b3IuZnJhbWVSZXNvdXJjZU1hbmFnZXIu
bWFpbkZyYW1lLmlkOwogCi0gICAgICAgIE5ldHdvcmtBZ2VudC5sb2FkUmVzb3VyY2UoZnJhbWVJ
ZGVudGlmaWVyLCB0aGlzLnVybCwgc291cmNlTWFwUmVzb3VyY2VMb2FkZWQuYmluZCh0aGlzKSk7
Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBOZXR3b3JrQWdlbnQubG9h
ZFJlc291cmNlLnByb21pc2UoZnJhbWVJZGVudGlmaWVyLCB0aGlzLnVybCkudGhlbihzb3VyY2VN
YXBSZXNvdXJjZUxvYWRlZC5iaW5kKHRoaXMpKS5jYXRjaChzb3VyY2VNYXBSZXNvdXJjZUxvYWRF
cnJvci5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgY3JlYXRlU291cmNlQ29kZUxvY2F0aW9u
OiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3Lmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3VyY2VDb250
ZW50Vmlldy5qcwppbmRleCAwYjk5NGFkLi5lNjBhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Jlc291cmNlQ29u
dGVudFZpZXcuanMKQEAgLTQzLDcgKzQzLDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlQ29udGVu
dFZpZXcgPSBmdW5jdGlvbihyZXNvdXJjZSwgc3R5bGVDbGFzc05hbWUpCiAgICAgdGhpcy5lbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fbW91c2VXYXNDbGlja2VkLmJpbmQo
dGhpcyksIGZhbHNlKTsKIAogICAgIC8vIFJlcXVlc3QgY29udGVudCBsYXN0IHNvIHRoZSBzcGlu
bmVyIHdpbGwgYWx3YXlzIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgY29udGVudCBpcyBpbW1lZGlh
dGVseSBhdmFpbGFibGUuCi0gICAgcmVzb3VyY2UucmVxdWVzdENvbnRlbnQodGhpcy5fY29udGVu
dEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsKKyAgICByZXNvdXJjZS5yZXF1ZXN0Q29udGVudCgpLnRo
ZW4odGhpcy5fY29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKS5jYXRjaCh0aGlzLl9jb250ZW50
RXJyb3IuYmluZCh0aGlzKSk7CiAKICAgICBpZiAoIXRoaXMubWFuYWdlc093bklzc3Vlcykgewog
ICAgICAgICBXZWJJbnNwZWN0b3IuaXNzdWVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLklzc3VlTWFuYWdlci5FdmVudC5Jc3N1ZVdhc0FkZGVkLCB0aGlzLl9pc3N1ZVdhc0Fk
ZGVkLCB0aGlzKTsKQEAgLTg2LDIxICs4NiwyMCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VDb250
ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBfY29udGVudEF2
YWlsYWJsZTogZnVuY3Rpb24ocmVzb3VyY2UsIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpCisgICAg
X2NvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCiAgICAgewotICAgICAgICAv
LyBDaGVjayBmb3IgZmFpbGVkIGxvYWRzLgotICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5mYWls
ZWQpIHsKLSAgICAgICAgICAgIC8vIERvbid0IHNob3cgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGVy
ZSBpcyBhbHJlYWR5IGFuIGVycm9yIG1lc3NhZ2Ugc2hvd2luZyAobGlrZSBvbmUgYWRkZWQgYnkg
YWRkSXNzdWUuKQotICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCIu
bWVzc2FnZS10ZXh0LXZpZXcuZXJyb3IiKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICAgICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5jcmVhdGVNZXNzYWdlVGV4dFZpZXco
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBbiBlcnJvciBvY2N1cnJlZCB0cnlpbmcgdG8gbG9hZCB0
aGUgcmVzb3VyY2UuIiksIHRydWUpKTsKKyAgICAgICAgLy8gQ29udGVudCBpcyByZWFkeSB0byBz
aG93LCBjYWxsIHRoZSBwdWJsaWMgbWV0aG9kIG5vdy4KKyAgICAgICAgdGhpcy5jb250ZW50QXZh
aWxhYmxlKHBhcmFtZXRlcnMuY29udGVudCwgcGFyYW1ldGVycy5iYXNlNjRFbmNvZGVkKTsKKyAg
ICB9LAorCisgICAgX2NvbnRlbnRFcnJvcjogZnVuY3Rpb24ocGFyYW1ldGVycykKKyAgICB7Cisg
ICAgICAgIC8vIERvbid0IHNob3cgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhbHJlYWR5
IGFuIGVycm9yIG1lc3NhZ2Ugc2hvd2luZyAobGlrZSBvbmUgYWRkZWQgYnkgYWRkSXNzdWUuKQor
ICAgICAgICBpZiAodGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tZXNzYWdlLXRleHQtdmll
dy5lcnJvciIpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgLy8g
Q29udGVudCBpcyByZWFkeSB0byBzaG93LCBjYWxsIHRoZSBwdWJsaWMgbWV0aG9kIG5vdy4KLSAg
ICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlKGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpOworICAg
ICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5jcmVhdGVNZXNzYWdlVGV4dFZpZXcoV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKHBhcmFtZXRlcnMubWVzc2FnZSksIHRydWUpKTsKICAgICB9LAogCiAgICAg
X2lzc3VlV2FzQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVk
aXRvci5qcwppbmRleCBmNjY4MjEzLi45NTg1ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4
dEVkaXRvci5qcwpAQCAtNzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlKQogICAgIGVsc2UKICAgICAgICAgdGhpcy5fc291
cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50LlNv
dXJjZU1hcEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRoaXMpOwogCi0g
ICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQo
dGhpcykpOworICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHRoaXMuX2NvbnRl
bnRBdmFpbGFibGUuYmluZCh0aGlzKSk7CiAKICAgICAvLyBGSVhNRTogQ21kK0wgc2hvcmN1dCBk
b2Vzbid0IGFjdHVhbGx5IHdvcmsuCiAgICAgbmV3IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0
Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1hbmQsICJMIiwg
dGhpcy5zaG93R29Ub0xpbmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5lbGVtZW50KTsKQEAgLTQz
Niw4ICs0MzYsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAgfSwKIAotICAg
IF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihzb3VyY2VDb2RlLCBjb250ZW50LCBiYXNlNjRF
bmNvZGVkKQorICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAg
IHsKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSBwYXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAg
ICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworICAgICAgICB2YXIgYmFzZTY0
RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsKKwogICAgICAgICBjb25zb2xlLmFz
c2VydChzb3VyY2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlKTsKICAgICAgICAgY29uc29sZS5h
c3NlcnQoIWJhc2U2NEVuY29kZWQpOwogCkBAIC02MzksNyArNjQzLDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9pbmxp
bmVTY3JpcHRDb250ZW50UG9wdWxhdGVkID0gcGVuZGluZ1JlcXVlc3RDb3VudDsKIAotICAgICAg
ICBmdW5jdGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKGVycm9yLCBjb250ZW50KQorICAgICAg
ICBmdW5jdGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgc3RpbGwgd2FpdGluZyBmb3Ig
Y29udGVudCBmcm9tIG90aGVyIHNjcmlwdHMuCiAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nUmVx
dWVzdENvdW50KQpAQCAtNjg5LDcgKzY5Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGJvdW5kU2NyaXB0Q29udGVudEF2
YWlsYWJsZSA9IHNjcmlwdENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKTsKICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgc2NyaXB0
c1tpXS5yZXF1ZXN0Q29udGVudChib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUpOworICAgICAg
ICAgICAgc2NyaXB0c1tpXS5yZXF1ZXN0Q29udGVudCgpLnRoZW4oYm91bmRTY3JpcHRDb250ZW50
QXZhaWxhYmxlKTsKICAgICB9LAogCiAgICAgX3BvcHVsYXRlV2l0aFNjcmlwdENvbnRlbnQ6IGZ1
bmN0aW9uKCkKQEAgLTcwNyw4ICs3MTEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBjb25zb2xlLmFzc2VydChzY3JpcHRzWzBdLnJh
bmdlLnN0YXJ0TGluZSA9PT0gMCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdHNbMF0u
cmFuZ2Uuc3RhcnRDb2x1bW4gPT09IDApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRl
bnRBdmFpbGFibGUoZXJyb3IsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRl
bnRBdmFpbGFibGUocGFyYW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRl
bnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQ7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVxdWVz
dGluZ1NjcmlwdENvbnRlbnQ7CiAKICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRoZSBmdWxsIGNv
bnRlbnQgcG9wdWxhdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMgYXN5bmMgY2FsbGJhY2suCkBA
IC03MjMsNyArNzI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVudCA9IHRydWU7
CiAKLSAgICAgICAgc2NyaXB0c1swXS5yZXF1ZXN0Q29udGVudChzY3JpcHRDb250ZW50QXZhaWxh
YmxlLmJpbmQodGhpcykpOworICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250ZW50KCkudGhl
bihzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfbWF0
Y2hlc1NvdXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uKQo=
</data>
<flag name="review"
          id="267823"
          type_id="1"
          status="+"
          setter="burg"
    />
    <flag name="commit-queue"
          id="267824"
          type_id="3"
          status="-"
          setter="burg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243586</attachid>
            <date>2014-12-19 16:21:14 -0800</date>
            <delta_ts>2014-12-29 07:31:19 -0800</delta_ts>
            <desc>[PATCH] fix for review ver 3.</desc>
            <filename>contentpromise.diff</filename>
            <type>text/plain</type>
            <size>29816</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDBjNDA4Y2YuLjI0MWZkNzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE0LTEyLTA5ICBKb25hdGhhbiBXZWxs
cyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogU291cmNl
Q29kZS5yZXF1ZXN0Q29udGVudCBzaG91bGQgcmV0dXJuIGEgcHJvbWlzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1Nzc3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIFNvdXJjZUNvZGUuanMg
dG8gcmVxdWVzdCBjb250ZW50IGZyb20gdGhlIGJhY2tlbmQgdXNpbmcgUHJvbWlzZXMuIENoYW5n
ZSBSZXNvdXJjZS5qcyB0byB1c2UgdGhpcyBuZXcKKyAgICAgICAgYXBwcm9hY2ggd2hlbiBkZXRl
cm1pbmluZyB3aGV0aGVyIGEgcmVzb3VyY2UgbG9hZCBoYXMgZmluaXNoZWQuIENoYW5nZSBhbGwg
Y2FsbHMgdG8gdGhlIG9sZGVyCisgICAgICAgIFNvdXJjZUNvZGUjcmVxdWVzdENvbnRlbnRGcm9t
QmFja2VuZElmTmVlZGVkIHRvIHNpbXBseSB1c2UgcmVxdWVzdENvbnRlbnQgYW5kIHVzZSBhIGNh
dGNoIGZ1bmN0aW9uCisgICAgICAgIGlmIGEgY29udGVudCByZXF1ZXN0IGVycm9yIG5lZWRzIHRv
IGJlIGhhbmRsZWQuIEZpeCBhIGJ1ZyB3aGVyZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2Fn
ZSBmb3IgYW4KKyAgICAgICAgaW52YWxpZCByZXNvdXJjZSB3YXNuJ3Qgc2hvd2luZyBpbiB0aGUg
cmVzb3VyY2UgY29udGVudCB2aWV3LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9BbmFseXplck1hbmFnZXIuanM6CisgICAgICAgIChzZXQgV2ViSW5zcGVjdG9yLkFuYWx5
emVyTWFuYWdlci5wcm90b3R5cGUuZ2V0QW5hbHl6ZXJNZXNzYWdlc0ZvclNvdXJjZUNvZGUuKToK
KyAgICAgICAgKHNldCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRB
bmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNYW5hZ2VyLnByb3RvdHlwZS5fdXBkYXRlUmVzb3VyY2VDb250ZW50LmZldGNoZWRTdHls
ZVNoZWV0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyLnBy
b3RvdHlwZS5fdXBkYXRlUmVzb3VyY2VDb250ZW50LnN0eWxlU2hlZXRSZWFkeSk6CisgICAgICAg
ICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVldC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5k
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5jYW5SZXF1
ZXN0Q29udGVudEZyb21CYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L01vZGVscy9ET01Ob2RlU3R5bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGVT
dHlsZXMucHJvdG90eXBlLmNoYW5nZVN0eWxlVGV4dCk6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvUmVzb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJv
dG90eXBlLmNhblJlcXVlc3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJj
ZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlLm1hcmtBc0ZpbmlzaGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUubWFya0FzRmFpbGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuZ2V0SW1hZ2VTaXplKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZS5wcm90b3R5cGUuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCk6
IERlbGV0ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2Ny
aXB0U3ludGF4VHJlZS5jYXRjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3Rv
dHlwZS5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBl
LnJlcXVlc3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3Rv
dHlwZS5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlLnByb3RvdHlwZS5fcHJvY2Vzc0NvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUuc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHMp
OiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZU1hcFJlc291
cmNlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUucmVxdWVzdENvbnRl
bnRGcm9tQmFja2VuZC5zb3VyY2VNYXBSZXNvdXJjZUxvYWRFcnJvcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UucHJvdG90eXBlLnJlcXVlc3RDb250ZW50RnJvbUJh
Y2tlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZU1hcFJlc291cmNlLnByb3RvdHlw
ZS5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnRGcm9tQmFj
a2VuZC5zb3VyY2VNYXBSZXNvdXJjZUxvYWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlJlc291cmNlQ29udGVudFZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNl
Q29udGVudFZpZXcucHJvdG90eXBlLl9jb250ZW50QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY29udGVudEVycm9yKToKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2NvbnRlbnRBdmFpbGFibGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5f
cG9wdWxhdGVXaXRoSW5saW5lU2NyaXB0Q29udGVudC5zY3JpcHRDb250ZW50QXZhaWxhYmxlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Bv
cHVsYXRlV2l0aElubGluZVNjcmlwdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRoU2NyaXB0Q29udGVudCk6
CisKIDIwMTQtMTItMTkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNzc1NzQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9BbmFseXplck1h
bmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9BbmFseXplck1hbmFnZXIuanMKaW5kZXggOTYzOGJmZi4uMDhjZjE2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJN
YW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwpAQCAtODcsNyArODcsNyBAQCBXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIHJldHJpZXZlQW5hbHl6ZXJNZXNz
YWdlcygpCisgICAgICAgICAgICBmdW5jdGlvbiByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMocHJv
cGVydGllcykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2YXIgYW5hbHl6ZXJNZXNz
YWdlcyA9IFtdOwogICAgICAgICAgICAgICAgIHZhciByYXdBbmFseXplck1lc3NhZ2VzID0gYW5h
bHl6ZXIudmVyaWZ5KHNvdXJjZUNvZGUuY29udGVudCwgdGhpcy5fZXNsaW50Q29uZmlnKTsKQEAg
LTEwMSw3ICsxMDEsNyBAQCBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgICAgICByZXNvbHZlKGFuYWx5emVyTWVzc2FnZXMpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBzb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50KHJldHJpZXZlQW5h
bHl6ZXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVz
dENvbnRlbnQoKS50aGVuKHJldHJpZXZlQW5hbHl6ZXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKICAg
ICAgICAgfS5iaW5kKHRoaXMpKTsKICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NTdHlsZU1h
bmFnZXIuanMKaW5kZXggN2FhNjRhYi4uOWUxYzg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU1N0
eWxlTWFuYWdlci5qcwpAQCAtMzEwLDggKzMxMCwxMSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHN0eWxl
U2hlZXQpOwogCi0gICAgICAgIGZ1bmN0aW9uIGZldGNoZWRTdHlsZVNoZWV0Q29udGVudChzdHls
ZVNoZWV0LCBjb250ZW50KQorICAgICAgICBmdW5jdGlvbiBmZXRjaGVkU3R5bGVTaGVldENvbnRl
bnQocGFyYW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBw
YXJhbWV0ZXJzLnNvdXJjZUNvZGU7CisgICAgICAgICAgICB2YXIgY29udGVudCA9IHBhcmFtZXRl
cnMuY29udGVudDsKKwogICAgICAgICAgICAgZGVsZXRlIHN0eWxlU2hlZXQuX19wZW5kaW5nQ2hh
bmdlVGltZW91dDsKIAogICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGVTaGVldC51cmwp
OwpAQCAtMzQ3LDcgKzM1MCw3IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1hbmFnZXIucHJvdG90
eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRSZWFkeSgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN0eWxlU2hlZXQucmVxdWVzdENvbnRlbnQoZmV0Y2hlZFN0eWxlU2hlZXRD
b250ZW50LmJpbmQodGhpcykpOworICAgICAgICAgICAgc3R5bGVTaGVldC5yZXF1ZXN0Q29udGVu
dCgpLnRoZW4oZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50LmJpbmQodGhpcykpOwogICAgICAgICB9
CiAKICAgICAgICAgZnVuY3Rpb24gYXBwbHlTdHlsZVNoZWV0Q2hhbmdlcygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVTaGVl
dC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHls
ZVNoZWV0LmpzCmluZGV4IDUxZDllNmYuLmNkZGZhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0LmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZVNoZWV0Lmpz
CkBAIC0xMjEsMjIgKzEyMSwxNSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIENTU0FnZW50LnNldFN0eWxlU2hlZXRUZXh0KHRoaXMuX2lkLCB0aGlz
LmN1cnJlbnRSZXZpc2lvbi5jb250ZW50LCBjb250ZW50RGlkQ2hhbmdlLmJpbmQodGhpcykpOwog
ICAgIH0sCiAKLSAgICBjYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICAvLyBXZSBjYW4gcmVxdWVzdCBjb250ZW50IGlmIHdlIGhhdmUgYW4gaWQu
Ci0gICAgICAgIHJldHVybiAhIXRoaXMuX2lkOwotICAgIH0sCi0KLSAgICByZXF1ZXN0Q29udGVu
dEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICByZXF1ZXN0Q29udGVudEZyb21C
YWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2lkKSB7Ci0gICAg
ICAgICAgICAvLyBUaGVyZSBpcyBubyBpZGVudGlmaWVyIHRvIHJlcXVlc3QgY29udGVudCB3aXRo
LiBSZXR1cm4gZmFsc2UgdG8gY2F1c2UgdGhlCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBp
ZGVudGlmaWVyIHRvIHJlcXVlc3QgY29udGVudCB3aXRoLiBSZWplY3QgdGhlIHByb21pc2UgdG8g
Y2F1c2UgdGhlCiAgICAgICAgICAgICAvLyBwZW5kaW5nIGNhbGxiYWNrcyB0byBnZXQgbnVsbCBj
b250ZW50LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFBy
b21pc2UucmVqZWN0KG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gaWRlbnRpZmllciB0byByZXF1ZXN0
IGNvbnRlbnQgd2l0aC4iKSk7CiAgICAgICAgIH0KIAotICAgICAgICBDU1NBZ2VudC5nZXRTdHls
ZVNoZWV0VGV4dCh0aGlzLl9pZCwgY2FsbGJhY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIENTU0FnZW50LmdldFN0eWxlU2hlZXRUZXh0LnByb21pc2UodGhpcy5faWQp
OwogICAgIH0sCiAKICAgICBub3RlQ29udGVudERpZENoYW5nZTogZnVuY3Rpb24oKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVT
dHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9N
Tm9kZVN0eWxlcy5qcwppbmRleCA4MDJlMmI3Li5lM2M3Njk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxl
cy5qcwpAQCAtNDA1LDggKzQwNSwxMCBAQCBXZWJJbnNwZWN0b3IuRE9NTm9kZVN0eWxlcy5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmdW5j
dGlvbiBmZXRjaGVkU3R5bGVTaGVldENvbnRlbnQoc3R5bGVTaGVldCwgY29udGVudCkKKyAgICAg
ICAgZnVuY3Rpb24gZmV0Y2hlZFN0eWxlU2hlZXRDb250ZW50KHBhcmFtZXRlcnMpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworCiAgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChzdHlsZS5zdHlsZVNoZWV0VGV4dFJhbmdlKTsKICAgICAg
ICAgICAgIGlmICghc3R5bGUuc3R5bGVTaGVldFRleHRSYW5nZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC00NDYsNyArNDQ4LDcgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGVTdHlsZXMucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9uZWVkc1JlZnJlc2ggPSB0cnVlOwogICAgICAgICB0
aGlzLl9pZ25vcmVOZXh0Q29udGVudERpZENoYW5nZUZvclN0eWxlU2hlZXQgPSBzdHlsZS5vd25l
clN0eWxlU2hlZXQ7CiAKLSAgICAgICAgc3R5bGUub3duZXJTdHlsZVNoZWV0LnJlcXVlc3RDb250
ZW50KGZldGNoZWRTdHlsZVNoZWV0Q29udGVudC5iaW5kKHRoaXMpKTsKKyAgICAgICAgc3R5bGUu
b3duZXJTdHlsZVNoZWV0LnJlcXVlc3RDb250ZW50KCkudGhlbihmZXRjaGVkU3R5bGVTaGVldENv
bnRlbnQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIGNoYW5nZVByb3BlcnR5OiBmdW5jdGlv
bihwcm9wZXJ0eSwgbmFtZSwgdmFsdWUsIHByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCmluZGV4IGYzYmJk
YjAuLjRjYTRkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9SZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKQEAgLTUzOSwyOCArNTM5LDIzIEBAIFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5UaW1lc3RhbXBzRGlkQ2hhbmdl
KTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24o
KQorICAgIGNhblJlcXVlc3RDb250ZW50OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fZmluaXNoZWQ7CiAgICAgfSwKIAotICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tl
bmQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIC8vIElmIHdlIGhhdmUgdGhlIHJlcXVlc3RJZGVudGlm
aWVyIHdlIGNhbiBnZXQgdGhlIGFjdHVhbCByZXNwb25zZSBmb3IgdGhpcyBzcGVjaWZpYyByZXNv
dXJjZS4KICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBjb250ZW50IHdpbGwgYmUgY2FjaGVkIHJl
c291cmNlIGRhdGEsIHdoaWNoIG1pZ2h0IG5vdCBleGlzdCBhbnltb3JlLgotICAgICAgICBpZiAo
dGhpcy5fcmVxdWVzdElkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIE5ldHdvcmtBZ2VudC5nZXRS
ZXNwb25zZUJvZHkodGhpcy5fcmVxdWVzdElkZW50aWZpZXIsIGNhbGxiYWNrKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0SWRl
bnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrQWdlbnQuZ2V0UmVzcG9uc2VCb2R5
LnByb21pc2UodGhpcy5fcmVxdWVzdElkZW50aWZpZXIpOwogCi0gICAgICAgIGlmICh0aGlzLl9w
YXJlbnRGcmFtZSkgewotICAgICAgICAgICAgUGFnZUFnZW50LmdldFJlc291cmNlQ29udGVudCh0
aGlzLl9wYXJlbnRGcmFtZS5pZCwgdGhpcy5fdXJsLCBjYWxsYmFjayk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICAvLyBUaGVyZSBpcyBubyByZXF1ZXN0IGlk
ZW50aWZpZXIgb3IgZnJhbWUgdG8gcmVxdWVzdCBjb250ZW50IGZyb20uCisgICAgICAgIGlmICh0
aGlzLl9wYXJlbnRGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBQYWdlQWdlbnQuZ2V0UmVzb3Vy
Y2VDb250ZW50LnByb21pc2UodGhpcy5fcGFyZW50RnJhbWUuaWQsIHRoaXMuX3VybCk7CiAKLSAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gcmVxdWVzdCBpZGVudGlmaWVyIG9yIGZyYW1lIHRvIHJlcXVl
c3QgY29udGVudCBmcm9tLiBSZXR1cm4gZmFsc2UgdG8gY2F1c2UgdGhlCi0gICAgICAgIC8vIHBl
bmRpbmcgY2FsbGJhY2tzIHRvIGdldCBudWxsIGNvbnRlbnQuCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiQ29udGVudCByZXF1
ZXN0IGZhaWxlZC4iKSk7CiAgICAgfSwKIAogICAgIGluY3JlYXNlU2l6ZTogZnVuY3Rpb24oZGF0
YUxlbmd0aCwgZWxhcHNlZFRpbWUpCkBAIC02MTMsMTEgKzYwOCwxMSBAQCBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9maW5pc2hlZCA9IHRydWU7CiAg
ICAgICAgIHRoaXMuX2ZpbmlzaGVkT3JGYWlsZWRUaW1lc3RhbXAgPSBlbGFwc2VkVGltZSB8fCBO
YU47CiAKKyAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaFRoZW5SZXF1ZXN0Q29udGVudFByb21pc2Up
CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZmluaXNoVGhlblJlcXVlc3RDb250ZW50UHJvbWlz
ZTsKKwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuRXZlbnQuTG9hZGluZ0RpZEZpbmlzaCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5UaW1lc3RhbXBzRGlk
Q2hhbmdlKTsKLQotICAgICAgICBpZiAodGhpcy5jYW5SZXF1ZXN0Q29udGVudEZyb21CYWNrZW5k
KCkpCi0gICAgICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmRJZk5lZWRlZCgp
OwogICAgIH0sCiAKICAgICBtYXJrQXNGYWlsZWQ6IGZ1bmN0aW9uKGNhbmNlbGVkLCBlbGFwc2Vk
VGltZSkKQEAgLTYzMCw5ICs2MjUsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBl
ID0gewogCiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZS5FdmVudC5Mb2FkaW5nRGlkRmFpbCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SZXNvdXJjZS5FdmVudC5UaW1lc3RhbXBzRGlk
Q2hhbmdlKTsKLQotICAgICAgICAvLyBGb3JjZSB0aGUgY29udGVudCByZXF1ZXN0cyB0byBiZSBz
ZXJ2aWNlZC4gVGhleSB3aWxsIGdldCBudWxsIGFzIHRoZSBjb250ZW50LgotICAgICAgICB0aGlz
LnNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzKHRydWUpOwogICAgIH0sCiAKICAgICByZXZl
cnRNYXJrQXNGaW5pc2hlZDogZnVuY3Rpb24oKQpAQCAtNjc2LDkgKzY2OCwyOCBAQCBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgICAgICBpbWFnZS5hZGRFdmVudExpc3Rl
bmVyKCJsb2FkIiwgaW1hZ2VEaWRMb2FkLmJpbmQodGhpcyksIGZhbHNlKTsKIAogICAgICAgICAv
LyBTZXQgdGhlIGltYWdlIHNvdXJjZSBvbmNlIHdlJ3ZlIG9idGFpbmVkIHRoZSBiYXNlNjQtZW5j
b2RlZCBVUkwgZm9yIGl0LgotICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdGhpcy5jb250ZW50VVJMOwotICAgICAgICB9LmJp
bmQodGhpcykpOworICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KCkudGhlbihmdW5jdGlvbihj
b250ZW50KSB7CisgICAgICAgICAgICBpbWFnZS5zcmMgPSBjb250ZW50LnNvdXJjZUNvZGUuY29u
dGVudFVSTDsKKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIHJlcXVlc3RDb250ZW50OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZmluaXNoZWQpCisgICAgICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RDb250ZW50LmNh
bGwodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX2ZhaWxlZCkKKyAgICAgICAgICAgIHJldHVy
biBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkFuIGVycm9yIG9jY3VycmVkIHRyeWluZyB0byBs
b2FkIHRoZSByZXNvdXJjZS4iKSk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9maW5pc2hUaGVuUmVx
dWVzdENvbnRlbnRQcm9taXNlKSB7CisgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBuZXcgV2Vi
SW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIodGhpcywgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzLl9m
aW5pc2hUaGVuUmVxdWVzdENvbnRlbnRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJl
c29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihX
ZWJJbnNwZWN0b3IuUmVzb3VyY2UuRXZlbnQuTG9hZGluZ0RpZEZpbmlzaCwgcmVzb2x2ZSk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5SZXNvdXJj
ZS5FdmVudC5Mb2FkaW5nRGlkRmFpbCwgcmVqZWN0KTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlz
KSkudGhlbihXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUucmVxdWVzdENvbnRlbnQu
YmluZCh0aGlzKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoVGhl
blJlcXVlc3RDb250ZW50UHJvbWlzZTsKICAgICB9LAogCiAgICAgYXNzb2NpYXRlV2l0aFNjcmlw
dDogZnVuY3Rpb24oc2NyaXB0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKaW5kZXggYjRjOWUyOS4uODM0MGMzNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
LmpzCkBAIC0xMTAsMjIgKzExMCwxNSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdFN5bnRheFRyZWU7CiAgICAgfSwKIAotICAg
IGNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IC8vIFdlIGNhbiByZXF1ZXN0IGNvbnRlbnQgaWYgd2UgaGF2ZSBhbiBpZC4KLSAgICAgICAgcmV0
dXJuICEhdGhpcy5faWQ7Ci0gICAgfSwKLQogICAgIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQ6
IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pZCkgewogICAg
ICAgICAgICAgLy8gVGhlcmUgaXMgbm8gaWRlbnRpZmllciB0byByZXF1ZXN0IGNvbnRlbnQgd2l0
aC4gUmV0dXJuIGZhbHNlIHRvIGNhdXNlIHRoZQogICAgICAgICAgICAgLy8gcGVuZGluZyBjYWxs
YmFja3MgdG8gZ2V0IG51bGwgY29udGVudC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IG1lc3NhZ2U6ICJUaGVyZSBpcyBubyBp
ZGVudGlmaWVyIHRvIHJlcXVlc3QgY29udGVudCB3aXRoLiIgfSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBEZWJ1Z2dlckFnZW50LmdldFNjcmlwdFNvdXJjZSh0aGlzLl9pZCwgY2FsbGJhY2spOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIERlYnVnZ2VyQWdlbnQuZ2V0U2Ny
aXB0U291cmNlLnByb21pc2UodGhpcy5faWQpOwogICAgIH0sCiAKICAgICBzYXZlSWRlbnRpdHlU
b0Nvb2tpZTogZnVuY3Rpb24oY29va2llKQpAQCAtMTU1LDggKzE0OCwxMCBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQoZnVuY3Rpb24oZXJyb3IsIHNvdXJjZVRleHQp
IHsKLSAgICAgICAgICAgIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrKGVycm9yID8gbnVs
bCA6IHNvdXJjZVRleHQpOworICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KCkudGhlbihmdW5j
dGlvbihwYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBtYWtlU3ludGF4VHJlZUFuZENhbGxDYWxs
YmFjayhwYXJhbWV0ZXJzLmNvbnRlbnQpOworICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJv
cikgeworICAgICAgICAgICAgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2sobnVsbCk7CiAg
ICAgICAgIH0pOwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKaW5kZXggZGJlYTAxOS4uYTcwNzE5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L1NvdXJjZUNvZGUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL1NvdXJjZUNvZGUuanMKQEAgLTI3LDEzICsyNywxMiBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZSA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhp
cyk7CiAKLSAgICB0aGlzLl9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MgPSBbXTsKLQog
ICAgIHRoaXMuX29yaWdpbmFsUmV2aXNpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVS
ZXZpc2lvbih0aGlzLCBudWxsLCBmYWxzZSk7CiAgICAgdGhpcy5fY3VycmVudFJldmlzaW9uID0g
dGhpcy5fb3JpZ2luYWxSZXZpc2lvbjsKIAogICAgIHRoaXMuX3NvdXJjZU1hcHMgPSBudWxsOwog
ICAgIHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCA9IG51bGw7CisgICAgdGhpcy5fcmVxdWVzdENv
bnRlbnRQcm9taXNlID0gbnVsbDsKIH07CiAKIFdlYkluc3BlY3Rvci5PYmplY3QuYWRkQ29uc3Ry
dWN0b3JGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUpOwpAQCAtNDEsNyArNDAsOSBA
QCBXZWJJbnNwZWN0b3IuT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlKTsKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50ID0gewogICAgIENv
bnRlbnREaWRDaGFuZ2U6ICJzb3VyY2UtY29kZS1jb250ZW50LWRpZC1jaGFuZ2UiLAogICAgIFNv
dXJjZU1hcEFkZGVkOiAic291cmNlLWNvZGUtc291cmNlLW1hcC1hZGRlZCIsCi0gICAgRm9ybWF0
dGVyRGlkQ2hhbmdlOiAic291cmNlLWNvZGUtZm9ybWF0dGVyLWRpZC1jaGFuZ2UiCisgICAgRm9y
bWF0dGVyRGlkQ2hhbmdlOiAic291cmNlLWNvZGUtZm9ybWF0dGVyLWRpZC1jaGFuZ2UiLAorICAg
IExvYWRpbmdEaWRGaW5pc2g6ICJzb3VyY2UtY29kZS1sb2FkaW5nLWRpZC1maW5pc2giLAorICAg
IExvYWRpbmdEaWRGYWlsOiAic291cmNlLWNvZGUtbG9hZGluZy1kaWQtZmFpbCIKIH07CiAKIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKQEAgLTEyMywyMCArMTI0LDExIEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuRm9ybWF0
dGVyRGlkQ2hhbmdlKTsKICAgICB9LAogCi0gICAgcmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNh
bGxiYWNrKQorICAgIHJlcXVlc3RDb250ZW50OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBj
b25zb2xlLmFzc2VydCh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpOwotICAgICAgICBp
ZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLl9yZXF1ZXN0Q29udGVudFByb21pc2UgPSB0aGlzLl9yZXF1ZXN0Q29udGVu
dFByb21pc2UgfHwgdGhpcy5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKCkudGhlbih0aGlzLl9w
cm9jZXNzQ29udGVudC5iaW5kKHRoaXMpKTsKIAotICAgICAgICB0aGlzLl9wZW5kaW5nQ29udGVu
dFJlcXVlc3RDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2Nv
bnRlbnRSZWNlaXZlZCkgewotICAgICAgICAgICAgLy8gQ2FsbCBfc2VydmljZVBlbmRpbmdDb250
ZW50UmVxdWVzdHMgb24gYSB0aW1lb3V0IHRvIGZvcmNlIGNhbGxiYWNrcyB0byBiZSBhc3luY2hy
b25vdXMuCi0gICAgICAgICAgICBpZiAoIXRoaXMuX3NlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVl
c3RzVGltZW91dElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2VydmljZVBlbmRp
bmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQodGhpcy5zZXJ2
aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0cy5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgfSBlbHNl
IGlmICh0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAgICAgICAgIHRo
aXMucmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiB0
aGlzLl9yZXF1ZXN0Q29udGVudFByb21pc2U7CiAgICAgfSwKIAogICAgIGNyZWF0ZVNvdXJjZUNv
ZGVMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQpAQCAtMTg1LDc1
ICsxNzcsMjAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9jb250ZW50UmVjZWl2ZWQgPSBmYWxzZTsKICAgICB9LAogCi0gICAgY2FuUmVxdWVz
dENvbnRlbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gSW1wbGVt
ZW50ZWQgYnkgc3ViY2xhc3Nlcy4KLSAgICAgICAgY29uc29sZS5lcnJvcigiTmVlZHMgdG8gYmUg
aW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzcy4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0sCi0KLSAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbihjYWxsYmFjaykK
KyAgICByZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICAvLyBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogICAgICAgICBjb25zb2xlLmVycm9yKCJO
ZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBieSBhIHN1YmNsYXNzLiIpOwotICAgIH0sCi0KLSAgICBy
ZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kSWZOZWVkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuY2FuUmVxdWVzdENvbnRlbnRGcm9tQmFja2VuZCgpKTsK
LSAgICAgICAgaWYgKCF0aGlzLmNhblJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdDb250ZW50UmVxdWVz
dENhbGxiYWNrcy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRo
aXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gdHJ1ZTsKLQot
ICAgICAgICBpZiAodGhpcy5yZXF1ZXN0Q29udGVudEZyb21CYWNrZW5kKHRoaXMuX3Byb2Nlc3ND
b250ZW50LmJpbmQodGhpcykpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFNp
bmNlIHJlcXVlc3RDb250ZW50RnJvbUJhY2tlbmQgcmV0dXJuZWQgZmFsc2UsIGp1c3QgY2FsbCBf
cHJvY2Vzc0NvbnRlbnQsCi0gICAgICAgIC8vIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHBlbmRpbmcg
Y2FsbGJhY2tzIHRvIGdldCBudWxsIGNvbnRlbnQuCi0gICAgICAgIHRoaXMuX3Byb2Nlc3NDb250
ZW50KCk7Ci0gICAgfSwKLQotICAgIHNlcnZpY2VQZW5kaW5nQ29udGVudFJlcXVlc3RzOiBmdW5j
dGlvbihmb3JjZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZXJ2aWNlUGVuZGluZ0NvbnRl
bnRSZXF1ZXN0c1RpbWVvdXRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQo
dGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1lb3V0SWRlbnRpZmllcik7Ci0g
ICAgICAgICAgICBkZWxldGUgdGhpcy5fc2VydmljZVBlbmRpbmdDb250ZW50UmVxdWVzdHNUaW1l
b3V0SWRlbnRpZmllcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZvcmNlIHRoZSBjb250ZW50
IHJlcXVlc3RzIHRvIGJlIHNlbnQuIFRvIGRvIHRoaXMgY29ycmVjdGx5IHdlIGFsc28gZm9yY2UK
LSAgICAgICAgLy8gX2NvbnRlbnRSZWNlaXZlZCB0byBiZSB0cnVlIHNvIGZ1dHVyZSBjYWxscyB0
byByZXF1ZXN0Q29udGVudCBnbyB0aHJvdWdoLgotICAgICAgICBpZiAoZm9yY2UpCi0gICAgICAg
ICAgICB0aGlzLl9jb250ZW50UmVjZWl2ZWQgPSB0cnVlOwotCi0gICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX2NvbnRlbnRSZWNlaXZlZCk7Ci0gICAgICAgIGlmICghdGhpcy5fY29udGVudFJl
Y2VpdmVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGNhbGxi
YWNrcyBpbnRvIGEgbG9jYWwgYW5kIGNsZWFyIF9wZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFj
a3Mgc28KLSAgICAgICAgLy8gY2FsbGJhY2tzIHRoYXQgbWlnaHQgY2FsbCByZXF1ZXN0Q29udGVu
dCBhZ2FpbiB3aWxsIG5vdCBtb2RpZnkgdGhlIGFycmF5LgotICAgICAgICB2YXIgY2FsbGJhY2tz
ID0gdGhpcy5fcGVuZGluZ0NvbnRlbnRSZXF1ZXN0Q2FsbGJhY2tzOwotICAgICAgICB0aGlzLl9w
ZW5kaW5nQ29udGVudFJlcXVlc3RDYWxsYmFja3MgPSBbXTsKLQotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNhbGxiYWNrc1tp
XSh0aGlzLCB0aGlzLmNvbnRlbnQsIHRoaXMuY29udGVudElzQmFzZTY0RW5jb2RlZCk7CisgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk5lZWRzIHRvIGJlIGltcGxlbWVu
dGVkIGJ5IGEgc3ViY2xhc3MuIikpOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCiAKLSAgICBf
cHJvY2Vzc0NvbnRlbnQ6IGZ1bmN0aW9uKGVycm9yLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKQor
ICAgIF9wcm9jZXNzQ29udGVudDogZnVuY3Rpb24ocGFyYW1ldGVycykKICAgICB7Ci0gICAgICAg
IGlmIChlcnJvcikKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOwotCi0gICAgICAg
IHRoaXMuX2NvbnRlbnRSZXF1ZXN0UmVzcG9uc2VQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgIHRo
aXMuX2NvbnRlbnRSZWNlaXZlZCA9IHRydWU7CisgICAgICAgIC8vIERpZmZlcmVudCBiYWNrZW5k
IEFQSXMgcmV0dXJuIG9uZSBvZiBgY29udGVudCwgYGJvZHlgLCBvciBgc2NyaXB0U291cmNlYC4K
KyAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQgfHwgcGFyYW1ldGVycy5i
b2R5IHx8IHBhcmFtZXRlcnMuc2NyaXB0U291cmNlOworICAgICAgICB2YXIgYmFzZTY0RW5jb2Rl
ZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsKIAogICAgICAgICB2YXIgcmV2aXNpb24gPSB0
aGlzLnJldmlzaW9uRm9yUmVxdWVzdGVkQ29udGVudDsKIApAQCAtMjYyLDcgKzE5OSwxMSBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldmlzaW9uLmNv
bnRlbnRJc0Jhc2U2NEVuY29kZWQgPSBiYXNlNjRFbmNvZGVkIHx8IGZhbHNlOwogICAgICAgICBk
ZWxldGUgdGhpcy5faWdub3JlUmV2aXNpb25Db250ZW50RGlkQ2hhbmdlRXZlbnQ7CiAKLSAgICAg
ICAgdGhpcy5zZXJ2aWNlUGVuZGluZ0NvbnRlbnRSZXF1ZXN0cygpOworICAgICAgICByZXR1cm4g
UHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICAgIHNvdXJjZUNvZGU6IHRoaXMsCisgICAgICAg
ICAgICBjb250ZW50OiBjb250ZW50LAorICAgICAgICAgICAgYmFzZTY0RW5jb2RlZDogYmFzZTY0
RW5jb2RlZAorICAgICAgICB9KTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3VyY2UuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlTWFwUmVzb3Vy
Y2UuanMKaW5kZXggOGQ4OThhMi4uMjk2ODU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZU1hcFJlc291cmNlLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VNYXBSZXNvdXJj
ZS5qcwpAQCAtMzEsNyArMzEsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2UgPSBm
dW5jdGlvbih1cmwsIHNvdXJjZU1hcCkKICAgICBjb25zb2xlLmFzc2VydChzb3VyY2VNYXApOwog
CiAgICAgdGhpcy5fc291cmNlTWFwID0gc291cmNlTWFwOwotICAgIHRoaXMuX2NvbnRlbnRSZXF1
ZXN0ZWQgPSBmYWxzZTsKIAogICAgIHZhciBpbmhlcml0ZWRNSU1FVHlwZSA9IHRoaXMuX3NvdXJj
ZU1hcC5vcmlnaW5hbFNvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2Ug
PyB0aGlzLl9zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlLnN5bnRoZXRpY01JTUVUeXBlIDog
bnVsbDsKIApAQCAtNzUsNTAgKzc0LDUzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJj
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByZXNvdXJjZVVSTENvbXBvbmVudHMucGF0
aC5zdWJzdHJpbmcoc291cmNlTWFwcGluZ0Jhc2VQYXRoVVJMQ29tcG9uZW50cy5wYXRoLmxlbmd0
aCwgcmVzb3VyY2VVUkxDb21wb25lbnRzLmxlbmd0aCk7CiAgICAgfSwKIAotICAgIGNhblJlcXVl
c3RDb250ZW50RnJvbUJhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAh
dGhpcy5fY29udGVudFJlcXVlc3RlZDsKLSAgICB9LAotCiAgICAgcmVxdWVzdENvbnRlbnRGcm9t
QmFja2VuZDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICB0aGlzLl9jb250ZW50
UmVxdWVzdGVkID0gdHJ1ZTsKLQogICAgICAgICAvLyBSZXZlcnQgdGhlIG1hcmtBc0ZpbmlzaGVk
IHRoYXQgd2FzIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgICB0aGlzLnJldmVydE1h
cmtBc0ZpbmlzaGVkKCk7CiAKICAgICAgICAgdmFyIGlubGluZUNvbnRlbnQgPSB0aGlzLl9zb3Vy
Y2VNYXAuc291cmNlQ29udGVudCh0aGlzLnVybCk7CiAgICAgICAgIGlmIChpbmxpbmVDb250ZW50
KSB7CiAgICAgICAgICAgICAvLyBGb3JjZSBpbmxpbmUgY29udGVudCB0byBiZSBhc3luY2hyb25v
dXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIGxvYWQgcGF0dGVybi4KLSAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGtu
b3cgdGhlIE1JTUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1ZXNzIGJ5IGFuYWx5emluZyB0
aGUgY29udGVudD8KLSAgICAgICAgICAgICAgICBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZC5jYWxs
KHRoaXMsIG51bGwsIGlubGluZUNvbnRlbnQsIHRoaXMubWltZVR5cGUsIDIwMCk7Ci0gICAgICAg
ICAgICB9LmJpbmQodGhpcykpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGtub3cg
dGhlIE1JTUUtdHlwZSBmb3IgaW5saW5lIGNvbnRlbnQuIEd1ZXNzIGJ5IGFuYWx5emluZyB0aGUg
Y29udGVudD8KKyAgICAgICAgICAgIC8vIFJldHVybnMgYSBwcm9taXNlLgorICAgICAgICAgICAg
cmV0dXJuIHNvdXJjZU1hcFJlc291cmNlTG9hZGVkLmNhbGwodGhpcywgbnVsbCwgaW5saW5lQ29u
dGVudCwgdGhpcy5taW1lVHlwZSwgMjAwKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZnVuY3Rpb24gc291cmNlTWFwUmVzb3VyY2VMb2FkRXJyb3IoZXJy
b3IsIGJvZHksIG1pbWVUeXBlLCBzdGF0dXNDb2RlKQorICAgICAgICB7CisgICAgICAgICAgICB0
aGlzLm1hcmtBc0ZhaWxlZCgpOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7
CisgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLAorICAgICAgICAgICAgICAgIGNvbnRlbnQ6
IGJvZHkuY29udGVudCwKKyAgICAgICAgICAgICAgICBtaW1lVHlwZTogbWltZVR5cGUsCisgICAg
ICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZQorICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZChlcnJvciwg
Ym9keSwgbWltZVR5cGUsIHN0YXR1c0NvZGUpCisgICAgICAgIGZ1bmN0aW9uIHNvdXJjZU1hcFJl
c291cmNlTG9hZGVkKGJvZHksIG1pbWVUeXBlLCBzdGF0dXNDb2RlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBjb25zdCBiYXNlNjRlbmNvZGVkID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmIChl
cnJvciB8fCBzdGF0dXNDb2RlID49IDQwMCkgewotICAgICAgICAgICAgICAgIHRoaXMubWFya0Fz
RmFpbGVkKCk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIGJvZHksIGJhc2U2NGVu
Y29kZWQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChzdGF0dXNDb2RlID49IDQwMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc291cmNl
TWFwUmVzb3VyY2VMb2FkRXJyb3IoZXJyb3IsIGJvZHksIG1pbWVUeXBlLCBzdGF0dXNDb2RlKTsK
IAogICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwaWNraW5nIHRoZSBiZXN0
IE1JTUUtdHlwZS4gUmlnaHQgbm93IHRoZSBmaWxlIGV4dGVuc2lvbiBpcyB0aGUgYmVzdCBiZXQu
CiAgICAgICAgICAgICAvLyBUaGUgY29uc3RydWN0b3Igc2V0IE1JTUUtdHlwZSBiYXNlZCBvbiB0
aGUgZmlsZSBleHRlbnNpb24gYW5kIHdlIGlnbm9yZSBtaW1lVHlwZSBoZXJlLgogCiAgICAgICAg
ICAgICB0aGlzLm1hcmtBc0ZpbmlzaGVkKCk7CiAKLSAgICAgICAgICAgIGNhbGxiYWNrKG51bGws
IGJvZHksIGJhc2U2NGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSh7CisgICAgICAgICAgICAgICAgY29udGVudDogYm9keS5jb250ZW50LAorICAgICAgICAgICAg
ICAgIG1pbWVUeXBlOiBtaW1lVHlwZSwKKyAgICAgICAgICAgICAgICBiYXNlNjRlbmNvZGVkOiBi
YXNlNjRlbmNvZGVkLAorICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFOZXR3b3JrQWdlbnQubG9h
ZFJlc291cmNlKSB7CiAgICAgICAgICAgICBzb3VyY2VNYXBSZXNvdXJjZUxvYWRlZC5jYWxsKHRo
aXMsICJlcnJvcjogbm8gTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZSIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJv
cigiTm8gTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZSIpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZhciBmcmFtZUlkZW50aWZpZXIgPSBudWxsOwpAQCAtMTI4LDkgKzEzMCw3IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VNYXBSZXNvdXJjZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghZnJhbWVJ
ZGVudGlmaWVyKQogICAgICAgICAgICAgZnJhbWVJZGVudGlmaWVyID0gV2ViSW5zcGVjdG9yLmZy
YW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZS5pZDsKIAotICAgICAgICBOZXR3b3JrQWdlbnQu
bG9hZFJlc291cmNlKGZyYW1lSWRlbnRpZmllciwgdGhpcy51cmwsIHNvdXJjZU1hcFJlc291cmNl
TG9hZGVkLmJpbmQodGhpcykpOwotCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gTmV0d29ya0FnZW50LmxvYWRSZXNvdXJjZS5wcm9taXNlKGZyYW1lSWRlbnRpZmllciwgdGhp
cy51cmwpLnRoZW4oc291cmNlTWFwUmVzb3VyY2VMb2FkZWQuYmluZCh0aGlzKSkuY2F0Y2goc291
cmNlTWFwUmVzb3VyY2VMb2FkRXJyb3IuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIGNyZWF0
ZVNvdXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVz
b3VyY2VDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1Jlc291cmNlQ29udGVudFZpZXcuanMKaW5kZXggMGI5OTRhZC4uMTUwYmM1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvUmVzb3Vy
Y2VDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9SZXNvdXJjZUNvbnRlbnRWaWV3LmpzCkBAIC00Myw3ICs0Myw3IEBAIFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZUNvbnRlbnRWaWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UsIHN0eWxlQ2xhc3NO
YW1lKQogICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX21v
dXNlV2FzQ2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAKICAgICAvLyBSZXF1ZXN0IGNvbnRl
bnQgbGFzdCBzbyB0aGUgc3Bpbm5lciB3aWxsIGFsd2F5cyBiZSByZW1vdmVkIGluIGNhc2UgdGhl
IGNvbnRlbnQgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLgotICAgIHJlc291cmNlLnJlcXVlc3RD
b250ZW50KHRoaXMuX2NvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKSk7CisgICAgcmVzb3VyY2Uu
cmVxdWVzdENvbnRlbnQoKS50aGVuKHRoaXMuX2NvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKSku
Y2F0Y2godGhpcy5fY29udGVudEVycm9yLmJpbmQodGhpcykpOwogCiAgICAgaWYgKCF0aGlzLm1h
bmFnZXNPd25Jc3N1ZXMpIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmlzc3VlTWFuYWdlci5hZGRF
dmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Jc3N1ZU1hbmFnZXIuRXZlbnQuSXNzdWVXYXNBZGRl
ZCwgdGhpcy5faXNzdWVXYXNBZGRlZCwgdGhpcyk7CkBAIC04NiwyMSArODYsMjAgQEAgV2ViSW5z
cGVjdG9yLlJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAgLy8gUHJpdmF0
ZQogCi0gICAgX2NvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKHJlc291cmNlLCBjb250ZW50LCBi
YXNlNjRFbmNvZGVkKQorICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJz
KQogICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGZhaWxlZCBsb2Fkcy4KLSAgICAgICAgaWYg
KHRoaXMucmVzb3VyY2UuZmFpbGVkKSB7Ci0gICAgICAgICAgICAvLyBEb24ndCBzaG93IGFuIGVy
cm9yIG1lc3NhZ2UgaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBlcnJvciBtZXNzYWdlIHNob3dpbmcg
KGxpa2Ugb25lIGFkZGVkIGJ5IGFkZElzc3VlLikKLSAgICAgICAgICAgIGlmICh0aGlzLmVsZW1l
bnQucXVlcnlTZWxlY3RvcigiLm1lc3NhZ2UtdGV4dC12aWV3LmVycm9yIikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4o
KTsKLSAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuY3Jl
YXRlTWVzc2FnZVRleHRWaWV3KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQW4gZXJyb3Igb2NjdXJy
ZWQgdHJ5aW5nIHRvIGxvYWQgdGhlIHJlc291cmNlLiIpLCB0cnVlKSk7CisgICAgICAgIC8vIENv
bnRlbnQgaXMgcmVhZHkgdG8gc2hvdywgY2FsbCB0aGUgcHVibGljIG1ldGhvZCBub3cuCisgICAg
ICAgIHRoaXMuY29udGVudEF2YWlsYWJsZShwYXJhbWV0ZXJzLmNvbnRlbnQsIHBhcmFtZXRlcnMu
YmFzZTY0RW5jb2RlZCk7CisgICAgfSwKKworICAgIF9jb250ZW50RXJyb3I6IGZ1bmN0aW9uKGVy
cm9yKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3Qgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGlmIHRo
ZXJlIGlzIGFscmVhZHkgYW4gZXJyb3IgbWVzc2FnZSBzaG93aW5nIChsaWtlIG9uZSBhZGRlZCBi
eSBhZGRJc3N1ZS4pCisgICAgICAgIGlmICh0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcigiLm1l
c3NhZ2UtdGV4dC12aWV3LmVycm9yIikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
IAotICAgICAgICAvLyBDb250ZW50IGlzIHJlYWR5IHRvIHNob3csIGNhbGwgdGhlIHB1YmxpYyBt
ZXRob2Qgbm93LgotICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUoY29udGVudCwgYmFzZTY0
RW5jb2RlZCk7CisgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmNyZWF0ZU1lc3NhZ2VUZXh0
VmlldyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoZXJyb3IubWVzc2FnZSksIHRydWUpKTsKICAgICB9
LAogCiAgICAgX2lzc3VlV2FzQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0
b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VD
b2RlVGV4dEVkaXRvci5qcwppbmRleCBmNjY4MjEzLi45NTg1ZGE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5qcwpAQCAtNzAsNyArNzAsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlKQogICAgIGVsc2UKICAgICAgICAg
dGhpcy5fc291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
LkV2ZW50LlNvdXJjZU1hcEFkZGVkLCB0aGlzLl9zb3VyY2VDb2RlU291cmNlTWFwQWRkZWQsIHRo
aXMpOwogCi0gICAgc291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxh
YmxlLmJpbmQodGhpcykpOworICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoKS50aGVuKHRo
aXMuX2NvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKSk7CiAKICAgICAvLyBGSVhNRTogQ21kK0wg
c2hvcmN1dCBkb2Vzbid0IGFjdHVhbGx5IHdvcmsuCiAgICAgbmV3IFdlYkluc3BlY3Rvci5LZXli
b2FyZFNob3J0Y3V0KFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVyLkNvbW1h
bmQsICJMIiwgdGhpcy5zaG93R29Ub0xpbmVEaWFsb2cuYmluZCh0aGlzKSwgdGhpcy5lbGVtZW50
KTsKQEAgLTQzNiw4ICs0MzYsMTIgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY29udGVudERpZFBvcHVsYXRlKCk7CiAgICAg
fSwKIAotICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihzb3VyY2VDb2RlLCBjb250ZW50
LCBiYXNlNjRFbmNvZGVkKQorICAgIF9jb250ZW50QXZhaWxhYmxlOiBmdW5jdGlvbihwYXJhbWV0
ZXJzKQogICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSBwYXJhbWV0ZXJzLnNvdXJjZUNv
ZGU7CisgICAgICAgIHZhciBjb250ZW50ID0gcGFyYW1ldGVycy5jb250ZW50OworICAgICAgICB2
YXIgYmFzZTY0RW5jb2RlZCA9IHBhcmFtZXRlcnMuYmFzZTY0RW5jb2RlZDsKKwogICAgICAgICBj
b25zb2xlLmFzc2VydChzb3VyY2VDb2RlID09PSB0aGlzLl9zb3VyY2VDb2RlKTsKICAgICAgICAg
Y29uc29sZS5hc3NlcnQoIWJhc2U2NEVuY29kZWQpOwogCkBAIC02MzksNyArNjQzLDcgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0
aGlzLl9pbmxpbmVTY3JpcHRDb250ZW50UG9wdWxhdGVkID0gcGVuZGluZ1JlcXVlc3RDb3VudDsK
IAotICAgICAgICBmdW5jdGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKGVycm9yLCBjb250ZW50
KQorICAgICAgICBmdW5jdGlvbiBzY3JpcHRDb250ZW50QXZhaWxhYmxlKHBhcmFtZXRlcnMpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB3ZSBhcmUgc3RpbGwgd2Fp
dGluZyBmb3IgY29udGVudCBmcm9tIG90aGVyIHNjcmlwdHMuCiAgICAgICAgICAgICBpZiAoLS1w
ZW5kaW5nUmVxdWVzdENvdW50KQpAQCAtNjg5LDcgKzY5Myw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGJvdW5kU2NyaXB0
Q29udGVudEF2YWlsYWJsZSA9IHNjcmlwdENvbnRlbnRBdmFpbGFibGUuYmluZCh0aGlzKTsKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgc2NyaXB0c1tpXS5yZXF1ZXN0Q29udGVudChib3VuZFNjcmlwdENvbnRlbnRBdmFpbGFibGUp
OworICAgICAgICAgICAgc2NyaXB0c1tpXS5yZXF1ZXN0Q29udGVudCgpLnRoZW4oYm91bmRTY3Jp
cHRDb250ZW50QXZhaWxhYmxlKTsKICAgICB9LAogCiAgICAgX3BvcHVsYXRlV2l0aFNjcmlwdENv
bnRlbnQ6IGZ1bmN0aW9uKCkKQEAgLTcwNyw4ICs3MTEsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICBjb25zb2xlLmFzc2VydChzY3Jp
cHRzWzBdLnJhbmdlLnN0YXJ0TGluZSA9PT0gMCk7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNj
cmlwdHNbMF0ucmFuZ2Uuc3RhcnRDb2x1bW4gPT09IDApOwogCi0gICAgICAgIGZ1bmN0aW9uIHNj
cmlwdENvbnRlbnRBdmFpbGFibGUoZXJyb3IsIGNvbnRlbnQpCisgICAgICAgIGZ1bmN0aW9uIHNj
cmlwdENvbnRlbnRBdmFpbGFibGUocGFyYW1ldGVycykKICAgICAgICAgeworICAgICAgICAgICAg
dmFyIGNvbnRlbnQgPSBwYXJhbWV0ZXJzLmNvbnRlbnQ7CiAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fcmVxdWVzdGluZ1NjcmlwdENvbnRlbnQ7CiAKICAgICAgICAgICAgIC8vIEFib3J0IGlmIHRo
ZSBmdWxsIGNvbnRlbnQgcG9wdWxhdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoaXMgYXN5bmMgY2Fs
bGJhY2suCkBAIC03MjMsNyArNzI4LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVu
dCA9IHRydWU7CiAKLSAgICAgICAgc2NyaXB0c1swXS5yZXF1ZXN0Q29udGVudChzY3JpcHRDb250
ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOworICAgICAgICBzY3JpcHRzWzBdLnJlcXVlc3RDb250
ZW50KCkudGhlbihzY3JpcHRDb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogICAgIH0sCiAK
ICAgICBfbWF0Y2hlc1NvdXJjZUNvZGVMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0
aW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>