<?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>31538</bug_id>
          
          <creation_ts>2009-11-16 02:16:24 -0800</creation_ts>
          <short_desc>Web Inspector: Wrong console output for Regexp escape sequence</short_desc>
          <delta_ts>2009-11-30 13:46:16 -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 (Deprecated)</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>163905</commentid>
    <comment_count>0</comment_count>
      <attachid>43282</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2009-11-16 02:16:24 -0800</bug_when>
    <thetext>Created attachment 43282
example of wrong output

console output for Regexp escapes the backslash for escape sequence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165629</commentid>
    <comment_count>1</comment_count>
      <attachid>43654</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 12:05:17 -0800</bug_when>
    <thetext>Created attachment 43654
[PATCH] Half Way There

This isn&apos;t a land-able patch, it is only for discussion. Its likely we should refactor some areas of format printing.

For this bug, regexes where using _formatvalue and not _formatregex because it was treating Proxied regexs as undecorated.  Also, _formatregex was actually adding backslashes, not removing any!  The behavior after this patch is:
http://grab.by/Iwn

Note that there is a difference in string formatting. Is this the desired behavior (different in multiple cases):

  &gt; &quot;test&quot; // Case 1
  test

  &gt; console.log(&quot;%s&quot;, &quot;test&quot;)
  test

  &gt; [&quot;test&quot;] // Case 2
  [&quot;test&quot;]

  &gt; ({a:&quot;test&quot;})
  a : &quot;hi&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165630</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-21 12:06:30 -0800</bug_when>
    <thetext>&gt;   &gt; ({a:&quot;test&quot;})
&gt;   a : &quot;hi&quot;

Hehe, sorry about that typo:

  &gt; ({a:&quot;test&quot;})
  a: &quot;test&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165678</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-21 17:08:03 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Note that there is a difference in string formatting. Is this the desired
&gt; behavior (different in multiple cases):
&gt; 
&gt;   &gt; &quot;test&quot; // Case 1
&gt;   test
&gt; 
&gt;   &gt; console.log(&quot;%s&quot;, &quot;test&quot;)
&gt;   test

We should quote the string in the first case, but not for console.log.

&gt;   &gt; [&quot;test&quot;] // Case 2
&gt;   [&quot;test&quot;]

Looks fine.

&gt;   &gt; ({a:&quot;test&quot;})
&gt;   a : &quot;test&quot;

This should have braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166347</commentid>
    <comment_count>4</comment_count>
      <attachid>43826</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-24 21:32:44 -0800</bug_when>
    <thetext>Created attachment 43826
[PATCH] Desired Behavior

I spent some time trying to diagnose the issues with formatting. And write them down so I remember

Output of Single Values:

  - strings  =&gt; &quot;quoted&quot;
  - number   =&gt; number
  - regex    =&gt; /form/
  - date     =&gt; date string
  - function =&gt; string
  - node     =&gt; html tree
  - error    =&gt; red error message, no quotes
  - array + object = special behavior


Limitations Depending on how they are Output:

  - typing a literal/variable in the console
    - functions should output fully (multiline)
    - string should output fully

  - a value containing in an array
    - functions should output abbreviated (one line)
    - strings should output abbreviated (100 chars)

  - a value of an object property
    - functions should output abbreviated (one line)
    - strings should output abbreviated (100 chars)

  - output from console.log() and family (except dir)
    - strings should NOT be quoted

  - output from the background should NOT be quoted
    - XHR Responses
    - Profile Finished


What should Probably be Linkified:

  - strings, function strings, node contents
  - regexs?  


All in all, I think my patch brings us to this behavior, however testing it turned out to be harder then I thought. At some point the test results had quotes which my manual tests did not show. My tests try three things:

  1. straight console.log
  2. console.log in an array
  3. variable execution in the console


If someone can find the time to refactor, areas to consider:

  - InjectedScript side
    - Object.describe takes an &quot;abbreviate&quot; flag
    - Object.type determines the type used later in _format(s)

  - Inspector side
    - entry point for console.log messages?
    - entry point for profile finished messages?
    - other generic messages like tips etc?
    - WebInspector.ConsoleView.prototype._format can be simplified
    - WebInspector.ConsoleMessage._format is complex, calls the above
  
  - Other
    - (new RegExp(...)).toString() doesn&apos;t handle &quot;/&quot; well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166361</commentid>
    <comment_count>5</comment_count>
      <attachid>43826</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-24 23:57:09 -0800</bug_when>
    <thetext>Comment on attachment 43826
[PATCH] Desired Behavior

&gt; +CONSOLE MESSAGE: line 49: Sat Nov 21 2009 14:25:45 GMT-0500 (EST)
&gt; +CONSOLE MESSAGE: line 50: Sat Nov 21 2009 14:25:45 GMT-0500 (EST)

Not everybody is on EST, bots will probably fail on this one. (r- due to this).

&gt; +console-format.html:49Sat Nov 21 2009 14:25:45 GMT-0500 (EST)
&gt; +console-format.html:50[Sat Nov 21 2009 14:25:45 GMT-0500 (EST)]
&gt; +&quot;Sat Nov 21 2009 14:25:45 GMT-0500 (EST)&quot;

Ditto.

&gt; +var node = null; // NOTE: This is filled in after the page has loaded in doit();

Why not to push everything in doit, leaving only var globals = [] here?

&gt; +function loopOverGlobals(current)

Ok, so you want to wait for both logs and eval to be formatted before you dump the next value.

&gt; +function frontend_evaluateStringInConsole()
&gt; +{
&gt; +    var expression = &quot;\&quot;this is a test of a raw string in the console\&quot;&quot;;

Not sure why you need to special case this - we already check it for &quot;test&quot;. Should you change &quot;test&quot; to &quot;raw string should be quoted on eval and array, not in log.&quot; or something?

&gt; +function frontend_evalExpression(expression)

Nit: We could refactor ConsoleView.prototype._enterKeyPressed for better testability (extract what you need into public &quot;evaluateExpressionInConsole&quot; or something. We already have a bunch of evalIn and doEvalIn though.

&gt; +    this.knownFormatters = {

This does not need to be public.

&gt; +    this.undecoratedTypes = {

Ditto.

&gt; -        if (isProxy &amp;&amp; type !== &quot;object&quot; &amp;&amp; type !== &quot;function&quot; &amp;&amp; type !== &quot;array&quot; &amp;&amp; type !== &quot;node&quot;) {
&gt; +        if (isProxy &amp;&amp; !(type in this.knownFormatters)) {

So the idea here was that everything comes as a proxy. I think !isProxy means null only (worth checking).
Now for primitive values, we expected description to be good, so we were unwrapping them and dumping descriptions to console (via marking them as undecorated).
It is just that we did not delete primitive formatters when migrated to proxies for primitive values (i.e. formatdate, formatstring are unused on ToT).
I think what you should do is rename your knownFormatters to customFormatters and leave only object, function, array, node, string and regex there.
Everything else should fall under undecorated types - not even need to check and create enum for them - just output descriptions there.

&gt;      _formatdate: function(date, elem)

Should not exist.

&gt;      },

&gt;      _formatstring: function(str, elem)
&gt;      {
&gt; -        elem.appendChild(document.createTextNode(&quot;\&quot;&quot; + str + &quot;\&quot;&quot;));

&gt;      _formatregexp: function(re, elem)
&gt;      {
&gt; -        var formatted = String(re.description).replace(/([\\\/])/g, &quot;\\$1&quot;).replace(/\\(\/[gim]*)$/, &quot;$1&quot;).substring(1);
&gt; +        var formatted = String(re.description).replace(/\\(.)/g, &quot;$1&quot;);

It is not clear to me why this is needed. Is the one in Object.describe bad? Should it be fixed instead? That way regex won&apos;t need custom formatter.

&gt;          for (var i = 0; i &lt; parameters.length; ++i) {
&gt; -            if (Object.proxyType(parameters[i]) === &quot;string&quot;)
&gt; -                formattedResult.appendChild(WebInspector.linkifyStringAsFragment(parameters[i].description));
&gt; -            else
&gt; -                formattedResult.appendChild(formatForConsole(parameters[i]));
&gt; +            var param = parameters[i];
&gt; +            if (Object.proxyType(param) === &quot;string&quot;) {
&gt; +                if (this.originatingCommand &amp;&amp; this.level === WebInspector.ConsoleMessage.MessageLevel.Log) {
&gt; +                    var quotedString = &quot;\&quot;&quot; + param.description.replace(/&quot;/g, &quot;\\\&quot;&quot;) + &quot;\&quot;&quot;;
&gt; +                    formattedResult.appendChild(WebInspector.linkifyStringAsFragment(quotedString));

I guess you expect this to be evaluation result only. My question is how can something from console raw eval have parameters?
In other words, should we special case this earlier on entering _format? Does it make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166636</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-25 22:05:41 -0800</bug_when>
    <thetext>Thanks for the great review! I&apos;ve worked on a patch that I want to clean up a bit and post which takes many of these comments into consideration.

(In reply to comment #5)
&gt; (From update of attachment 43826 [details])
&gt; &gt; +CONSOLE MESSAGE: line 49: Sat Nov 21 2009 14:25:45 GMT-0500 (EST)
&gt; &gt; +CONSOLE MESSAGE: line 50: Sat Nov 21 2009 14:25:45 GMT-0500 (EST)
&gt; 
&gt; Not everybody is on EST, bots will probably fail on this one. (r- due to this).

I don&apos;t know a solution to this =/. Anyone know how I can control how this behaves?

  (new Date).toString()

Maybe I should leave Date out.


&gt; &gt; +var node = null; // NOTE: This is filled in after the page has loaded in doit();
&gt; 
&gt; Why not to push everything in doit, leaving only var globals = [] here?

Sounds good.


&gt; &gt; +function loopOverGlobals(current)
&gt; 
&gt; Ok, so you want to wait for both logs and eval to be formatted before you dump
&gt; the next value.

Exactly. I thought it would be best for someone using the test to see the 3 different cases right next to each other, rather then making them scroll up and down to compare.


&gt; &gt; +function frontend_evaluateStringInConsole()
&gt; &gt; +{
&gt; &gt; +    var expression = &quot;\&quot;this is a test of a raw string in the console\&quot;&quot;;
&gt; 
&gt; Not sure why you need to special case this - we already check it for &quot;test&quot;.
&gt; Should you change &quot;test&quot; to &quot;raw string should be quoted on eval and array, not
&gt; in log.&quot; or something?

Removed. That was my original use case, you&apos;re right that it is not needed.


&gt; &gt; +function frontend_evalExpression(expression)
&gt; 
&gt; Nit: We could refactor ConsoleView.prototype._enterKeyPressed for better
&gt; testability (extract what you need into public &quot;evaluateExpressionInConsole&quot; or
&gt; something. We already have a bunch of evalIn and doEvalIn though.

This area really bothered me in debugging. There is a chain of two or three functions that do basically one thing each, and I think (I haven&apos;t looked deeper yet) that they chain always happens from the top. I might simplify this.


&gt; &gt; +    this.knownFormatters = {
&gt; 
&gt; This does not need to be public.

Changed and renamed to this._customFormatters.


&gt; &gt; +    this.undecoratedTypes = {
&gt; 
&gt; Ditto.

Removed in recent refactoring.


&gt; 
&gt; &gt;      _formatdate: function(date, elem)
&gt; 
&gt; Should not exist.

[See Next Comment]

&gt; 
&gt; &gt;      },
&gt; 
&gt; &gt;      _formatstring: function(str, elem)
&gt; &gt;      {
&gt; &gt; -        elem.appendChild(document.createTextNode(&quot;\&quot;&quot; + str + &quot;\&quot;&quot;));
&gt; 
&gt; &gt;      _formatregexp: function(re, elem)
&gt; &gt;      {
&gt; &gt; -        var formatted = String(re.description).replace(/([\\\/])/g, &quot;\\$1&quot;).replace(/\\(\/[gim]*)$/, &quot;$1&quot;).substring(1);
&gt; &gt; +        var formatted = String(re.description).replace(/\\(.)/g, &quot;$1&quot;);
&gt; 
&gt; It is not clear to me why this is needed. Is the one in Object.describe bad?
&gt; Should it be fixed instead? That way regex won&apos;t need custom formatter.

Yes, Object.describe for regex was using a rather complicated replace (like you see above) which didn&apos;t seem useful. I simplified it to just String(regex).

The only custom formatters that remain (after the recent refactor) are what you would expect:

  - node
  - array
  - object

Everything else just prints out the description (built from Object.describe).


&gt; &gt;          for (var i = 0; i &lt; parameters.length; ++i) {
&gt; &gt; -            if (Object.proxyType(parameters[i]) === &quot;string&quot;)
&gt; &gt; -                formattedResult.appendChild(WebInspector.linkifyStringAsFragment(parameters[i].description));
&gt; &gt; -            else
&gt; &gt; -                formattedResult.appendChild(formatForConsole(parameters[i]));
&gt; &gt; +            var param = parameters[i];
&gt; &gt; +            if (Object.proxyType(param) === &quot;string&quot;) {
&gt; &gt; +                if (this.originatingCommand &amp;&amp; this.level === WebInspector.ConsoleMessage.MessageLevel.Log) {
&gt; &gt; +                    var quotedString = &quot;\&quot;&quot; + param.description.replace(/&quot;/g, &quot;\\\&quot;&quot;) + &quot;\&quot;&quot;;
&gt; &gt; +                    formattedResult.appendChild(WebInspector.linkifyStringAsFragment(quotedString));
&gt; 
&gt; I guess you expect this to be evaluation result only. My question is how can
&gt; something from console raw eval have parameters?
&gt; In other words, should we special case this earlier on entering _format? Does
&gt; it make sense?

You are correct (I expected a raw eval, and there should be a special case for something with parameters). I did actually add a special case for things with parameters. However, rather then discuss this my next patch has made things cleaner and more obvious.


&gt; &gt; -        if (isProxy &amp;&amp; type !== &quot;object&quot; &amp;&amp; type !== &quot;function&quot; &amp;&amp; type !== &quot;array&quot; &amp;&amp; type !== &quot;node&quot;) {
&gt; &gt; +        if (isProxy &amp;&amp; !(type in this.knownFormatters)) {
&gt; 
&gt; So the idea here was that everything comes as a proxy. I think !isProxy means
&gt; null only (worth checking).

I never ran into a case where isProxy was false. However, I left that in in case in the future someone wants to use WebInspector.console._format for something else.  I suspect the reason is because nothing calls that _format without already explicitly wrapping primitives (there is commented code in the ConsoleMessage&apos;s _format that does this).

&gt; Now for primitive values, we expected description to be good, so we were
&gt; unwrapping them and dumping descriptions to console (via marking them as
&gt; undecorated).
&gt;
&gt; It is just that we did not delete primitive formatters when migrated to proxies
&gt; for primitive values (i.e. formatdate, formatstring are unused on ToT).
&gt; I think what you should do is rename your knownFormatters to customFormatters
&gt; and leave only object, function, array, node, string and regex there.
&gt; Everything else should fall under undecorated types - not even need to check
&gt; and create enum for them - just output descriptions there.

Correct the description is good. Thanks for that insight, this drastically simplified ConsoleView&apos;s _format code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166645</commentid>
    <comment_count>7</comment_count>
      <attachid>43895</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-25 22:29:27 -0800</bug_when>
    <thetext>Created attachment 43895
[PATCH] Desired Behavior + Some Refactoring

This is another step in the right direction.  This patch includes:

  - a bunch of style fixes / improvements to ConsoleView
  - simplification and clarification of the current _format flow
  - the same test as before but without the Date test

Because the patch is difficult to read. Here is a better view of the reformulated _format functions:

  - ConsoleView&apos;s _format (dispatch to formatter):
    http://pastie.textmate.org/private/celurrgbupm5jvxu2hg

  - ConsoleMessage&apos;s _format (workflow) =&gt; 
    http://pastie.textmate.org/private/i0o8w6uuj2khupo4bwdrkg

Issues I have:

  - test output of linkify doesn&apos;t show that the output is a link? I may have to use something other then dumpMessages
  - test output contains quotes around text that doesn&apos;t appear in manual console tests.
  - again, I cannot find a case for _formaterror and it was removed. Could it happen?

Next Steps:

  - remove the hack I made checking for this.originatingCommand. Meaning we should separate handling of user eval&apos;d commands in a better way or provide a more concerete way to check for this. (Maybe yet another parameter in the constructor?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166651</commentid>
    <comment_count>8</comment_count>
      <attachid>43896</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-25 22:53:41 -0800</bug_when>
    <thetext>Created attachment 43896
[PATCH] Desired Behavior + Some Refactoring

Fixed some style issues I had.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166653</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-25 23:00:56 -0800</bug_when>
    <thetext>_formaterror could be triggered by:

try {
    window.foo.x = 2;
} catch (e) {
    console.log(e);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166654</commentid>
    <comment_count>10</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-25 23:02:00 -0800</bug_when>
    <thetext>But mybe you should just use console.error in that case to get red?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166709</commentid>
    <comment_count>11</comment_count>
      <attachid>43896</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-26 05:59:34 -0800</bug_when>
    <thetext>Comment on attachment 43896
[PATCH] Desired Behavior + Some Refactoring

This looks right, although lots of changes. But I think you covered pretty much everything with the tests, so we are safe!

&gt; +    globals = [regex1, regex2, str, error, node, func, multilinefunc, num, linkify, undefined];

Could you please add null to the list?

&gt; +        for (var i = 0; i &lt; parameters.length; ++i)
&gt;              if (typeof parameters[i] !== &quot;object&quot; &amp;&amp; typeof parameters[i] !== &quot;function&quot;)
&gt;                  parameters[i] = WebInspector.ObjectProxy.wrapPrimitiveValue(parameters[i]);
&gt; -        }

I think we use {} for more-than-one-line blocks even if that is single statement. No?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166824</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-26 21:29:27 -0800</bug_when>
    <thetext>&gt; &gt; +    globals = [regex1, regex2, str, error, node, func, multilinefunc, num, linkify, undefined];
&gt; 
&gt; Could you please add null to the list?

Sure.


&gt; &gt; +        for (var i = 0; i &lt; parameters.length; ++i)
&gt; &gt;              if (typeof parameters[i] !== &quot;object&quot; &amp;&amp; typeof parameters[i] !== &quot;function&quot;)
&gt; &gt;                  parameters[i] = WebInspector.ObjectProxy.wrapPrimitiveValue(parameters[i]);
&gt; &gt; -        }
&gt; 
&gt; I think we use {} for more-than-one-line blocks even if that is single
&gt; statement. No?

I&apos;ve seen cases where there aren&apos;t braces, including Node.prototype.enclosingNodeOrSelfWithNodeNameInArray which is four layers deep. Timothy, this would be a good point for the style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167412</commentid>
    <comment_count>13</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-30 13:46:16 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/51506
r51506 = 723f16eb9a6dcad881b81de748e9a8c1b68c3062

Closing this bug because it solved the original bug (and more). Due to the comments keep this bug in mind for future discussion on console logging behavior.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>43282</attachid>
            <date>2009-11-16 02:16:24 -0800</date>
            <delta_ts>2009-11-16 02:16:24 -0800</delta_ts>
            <desc>example of wrong output</desc>
            <filename>Screen shot 2009-11-16 at 7.09.52 PM.png</filename>
            <type>image/png</type>
            <size>7240</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">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
gg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43654</attachid>
            <date>2009-11-21 12:05:17 -0800</date>
            <delta_ts>2009-11-24 21:32:44 -0800</delta_ts>
            <desc>[PATCH] Half Way There</desc>
            <filename>format.patch</filename>
            <type>text/plain</type>
            <size>8231</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5ZDc0YWIzLi43MDhkZjIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMTEt
MjEgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXcm9uZyBj
b25zb2xlIG91dHB1dCBmb3IgUmVnRXhwIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MzgKKworICAgICAgICAqIGluc3Bl
Y3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6IHRlc3RlZCBtb3JlIHByaW1hdGl2ZXMgYW5kIHdoZW4gdGhleSBh
cmUgaW4gYW4gYXJyYXkKKwogMjAwOS0xMS0yMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1mb3JtYXQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtZm9ybWF0LWV4cGVjdGVkLnR4dAppbmRleCA1NWY2
NTBiLi4yMTExNTFmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1m
b3JtYXQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZv
cm1hdC1leHBlY3RlZC50eHQKQEAgLTIsMTAgKzIsNDIgQEAgQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDk6IE1lc3NhZ2UgZm9ybWF0IG51bWJlciAlaSwgJWQgYW5kICVmCiBDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMTA6IE1lc3NhZ2UgJXMgZm9yICVzCiBDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTE6IE9i
amVjdCAlbwogQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE2OiB0ZXN0LHRlc3QyLCwsdGVzdDQKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAyNzogdGVzdAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDI4OiB0
ZXN0CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjk6IDAuMTIKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAzMDogMC4xMgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDMxOiAvXnVybFwoXHMqKD86KD86Iig/
OlteXFxcIl18KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSoifCcoPzpbXlxcXCddfCg/OlxcW1xk
YS1mXXsxLDZ9XHM/fFwuKSkqJyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/
fFwuKSkqKVxzKlwpL2kKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzMjogL151cmxcKFxzKig/Oig/
OiIoPzpbXlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqInwnKD86W15cXFwnXXwoPzpc
XFtcZGEtZl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQlJiotflx3XXwoPzpcXFtcZGEtZl17MSw2
fVxzP3xcLikpKilccypcKS9pCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzM6IC9mb29cXGJhclxz
YmF6L2kKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzNDogL2Zvb1xcYmFyXHNiYXovaQorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDM1OiBTYXQgTm92IDIxIDIwMDkgMTQ6MjU6NDUgR01ULTA1MDAgKEVT
VCkKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzNjogU2F0IE5vdiAyMSAyMDA5IDE0OjI1OjQ1IEdN
VC0wNTAwIChFU1QpCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzc6IEVycm9yOiBVbmtub3duIGVy
cm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzg6IEVycm9yOiBVbmtub3duIGVycm9yCitDT05T
T0xFIE1FU1NBR0U6IGxpbmUgMzk6IFtvYmplY3QgSFRNTEJvZHlFbGVtZW50XQorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDQwOiBbb2JqZWN0IEhUTUxCb2R5RWxlbWVudF0KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSA0MTogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfQorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDQyOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9CiBUZXN0cyB0aGF0IGNvbnNvbGUgbG9n
Z2luZyBkdW1wcyBwcm9wZXIgbWVzc2FnZXMuCiAKIGNvbnNvbGUtZm9ybWF0Lmh0bWw6OU1lc3Nh
Z2UgZm9ybWF0IG51bWJlciAxLCAyIGFuZCAzLjUKIGNvbnNvbGUtZm9ybWF0Lmh0bWw6MTBNZXNz
YWdlIGZvcm1hdCBmb3Igc3RyaW5nCiBjb25zb2xlLWZvcm1hdC5odG1sOjExT2JqZWN0IE9iamVj
dAogY29uc29sZS1mb3JtYXQuaHRtbDoxNlsidGVzdCIsICJ0ZXN0MiIsIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCAidGVzdDQiXQorY29uc29sZS1mb3JtYXQuaHRtbDoyN3Rlc3QKK2NvbnNvbGUtZm9y
bWF0Lmh0bWw6MjhbInRlc3QiXQorY29uc29sZS1mb3JtYXQuaHRtbDoyOTAuMTIKK2NvbnNvbGUt
Zm9ybWF0Lmh0bWw6MzBbMC4xMl0KK2NvbnNvbGUtZm9ybWF0Lmh0bWw6MzEvXnVybFwoXHMqKD86
KD86Iig/OlteXFxcIl18KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSoifCcoPzpbXlxcXCddfCg/
OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqJyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xkYS1mXXsx
LDZ9XHM/fFwuKSkqKVxzKlwpL2kKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6MzJbL151cmxcKFxzKig/
Oig/OiIoPzpbXlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqInwnKD86W15cXFwnXXwo
PzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQlJiotflx3XXwoPzpcXFtcZGEtZl17
MSw2fVxzP3xcLikpKilccypcKS9pXQorY29uc29sZS1mb3JtYXQuaHRtbDozMy9mb29cXGJhclxz
YmF6L2kKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6MzRbL2Zvb1xcYmFyXHNiYXovaV0KK2NvbnNvbGUt
Zm9ybWF0Lmh0bWw6MzVTYXQgTm92IDIxIDIwMDkgMTQ6MjU6NDUgR01ULTA1MDAgKEVTVCkKK2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6MzZbU2F0IE5vdiAyMSAyMDA5IDE0OjI1OjQ1IEdNVC0wNTAwIChF
U1QpXQorY29uc29sZS1mb3JtYXQuaHRtbDozN0Vycm9yOiBVbmtub3duIGVycm9yCitjb25zb2xl
LWZvcm1hdC5odG1sOjM4W0Vycm9yOiBVbmtub3duIGVycm9yXQorY29uc29sZS1mb3JtYXQuaHRt
bDozOTxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorY29uc29sZS1mb3JtYXQuaHRtbDo0MFs8Ym9k
eSBvbmxvYWQ9Im9ubG9hZCgpIj5dCitjb25zb2xlLWZvcm1hdC5odG1sOjQxZnVuY3Rpb24gKCkg
eyByZXR1cm4gMTsgfQorY29uc29sZS1mb3JtYXQuaHRtbDo0MltmdW5jdGlvbiAoKSB7IHJldHVy
biAxOyB9XQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1mb3Jt
YXQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCmluZGV4
IDJkNmNkMGMuLmYyMTJkYmMgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25z
b2xlLWZvcm1hdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1h
dC5odG1sCkBAIC0xNSw2ICsxNSwzMiBAQCBmdW5jdGlvbiBkb2l0KCkKICAgICBhcnJheVs0XSA9
ICJ0ZXN0NCI7CiAgICAgY29uc29sZS5sb2coYXJyYXkpOwogCisgICAgdmFyIGRhdGUgPSBuZXcg
RGF0ZSgxMjU4ODMxNTQ1NjUwKTsKKyAgICB2YXIgcmVnZXgxID0gL151cmxcKFxzKig/Oig/OiIo
PzpbXlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqInwnKD86W15cXFwnXXwoPzpcXFtc
ZGEtZl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQlJiotflx3XXwoPzpcXFtcZGEtZl17MSw2fVxz
P3xcLikpKilccypcKS9pOworICAgIHZhciByZWdleDIgPSBuZXcgUmVnRXhwKCJmb29cXFxcYmFy
XFxzYmF6IiwgImkiKTsKKyAgICB2YXIgc3RyID0gInRlc3QiOworICAgIHZhciBlcnJvciA9IG5l
dyBFcnJvcjsKKyAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmJvZHk7CisgICAgdmFyIGZ1bmMgPSBm
dW5jdGlvbigpIHsgcmV0dXJuIDE7IH07CisgICAgdmFyIG51bSA9IDEuMmUtMTsKKworICAgIGNv
bnNvbGUubG9nKHN0cik7CisgICAgY29uc29sZS5sb2coW3N0cl0pOworICAgIGNvbnNvbGUubG9n
KG51bSk7CisgICAgY29uc29sZS5sb2coW251bV0pOworICAgIGNvbnNvbGUubG9nKHJlZ2V4MSk7
CisgICAgY29uc29sZS5sb2coW3JlZ2V4MV0pOworICAgIGNvbnNvbGUubG9nKHJlZ2V4Mik7Cisg
ICAgY29uc29sZS5sb2coW3JlZ2V4Ml0pOworICAgIGNvbnNvbGUubG9nKGRhdGUpOworICAgIGNv
bnNvbGUubG9nKFtkYXRlXSk7CisgICAgY29uc29sZS5sb2coZXJyb3IpOworICAgIGNvbnNvbGUu
bG9nKFtlcnJvcl0pOworICAgIGNvbnNvbGUubG9nKG5vZGUpOworICAgIGNvbnNvbGUubG9nKFtu
b2RlXSk7CisgICAgY29uc29sZS5sb2coZnVuYyk7CisgICAgY29uc29sZS5sb2coW2Z1bmNdKTsK
KwogICAgIGR1bXBDb25zb2xlTWVzc2FnZXMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MjhhOWE1Li4wMGM4OGY3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDA5LTExLTIxICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogV3JvbmcgY29uc29sZSBvdXRwdXQgZm9yIFJlZ0V4cCBlc2NhcGUgc2VxdWVu
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNTM4
CisKKyAgICAgICAgVXBkYXRlZCBUZXN0OiBpbnNwZWN0b3IvY29uc29sZS1mb3JtYXQuaHRtbAor
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZVZpZXcucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZS5fZm9ybWF0ZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZVZpZXcucHJvdG90eXBlLl9mb3JtYXRzdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVWaWV3LnByb3RvdHlwZS5fZm9ybWF0cmVnZXhwKToKKwogMjAwOS0xMS0yMCAgSm9zZXBo
IFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
CmluZGV4IDc2NGVhMmQuLmEyMDE0NzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q29uc29sZVZpZXcuanMKQEAgLTkyLDYgKzkyLDI3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmll
dyA9IGZ1bmN0aW9uKGRyYXdlcikKICAgICB0aGlzLmxvZ0VsZW1lbnQgPSBjcmVhdGVGaWx0ZXJF
bGVtZW50LmNhbGwodGhpcywgIkxvZ3MiKTsKIAogICAgIHRoaXMuZmlsdGVyKHRoaXMuYWxsRWxl
bWVudCwgZmFsc2UpOworCisgICAgdGhpcy5rbm93bkZvcm1hdHRlcnMgPSB7CisgICAgICAgICJv
YmplY3QiOiAgIDEsCisgICAgICAgICJmdW5jdGlvbiI6IDEsCisgICAgICAgICJhcnJheSI6ICAg
IDEsCisgICAgICAgICJub2RlIjogICAgIDEsCisgICAgICAgICJyZWdleHAiOiAgIDEsCisgICAg
ICAgICJkYXRlIjogICAgIDEsCisgICAgICAgICJzdHJpbmciOiAgIDEgICAgLy8gSGFwcGVucyB3
aGVuIGluc2lkZSBhbiBBcnJheQorICAgICAgICAvLyJlcnJvciI6ICAgIDEsIC8vIFJFVklFV0VS
OiBTaG91bGQgZm9ybWF0ZXJyb3IgYmUgcmVtb3ZlZD8KKyAgICB9OworCisgICAgLy8gV2UgZG9u
J3QgcGVyZm9ybSBhbnkgc3BlY2lhbCBmb3JtYXR0aW5nIG9uIHRoZXNlIHR5cGVzLCBzbyB3ZSBq
dXN0CisgICAgLy8gcGFzcyB0aGVtIHRocm91Z2ggdGhlIHNpbXBsZSBfZm9ybWF0dmFsdWUgZnVu
Y3Rpb24uCisgICAgdGhpcy51bmRlY29yYXRlZFR5cGVzID0geworICAgICAgICAidW5kZWZpbmVk
IjogICAxLAorICAgICAgICAibnVsbCI6ICAgICAgICAxLAorICAgICAgICAiYm9vbGVhbiI6ICAg
ICAxLAorICAgICAgICAibnVtYmVyIjogICAgICAxLAorICAgICAgICAidW5kZWNvcmF0ZWQiOiAx
CisgICAgfTsKIH0KIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKQEAg
LTQ2MiwyNiArNDgzLDE2IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHZhciB0eXBlID0gT2JqZWN0LnByb3h5VHlwZShv
dXRwdXQpOwogCi0gICAgICAgIGlmIChpc1Byb3h5ICYmIHR5cGUgIT09ICJvYmplY3QiICYmIHR5
cGUgIT09ICJmdW5jdGlvbiIgJiYgdHlwZSAhPT0gImFycmF5IiAmJiB0eXBlICE9PSAibm9kZSIp
IHsKKyAgICAgICAgaWYgKGlzUHJveHkgJiYgISh0eXBlIGluIHRoaXMua25vd25Gb3JtYXR0ZXJz
KSkgewogICAgICAgICAgICAgLy8gVW53cmFwIHByaW1pdGl2ZSB2YWx1ZSwgc2tpcCBkZWNvcmF0
aW9uLgogICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmRlc2NyaXB0aW9uOwotICAgICAgICAg
ICAgdHlwZSA9ICJ1bmRlY29yYXRlZCIKKyAgICAgICAgICAgIHR5cGUgPSAidW5kZWNvcmF0ZWQi
OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gV2UgZG9uJ3QgcGVyZm9ybSBhbnkgc3BlY2lhbCBm
b3JtYXR0aW5nIG9uIHRoZXNlIHR5cGVzLCBzbyB3ZSBqdXN0Ci0gICAgICAgIC8vIHBhc3MgdGhl
bSB0aHJvdWdoIHRoZSBzaW1wbGUgX2Zvcm1hdHZhbHVlIGZ1bmN0aW9uLgotICAgICAgICB2YXIg
dW5kZWNvcmF0ZWRUeXBlcyA9IHsKLSAgICAgICAgICAgICJ1bmRlZmluZWQiOiAxLAotICAgICAg
ICAgICAgIm51bGwiOiAxLAotICAgICAgICAgICAgImJvb2xlYW4iOiAxLAotICAgICAgICAgICAg
Im51bWJlciI6IDEsCi0gICAgICAgICAgICAidW5kZWNvcmF0ZWQiOiAxCi0gICAgICAgIH07Ci0K
ICAgICAgICAgdmFyIGZvcm1hdHRlcjsKICAgICAgICAgaWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQog
ICAgICAgICAgICAgZm9ybWF0dGVyID0gIl9mb3JtYXRvYmplY3QiOwotICAgICAgICBlbHNlIGlm
ICh0eXBlIGluIHVuZGVjb3JhdGVkVHlwZXMpCisgICAgICAgIGVsc2UgaWYgKHR5cGUgaW4gdGhp
cy51bmRlY29yYXRlZFR5cGVzKQogICAgICAgICAgICAgZm9ybWF0dGVyID0gIl9mb3JtYXR2YWx1
ZSI7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9ybWF0dGVyID0gIl9mb3JtYXQiICsg
dHlwZTsKQEAgLTUwOSwxNyArNTIwLDE3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90
b3R5cGUgPSB7CiAKICAgICBfZm9ybWF0ZGF0ZTogZnVuY3Rpb24oZGF0ZSwgZWxlbSkKICAgICB7
Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0ZSkp
OworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGUu
ZGVzY3JpcHRpb24pKTsKICAgICB9LAogCiAgICAgX2Zvcm1hdHN0cmluZzogZnVuY3Rpb24oc3Ry
LCBlbGVtKQogICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiXCIiICsgc3RyICsgIlwiIikpOworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKHN0ci5kZXNjcmlwdGlvbikpOwogICAgIH0sCiAKICAgICBf
Zm9ybWF0cmVnZXhwOiBmdW5jdGlvbihyZSwgZWxlbSkKICAgICB7Ci0gICAgICAgIHZhciBmb3Jt
YXR0ZWQgPSBTdHJpbmcocmUuZGVzY3JpcHRpb24pLnJlcGxhY2UoLyhbXFxcL10pL2csICJcXCQx
IikucmVwbGFjZSgvXFwoXC9bZ2ltXSopJC8sICIkMSIpLnN1YnN0cmluZygxKTsKKyAgICAgICAg
dmFyIGZvcm1hdHRlZCA9IFN0cmluZyhyZS5kZXNjcmlwdGlvbikucmVwbGFjZSgvXFwoLikvZywg
IiQxIik7CiAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
Zm9ybWF0dGVkKSk7CiAgICAgfSwKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43826</attachid>
            <date>2009-11-24 21:32:44 -0800</date>
            <delta_ts>2009-11-25 22:29:27 -0800</delta_ts>
            <desc>[PATCH] Desired Behavior</desc>
            <filename>format.patch</filename>
            <type>text/plain</type>
            <size>16625</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTZkOWU1Li44NzQyZDA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMTEt
MjQgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXcm9uZyBj
b25zb2xlIG91dHB1dCBmb3IgUmVnZXhwIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MzgKKworICAgICAgICAqIGluc3Bl
Y3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6CisKIDIwMDktMTEtMjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtZm9ybWF0LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTVm
NjUwYi4uODIxNWJmNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUt
Zm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1m
b3JtYXQtZXhwZWN0ZWQudHh0CkBAIC0xLDExICsxLDcxIEBACi1DT05TT0xFIE1FU1NBR0U6IGxp
bmUgOTogTWVzc2FnZSBmb3JtYXQgbnVtYmVyICVpLCAlZCBhbmQgJWYKLUNPTlNPTEUgTUVTU0FH
RTogbGluZSAxMDogTWVzc2FnZSAlcyBmb3IgJXMKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxMTog
T2JqZWN0ICVvCi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6IHRlc3QsdGVzdDIsLCx0ZXN0NAor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDI1OiBNZXNzYWdlIGZvcm1hdCBudW1iZXIgJWksICVkIGFu
ZCAlZgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDI2OiBNZXNzYWdlICVzIGZvciAlcworQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDI3OiBPYmplY3QgJW8KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzMjog
dGVzdCx0ZXN0MiwsLHRlc3Q0CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IFNhdCBOb3YgMjEg
MjAwOSAxNDoyNTo0NSBHTVQtMDUwMCAoRVNUKQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiBT
YXQgTm92IDIxIDIwMDkgMTQ6MjU6NDUgR01ULTA1MDAgKEVTVCkKK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA0OTogL151cmxcKFxzKig/Oig/OiIoPzpbXlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/
fFwuKSkqInwnKD86W15cXFwnXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQl
Jiotflx3XXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKilccypcKS9pCitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgNTA6IC9edXJsXChccyooPzooPzoiKD86W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2
fVxzP3xcLikpKiJ8Jyg/OlteXFxcJ118KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSonKXwoPzpb
ISMkJSYqLX5cd118KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSopXHMqXCkvaQorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDQ5OiAvZm9vXFxiYXJcc2Jhei9pCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
NTA6IC9mb29cXGJhclxzYmF6L2kKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0OTogdGVzdAorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDUwOiB0ZXN0CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IEVy
cm9yOiBVbmtub3duIGVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNTA6IEVycm9yOiBVbmtu
b3duIGVycm9yCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IFtvYmplY3QgSFRNTEJvZHlFbGVt
ZW50XQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiBbb2JqZWN0IEhUTUxCb2R5RWxlbWVudF0K
K0NPTlNPTEUgTUVTU0FHRTogbGluZSA0OTogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfQorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDUwOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9CitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNDk6IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gMjsKK30KK0NPTlNP
TEUgTUVTU0FHRTogbGluZSA1MDogZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAyOworfQorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDQ5OiAwLjEyCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNTA6IDAu
MTIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0OTogaHR0cDovL3dlYmtpdC5vcmcvCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNTA6IGh0dHA6Ly93ZWJraXQub3JnLworQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDQ5OiB1bmRlZmluZWQKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1MDogCiBUZXN0cyB0aGF0
IGNvbnNvbGUgbG9nZ2luZyBkdW1wcyBwcm9wZXIgbWVzc2FnZXMuCiAKLWNvbnNvbGUtZm9ybWF0
Lmh0bWw6OU1lc3NhZ2UgZm9ybWF0IG51bWJlciAxLCAyIGFuZCAzLjUKLWNvbnNvbGUtZm9ybWF0
Lmh0bWw6MTBNZXNzYWdlIGZvcm1hdCBmb3Igc3RyaW5nCi1jb25zb2xlLWZvcm1hdC5odG1sOjEx
T2JqZWN0IE9iamVjdAotY29uc29sZS1mb3JtYXQuaHRtbDoxNlsidGVzdCIsICJ0ZXN0MiIsIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkLCAidGVzdDQiXQorY29uc29sZS1mb3JtYXQuaHRtbDoyNU1lc3Nh
Z2UgZm9ybWF0IG51bWJlciAxLCAyIGFuZCAzLjUKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6MjZNZXNz
YWdlIGZvcm1hdCBmb3Igc3RyaW5nCitjb25zb2xlLWZvcm1hdC5odG1sOjI3T2JqZWN0IE9iamVj
dAorY29uc29sZS1mb3JtYXQuaHRtbDozMlsidGVzdCIsICJ0ZXN0MiIsIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCAidGVzdDQiXQorY29uc29sZS1mb3JtYXQuaHRtbDo0OVNhdCBOb3YgMjEgMjAwOSAx
NDoyNTo0NSBHTVQtMDUwMCAoRVNUKQorY29uc29sZS1mb3JtYXQuaHRtbDo1MFtTYXQgTm92IDIx
IDIwMDkgMTQ6MjU6NDUgR01ULTA1MDAgKEVTVCldCisiU2F0IE5vdiAyMSAyMDA5IDE0OjI1OjQ1
IEdNVC0wNTAwIChFU1QpIgorY29uc29sZS1mb3JtYXQuaHRtbDo0OS9edXJsXChccyooPzooPzoi
KD86W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKiJ8Jyg/OlteXFxcJ118KD86XFxb
XGRhLWZdezEsNn1ccz98XC4pKSonKXwoPzpbISMkJSYqLX5cd118KD86XFxbXGRhLWZdezEsNn1c
cz98XC4pKSopXHMqXCkvaQorY29uc29sZS1mb3JtYXQuaHRtbDo1MFsvXnVybFwoXHMqKD86KD86
Iig/OlteXFxcIl18KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSoifCcoPzpbXlxcXCddfCg/Olxc
W1xkYS1mXXsxLDZ9XHM/fFwuKSkqJyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xkYS1mXXsxLDZ9
XHM/fFwuKSkqKVxzKlwpL2ldCisiL151cmxcXChcXHMqKD86KD86XCIoPzpbXlxcXFxcXFwiXXwo
PzpcXFxcW1xcZGEtZl17MSw2fVxccz98XFwuKSkqXCJ8Jyg/OlteXFxcXFxcJ118KD86XFxcXFtc
XGRhLWZdezEsNn1cXHM/fFxcLikpKicpfCg/OlshIyQlJiotflxcd118KD86XFxcXFtcXGRhLWZd
ezEsNn1cXHM/fFxcLikpKilcXHMqXFwpL2kiCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5L2Zvb1xc
YmFyXHNiYXovaQorY29uc29sZS1mb3JtYXQuaHRtbDo1MFsvZm9vXFxiYXJcc2Jhei9pXQorIi9m
b29cXFxcYmFyXFxzYmF6L2kiCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5dGVzdAorY29uc29sZS1m
b3JtYXQuaHRtbDo1MFsidGVzdCJdCisidGVzdCIKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NDlFcnJv
cjogVW5rbm93biBlcnJvcgorY29uc29sZS1mb3JtYXQuaHRtbDo1MFtFcnJvcjogVW5rbm93biBl
cnJvcl0KK0Vycm9yOiBVbmtub3duIGVycm9yCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5PGJvZHkg
b25sb2FkPSJvbmxvYWQoKSI+Citjb25zb2xlLWZvcm1hdC5odG1sOjUwWzxib2R5IG9ubG9hZD0i
b25sb2FkKCkiPl0KKyJIVE1MQm9keUVsZW1lbnQiCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5ZnVu
Y3Rpb24gKCkgeyByZXR1cm4gMTsgfQorY29uc29sZS1mb3JtYXQuaHRtbDo1MFtmdW5jdGlvbiAo
KSB7IHJldHVybiAxOyB9XQorImZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0iCitjb25zb2xlLWZv
cm1hdC5odG1sOjQ5ZnVuY3Rpb24gKCkgeyByZXR1cm4gMjsgfQorY29uc29sZS1mb3JtYXQuaHRt
bDo1MFtmdW5jdGlvbiAoKSB7XQorImZ1bmN0aW9uICgpIHs8YnI+IHJldHVybiAyOzxicj59Igor
Y29uc29sZS1mb3JtYXQuaHRtbDo0OTAuMTIKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NTBbMC4xMl0K
KyIwLjEyIgorY29uc29sZS1mb3JtYXQuaHRtbDo0OWh0dHA6Ly93ZWJraXQub3JnLworY29uc29s
ZS1mb3JtYXQuaHRtbDo1MFsiaHR0cDovL3dlYmtpdC5vcmcvIl0KKyJodHRwOi8vd2Via2l0Lm9y
Zy8iCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5dW5kZWZpbmVkCitjb25zb2xlLWZvcm1hdC5odG1s
OjUwW3VuZGVmaW5lZF0KKyJ1bmRlZmluZWQiCisidGhpcyBpcyBhIHRlc3Qgb2YgYSByYXcgc3Ry
aW5nIGluIHRoZSBjb25zb2xlIgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y29uc29sZS1mb3JtYXQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1h
dC5odG1sCmluZGV4IDJkNmNkMGMuLjBiOTIwMDIgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
b25zb2xlLWZvcm1hdC5odG1sCkBAIC00LDYgKzQsMjIgQEAKIDxzY3JpcHQgc3JjPSJjb25zb2xl
LXRlc3RzLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+CiAKKy8vIEdsb2JhbCBWYWx1ZXMKK3ZhciBk
YXRlID0gbmV3IERhdGUoMTI1ODgzMTU0NTY1MCk7Cit2YXIgcmVnZXgxID0gL151cmxcKFxzKig/
Oig/OiIoPzpbXlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqInwnKD86W15cXFwnXXwo
PzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQlJiotflx3XXwoPzpcXFtcZGEtZl17
MSw2fVxzP3xcLikpKilccypcKS9pOwordmFyIHJlZ2V4MiA9IG5ldyBSZWdFeHAoImZvb1xcXFxi
YXJcXHNiYXoiLCAiaSIpOwordmFyIHN0ciA9ICJ0ZXN0IjsKK3ZhciBlcnJvciA9IG5ldyBFcnJv
cjsKK3ZhciBub2RlID0gbnVsbDsgLy8gTk9URTogVGhpcyBpcyBmaWxsZWQgaW4gYWZ0ZXIgdGhl
IHBhZ2UgaGFzIGxvYWRlZCBpbiBkb2l0KCk7Cit2YXIgZnVuYyA9IGZ1bmN0aW9uKCkgeyByZXR1
cm4gMTsgfTsKK3ZhciBtdWx0aWxpbmVmdW5jID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIDI7
Cit9OwordmFyIG51bSA9IDEuMmUtMTsKK3ZhciBsaW5raWZ5ID0gImh0dHA6Ly93ZWJraXQub3Jn
LyI7Cit2YXIgZ2xvYmFscyA9IFtkYXRlLCByZWdleDEsIHJlZ2V4Miwgc3RyLCBlcnJvciwgbm9k
ZSwgZnVuYywgbXVsdGlsaW5lZnVuYywgbnVtLCBsaW5raWZ5LCB1bmRlZmluZWRdOwordmFyIGds
b2JhbHNMZW5ndGggPSBnbG9iYWxzLmxlbmd0aDsKKwogZnVuY3Rpb24gZG9pdCgpCiB7CiAgICAg
Y29uc29sZS5sb2coJ01lc3NhZ2UgZm9ybWF0IG51bWJlciAlaSwgJWQgYW5kICVmJywgMSwgMiwg
My41KTsKQEAgLTE0LDggKzMwLDU0IEBAIGZ1bmN0aW9uIGRvaXQoKQogICAgIGFycmF5LmZvbyA9
ICJiYXIiOwogICAgIGFycmF5WzRdID0gInRlc3Q0IjsKICAgICBjb25zb2xlLmxvZyhhcnJheSk7
CisgICAgCisgICAgZ2xvYmFsc1s1XSA9IGRvY3VtZW50LmJvZHk7CisgICAgbG9vcE92ZXJHbG9i
YWxzKDApOworfQorCitmdW5jdGlvbiBsb29wT3Zlckdsb2JhbHMoY3VycmVudCkKK3sKKyAgICBm
dW5jdGlvbiBhZHZhbmNlKCkKKyAgICB7CisgICAgICAgIHZhciBuZXh0ID0gY3VycmVudCArIDE7
CisgICAgICAgIGlmIChuZXh0ID09IGdsb2JhbHNMZW5ndGgpCisgICAgICAgICAgICBldmFsdWF0
ZUluV2ViSW5zcGVjdG9yKCJmcm9udGVuZF9ldmFsdWF0ZVN0cmluZ0luQ29uc29sZSIsIGR1bXBD
b25zb2xlTWVzc2FnZXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb29wT3Zlckdsb2Jh
bHMobmV4dCk7CisgICAgfQorCisgICAgY29uc29sZS5sb2coZ2xvYmFsc1tjdXJyZW50XSk7Cisg
ICAgY29uc29sZS5sb2coW2dsb2JhbHNbY3VycmVudF1dKTsKKyAgICBldmFsdWF0ZUluV2ViSW5z
cGVjdG9yKCJmcm9udGVuZF9ldmFsdWF0ZUdsb2JhbCIsIGFkdmFuY2UpCit9CisKKy8vIEZyb250
ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfZXZhbHVhdGVHbG9iYWwoKQorewor
ICAgIHdpbmRvdy5fX25leHQgPSB3aW5kb3cuX19uZXh0IHx8IDA7CisgICAgdmFyIGN1cnJlbnQg
PSB3aW5kb3cuX19uZXh0Kys7CisgICAgdmFyIGV4cHJlc3Npb24gPSAiZ2xvYmFsc1siICsgY3Vy
cmVudCArICJdIjsKKyAgICBmcm9udGVuZF9ldmFsRXhwcmVzc2lvbihleHByZXNzaW9uKTsKK30K
KworZnVuY3Rpb24gZnJvbnRlbmRfZXZhbHVhdGVTdHJpbmdJbkNvbnNvbGUoKQoreworICAgIHZh
ciBleHByZXNzaW9uID0gIlwidGhpcyBpcyBhIHRlc3Qgb2YgYSByYXcgc3RyaW5nIGluIHRoZSBj
b25zb2xlXCIiOworICAgIGZyb250ZW5kX2V2YWxFeHByZXNzaW9uKGV4cHJlc3Npb24pOworfQor
CitmdW5jdGlvbiBmcm9udGVuZF9ldmFsRXhwcmVzc2lvbihleHByZXNzaW9uKQoreworICAgIHZh
ciBzZWxmID0gV2ViSW5zcGVjdG9yLmNvbnNvbGU7CisgICAgZnVuY3Rpb24gcHJpbnRSZXN1bHQo
cmVzdWx0LCBleGNlcHRpb24pCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHJlc3VsdC5kZXNj
cmlwdGlvbiA9PT0gInN0cmluZyIpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuZGVzY3Jp
cHRpb24ucmVwbGFjZSgvXG4vZywgIjxicj4iKTsKKyAgICAgICAgc2VsZi5hZGRNZXNzYWdlKG5l
dyBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQocmVzdWx0LCBleGNlcHRpb24sIGV4
cHJlc3Npb24pKTsKKyAgICB9CiAKLSAgICBkdW1wQ29uc29sZU1lc3NhZ2VzKCk7CisgICAgc2Vs
Zi5ldmFsSW5JbnNwZWN0ZWRXaW5kb3coZXhwcmVzc2lvbiwgImNvbnNvbGUiLCBwcmludFJlc3Vs
dCk7CiB9CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAxNzcwNTBlLi44YTM5NzlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDA5
LTExLTI0ICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogV3Jv
bmcgY29uc29sZSBvdXRwdXQgZm9yIFJlZ2V4cCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNTM4CisKKyAgICAgICAgVXBk
YXRlZCBpbnNwZWN0b3IvY29uc29sZS1mb3JtYXQuaHRtbAorCisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xl
Vmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3Jt
YXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZm9ybWF0
ZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3Jt
YXRzdHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5f
Zm9ybWF0cmVnZXhwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5
cGUuX2Zvcm1hdG9iamVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
cHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5k
UmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudCk6IGNvbnZlcnRlZCBy
ZWdleCB0byBsaXRlcmFsIHRvIHByZXZlbnQgcmVwYXJzaW5nIGFuZCBjb21waWxpbmcKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qczoKKyAgICAgICAgKEVsZW1lbnQu
cHJvdG90eXBlLmhhc1N0eWxlQ2xhc3MpOiBmaXhlZCBvdXQgb2YgZGF0ZSBjb21tZW50CisgICAg
ICAgIChTdHJpbmcucHJvdG90eXBlLnRyaW1VUkwpOiBjb252ZXJ0ZWQgcmVnZXggdG8gbGl0ZXJh
bCB0byBwcmV2ZW50IHJlcGFyc2luZyBhbmQgY29tcGlsaW5nCisKIDIwMDktMTEtMjQgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJh
ZHkgRWlkc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNv
bGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCmlu
ZGV4IDE2MTJhYzUuLjgxNjkzZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29u
c29sZVZpZXcuanMKQEAgLTEwMyw2ICsxMDMsMjYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3
ID0gZnVuY3Rpb24oZHJhd2VyKQogICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF0uaXNNYWNP
bmx5ID0gdHJ1ZTsKICAgICBzaG9ydGN1dCA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Lm1ha2VLZXkoImwiLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3Ry
bCk7CiAgICAgdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0XSA9IGhhbmRsZXI7CisKKyAgICB0aGlz
Lmtub3duRm9ybWF0dGVycyA9IHsKKyAgICAgICAgIm9iamVjdCI6ICAgMSwKKyAgICAgICAgImZ1
bmN0aW9uIjogMSwKKyAgICAgICAgImFycmF5IjogICAgMSwKKyAgICAgICAgIm5vZGUiOiAgICAg
MSwKKyAgICAgICAgInJlZ2V4cCI6ICAgMSwKKyAgICAgICAgImRhdGUiOiAgICAgMSwKKyAgICAg
ICAgInN0cmluZyI6ICAgMQorICAgIH07CisKKyAgICAvLyBXZSBkb24ndCBwZXJmb3JtIGFueSBz
cGVjaWFsIGZvcm1hdHRpbmcgb24gdGhlc2UgdHlwZXMsIHNvIHdlIGp1c3QKKyAgICAvLyBwYXNz
IHRoZW0gdGhyb3VnaCB0aGUgc2ltcGxlIF9mb3JtYXR2YWx1ZSBmdW5jdGlvbi4KKyAgICB0aGlz
LnVuZGVjb3JhdGVkVHlwZXMgPSB7CisgICAgICAgICJ1bmRlZmluZWQiOiAgIDEsCisgICAgICAg
ICJudWxsIjogICAgICAgIDEsCisgICAgICAgICJib29sZWFuIjogICAgIDEsCisgICAgICAgICJu
dW1iZXIiOiAgICAgIDEsCisgICAgICAgICJ1bmRlY29yYXRlZCI6IDEKKyAgICB9OwogfQogCiBX
ZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewpAQCAtNDg0LDI2ICs1MDQsMTYg
QEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgdmFyIHR5cGUgPSBPYmplY3QucHJveHlUeXBlKG91dHB1dCk7CiAKLSAgICAg
ICAgaWYgKGlzUHJveHkgJiYgdHlwZSAhPT0gIm9iamVjdCIgJiYgdHlwZSAhPT0gImZ1bmN0aW9u
IiAmJiB0eXBlICE9PSAiYXJyYXkiICYmIHR5cGUgIT09ICJub2RlIikgeworICAgICAgICBpZiAo
aXNQcm94eSAmJiAhKHR5cGUgaW4gdGhpcy5rbm93bkZvcm1hdHRlcnMpKSB7CiAgICAgICAgICAg
ICAvLyBVbndyYXAgcHJpbWl0aXZlIHZhbHVlLCBza2lwIGRlY29yYXRpb24uCiAgICAgICAgICAg
ICBvdXRwdXQgPSBvdXRwdXQuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICB0eXBlID0gInVuZGVj
b3JhdGVkIgorICAgICAgICAgICAgdHlwZSA9ICJ1bmRlY29yYXRlZCI7CiAgICAgICAgIH0KIAot
ICAgICAgICAvLyBXZSBkb24ndCBwZXJmb3JtIGFueSBzcGVjaWFsIGZvcm1hdHRpbmcgb24gdGhl
c2UgdHlwZXMsIHNvIHdlIGp1c3QKLSAgICAgICAgLy8gcGFzcyB0aGVtIHRocm91Z2ggdGhlIHNp
bXBsZSBfZm9ybWF0dmFsdWUgZnVuY3Rpb24uCi0gICAgICAgIHZhciB1bmRlY29yYXRlZFR5cGVz
ID0gewotICAgICAgICAgICAgInVuZGVmaW5lZCI6IDEsCi0gICAgICAgICAgICAibnVsbCI6IDEs
Ci0gICAgICAgICAgICAiYm9vbGVhbiI6IDEsCi0gICAgICAgICAgICAibnVtYmVyIjogMSwKLSAg
ICAgICAgICAgICJ1bmRlY29yYXRlZCI6IDEKLSAgICAgICAgfTsKLQogICAgICAgICB2YXIgZm9y
bWF0dGVyOwogICAgICAgICBpZiAoZm9yY2VPYmplY3RGb3JtYXQpCiAgICAgICAgICAgICBmb3Jt
YXR0ZXIgPSAiX2Zvcm1hdG9iamVjdCI7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgaW4gdW5kZWNv
cmF0ZWRUeXBlcykKKyAgICAgICAgZWxzZSBpZiAodHlwZSBpbiB0aGlzLnVuZGVjb3JhdGVkVHlw
ZXMpCiAgICAgICAgICAgICBmb3JtYXR0ZXIgPSAiX2Zvcm1hdHZhbHVlIjsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBmb3JtYXR0ZXIgPSAiX2Zvcm1hdCIgKyB0eXBlOwpAQCAtNTMxLDE3
ICs1NDEsMTcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKIAogICAg
IF9mb3JtYXRkYXRlOiBmdW5jdGlvbihkYXRlLCBlbGVtKQogICAgIHsKLSAgICAgICAgZWxlbS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRlKSk7CisgICAgICAgIGVsZW0u
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0ZS5kZXNjcmlwdGlvbikpOwog
ICAgIH0sCiAKICAgICBfZm9ybWF0c3RyaW5nOiBmdW5jdGlvbihzdHIsIGVsZW0pCiAgICAgewot
ICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcIiIgKyBz
dHIgKyAiXCIiKSk7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoc3RyLmRlc2NyaXB0aW9uKSk7CiAgICAgfSwKIAogICAgIF9mb3JtYXRyZWdleHA6IGZ1
bmN0aW9uKHJlLCBlbGVtKQogICAgIHsKLSAgICAgICAgdmFyIGZvcm1hdHRlZCA9IFN0cmluZyhy
ZS5kZXNjcmlwdGlvbikucmVwbGFjZSgvKFtcXFwvXSkvZywgIlxcJDEiKS5yZXBsYWNlKC9cXChc
L1tnaW1dKikkLywgIiQxIikuc3Vic3RyaW5nKDEpOworICAgICAgICB2YXIgZm9ybWF0dGVkID0g
U3RyaW5nKHJlLmRlc2NyaXB0aW9uKS5yZXBsYWNlKC9cXCguKS9nLCAiJDEiKTsKICAgICAgICAg
ZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmb3JtYXR0ZWQpKTsKICAg
ICB9LAogCkBAIC01OTQsMzEgKzYwNCw2IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90
b3R5cGUgPSB7CiAgICAgX2Zvcm1hdG9iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtKQogICAgIHsK
ICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRp
ZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uLCBudWxsLCB0cnVlKS5lbGVtZW50KTsKLSAg
ICB9LAotCi0gICAgX2Zvcm1hdGVycm9yOiBmdW5jdGlvbihvYmosIGVsZW0pCi0gICAgewotICAg
ICAgICB2YXIgbWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7
Ci0gICAgICAgIG1lc3NhZ2VFbGVtZW50LmNsYXNzTmFtZSA9ICJlcnJvci1tZXNzYWdlIjsKLSAg
ICAgICAgbWVzc2FnZUVsZW1lbnQudGV4dENvbnRlbnQgPSBvYmoubmFtZSArICI6ICIgKyBvYmou
bWVzc2FnZTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7Ci0KLSAg
ICAgICAgaWYgKG9iai5zb3VyY2VVUkwpIHsKLSAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgICAgICAgICAgdXJsRWxlbWVudC5jbGFz
c05hbWUgPSAid2Via2l0LWh0bWwtcmVzb3VyY2UtbGluayI7Ci0gICAgICAgICAgICB1cmxFbGVt
ZW50LmhyZWYgPSBvYmouc291cmNlVVJMOwotICAgICAgICAgICAgdXJsRWxlbWVudC5saW5lTnVt
YmVyID0gb2JqLmxpbmU7Ci0gICAgICAgICAgICB1cmxFbGVtZW50LnByZWZlcnJlZFBhbmVsID0g
InNjcmlwdHMiOwotCi0gICAgICAgICAgICBpZiAob2JqLmxpbmUgPiAwKQotICAgICAgICAgICAg
ICAgIHVybEVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JV
Ukwob2JqLnNvdXJjZVVSTCkgKyAiOiIgKyBvYmoubGluZTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB1cmxFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRpc3Bs
YXlOYW1lRm9yVVJMKG9iai5zb3VyY2VVUkwpOwotCi0gICAgICAgICAgICBlbGVtLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgKCIpKTsKLSAgICAgICAgICAgIGVsZW0uYXBw
ZW5kQ2hpbGQodXJsRWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKCIpIikpOwotICAgICAgICB9CiAgICAgfQogfQogCkBAIC02OTUs
NyArNjgwLDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29uc29sZS5fZm9ybWF0KG9iaiwgdHJ1ZSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoT2JqZWN0LnByb3h5VHlwZShwYXJhbWV0ZXJzWzBd
KSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoID4gMSAmJiBP
YmplY3QucHJveHlUeXBlKHBhcmFtZXRlcnNbMF0pID09PSAic3RyaW5nIikgewogICAgICAgICAg
ICAgdmFyIGZvcm1hdHRlcnMgPSB7fQogICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBTdHJpbmcu
c3RhbmRhcmRGb3JtYXR0ZXJzKQogICAgICAgICAgICAgICAgIGZvcm1hdHRlcnNbaV0gPSBTdHJp
bmcuc3RhbmRhcmRGb3JtYXR0ZXJzW2ldOwpAQCAtNzI0LDEwICs3MDksMTUgQEAgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
aWYgKE9iamVjdC5wcm94eVR5cGUocGFyYW1ldGVyc1tpXSkgPT09ICJzdHJpbmciKQotICAgICAg
ICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lm
eVN0cmluZ0FzRnJhZ21lbnQocGFyYW1ldGVyc1tpXS5kZXNjcmlwdGlvbikpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChmb3Jt
YXRGb3JDb25zb2xlKHBhcmFtZXRlcnNbaV0pKTsKKyAgICAgICAgICAgIHZhciBwYXJhbSA9IHBh
cmFtZXRlcnNbaV07CisgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3h5VHlwZShwYXJhbSkgPT09
ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYXRpbmdDb21tYW5k
ICYmIHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2
ZWwuTG9nKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBxdW90ZWRTdHJpbmcgPSAiXCIiICsg
cGFyYW0uZGVzY3JpcHRpb24ucmVwbGFjZSgvIi9nLCAiXFxcIiIpICsgIlwiIjsKKyAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5r
aWZ5U3RyaW5nQXNGcmFnbWVudChxdW90ZWRTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKFdlYklu
c3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChwYXJhbS5kZXNjcmlwdGlvbikpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENo
aWxkKGZvcm1hdEZvckNvbnNvbGUocGFyYW0pKTsKIAogICAgICAgICAgICAgaWYgKGkgPCBwYXJh
bWV0ZXJzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOwpAQCAtOTgzLDkgKzk3Myw5IEBA
IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdCA9IGZ1bmN0aW9uKHJlc3VsdCwgZXhj
ZXB0aW9uLCBvcmlnaW5hdGluZ0NvbW1hCiAgICAgdmFyIGxpbmUgPSAoZXhjZXB0aW9uID8gcmVz
dWx0LmxpbmUgOiAtMSk7CiAgICAgdmFyIHVybCA9IChleGNlcHRpb24gPyByZXN1bHQuc291cmNl
VVJMIDogbnVsbCk7CiAKLSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY2FsbCh0aGlz
LCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZywgbGV2ZWwsIGxpbmUsIHVybCwgbnVs
bCwgMSwgbWVzc2FnZSk7Ci0KICAgICB0aGlzLm9yaWdpbmF0aW5nQ29tbWFuZCA9IG9yaWdpbmF0
aW5nQ29tbWFuZDsKKworICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jYWxsKHRoaXMs
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nLCBsZXZlbCwgbGluZSwgdXJsLCBudWxs
LCAxLCBtZXNzYWdlKTsKIH0KIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnBy
b3RvdHlwZSA9IHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4
IDBmOGVjMTIuLmQ0ZmZkMjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcwpAQCAtMTQ2NCw3ICsxNDY0LDcgQEAgV2ViSW5zcGVjdG9yLnNob3dSZXNvdXJjZUZvclVS
TCA9IGZ1bmN0aW9uKHVybCwgbGluZSwgcHJlZmVycmVkUGFuZWwpCiBXZWJJbnNwZWN0b3IubGlu
a2lmeVN0cmluZ0FzRnJhZ21lbnQgPSBmdW5jdGlvbihzdHJpbmcpCiB7CiAgICAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICB2YXIgbGlua1N0
cmluZ1JlZ0V4ID0gbmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06Ly98
d3d3XFwuKVtcXHckXFwtXysqJz1cXHwvXFxcXCgpe31bXFxdJUAmI34sOjsuIT9dezIsfVtcXHck
XFwtXysqPVxcfC9cXFxcKHslQCYjfl0iKTsKKyAgICB2YXIgbGlua1N0cmluZ1JlZ0V4ID0gLyg/
OlthLXpBLVpdW2EtekEtWjAtOSsuLV17Mix9OlwvXC98d3d3XC4pW1x3JFwtXysqJz1cfFwvXFwo
KXt9W1xdJUAmI34sOjsuIT9dezIsfVtcdyRcLV8rKj1cfFwvXFwoeyVAJiN+XS87CiAKICAgICB3
aGlsZSAoc3RyaW5nKSB7CiAgICAgICAgIHZhciBsaW5rU3RyaW5nID0gbGlua1N0cmluZ1JlZ0V4
LmV4ZWMoc3RyaW5nKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91
dGlsaXRpZXMuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmlu
ZGV4IGQ1MmM5YTMuLjA0YzkwMzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxp
dGllcy5qcwpAQCAtMTc4LDcgKzE3OCw3IEBAIEVsZW1lbnQucHJvdG90eXBlLmhhc1N0eWxlQ2xh
c3MgPSBmdW5jdGlvbihjbGFzc05hbWUpCiB7CiAgICAgaWYgKCFjbGFzc05hbWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAvLyBUZXN0IGZvciB0aGUgc2ltcGxlIGNhc2UgYmVmb3JlIHVz
aW5nIGEgUmVnRXhwLgorICAgIC8vIFRlc3QgZm9yIHRoZSBzaW1wbGUgY2FzZQogICAgIGlmICh0
aGlzLmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAt
MzUwLDcgKzM1MCw3IEBAIFN0cmluZy5wcm90b3R5cGUudHJpbVdoaXRlc3BhY2UgPSBmdW5jdGlv
bigpCiAKIFN0cmluZy5wcm90b3R5cGUudHJpbVVSTCA9IGZ1bmN0aW9uKGJhc2VVUkxEb21haW4p
CiB7Ci0gICAgdmFyIHJlc3VsdCA9IHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKCJeaHR0cFtzXT86
XC9cLyIsICJpIiksICIiKTsKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXBsYWNlKC9eaHR0cHM/
OlwvXC8vaSwgIiIpOwogICAgIGlmIChiYXNlVVJMRG9tYWluKQogICAgICAgICByZXN1bHQgPSBy
ZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKCJeIiArIGJhc2VVUkxEb21haW4uZXNjYXBlRm9yUmVn
RXhwKCksICJpIiksICIiKTsKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>
<flag name="review"
          id="25564"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43895</attachid>
            <date>2009-11-25 22:29:27 -0800</date>
            <delta_ts>2009-11-25 22:53:41 -0800</delta_ts>
            <desc>[PATCH] Desired Behavior + Some Refactoring</desc>
            <filename>format.patch</filename>
            <type>text/plain</type>
            <size>25394</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTZkOWU1Li44NzQyZDA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMTEt
MjQgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXcm9uZyBj
b25zb2xlIG91dHB1dCBmb3IgUmVnZXhwIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MzgKKworICAgICAgICAqIGluc3Bl
Y3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6CisKIDIwMDktMTEtMjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtZm9ybWF0LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTVm
NjUwYi4uZjVmN2U5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUt
Zm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1m
b3JtYXQtZXhwZWN0ZWQudHh0CkBAIC0xLDExICsxLDY1IEBACi1DT05TT0xFIE1FU1NBR0U6IGxp
bmUgOTogTWVzc2FnZSBmb3JtYXQgbnVtYmVyICVpLCAlZCBhbmQgJWYKLUNPTlNPTEUgTUVTU0FH
RTogbGluZSAxMDogTWVzc2FnZSAlcyBmb3IgJXMKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxMTog
T2JqZWN0ICVvCi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6IHRlc3QsdGVzdDIsLCx0ZXN0NAor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDEyOiBNZXNzYWdlIGZvcm1hdCBudW1iZXIgJWksICVkIGFu
ZCAlZgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDEzOiBNZXNzYWdlICVzIGZvciAlcworQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE0OiBPYmplY3QgJW8KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTog
dGVzdCx0ZXN0MiwsLHRlc3Q0CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IC9edXJsXChccyoo
PzooPzoiKD86W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKiJ8Jyg/OlteXFxcJ118
KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSonKXwoPzpbISMkJSYqLX5cd118KD86XFxbXGRhLWZd
ezEsNn1ccz98XC4pKSopXHMqXCkvaQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiAvXnVybFwo
XHMqKD86KD86Iig/OlteXFxcIl18KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSoifCcoPzpbXlxc
XCddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqJyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xk
YS1mXXsxLDZ9XHM/fFwuKSkqKVxzKlwpL2kKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0OTogL2Zv
b1xcYmFyXHNiYXovaQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiAvZm9vXFxiYXJcc2Jhei9p
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IHRlc3QKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1
MDogdGVzdAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDQ5OiBFcnJvcjogVW5rbm93biBlcnJvcgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiBFcnJvcjogVW5rbm93biBlcnJvcgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDQ5OiBbb2JqZWN0IEhUTUxCb2R5RWxlbWVudF0KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSA1MDogW29iamVjdCBIVE1MQm9keUVsZW1lbnRdCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgNDk6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1
MDogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDQ5OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA1MDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gMjsKKyAgICB9CitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNDk6IDAuMTIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1MDogMC4xMgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDQ5OiBodHRwOi8vd2Via2l0Lm9yZy8KK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA1MDogaHR0cDovL3dlYmtpdC5vcmcvCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
NDk6IHVuZGVmaW5lZAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiAKIFRlc3RzIHRoYXQgY29u
c29sZSBsb2dnaW5nIGR1bXBzIHByb3BlciBtZXNzYWdlcy4KIAotY29uc29sZS1mb3JtYXQuaHRt
bDo5TWVzc2FnZSBmb3JtYXQgbnVtYmVyIDEsIDIgYW5kIDMuNQotY29uc29sZS1mb3JtYXQuaHRt
bDoxME1lc3NhZ2UgZm9ybWF0IGZvciBzdHJpbmcKLWNvbnNvbGUtZm9ybWF0Lmh0bWw6MTFPYmpl
Y3QgT2JqZWN0Ci1jb25zb2xlLWZvcm1hdC5odG1sOjE2WyJ0ZXN0IiwgInRlc3QyIiwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsICJ0ZXN0NCJdCitjb25zb2xlLWZvcm1hdC5odG1sOjEyTWVzc2FnZSBm
b3JtYXQgbnVtYmVyIDEsIDIgYW5kIDMuNQorY29uc29sZS1mb3JtYXQuaHRtbDoxM01lc3NhZ2Ug
Zm9ybWF0IGZvciBzdHJpbmcKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6MTRPYmplY3QgT2JqZWN0Citj
b25zb2xlLWZvcm1hdC5odG1sOjE5WyJ0ZXN0IiwgInRlc3QyIiwgdW5kZWZpbmVkLCB1bmRlZmlu
ZWQsICJ0ZXN0NCJdCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5L151cmxcKFxzKig/Oig/OiIoPzpb
XlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqInwnKD86W15cXFwnXXwoPzpcXFtcZGEt
Zl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQlJiotflx3XXwoPzpcXFtcZGEtZl17MSw2fVxzP3xc
LikpKilccypcKS9pCitjb25zb2xlLWZvcm1hdC5odG1sOjUwWy9edXJsXChccyooPzooPzoiKD86
W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKiJ8Jyg/OlteXFxcJ118KD86XFxbXGRh
LWZdezEsNn1ccz98XC4pKSonKXwoPzpbISMkJSYqLX5cd118KD86XFxbXGRhLWZdezEsNn1ccz98
XC4pKSopXHMqXCkvaV0KKyIvXnVybFwoXHMqKD86KD86XCIoPzpbXlxcXFwiXXwoPzpcXFtcZGEt
Zl17MSw2fVxzP3xcLikpKlwifCcoPzpbXlxcXCddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkq
Jyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqKVxzKlwpL2kiCitj
b25zb2xlLWZvcm1hdC5odG1sOjQ5L2Zvb1xcYmFyXHNiYXovaQorY29uc29sZS1mb3JtYXQuaHRt
bDo1MFsvZm9vXFxiYXJcc2Jhei9pXQorIi9mb29cXGJhclxzYmF6L2kiCitjb25zb2xlLWZvcm1h
dC5odG1sOjQ5dGVzdAorY29uc29sZS1mb3JtYXQuaHRtbDo1MFsidGVzdCJdCisidGVzdCIKK2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6NDlFcnJvcjogVW5rbm93biBlcnJvcgorY29uc29sZS1mb3JtYXQu
aHRtbDo1MFtFcnJvcjogVW5rbm93biBlcnJvcl0KK0Vycm9yOiBVbmtub3duIGVycm9yCitjb25z
b2xlLWZvcm1hdC5odG1sOjQ5PGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+Citjb25zb2xlLWZvcm1h
dC5odG1sOjUwWzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPl0KKyJIVE1MQm9keUVsZW1lbnQiCitj
b25zb2xlLWZvcm1hdC5odG1sOjQ5ZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfQorY29uc29sZS1m
b3JtYXQuaHRtbDo1MFtmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9XQorImZ1bmN0aW9uICgpIHsg
cmV0dXJuIDE7IH0iCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5ZnVuY3Rpb24gKCkgeyByZXR1cm4g
MjsgfQorY29uc29sZS1mb3JtYXQuaHRtbDo1MFtmdW5jdGlvbiAoKSB7XQorImZ1bmN0aW9uICgp
IHs8YnI+IHJldHVybiAyOzxicj4gfSIKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NDkwLjEyCitjb25z
b2xlLWZvcm1hdC5odG1sOjUwWzAuMTJdCisiMC4xMiIKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NDlo
dHRwOi8vd2Via2l0Lm9yZy8KK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NTBbImh0dHA6Ly93ZWJraXQu
b3JnLyJdCisiaHR0cDovL3dlYmtpdC5vcmcvIgorY29uc29sZS1mb3JtYXQuaHRtbDo0OXVuZGVm
aW5lZAorY29uc29sZS1mb3JtYXQuaHRtbDo1MFt1bmRlZmluZWRdCisidW5kZWZpbmVkIgogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1mb3JtYXQuaHRtbCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCmluZGV4IDJkNmNkMGMuLmM5
NTU5ZGYgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCkBAIC00
LDYgKzQsOSBAQAogPHNjcmlwdCBzcmM9ImNvbnNvbGUtdGVzdHMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdD4KIAorLy8gR2xvYmFsIFZhbHVlcwordmFyIGdsb2JhbHMgPSBbXQorCiBmdW5jdGlvbiBk
b2l0KCkKIHsKICAgICBjb25zb2xlLmxvZygnTWVzc2FnZSBmb3JtYXQgbnVtYmVyICVpLCAlZCBh
bmQgJWYnLCAxLCAyLCAzLjUpOwpAQCAtMTUsNyArMTgsNjAgQEAgZnVuY3Rpb24gZG9pdCgpCiAg
ICAgYXJyYXlbNF0gPSAidGVzdDQiOwogICAgIGNvbnNvbGUubG9nKGFycmF5KTsKIAotICAgIGR1
bXBDb25zb2xlTWVzc2FnZXMoKTsKKyAgICAvLyBQb3B1bGF0ZSBHbG9iYWxzCisgICAgdmFyIHJl
Z2V4MSA9IC9edXJsXChccyooPzooPzoiKD86W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xc
LikpKiJ8Jyg/OlteXFxcJ118KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSonKXwoPzpbISMkJSYq
LX5cd118KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSopXHMqXCkvaTsKKyAgICB2YXIgcmVnZXgy
ID0gbmV3IFJlZ0V4cCgiZm9vXFxcXGJhclxcc2JheiIsICJpIik7CisgICAgdmFyIHN0ciA9ICJ0
ZXN0IjsKKyAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3I7CisgICAgdmFyIG5vZGUgPSBkb2N1bWVu
dC5ib2R5OworICAgIHZhciBmdW5jID0gZnVuY3Rpb24oKSB7IHJldHVybiAxOyB9OworICAgIHZh
ciBtdWx0aWxpbmVmdW5jID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH07
CisgICAgdmFyIG51bSA9IDEuMmUtMTsKKyAgICB2YXIgbGlua2lmeSA9ICJodHRwOi8vd2Via2l0
Lm9yZy8iOworCisgICAgZ2xvYmFscyA9IFtyZWdleDEsIHJlZ2V4Miwgc3RyLCBlcnJvciwgbm9k
ZSwgZnVuYywgbXVsdGlsaW5lZnVuYywgbnVtLCBsaW5raWZ5LCB1bmRlZmluZWRdOworICAgIGxv
b3BPdmVyR2xvYmFscygwKTsKK30KKworZnVuY3Rpb24gbG9vcE92ZXJHbG9iYWxzKGN1cnJlbnQp
Cit7CisgICAgZnVuY3Rpb24gYWR2YW5jZSgpCisgICAgeworICAgICAgICB2YXIgbmV4dCA9IGN1
cnJlbnQgKyAxOworICAgICAgICBpZiAobmV4dCA9PSBnbG9iYWxzLmxlbmd0aCkKKyAgICAgICAg
ICAgIGR1bXBDb25zb2xlTWVzc2FnZXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9v
cE92ZXJHbG9iYWxzKG5leHQpOworICAgIH0KKworICAgIGNvbnNvbGUubG9nKGdsb2JhbHNbY3Vy
cmVudF0pOworICAgIGNvbnNvbGUubG9nKFtnbG9iYWxzW2N1cnJlbnRdXSk7CisgICAgZXZhbHVh
dGVJbldlYkluc3BlY3RvcigiZnJvbnRlbmRfZXZhbHVhdGVHbG9iYWwiLCBhZHZhbmNlKTsKK30K
KworLy8gRnJvbnRlbmQgZnVuY3Rpb25zLgorCitmdW5jdGlvbiBmcm9udGVuZF9ldmFsdWF0ZUds
b2JhbCgpCit7CisgICAgd2luZG93Ll9fbmV4dCA9IHdpbmRvdy5fX25leHQgfHwgMDsKKyAgICB2
YXIgY3VycmVudCA9IHdpbmRvdy5fX25leHQrKzsKKyAgICB2YXIgZXhwcmVzc2lvbiA9ICJnbG9i
YWxzWyIgKyBjdXJyZW50ICsgIl0iOworICAgIGZyb250ZW5kX2V2YWxFeHByZXNzaW9uKGV4cHJl
c3Npb24sIGN1cnJlbnQgPT09IDApOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9ldmFsRXhwcmVz
c2lvbihleHByZXNzaW9uLCBpc0RhdGUpCit7CisgICAgdmFyIHNlbGYgPSBXZWJJbnNwZWN0b3Iu
Y29uc29sZTsKKyAgICBmdW5jdGlvbiBwcmludFJlc3VsdChyZXN1bHQsIGV4Y2VwdGlvbikKKyAg
ICB7CisgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0LmRlc2NyaXB0aW9uID09PSAic3RyaW5nIikK
KyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5kZXNjcmlwdGlvbi5yZXBsYWNlKC9cbi9nLCAi
PGJyPiIpOworICAgICAgICBzZWxmLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5Db25zb2xl
Q29tbWFuZFJlc3VsdChyZXN1bHQsIGV4Y2VwdGlvbiwgZXhwcmVzc2lvbikpOworICAgIH0KKwor
ICAgIHNlbGYuZXZhbEluSW5zcGVjdGVkV2luZG93KGV4cHJlc3Npb24sICJjb25zb2xlIiwgcHJp
bnRSZXN1bHQpOwogfQogCiA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTc3MDUwZS4uZmQyZDkyNSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBA
QAorMjAwOS0xMS0yNSAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFdyb25nIGNvbnNvbGUgb3V0cHV0IGZvciBSZWdleHAgZXNjYXBlIHNlcXVlbmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTUzOAorCisgICAg
ICAgIFVwZGF0ZWQgaW5zcGVjdG9yL2NvbnNvbGUtZm9ybWF0Lmh0bWwKKworICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcuY3JlYXRlRGl2aWRlckVsZW1lbnQpOiBzdHlsZSBpc3N1ZXMuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcuY3JlYXRlRmlsdGVyRWxlbWVudCk6IHN0eWxlIGlz
c3Vlcy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldyk6IGFkZGVkIF9jdXN0b21G
b3JtYXR0ZXJzIHRhYmxlLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3Rv
dHlwZS51cGRhdGVNZXNzYWdlUmVwZWF0Q291bnQpOiBzdHlsZSBpc3Nlcy4KKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX2luY3JlbWVudEVycm9yV2FybmluZ0Nv
dW50KTogc3R5bGUgaXNzdWVzLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnBy
b3RvdHlwZS5fZm9ybWF0KTogc2ltcGxpZmllZCBkZWxlZ2F0aW9uIHRvIGZvcm1hdHRlciBsb2dp
Yy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX2Zvcm1hdG9i
amVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3Jt
YXRub2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX3By
aW50QXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlw
ZS5fZm9ybWF0KTogY29tbWVudGVkIGFuZCBicm9rZSBkb3duIHRoZSBhbGdvcml0aG0gaW50byBw
YXJ0cy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuX2Zv
cm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuYXBwZW5kKTogaGFuZGxlIHN1YnN0aXR1dGlvbiBz
dHJpbmcgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5w
cm90b3R5cGUuX2Zvcm1hdEluZGl2aWR1YWxWYWx1ZSk6IGhhbmRsaW5nIGluZGl2aWR1YWwgdmFs
dWUgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3Vs
dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qczogc2lt
cGxpZmllZCByZWdleCBmb3JtYXR0aW5nLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdt
ZW50KTogY29udmVydGVkIG5ldyBSZWdFeHAgdG8gbGl0ZXJhbCBmb3IgcGVyZm9ybWFuY2UgYmVu
ZWZpdHMuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanM6IAorICAg
ICAgICAoRWxlbWVudC5wcm90b3R5cGUuaGFzU3R5bGVDbGFzcyk6IHVwZGF0ZSBpbmFjY3VyYXRl
IGNvbW1lbnQuCisgICAgICAgIChTdHJpbmcucHJvdG90eXBlLnRyaW1VUkwpOiBjb252ZXJ0ZWQg
bmV3IFJlZ0V4cCB0byBsaXRlcmFsIGZvciBwZXJmb3JtYW5jZSBiZW5lZml0cy4KKwogMjAwOS0x
MS0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBCcmFkeSBFaWRzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29uc29sZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29s
ZVZpZXcuanMKaW5kZXggMTYxMmFjNS4uZmFkYzYxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcwpAQCAtNTksMzQgKzU5LDI5IEBAIFdlYkluc3BlY3Rvci5D
b25zb2xlVmlldyA9IGZ1bmN0aW9uKGRyYXdlcikKIAogICAgIC8vIFdpbGwgaG9sZCB0aGUgbGlz
dCBvZiBmaWx0ZXIgZWxlbWVudHMKICAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1maWx0ZXIiKTsKLSAgICAKKwogICAgIGZ1bmN0aW9u
IGNyZWF0ZURpdmlkZXJFbGVtZW50KCkgewogICAgICAgICB2YXIgZGl2aWRlckVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgCiAgICAgICAgIGRpdmlkZXJF
bGVtZW50LmFkZFN0eWxlQ2xhc3MoImRpdmlkZXIiKTsKLSAgICAgICAgCiAgICAgICAgIHRoaXMu
ZmlsdGVyQmFyRWxlbWVudC5hcHBlbmRDaGlsZChkaXZpZGVyRWxlbWVudCk7CiAgICAgfQotICAg
IAorCisgICAgdmFyIHVwZGF0ZUZpbHRlckhhbmRsZXIgPSB0aGlzLl91cGRhdGVGaWx0ZXIuYmlu
ZCh0aGlzKTsKICAgICBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJFbGVtZW50KGNhdGVnb3J5KSB7CiAg
ICAgICAgIHZhciBjYXRlZ29yeUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIp
OwogICAgICAgICBjYXRlZ29yeUVsZW1lbnQuY2F0ZWdvcnkgPSBjYXRlZ29yeTsKLSAgICAgCi0g
ICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRTdHlsZUNsYXNzKGNhdGVnb3J5RWxlbWVudC5jYXRl
Z29yeSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZFN0eWxlQ2xh
c3MoY2F0ZWdvcnlFbGVtZW50LmNhdGVnb3J5KTsgICAgICAgICAgICAKKyAgICAgICAgY2F0ZWdv
cnlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdXBkYXRlRmlsdGVySGFuZGxlciwg
ZmFsc2UpOworCiAgICAgICAgIHZhciBsYWJlbCA9IGNhdGVnb3J5LnRvU3RyaW5nKCk7CiAgICAg
ICAgIGNhdGVnb3J5RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShs
YWJlbCkpOwotICAgICAKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fdXBkYXRlRmlsdGVyLmJpbmQodGhpcyksIGZhbHNlKTsKLSAgICAgCisK
ICAgICAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmFwcGVuZENoaWxkKGNhdGVnb3J5RWxlbWVu
dCk7CiAgICAgICAgIHJldHVybiBjYXRlZ29yeUVsZW1lbnQ7CiAgICAgfQogICAgIAogICAgIHRo
aXMuYWxsRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0aGlzLCAiQWxsIik7Ci0g
ICAgCiAgICAgY3JlYXRlRGl2aWRlckVsZW1lbnQuY2FsbCh0aGlzKTsKLSAgICAKICAgICB0aGlz
LmVycm9yRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0aGlzLCAiRXJyb3JzIik7
CiAgICAgdGhpcy53YXJuaW5nRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0aGlz
LCAiV2FybmluZ3MiKTsKICAgICB0aGlzLmxvZ0VsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50
LmNhbGwodGhpcywgIkxvZ3MiKTsKQEAgLTEwMyw2ICs5OCwxMiBAQCBXZWJJbnNwZWN0b3IuQ29u
c29sZVZpZXcgPSBmdW5jdGlvbihkcmF3ZXIpCiAgICAgdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0
XS5pc01hY09ubHkgPSB0cnVlOwogICAgIHNob3J0Y3V0ID0gV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQubWFrZUtleSgibCIsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlm
aWVycy5DdHJsKTsKICAgICB0aGlzLl9zaG9ydGN1dHNbc2hvcnRjdXRdID0gaGFuZGxlcjsKKwor
ICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisgICAgICAgICJvYmplY3QiOiB0aGlzLl9m
b3JtYXRvYmplY3QsCisgICAgICAgICJhcnJheSI6ICB0aGlzLl9mb3JtYXRhcnJheSwKKyAgICAg
ICAgIm5vZGUiOiAgIHRoaXMuX2Zvcm1hdG5vZGUKKyAgICB9OwogfQogCiBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcucHJvdG90eXBlID0gewpAQCAtMjUwLDcgKzI1MSw4IEBAIFdlYkluc3BlY3Rv
ci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucHJvbXB0RWxlbWVudC5z
Y3JvbGxJbnRvVmlldyhmYWxzZSk7CiAgICAgfSwKIAotICAgIHVwZGF0ZU1lc3NhZ2VSZXBlYXRD
b3VudDogZnVuY3Rpb24oY291bnQpIHsKKyAgICB1cGRhdGVNZXNzYWdlUmVwZWF0Q291bnQ6IGZ1
bmN0aW9uKGNvdW50KQorICAgIHsKICAgICAgICAgdmFyIG1zZyA9IHRoaXMucHJldmlvdXNNZXNz
YWdlOwogICAgICAgICB2YXIgcHJldlJlcGVhdENvdW50ID0gbXNnLnRvdGFsUmVwZWF0Q291bnQ7
CiAgICAgICAgIApAQCAtMjY4LDcgKzI3MCw4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgX2luY3JlbWVudEVycm9yV2Fy
bmluZ0NvdW50OiBmdW5jdGlvbihtc2cpIHsKKyAgICBfaW5jcmVtZW50RXJyb3JXYXJuaW5nQ291
bnQ6IGZ1bmN0aW9uKG1zZykKKyAgICB7CiAgICAgICAgIHN3aXRjaCAobXNnLmxldmVsKSB7CiAg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
V2FybmluZzoKICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iud2FybmluZ3MgKz0gbXNnLnJl
cGVhdERlbHRhOwpAQCAtNDc4LDQ0ICs0ODEsMTggQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3
LnByb3RvdHlwZSA9IHsKICAgICBfZm9ybWF0OiBmdW5jdGlvbihvdXRwdXQsIGZvcmNlT2JqZWN0
Rm9ybWF0KQogICAgIHsKICAgICAgICAgdmFyIGlzUHJveHkgPSAob3V0cHV0ICE9IG51bGwgJiYg
dHlwZW9mIG91dHB1dCA9PT0gIm9iamVjdCIpOworICAgICAgICB2YXIgdHlwZSA9IChmb3JjZU9i
amVjdEZvcm1hdCA/ICJvYmplY3QiIDogT2JqZWN0LnByb3h5VHlwZShvdXRwdXQpKTsKIAotICAg
ICAgICBpZiAoZm9yY2VPYmplY3RGb3JtYXQpCi0gICAgICAgICAgICB2YXIgdHlwZSA9ICJvYmpl
Y3QiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgdHlwZSA9IE9iamVjdC5wcm94eVR5
cGUob3V0cHV0KTsKLQotICAgICAgICBpZiAoaXNQcm94eSAmJiB0eXBlICE9PSAib2JqZWN0IiAm
JiB0eXBlICE9PSAiZnVuY3Rpb24iICYmIHR5cGUgIT09ICJhcnJheSIgJiYgdHlwZSAhPT0gIm5v
ZGUiKSB7Ci0gICAgICAgICAgICAvLyBVbndyYXAgcHJpbWl0aXZlIHZhbHVlLCBza2lwIGRlY29y
YXRpb24uCi0gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVzY3JpcHRpb247Ci0gICAgICAg
ICAgICB0eXBlID0gInVuZGVjb3JhdGVkIgotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgZG9u
J3QgcGVyZm9ybSBhbnkgc3BlY2lhbCBmb3JtYXR0aW5nIG9uIHRoZXNlIHR5cGVzLCBzbyB3ZSBq
dXN0Ci0gICAgICAgIC8vIHBhc3MgdGhlbSB0aHJvdWdoIHRoZSBzaW1wbGUgX2Zvcm1hdHZhbHVl
IGZ1bmN0aW9uLgotICAgICAgICB2YXIgdW5kZWNvcmF0ZWRUeXBlcyA9IHsKLSAgICAgICAgICAg
ICJ1bmRlZmluZWQiOiAxLAotICAgICAgICAgICAgIm51bGwiOiAxLAotICAgICAgICAgICAgImJv
b2xlYW4iOiAxLAotICAgICAgICAgICAgIm51bWJlciI6IDEsCi0gICAgICAgICAgICAidW5kZWNv
cmF0ZWQiOiAxCi0gICAgICAgIH07Ci0KLSAgICAgICAgdmFyIGZvcm1hdHRlcjsKLSAgICAgICAg
aWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQotICAgICAgICAgICAgZm9ybWF0dGVyID0gIl9mb3JtYXRv
YmplY3QiOwotICAgICAgICBlbHNlIGlmICh0eXBlIGluIHVuZGVjb3JhdGVkVHlwZXMpCi0gICAg
ICAgICAgICBmb3JtYXR0ZXIgPSAiX2Zvcm1hdHZhbHVlIjsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBmb3JtYXR0ZXIgPSAiX2Zvcm1hdCIgKyB0eXBlOwotICAgICAgICAgICAgaWYgKCEo
Zm9ybWF0dGVyIGluIHRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVyID0gIl9mb3Jt
YXRvYmplY3QiOwotICAgICAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRoaXMuX2N1c3RvbUZvcm1hdHRlcnNbdHlwZV07
CisgICAgICAgIGlmICghZm9ybWF0dGVyIHx8ICFpc1Byb3h5KSB7CisgICAgICAgICAgICBmb3Jt
YXR0ZXIgPSB0aGlzLl9mb3JtYXR2YWx1ZTsKKyAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5k
ZXNjcmlwdGlvbiB8fCBvdXRwdXQ7CisgICAgICAgICAgICB0eXBlID0gInVuZGVjb3JhdGVkIjsK
ICAgICAgICAgfQogCiAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOwogICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZm9ybWF0dGVkLSIg
KyB0eXBlKTsKLSAgICAgICAgdGhpc1tmb3JtYXR0ZXJdKG91dHB1dCwgc3Bhbik7CisgICAgICAg
IGZvcm1hdHRlci5jYWxsKHRoaXMsIG91dHB1dCwgc3Bhbik7CiAgICAgICAgIHJldHVybiBzcGFu
OwogICAgIH0sCiAKQEAgLTUyNCwyNSArNTAxLDI3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodmFsKSk7CiAgICAgfSwKIAotICAgIF9mb3JtYXRmdW5jdGlvbjogZnVuY3Rpb24o
ZnVuYywgZWxlbSkKLSAgICB7Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoZnVuYy5kZXNjcmlwdGlvbikpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0ZGF0
ZTogZnVuY3Rpb24oZGF0ZSwgZWxlbSkKKyAgICBfZm9ybWF0b2JqZWN0OiBmdW5jdGlvbihvYmos
IGVsZW0pCiAgICAgewotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKGRhdGUpKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9y
Lk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uLCBudWxsLCB0cnVl
KS5lbGVtZW50KTsKICAgICB9LAogCi0gICAgX2Zvcm1hdHN0cmluZzogZnVuY3Rpb24oc3RyLCBl
bGVtKQorICAgIF9mb3JtYXRub2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCiAgICAgewotICAg
ICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcIiIgKyBzdHIg
KyAiXCIiKSk7Ci0gICAgfSwKKyAgICAgICAgZnVuY3Rpb24gcHJpbnROb2RlKG5vZGVJZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFub2RlSWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFdlYkluc3BlY3Rvci5FbGVtZW50
c1RyZWVPdXRsaW5lKCk7CisgICAgICAgICAgICB0cmVlT3V0bGluZS5zaG93SW5FbGVtZW50c1Bh
bmVsRW5hYmxlZCA9IHRydWU7CisgICAgICAgICAgICB0cmVlT3V0bGluZS5yb290RE9NTm9kZSA9
IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICAgICAgICAgIHRy
ZWVPdXRsaW5lLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygib3V0bGluZS1kaXNjbG9zdXJlIik7Cisg
ICAgICAgICAgICBpZiAoIXRyZWVPdXRsaW5lLmNoaWxkcmVuWzBdLmhhc0NoaWxkcmVuKQorICAg
ICAgICAgICAgICAgIHRyZWVPdXRsaW5lLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2luZ2xlLW5v
ZGUiKTsKKyAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQodHJlZU91dGxpbmUuZWxlbWVudCk7
CisgICAgICAgIH0KIAotICAgIF9mb3JtYXRyZWdleHA6IGZ1bmN0aW9uKHJlLCBlbGVtKQotICAg
IHsKLSAgICAgICAgdmFyIGZvcm1hdHRlZCA9IFN0cmluZyhyZS5kZXNjcmlwdGlvbikucmVwbGFj
ZSgvKFtcXFwvXSkvZywgIlxcJDEiKS5yZXBsYWNlKC9cXChcL1tnaW1dKikkLywgIiQxIikuc3Vi
c3RyaW5nKDEpOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGZvcm1hdHRlZCkpOworICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wdXNoTm9kZVRv
RnJvbnRlbmQob2JqZWN0LCBwcmludE5vZGUpOwogICAgIH0sCiAKICAgICBfZm9ybWF0YXJyYXk6
IGZ1bmN0aW9uKGFyciwgZWxlbSkKQEAgLTU1NCw2ICs1MzMsNyBAQCBXZWJJbnNwZWN0b3IuQ29u
c29sZVZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKQog
ICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHZhciBlbGVtZW50cyA9IFtdOwogICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgIHZhciBuYW1lID0gcHJvcGVydGllc1tpXS5uYW1lOwpAQCAtNTcyLDUzICs1NTIsNiBAQCBX
ZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGVs
ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiwgIikpOwogICAgICAgICB9
CiAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIl0iKSk7
Ci0gICAgfSwKLQotICAgIF9mb3JtYXRub2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCi0gICAg
ewotICAgICAgICBmdW5jdGlvbiBwcmludE5vZGUobm9kZUlkKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGVJZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB2
YXIgdHJlZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUoKTsK
LSAgICAgICAgICAgIHRyZWVPdXRsaW5lLnNob3dJbkVsZW1lbnRzUGFuZWxFbmFibGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLnJvb3RET01Ob2RlID0gV2ViSW5zcGVjdG9yLmRv
bUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwotICAgICAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVu
dC5hZGRTdHlsZUNsYXNzKCJvdXRsaW5lLWRpc2Nsb3N1cmUiKTsKLSAgICAgICAgICAgIGlmICgh
dHJlZU91dGxpbmUuY2hpbGRyZW5bMF0uaGFzQ2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgdHJl
ZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaW5nbGUtbm9kZSIpOwotICAgICAgICAg
ICAgZWxlbS5hcHBlbmRDaGlsZCh0cmVlT3V0bGluZS5lbGVtZW50KTsKLSAgICAgICAgfQotICAg
ICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5wdXNoTm9kZVRvRnJvbnRlbmQob2JqZWN0LCBwcmlu
dE5vZGUpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0b2JqZWN0OiBmdW5jdGlvbihvYmosIGVsZW0p
Ci0gICAgewotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0
UHJvcGVydGllc1NlY3Rpb24ob2JqLCBvYmouZGVzY3JpcHRpb24sIG51bGwsIHRydWUpLmVsZW1l
bnQpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0ZXJyb3I6IGZ1bmN0aW9uKG9iaiwgZWxlbSkKLSAg
ICB7Ci0gICAgICAgIHZhciBtZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKLSAgICAgICAgbWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImVycm9yLW1lc3Nh
Z2UiOwotICAgICAgICBtZXNzYWdlRWxlbWVudC50ZXh0Q29udGVudCA9IG9iai5uYW1lICsgIjog
IiArIG9iai5tZXNzYWdlOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50
KTsKLQotICAgICAgICBpZiAob2JqLnNvdXJjZVVSTCkgewotICAgICAgICAgICAgdmFyIHVybEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgICAgICAgICB1cmxFbGVt
ZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5rIjsKLSAgICAgICAgICAg
IHVybEVsZW1lbnQuaHJlZiA9IG9iai5zb3VyY2VVUkw7Ci0gICAgICAgICAgICB1cmxFbGVtZW50
LmxpbmVOdW1iZXIgPSBvYmoubGluZTsKLSAgICAgICAgICAgIHVybEVsZW1lbnQucHJlZmVycmVk
UGFuZWwgPSAic2NyaXB0cyI7Ci0KLSAgICAgICAgICAgIGlmIChvYmoubGluZSA+IDApCi0gICAg
ICAgICAgICAgICAgdXJsRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5kaXNwbGF5
TmFtZUZvclVSTChvYmouc291cmNlVVJMKSArICI6IiArIG9iai5saW5lOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHVybEVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0
b3IuZGlzcGxheU5hbWVGb3JVUkwob2JqLnNvdXJjZVVSTCk7Ci0KLSAgICAgICAgICAgIGVsZW0u
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAoIikpOwotICAgICAgICAgICAg
ZWxlbS5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKLSAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIikiKSk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAK
QEAgLTY3Myw2MiArNjA2LDI4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5
cGUgPSB7CiAKICAgICBfZm9ybWF0OiBmdW5jdGlvbihwYXJhbWV0ZXJzKQogICAgIHsKKyAgICAg
ICAgLy8gVGhpcyBub2RlIGlzIHVzZWQgbGlrZSBhIEJ1aWxkZXIuIFZhbHVlcyBhcmUgY29udGlu
dHVhbGx5IGFwcGVuZGVkIG9udG8gaXQuCiAgICAgICAgIHZhciBmb3JtYXR0ZWRSZXN1bHQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0KICAgICAgICAgaWYgKCFwYXJhbWV0ZXJz
Lmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CiAKICAgICAgICAg
Ly8gRm9ybWF0dGluZyBjb2RlIGJlbG93IGFzc3VtZXMgdGhhdCBwYXJhbWV0ZXJzIGFyZSBhbGwg
d3JhcHBlcnMgd2hlcmVhcyBmcm9udGVuZCBjb25zb2xlCiAgICAgICAgIC8vIEFQSSBhbGxvd3Mg
cGFzc2luZyBhcmJpdHJhcnkgdmFsdWVzIGFzIG1lc3NhZ2VzIChzdHJpbmdzLCBudW1iZXJ0cywg
ZXRjLikuIFdyYXAgdGhlbSBoZXJlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFt
ZXRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0
ZXJzLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldICE9
PSAib2JqZWN0IiAmJiB0eXBlb2YgcGFyYW1ldGVyc1tpXSAhPT0gImZ1bmN0aW9uIikKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5LndyYXBQ
cmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0
aW9uIGZvcm1hdEZvckNvbnNvbGUob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmNvbnNvbGUuX2Zvcm1hdChvYmopOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZm9ybWF0QXNPYmplY3RGb3JDb25zb2xlKG9iaikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jb25zb2xlLl9mb3JtYXQob2JqLCB0cnVlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChPYmplY3QucHJveHlUeXBlKHBhcmFtZXRlcnNbMF0pID09
PSAic3RyaW5nIikgewotICAgICAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7fQotICAgICAgICAg
ICAgZm9yICh2YXIgaSBpbiBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzKQotICAgICAgICAgICAg
ICAgIGZvcm1hdHRlcnNbaV0gPSBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzW2ldOwotCi0gICAg
ICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4KLSAgICAg
ICAgICAgIGZvcm1hdHRlcnMubyA9IGZvcm1hdEZvckNvbnNvbGU7Ci0gICAgICAgICAgICAvLyBG
aXJlYnVnIGFsbG93cyBib3RoICVpIGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KLSAg
ICAgICAgICAgIGZvcm1hdHRlcnMuaSA9IGZvcm1hdHRlcnMuZDsKLSAgICAgICAgICAgIC8vIFN1
cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdGluZywgaW5zdGVhZCBvZiB0aGUgdHlwZS1i
YXNlZCAlbyBmb3JtYXR0aW5nLgotICAgICAgICAgICAgZm9ybWF0dGVycy5PID0gZm9ybWF0QXNP
YmplY3RGb3JDb25zb2xlOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBhcHBlbmQoYSwgYikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgTm9kZSkpCi0g
ICAgICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJp
bmdBc0ZyYWdtZW50KGIudG9TdHJpbmcoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
YTsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFN0cmluZy5mb3Jt
YXQocGFyYW1ldGVyc1swXS5kZXNjcmlwdGlvbiwgcGFyYW1ldGVycy5zbGljZSgxKSwgZm9ybWF0
dGVycywgZm9ybWF0dGVkUmVzdWx0LCBhcHBlbmQpOwotICAgICAgICAgICAgZm9ybWF0dGVkUmVz
dWx0ID0gcmVzdWx0LmZvcm1hdHRlZFJlc3VsdDsKKyAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1l
dGVycyB3aXRoIHRoZSBmaXJzdCBiZWluZyBhIGZvcm1hdCBzdHJpbmcuIFNhdmUgdW51c2VkIHN1
YnN0aXR1dGlvbnMuCisgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCA+IDEgJiYgT2JqZWN0
LnByb3h5VHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKHBhcmFtZXRlcnMs
IGZvcm1hdHRlZFJlc3VsdCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSByZXN1bHQudW51c2Vk
U3Vic3RpdHV0aW9uczsKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkKICAgICAg
ICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIiAiKSk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyLCBv
ciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBmcm9tIGFib3ZlLgogICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChPYmplY3Qu
cHJveHlUeXBlKHBhcmFtZXRlcnNbaV0pID09PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICBm
b3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0Zy
YWdtZW50KHBhcmFtZXRlcnNbaV0uZGVzY3JpcHRpb24pKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZm9ybWF0Rm9yQ29uc29s
ZShwYXJhbWV0ZXJzW2ldKSk7Ci0KKyAgICAgICAgICAgIHRoaXMuX2Zvcm1hdEluZGl2aWR1YWxW
YWx1ZShwYXJhbWV0ZXJzW2ldLCBmb3JtYXR0ZWRSZXN1bHQpOwogICAgICAgICAgICAgaWYgKGkg
PCBwYXJhbWV0ZXJzLmxlbmd0aCAtIDEpCiAgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOwogICAgICAgICB9CkBA
IC03MzYsNiArNjM1LDUxIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CiAgICAgfSwKIAorICAgIF9mb3Jt
YXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nOiBmdW5jdGlvbihwYXJhbWV0ZXJzLCBmb3JtYXR0ZWRS
ZXN1bHQpCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHt9CisgICAgICAgIGZvciAo
dmFyIGkgaW4gU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVycykKKyAgICAgICAgICAgIGZvcm1hdHRl
cnNbaV0gPSBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzW2ldOworCisgICAgICAgIGZ1bmN0aW9u
IGNvbnNvbGVGb3JtYXRXcmFwcGVyKGZvcmNlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24ob2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5j
b25zb2xlLl9mb3JtYXQob2JqLCBmb3JjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4KKyAgICAg
ICAgZm9ybWF0dGVycy5vID0gY29uc29sZUZvcm1hdFdyYXBwZXIoKTsKKyAgICAgICAgLy8gRmly
ZWJ1ZyBhbGxvd3MgYm90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCisgICAg
ICAgIGZvcm1hdHRlcnMuaSA9IGZvcm1hdHRlcnMuZDsKKyAgICAgICAgLy8gU3VwcG9ydCAlTyB0
byBmb3JjZSBvYmplY3QgZm9ybWF0aW5nLCBpbnN0ZWFkIG9mIHRoZSB0eXBlLWJhc2VkICVvIGZv
cm1hdHRpbmcuCisgICAgICAgIGZvcm1hdHRlcnMuTyA9IGNvbnNvbGVGb3JtYXRXcmFwcGVyKHRy
dWUpOworCisgICAgICAgIGZ1bmN0aW9uIGFwcGVuZChhLCBiKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIShiIGluc3RhbmNlb2YgTm9kZSkpCisgICAgICAgICAgICAgICAgYS5hcHBlbmRD
aGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygpKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKKyAg
ICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RyaW5nLmZvcm1h
dCBkb2VzIHRyZWF0IGZvcm1hdHRlZFJlc3VsdCBsaWtlIGEgQnVpbGRlciwgcmVzdWx0IGlzIGFu
IG9iamVjdC4KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQocGFyYW1ldGVyc1swXS5kZXNj
cmlwdGlvbiwgcGFyYW1ldGVycy5zbGljZSgxKSwgZm9ybWF0dGVycywgZm9ybWF0dGVkUmVzdWx0
LCBhcHBlbmQpOworICAgIH0sCisKKyAgICBfZm9ybWF0SW5kaXZpZHVhbFZhbHVlOiBmdW5jdGlv
bihwYXJhbSwgZm9ybWF0dGVkUmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKE9iamVjdC5wcm94
eVR5cGUocGFyYW0pID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2lu
YXRpbmdDb21tYW5kICYmIHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuTG9nKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1b3RlZFN0cmluZyA9
ICJcIiIgKyBwYXJhbS5kZXNjcmlwdGlvbi5yZXBsYWNlKC8iL2csICJcXFwiIikgKyAiXCIiOwor
ICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3Iu
bGlua2lmeVN0cmluZ0FzRnJhZ21lbnQocXVvdGVkU3RyaW5nKSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVj
dG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50KHBhcmFtLmRlc2NyaXB0aW9uKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKFdlYkluc3Bl
Y3Rvci5jb25zb2xlLl9mb3JtYXQocGFyYW0pKTsKKyAgICB9LAorCiAgICAgdG9NZXNzYWdlRWxl
bWVudDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCkBAIC05
ODMsOSArOTI3LDkgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0ID0gZnVuY3Rp
b24ocmVzdWx0LCBleGNlcHRpb24sIG9yaWdpbmF0aW5nQ29tbWEKICAgICB2YXIgbGluZSA9IChl
eGNlcHRpb24gPyByZXN1bHQubGluZSA6IC0xKTsKICAgICB2YXIgdXJsID0gKGV4Y2VwdGlvbiA/
IHJlc3VsdC5zb3VyY2VVUkwgOiBudWxsKTsKIAotICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
LkpTLCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nLCBsZXZlbCwg
bGluZSwgdXJsLCBudWxsLCAxLCBtZXNzYWdlKTsKLQogICAgIHRoaXMub3JpZ2luYXRpbmdDb21t
YW5kID0gb3JpZ2luYXRpbmdDb21tYW5kOworCisgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2Uu
SlMsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Mb2csIGxldmVsLCBs
aW5lLCB1cmwsIG51bGwsIDEsIG1lc3NhZ2UpOwogfQogCiBXZWJJbnNwZWN0b3IuQ29uc29sZUNv
bW1hbmRSZXN1bHQucHJvdG90eXBlID0gewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDNmMzkzN2MuLmYyMTI4MGQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTEyMTYsOCArMTIxNiw2
IEBAIE9iamVjdC5kZXNjcmliZSA9IGZ1bmN0aW9uKG9iaiwgYWJicmV2aWF0ZWQpCiAgICAgICAg
IGVsc2UgaWYgKGFiYnJldmlhdGVkKQogICAgICAgICAgICAgb2JqZWN0VGV4dCA9IC8uKi8uZXhl
YyhvYmopWzBdLnJlcGxhY2UoLyArJC9nLCAiIik7CiAgICAgICAgIHJldHVybiBvYmplY3RUZXh0
OwotICAgIGNhc2UgInJlZ2V4cCI6Ci0gICAgICAgIHJldHVybiBTdHJpbmcob2JqKS5yZXBsYWNl
KC8oW1xcXC9dKS9nLCAiXFwkMSIpLnJlcGxhY2UoL1xcKFwvW2dpbV0qKSQvLCAiJDEiKS5zdWJz
dHJpbmcoMSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmopOwogICAg
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDBmOGVjMTIu
LmQ0ZmZkMjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAt
MTQ2NCw3ICsxNDY0LDcgQEAgV2ViSW5zcGVjdG9yLnNob3dSZXNvdXJjZUZvclVSTCA9IGZ1bmN0
aW9uKHVybCwgbGluZSwgcHJlZmVycmVkUGFuZWwpCiBXZWJJbnNwZWN0b3IubGlua2lmeVN0cmlu
Z0FzRnJhZ21lbnQgPSBmdW5jdGlvbihzdHJpbmcpCiB7CiAgICAgdmFyIGNvbnRhaW5lciA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICB2YXIgbGlua1N0cmluZ1JlZ0V4
ID0gbmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06Ly98d3d3XFwuKVtc
XHckXFwtXysqJz1cXHwvXFxcXCgpe31bXFxdJUAmI34sOjsuIT9dezIsfVtcXHckXFwtXysqPVxc
fC9cXFxcKHslQCYjfl0iKTsKKyAgICB2YXIgbGlua1N0cmluZ1JlZ0V4ID0gLyg/OlthLXpBLVpd
W2EtekEtWjAtOSsuLV17Mix9OlwvXC98d3d3XC4pW1x3JFwtXysqJz1cfFwvXFwoKXt9W1xdJUAm
I34sOjsuIT9dezIsfVtcdyRcLV8rKj1cfFwvXFwoeyVAJiN+XS87CiAKICAgICB3aGlsZSAoc3Ry
aW5nKSB7CiAgICAgICAgIHZhciBsaW5rU3RyaW5nID0gbGlua1N0cmluZ1JlZ0V4LmV4ZWMoc3Ry
aW5nKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IGQ1MmM5
YTMuLjA0YzkwMzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGls
aXRpZXMuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpA
QCAtMTc4LDcgKzE3OCw3IEBAIEVsZW1lbnQucHJvdG90eXBlLmhhc1N0eWxlQ2xhc3MgPSBmdW5j
dGlvbihjbGFzc05hbWUpCiB7CiAgICAgaWYgKCFjbGFzc05hbWUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAvLyBUZXN0IGZvciB0aGUgc2ltcGxlIGNhc2UgYmVmb3JlIHVzaW5nIGEgUmVn
RXhwLgorICAgIC8vIFRlc3QgZm9yIHRoZSBzaW1wbGUgY2FzZQogICAgIGlmICh0aGlzLmNsYXNz
TmFtZSA9PT0gY2xhc3NOYW1lKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMzUwLDcgKzM1
MCw3IEBAIFN0cmluZy5wcm90b3R5cGUudHJpbVdoaXRlc3BhY2UgPSBmdW5jdGlvbigpCiAKIFN0
cmluZy5wcm90b3R5cGUudHJpbVVSTCA9IGZ1bmN0aW9uKGJhc2VVUkxEb21haW4pCiB7Ci0gICAg
dmFyIHJlc3VsdCA9IHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKCJeaHR0cFtzXT86XC9cLyIsICJp
IiksICIiKTsKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXBsYWNlKC9eaHR0cHM/OlwvXC8vaSwg
IiIpOwogICAgIGlmIChiYXNlVVJMRG9tYWluKQogICAgICAgICByZXN1bHQgPSByZXN1bHQucmVw
bGFjZShuZXcgUmVnRXhwKCJeIiArIGJhc2VVUkxEb21haW4uZXNjYXBlRm9yUmVnRXhwKCksICJp
IiksICIiKTsKICAgICByZXR1cm4gcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43896</attachid>
            <date>2009-11-25 22:53:41 -0800</date>
            <delta_ts>2009-11-26 05:59:34 -0800</delta_ts>
            <desc>[PATCH] Desired Behavior + Some Refactoring</desc>
            <filename>format.patch</filename>
            <type>text/plain</type>
            <size>25483</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTZkOWU1Li44NzQyZDA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMTEt
MjQgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXcm9uZyBj
b25zb2xlIG91dHB1dCBmb3IgUmVnZXhwIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MzgKKworICAgICAgICAqIGluc3Bl
Y3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6CisKIDIwMDktMTEtMjQgIERhcmluIEZpc2hlciAgPGRhcmluQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtZm9ybWF0LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC1leHBlY3RlZC50eHQKaW5kZXggNTVm
NjUwYi4uZjVmN2U5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUt
Zm9ybWF0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1m
b3JtYXQtZXhwZWN0ZWQudHh0CkBAIC0xLDExICsxLDY1IEBACi1DT05TT0xFIE1FU1NBR0U6IGxp
bmUgOTogTWVzc2FnZSBmb3JtYXQgbnVtYmVyICVpLCAlZCBhbmQgJWYKLUNPTlNPTEUgTUVTU0FH
RTogbGluZSAxMDogTWVzc2FnZSAlcyBmb3IgJXMKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAxMTog
T2JqZWN0ICVvCi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6IHRlc3QsdGVzdDIsLCx0ZXN0NAor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDEyOiBNZXNzYWdlIGZvcm1hdCBudW1iZXIgJWksICVkIGFu
ZCAlZgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDEzOiBNZXNzYWdlICVzIGZvciAlcworQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE0OiBPYmplY3QgJW8KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOTog
dGVzdCx0ZXN0MiwsLHRlc3Q0CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IC9edXJsXChccyoo
PzooPzoiKD86W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKiJ8Jyg/OlteXFxcJ118
KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSonKXwoPzpbISMkJSYqLX5cd118KD86XFxbXGRhLWZd
ezEsNn1ccz98XC4pKSopXHMqXCkvaQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiAvXnVybFwo
XHMqKD86KD86Iig/OlteXFxcIl18KD86XFxbXGRhLWZdezEsNn1ccz98XC4pKSoifCcoPzpbXlxc
XCddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqJyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xk
YS1mXXsxLDZ9XHM/fFwuKSkqKVxzKlwpL2kKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA0OTogL2Zv
b1xcYmFyXHNiYXovaQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiAvZm9vXFxiYXJcc2Jhei9p
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDk6IHRlc3QKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1
MDogdGVzdAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDQ5OiBFcnJvcjogVW5rbm93biBlcnJvcgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiBFcnJvcjogVW5rbm93biBlcnJvcgorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDQ5OiBbb2JqZWN0IEhUTUxCb2R5RWxlbWVudF0KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSA1MDogW29iamVjdCBIVE1MQm9keUVsZW1lbnRdCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgNDk6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0KK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1
MDogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDQ5OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KK0NPTlNPTEUgTUVTU0FHRTog
bGluZSA1MDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gMjsKKyAgICB9CitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgNDk6IDAuMTIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSA1MDogMC4xMgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDQ5OiBodHRwOi8vd2Via2l0Lm9yZy8KK0NPTlNPTEUgTUVT
U0FHRTogbGluZSA1MDogaHR0cDovL3dlYmtpdC5vcmcvCitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
NDk6IHVuZGVmaW5lZAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDUwOiAKIFRlc3RzIHRoYXQgY29u
c29sZSBsb2dnaW5nIGR1bXBzIHByb3BlciBtZXNzYWdlcy4KIAotY29uc29sZS1mb3JtYXQuaHRt
bDo5TWVzc2FnZSBmb3JtYXQgbnVtYmVyIDEsIDIgYW5kIDMuNQotY29uc29sZS1mb3JtYXQuaHRt
bDoxME1lc3NhZ2UgZm9ybWF0IGZvciBzdHJpbmcKLWNvbnNvbGUtZm9ybWF0Lmh0bWw6MTFPYmpl
Y3QgT2JqZWN0Ci1jb25zb2xlLWZvcm1hdC5odG1sOjE2WyJ0ZXN0IiwgInRlc3QyIiwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsICJ0ZXN0NCJdCitjb25zb2xlLWZvcm1hdC5odG1sOjEyTWVzc2FnZSBm
b3JtYXQgbnVtYmVyIDEsIDIgYW5kIDMuNQorY29uc29sZS1mb3JtYXQuaHRtbDoxM01lc3NhZ2Ug
Zm9ybWF0IGZvciBzdHJpbmcKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6MTRPYmplY3QgT2JqZWN0Citj
b25zb2xlLWZvcm1hdC5odG1sOjE5WyJ0ZXN0IiwgInRlc3QyIiwgdW5kZWZpbmVkLCB1bmRlZmlu
ZWQsICJ0ZXN0NCJdCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5L151cmxcKFxzKig/Oig/OiIoPzpb
XlxcXCJdfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqInwnKD86W15cXFwnXXwoPzpcXFtcZGEt
Zl17MSw2fVxzP3xcLikpKicpfCg/OlshIyQlJiotflx3XXwoPzpcXFtcZGEtZl17MSw2fVxzP3xc
LikpKilccypcKS9pCitjb25zb2xlLWZvcm1hdC5odG1sOjUwWy9edXJsXChccyooPzooPzoiKD86
W15cXFwiXXwoPzpcXFtcZGEtZl17MSw2fVxzP3xcLikpKiJ8Jyg/OlteXFxcJ118KD86XFxbXGRh
LWZdezEsNn1ccz98XC4pKSonKXwoPzpbISMkJSYqLX5cd118KD86XFxbXGRhLWZdezEsNn1ccz98
XC4pKSopXHMqXCkvaV0KKyIvXnVybFwoXHMqKD86KD86XCIoPzpbXlxcXFwiXXwoPzpcXFtcZGEt
Zl17MSw2fVxzP3xcLikpKlwifCcoPzpbXlxcXCddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkq
Jyl8KD86WyEjJCUmKi1+XHddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqKVxzKlwpL2kiCitj
b25zb2xlLWZvcm1hdC5odG1sOjQ5L2Zvb1xcYmFyXHNiYXovaQorY29uc29sZS1mb3JtYXQuaHRt
bDo1MFsvZm9vXFxiYXJcc2Jhei9pXQorIi9mb29cXGJhclxzYmF6L2kiCitjb25zb2xlLWZvcm1h
dC5odG1sOjQ5dGVzdAorY29uc29sZS1mb3JtYXQuaHRtbDo1MFsidGVzdCJdCisidGVzdCIKK2Nv
bnNvbGUtZm9ybWF0Lmh0bWw6NDlFcnJvcjogVW5rbm93biBlcnJvcgorY29uc29sZS1mb3JtYXQu
aHRtbDo1MFtFcnJvcjogVW5rbm93biBlcnJvcl0KK0Vycm9yOiBVbmtub3duIGVycm9yCitjb25z
b2xlLWZvcm1hdC5odG1sOjQ5PGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+Citjb25zb2xlLWZvcm1h
dC5odG1sOjUwWzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPl0KKyJIVE1MQm9keUVsZW1lbnQiCitj
b25zb2xlLWZvcm1hdC5odG1sOjQ5ZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfQorY29uc29sZS1m
b3JtYXQuaHRtbDo1MFtmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9XQorImZ1bmN0aW9uICgpIHsg
cmV0dXJuIDE7IH0iCitjb25zb2xlLWZvcm1hdC5odG1sOjQ5ZnVuY3Rpb24gKCkgeyByZXR1cm4g
MjsgfQorY29uc29sZS1mb3JtYXQuaHRtbDo1MFtmdW5jdGlvbiAoKSB7XQorImZ1bmN0aW9uICgp
IHs8YnI+IHJldHVybiAyOzxicj4gfSIKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NDkwLjEyCitjb25z
b2xlLWZvcm1hdC5odG1sOjUwWzAuMTJdCisiMC4xMiIKK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NDlo
dHRwOi8vd2Via2l0Lm9yZy8KK2NvbnNvbGUtZm9ybWF0Lmh0bWw6NTBbImh0dHA6Ly93ZWJraXQu
b3JnLyJdCisiaHR0cDovL3dlYmtpdC5vcmcvIgorY29uc29sZS1mb3JtYXQuaHRtbDo0OXVuZGVm
aW5lZAorY29uc29sZS1mb3JtYXQuaHRtbDo1MFt1bmRlZmluZWRdCisidW5kZWZpbmVkIgogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS1mb3JtYXQuaHRtbCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCmluZGV4IDJkNmNkMGMuLjhh
ZWM4NWMgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCkBAIC00
LDYgKzQsOSBAQAogPHNjcmlwdCBzcmM9ImNvbnNvbGUtdGVzdHMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdD4KIAorLy8gR2xvYmFsIFZhbHVlcwordmFyIGdsb2JhbHMgPSBbXTsKKwogZnVuY3Rpb24g
ZG9pdCgpCiB7CiAgICAgY29uc29sZS5sb2coJ01lc3NhZ2UgZm9ybWF0IG51bWJlciAlaSwgJWQg
YW5kICVmJywgMSwgMiwgMy41KTsKQEAgLTE1LDcgKzE4LDYwIEBAIGZ1bmN0aW9uIGRvaXQoKQog
ICAgIGFycmF5WzRdID0gInRlc3Q0IjsKICAgICBjb25zb2xlLmxvZyhhcnJheSk7CiAKLSAgICBk
dW1wQ29uc29sZU1lc3NhZ2VzKCk7CisgICAgLy8gUG9wdWxhdGUgR2xvYmFscworICAgIHZhciBy
ZWdleDEgPSAvXnVybFwoXHMqKD86KD86Iig/OlteXFxcIl18KD86XFxbXGRhLWZdezEsNn1ccz98
XC4pKSoifCcoPzpbXlxcXCddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqJyl8KD86WyEjJCUm
Ki1+XHddfCg/OlxcW1xkYS1mXXsxLDZ9XHM/fFwuKSkqKVxzKlwpL2k7CisgICAgdmFyIHJlZ2V4
MiA9IG5ldyBSZWdFeHAoImZvb1xcXFxiYXJcXHNiYXoiLCAiaSIpOworICAgIHZhciBzdHIgPSAi
dGVzdCI7CisgICAgdmFyIGVycm9yID0gbmV3IEVycm9yOworICAgIHZhciBub2RlID0gZG9jdW1l
bnQuYm9keTsKKyAgICB2YXIgZnVuYyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfTsKKyAgICB2
YXIgbXVsdGlsaW5lZnVuYyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gMjsKKyAgICB9
OworICAgIHZhciBudW0gPSAxLjJlLTE7CisgICAgdmFyIGxpbmtpZnkgPSAiaHR0cDovL3dlYmtp
dC5vcmcvIjsKKworICAgIGdsb2JhbHMgPSBbcmVnZXgxLCByZWdleDIsIHN0ciwgZXJyb3IsIG5v
ZGUsIGZ1bmMsIG11bHRpbGluZWZ1bmMsIG51bSwgbGlua2lmeSwgdW5kZWZpbmVkXTsKKyAgICBs
b29wT3Zlckdsb2JhbHMoMCk7Cit9CisKK2Z1bmN0aW9uIGxvb3BPdmVyR2xvYmFscyhjdXJyZW50
KQoreworICAgIGZ1bmN0aW9uIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgdmFyIG5leHQgPSBj
dXJyZW50ICsgMTsKKyAgICAgICAgaWYgKG5leHQgPT0gZ2xvYmFscy5sZW5ndGgpCisgICAgICAg
ICAgICBkdW1wQ29uc29sZU1lc3NhZ2VzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
b3BPdmVyR2xvYmFscyhuZXh0KTsKKyAgICB9CisKKyAgICBjb25zb2xlLmxvZyhnbG9iYWxzW2N1
cnJlbnRdKTsKKyAgICBjb25zb2xlLmxvZyhbZ2xvYmFsc1tjdXJyZW50XV0pOworICAgIGV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoImZyb250ZW5kX2V2YWx1YXRlR2xvYmFsIiwgYWR2YW5jZSk7Cit9
CisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfZXZhbHVhdGVH
bG9iYWwoKQoreworICAgIHdpbmRvdy5fX25leHQgPSB3aW5kb3cuX19uZXh0IHx8IDA7CisgICAg
dmFyIGN1cnJlbnQgPSB3aW5kb3cuX19uZXh0Kys7CisgICAgdmFyIGV4cHJlc3Npb24gPSAiZ2xv
YmFsc1siICsgY3VycmVudCArICJdIjsKKyAgICBmcm9udGVuZF9ldmFsRXhwcmVzc2lvbihleHBy
ZXNzaW9uKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZXZhbEV4cHJlc3Npb24oZXhwcmVzc2lv
biwgaXNEYXRlKQoreworICAgIHZhciBzZWxmID0gV2ViSW5zcGVjdG9yLmNvbnNvbGU7CisgICAg
ZnVuY3Rpb24gcHJpbnRSZXN1bHQocmVzdWx0LCBleGNlcHRpb24pCisgICAgeworICAgICAgICBp
ZiAodHlwZW9mIHJlc3VsdC5kZXNjcmlwdGlvbiA9PT0gInN0cmluZyIpCisgICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXG4vZywgIjxicj4iKTsKKyAgICAg
ICAgc2VsZi5hZGRNZXNzYWdlKG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQo
cmVzdWx0LCBleGNlcHRpb24sIGV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICBzZWxmLmV2YWxJ
bkluc3BlY3RlZFdpbmRvdyhleHByZXNzaW9uLCAiY29uc29sZSIsIHByaW50UmVzdWx0KTsKIH0K
IAogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDE3NzA1MGUuLmZkMmQ5MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDktMTEtMjUg
IEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBXcm9uZyBjb25z
b2xlIG91dHB1dCBmb3IgUmVnZXhwIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE1MzgKKworICAgICAgICBVcGRhdGVkIGlu
c3BlY3Rvci9jb25zb2xlLWZvcm1hdC5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LmNy
ZWF0ZURpdmlkZXJFbGVtZW50KTogc3R5bGUgaXNzdWVzLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNvbnNvbGVWaWV3LmNyZWF0ZUZpbHRlckVsZW1lbnQpOiBzdHlsZSBpc3N1ZXMuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcpOiBhZGRlZCBfY3VzdG9tRm9ybWF0dGVycyB0YWJs
ZS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUudXBkYXRlTWVz
c2FnZVJlcGVhdENvdW50KTogc3R5bGUgaXNzZXMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29u
c29sZVZpZXcucHJvdG90eXBlLl9pbmNyZW1lbnRFcnJvcldhcm5pbmdDb3VudCk6IHN0eWxlIGlz
c3Vlcy4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX2Zvcm1h
dCk6IHNpbXBsaWZpZWQgZGVsZWdhdGlvbiB0byBmb3JtYXR0ZXIgbG9naWMuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3JtYXRvYmplY3QpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZm9ybWF0bm9kZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9wcmludEFycmF5KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuX2Zvcm1hdCk6IGNv
bW1lbnRlZCBhbmQgYnJva2UgZG93biB0aGUgYWxnb3JpdGhtIGludG8gcGFydHMuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3Rp
dHV0aW9uU3RyaW5nLmFwcGVuZCk6IGhhbmRsZSBzdWJzdGl0dXRpb24gc3RyaW5nIGZvcm1hdHRp
bmcuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLl9mb3Jt
YXRJbmRpdmlkdWFsVmFsdWUpOiBoYW5kbGluZyBpbmRpdmlkdWFsIHZhbHVlIGZvcm1hdHRpbmcu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6IHNpbXBsaWZpZWQgcmVnZXgg
Zm9ybWF0dGluZy4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudCk6IGNvbnZlcnRl
ZCBuZXcgUmVnRXhwIHRvIGxpdGVyYWwgZm9yIHBlcmZvcm1hbmNlIGJlbmVmaXRzLgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOiAKKyAgICAgICAgKEVsZW1lbnQu
cHJvdG90eXBlLmhhc1N0eWxlQ2xhc3MpOiB1cGRhdGUgaW5hY2N1cmF0ZSBjb21tZW50LgorICAg
ICAgICAoU3RyaW5nLnByb3RvdHlwZS50cmltVVJMKTogY29udmVydGVkIG5ldyBSZWdFeHAgdG8g
bGl0ZXJhbCBmb3IgcGVyZm9ybWFuY2UgYmVuZWZpdHMuCisKIDIwMDktMTEtMjQgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQnJhZHkg
RWlkc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVW
aWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCmluZGV4
IDE2MTJhYzUuLjQ1NjYzODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29s
ZVZpZXcuanMKQEAgLTU5LDM0ICs1OSwyOSBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcgPSBm
dW5jdGlvbihkcmF3ZXIpCiAKICAgICAvLyBXaWxsIGhvbGQgdGhlIGxpc3Qgb2YgZmlsdGVyIGVs
ZW1lbnRzCiAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUtZmlsdGVyIik7Ci0gICAgCisKICAgICBmdW5jdGlvbiBjcmVhdGVEaXZpZGVy
RWxlbWVudCgpIHsKICAgICAgICAgdmFyIGRpdmlkZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIAogICAgICAgICBkaXZpZGVyRWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJkaXZpZGVyIik7Ci0gICAgICAgIAogICAgICAgICB0aGlzLmZpbHRlckJhckVsZW1l
bnQuYXBwZW5kQ2hpbGQoZGl2aWRlckVsZW1lbnQpOwogICAgIH0KLSAgICAKKworICAgIHZhciB1
cGRhdGVGaWx0ZXJIYW5kbGVyID0gdGhpcy5fdXBkYXRlRmlsdGVyLmJpbmQodGhpcyk7CiAgICAg
ZnVuY3Rpb24gY3JlYXRlRmlsdGVyRWxlbWVudChjYXRlZ29yeSkgewogICAgICAgICB2YXIgY2F0
ZWdvcnlFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKICAgICAgICAgY2F0
ZWdvcnlFbGVtZW50LmNhdGVnb3J5ID0gY2F0ZWdvcnk7Ci0gICAgIAotICAgICAgICBjYXRlZ29y
eUVsZW1lbnQuYWRkU3R5bGVDbGFzcyhjYXRlZ29yeUVsZW1lbnQuY2F0ZWdvcnkpOwotICAgICAg
ICAgICAgCisgICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRTdHlsZUNsYXNzKGNhdGVnb3J5RWxl
bWVudC5jYXRlZ29yeSk7ICAgICAgICAgICAgCisgICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHVwZGF0ZUZpbHRlckhhbmRsZXIsIGZhbHNlKTsKKwogICAg
ICAgICB2YXIgbGFiZWwgPSBjYXRlZ29yeS50b1N0cmluZygpOwogICAgICAgICBjYXRlZ29yeUVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGFiZWwpKTsKLSAgICAg
Ci0gICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMu
X3VwZGF0ZUZpbHRlci5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgIAorCiAgICAgICAgIHRoaXMu
ZmlsdGVyQmFyRWxlbWVudC5hcHBlbmRDaGlsZChjYXRlZ29yeUVsZW1lbnQpOwogICAgICAgICBy
ZXR1cm4gY2F0ZWdvcnlFbGVtZW50OwogICAgIH0KICAgICAKICAgICB0aGlzLmFsbEVsZW1lbnQg
PSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgIkFsbCIpOwotICAgIAogICAgIGNyZWF0
ZURpdmlkZXJFbGVtZW50LmNhbGwodGhpcyk7Ci0gICAgCiAgICAgdGhpcy5lcnJvckVsZW1lbnQg
PSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgIkVycm9ycyIpOwogICAgIHRoaXMud2Fy
bmluZ0VsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgIldhcm5pbmdzIik7
CiAgICAgdGhpcy5sb2dFbGVtZW50ID0gY3JlYXRlRmlsdGVyRWxlbWVudC5jYWxsKHRoaXMsICJM
b2dzIik7CkBAIC0xMDMsNiArOTgsMTIgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3ID0gZnVu
Y3Rpb24oZHJhd2VyKQogICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF0uaXNNYWNPbmx5ID0g
dHJ1ZTsKICAgICBzaG9ydGN1dCA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VL
ZXkoImwiLCBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllcnMuQ3RybCk7CiAg
ICAgdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0XSA9IGhhbmRsZXI7CisKKyAgICB0aGlzLl9jdXN0
b21Gb3JtYXR0ZXJzID0geworICAgICAgICAib2JqZWN0IjogdGhpcy5fZm9ybWF0b2JqZWN0LAor
ICAgICAgICAiYXJyYXkiOiAgdGhpcy5fZm9ybWF0YXJyYXksCisgICAgICAgICJub2RlIjogICB0
aGlzLl9mb3JtYXRub2RlCisgICAgfTsKIH0KIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnBy
b3RvdHlwZSA9IHsKQEAgLTI1MCw3ICsyNTEsOCBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnByb21wdEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXco
ZmFsc2UpOwogICAgIH0sCiAKLSAgICB1cGRhdGVNZXNzYWdlUmVwZWF0Q291bnQ6IGZ1bmN0aW9u
KGNvdW50KSB7CisgICAgdXBkYXRlTWVzc2FnZVJlcGVhdENvdW50OiBmdW5jdGlvbihjb3VudCkK
KyAgICB7CiAgICAgICAgIHZhciBtc2cgPSB0aGlzLnByZXZpb3VzTWVzc2FnZTsKICAgICAgICAg
dmFyIHByZXZSZXBlYXRDb3VudCA9IG1zZy50b3RhbFJlcGVhdENvdW50OwogICAgICAgICAKQEAg
LTI2OCw3ICsyNzAsOCBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAgICAgfSwKIAotICAgIF9pbmNyZW1lbnRFcnJvcldhcm5pbmdDb3VudDogZnVu
Y3Rpb24obXNnKSB7CisgICAgX2luY3JlbWVudEVycm9yV2FybmluZ0NvdW50OiBmdW5jdGlvbiht
c2cpCisgICAgewogICAgICAgICBzd2l0Y2ggKG1zZy5sZXZlbCkgewogICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6CiAgICAg
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLndhcm5pbmdzICs9IG1zZy5yZXBlYXREZWx0YTsKQEAg
LTQ3OCw0NCArNDgxLDE4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7
CiAgICAgX2Zvcm1hdDogZnVuY3Rpb24ob3V0cHV0LCBmb3JjZU9iamVjdEZvcm1hdCkKICAgICB7
CiAgICAgICAgIHZhciBpc1Byb3h5ID0gKG91dHB1dCAhPSBudWxsICYmIHR5cGVvZiBvdXRwdXQg
PT09ICJvYmplY3QiKTsKKyAgICAgICAgdmFyIHR5cGUgPSAoZm9yY2VPYmplY3RGb3JtYXQgPyAi
b2JqZWN0IiA6IE9iamVjdC5wcm94eVR5cGUob3V0cHV0KSk7CiAKLSAgICAgICAgaWYgKGZvcmNl
T2JqZWN0Rm9ybWF0KQotICAgICAgICAgICAgdmFyIHR5cGUgPSAib2JqZWN0IjsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdmFyIHR5cGUgPSBPYmplY3QucHJveHlUeXBlKG91dHB1dCk7Ci0K
LSAgICAgICAgaWYgKGlzUHJveHkgJiYgdHlwZSAhPT0gIm9iamVjdCIgJiYgdHlwZSAhPT0gImZ1
bmN0aW9uIiAmJiB0eXBlICE9PSAiYXJyYXkiICYmIHR5cGUgIT09ICJub2RlIikgewotICAgICAg
ICAgICAgLy8gVW53cmFwIHByaW1pdGl2ZSB2YWx1ZSwgc2tpcCBkZWNvcmF0aW9uLgotICAgICAg
ICAgICAgb3V0cHV0ID0gb3V0cHV0LmRlc2NyaXB0aW9uOwotICAgICAgICAgICAgdHlwZSA9ICJ1
bmRlY29yYXRlZCIKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGRvbid0IHBlcmZvcm0gYW55
IHNwZWNpYWwgZm9ybWF0dGluZyBvbiB0aGVzZSB0eXBlcywgc28gd2UganVzdAotICAgICAgICAv
LyBwYXNzIHRoZW0gdGhyb3VnaCB0aGUgc2ltcGxlIF9mb3JtYXR2YWx1ZSBmdW5jdGlvbi4KLSAg
ICAgICAgdmFyIHVuZGVjb3JhdGVkVHlwZXMgPSB7Ci0gICAgICAgICAgICAidW5kZWZpbmVkIjog
MSwKLSAgICAgICAgICAgICJudWxsIjogMSwKLSAgICAgICAgICAgICJib29sZWFuIjogMSwKLSAg
ICAgICAgICAgICJudW1iZXIiOiAxLAotICAgICAgICAgICAgInVuZGVjb3JhdGVkIjogMQotICAg
ICAgICB9OwotCi0gICAgICAgIHZhciBmb3JtYXR0ZXI7Ci0gICAgICAgIGlmIChmb3JjZU9iamVj
dEZvcm1hdCkKLSAgICAgICAgICAgIGZvcm1hdHRlciA9ICJfZm9ybWF0b2JqZWN0IjsKLSAgICAg
ICAgZWxzZSBpZiAodHlwZSBpbiB1bmRlY29yYXRlZFR5cGVzKQotICAgICAgICAgICAgZm9ybWF0
dGVyID0gIl9mb3JtYXR2YWx1ZSI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9ybWF0
dGVyID0gIl9mb3JtYXQiICsgdHlwZTsKLSAgICAgICAgICAgIGlmICghKGZvcm1hdHRlciBpbiB0
aGlzKSkgewotICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9ICJfZm9ybWF0b2JqZWN0IjsKLSAg
ICAgICAgICAgICAgICB0eXBlID0gIm9iamVjdCI7Ci0gICAgICAgICAgICB9CisgICAgICAgIHZh
ciBmb3JtYXR0ZXIgPSB0aGlzLl9jdXN0b21Gb3JtYXR0ZXJzW3R5cGVdOworICAgICAgICBpZiAo
IWZvcm1hdHRlciB8fCAhaXNQcm94eSkgeworICAgICAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5f
Zm9ybWF0dmFsdWU7CisgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVzY3JpcHRpb24gfHwg
b3V0cHV0OworICAgICAgICAgICAgdHlwZSA9ICJ1bmRlY29yYXRlZCI7CiAgICAgICAgIH0KIAog
ICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAg
ICAgc3Bhbi5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWZvcm1hdHRlZC0iICsgdHlwZSk7Ci0gICAg
ICAgIHRoaXNbZm9ybWF0dGVyXShvdXRwdXQsIHNwYW4pOworICAgICAgICBmb3JtYXR0ZXIuY2Fs
bCh0aGlzLCBvdXRwdXQsIHNwYW4pOwogICAgICAgICByZXR1cm4gc3BhbjsKICAgICB9LAogCkBA
IC01MjQsMjUgKzUwMSwyNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0g
ewogICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbCkp
OwogICAgIH0sCiAKLSAgICBfZm9ybWF0ZnVuY3Rpb246IGZ1bmN0aW9uKGZ1bmMsIGVsZW0pCi0g
ICAgewotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1
bmMuZGVzY3JpcHRpb24pKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdGRhdGU6IGZ1bmN0aW9uKGRh
dGUsIGVsZW0pCisgICAgX2Zvcm1hdG9iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtKQogICAgIHsK
LSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRlKSk7
CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0
aWVzU2VjdGlvbihvYmosIG9iai5kZXNjcmlwdGlvbiwgbnVsbCwgdHJ1ZSkuZWxlbWVudCk7CiAg
ICAgfSwKIAotICAgIF9mb3JtYXRzdHJpbmc6IGZ1bmN0aW9uKHN0ciwgZWxlbSkKKyAgICBfZm9y
bWF0bm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQogICAgIHsKLSAgICAgICAgZWxlbS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXCIiICsgc3RyICsgIlwiIikpOwotICAg
IH0sCisgICAgICAgIGZ1bmN0aW9uIHByaW50Tm9kZShub2RlSWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHZhciB0cmVlT3V0bGluZSA9IG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZSgp
OworICAgICAgICAgICAgdHJlZU91dGxpbmUuc2hvd0luRWxlbWVudHNQYW5lbEVuYWJsZWQgPSB0
cnVlOworICAgICAgICAgICAgdHJlZU91dGxpbmUucm9vdERPTU5vZGUgPSBXZWJJbnNwZWN0b3Iu
ZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7CisgICAgICAgICAgICB0cmVlT3V0bGluZS5lbGVt
ZW50LmFkZFN0eWxlQ2xhc3MoIm91dGxpbmUtZGlzY2xvc3VyZSIpOworICAgICAgICAgICAgaWYg
KCF0cmVlT3V0bGluZS5jaGlsZHJlblswXS5oYXNDaGlsZHJlbikKKyAgICAgICAgICAgICAgICB0
cmVlT3V0bGluZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNpbmdsZS1ub2RlIik7CisgICAgICAg
ICAgICBlbGVtLmFwcGVuZENoaWxkKHRyZWVPdXRsaW5lLmVsZW1lbnQpOworICAgICAgICB9CiAK
LSAgICBfZm9ybWF0cmVnZXhwOiBmdW5jdGlvbihyZSwgZWxlbSkKLSAgICB7Ci0gICAgICAgIHZh
ciBmb3JtYXR0ZWQgPSBTdHJpbmcocmUuZGVzY3JpcHRpb24pLnJlcGxhY2UoLyhbXFxcL10pL2cs
ICJcXCQxIikucmVwbGFjZSgvXFwoXC9bZ2ltXSopJC8sICIkMSIpLnN1YnN0cmluZygxKTsKLSAg
ICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmb3JtYXR0ZWQp
KTsKKyAgICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHVzaE5vZGVUb0Zyb250ZW5kKG9iamVj
dCwgcHJpbnROb2RlKTsKICAgICB9LAogCiAgICAgX2Zvcm1hdGFycmF5OiBmdW5jdGlvbihhcnIs
IGVsZW0pCkBAIC01NTQsNiArNTMzLDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3Rv
dHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlmICghcHJvcGVydGllcykKICAgICAgICAgICAgIHJl
dHVybjsKKwogICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgbmFtZSA9
IHByb3BlcnRpZXNbaV0ubmFtZTsKQEAgLTU3Miw1MyArNTUyLDYgQEAgV2ViSW5zcGVjdG9yLkNv
bnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIsICIpKTsKICAgICAgICAgfQogICAgICAgICBlbGVt
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJdIikpOwotICAgIH0sCi0KLSAg
ICBfZm9ybWF0bm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQotICAgIHsKLSAgICAgICAgZnVu
Y3Rpb24gcHJpbnROb2RlKG5vZGVJZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFub2Rl
SWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5l
ID0gbmV3IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5lKCk7Ci0gICAgICAgICAgICB0
cmVlT3V0bGluZS5zaG93SW5FbGVtZW50c1BhbmVsRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICB0cmVlT3V0bGluZS5yb290RE9NTm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9y
SWQobm9kZUlkKTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLmVsZW1lbnQuYWRkU3R5bGVDbGFz
cygib3V0bGluZS1kaXNjbG9zdXJlIik7Ci0gICAgICAgICAgICBpZiAoIXRyZWVPdXRsaW5lLmNo
aWxkcmVuWzBdLmhhc0NoaWxkcmVuKQotICAgICAgICAgICAgICAgIHRyZWVPdXRsaW5lLmVsZW1l
bnQuYWRkU3R5bGVDbGFzcygic2luZ2xlLW5vZGUiKTsKLSAgICAgICAgICAgIGVsZW0uYXBwZW5k
Q2hpbGQodHJlZU91dGxpbmUuZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MucHVzaE5vZGVUb0Zyb250ZW5kKG9iamVjdCwgcHJpbnROb2RlKTsKLSAgICB9
LAotCi0gICAgX2Zvcm1hdG9iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtKQotICAgIHsKLSAgICAg
ICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0
aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uLCBudWxsLCB0cnVlKS5lbGVtZW50KTsKLSAgICB9LAot
Ci0gICAgX2Zvcm1hdGVycm9yOiBmdW5jdGlvbihvYmosIGVsZW0pCi0gICAgewotICAgICAgICB2
YXIgbWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgIG1lc3NhZ2VFbGVtZW50LmNsYXNzTmFtZSA9ICJlcnJvci1tZXNzYWdlIjsKLSAgICAgICAg
bWVzc2FnZUVsZW1lbnQudGV4dENvbnRlbnQgPSBvYmoubmFtZSArICI6ICIgKyBvYmoubWVzc2Fn
ZTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7Ci0KLSAgICAgICAg
aWYgKG9iai5zb3VyY2VVUkwpIHsKLSAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgICAgICAgICAgdXJsRWxlbWVudC5jbGFzc05hbWUg
PSAid2Via2l0LWh0bWwtcmVzb3VyY2UtbGluayI7Ci0gICAgICAgICAgICB1cmxFbGVtZW50Lmhy
ZWYgPSBvYmouc291cmNlVVJMOwotICAgICAgICAgICAgdXJsRWxlbWVudC5saW5lTnVtYmVyID0g
b2JqLmxpbmU7Ci0gICAgICAgICAgICB1cmxFbGVtZW50LnByZWZlcnJlZFBhbmVsID0gInNjcmlw
dHMiOwotCi0gICAgICAgICAgICBpZiAob2JqLmxpbmUgPiAwKQotICAgICAgICAgICAgICAgIHVy
bEVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwob2Jq
LnNvdXJjZVVSTCkgKyAiOiIgKyBvYmoubGluZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB1cmxFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1l
Rm9yVVJMKG9iai5zb3VyY2VVUkwpOwotCi0gICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCIgKCIpKTsKLSAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hp
bGQodXJsRWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCIpIikpOwotICAgICAgICB9CiAgICAgfQogfQogCkBAIC02NzMsNjIgKzYw
NiwyOCBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlID0gewogCiAgICAg
X2Zvcm1hdDogZnVuY3Rpb24ocGFyYW1ldGVycykKICAgICB7CisgICAgICAgIC8vIFRoaXMgbm9k
ZSBpcyB1c2VkIGxpa2UgYSBCdWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRpbnR1YWxseSBhcHBlbmRl
ZCBvbnRvIGl0LgogICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOwotCiAgICAgICAgIGlmICghcGFyYW1ldGVycy5sZW5ndGgpCiAgICAg
ICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OwogCiAgICAgICAgIC8vIEZvcm1hdHRpbmcg
Y29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdyYXBwZXJzIHdoZXJl
YXMgZnJvbnRlbmQgY29uc29sZQotICAgICAgICAvLyBBUEkgYWxsb3dzIHBhc3NpbmcgYXJiaXRy
YXJ5IHZhbHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVydHMsIGV0Yy4pLiBXcmFwIHRo
ZW0gaGVyZS4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgIC8vIEFQSSBhbGxvd3MgcGFzc2luZyBhcmJpdHJhcnkgdmFsdWVzIGFz
IG1lc3NhZ2VzIChzdHJpbmdzLCBudW1iZXJzLCBldGMuKS4gV3JhcCB0aGVtIGhlcmUuCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkKICAgICAgICAg
ICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyc1tpXSAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHBhcmFt
ZXRlcnNbaV0gIT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tpXSA9
IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eS53cmFwUHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tp
XSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmb3JtYXRGb3JDb25zb2xlKG9iaikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jb25zb2xlLl9mb3Jt
YXQob2JqKTsKLSAgICAgICAgfQogCi0gICAgICAgIGZ1bmN0aW9uIGZvcm1hdEFzT2JqZWN0Rm9y
Q29uc29sZShvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
Y29uc29sZS5fZm9ybWF0KG9iaiwgdHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoT2Jq
ZWN0LnByb3h5VHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAg
IHZhciBmb3JtYXR0ZXJzID0ge30KLSAgICAgICAgICAgIGZvciAodmFyIGkgaW4gU3RyaW5nLnN0
YW5kYXJkRm9ybWF0dGVycykKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZXJzW2ldID0gU3RyaW5n
LnN0YW5kYXJkRm9ybWF0dGVyc1tpXTsKLQotICAgICAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVv
IGZvciBmb3JtYXR0aW5nIG9iamVjdHMuCi0gICAgICAgICAgICBmb3JtYXR0ZXJzLm8gPSBmb3Jt
YXRGb3JDb25zb2xlOwotICAgICAgICAgICAgLy8gRmlyZWJ1ZyBhbGxvd3MgYm90aCAlaSBhbmQg
JWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCi0gICAgICAgICAgICBmb3JtYXR0ZXJzLmkgPSBm
b3JtYXR0ZXJzLmQ7Ci0gICAgICAgICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBm
b3JtYXRpbmcsIGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KLSAgICAg
ICAgICAgIGZvcm1hdHRlcnMuTyA9IGZvcm1hdEFzT2JqZWN0Rm9yQ29uc29sZTsKLQotICAgICAg
ICAgICAgZnVuY3Rpb24gYXBwZW5kKGEsIGIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCEoYiBpbnN0YW5jZW9mIE5vZGUpKQotICAgICAgICAgICAgICAgICAgICBhLmFwcGVu
ZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChiLnRvU3RyaW5nKCkp
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hp
bGQoYik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBTdHJpbmcuZm9ybWF0KHBhcmFtZXRlcnNbMF0uZGVzY3JpcHRp
b24sIHBhcmFtZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRlcnMsIGZvcm1hdHRlZFJlc3VsdCwgYXBw
ZW5kKTsKLSAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdCA9IHJlc3VsdC5mb3JtYXR0ZWRSZXN1
bHQ7CisgICAgICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVpbmcg
YSBmb3JtYXQgc3RyaW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgorICAgICAgICBpZiAo
cGFyYW1ldGVycy5sZW5ndGggPiAxICYmIE9iamVjdC5wcm94eVR5cGUocGFyYW1ldGVyc1swXSkg
PT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZm9ybWF0V2l0
aFN1YnN0aXR1dGlvblN0cmluZyhwYXJhbWV0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQpCiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNlZFN1YnN0aXR1dGlvbnM7CiAgICAgICAgICAg
ICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCiAgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOwogICAgICAgICB9CiAK
KyAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51c2VkIHN1YnN0aXR1dGlvbnMgZnJv
bSBhYm92ZS4KICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3h5VHlwZShwYXJhbWV0ZXJzW2ldKSA9
PT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxk
KFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChwYXJhbWV0ZXJzW2ldLmRlc2Ny
aXB0aW9uKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVz
dWx0LmFwcGVuZENoaWxkKGZvcm1hdEZvckNvbnNvbGUocGFyYW1ldGVyc1tpXSkpOwotCisgICAg
ICAgICAgICB0aGlzLl9mb3JtYXRJbmRpdmlkdWFsVmFsdWUocGFyYW1ldGVyc1tpXSwgZm9ybWF0
dGVkUmVzdWx0KTsKICAgICAgICAgICAgIGlmIChpIDwgcGFyYW1ldGVycy5sZW5ndGggLSAxKQog
ICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgiICIpKTsKICAgICAgICAgfQpAQCAtNzM2LDYgKzYzNSw1MSBAQCBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gZm9ybWF0
dGVkUmVzdWx0OwogICAgIH0sCiAKKyAgICBfZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzog
ZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0dGVkUmVzdWx0KQorICAgIHsKKyAgICAgICAgdmFy
IGZvcm1hdHRlcnMgPSB7fQorICAgICAgICBmb3IgKHZhciBpIGluIFN0cmluZy5zdGFuZGFyZEZv
cm1hdHRlcnMpCisgICAgICAgICAgICBmb3JtYXR0ZXJzW2ldID0gU3RyaW5nLnN0YW5kYXJkRm9y
bWF0dGVyc1tpXTsKKworICAgICAgICBmdW5jdGlvbiBjb25zb2xlRm9ybWF0V3JhcHBlcihmb3Jj
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgeworICAgICAg
ICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29uc29sZS5fZm9ybWF0KG9iaiwgZm9yY2Up
OworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcmVidWcgdXNlcyAl
byBmb3IgZm9ybWF0dGluZyBvYmplY3RzLgorICAgICAgICBmb3JtYXR0ZXJzLm8gPSBjb25zb2xl
Rm9ybWF0V3JhcHBlcigpOworICAgICAgICAvLyBGaXJlYnVnIGFsbG93cyBib3RoICVpIGFuZCAl
ZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KKyAgICAgICAgZm9ybWF0dGVycy5pID0gZm9ybWF0
dGVycy5kOworICAgICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBmb3JtYXRpbmcs
IGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KKyAgICAgICAgZm9ybWF0
dGVycy5PID0gY29uc29sZUZvcm1hdFdyYXBwZXIodHJ1ZSk7CisKKyAgICAgICAgZnVuY3Rpb24g
YXBwZW5kKGEsIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKGIgaW5zdGFuY2VvZiBO
b2RlKSkKKyAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5
U3RyaW5nQXNGcmFnbWVudChiLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBhLmFwcGVuZENoaWxkKGIpOworICAgICAgICAgICAgcmV0dXJuIGE7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTdHJpbmcuZm9ybWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVz
dWx0IGxpa2UgYSBCdWlsZGVyLCByZXN1bHQgaXMgYW4gb2JqZWN0LgorICAgICAgICByZXR1cm4g
U3RyaW5nLmZvcm1hdChwYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNl
KDEpLCBmb3JtYXR0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQsIGFwcGVuZCk7CisgICAgfSwKKworICAg
IF9mb3JtYXRJbmRpdmlkdWFsVmFsdWU6IGZ1bmN0aW9uKHBhcmFtLCBmb3JtYXR0ZWRSZXN1bHQp
CisgICAgeworICAgICAgICBpZiAoT2JqZWN0LnByb3h5VHlwZShwYXJhbSkgPT09ICJzdHJpbmci
KSB7CisgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgJiYgdGhpcy5sZXZl
bCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2cpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcXVvdGVkU3RyaW5nID0gIlwiIiArIHBhcmFtLmRlc2NyaXB0aW9u
LnJlcGxhY2UoLyIvZywgIlxcXCIiKSArICJcIiI7CisgICAgICAgICAgICAgICAgZm9ybWF0dGVk
UmVzdWx0LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChx
dW90ZWRTdHJpbmcpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZvcm1h
dHRlZFJlc3VsdC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21l
bnQocGFyYW0uZGVzY3JpcHRpb24pKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmb3Jt
YXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmNvbnNvbGUuX2Zvcm1hdChwYXJh
bSkpOworICAgIH0sCisKICAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKQEAgLTk4Myw5ICs5MjcsOSBAQCBXZWJJbnNwZWN0
b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQgPSBmdW5jdGlvbihyZXN1bHQsIGV4Y2VwdGlvbiwgb3Jp
Z2luYXRpbmdDb21tYQogICAgIHZhciBsaW5lID0gKGV4Y2VwdGlvbiA/IHJlc3VsdC5saW5lIDog
LTEpOwogICAgIHZhciB1cmwgPSAoZXhjZXB0aW9uID8gcmVzdWx0LnNvdXJjZVVSTCA6IG51bGwp
OwogCi0gICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNhbGwodGhpcywgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlMsIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5Mb2csIGxldmVsLCBsaW5lLCB1cmwsIG51bGwsIDEsIG1lc3Nh
Z2UpOwotCiAgICAgdGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgPSBvcmlnaW5hdGluZ0NvbW1hbmQ7
CisKKyAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY2FsbCh0aGlzLCBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZywgbGV2ZWwsIGxpbmUsIHVybCwgbnVsbCwgMSwgbWVzc2Fn
ZSk7CiB9CiAKIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90b3R5cGUgPSB7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXgg
M2YzOTM3Yy4uZjIxMjgwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZFNjcmlwdC5qcwpAQCAtMTIxNiw4ICsxMjE2LDYgQEAgT2JqZWN0LmRlc2NyaWJlID0gZnVu
Y3Rpb24ob2JqLCBhYmJyZXZpYXRlZCkKICAgICAgICAgZWxzZSBpZiAoYWJicmV2aWF0ZWQpCiAg
ICAgICAgICAgICBvYmplY3RUZXh0ID0gLy4qLy5leGVjKG9iailbMF0ucmVwbGFjZSgvICskL2cs
ICIiKTsKICAgICAgICAgcmV0dXJuIG9iamVjdFRleHQ7Ci0gICAgY2FzZSAicmVnZXhwIjoKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmopLnJlcGxhY2UoLyhbXFxcL10pL2csICJcXCQxIikucmVw
bGFjZSgvXFwoXC9bZ2ltXSopJC8sICIkMSIpLnN1YnN0cmluZygxKTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggMGY4ZWMxMi4uZDRmZmQyOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xNDY0LDcgKzE0NjQsNyBAQCBXZWJJbnNw
ZWN0b3Iuc2hvd1Jlc291cmNlRm9yVVJMID0gZnVuY3Rpb24odXJsLCBsaW5lLCBwcmVmZXJyZWRQ
YW5lbCkKIFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudCA9IGZ1bmN0aW9uKHN0
cmluZykKIHsKICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFn
bWVudCgpOwotICAgIHZhciBsaW5rU3RyaW5nUmVnRXggPSBuZXcgUmVnRXhwKCIoPzpbYS16QS1a
XVthLXpBLVowLTkrLi1dezIsfTovL3x3d3dcXC4pW1xcdyRcXC1fKyonPVxcfC9cXFxcKCl7fVtc
XF0lQCYjfiw6Oy4hP117Mix9W1xcdyRcXC1fKyo9XFx8L1xcXFwoeyVAJiN+XSIpOworICAgIHZh
ciBsaW5rU3RyaW5nUmVnRXggPSAvKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06XC9cL3x3
d3dcLilbXHckXC1fKyonPVx8XC9cXCgpe31bXF0lQCYjfiw6Oy4hP117Mix9W1x3JFwtXysqPVx8
XC9cXCh7JUAmI35dLzsKIAogICAgIHdoaWxlIChzdHJpbmcpIHsKICAgICAgICAgdmFyIGxpbmtT
dHJpbmcgPSBsaW5rU3RyaW5nUmVnRXguZXhlYyhzdHJpbmcpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggZDUyYzlhMy4uMDRjOTAzMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC0xNzgsNyArMTc4LDcgQEAgRWxlbWVu
dC5wcm90b3R5cGUuaGFzU3R5bGVDbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZSkKIHsKICAgICBp
ZiAoIWNsYXNzTmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIFRlc3QgZm9yIHRo
ZSBzaW1wbGUgY2FzZSBiZWZvcmUgdXNpbmcgYSBSZWdFeHAuCisgICAgLy8gVGVzdCBmb3IgdGhl
IHNpbXBsZSBjYXNlCiAgICAgaWYgKHRoaXMuY2xhc3NOYW1lID09PSBjbGFzc05hbWUpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCkBAIC0zNTAsNyArMzUwLDcgQEAgU3RyaW5nLnByb3RvdHlwZS50
cmltV2hpdGVzcGFjZSA9IGZ1bmN0aW9uKCkKIAogU3RyaW5nLnByb3RvdHlwZS50cmltVVJMID0g
ZnVuY3Rpb24oYmFzZVVSTERvbWFpbikKIHsKLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5yZXBsYWNl
KG5ldyBSZWdFeHAoIl5odHRwW3NdPzpcL1wvIiwgImkiKSwgIiIpOworICAgIHZhciByZXN1bHQg
PSB0aGlzLnJlcGxhY2UoL15odHRwcz86XC9cLy9pLCAiIik7CiAgICAgaWYgKGJhc2VVUkxEb21h
aW4pCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iICsgYmFz
ZVVSTERvbWFpbi5lc2NhcGVGb3JSZWdFeHAoKSwgImkiKSwgIiIpOwogICAgIHJldHVybiByZXN1
bHQ7Cg==
</data>
<flag name="review"
          id="25639"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>