<?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>30282</bug_id>
          
          <creation_ts>2009-10-11 01:37:39 -0700</creation_ts>
          <short_desc>Web Inspector: Add console only layout mode</short_desc>
          <delta_ts>2009-11-30 15:18:37 -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="Paul Bakaus">pbakaus</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>aroben</cc>
    
    <cc>bweinstein</cc>
    
    <cc>garbage</cc>
    
    <cc>joepeck</cc>
    
    <cc>pbakaus</cc>
    
    <cc>pfeldman</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>153912</commentid>
    <comment_count>0</comment_count>
    <who name="Paul Bakaus">pbakaus</who>
    <bug_when>2009-10-11 01:37:39 -0700</bug_when>
    <thetext>Due to Firebug&apos;s different layout, it is possible to collapse all other tabs but the console. For JavaScript engineers, the console is the most often used feature of the Web Inspector, and I&apos;d like to propose to find a way to show it exclusively.

Why? It dramatically improves working with the Web Inspector on smaller screens (read: any resolution smaller than 1920x1080), since a lot of the vertical real screen estate is lost, and for many, opening the Inspector in a seperate window isn&apos;t a real solution because we&apos;d like to have the console information sticky with the current website in one visual place.

I therefore propose to implement one or many of the following way to display the console independently:

1) Make Inspector and Console entirely independent layout wise, so each can be disabled and enabled within the Developer menu
2) Implement a &quot;console only&quot; button somewhere
3) Make the current console button a three-way toggler to either enable, disable or exclusively show the console

My personal vote goes to 1 and 3, but I&apos;d be very hapyp (and many others too!) with any of the solutions.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153921</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-10-11 08:17:59 -0700</bug_when>
    <thetext>3 sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164837</commentid>
    <comment_count>2</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2009-11-18 17:30:33 -0800</bug_when>
    <thetext>How about a full screen button next to the &quot;Clear Console&quot; button?

[ Hide Console ] [ Clear Console ] [ Full Screen ]

That button wouldn&apos;t be present if the console wasn&apos;t open, but if it was, it would toggle between Full Screen and non Full Screen, and would remember the user&apos;s preference. This is option 2, the one you said you weren&apos;t as enthusiastic about, but it would have some of the elements of 3 (button placement, etc.).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164915</commentid>
    <comment_count>3</comment_count>
      <attachid>43488</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-18 22:26:18 -0800</bug_when>
    <thetext>Created attachment 43488
[PATCH] Extra Button (It is a Preference) to Toggle Full Console Mode

I tried a few different approaches. For instance, this was the 3 way button approach:
http://screencast.com/t/NmNkNGFi

However, the approach taken in this patch is Brian&apos;s approach:
http://screencast.com/t/YmJjODg4MjAt

The patch covers most of the details. Points to consider:
- The Drawer is the container for the Console, and also for the currently inactive Changes View. Therefore this button is a part of the Drawer, not the Console. Maybe my terminology in this patch is inappropriate?
- Move this button? On IRC we mentioned possibly putting the Console filter int the console itself. That might be a good place to put this button.
- I did experiment with deselecting the panel in Full mode. The way I did it was deselect after the slide up animation, show before the slide down animation. In the end this didn&apos;t look very clean, so I removed that behavior for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164932</commentid>
    <comment_count>4</comment_count>
    <who name="Paul Bakaus">pbakaus</who>
    <bug_when>2009-11-19 01:03:25 -0800</bug_when>
    <thetext>Out of both screencasts, I also like the one Brian proposed better, and I think it would work for most people. One additional idea that came to my mind was to simply add the &quot;Full console&quot; mode to the top (tab) bar, a a bit like in Firebug, to make it more prominent. Clicking on the Console tab would then activate the console in full mode, while on any other pane/tab, it would be half-width/normal.

Great work though, we&apos;re getting there!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164963</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 06:51:35 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; One additional idea that came to my mind was to
&gt; simply add the &quot;Full console&quot; mode to the top (tab) bar, a a bit like in
&gt; Firebug, to make it more prominent. Clicking on the Console tab would then
&gt; activate the console in full mode, while on any other pane/tab, it would be
&gt; half-width/normal.

Basically, make a new &quot;Panel&quot; button in the Toolbar.  I&apos;m simply amazed that I never came up with this... since this is nearly exactly what it looks like I&apos;m doing!  Timothy is the gatekeeper on new panels. As a plus it would make creating an icon a little easier ;)

Paul you might also be interested in some of Pavel&apos;s ideas on having tabs for snippet / multiline edits. His ideas are on bug 30553.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164965</commentid>
    <comment_count>6</comment_count>
    <who name="Paul Bakaus">pbakaus</who>
    <bug_when>2009-11-19 07:03:22 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; One additional idea that came to my mind was to
&gt; &gt; simply add the &quot;Full console&quot; mode to the top (tab) bar, a a bit like in
&gt; &gt; Firebug, to make it more prominent. Clicking on the Console tab would then
&gt; &gt; activate the console in full mode, while on any other pane/tab, it would be
&gt; &gt; half-width/normal.
&gt; 
&gt; Basically, make a new &quot;Panel&quot; button in the Toolbar.  I&apos;m simply amazed that I
&gt; never came up with this... since this is nearly exactly what it looks like I&apos;m
&gt; doing!  Timothy is the gatekeeper on new panels. As a plus it would make
&gt; creating an icon a little easier ;)

Happens to me quite often too ;) Sometimes the easiest solutions are the hardest
to get a grasp on.. looking forward to hear what Timothy thinks!

&gt; 
&gt; Paul you might also be interested in some of Pavel&apos;s ideas on having tabs for
&gt; snippet / multiline edits. His ideas are on bug 30553.

Cool, will have a look! I&apos;m extremely interested in improving the Web Inspector with
whatever I can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164972</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-19 07:43:04 -0800</bug_when>
    <thetext>I am fine with a new toolbar icon, it is a good solution. Right now the toolbar having a selection panel confuses me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165099</commentid>
    <comment_count>8</comment_count>
      <attachid>43527</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 14:52:01 -0800</bug_when>
    <thetext>Created attachment 43527
[PATCH] Console Panel

This patch does not include the consoleIcon.png image, however it adds that image to the appropriate build files and assumes it exists. I&apos;ll just wait on an image from Timothy Hatcher. The patch itself can be reviewed.

Remaining Issues:
- Switching Panels should be broken into two steps so that animating the drawer to full size should not temporarily show a white background.
- Switching off and on the Console panel should cancel the closing animation (if one is running) and retrigger the opening animation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165104</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 15:06:39 -0800</bug_when>
    <thetext>Ahh, I forgot the possibility of reopening to the Panel. (InspectorController specialNameForJSPanel and friends). I&apos;ll see if I can get that part done tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165181</commentid>
    <comment_count>10</comment_count>
      <attachid>43543</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 19:51:03 -0800</bug_when>
    <thetext>Created attachment 43543
[PATCH] Console Panel (Improved)

&gt; - Switching off and on the Console panel should cancel the closing animation
&gt; (if one is running) and retrigger the opening animation.

Done.

&gt; Ahh, I forgot the possibility of reopening to the Panel. (InspectorController
&gt; specialNameForJSPanel and friends). I&apos;ll see if I can get that part done
&gt; tonight.

Done. This completely reverses http://trac.webkit.org/changeset/46175 because then the Console was not a &quot;full panel&quot;, and now it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165186</commentid>
    <comment_count>11</comment_count>
      <attachid>43543</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-19 21:00:11 -0800</bug_when>
    <thetext>Comment on attachment 43543
[PATCH] Console Panel (Improved)


&gt; +        WebInspector.Panel.prototype.show.call(this);

I like to put a blank line after these.

&gt; +        WebInspector.drawer.triggerConsoleMode(true);

I don&apos;t think triggerConsoleMode is a good name. Maybe enterPanelMode and exitPanelMode?

&gt; +        WebInspector.Panel.prototype.hide.call(this);

Add a blank line.

&gt; +        if (this.previousConsoleState == WebInspector.Drawer.State.Hidden)

Use ===.


&gt; -    var anchoredStatusBar = document.getElementById(&quot;anchored-status-bar-items&quot;);
&gt; -    anchoredStatusBar.appendChild(this.toggleConsoleButton);

Where did this go?


&gt; +    this.fullConsole = false;

This should be be something like &quot;fullPanel&quot; since this is Drawer.js, and should not have console mentions. Why not just use this.state?

&gt; +            if (this.visible &amp;&amp; WebInspector.currentPanel === WebInspector.panels.console)

Can this not check the current panel and just use this.fullPanel? I&apos;d like to not add this dependancy and console reference if you can avoid it.

&gt; +            height = parseInt(this.element.style.height, 10);

Isn&apos;t base 10 the default?


&gt; +            WebInspector.cancelAnimation(this.currentAnimation);
&gt; +            delete this._animating;

Should you delete this.currentAnimation too?

&gt; +        this.fullConsole = fullConsole;
&gt; +        if (fullConsole) {
&gt; +            if (this.visible)
&gt; +                this._transitionToFullConsole();
&gt; +        } else {
&gt; +            if (this.visible)
&gt; +                this._transitionToVariableConsole();
&gt; +        }
&gt; +    },
&gt; +
&gt; +    _transitionToFullConsole: function()
&gt; +    {
&gt; +        if (this._animating)
&gt; +            return;
&gt; +
&gt; +        this.savedHeight = this.element.offsetHeight;
&gt; +
&gt; +        var height = window.innerHeight - this.toolbarElement.offsetHeight;
&gt; +        this._animateDrawerHeight(height, WebInspector.Drawer.State.Full);
&gt; +    },
&gt; +
&gt; +    _transitionToVariableConsole: function()
&gt; +    {
&gt; +        if (this._animating)
&gt; +            return;
&gt; +
&gt; +        // If this animation gets cancelled, we want the state of the drawer to be Variable,
&gt; +        // so that the new animation can&apos;t do an immediate transition between Hidden/Full states.
&gt; +        this.state = WebInspector.Drawer.State.Variable;
&gt; +
&gt; +        var height = this.savedHeight;
&gt; +        this._animateDrawerHeight(height, WebInspector.Drawer.State.Variable);
&gt; +    },

More console mentions, should be generic.


&gt; +        function animationFinished()
&gt; +        {
&gt; +            delete this._animating;
&gt; +            this.state = finalState;
&gt; +        }

Delete this.currentAnimation too?

&gt; +        WebInspector.animations[key] = setTimeout(WebInspector.animateStyle, slice, animations, duration, callback, complete + slice, key);

Why not just make the key be the timeout id?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165191</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 21:13:20 -0800</bug_when>
    <thetext>&gt; &gt; +        WebInspector.drawer.triggerConsoleMode(true);
&gt; 
&gt; I don&apos;t think triggerConsoleMode is a good name. Maybe enterPanelMode and
&gt; exitPanelMode?

Sounds good.


&gt; &gt; -    var anchoredStatusBar = document.getElementById(&quot;anchored-status-bar-items&quot;);
&gt; &gt; -    anchoredStatusBar.appendChild(this.toggleConsoleButton);
&gt; 
&gt; Where did this go?

Buried in the ChangeLog =&gt; &quot;removed unnecessary element reordering&quot;

The toggleConsoleButton is already specified in inspector.html. This was taking the element, and just re-adding it onto the end of the anchoredStatusBar elements. Useless action since the order is how we want it in the html already.


&gt; &gt; +    this.fullConsole = false;
&gt; 
&gt; This should be be something like &quot;fullPanel&quot; since this is Drawer.js, and
&gt; should not have console mentions. Why not just use this.state?

I can rename this. As for merging this with this.state, I can&apos;t wrap my head around it right now to know if that covers all the animation cases or not. I&apos;ll give it a shot.


&gt; &gt; +            if (this.visible &amp;&amp; WebInspector.currentPanel === WebInspector.panels.console)
&gt; 
&gt; Can this not check the current panel and just use this.fullPanel? I&apos;d like to
&gt; not add this dependancy and console reference if you can avoid it.

Sure.


&gt; &gt; +            height = parseInt(this.element.style.height, 10);
&gt; 
&gt; Isn&apos;t base 10 the default?

It is the default. I&apos;ve gotten into the habit of being explicit because parseInt(&quot;010&quot;) parses as octal. The 10 is not necessary here, I can remove it.


&gt; &gt; +            WebInspector.cancelAnimation(this.currentAnimation);
&gt; &gt; +            delete this._animating;
&gt; 
&gt; Should you delete this.currentAnimation too?

I would need to add delete this.currentAnimation to every single animationFinished (3) in Drawer.js. I can do that =)


&gt; &gt; +        WebInspector.animations[key] = setTimeout(WebInspector.animateStyle, slice, animations, duration, callback, complete + slice, key);
&gt; 
&gt; Why not just make the key be the timeout id?

The timeout id changes every time this function retriggers itself (animateStyle does a timeout on animateStyle). Thus I have 1 key for the WebInspector.animations hash table. That value stored in the table for that key will always be the timeout of the current iteration of the timeout for that animation. Does this make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165202</commentid>
    <comment_count>13</comment_count>
      <attachid>43550</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 21:58:27 -0800</bug_when>
    <thetext>Created attachment 43550
[PATCH] Console Panel (Improved)

Addressed all the points.

More Todo (future patches):
- Convert WebInspector.animateStyle to an Interval instead of Timeouts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165203</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 21:59:15 -0800</bug_when>
    <thetext>I also need to update the function names in the ChangeLog. =/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165212</commentid>
    <comment_count>15</comment_count>
      <attachid>43553</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 22:13:31 -0800</bug_when>
    <thetext>Created attachment 43553
[PATCH] Console Panel (Even Better)

Updated ChangeLog and a few style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165230</commentid>
    <comment_count>16</comment_count>
      <attachid>43558</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-19 23:29:25 -0800</bug_when>
    <thetext>Created attachment 43558
[PATCH] Console Panel (Even Better)

&gt; More Todo (future patches):
&gt; - Convert WebInspector.animateStyle to an Interval instead of Timeouts

Done.

Notes:
I refactored animateStyle to use setInterval. Some interesting points: the original didn&apos;t actually use the &quot;current&quot; value anywhere. It determines the current, it assigns it to variables, but those variables are never used constructively, some not at all. I haven&apos;t looked into the history about this. I just removed all the extra computations.

Because the Diff looks ugly you can view the new algorithm in color here:
http://pastie.textmate.org/private/kuuuktkk7jbfiph6fmnpdg

Video of current behavior:
http://screencast.com/t/NzE5YzFjZ

Sorry about the spam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165232</commentid>
    <comment_count>17</comment_count>
      <attachid>43558</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-19 23:56:34 -0800</bug_when>
    <thetext>Comment on attachment 43558
[PATCH] Console Panel (Even Better)

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index bfb93cb..ee06d88 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,5 +1,71 @@
&gt;  2009-11-19  Joseph Pecoraro  &lt;joepeck@webkit.org&gt;
&gt;  
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Web Inspector: Add Console Only Layout Mode
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=30282
&gt; +
&gt; +        Adds a Console Panel, which allows for a Full size Console. This
&gt; +        extends the Drawer to the size of a Panel. This also fixes previous
&gt; +        resize issues with the Drawer.
&gt; +
&gt; +        * inspector/front-end/ConsolePanel.js: Added.
&gt; +        (WebInspector.ConsolePanel):
&gt; +        (WebInspector.ConsolePanel.prototype.toolbarItemClass.get toolbarItemLabel):
&gt; +        (WebInspector.ConsolePanel.prototype.show):
&gt; +        (WebInspector.ConsolePanel.prototype.hide):
&gt; +        * inspector/front-end/Drawer.js:
&gt; +        (WebInspector.Drawer):
&gt; +        (WebInspector.Drawer.prototype.set visibleView):
&gt; +        (WebInspector.Drawer.prototype.get savedHeight): save the height of the variable console.
&gt; +        (WebInspector.Drawer.prototype.set savedHeight):
&gt; +        (WebInspector.Drawer.prototype.show.animationFinished):
&gt; +        (WebInspector.Drawer.prototype.show):
&gt; +        (WebInspector.Drawer.prototype.hide.animationFinished):
&gt; +        (WebInspector.Drawer.prototype.hide):
&gt; +        (WebInspector.Drawer.prototype.resize): resize appropriately if full/non-full
&gt; +        (WebInspector.Drawer.prototype.enterPanelMode):
&gt; +        (WebInspector.Drawer.prototype.exitPanelMode):
&gt; +        (WebInspector.Drawer.prototype._cancelAnimationIfNeeded):
&gt; +        (WebInspector.Drawer.prototype._animateDrawerHeight.animationFinished):
&gt; +        (WebInspector.Drawer.prototype._animateDrawerHeight):
&gt; +        (WebInspector.Drawer.prototype._animationDuration):
&gt; +        (WebInspector.Drawer.prototype._startStatusBarDragging):
&gt; +        (WebInspector.Drawer.prototype._statusBarDragging):
&gt; +        (WebInspector.Drawer.prototype._endStatusBarDragging):
&gt; +
&gt; +        Miscellaneous changes and cleanup.
&gt; +
&gt; +        * English.lproj/localizedStrings.js: &quot;Console&quot; toolbar title.
&gt; +        * inspector/front-end/ConsoleView.js: removed unnecessary element reordering  
&gt; +        * inspector/front-end/Images/consoleIcon.png: added.
&gt; +        * inspector/front-end/inspector.css: added icon.
&gt; +        * inspector/front-end/inspector.html:
&gt; +        * inspector/front-end/inspector.js:
&gt; +        (WebInspector._createPanels): create console panel
&gt; +        (WebInspector.windowResize): resize drawer if necessary
&gt; +        (WebInspector.documentKeyDown): esc should not toggle the console when in panel mode
&gt; +        (WebInspector.animateStyle): start animation interval, returns the interval key
&gt; +        (WebInspector.toggleAttach): resize drawer if necessary
&gt; +        (WebInspector.showConsolePanel): restore the panel when the inspector restarts
&gt; +        (WebInspector.showProfileForURL): style fix
&gt; +
&gt; +        Restore the panel when the inspector restarts.
&gt; +
&gt; +        * inspector/InspectorController.cpp:
&gt; +        (WebCore::InspectorController::setWindowVisible):
&gt; +        (WebCore::InspectorController::specialPanelForJSName):
&gt; +        * inspector/InspectorFrontend.cpp:
&gt; +        (WebCore::InspectorFrontend::showPanel):
&gt; +
&gt; +        Build files.
&gt; +
&gt; +        * WebCore.gypi:
&gt; +        * WebCore.vcproj/WebCore.vcproj:
&gt; +        * inspector/front-end/WebKit.qrc:
&gt; +
&gt; +2009-11-19  Joseph Pecoraro  &lt;joepeck@webkit.org&gt;
&gt; +
&gt;          Reviewed by Timothy Hatcher.
&gt;  
&gt;          Web Inspector: Resync Resources Backend and Frontend
&gt; diff --git a/WebCore/English.lproj/localizedStrings.js b/WebCore/English.lproj/localizedStrings.js
&gt; index b6b05c56e87a48826abb630a22222a3b278cd140..ef981c78d851631cc0bc895f52f6bc4bea4980a4 100644
&gt; GIT binary patch
&gt; delta 60
&gt; zcmZp&lt;!FcTk;|7+T$&gt;%s!CSMR{(aK{eX2@sAVMt|AVu)o&gt;V6X*ZB?f1p7_y8t0~Z4T
&gt; D9sCW~
&gt; 
&gt; delta 9
&gt; Qcmcb1gR$iX;|7)-02nR=EdT%j
&gt; 
&gt; diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
&gt; index 8c51a60..6c49885 100644
&gt; --- a/WebCore/WebCore.gypi
&gt; +++ b/WebCore/WebCore.gypi
&gt; @@ -3616,6 +3616,7 @@
&gt;              &apos;inspector/front-end/CallStackSidebarPane.js&apos;,
&gt;              &apos;inspector/front-end/ChangesView.js&apos;,
&gt;              &apos;inspector/front-end/Color.js&apos;,
&gt; +            &apos;inspector/front-end/ConsolePanel.js&apos;,
&gt;              &apos;inspector/front-end/ConsoleView.js&apos;,
&gt;              &apos;inspector/front-end/CookieItemsView.js&apos;,
&gt;              &apos;inspector/front-end/Database.js&apos;,
&gt; @@ -3684,6 +3685,7 @@
&gt;              &apos;inspector/front-end/Images/clearConsoleButtonGlyph.png&apos;,
&gt;              &apos;inspector/front-end/Images/closeButtons.png&apos;,
&gt;              &apos;inspector/front-end/Images/consoleButtonGlyph.png&apos;,
&gt; +            &apos;inspector/front-end/Images/consoleIcon.png&apos;,
&gt;              &apos;inspector/front-end/Images/cookie.png&apos;,
&gt;              &apos;inspector/front-end/Images/database.png&apos;,
&gt;              &apos;inspector/front-end/Images/databaseTable.png&apos;,
&gt; diff --git a/WebCore/WebCore.vcproj/WebCore.vcproj b/WebCore/WebCore.vcproj/WebCore.vcproj
&gt; index 85c5f6e..591d350 100644
&gt; --- a/WebCore/WebCore.vcproj/WebCore.vcproj
&gt; +++ b/WebCore/WebCore.vcproj/WebCore.vcproj
&gt; @@ -42282,6 +42282,9 @@
&gt;  					&gt;
&gt;  				&lt;/File&gt;
&gt;  				&lt;File
&gt; +					RelativePath=&quot;..\inspector\front-end\ConsolePanel.js&quot;
&gt; +					&gt;
&gt; +				&lt;File
&gt;  					RelativePath=&quot;..\inspector\front-end\ConsoleView.js&quot;
&gt;  					&gt;
&gt;  				&lt;/File&gt;
&gt; diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
&gt; index 920c3f0..52436ee 100644
&gt; --- a/WebCore/inspector/InspectorController.cpp
&gt; +++ b/WebCore/inspector/InspectorController.cpp
&gt; @@ -315,10 +315,7 @@ void InspectorController::setWindowVisible(bool visible, bool attached)
&gt;          setAttachedWindow(attached);
&gt;          populateScriptObjects();
&gt;  
&gt; -        // Console panel is implemented as a &apos;fast view&apos;, so there should be
&gt; -        // real panel opened along with it.
&gt; -        bool showConsole = m_showAfterVisible == ConsolePanel;
&gt; -        if (m_showAfterVisible == CurrentPanel || showConsole) {
&gt; +        if (m_showAfterVisible == CurrentPanel) {
&gt;            Setting lastActivePanelSetting = setting(lastActivePanelSettingName);
&gt;            if (lastActivePanelSetting.type() == Setting::StringType)
&gt;                m_showAfterVisible = specialPanelForJSName(lastActivePanelSetting.string());
&gt; @@ -333,8 +330,6 @@ void InspectorController::setWindowVisible(bool visible, bool attached)
&gt;              enableDebugger();
&gt;  #endif
&gt;          showPanel(m_showAfterVisible);
&gt; -        if (showConsole)
&gt; -            showPanel(ConsolePanel);
&gt;      } else {
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt;          // If the window is being closed with the debugger enabled,
&gt; @@ -1811,6 +1806,8 @@ InspectorController::SpecialPanels InspectorController::specialPanelForJSName(co
&gt;          return ProfilesPanel;
&gt;      else if (panelName == &quot;storage&quot; || panelName == &quot;databases&quot;)
&gt;          return StoragePanel;
&gt; +    else if (panelName == &quot;console&quot;)
&gt; +        return ConsolePanel;
&gt;      else
&gt;          return ElementsPanel;
&gt;  }
&gt; diff --git a/WebCore/inspector/InspectorFrontend.cpp b/WebCore/inspector/InspectorFrontend.cpp
&gt; index 6942d02..6e02db1 100644
&gt; --- a/WebCore/inspector/InspectorFrontend.cpp
&gt; +++ b/WebCore/inspector/InspectorFrontend.cpp
&gt; @@ -151,7 +151,7 @@ void InspectorFrontend::showPanel(int panel)
&gt;      const char* showFunctionName;
&gt;      switch (panel) {
&gt;          case InspectorController::ConsolePanel:
&gt; -            showFunctionName = &quot;showConsole&quot;;
&gt; +            showFunctionName = &quot;showConsolePanel&quot;;
&gt;              break;
&gt;          case InspectorController::ElementsPanel:
&gt;              showFunctionName = &quot;showElementsPanel&quot;;
&gt; diff --git a/WebCore/inspector/front-end/ConsolePanel.js b/WebCore/inspector/front-end/ConsolePanel.js
&gt; new file mode 100644
&gt; index 0000000..e0292c6
&gt; --- /dev/null
&gt; +++ b/WebCore/inspector/front-end/ConsolePanel.js
&gt; @@ -0,0 +1,63 @@
&gt; +/*
&gt; + * Copyright (C) 2009 Joseph Pecoraro
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +WebInspector.ConsolePanel = function()
&gt; +{
&gt; +    WebInspector.Panel.call(this);
&gt; +}
&gt; +
&gt; +WebInspector.ConsolePanel.prototype = {
&gt; +    toolbarItemClass: &quot;console&quot;,
&gt; +
&gt; +    get toolbarItemLabel()
&gt; +    {
&gt; +        return WebInspector.UIString(&quot;Console&quot;);
&gt; +    },
&gt; +
&gt; +    show: function()
&gt; +    {
&gt; +        WebInspector.Panel.prototype.show.call(this);
&gt; +
&gt; +        this.previousConsoleState = WebInspector.drawer.state;

This can be private (this._previousConsoleState)

&gt; +        WebInspector.drawer.enterPanelMode();
&gt; +        WebInspector.showConsole();
&gt; +    },
&gt; +
&gt; +    hide: function()
&gt; +    {
&gt; +        WebInspector.Panel.prototype.hide.call(this);
&gt; +
&gt; +        if (this.previousConsoleState === WebInspector.Drawer.State.Hidden) {
&gt; +            WebInspector.drawer.visible = false;
&gt; +            WebInspector.drawer.fullPanel = false;

You have nice methods that encapsulate drawer behavior for enterPanelMode nad exitPanelMode. Should you introduce some reset method as well and hide visible and fullPanel?
&gt; +        } else
&gt; +            WebInspector.drawer.exitPanelMode();
&gt; +    }
&gt; +}
&gt; +
&gt; +WebInspector.ConsolePanel.prototype.__proto__ = WebInspector.Panel.prototype;
&gt; diff --git a/WebCore/inspector/front-end/ConsoleView.js b/WebCore/inspector/front-end/ConsoleView.js
&gt; index f03c647..9f006e3 100644
&gt; --- a/WebCore/inspector/front-end/ConsoleView.js
&gt; +++ b/WebCore/inspector/front-end/ConsoleView.js
&gt; @@ -57,9 +57,6 @@ WebInspector.ConsoleView = function(drawer)
&gt;      this.toggleConsoleButton.title = WebInspector.UIString(&quot;Show console.&quot;);
&gt;      this.toggleConsoleButton.addEventListener(&quot;click&quot;, this._toggleConsoleButtonClicked.bind(this), false);
&gt;  
&gt; -    var anchoredStatusBar = document.getElementById(&quot;anchored-status-bar-items&quot;);
&gt; -    anchoredStatusBar.appendChild(this.toggleConsoleButton);
&gt; -    
&gt;      // Will hold the list of filter elements
&gt;      this.filterBarElement = document.getElementById(&quot;console-filter&quot;);
&gt;      
&gt; diff --git a/WebCore/inspector/front-end/Drawer.js b/WebCore/inspector/front-end/Drawer.js
&gt; index 1b50f91..66770a1 100644
&gt; --- a/WebCore/inspector/front-end/Drawer.js
&gt; +++ b/WebCore/inspector/front-end/Drawer.js
&gt; @@ -7,13 +7,13 @@
&gt;   * are met:
&gt;   *
&gt;   * 1.  Redistributions of source code must retain the above copyright
&gt; - *     notice, this list of conditions and the following disclaimer. 
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt;   * 2.  Redistributions in binary form must reproduce the above copyright
&gt;   *     notice, this list of conditions and the following disclaimer in the
&gt; - *     documentation and/or other materials provided with the distribution. 
&gt; + *     documentation and/or other materials provided with the distribution.
&gt;   * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt;   *     its contributors may be used to endorse or promote products derived
&gt; - *     from this software without specific prior written permission. 
&gt; + *     from this software without specific prior written permission.
&gt;   *
&gt;   * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt;   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; @@ -31,6 +31,12 @@ WebInspector.Drawer = function()
&gt;  {
&gt;      WebInspector.View.call(this, document.getElementById(&quot;drawer&quot;));
&gt;  
&gt; +    this.savedHeight = 0;
&gt; +    this.state = WebInspector.Drawer.State.Hidden;
&gt; +    this.fullPanel = false;
&gt; +
&gt; +    this.mainElement = document.getElementById(&quot;main&quot;);
&gt; +    this.toolbarElement = document.getElementById(&quot;toolbar&quot;);

Same here - you do access some of the drawer properties from the outside. Would be nice to distinguish between public and private ones.

&gt;      this.mainStatusBar = document.getElementById(&quot;main-status-bar&quot;);
&gt;      this.mainStatusBar.addEventListener(&quot;mousedown&quot;, this._startStatusBarDragging.bind(this), true);
&gt;      this.viewStatusBar = document.getElementById(&quot;other-drawer-status-bar-items&quot;);
&gt; @@ -45,6 +51,8 @@ WebInspector.Drawer.prototype = {
&gt;      set visibleView(x)
&gt;      {
&gt;          if (this._visibleView === x) {
&gt; +            if (this.visible &amp;&amp; this.fullPanel)
&gt; +                return;
&gt;              this.visible = !this.visible;
&gt;              return;
&gt;          }
&gt; @@ -64,6 +72,17 @@ WebInspector.Drawer.prototype = {
&gt;          }
&gt;      },
&gt;  
&gt; +    get savedHeight()
&gt; +    {
&gt; +        var height = this._savedHeight || this.element.offsetHeight;
&gt; +        return Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this.mainElement.totalOffsetTop - Preferences.minConsoleHeight);
&gt; +    },
&gt; +
&gt; +    set savedHeight(x)
&gt; +    {
&gt; +        this._savedHeight = x;
&gt; +    },
&gt; +

I don&apos;t think you need setter for this. I hope you mutate from within this class only, you should just assign to this._savedHeight.

&gt;      showView: function(view)
&gt;      {
&gt;          if (!this.visible || this.visibleView !== view)
&gt; @@ -85,15 +104,16 @@ WebInspector.Drawer.prototype = {
&gt;          document.body.addStyleClass(&quot;drawer-visible&quot;);
&gt;  
&gt;          var anchoredItems = document.getElementById(&quot;anchored-status-bar-items&quot;);
&gt; -
&gt; +        var height = (this.fullPanel ? window.innerHeight - this.toolbarElement.offsetHeight : this.savedHeight);
&gt;          var animations = [
&gt; -            {element: document.getElementById(&quot;main&quot;), end: {bottom: this.element.offsetHeight}},
&gt; +            {element: this.element, end: {height: height}},
&gt; +            {element: document.getElementById(&quot;main&quot;), end: {bottom: height}},
&gt;              {element: document.getElementById(&quot;main-status-bar&quot;), start: {&quot;padding-left&quot;: anchoredItems.offsetWidth - 1}, end: {&quot;padding-left&quot;: 0}},
&gt;              {element: document.getElementById(&quot;other-drawer-status-bar-items&quot;), start: {opacity: 0}, end: {opacity: 1}}
&gt;          ];
&gt;  
&gt; -        var consoleStatusBar = document.getElementById(&quot;drawer-status-bar&quot;);
&gt; -        consoleStatusBar.insertBefore(anchoredItems, consoleStatusBar.firstChild);
&gt; +        var drawerStatusBar = document.getElementById(&quot;drawer-status-bar&quot;);
&gt; +        drawerStatusBar.insertBefore(anchoredItems, drawerStatusBar.firstChild);
&gt;  
&gt;          function animationFinished()
&gt;          {
&gt; @@ -102,9 +122,11 @@ WebInspector.Drawer.prototype = {
&gt;              if (this.visibleView.afterShow)
&gt;                  this.visibleView.afterShow();
&gt;              delete this._animating;
&gt; +            delete this.currentAnimationInterval;
&gt; +            this.state = (this.fullPanel ? WebInspector.Drawer.State.Full : WebInspector.Drawer.State.Variable);
&gt;          }
&gt;  
&gt; -        WebInspector.animateStyle(animations, window.event &amp;&amp; window.event.shiftKey ? 2000 : 250, animationFinished.bind(this));
&gt; +        this.currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));

Ditto

&gt;      },
&gt;  
&gt;      hide: function()
&gt; @@ -113,7 +135,7 @@ WebInspector.Drawer.prototype = {
&gt;              return;
&gt;  
&gt;          WebInspector.View.prototype.hide.call(this);
&gt; -        
&gt; +
&gt;          if (this.visibleView)
&gt;              this.visibleView.hide();
&gt;  
&gt; @@ -124,9 +146,9 @@ WebInspector.Drawer.prototype = {
&gt;  
&gt;          var anchoredItems = document.getElementById(&quot;anchored-status-bar-items&quot;);
&gt;  
&gt; -        // Temporally set properties and classes to mimic the post-animation values so panels
&gt; +        // Temporarily set properties and classes to mimic the post-animation values so panels
&gt;          // like Elements in their updateStatusBarItems call will size things to fit the final location.
&gt; -        document.getElementById(&quot;main-status-bar&quot;).style.setProperty(&quot;padding-left&quot;, (anchoredItems.offsetWidth - 1) + &quot;px&quot;);
&gt; +        this.mainStatusBar.style.setProperty(&quot;padding-left&quot;, (anchoredItems.offsetWidth - 1) + &quot;px&quot;);
&gt;          document.body.removeStyleClass(&quot;drawer-visible&quot;);
&gt;          if (&quot;updateStatusBarItems&quot; in WebInspector.currentPanel)
&gt;              WebInspector.currentPanel.updateStatusBarItems();
&gt; @@ -145,9 +167,90 @@ WebInspector.Drawer.prototype = {
&gt;              mainStatusBar.style.removeProperty(&quot;padding-left&quot;);
&gt;              document.body.removeStyleClass(&quot;drawer-visible&quot;);
&gt;              delete this._animating;
&gt; +            delete this.currentAnimationInterval;
&gt; +            this.state = WebInspector.Drawer.State.Hidden;
&gt;          }
&gt;  
&gt; -        WebInspector.animateStyle(animations, window.event &amp;&amp; window.event.shiftKey ? 2000 : 250, animationFinished.bind(this));
&gt; +        this.currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
&gt; +    },
&gt; +
&gt; +    resize: function()
&gt; +    {
&gt; +        if (this.state === WebInspector.Drawer.State.Hidden)
&gt; +            return;
&gt; +
&gt; +        var height;
&gt; +        var mainElement = document.getElementById(&quot;main&quot;);
&gt; +        if (this.state === WebInspector.Drawer.State.Variable) {
&gt; +            height = parseInt(this.element.style.height);
&gt; +            height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - mainElement.totalOffsetTop - Preferences.minConsoleHeight);
&gt; +        } else
&gt; +            height = window.innerHeight - this.toolbarElement.offsetHeight;
&gt; +
&gt; +        mainElement.style.bottom = height + &quot;px&quot;;
&gt; +        this.element.style.height = height + &quot;px&quot;;
&gt; +    },
&gt; +
&gt; +    enterPanelMode: function()
&gt; +    {
&gt; +        this._cancelAnimationIfNeeded();
&gt; +        this.fullPanel = true;
&gt; +        
&gt; +        if (this.visible) {
&gt; +            this.savedHeight = this.element.offsetHeight;
&gt; +            var height = window.innerHeight - this.toolbarElement.offsetHeight;
&gt; +            this._animateDrawerHeight(height, WebInspector.Drawer.State.Full);
&gt; +        }
&gt; +    },
&gt; +
&gt; +    exitPanelMode: function()
&gt; +    {
&gt; +        this._cancelAnimationIfNeeded();
&gt; +        this.fullPanel = false;
&gt; +
&gt; +        if (this.visible) {
&gt; +            // If this animation gets cancelled, we want the state of the drawer to be Variable,
&gt; +            // so that the new animation can&apos;t do an immediate transition between Hidden/Full states.
&gt; +            this.state = WebInspector.Drawer.State.Variable;
&gt; +            var height = this.savedHeight;
&gt; +            this._animateDrawerHeight(height, WebInspector.Drawer.State.Variable);
&gt; +        }
&gt; +    },
&gt; +
&gt; +    _cancelAnimationIfNeeded: function()
&gt; +    {
&gt; +        if (this._animating) {
&gt; +            clearInterval(this.currentAnimationInterval);
&gt; +            delete this._animating;
&gt; +            delete this.currentAnimationInterval;
&gt; +        }
&gt; +    },
&gt; +
&gt; +    _animateDrawerHeight: function(height, finalState)
&gt; +    {
&gt; +        this._animating = true;
&gt; +        var animations = [
&gt; +            {element: this.element, end: {height: height}},
&gt; +            {element: document.getElementById(&quot;main&quot;), end: {bottom: height}}
&gt; +        ];
&gt; +
&gt; +        function animationFinished()
&gt; +        {
&gt; +            delete this._animating;
&gt; +            delete this.currentAnimationInterval;
&gt; +            this.state = finalState;
&gt; +        }
&gt; +
&gt; +        this.currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
&gt; +    },
&gt; +
&gt; +    _animationDuration: function()
&gt; +    {
&gt; +        // Immediate if going between Hidden and Full in full panel mode
&gt; +        if (this.fullPanel &amp;&amp; (this.state === WebInspector.Drawer.State.Hidden || this.state === WebInspector.Drawer.State.Full))
&gt; +            return 0;
&gt; +
&gt; +        return (window.event &amp;&amp; window.event.shiftKey ? 2000 : 250);
&gt;      },
&gt;  
&gt;      _safelyRemoveChildren: function()
&gt; @@ -165,10 +268,10 @@ WebInspector.Drawer.prototype = {
&gt;  
&gt;      _startStatusBarDragging: function(event)
&gt;      {
&gt; -        if (!this.visible || event.target !== document.getElementById(&quot;main-status-bar&quot;))
&gt; +        if (!this.visible || event.target !== this.mainStatusBar)
&gt;              return;
&gt;  
&gt; -        WebInspector.elementDragStart(document.getElementById(&quot;main-status-bar&quot;), this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, &quot;row-resize&quot;);
&gt; +        WebInspector.elementDragStart(this.mainStatusBar, this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, &quot;row-resize&quot;);
&gt;  
&gt;          this._statusBarDragOffset = event.pageY - this.element.totalOffsetTop;
&gt;  
&gt; @@ -178,7 +281,6 @@ WebInspector.Drawer.prototype = {
&gt;      _statusBarDragging: function(event)
&gt;      {
&gt;          var mainElement = document.getElementById(&quot;main&quot;);
&gt; -
&gt;          var height = window.innerHeight - event.pageY + this._statusBarDragOffset;
&gt;          height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - mainElement.totalOffsetTop - Preferences.minConsoleHeight);
&gt;  
&gt; @@ -193,6 +295,7 @@ WebInspector.Drawer.prototype = {
&gt;      {
&gt;          WebInspector.elementDragEnd(event);
&gt;  
&gt; +        this.savedHeight = this.element.offsetHeight;
&gt;          delete this._statusBarDragOffset;
&gt;  
&gt;          event.stopPropagation();
&gt; @@ -200,3 +303,9 @@ WebInspector.Drawer.prototype = {
&gt;  }
&gt;  
&gt;  WebInspector.Drawer.prototype.__proto__ = WebInspector.View.prototype;
&gt; +
&gt; +WebInspector.Drawer.State = {
&gt; +    Hidden: 0,
&gt; +    Variable: 1,
&gt; +    Full: 2
&gt; +};
&gt; diff --git a/WebCore/inspector/front-end/WebKit.qrc b/WebCore/inspector/front-end/WebKit.qrc
&gt; index 53917f6..dbf406c 100644
&gt; --- a/WebCore/inspector/front-end/WebKit.qrc
&gt; +++ b/WebCore/inspector/front-end/WebKit.qrc
&gt; @@ -9,6 +9,7 @@
&gt;      &lt;file&gt;CallStackSidebarPane.js&lt;/file&gt;
&gt;      &lt;file&gt;ChangesView.js&lt;/file&gt;
&gt;      &lt;file&gt;Color.js&lt;/file&gt;
&gt; +    &lt;file&gt;ConsolePanel.js&lt;/file&gt;
&gt;      &lt;file&gt;ConsoleView.js&lt;/file&gt;
&gt;      &lt;file&gt;CookieItemsView.js&lt;/file&gt;
&gt;      &lt;file&gt;Database.js&lt;/file&gt;
&gt; @@ -75,6 +76,7 @@
&gt;      &lt;file&gt;Images/closeButtons.png&lt;/file&gt;
&gt;      &lt;file&gt;Images/consoleButtonGlyph.png&lt;/file&gt;
&gt;      &lt;file&gt;Images/cookie.png&lt;/file&gt;
&gt; +    &lt;file&gt;Images/consoleIcon.png&lt;/file&gt;

Please add this into WebCore.gypi as well!

&gt;      &lt;file&gt;Images/database.png&lt;/file&gt;
&gt;      &lt;file&gt;Images/databaseTable.png&lt;/file&gt;
&gt;      &lt;file&gt;Images/debuggerContinue.png&lt;/file&gt;
&gt; diff --git a/WebCore/inspector/front-end/inspector.css b/WebCore/inspector/front-end/inspector.css
&gt; index 035dc13..50e7ef6 100644
&gt; --- a/WebCore/inspector/front-end/inspector.css
&gt; +++ b/WebCore/inspector/front-end/inspector.css
&gt; @@ -215,6 +215,10 @@ body.attached #search-results-matches {
&gt;      background-image: url(Images/profilesIcon.png);
&gt;  }
&gt;  
&gt; +.toolbar-item.console .toolbar-icon {
&gt; +    background-image: url(Images/consoleIcon.png);
&gt; +}
&gt; +
&gt;  #close-button-left, #close-button-right {
&gt;      width: 14px;
&gt;      height: 14px;
&gt; diff --git a/WebCore/inspector/front-end/inspector.html b/WebCore/inspector/front-end/inspector.html
&gt; index a609f89..489996c 100644
&gt; --- a/WebCore/inspector/front-end/inspector.html
&gt; +++ b/WebCore/inspector/front-end/inspector.html
&gt; @@ -79,6 +79,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt;      &lt;script type=&quot;text/javascript&quot; src=&quot;ScriptsPanel.js&quot;&gt;&lt;/script&gt;
&gt;      &lt;script type=&quot;text/javascript&quot; src=&quot;StoragePanel.js&quot;&gt;&lt;/script&gt;
&gt;      &lt;script type=&quot;text/javascript&quot; src=&quot;ProfilesPanel.js&quot;&gt;&lt;/script&gt;
&gt; +    &lt;script type=&quot;text/javascript&quot; src=&quot;ConsolePanel.js&quot;&gt;&lt;/script&gt;
&gt;      &lt;script type=&quot;text/javascript&quot; src=&quot;ResourceView.js&quot;&gt;&lt;/script&gt;
&gt;      &lt;script type=&quot;text/javascript&quot; src=&quot;SourceFrame.js&quot;&gt;&lt;/script&gt;
&gt;      &lt;script type=&quot;text/javascript&quot; src=&quot;SourceView.js&quot;&gt;&lt;/script&gt;
&gt; @@ -108,7 +109,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt;      &lt;/div&gt;
&gt;      &lt;div id=&quot;main&quot;&gt;
&gt;          &lt;div id=&quot;main-panels&quot; tabindex=&quot;0&quot; spellcheck=&quot;false&quot;&gt;&lt;/div&gt;
&gt; -        &lt;div id=&quot;main-status-bar&quot; class=&quot;status-bar&quot;&gt;&lt;div id=&quot;anchored-status-bar-items&quot;&gt;&lt;button id=&quot;dock-status-bar-item&quot; class=&quot;status-bar-item toggled&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;console-status-bar-item&quot; class=&quot;status-bar-item&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;changes-status-bar-item&quot; class=&quot;status-bar-item hidden&quot;&gt;&lt;/button&gt;&lt;div id=&quot;count-items&quot;&gt;&lt;div id=&quot;changes-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;div id=&quot;error-warning-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&gt; +        &lt;div id=&quot;main-status-bar&quot; class=&quot;status-bar&quot;&gt;&lt;div id=&quot;anchored-status-bar-items&quot;&gt;&lt;button id=&quot;dock-status-bar-item&quot; class=&quot;status-bar-item&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;console-status-bar-item&quot; class=&quot;status-bar-item&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;changes-status-bar-item&quot; class=&quot;status-bar-item hidden&quot;&gt;&lt;/button&gt;&lt;div id=&quot;count-items&quot;&gt;&lt;div id=&quot;changes-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;div id=&quot;error-warning-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

Why did this change?

&gt;      &lt;/div&gt;
&gt;      &lt;div id=&quot;drawer&quot;&gt;
&gt;          &lt;div id=&quot;console-view&quot;&gt;&lt;div id=&quot;console-messages&quot;&gt;&lt;div id=&quot;console-prompt&quot; spellcheck=&quot;false&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&gt; diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
&gt; index b632c2c..0be0804 100644
&gt; --- a/WebCore/inspector/front-end/inspector.js
&gt; +++ b/WebCore/inspector/front-end/inspector.js
&gt; @@ -72,6 +72,7 @@ var WebInspector = {
&gt;      resourceURLMap: {},
&gt;      cookieDomains: {},
&gt;      missingLocalizedStrings: {},
&gt; +    pendingDispatches: 0,
&gt;  
&gt;      get previousFocusElement()
&gt;      {
&gt; @@ -170,6 +171,8 @@ var WebInspector = {
&gt;  
&gt;          if (hiddenPanels.indexOf(&quot;storage&quot;) === -1 &amp;&amp; hiddenPanels.indexOf(&quot;databases&quot;) === -1)
&gt;              this.panels.storage = new WebInspector.StoragePanel();
&gt; +        if (hiddenPanels.indexOf(&quot;console&quot;) === -1)
&gt; +            this.panels.console = new WebInspector.ConsolePanel();
&gt;      },
&gt;  
&gt;      _loadPreferences: function()
&gt; @@ -396,7 +399,6 @@ WebInspector.loaded = function()
&gt;      document.body.addStyleClass(&quot;port-&quot; + port);
&gt;  
&gt;      this._loadPreferences();
&gt; -    this.pendingDispatches = 0;
&gt;  
&gt;      this.drawer = new WebInspector.Drawer();
&gt;      this.console = new WebInspector.ConsoleView(this.drawer);
&gt; @@ -535,6 +537,7 @@ WebInspector.windowResize = function(event)
&gt;  {
&gt;      if (this.currentPanel &amp;&amp; this.currentPanel.resize)
&gt;          this.currentPanel.resize();
&gt; +    this.drawer.resize();
&gt;  }
&gt;  
&gt;  WebInspector.windowFocused = function(event)
&gt; @@ -624,6 +627,9 @@ WebInspector.documentKeyDown = function(event)
&gt;  
&gt;          switch (event.keyIdentifier) {
&gt;              case &quot;U+001B&quot;: // Escape key
&gt; +                if (this.drawer.fullPanel)
&gt; +                    return;
&gt; +
&gt;                  this.drawer.visible = !this.drawer.visible;
&gt;                  event.preventDefault();
&gt;                  break;
&gt; @@ -749,29 +755,31 @@ WebInspector.mainCopy = function(event)
&gt;          this.currentPanel.handleCopyEvent(event);
&gt;  }
&gt;  
&gt; -WebInspector.animateStyle = function(animations, duration, callback, complete)
&gt; +WebInspector.animateStyle = function(animations, duration, callback)
&gt;  {
&gt; -    if (complete === undefined)
&gt; -        complete = 0;
&gt; -    var slice = (1000 / 30); // 30 frames per second
&gt; +    var interval;
&gt; +    var complete = 0;
&gt; +
&gt; +    const intervalDuration = (1000 / 30); // 30 frames per second.
&gt; +    const animationsLength = animations.length;
&gt; +    const propertyUnit = {opacity: &quot;&quot;};
&gt; +    const defaultUnit = &quot;px&quot;;
&gt;  
&gt; -    var defaultUnit = &quot;px&quot;;
&gt; -    var propertyUnit = {opacity: &quot;&quot;};
&gt; +    function cubicInOut(t, b, c, d)
&gt; +    {
&gt; +        if ((t/=d/2) &lt; 1) return c/2*t*t*t + b;
&gt; +        return c/2*((t-=2)*t*t + 2) + b;
&gt; +    }
&gt;  
&gt; -    for (var i = 0; i &lt; animations.length; ++i) {
&gt; +    // Pre-process animations.
&gt; +    for (var i = 0; i &lt; animationsLength; ++i) {
&gt;          var animation = animations[i];
&gt; -        var element = null;
&gt; -        var start = null;
&gt; -        var current = null;
&gt; -        var end = null;
&gt; -        var key = null;
&gt; +        var element = null, start = null, current = null, end = null, key = null;
&gt;          for (key in animation) {
&gt;              if (key === &quot;element&quot;)
&gt;                  element = animation[key];
&gt;              else if (key === &quot;start&quot;)
&gt;                  start = animation[key];
&gt; -            else if (key === &quot;current&quot;)
&gt; -                current = animation[key];
&gt;              else if (key === &quot;end&quot;)
&gt;                  end = animation[key];
&gt;          }
&gt; @@ -779,49 +787,54 @@ WebInspector.animateStyle = function(animations, duration, callback, complete)
&gt;          if (!element || !end)
&gt;              continue;
&gt;  
&gt; -        var computedStyle = element.ownerDocument.defaultView.getComputedStyle(element);
&gt;          if (!start) {
&gt; +            var computedStyle = element.ownerDocument.defaultView.getComputedStyle(element);
&gt;              start = {};
&gt;              for (key in end)
&gt;                  start[key] = parseInt(computedStyle.getPropertyValue(key));
&gt;              animation.start = start;
&gt; -        } else if (complete == 0)
&gt; +        } else
&gt;              for (key in start)
&gt;                  element.style.setProperty(key, start[key] + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
&gt; +    }
&gt;  
&gt; -        if (!current) {
&gt; -            current = {};
&gt; -            for (key in start)
&gt; -                current[key] = start[key];
&gt; -            animation.current = current;
&gt; -        }
&gt; -
&gt; -        function cubicInOut(t, b, c, d)
&gt; -        {
&gt; -            if ((t/=d/2) &lt; 1) return c/2*t*t*t + b;
&gt; -            return c/2*((t-=2)*t*t + 2) + b;
&gt; +    function animateLoop()
&gt; +    {
&gt; +        // Advance forward.
&gt; +        complete += intervalDuration;
&gt; +        var next = complete + intervalDuration;
&gt; +
&gt; +        // Make style changes.
&gt; +        for (var i = 0; i &lt; animationsLength; ++i) {
&gt; +            var animation = animations[i];
&gt; +            var element = animation.element;
&gt; +            var start = animation.start;
&gt; +            var end = animation.end;
&gt; +            if (!element || !end)
&gt; +                continue;
&gt; +
&gt; +            var style = element.style;
&gt; +            for (key in end) {
&gt; +                var endValue = end[key];
&gt; +                if (next &lt; duration) {
&gt; +                    var startValue = start[key];
&gt; +                    var newValue = cubicInOut(complete, startValue, endValue - startValue, duration);
&gt; +                    style.setProperty(key, newValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
&gt; +                } else
&gt; +                    style.setProperty(key, endValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
&gt; +            }
&gt;          }
&gt;  
&gt; -        var style = element.style;
&gt; -        for (key in end) {
&gt; -            var startValue = start[key];
&gt; -            var currentValue = current[key];
&gt; -            var endValue = end[key];
&gt; -            if ((complete + slice) &lt; duration) {
&gt; -                var delta = (endValue - startValue) / (duration / slice);
&gt; -                var newValue = cubicInOut(complete, startValue, endValue - startValue, duration);
&gt; -                style.setProperty(key, newValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
&gt; -                current[key] = newValue;
&gt; -            } else {
&gt; -                style.setProperty(key, endValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit));
&gt; -            }
&gt; +        // End condition.
&gt; +        if (complete &gt;= duration) {
&gt; +            clearInterval(interval);
&gt; +            if (callback)
&gt; +                callback();
&gt;          }
&gt;      }
&gt;  
&gt; -    if (complete &lt; duration)
&gt; -        setTimeout(WebInspector.animateStyle, slice, animations, duration, callback, complete + slice);
&gt; -    else if (callback)
&gt; -        callback();
&gt; +    interval = setInterval(animateLoop, intervalDuration);
&gt; +    return interval;
&gt;  }
&gt;  
&gt;  WebInspector.updateSearchLabel = function()
&gt; @@ -841,6 +854,7 @@ WebInspector.updateSearchLabel = function()
&gt;  WebInspector.toggleAttach = function()
&gt;  {
&gt;      this.attached = !this.attached;
&gt; +    this.drawer.resize();
&gt;  }
&gt;  
&gt;  WebInspector.toolbarDragStart = function(event)
&gt; @@ -964,6 +978,11 @@ WebInspector.showStoragePanel = function()
&gt;      this.currentPanel = this.panels.storage;
&gt;  }
&gt;  
&gt; +WebInspector.showConsolePanel = function()
&gt; +{
&gt; +    this.currentPanel = this.panels.console;
&gt; +}
&gt; +
&gt;  WebInspector.addResource = function(identifier, payload)
&gt;  {
&gt;      var resource = new WebInspector.Resource(
&gt; @@ -1054,7 +1073,7 @@ WebInspector.updateResource = function(identifier, payload)
&gt;              resource.responseReceivedTime = payload.responseReceivedTime;
&gt;          if (payload.endTime)
&gt;              resource.endTime = payload.endTime;
&gt; -        
&gt; +
&gt;          if (payload.loadEventTime) {
&gt;              // This loadEventTime is for the main resource, and we want to show it
&gt;              // for all resources on this page. This means we want to set it as a member
&gt; @@ -1062,7 +1081,7 @@ WebInspector.updateResource = function(identifier, payload)
&gt;              if (this.panels.resources)
&gt;                  this.panels.resources.mainResourceLoadTime = payload.loadEventTime;
&gt;          }
&gt; -        
&gt; +
&gt;          if (payload.domContentEventTime) {
&gt;              // This domContentEventTime is for the main resource, so it should go in
&gt;              // the resources panel for the same reasons as above.
&gt; @@ -1248,23 +1267,23 @@ WebInspector.log = function(message)
&gt;  {
&gt;      // remember &apos;this&apos; for setInterval() callback
&gt;      var self = this;
&gt; -    
&gt; +
&gt;      // return indication if we can actually log a message
&gt;      function isLogAvailable()
&gt;      {
&gt;          return WebInspector.ConsoleMessage &amp;&amp; WebInspector.ObjectProxy &amp;&amp; self.console;
&gt;      }
&gt; -    
&gt; +
&gt;      // flush the queue of pending messages
&gt;      function flushQueue()
&gt;      {
&gt;          var queued = WebInspector.log.queued;
&gt; -        if (!queued) 
&gt; +        if (!queued)
&gt;              return;
&gt; -            
&gt; +
&gt;          for (var i = 0; i &lt; queued.length; ++i)
&gt;              logMessage(queued[i]);
&gt; -        
&gt; +
&gt;          delete WebInspector.log.queued;
&gt;      }
&gt;  
&gt; @@ -1274,26 +1293,26 @@ WebInspector.log = function(message)
&gt;      {
&gt;          if (!isLogAvailable())
&gt;              return;
&gt; -            
&gt; +
&gt;          clearInterval(WebInspector.log.interval);
&gt;          delete WebInspector.log.interval;
&gt; -        
&gt; +
&gt;          flushQueue();
&gt;      }
&gt; -    
&gt; +
&gt;      // actually log the message
&gt;      function logMessage(message)
&gt;      {
&gt;          var repeatCount = 1;
&gt;          if (message == WebInspector.log.lastMessage)
&gt;              repeatCount = WebInspector.log.repeatCount + 1;
&gt; -    
&gt; +
&gt;          WebInspector.log.lastMessage = message;
&gt;          WebInspector.log.repeatCount = repeatCount;
&gt; -        
&gt; +
&gt;          // ConsoleMessage expects a proxy object
&gt;          message = new WebInspector.ObjectProxy(null, [], 0, message, false);
&gt; -        
&gt; +
&gt;          // post the message
&gt;          var msg = new WebInspector.ConsoleMessage(
&gt;              WebInspector.ConsoleMessage.MessageSource.Other,
&gt; @@ -1304,20 +1323,20 @@ WebInspector.log = function(message)
&gt;              null,
&gt;              repeatCount,
&gt;              message);
&gt; -    
&gt; +
&gt;          self.console.addMessage(msg);
&gt;      }
&gt; -    
&gt; +
&gt;      // if we can&apos;t log the message, queue it
&gt;      if (!isLogAvailable()) {
&gt;          if (!WebInspector.log.queued)
&gt;              WebInspector.log.queued = [];
&gt; -            
&gt; +
&gt;          WebInspector.log.queued.push(message);
&gt; -        
&gt; +
&gt;          if (!WebInspector.log.interval)
&gt;              WebInspector.log.interval = setInterval(flushQueueIfAvailable, 1000);
&gt; -        
&gt; +
&gt;          return;
&gt;      }
&gt;  
&gt; @@ -1457,7 +1476,8 @@ WebInspector.linkifyStringAsFragment = function(string)
&gt;      return container;
&gt;  }
&gt;  
&gt; -WebInspector.showProfileForURL = function(url) {
&gt; +WebInspector.showProfileForURL = function(url)
&gt; +{
&gt;      WebInspector.showProfilesPanel();
&gt;      WebInspector.panels.profiles.showProfileForURL(url);
&gt;  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165233</commentid>
    <comment_count>18</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-19 23:58:25 -0800</bug_when>
    <thetext>Sorry about not cleaning up uncommented parts. I was checking if bugzilla does it for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165238</commentid>
    <comment_count>19</comment_count>
    <who name="Paul Bakaus">pbakaus</who>
    <bug_when>2009-11-20 00:42:01 -0800</bug_when>
    <thetext>Joseph, I just saw you wrote your own animateStyle method to animate (I did it a couple times as well, wrote all the stuff for jQuery UI :) ). Now since we&apos;re effectively addressing Webkit only, I was wondering it it wouldn&apos;t be more efficient to use CSS Animations through the JavaScript exposed functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165298</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-20 07:12:38 -0800</bug_when>
    <thetext>&gt; &gt; +        this.previousConsoleState = WebInspector.drawer.state;
&gt; 
&gt; This can be private (this._previousConsoleState)

Done.


&gt; &gt; +        if (this.previousConsoleState === WebInspector.Drawer.State.Hidden) {
&gt; &gt; +            WebInspector.drawer.visible = false;
&gt; &gt; +            WebInspector.drawer.fullPanel = false;
&gt; 
&gt; You have nice methods that encapsulate drawer behavior for enterPanelMode nad
&gt; exitPanelMode. Should you introduce some reset method as well and hide visible
&gt; and fullPanel?

Done. I called this immediatelyExitPanelMode.


&gt; &gt; +    this.savedHeight = 0;
&gt; &gt; +    this.state = WebInspector.Drawer.State.Hidden;
&gt; &gt; +    this.fullPanel = false;
&gt; &gt; +
&gt; &gt; +    this.mainElement = document.getElementById(&quot;main&quot;);
&gt; &gt; +    this.toolbarElement = document.getElementById(&quot;toolbar&quot;);
&gt; 
&gt; Same here - you do access some of the drawer properties from the outside. Would
&gt; be nice to distinguish between public and private ones.

I left the element&apos;s alone. Since that seems to be precedence. savedHeight is now private.


&gt; &gt; +    set savedHeight(x)
&gt; &gt; +    {
&gt; &gt; +        this._savedHeight = x;
&gt; &gt; +    },
&gt; 
&gt; I don&apos;t think you need setter for this. I hope you mutate from within this
&gt; class only, you should just assign to this._savedHeight.

Done.


&gt; &gt; +            delete this.currentAnimationInterval;
&gt; &gt; +        ...
&gt; &gt; +        this.currentAnimationInterval = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
&gt; 
&gt; Ditto

Done. (made private).


&gt; &gt; +    &lt;file&gt;ConsolePanel.js&lt;/file&gt;
&gt; &gt; +    &lt;file&gt;Images/consoleIcon.png&lt;/file&gt;
&gt; 
&gt; Please add this into WebCore.gypi as well!

Already did (first file after ChangeLog).


&gt; &gt; -        &lt;div id=&quot;main-status-bar&quot; class=&quot;status-bar&quot;&gt;&lt;div id=&quot;anchored-status-bar-items&quot;&gt;&lt;button id=&quot;dock-status-bar-item&quot; class=&quot;status-bar-item toggled&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;console-status-bar-item&quot; class=&quot;status-bar-item&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;changes-status-bar-item&quot; class=&quot;status-bar-item hidden&quot;&gt;&lt;/button&gt;&lt;div id=&quot;count-items&quot;&gt;&lt;div id=&quot;changes-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;div id=&quot;error-warning-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&gt; &gt; +        &lt;div id=&quot;main-status-bar&quot; class=&quot;status-bar&quot;&gt;&lt;div id=&quot;anchored-status-bar-items&quot;&gt;&lt;button id=&quot;dock-status-bar-item&quot; class=&quot;status-bar-item&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;console-status-bar-item&quot; class=&quot;status-bar-item&quot;&gt;&lt;div class=&quot;glyph&quot;&gt;&lt;/div&gt;&lt;div class=&quot;glyph shadow&quot;&gt;&lt;/div&gt;&lt;/button&gt;&lt;button id=&quot;changes-status-bar-item&quot; class=&quot;status-bar-item hidden&quot;&gt;&lt;/button&gt;&lt;div id=&quot;count-items&quot;&gt;&lt;div id=&quot;changes-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;div id=&quot;error-warning-count&quot; class=&quot;hidden&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&gt; 
&gt; Why did this change?

I removed class &quot;toggle&quot; on the dock/undock button. The class does nothing. It should likely have been &quot;toggled-on&quot;, however we are all very used to it being toggled off, that it felt much more natural being off. To be clear, after this change, nothing will be different then it already is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165300</commentid>
    <comment_count>21</comment_count>
      <attachid>43578</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-20 07:18:31 -0800</bug_when>
    <thetext>Created attachment 43578
[PATCH] Console Panel (Even Better)

Addresses Pavel&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165301</commentid>
    <comment_count>22</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-20 07:20:13 -0800</bug_when>
    <thetext>Ahh, my latest patch I forgot to remove the image from the diff. You can just ignore the binary diff for the image.  I will end up landing this manually and use whatever image I am given.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165325</commentid>
    <comment_count>23</comment_count>
      <attachid>43588</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-20 09:16:50 -0800</bug_when>
    <thetext>Created attachment 43588
Console Panel Icon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165333</commentid>
    <comment_count>24</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-20 09:32:27 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Joseph, I just saw you wrote your own animateStyle method to animate (I did it
&gt; a couple times as well, wrote all the stuff for jQuery UI :) ). Now since we&apos;re
&gt; effectively addressing Webkit only, I was wondering it it wouldn&apos;t be more
&gt; efficient to use CSS Animations through the JavaScript exposed functions?

Back when I wrote the animateStyle method, CSS animations didn&apos;t exist. We have switched a few uses over to use CSS animations, but there are somethings that are just easier with this method. (Or imposible currently with CSS animations.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165338</commentid>
    <comment_count>25</comment_count>
      <attachid>43578</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-11-20 09:45:57 -0800</bug_when>
    <thetext>Comment on attachment 43578
[PATCH] Console Panel (Even Better)

&gt; +        var element = null, start = null, current = null, end = null, key = null;

You don&apos;t need current in this list.

Icon attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165374</commentid>
    <comment_count>26</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-20 11:23:17 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/51246
r51246 = d631fe866617cc286f07337f4e19cebc1b0cda5a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167433</commentid>
    <comment_count>27</comment_count>
    <who name="M Henderson">garbage</who>
    <bug_when>2009-11-30 15:07:37 -0800</bug_when>
    <thetext>Wow, thanks for the quick fix. A larger console area is well welcomed. In my opinion, it is still behind the one used in firebug. 

A couple of things
1. having the code mixed in with the results of the code. Firebug offers a separate section to write in and one to see the results. I feel that something along these lines, as minor as it is, would make the console tab a bit more useful.
2. Having to hit a control key to do line returns. I feel that the firebug way of having to hit a control key (command os x, control win) to execute the script is a more elegant solution.
3. Is it possible to add in tabbing support?

Again, I love the work that you guys are doing and I thank you for it. These are just a few suggestions to make the product a bit better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167437</commentid>
    <comment_count>28</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-11-30 15:18:37 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; 1. having the code mixed in with the results of the code. Firebug offers a
&gt; separate section to write in and one to see the results. I feel that something
&gt; along these lines, as minor as it is, would make the console tab a bit more
&gt; useful.

See bug 30553 for some ideas in this direction. Its currently referred to as &quot;Snippets&quot;. This feature would hopefully handle all of your suggestions =).

&gt; 2. Having to hit a control key to do line returns. I feel that the firebug way
&gt; of having to hit a control key (command os x, control win) to execute the
&gt; script is a more elegant solution.

For mac users, ⌥+Enter is a well known (or should be) for adding new lines. Again, consider the Snippets feature, which would be a text area.

&gt; 3. Is it possible to add in tabbing support?

You mean tab as in whitespace? Right now tab is used for autocompletion. I think users would prefer tab for completion over whitespace in the Console. It would probably be good for Snippets though.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43488</attachid>
            <date>2009-11-18 22:26:18 -0800</date>
            <delta_ts>2009-11-19 14:52:01 -0800</delta_ts>
            <desc>[PATCH] Extra Button (It is a Preference) to Toggle Full Console Mode</desc>
            <filename>console.patch</filename>
            <type>text/plain</type>
            <size>17530</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODhkM2ZjNS4uMGFmMTc4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0NiBAQAogMjAwOS0xMS0xOCAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkIGEgUHJlZmVyZW5jZSB0aGF0IGFsbG93cyB0aGUgRHJhd2VyIHRv
IGV4dGVuZCBhbGwgdGhlIHdheSB1cCB0byB0aGUKKyAgICAgICAgdG9vbGJhci4gVGhpcyBtb2Rl
IGlzIG5hbWVkICJGdWxsIENvbnNvbGUiIG1vZGUsIGFzIG9wcHNlZCB0byB0aGUKKyAgICAgICAg
bm9ybWFsICJWYXJpYWJsZSBDb25zb2xlIiBtb2RlLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9EcmF3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmdldCBzYXZlZEhlaWdodCk6IHRoZSBs
YXN0IHNhdmVkIGhlaWdodCBvZiB0aGUgZHJhd2VyIGluIHZhcmlhYmxlIG1vZGUKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNldCBzYXZlZEhlaWdodCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zaG93LmFuaW1hdGlvbkZpbmlzaGVkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuaGlkZS5hbmltYXRpb25GaW5pc2hlZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5oaWRlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnJlc2l6ZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRHJhd2VyLnByb3RvdHlwZS50b2dnbGVDb25zb2xlTW9kZSk6IHRvZ2dsZSB0aGUgcHJlZmVy
ZW5jZSBhbmQgVUkgaWYgbmVlZGVkCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3Rv
dHlwZS50cmlnZ2VyQ29uc29sZU1vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5w
cm90b3R5cGUuX3RyYW5zaXRpb25Ub0Z1bGxDb25zb2xlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EcmF3ZXIucHJvdG90eXBlLl90cmFuc2l0aW9uVG9WYXJpYWJsZUNvbnNvbGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX2FuaW1hdGVEcmF3ZXJIZWlnaHQuYW5p
bWF0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUu
X2FuaW1hdGVEcmF3ZXJIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90
b3R5cGUuX3N0YXJ0U3RhdHVzQmFyRHJhZ2dpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUuX3N0YXR1c0JhckRyYWdnaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EcmF3ZXIucHJvdG90eXBlLl9lbmRTdGF0dXNCYXJEcmFnZ2luZyk6CisgICAgICAgIAorICAg
ICAgICBDbGVhbiB1cCB0aGUgYWN0IG9mIHdvcmtpbmcgd2l0aCB0aGUgRHJhd2VyLCBQcmVmZXJl
bmNlcywgYW5kIHRoZSBuZXcgaWNvbi4KKyAgICAgICAgCisgICAgICAgICogRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiB0b29sdGlwcyBmb3IgdGhlIG5ldyBpY29uCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczogcmVtb3ZlZCBjb2RlIHRoZSB3
YXMgdW5uZWNlc3NhcmlseSByZW9yZGVyaW5nIERPTSBlbGVtZW50cworICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sOiBhbHdheXMgdmlzaWJsZSBpY29uIGlzIHNwZWNpZmllZCBpbiBo
dG1sCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuX2xvYWRQcmVmZXJlbmNlcyk6IGxvYWQgdGhlIGNvbnNvbGUgbW9kZSBw
cmVmZXJlbmNlCisgICAgICAgIChXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplKTogd2hlbiByZXNp
emluZyB0aGUgd2luZG93LCByZXNpemUgdGhlIGRyYXdlciBpZiBuZWVkZWQKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5fdG9vbGJhckl0ZW1DbGlja2VkKTogYnJlYWsgb3V0IG9mIGZ1bGwgY29uc29s
ZSBtb2RlIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIHBhbmVsCisKKzIwMDktMTEtMTggIEpvc2Vw
aCBQZWNvcmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBQ
YXZlbCBGZWxkbWFuLgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IERpcmVjdGx5IEFjY2VzcyA8
aGVhZD4gSW5zdGVhZCBvZiBTZWFyY2hpbmcgZm9yIEl0CmRpZmYgLS1naXQgYS9XZWJDb3JlL0Vu
Z2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9s
b2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IGI2YjA1YzU2ZTg3YTQ4ODI2YWJiNjMwYTIyMjIyYTNi
Mjc4Y2QxNDAuLjY5ZWFmMGU3MDYyMzEwNjRjYjYzMDY2YWU3NWM3YzEyZmYxNzQ3YzEgMTAwNjQ0
CkdJVCBiaW5hcnkgcGF0Y2gKZGVsdGEgMjMyCnpjbVpwPCFGYntwO3w3K1QkPiVzIUNMaSEoNWw/
NEdYVUpobFdsJiUhVkBQQnVWI294Tk5lbnJZOGBYdTQ2JlB8RQp6QCk9VHF2VSZfazQ2IzVwd21f
YEo1Q1JtJXFtTGJgWipuMk9LRkUkRGd4V05RUWxNPSlLdlItfFg1PXZ4MTQpU08KTiNNbmZmWmZn
Y0UxXzFZPEZGZ1BOCgpkZWx0YSA5ClFjbVg/Y2k/UVZmO3w3KS0wMmphbkFwaWdYCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCmluZGV4IGYwM2M2NDcuLjlmMDA2
ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKQEAgLTU3
LDkgKzU3LDYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3ID0gZnVuY3Rpb24oZHJhd2VyKQog
ICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU2hvdyBjb25zb2xlLiIpOwogICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUNvbnNvbGVCdXR0b25DbGlja2VkLmJpbmQo
dGhpcyksIGZhbHNlKTsKIAotICAgIHZhciBhbmNob3JlZFN0YXR1c0JhciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIik7Ci0gICAgYW5jaG9yZWRT
dGF0dXNCYXIuYXBwZW5kQ2hpbGQodGhpcy50b2dnbGVDb25zb2xlQnV0dG9uKTsKLSAgICAKICAg
ICAvLyBXaWxsIGhvbGQgdGhlIGxpc3Qgb2YgZmlsdGVyIGVsZW1lbnRzCiAgICAgdGhpcy5maWx0
ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtZmlsdGVyIik7
CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwppbmRleCAxYjUwZjkxLi43
MjBmZjE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpz
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMKQEAgLTcsMTMgKzcs
MTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCiAgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC0zMSw5ICszMSwxOCBAQCBXZWJJbnNwZWN0b3IuRHJh
d2VyID0gZnVuY3Rpb24oKQogewogICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcywgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlciIpKTsKIAorICAgIHRoaXMudG9vbGJhckhlaWdo
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIikub2Zmc2V0SGVpZ2h0OworICAg
IHRoaXMuc2F2ZWRIZWlnaHQgPSAwOworICAgIHRoaXMuc3RhdGUgPSBXZWJJbnNwZWN0b3IuRHJh
d2VyLlN0YXRlLkhpZGRlbjsKKworICAgIHRoaXMubWFpbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgibWFpbiIpOwogICAgIHRoaXMubWFpblN0YXR1c0JhciA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKTsKICAgICB0aGlzLm1haW5TdGF0dXNCYXIu
YWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fc3RhcnRTdGF0dXNCYXJEcmFnZ2lu
Zy5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICB0aGlzLnZpZXdTdGF0dXNCYXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0YXR1cy1iYXItaXRlbXMiKTsKKworICAgIHRo
aXMuY29uc29sZVByZWZlcmVuY2VCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29u
c29sZS1wcmVmZXJlbmNlLXN0YXR1cy1iYXItaXRlbSIpOworICAgIHRoaXMuY29uc29sZVByZWZl
cmVuY2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLnRvZ2dsZUNvbnNvbGVN
b2RlLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLnRyaWdnZXJDb25zb2xlTW9kZShQcmVm
ZXJlbmNlcy5mdWxsQ29uc29sZSk7CiB9CiAKIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBl
ID0gewpAQCAtNjQsNiArNzMsMTcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIH0KICAgICB9LAogCisgICAgZ2V0IHNhdmVkSGVpZ2h0KCkKKyAgICB7CisgICAg
ICAgIHZhciBoZWlnaHQgPSB0aGlzLl9zYXZlZEhlaWdodCB8fCB0aGlzLmVsZW1lbnQub2Zmc2V0
SGVpZ2h0OworICAgICAgICByZXR1cm4gTnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFByZWZlcmVu
Y2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMubWFpbkVsZW1l
bnQudG90YWxPZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICB9
LAorCisgICAgc2V0IHNhdmVkSGVpZ2h0KHgpCisgICAgeworICAgICAgICB0aGlzLl9zYXZlZEhl
aWdodCA9IHg7CisgICAgfSwKKwogICAgIHNob3dWaWV3OiBmdW5jdGlvbih2aWV3KQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy52aXNpYmxlVmlldyAhPT0gdmlldykK
QEAgLTg1LDkgKzEwNSwxMCBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNsYXNzKCJkcmF3ZXItdmlzaWJsZSIpOwogCiAg
ICAgICAgIHZhciBhbmNob3JlZEl0ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuY2hv
cmVkLXN0YXR1cy1iYXItaXRlbXMiKTsKLQorICAgICAgICB2YXIgaGVpZ2h0ID0gKFByZWZlcmVu
Y2VzLmZ1bGxDb25zb2xlID8gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy50b29sYmFySGVpZ2h0
IDogdGhpcy5zYXZlZEhlaWdodCk7CiAgICAgICAgIHZhciBhbmltYXRpb25zID0gWwotICAgICAg
ICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIiksIGVuZDoge2Jv
dHRvbTogdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6
IHRoaXMuZWxlbWVudCwgZW5kOiB7aGVpZ2h0OiBoZWlnaHR9fSwKKyAgICAgICAgICAgIHtlbGVt
ZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IGhlaWdo
dH19LAogICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWlu
LXN0YXR1cy1iYXIiKSwgc3RhcnQ6IHsicGFkZGluZy1sZWZ0IjogYW5jaG9yZWRJdGVtcy5vZmZz
ZXRXaWR0aCAtIDF9LCBlbmQ6IHsicGFkZGluZy1sZWZ0IjogMH19LAogICAgICAgICAgICAge2Vs
ZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1p
dGVtcyIpLCBzdGFydDoge29wYWNpdHk6IDB9LCBlbmQ6IHtvcGFjaXR5OiAxfX0KICAgICAgICAg
XTsKQEAgLTk5LDkgKzEyMCwxMiBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCJ1cGRhdGVTdGF0dXNCYXJJdGVtcyIgaW4gV2Vi
SW5zcGVjdG9yLmN1cnJlbnRQYW5lbCkKICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3Vy
cmVudFBhbmVsLnVwZGF0ZVN0YXR1c0Jhckl0ZW1zKCk7CisKICAgICAgICAgICAgIGlmICh0aGlz
LnZpc2libGVWaWV3LmFmdGVyU2hvdykKICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3
LmFmdGVyU2hvdygpOworCiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAg
ICAgICAgICAgdGhpcy5zdGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuVmFyaWFibGU7
CiAgICAgICAgIH0KIAogICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFuaW1hdGlv
bnMsIHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAyMDAwIDogMjUwLCBh
bmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKQEAgLTExMyw3ICsxMzcsNyBAQCBXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOwotICAgICAgICAK
KwogICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKICAgICAgICAgICAgIHRoaXMudmlzaWJs
ZVZpZXcuaGlkZSgpOwogCkBAIC0xMjQsOSArMTQ4LDkgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGFuY2hvcmVkSXRlbXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOwogCi0gICAgICAgIC8vIFRl
bXBvcmFsbHkgc2V0IHByb3BlcnRpZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5p
bWF0aW9uIHZhbHVlcyBzbyBwYW5lbHMKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgc2V0IHByb3Bl
cnRpZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5pbWF0aW9uIHZhbHVlcyBzbyBw
YW5lbHMKICAgICAgICAgLy8gbGlrZSBFbGVtZW50cyBpbiB0aGVpciB1cGRhdGVTdGF0dXNCYXJJ
dGVtcyBjYWxsIHdpbGwgc2l6ZSB0aGluZ3MgdG8gZml0IHRoZSBmaW5hbCBsb2NhdGlvbi4KLSAg
ICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLnN0eWxlLnNl
dFByb3BlcnR5KCJwYWRkaW5nLWxlZnQiLCAoYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDEp
ICsgInB4Iik7CisgICAgICAgIHRoaXMubWFpblN0YXR1c0Jhci5zdHlsZS5zZXRQcm9wZXJ0eSgi
cGFkZGluZy1sZWZ0IiwgKGFuY2hvcmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxKSArICJweCIpOwog
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12aXNpYmxlIik7
CiAgICAgICAgIGlmICgidXBkYXRlU3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJy
ZW50UGFuZWwpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsLnVwZGF0ZVN0
YXR1c0Jhckl0ZW1zKCk7CkBAIC0xNDUsNiArMTY5LDgzIEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgbWFpblN0YXR1c0Jhci5zdHlsZS5yZW1vdmVQcm9w
ZXJ0eSgicGFkZGluZy1sZWZ0Iik7CiAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0
eWxlQ2xhc3MoImRyYXdlci12aXNpYmxlIik7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5p
bWF0aW5nOworICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3Rh
dGUuSGlkZGVuOworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHls
ZShhbmltYXRpb25zLCB3aW5kb3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAw
MCA6IDI1MCwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIHJl
c2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdlYklu
c3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBoZWlnaHQ7CisgICAgICAgIHZhciBtYWluRWxlbWVudCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJtYWluIik7CisgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBXZWJJbnNwZWN0
b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxlKSB7CisgICAgICAgICAgICBoZWlnaHQgPSBwYXJzZUlu
dCh0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0LCAxMCk7CisgICAgICAgICAgICBoZWlnaHQgPSBO
dW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCwgd2lu
ZG93LmlubmVySGVpZ2h0IC0gbWFpbkVsZW1lbnQudG90YWxPZmZzZXRUb3AgLSBQcmVmZXJlbmNl
cy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBoZWlnaHQg
PSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLnRvb2xiYXJIZWlnaHQ7CisKKyAgICAgICAgbWFp
bkVsZW1lbnQuc3R5bGUuYm90dG9tID0gaGVpZ2h0ICsgInB4IjsKKyAgICAgICAgdGhpcy5lbGVt
ZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfSwKKworICAgIHRvZ2dsZUNv
bnNvbGVNb2RlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBQcmVmZXJlbmNlcy5mdWxsQ29u
c29sZSA9ICFQcmVmZXJlbmNlcy5mdWxsQ29uc29sZTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci5zZXRTZXR0aW5nKCJjb25zb2xlLWZ1bGwiLCBQcmVmZXJlbmNlcy5mdWxsQ29uc29sZSk7
CisgICAgICAgIHRoaXMudHJpZ2dlckNvbnNvbGVNb2RlKFByZWZlcmVuY2VzLmZ1bGxDb25zb2xl
KTsKKyAgICB9LAorCisgICAgdHJpZ2dlckNvbnNvbGVNb2RlOiBmdW5jdGlvbihmdWxsQ29uc29s
ZSkKKyAgICB7CisgICAgICAgIGlmIChmdWxsQ29uc29sZSkgeworICAgICAgICAgICAgdGhpcy5j
b25zb2xlUHJlZmVyZW5jZUJ1dHRvbi5hZGRTdHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7CisgICAg
ICAgICAgICB0aGlzLmNvbnNvbGVQcmVmZXJlbmNlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJUb2dnbGUgdmFyaWFibGUgY29uc29sZSBtb2RlLiIpOworICAgICAgICAgICAg
aWYgKHRoaXMudmlzaWJsZSkKKyAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uVG9GdWxs
Q29uc29sZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5jb25zb2xlUHJl
ZmVyZW5jZUJ1dHRvbi5yZW1vdmVTdHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7CisgICAgICAgICAg
ICB0aGlzLmNvbnNvbGVQcmVmZXJlbmNlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJUb2dnbGUgZnVsbCBjb25zb2xlIG1vZGUuIik7CisgICAgICAgICAgICBpZiAodGhpcy52
aXNpYmxlKQorICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25Ub1ZhcmlhYmxlQ29uc29s
ZSgpOworICAgICAgICB9CisgICAgfSwKKworICAgIF90cmFuc2l0aW9uVG9GdWxsQ29uc29sZTog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGluZykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB0aGlzLnNhdmVkSGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9m
ZnNldEhlaWdodDsKKworICAgICAgICB2YXIgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0g
dGhpcy50b29sYmFySGVpZ2h0OworICAgICAgICB0aGlzLl9hbmltYXRlRHJhd2VySGVpZ2h0KGhl
aWdodCwgV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5GdWxsKTsKKyAgICB9LAorCisgICAgX3Ry
YW5zaXRpb25Ub1ZhcmlhYmxlQ29uc29sZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMuX2FuaW1hdGluZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgaGVp
Z2h0ID0gdGhpcy5zYXZlZEhlaWdodDsKKyAgICAgICAgdGhpcy5fYW5pbWF0ZURyYXdlckhlaWdo
dChoZWlnaHQsIFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuVmFyaWFibGUpOworICAgIH0sCisK
KyAgICBfYW5pbWF0ZURyYXdlckhlaWdodDogZnVuY3Rpb24oaGVpZ2h0LCBmaW5hbFN0YXRlKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdmFyIGFuaW1h
dGlvbnMgPSBbCisgICAgICAgICAgICB7ZWxlbWVudDogdGhpcy5lbGVtZW50LCBlbmQ6IHtoZWln
aHQ6IGhlaWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJtYWluIiksIGVuZDoge2JvdHRvbTogaGVpZ2h0fX0KKyAgICAgICAgXTsKKworICAgICAg
ICBmdW5jdGlvbiBhbmltYXRpb25GaW5pc2hlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9hbmltYXRpbmc7CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gZmluYWxTdGF0
ZTsKICAgICAgICAgfQogCiAgICAgICAgIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0
aW9ucywgd2luZG93LmV2ZW50ICYmIHdpbmRvdy5ldmVudC5zaGlmdEtleSA/IDIwMDAgOiAyNTAs
IGFuaW1hdGlvbkZpbmlzaGVkLmJpbmQodGhpcykpOwpAQCAtMTY1LDEwICsyNjYsMTAgQEAgV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAKICAgICBfc3RhcnRTdGF0dXNCYXJEcmFn
Z2luZzogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSB8
fCBldmVudC50YXJnZXQgIT09IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1i
YXIiKSkKKyAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgZXZlbnQudGFyZ2V0ICE9PSB0aGlz
Lm1haW5TdGF0dXNCYXIpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgV2ViSW5zcGVj
dG9yLmVsZW1lbnREcmFnU3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVz
LWJhciIpLCB0aGlzLl9zdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRTdGF0
dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBldmVudCwgInJvdy1yZXNpemUiKTsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhpcy5tYWluU3RhdHVzQmFyLCB0aGlzLl9z
dGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRTdGF0dXNCYXJEcmFnZ2luZy5i
aW5kKHRoaXMpLCBldmVudCwgInJvdy1yZXNpemUiKTsKIAogICAgICAgICB0aGlzLl9zdGF0dXNC
YXJEcmFnT2Zmc2V0ID0gZXZlbnQucGFnZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3A7
CiAKQEAgLTE3OCw3ICsyNzksNiBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsK
ICAgICBfc3RhdHVzQmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAg
dmFyIG1haW5FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4iKTsKLQogICAg
ICAgICB2YXIgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gZXZlbnQucGFnZVkgKyB0aGlz
Ll9zdGF0dXNCYXJEcmFnT2Zmc2V0OwogICAgICAgICBoZWlnaHQgPSBOdW1iZXIuY29uc3RyYWlu
KGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0
IC0gbWFpbkVsZW1lbnQudG90YWxPZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVp
Z2h0KTsKIApAQCAtMTkzLDYgKzI5Myw3IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKGV2ZW50KTsK
IAorICAgICAgICB0aGlzLnNhdmVkSGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsK
ICAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7CiAKICAgICAgICAgZXZl
bnQuc3RvcFByb3BhZ2F0aW9uKCk7CkBAIC0yMDAsMyArMzAxLDkgQEAgV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUgPSB7CiB9CiAKIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkRy
YXdlci5TdGF0ZSA9IHsKKyAgICBIaWRkZW46IDAsCisgICAgVmFyaWFibGU6IDEsCisgICAgRnVs
bDogMgorfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKaW5kZXgg
MDM1ZGMxMy4uYjFjYjY3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5jc3MKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5jc3MKQEAgLTQwMCw2ICs0MDAsMTAgQEAgYm9keS5wb3J0LXF0ICNkb2NrLXN0YXR1cy1iYXIt
aXRlbSB7CiAgICAgLXdlYmtpdC1tYXNrLWltYWdlOiB1cmwoSW1hZ2VzL2NvbnNvbGVCdXR0b25H
bHlwaC5wbmcpOwogfQogCisjY29uc29sZS1wcmVmZXJlbmNlLXN0YXR1cy1iYXItaXRlbSAuZ2x5
cGggeworICAgIC13ZWJraXQtbWFzay1pbWFnZTogdXJsKEltYWdlcy91bmRvY2tCdXR0b25HbHlw
aC5wbmcpOyAvKiBUT0RPOiBOZWVkcyBJbWFnZSBmb3IgQ29uc29sZSBGdWxsL0hhbGYgVG9nZ2xl
IEJ1dHRvbiAqLworfQorCiAjY2xlYXItY29uc29sZS1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsK
ICAgICAtd2Via2l0LW1hc2staW1hZ2U6IHVybChJbWFnZXMvY2xlYXJDb25zb2xlQnV0dG9uR2x5
cGgucG5nKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbCBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApp
bmRleCBhNjA5Zjg5Li5hNTM4N2U1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sCkBAIC0xMDgsNyArMTA4LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8L2Rpdj4KICAg
ICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICAgPGRpdiBpZD0ibWFpbi1wYW5lbHMiIHRhYmluZGV4
PSIwIiBzcGVsbGNoZWNrPSJmYWxzZSI+PC9kaXY+Ci0gICAgICAgIDxkaXYgaWQ9Im1haW4tc3Rh
dHVzLWJhciIgY2xhc3M9InN0YXR1cy1iYXIiPjxkaXYgaWQ9ImFuY2hvcmVkLXN0YXR1cy1iYXIt
aXRlbXMiPjxidXR0b24gaWQ9ImRvY2stc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJh
ci1pdGVtIHRvZ2dsZWQiPjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlw
aCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1p
dGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRp
diBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2Vz
LXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9u
PjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlk
ZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48
L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFy
IiBjbGFzcz0ic3RhdHVzLWJhciI+PGRpdiBpZD0iYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyI+
PGJ1dHRvbiBpZD0iZG9jay1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0i
PjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2
PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3Rh
dHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGgg
c2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjb25zb2xlLXByZWZlcmVuY2Utc3Rh
dHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+
PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlk
PSJjaGFuZ2VzLXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4i
PjwvYnV0dG9uPjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBj
bGFzcz0iaGlkZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0i
aGlkZGVuIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlk
PSJkcmF3ZXIiPgogICAgICAgICA8ZGl2IGlkPSJjb25zb2xlLXZpZXciPjxkaXYgaWQ9ImNvbnNv
bGUtbWVzc2FnZXMiPjxkaXYgaWQ9ImNvbnNvbGUtcHJvbXB0IiBzcGVsbGNoZWNrPSJmYWxzZSI+
PGJyPjwvZGl2PjwvZGl2PjwvZGl2PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKaW5kZXggNjYyN2E4Yi4uYzgyZmYyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCkBAIC00Myw3ICs0Myw4IEBAIHZhciBQcmVmZXJlbmNlcyA9IHsKICAg
ICBzaG93Q29sb3JOaWNrbmFtZXM6IHRydWUsCiAgICAgY29sb3JGb3JtYXQ6ICJoZXgiLAogICAg
IGV2ZW50TGlzdGVuZXJzRmlsdGVyOiAiYWxsIiwKLSAgICByZXNvdXJjZXNMYXJnZVJvd3M6IHRy
dWUKKyAgICByZXNvdXJjZXNMYXJnZVJvd3M6IHRydWUsCisgICAgZnVsbENvbnNvbGU6IGZhbHNl
CiB9CiAKIGZ1bmN0aW9uIHByZWxvYWRJbWFnZXMoKQpAQCAtMTg0LDYgKzE4NSwxMCBAQCB2YXIg
V2ViSW5zcGVjdG9yID0gewogICAgICAgICB2YXIgcmVzb3VyY2VzTGFyZ2VSb3dzID0gSW5zcGVj
dG9yQ29udHJvbGxlci5zZXR0aW5nKCJyZXNvdXJjZXMtbGFyZ2Utcm93cyIpOwogICAgICAgICBp
ZiAodHlwZW9mIHJlc291cmNlc0xhcmdlUm93cyAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICAg
ICBQcmVmZXJlbmNlcy5yZXNvdXJjZXNMYXJnZVJvd3MgPSByZXNvdXJjZXNMYXJnZVJvd3M7CisK
KyAgICAgICAgdmFyIGZ1bGxDb25zb2xlID0gSW5zcGVjdG9yQ29udHJvbGxlci5zZXR0aW5nKCJj
b25zb2xlLWZ1bGwiKTsKKyAgICAgICAgaWYgKGZ1bGxDb25zb2xlKQorICAgICAgICAgICAgUHJl
ZmVyZW5jZXMuZnVsbENvbnNvbGUgPSBmdWxsQ29uc29sZTsKICAgICB9LAogCiAgICAgZ2V0IGF0
dGFjaGVkKCkKQEAgLTUzNCw2ICs1MzksNyBAQCBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0g
ZnVuY3Rpb24oZXZlbnQpCiB7CiAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsICYmIHRoaXMuY3Vy
cmVudFBhbmVsLnJlc2l6ZSkKICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwucmVzaXplKCk7Cisg
ICAgdGhpcy5kcmF3ZXIucmVzaXplKCk7CiB9CiAKIFdlYkluc3BlY3Rvci53aW5kb3dGb2N1c2Vk
ID0gZnVuY3Rpb24oZXZlbnQpCkBAIC0xNjk5LDYgKzE3MDUsMTAgQEAgV2ViSW5zcGVjdG9yLl90
b29sYmFySXRlbUNsaWNrZWQgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICB2YXIgdG9vbGJhckl0
ZW0gPSBldmVudC5jdXJyZW50VGFyZ2V0OwogICAgIHRoaXMuY3VycmVudFBhbmVsID0gdG9vbGJh
ckl0ZW0ucGFuZWw7CisKKyAgICAvLyBFdmVuIGlmIHRoZSBwYW5lbCBkaWQgbm90IGNoYW5nZSwg
d2Ugc2hvdWxkIGJyZWFrIG91dCBvZiBmdWxsIGNvbnNvbGUgbW9kZS4KKyAgICBpZiAoUHJlZmVy
ZW5jZXMuZnVsbENvbnNvbGUpCisgICAgICAgIHRoaXMuZHJhd2VyLnRvZ2dsZUNvbnNvbGVNb2Rl
KCk7CiB9CiAKIC8vIFRoaXMgdGFibGUgbWFwcyBNSU1FIHR5cGVzIHRvIHRoZSBSZXNvdXJjZS5U
eXBlcyB3aGljaCBhcmUgdmFsaWQgZm9yIHRoZW0uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43527</attachid>
            <date>2009-11-19 14:52:01 -0800</date>
            <delta_ts>2009-11-19 19:51:03 -0800</delta_ts>
            <desc>[PATCH] Console Panel</desc>
            <filename>console.patch</filename>
            <type>text/plain</type>
            <size>22473</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzQxYjhlZS4uZWE0YWY3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAwOS0xMS0xOSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkcyBhIENvbnNvbGUgUGFuZWwsIHdoaWNoIGFsbG93cyBmb3IgYSBG
dWxsIHNpemUgQ29uc29sZS4gVGhpcworICAgICAgICBleHRlbmRzIHRoZSBEcmF3ZXIgdG8gdGhl
IHNpemUgb2YgYSBQYW5lbC4gVGhpcyBhbHNvIGZpeGVzIHByZXZpb3VzCisgICAgICAgIHJlc2l6
ZSBpc3N1ZXMgd2l0aCB0aGUgRHJhd2VyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlUGFuZWwuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS50b29s
YmFySXRlbUNsYXNzLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlVmlldy5qczogcmVtb3ZlZCB1bm5lY2Vzc2FyeSBlbGVtZW50IHJlb3JkZXJpbmcK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EcmF3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUu
c2V0IHZpc2libGVWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBl
LmdldCBzYXZlZEhlaWdodCk6IHNhdmUgdGhlIGhlaWdodCBvZiB0aGUgdmFyaWFibGUgY29uc29s
ZQorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2V0IHNhdmVkSGVpZ2h0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cuYW5pbWF0aW9u
RmluaXNoZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2hvdyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5oaWRlLmFuaW1hdGlvbkZp
bmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmhpZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUucmVzaXplKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnRyaWdnZXJDb25zb2xlTW9kZSk6IGNhbGwg
dGhpcyB0byB0cmFuc2l0aW9uIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
cmF3ZXIucHJvdG90eXBlLl90cmFuc2l0aW9uVG9GdWxsQ29uc29sZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fdHJhbnNpdGlvblRvVmFyaWFibGVDb25zb2xlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9hbmltYXRlRHJhd2VySGVp
Z2h0LmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJv
dG90eXBlLl9hbmltYXRlRHJhd2VySGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3
ZXIucHJvdG90eXBlLl9hbmltYXRpb25MZW5ndGgpOiBmYWN0b3JlZCBvdXQgdG8gYSBzaW5nbGUg
cGxhY2UKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9zdGFydFN0YXR1
c0JhckRyYWdnaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9z
dGF0dXNCYXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlw
ZS5fZW5kU3RhdHVzQmFyRHJhZ2dpbmcpOgorCisgICAgICAgIE5lY2Vzc2FyeSBjaGFuZ2VzIGFu
ZCBjbGVhbnVwLgorCisgICAgICAgICogRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
OiAiQ29uc29sZSIKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb25zb2xl
SWNvbi5wbmc6IGFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmNzczogdG9vbGJhciBpbWFnZS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5odG1sOiBhZGQgbmV3IHNjcmlwdHMuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanM6IAorICAgICAgICAoV2ViSW5zcGVjdG9yLl9jcmVhdGVQYW5lbHMpOiBj
cmVhdGUgY29uc29sZSBwYW5lbC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUp
OiByZXNpemUgdGhlIGRyYXdlciBpZiBuZWVkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IudG9n
Z2xlQXR0YWNoKTogcmVzaXplIHRoZSBkcmF3ZXIgaWYgbmVlZGVkLgorCisgICAgICAgIEJ1aWxk
IGZpbGVzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMKKwogMjAwOS0xMS0xOSAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0VuZ2xpc2gu
bHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzCmluZGV4IGI2YjA1YzU2ZTg3YTQ4ODI2YWJiNjMwYTIyMjIyYTNiMjc4Y2Qx
NDAuLmVmOTgxYzc4ZDg1MTYzMWNjMGJjODk1ZjUyZjZiYzRiZWE0OTgwYTQgMTAwNjQ0CkdJVCBi
aW5hcnkgcGF0Y2gKZGVsdGEgNjAKemNtWnA8IUZjVGs7fDcrVCQ+JXMhQ1NNUnsoYUt7ZVgyQHNB
Vk10fEFWdSlvPlY2WCpaQj9mMXA3X3k4dDB+WjRUCkQ5c0NXfgoKZGVsdGEgOQpRY21jYjFnUiRp
WDt8NyktMDJuUj1FZFQlagoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOGM1MWE2MC4uNmM0OTg4NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MTYsNiAr
MzYxNiw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRl
YmFyUGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DaGFuZ2VzVmll
dy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcycsCisgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29va2llSXRlbXNWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0RhdGFiYXNlLmpzJywKQEAgLTM2ODQsNiArMzY4NSw3IEBACiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY2xlYXJDb25zb2xlQnV0dG9uR2x5
cGgucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jbG9zZUJ1
dHRvbnMucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb25z
b2xlQnV0dG9uR2x5cGgucG5nJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0lt
YWdlcy9jb25zb2xlSWNvbi5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SW1hZ2VzL2Nvb2tpZS5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1h
Z2VzL2RhdGFiYXNlLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFn
ZXMvZGF0YWJhc2VUYWJsZS5wbmcnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggNDBiOTJiZC4uZDQyN2U5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC00MjI3NCw2ICs0MjI3NCw5IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVQYW5l
bC5qcyIKKwkJCQkJPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxDb25zb2xlVmlldy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFjNzAzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5l
bCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuUGFuZWwuY2FsbCh0aGlzKTsKK30K
KworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUgPSB7CisgICAgdG9vbGJhckl0
ZW1DbGFzczogImNvbnNvbGUiLAorCisgICAgZ2V0IHRvb2xiYXJJdGVtTGFiZWwoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSIpOworICAgIH0s
CisKKyAgICBzaG93OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuUGFu
ZWwucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy5wcmV2aW91c0NvbnNv
bGVTdGF0ZSA9IFdlYkluc3BlY3Rvci5kcmF3ZXIuc3RhdGU7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5kcmF3ZXIudHJpZ2dlckNvbnNvbGVNb2RlKHRydWUpOworICAgICAgICBXZWJJbnNwZWN0b3Iu
c2hvd0NvbnNvbGUoKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CisgICAg
ICAgIGlmICh0aGlzLnByZXZpb3VzQ29uc29sZVN0YXRlID09IFdlYkluc3BlY3Rvci5EcmF3ZXIu
U3RhdGUuSGlkZGVuKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci52aXNpYmxlID0g
ZmFsc2U7CisgICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIudHJpZ2dlckNvbnNvbGVNb2RlKGZh
bHNlKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKaW5kZXggZjAzYzY0Ny4uOWYwMDZlMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwpAQCAtNTcsOSArNTcsNiBA
QCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcgPSBmdW5jdGlvbihkcmF3ZXIpCiAgICAgdGhpcy50
b2dnbGVDb25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGNv
bnNvbGUuIik7CiAgICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fdG9nZ2xlQ29uc29sZUJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSwgZmFs
c2UpOwogCi0gICAgdmFyIGFuY2hvcmVkU3RhdHVzQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiKTsKLSAgICBhbmNob3JlZFN0YXR1c0Jhci5h
cHBlbmRDaGlsZCh0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24pOwotICAgIAogICAgIC8vIFdpbGwg
aG9sZCB0aGUgbGlzdCBvZiBmaWx0ZXIgZWxlbWVudHMKICAgICB0aGlzLmZpbHRlckJhckVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1maWx0ZXIiKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCmluZGV4IDFiNTBmOTEuLjA5NGZiZWEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwpAQCAtNywxMyArNywxMyBAQAogICog
YXJlIG1ldDoKICAqCiAgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAogICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKQEAgLTMxLDYgKzMxLDEyIEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIgPSBmdW5j
dGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzLCBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZHJhd2VyIikpOwogCisgICAgdGhpcy5zYXZlZEhlaWdodCA9IDA7CisgICAg
dGhpcy5zdGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuOworICAgIHRoaXMu
ZnVsbENvbnNvbGUgPSBmYWxzZTsKKworICAgIHRoaXMubWFpbkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibWFpbiIpOworICAgIHRoaXMudG9vbGJhckVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgidG9vbGJhciIpOwogICAgIHRoaXMubWFpblN0YXR1c0JhciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKTsKICAgICB0aGlzLm1haW5T
dGF0dXNCYXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fc3RhcnRTdGF0dXNC
YXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICB0aGlzLnZpZXdTdGF0dXNCYXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0YXR1cy1iYXItaXRlbXMiKTsK
QEAgLTQ1LDYgKzUxLDggQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAg
c2V0IHZpc2libGVWaWV3KHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fdmlzaWJsZVZpZXcg
PT09IHgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgV2ViSW5zcGVjdG9yLmN1
cnJlbnRQYW5lbCA9PT0gV2ViSW5zcGVjdG9yLnBhbmVscy5jb25zb2xlKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY0LDYgKzcyLDE3IEBAIFdlYkluc3Bl
Y3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIGdldCBz
YXZlZEhlaWdodCgpCisgICAgeworICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fc2F2ZWRIZWln
aHQgfHwgdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgcmV0dXJuIE51bWJlci5j
b25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5u
ZXJIZWlnaHQgLSB0aGlzLm1haW5FbGVtZW50LnRvdGFsT2Zmc2V0VG9wIC0gUHJlZmVyZW5jZXMu
bWluQ29uc29sZUhlaWdodCk7CisgICAgfSwKKworICAgIHNldCBzYXZlZEhlaWdodCh4KQorICAg
IHsKKyAgICAgICAgdGhpcy5fc2F2ZWRIZWlnaHQgPSB4OworICAgIH0sCisKICAgICBzaG93Vmll
dzogZnVuY3Rpb24odmlldykKICAgICB7CiAgICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRo
aXMudmlzaWJsZVZpZXcgIT09IHZpZXcpCkBAIC04NSw5ICsxMDQsMTAgQEAgV2ViSW5zcGVjdG9y
LkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFz
cygiZHJhd2VyLXZpc2libGUiKTsKIAogICAgICAgICB2YXIgYW5jaG9yZWRJdGVtcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIik7Ci0KKyAgICAg
ICAgdmFyIGhlaWdodCA9ICh0aGlzLmZ1bGxDb25zb2xlID8gd2luZG93LmlubmVySGVpZ2h0IC0g
dGhpcy50b29sYmFyRWxlbWVudC5vZmZzZXRIZWlnaHQgOiB0aGlzLnNhdmVkSGVpZ2h0KTsKICAg
ICAgICAgdmFyIGFuaW1hdGlvbnMgPSBbCi0gICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm1haW4iKSwgZW5kOiB7Ym90dG9tOiB0aGlzLmVsZW1lbnQub2Zmc2V0
SGVpZ2h0fX0sCisgICAgICAgICAgICB7ZWxlbWVudDogdGhpcy5lbGVtZW50LCBlbmQ6IHtoZWln
aHQ6IGhlaWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJtYWluIiksIGVuZDoge2JvdHRvbTogaGVpZ2h0fX0sCiAgICAgICAgICAgICB7ZWxlbWVu
dDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLCBzdGFydDogeyJw
YWRkaW5nLWxlZnQiOiBhbmNob3JlZEl0ZW1zLm9mZnNldFdpZHRoIC0gMX0sIGVuZDogeyJwYWRk
aW5nLWxlZnQiOiAwfX0sCiAgICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm90aGVyLWRyYXdlci1zdGF0dXMtYmFyLWl0ZW1zIiksIHN0YXJ0OiB7b3BhY2l0eTog
MH0sIGVuZDoge29wYWNpdHk6IDF9fQogICAgICAgICBdOwpAQCAtMTAyLDkgKzEyMiwxMCBAQCBX
ZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLnZp
c2libGVWaWV3LmFmdGVyU2hvdykKICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmFm
dGVyU2hvdygpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2FuaW1hdGluZzsKKyAgICAgICAg
ICAgIHRoaXMuc3RhdGUgPSAodGhpcy5mdWxsQ29uc29sZSA/IFdlYkluc3BlY3Rvci5EcmF3ZXIu
U3RhdGUuRnVsbCA6IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuVmFyaWFibGUpOwogICAgICAg
ICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5k
b3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9u
RmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUo
YW5pbWF0aW9ucywgdGhpcy5fYW5pbWF0aW9uTGVuZ3RoKCksIGFuaW1hdGlvbkZpbmlzaGVkLmJp
bmQodGhpcykpOwogICAgIH0sCiAKICAgICBoaWRlOiBmdW5jdGlvbigpCkBAIC0xMTMsNyArMTM0
LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlLmhpZGUuY2FsbCh0aGlz
KTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCiAgICAgICAgICAg
ICB0aGlzLnZpc2libGVWaWV3LmhpZGUoKTsKIApAQCAtMTI0LDkgKzE0NSw5IEBAIFdlYkluc3Bl
Y3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBhbmNob3JlZEl0ZW1zID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiKTsKIAot
ICAgICAgICAvLyBUZW1wb3JhbGx5IHNldCBwcm9wZXJ0aWVzIGFuZCBjbGFzc2VzIHRvIG1pbWlj
IHRoZSBwb3N0LWFuaW1hdGlvbiB2YWx1ZXMgc28gcGFuZWxzCisgICAgICAgIC8vIFRlbXBvcmFy
aWx5IHNldCBwcm9wZXJ0aWVzIGFuZCBjbGFzc2VzIHRvIG1pbWljIHRoZSBwb3N0LWFuaW1hdGlv
biB2YWx1ZXMgc28gcGFuZWxzCiAgICAgICAgIC8vIGxpa2UgRWxlbWVudHMgaW4gdGhlaXIgdXBk
YXRlU3RhdHVzQmFySXRlbXMgY2FsbCB3aWxsIHNpemUgdGhpbmdzIHRvIGZpdCB0aGUgZmluYWwg
bG9jYXRpb24uCi0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1i
YXIiKS5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1sZWZ0IiwgKGFuY2hvcmVkSXRlbXMub2Zm
c2V0V2lkdGggLSAxKSArICJweCIpOworICAgICAgICB0aGlzLm1haW5TdGF0dXNCYXIuc3R5bGUu
c2V0UHJvcGVydHkoInBhZGRpbmctbGVmdCIsIChhbmNob3JlZEl0ZW1zLm9mZnNldFdpZHRoIC0g
MSkgKyAicHgiKTsKICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVTdHlsZUNsYXNzKCJkcmF3
ZXItdmlzaWJsZSIpOwogICAgICAgICBpZiAoInVwZGF0ZVN0YXR1c0Jhckl0ZW1zIiBpbiBXZWJJ
bnNwZWN0b3IuY3VycmVudFBhbmVsKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQ
YW5lbC51cGRhdGVTdGF0dXNCYXJJdGVtcygpOwpAQCAtMTQ1LDkgKzE2Niw4NiBAQCBXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIG1haW5TdGF0dXNCYXIuc3R5
bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctbGVmdCIpOwogICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5yZW1vdmVTdHlsZUNsYXNzKCJkcmF3ZXItdmlzaWJsZSIpOwogICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2FuaW1hdGluZzsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXZWJJbnNwZWN0
b3IuRHJhd2VyLlN0YXRlLkhpZGRlbjsKICAgICAgICAgfQogCi0gICAgICAgIFdlYkluc3BlY3Rv
ci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgd2luZG93LmV2ZW50ICYmIHdpbmRvdy5ldmVudC5z
aGlmdEtleSA/IDIwMDAgOiAyNTAsIGFuaW1hdGlvbkZpbmlzaGVkLmJpbmQodGhpcykpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFuaW1hdGlvbnMsIHRoaXMuX2FuaW1hdGlv
bkxlbmd0aCgpLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAg
cmVzaXplOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gV2Vi
SW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5IaWRkZW4pCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIGhlaWdodDsKKyAgICAgICAgdmFyIG1haW5FbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIm1haW4iKTsKKyAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdlYkluc3Bl
Y3Rvci5EcmF3ZXIuU3RhdGUuVmFyaWFibGUpIHsKKyAgICAgICAgICAgIGhlaWdodCA9IHBhcnNl
SW50KHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQsIDEwKTsKKyAgICAgICAgICAgIGhlaWdodCA9
IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3
aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVu
Y2VzLm1pbkNvbnNvbGVIZWlnaHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhlaWdo
dCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMudG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0
OworCisgICAgICAgIG1haW5FbGVtZW50LnN0eWxlLmJvdHRvbSA9IGhlaWdodCArICJweCI7Cisg
ICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH0s
CisKKyAgICB0cmlnZ2VyQ29uc29sZU1vZGU6IGZ1bmN0aW9uKGZ1bGxDb25zb2xlLCBmb3JjZSkK
KyAgICB7CisgICAgICAgIC8vIFRPRE86IEhhbmRsZSBmb3JjZSB0byBzdG9wIHRoZSBhbmltYXRp
b24KKyAgICAgICAgdGhpcy5mdWxsQ29uc29sZSA9IGZ1bGxDb25zb2xlOworICAgICAgICBpZiAo
ZnVsbENvbnNvbGUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUpCisgICAgICAgICAg
ICAgICAgdGhpcy5fdHJhbnNpdGlvblRvRnVsbENvbnNvbGUoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUpCisgICAgICAgICAgICAgICAgdGhpcy5fdHJh
bnNpdGlvblRvVmFyaWFibGVDb25zb2xlKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3Ry
YW5zaXRpb25Ub0Z1bGxDb25zb2xlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhp
cy5fYW5pbWF0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuc2F2ZWRI
ZWlnaHQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworCisgICAgICAgIHZhciBoZWlnaHQg
PSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLnRvb2xiYXJFbGVtZW50Lm9mZnNldEhlaWdodDsK
KyAgICAgICAgdGhpcy5fYW5pbWF0ZURyYXdlckhlaWdodChoZWlnaHQsIFdlYkluc3BlY3Rvci5E
cmF3ZXIuU3RhdGUuRnVsbCk7CisgICAgfSwKKworICAgIF90cmFuc2l0aW9uVG9WYXJpYWJsZUNv
bnNvbGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9hbmltYXRpbmcpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuc2F2ZWRIZWln
aHQ7CisgICAgICAgIHRoaXMuX2FuaW1hdGVEcmF3ZXJIZWlnaHQoaGVpZ2h0LCBXZWJJbnNwZWN0
b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxlKTsKKyAgICB9LAorCisgICAgX2FuaW1hdGVEcmF3ZXJI
ZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCwgZmluYWxTdGF0ZSkKKyAgICB7CisgICAgICAgIHRoaXMu
X2FuaW1hdGluZyA9IHRydWU7CisgICAgICAgIHZhciBhbmltYXRpb25zID0gWworICAgICAgICAg
ICAge2VsZW1lbnQ6IHRoaXMuZWxlbWVudCwgZW5kOiB7aGVpZ2h0OiBoZWlnaHR9fSwKKyAgICAg
ICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6IHti
b3R0b206IGhlaWdodH19CisgICAgICAgIF07CisKKyAgICAgICAgZnVuY3Rpb24gYW5pbWF0aW9u
RmluaXNoZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5n
OworICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGZpbmFsU3RhdGU7CisgICAgICAgIH0KKworICAg
ICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFuaW1hdGlvbnMsIHRoaXMuX2FuaW1hdGlv
bkxlbmd0aCgpLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAg
X2FuaW1hdGlvbkxlbmd0aDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gSW1tZWRpYXRl
IGlmIGdvaW5nIGJldHdlZW4gSGlkZGVuIGFuZCBGdWxsIGluIGZ1bGxDb25zb2xlIG1vZGUKKyAg
ICAgICAgaWYgKHRoaXMuZnVsbENvbnNvbGUgJiYgKHRoaXMuc3RhdGUgPT09IFdlYkluc3BlY3Rv
ci5EcmF3ZXIuU3RhdGUuSGlkZGVuIHx8IHRoaXMuc3RhdGUgPT09IFdlYkluc3BlY3Rvci5EcmF3
ZXIuU3RhdGUuRnVsbCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4g
KHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAyMDAwIDogMjUwKTsKICAg
ICB9LAogCiAgICAgX3NhZmVseVJlbW92ZUNoaWxkcmVuOiBmdW5jdGlvbigpCkBAIC0xNjUsMTAg
KzI2MywxMCBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIAogICAgIF9zdGFy
dFN0YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy52aXNpYmxlIHx8IGV2ZW50LnRhcmdldCAhPT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im1haW4tc3RhdHVzLWJhciIpKQorICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCBldmVudC50
YXJnZXQgIT09IHRoaXMubWFpblN0YXR1c0JhcikKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgibWFpbi1zdGF0dXMtYmFyIiksIHRoaXMuX3N0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyks
IHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2ZW50LCAicm93LXJlc2l6
ZSIpOworICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCh0aGlzLm1haW5TdGF0
dXNCYXIsIHRoaXMuX3N0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFN0YXR1
c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2ZW50LCAicm93LXJlc2l6ZSIpOwogCiAgICAgICAg
IHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQgPSBldmVudC5wYWdlWSAtIHRoaXMuZWxlbWVudC50
b3RhbE9mZnNldFRvcDsKIApAQCAtMTc4LDcgKzI3Niw2IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIu
cHJvdG90eXBlID0gewogICAgIF9zdGF0dXNCYXJEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewogICAgICAgICB2YXIgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bWFpbiIpOwotCiAgICAgICAgIHZhciBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVu
dC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7CiAgICAgICAgIGhlaWdodCA9IE51
bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5k
b3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2Vz
Lm1pbkNvbnNvbGVIZWlnaHQpOwogCkBAIC0xOTMsNiArMjkwLDcgQEAgV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERy
YWdFbmQoZXZlbnQpOwogCisgICAgICAgIHRoaXMuc2F2ZWRIZWlnaHQgPSB0aGlzLmVsZW1lbnQu
b2Zmc2V0SGVpZ2h0OwogICAgICAgICBkZWxldGUgdGhpcy5fc3RhdHVzQmFyRHJhZ09mZnNldDsK
IAogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKQEAgLTIwMCwzICsyOTgsOSBAQCBX
ZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLkRyYXdl
ci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOworCitX
ZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlID0geworICAgIEhpZGRlbjogMCwKKyAgICBWYXJpYWJs
ZTogMSwKKyAgICBGdWxsOiAyCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YwppbmRleCA1MzkxN2Y2Li5kYmY0MDZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYwpAQCAtOSw2ICs5LDcgQEAKICAgICA8ZmlsZT5DYWxsU3RhY2tTaWRlYmFyUGFuZS5q
czwvZmlsZT4KICAgICA8ZmlsZT5DaGFuZ2VzVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5Db2xv
ci5qczwvZmlsZT4KKyAgICA8ZmlsZT5Db25zb2xlUGFuZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+
Q29uc29sZVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q29va2llSXRlbXNWaWV3LmpzPC9maWxl
PgogICAgIDxmaWxlPkRhdGFiYXNlLmpzPC9maWxlPgpAQCAtNzUsNiArNzYsNyBAQAogICAgIDxm
aWxlPkltYWdlcy9jbG9zZUJ1dHRvbnMucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9jb25z
b2xlQnV0dG9uR2x5cGgucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9jb29raWUucG5nPC9m
aWxlPgorICAgIDxmaWxlPkltYWdlcy9jb25zb2xlSWNvbi5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+
SW1hZ2VzL2RhdGFiYXNlLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvZGF0YWJhc2VUYWJs
ZS5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RlYnVnZ2VyQ29udGludWUucG5nPC9maWxl
PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3Mg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCAwMzVkYzEz
Li41MGU3ZWY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpA
QCAtMjE1LDYgKzIxNSwxMCBAQCBib2R5LmF0dGFjaGVkICNzZWFyY2gtcmVzdWx0cy1tYXRjaGVz
IHsKICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3Byb2ZpbGVzSWNvbi5wbmcpOwog
fQogCisudG9vbGJhci1pdGVtLmNvbnNvbGUgLnRvb2xiYXItaWNvbiB7CisgICAgYmFja2dyb3Vu
ZC1pbWFnZTogdXJsKEltYWdlcy9jb25zb2xlSWNvbi5wbmcpOworfQorCiAjY2xvc2UtYnV0dG9u
LWxlZnQsICNjbG9zZS1idXR0b24tcmlnaHQgewogICAgIHdpZHRoOiAxNHB4OwogICAgIGhlaWdo
dDogMTRweDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbCBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRl
eCBhNjA5Zjg5Li40ODk5OTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5odG1sCkBAIC03OSw2ICs3OSw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0c1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdG9yYWdlUGFuZWwuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb2ZpbGVzUGFuZWwu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNv
bnNvbGVQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iUmVzb3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlVmlldy5qcyI+PC9zY3JpcHQ+CkBA
IC0xMDgsNyArMTA5LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlkPSJtYWlu
Ij4KICAgICAgICAgPGRpdiBpZD0ibWFpbi1wYW5lbHMiIHRhYmluZGV4PSIwIiBzcGVsbGNoZWNr
PSJmYWxzZSI+PC9kaXY+Ci0gICAgICAgIDxkaXYgaWQ9Im1haW4tc3RhdHVzLWJhciIgY2xhc3M9
InN0YXR1cy1iYXIiPjxkaXYgaWQ9ImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiPjxidXR0b24g
aWQ9ImRvY2stc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIHRvZ2dsZWQi
PjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2
PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3Rh
dHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGgg
c2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2VzLXN0YXR1cy1iYXItaXRl
bSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9uPjxkaXYgaWQ9ImNvdW50
LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48ZGl2
IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48L2Rpdj48L2Rp
dj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFyIiBjbGFzcz0ic3RhdHVz
LWJhciI+PGRpdiBpZD0iYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyI+PGJ1dHRvbiBpZD0iZG9j
ay1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0iPjxkaXYgY2xhc3M9Imds
eXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0
b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48
ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48
L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2VzLXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1
cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9uPjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlk
PSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJu
aW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgICA8
L2Rpdj4KICAgICA8ZGl2IGlkPSJkcmF3ZXIiPgogICAgICAgICA8ZGl2IGlkPSJjb25zb2xlLXZp
ZXciPjxkaXYgaWQ9ImNvbnNvbGUtbWVzc2FnZXMiPjxkaXYgaWQ9ImNvbnNvbGUtcHJvbXB0IiBz
cGVsbGNoZWNrPSJmYWxzZSI+PGJyPjwvZGl2PjwvZGl2PjwvZGl2PgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggYjYzMmMyYy4uZjQzMTkzYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xNzAsNiArMTcwLDggQEAgdmFy
IFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoInN0
b3JhZ2UiKSA9PT0gLTEgJiYgaGlkZGVuUGFuZWxzLmluZGV4T2YoImRhdGFiYXNlcyIpID09PSAt
MSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnN0b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlN0
b3JhZ2VQYW5lbCgpOworICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoImNvbnNvbGUi
KSA9PT0gLTEpCisgICAgICAgICAgICB0aGlzLnBhbmVscy5jb25zb2xlID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db25zb2xlUGFuZWwoKTsKICAgICB9LAogCiAgICAgX2xvYWRQcmVmZXJlbmNlczogZnVu
Y3Rpb24oKQpAQCAtNTM1LDYgKzUzNyw3IEBAIFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBm
dW5jdGlvbihldmVudCkKIHsKICAgICBpZiAodGhpcy5jdXJyZW50UGFuZWwgJiYgdGhpcy5jdXJy
ZW50UGFuZWwucmVzaXplKQogICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5yZXNpemUoKTsKKyAg
ICB0aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVjdG9yLndpbmRvd0ZvY3VzZWQg
PSBmdW5jdGlvbihldmVudCkKQEAgLTg0MSw2ICs4NDQsNyBAQCBXZWJJbnNwZWN0b3IudXBkYXRl
U2VhcmNoTGFiZWwgPSBmdW5jdGlvbigpCiBXZWJJbnNwZWN0b3IudG9nZ2xlQXR0YWNoID0gZnVu
Y3Rpb24oKQogewogICAgIHRoaXMuYXR0YWNoZWQgPSAhdGhpcy5hdHRhY2hlZDsKKyAgICB0aGlz
LmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVjdG9yLnRvb2xiYXJEcmFnU3RhcnQgPSBm
dW5jdGlvbihldmVudCkK
</data>
<flag name="commit-queue"
          id="25251"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43543</attachid>
            <date>2009-11-19 19:51:03 -0800</date>
            <delta_ts>2009-11-19 21:58:27 -0800</delta_ts>
            <desc>[PATCH] Console Panel (Improved)</desc>
            <filename>console.patch</filename>
            <type>text/plain</type>
            <size>30865</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzQxYjhlZS4uODVlMDA3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAwOS0xMS0xOSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkcyBhIENvbnNvbGUgUGFuZWwsIHdoaWNoIGFsbG93cyBmb3IgYSBG
dWxsIHNpemUgQ29uc29sZS4gVGhpcworICAgICAgICBleHRlbmRzIHRoZSBEcmF3ZXIgdG8gdGhl
IHNpemUgb2YgYSBQYW5lbC4gVGhpcyBhbHNvIGZpeGVzIHByZXZpb3VzCisgICAgICAgIHJlc2l6
ZSBpc3N1ZXMgd2l0aCB0aGUgRHJhd2VyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlUGFuZWwuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS50b29s
YmFySXRlbUNsYXNzLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlVmlldy5qczogcmVtb3ZlZCB1bm5lY2Vzc2FyeSBlbGVtZW50IHJlb3JkZXJpbmcK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EcmF3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUu
c2V0IHZpc2libGVWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBl
LmdldCBzYXZlZEhlaWdodCk6IHNhdmUgdGhlIGhlaWdodCBvZiB0aGUgdmFyaWFibGUgY29uc29s
ZQorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2V0IHNhdmVkSGVpZ2h0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cuYW5pbWF0aW9u
RmluaXNoZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2hvdyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5oaWRlLmFuaW1hdGlvbkZp
bmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmhpZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUucmVzaXplKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnRyaWdnZXJDb25zb2xlTW9kZSk6IGNhbGwg
dGhpcyB0byB0cmFuc2l0aW9uIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
cmF3ZXIucHJvdG90eXBlLl90cmFuc2l0aW9uVG9GdWxsQ29uc29sZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fdHJhbnNpdGlvblRvVmFyaWFibGVDb25zb2xlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9hbmltYXRlRHJhd2VySGVp
Z2h0LmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJv
dG90eXBlLl9hbmltYXRlRHJhd2VySGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3
ZXIucHJvdG90eXBlLl9hbmltYXRpb25MZW5ndGgpOiBmYWN0b3JlZCBvdXQgdG8gYSBzaW5nbGUg
cGxhY2UKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9zdGFydFN0YXR1
c0JhckRyYWdnaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9z
dGF0dXNCYXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlw
ZS5fZW5kU3RhdHVzQmFyRHJhZ2dpbmcpOgorCisgICAgICAgIFJlc3RvcmUgdGhlIFBhbmVsIGFj
cm9zcyBJbnNwZWN0b3IgcmVzdGFydHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CisKKyAgICAgICAgTmVjZXNzYXJ5IGNoYW5nZXMgYW5kIGNsZWFudXAuCisKKyAgICAgICAgKiBF
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6ICJDb25zb2xlIgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NvbnNvbGVJY29uLnBuZzogYWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzOiB0b29sYmFyIGltYWdlLgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6IGFkZCBuZXcgc2NyaXB0
cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczogCisgICAgICAg
IChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6IGNyZWF0ZSBjb25zb2xlIHBhbmVsLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSk6IHJlc2l6ZSB0aGUgZHJhd2VyIGlmIG5l
ZWRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci50b2dnbGVBdHRhY2gpOiByZXNpemUgdGhlIGRy
YXdlciBpZiBuZWVkZWQuCisKKyAgICAgICAgQnVpbGQgZmlsZXMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGkKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworCiAyMDA5LTExLTE5ICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0
dC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
IGIvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggYjZiMDVj
NTZlODdhNDg4MjZhYmI2MzBhMjIyMjJhM2IyNzhjZDE0MC4uZWY5ODFjNzhkODUxNjMxY2MwYmM4
OTVmNTJmNmJjNGJlYTQ5ODBhNCAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApkZWx0YSA2MAp6Y21a
cDwhRmNUazt8NytUJD4lcyFDU01SeyhhS3tlWDJAc0FWTXR8QVZ1KW8+VjZYKlpCP2YxcDdfeTh0
MH5aNFQKRDlzQ1d+CgpkZWx0YSA5ClFjbWNiMWdSJGlYO3w3KS0wMm5SPUVkVCVqCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4
YzUxYTYwLi42YzQ5ODg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYxNiw2ICszNjE2LDcgQEAKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NoYW5nZXNWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbG9yLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9D
b25zb2xlVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJ
dGVtc1ZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2Uu
anMnLApAQCAtMzY4NCw2ICszNjg1LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9jbGVhckNvbnNvbGVCdXR0b25HbHlwaC5wbmcnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Nsb3NlQnV0dG9ucy5wbmcnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NvbnNvbGVCdXR0b25HbHlwaC5wbmcnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NvbnNvbGVJY29uLnBuZycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29va2llLnBuZycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGF0YWJhc2UucG5nJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZycsCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA0MGI5MmJkLi5kNDI3ZTk2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQyMjc0LDYgKzQyMjc0LDkg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29sZVBhbmVsLmpzIgorCQkJCQk+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVWaWV3Lmpz
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAppbmRleCA5MjBjM2YwLi41MjQzNmVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzE1LDEwICszMTUsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQog
ICAgICAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7CiAgICAgICAgIHBvcHVsYXRlU2Ny
aXB0T2JqZWN0cygpOwogCi0gICAgICAgIC8vIENvbnNvbGUgcGFuZWwgaXMgaW1wbGVtZW50ZWQg
YXMgYSAnZmFzdCB2aWV3Jywgc28gdGhlcmUgc2hvdWxkIGJlCi0gICAgICAgIC8vIHJlYWwgcGFu
ZWwgb3BlbmVkIGFsb25nIHdpdGggaXQuCi0gICAgICAgIGJvb2wgc2hvd0NvbnNvbGUgPSBtX3No
b3dBZnRlclZpc2libGUgPT0gQ29uc29sZVBhbmVsOwotICAgICAgICBpZiAobV9zaG93QWZ0ZXJW
aXNpYmxlID09IEN1cnJlbnRQYW5lbCB8fCBzaG93Q29uc29sZSkgeworICAgICAgICBpZiAobV9z
aG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCkgewogICAgICAgICAgIFNldHRpbmcgbGFz
dEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUp
OwogICAgICAgICAgIGlmIChsYXN0QWN0aXZlUGFuZWxTZXR0aW5nLnR5cGUoKSA9PSBTZXR0aW5n
OjpTdHJpbmdUeXBlKQogICAgICAgICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBzcGVjaWFs
UGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGluZy5zdHJpbmcoKSk7CkBAIC0zMzMs
OCArMzMwLDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJv
b2wgdmlzaWJsZSwgYm9vbCBhdHRhY2hlZCkKICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7
CiAjZW5kaWYKICAgICAgICAgc2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Ci0gICAgICAg
IGlmIChzaG93Q29uc29sZSkKLSAgICAgICAgICAgIHNob3dQYW5lbChDb25zb2xlUGFuZWwpOwog
ICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIC8v
IElmIHRoZSB3aW5kb3cgaXMgYmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQs
CkBAIC0xODExLDYgKzE4MDYsOCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpTcGVjaWFsUGFuZWxz
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNwZWNpYWxQYW5lbEZvckpTTmFtZShjbwogICAgICAgICBy
ZXR1cm4gUHJvZmlsZXNQYW5lbDsKICAgICBlbHNlIGlmIChwYW5lbE5hbWUgPT0gInN0b3JhZ2Ui
IHx8IHBhbmVsTmFtZSA9PSAiZGF0YWJhc2VzIikKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VQYW5l
bDsKKyAgICBlbHNlIGlmIChwYW5lbE5hbWUgPT0gImNvbnNvbGUiKQorICAgICAgICByZXR1cm4g
Q29uc29sZVBhbmVsOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIEVsZW1lbnRzUGFuZWw7CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggNjk0MmQwMi4uNmUw
MmRiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtMTUxLDcg
KzE1MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbChpbnQgcGFuZWwpCiAg
ICAgY29uc3QgY2hhciogc2hvd0Z1bmN0aW9uTmFtZTsKICAgICBzd2l0Y2ggKHBhbmVsKSB7CiAg
ICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6Q29uc29sZVBhbmVsOgotICAgICAgICAg
ICAgc2hvd0Z1bmN0aW9uTmFtZSA9ICJzaG93Q29uc29sZSI7CisgICAgICAgICAgICBzaG93RnVu
Y3Rpb25OYW1lID0gInNob3dDb25zb2xlUGFuZWwiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbDoKICAgICAgICAgICAg
IHNob3dGdW5jdGlvbk5hbWUgPSAic2hvd0VsZW1lbnRzUGFuZWwiOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWM3MDMwZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlUGFuZWwuanMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsID0gZnVu
Y3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5QYW5lbC5jYWxsKHRoaXMpOworfQorCitXZWJJ
bnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICB0b29sYmFySXRlbUNsYXNz
OiAiY29uc29sZSIsCisKKyAgICBnZXQgdG9vbGJhckl0ZW1MYWJlbCgpCisgICAgeworICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb25zb2xlIik7CisgICAgfSwKKworICAg
IHNob3c6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90
b3R5cGUuc2hvdy5jYWxsKHRoaXMpOworICAgICAgICB0aGlzLnByZXZpb3VzQ29uc29sZVN0YXRl
ID0gV2ViSW5zcGVjdG9yLmRyYXdlci5zdGF0ZTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdl
ci50cmlnZ2VyQ29uc29sZU1vZGUodHJ1ZSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zaG93Q29u
c29sZSgpOworICAgIH0sCisKKyAgICBoaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBX
ZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLmhpZGUuY2FsbCh0aGlzKTsKKyAgICAgICAgaWYg
KHRoaXMucHJldmlvdXNDb25zb2xlU3RhdGUgPT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5I
aWRkZW4pCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJhd2VyLnZpc2libGUgPSBmYWxzZTsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci50cmlnZ2VyQ29uc29sZU1vZGUoZmFsc2UpOwor
ICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Db25zb2xlVmlldy5qcwppbmRleCBmMDNjNjQ3Li45ZjAwNmUzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC01Nyw5ICs1Nyw2IEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlVmlldyA9IGZ1bmN0aW9uKGRyYXdlcikKICAgICB0aGlzLnRvZ2dsZUNv
bnNvbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgY29uc29sZS4i
KTsKICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAK
LSAgICB2YXIgYW5jaG9yZWRTdGF0dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5j
aG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOwotICAgIGFuY2hvcmVkU3RhdHVzQmFyLmFwcGVuZENo
aWxkKHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbik7Ci0gICAgCiAgICAgLy8gV2lsbCBob2xkIHRo
ZSBsaXN0IG9mIGZpbHRlciBlbGVtZW50cwogICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLWZpbHRlciIpOwogICAgIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EcmF3ZXIuanMKaW5kZXggMWI1MGY5MS4uMDA2MGRlMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCkBAIC03LDEzICs3LDEzIEBACiAgKiBhcmUgbWV0
OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRApAQCAtMzEsNiArMzEsMTIgQEAgV2ViSW5zcGVjdG9yLkRyYXdlciA9IGZ1bmN0aW9uKCkK
IHsKICAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMsIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJkcmF3ZXIiKSk7CiAKKyAgICB0aGlzLnNhdmVkSGVpZ2h0ID0gMDsKKyAgICB0aGlzLnN0
YXRlID0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5IaWRkZW47CisgICAgdGhpcy5mdWxsQ29u
c29sZSA9IGZhbHNlOworCisgICAgdGhpcy5tYWluRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtYWluIik7CisgICAgdGhpcy50b29sYmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ0b29sYmFyIik7CiAgICAgdGhpcy5tYWluU3RhdHVzQmFyID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpOwogICAgIHRoaXMubWFpblN0YXR1c0Jh
ci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9zdGFydFN0YXR1c0JhckRyYWdn
aW5nLmJpbmQodGhpcyksIHRydWUpOwogICAgIHRoaXMudmlld1N0YXR1c0JhciA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1pdGVtcyIpOwpAQCAtNDUs
NiArNTEsOCBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXQgdmlz
aWJsZVZpZXcoeCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlVmlldyA9PT0geCkg
eworICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiBXZWJJbnNwZWN0b3IuY3VycmVudFBh
bmVsID09PSBXZWJJbnNwZWN0b3IucGFuZWxzLmNvbnNvbGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMudmlzaWJsZTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjQsNiArNzIsMTcgQEAgV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCisgICAgZ2V0IHNhdmVkSGVp
Z2h0KCkKKyAgICB7CisgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9zYXZlZEhlaWdodCB8fCB0
aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAgICAgICByZXR1cm4gTnVtYmVyLmNvbnN0cmFp
bihoZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdo
dCAtIHRoaXMubWFpbkVsZW1lbnQudG90YWxPZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25z
b2xlSGVpZ2h0KTsKKyAgICB9LAorCisgICAgc2V0IHNhdmVkSGVpZ2h0KHgpCisgICAgeworICAg
ICAgICB0aGlzLl9zYXZlZEhlaWdodCA9IHg7CisgICAgfSwKKwogICAgIHNob3dWaWV3OiBmdW5j
dGlvbih2aWV3KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy52aXNp
YmxlVmlldyAhPT0gdmlldykKQEAgLTg1LDkgKzEwNCwxMCBAQCBXZWJJbnNwZWN0b3IuRHJhd2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNsYXNzKCJkcmF3
ZXItdmlzaWJsZSIpOwogCiAgICAgICAgIHZhciBhbmNob3JlZEl0ZW1zID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiKTsKLQorICAgICAgICB2YXIg
aGVpZ2h0ID0gKHRoaXMuZnVsbENvbnNvbGUgPyB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLnRv
b2xiYXJFbGVtZW50Lm9mZnNldEhlaWdodCA6IHRoaXMuc2F2ZWRIZWlnaHQpOwogICAgICAgICB2
YXIgYW5pbWF0aW9ucyA9IFsKLSAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHR9
fSwKKyAgICAgICAgICAgIHtlbGVtZW50OiB0aGlzLmVsZW1lbnQsIGVuZDoge2hlaWdodDogaGVp
Z2h0fX0sCisgICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1h
aW4iKSwgZW5kOiB7Ym90dG9tOiBoZWlnaHR9fSwKICAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHN0YXJ0OiB7InBhZGRpbmct
bGVmdCI6IGFuY2hvcmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxfSwgZW5kOiB7InBhZGRpbmctbGVm
dCI6IDB9fSwKICAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
b3RoZXItZHJhd2VyLXN0YXR1cy1iYXItaXRlbXMiKSwgc3RhcnQ6IHtvcGFjaXR5OiAwfSwgZW5k
OiB7b3BhY2l0eTogMX19CiAgICAgICAgIF07CkBAIC0xMDIsOSArMTIyLDEwIEBAIFdlYkluc3Bl
Y3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZp
ZXcuYWZ0ZXJTaG93KQogICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93
KCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAgICAgICAgICAgdGhp
cy5zdGF0ZSA9ICh0aGlzLmZ1bGxDb25zb2xlID8gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5G
dWxsIDogV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFuaW1hdGlvbnMsIHdpbmRvdy5ldmVu
dCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAyMDAwIDogMjUwLCBhbmltYXRpb25GaW5pc2hl
ZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5jdXJyZW50QW5pbWF0aW9uID0gV2ViSW5zcGVj
dG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB0aGlzLl9hbmltYXRpb25EdXJhdGlvbigpLCBh
bmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgaGlkZTogZnVuY3Rp
b24oKQpAQCAtMTEzLDcgKzEzNCw3IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFdlYkluc3BlY3Rvci5WaWV3LnByb3Rv
dHlwZS5oaWRlLmNhbGwodGhpcyk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh0aGlzLnZpc2li
bGVWaWV3KQogICAgICAgICAgICAgdGhpcy52aXNpYmxlVmlldy5oaWRlKCk7CiAKQEAgLTEyNCw5
ICsxNDUsOSBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2
YXIgYW5jaG9yZWRJdGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0
dXMtYmFyLWl0ZW1zIik7CiAKLSAgICAgICAgLy8gVGVtcG9yYWxseSBzZXQgcHJvcGVydGllcyBh
bmQgY2xhc3NlcyB0byBtaW1pYyB0aGUgcG9zdC1hbmltYXRpb24gdmFsdWVzIHNvIHBhbmVscwor
ICAgICAgICAvLyBUZW1wb3JhcmlseSBzZXQgcHJvcGVydGllcyBhbmQgY2xhc3NlcyB0byBtaW1p
YyB0aGUgcG9zdC1hbmltYXRpb24gdmFsdWVzIHNvIHBhbmVscwogICAgICAgICAvLyBsaWtlIEVs
ZW1lbnRzIGluIHRoZWlyIHVwZGF0ZVN0YXR1c0Jhckl0ZW1zIGNhbGwgd2lsbCBzaXplIHRoaW5n
cyB0byBmaXQgdGhlIGZpbmFsIGxvY2F0aW9uLgotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibWFpbi1zdGF0dXMtYmFyIikuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctbGVmdCIs
IChhbmNob3JlZEl0ZW1zLm9mZnNldFdpZHRoIC0gMSkgKyAicHgiKTsKKyAgICAgICAgdGhpcy5t
YWluU3RhdHVzQmFyLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWxlZnQiLCAoYW5jaG9yZWRJ
dGVtcy5vZmZzZXRXaWR0aCAtIDEpICsgInB4Iik7CiAgICAgICAgIGRvY3VtZW50LmJvZHkucmVt
b3ZlU3R5bGVDbGFzcygiZHJhd2VyLXZpc2libGUiKTsKICAgICAgICAgaWYgKCJ1cGRhdGVTdGF0
dXNCYXJJdGVtcyIgaW4gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbCkKICAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5jdXJyZW50UGFuZWwudXBkYXRlU3RhdHVzQmFySXRlbXMoKTsKQEAgLTE0NSw5
ICsxNjYsOTQgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBtYWluU3RhdHVzQmFyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJwYWRkaW5nLWxlZnQiKTsKICAg
ICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5bGVDbGFzcygiZHJhd2VyLXZpc2libGUi
KTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hbmltYXRpbmc7CisgICAgICAgICAgICB0aGlz
LnN0YXRlID0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5IaWRkZW47CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24gPSBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxl
KGFuaW1hdGlvbnMsIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9uKCksIGFuaW1hdGlvbkZpbmlzaGVk
LmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRl
bikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgaGVpZ2h0OworICAgICAgICB2
YXIgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpOworICAgICAg
ICBpZiAodGhpcy5zdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSkg
eworICAgICAgICAgICAgaGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5lbGVtZW50LnN0eWxlLmhlaWdo
dCwgMTApOworICAgICAgICAgICAgaGVpZ2h0ID0gTnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFBy
ZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAtIG1haW5FbGVt
ZW50LnRvdGFsT2Zmc2V0VG9wIC0gUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhp
cy50b29sYmFyRWxlbWVudC5vZmZzZXRIZWlnaHQ7CisKKyAgICAgICAgbWFpbkVsZW1lbnQuc3R5
bGUuYm90dG9tID0gaGVpZ2h0ICsgInB4IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmhl
aWdodCA9IGhlaWdodCArICJweCI7CisgICAgfSwKKworICAgIHRyaWdnZXJDb25zb2xlTW9kZTog
ZnVuY3Rpb24oZnVsbENvbnNvbGUpCisgICAgeworICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW5n
KSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY2FuY2VsQW5pbWF0aW9uKHRoaXMuY3VycmVu
dEFuaW1hdGlvbik7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOwogICAgICAg
ICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5k
b3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9u
RmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuZnVsbENvbnNvbGUgPSBmdWxsQ29u
c29sZTsKKyAgICAgICAgaWYgKGZ1bGxDb25zb2xlKSB7CisgICAgICAgICAgICBpZiAodGhpcy52
aXNpYmxlKQorICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25Ub0Z1bGxDb25zb2xlKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlKQorICAgICAg
ICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25Ub1ZhcmlhYmxlQ29uc29sZSgpOworICAgICAgICB9
CisgICAgfSwKKworICAgIF90cmFuc2l0aW9uVG9GdWxsQ29uc29sZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGluZykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB0aGlzLnNhdmVkSGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKKwor
ICAgICAgICB2YXIgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy50b29sYmFyRWxl
bWVudC5vZmZzZXRIZWlnaHQ7CisgICAgICAgIHRoaXMuX2FuaW1hdGVEcmF3ZXJIZWlnaHQoaGVp
Z2h0LCBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkZ1bGwpOworICAgIH0sCisKKyAgICBfdHJh
bnNpdGlvblRvVmFyaWFibGVDb25zb2xlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fYW5pbWF0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHRo
aXMgYW5pbWF0aW9uIGdldHMgY2FuY2VsbGVkLCB3ZSB3YW50IHRoZSBzdGF0ZSBvZiB0aGUgZHJh
d2VyIHRvIGJlIFZhcmlhYmxlLAorICAgICAgICAvLyBzbyB0aGF0IHRoZSBuZXcgYW5pbWF0aW9u
IGNhbid0IGRvIGFuIGltbWVkaWF0ZSB0cmFuc2l0aW9uIGJldHdlZW4gSGlkZGVuL0Z1bGwgc3Rh
dGVzLgorICAgICAgICB0aGlzLnN0YXRlID0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJp
YWJsZTsKKworICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5zYXZlZEhlaWdodDsKKyAgICAgICAg
dGhpcy5fYW5pbWF0ZURyYXdlckhlaWdodChoZWlnaHQsIFdlYkluc3BlY3Rvci5EcmF3ZXIuU3Rh
dGUuVmFyaWFibGUpOworICAgIH0sCisKKyAgICBfYW5pbWF0ZURyYXdlckhlaWdodDogZnVuY3Rp
b24oaGVpZ2h0LCBmaW5hbFN0YXRlKQorICAgIHsKKyAgICAgICAgdGhpcy5fYW5pbWF0aW5nID0g
dHJ1ZTsKKyAgICAgICAgdmFyIGFuaW1hdGlvbnMgPSBbCisgICAgICAgICAgICB7ZWxlbWVudDog
dGhpcy5lbGVtZW50LCBlbmQ6IHtoZWlnaHQ6IGhlaWdodH19LAorICAgICAgICAgICAge2VsZW1l
bnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIiksIGVuZDoge2JvdHRvbTogaGVpZ2h0
fX0KKyAgICAgICAgXTsKKworICAgICAgICBmdW5jdGlvbiBhbmltYXRpb25GaW5pc2hlZCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hbmltYXRpbmc7CisgICAgICAgICAg
ICB0aGlzLnN0YXRlID0gZmluYWxTdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuY3Vy
cmVudEFuaW1hdGlvbiA9IFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgdGhp
cy5fYW5pbWF0aW9uRHVyYXRpb24oKSwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7Cisg
ICAgfSwKKworICAgIF9hbmltYXRpb25EdXJhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgLy8gSW1tZWRpYXRlIGlmIGdvaW5nIGJldHdlZW4gSGlkZGVuIGFuZCBGdWxsIGluIGZ1bGxD
b25zb2xlIG1vZGUKKyAgICAgICAgaWYgKHRoaXMuZnVsbENvbnNvbGUgJiYgKHRoaXMuc3RhdGUg
PT09IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuIHx8IHRoaXMuc3RhdGUgPT09IFdl
Ykluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuRnVsbCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICByZXR1cm4gKHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAy
MDAwIDogMjUwKTsKICAgICB9LAogCiAgICAgX3NhZmVseVJlbW92ZUNoaWxkcmVuOiBmdW5jdGlv
bigpCkBAIC0xNjUsMTAgKzI3MSwxMCBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9
IHsKIAogICAgIF9zdGFydFN0YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKICAgICB7
Ci0gICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8IGV2ZW50LnRhcmdldCAhPT0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpKQorICAgICAgICBpZiAoIXRoaXMudmlz
aWJsZSB8fCBldmVudC50YXJnZXQgIT09IHRoaXMubWFpblN0YXR1c0JhcikKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHRoaXMuX3N0YXR1c0JhckRyYWdn
aW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2
ZW50LCAicm93LXJlc2l6ZSIpOworICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFy
dCh0aGlzLm1haW5TdGF0dXNCYXIsIHRoaXMuX3N0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyks
IHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2ZW50LCAicm93LXJlc2l6
ZSIpOwogCiAgICAgICAgIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQgPSBldmVudC5wYWdlWSAt
IHRoaXMuZWxlbWVudC50b3RhbE9mZnNldFRvcDsKIApAQCAtMTc4LDcgKzI4NCw2IEBAIFdlYklu
c3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIF9zdGF0dXNCYXJEcmFnZ2luZzogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibWFpbiIpOwotCiAgICAgICAgIHZhciBoZWlnaHQgPSB3aW5kb3cuaW5u
ZXJIZWlnaHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7CiAgICAg
ICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25z
b2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRv
cCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwogCkBAIC0xOTMsNiArMjk4LDcgQEAg
V2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBXZWJJbnNw
ZWN0b3IuZWxlbWVudERyYWdFbmQoZXZlbnQpOwogCisgICAgICAgIHRoaXMuc2F2ZWRIZWlnaHQg
PSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OwogICAgICAgICBkZWxldGUgdGhpcy5fc3RhdHVz
QmFyRHJhZ09mZnNldDsKIAogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKQEAgLTIw
MCwzICszMDYsOSBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIH0KIAogV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlID0geworICAgIEhpZGRlbjog
MCwKKyAgICBWYXJpYWJsZTogMSwKKyAgICBGdWxsOiAyCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYwppbmRleCA1MzkxN2Y2Li5kYmY0MDZjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtOSw2ICs5LDcgQEAKICAgICA8ZmlsZT5DYWxsU3Rh
Y2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DaGFuZ2VzVmlldy5qczwvZmlsZT4K
ICAgICA8ZmlsZT5Db2xvci5qczwvZmlsZT4KKyAgICA8ZmlsZT5Db25zb2xlUGFuZWwuanM8L2Zp
bGU+CiAgICAgPGZpbGU+Q29uc29sZVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q29va2llSXRl
bXNWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFiYXNlLmpzPC9maWxlPgpAQCAtNzUsNiAr
NzYsNyBAQAogICAgIDxmaWxlPkltYWdlcy9jbG9zZUJ1dHRvbnMucG5nPC9maWxlPgogICAgIDxm
aWxlPkltYWdlcy9jb25zb2xlQnV0dG9uR2x5cGgucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdl
cy9jb29raWUucG5nPC9maWxlPgorICAgIDxmaWxlPkltYWdlcy9jb25zb2xlSWNvbi5wbmc8L2Zp
bGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RhdGFiYXNlLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFn
ZXMvZGF0YWJhc2VUYWJsZS5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RlYnVnZ2VyQ29u
dGludWUucG5nPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5jc3MgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNz
cwppbmRleCAwMzVkYzEzLi41MGU3ZWY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmNzcwpAQCAtMjE1LDYgKzIxNSwxMCBAQCBib2R5LmF0dGFjaGVkICNzZWFyY2gt
cmVzdWx0cy1tYXRjaGVzIHsKICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3Byb2Zp
bGVzSWNvbi5wbmcpOwogfQogCisudG9vbGJhci1pdGVtLmNvbnNvbGUgLnRvb2xiYXItaWNvbiB7
CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9jb25zb2xlSWNvbi5wbmcpOworfQor
CiAjY2xvc2UtYnV0dG9uLWxlZnQsICNjbG9zZS1idXR0b24tcmlnaHQgewogICAgIHdpZHRoOiAx
NHB4OwogICAgIGhlaWdodDogMTRweDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbAppbmRleCBhNjA5Zjg5Li40ODk5OTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC03OSw2ICs3OSw3IEBAIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0c1BhbmVsLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdG9yYWdlUGFu
ZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlByb2ZpbGVzUGFuZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkNvbnNvbGVQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlVmlldy5q
cyI+PC9zY3JpcHQ+CkBAIC0xMDgsNyArMTA5LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8L2Rpdj4KICAg
ICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICAgPGRpdiBpZD0ibWFpbi1wYW5lbHMiIHRhYmluZGV4
PSIwIiBzcGVsbGNoZWNrPSJmYWxzZSI+PC9kaXY+Ci0gICAgICAgIDxkaXYgaWQ9Im1haW4tc3Rh
dHVzLWJhciIgY2xhc3M9InN0YXR1cy1iYXIiPjxkaXYgaWQ9ImFuY2hvcmVkLXN0YXR1cy1iYXIt
aXRlbXMiPjxidXR0b24gaWQ9ImRvY2stc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJh
ci1pdGVtIHRvZ2dsZWQiPjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlw
aCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1p
dGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRp
diBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2Vz
LXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9u
PjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlk
ZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48
L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFy
IiBjbGFzcz0ic3RhdHVzLWJhciI+PGRpdiBpZD0iYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyI+
PGJ1dHRvbiBpZD0iZG9jay1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0i
PjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2
PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3Rh
dHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGgg
c2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2VzLXN0YXR1cy1iYXItaXRl
bSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9uPjxkaXYgaWQ9ImNvdW50
LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48ZGl2
IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48L2Rpdj48L2Rp
dj48L2Rpdj4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlkPSJkcmF3ZXIiPgogICAgICAgICA8ZGl2
IGlkPSJjb25zb2xlLXZpZXciPjxkaXYgaWQ9ImNvbnNvbGUtbWVzc2FnZXMiPjxkaXYgaWQ9ImNv
bnNvbGUtcHJvbXB0IiBzcGVsbGNoZWNrPSJmYWxzZSI+PGJyPjwvZGl2PjwvZGl2PjwvZGl2Pgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggYjYzMmMyYy4uOWM4
ZDQ0NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC03Miw2
ICs3Miw5IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgcmVzb3VyY2VVUkxNYXA6IHt9LAog
ICAgIGNvb2tpZURvbWFpbnM6IHt9LAogICAgIG1pc3NpbmdMb2NhbGl6ZWRTdHJpbmdzOiB7fSwK
KyAgICBhbmltYXRpb25zOiB7fSwKKyAgICBuZXh0QW5pbWF0aW9uS2V5OiAwLAorICAgIHBlbmRp
bmdEaXNwYXRjaGVzOiAwLAogCiAgICAgZ2V0IHByZXZpb3VzRm9jdXNFbGVtZW50KCkKICAgICB7
CkBAIC0xNzAsNiArMTczLDggQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICBpZiAo
aGlkZGVuUGFuZWxzLmluZGV4T2YoInN0b3JhZ2UiKSA9PT0gLTEgJiYgaGlkZGVuUGFuZWxzLmlu
ZGV4T2YoImRhdGFiYXNlcyIpID09PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnN0b3Jh
Z2UgPSBuZXcgV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbCgpOworICAgICAgICBpZiAoaGlkZGVu
UGFuZWxzLmluZGV4T2YoImNvbnNvbGUiKSA9PT0gLTEpCisgICAgICAgICAgICB0aGlzLnBhbmVs
cy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwoKTsKICAgICB9LAogCiAg
ICAgX2xvYWRQcmVmZXJlbmNlczogZnVuY3Rpb24oKQpAQCAtMzk2LDcgKzQwMSw2IEBAIFdlYklu
c3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNs
YXNzKCJwb3J0LSIgKyBwb3J0KTsKIAogICAgIHRoaXMuX2xvYWRQcmVmZXJlbmNlcygpOwotICAg
IHRoaXMucGVuZGluZ0Rpc3BhdGNoZXMgPSAwOwogCiAgICAgdGhpcy5kcmF3ZXIgPSBuZXcgV2Vi
SW5zcGVjdG9yLkRyYXdlcigpOwogICAgIHRoaXMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcodGhpcy5kcmF3ZXIpOwpAQCAtNTM1LDYgKzUzOSw3IEBAIFdlYkluc3BlY3Rv
ci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBpZiAodGhpcy5jdXJyZW50
UGFuZWwgJiYgdGhpcy5jdXJyZW50UGFuZWwucmVzaXplKQogICAgICAgICB0aGlzLmN1cnJlbnRQ
YW5lbC5yZXNpemUoKTsKKyAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVj
dG9yLndpbmRvd0ZvY3VzZWQgPSBmdW5jdGlvbihldmVudCkKQEAgLTYyNCw2ICs2MjksOSBAQCBX
ZWJJbnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAKICAgICAgICAg
c3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBjYXNlICJVKzAwMUIi
OiAvLyBFc2NhcGUga2V5CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsID09
PSB0aGlzLnBhbmVscy5jb25zb2xlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKICAg
ICAgICAgICAgICAgICB0aGlzLmRyYXdlci52aXNpYmxlID0gIXRoaXMuZHJhd2VyLnZpc2libGU7
CiAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTc0OSwxMCArNzU3LDE5IEBAIFdlYkluc3BlY3Rvci5tYWluQ29weSA9IGZ1
bmN0aW9uKGV2ZW50KQogICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5oYW5kbGVDb3B5RXZlbnQo
ZXZlbnQpOwogfQogCi1XZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlID0gZnVuY3Rpb24oYW5pbWF0
aW9ucywgZHVyYXRpb24sIGNhbGxiYWNrLCBjb21wbGV0ZSkKK1dlYkluc3BlY3Rvci5jYW5jZWxB
bmltYXRpb24gPSBmdW5jdGlvbihrZXkpCit7CisgICAgY2xlYXJUaW1lb3V0KHRoaXMuYW5pbWF0
aW9uc1trZXldKTsKKyAgICBkZWxldGUgdGhpcy5hbmltYXRpb25zW2tleV07Cit9CisKK1dlYklu
c3BlY3Rvci5hbmltYXRlU3R5bGUgPSBmdW5jdGlvbihhbmltYXRpb25zLCBkdXJhdGlvbiwgY2Fs
bGJhY2ssIGNvbXBsZXRlLCBrZXkpCiB7Ci0gICAgaWYgKGNvbXBsZXRlID09PSB1bmRlZmluZWQp
CisgICAgaWYgKHR5cGVvZiBjb21wbGV0ZSA9PT0gInVuZGVmaW5lZCIpCiAgICAgICAgIGNvbXBs
ZXRlID0gMDsKKyAgICBpZiAodHlwZW9mIGtleSA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgIGtl
eSA9IFdlYkluc3BlY3Rvci5uZXh0QW5pbWF0aW9uS2V5Kys7CisKICAgICB2YXIgc2xpY2UgPSAo
MTAwMCAvIDMwKTsgLy8gMzAgZnJhbWVzIHBlciBzZWNvbmQKIAogICAgIHZhciBkZWZhdWx0VW5p
dCA9ICJweCI7CkBAIC04MTksOSArODM2LDE0IEBAIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUg
PSBmdW5jdGlvbihhbmltYXRpb25zLCBkdXJhdGlvbiwgY2FsbGJhY2ssIGNvbXBsZXRlKQogICAg
IH0KIAogICAgIGlmIChjb21wbGV0ZSA8IGR1cmF0aW9uKQotICAgICAgICBzZXRUaW1lb3V0KFdl
Ykluc3BlY3Rvci5hbmltYXRlU3R5bGUsIHNsaWNlLCBhbmltYXRpb25zLCBkdXJhdGlvbiwgY2Fs
bGJhY2ssIGNvbXBsZXRlICsgc2xpY2UpOwotICAgIGVsc2UgaWYgKGNhbGxiYWNrKQotICAgICAg
ICBjYWxsYmFjaygpOworICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0aW9uc1trZXldID0gc2V0
VGltZW91dChXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlLCBzbGljZSwgYW5pbWF0aW9ucywgZHVy
YXRpb24sIGNhbGxiYWNrLCBjb21wbGV0ZSArIHNsaWNlLCBrZXkpOworICAgIGVsc2UgeworICAg
ICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLmFuaW1hdGlvbnNba2V5XTsKKyAgICAgICAgaWYgKGNh
bGxiYWNrKQorICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9CisKKyAgICByZXR1cm4ga2V5
OwogfQogCiBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTGFiZWwgPSBmdW5jdGlvbigpCkBAIC04
NDEsNiArODYzLDcgQEAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaExhYmVsID0gZnVuY3Rpb24o
KQogV2ViSW5zcGVjdG9yLnRvZ2dsZUF0dGFjaCA9IGZ1bmN0aW9uKCkKIHsKICAgICB0aGlzLmF0
dGFjaGVkID0gIXRoaXMuYXR0YWNoZWQ7CisgICAgdGhpcy5kcmF3ZXIucmVzaXplKCk7CiB9CiAK
IFdlYkluc3BlY3Rvci50b29sYmFyRHJhZ1N0YXJ0ID0gZnVuY3Rpb24oZXZlbnQpCkBAIC05NjQs
NiArOTg3LDExIEBAIFdlYkluc3BlY3Rvci5zaG93U3RvcmFnZVBhbmVsID0gZnVuY3Rpb24oKQog
ICAgIHRoaXMuY3VycmVudFBhbmVsID0gdGhpcy5wYW5lbHMuc3RvcmFnZTsKIH0KIAorV2ViSW5z
cGVjdG9yLnNob3dDb25zb2xlUGFuZWwgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5jdXJyZW50
UGFuZWwgPSB0aGlzLnBhbmVscy5jb25zb2xlOworfQorCiBXZWJJbnNwZWN0b3IuYWRkUmVzb3Vy
Y2UgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwYXlsb2FkKQogewogICAgIHZhciByZXNvdXJjZSA9
IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2UoCkBAIC0xMDU0LDcgKzEwODIsNyBAQCBXZWJJbnNw
ZWN0b3IudXBkYXRlUmVzb3VyY2UgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwYXlsb2FkKQogICAg
ICAgICAgICAgcmVzb3VyY2UucmVzcG9uc2VSZWNlaXZlZFRpbWUgPSBwYXlsb2FkLnJlc3BvbnNl
UmVjZWl2ZWRUaW1lOwogICAgICAgICBpZiAocGF5bG9hZC5lbmRUaW1lKQogICAgICAgICAgICAg
cmVzb3VyY2UuZW5kVGltZSA9IHBheWxvYWQuZW5kVGltZTsKLSAgICAgICAgCisKICAgICAgICAg
aWYgKHBheWxvYWQubG9hZEV2ZW50VGltZSkgewogICAgICAgICAgICAgLy8gVGhpcyBsb2FkRXZl
bnRUaW1lIGlzIGZvciB0aGUgbWFpbiByZXNvdXJjZSwgYW5kIHdlIHdhbnQgdG8gc2hvdyBpdAog
ICAgICAgICAgICAgLy8gZm9yIGFsbCByZXNvdXJjZXMgb24gdGhpcyBwYWdlLiBUaGlzIG1lYW5z
IHdlIHdhbnQgdG8gc2V0IGl0IGFzIGEgbWVtYmVyCkBAIC0xMDYyLDcgKzEwOTAsNyBAQCBXZWJJ
bnNwZWN0b3IudXBkYXRlUmVzb3VyY2UgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwYXlsb2FkKQog
ICAgICAgICAgICAgaWYgKHRoaXMucGFuZWxzLnJlc291cmNlcykKICAgICAgICAgICAgICAgICB0
aGlzLnBhbmVscy5yZXNvdXJjZXMubWFpblJlc291cmNlTG9hZFRpbWUgPSBwYXlsb2FkLmxvYWRF
dmVudFRpbWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKHBheWxvYWQuZG9t
Q29udGVudEV2ZW50VGltZSkgewogICAgICAgICAgICAgLy8gVGhpcyBkb21Db250ZW50RXZlbnRU
aW1lIGlzIGZvciB0aGUgbWFpbiByZXNvdXJjZSwgc28gaXQgc2hvdWxkIGdvIGluCiAgICAgICAg
ICAgICAvLyB0aGUgcmVzb3VyY2VzIHBhbmVsIGZvciB0aGUgc2FtZSByZWFzb25zIGFzIGFib3Zl
LgpAQCAtMTI0OCwyMyArMTI3NiwyMyBAQCBXZWJJbnNwZWN0b3IubG9nID0gZnVuY3Rpb24obWVz
c2FnZSkKIHsKICAgICAvLyByZW1lbWJlciAndGhpcycgZm9yIHNldEludGVydmFsKCkgY2FsbGJh
Y2sKICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgCisKICAgICAvLyByZXR1cm4gaW5kaWNhdGlv
biBpZiB3ZSBjYW4gYWN0dWFsbHkgbG9nIGEgbWVzc2FnZQogICAgIGZ1bmN0aW9uIGlzTG9nQXZh
aWxhYmxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UgJiYgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5ICYmIHNlbGYuY29uc29sZTsKICAgICB9Ci0g
ICAgCisKICAgICAvLyBmbHVzaCB0aGUgcXVldWUgb2YgcGVuZGluZyBtZXNzYWdlcwogICAgIGZ1
bmN0aW9uIGZsdXNoUXVldWUoKQogICAgIHsKICAgICAgICAgdmFyIHF1ZXVlZCA9IFdlYkluc3Bl
Y3Rvci5sb2cucXVldWVkOwotICAgICAgICBpZiAoIXF1ZXVlZCkgCisgICAgICAgIGlmICghcXVl
dWVkKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCisKICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBxdWV1ZWQubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBsb2dNZXNzYWdl
KHF1ZXVlZFtpXSk7Ci0gICAgICAgIAorCiAgICAgICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IubG9n
LnF1ZXVlZDsKICAgICB9CiAKQEAgLTEyNzQsMjYgKzEzMDIsMjYgQEAgV2ViSW5zcGVjdG9yLmxv
ZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpCiAgICAgewogICAgICAgICBpZiAoIWlzTG9nQXZhaWxhYmxl
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKKwogICAgICAgICBjbGVhcklu
dGVydmFsKFdlYkluc3BlY3Rvci5sb2cuaW50ZXJ2YWwpOwogICAgICAgICBkZWxldGUgV2ViSW5z
cGVjdG9yLmxvZy5pbnRlcnZhbDsKLSAgICAgICAgCisKICAgICAgICAgZmx1c2hRdWV1ZSgpOwog
ICAgIH0KLSAgICAKKwogICAgIC8vIGFjdHVhbGx5IGxvZyB0aGUgbWVzc2FnZQogICAgIGZ1bmN0
aW9uIGxvZ01lc3NhZ2UobWVzc2FnZSkKICAgICB7CiAgICAgICAgIHZhciByZXBlYXRDb3VudCA9
IDE7CiAgICAgICAgIGlmIChtZXNzYWdlID09IFdlYkluc3BlY3Rvci5sb2cubGFzdE1lc3NhZ2Up
CiAgICAgICAgICAgICByZXBlYXRDb3VudCA9IFdlYkluc3BlY3Rvci5sb2cucmVwZWF0Q291bnQg
KyAxOwotICAgIAorCiAgICAgICAgIFdlYkluc3BlY3Rvci5sb2cubGFzdE1lc3NhZ2UgPSBtZXNz
YWdlOwogICAgICAgICBXZWJJbnNwZWN0b3IubG9nLnJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENvbnNvbGVNZXNzYWdlIGV4cGVjdHMgYSBwcm94eSBv
YmplY3QKICAgICAgICAgbWVzc2FnZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkobnVs
bCwgW10sIDAsIG1lc3NhZ2UsIGZhbHNlKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gcG9zdCB0
aGUgbWVzc2FnZQogICAgICAgICB2YXIgbXNnID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZSgKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLk90aGVyLApAQCAtMTMwNCwyMCArMTMzMiwyMCBAQCBXZWJJbnNwZWN0b3IubG9nID0gZnVu
Y3Rpb24obWVzc2FnZSkKICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICByZXBlYXRDb3Vu
dCwKICAgICAgICAgICAgIG1lc3NhZ2UpOwotICAgIAorCiAgICAgICAgIHNlbGYuY29uc29sZS5h
ZGRNZXNzYWdlKG1zZyk7CiAgICAgfQotICAgIAorCiAgICAgLy8gaWYgd2UgY2FuJ3QgbG9nIHRo
ZSBtZXNzYWdlLCBxdWV1ZSBpdAogICAgIGlmICghaXNMb2dBdmFpbGFibGUoKSkgewogICAgICAg
ICBpZiAoIVdlYkluc3BlY3Rvci5sb2cucXVldWVkKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmxvZy5xdWV1ZWQgPSBbXTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIFdlYkluc3BlY3Rvci5s
b2cucXVldWVkLnB1c2gobWVzc2FnZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghV2ViSW5z
cGVjdG9yLmxvZy5pbnRlcnZhbCkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2cuaW50ZXJ2
YWwgPSBzZXRJbnRlcnZhbChmbHVzaFF1ZXVlSWZBdmFpbGFibGUsIDEwMDApOwotICAgICAgICAK
KwogICAgICAgICByZXR1cm47CiAgICAgfQogCg==
</data>
<flag name="review"
          id="25277"
          type_id="1"
          status="-"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="25278"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43550</attachid>
            <date>2009-11-19 21:58:27 -0800</date>
            <delta_ts>2009-11-19 22:13:31 -0800</delta_ts>
            <desc>[PATCH] Console Panel (Improved)</desc>
            <filename>console.patch</filename>
            <type>text/plain</type>
            <size>31494</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzQxYjhlZS4uODVlMDA3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAwOS0xMS0xOSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkcyBhIENvbnNvbGUgUGFuZWwsIHdoaWNoIGFsbG93cyBmb3IgYSBG
dWxsIHNpemUgQ29uc29sZS4gVGhpcworICAgICAgICBleHRlbmRzIHRoZSBEcmF3ZXIgdG8gdGhl
IHNpemUgb2YgYSBQYW5lbC4gVGhpcyBhbHNvIGZpeGVzIHByZXZpb3VzCisgICAgICAgIHJlc2l6
ZSBpc3N1ZXMgd2l0aCB0aGUgRHJhd2VyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlUGFuZWwuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS50b29s
YmFySXRlbUNsYXNzLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlVmlldy5qczogcmVtb3ZlZCB1bm5lY2Vzc2FyeSBlbGVtZW50IHJlb3JkZXJpbmcK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EcmF3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUu
c2V0IHZpc2libGVWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBl
LmdldCBzYXZlZEhlaWdodCk6IHNhdmUgdGhlIGhlaWdodCBvZiB0aGUgdmFyaWFibGUgY29uc29s
ZQorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2V0IHNhdmVkSGVpZ2h0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cuYW5pbWF0aW9u
RmluaXNoZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2hvdyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5oaWRlLmFuaW1hdGlvbkZp
bmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmhpZGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUucmVzaXplKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnRyaWdnZXJDb25zb2xlTW9kZSk6IGNhbGwg
dGhpcyB0byB0cmFuc2l0aW9uIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
cmF3ZXIucHJvdG90eXBlLl90cmFuc2l0aW9uVG9GdWxsQ29uc29sZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fdHJhbnNpdGlvblRvVmFyaWFibGVDb25zb2xlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9hbmltYXRlRHJhd2VySGVp
Z2h0LmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJv
dG90eXBlLl9hbmltYXRlRHJhd2VySGVpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3
ZXIucHJvdG90eXBlLl9hbmltYXRpb25MZW5ndGgpOiBmYWN0b3JlZCBvdXQgdG8gYSBzaW5nbGUg
cGxhY2UKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9zdGFydFN0YXR1
c0JhckRyYWdnaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9z
dGF0dXNCYXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlw
ZS5fZW5kU3RhdHVzQmFyRHJhZ2dpbmcpOgorCisgICAgICAgIFJlc3RvcmUgdGhlIFBhbmVsIGFj
cm9zcyBJbnNwZWN0b3IgcmVzdGFydHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CisKKyAgICAgICAgTmVjZXNzYXJ5IGNoYW5nZXMgYW5kIGNsZWFudXAuCisKKyAgICAgICAgKiBF
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6ICJDb25zb2xlIgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NvbnNvbGVJY29uLnBuZzogYWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzOiB0b29sYmFyIGltYWdlLgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6IGFkZCBuZXcgc2NyaXB0
cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczogCisgICAgICAg
IChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6IGNyZWF0ZSBjb25zb2xlIHBhbmVsLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSk6IHJlc2l6ZSB0aGUgZHJhd2VyIGlmIG5l
ZWRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci50b2dnbGVBdHRhY2gpOiByZXNpemUgdGhlIGRy
YXdlciBpZiBuZWVkZWQuCisKKyAgICAgICAgQnVpbGQgZmlsZXMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGkKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworCiAyMDA5LTExLTE5ICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0
dC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpz
IGIvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggYjZiMDVj
NTZlODdhNDg4MjZhYmI2MzBhMjIyMjJhM2IyNzhjZDE0MC4uZWY5ODFjNzhkODUxNjMxY2MwYmM4
OTVmNTJmNmJjNGJlYTQ5ODBhNCAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApkZWx0YSA2MAp6Y21a
cDwhRmNUazt8NytUJD4lcyFDU01SeyhhS3tlWDJAc0FWTXR8QVZ1KW8+VjZYKlpCP2YxcDdfeTh0
MH5aNFQKRDlzQ1d+CgpkZWx0YSA5ClFjbWNiMWdSJGlYO3w3KS0wMm5SPUVkVCVqCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4
YzUxYTYwLi42YzQ5ODg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYxNiw2ICszNjE2LDcgQEAKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NoYW5nZXNWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbG9yLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVQYW5lbC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9D
b25zb2xlVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJ
dGVtc1ZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2Uu
anMnLApAQCAtMzY4NCw2ICszNjg1LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0ltYWdlcy9jbGVhckNvbnNvbGVCdXR0b25HbHlwaC5wbmcnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Nsb3NlQnV0dG9ucy5wbmcnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NvbnNvbGVCdXR0b25HbHlwaC5wbmcnLAorICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NvbnNvbGVJY29uLnBuZycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29va2llLnBuZycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGF0YWJhc2UucG5nJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZycsCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA0MGI5MmJkLi5kNDI3ZTk2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQyMjc0LDYgKzQyMjc0LDkg
QEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29sZVBhbmVsLmpzIgorCQkJCQk+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVWaWV3Lmpz
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAppbmRleCA5MjBjM2YwLi41MjQzNmVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzE1LDEwICszMTUsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQog
ICAgICAgICBzZXRBdHRhY2hlZFdpbmRvdyhhdHRhY2hlZCk7CiAgICAgICAgIHBvcHVsYXRlU2Ny
aXB0T2JqZWN0cygpOwogCi0gICAgICAgIC8vIENvbnNvbGUgcGFuZWwgaXMgaW1wbGVtZW50ZWQg
YXMgYSAnZmFzdCB2aWV3Jywgc28gdGhlcmUgc2hvdWxkIGJlCi0gICAgICAgIC8vIHJlYWwgcGFu
ZWwgb3BlbmVkIGFsb25nIHdpdGggaXQuCi0gICAgICAgIGJvb2wgc2hvd0NvbnNvbGUgPSBtX3No
b3dBZnRlclZpc2libGUgPT0gQ29uc29sZVBhbmVsOwotICAgICAgICBpZiAobV9zaG93QWZ0ZXJW
aXNpYmxlID09IEN1cnJlbnRQYW5lbCB8fCBzaG93Q29uc29sZSkgeworICAgICAgICBpZiAobV9z
aG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCkgewogICAgICAgICAgIFNldHRpbmcgbGFz
dEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRpbmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUp
OwogICAgICAgICAgIGlmIChsYXN0QWN0aXZlUGFuZWxTZXR0aW5nLnR5cGUoKSA9PSBTZXR0aW5n
OjpTdHJpbmdUeXBlKQogICAgICAgICAgICAgICBtX3Nob3dBZnRlclZpc2libGUgPSBzcGVjaWFs
UGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBhbmVsU2V0dGluZy5zdHJpbmcoKSk7CkBAIC0zMzMs
OCArMzMwLDYgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJv
b2wgdmlzaWJsZSwgYm9vbCBhdHRhY2hlZCkKICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7
CiAjZW5kaWYKICAgICAgICAgc2hvd1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Ci0gICAgICAg
IGlmIChzaG93Q29uc29sZSkKLSAgICAgICAgICAgIHNob3dQYW5lbChDb25zb2xlUGFuZWwpOwog
ICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIC8v
IElmIHRoZSB3aW5kb3cgaXMgYmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQs
CkBAIC0xODExLDYgKzE4MDYsOCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpTcGVjaWFsUGFuZWxz
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNwZWNpYWxQYW5lbEZvckpTTmFtZShjbwogICAgICAgICBy
ZXR1cm4gUHJvZmlsZXNQYW5lbDsKICAgICBlbHNlIGlmIChwYW5lbE5hbWUgPT0gInN0b3JhZ2Ui
IHx8IHBhbmVsTmFtZSA9PSAiZGF0YWJhc2VzIikKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VQYW5l
bDsKKyAgICBlbHNlIGlmIChwYW5lbE5hbWUgPT0gImNvbnNvbGUiKQorICAgICAgICByZXR1cm4g
Q29uc29sZVBhbmVsOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIEVsZW1lbnRzUGFuZWw7CiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggNjk0MmQwMi4uNmUw
MmRiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtMTUxLDcg
KzE1MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNob3dQYW5lbChpbnQgcGFuZWwpCiAg
ICAgY29uc3QgY2hhciogc2hvd0Z1bmN0aW9uTmFtZTsKICAgICBzd2l0Y2ggKHBhbmVsKSB7CiAg
ICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6Q29uc29sZVBhbmVsOgotICAgICAgICAg
ICAgc2hvd0Z1bmN0aW9uTmFtZSA9ICJzaG93Q29uc29sZSI7CisgICAgICAgICAgICBzaG93RnVu
Y3Rpb25OYW1lID0gInNob3dDb25zb2xlUGFuZWwiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbDoKICAgICAgICAgICAg
IHNob3dGdW5jdGlvbk5hbWUgPSAic2hvd0VsZW1lbnRzUGFuZWwiOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjc0YmM5ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlUGFuZWwuanMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsID0gZnVu
Y3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5QYW5lbC5jYWxsKHRoaXMpOworfQorCitXZWJJ
bnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZSA9IHsKKyAgICB0b29sYmFySXRlbUNsYXNz
OiAiY29uc29sZSIsCisKKyAgICBnZXQgdG9vbGJhckl0ZW1MYWJlbCgpCisgICAgeworICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb25zb2xlIik7CisgICAgfSwKKworICAg
IHNob3c6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90
b3R5cGUuc2hvdy5jYWxsKHRoaXMpOworCisgICAgICAgIHRoaXMucHJldmlvdXNDb25zb2xlU3Rh
dGUgPSBXZWJJbnNwZWN0b3IuZHJhd2VyLnN0YXRlOworICAgICAgICBXZWJJbnNwZWN0b3IuZHJh
d2VyLmVudGVyUGFuZWxNb2RlKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zaG93Q29uc29sZSgp
OworICAgIH0sCisKKyAgICBoaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNw
ZWN0b3IuUGFuZWwucHJvdG90eXBlLmhpZGUuY2FsbCh0aGlzKTsKKworICAgICAgICBpZiAodGhp
cy5wcmV2aW91c0NvbnNvbGVTdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5IaWRk
ZW4pCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJhd2VyLnZpc2libGUgPSBmYWxzZTsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci5leGl0UGFuZWxNb2RlKCk7CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuUGFuZWwucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVW
aWV3LmpzCmluZGV4IGYwM2M2NDcuLjlmMDA2ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29uc29sZVZpZXcuanMKQEAgLTU3LDkgKzU3LDYgQEAgV2ViSW5zcGVjdG9yLkNvbnNv
bGVWaWV3ID0gZnVuY3Rpb24oZHJhd2VyKQogICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi50
aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBjb25zb2xlLiIpOwogICAgIHRoaXMu
dG9nZ2xlQ29uc29sZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2ds
ZUNvbnNvbGVCdXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKIAotICAgIHZhciBhbmNo
b3JlZFN0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0dXMt
YmFyLWl0ZW1zIik7Ci0gICAgYW5jaG9yZWRTdGF0dXNCYXIuYXBwZW5kQ2hpbGQodGhpcy50b2dn
bGVDb25zb2xlQnV0dG9uKTsKLSAgICAKICAgICAvLyBXaWxsIGhvbGQgdGhlIGxpc3Qgb2YgZmls
dGVyIGVsZW1lbnRzCiAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnNvbGUtZmlsdGVyIik7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RyYXdlci5qcwppbmRleCAxYjUwZjkxLi5jMDBhODZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9EcmF3ZXIuanMKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCiAgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC0zMSw2
ICszMSwxMiBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyID0gZnVuY3Rpb24oKQogewogICAgIFdlYklu
c3BlY3Rvci5WaWV3LmNhbGwodGhpcywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlciIp
KTsKIAorICAgIHRoaXMuc2F2ZWRIZWlnaHQgPSAwOworICAgIHRoaXMuc3RhdGUgPSBXZWJJbnNw
ZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbjsKKyAgICB0aGlzLmZ1bGxQYW5lbCA9IGZhbHNlOwor
CisgICAgdGhpcy5tYWluRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIik7
CisgICAgdGhpcy50b29sYmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29s
YmFyIik7CiAgICAgdGhpcy5tYWluU3RhdHVzQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im1haW4tc3RhdHVzLWJhciIpOwogICAgIHRoaXMubWFpblN0YXR1c0Jhci5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZWRvd24iLCB0aGlzLl9zdGFydFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyks
IHRydWUpOwogICAgIHRoaXMudmlld1N0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1pdGVtcyIpOwpAQCAtNDUsNiArNTEsOCBAQCBXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXQgdmlzaWJsZVZpZXcoeCkKICAg
ICB7CiAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlVmlldyA9PT0geCkgeworICAgICAgICAgICAg
aWYgKHRoaXMudmlzaWJsZSAmJiB0aGlzLmZ1bGxQYW5lbCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NCw2ICs3MiwxNyBAQCBXZWJJbnNwZWN0b3IuRHJh
d2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0sCiAKKyAgICBnZXQgc2F2ZWRIZWln
aHQoKQorICAgIHsKKyAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuX3NhdmVkSGVpZ2h0IHx8IHRo
aXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgICAgIHJldHVybiBOdW1iZXIuY29uc3RyYWlu
KGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0
IC0gdGhpcy5tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNv
bGVIZWlnaHQpOworICAgIH0sCisKKyAgICBzZXQgc2F2ZWRIZWlnaHQoeCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX3NhdmVkSGVpZ2h0ID0geDsKKyAgICB9LAorCiAgICAgc2hvd1ZpZXc6IGZ1bmN0
aW9uKHZpZXcpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCB0aGlzLnZpc2li
bGVWaWV3ICE9PSB2aWV3KQpAQCAtODUsMTUgKzEwNCwxNiBAQCBXZWJJbnNwZWN0b3IuRHJhd2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNsYXNzKCJkcmF3
ZXItdmlzaWJsZSIpOwogCiAgICAgICAgIHZhciBhbmNob3JlZEl0ZW1zID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiKTsKLQorICAgICAgICB2YXIg
aGVpZ2h0ID0gKHRoaXMuZnVsbFBhbmVsID8gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy50b29s
YmFyRWxlbWVudC5vZmZzZXRIZWlnaHQgOiB0aGlzLnNhdmVkSGVpZ2h0KTsKICAgICAgICAgdmFy
IGFuaW1hdGlvbnMgPSBbCi0gICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm1haW4iKSwgZW5kOiB7Ym90dG9tOiB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0fX0s
CisgICAgICAgICAgICB7ZWxlbWVudDogdGhpcy5lbGVtZW50LCBlbmQ6IHtoZWlnaHQ6IGhlaWdo
dH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWlu
IiksIGVuZDoge2JvdHRvbTogaGVpZ2h0fX0sCiAgICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLCBzdGFydDogeyJwYWRkaW5nLWxl
ZnQiOiBhbmNob3JlZEl0ZW1zLm9mZnNldFdpZHRoIC0gMX0sIGVuZDogeyJwYWRkaW5nLWxlZnQi
OiAwfX0sCiAgICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm90
aGVyLWRyYXdlci1zdGF0dXMtYmFyLWl0ZW1zIiksIHN0YXJ0OiB7b3BhY2l0eTogMH0sIGVuZDog
e29wYWNpdHk6IDF9fQogICAgICAgICBdOwogCi0gICAgICAgIHZhciBjb25zb2xlU3RhdHVzQmFy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlci1zdGF0dXMtYmFyIik7Ci0gICAgICAg
IGNvbnNvbGVTdGF0dXNCYXIuaW5zZXJ0QmVmb3JlKGFuY2hvcmVkSXRlbXMsIGNvbnNvbGVTdGF0
dXNCYXIuZmlyc3RDaGlsZCk7CisgICAgICAgIHZhciBkcmF3ZXJTdGF0dXNCYXIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZHJhd2VyLXN0YXR1cy1iYXIiKTsKKyAgICAgICAgZHJhd2VyU3Rh
dHVzQmFyLmluc2VydEJlZm9yZShhbmNob3JlZEl0ZW1zLCBkcmF3ZXJTdGF0dXNCYXIuZmlyc3RD
aGlsZCk7CiAKICAgICAgICAgZnVuY3Rpb24gYW5pbWF0aW9uRmluaXNoZWQoKQogICAgICAgICB7
CkBAIC0xMDIsOSArMTIyLDExIEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KQogICAgICAgICAgICAg
ICAgIHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KCk7CiAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fYW5pbWF0aW5nOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudEFuaW1hdGlvbgor
ICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICh0aGlzLmZ1bGxQYW5lbCA/IFdlYkluc3BlY3Rvci5E
cmF3ZXIuU3RhdGUuRnVsbCA6IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuVmFyaWFibGUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25z
LCB3aW5kb3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5p
bWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlv
biA9IFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgdGhpcy5fYW5pbWF0aW9u
RHVyYXRpb24oKSwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAg
IGhpZGU6IGZ1bmN0aW9uKCkKQEAgLTExMyw3ICsxMzUsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBXZWJJbnNwZWN0
b3IuVmlldy5wcm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOwotICAgICAgICAKKwogICAgICAgICBp
ZiAodGhpcy52aXNpYmxlVmlldykKICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgp
OwogCkBAIC0xMjQsOSArMTQ2LDkgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgdmFyIGFuY2hvcmVkSXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
YW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOwogCi0gICAgICAgIC8vIFRlbXBvcmFsbHkgc2V0
IHByb3BlcnRpZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5pbWF0aW9uIHZhbHVl
cyBzbyBwYW5lbHMKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgc2V0IHByb3BlcnRpZXMgYW5kIGNs
YXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5pbWF0aW9uIHZhbHVlcyBzbyBwYW5lbHMKICAgICAg
ICAgLy8gbGlrZSBFbGVtZW50cyBpbiB0aGVpciB1cGRhdGVTdGF0dXNCYXJJdGVtcyBjYWxsIHdp
bGwgc2l6ZSB0aGluZ3MgdG8gZml0IHRoZSBmaW5hbCBsb2NhdGlvbi4KLSAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLnN0eWxlLnNldFByb3BlcnR5KCJw
YWRkaW5nLWxlZnQiLCAoYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDEpICsgInB4Iik7Cisg
ICAgICAgIHRoaXMubWFpblN0YXR1c0Jhci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1sZWZ0
IiwgKGFuY2hvcmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxKSArICJweCIpOwogICAgICAgICBkb2N1
bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12aXNpYmxlIik7CiAgICAgICAgIGlm
ICgidXBkYXRlU3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwpCiAg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsLnVwZGF0ZVN0YXR1c0Jhckl0ZW1z
KCk7CkBAIC0xNDUsOSArMTY3LDkwIEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgbWFpblN0YXR1c0Jhci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGlu
Zy1sZWZ0Iik7CiAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRy
YXdlci12aXNpYmxlIik7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudEFuaW1hdGlvbgorICAgICAgICAgICAgdGhpcy5z
dGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuOwogICAgICAgICB9CiAKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5kb3cuZXZlbnQg
JiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9uRmluaXNoZWQu
YmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbiA9IFdlYkluc3BlY3Rv
ci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgdGhpcy5fYW5pbWF0aW9uRHVyYXRpb24oKSwgYW5p
bWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIHJlc2l6ZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdlYkluc3BlY3Rvci5EcmF3
ZXIuU3RhdGUuSGlkZGVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBoZWln
aHQ7CisgICAgICAgIHZhciBtYWluRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJt
YWluIik7CisgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0
YXRlLlZhcmlhYmxlKSB7CisgICAgICAgICAgICBoZWlnaHQgPSBwYXJzZUludCh0aGlzLmVsZW1l
bnQuc3R5bGUuaGVpZ2h0KTsKKyAgICAgICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4o
aGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQg
LSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWln
aHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhlaWdodCA9IHdpbmRvdy5pbm5lckhl
aWdodCAtIHRoaXMudG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0OworCisgICAgICAgIG1haW5F
bGVtZW50LnN0eWxlLmJvdHRvbSA9IGhlaWdodCArICJweCI7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH0sCisKKyAgICBlbnRlclBhbmVs
TW9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FuY2VsQW5pbWF0aW9uSWZO
ZWVkZWQoKTsKKyAgICAgICAgdGhpcy5mdWxsUGFuZWwgPSB0cnVlOworICAgICAgICAKKyAgICAg
ICAgaWYgKHRoaXMudmlzaWJsZSkgeworICAgICAgICAgICAgdGhpcy5zYXZlZEhlaWdodCA9IHRo
aXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gd2luZG93
LmlubmVySGVpZ2h0IC0gdGhpcy50b29sYmFyRWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgICAg
ICAgICB0aGlzLl9hbmltYXRlRHJhd2VySGVpZ2h0KGhlaWdodCwgV2ViSW5zcGVjdG9yLkRyYXdl
ci5TdGF0ZS5GdWxsKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBleGl0UGFuZWxNb2RlOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jYW5jZWxBbmltYXRpb25JZk5lZWRlZCgp
OworICAgICAgICB0aGlzLmZ1bGxQYW5lbCA9IGZhbHNlOworCisgICAgICAgIGlmICh0aGlzLnZp
c2libGUpIHsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgYW5pbWF0aW9uIGdldHMgY2FuY2VsbGVk
LCB3ZSB3YW50IHRoZSBzdGF0ZSBvZiB0aGUgZHJhd2VyIHRvIGJlIFZhcmlhYmxlLAorICAgICAg
ICAgICAgLy8gc28gdGhhdCB0aGUgbmV3IGFuaW1hdGlvbiBjYW4ndCBkbyBhbiBpbW1lZGlhdGUg
dHJhbnNpdGlvbiBiZXR3ZWVuIEhpZGRlbi9GdWxsIHN0YXRlcy4KKyAgICAgICAgICAgIHRoaXMu
c3RhdGUgPSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxlOworICAgICAgICAgICAg
dmFyIGhlaWdodCA9IHRoaXMuc2F2ZWRIZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9hbmltYXRl
RHJhd2VySGVpZ2h0KGhlaWdodCwgV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSk7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NhbmNlbEFuaW1hdGlvbklmTmVlZGVkOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW5nKSB7CisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuY2FuY2VsQW5pbWF0aW9uKHRoaXMuY3VycmVudEFuaW1hdGlvbik7Cisg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAgICAgICAgICAgZGVsZXRlIHRo
aXMuY3VycmVudEFuaW1hdGlvbjsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfYW5pbWF0ZURy
YXdlckhlaWdodDogZnVuY3Rpb24oaGVpZ2h0LCBmaW5hbFN0YXRlKQorICAgIHsKKyAgICAgICAg
dGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdmFyIGFuaW1hdGlvbnMgPSBbCisgICAg
ICAgICAgICB7ZWxlbWVudDogdGhpcy5lbGVtZW50LCBlbmQ6IHtoZWlnaHQ6IGhlaWdodH19LAor
ICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIiksIGVu
ZDoge2JvdHRvbTogaGVpZ2h0fX0KKyAgICAgICAgXTsKKworICAgICAgICBmdW5jdGlvbiBhbmlt
YXRpb25GaW5pc2hlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hbmlt
YXRpbmc7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50QW5pbWF0aW9uCisgICAgICAg
ICAgICB0aGlzLnN0YXRlID0gZmluYWxTdGF0ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMu
Y3VycmVudEFuaW1hdGlvbiA9IFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywg
dGhpcy5fYW5pbWF0aW9uRHVyYXRpb24oKSwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7
CisgICAgfSwKKworICAgIF9hbmltYXRpb25EdXJhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgLy8gSW1tZWRpYXRlIGlmIGdvaW5nIGJldHdlZW4gSGlkZGVuIGFuZCBGdWxsIGluIGZ1
bGwgcGFuZWwgbW9kZQorICAgICAgICBpZiAodGhpcy5mdWxsUGFuZWwgJiYgKHRoaXMuc3RhdGUg
PT09IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuIHx8IHRoaXMuc3RhdGUgPT09IFdl
Ykluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuRnVsbCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICByZXR1cm4gKHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAy
MDAwIDogMjUwKTsKICAgICB9LAogCiAgICAgX3NhZmVseVJlbW92ZUNoaWxkcmVuOiBmdW5jdGlv
bigpCkBAIC0xNjUsMTAgKzI2OCwxMCBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9
IHsKIAogICAgIF9zdGFydFN0YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKICAgICB7
Ci0gICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8IGV2ZW50LnRhcmdldCAhPT0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpKQorICAgICAgICBpZiAoIXRoaXMudmlz
aWJsZSB8fCBldmVudC50YXJnZXQgIT09IHRoaXMubWFpblN0YXR1c0JhcikKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHRoaXMuX3N0YXR1c0JhckRyYWdn
aW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2
ZW50LCAicm93LXJlc2l6ZSIpOworICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFy
dCh0aGlzLm1haW5TdGF0dXNCYXIsIHRoaXMuX3N0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyks
IHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2ZW50LCAicm93LXJlc2l6
ZSIpOwogCiAgICAgICAgIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQgPSBldmVudC5wYWdlWSAt
IHRoaXMuZWxlbWVudC50b3RhbE9mZnNldFRvcDsKIApAQCAtMTc4LDcgKzI4MSw2IEBAIFdlYklu
c3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIF9zdGF0dXNCYXJEcmFnZ2luZzogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibWFpbiIpOwotCiAgICAgICAgIHZhciBoZWlnaHQgPSB3aW5kb3cuaW5u
ZXJIZWlnaHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7CiAgICAg
ICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25z
b2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRv
cCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwogCkBAIC0xOTMsNiArMjk1LDcgQEAg
V2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBXZWJJbnNw
ZWN0b3IuZWxlbWVudERyYWdFbmQoZXZlbnQpOwogCisgICAgICAgIHRoaXMuc2F2ZWRIZWlnaHQg
PSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OwogICAgICAgICBkZWxldGUgdGhpcy5fc3RhdHVz
QmFyRHJhZ09mZnNldDsKIAogICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKQEAgLTIw
MCwzICszMDMsOSBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIH0KIAogV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlID0geworICAgIEhpZGRlbjog
MCwKKyAgICBWYXJpYWJsZTogMSwKKyAgICBGdWxsOiAyCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYwppbmRleCA1MzkxN2Y2Li5kYmY0MDZjIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtOSw2ICs5LDcgQEAKICAgICA8ZmlsZT5DYWxsU3Rh
Y2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5DaGFuZ2VzVmlldy5qczwvZmlsZT4K
ICAgICA8ZmlsZT5Db2xvci5qczwvZmlsZT4KKyAgICA8ZmlsZT5Db25zb2xlUGFuZWwuanM8L2Zp
bGU+CiAgICAgPGZpbGU+Q29uc29sZVZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q29va2llSXRl
bXNWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFiYXNlLmpzPC9maWxlPgpAQCAtNzUsNiAr
NzYsNyBAQAogICAgIDxmaWxlPkltYWdlcy9jbG9zZUJ1dHRvbnMucG5nPC9maWxlPgogICAgIDxm
aWxlPkltYWdlcy9jb25zb2xlQnV0dG9uR2x5cGgucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdl
cy9jb29raWUucG5nPC9maWxlPgorICAgIDxmaWxlPkltYWdlcy9jb25zb2xlSWNvbi5wbmc8L2Zp
bGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RhdGFiYXNlLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFn
ZXMvZGF0YWJhc2VUYWJsZS5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RlYnVnZ2VyQ29u
dGludWUucG5nPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5jc3MgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNz
cwppbmRleCAwMzVkYzEzLi41MGU3ZWY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmNzcwpAQCAtMjE1LDYgKzIxNSwxMCBAQCBib2R5LmF0dGFjaGVkICNzZWFyY2gt
cmVzdWx0cy1tYXRjaGVzIHsKICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1hZ2VzL3Byb2Zp
bGVzSWNvbi5wbmcpOwogfQogCisudG9vbGJhci1pdGVtLmNvbnNvbGUgLnRvb2xiYXItaWNvbiB7
CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9jb25zb2xlSWNvbi5wbmcpOworfQor
CiAjY2xvc2UtYnV0dG9uLWxlZnQsICNjbG9zZS1idXR0b24tcmlnaHQgewogICAgIHdpZHRoOiAx
NHB4OwogICAgIGhlaWdodDogMTRweDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbAppbmRleCBhNjA5Zjg5Li40ODk5OTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC03OSw2ICs3OSw3IEBAIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2NyaXB0c1BhbmVsLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdG9yYWdlUGFu
ZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlByb2ZpbGVzUGFuZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9IkNvbnNvbGVQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlVmlldy5q
cyI+PC9zY3JpcHQ+CkBAIC0xMDgsNyArMTA5LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8L2Rpdj4KICAg
ICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICAgPGRpdiBpZD0ibWFpbi1wYW5lbHMiIHRhYmluZGV4
PSIwIiBzcGVsbGNoZWNrPSJmYWxzZSI+PC9kaXY+Ci0gICAgICAgIDxkaXYgaWQ9Im1haW4tc3Rh
dHVzLWJhciIgY2xhc3M9InN0YXR1cy1iYXIiPjxkaXYgaWQ9ImFuY2hvcmVkLXN0YXR1cy1iYXIt
aXRlbXMiPjxidXR0b24gaWQ9ImRvY2stc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJh
ci1pdGVtIHRvZ2dsZWQiPjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlw
aCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1p
dGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRp
diBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2Vz
LXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9u
PjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlk
ZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48
L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFy
IiBjbGFzcz0ic3RhdHVzLWJhciI+PGRpdiBpZD0iYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyI+
PGJ1dHRvbiBpZD0iZG9jay1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0i
PjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2
PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3Rh
dHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGgg
c2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjaGFuZ2VzLXN0YXR1cy1iYXItaXRl
bSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwvYnV0dG9uPjxkaXYgaWQ9ImNvdW50
LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48ZGl2
IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48L2Rpdj48L2Rp
dj48L2Rpdj4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlkPSJkcmF3ZXIiPgogICAgICAgICA8ZGl2
IGlkPSJjb25zb2xlLXZpZXciPjxkaXYgaWQ9ImNvbnNvbGUtbWVzc2FnZXMiPjxkaXYgaWQ9ImNv
bnNvbGUtcHJvbXB0IiBzcGVsbGNoZWNrPSJmYWxzZSI+PGJyPjwvZGl2PjwvZGl2PjwvZGl2Pgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggYjYzMmMyYy4uYjYw
ODU0OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC03Miw2
ICs3Miw5IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgcmVzb3VyY2VVUkxNYXA6IHt9LAog
ICAgIGNvb2tpZURvbWFpbnM6IHt9LAogICAgIG1pc3NpbmdMb2NhbGl6ZWRTdHJpbmdzOiB7fSwK
KyAgICBhbmltYXRpb25zOiB7fSwKKyAgICBuZXh0QW5pbWF0aW9uS2V5OiAwLAorICAgIHBlbmRp
bmdEaXNwYXRjaGVzOiAwLAogCiAgICAgZ2V0IHByZXZpb3VzRm9jdXNFbGVtZW50KCkKICAgICB7
CkBAIC0xNzAsNiArMTczLDggQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICBpZiAo
aGlkZGVuUGFuZWxzLmluZGV4T2YoInN0b3JhZ2UiKSA9PT0gLTEgJiYgaGlkZGVuUGFuZWxzLmlu
ZGV4T2YoImRhdGFiYXNlcyIpID09PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnN0b3Jh
Z2UgPSBuZXcgV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbCgpOworICAgICAgICBpZiAoaGlkZGVu
UGFuZWxzLmluZGV4T2YoImNvbnNvbGUiKSA9PT0gLTEpCisgICAgICAgICAgICB0aGlzLnBhbmVs
cy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwoKTsKICAgICB9LAogCiAg
ICAgX2xvYWRQcmVmZXJlbmNlczogZnVuY3Rpb24oKQpAQCAtMzk2LDcgKzQwMSw2IEBAIFdlYklu
c3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNs
YXNzKCJwb3J0LSIgKyBwb3J0KTsKIAogICAgIHRoaXMuX2xvYWRQcmVmZXJlbmNlcygpOwotICAg
IHRoaXMucGVuZGluZ0Rpc3BhdGNoZXMgPSAwOwogCiAgICAgdGhpcy5kcmF3ZXIgPSBuZXcgV2Vi
SW5zcGVjdG9yLkRyYXdlcigpOwogICAgIHRoaXMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcodGhpcy5kcmF3ZXIpOwpAQCAtNTM1LDYgKzUzOSw3IEBAIFdlYkluc3BlY3Rv
ci53aW5kb3dSZXNpemUgPSBmdW5jdGlvbihldmVudCkKIHsKICAgICBpZiAodGhpcy5jdXJyZW50
UGFuZWwgJiYgdGhpcy5jdXJyZW50UGFuZWwucmVzaXplKQogICAgICAgICB0aGlzLmN1cnJlbnRQ
YW5lbC5yZXNpemUoKTsKKyAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVj
dG9yLndpbmRvd0ZvY3VzZWQgPSBmdW5jdGlvbihldmVudCkKQEAgLTYyNCw2ICs2MjksOSBAQCBX
ZWJJbnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAKICAgICAgICAg
c3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBjYXNlICJVKzAwMUIi
OiAvLyBFc2NhcGUga2V5CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJhd2VyLmZ1bGxQYW5l
bCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgdGhpcy5k
cmF3ZXIudmlzaWJsZSA9ICF0aGlzLmRyYXdlci52aXNpYmxlOwogICAgICAgICAgICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDksMTAg
Kzc1NywxOSBAQCBXZWJJbnNwZWN0b3IubWFpbkNvcHkgPSBmdW5jdGlvbihldmVudCkKICAgICAg
ICAgdGhpcy5jdXJyZW50UGFuZWwuaGFuZGxlQ29weUV2ZW50KGV2ZW50KTsKIH0KIAotV2ViSW5z
cGVjdG9yLmFuaW1hdGVTdHlsZSA9IGZ1bmN0aW9uKGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxs
YmFjaywgY29tcGxldGUpCitXZWJJbnNwZWN0b3IuY2FuY2VsQW5pbWF0aW9uID0gZnVuY3Rpb24o
a2V5KQoreworICAgIGNsZWFyVGltZW91dCh0aGlzLmFuaW1hdGlvbnNba2V5XSk7CisgICAgZGVs
ZXRlIHRoaXMuYW5pbWF0aW9uc1trZXldOworfQorCitXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxl
ID0gZnVuY3Rpb24oYW5pbWF0aW9ucywgZHVyYXRpb24sIGNhbGxiYWNrLCBjb21wbGV0ZSwga2V5
KQogewotICAgIGlmIChjb21wbGV0ZSA9PT0gdW5kZWZpbmVkKQorICAgIGlmICh0eXBlb2YgY29t
cGxldGUgPT09ICJ1bmRlZmluZWQiKQogICAgICAgICBjb21wbGV0ZSA9IDA7CisgICAgaWYgKHR5
cGVvZiBrZXkgPT09ICJ1bmRlZmluZWQiKQorICAgICAgICBrZXkgPSBXZWJJbnNwZWN0b3IubmV4
dEFuaW1hdGlvbktleSsrOworCiAgICAgdmFyIHNsaWNlID0gKDEwMDAgLyAzMCk7IC8vIDMwIGZy
YW1lcyBwZXIgc2Vjb25kCiAKICAgICB2YXIgZGVmYXVsdFVuaXQgPSAicHgiOwpAQCAtODE5LDkg
KzgzNiwxNCBAQCBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlID0gZnVuY3Rpb24oYW5pbWF0aW9u
cywgZHVyYXRpb24sIGNhbGxiYWNrLCBjb21wbGV0ZSkKICAgICB9CiAKICAgICBpZiAoY29tcGxl
dGUgPCBkdXJhdGlvbikKLSAgICAgICAgc2V0VGltZW91dChXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0
eWxlLCBzbGljZSwgYW5pbWF0aW9ucywgZHVyYXRpb24sIGNhbGxiYWNrLCBjb21wbGV0ZSArIHNs
aWNlKTsKLSAgICBlbHNlIGlmIChjYWxsYmFjaykKLSAgICAgICAgY2FsbGJhY2soKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLmFuaW1hdGlvbnNba2V5XSA9IHNldFRpbWVvdXQoV2ViSW5zcGVjdG9y
LmFuaW1hdGVTdHlsZSwgc2xpY2UsIGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxsYmFjaywgY29t
cGxldGUgKyBzbGljZSwga2V5KTsKKyAgICBlbHNlIHsKKyAgICAgICAgZGVsZXRlIFdlYkluc3Bl
Y3Rvci5hbmltYXRpb25zW2tleV07CisgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgICAg
IGNhbGxiYWNrKCk7CisgICAgfQorCisgICAgcmV0dXJuIGtleTsKIH0KIAogV2ViSW5zcGVjdG9y
LnVwZGF0ZVNlYXJjaExhYmVsID0gZnVuY3Rpb24oKQpAQCAtODQxLDYgKzg2Myw3IEBAIFdlYklu
c3BlY3Rvci51cGRhdGVTZWFyY2hMYWJlbCA9IGZ1bmN0aW9uKCkKIFdlYkluc3BlY3Rvci50b2dn
bGVBdHRhY2ggPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5hdHRhY2hlZCA9ICF0aGlzLmF0dGFj
aGVkOworICAgIHRoaXMuZHJhd2VyLnJlc2l6ZSgpOwogfQogCiBXZWJJbnNwZWN0b3IudG9vbGJh
ckRyYWdTdGFydCA9IGZ1bmN0aW9uKGV2ZW50KQpAQCAtOTY0LDYgKzk4NywxMSBAQCBXZWJJbnNw
ZWN0b3Iuc2hvd1N0b3JhZ2VQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmN1cnJlbnRQYW5l
bCA9IHRoaXMucGFuZWxzLnN0b3JhZ2U7CiB9CiAKK1dlYkluc3BlY3Rvci5zaG93Q29uc29sZVBh
bmVsID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuY3VycmVudFBhbmVsID0gdGhpcy5wYW5lbHMu
Y29uc29sZTsKK30KKwogV2ViSW5zcGVjdG9yLmFkZFJlc291cmNlID0gZnVuY3Rpb24oaWRlbnRp
ZmllciwgcGF5bG9hZCkKIHsKICAgICB2YXIgcmVzb3VyY2UgPSBuZXcgV2ViSW5zcGVjdG9yLlJl
c291cmNlKApAQCAtMTA1NCw3ICsxMDgyLDcgQEAgV2ViSW5zcGVjdG9yLnVwZGF0ZVJlc291cmNl
ID0gZnVuY3Rpb24oaWRlbnRpZmllciwgcGF5bG9hZCkKICAgICAgICAgICAgIHJlc291cmNlLnJl
c3BvbnNlUmVjZWl2ZWRUaW1lID0gcGF5bG9hZC5yZXNwb25zZVJlY2VpdmVkVGltZTsKICAgICAg
ICAgaWYgKHBheWxvYWQuZW5kVGltZSkKICAgICAgICAgICAgIHJlc291cmNlLmVuZFRpbWUgPSBw
YXlsb2FkLmVuZFRpbWU7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChwYXlsb2FkLmxvYWRFdmVu
dFRpbWUpIHsKICAgICAgICAgICAgIC8vIFRoaXMgbG9hZEV2ZW50VGltZSBpcyBmb3IgdGhlIG1h
aW4gcmVzb3VyY2UsIGFuZCB3ZSB3YW50IHRvIHNob3cgaXQKICAgICAgICAgICAgIC8vIGZvciBh
bGwgcmVzb3VyY2VzIG9uIHRoaXMgcGFnZS4gVGhpcyBtZWFucyB3ZSB3YW50IHRvIHNldCBpdCBh
cyBhIG1lbWJlcgpAQCAtMTA2Miw3ICsxMDkwLDcgQEAgV2ViSW5zcGVjdG9yLnVwZGF0ZVJlc291
cmNlID0gZnVuY3Rpb24oaWRlbnRpZmllciwgcGF5bG9hZCkKICAgICAgICAgICAgIGlmICh0aGlz
LnBhbmVscy5yZXNvdXJjZXMpCiAgICAgICAgICAgICAgICAgdGhpcy5wYW5lbHMucmVzb3VyY2Vz
Lm1haW5SZXNvdXJjZUxvYWRUaW1lID0gcGF5bG9hZC5sb2FkRXZlbnRUaW1lOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChwYXlsb2FkLmRvbUNvbnRlbnRFdmVudFRpbWUpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgZG9tQ29udGVudEV2ZW50VGltZSBpcyBmb3IgdGhlIG1haW4g
cmVzb3VyY2UsIHNvIGl0IHNob3VsZCBnbyBpbgogICAgICAgICAgICAgLy8gdGhlIHJlc291cmNl
cyBwYW5lbCBmb3IgdGhlIHNhbWUgcmVhc29ucyBhcyBhYm92ZS4KQEAgLTEyNDgsMjMgKzEyNzYs
MjMgQEAgV2ViSW5zcGVjdG9yLmxvZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpCiB7CiAgICAgLy8gcmVt
ZW1iZXIgJ3RoaXMnIGZvciBzZXRJbnRlcnZhbCgpIGNhbGxiYWNrCiAgICAgdmFyIHNlbGYgPSB0
aGlzOwotICAgIAorCiAgICAgLy8gcmV0dXJuIGluZGljYXRpb24gaWYgd2UgY2FuIGFjdHVhbGx5
IGxvZyBhIG1lc3NhZ2UKICAgICBmdW5jdGlvbiBpc0xvZ0F2YWlsYWJsZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlICYmIFdlYkluc3BlY3Rvci5P
YmplY3RQcm94eSAmJiBzZWxmLmNvbnNvbGU7CiAgICAgfQotICAgIAorCiAgICAgLy8gZmx1c2gg
dGhlIHF1ZXVlIG9mIHBlbmRpbmcgbWVzc2FnZXMKICAgICBmdW5jdGlvbiBmbHVzaFF1ZXVlKCkK
ICAgICB7CiAgICAgICAgIHZhciBxdWV1ZWQgPSBXZWJJbnNwZWN0b3IubG9nLnF1ZXVlZDsKLSAg
ICAgICAgaWYgKCFxdWV1ZWQpIAorICAgICAgICBpZiAoIXF1ZXVlZCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVk
Lmxlbmd0aDsgKytpKQogICAgICAgICAgICAgbG9nTWVzc2FnZShxdWV1ZWRbaV0pOwotICAgICAg
ICAKKwogICAgICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQ7CiAgICAgfQogCkBA
IC0xMjc0LDI2ICsxMzAyLDI2IEBAIFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbihtZXNzYWdl
KQogICAgIHsKICAgICAgICAgaWYgKCFpc0xvZ0F2YWlsYWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgCisKICAgICAgICAgY2xlYXJJbnRlcnZhbChXZWJJbnNwZWN0b3Iu
bG9nLmludGVydmFsKTsKICAgICAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5sb2cuaW50ZXJ2YWw7
Ci0gICAgICAgIAorCiAgICAgICAgIGZsdXNoUXVldWUoKTsKICAgICB9Ci0gICAgCisKICAgICAv
LyBhY3R1YWxseSBsb2cgdGhlIG1lc3NhZ2UKICAgICBmdW5jdGlvbiBsb2dNZXNzYWdlKG1lc3Nh
Z2UpCiAgICAgewogICAgICAgICB2YXIgcmVwZWF0Q291bnQgPSAxOwogICAgICAgICBpZiAobWVz
c2FnZSA9PSBXZWJJbnNwZWN0b3IubG9nLmxhc3RNZXNzYWdlKQogICAgICAgICAgICAgcmVwZWF0
Q291bnQgPSBXZWJJbnNwZWN0b3IubG9nLnJlcGVhdENvdW50ICsgMTsKLSAgICAKKwogICAgICAg
ICBXZWJJbnNwZWN0b3IubG9nLmxhc3RNZXNzYWdlID0gbWVzc2FnZTsKICAgICAgICAgV2ViSW5z
cGVjdG9yLmxvZy5yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50OwotICAgICAgICAKKwogICAgICAg
ICAvLyBDb25zb2xlTWVzc2FnZSBleHBlY3RzIGEgcHJveHkgb2JqZWN0CiAgICAgICAgIG1lc3Nh
Z2UgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG51bGwsIFtdLCAwLCBtZXNzYWdlLCBm
YWxzZSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIHBvc3QgdGhlIG1lc3NhZ2UKICAgICAgICAg
dmFyIG1zZyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UoCiAgICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5PdGhlciwKQEAgLTEzMDQs
MjAgKzEzMzIsMjAgQEAgV2ViSW5zcGVjdG9yLmxvZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpCiAgICAg
ICAgICAgICBudWxsLAogICAgICAgICAgICAgcmVwZWF0Q291bnQsCiAgICAgICAgICAgICBtZXNz
YWdlKTsKLSAgICAKKwogICAgICAgICBzZWxmLmNvbnNvbGUuYWRkTWVzc2FnZShtc2cpOwogICAg
IH0KLSAgICAKKwogICAgIC8vIGlmIHdlIGNhbid0IGxvZyB0aGUgbWVzc2FnZSwgcXVldWUgaXQK
ICAgICBpZiAoIWlzTG9nQXZhaWxhYmxlKCkpIHsKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3Iu
bG9nLnF1ZXVlZCkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2cucXVldWVkID0gW107Ci0g
ICAgICAgICAgICAKKwogICAgICAgICBXZWJJbnNwZWN0b3IubG9nLnF1ZXVlZC5wdXNoKG1lc3Nh
Z2UpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5sb2cuaW50ZXJ2YWwp
CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZmx1
c2hRdWV1ZUlmQXZhaWxhYmxlLCAxMDAwKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTQ1Nyw3ICsxNDg1LDggQEAgV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdB
c0ZyYWdtZW50ID0gZnVuY3Rpb24oc3RyaW5nKQogICAgIHJldHVybiBjb250YWluZXI7CiB9CiAK
LVdlYkluc3BlY3Rvci5zaG93UHJvZmlsZUZvclVSTCA9IGZ1bmN0aW9uKHVybCkgeworV2ViSW5z
cGVjdG9yLnNob3dQcm9maWxlRm9yVVJMID0gZnVuY3Rpb24odXJsKQorewogICAgIFdlYkluc3Bl
Y3Rvci5zaG93UHJvZmlsZXNQYW5lbCgpOwogICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmls
ZXMuc2hvd1Byb2ZpbGVGb3JVUkwodXJsKTsKIH0K
</data>
<flag name="commit-queue"
          id="25286"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43553</attachid>
            <date>2009-11-19 22:13:31 -0800</date>
            <delta_ts>2009-11-19 23:29:25 -0800</delta_ts>
            <desc>[PATCH] Console Panel (Even Better)</desc>
            <filename>console_better.patch</filename>
            <type>text/plain</type>
            <size>32017</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzQxYjhlZS4uN2JjMTk1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAwOS0xMS0xOSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkcyBhIENvbnNvbGUgUGFuZWwsIHdoaWNoIGFsbG93cyBmb3IgYSBG
dWxsIHNpemUgQ29uc29sZS4gVGhpcworICAgICAgICBleHRlbmRzIHRoZSBEcmF3ZXIgdG8gdGhl
IHNpemUgb2YgYSBQYW5lbC4gVGhpcyBhbHNvIGZpeGVzIHByZXZpb3VzCisgICAgICAgIHJlc2l6
ZSBpc3N1ZXMgd2l0aCB0aGUgRHJhd2VyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlUGFuZWwuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS50b29s
YmFySXRlbUNsYXNzLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9EcmF3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNldCB2aXNpYmxlVmlldyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5nZXQgc2F2ZWRIZWlnaHQpOiBzYXZlIHRoZSBo
ZWlnaHQgb2YgdGhlIHZhcmlhYmxlIGNvbnNvbGUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJh
d2VyLnByb3RvdHlwZS5zZXQgc2F2ZWRIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUuc2hvdy5hbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3
ZXIucHJvdG90eXBlLmhpZGUuYW5pbWF0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkRyYXdlci5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2Vy
LnByb3RvdHlwZS5yZXNpemUpOiByZXNpemUgYXBwcm9wcmlhdGVseSBpZiBmdWxsL25vbi1mdWxs
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5lbnRlclBhbmVsTW9kZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5leGl0UGFuZWxNb2RlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9jYW5jZWxBbmltYXRpb25J
Zk5lZWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fYW5pbWF0
ZURyYXdlckhlaWdodC5hbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RHJhd2VyLnByb3RvdHlwZS5fYW5pbWF0ZURyYXdlckhlaWdodCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fYW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX3N0YXJ0U3RhdHVzQmFyRHJhZ2dpbmcpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX3N0YXR1c0JhckRyYWdnaW5nKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9lbmRTdGF0dXNCYXJEcmFn
Z2luZyk6CisKKyAgICAgICAgTWlzY2VsbGFuZW91cyBjaGFuZ2VzIGFuZCBjbGVhbnVwLgorCisg
ICAgICAgICogRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiAiQ29uc29sZSIgdG9v
bGJhciB0aXRsZS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
OiByZW1vdmVkIHVubmVjZXNzYXJ5IGVsZW1lbnQgcmVvcmRlcmluZyAgCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29uc29sZUljb24ucG5nOiBhZGRlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3M6IGFkZGVkIGljb24uCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fY3JlYXRl
UGFuZWxzKTogY3JlYXRlIGNvbnNvbGUgcGFuZWwKKyAgICAgICAgKFdlYkluc3BlY3Rvci53aW5k
b3dSZXNpemUpOiByZXNpemUgZHJhd2VyIGlmIG5lY2Vzc2FyeQorICAgICAgICAoV2ViSW5zcGVj
dG9yLmRvY3VtZW50S2V5RG93bik6IGVzYyBzaG91bGQgbm90IHRvZ2dsZSB0aGUgY29uc29sZSB3
aGVuIGluIHBhbmVsIG1vZGUKKyAgICAgICAgKFdlYkluc3BlY3Rvci5jYW5jZWxBbmltYXRpb24p
OiBjYW5jZWwgYW4gYW5pbWF0aW9uIGdpdmVuIGl0cyBrZXkKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5hbmltYXRlU3R5bGUpOiBzdG9yZSBhbmltYXRpb24ga2V5IHRvIGFsbG93IGZvciBjYW5jZWxs
aW5nCisgICAgICAgIChXZWJJbnNwZWN0b3IudG9nZ2xlQXR0YWNoKTogcmVzaXplIGRyYXdlciBp
ZiBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93Q29uc29sZVBhbmVsKTogcmVz
dG9yZSB0aGUgcGFuZWwgd2hlbiB0aGUgaW5zcGVjdG9yIHJlc3RhcnRzCisgICAgICAgIChXZWJJ
bnNwZWN0b3Iuc2hvd1Byb2ZpbGVGb3JVUkwpOiBzdHlsZSBmaXgKKworICAgICAgICBSZXN0b3Jl
IHRoZSBwYW5lbCB3aGVuIHRoZSBpbnNwZWN0b3IgcmVzdGFydHMuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnNwZWNpYWxQYW5lbEZvckpTTmFtZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjpzaG93UGFuZWwpOgorCisgICAgICAgIEJ1aWxkIGZpbGVzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKwogMjAwOS0xMS0xOSAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmUgSHlhdHQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcyBiL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4
IGI2YjA1YzU2ZTg3YTQ4ODI2YWJiNjMwYTIyMjIyYTNiMjc4Y2QxNDAuLmVmOTgxYzc4ZDg1MTYz
MWNjMGJjODk1ZjUyZjZiYzRiZWE0OTgwYTQgMTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gKZGVsdGEg
NjAKemNtWnA8IUZjVGs7fDcrVCQ+JXMhQ1NNUnsoYUt7ZVgyQHNBVk10fEFWdSlvPlY2WCpaQj9m
MXA3X3k4dDB+WjRUCkQ5c0NXfgoKZGVsdGEgOQpRY21jYjFnUiRpWDt8NyktMDJuUj1FZFQlagoK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggOGM1MWE2MC4uNmM0OTg4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MTYsNiArMzYxNiw3IEBACiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DaGFuZ2VzVmlldy5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db2xvci5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9u
dC1lbmQvQ29uc29sZVZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
Q29va2llSXRlbXNWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Rh
dGFiYXNlLmpzJywKQEAgLTM2ODQsNiArMzY4NSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9JbWFnZXMvY2xlYXJDb25zb2xlQnV0dG9uR2x5cGgucG5nJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jbG9zZUJ1dHRvbnMucG5nJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb25zb2xlQnV0dG9uR2x5cGgucG5n
JywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb25zb2xlSWNvbi5w
bmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Nvb2tpZS5wbmcn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RhdGFiYXNlLnBuZycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvZGF0YWJhc2VUYWJsZS5w
bmcnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNDBiOTJiZC4uZDQy
N2U5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MjI3NCw2ICs0
MjI3NCw5IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVQYW5lbC5qcyIKKwkJCQkJPgorCQkJ
CTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb25zb2xl
Vmlldy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKaW5kZXggOTIwYzNmMC4uNTI0MzZlZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTMxNSwxMCArMzE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSwgYm9vbCBhdHRh
Y2hlZCkKICAgICAgICAgc2V0QXR0YWNoZWRXaW5kb3coYXR0YWNoZWQpOwogICAgICAgICBwb3B1
bGF0ZVNjcmlwdE9iamVjdHMoKTsKIAotICAgICAgICAvLyBDb25zb2xlIHBhbmVsIGlzIGltcGxl
bWVudGVkIGFzIGEgJ2Zhc3QgdmlldycsIHNvIHRoZXJlIHNob3VsZCBiZQotICAgICAgICAvLyBy
ZWFsIHBhbmVsIG9wZW5lZCBhbG9uZyB3aXRoIGl0LgotICAgICAgICBib29sIHNob3dDb25zb2xl
ID0gbV9zaG93QWZ0ZXJWaXNpYmxlID09IENvbnNvbGVQYW5lbDsKLSAgICAgICAgaWYgKG1fc2hv
d0FmdGVyVmlzaWJsZSA9PSBDdXJyZW50UGFuZWwgfHwgc2hvd0NvbnNvbGUpIHsKKyAgICAgICAg
aWYgKG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBDdXJyZW50UGFuZWwpIHsKICAgICAgICAgICBTZXR0
aW5nIGxhc3RBY3RpdmVQYW5lbFNldHRpbmcgPSBzZXR0aW5nKGxhc3RBY3RpdmVQYW5lbFNldHRp
bmdOYW1lKTsKICAgICAgICAgICBpZiAobGFzdEFjdGl2ZVBhbmVsU2V0dGluZy50eXBlKCkgPT0g
U2V0dGluZzo6U3RyaW5nVHlwZSkKICAgICAgICAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0g
c3BlY2lhbFBhbmVsRm9ySlNOYW1lKGxhc3RBY3RpdmVQYW5lbFNldHRpbmcuc3RyaW5nKCkpOwpA
QCAtMzMzLDggKzMzMCw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93Vmlz
aWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0YWNoZWQpCiAgICAgICAgICAgICBlbmFibGVEZWJ1
Z2dlcigpOwogI2VuZGlmCiAgICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOwot
ICAgICAgICBpZiAoc2hvd0NvbnNvbGUpCi0gICAgICAgICAgICBzaG93UGFuZWwoQ29uc29sZVBh
bmVsKTsKICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
ICAgICAvLyBJZiB0aGUgd2luZG93IGlzIGJlaW5nIGNsb3NlZCB3aXRoIHRoZSBkZWJ1Z2dlciBl
bmFibGVkLApAQCAtMTgxMSw2ICsxODA2LDggQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6U3BlY2lh
bFBhbmVscyBJbnNwZWN0b3JDb250cm9sbGVyOjpzcGVjaWFsUGFuZWxGb3JKU05hbWUoY28KICAg
ICAgICAgcmV0dXJuIFByb2ZpbGVzUGFuZWw7CiAgICAgZWxzZSBpZiAocGFuZWxOYW1lID09ICJz
dG9yYWdlIiB8fCBwYW5lbE5hbWUgPT0gImRhdGFiYXNlcyIpCiAgICAgICAgIHJldHVybiBTdG9y
YWdlUGFuZWw7CisgICAgZWxzZSBpZiAocGFuZWxOYW1lID09ICJjb25zb2xlIikKKyAgICAgICAg
cmV0dXJuIENvbnNvbGVQYW5lbDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBFbGVtZW50c1Bh
bmVsOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IDY5NDJk
MDIuLjZlMDJkYjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAg
LTE1MSw3ICsxNTEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzaG93UGFuZWwoaW50IHBh
bmVsKQogICAgIGNvbnN0IGNoYXIqIHNob3dGdW5jdGlvbk5hbWU7CiAgICAgc3dpdGNoIChwYW5l
bCkgewogICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OkNvbnNvbGVQYW5lbDoKLSAg
ICAgICAgICAgIHNob3dGdW5jdGlvbk5hbWUgPSAic2hvd0NvbnNvbGUiOworICAgICAgICAgICAg
c2hvd0Z1bmN0aW9uTmFtZSA9ICJzaG93Q29uc29sZVBhbmVsIjsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OkVsZW1lbnRzUGFuZWw6CiAgICAg
ICAgICAgICBzaG93RnVuY3Rpb25OYW1lID0gInNob3dFbGVtZW50c1BhbmVsIjsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY3NGJjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5l
bCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuUGFuZWwuY2FsbCh0aGlzKTsKK30K
KworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUgPSB7CisgICAgdG9vbGJhckl0
ZW1DbGFzczogImNvbnNvbGUiLAorCisgICAgZ2V0IHRvb2xiYXJJdGVtTGFiZWwoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSIpOworICAgIH0s
CisKKyAgICBzaG93OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuUGFu
ZWwucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKKworICAgICAgICB0aGlzLnByZXZpb3VzQ29u
c29sZVN0YXRlID0gV2ViSW5zcGVjdG9yLmRyYXdlci5zdGF0ZTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLmRyYXdlci5lbnRlclBhbmVsTW9kZSgpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0Nv
bnNvbGUoKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CisKKyAgICAgICAg
aWYgKHRoaXMucHJldmlvdXNDb25zb2xlU3RhdGUgPT09IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3Rh
dGUuSGlkZGVuKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci52aXNpYmxlID0gZmFs
c2U7CisgICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIuZXhpdFBhbmVsTW9kZSgpOworICAgIH0K
K30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
b25zb2xlVmlldy5qcwppbmRleCBmMDNjNjQ3Li45ZjAwNmUzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC01Nyw5ICs1Nyw2IEBAIFdlYkluc3BlY3Rv
ci5Db25zb2xlVmlldyA9IGZ1bmN0aW9uKGRyYXdlcikKICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVC
dXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgY29uc29sZS4iKTsKICAg
ICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlz
Ll90b2dnbGVDb25zb2xlQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7CiAKLSAgICB2
YXIgYW5jaG9yZWRTdGF0dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5jaG9yZWQt
c3RhdHVzLWJhci1pdGVtcyIpOwotICAgIGFuY2hvcmVkU3RhdHVzQmFyLmFwcGVuZENoaWxkKHRo
aXMudG9nZ2xlQ29uc29sZUJ1dHRvbik7Ci0gICAgCiAgICAgLy8gV2lsbCBob2xkIHRoZSBsaXN0
IG9mIGZpbHRlciBlbGVtZW50cwogICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLWZpbHRlciIpOwogICAgIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EcmF3ZXIuanMKaW5kZXggMWI1MGY5MS4uNDg0Yjk4MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRHJhd2VyLmpzCkBAIC03LDEzICs3LDEzIEBACiAgKiBhcmUgbWV0OgogICoK
ICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApA
QCAtMzEsNiArMzEsMTIgQEAgV2ViSW5zcGVjdG9yLkRyYXdlciA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJk
cmF3ZXIiKSk7CiAKKyAgICB0aGlzLnNhdmVkSGVpZ2h0ID0gMDsKKyAgICB0aGlzLnN0YXRlID0g
V2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5IaWRkZW47CisgICAgdGhpcy5mdWxsUGFuZWwgPSBm
YWxzZTsKKworICAgIHRoaXMubWFpbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bWFpbiIpOworICAgIHRoaXMudG9vbGJhckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgidG9vbGJhciIpOwogICAgIHRoaXMubWFpblN0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKTsKICAgICB0aGlzLm1haW5TdGF0dXNCYXIuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fc3RhcnRTdGF0dXNCYXJEcmFnZ2luZy5iaW5k
KHRoaXMpLCB0cnVlKTsKICAgICB0aGlzLnZpZXdTdGF0dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgib3RoZXItZHJhd2VyLXN0YXR1cy1iYXItaXRlbXMiKTsKQEAgLTQ1LDYgKzUxLDgg
QEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgc2V0IHZpc2libGVWaWV3
KHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fdmlzaWJsZVZpZXcgPT09IHgpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5mdWxsUGFuZWwpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMudmlzaWJsZTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjQsNiArNzIsMTcgQEAgV2ViSW5zcGVj
dG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCisgICAgZ2V0IHNh
dmVkSGVpZ2h0KCkKKyAgICB7CisgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLl9zYXZlZEhlaWdo
dCB8fCB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAgICAgICByZXR1cm4gTnVtYmVyLmNv
bnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5l
ckhlaWdodCAtIHRoaXMubWFpbkVsZW1lbnQudG90YWxPZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5t
aW5Db25zb2xlSGVpZ2h0KTsKKyAgICB9LAorCisgICAgc2V0IHNhdmVkSGVpZ2h0KHgpCisgICAg
eworICAgICAgICB0aGlzLl9zYXZlZEhlaWdodCA9IHg7CisgICAgfSwKKwogICAgIHNob3dWaWV3
OiBmdW5jdGlvbih2aWV3KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgdGhp
cy52aXNpYmxlVmlldyAhPT0gdmlldykKQEAgLTg1LDE1ICsxMDQsMTYgQEAgV2ViSW5zcGVjdG9y
LkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFz
cygiZHJhd2VyLXZpc2libGUiKTsKIAogICAgICAgICB2YXIgYW5jaG9yZWRJdGVtcyA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIik7Ci0KKyAgICAg
ICAgdmFyIGhlaWdodCA9ICh0aGlzLmZ1bGxQYW5lbCA/IHdpbmRvdy5pbm5lckhlaWdodCAtIHRo
aXMudG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogdGhpcy5zYXZlZEhlaWdodCk7CiAgICAg
ICAgIHZhciBhbmltYXRpb25zID0gWwotICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtYWluIiksIGVuZDoge2JvdHRvbTogdGhpcy5lbGVtZW50Lm9mZnNldEhl
aWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IHRoaXMuZWxlbWVudCwgZW5kOiB7aGVpZ2h0
OiBoZWlnaHR9fSwKKyAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IGhlaWdodH19LAogICAgICAgICAgICAge2VsZW1lbnQ6
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKSwgc3RhcnQ6IHsicGFk
ZGluZy1sZWZ0IjogYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDF9LCBlbmQ6IHsicGFkZGlu
Zy1sZWZ0IjogMH19LAogICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1pdGVtcyIpLCBzdGFydDoge29wYWNpdHk6IDB9
LCBlbmQ6IHtvcGFjaXR5OiAxfX0KICAgICAgICAgXTsKIAotICAgICAgICB2YXIgY29uc29sZVN0
YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkcmF3ZXItc3RhdHVzLWJhciIpOwot
ICAgICAgICBjb25zb2xlU3RhdHVzQmFyLmluc2VydEJlZm9yZShhbmNob3JlZEl0ZW1zLCBjb25z
b2xlU3RhdHVzQmFyLmZpcnN0Q2hpbGQpOworICAgICAgICB2YXIgZHJhd2VyU3RhdHVzQmFyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlci1zdGF0dXMtYmFyIik7CisgICAgICAgIGRy
YXdlclN0YXR1c0Jhci5pbnNlcnRCZWZvcmUoYW5jaG9yZWRJdGVtcywgZHJhd2VyU3RhdHVzQmFy
LmZpcnN0Q2hpbGQpOwogCiAgICAgICAgIGZ1bmN0aW9uIGFuaW1hdGlvbkZpbmlzaGVkKCkKICAg
ICAgICAgewpAQCAtMTAyLDkgKzEyMiwxMSBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3LmFmdGVyU2hvdykKICAgICAg
ICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmFmdGVyU2hvdygpOwogICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2FuaW1hdGluZzsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRBbmlt
YXRpb247CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gKHRoaXMuZnVsbFBhbmVsID8gV2ViSW5z
cGVjdG9yLkRyYXdlci5TdGF0ZS5GdWxsIDogV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJp
YWJsZSk7CiAgICAgICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFu
aW1hdGlvbnMsIHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAyMDAwIDog
MjUwLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5jdXJyZW50
QW5pbWF0aW9uID0gV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB0aGlzLl9h
bmltYXRpb25EdXJhdGlvbigpLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKICAgICB9
LAogCiAgICAgaGlkZTogZnVuY3Rpb24oKQpAQCAtMTEzLDcgKzEzNSw3IEBAIFdlYkluc3BlY3Rv
ci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFdl
Ykluc3BlY3Rvci5WaWV3LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7Ci0gICAgICAgIAorCiAg
ICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3KQogICAgICAgICAgICAgdGhpcy52aXNpYmxlVmll
dy5oaWRlKCk7CiAKQEAgLTEyNCw5ICsxNDYsOSBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICB2YXIgYW5jaG9yZWRJdGVtcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIik7CiAKLSAgICAgICAgLy8gVGVtcG9y
YWxseSBzZXQgcHJvcGVydGllcyBhbmQgY2xhc3NlcyB0byBtaW1pYyB0aGUgcG9zdC1hbmltYXRp
b24gdmFsdWVzIHNvIHBhbmVscworICAgICAgICAvLyBUZW1wb3JhcmlseSBzZXQgcHJvcGVydGll
cyBhbmQgY2xhc3NlcyB0byBtaW1pYyB0aGUgcG9zdC1hbmltYXRpb24gdmFsdWVzIHNvIHBhbmVs
cwogICAgICAgICAvLyBsaWtlIEVsZW1lbnRzIGluIHRoZWlyIHVwZGF0ZVN0YXR1c0Jhckl0ZW1z
IGNhbGwgd2lsbCBzaXplIHRoaW5ncyB0byBmaXQgdGhlIGZpbmFsIGxvY2F0aW9uLgotICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIikuc3R5bGUuc2V0UHJv
cGVydHkoInBhZGRpbmctbGVmdCIsIChhbmNob3JlZEl0ZW1zLm9mZnNldFdpZHRoIC0gMSkgKyAi
cHgiKTsKKyAgICAgICAgdGhpcy5tYWluU3RhdHVzQmFyLnN0eWxlLnNldFByb3BlcnR5KCJwYWRk
aW5nLWxlZnQiLCAoYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDEpICsgInB4Iik7CiAgICAg
ICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5bGVDbGFzcygiZHJhd2VyLXZpc2libGUiKTsKICAg
ICAgICAgaWYgKCJ1cGRhdGVTdGF0dXNCYXJJdGVtcyIgaW4gV2ViSW5zcGVjdG9yLmN1cnJlbnRQ
YW5lbCkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwudXBkYXRlU3RhdHVz
QmFySXRlbXMoKTsKQEAgLTE0NSw5ICsxNjcsOTAgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICBtYWluU3RhdHVzQmFyLnN0eWxlLnJlbW92ZVByb3BlcnR5
KCJwYWRkaW5nLWxlZnQiKTsKICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5bGVD
bGFzcygiZHJhd2VyLXZpc2libGUiKTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hbmltYXRp
bmc7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50QW5pbWF0aW9uOworICAgICAgICAg
ICAgdGhpcy5zdGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuOwogICAgICAg
ICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5k
b3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9u
RmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbiA9IFdl
Ykluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgdGhpcy5fYW5pbWF0aW9uRHVyYXRp
b24oKSwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIHJlc2l6
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdlYkluc3Bl
Y3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHZhciBoZWlnaHQ7CisgICAgICAgIHZhciBtYWluRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtYWluIik7CisgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBXZWJJbnNwZWN0b3Iu
RHJhd2VyLlN0YXRlLlZhcmlhYmxlKSB7CisgICAgICAgICAgICBoZWlnaHQgPSBwYXJzZUludCh0
aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0KTsKKyAgICAgICAgICAgIGhlaWdodCA9IE51bWJlci5j
b25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5u
ZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNv
bnNvbGVIZWlnaHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGhlaWdodCA9IHdpbmRv
dy5pbm5lckhlaWdodCAtIHRoaXMudG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0OworCisgICAg
ICAgIG1haW5FbGVtZW50LnN0eWxlLmJvdHRvbSA9IGhlaWdodCArICJweCI7CisgICAgICAgIHRo
aXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH0sCisKKyAgICBl
bnRlclBhbmVsTW9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2FuY2VsQW5p
bWF0aW9uSWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5mdWxsUGFuZWwgPSB0cnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkgeworICAgICAgICAgICAgdGhpcy5zYXZlZEhl
aWdodCA9IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgICAgICAgICB2YXIgaGVpZ2h0
ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy50b29sYmFyRWxlbWVudC5vZmZzZXRIZWlnaHQ7
CisgICAgICAgICAgICB0aGlzLl9hbmltYXRlRHJhd2VySGVpZ2h0KGhlaWdodCwgV2ViSW5zcGVj
dG9yLkRyYXdlci5TdGF0ZS5GdWxsKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBleGl0UGFu
ZWxNb2RlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jYW5jZWxBbmltYXRpb25J
Zk5lZWRlZCgpOworICAgICAgICB0aGlzLmZ1bGxQYW5lbCA9IGZhbHNlOworCisgICAgICAgIGlm
ICh0aGlzLnZpc2libGUpIHsKKyAgICAgICAgICAgIC8vIElmIHRoaXMgYW5pbWF0aW9uIGdldHMg
Y2FuY2VsbGVkLCB3ZSB3YW50IHRoZSBzdGF0ZSBvZiB0aGUgZHJhd2VyIHRvIGJlIFZhcmlhYmxl
LAorICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgbmV3IGFuaW1hdGlvbiBjYW4ndCBkbyBhbiBp
bW1lZGlhdGUgdHJhbnNpdGlvbiBiZXR3ZWVuIEhpZGRlbi9GdWxsIHN0YXRlcy4KKyAgICAgICAg
ICAgIHRoaXMuc3RhdGUgPSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxlOworICAg
ICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuc2F2ZWRIZWlnaHQ7CisgICAgICAgICAgICB0aGlz
Ll9hbmltYXRlRHJhd2VySGVpZ2h0KGhlaWdodCwgV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5W
YXJpYWJsZSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NhbmNlbEFuaW1hdGlvbklmTmVl
ZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW5nKSB7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuY2FuY2VsQW5pbWF0aW9uKHRoaXMuY3VycmVudEFuaW1h
dGlvbik7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuY3VycmVudEFuaW1hdGlvbjsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBf
YW5pbWF0ZURyYXdlckhlaWdodDogZnVuY3Rpb24oaGVpZ2h0LCBmaW5hbFN0YXRlKQorICAgIHsK
KyAgICAgICAgdGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdmFyIGFuaW1hdGlvbnMg
PSBbCisgICAgICAgICAgICB7ZWxlbWVudDogdGhpcy5lbGVtZW50LCBlbmQ6IHtoZWlnaHQ6IGhl
aWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJt
YWluIiksIGVuZDoge2JvdHRvbTogaGVpZ2h0fX0KKyAgICAgICAgXTsKKworICAgICAgICBmdW5j
dGlvbiBhbmltYXRpb25GaW5pc2hlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9hbmltYXRpbmc7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50QW5pbWF0aW9u
OworICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IGZpbmFsU3RhdGU7CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24gPSBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFu
aW1hdGlvbnMsIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9uKCksIGFuaW1hdGlvbkZpbmlzaGVkLmJp
bmQodGhpcykpOworICAgIH0sCisKKyAgICBfYW5pbWF0aW9uRHVyYXRpb246IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIC8vIEltbWVkaWF0ZSBpZiBnb2luZyBiZXR3ZWVuIEhpZGRlbiBhbmQg
RnVsbCBpbiBmdWxsIHBhbmVsIG1vZGUKKyAgICAgICAgaWYgKHRoaXMuZnVsbFBhbmVsICYmICh0
aGlzLnN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbiB8fCB0aGlzLnN0
YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkZ1bGwpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgcmV0dXJuICh3aW5kb3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNo
aWZ0S2V5ID8gMjAwMCA6IDI1MCk7CiAgICAgfSwKIAogICAgIF9zYWZlbHlSZW1vdmVDaGlsZHJl
bjogZnVuY3Rpb24oKQpAQCAtMTY1LDEwICsyNjgsMTAgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5w
cm90b3R5cGUgPSB7CiAKICAgICBfc3RhcnRTdGF0dXNCYXJEcmFnZ2luZzogZnVuY3Rpb24oZXZl
bnQpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCBldmVudC50YXJnZXQgIT09
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKSkKKyAgICAgICAgaWYg
KCF0aGlzLnZpc2libGUgfHwgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLm1haW5TdGF0dXNCYXIpCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3Rh
cnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLCB0aGlzLl9zdGF0
dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRTdGF0dXNCYXJEcmFnZ2luZy5iaW5k
KHRoaXMpLCBldmVudCwgInJvdy1yZXNpemUiKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1l
bnREcmFnU3RhcnQodGhpcy5tYWluU3RhdHVzQmFyLCB0aGlzLl9zdGF0dXNCYXJEcmFnZ2luZy5i
aW5kKHRoaXMpLCB0aGlzLl9lbmRTdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBldmVudCwg
InJvdy1yZXNpemUiKTsKIAogICAgICAgICB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0ID0gZXZl
bnQucGFnZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3A7CiAKQEAgLTE3OCw3ICsyODEs
NiBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICBfc3RhdHVzQmFyRHJh
Z2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIG1haW5FbGVtZW50ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4iKTsKLQogICAgICAgICB2YXIgaGVpZ2h0ID0g
d2luZG93LmlubmVySGVpZ2h0IC0gZXZlbnQucGFnZVkgKyB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zm
c2V0OwogICAgICAgICBoZWlnaHQgPSBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5j
ZXMubWluQ29uc29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gbWFpbkVsZW1lbnQudG90
YWxPZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKIApAQCAtMTkzLDYg
KzI5NSw3IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKGV2ZW50KTsKIAorICAgICAgICB0aGlzLnNh
dmVkSGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKICAgICAgICAgZGVsZXRlIHRo
aXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7CiAKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7CkBAIC0yMDAsMyArMzAzLDkgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7
CiB9CiAKIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5WaWV3LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZSA9IHsKKyAg
ICBIaWRkZW46IDAsCisgICAgVmFyaWFibGU6IDEsCisgICAgRnVsbDogMgorfTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNTM5MTdmNi4uZGJmNDA2YyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTksNiArOSw3IEBACiAgICAgPGZp
bGU+Q2FsbFN0YWNrU2lkZWJhclBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q2hhbmdlc1ZpZXcu
anM8L2ZpbGU+CiAgICAgPGZpbGU+Q29sb3IuanM8L2ZpbGU+CisgICAgPGZpbGU+Q29uc29sZVBh
bmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkNvbnNvbGVWaWV3LmpzPC9maWxlPgogICAgIDxmaWxl
PkNvb2tpZUl0ZW1zVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5EYXRhYmFzZS5qczwvZmlsZT4K
QEAgLTc1LDYgKzc2LDcgQEAKICAgICA8ZmlsZT5JbWFnZXMvY2xvc2VCdXR0b25zLnBuZzwvZmls
ZT4KICAgICA8ZmlsZT5JbWFnZXMvY29uc29sZUJ1dHRvbkdseXBoLnBuZzwvZmlsZT4KICAgICA8
ZmlsZT5JbWFnZXMvY29va2llLnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5JbWFnZXMvY29uc29sZUlj
b24ucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9kYXRhYmFzZS5wbmc8L2ZpbGU+CiAgICAg
PGZpbGU+SW1hZ2VzL2RhdGFiYXNlVGFibGUucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9k
ZWJ1Z2dlckNvbnRpbnVlLnBuZzwvZmlsZT4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5jc3MKaW5kZXggMDM1ZGMxMy4uNTBlN2VmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKQEAgLTIxNSw2ICsyMTUsMTAgQEAgYm9keS5hdHRhY2hl
ZCAjc2VhcmNoLXJlc3VsdHMtbWF0Y2hlcyB7CiAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKElt
YWdlcy9wcm9maWxlc0ljb24ucG5nKTsKIH0KIAorLnRvb2xiYXItaXRlbS5jb25zb2xlIC50b29s
YmFyLWljb24geworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvY29uc29sZUljb24u
cG5nKTsKK30KKwogI2Nsb3NlLWJ1dHRvbi1sZWZ0LCAjY2xvc2UtYnV0dG9uLXJpZ2h0IHsKICAg
ICB3aWR0aDogMTRweDsKICAgICBoZWlnaHQ6IDE0cHg7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggYTYwOWY4OS4uNDg5OTk2YyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtNzksNiArNzksNyBAQCBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNjcmlwdHNQYW5l
bC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
U3RvcmFnZVBhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJQcm9maWxlc1BhbmVsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb25zb2xlUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlVmlldy5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlRnJhbWUu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNv
dXJjZVZpZXcuanMiPjwvc2NyaXB0PgpAQCAtMTA4LDcgKzEwOSw3IEBAIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAg
PC9kaXY+CiAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgIDxkaXYgaWQ9Im1haW4tcGFuZWxz
IiB0YWJpbmRleD0iMCIgc3BlbGxjaGVjaz0iZmFsc2UiPjwvZGl2PgotICAgICAgICA8ZGl2IGlk
PSJtYWluLXN0YXR1cy1iYXIiIGNsYXNzPSJzdGF0dXMtYmFyIj48ZGl2IGlkPSJhbmNob3JlZC1z
dGF0dXMtYmFyLWl0ZW1zIj48YnV0dG9uIGlkPSJkb2NrLXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9
InN0YXR1cy1iYXItaXRlbSB0b2dnbGVkIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBj
bGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjb25zb2xlLXN0
YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSI+PGRpdiBjbGFzcz0iZ2x5cGgi
PjwvZGl2PjxkaXYgY2xhc3M9ImdseXBoIHNoYWRvdyI+PC9kaXY+PC9idXR0b24+PGJ1dHRvbiBp
ZD0iY2hhbmdlcy1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0gaGlkZGVu
Ij48L2J1dHRvbj48ZGl2IGlkPSJjb3VudC1pdGVtcyI+PGRpdiBpZD0iY2hhbmdlcy1jb3VudCIg
Y2xhc3M9ImhpZGRlbiI+PC9kaXY+PGRpdiBpZD0iZXJyb3Itd2FybmluZy1jb3VudCIgY2xhc3M9
ImhpZGRlbiI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9Im1haW4t
c3RhdHVzLWJhciIgY2xhc3M9InN0YXR1cy1iYXIiPjxkaXYgaWQ9ImFuY2hvcmVkLXN0YXR1cy1i
YXItaXRlbXMiPjxidXR0b24gaWQ9ImRvY2stc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVz
LWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGggc2hh
ZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJjb25zb2xlLXN0YXR1cy1iYXItaXRlbSIg
Y2xhc3M9InN0YXR1cy1iYXItaXRlbSI+PGRpdiBjbGFzcz0iZ2x5cGgiPjwvZGl2PjxkaXYgY2xh
c3M9ImdseXBoIHNoYWRvdyI+PC9kaXY+PC9idXR0b24+PGJ1dHRvbiBpZD0iY2hhbmdlcy1zdGF0
dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0gaGlkZGVuIj48L2J1dHRvbj48ZGl2
IGlkPSJjb3VudC1pdGVtcyI+PGRpdiBpZD0iY2hhbmdlcy1jb3VudCIgY2xhc3M9ImhpZGRlbiI+
PC9kaXY+PGRpdiBpZD0iZXJyb3Itd2FybmluZy1jb3VudCIgY2xhc3M9ImhpZGRlbiI+PC9kaXY+
PC9kaXY+PC9kaXY+PC9kaXY+CiAgICAgPC9kaXY+CiAgICAgPGRpdiBpZD0iZHJhd2VyIj4KICAg
ICAgICAgPGRpdiBpZD0iY29uc29sZS12aWV3Ij48ZGl2IGlkPSJjb25zb2xlLW1lc3NhZ2VzIj48
ZGl2IGlkPSJjb25zb2xlLXByb21wdCIgc3BlbGxjaGVjaz0iZmFsc2UiPjxicj48L2Rpdj48L2Rp
dj48L2Rpdj4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IGI2
MzJjMmMuLmI2MDg1NDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwpAQCAtNzIsNiArNzIsOSBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogICAgIHJlc291cmNlVVJM
TWFwOiB7fSwKICAgICBjb29raWVEb21haW5zOiB7fSwKICAgICBtaXNzaW5nTG9jYWxpemVkU3Ry
aW5nczoge30sCisgICAgYW5pbWF0aW9uczoge30sCisgICAgbmV4dEFuaW1hdGlvbktleTogMCwK
KyAgICBwZW5kaW5nRGlzcGF0Y2hlczogMCwKIAogICAgIGdldCBwcmV2aW91c0ZvY3VzRWxlbWVu
dCgpCiAgICAgewpAQCAtMTcwLDYgKzE3Myw4IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAKICAg
ICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJzdG9yYWdlIikgPT09IC0xICYmIGhpZGRl
blBhbmVscy5pbmRleE9mKCJkYXRhYmFzZXMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlzLnBh
bmVscy5zdG9yYWdlID0gbmV3IFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwoKTsKKyAgICAgICAg
aWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJjb25zb2xlIikgPT09IC0xKQorICAgICAgICAgICAg
dGhpcy5wYW5lbHMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsKCk7CiAg
ICAgfSwKIAogICAgIF9sb2FkUHJlZmVyZW5jZXM6IGZ1bmN0aW9uKCkKQEAgLTM5Niw3ICs0MDEs
NiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIGRvY3VtZW50LmJvZHku
YWRkU3R5bGVDbGFzcygicG9ydC0iICsgcG9ydCk7CiAKICAgICB0aGlzLl9sb2FkUHJlZmVyZW5j
ZXMoKTsKLSAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaGVzID0gMDsKIAogICAgIHRoaXMuZHJhd2Vy
ID0gbmV3IFdlYkluc3BlY3Rvci5EcmF3ZXIoKTsKICAgICB0aGlzLmNvbnNvbGUgPSBuZXcgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVWaWV3KHRoaXMuZHJhd2VyKTsKQEAgLTUzNSw2ICs1MzksNyBAQCBX
ZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24oZXZlbnQpCiB7CiAgICAgaWYgKHRo
aXMuY3VycmVudFBhbmVsICYmIHRoaXMuY3VycmVudFBhbmVsLnJlc2l6ZSkKICAgICAgICAgdGhp
cy5jdXJyZW50UGFuZWwucmVzaXplKCk7CisgICAgdGhpcy5kcmF3ZXIucmVzaXplKCk7CiB9CiAK
IFdlYkluc3BlY3Rvci53aW5kb3dGb2N1c2VkID0gZnVuY3Rpb24oZXZlbnQpCkBAIC02MjQsNiAr
NjI5LDkgQEAgV2ViSW5zcGVjdG9yLmRvY3VtZW50S2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KQog
CiAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5SWRlbnRpZmllcikgewogICAgICAgICAgICAgY2Fz
ZSAiVSswMDFCIjogLy8gRXNjYXBlIGtleQorICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyYXdl
ci5mdWxsUGFuZWwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAg
ICAgIHRoaXMuZHJhd2VyLnZpc2libGUgPSAhdGhpcy5kcmF3ZXIudmlzaWJsZTsKICAgICAgICAg
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNzQ5LDEwICs3NTcsMTkgQEAgV2ViSW5zcGVjdG9yLm1haW5Db3B5ID0gZnVuY3Rpb24oZXZl
bnQpCiAgICAgICAgIHRoaXMuY3VycmVudFBhbmVsLmhhbmRsZUNvcHlFdmVudChldmVudCk7CiB9
CiAKLVdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUgPSBmdW5jdGlvbihhbmltYXRpb25zLCBkdXJh
dGlvbiwgY2FsbGJhY2ssIGNvbXBsZXRlKQorV2ViSW5zcGVjdG9yLmNhbmNlbEFuaW1hdGlvbiA9
IGZ1bmN0aW9uKGtleSkKK3sKKyAgICBjbGVhclRpbWVvdXQodGhpcy5hbmltYXRpb25zW2tleV0p
OworICAgIGRlbGV0ZSB0aGlzLmFuaW1hdGlvbnNba2V5XTsKK30KKworV2ViSW5zcGVjdG9yLmFu
aW1hdGVTdHlsZSA9IGZ1bmN0aW9uKGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxsYmFjaywgY29t
cGxldGUsIGtleSkKIHsKLSAgICBpZiAoY29tcGxldGUgPT09IHVuZGVmaW5lZCkKKyAgICBpZiAo
dHlwZW9mIGNvbXBsZXRlID09PSAidW5kZWZpbmVkIikKICAgICAgICAgY29tcGxldGUgPSAwOwor
ICAgIGlmICh0eXBlb2Yga2V5ID09PSAidW5kZWZpbmVkIikKKyAgICAgICAga2V5ID0gV2ViSW5z
cGVjdG9yLm5leHRBbmltYXRpb25LZXkrKzsKKwogICAgIHZhciBzbGljZSA9ICgxMDAwIC8gMzAp
OyAvLyAzMCBmcmFtZXMgcGVyIHNlY29uZAogCiAgICAgdmFyIGRlZmF1bHRVbml0ID0gInB4IjsK
QEAgLTgxOSw5ICs4MzYsMTQgQEAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZSA9IGZ1bmN0aW9u
KGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxsYmFjaywgY29tcGxldGUpCiAgICAgfQogCiAgICAg
aWYgKGNvbXBsZXRlIDwgZHVyYXRpb24pCi0gICAgICAgIHNldFRpbWVvdXQoV2ViSW5zcGVjdG9y
LmFuaW1hdGVTdHlsZSwgc2xpY2UsIGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxsYmFjaywgY29t
cGxldGUgKyBzbGljZSk7Ci0gICAgZWxzZSBpZiAoY2FsbGJhY2spCi0gICAgICAgIGNhbGxiYWNr
KCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5hbmltYXRpb25zW2tleV0gPSBzZXRUaW1lb3V0KFdl
Ykluc3BlY3Rvci5hbmltYXRlU3R5bGUsIHNsaWNlLCBhbmltYXRpb25zLCBkdXJhdGlvbiwgY2Fs
bGJhY2ssIGNvbXBsZXRlICsgc2xpY2UsIGtleSk7CisgICAgZWxzZSB7CisgICAgICAgIGRlbGV0
ZSBXZWJJbnNwZWN0b3IuYW5pbWF0aW9uc1trZXldOworICAgICAgICBpZiAoY2FsbGJhY2spCisg
ICAgICAgICAgICBjYWxsYmFjaygpOworICAgIH0KKworICAgIHJldHVybiBrZXk7CiB9CiAKIFdl
Ykluc3BlY3Rvci51cGRhdGVTZWFyY2hMYWJlbCA9IGZ1bmN0aW9uKCkKQEAgLTg0MSw2ICs4NjMs
NyBAQCBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTGFiZWwgPSBmdW5jdGlvbigpCiBXZWJJbnNw
ZWN0b3IudG9nZ2xlQXR0YWNoID0gZnVuY3Rpb24oKQogewogICAgIHRoaXMuYXR0YWNoZWQgPSAh
dGhpcy5hdHRhY2hlZDsKKyAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVj
dG9yLnRvb2xiYXJEcmFnU3RhcnQgPSBmdW5jdGlvbihldmVudCkKQEAgLTk2NCw2ICs5ODcsMTEg
QEAgV2ViSW5zcGVjdG9yLnNob3dTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5j
dXJyZW50UGFuZWwgPSB0aGlzLnBhbmVscy5zdG9yYWdlOwogfQogCitXZWJJbnNwZWN0b3Iuc2hv
d0NvbnNvbGVQYW5lbCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLmN1cnJlbnRQYW5lbCA9IHRo
aXMucGFuZWxzLmNvbnNvbGU7Cit9CisKIFdlYkluc3BlY3Rvci5hZGRSZXNvdXJjZSA9IGZ1bmN0
aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiB7CiAgICAgdmFyIHJlc291cmNlID0gbmV3IFdlYklu
c3BlY3Rvci5SZXNvdXJjZSgKQEAgLTEwNTQsNyArMTA4Miw3IEBAIFdlYkluc3BlY3Rvci51cGRh
dGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiAgICAgICAgICAgICBy
ZXNvdXJjZS5yZXNwb25zZVJlY2VpdmVkVGltZSA9IHBheWxvYWQucmVzcG9uc2VSZWNlaXZlZFRp
bWU7CiAgICAgICAgIGlmIChwYXlsb2FkLmVuZFRpbWUpCiAgICAgICAgICAgICByZXNvdXJjZS5l
bmRUaW1lID0gcGF5bG9hZC5lbmRUaW1lOwotICAgICAgICAKKwogICAgICAgICBpZiAocGF5bG9h
ZC5sb2FkRXZlbnRUaW1lKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvYWRFdmVudFRpbWUgaXMg
Zm9yIHRoZSBtYWluIHJlc291cmNlLCBhbmQgd2Ugd2FudCB0byBzaG93IGl0CiAgICAgICAgICAg
ICAvLyBmb3IgYWxsIHJlc291cmNlcyBvbiB0aGlzIHBhZ2UuIFRoaXMgbWVhbnMgd2Ugd2FudCB0
byBzZXQgaXQgYXMgYSBtZW1iZXIKQEAgLTEwNjIsNyArMTA5MCw3IEBAIFdlYkluc3BlY3Rvci51
cGRhdGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiAgICAgICAgICAg
ICBpZiAodGhpcy5wYW5lbHMucmVzb3VyY2VzKQogICAgICAgICAgICAgICAgIHRoaXMucGFuZWxz
LnJlc291cmNlcy5tYWluUmVzb3VyY2VMb2FkVGltZSA9IHBheWxvYWQubG9hZEV2ZW50VGltZTsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocGF5bG9hZC5kb21Db250ZW50RXZl
bnRUaW1lKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGRvbUNvbnRlbnRFdmVudFRpbWUgaXMgZm9y
IHRoZSBtYWluIHJlc291cmNlLCBzbyBpdCBzaG91bGQgZ28gaW4KICAgICAgICAgICAgIC8vIHRo
ZSByZXNvdXJjZXMgcGFuZWwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgYXMgYWJvdmUuCkBAIC0xMjQ4
LDIzICsxMjc2LDIzIEBAIFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbihtZXNzYWdlKQogewog
ICAgIC8vIHJlbWVtYmVyICd0aGlzJyBmb3Igc2V0SW50ZXJ2YWwoKSBjYWxsYmFjawogICAgIHZh
ciBzZWxmID0gdGhpczsKLSAgICAKKwogICAgIC8vIHJldHVybiBpbmRpY2F0aW9uIGlmIHdlIGNh
biBhY3R1YWxseSBsb2cgYSBtZXNzYWdlCiAgICAgZnVuY3Rpb24gaXNMb2dBdmFpbGFibGUoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSAmJiBXZWJJ
bnNwZWN0b3IuT2JqZWN0UHJveHkgJiYgc2VsZi5jb25zb2xlOwogICAgIH0KLSAgICAKKwogICAg
IC8vIGZsdXNoIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIG1lc3NhZ2VzCiAgICAgZnVuY3Rpb24gZmx1
c2hRdWV1ZSgpCiAgICAgewogICAgICAgICB2YXIgcXVldWVkID0gV2ViSW5zcGVjdG9yLmxvZy5x
dWV1ZWQ7Ci0gICAgICAgIGlmICghcXVldWVkKSAKKyAgICAgICAgaWYgKCFxdWV1ZWQpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKKwogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHF1ZXVlZC5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIGxvZ01lc3NhZ2UocXVldWVkW2ld
KTsKLSAgICAgICAgCisKICAgICAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5sb2cucXVldWVkOwog
ICAgIH0KIApAQCAtMTI3NCwyNiArMTMwMiwyNiBAQCBXZWJJbnNwZWN0b3IubG9nID0gZnVuY3Rp
b24obWVzc2FnZSkKICAgICB7CiAgICAgICAgIGlmICghaXNMb2dBdmFpbGFibGUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGNsZWFySW50ZXJ2YWwoV2Vi
SW5zcGVjdG9yLmxvZy5pbnRlcnZhbCk7CiAgICAgICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IubG9n
LmludGVydmFsOwotICAgICAgICAKKwogICAgICAgICBmbHVzaFF1ZXVlKCk7CiAgICAgfQotICAg
IAorCiAgICAgLy8gYWN0dWFsbHkgbG9nIHRoZSBtZXNzYWdlCiAgICAgZnVuY3Rpb24gbG9nTWVz
c2FnZShtZXNzYWdlKQogICAgIHsKICAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gMTsKICAgICAg
ICAgaWYgKG1lc3NhZ2UgPT0gV2ViSW5zcGVjdG9yLmxvZy5sYXN0TWVzc2FnZSkKICAgICAgICAg
ICAgIHJlcGVhdENvdW50ID0gV2ViSW5zcGVjdG9yLmxvZy5yZXBlYXRDb3VudCArIDE7Ci0gICAg
CisKICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5sYXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAg
ICAgIFdlYkluc3BlY3Rvci5sb2cucmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsKLSAgICAgICAg
CisKICAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2UgZXhwZWN0cyBhIHByb3h5IG9iamVjdAogICAg
ICAgICBtZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eShudWxsLCBbXSwgMCwg
bWVzc2FnZSwgZmFsc2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBwb3N0IHRoZSBtZXNzYWdl
CiAgICAgICAgIHZhciBtc2cgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlKAogICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3RoZXIs
CkBAIC0xMzA0LDIwICsxMzMyLDIwIEBAIFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbihtZXNz
YWdlKQogICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgIHJlcGVhdENvdW50LAogICAgICAg
ICAgICAgbWVzc2FnZSk7Ci0gICAgCisKICAgICAgICAgc2VsZi5jb25zb2xlLmFkZE1lc3NhZ2Uo
bXNnKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBpZiB3ZSBjYW4ndCBsb2cgdGhlIG1lc3NhZ2Us
IHF1ZXVlIGl0CiAgICAgaWYgKCFpc0xvZ0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIGlmICghV2Vi
SW5zcGVjdG9yLmxvZy5xdWV1ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nLnF1ZXVl
ZCA9IFtdOwotICAgICAgICAgICAgCisKICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQu
cHVzaChtZXNzYWdlKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IubG9n
LmludGVydmFsKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5pbnRlcnZhbCA9IHNldElu
dGVydmFsKGZsdXNoUXVldWVJZkF2YWlsYWJsZSwgMTAwMCk7Ci0gICAgICAgIAorCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE0NTcsNyArMTQ4NSw4IEBAIFdlYkluc3BlY3Rvci5saW5r
aWZ5U3RyaW5nQXNGcmFnbWVudCA9IGZ1bmN0aW9uKHN0cmluZykKICAgICByZXR1cm4gY29udGFp
bmVyOwogfQogCi1XZWJJbnNwZWN0b3Iuc2hvd1Byb2ZpbGVGb3JVUkwgPSBmdW5jdGlvbih1cmwp
IHsKK1dlYkluc3BlY3Rvci5zaG93UHJvZmlsZUZvclVSTCA9IGZ1bmN0aW9uKHVybCkKK3sKICAg
ICBXZWJJbnNwZWN0b3Iuc2hvd1Byb2ZpbGVzUGFuZWwoKTsKICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLnByb2ZpbGVzLnNob3dQcm9maWxlRm9yVVJMKHVybCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="25291"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43558</attachid>
            <date>2009-11-19 23:29:25 -0800</date>
            <delta_ts>2009-11-20 07:18:31 -0800</delta_ts>
            <desc>[PATCH] Console Panel (Even Better)</desc>
            <filename>console_better.patch</filename>
            <type>text/plain</type>
            <size>35725</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmZiOTNjYi4uZWUwNmQ4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw3MSBAQAogMjAwOS0xMS0xOSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkcyBhIENvbnNvbGUgUGFuZWwsIHdoaWNoIGFsbG93cyBmb3IgYSBG
dWxsIHNpemUgQ29uc29sZS4gVGhpcworICAgICAgICBleHRlbmRzIHRoZSBEcmF3ZXIgdG8gdGhl
IHNpemUgb2YgYSBQYW5lbC4gVGhpcyBhbHNvIGZpeGVzIHByZXZpb3VzCisgICAgICAgIHJlc2l6
ZSBpc3N1ZXMgd2l0aCB0aGUgRHJhd2VyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlUGFuZWwuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS50b29s
YmFySXRlbUNsYXNzLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9EcmF3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNldCB2aXNpYmxlVmlldyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5nZXQgc2F2ZWRIZWlnaHQpOiBzYXZlIHRoZSBo
ZWlnaHQgb2YgdGhlIHZhcmlhYmxlIGNvbnNvbGUuCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJh
d2VyLnByb3RvdHlwZS5zZXQgc2F2ZWRIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUuc2hvdy5hbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3
ZXIucHJvdG90eXBlLmhpZGUuYW5pbWF0aW9uRmluaXNoZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkRyYXdlci5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2Vy
LnByb3RvdHlwZS5yZXNpemUpOiByZXNpemUgYXBwcm9wcmlhdGVseSBpZiBmdWxsL25vbi1mdWxs
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5lbnRlclBhbmVsTW9kZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5leGl0UGFuZWxNb2RlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9jYW5jZWxBbmltYXRpb25J
Zk5lZWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fYW5pbWF0
ZURyYXdlckhlaWdodC5hbmltYXRpb25GaW5pc2hlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RHJhd2VyLnByb3RvdHlwZS5fYW5pbWF0ZURyYXdlckhlaWdodCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fYW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX3N0YXJ0U3RhdHVzQmFyRHJhZ2dpbmcpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuX3N0YXR1c0JhckRyYWdnaW5nKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9lbmRTdGF0dXNCYXJEcmFn
Z2luZyk6CisKKyAgICAgICAgTWlzY2VsbGFuZW91cyBjaGFuZ2VzIGFuZCBjbGVhbnVwLgorCisg
ICAgICAgICogRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOiAiQ29uc29sZSIgdG9v
bGJhciB0aXRsZS4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
OiByZW1vdmVkIHVubmVjZXNzYXJ5IGVsZW1lbnQgcmVvcmRlcmluZyAgCisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29uc29sZUljb24ucG5nOiBhZGRlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3M6IGFkZGVkIGljb24uCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fY3JlYXRl
UGFuZWxzKTogY3JlYXRlIGNvbnNvbGUgcGFuZWwKKyAgICAgICAgKFdlYkluc3BlY3Rvci53aW5k
b3dSZXNpemUpOiByZXNpemUgZHJhd2VyIGlmIG5lY2Vzc2FyeQorICAgICAgICAoV2ViSW5zcGVj
dG9yLmRvY3VtZW50S2V5RG93bik6IGVzYyBzaG91bGQgbm90IHRvZ2dsZSB0aGUgY29uc29sZSB3
aGVuIGluIHBhbmVsIG1vZGUKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUpOiBz
dGFydCBhbmltYXRpb24gaW50ZXJ2YWwsIHJldHVybnMgdGhlIGludGVydmFsIGtleQorICAgICAg
ICAoV2ViSW5zcGVjdG9yLnRvZ2dsZUF0dGFjaCk6IHJlc2l6ZSBkcmF3ZXIgaWYgbmVjZXNzYXJ5
CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGVQYW5lbCk6IHJlc3RvcmUgdGhlIHBh
bmVsIHdoZW4gdGhlIGluc3BlY3RvciByZXN0YXJ0cworICAgICAgICAoV2ViSW5zcGVjdG9yLnNo
b3dQcm9maWxlRm9yVVJMKTogc3R5bGUgZml4CisKKyAgICAgICAgUmVzdG9yZSB0aGUgcGFuZWwg
d2hlbiB0aGUgaW5zcGVjdG9yIHJlc3RhcnRzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0V2luZG93VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpzcGVjaWFsUGFuZWxGb3JKU05hbWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6c2hv
d1BhbmVsKToKKworICAgICAgICBCdWlsZCBmaWxlcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6CisKKzIwMDktMTEtMTkgIEpvc2VwaCBQZWNv
cmFybyAgPGpvZXBlY2tAd2Via2l0Lm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVzeW5jIFJlc291cmNlcyBCYWNr
ZW5kIGFuZCBGcm9udGVuZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5q
cwppbmRleCBiNmIwNWM1NmU4N2E0ODgyNmFiYjYzMGEyMjIyMmEzYjI3OGNkMTQwLi5lZjk4MWM3
OGQ4NTE2MzFjYzBiYzg5NWY1MmY2YmM0YmVhNDk4MGE0IDEwMDY0NApHSVQgYmluYXJ5IHBhdGNo
CmRlbHRhIDYwCnpjbVpwPCFGY1RrO3w3K1QkPiVzIUNTTVJ7KGFLe2VYMkBzQVZNdHxBVnUpbz5W
NlgqWkI/ZjFwN195OHQwflo0VApEOXNDV34KCmRlbHRhIDkKUWNtY2IxZ1IkaVg7fDcpLTAyblI9
RWRUJWoKCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDhjNTFhNjAuLjZjNDk4ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjE2LDYgKzM2MTYsNyBAQAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ2hhbmdlc1ZpZXcuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0Nvb2tpZUl0ZW1zVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9EYXRhYmFzZS5qcycsCkBAIC0zNjg0LDYgKzM2ODUsNyBAQAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2NsZWFyQ29uc29sZUJ1dHRvbkdseXBoLnBuZycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY2xvc2VCdXR0b25zLnBuZycs
CiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29uc29sZUJ1dHRvbkds
eXBoLnBuZycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29uc29s
ZUljb24ucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb29r
aWUucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9kYXRhYmFz
ZS5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2RhdGFiYXNl
VGFibGUucG5nJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDg1YzVm
NmUuLjU5MWQzNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDIy
ODIsNiArNDIyODIsOSBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxDb25zb2xlUGFuZWwuanMiCisJCQkJ
CT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
Q29uc29sZVZpZXcuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDkyMGMzZjAuLjUyNDM2ZWUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0zMTUsMTAgKzMxNSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUsIGJv
b2wgYXR0YWNoZWQpCiAgICAgICAgIHNldEF0dGFjaGVkV2luZG93KGF0dGFjaGVkKTsKICAgICAg
ICAgcG9wdWxhdGVTY3JpcHRPYmplY3RzKCk7CiAKLSAgICAgICAgLy8gQ29uc29sZSBwYW5lbCBp
cyBpbXBsZW1lbnRlZCBhcyBhICdmYXN0IHZpZXcnLCBzbyB0aGVyZSBzaG91bGQgYmUKLSAgICAg
ICAgLy8gcmVhbCBwYW5lbCBvcGVuZWQgYWxvbmcgd2l0aCBpdC4KLSAgICAgICAgYm9vbCBzaG93
Q29uc29sZSA9IG1fc2hvd0FmdGVyVmlzaWJsZSA9PSBDb25zb2xlUGFuZWw7Ci0gICAgICAgIGlm
IChtX3Nob3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsIHx8IHNob3dDb25zb2xlKSB7Cisg
ICAgICAgIGlmIChtX3Nob3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsKSB7CiAgICAgICAg
ICAgU2V0dGluZyBsYXN0QWN0aXZlUGFuZWxTZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZlUGFu
ZWxTZXR0aW5nTmFtZSk7CiAgICAgICAgICAgaWYgKGxhc3RBY3RpdmVQYW5lbFNldHRpbmcudHlw
ZSgpID09IFNldHRpbmc6OlN0cmluZ1R5cGUpCiAgICAgICAgICAgICAgIG1fc2hvd0FmdGVyVmlz
aWJsZSA9IHNwZWNpYWxQYW5lbEZvckpTTmFtZShsYXN0QWN0aXZlUGFuZWxTZXR0aW5nLnN0cmlu
ZygpKTsKQEAgLTMzMyw4ICszMzAsNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFdp
bmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQogICAgICAgICAgICAgZW5h
YmxlRGVidWdnZXIoKTsKICNlbmRpZgogICAgICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNp
YmxlKTsKLSAgICAgICAgaWYgKHNob3dDb25zb2xlKQotICAgICAgICAgICAgc2hvd1BhbmVsKENv
bnNvbGVQYW5lbCk7CiAgICAgfSBlbHNlIHsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgICAgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVi
dWdnZXIgZW5hYmxlZCwKQEAgLTE4MTEsNiArMTgwNiw4IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6
OlNwZWNpYWxQYW5lbHMgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3BlY2lhbFBhbmVsRm9ySlNOYW1l
KGNvCiAgICAgICAgIHJldHVybiBQcm9maWxlc1BhbmVsOwogICAgIGVsc2UgaWYgKHBhbmVsTmFt
ZSA9PSAic3RvcmFnZSIgfHwgcGFuZWxOYW1lID09ICJkYXRhYmFzZXMiKQogICAgICAgICByZXR1
cm4gU3RvcmFnZVBhbmVsOworICAgIGVsc2UgaWYgKHBhbmVsTmFtZSA9PSAiY29uc29sZSIpCisg
ICAgICAgIHJldHVybiBDb25zb2xlUGFuZWw7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gRWxl
bWVudHNQYW5lbDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRl
eCA2OTQyZDAyLi42ZTAyZGIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2hvd1BhbmVs
KGludCBwYW5lbCkKICAgICBjb25zdCBjaGFyKiBzaG93RnVuY3Rpb25OYW1lOwogICAgIHN3aXRj
aCAocGFuZWwpIHsKICAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFu
ZWw6Ci0gICAgICAgICAgICBzaG93RnVuY3Rpb25OYW1lID0gInNob3dDb25zb2xlIjsKKyAgICAg
ICAgICAgIHNob3dGdW5jdGlvbk5hbWUgPSAic2hvd0NvbnNvbGVQYW5lbCI7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpFbGVtZW50c1BhbmVs
OgogICAgICAgICAgICAgc2hvd0Z1bmN0aW9uTmFtZSA9ICJzaG93RWxlbWVudHNQYW5lbCI7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI5MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcwpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Db25z
b2xlUGFuZWwgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLlBhbmVsLmNhbGwodGhp
cyk7Cit9CisKK1dlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlID0geworICAgIHRv
b2xiYXJJdGVtQ2xhc3M6ICJjb25zb2xlIiwKKworICAgIGdldCB0b29sYmFySXRlbUxhYmVsKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnNvbGUiKTsK
KyAgICB9LAorCisgICAgc2hvdzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLlBhbmVsLnByb3RvdHlwZS5zaG93LmNhbGwodGhpcyk7CisKKyAgICAgICAgdGhpcy5wcmV2
aW91c0NvbnNvbGVTdGF0ZSA9IFdlYkluc3BlY3Rvci5kcmF3ZXIuc3RhdGU7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5kcmF3ZXIuZW50ZXJQYW5lbE1vZGUoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LnNob3dDb25zb2xlKCk7CisgICAgfSwKKworICAgIGhpZGU6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOworCisg
ICAgICAgIGlmICh0aGlzLnByZXZpb3VzQ29uc29sZVN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJh
d2VyLlN0YXRlLkhpZGRlbikgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci52aXNp
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJhd2VyLmZ1bGxQYW5lbCA9
IGZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIu
ZXhpdFBhbmVsTW9kZSgpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwppbmRleCBmMDNjNjQ3Li45ZjAw
NmUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcu
anMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC01
Nyw5ICs1Nyw2IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldyA9IGZ1bmN0aW9uKGRyYXdlcikK
ICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNob3cgY29uc29sZS4iKTsKICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24uYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uQ2xpY2tlZC5iaW5k
KHRoaXMpLCBmYWxzZSk7CiAKLSAgICB2YXIgYW5jaG9yZWRTdGF0dXNCYXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOwotICAgIGFuY2hvcmVk
U3RhdHVzQmFyLmFwcGVuZENoaWxkKHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbik7Ci0gICAgCiAg
ICAgLy8gV2lsbCBob2xkIHRoZSBsaXN0IG9mIGZpbHRlciBlbGVtZW50cwogICAgIHRoaXMuZmls
dGVyQmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLWZpbHRlciIp
OwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMKaW5kZXggMWI1MGY5MS4u
NjY3NzBhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCkBAIC03LDEzICs3
LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgogICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMzEsNiArMzEsMTIgQEAgV2ViSW5zcGVjdG9yLkRy
YXdlciA9IGZ1bmN0aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMsIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkcmF3ZXIiKSk7CiAKKyAgICB0aGlzLnNhdmVkSGVpZ2h0
ID0gMDsKKyAgICB0aGlzLnN0YXRlID0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5IaWRkZW47
CisgICAgdGhpcy5mdWxsUGFuZWwgPSBmYWxzZTsKKworICAgIHRoaXMubWFpbkVsZW1lbnQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpOworICAgIHRoaXMudG9vbGJhckVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9vbGJhciIpOwogICAgIHRoaXMubWFpblN0YXR1
c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKTsKICAgICB0
aGlzLm1haW5TdGF0dXNCYXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fc3Rh
cnRTdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICB0aGlzLnZpZXdTdGF0
dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0YXR1cy1iYXIt
aXRlbXMiKTsKQEAgLTQ1LDYgKzUxLDggQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUg
PSB7CiAgICAgc2V0IHZpc2libGVWaWV3KHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fdmlz
aWJsZVZpZXcgPT09IHgpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5m
dWxsUGFuZWwpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgdGhpcy52aXNp
YmxlID0gIXRoaXMudmlzaWJsZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
NjQsNiArNzIsMTcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KICAgICB9LAogCisgICAgZ2V0IHNhdmVkSGVpZ2h0KCkKKyAgICB7CisgICAgICAgIHZhciBo
ZWlnaHQgPSB0aGlzLl9zYXZlZEhlaWdodCB8fCB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0Owor
ICAgICAgICByZXR1cm4gTnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNv
bnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMubWFpbkVsZW1lbnQudG90YWxP
ZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICB9LAorCisgICAg
c2V0IHNhdmVkSGVpZ2h0KHgpCisgICAgeworICAgICAgICB0aGlzLl9zYXZlZEhlaWdodCA9IHg7
CisgICAgfSwKKwogICAgIHNob3dWaWV3OiBmdW5jdGlvbih2aWV3KQogICAgIHsKICAgICAgICAg
aWYgKCF0aGlzLnZpc2libGUgfHwgdGhpcy52aXNpYmxlVmlldyAhPT0gdmlldykKQEAgLTg1LDE1
ICsxMDQsMTYgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRv
Y3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcygiZHJhd2VyLXZpc2libGUiKTsKIAogICAgICAgICB2
YXIgYW5jaG9yZWRJdGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0
dXMtYmFyLWl0ZW1zIik7Ci0KKyAgICAgICAgdmFyIGhlaWdodCA9ICh0aGlzLmZ1bGxQYW5lbCA/
IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMudG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0IDog
dGhpcy5zYXZlZEhlaWdodCk7CiAgICAgICAgIHZhciBhbmltYXRpb25zID0gWwotICAgICAgICAg
ICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIiksIGVuZDoge2JvdHRv
bTogdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IHRo
aXMuZWxlbWVudCwgZW5kOiB7aGVpZ2h0OiBoZWlnaHR9fSwKKyAgICAgICAgICAgIHtlbGVtZW50
OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IGhlaWdodH19
LAogICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0
YXR1cy1iYXIiKSwgc3RhcnQ6IHsicGFkZGluZy1sZWZ0IjogYW5jaG9yZWRJdGVtcy5vZmZzZXRX
aWR0aCAtIDF9LCBlbmQ6IHsicGFkZGluZy1sZWZ0IjogMH19LAogICAgICAgICAgICAge2VsZW1l
bnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1pdGVt
cyIpLCBzdGFydDoge29wYWNpdHk6IDB9LCBlbmQ6IHtvcGFjaXR5OiAxfX0KICAgICAgICAgXTsK
IAotICAgICAgICB2YXIgY29uc29sZVN0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJkcmF3ZXItc3RhdHVzLWJhciIpOwotICAgICAgICBjb25zb2xlU3RhdHVzQmFyLmluc2VydEJl
Zm9yZShhbmNob3JlZEl0ZW1zLCBjb25zb2xlU3RhdHVzQmFyLmZpcnN0Q2hpbGQpOworICAgICAg
ICB2YXIgZHJhd2VyU3RhdHVzQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlci1z
dGF0dXMtYmFyIik7CisgICAgICAgIGRyYXdlclN0YXR1c0Jhci5pbnNlcnRCZWZvcmUoYW5jaG9y
ZWRJdGVtcywgZHJhd2VyU3RhdHVzQmFyLmZpcnN0Q2hpbGQpOwogCiAgICAgICAgIGZ1bmN0aW9u
IGFuaW1hdGlvbkZpbmlzaGVkKCkKICAgICAgICAgewpAQCAtMTAyLDkgKzEyMiwxMSBAQCBXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICh0aGlzLnZpc2li
bGVWaWV3LmFmdGVyU2hvdykKICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmFmdGVy
U2hvdygpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2FuaW1hdGluZzsKKyAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLmN1cnJlbnRBbmltYXRpb25JbnRlcnZhbDsKKyAgICAgICAgICAgIHRoaXMu
c3RhdGUgPSAodGhpcy5mdWxsUGFuZWwgPyBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkZ1bGwg
OiBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxlKTsKICAgICAgICAgfQogCi0gICAg
ICAgIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgd2luZG93LmV2ZW50ICYm
IHdpbmRvdy5ldmVudC5zaGlmdEtleSA/IDIwMDAgOiAyNTAsIGFuaW1hdGlvbkZpbmlzaGVkLmJp
bmQodGhpcykpOworICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb25JbnRlcnZhbCA9IFdlYklu
c3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgdGhpcy5fYW5pbWF0aW9uRHVyYXRpb24o
KSwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIGhpZGU6IGZ1
bmN0aW9uKCkKQEAgLTExMyw3ICsxMzUsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5w
cm90b3R5cGUuaGlkZS5jYWxsKHRoaXMpOwotICAgICAgICAKKwogICAgICAgICBpZiAodGhpcy52
aXNpYmxlVmlldykKICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZSgpOwogCkBAIC0x
MjQsOSArMTQ2LDkgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgdmFyIGFuY2hvcmVkSXRlbXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5jaG9yZWQt
c3RhdHVzLWJhci1pdGVtcyIpOwogCi0gICAgICAgIC8vIFRlbXBvcmFsbHkgc2V0IHByb3BlcnRp
ZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5pbWF0aW9uIHZhbHVlcyBzbyBwYW5l
bHMKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkgc2V0IHByb3BlcnRpZXMgYW5kIGNsYXNzZXMgdG8g
bWltaWMgdGhlIHBvc3QtYW5pbWF0aW9uIHZhbHVlcyBzbyBwYW5lbHMKICAgICAgICAgLy8gbGlr
ZSBFbGVtZW50cyBpbiB0aGVpciB1cGRhdGVTdGF0dXNCYXJJdGVtcyBjYWxsIHdpbGwgc2l6ZSB0
aGluZ3MgdG8gZml0IHRoZSBmaW5hbCBsb2NhdGlvbi4KLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWxl
ZnQiLCAoYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDEpICsgInB4Iik7CisgICAgICAgIHRo
aXMubWFpblN0YXR1c0Jhci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1sZWZ0IiwgKGFuY2hv
cmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxKSArICJweCIpOwogICAgICAgICBkb2N1bWVudC5ib2R5
LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12aXNpYmxlIik7CiAgICAgICAgIGlmICgidXBkYXRl
U3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwpCiAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsLnVwZGF0ZVN0YXR1c0Jhckl0ZW1zKCk7CkBAIC0x
NDUsOSArMTY3LDkwIEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgbWFpblN0YXR1c0Jhci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1sZWZ0Iik7
CiAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12aXNp
YmxlIik7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuY3VycmVudEFuaW1hdGlvbkludGVydmFsOworICAgICAgICAgICAgdGhpcy5z
dGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuOwogICAgICAgICB9CiAKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5kb3cuZXZlbnQg
JiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9uRmluaXNoZWQu
YmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbkludGVydmFsID0gV2Vi
SW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB0aGlzLl9hbmltYXRpb25EdXJhdGlv
bigpLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgcmVzaXpl
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gV2ViSW5zcGVj
dG9yLkRyYXdlci5TdGF0ZS5IaWRkZW4pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIGhlaWdodDsKKyAgICAgICAgdmFyIG1haW5FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm1haW4iKTsKKyAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdlYkluc3BlY3Rvci5E
cmF3ZXIuU3RhdGUuVmFyaWFibGUpIHsKKyAgICAgICAgICAgIGhlaWdodCA9IHBhcnNlSW50KHRo
aXMuZWxlbWVudC5zdHlsZS5oZWlnaHQpOworICAgICAgICAgICAgaGVpZ2h0ID0gTnVtYmVyLmNv
bnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5l
ckhlaWdodCAtIG1haW5FbGVtZW50LnRvdGFsT2Zmc2V0VG9wIC0gUHJlZmVyZW5jZXMubWluQ29u
c29sZUhlaWdodCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaGVpZ2h0ID0gd2luZG93
LmlubmVySGVpZ2h0IC0gdGhpcy50b29sYmFyRWxlbWVudC5vZmZzZXRIZWlnaHQ7CisKKyAgICAg
ICAgbWFpbkVsZW1lbnQuc3R5bGUuYm90dG9tID0gaGVpZ2h0ICsgInB4IjsKKyAgICAgICAgdGhp
cy5lbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfSwKKworICAgIGVu
dGVyUGFuZWxNb2RlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jYW5jZWxBbmlt
YXRpb25JZk5lZWRlZCgpOworICAgICAgICB0aGlzLmZ1bGxQYW5lbCA9IHRydWU7CisgICAgICAg
IAorICAgICAgICBpZiAodGhpcy52aXNpYmxlKSB7CisgICAgICAgICAgICB0aGlzLnNhdmVkSGVp
Z2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgICAgIHZhciBoZWlnaHQg
PSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLnRvb2xiYXJFbGVtZW50Lm9mZnNldEhlaWdodDsK
KyAgICAgICAgICAgIHRoaXMuX2FuaW1hdGVEcmF3ZXJIZWlnaHQoaGVpZ2h0LCBXZWJJbnNwZWN0
b3IuRHJhd2VyLlN0YXRlLkZ1bGwpOworICAgICAgICB9CisgICAgfSwKKworICAgIGV4aXRQYW5l
bE1vZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NhbmNlbEFuaW1hdGlvbklm
TmVlZGVkKCk7CisgICAgICAgIHRoaXMuZnVsbFBhbmVsID0gZmFsc2U7CisKKyAgICAgICAgaWYg
KHRoaXMudmlzaWJsZSkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBhbmltYXRpb24gZ2V0cyBj
YW5jZWxsZWQsIHdlIHdhbnQgdGhlIHN0YXRlIG9mIHRoZSBkcmF3ZXIgdG8gYmUgVmFyaWFibGUs
CisgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSBuZXcgYW5pbWF0aW9uIGNhbid0IGRvIGFuIGlt
bWVkaWF0ZSB0cmFuc2l0aW9uIGJldHdlZW4gSGlkZGVuL0Z1bGwgc3RhdGVzLgorICAgICAgICAg
ICAgdGhpcy5zdGF0ZSA9IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuVmFyaWFibGU7CisgICAg
ICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5zYXZlZEhlaWdodDsKKyAgICAgICAgICAgIHRoaXMu
X2FuaW1hdGVEcmF3ZXJIZWlnaHQoaGVpZ2h0LCBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLlZh
cmlhYmxlKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfY2FuY2VsQW5pbWF0aW9uSWZOZWVk
ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9hbmltYXRpbmcpIHsKKyAg
ICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jdXJyZW50QW5pbWF0aW9uSW50ZXJ2YWwpOwor
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2FuaW1hdGluZzsKKyAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLmN1cnJlbnRBbmltYXRpb25JbnRlcnZhbDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBf
YW5pbWF0ZURyYXdlckhlaWdodDogZnVuY3Rpb24oaGVpZ2h0LCBmaW5hbFN0YXRlKQorICAgIHsK
KyAgICAgICAgdGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKKyAgICAgICAgdmFyIGFuaW1hdGlvbnMg
PSBbCisgICAgICAgICAgICB7ZWxlbWVudDogdGhpcy5lbGVtZW50LCBlbmQ6IHtoZWlnaHQ6IGhl
aWdodH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJt
YWluIiksIGVuZDoge2JvdHRvbTogaGVpZ2h0fX0KKyAgICAgICAgXTsKKworICAgICAgICBmdW5j
dGlvbiBhbmltYXRpb25GaW5pc2hlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9hbmltYXRpbmc7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5jdXJyZW50QW5pbWF0aW9u
SW50ZXJ2YWw7CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gZmluYWxTdGF0ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbkludGVydmFsID0gV2ViSW5zcGVjdG9y
LmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB0aGlzLl9hbmltYXRpb25EdXJhdGlvbigpLCBhbmlt
YXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX2FuaW1hdGlvbkR1cmF0
aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICAvLyBJbW1lZGlhdGUgaWYgZ29pbmcgYmV0
d2VlbiBIaWRkZW4gYW5kIEZ1bGwgaW4gZnVsbCBwYW5lbCBtb2RlCisgICAgICAgIGlmICh0aGlz
LmZ1bGxQYW5lbCAmJiAodGhpcy5zdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5I
aWRkZW4gfHwgdGhpcy5zdGF0ZSA9PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5GdWxsKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJldHVybiAod2luZG93LmV2ZW50ICYm
IHdpbmRvdy5ldmVudC5zaGlmdEtleSA/IDIwMDAgOiAyNTApOwogICAgIH0sCiAKICAgICBfc2Fm
ZWx5UmVtb3ZlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKQEAgLTE2NSwxMCArMjY4LDEwIEBAIFdlYklu
c3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogCiAgICAgX3N0YXJ0U3RhdHVzQmFyRHJhZ2dp
bmc6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwg
ZXZlbnQudGFyZ2V0ICE9PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFy
IikpCisgICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8IGV2ZW50LnRhcmdldCAhPT0gdGhpcy5t
YWluU3RhdHVzQmFyKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFdlYkluc3BlY3Rv
ci5lbGVtZW50RHJhZ1N0YXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1i
YXIiKSwgdGhpcy5fc3RhdHVzQmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fZW5kU3RhdHVz
QmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgZXZlbnQsICJyb3ctcmVzaXplIik7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5lbGVtZW50RHJhZ1N0YXJ0KHRoaXMubWFpblN0YXR1c0JhciwgdGhpcy5fc3Rh
dHVzQmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5fZW5kU3RhdHVzQmFyRHJhZ2dpbmcuYmlu
ZCh0aGlzKSwgZXZlbnQsICJyb3ctcmVzaXplIik7CiAKICAgICAgICAgdGhpcy5fc3RhdHVzQmFy
RHJhZ09mZnNldCA9IGV2ZW50LnBhZ2VZIC0gdGhpcy5lbGVtZW50LnRvdGFsT2Zmc2V0VG9wOwog
CkBAIC0xNzgsNyArMjgxLDYgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAg
ICAgX3N0YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHZh
ciBtYWluRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIik7Ci0KICAgICAg
ICAgdmFyIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGV2ZW50LnBhZ2VZICsgdGhpcy5f
c3RhdHVzQmFyRHJhZ09mZnNldDsKICAgICAgICAgaGVpZ2h0ID0gTnVtYmVyLmNvbnN0cmFpbiho
ZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAt
IG1haW5FbGVtZW50LnRvdGFsT2Zmc2V0VG9wIC0gUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdo
dCk7CiAKQEAgLTE5Myw2ICsyOTUsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9
IHsKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ0VuZChldmVudCk7CiAK
KyAgICAgICAgdGhpcy5zYXZlZEhlaWdodCA9IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0OwogCiAgICAgICAgIGV2ZW50
LnN0b3BQcm9wYWdhdGlvbigpOwpAQCAtMjAwLDMgKzMwMyw5IEBAIFdlYkluc3BlY3Rvci5EcmF3
ZXIucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5EcmF3
ZXIuU3RhdGUgPSB7CisgICAgSGlkZGVuOiAwLAorICAgIFZhcmlhYmxlOiAxLAorICAgIEZ1bGw6
IDIKK307CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IDUzOTE3ZjYu
LmRiZjQwNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC05LDYg
KzksNyBAQAogICAgIDxmaWxlPkNhbGxTdGFja1NpZGViYXJQYW5lLmpzPC9maWxlPgogICAgIDxm
aWxlPkNoYW5nZXNWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkNvbG9yLmpzPC9maWxlPgorICAg
IDxmaWxlPkNvbnNvbGVQYW5lbC5qczwvZmlsZT4KICAgICA8ZmlsZT5Db25zb2xlVmlldy5qczwv
ZmlsZT4KICAgICA8ZmlsZT5Db29raWVJdGVtc1ZpZXcuanM8L2ZpbGU+CiAgICAgPGZpbGU+RGF0
YWJhc2UuanM8L2ZpbGU+CkBAIC03NSw2ICs3Niw3IEBACiAgICAgPGZpbGU+SW1hZ2VzL2Nsb3Nl
QnV0dG9ucy5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2NvbnNvbGVCdXR0b25HbHlwaC5w
bmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2Nvb2tpZS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+
SW1hZ2VzL2NvbnNvbGVJY29uLnBuZzwvZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvZGF0YWJhc2Uu
cG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZzwvZmlsZT4KICAg
ICA8ZmlsZT5JbWFnZXMvZGVidWdnZXJDb250aW51ZS5wbmc8L2ZpbGU+CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCmluZGV4IDAzNWRjMTMuLjUwZTdlZjYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCkBAIC0yMTUsNiArMjE1LDEw
IEBAIGJvZHkuYXR0YWNoZWQgI3NlYXJjaC1yZXN1bHRzLW1hdGNoZXMgewogICAgIGJhY2tncm91
bmQtaW1hZ2U6IHVybChJbWFnZXMvcHJvZmlsZXNJY29uLnBuZyk7CiB9CiAKKy50b29sYmFyLWl0
ZW0uY29uc29sZSAudG9vbGJhci1pY29uIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoSW1h
Z2VzL2NvbnNvbGVJY29uLnBuZyk7Cit9CisKICNjbG9zZS1idXR0b24tbGVmdCwgI2Nsb3NlLWJ1
dHRvbi1yaWdodCB7CiAgICAgd2lkdGg6IDE0cHg7CiAgICAgaGVpZ2h0OiAxNHB4OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IGE2MDlmODkuLjQ4OTk5
NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTc5
LDYgKzc5LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IlN0b3JhZ2VQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUHJvZmlsZXNQYW5lbC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29uc29sZVBhbmVsLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJj
ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IlNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJTb3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KQEAgLTEwOCw3ICsxMDksNyBA
QCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICAgIDwvZGl2PgogICAgIDxkaXYgaWQ9Im1haW4iPgogICAgICAgICA8ZGl2
IGlkPSJtYWluLXBhbmVscyIgdGFiaW5kZXg9IjAiIHNwZWxsY2hlY2s9ImZhbHNlIj48L2Rpdj4K
LSAgICAgICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFyIiBjbGFzcz0ic3RhdHVzLWJhciI+PGRp
diBpZD0iYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyI+PGJ1dHRvbiBpZD0iZG9jay1zdGF0dXMt
YmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0gdG9nZ2xlZCI+PGRpdiBjbGFzcz0iZ2x5
cGgiPjwvZGl2PjxkaXYgY2xhc3M9ImdseXBoIHNoYWRvdyI+PC9kaXY+PC9idXR0b24+PGJ1dHRv
biBpZD0iY29uc29sZS1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0iPjxk
aXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2Pjwv
YnV0dG9uPjxidXR0b24gaWQ9ImNoYW5nZXMtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVz
LWJhci1pdGVtIGhpZGRlbiI+PC9idXR0b24+PGRpdiBpZD0iY291bnQtaXRlbXMiPjxkaXYgaWQ9
ImNoYW5nZXMtY291bnQiIGNsYXNzPSJoaWRkZW4iPjwvZGl2PjxkaXYgaWQ9ImVycm9yLXdhcm5p
bmctY291bnQiIGNsYXNzPSJoaWRkZW4iPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgorICAgICAg
ICA8ZGl2IGlkPSJtYWluLXN0YXR1cy1iYXIiIGNsYXNzPSJzdGF0dXMtYmFyIj48ZGl2IGlkPSJh
bmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIj48YnV0dG9uIGlkPSJkb2NrLXN0YXR1cy1iYXItaXRl
bSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSI+PGRpdiBjbGFzcz0iZ2x5cGgiPjwvZGl2PjxkaXYg
Y2xhc3M9ImdseXBoIHNoYWRvdyI+PC9kaXY+PC9idXR0b24+PGJ1dHRvbiBpZD0iY29uc29sZS1z
dGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0iPjxkaXYgY2xhc3M9ImdseXBo
Ij48L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0b24g
aWQ9ImNoYW5nZXMtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIGhpZGRl
biI+PC9idXR0b24+PGRpdiBpZD0iY291bnQtaXRlbXMiPjxkaXYgaWQ9ImNoYW5nZXMtY291bnQi
IGNsYXNzPSJoaWRkZW4iPjwvZGl2PjxkaXYgaWQ9ImVycm9yLXdhcm5pbmctY291bnQiIGNsYXNz
PSJoaWRkZW4iPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PgogICAgIDwvZGl2PgogICAgIDxkaXYg
aWQ9ImRyYXdlciI+CiAgICAgICAgIDxkaXYgaWQ9ImNvbnNvbGUtdmlldyI+PGRpdiBpZD0iY29u
c29sZS1tZXNzYWdlcyI+PGRpdiBpZD0iY29uc29sZS1wcm9tcHQiIHNwZWxsY2hlY2s9ImZhbHNl
Ij48YnI+PC9kaXY+PC9kaXY+PC9kaXY+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcwppbmRleCBiNjMyYzJjLi4wYmUwODA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKQEAgLTcyLDYgKzcyLDcgQEAgdmFyIFdlYkluc3BlY3RvciA9IHsK
ICAgICByZXNvdXJjZVVSTE1hcDoge30sCiAgICAgY29va2llRG9tYWluczoge30sCiAgICAgbWlz
c2luZ0xvY2FsaXplZFN0cmluZ3M6IHt9LAorICAgIHBlbmRpbmdEaXNwYXRjaGVzOiAwLAogCiAg
ICAgZ2V0IHByZXZpb3VzRm9jdXNFbGVtZW50KCkKICAgICB7CkBAIC0xNzAsNiArMTcxLDggQEAg
dmFyIFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2Yo
InN0b3JhZ2UiKSA9PT0gLTEgJiYgaGlkZGVuUGFuZWxzLmluZGV4T2YoImRhdGFiYXNlcyIpID09
PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLnN0b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9y
LlN0b3JhZ2VQYW5lbCgpOworICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoImNvbnNv
bGUiKSA9PT0gLTEpCisgICAgICAgICAgICB0aGlzLnBhbmVscy5jb25zb2xlID0gbmV3IFdlYklu
c3BlY3Rvci5Db25zb2xlUGFuZWwoKTsKICAgICB9LAogCiAgICAgX2xvYWRQcmVmZXJlbmNlczog
ZnVuY3Rpb24oKQpAQCAtMzk2LDcgKzM5OSw2IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5j
dGlvbigpCiAgICAgZG9jdW1lbnQuYm9keS5hZGRTdHlsZUNsYXNzKCJwb3J0LSIgKyBwb3J0KTsK
IAogICAgIHRoaXMuX2xvYWRQcmVmZXJlbmNlcygpOwotICAgIHRoaXMucGVuZGluZ0Rpc3BhdGNo
ZXMgPSAwOwogCiAgICAgdGhpcy5kcmF3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRyYXdlcigpOwog
ICAgIHRoaXMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcodGhpcy5kcmF3
ZXIpOwpAQCAtNTM1LDYgKzUzNyw3IEBAIFdlYkluc3BlY3Rvci53aW5kb3dSZXNpemUgPSBmdW5j
dGlvbihldmVudCkKIHsKICAgICBpZiAodGhpcy5jdXJyZW50UGFuZWwgJiYgdGhpcy5jdXJyZW50
UGFuZWwucmVzaXplKQogICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5yZXNpemUoKTsKKyAgICB0
aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVjdG9yLndpbmRvd0ZvY3VzZWQgPSBm
dW5jdGlvbihldmVudCkKQEAgLTYyNCw2ICs2MjcsOSBAQCBXZWJJbnNwZWN0b3IuZG9jdW1lbnRL
ZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAKICAgICAgICAgc3dpdGNoIChldmVudC5rZXlJZGVu
dGlmaWVyKSB7CiAgICAgICAgICAgICBjYXNlICJVKzAwMUIiOiAvLyBFc2NhcGUga2V5CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuZHJhd2VyLmZ1bGxQYW5lbCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgdGhpcy5kcmF3ZXIudmlzaWJsZSA9ICF0aGlz
LmRyYXdlci52aXNpYmxlOwogICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NDksMjkgKzc1NSwzMSBAQCBXZWJJbnNwZWN0
b3IubWFpbkNvcHkgPSBmdW5jdGlvbihldmVudCkKICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwu
aGFuZGxlQ29weUV2ZW50KGV2ZW50KTsKIH0KIAotV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZSA9
IGZ1bmN0aW9uKGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxsYmFjaywgY29tcGxldGUpCitXZWJJ
bnNwZWN0b3IuYW5pbWF0ZVN0eWxlID0gZnVuY3Rpb24oYW5pbWF0aW9ucywgZHVyYXRpb24sIGNh
bGxiYWNrKQogewotICAgIGlmIChjb21wbGV0ZSA9PT0gdW5kZWZpbmVkKQotICAgICAgICBjb21w
bGV0ZSA9IDA7Ci0gICAgdmFyIHNsaWNlID0gKDEwMDAgLyAzMCk7IC8vIDMwIGZyYW1lcyBwZXIg
c2Vjb25kCisgICAgdmFyIGludGVydmFsOworICAgIHZhciBjb21wbGV0ZSA9IDA7CisKKyAgICBj
b25zdCBpbnRlcnZhbER1cmF0aW9uID0gKDEwMDAgLyAzMCk7IC8vIDMwIGZyYW1lcyBwZXIgc2Vj
b25kLgorICAgIGNvbnN0IGFuaW1hdGlvbnNMZW5ndGggPSBhbmltYXRpb25zLmxlbmd0aDsKKyAg
ICBjb25zdCBwcm9wZXJ0eVVuaXQgPSB7b3BhY2l0eTogIiJ9OworICAgIGNvbnN0IGRlZmF1bHRV
bml0ID0gInB4IjsKIAotICAgIHZhciBkZWZhdWx0VW5pdCA9ICJweCI7Ci0gICAgdmFyIHByb3Bl
cnR5VW5pdCA9IHtvcGFjaXR5OiAiIn07CisgICAgZnVuY3Rpb24gY3ViaWNJbk91dCh0LCBiLCBj
LCBkKQorICAgIHsKKyAgICAgICAgaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCAr
IGI7CisgICAgICAgIHJldHVybiBjLzIqKCh0LT0yKSp0KnQgKyAyKSArIGI7CisgICAgfQogCi0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgKytpKSB7CisgICAgLy8g
UHJlLXByb2Nlc3MgYW5pbWF0aW9ucy4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaW1hdGlv
bnNMZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgYW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsK
LSAgICAgICAgdmFyIGVsZW1lbnQgPSBudWxsOwotICAgICAgICB2YXIgc3RhcnQgPSBudWxsOwot
ICAgICAgICB2YXIgY3VycmVudCA9IG51bGw7Ci0gICAgICAgIHZhciBlbmQgPSBudWxsOwotICAg
ICAgICB2YXIga2V5ID0gbnVsbDsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBudWxsLCBzdGFydCA9
IG51bGwsIGN1cnJlbnQgPSBudWxsLCBlbmQgPSBudWxsLCBrZXkgPSBudWxsOwogICAgICAgICBm
b3IgKGtleSBpbiBhbmltYXRpb24pIHsKICAgICAgICAgICAgIGlmIChrZXkgPT09ICJlbGVtZW50
IikKICAgICAgICAgICAgICAgICBlbGVtZW50ID0gYW5pbWF0aW9uW2tleV07CiAgICAgICAgICAg
ICBlbHNlIGlmIChrZXkgPT09ICJzdGFydCIpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBhbmlt
YXRpb25ba2V5XTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gImN1cnJlbnQiKQotICAg
ICAgICAgICAgICAgIGN1cnJlbnQgPSBhbmltYXRpb25ba2V5XTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKGtleSA9PT0gImVuZCIpCiAgICAgICAgICAgICAgICAgZW5kID0gYW5pbWF0aW9uW2tleV07
CiAgICAgICAgIH0KQEAgLTc3OSw0OSArNzg3LDU0IEBAIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5
bGUgPSBmdW5jdGlvbihhbmltYXRpb25zLCBkdXJhdGlvbiwgY2FsbGJhY2ssIGNvbXBsZXRlKQog
ICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVuZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRW
aWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7CiAgICAgICAgIGlmICghc3RhcnQpIHsKKyAg
ICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1
bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7CiAgICAgICAgICAgICBzdGFydCA9IHt9
OwogICAgICAgICAgICAgZm9yIChrZXkgaW4gZW5kKQogICAgICAgICAgICAgICAgIHN0YXJ0W2tl
eV0gPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoa2V5KSk7CiAgICAg
ICAgICAgICBhbmltYXRpb24uc3RhcnQgPSBzdGFydDsKLSAgICAgICAgfSBlbHNlIGlmIChjb21w
bGV0ZSA9PSAwKQorICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZvciAoa2V5IGluIHN0YXJ0
KQogICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBzdGFydFtr
ZXldICsgKGtleSBpbiBwcm9wZXJ0eVVuaXQgPyBwcm9wZXJ0eVVuaXRba2V5XSA6IGRlZmF1bHRV
bml0KSk7CisgICAgfQogCi0gICAgICAgIGlmICghY3VycmVudCkgewotICAgICAgICAgICAgY3Vy
cmVudCA9IHt9OwotICAgICAgICAgICAgZm9yIChrZXkgaW4gc3RhcnQpCi0gICAgICAgICAgICAg
ICAgY3VycmVudFtrZXldID0gc3RhcnRba2V5XTsKLSAgICAgICAgICAgIGFuaW1hdGlvbi5jdXJy
ZW50ID0gY3VycmVudDsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGN1YmljSW5PdXQo
dCwgYiwgYywgZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCh0Lz1kLzIpIDwgMSkgcmV0
dXJuIGMvMip0KnQqdCArIGI7Ci0gICAgICAgICAgICByZXR1cm4gYy8yKigodC09MikqdCp0ICsg
MikgKyBiOworICAgIGZ1bmN0aW9uIGFuaW1hdGVMb29wKCkKKyAgICB7CisgICAgICAgIC8vIEFk
dmFuY2UgZm9yd2FyZC4KKyAgICAgICAgY29tcGxldGUgKz0gaW50ZXJ2YWxEdXJhdGlvbjsKKyAg
ICAgICAgdmFyIG5leHQgPSBjb21wbGV0ZSArIGludGVydmFsRHVyYXRpb247CisKKyAgICAgICAg
Ly8gTWFrZSBzdHlsZSBjaGFuZ2VzLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaW1h
dGlvbnNMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IGFuaW1hdGlv
bnNbaV07CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFuaW1hdGlvbi5lbGVtZW50OworICAg
ICAgICAgICAgdmFyIHN0YXJ0ID0gYW5pbWF0aW9uLnN0YXJ0OworICAgICAgICAgICAgdmFyIGVu
ZCA9IGFuaW1hdGlvbi5lbmQ7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVuZCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbWVu
dC5zdHlsZTsKKyAgICAgICAgICAgIGZvciAoa2V5IGluIGVuZCkgeworICAgICAgICAgICAgICAg
IHZhciBlbmRWYWx1ZSA9IGVuZFtrZXldOworICAgICAgICAgICAgICAgIGlmIChuZXh0IDwgZHVy
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFtrZXld
OworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdWJpY0luT3V0KGNvbXBsZXRl
LCBzdGFydFZhbHVlLCBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWUsIGR1cmF0aW9uKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBuZXdWYWx1ZSArIChrZXkgaW4gcHJv
cGVydHlVbml0ID8gcHJvcGVydHlVbml0W2tleV0gOiBkZWZhdWx0VW5pdCkpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShrZXks
IGVuZFZhbHVlICsgKGtleSBpbiBwcm9wZXJ0eVVuaXQgPyBwcm9wZXJ0eVVuaXRba2V5XSA6IGRl
ZmF1bHRVbml0KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgc3R5
bGUgPSBlbGVtZW50LnN0eWxlOwotICAgICAgICBmb3IgKGtleSBpbiBlbmQpIHsKLSAgICAgICAg
ICAgIHZhciBzdGFydFZhbHVlID0gc3RhcnRba2V5XTsKLSAgICAgICAgICAgIHZhciBjdXJyZW50
VmFsdWUgPSBjdXJyZW50W2tleV07Ci0gICAgICAgICAgICB2YXIgZW5kVmFsdWUgPSBlbmRba2V5
XTsKLSAgICAgICAgICAgIGlmICgoY29tcGxldGUgKyBzbGljZSkgPCBkdXJhdGlvbikgewotICAg
ICAgICAgICAgICAgIHZhciBkZWx0YSA9IChlbmRWYWx1ZSAtIHN0YXJ0VmFsdWUpIC8gKGR1cmF0
aW9uIC8gc2xpY2UpOwotICAgICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1YmljSW5PdXQo
Y29tcGxldGUsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlIC0gc3RhcnRWYWx1ZSwgZHVyYXRpb24pOwot
ICAgICAgICAgICAgICAgIHN0eWxlLnNldFByb3BlcnR5KGtleSwgbmV3VmFsdWUgKyAoa2V5IGlu
IHByb3BlcnR5VW5pdCA/IHByb3BlcnR5VW5pdFtrZXldIDogZGVmYXVsdFVuaXQpKTsKLSAgICAg
ICAgICAgICAgICBjdXJyZW50W2tleV0gPSBuZXdWYWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBlbmRWYWx1ZSArIChrZXkg
aW4gcHJvcGVydHlVbml0ID8gcHJvcGVydHlVbml0W2tleV0gOiBkZWZhdWx0VW5pdCkpOwotICAg
ICAgICAgICAgfQorICAgICAgICAvLyBFbmQgY29uZGl0aW9uLgorICAgICAgICBpZiAoY29tcGxl
dGUgPj0gZHVyYXRpb24pIHsKKyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOwor
ICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY29tcGxldGUgPCBkdXJhdGlvbikKLSAgICAgICAg
c2V0VGltZW91dChXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlLCBzbGljZSwgYW5pbWF0aW9ucywg
ZHVyYXRpb24sIGNhbGxiYWNrLCBjb21wbGV0ZSArIHNsaWNlKTsKLSAgICBlbHNlIGlmIChjYWxs
YmFjaykKLSAgICAgICAgY2FsbGJhY2soKTsKKyAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKGFu
aW1hdGVMb29wLCBpbnRlcnZhbER1cmF0aW9uKTsKKyAgICByZXR1cm4gaW50ZXJ2YWw7CiB9CiAK
IFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hMYWJlbCA9IGZ1bmN0aW9uKCkKQEAgLTg0MSw2ICs4
NTQsNyBAQCBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTGFiZWwgPSBmdW5jdGlvbigpCiBXZWJJ
bnNwZWN0b3IudG9nZ2xlQXR0YWNoID0gZnVuY3Rpb24oKQogewogICAgIHRoaXMuYXR0YWNoZWQg
PSAhdGhpcy5hdHRhY2hlZDsKKyAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5z
cGVjdG9yLnRvb2xiYXJEcmFnU3RhcnQgPSBmdW5jdGlvbihldmVudCkKQEAgLTk2NCw2ICs5Nzgs
MTEgQEAgV2ViSW5zcGVjdG9yLnNob3dTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhp
cy5jdXJyZW50UGFuZWwgPSB0aGlzLnBhbmVscy5zdG9yYWdlOwogfQogCitXZWJJbnNwZWN0b3Iu
c2hvd0NvbnNvbGVQYW5lbCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLmN1cnJlbnRQYW5lbCA9
IHRoaXMucGFuZWxzLmNvbnNvbGU7Cit9CisKIFdlYkluc3BlY3Rvci5hZGRSZXNvdXJjZSA9IGZ1
bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiB7CiAgICAgdmFyIHJlc291cmNlID0gbmV3IFdl
Ykluc3BlY3Rvci5SZXNvdXJjZSgKQEAgLTEwNTQsNyArMTA3Myw3IEBAIFdlYkluc3BlY3Rvci51
cGRhdGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiAgICAgICAgICAg
ICByZXNvdXJjZS5yZXNwb25zZVJlY2VpdmVkVGltZSA9IHBheWxvYWQucmVzcG9uc2VSZWNlaXZl
ZFRpbWU7CiAgICAgICAgIGlmIChwYXlsb2FkLmVuZFRpbWUpCiAgICAgICAgICAgICByZXNvdXJj
ZS5lbmRUaW1lID0gcGF5bG9hZC5lbmRUaW1lOwotICAgICAgICAKKwogICAgICAgICBpZiAocGF5
bG9hZC5sb2FkRXZlbnRUaW1lKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvYWRFdmVudFRpbWUg
aXMgZm9yIHRoZSBtYWluIHJlc291cmNlLCBhbmQgd2Ugd2FudCB0byBzaG93IGl0CiAgICAgICAg
ICAgICAvLyBmb3IgYWxsIHJlc291cmNlcyBvbiB0aGlzIHBhZ2UuIFRoaXMgbWVhbnMgd2Ugd2Fu
dCB0byBzZXQgaXQgYXMgYSBtZW1iZXIKQEAgLTEwNjIsNyArMTA4MSw3IEBAIFdlYkluc3BlY3Rv
ci51cGRhdGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiAgICAgICAg
ICAgICBpZiAodGhpcy5wYW5lbHMucmVzb3VyY2VzKQogICAgICAgICAgICAgICAgIHRoaXMucGFu
ZWxzLnJlc291cmNlcy5tYWluUmVzb3VyY2VMb2FkVGltZSA9IHBheWxvYWQubG9hZEV2ZW50VGlt
ZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocGF5bG9hZC5kb21Db250ZW50
RXZlbnRUaW1lKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGRvbUNvbnRlbnRFdmVudFRpbWUgaXMg
Zm9yIHRoZSBtYWluIHJlc291cmNlLCBzbyBpdCBzaG91bGQgZ28gaW4KICAgICAgICAgICAgIC8v
IHRoZSByZXNvdXJjZXMgcGFuZWwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgYXMgYWJvdmUuCkBAIC0x
MjQ4LDIzICsxMjY3LDIzIEBAIFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbihtZXNzYWdlKQog
ewogICAgIC8vIHJlbWVtYmVyICd0aGlzJyBmb3Igc2V0SW50ZXJ2YWwoKSBjYWxsYmFjawogICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAKKwogICAgIC8vIHJldHVybiBpbmRpY2F0aW9uIGlmIHdl
IGNhbiBhY3R1YWxseSBsb2cgYSBtZXNzYWdlCiAgICAgZnVuY3Rpb24gaXNMb2dBdmFpbGFibGUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSAmJiBX
ZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkgJiYgc2VsZi5jb25zb2xlOwogICAgIH0KLSAgICAKKwog
ICAgIC8vIGZsdXNoIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIG1lc3NhZ2VzCiAgICAgZnVuY3Rpb24g
Zmx1c2hRdWV1ZSgpCiAgICAgewogICAgICAgICB2YXIgcXVldWVkID0gV2ViSW5zcGVjdG9yLmxv
Zy5xdWV1ZWQ7Ci0gICAgICAgIGlmICghcXVldWVkKSAKKyAgICAgICAgaWYgKCFxdWV1ZWQpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKKwogICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHF1ZXVlZC5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIGxvZ01lc3NhZ2UocXVldWVk
W2ldKTsKLSAgICAgICAgCisKICAgICAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5sb2cucXVldWVk
OwogICAgIH0KIApAQCAtMTI3NCwyNiArMTI5MywyNiBAQCBXZWJJbnNwZWN0b3IubG9nID0gZnVu
Y3Rpb24obWVzc2FnZSkKICAgICB7CiAgICAgICAgIGlmICghaXNMb2dBdmFpbGFibGUoKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGNsZWFySW50ZXJ2YWwo
V2ViSW5zcGVjdG9yLmxvZy5pbnRlcnZhbCk7CiAgICAgICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3Iu
bG9nLmludGVydmFsOwotICAgICAgICAKKwogICAgICAgICBmbHVzaFF1ZXVlKCk7CiAgICAgfQot
ICAgIAorCiAgICAgLy8gYWN0dWFsbHkgbG9nIHRoZSBtZXNzYWdlCiAgICAgZnVuY3Rpb24gbG9n
TWVzc2FnZShtZXNzYWdlKQogICAgIHsKICAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gMTsKICAg
ICAgICAgaWYgKG1lc3NhZ2UgPT0gV2ViSW5zcGVjdG9yLmxvZy5sYXN0TWVzc2FnZSkKICAgICAg
ICAgICAgIHJlcGVhdENvdW50ID0gV2ViSW5zcGVjdG9yLmxvZy5yZXBlYXRDb3VudCArIDE7Ci0g
ICAgCisKICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5sYXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAg
ICAgICAgIFdlYkluc3BlY3Rvci5sb2cucmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2UgZXhwZWN0cyBhIHByb3h5IG9iamVjdAog
ICAgICAgICBtZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eShudWxsLCBbXSwg
MCwgbWVzc2FnZSwgZmFsc2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBwb3N0IHRoZSBtZXNz
YWdlCiAgICAgICAgIHZhciBtc2cgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlKAog
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3Ro
ZXIsCkBAIC0xMzA0LDIwICsxMzIzLDIwIEBAIFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbiht
ZXNzYWdlKQogICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgIHJlcGVhdENvdW50LAogICAg
ICAgICAgICAgbWVzc2FnZSk7Ci0gICAgCisKICAgICAgICAgc2VsZi5jb25zb2xlLmFkZE1lc3Nh
Z2UobXNnKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBpZiB3ZSBjYW4ndCBsb2cgdGhlIG1lc3Nh
Z2UsIHF1ZXVlIGl0CiAgICAgaWYgKCFpc0xvZ0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIGlmICgh
V2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nLnF1
ZXVlZCA9IFtdOwotICAgICAgICAgICAgCisKICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5xdWV1
ZWQucHVzaChtZXNzYWdlKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3Iu
bG9nLmludGVydmFsKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5pbnRlcnZhbCA9IHNl
dEludGVydmFsKGZsdXNoUXVldWVJZkF2YWlsYWJsZSwgMTAwMCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE0NTcsNyArMTQ3Niw4IEBAIFdlYkluc3BlY3Rvci5s
aW5raWZ5U3RyaW5nQXNGcmFnbWVudCA9IGZ1bmN0aW9uKHN0cmluZykKICAgICByZXR1cm4gY29u
dGFpbmVyOwogfQogCi1XZWJJbnNwZWN0b3Iuc2hvd1Byb2ZpbGVGb3JVUkwgPSBmdW5jdGlvbih1
cmwpIHsKK1dlYkluc3BlY3Rvci5zaG93UHJvZmlsZUZvclVSTCA9IGZ1bmN0aW9uKHVybCkKK3sK
ICAgICBXZWJJbnNwZWN0b3Iuc2hvd1Byb2ZpbGVzUGFuZWwoKTsKICAgICBXZWJJbnNwZWN0b3Iu
cGFuZWxzLnByb2ZpbGVzLnNob3dQcm9maWxlRm9yVVJMKHVybCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="25299"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43578</attachid>
            <date>2009-11-20 07:18:31 -0800</date>
            <delta_ts>2009-11-20 09:45:57 -0800</delta_ts>
            <desc>[PATCH] Console Panel (Even Better)</desc>
            <filename>console_better.patch</filename>
            <type>text/plain</type>
            <size>47221</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDk1MDRiMi4uODE5M2FjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAwOS0xMS0xOSAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVja0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBDb25zb2xlIE9ubHkgTGF5b3V0
IE1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MjgyCisKKyAgICAgICAgQWRkcyBhIENvbnNvbGUgUGFuZWwsIHdoaWNoIGFsbG93cyBmb3IgYSBG
dWxsIHNpemUgQ29uc29sZS4gVGhpcworICAgICAgICBleHRlbmRzIHRoZSBEcmF3ZXIgdG8gdGhl
IHNpemUgb2YgYSBQYW5lbC4gVGhpcyBhbHNvIGZpeGVzIHByZXZpb3VzCisgICAgICAgIHJlc2l6
ZSBpc3N1ZXMgd2l0aCB0aGUgRHJhd2VyLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db25zb2xlUGFuZWwuanM6IGFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS50b29s
YmFySXRlbUNsYXNzLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9EcmF3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNldCB2aXNpYmxlVmlldyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5nZXQgc2F2ZWRIZWlnaHQpOiBhY2Nlc3MgdGhl
IHNhdmVkIGhlaWdodCBvZiB0aGUgdmFyaWFibGUgY29uc29sZS4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cuYW5pbWF0aW9uRmluaXNoZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRHJhd2VyLnByb3RvdHlwZS5oaWRlLmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRyYXdlci5wcm90b3R5cGUucmVzaXplKTogcmVzaXplIGFwcHJvcHJpYXRlbHkgaWYgZnVsbC9u
b24tZnVsbAorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuZW50ZXJQYW5l
bE1vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuZXhpdFBhbmVs
TW9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5pbW1lZGlhdGVs
eUV4aXRQYW5lbE1vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUu
X2NhbmNlbEFuaW1hdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIu
cHJvdG90eXBlLl9hbmltYXRlRHJhd2VySGVpZ2h0LmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9hbmltYXRlRHJhd2VySGVpZ2h0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9hbmltYXRpb25EdXJhdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3RhcnRTdGF0dXNC
YXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3Rh
dHVzQmFyRHJhZ2dpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUu
X2VuZFN0YXR1c0JhckRyYWdnaW5nKToKKworICAgICAgICBNaXNjZWxsYW5lb3VzIGNoYW5nZXMg
YW5kIGNsZWFudXAuCisKKyAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3Mu
anM6ICJDb25zb2xlIiB0b29sYmFyIHRpdGxlLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvQ29uc29sZVZpZXcuanM6IHJlbW92ZWQgdW5uZWNlc3NhcnkgZWxlbWVudCByZW9yZGVyaW5n
ICAKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb25zb2xlSWNvbi5wbmc6
IGFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczogYWRk
ZWQgaWNvbi4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLl9jcmVhdGVQYW5lbHMpOiBjcmVhdGUgY29uc29sZSBwYW5lbAorICAgICAgICAo
V2ViSW5zcGVjdG9yLndpbmRvd1Jlc2l6ZSk6IHJlc2l6ZSBkcmF3ZXIgaWYgbmVjZXNzYXJ5Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duKTogZXNjIHNob3VsZCBub3QgdG9n
Z2xlIHRoZSBjb25zb2xlIHdoZW4gaW4gcGFuZWwgbW9kZQorICAgICAgICAoV2ViSW5zcGVjdG9y
LmFuaW1hdGVTdHlsZSk6IHN0YXJ0IGFuaW1hdGlvbiBpbnRlcnZhbCwgcmV0dXJucyB0aGUgaW50
ZXJ2YWwga2V5CisgICAgICAgIChXZWJJbnNwZWN0b3IudG9nZ2xlQXR0YWNoKTogcmVzaXplIGRy
YXdlciBpZiBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zaG93Q29uc29sZVBhbmVs
KTogcmVzdG9yZSB0aGUgcGFuZWwgd2hlbiB0aGUgaW5zcGVjdG9yIHJlc3RhcnRzCisgICAgICAg
IChXZWJJbnNwZWN0b3Iuc2hvd1Byb2ZpbGVGb3JVUkwpOiBzdHlsZSBmaXgKKworICAgICAgICBS
ZXN0b3JlIHRoZSBwYW5lbCB3aGVuIHRoZSBpbnNwZWN0b3IgcmVzdGFydHMuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnNwZWNpYWxQYW5lbEZvckpTTmFtZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjpzaG93UGFuZWwpOgorCisgICAgICAgIEJ1aWxkIGZpbGVzLgorCisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKwogMjAwOS0x
MS0xOCAgR2lyaXNoIFJhbWFrcmlzaG5hbiAgPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRW5n
bGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xv
Y2FsaXplZFN0cmluZ3MuanMKaW5kZXggYjZiMDVjNTZlODdhNDg4MjZhYmI2MzBhMjIyMjJhM2Iy
NzhjZDE0MC4uZWY5ODFjNzhkODUxNjMxY2MwYmM4OTVmNTJmNmJjNGJlYTQ5ODBhNCAxMDA2NDQK
R0lUIGJpbmFyeSBwYXRjaApkZWx0YSA2MAp6Y21acDwhRmNUazt8NytUJD4lcyFDU01SeyhhS3tl
WDJAc0FWTXR8QVZ1KW8+VjZYKlpCP2YxcDdfeTh0MH5aNFQKRDlzQ1d+CgpkZWx0YSA5ClFjbWNi
MWdSJGlYO3w3KS0wMm5SPUVkVCVqCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4YzUxYTYwLi42YzQ5ODg1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzYx
Niw2ICszNjE2LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFj
a1NpZGViYXJQYW5lLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NoYW5n
ZXNWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbG9yLmpzJywK
KyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJdGVtc1ZpZXcuanMnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2UuanMnLApAQCAtMzY4NCw2ICszNjg1LDcgQEAK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jbGVhckNvbnNvbGVCdXR0
b25HbHlwaC5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL2Ns
b3NlQnV0dG9ucy5wbmcnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2Vz
L2NvbnNvbGVCdXR0b25HbHlwaC5wbmcnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1l
bmQvSW1hZ2VzL2NvbnNvbGVJY29uLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9JbWFnZXMvY29va2llLnBuZycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbWFnZXMvZGF0YWJhc2UucG5nJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0ltYWdlcy9kYXRhYmFzZVRhYmxlLnBuZycsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagppbmRleCA4NWM1ZjZlLi41OTFkMzUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTQyMjgyLDYgKzQyMjgyLDkgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQ29uc29s
ZVBhbmVsLmpzIgorCQkJCQk+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXENvbnNvbGVWaWV3LmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA5MjBjM2YwLi41MjQz
NmVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMzE1
LDEwICszMTUsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUo
Ym9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQogICAgICAgICBzZXRBdHRhY2hlZFdpbmRvdyhh
dHRhY2hlZCk7CiAgICAgICAgIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwogCi0gICAgICAgIC8v
IENvbnNvbGUgcGFuZWwgaXMgaW1wbGVtZW50ZWQgYXMgYSAnZmFzdCB2aWV3Jywgc28gdGhlcmUg
c2hvdWxkIGJlCi0gICAgICAgIC8vIHJlYWwgcGFuZWwgb3BlbmVkIGFsb25nIHdpdGggaXQuCi0g
ICAgICAgIGJvb2wgc2hvd0NvbnNvbGUgPSBtX3Nob3dBZnRlclZpc2libGUgPT0gQ29uc29sZVBh
bmVsOwotICAgICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQYW5lbCB8fCBz
aG93Q29uc29sZSkgeworICAgICAgICBpZiAobV9zaG93QWZ0ZXJWaXNpYmxlID09IEN1cnJlbnRQ
YW5lbCkgewogICAgICAgICAgIFNldHRpbmcgbGFzdEFjdGl2ZVBhbmVsU2V0dGluZyA9IHNldHRp
bmcobGFzdEFjdGl2ZVBhbmVsU2V0dGluZ05hbWUpOwogICAgICAgICAgIGlmIChsYXN0QWN0aXZl
UGFuZWxTZXR0aW5nLnR5cGUoKSA9PSBTZXR0aW5nOjpTdHJpbmdUeXBlKQogICAgICAgICAgICAg
ICBtX3Nob3dBZnRlclZpc2libGUgPSBzcGVjaWFsUGFuZWxGb3JKU05hbWUobGFzdEFjdGl2ZVBh
bmVsU2V0dGluZy5zdHJpbmcoKSk7CkBAIC0zMzMsOCArMzMwLDYgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSwgYm9vbCBhdHRhY2hlZCkK
ICAgICAgICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CiAjZW5kaWYKICAgICAgICAgc2hvd1BhbmVs
KG1fc2hvd0FmdGVyVmlzaWJsZSk7Ci0gICAgICAgIGlmIChzaG93Q29uc29sZSkKLSAgICAgICAg
ICAgIHNob3dQYW5lbChDb25zb2xlUGFuZWwpOwogICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgYmVpbmcgY2xv
c2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQsCkBAIC0xODExLDYgKzE4MDYsOCBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpTcGVjaWFsUGFuZWxzIEluc3BlY3RvckNvbnRyb2xsZXI6OnNwZWNp
YWxQYW5lbEZvckpTTmFtZShjbwogICAgICAgICByZXR1cm4gUHJvZmlsZXNQYW5lbDsKICAgICBl
bHNlIGlmIChwYW5lbE5hbWUgPT0gInN0b3JhZ2UiIHx8IHBhbmVsTmFtZSA9PSAiZGF0YWJhc2Vz
IikKICAgICAgICAgcmV0dXJuIFN0b3JhZ2VQYW5lbDsKKyAgICBlbHNlIGlmIChwYW5lbE5hbWUg
PT0gImNvbnNvbGUiKQorICAgICAgICByZXR1cm4gQ29uc29sZVBhbmVsOwogICAgIGVsc2UKICAg
ICAgICAgcmV0dXJuIEVsZW1lbnRzUGFuZWw7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5jcHAKaW5kZXggNjk0MmQwMi4uNmUwMmRiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OnNob3dQYW5lbChpbnQgcGFuZWwpCiAgICAgY29uc3QgY2hhciogc2hvd0Z1bmN0aW9u
TmFtZTsKICAgICBzd2l0Y2ggKHBhbmVsKSB7CiAgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Q29uc29sZVBhbmVsOgotICAgICAgICAgICAgc2hvd0Z1bmN0aW9uTmFtZSA9ICJzaG93
Q29uc29sZSI7CisgICAgICAgICAgICBzaG93RnVuY3Rpb25OYW1lID0gInNob3dDb25zb2xlUGFu
ZWwiOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxl
cjo6RWxlbWVudHNQYW5lbDoKICAgICAgICAgICAgIHNob3dGdW5jdGlvbk5hbWUgPSAic2hvd0Vs
ZW1lbnRzUGFuZWwiOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGVQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlYzYxNQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanMKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rv
ci5QYW5lbC5jYWxsKHRoaXMpOworfQorCitXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3Rv
dHlwZSA9IHsKKyAgICB0b29sYmFySXRlbUNsYXNzOiAiY29uc29sZSIsCisKKyAgICBnZXQgdG9v
bGJhckl0ZW1MYWJlbCgpCisgICAgeworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJDb25zb2xlIik7CisgICAgfSwKKworICAgIHNob3c6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMpOworCisg
ICAgICAgIHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlID0gV2ViSW5zcGVjdG9yLmRyYXdlci5z
dGF0ZTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci5lbnRlclBhbmVsTW9kZSgpOworICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGUoKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5oaWRl
LmNhbGwodGhpcyk7CisKKyAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlID09
PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbikKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5kcmF3ZXIuaW1tZWRpYXRlbHlFeGl0UGFuZWxNb2RlKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIuZXhpdFBhbmVsTW9kZSgpOworICAgICAgICBk
ZWxldGUgdGhpcy5fcHJldmlvdXNDb25zb2xlU3RhdGU7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUGFuZWwu
cHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNv
bGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCmlu
ZGV4IGYwM2M2NDcuLjlmMDA2ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29u
c29sZVZpZXcuanMKQEAgLTU3LDkgKzU3LDYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3ID0g
ZnVuY3Rpb24oZHJhd2VyKQogICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi50aXRsZSA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBjb25zb2xlLiIpOwogICAgIHRoaXMudG9nZ2xlQ29u
c29sZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RvZ2dsZUNvbnNvbGVC
dXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKIAotICAgIHZhciBhbmNob3JlZFN0YXR1
c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1z
Iik7Ci0gICAgYW5jaG9yZWRTdGF0dXNCYXIuYXBwZW5kQ2hpbGQodGhpcy50b2dnbGVDb25zb2xl
QnV0dG9uKTsKLSAgICAKICAgICAvLyBXaWxsIGhvbGQgdGhlIGxpc3Qgb2YgZmlsdGVyIGVsZW1l
bnRzCiAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNvbnNvbGUtZmlsdGVyIik7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRHJhd2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5q
cwppbmRleCAxYjUwZjkxLi5iY2RhNmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRHJhd2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3
ZXIuanMKQEAgLTcsMTMgKzcsMTMgQEAKICAqIGFyZSBtZXQ6CiAgKgogICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCiAgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoK
ICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC0zMSw2ICszMSwxMSBA
QCBXZWJJbnNwZWN0b3IuRHJhd2VyID0gZnVuY3Rpb24oKQogewogICAgIFdlYkluc3BlY3Rvci5W
aWV3LmNhbGwodGhpcywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlciIpKTsKIAorICAg
IHRoaXMuc3RhdGUgPSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbjsKKyAgICB0aGlz
LmZ1bGxQYW5lbCA9IGZhbHNlOworCisgICAgdGhpcy5tYWluRWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJtYWluIik7CisgICAgdGhpcy50b29sYmFyRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIik7CiAgICAgdGhpcy5tYWluU3RhdHVzQmFyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpOwogICAgIHRoaXMubWFpblN0
YXR1c0Jhci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9zdGFydFN0YXR1c0Jh
ckRyYWdnaW5nLmJpbmQodGhpcyksIHRydWUpOwogICAgIHRoaXMudmlld1N0YXR1c0JhciA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1pdGVtcyIpOwpA
QCAtNDUsNiArNTAsOCBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICBz
ZXQgdmlzaWJsZVZpZXcoeCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlVmlldyA9
PT0geCkgeworICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiB0aGlzLmZ1bGxQYW5lbCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhp
cy52aXNpYmxlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NCw2ICs3MSwx
MiBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0s
CiAKKyAgICBnZXQgc2F2ZWRIZWlnaHQoKQorICAgIHsKKyAgICAgICAgdmFyIGhlaWdodCA9IHRo
aXMuX3NhdmVkSGVpZ2h0IHx8IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgICAgIHJl
dHVybiBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdo
dCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAt
IFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOworICAgIH0sCisKICAgICBzaG93Vmlldzog
ZnVuY3Rpb24odmlldykKICAgICB7CiAgICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8IHRoaXMu
dmlzaWJsZVZpZXcgIT09IHZpZXcpCkBAIC04NSwxNSArOTgsMTYgQEAgV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcygi
ZHJhd2VyLXZpc2libGUiKTsKIAogICAgICAgICB2YXIgYW5jaG9yZWRJdGVtcyA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIik7Ci0KKyAgICAgICAg
dmFyIGhlaWdodCA9ICh0aGlzLmZ1bGxQYW5lbCA/IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMu
dG9vbGJhckVsZW1lbnQub2Zmc2V0SGVpZ2h0IDogdGhpcy5zYXZlZEhlaWdodCk7CiAgICAgICAg
IHZhciBhbmltYXRpb25zID0gWwotICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJtYWluIiksIGVuZDoge2JvdHRvbTogdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdo
dH19LAorICAgICAgICAgICAge2VsZW1lbnQ6IHRoaXMuZWxlbWVudCwgZW5kOiB7aGVpZ2h0OiBo
ZWlnaHR9fSwKKyAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bWFpbiIpLCBlbmQ6IHtib3R0b206IGhlaWdodH19LAogICAgICAgICAgICAge2VsZW1lbnQ6IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKSwgc3RhcnQ6IHsicGFkZGlu
Zy1sZWZ0IjogYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDF9LCBlbmQ6IHsicGFkZGluZy1s
ZWZ0IjogMH19LAogICAgICAgICAgICAge2VsZW1lbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1pdGVtcyIpLCBzdGFydDoge29wYWNpdHk6IDB9LCBl
bmQ6IHtvcGFjaXR5OiAxfX0KICAgICAgICAgXTsKIAotICAgICAgICB2YXIgY29uc29sZVN0YXR1
c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkcmF3ZXItc3RhdHVzLWJhciIpOwotICAg
ICAgICBjb25zb2xlU3RhdHVzQmFyLmluc2VydEJlZm9yZShhbmNob3JlZEl0ZW1zLCBjb25zb2xl
U3RhdHVzQmFyLmZpcnN0Q2hpbGQpOworICAgICAgICB2YXIgZHJhd2VyU3RhdHVzQmFyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyYXdlci1zdGF0dXMtYmFyIik7CisgICAgICAgIGRyYXdl
clN0YXR1c0Jhci5pbnNlcnRCZWZvcmUoYW5jaG9yZWRJdGVtcywgZHJhd2VyU3RhdHVzQmFyLmZp
cnN0Q2hpbGQpOwogCiAgICAgICAgIGZ1bmN0aW9uIGFuaW1hdGlvbkZpbmlzaGVkKCkKICAgICAg
ICAgewpAQCAtMTAyLDkgKzExNiwxMSBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3LmFmdGVyU2hvdykKICAgICAgICAg
ICAgICAgICB0aGlzLnZpc2libGVWaWV3LmFmdGVyU2hvdygpOwogICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2FuaW1hdGluZzsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50QW5pbWF0
aW9uSW50ZXJ2YWw7CisgICAgICAgICAgICB0aGlzLnN0YXRlID0gKHRoaXMuZnVsbFBhbmVsID8g
V2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5GdWxsIDogV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0
ZS5WYXJpYWJsZSk7CiAgICAgICAgIH0KIAotICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0
eWxlKGFuaW1hdGlvbnMsIHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAy
MDAwIDogMjUwLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5f
Y3VycmVudEFuaW1hdGlvbkludGVydmFsID0gV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmlt
YXRpb25zLCB0aGlzLl9hbmltYXRpb25EdXJhdGlvbigpLCBhbmltYXRpb25GaW5pc2hlZC5iaW5k
KHRoaXMpKTsKICAgICB9LAogCiAgICAgaGlkZTogZnVuY3Rpb24oKQpAQCAtMTEzLDIwICsxMjks
MjMgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlLmhpZGUuY2FsbCh0aGlz
KTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCiAgICAgICAgICAg
ICB0aGlzLnZpc2libGVWaWV3LmhpZGUoKTsKIAogICAgICAgICB0aGlzLl9hbmltYXRpbmcgPSB0
cnVlOwogCisgICAgICAgIGlmICghdGhpcy5mdWxsUGFuZWwpCisgICAgICAgICAgICB0aGlzLl9z
YXZlZEhlaWdodCA9IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisKICAgICAgICAgaWYgKHRo
aXMuZWxlbWVudCA9PT0gV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgfHwgdGhpcy5l
bGVtZW50LmlzQW5jZXN0b3IoV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQpKQogICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgPSBXZWJJbnNwZWN0b3Iu
cHJldmlvdXNGb2N1c0VsZW1lbnQ7CiAKICAgICAgICAgdmFyIGFuY2hvcmVkSXRlbXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOwogCi0gICAg
ICAgIC8vIFRlbXBvcmFsbHkgc2V0IHByb3BlcnRpZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhl
IHBvc3QtYW5pbWF0aW9uIHZhbHVlcyBzbyBwYW5lbHMKKyAgICAgICAgLy8gVGVtcG9yYXJpbHkg
c2V0IHByb3BlcnRpZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5pbWF0aW9uIHZh
bHVlcyBzbyBwYW5lbHMKICAgICAgICAgLy8gbGlrZSBFbGVtZW50cyBpbiB0aGVpciB1cGRhdGVT
dGF0dXNCYXJJdGVtcyBjYWxsIHdpbGwgc2l6ZSB0aGluZ3MgdG8gZml0IHRoZSBmaW5hbCBsb2Nh
dGlvbi4KLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIp
LnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWxlZnQiLCAoYW5jaG9yZWRJdGVtcy5vZmZzZXRX
aWR0aCAtIDEpICsgInB4Iik7CisgICAgICAgIHRoaXMubWFpblN0YXR1c0Jhci5zdHlsZS5zZXRQ
cm9wZXJ0eSgicGFkZGluZy1sZWZ0IiwgKGFuY2hvcmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxKSAr
ICJweCIpOwogICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12
aXNpYmxlIik7CiAgICAgICAgIGlmICgidXBkYXRlU3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3Bl
Y3Rvci5jdXJyZW50UGFuZWwpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVs
LnVwZGF0ZVN0YXR1c0Jhckl0ZW1zKCk7CkBAIC0xNDUsOSArMTY0LDk2IEBAIFdlYkluc3BlY3Rv
ci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgbWFpblN0YXR1c0Jhci5zdHlsZS5y
ZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1sZWZ0Iik7CiAgICAgICAgICAgICBkb2N1bWVudC5ib2R5
LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12aXNpYmxlIik7CiAgICAgICAgICAgICBkZWxldGUg
dGhpcy5fYW5pbWF0aW5nOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRBbmltYXRp
b25JbnRlcnZhbDsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXZWJJbnNwZWN0b3IuRHJhd2Vy
LlN0YXRlLkhpZGRlbjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2N1cnJlbnRBbmltYXRp
b25JbnRlcnZhbCA9IFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUoYW5pbWF0aW9ucywgdGhpcy5f
YW5pbWF0aW9uRHVyYXRpb24oKSwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAg
fSwKKworICAgIHJlc2l6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuc3Rh
dGUgPT09IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHZhciBoZWlnaHQ7CisgICAgICAgIHZhciBtYWluRWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIik7CisgICAgICAgIGlmICh0aGlzLnN0YXRlID09
PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxlKSB7CisgICAgICAgICAgICBoZWln
aHQgPSBwYXJzZUludCh0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0KTsKKyAgICAgICAgICAgIGhl
aWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVp
Z2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFBy
ZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMudG9vbGJhckVsZW1lbnQub2Zmc2V0
SGVpZ2h0OworCisgICAgICAgIG1haW5FbGVtZW50LnN0eWxlLmJvdHRvbSA9IGhlaWdodCArICJw
eCI7CisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwor
ICAgIH0sCisKKyAgICBlbnRlclBhbmVsTW9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dGhpcy5fY2FuY2VsQW5pbWF0aW9uSWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5mdWxsUGFuZWwg
PSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkgeworICAgICAgICAg
ICAgdGhpcy5fc2F2ZWRIZWlnaHQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAgICAg
ICAgICAgdmFyIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMudG9vbGJhckVsZW1l
bnQub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgdGhpcy5fYW5pbWF0ZURyYXdlckhlaWdodCho
ZWlnaHQsIFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuRnVsbCk7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgZXhpdFBhbmVsTW9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5f
Y2FuY2VsQW5pbWF0aW9uSWZOZWVkZWQoKTsKKyAgICAgICAgdGhpcy5mdWxsUGFuZWwgPSBmYWxz
ZTsKKworICAgICAgICBpZiAodGhpcy52aXNpYmxlKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlz
IGFuaW1hdGlvbiBnZXRzIGNhbmNlbGxlZCwgd2Ugd2FudCB0aGUgc3RhdGUgb2YgdGhlIGRyYXdl
ciB0byBiZSBWYXJpYWJsZSwKKyAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIG5ldyBhbmltYXRp
b24gY2FuJ3QgZG8gYW4gaW1tZWRpYXRlIHRyYW5zaXRpb24gYmV0d2VlbiBIaWRkZW4vRnVsbCBz
dGF0ZXMuCisgICAgICAgICAgICB0aGlzLnN0YXRlID0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0
ZS5WYXJpYWJsZTsKKyAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLnNhdmVkSGVpZ2h0Owor
ICAgICAgICAgICAgdGhpcy5fYW5pbWF0ZURyYXdlckhlaWdodChoZWlnaHQsIFdlYkluc3BlY3Rv
ci5EcmF3ZXIuU3RhdGUuVmFyaWFibGUpOworICAgICAgICB9CisgICAgfSwKKworICAgIGltbWVk
aWF0ZWx5RXhpdFBhbmVsTW9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy52aXNp
YmxlID0gZmFsc2U7CisgICAgICAgIHRoaXMuZnVsbFBhbmVsID0gZmFsc2U7CisgICAgfSwKKwor
ICAgIF9jYW5jZWxBbmltYXRpb25JZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2FuaW1hdGluZykgeworICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9j
dXJyZW50QW5pbWF0aW9uSW50ZXJ2YWwpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2FuaW1h
dGluZzsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50QW5pbWF0aW9uSW50ZXJ2YWw7
CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2FuaW1hdGVEcmF3ZXJIZWlnaHQ6IGZ1bmN0aW9u
KGhlaWdodCwgZmluYWxTdGF0ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2FuaW1hdGluZyA9IHRy
dWU7CisgICAgICAgIHZhciBhbmltYXRpb25zID0gWworICAgICAgICAgICAge2VsZW1lbnQ6IHRo
aXMuZWxlbWVudCwgZW5kOiB7aGVpZ2h0OiBoZWlnaHR9fSwKKyAgICAgICAgICAgIHtlbGVtZW50
OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IGhlaWdodH19
CisgICAgICAgIF07CisKKyAgICAgICAgZnVuY3Rpb24gYW5pbWF0aW9uRmluaXNoZWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2N1cnJlbnRBbmltYXRpb25JbnRlcnZhbDsKKyAgICAgICAgICAgIHRoaXMu
c3RhdGUgPSBmaW5hbFN0YXRlOwogICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmFu
aW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5kb3cuZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0
S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9uRmluaXNoZWQuYmluZCh0aGlzKSk7CisgICAgICAg
IHRoaXMuX2N1cnJlbnRBbmltYXRpb25JbnRlcnZhbCA9IFdlYkluc3BlY3Rvci5hbmltYXRlU3R5
bGUoYW5pbWF0aW9ucywgdGhpcy5fYW5pbWF0aW9uRHVyYXRpb24oKSwgYW5pbWF0aW9uRmluaXNo
ZWQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9hbmltYXRpb25EdXJhdGlvbjogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgLy8gSW1tZWRpYXRlIGlmIGdvaW5nIGJldHdlZW4gSGlkZGVu
IGFuZCBGdWxsIGluIGZ1bGwgcGFuZWwgbW9kZQorICAgICAgICBpZiAodGhpcy5mdWxsUGFuZWwg
JiYgKHRoaXMuc3RhdGUgPT09IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuSGlkZGVuIHx8IHRo
aXMuc3RhdGUgPT09IFdlYkluc3BlY3Rvci5EcmF3ZXIuU3RhdGUuRnVsbCkpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gKHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZl
bnQuc2hpZnRLZXkgPyAyMDAwIDogMjUwKTsKICAgICB9LAogCiAgICAgX3NhZmVseVJlbW92ZUNo
aWxkcmVuOiBmdW5jdGlvbigpCkBAIC0xNjUsMTAgKzI3MSwxMCBAQCBXZWJJbnNwZWN0b3IuRHJh
d2VyLnByb3RvdHlwZSA9IHsKIAogICAgIF9zdGFydFN0YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlv
bihldmVudCkKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8IGV2ZW50LnRhcmdl
dCAhPT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpKQorICAgICAg
ICBpZiAoIXRoaXMudmlzaWJsZSB8fCBldmVudC50YXJnZXQgIT09IHRoaXMubWFpblN0YXR1c0Jh
cikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERy
YWdTdGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHRoaXMu
X3N0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5n
LmJpbmQodGhpcyksIGV2ZW50LCAicm93LXJlc2l6ZSIpOworICAgICAgICBXZWJJbnNwZWN0b3Iu
ZWxlbWVudERyYWdTdGFydCh0aGlzLm1haW5TdGF0dXNCYXIsIHRoaXMuX3N0YXR1c0JhckRyYWdn
aW5nLmJpbmQodGhpcyksIHRoaXMuX2VuZFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhpcyksIGV2
ZW50LCAicm93LXJlc2l6ZSIpOwogCiAgICAgICAgIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQg
PSBldmVudC5wYWdlWSAtIHRoaXMuZWxlbWVudC50b3RhbE9mZnNldFRvcDsKIApAQCAtMTc4LDcg
KzI4NCw2IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIF9zdGF0dXNC
YXJEcmFnZ2luZzogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgbWFpbkVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpOwotCiAgICAgICAgIHZhciBoZWln
aHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRy
YWdPZmZzZXQ7CiAgICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVm
ZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVu
dC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwogCkBAIC0x
OTMsNiArMjk4LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgewog
ICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQoZXZlbnQpOwogCisgICAgICAgIHRo
aXMuX3NhdmVkSGVpZ2h0ID0gdGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodDsKICAgICAgICAgZGVs
ZXRlIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7CiAKICAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7CkBAIC0yMDAsMyArMzA2LDkgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5
cGUgPSB7CiB9CiAKIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdl
Ykluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZSA9
IHsKKyAgICBIaWRkZW46IDAsCisgICAgVmFyaWFibGU6IDEsCisgICAgRnVsbDogMgorfTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbWFnZXMvY29uc29sZUljb24u
cG5nIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9jb25zb2xlSWNvbi5wbmcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDQ3N2I3MWFiMGQ5N2JjMGI1ZTdlNmE3ZTMyYmYxMmRkOTIwMWM4MApHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgODM5OQp6Y21WOz1BVFp5RlApPGg7M0t8TGswMDBlMU5KTFRx
MDAxQlcwMDJNOzFeQHM2ZHlhTGswMDAtRFgrdUwkTmtjOyoKelA7emYoWD40VHgwQylsSVQ2SSh2
Wj99R0RQNkNKU0s2RlNialVlNktCX1NOVHEoS0E7a3kxJCFSTUoyfERIUmNyCno1Q0t0PDVET0dV
Qm9yX1IwZnteNCYrbDlKLWdXPUZfckwzYEg4YW9iejI3KnFYWGYyIUtOfHAlXktRWXh7eEFSXwp6
QVRUViVMUlcpbVhZV0E3eSN7IXwzN0NOdGZaZzBmZ1ZvSzxqMVpJbVZPeDZ2cGdxLXlfK0RSWSY4
JWtCQy1nUz8Kej1CflZIZjF+STJLUSNJeXJWVCpgMU9QSGExUG9ya3ZCd0BoQCo3OSg7bUVNeUZ2
S1F2NTQoSDJBJHE3MyFEMW0rCno3TWNpdDBzeC1pXiRVfXwrUVViRlZjT3xFP0IqOFkxcHc8OyNH
ZEhwPTduSDNuJjBAeTkrdWp9NSQ7fHt8N14kewp6dXlsYlFLN29oYDgzVXs4Sz8tI1RLPTNrUjxL
WXFOOXNxejQ5c3BQKUFScXxRaXxwTUtWZld3PXFeJF9EMU9CfngKemhuJGhrWjQmXis5c24+ZXwx
QXFSM1A4O2MwMzd1SG1JP1ZHYjJ8dD96Mj83ViVORD14QyZjdEQpYnFncFUpQDBqCno0V3pHa3lT
dk1SME5gPX0qdntWRnthTD1keUlsYlFZOC0kTGZBe2NeaCtubjx5PzRSQGF6RzZqMDR2fUVkX1dr
OAp6Z1opNHJDPDhVMTRHZSVPdW1ia0w4TXAmKTVDQjN6QiF+cUdBTyZRQUVSWVkxS25iYEV1N2pK
UDBXXlZEJjxUM0wKelY9eEZ0ITVjNk1LN3ZvK0RfOHxUQXFjYGoxYyhrfGZ3Jis2WGRmZ0VETHxA
X0hlPzd7Sz16Tzs8T3V+cDtaUTc7CnoxZkBlY1AkNShYUllHO3BVOG49PGc5ZjJqJj9HYnVlUzxi
KDdeWiszVT1DT1NtVm83OUhQYF5RZ3E+aGRJMmV3Rwp6bGk8XkUwYkItRyE/KXBmeEYzRUZQciNx
eDY/aGojaiQlWCtRVHRIeEM9SFlgJHtzflIxKjJrN3NpLV91RFhJcTUKempDek9+TSFpRlFNeTtk
S1hqKEtFU2A0ai0pPElqTC1PeGVrU2FkcjJKbyttNzdQPD5QZ3F9YnpwfD55OzcmZVNCCnpNam9T
IXZCOGlxVlZHbzBFfld6MGg8U2grIUY8M2hWXkxUSkVJKEVqdEJ0azZkU1JvbVkxa3JjSE1Se3Fm
U3RzQwp6JER3ZUhJM2IpTyZJc3A+MyZ0aGsmZnpMP0V3fTtQZCl4e2hrN3ZoQTt4K0kjY3djLVJK
X21tbGUtQSVefEE3Qk4Kek1qKyFNbE9yPUViMHJIV09EOEtPeUd7MChZPzVxXm9JdVY/dTFJYzVQ
OWwjYiZtcTR+LWEtRDdlMkRAPiFBVClRCnpWTXlVbGFmfjlEcU1HNlgjVGRtaGZrNUNWczFSJWpm
ckx8cEdRdkg9Mnd7O0RPRyVfdXFPX3Q2cSllcU9yKTtIcwp6TiVAVjZLcVcrX0wzTmxhaVlrfD9t
YTNtPmg4bXtrcUVAMXxwJD8ld0x0UmJYTT9GbWcoUXdmeSk3YTVPKEIjdDgKeigrdG9vKDJ+OyUp
OVRRQSY/ZUVBKFJSPkkoQypOMihqQkM4cT5HXnxxSENzbU99OWJNTzBQKDdQYWl7SE1CaFJgCnpN
ISZfdCQpTCpNIWpRbUYmZHw7OWtyQnJ6IWY0MUN6P2o5QHomT2hJZ05jbnZnfl5wRWlSbF9zS2hx
TDM5a1ZSNgp6SkBhd3FhXkBjOVBifTBkR0EjQmkkNXw+XmBkQWlPPX4pJDZvbXJEdnQ1XnFGKlZz
N09HfShPRnZlPXJ+LW16b1oKeiNvNFhjVzcjWCVBRzByV3V5YmZ+XztjaU92fmtSRVFnTzwyeF5r
di1IZ2RrQCFnNUoqSWRDTyYtUTtAM2pwNyNQCnp3JlBDWHpSQ1RYaCRjIUE5Zl94aWpsXzM2PFVI
fmA/bVRDQ1Q2eU1xOEZAOCRnTHlDVV9WY2R1M0dpOStDR2dlcQp6ejJ6dEhFQWpqQTd4NEcrdUx8
JUJTUDNLdkd6dkAhKGd8dF5oNnEqJmp0SFRJV1EwZ1U9WSlFTilgZGxkOWZlTnwKei14dk5XIVln
N2VhIVJDR1dJPmMkKUkjKjY9dn5wemA/JlU1PmBVMnFae0x5X3ViN1FreD4mb3xpbnhmbHZ2e3N9
CnpwWks9SzBTTzw4VnV8T0g2cTQkYWsmLXRocj17NFhFVHF6O0k7R2E3cktHKjJPUWNgIXJ7MXIo
fEhTXmdgQGJDIQp6Sj5ZKWU7KDx7YVk4Z0c1TTQ0OFpIQ1pXSFUpZHxONkxNXkYpXmJeTGtMOXVR
OHVEQFMmR01AWChoMzB6UlNHa1QKemUyVDckbWxXUzlGKUxYcTx0Uk48cmNeZG1QRStuWmgmYHh2
RnpIfkkzWiRaQDYwZyModlpKYzE4bUQ/K2I/NEJiCnpMLUJfPylQUzEwVEIySUZJITBZckp5cEc1
Z1A+dWVrKnpWSiQpc3RnY3xyND83TE9LNXQ1UiEwVFNffWpgPnl0dQp6aispTCVvcWs7XlR9JDBV
LUZKRj9kT211IWRhTEAlYFUoMkkyMj0qdDF7VnliM2BHcig4czBTbU10VmtCTXo0JkMKeiNAQCNE
Iyt4UEBDWWRJcXJkKzA4cnVDKmomOXUkVm4hUHNYSHhEIyN3bUA1JFNgPUEpdzNOMXR3ZH1LRXV5
VkQhCnpWWU9rY1cxVjk/Vkl5Vn1XN0JLUFYwKjsyJlVWTW4kZ2FxNC1kQDJ6I2VVUioteXpLNWZn
YD02eUpMZUIlRXs4SAp6IWZFQk8qNVVsYUd0VG5QWTBodDQjOVpRQjIzPmh3ISg0bWFTbCNeSCtL
PHAzQXN1T1VDJUMpMS19MW5GSUM8MlEKekZlQz8zdHRaO2stbX0mVj9kOU5BPVoqRHRAXjBgVV5L
dFJIPDRmdTU7b0lzKkA4ez9EekBPYmUpYzxoK1VxRWNZCnpYck0ma3NsZHF+ckomclAjYkRqd3Zm
IVViWkkwSDNQPXQ3ZmJjUystTXVtPXFOcnEqRiY0ejErbXhnYWUqaGshbgp6cT5sYGE5RWpRJWxA
Pkp7dHNQd3YxSU1fPXY+KVItY0txMFE/N2BSenV8SlBIOSZkP2JrQmZ+UGs1YEU9al45MXUKemRa
SF9WRlgzZHVZQCZXKmJyTXhsYU1EUCFUeWtPWik9QWZzNF5vNnVHRSU7cnZPMEEpbGB9T1ZidGNV
eXR2O1A4CnpKdk16UkxvZWZJQ1BVYDIlJkY2UXIpJHFKcE5UdjNAdlFPTCtnWTRoQyRwQmFaTC1e
UWdtYmNVSGdpMzRwWFNOdQp6bUV9fDlodiFlOEdkT3A8ZkxNQEdAWjxjRV44PHhTZzskSHtpc0Zo
c1UkREs8ZU5wO2kkdEErMj11NU4zKjJORD4KenEpU1Jtc1l7UVNFfGZXekp1WCkmdWN+MEhOVXp3
dT8wYjNhaXFWelVzfWZnQnVGK2dleXRZekZzKGZ8YjtDZ0c3CnpXTDBASlZ8OGx2JnpoaWA0PnhS
WEppZEE4V0BEe3o/V0g9fXg+SSNxXispU3g4eEEqJkgwbjNELTslcF48Mkx7OAp6M3dQLTVxJX1j
SihNe2ooYHJMaXI/OWU9WCYrdU0laSl1PyN0NWo9TTgtSDh6ZWIpUUE/TnNlKTlxNWt1aj9LPTkK
eiZUbX0tVUdvbi1BNTMrLWJkTnVAZkIyJXV2UytCKnIxd2RtTEVvY0N4e3JHTHdmbm10WWQtRkpx
VmM1anNydTgtCnowZ1p2S1hQVkMqM35DTWI0Q3hOXzRJMnpVODhJMGRkflcmdCNpLXJyKmJDPHVR
IWh5YD1VKVo5YHR+fmZfMiElUwp6RzFPUzxJTXNPV1RoX1A1QEElKFVPLU41UE97entsZH5mdUFX
WGZTYD5WeGx4QDYkMEs7ZzE8Sl5mTVB7MSFpbUsKejZ6MDAtanBrb2Bhe2N0X2JOSmBvaDRlK0gj
aispX3JNcTlXejZeZUtgYTF0RHs1JDtwPkB2cjQpciRQZSEmU0BHCnpfaUk2R0ozbGhsKzFJTiE2
Z003aStIY1BOak1+Qyk2PmZgYy1gZz9WOFElXjM4dz5vNjFeJmhZZWBBNWF2QjJNMAp6O0JQR09I
eH5HdDd4PGVPXz9zOF9uLX08LTd4PGVPXz9zOF98QzwqR2JfQEI8JERvamkwUVUzKjtRS1dJREQ0
NUQKejl8VjhgXn1wNXM9MjNufTh2dW9uTFZMcyMzZ0lDSDVaMikrIVlDfDNAPXpLeTEzU1ZXUF5v
QmIzQDI2PT1ZeE10Cno/blJLSjV+SlJzOWo0RD0pTHtDKzYzcUk2LUhAWjRiQlNBKz0qcEFKK3NY
RztmTHFYNUNfPWJjcSkrc2w3Xzt+eAp6MzRoNH5zYjE7YjFJallUV1NpeGQ2JEJKNWx3eUBqa3hi
QDw+WHNVX3h9MWkhV2B4IVM/R35NMy02XzRWYHMpVlUKek5YQnYzYy1MZ3QzXks9OVArNzhCTm4w
RChjLXlBaFJvZUdDeW13cjcrQiZARHl6S0pjXl98PE1KQ316WkRjdGpsCnoqR25JUXVleDhUZXxm
O3V6X0ZuQTtRWFV1QTxtJXxWSjZ8MDVyLXB2cW9TamVXM3JBRiRKUUxiOW9HYHlkZzUrRQp6THQ7
KFIpI1MzMVdob2A2Tj5WU1I8KXg9Km9YQ3RnOWRPM3l0V1RESWM0JHNTWmIpODB6V1hfdzBeUmQr
ZytmS18Kejd3OWUkRX08ezI3RWhHKW1SNlQjbWl0IWRVbHpTV2VQIStIKVV8aCZsaD4hS0syPzlJ
YEZkbUY9NkxQSHk3S3kqCnpoSndaYHg5OzQyZFN8TlhNPkZ8NykpcytRbztHeWIoRVRneiRzUFdr
RT9vYH05Si13eklgX0VyeTd6ZkphX1A1dQp6dG9LQ3JEZmErPTtPbnpqZ1k4NDUhelZfWm8tMiZm
azFvOSFjdjwpQXtPYzJNSmpPSn54eU9JSjllUChla3YhQEMKelVVeTMzMTA5bUhkaClTK0NValBG
aigrYUxlQUIxMXBNd2BuN2RhUTdGOW0hN1VzQXJaZVZ6RVd7QyN5ZmU/QEFnCnpYVnF0b2I/eCh5
PHFnLUxVQXchI3s3KFFKS287MTdMfnNZSkt4JDl7IXVjRlM1bH5JJlY7QmRsSnVWNCgwKDI/SAp6
Q15NK2RYZ1RUVDhPb1VTbjFAKm4qZWNsPElrfncreCNmd2ZKbz56Y2A5a142M2UqVGI2OGJFe0Fi
TjEwd14pfD0KemVUbU9mRVloMCR7U1Rhej41IWU0Q3MmWUFHKkkkVmp5c3M4UW0kSCRXVXJzOXp0
RVZ9e0djX2ZKKlA4K0pPXlg/CnpMazdLdVpBSn5vUzUxbWNHdEpgNyEhNHBNbGRMa1deSzM1S21m
S3ltdVhMeiN0YTdTNFQ7cUpoclBsUzlUbDB9Rgp6X29wNmpOYnthcy1ZRDtOcE8zeW5lcl44TTBU
JSpLMmdMOytKP2YxLTRSJkZjO3BQISRrcnErNShKbkViJE5YYmAKemtLNHFsI3RXWmROV2RtK0Jy
WVkqQ2NpJjlvLSVyQkFvV3BOY2x5MUloUm15eyYhMCY8ODw3Pjc/VXpIIUopQ0VtCnp1WHwzaEs7
JTRBQXpaam5HPHU9K1YlZXBYViY0KkBRcHF5cmFgRm1fJWFtN1d1Rl9wJnNBUlpLVXF4MzxTM2BT
KQp6PHxiN3dXZ1NJNWM+fSU/ZSt6d1V7cjFOQExycTxHOD1KNCp5VnozRG4lfGF4fDlwRSVNYGRT
aVNLRVckPyRMKUkKemRscV9VYG88clBeZ24rKmBzRFN+Y0xPdWU3NitHeVIpPzJJN04xWCNqPVg0
cFNeZ15oYl5lPjFXNCteVi1oTyh3CnpHTzw0U15aayNoI1NhdEgxMFMxYiU0YWo/aj9VWUQoKXB+
bGFBOzl0aUZJbEYlaGNELVo8b0tQRk5keT5SIU03Nwp6S1E2RFlac3U7eXtQSTV4YURXeU5mZWJK
UHt2WmRtQXp1THpnYylwdDMyLXRCZ1FgVmBWZUdKOHhKdnZfYSR9MEsKemdlTyFtSDl3Nml0cXo/
b3kmQSYtTW1FTjZydVdTRVNAS3Z0KzJxKkMqKFcpZ0lyRihmeFhwLT9KZGB9MmNwdmhXCnpAa2Fe
aDMkaEFNMylLb29pKWVfRmk0TzAoQjwzJSFCMChlWlFMOyVZUz10Y2NQTSNnZU1BKHZEKihTTGxk
MTNodgp6M1QyQSFPNSNkZSU3WHs1c2w9PD05VEdwWnF4TU1zakUwRk9USnkxMXhwdHhzTiFMKHN6
ZHBNRyMkZUhLI09SSzMKenpLT1JmZz13OWN0dlEpX2hlZj1sanVubTdKTF90akN8ZXluUj1XbEpI
aXR8e1RQTEVeK35Jb1hTUWxNYUNmNkNhCnpKNGNlO08rOHBWQ1A+I2oxSEZ7SUAhcWR9cyhwfDdZ
NTd6N2p8M0QzSXRLe15lRjwobWRNM21AUjVsQz4+a0JefQp6VkhgO3cqJU9yenRzMT1AKHtiIW4/
MitTfGFZRkliQHZBNF5CKHg7dkNiPWh6bzx5RGVtTkkqNERzP2gjR0pQXioKekI2SUJZXkUyJmRH
cWRFZz1DYUZqSmFWUDsoMFN3ZVAzTGs3ZzNudFFEaXZgU1pDQEM+YztgfTFAekR+cShnUzVJCnpX
eE00dzY7Q2NWVHEoU29kQGExdl9xdTE1U0c4fUEtd25UOzBrdWMjVihLIypFO3NodlREcnJ+Qnp4
RHErNEVqeAp6T0c7fSYreDdlSD9RYzRFeUNmZENiKVNEWSpvKjN1ZXFgR3BgdU9DTkY5WWBtPysk
Tl83UWNFbHsoNEclekdZUSUKeiY7UCZxXnUwOSFEK2ZUcUpPR1hlJnUoPUFmSE83LXBJIXQyR2RU
Y2VsISMwYnopciNkPUZ0VV5Ickt6XzQ+cTZ4CnpFUHhNKTJpYyRrK3lkUVQxV1h8ZV5iVyMzdnFO
SWdMQzZIKm4hfSh9czJJOGhKd2E5JTgwTG1tVkhZP051N3NiIwp6Pm5MODdEWiZnX3FzR3ZiWG14
WjF4Jn1Scztsa0tzQC1SYktZT0ZDZjFLVz15IXhgVyphWUp9a3lnUi1ZemU4cTkKelJ6YkV3WmNi
aX11JiE8dF9YK0hUN3tYZ2g5bSluT0IyX0xtOEZlRHtGM29ZOFpRM3xHSyRrI3xxRUJGZTcpfiQo
CnojelpDelF6a1BEXkt9KnRtTVBZQkhXanV9YnwzYUZqeChHKm9RKygxVHd+bjlMPiNlPE19X0F0
PytIRT1lZ3kkRwp6ZmZkMUNwP3FPeTVrWms5KFdaU1Qjak01byNuJlhCTj93PUJrUGgyXzxiYjcm
ajt5a3JnZ24wanlDUkRjbj08Yn4KemFUUjQle1g8cjImZ3h6b2Z0dHMpXjBuKUFVZyFhUlgjPGtz
ZDgyO2dPO1pzd2w2a0VxdXlVfCZ3SDM2PnZmcCVjCnpiP1J8dWJhOGdROzxuJX09VyZXTztickxF
PWotSjZKVX1ja0VAPCM1TUBWMzNNPnRiTlNtY1huP1U9Rkg9RDNVIwp6KzZoWlpESlBqeSUyVEQl
SXg/Jj5LYn1kLStMdHwlVGF4Y3pwanlhU14hNEppOz9CfmhAfE1kRnUwRT9BdHtTUTcKenp1OF4p
eWtZUytiQ1lJc0xgIUt+WFohMlVePV9kYUA0bldAZGB+bDxaNFNGVXp4UUo4d2FkOERNOH02YUdy
bl9YCnpwTj1kKGBXQ1dzYC1qczs9dWdAJHd7N3c1Xl99IXg+fjdNcD8qfWk/MEVhO1lJRXtGfTNH
ez12JG9CKDR2PUE+Twp6Z1ZZKz5MT3dgXiFDQn1zKVFyPj0lKT08ZV9iUlk2O2B7NkhPQjVFUmZi
djVYcWxWRXFeZyhuTztgeHZOY3p6ZzUKemdFaHJ3VlRXLXtJNDR7TT9sV0V2cE0pUG1gMW8rTGV1
UkNHQk9qd1VOS3M2SDNCSDhxbHhtM0lgS1hHaD44WjE1CnpYbFV8aSo9V25AQjxOYmBqcC0qRCFX
cSR3U3hucWFefn5ETFY9VW5hWns1SVYmOT0jMiMtWSEjJTJ+bz8lKGNtVgp6amNDbi07YzRWYD1p
fXgzJmZnPFlFRXArZERsOCZgNzVPMEF2OUNsZFBUV35TTVVxUSRTODc3S2VTaTZaUkdEYm0KeklK
ciN1MCk9d0w+cT9FdnRwXntkSlhMKmo9KEYwazI5PjYkbWJTTEhQTF4ofi1XTE5KTGxxLTA8TVNw
QCZCKUY1CnpFd1V9JlQxKGxhKmlQSClJb3h6JkpBQiVDK3R0Vkl3bVpoZDNpPHdRZEU1QmhAPy1S
bTQwcyEpNjxpO305aHgxRQp6aWluQik4dG9VZTlENm95ZkJabSNlLWNAOE1UKzk3Q3V6PjxpPHZR
SmFBeW0lZDIoKiRZMiooU2NvJVhPeX1lamMKelkraX5mWXBVP1EhZ2xwKFdsRUtINGI2P3wrT0dQ
QiN2OFpXbnxoaTxTX0U2aT9xQkx+P34/Q2tlWW4lUkBAVjQ7CnojUV5gSCQ/Jm5+YnVTaVFpO1hH
MCl0LW9XLSFQNHRhaGlNaG5TVXx2JWtYI2YzaUJISWtELW1BJjUxM2haUzN+agp6b2w4aWR3aWlE
ckF7OG9tJGFfQnNKfFRXKkxmJnt5JE8oI3NhLW4pPzcrT1dATXMobSV4QmBCS3FDcHY7KG9qIykK
empBJj17YkBWRG02UkZfJWgqaVNvVT45K1F4SHt6Qks4ND5QM25INkc+TUV1dlRxITA5dTdwfDJD
QEx6ZDhmdFV1CnpaSkhhalpnaC12e3EpZmNmKCUyOWFaS1YmUV9SSUlCdndUPjR6XmtMWWFDdmpM
WSNBNCkhYWN1TUlJY19JUFlEKQp6U3BofnQ4NmlEa2F9aGdIPVk3Nm5RUjBhYipePHwhZFpaVCp1
KmhpM2hSUE1vS1VELXVzPig/UjJVSXheZDg7KzMKelopKW1rVURZQWlqbnRibmE0X3NPbU5MbWg7
P1lEKVlPNSs2T0ZQKVUhT3s2SiR+bjx4KD1HN0dkaztzX3hMMnFUCnp4OT4tUHprdGFnXldnZy1W
eGRMaDxQa3x4UDt9LW8mKk45KEl9K3xFVHxSbUlsekV5XmBldFZQblQjeUE5UThjVwp6YjQ9JCE7
aW43RkY0ZExmbW1SUDB6aFp3KTwydGVHTUB7JDUlc1EoRXs+QzQtYDxlPXgtQzgoWDJrJUZCYUND
TSgKejIhMUhvR3VMO2tLbUNjdmZZS250KENvO2EoZGRfd3VPe0R8OWFueGtLVC0xREBkTisjIz5+
eyojMyMrcXU/dUMzCnolfVpUaCtQX3dRJWxLfSslKDZWTjYweXA/VER6dlcqOE1+Nk45e1dJYGtE
M1I0VEZ2SGpnM3ZTJkM4cTlLbHkpPgp6ZXFRLUd2bjlDWXhzfD11d2wlait6a08paWNSUFEoYjkt
VGpXayt1KGUmXjI0IVk8I2chKjJGJi09Njx9KklAMGYKekFBbnBsJFVpOEFYciF0Mj4rPThaNWEx
dDwpT3IyZD0jVjJKKEJFWFF3dT1lYj1SRGxCNDNSU2p2aE1gQHxFaHlTCnpZIz1zTHB0VTY7K3J3
Z2tNQCZyciFLJDdpSXUtfjwrQ3BaKlZIJGd3MTtMKWRWUDtuVSRtMyRYSEJBc3FLOyhJKAp6UTAr
aGNsPWB8RUFac0lfTGdXbzA7VEZ+aT0wfFd4WG9SSVVmQHUmdTlwaTBmYDtYMHYyVEFLNklTaE9I
PTs7NXAKemYkNG4wXiFMVk1LPm1SN2BVTSY4JT5mdzttSUg9SjFWI2VrTld+V2sxUl56SU1uRHMy
e2N7dXRwMT0qIUw/RjZRCno7MEk8OTlEdVk0TGZRbCZuRH4jSz02e3B1e0ElWmd3RU5GSjV8UjN7
QVlgO1pXQndrRWg+WkVDUGFvaWM7NkhMVgp6V1E7eEMtdDBuTWQ9bWRYPHt5aV97KGo5eXMjPERa
WVV8SU8oMVBnd1hqIXhkU19RMyZScz0qZTZQZ1cocWgtKHYKeiRhO1NXdCZIZHRmZXg1UGRpTUc9
JEchZG84YXlNOzJTcUV7Y3E3YHEtK3R0ZTdURWw8X1c5VEtmMTNnRDhDWW1xCnpfJWoyZmUpM21N
QWFiVng3Vio8WD8+KkUtaUA1VD9ZKzxDUnk7P3pfODVBNUg7XlhCVk1wUT90Q1Bgdk17WGxtSwp6
RzIodEhETWohZksyUkJ0JWxgKGIwMDAwOWE3YkJtMDAwWFUwMDBYVTBSV251N3l0a1cpayNEX1JB
PmU1bjh9TSYKeiRyaT89R1A5ZnFUNSYyLWtPelZiOHdYSFBZOSV9bnswclBqQDc9ZihneD5ZZW00
QVIrN3lUM2pSfCpQdGYjUUg3CnooanAyRD9TJTZAUjkwNXJfeCg9Wj9gQ0F5JjwpYjxyWHpgcjZE
TGxiQDA9NFM7QCVxck1OeT5oUyEmLUM5UEd4IQp6aFl5RkUmRX03KUhQeEJwPEt1KFd2OVU0UU15
Kno+aSo1YEk0QWN+QHNJNjhqMz5SK3pDRV4jN2l6LSVJPEwhRkEKekp9IUVFYUIjM0N4K1JnWjg4
Yz4jTnFsVjFvSEArfTNsQEJCRyNWRWgwe3Y7XyU5WCNvZEdqWENvSC1NSHNubER3CnpJV0doPDhU
U1FYdlREdUNUV0FAV1dMU0ZuXjV0O2o/YzI5OXpMdVVwZjhLb2U/ajBWWkFoY25LPk97PkkjUG1l
Rgp6LUZBZFJQflphP3V4UWJ1ViYxJVleO2ZUNkg1ditVZWIlZzU+RihYVHdMTj9HKUhaSjE3QGla
MiYhMGJzd2YhKTsKek0qXntPbUxlKVYoP3o+VDxMJldlLXFXV34pN2k2VTNtSzhYWmIqPUlPP1dQ
PSgoMlcjKThvZ0YofWZFYyh2fmUtCnooejBkQyh3OHFeclpqfVBsPXY2alolfll0R1NFMHtvQEE5
ZDNYM093e1A7MWdUZW1KOUo5YUZjSSZ+Xi0rcU55OAp6SzdCZlVgdCZLSCFySG1ZZE9WMUp2e0Bn
U2U5V0BTdz1fQ0JUMTUjJUl0IWp6ZSlIemRHJV8rMGt2TVNSSylRREEKelRIM3lTZHdUIT1lTUFY
a3NvRWhFVDZuSU92N0d5fk05cTxfITchN3xlRXNAJEkmfG56SShQMHxXYUA/dThgNyMoCnp0Q0E4
WGByMSt2NGJQKl5Lfk5sSE1NdG1ZRWFVSmEyYWhCYVU0JjlYd1NOOGpibnhLODBLMG5pWUMzVl5N
N25iMgp6Tn00QHVjRGlAKFVXNlBZbU0mY3kzWWNyOVpzR093Ki08dElJY1Z1QUlBQkN+dFl2Xzgw
YCVBYXtoQ0k4OCViLXwKenUxJVhhWiUlOWV5TjJOfmw7eWE1YEV1ayZGdzRJajcoZmNUJHFCcT1T
OD83VFM3SHxJYCt8LXd6STVxUUkmJFBsCnpmYlFKNkdvM2tlQ2hnejlLa2VTVkl9KGQhKHdVTDJV
JXd1Q3EwPW1zbW9gKygxRWBZQEBGYVZocWZOWEh0a1QkYAp6U15ec3xkLW0rS2I/ZXNqXzNQTDQ7
PkMtIVkxNXszXnl0eGFeNW4/YDc7PDwqTUgkOUJ5bnZHQjA3RnxSPEV9UDwKemQyK3JUT0hmKTxn
JHhCMF8qbm5wIS11Myh2ZkBGWWtuIUJwZSRiZXBLTzE3NHRuRHM9aDRhPVJSJHduTTNRdmc9Cnpp
SGtRQmswV29NPVEwa1JNP24zfjUrSUVBUXhAX2AkcXBGNlJFJDYmcHEhJTY2azV+NEQweX48N0Nm
cnRJdVhieAp6PCYhOyQ8Y1RgZ2pFVjRGSXFVZ1JeMTEhfWtka3BXNzZUTkdmQGVYYEUrQVdOck08
Oy1jb2JUSTN9KjFzaEg5KUQKekZKJVhjJk85NGQ+TD9tbkkwNjdndFN2UlJrR05QKEwzWG16NGAh
SlgjTjk5c1VGZm15aEtRYUJASWRteiRLZ1ZRCnohRT5ic3RgSkoxaWktUEwjOShEazd4NjRXa3BY
RFFSRUxAZzJKJCs+Ykk2MEhufWFCZG92aVJeeDMhI2cpJndOWAp6P24jS0tnfVQjOUQke0ImdDtu
KnVrK35renJETzM1cGQ0JTB3RWRkaVFkV3w7byoyQiRmTHo5TzckcTQlPGJ+UFkKejJ6R2R9PFJy
RnF3fEY1RDlpMnteU0pPJkdTKVV5O1VENCpPYzhsZE8jKzk2Y0NnTlohMDxESDNGdmNNU2xmd0dA
CnolJXxAaWtWZ1hBV2l0TGBKYi0hNilUPz55MDIkQzBQSyN8QTUlQnFjPigodm57QFlweyowUSZT
SW5ILU1sV24oVAp6JCYlTEwhLXg1fV8kRll5JEpAeVlXNzEjZms9e2BGTXxJWTs4djNqMkQ8JGJN
SmFnZn5nKXhyXlRTdmRieWRNaXUKekYyezdCOSVDK3I8PHtlVEU7TnRoT0xgQ2RTJWFmR2dhIyU9
SypCISU3Pmlze0oyNmczXmA0bE9KVjwyYDRpVHRKCnomIX5kYEppYiZzXyZ3VCpqe0woYHtBPDkj
ekoyP0tscV40TFUpRUlsSzlCblcoU3lwRHhGNjhJanIjJE8jcj1SMQp6Qz9jb3YqbCRZWUJDOHRh
cXB1ZUMxTEMpK25tZVhMRjc1fUVnaVkxWHtlVDMybm0+UjNGRmdNXzF1Mj5rWlQ+ZUkKekZDVSti
bVZySE5faG56NHVzUkJjSVJ8KG1AKCQxeDE1Y1RoJiY9cl9nQDIqYlFQd3BpYHVhakhiUl5lPisy
QU95CnpiTjFfdHJGUSlJQCFJbWAlT2U2cmc5aXJJUEYzKjhVTGoqVD1iTHVSMyh3eFlka2VsbCNI
KFhLK3o7UzY0Kz42MAp6ejVeYVRkWCNpXjZXe2FHOEdfPXh4YkhTTTM+cyg2NkswSzwoJntrTSQ7
Mn11P2JAfUFgPHJ5PCZZZzdlOz5FT0wKeiNmcTR5I0VpLVElUiNLUGU9TGBRTWhDNj05ZGs2eDNf
aXltSmF+fFhoS0FDUDlYa0BBPWlDdzh6a2Zmem43dCZICnp8MSZfMyk4QGVEZHBwRy1YRSlhfD1n
KiVIQmdnfUNmYF5zQTEoOUw3dGMoXzsrfFBsYCVWcUwkOT9TN29pfnZlZQp6I0NRTWpATmpITkV8
aHBiYz1GXik4Zio7NHIhX0pkRj9hNlZvJi1nUSVWZjBtZHlIMGs7LUcyTUBjP1RDPTxoZHcKelBr
JWk0QlEwTE1JQzl7SnxOTFA2QG85IXA8Vj02RG99Nz0tUkZhd1ZoSnV7MTNVV1luKjhwekZTYVQ5
QCY2K2lGCnpFNWM8SjdadnVON25vPHlvYG4qazBwRz5UMH1wMml2eUd6ZmFwV1RjZiRySUFid3RN
WVY8UEwwQXZiUV5OVmpqXwp6aj9ra0ZQcERTcjdFdEJebHBCUzVXR0VPK0RWPVQ7ZnUxRWAwMGtD
ODV1dyY4U0A5c09GIXdZRXdOV3VpZjlSIUAKenp8bCZreTk2PVhfaCU0S1g0czFIKVpUaExtcDNu
MDJgYFU4RVA9Y2d6bmNVM2duaytpNGNoT21XdjJxUmFtWDFECnpZI3UlbDgmN209Z3xzWm1jdVE0
eHo4PCRpX21SdEtgdSZBKkIweVd4OVJxcU1jNSk+STB2Sz5yMTZwYSU5R0tsPgp6cHZSQzJhI28t
Zz1pP3x3czFsU1N1ZGpJcWNSJGsrV1hfKzhNdnlVZChSdkFhOG1pd2xwTndhVlE3akNkJWo3ZzsK
emVeJmJDPX5FKkl1KjNgJEt+THV+PDVRSjxZJH5aNzNxOHQtVEYqSVA8KyhFUkNUa34/JVh2QT97
TDtDMjF5SDJoCnorPmtXO2g1Q1cyQHV9U0VuLUN6QU01QCVJcmdQWHl1NSYqP21XeF5EZV47QkFx
VCk9RHM3OXRGYXZqaUEzfUVTbgp6K3YwSU48fiVANHpFOX59MGgzJkU4czJuJGp+U1NFNERlS1di
I0wpWDc2dVJuM2E/XitjZC1INWFwT2NsWkljJl8Kem1maSpWITF5TTdKZjJFTklhVmtOO0VwTkA8
QSRWOCohOHloa0tHU29oYD5BZDB9OTZfeSRBaip0Rmg/WS0yViUpCmw2Q00kV2B2SDkke0NodTt7
dHd0dUZ1KEtDMiFIP3AwMDJvdlBESExrVjFoMShTeG89ewoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx
CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCA1MzkxN2Y2Li5kYmY0
MDZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtOSw2ICs5LDcg
QEAKICAgICA8ZmlsZT5DYWxsU3RhY2tTaWRlYmFyUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5D
aGFuZ2VzVmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5Db2xvci5qczwvZmlsZT4KKyAgICA8Zmls
ZT5Db25zb2xlUGFuZWwuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q29uc29sZVZpZXcuanM8L2ZpbGU+
CiAgICAgPGZpbGU+Q29va2llSXRlbXNWaWV3LmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFiYXNl
LmpzPC9maWxlPgpAQCAtNzUsNiArNzYsNyBAQAogICAgIDxmaWxlPkltYWdlcy9jbG9zZUJ1dHRv
bnMucG5nPC9maWxlPgogICAgIDxmaWxlPkltYWdlcy9jb25zb2xlQnV0dG9uR2x5cGgucG5nPC9m
aWxlPgogICAgIDxmaWxlPkltYWdlcy9jb29raWUucG5nPC9maWxlPgorICAgIDxmaWxlPkltYWdl
cy9jb25zb2xlSWNvbi5wbmc8L2ZpbGU+CiAgICAgPGZpbGU+SW1hZ2VzL2RhdGFiYXNlLnBuZzwv
ZmlsZT4KICAgICA8ZmlsZT5JbWFnZXMvZGF0YWJhc2VUYWJsZS5wbmc8L2ZpbGU+CiAgICAgPGZp
bGU+SW1hZ2VzL2RlYnVnZ2VyQ29udGludWUucG5nPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCAwMzVkYzEzLi41MGU3ZWY2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpAQCAtMjE1LDYgKzIxNSwxMCBAQCBi
b2R5LmF0dGFjaGVkICNzZWFyY2gtcmVzdWx0cy1tYXRjaGVzIHsKICAgICBiYWNrZ3JvdW5kLWlt
YWdlOiB1cmwoSW1hZ2VzL3Byb2ZpbGVzSWNvbi5wbmcpOwogfQogCisudG9vbGJhci1pdGVtLmNv
bnNvbGUgLnRvb2xiYXItaWNvbiB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdlcy9j
b25zb2xlSWNvbi5wbmcpOworfQorCiAjY2xvc2UtYnV0dG9uLWxlZnQsICNjbG9zZS1idXR0b24t
cmlnaHQgewogICAgIHdpZHRoOiAxNHB4OwogICAgIGhlaWdodDogMTRweDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCBhNjA5Zjg5Li40ODk5OTZjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC03OSw2ICs3
OSw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
U2NyaXB0c1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTdG9yYWdlUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb2ZpbGVzUGFuZWwuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnNvbGVQYW5lbC5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VWaWV3
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJT
b3VyY2VGcmFtZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iU291cmNlVmlldy5qcyI+PC9zY3JpcHQ+CkBAIC0xMDgsNyArMTA5LDcgQEAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICAgPGRpdiBpZD0i
bWFpbi1wYW5lbHMiIHRhYmluZGV4PSIwIiBzcGVsbGNoZWNrPSJmYWxzZSI+PC9kaXY+Ci0gICAg
ICAgIDxkaXYgaWQ9Im1haW4tc3RhdHVzLWJhciIgY2xhc3M9InN0YXR1cy1iYXIiPjxkaXYgaWQ9
ImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiPjxidXR0b24gaWQ9ImRvY2stc3RhdHVzLWJhci1p
dGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIHRvZ2dsZWQiPjxkaXYgY2xhc3M9ImdseXBoIj48
L2Rpdj48ZGl2IGNsYXNzPSJnbHlwaCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0b24gaWQ9
ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48ZGl2IGNs
YXNzPSJnbHlwaCI+PC9kaXY+PGRpdiBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRv
bj48YnV0dG9uIGlkPSJjaGFuZ2VzLXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXIt
aXRlbSBoaWRkZW4iPjwvYnV0dG9uPjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlkPSJjaGFu
Z2VzLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNv
dW50IiBjbGFzcz0iaGlkZGVuIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRp
diBpZD0ibWFpbi1zdGF0dXMtYmFyIiBjbGFzcz0ic3RhdHVzLWJhciI+PGRpdiBpZD0iYW5jaG9y
ZWQtc3RhdHVzLWJhci1pdGVtcyI+PGJ1dHRvbiBpZD0iZG9jay1zdGF0dXMtYmFyLWl0ZW0iIGNs
YXNzPSJzdGF0dXMtYmFyLWl0ZW0iPjxkaXYgY2xhc3M9ImdseXBoIj48L2Rpdj48ZGl2IGNsYXNz
PSJnbHlwaCBzaGFkb3ciPjwvZGl2PjwvYnV0dG9uPjxidXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVz
LWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIj48ZGl2IGNsYXNzPSJnbHlwaCI+PC9k
aXY+PGRpdiBjbGFzcz0iZ2x5cGggc2hhZG93Ij48L2Rpdj48L2J1dHRvbj48YnV0dG9uIGlkPSJj
aGFuZ2VzLXN0YXR1cy1iYXItaXRlbSIgY2xhc3M9InN0YXR1cy1iYXItaXRlbSBoaWRkZW4iPjwv
YnV0dG9uPjxkaXYgaWQ9ImNvdW50LWl0ZW1zIj48ZGl2IGlkPSJjaGFuZ2VzLWNvdW50IiBjbGFz
cz0iaGlkZGVuIj48L2Rpdj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlk
ZGVuIj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlkPSJk
cmF3ZXIiPgogICAgICAgICA8ZGl2IGlkPSJjb25zb2xlLXZpZXciPjxkaXYgaWQ9ImNvbnNvbGUt
bWVzc2FnZXMiPjxkaXYgaWQ9ImNvbnNvbGUtcHJvbXB0IiBzcGVsbGNoZWNrPSJmYWxzZSI+PGJy
PjwvZGl2PjwvZGl2PjwvZGl2PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anMKaW5kZXggYjYzMmMyYy4uMTU1YThjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCkBAIC03Miw2ICs3Miw3IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAg
cmVzb3VyY2VVUkxNYXA6IHt9LAogICAgIGNvb2tpZURvbWFpbnM6IHt9LAogICAgIG1pc3NpbmdM
b2NhbGl6ZWRTdHJpbmdzOiB7fSwKKyAgICBwZW5kaW5nRGlzcGF0Y2hlczogMCwKIAogICAgIGdl
dCBwcmV2aW91c0ZvY3VzRWxlbWVudCgpCiAgICAgewpAQCAtMTcwLDYgKzE3MSw4IEBAIHZhciBX
ZWJJbnNwZWN0b3IgPSB7CiAKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJzdG9y
YWdlIikgPT09IC0xICYmIGhpZGRlblBhbmVscy5pbmRleE9mKCJkYXRhYmFzZXMiKSA9PT0gLTEp
CiAgICAgICAgICAgICB0aGlzLnBhbmVscy5zdG9yYWdlID0gbmV3IFdlYkluc3BlY3Rvci5TdG9y
YWdlUGFuZWwoKTsKKyAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJjb25zb2xlIikg
PT09IC0xKQorICAgICAgICAgICAgdGhpcy5wYW5lbHMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29uc29sZVBhbmVsKCk7CiAgICAgfSwKIAogICAgIF9sb2FkUHJlZmVyZW5jZXM6IGZ1bmN0
aW9uKCkKQEAgLTM5Niw3ICszOTksNiBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24o
KQogICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcygicG9ydC0iICsgcG9ydCk7CiAKICAg
ICB0aGlzLl9sb2FkUHJlZmVyZW5jZXMoKTsKLSAgICB0aGlzLnBlbmRpbmdEaXNwYXRjaGVzID0g
MDsKIAogICAgIHRoaXMuZHJhd2VyID0gbmV3IFdlYkluc3BlY3Rvci5EcmF3ZXIoKTsKICAgICB0
aGlzLmNvbnNvbGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3KHRoaXMuZHJhd2VyKTsK
QEAgLTUzNSw2ICs1MzcsNyBAQCBXZWJJbnNwZWN0b3Iud2luZG93UmVzaXplID0gZnVuY3Rpb24o
ZXZlbnQpCiB7CiAgICAgaWYgKHRoaXMuY3VycmVudFBhbmVsICYmIHRoaXMuY3VycmVudFBhbmVs
LnJlc2l6ZSkKICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwucmVzaXplKCk7CisgICAgdGhpcy5k
cmF3ZXIucmVzaXplKCk7CiB9CiAKIFdlYkluc3BlY3Rvci53aW5kb3dGb2N1c2VkID0gZnVuY3Rp
b24oZXZlbnQpCkBAIC02MjQsOCArNjI3LDExIEBAIFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURv
d24gPSBmdW5jdGlvbihldmVudCkKIAogICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50aWZp
ZXIpIHsKICAgICAgICAgICAgIGNhc2UgIlUrMDAxQiI6IC8vIEVzY2FwZSBrZXkKLSAgICAgICAg
ICAgICAgICB0aGlzLmRyYXdlci52aXNpYmxlID0gIXRoaXMuZHJhd2VyLnZpc2libGU7CiAgICAg
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5kcmF3ZXIuZnVsbFBhbmVsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgICAgICB0aGlzLmRyYXdlci52aXNpYmxlID0gIXRoaXMuZHJhd2VyLnZpc2libGU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgIlUrMDA0NiI6IC8v
IEYga2V5CkBAIC03NDksMjkgKzc1NSwzMSBAQCBXZWJJbnNwZWN0b3IubWFpbkNvcHkgPSBmdW5j
dGlvbihldmVudCkKICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwuaGFuZGxlQ29weUV2ZW50KGV2
ZW50KTsKIH0KIAotV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZSA9IGZ1bmN0aW9uKGFuaW1hdGlv
bnMsIGR1cmF0aW9uLCBjYWxsYmFjaywgY29tcGxldGUpCitXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0
eWxlID0gZnVuY3Rpb24oYW5pbWF0aW9ucywgZHVyYXRpb24sIGNhbGxiYWNrKQogewotICAgIGlm
IChjb21wbGV0ZSA9PT0gdW5kZWZpbmVkKQotICAgICAgICBjb21wbGV0ZSA9IDA7Ci0gICAgdmFy
IHNsaWNlID0gKDEwMDAgLyAzMCk7IC8vIDMwIGZyYW1lcyBwZXIgc2Vjb25kCisgICAgdmFyIGlu
dGVydmFsOworICAgIHZhciBjb21wbGV0ZSA9IDA7CiAKLSAgICB2YXIgZGVmYXVsdFVuaXQgPSAi
cHgiOwotICAgIHZhciBwcm9wZXJ0eVVuaXQgPSB7b3BhY2l0eTogIiJ9OworICAgIGNvbnN0IGlu
dGVydmFsRHVyYXRpb24gPSAoMTAwMCAvIDMwKTsgLy8gMzAgZnJhbWVzIHBlciBzZWNvbmQuCisg
ICAgY29uc3QgYW5pbWF0aW9uc0xlbmd0aCA9IGFuaW1hdGlvbnMubGVuZ3RoOworICAgIGNvbnN0
IHByb3BlcnR5VW5pdCA9IHtvcGFjaXR5OiAiIn07CisgICAgY29uc3QgZGVmYXVsdFVuaXQgPSAi
cHgiOwogCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbmltYXRpb25zLmxlbmd0aDsgKytpKSB7
CisgICAgZnVuY3Rpb24gY3ViaWNJbk91dCh0LCBiLCBjLCBkKQorICAgIHsKKyAgICAgICAgaWYg
KCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCArIGI7CisgICAgICAgIHJldHVybiBjLzIq
KCh0LT0yKSp0KnQgKyAyKSArIGI7CisgICAgfQorCisgICAgLy8gUHJlLXByb2Nlc3MgYW5pbWF0
aW9ucy4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaW1hdGlvbnNMZW5ndGg7ICsraSkgewog
ICAgICAgICB2YXIgYW5pbWF0aW9uID0gYW5pbWF0aW9uc1tpXTsKLSAgICAgICAgdmFyIGVsZW1l
bnQgPSBudWxsOwotICAgICAgICB2YXIgc3RhcnQgPSBudWxsOwotICAgICAgICB2YXIgY3VycmVu
dCA9IG51bGw7Ci0gICAgICAgIHZhciBlbmQgPSBudWxsOwotICAgICAgICB2YXIga2V5ID0gbnVs
bDsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBudWxsLCBzdGFydCA9IG51bGwsIGN1cnJlbnQgPSBu
dWxsLCBlbmQgPSBudWxsLCBrZXkgPSBudWxsOwogICAgICAgICBmb3IgKGtleSBpbiBhbmltYXRp
b24pIHsKICAgICAgICAgICAgIGlmIChrZXkgPT09ICJlbGVtZW50IikKICAgICAgICAgICAgICAg
ICBlbGVtZW50ID0gYW5pbWF0aW9uW2tleV07CiAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09
ICJzdGFydCIpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBhbmltYXRpb25ba2V5XTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGtleSA9PT0gImN1cnJlbnQiKQotICAgICAgICAgICAgICAgIGN1cnJl
bnQgPSBhbmltYXRpb25ba2V5XTsKICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gImVuZCIp
CiAgICAgICAgICAgICAgICAgZW5kID0gYW5pbWF0aW9uW2tleV07CiAgICAgICAgIH0KQEAgLTc3
OSw0OSArNzg3LDU0IEBAIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUgPSBmdW5jdGlvbihhbmlt
YXRpb25zLCBkdXJhdGlvbiwgY2FsbGJhY2ssIGNvbXBsZXRlKQogICAgICAgICBpZiAoIWVsZW1l
bnQgfHwgIWVuZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHZhciBjb21wdXRl
ZFN0eWxlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5
bGUoZWxlbWVudCk7CiAgICAgICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAgICAgIHZhciBjb21w
dXRlZFN0eWxlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbWVudCk7CiAgICAgICAgICAgICBzdGFydCA9IHt9OwogICAgICAgICAgICAgZm9y
IChrZXkgaW4gZW5kKQogICAgICAgICAgICAgICAgIHN0YXJ0W2tleV0gPSBwYXJzZUludChjb21w
dXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoa2V5KSk7CiAgICAgICAgICAgICBhbmltYXRpb24u
c3RhcnQgPSBzdGFydDsKLSAgICAgICAgfSBlbHNlIGlmIChjb21wbGV0ZSA9PSAwKQorICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIGZvciAoa2V5IGluIHN0YXJ0KQogICAgICAgICAgICAgICAg
IGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBzdGFydFtrZXldICsgKGtleSBpbiBwcm9w
ZXJ0eVVuaXQgPyBwcm9wZXJ0eVVuaXRba2V5XSA6IGRlZmF1bHRVbml0KSk7CisgICAgfQogCi0g
ICAgICAgIGlmICghY3VycmVudCkgewotICAgICAgICAgICAgY3VycmVudCA9IHt9OwotICAgICAg
ICAgICAgZm9yIChrZXkgaW4gc3RhcnQpCi0gICAgICAgICAgICAgICAgY3VycmVudFtrZXldID0g
c3RhcnRba2V5XTsKLSAgICAgICAgICAgIGFuaW1hdGlvbi5jdXJyZW50ID0gY3VycmVudDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGN1YmljSW5PdXQodCwgYiwgYywgZCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCh0Lz1kLzIpIDwgMSkgcmV0dXJuIGMvMip0KnQqdCArIGI7
Ci0gICAgICAgICAgICByZXR1cm4gYy8yKigodC09MikqdCp0ICsgMikgKyBiOworICAgIGZ1bmN0
aW9uIGFuaW1hdGVMb29wKCkKKyAgICB7CisgICAgICAgIC8vIEFkdmFuY2UgZm9yd2FyZC4KKyAg
ICAgICAgY29tcGxldGUgKz0gaW50ZXJ2YWxEdXJhdGlvbjsKKyAgICAgICAgdmFyIG5leHQgPSBj
b21wbGV0ZSArIGludGVydmFsRHVyYXRpb247CisKKyAgICAgICAgLy8gTWFrZSBzdHlsZSBjaGFu
Z2VzLgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuaW1hdGlvbnNMZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdmFyIGFuaW1hdGlvbiA9IGFuaW1hdGlvbnNbaV07CisgICAgICAgICAg
ICB2YXIgZWxlbWVudCA9IGFuaW1hdGlvbi5lbGVtZW50OworICAgICAgICAgICAgdmFyIHN0YXJ0
ID0gYW5pbWF0aW9uLnN0YXJ0OworICAgICAgICAgICAgdmFyIGVuZCA9IGFuaW1hdGlvbi5lbmQ7
CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVuZCkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbWVudC5zdHlsZTsKKyAgICAgICAg
ICAgIGZvciAoa2V5IGluIGVuZCkgeworICAgICAgICAgICAgICAgIHZhciBlbmRWYWx1ZSA9IGVu
ZFtrZXldOworICAgICAgICAgICAgICAgIGlmIChuZXh0IDwgZHVyYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFtrZXldOworICAgICAgICAgICAgICAg
ICAgICB2YXIgbmV3VmFsdWUgPSBjdWJpY0luT3V0KGNvbXBsZXRlLCBzdGFydFZhbHVlLCBlbmRW
YWx1ZSAtIHN0YXJ0VmFsdWUsIGR1cmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUu
c2V0UHJvcGVydHkoa2V5LCBuZXdWYWx1ZSArIChrZXkgaW4gcHJvcGVydHlVbml0ID8gcHJvcGVy
dHlVbml0W2tleV0gOiBkZWZhdWx0VW5pdCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShrZXksIGVuZFZhbHVlICsgKGtleSBp
biBwcm9wZXJ0eVVuaXQgPyBwcm9wZXJ0eVVuaXRba2V5XSA6IGRlZmF1bHRVbml0KSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxl
OwotICAgICAgICBmb3IgKGtleSBpbiBlbmQpIHsKLSAgICAgICAgICAgIHZhciBzdGFydFZhbHVl
ID0gc3RhcnRba2V5XTsKLSAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBjdXJyZW50W2tl
eV07Ci0gICAgICAgICAgICB2YXIgZW5kVmFsdWUgPSBlbmRba2V5XTsKLSAgICAgICAgICAgIGlm
ICgoY29tcGxldGUgKyBzbGljZSkgPCBkdXJhdGlvbikgewotICAgICAgICAgICAgICAgIHZhciBk
ZWx0YSA9IChlbmRWYWx1ZSAtIHN0YXJ0VmFsdWUpIC8gKGR1cmF0aW9uIC8gc2xpY2UpOwotICAg
ICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1YmljSW5PdXQoY29tcGxldGUsIHN0YXJ0VmFs
dWUsIGVuZFZhbHVlIC0gc3RhcnRWYWx1ZSwgZHVyYXRpb24pOwotICAgICAgICAgICAgICAgIHN0
eWxlLnNldFByb3BlcnR5KGtleSwgbmV3VmFsdWUgKyAoa2V5IGluIHByb3BlcnR5VW5pdCA/IHBy
b3BlcnR5VW5pdFtrZXldIDogZGVmYXVsdFVuaXQpKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50
W2tleV0gPSBuZXdWYWx1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c3R5bGUuc2V0UHJvcGVydHkoa2V5LCBlbmRWYWx1ZSArIChrZXkgaW4gcHJvcGVydHlVbml0ID8g
cHJvcGVydHlVbml0W2tleV0gOiBkZWZhdWx0VW5pdCkpOwotICAgICAgICAgICAgfQorICAgICAg
ICAvLyBFbmQgY29uZGl0aW9uLgorICAgICAgICBpZiAoY29tcGxldGUgPj0gZHVyYXRpb24pIHsK
KyAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgaWYgKGNh
bGxiYWNrKQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoY29tcGxldGUgPCBkdXJhdGlvbikKLSAgICAgICAgc2V0VGltZW91dChXZWJJbnNw
ZWN0b3IuYW5pbWF0ZVN0eWxlLCBzbGljZSwgYW5pbWF0aW9ucywgZHVyYXRpb24sIGNhbGxiYWNr
LCBjb21wbGV0ZSArIHNsaWNlKTsKLSAgICBlbHNlIGlmIChjYWxsYmFjaykKLSAgICAgICAgY2Fs
bGJhY2soKTsKKyAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKGFuaW1hdGVMb29wLCBpbnRlcnZh
bER1cmF0aW9uKTsKKyAgICByZXR1cm4gaW50ZXJ2YWw7CiB9CiAKIFdlYkluc3BlY3Rvci51cGRh
dGVTZWFyY2hMYWJlbCA9IGZ1bmN0aW9uKCkKQEAgLTg0MSw2ICs4NTQsNyBAQCBXZWJJbnNwZWN0
b3IudXBkYXRlU2VhcmNoTGFiZWwgPSBmdW5jdGlvbigpCiBXZWJJbnNwZWN0b3IudG9nZ2xlQXR0
YWNoID0gZnVuY3Rpb24oKQogewogICAgIHRoaXMuYXR0YWNoZWQgPSAhdGhpcy5hdHRhY2hlZDsK
KyAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsKIH0KIAogV2ViSW5zcGVjdG9yLnRvb2xiYXJEcmFn
U3RhcnQgPSBmdW5jdGlvbihldmVudCkKQEAgLTk2NCw2ICs5NzgsMTEgQEAgV2ViSW5zcGVjdG9y
LnNob3dTdG9yYWdlUGFuZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jdXJyZW50UGFuZWwgPSB0
aGlzLnBhbmVscy5zdG9yYWdlOwogfQogCitXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGVQYW5lbCA9
IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLmN1cnJlbnRQYW5lbCA9IHRoaXMucGFuZWxzLmNvbnNv
bGU7Cit9CisKIFdlYkluc3BlY3Rvci5hZGRSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIs
IHBheWxvYWQpCiB7CiAgICAgdmFyIHJlc291cmNlID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJj
ZSgKQEAgLTEwNTQsNyArMTA3Myw3IEBAIFdlYkluc3BlY3Rvci51cGRhdGVSZXNvdXJjZSA9IGZ1
bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiAgICAgICAgICAgICByZXNvdXJjZS5yZXNwb25z
ZVJlY2VpdmVkVGltZSA9IHBheWxvYWQucmVzcG9uc2VSZWNlaXZlZFRpbWU7CiAgICAgICAgIGlm
IChwYXlsb2FkLmVuZFRpbWUpCiAgICAgICAgICAgICByZXNvdXJjZS5lbmRUaW1lID0gcGF5bG9h
ZC5lbmRUaW1lOwotICAgICAgICAKKwogICAgICAgICBpZiAocGF5bG9hZC5sb2FkRXZlbnRUaW1l
KSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxvYWRFdmVudFRpbWUgaXMgZm9yIHRoZSBtYWluIHJl
c291cmNlLCBhbmQgd2Ugd2FudCB0byBzaG93IGl0CiAgICAgICAgICAgICAvLyBmb3IgYWxsIHJl
c291cmNlcyBvbiB0aGlzIHBhZ2UuIFRoaXMgbWVhbnMgd2Ugd2FudCB0byBzZXQgaXQgYXMgYSBt
ZW1iZXIKQEAgLTEwNjIsNyArMTA4MSw3IEBAIFdlYkluc3BlY3Rvci51cGRhdGVSZXNvdXJjZSA9
IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiAgICAgICAgICAgICBpZiAodGhpcy5wYW5l
bHMucmVzb3VyY2VzKQogICAgICAgICAgICAgICAgIHRoaXMucGFuZWxzLnJlc291cmNlcy5tYWlu
UmVzb3VyY2VMb2FkVGltZSA9IHBheWxvYWQubG9hZEV2ZW50VGltZTsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBpZiAocGF5bG9hZC5kb21Db250ZW50RXZlbnRUaW1lKSB7CiAgICAg
ICAgICAgICAvLyBUaGlzIGRvbUNvbnRlbnRFdmVudFRpbWUgaXMgZm9yIHRoZSBtYWluIHJlc291
cmNlLCBzbyBpdCBzaG91bGQgZ28gaW4KICAgICAgICAgICAgIC8vIHRoZSByZXNvdXJjZXMgcGFu
ZWwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgYXMgYWJvdmUuCkBAIC0xMjQ4LDIzICsxMjY3LDIzIEBA
IFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbihtZXNzYWdlKQogewogICAgIC8vIHJlbWVtYmVy
ICd0aGlzJyBmb3Igc2V0SW50ZXJ2YWwoKSBjYWxsYmFjawogICAgIHZhciBzZWxmID0gdGhpczsK
LSAgICAKKwogICAgIC8vIHJldHVybiBpbmRpY2F0aW9uIGlmIHdlIGNhbiBhY3R1YWxseSBsb2cg
YSBtZXNzYWdlCiAgICAgZnVuY3Rpb24gaXNMb2dBdmFpbGFibGUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSAmJiBXZWJJbnNwZWN0b3IuT2JqZWN0
UHJveHkgJiYgc2VsZi5jb25zb2xlOwogICAgIH0KLSAgICAKKwogICAgIC8vIGZsdXNoIHRoZSBx
dWV1ZSBvZiBwZW5kaW5nIG1lc3NhZ2VzCiAgICAgZnVuY3Rpb24gZmx1c2hRdWV1ZSgpCiAgICAg
ewogICAgICAgICB2YXIgcXVldWVkID0gV2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQ7Ci0gICAgICAg
IGlmICghcXVldWVkKSAKKyAgICAgICAgaWYgKCFxdWV1ZWQpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKKwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZC5sZW5n
dGg7ICsraSkKICAgICAgICAgICAgIGxvZ01lc3NhZ2UocXVldWVkW2ldKTsKLSAgICAgICAgCisK
ICAgICAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5sb2cucXVldWVkOwogICAgIH0KIApAQCAtMTI3
NCwyNiArMTI5MywyNiBAQCBXZWJJbnNwZWN0b3IubG9nID0gZnVuY3Rpb24obWVzc2FnZSkKICAg
ICB7CiAgICAgICAgIGlmICghaXNMb2dBdmFpbGFibGUoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAorCiAgICAgICAgIGNsZWFySW50ZXJ2YWwoV2ViSW5zcGVjdG9yLmxvZy5p
bnRlcnZhbCk7CiAgICAgICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IubG9nLmludGVydmFsOwotICAg
ICAgICAKKwogICAgICAgICBmbHVzaFF1ZXVlKCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gYWN0
dWFsbHkgbG9nIHRoZSBtZXNzYWdlCiAgICAgZnVuY3Rpb24gbG9nTWVzc2FnZShtZXNzYWdlKQog
ICAgIHsKICAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gMTsKICAgICAgICAgaWYgKG1lc3NhZ2Ug
PT0gV2ViSW5zcGVjdG9yLmxvZy5sYXN0TWVzc2FnZSkKICAgICAgICAgICAgIHJlcGVhdENvdW50
ID0gV2ViSW5zcGVjdG9yLmxvZy5yZXBlYXRDb3VudCArIDE7Ci0gICAgCisKICAgICAgICAgV2Vi
SW5zcGVjdG9yLmxvZy5sYXN0TWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2cucmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsKLSAgICAgICAgCisKICAgICAgICAgLy8g
Q29uc29sZU1lc3NhZ2UgZXhwZWN0cyBhIHByb3h5IG9iamVjdAogICAgICAgICBtZXNzYWdlID0g
bmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eShudWxsLCBbXSwgMCwgbWVzc2FnZSwgZmFsc2Up
OwotICAgICAgICAKKwogICAgICAgICAvLyBwb3N0IHRoZSBtZXNzYWdlCiAgICAgICAgIHZhciBt
c2cgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlKAogICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3RoZXIsCkBAIC0xMzA0LDIwICsx
MzIzLDIwIEBAIFdlYkluc3BlY3Rvci5sb2cgPSBmdW5jdGlvbihtZXNzYWdlKQogICAgICAgICAg
ICAgbnVsbCwKICAgICAgICAgICAgIHJlcGVhdENvdW50LAogICAgICAgICAgICAgbWVzc2FnZSk7
Ci0gICAgCisKICAgICAgICAgc2VsZi5jb25zb2xlLmFkZE1lc3NhZ2UobXNnKTsKICAgICB9Ci0g
ICAgCisKICAgICAvLyBpZiB3ZSBjYW4ndCBsb2cgdGhlIG1lc3NhZ2UsIHF1ZXVlIGl0CiAgICAg
aWYgKCFpc0xvZ0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmxvZy5x
dWV1ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nLnF1ZXVlZCA9IFtdOwotICAgICAg
ICAgICAgCisKICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5xdWV1ZWQucHVzaChtZXNzYWdlKTsK
LSAgICAgICAgCisKICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IubG9nLmludGVydmFsKQogICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZy5pbnRlcnZhbCA9IHNldEludGVydmFsKGZsdXNoUXVl
dWVJZkF2YWlsYWJsZSwgMTAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE0NTcsNyArMTQ3Niw4IEBAIFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFn
bWVudCA9IGZ1bmN0aW9uKHN0cmluZykKICAgICByZXR1cm4gY29udGFpbmVyOwogfQogCi1XZWJJ
bnNwZWN0b3Iuc2hvd1Byb2ZpbGVGb3JVUkwgPSBmdW5jdGlvbih1cmwpIHsKK1dlYkluc3BlY3Rv
ci5zaG93UHJvZmlsZUZvclVSTCA9IGZ1bmN0aW9uKHVybCkKK3sKICAgICBXZWJJbnNwZWN0b3Iu
c2hvd1Byb2ZpbGVzUGFuZWwoKTsKICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLnNo
b3dQcm9maWxlRm9yVVJMKHVybCk7CiB9Cg==
</data>
<flag name="review"
          id="25315"
          type_id="1"
          status="+"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="25316"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>43588</attachid>
            <date>2009-11-20 09:16:50 -0800</date>
            <delta_ts>2009-11-20 09:16:50 -0800</delta_ts>
            <desc>Console Panel Icon</desc>
            <filename>consoleIcon.png</filename>
            <type>image/png</type>
            <size>2930</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">iVBORw0KGgoAAAANSUhEUgAAACAAAABACAYAAAB7jnWuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAACxRJREFUeNrsWWtsU9cd/93razu2k9jOg7whQEgJLYUWaKcW0a7ThqC0
66a2rNWq7tV+GlP3cR/QJFRp3SZtkzbtC+2XVSsaLVq3SRtIiKJOCEgfaUqhQApZyAvn4Ti2Ez/u
a///sY+5MdcGuk3sQy86XN9zzz3/1+/8X1Fs28btvFTc5uu2M6Dwf/v27XtVUZTvl79k89B81d+f
5yp+/9bevXuf0gQXivLk7t27UVNTc0Ni8vlWmZDrLctCLpfDwYMHn+R5TS64evUqWltboaoqTNOE
ruv/kYRFwUrPfr9f7L2wsICRkZHS2hID8/PzCIfDOHPmjGDG4/G4SsrPLIUAEG1YTQvOb1mgjo4O
LF++HNPT09czwIsNw0AsFsOOHTvg9XpdTcDaYRUyE2wyn88n3juZZcbKGczn8zh06BC6urpKAixh
QG7OH0Wj0RIDSxBLmzGT6XQa+/fvx0svvSSYkAw4RzkDzLSbtjQ3Ikycx4GPFcxnFWxoAx5cUXin
aZqQhk3EdnUyIL93G8yMm9PTqoHHSx+dm7LxKZnsn8PESLuCHb2qYII35CGxIiUuN4MbHpy0NDfC
cuNvbVTQ06Tg6CUb54mR2CKwq89TIsp3Hk7J3S559JwakGs154NkRkp36BPg+GULugmsalSwudML
picZkOvc0M+oZ1PxYGzxvSoGnFqQkhm2hd5mFfd1efBQj3cJUMsl5nkGaDabFcTcNOucu44B5yLJ
wPNbvNepVzIgLybIpyKRmEMgEBT44DWDx99BjpyOwgRVD0w9h8ToKHD//dVPgVMLbipj4nz29+zZ
g2QyKex77kw/0rPvIRC9B6t6NuD9g3/CvbkMamDD5jNvsdQ2emt8OHn0KNDZWdkEUgPlxPk9A8mp
YmYmHp+FPn8Mj351Av84Mo2/HnkXj9gmfNMxKCrhBNIdW4ioGrZGonh7agpWW1tlEziZYQkzmYwg
zL+dwYhV/dn5ftzTNY7F4RTu6ljEpbcz5Dt88NX4ERSmLJ5/m7VhIzgzhV3BEP54/lMhq+ok6AQN
b87xYXZ2FouLi+K5/CzPzcWh6QNY1mzA2/osOjpVNHWnMZFOwfvdF2C3d8IkYFqGCYtORdO+V2Cm
kggOD+EbczE81tn2rOqUXt5TqRRtPidUXo4NySiP4aEPsX7lJBRtDQJdz0PxP4AHvhbGmLqA4d/+
GqHvvQgj2ohsYhbLXvkVxl/+KXLpeeikyaCho9aj9mluZ5jV7QxGkrjUAA+WHtn3sawpBzM7AV5t
5cbRsTqA5g0eTPanULPnBaz//WvwaV6M7v0J9MlRAUaWwyAGTMOyVTdXLCUsP4JODVy++AHWr46B
vZRiJArvzRH6beHhxxsxZsxhLkOAJS2aJHGehs4R1+ZPyDPqhphTKzmMclA6gcnSW5n3KYHJsDyw
9SLjugWCKTp6Ami5twbaD3+Mc7/4Gc7+4NvofvnnQLRZqJ9TnRxpgIdaTqwcE061y2Tk8tAA7l41
SUGeJNBYn8Rgbgo2PTPqSVR85bnV+Ojgq7h64RwWCYiDLzyHnl/+BrrXLySfp7mUac8uMQGff5ks
uGlFZE6JBCH5NFpasmxDYVPQeTeT7xEIFJHm8nxHu4mGtjhmyAQpIpbPZTHw/G7ks4tI5nX8RavF
qG3/YQkI2Y22tLTgwIEDrgkJM3V1/AK+s3MMSp4PMWlFSE855PDvxHFTdYqkmirM8sgTLXj9vUuI
mH5oCmVQtH7RNPA3Xx3aHv4yRk73z2iyNuDoxcdv5cqVIm/jwFIex5PkF6Kej9DdpYrzrbJpWEtk
Bt9d+6FffJFVJhyORUBbsSaAprsDiJ2mUxWoQZI85PFwE+54dBfSFCeYNjPgIyIKO5x4PF4xeeAx
OXYBT2+dgZkh5NM/k5Z4aAeTDpMdIKdjUjCyyTR6weuBZHhw1zL8aHASmupHJBzBnVu2YJ5iSNHE
fsEAOZxjlIw+Ua3oYE84Nz2GuhCn7CSoaosgo2foXZbmTu4iEOqER04YFAENJtHaGkDvHe2ob16P
YDAo0jgR6g3jONNmSqHi8N6oiqoPqL0P3Rd9pjXq22Ratp8oqJZCIUdEO6UAyAIO7eKMNRLLDZ38
cK5/0cApmpqhwU7DKI4FpRiQPLdQJ/LaAI364t1zE99QTgXSFdJMtPjMR8j8PAWeUmT2Vhi3ikSN
4u+SV1O+6A/8X/QHtm/fflv6A4cPH77WH9i4caNwxf/rSxbBg4ODS/sD7Ibr6upKTQR2PP/Ni4Xj
vTmh5WzruqyYE08uNCcnJwUzbhWPM1GVWfHNXiwQ9x+48uY6wrUu4I2Z+Nq1a0s1X7m9eQ2rkOdZ
Kmm28tyhPJvib7j5EYlEliQ31zHAUgUCgRID5YmKrPNOnTqFbdu2lVTrltyWM+BqGldfWyzNBijp
yeoK2sjproxeq4xkecbEZd7gls65MXJL/QEP3WNkrhh572GK1O31CtY2Y0lxWq7ycjNUKkqr9gfk
BhvbFTRSnByasTFFjKTyNta1qEsYcAKxkqTy6LnlnVqlpJQ3/phMcClOR5JAz4x0hj0ip3drQpUT
lGBlc1U71q7FqZSEU+zmkIquiILVTZ4SUN0k5XlJtBLgqjLg3FB2PjZ3udcJzt9MjEs49iMMSNkn
mrj0GQzuirBgiko5okElGuUiK1bcXH+gkj1l72Dr1q2ihGNisaujyC+MUuLZjoamdowNfoQOYswL
u1QZ89Xs1TBy8SLIGdycCcrtKlu40p68RlTOmSH09SZx/kIaZ09cxhoi7KEKGaI/cO37AGmiOxDE
WfKEdn19ZRO4NZxY1c4Op3w3O30FHZEk8vEsWsM6Zj/RkTHIj7CPsIkBRS0kQJxZEwnfQhp9Xh8+
nIpV7g9IULGKubnMnq+cOF8svWqOo7bWhKfuXvL1CoINOSQJE54t91PWGKHvzBJAQ9t3UgWdhS8+
jfWZNNaF6937AxJU1dDMzMZnxtDWwKpuhjeymfTZje7eGsxT2RQ/8S58930JVjAEI7OIup2PY/7o
ERjEgEnfesmMflXpcwUhE75RpMtmKck1xlAbosBkzBeYonu40YsQObDklRy0P7+Jtm8+LUCbOPx3
qikTwhxcURc0Y1fuD9zomqUipa2RpGcvZWaLGe4cuEZYfWcICSuDDGOHjp8l+gKWkJxLCCJM84Vn
tVolXOnKkEptfZQSGF1IU2jD0T6mLfLtcJMXdZ0a1Ae3IfbOMcQOvoGGHbuoiqgVREV+ThrgUbU/
UMn2s9PjBdsTQQFyk9WfLj4r4r5mUyPGB08jRWjPE6GJN99A02Nfh0nFpEnayHL/2CrrD7Dd3dC+
1PZZQvKVgvRFyVkMOztaKDmYSZoP19sI1mewQCbIcSwgXI0feJ0K1zyypP6zVKwmbCztDzADnBcO
DAy4JiQsfWp+Glv6EkJqoSkiZhtEIH5CdEU9llLUArDmrlp8MDqLgEXmION4aTpP0p/z+FG/ugdz
V65c6w/IP8U0NDSIvM0teuVI+oA6gWhEEcSUYheUCXpan4I5/WYh07cLWogSFkJtXqSu6PBQnMgR
8c8CITT3rZPd1mv9AXYqPKrZPknSb1i5IJpRTIghp3pYCeTxvGFa46NZHZaBgv8nbXSvq8XbE0ny
iB6R6rV0dQkzFq9Cf4CkPUbJaNX+gGjZphOo8XFsF2dOSGrqKJhg5DWCtknTqogBsvysq/OieVkY
/lCraHLLv7bQfrfeH6jxKr2rlgeeqQtom4hR0R+wFUUtdQOKVJ39gbm0MfSvsUw/Ke2L/oBrf+Df
AgwAVRmijVaHZ8oAAAAASUVORK5CYII=
</data>

          </attachment>
      

    </bug>

</bugzilla>