<?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>91528</bug_id>
          
          <creation_ts>2012-07-17 11:27:58 -0700</creation_ts>
          <short_desc>Web Inspector: Embeddable Web Inspector</short_desc>
          <delta_ts>2022-08-06 06:25:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Gabriel Peal">gpeal</reporter>
          <assigned_to name="Gabriel Peal">gpeal</assigned_to>
          <cc>caseq</cc>
    
    <cc>gpeal</cc>
    
    <cc>klm</cc>
    
    <cc>pfeldman</cc>
    
    <cc>vsevik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>671432</commentid>
    <comment_count>0</comment_count>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-07-17 11:27:58 -0700</bug_when>
    <thetext>Embeddable Developer Tools</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671434</commentid>
    <comment_count>1</comment_count>
      <attachid>152793</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-07-17 11:30:49 -0700</bug_when>
    <thetext>Created attachment 152793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672374</commentid>
    <comment_count>2</comment_count>
      <attachid>152793</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-18 07:53:55 -0700</bug_when>
    <thetext>Comment on attachment 152793
Patch

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

&gt; Source/WebCore/inspector/front-end/InspectorEmbedded.js:5
&gt; +var domContentLoaded = function() {
&gt; +    InspectorFrontendAPI.showTimeline();

This needs to be more generic -- e.g. allow various &quot;commands&quot; passed via query string.

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:39
&gt; +    this._hiddenPanels = [];

I don&apos;t think this belongs to InspectorFrontendHostStub -- this is supposed to be stub for InspectorFornendHost, after all.

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:120
&gt; +    addHiddenPanel: function(panel)
&gt; +    {
&gt; +        if (this._hiddenPanels.indexOf(panel) == -1)
&gt; +            this._hiddenPanels.push(panel);
&gt; +    },
&gt; +
&gt; +    removeHiddenPanel: function(panel)
&gt; +    {
&gt; +        var panelIndex = this._hiddenPanels.indexOf(panel);
&gt; +        if (panelIndex != -1)
&gt; +            this._hiddenPanels.splice(panelIndex,1);
&gt;      },

Ditto.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:169
&gt; +    loadRecords: function(records)

Here and below, please add JSDoc annotations.

&gt; Source/WebCore/inspector/front-end/TimelinePanel.js:778
&gt; +        if(xhr.status == 200) {

style: if (xhr.status === 200)
also, is there a reason for this to be synchronous?

&gt; Source/WebCore/inspector/front-end/TimelinePanel.js:779
&gt; +            var data = JSON.parse(xhr.responseText);

I think we need some diagnostics in case parsing fails.

&gt; Source/WebCore/inspector/front-end/inspector.html:224
&gt; +    &lt;script type=&quot;text/javascript&quot; src=&quot;InspectorEmbedded.js&quot;&gt;&lt;/script&gt;

You will have to add this to several project files -- please look up changes that added other files recently.

&gt; Source/WebCore/inspector/front-end/inspector.js:415
&gt;      }
&gt; +    else if (InspectorFrontendHost.isStub) {

style: &quot;} else&quot; need to be on the same line.

&gt; Source/WebCore/inspector/front-end/inspector.js:419
&gt; +            var hiddenPanels = WebInspector.queryParamsObject[&quot;hiddenPanels&quot;].split(&quot;,&quot;);
&gt; +            for (var i = 0; i &lt; hiddenPanels.length; ++i)
&gt; +                InspectorFrontendHost.addHiddenPanel(hiddenPanels[i]);

nit: WebInspector.queryParamsObject[&quot;hiddenPanels&quot;].split(&quot;,&quot;).forEach(InspectorFrontendHost.addHiddenPanel, InspectorFrontendHost)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672425</commentid>
    <comment_count>3</comment_count>
      <attachid>153026</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-07-18 09:20:07 -0700</bug_when>
    <thetext>Created attachment 153026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672428</commentid>
    <comment_count>4</comment_count>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-07-18 09:21:27 -0700</bug_when>
    <thetext>What do you recommend doing/where do you recommend putting the hidden panels? In the builtin mode it will look for the hidden panels in InspectorFrontend so wouldn&apos;t it make sense for it to come from the stub in the embedded case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680365</commentid>
    <comment_count>5</comment_count>
      <attachid>153026</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-27 02:50:53 -0700</bug_when>
    <thetext>Comment on attachment 153026
Patch

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

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:111
&gt; +        if (this._hiddenPanels.indexOf(panel) == -1)

NB: == =&gt; ===

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:118
&gt; +        if (panelIndex != -1)

NB: != =&gt; !==

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:170
&gt; +     * @param {Object[]} records

Please run Source/WebCore/inspector/compile-front-end.py (you would need a closure compiler as ~/closure/compiler.jar).
The proper way to specify an array of objects is {Array.&lt;Object&gt;}

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:225
&gt; +                    console.error(e.message);

This needs to be shown to the inspector user, so please use WebInspector.log(). Also, please add some test to help users to understand the error, e.g. WebInspector.UIString(&quot;Failed to load timeline log: %s&quot;, e.message);

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:226
&gt; +                    return null;

Just &quot;return;&quot;?

&gt; Source/WebCore/inspector/front-end/inspector.js:47
&gt; +        var hiddenPanels = InspectorFrontendHost.hiddenPanels();

How about just:
var hiddenPanelsString = InspectorFrontendHost.hiddenPanels() || &quot;&quot;;
if (WebInspector.queryParamsObject[&quot;hiddenPanels&quot;])
    hiddenPanelsString += &quot;,&quot; + WebInspector.queryParamsObject[&quot;hiddenPanels&quot;];
var hiddenPanels = hiddenPanelsString.split(&quot;,&quot;)

&gt; Source/WebCore/inspector/front-end/inspector.js:420
&gt; +        WebInspector.inspectorView.setCurrentPanel(WebInspector.firstPanel());

There&apos;s InspectorView._panelOrder that may be used to determine first panel. Also, in case we have multiple panels, we should probably open that last used one.

&gt; Source/WebCore/inspector/front-end/inspector.js:421
&gt; +        if (typeof WebInspector.queryParamsObject[&quot;url&quot;] !== &quot;undefined&quot;)

We may want to load other files as well, so using just a presence of &quot;url&quot; parameter to trigger loading of timeline does not look fair. How about having something like command=openTimeline&amp;url=foo, then have panels register command handlers for particular values of command parameter?

&gt; Source/WebCore/inspector/front-end/inspector.js:582
&gt; +WebInspector.firstPanel = function()

As above, this does not seem necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680842</commentid>
    <comment_count>6</comment_count>
      <attachid>154992</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-07-27 11:14:39 -0700</bug_when>
    <thetext>Created attachment 154992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680953</commentid>
    <comment_count>7</comment_count>
      <attachid>154992</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-27 12:26:02 -0700</bug_when>
    <thetext>Comment on attachment 154992
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Additional information of the change such as approach, rationale. Please add per-function descriptions below (OOPS!).

You should only have one ChangeLog entry. It should explain what changes as why here.

&gt; Source/WebCore/inspector/front-end/InspectorView.js:76
&gt; +        if (typeof x === &quot;number&quot;)

x should be a panel. We should annotate it with @param {WebInspector.Panel} x.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:172
&gt; +    loadRecords: function(records)

Since this is private to this file, should be _loadRecords

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:211
&gt; +    loadFromUrl: function(url)

WebKit uses all caps for abbreviations (loadFromURL)

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:214
&gt; +        var xhr = new XMLHttpRequest();

You should call InspectorFrontendHost.loadResourceSynchronously here and move this implementation into the InspectorFrontendHostStub.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:216
&gt; +        xhr.onreadystatechange = dataReceived;

We don&apos;t use self = this method, we bind callbacks to this instead. i.e. xhr.onreadystatechange = dataReceived.bind(this);

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:221
&gt; +            if (xhr.status === 200) {

Prefer guard expressions and early returns.

&gt; Source/WebCore/inspector/front-end/TimelinePanel.js:776
&gt; +    loadFromUrl: function(url)

loadFromURL

&gt; Source/WebCore/inspector/front-end/inspector.js:47
&gt; +        var hiddenPanelsString = InspectorFrontendHost.hiddenPanels() || &quot;&quot;;

Move this code into InspectorFrontendHostStub&apos;s hiddenPanels method.

&gt; Source/WebCore/inspector/front-end/inspector.js:417
&gt; +    } else if (InspectorFrontendHost.isStub) {

WebKit does not put &quot;else&quot; after a branch with &quot;return&quot;. Just start with if (... on the next line.

&gt; Source/WebCore/inspector/front-end/inspector.js:419
&gt; +        WebInspector.inspectorView.setCurrentPanel(0);

What if there are no panels? Instead of using 0, you should expose panels: function() on InspectorView that would return this._panelOrder.slice(). Then you would be able to fetch panels from here and select the first one if any.

&gt; Source/WebCore/inspector/front-end/inspector.js:420
&gt; +        if (typeof WebInspector.queryParamsObject[&quot;timelineUrl&quot;] !== &quot;undefined&quot;)

There should be no special casing for timeline in here. I would put the code below into the InspectorFrontendAPI::loadTimelineFromURL and would dispatch query parameters into calls on InspectorFrontendAPI in some generic manner. In this case, it would be:

inspector.html?callAPI=loadTimelineURL&amp;param=&lt;url&gt; or similarly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682151</commentid>
    <comment_count>8</comment_count>
      <attachid>155315</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-07-30 10:30:30 -0700</bug_when>
    <thetext>Created attachment 155315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682794</commentid>
    <comment_count>9</comment_count>
      <attachid>155315</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-07-31 00:50:25 -0700</bug_when>
    <thetext>Comment on attachment 155315
Patch

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

&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:132
&gt; +    loadTimelineFromURL: function(url) {

style: { needs to be on a line by its own. Also, please annotate.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:213
&gt; +        var data = InspectorFrontendHost.loadResourceSynchronously(url);

I think that this should better be async -- timeline logs happen to be huge. Also, we need some diagnostics shown to the user when loading fails.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:215
&gt; +            data = JSON.parse(data);

I think using data for both string representation and parsed object is quite unfortunate.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:218
&gt; +            WebInspector.log(WebInspector.UIString(&apos;Failed to load timeline data with error: %s&apos;, e.message));

We prefer double quotes on strings.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:219
&gt; +            return;

Redundant

&gt; Source/WebCore/inspector/front-end/inspector.js:417
&gt; +        WebInspector.inspectorView.setCurrentPanel(WebInspector.inspectorView.getPanel(0));

Do we really need this?

&gt; Source/WebCore/inspector/front-end/inspector.js:419
&gt; +            var callFunction = window[&quot;InspectorFrontendAPI&quot;][WebInspector.queryParamsObject[&quot;callAPI&quot;]];

Why not just InspectorFrontendAPI[WebInspector.queryParamsObject[&quot;callAPI&quot;]]?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682802</commentid>
    <comment_count>10</comment_count>
      <attachid>155315</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-07-31 01:01:20 -0700</bug_when>
    <thetext>Comment on attachment 155315
Patch

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

Looks good overall, some nits inline.

&gt; Source/WebCore/inspector/front-end/InspectorView.js:105
&gt; +    getPanel: function(index)

WebKit suggests that this method is called panel:
But I don&apos;t think you need it, especially given there is no length getter. Just make sure that inspector selects the first available panel.

&gt;&gt; Source/WebCore/inspector/front-end/TimelineModel.js:213
&gt;&gt; +        var data = InspectorFrontendHost.loadResourceSynchronously(url);
&gt; 
&gt; I think that this should better be async -- timeline logs happen to be huge. Also, we need some diagnostics shown to the user when loading fails.

We can&apos;t make the host method asynchronous, so if you end up using async behaviour, you should introduce loadXHR(url, sync, callback) in utilities.js. Please leave stub for InspectorFrontendHost as you implemented it though.

&gt;&gt; Source/WebCore/inspector/front-end/TimelineModel.js:218
&gt;&gt; +            WebInspector.log(WebInspector.UIString(&apos;Failed to load timeline data with error: %s&apos;, e.message));
&gt; 
&gt; We prefer double quotes on strings.

Also, you want to add this string into English.lproj/localizedStrings.js

&gt;&gt; Source/WebCore/inspector/front-end/inspector.js:419
&gt;&gt; +            var callFunction = window[&quot;InspectorFrontendAPI&quot;][WebInspector.queryParamsObject[&quot;callAPI&quot;]];
&gt; 
&gt; Why not just InspectorFrontendAPI[WebInspector.queryParamsObject[&quot;callAPI&quot;]]?

You could move this implementation into the InspectorFrontendAPI.js itself. Such as InspectorFrontendAPI.dispatchQueryCommands(). And I was also hoping that you could execute multiple commands with arbitrary parameter sets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684217</commentid>
    <comment_count>11</comment_count>
      <attachid>155817</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-01 09:02:59 -0700</bug_when>
    <thetext>Created attachment 155817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684232</commentid>
    <comment_count>12</comment_count>
      <attachid>155817</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-01 09:26:15 -0700</bug_when>
    <thetext>Comment on attachment 155817
Patch

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

&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:138
&gt; +        WebInspector.panels.timeline.loadFromURL(url);

This could probably force switch to timeline panel.

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:108
&gt; +        var hiddenPanels = &quot;&quot;;
&gt; +        if (WebInspector.queryParamsObject[&quot;hiddenPanels&quot;])
&gt; +            hiddenPanels += &quot;,&quot; + WebInspector.queryParamsObject[&quot;hiddenPanels&quot;];
&gt; +        return hiddenPanels;

return WebInspector.queryParamsObject[&quot;hiddenPanels&quot;] || &quot;&quot;?
Leading &quot;,&quot; definitely appears redundant in this case.

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:189
&gt; +        var xhr = new XMLHttpRequest();
&gt; +        xhr.open(&quot;GET&quot;, url, false);
&gt; +        xhr.send(null);
&gt; +        if (xhr.status === 200) 
&gt; +            return xhr.responseText;

so you&apos;ve added loadXHR()...

&gt; Source/WebCore/inspector/front-end/InspectorView.js:105
&gt; +    getPanel: function(index)

Do we really need this?

&gt; Source/WebCore/inspector/front-end/inspector.js:417
&gt; +        WebInspector.inspectorView.setCurrentPanel(WebInspector.inspectorView.getPanel(0));

I would rely in InspectorView choosing first panel  on its own.

&gt; Source/WebCore/inspector/front-end/utilities.js:710
&gt; +        WebInspector.log(WebInspector.UIString(&quot;Synchronous resource load failed with XMLHttpRequest status %d&quot;, xhr.status));

I don&apos;t think we have to mention  whether the XHR was async or sync in the error message -- especially that this is not always true with this implementation.

&gt; Source/WebCore/inspector/front-end/utilities.js:711
&gt; +        callback(&quot;&quot;);

It might be good idea to indicate error with something that outside of normal value range for the result -- e.g. use null or undefined instead of string here.

&gt; Source/WebCore/inspector/front-end/utilities.js:712
&gt; +        return;

Redundant.

&gt; Source/WebCore/inspector/front-end/utilities.js:718
&gt; +    if (sync === false)

I&apos;d suggest to normalize sync first, then use it as a strict bool type, e.g. if (typeof sync === &quot;undefined&quot;) sync = true; etc

&gt; Source/WebCore/inspector/front-end/utilities.js:725
&gt; +        WebInspector.log(WebInspector.UIString(&quot;Synchronous resource load failed with XMLHttpRequest status %d&quot;, xhr.status));

As above -- please drop &quot;synchronous&quot;.

&gt; Source/WebCore/inspector/front-end/utilities.js:726
&gt; +        return &quot;&quot;;

As above -- please return null or undefined here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684281</commentid>
    <comment_count>13</comment_count>
      <attachid>155833</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-01 10:26:24 -0700</bug_when>
    <thetext>Created attachment 155833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684282</commentid>
    <comment_count>14</comment_count>
      <attachid>155817</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-01 10:27:00 -0700</bug_when>
    <thetext>Comment on attachment 155817
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:189
&gt;&gt; +            return xhr.responseText;
&gt; 
&gt; so you&apos;ve added loadXHR()...

Pavel asked me to leave this one as is.

&gt; Source/WebCore/inspector/front-end/utilities.js:703
&gt; +function loadXHR(url, sync, callback) {

Style error { not on new line fixed in next path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685657</commentid>
    <comment_count>15</comment_count>
      <attachid>155833</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-02 12:13:48 -0700</bug_when>
    <thetext>Comment on attachment 155833
Patch

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

This change is missing the ChangeLog.

&gt; Source/WebCore/inspector/front-end/inspector.js:418
&gt; +            InspectorFrontendAPI.dispatch([WebInspector.queryParamsObject[&quot;callAPI&quot;],WebInspector.queryParamsObject[&quot;params&quot;]])

space after &quot;,&quot;. I would also name it dispatchQueryParameters and move queryParamsObject along with the constants into the InspectorFrontendAPI

&gt; Source/WebCore/inspector/front-end/utilities.js:703
&gt; +function loadXHR(url, sync, callback) {

XHR is typically using &quot;async&quot; parameter.

&gt; Source/WebCore/inspector/front-end/utilities.js:720
&gt; +    xhr.open(&quot;GET&quot;, url, false);

false -&gt; async ?

&gt; Source/WebCore/inspector/front-end/utilities.js:721
&gt; +    if (sync === false)

if (async)

&gt; Source/WebCore/inspector/front-end/utilities.js:724
&gt; +    if (sync === true) {

else or if (!async)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687003</commentid>
    <comment_count>16</comment_count>
      <attachid>155833</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-03 11:45:00 -0700</bug_when>
    <thetext>Comment on attachment 155833
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/inspector.js:418
&gt;&gt; +            InspectorFrontendAPI.dispatch([WebInspector.queryParamsObject[&quot;callAPI&quot;],WebInspector.queryParamsObject[&quot;params&quot;]])
&gt; 
&gt; space after &quot;,&quot;. I would also name it dispatchQueryParameters and move queryParamsObject along with the constants into the InspectorFrontendAPI

Would this be in addition to or instead of the existing dispatch method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687100</commentid>
    <comment_count>17</comment_count>
      <attachid>156447</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-03 13:31:40 -0700</bug_when>
    <thetext>Created attachment 156447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687846</commentid>
    <comment_count>18</comment_count>
      <attachid>156447</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-06 01:22:57 -0700</bug_when>
    <thetext>Comment on attachment 156447
Patch

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

&gt; Source/WebCore/English.lproj/localizedStrings.js:725
&gt; +localizedStrings[&quot;Synchronous resource load failed with XMLHttpRequest status %d&quot;] = &quot;Synchronous resource load failed with XMLHttpRequest status %d&quot;;

Please update to match the error string in loadXHR()

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:184
&gt; +        var xhr = new XMLHttpRequest();
&gt; +        xhr.open(&quot;GET&quot;, url, false);
&gt; +        xhr.send(null);

So why not just call loadXHR(url, false)?

&gt; Source/WebCore/inspector/front-end/utilities.js:699
&gt; + * @param {boolean} async

{boolean=}?

&gt; Source/WebCore/inspector/front-end/utilities.js:700
&gt; + * @param {function(string)} callback

ditto -- we&apos;re not using callback for sync requests.

&gt; Source/WebCore/inspector/front-end/utilities.js:701
&gt; + * @return {string} value

just @return {string}

&gt; Source/WebCore/inspector/front-end/utilities.js:708
&gt; +    function onDataReceived() 

onReadyStateChanged?

&gt; Source/WebCore/inspector/front-end/utilities.js:710
&gt; +        if (xhr.readyState === 4) {

if (xhr.readyState !== XMLHttpRequest.DONE)
    return;

&gt; Source/WebCore/inspector/front-end/utilities.js:716
&gt; +            WebInspector.log(WebInspector.UIString(&quot;Resource load failed with XMLHttpRequest status %d&quot;, xhr.status));

nit: I think logging URL as well might be useful.

&gt; Source/WebCore/inspector/front-end/utilities.js:731
&gt; +        WebInspector.log(WebInspector.UIString(&quot;Resource load failed with XMLHttpRequest status %d&quot;, xhr.status));

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687923</commentid>
    <comment_count>19</comment_count>
      <attachid>156447</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-06 02:43:59 -0700</bug_when>
    <thetext>Comment on attachment 156447
Patch

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

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:213
&gt; +        //var data = InspectorFrontendHost.loadResourceSynchronously(url);

Remove this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687929</commentid>
    <comment_count>20</comment_count>
      <attachid>156447</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-06 02:47:15 -0700</bug_when>
    <thetext>Comment on attachment 156447
Patch

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

&gt; Source/WebCore/inspector/front-end/utilities.js:705
&gt; +    if (typeof async === &quot;undefined&quot;)

You don&apos;t need these two lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688097</commentid>
    <comment_count>21</comment_count>
      <attachid>156447</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-06 06:58:33 -0700</bug_when>
    <thetext>Comment on attachment 156447
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:184
&gt;&gt; +        xhr.send(null);
&gt; 
&gt; So why not just call loadXHR(url, false)?

Because Pavel asked me to leave my implementation as is.

&gt;&gt; Source/WebCore/inspector/front-end/utilities.js:705
&gt;&gt; +    if (typeof async === &quot;undefined&quot;)
&gt; 
&gt; You don&apos;t need these two lines.

Why? I think it makes sense to make it default to synchronous because if async is undefined, presumably callback will be too, thereby making the function useless and why make the user do loadXHR(url, false) when they can just do loadXHR(url). Also, async defaults to true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696349</commentid>
    <comment_count>22</comment_count>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-15 13:54:09 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 156447 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156447&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:184
&gt; &gt;&gt; +        xhr.send(null);
&gt; &gt; 
&gt; &gt; So why not just call loadXHR(url, false)?
&gt; 
&gt; Because Pavel asked me to leave my implementation as is.
&gt; 
&gt; &gt;&gt; Source/WebCore/inspector/front-end/utilities.js:705
&gt; &gt;&gt; +    if (typeof async === &quot;undefined&quot;)
&gt; &gt; 
&gt; &gt; You don&apos;t need these two lines.
&gt; 
&gt; Why? I think it makes sense to make it default to synchronous because if async is undefined, presumably callback will be too, thereby making the function useless and why make the user do loadXHR(url, false) when they can just do loadXHR(url). Also, async defaults to true.

Waiting for a response to this to submit a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696763</commentid>
    <comment_count>23</comment_count>
      <attachid>156447</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-15 22:59:31 -0700</bug_when>
    <thetext>Comment on attachment 156447
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/front-end/utilities.js:705
&gt;&gt;&gt; +    if (typeof async === &quot;undefined&quot;)
&gt;&gt; 
&gt;&gt; You don&apos;t need these two lines.
&gt; 
&gt; Why? I think it makes sense to make it default to synchronous because if async is undefined, presumably callback will be too, thereby making the function useless and why make the user do loadXHR(url, false) when they can just do loadXHR(url). Also, async defaults to true.

Oh, my point was that if (undefined) works as if (false). So there is no need in converting it to boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697140</commentid>
    <comment_count>24</comment_count>
      <attachid>158822</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-16 07:59:51 -0700</bug_when>
    <thetext>Created attachment 158822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697143</commentid>
    <comment_count>25</comment_count>
      <attachid>158822</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-16 08:05:06 -0700</bug_when>
    <thetext>Comment on attachment 158822
Patch

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

&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:135
&gt; +            InspectorFrontendAPI.dispatch([WebInspector.queryParamsObject[&quot;callAPI&quot;],WebInspector.queryParamsObject[&quot;params&quot;]])

s/,/, /

&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:187
&gt; +        var xhr = new XMLHttpRequest();
&gt; +        xhr.open(&quot;GET&quot;, url, false);
&gt; +        xhr.send(null);
&gt; +        if (xhr.status === 200) 
&gt; +            return xhr.responseText;
&gt; +

I still don&apos;t think we should duplicate code here.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:175
&gt; +        this._loadNextChunk(records, 1);

I think this needs a rebaseline now -- we&apos;ve added progress bars and loadNextChunk now requires a progress parameter.

&gt; Source/WebCore/inspector/front-end/utilities.js:707
&gt; +        if (xhr.readyState != XMLHttpRequest.DONE)

!= =&gt; !==

&gt; Source/WebCore/inspector/front-end/utilities.js:719
&gt; +
&gt; +

Please drop extra blank like here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697191</commentid>
    <comment_count>26</comment_count>
      <attachid>158822</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-16 09:04:06 -0700</bug_when>
    <thetext>Comment on attachment 158822
Patch

Almost there. r- as per caseq&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697334</commentid>
    <comment_count>27</comment_count>
      <attachid>158822</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-16 11:55:33 -0700</bug_when>
    <thetext>Comment on attachment 158822
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/InspectorFrontendHostStub.js:187
&gt;&gt; +
&gt; 
&gt; I still don&apos;t think we should duplicate code here.

Agreed. Changed in next patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697343</commentid>
    <comment_count>28</comment_count>
      <attachid>158871</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-16 12:10:28 -0700</bug_when>
    <thetext>Created attachment 158871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698196</commentid>
    <comment_count>29</comment_count>
      <attachid>158871</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-17 04:41:17 -0700</bug_when>
    <thetext>Comment on attachment 158871
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        TBD

Nuke this line.

&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:148
&gt; +        WebInspector.panels.timeline.loadFromURL(url);

You should now to WebInspector.showPanel(&quot;timeline&quot;).loadFromURL(url) instead of these two lines.

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:254
&gt; +        function onDataReceived(data) 

Is this function used?

&gt; Source/WebCore/inspector/front-end/TimelineModel.js:273
&gt; +        function onLoad(responseText)

This does not need to be a function.

&gt; Source/WebCore/inspector/front-end/TimelinePanel.js:372
&gt; +            this.toggleTimelineButton.toggled = false;

You probably want to call _toggleTimelineButtonClicked here to reduce copypaste.

&gt; Source/WebCore/inspector/front-end/utilities.js:732
&gt; + * @param {function(string)=} callback

function(?string)=

&gt; Source/WebCore/inspector/front-end/utilities.js:733
&gt; + * @return {string}

?string</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698203</commentid>
    <comment_count>30</comment_count>
      <attachid>158871</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-17 04:47:49 -0700</bug_when>
    <thetext>Comment on attachment 158871
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/TimelinePanel.js:372
&gt;&gt; +            this.toggleTimelineButton.toggled = false;
&gt; 
&gt; You probably want to call _toggleTimelineButtonClicked here to reduce copypaste.

I think we need to go further and just extract a method that accepts a loader callback, sets up everything for load (including progress bars), loads timeline using a callback and then goes on to parse and add this. Otherwise we have too much of code duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698204</commentid>
    <comment_count>31</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-17 04:49:16 -0700</bug_when>
    <thetext>&gt; I think we need to go further and just extract a method that accepts a loader callback, sets up everything for load (including progress bars), loads timeline using a callback and then goes on to parse and add this. Otherwise we have too much of code duplication.

Sounds like bloating the scope of this change. caseq@, do you want to do that in a separate change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698355</commentid>
    <comment_count>32</comment_count>
      <attachid>158871</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-17 08:26:19 -0700</bug_when>
    <thetext>Comment on attachment 158871
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:148
&gt;&gt; +        WebInspector.panels.timeline.loadFromURL(url);
&gt; 
&gt; You should now to WebInspector.showPanel(&quot;timeline&quot;).loadFromURL(url) instead of these two lines.

showPanel doesn&apos;t return the panel. Should it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698368</commentid>
    <comment_count>33</comment_count>
      <attachid>158871</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-17 08:42:49 -0700</bug_when>
    <thetext>Comment on attachment 158871
Patch

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

&gt;&gt;&gt; Source/WebCore/inspector/front-end/TimelinePanel.js:372
&gt;&gt;&gt; +            this.toggleTimelineButton.toggled = false;
&gt;&gt; 
&gt;&gt; You probably want to call _toggleTimelineButtonClicked here to reduce copypaste.
&gt; 
&gt; I think we need to go further and just extract a method that accepts a loader callback, sets up everything for load (including progress bars), loads timeline using a callback and then goes on to parse and add this. Otherwise we have too much of code duplication.

calling _toggleTimelineButtonClicked would duplicate code in and of itself and would usually cause the timeline to start recording which is not what we want. That is probably the reason loadFromFile didn&apos;t use _toggleTimelineButtonClicked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698385</commentid>
    <comment_count>34</comment_count>
      <attachid>159136</attachid>
    <who name="Gabriel Peal">gpeal</who>
    <bug_when>2012-08-17 09:03:45 -0700</bug_when>
    <thetext>Created attachment 159136
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698475</commentid>
    <comment_count>35</comment_count>
      <attachid>159136</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-08-17 10:44:01 -0700</bug_when>
    <thetext>Comment on attachment 159136
Patch

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

&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:149
&gt; +        WebInspector.panels.timeline.loadFromURL(url);
&gt; +        WebInspector.showPanel(&quot;timeline&quot;);

I think you either need to reverse the orde of these two lines to assure timeline panel is already loaded, or use WebInspector.panel(&quot;timeline&quot;) in the first line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700528</commentid>
    <comment_count>36</comment_count>
      <attachid>159136</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-21 00:10:12 -0700</bug_when>
    <thetext>Comment on attachment 159136
Patch

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

I&apos;ll fix the nits and land it for you.

&gt;&gt; Source/WebCore/inspector/front-end/InspectorFrontendAPI.js:149
&gt;&gt; +        WebInspector.showPanel(&quot;timeline&quot;);
&gt; 
&gt; I think you either need to reverse the orde of these two lines to assure timeline panel is already loaded, or use WebInspector.panel(&quot;timeline&quot;) in the first line.

Should be WebInspector.showPanel(&quot;timeline&quot;).loadFromURL(url);

&gt; Source/WebCore/inspector/front-end/inspector.js:417
&gt; +    if (InspectorFrontendHost.isStub) {

It should go after WebInspector.doLoadedDone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700553</commentid>
    <comment_count>37</comment_count>
      <attachid>159636</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-21 00:55:39 -0700</bug_when>
    <thetext>Created attachment 159636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700554</commentid>
    <comment_count>38</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-21 00:56:03 -0700</bug_when>
    <thetext>@caseq: please cq it if you find it Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701276</commentid>
    <comment_count>39</comment_count>
      <attachid>159636</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 16:30:06 -0700</bug_when>
    <thetext>Comment on attachment 159636
Patch

Clearing flags on attachment: 159636

Committed r126215: &lt;http://trac.webkit.org/changeset/126215&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701277</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 16:30:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889364</commentid>
    <comment_count>41</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-08-06 06:25:58 -0700</bug_when>
    <thetext>*** Bug 96383 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152793</attachid>
            <date>2012-07-17 11:30:49 -0700</date>
            <delta_ts>2012-07-18 09:20:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120717143048.patch</filename>
            <type>text/plain</type>
            <size>6420</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckVtYmVkZGVkLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JFbWJlZGRlZC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmZi
OWE1NTY5MTQ1MjVhNzYyNjllMjZhZWMwNDFlODI2NzM1YjRkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JFbWJlZGRlZC5qcwpA
QCAtMCwwICsxLDkgQEAKKy8qKgorKiBAcGFyYW0ge3N0cmluZ30gdXJsCisqLwordmFyIGRvbUNv
bnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKKyAgICBJbnNwZWN0b3JGcm9udGVuZEFQSS5zaG93
VGltZWxpbmUoKTsKKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnRpbWVsaW5lLmxvYWRGcm9tVXJs
KFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsidXJsIl0pOworfTsKKword2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBkb21Db250ZW50TG9hZGVkLCBmYWxz
ZSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMKaW5kZXgg
N2VmODQ3OTgwYjU3ZTExNjdiNDQxNzk3OTljOTg1YTNjNzE4ZjI1ZS4uMDIyMzljM2I5ZjZhMzAy
ZWYwZmQ3ZTU3ODE5YzM1MDkyZDM1ZTMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzCkBAIC05NSw2
ICs5NSwxMSBAQCBJbnNwZWN0b3JGcm9udGVuZEFQSSA9IHsKICAgICAgICAgV2ViSW5zcGVjdG9y
Lmluc3BlY3RvclZpZXcuc2V0Q3VycmVudFBhbmVsKFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3Vy
Y2VzKTsKICAgICB9LAogCisgICAgc2hvd1RpbWVsaW5lOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5zZXRDdXJyZW50UGFuZWwoV2ViSW5zcGVj
dG9yLnBhbmVscy50aW1lbGluZSk7CisgICAgfSwKKwogICAgIHNldERvY2tpbmdVbmF2YWlsYWJs
ZTogZnVuY3Rpb24odW5hdmFpbGFibGUpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0
RG9ja2luZ1VuYXZhaWxhYmxlKHVuYXZhaWxhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1
Yi5qcwppbmRleCBhNmY5OGIyMTIyYWRhNjljNWMyOTFhNTQ3NGY3YjMwZmY1ZGU1YzAyLi4yNzIz
NmI4MThjMDMxZjdkYWUxMzhmYTA4YjQxOWRhNjg3MTRiNTkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLmpzCkBAIC0zNiw2ICszNiw3IEBAIGlmICghd2luZG93Lkluc3BlY3RvckZyb250
ZW5kSG9zdCkgewogV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIgPSBmdW5j
dGlvbigpCiB7CiAgICAgdGhpcy5fYXR0YWNoZWRXaW5kb3dIZWlnaHQgPSAwOworICAgIHRoaXMu
X2hpZGRlblBhbmVscyA9IFtdOwogICAgIHRoaXMuaXNTdHViID0gdHJ1ZTsKICAgICBXZWJJbnNw
ZWN0b3IuZG9jdW1lbnRDb3B5RXZlbnRGaXJlZCA9IHRoaXMuZG9jdW1lbnRDb3B5LmJpbmQodGhp
cyk7CiB9CkBAIC0xMDIsNyArMTAzLDIwIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKIAogICAgIGhpZGRlblBhbmVsczogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuUGFu
ZWxzOworICAgIH0sCisKKyAgICBhZGRIaWRkZW5QYW5lbDogZnVuY3Rpb24ocGFuZWwpCisgICAg
eworICAgICAgICBpZiAodGhpcy5faGlkZGVuUGFuZWxzLmluZGV4T2YocGFuZWwpID09IC0xKQor
ICAgICAgICAgICAgdGhpcy5faGlkZGVuUGFuZWxzLnB1c2gocGFuZWwpOworICAgIH0sCisKKyAg
ICByZW1vdmVIaWRkZW5QYW5lbDogZnVuY3Rpb24ocGFuZWwpCisgICAgeworICAgICAgICB2YXIg
cGFuZWxJbmRleCA9IHRoaXMuX2hpZGRlblBhbmVscy5pbmRleE9mKHBhbmVsKTsKKyAgICAgICAg
aWYgKHBhbmVsSW5kZXggIT0gLTEpCisgICAgICAgICAgICB0aGlzLl9oaWRkZW5QYW5lbHMuc3Bs
aWNlKHBhbmVsSW5kZXgsMSk7CiAgICAgfSwKIAogICAgIGluc3BlY3RlZFVSTENoYW5nZWQ6IGZ1
bmN0aW9uKHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGltZWxpbmVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGltZWxpbmVNb2RlbC5qcwppbmRleCBiM2I2YTY2MTcyNTBiYmVkMjViNGE2YmI3N2UyZTY3Y2Jk
NjhhNTVjLi43Zjc4MDRmYjAxMGIxOTc5Y2Y3YWEzODdkNDcxZTZmN2MyOTI1NWMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpz
CkBAIC0xNjYsMTMgKzE2NiwxOCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuX2xvYWROZXh0Q2h1bmsuYmluZCh0
aGlzLCBkYXRhLCBpbmRleCksIDApOwogICAgIH0sCiAKKyAgICBsb2FkUmVjb3JkczogZnVuY3Rp
b24ocmVjb3JkcykKKyAgICB7CisgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5f
bG9hZE5leHRDaHVuayhyZWNvcmRzLCAxKTsKKyAgICB9LAorCiAgICAgbG9hZEZyb21GaWxlOiBm
dW5jdGlvbihmaWxlKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gb25Mb2FkKGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXN1bHQpOwot
ICAgICAgICAgICAgdGhpcy5yZXNldCgpOwotICAgICAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVu
ayhkYXRhLCAxKTsKKyAgICAgICAgICAgIHRoaXMubG9hZFJlY29yZHMoZGF0YSk7CiAgICAgICAg
IH0KIAogICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKaW5kZXggMzYwYWMxMTNiOWRi
MzgxYmQxMWZlMjU4OTVjNDMyNDQ0Njc4ZjRhZC4uNTI4ZmYyMjg2YTk2YzhiMjcwY2I1NTE1YTRj
MjM3MDFjMjExNDE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UaW1lbGluZVBhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvVGltZWxpbmVQYW5lbC5qcwpAQCAtNzcwLDYgKzc3MCwxNyBAQCBXZWJJbnNwZWN0b3Iu
VGltZWxpbmVQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByZWNvcmRzSW5XaW5k
b3cubGVuZ3RoOwogICAgIH0sCiAKKyAgICBsb2FkRnJvbVVybDogZnVuY3Rpb24odXJsKQorICAg
IHsKKyAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICB4aHIu
b3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CisgICAgICAgIHhoci5zZW5kKG51bGwpOworICAgICAg
ICBpZih4aHIuc3RhdHVzID09IDIwMCkgeworICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBh
cnNlKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgdGhpcy5fbW9kZWwubG9hZFJlY29y
ZHMoZGF0YSk7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgX3JlZnJlc2hNYWluVGhyZWFkQmFy
czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgY29uc3QgYmFyT2Zmc2V0ID0gMzsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4
IDBmMTY1ZDNlMzFkZmM3YzNiMmVmYjUzY2Q2ZDk3ZDc2ZmM0YTY2MmIuLjg0NWI2NWRmMjhmOTA1
MWFjMTNiMTFiMjhhN2ZlYjVhYzg0NzgwYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtMjIxLDYgKzIyMSw3IEBAIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU25pcHBldFN0b3Jh
Z2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNjcmlwdFNuaXBwZXRNb2RlbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iU3R5bGVzUGFuZWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ikluc3BlY3RvckVtYmVkZGVkLmpzIj48L3Njcmlw
dD4KIDwvaGVhZD4KIDxib2R5IGNsYXNzPSJkZXRhY2hlZCIgaWQ9Ii13ZWJraXQtd2ViLWluc3Bl
Y3RvciI+CiAgICAgPGRpdiBpZD0idG9vbGJhciI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDFlNmEwMTI5NDY3NTliMDNkYzgzZDE0
MGNhYjkwYTRmYWI2MTkzM2YuLjMwNzUxMDE5MDYxODBkODA2ZGU5ZjJlNjVmMmYwOTA5M2E5Yjdh
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCkBAIC00NCw3ICs0NCw3IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgICAgICAgICB0
aGlzLnBhbmVscy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB2YXIgaGlkZGVuUGFuZWxzID0g
KEluc3BlY3RvckZyb250ZW5kSG9zdC5oaWRkZW5QYW5lbHMoKSB8fCAiIikuc3BsaXQoJywnKTsK
KyAgICAgICAgdmFyIGhpZGRlblBhbmVscyA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5oaWRkZW5Q
YW5lbHMoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJlbGVtZW50cyIpID09
PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLmVsZW1lbnRzID0gbmV3IFdlYkluc3BlY3Rv
ci5FbGVtZW50c1BhbmVsKCk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhPZigicmVz
b3VyY2VzIikgPT09IC0xKQpAQCAtNDEyLDYgKzQxMiwxNCBAQCBXZWJJbnNwZWN0b3IubG9hZGVk
ID0gZnVuY3Rpb24oKQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgZWxz
ZSBpZiAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlzU3R1YikgeworICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJoaWRkZW5QYW5lbHMiXSkgeworICAgICAgICAgICAg
dmFyIGhpZGRlblBhbmVscyA9IFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiaGlkZGVu
UGFuZWxzIl0uc3BsaXQoIiwiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlk
ZGVuUGFuZWxzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5k
SG9zdC5hZGRIaWRkZW5QYW5lbChoaWRkZW5QYW5lbHNbaV0pOworICAgICAgICB9CisgICAgICAg
IFdlYkluc3BlY3Rvci5fZG9Mb2FkZWREb25lV2l0aENhcGFiaWxpdGllcygpOworICAgIH0KICAg
ICBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153026</attachid>
            <date>2012-07-18 09:20:07 -0700</date>
            <delta_ts>2012-07-27 11:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120718122006.patch</filename>
            <type>text/plain</type>
            <size>5939</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMK
aW5kZXggYTZmOThiMjEyMmFkYTY5YzVjMjkxYTU0NzRmN2IzMGZmNWRlNWMwMi4uMjcyMzZiODE4
YzAzMWY3ZGFlMTM4ZmEwOGI0MTlkYTY4NzE0YjU5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0
U3R1Yi5qcwpAQCAtMzYsNiArMzYsNyBAQCBpZiAoIXdpbmRvdy5JbnNwZWN0b3JGcm9udGVuZEhv
c3QpIHsKIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViID0gZnVuY3Rpb24o
KQogewogICAgIHRoaXMuX2F0dGFjaGVkV2luZG93SGVpZ2h0ID0gMDsKKyAgICB0aGlzLl9oaWRk
ZW5QYW5lbHMgPSBbXTsKICAgICB0aGlzLmlzU3R1YiA9IHRydWU7CiAgICAgV2ViSW5zcGVjdG9y
LmRvY3VtZW50Q29weUV2ZW50RmlyZWQgPSB0aGlzLmRvY3VtZW50Q29weS5iaW5kKHRoaXMpOwog
fQpAQCAtMTAyLDcgKzEwMywyMCBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0
U3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICBoaWRkZW5QYW5lbHM6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlblBhbmVsczsK
KyAgICB9LAorCisgICAgYWRkSGlkZGVuUGFuZWw6IGZ1bmN0aW9uKHBhbmVsKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuX2hpZGRlblBhbmVscy5pbmRleE9mKHBhbmVsKSA9PSAtMSkKKyAgICAg
ICAgICAgIHRoaXMuX2hpZGRlblBhbmVscy5wdXNoKHBhbmVsKTsKKyAgICB9LAorCisgICAgcmVt
b3ZlSGlkZGVuUGFuZWw6IGZ1bmN0aW9uKHBhbmVsKQorICAgIHsKKyAgICAgICAgdmFyIHBhbmVs
SW5kZXggPSB0aGlzLl9oaWRkZW5QYW5lbHMuaW5kZXhPZihwYW5lbCk7CisgICAgICAgIGlmIChw
YW5lbEluZGV4ICE9IC0xKQorICAgICAgICAgICAgdGhpcy5faGlkZGVuUGFuZWxzLnNwbGljZShw
YW5lbEluZGV4LDEpOwogICAgIH0sCiAKICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlv
bih1cmwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rp
bWVsaW5lTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVs
aW5lTW9kZWwuanMKaW5kZXggYjNiNmE2NjE3MjUwYmJlZDI1YjRhNmJiNzdlMmU2N2NiZDY4YTU1
Yy4uYWU2MjNmYjZjZTUxYjQyMmFmYjJjMzQ1Mzg5ZjA1NjNmMTA2MzEwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcwpAQCAt
MTY2LDEzICsxNjYsMjEgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgc2V0VGltZW91dCh0aGlzLl9sb2FkTmV4dENodW5rLmJpbmQodGhpcywg
ZGF0YSwgaW5kZXgpLCAwKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtPYmpl
Y3RbXX0gcmVjb3JkcworICAgICAqLworICAgIGxvYWRSZWNvcmRzOiBmdW5jdGlvbihyZWNvcmRz
KQorICAgIHsKKyAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB0aGlzLl9sb2FkTmV4dENo
dW5rKHJlY29yZHMsIDEpOworICAgIH0sCisKICAgICBsb2FkRnJvbUZpbGU6IGZ1bmN0aW9uKGZp
bGUpCiAgICAgewogICAgICAgICBmdW5jdGlvbiBvbkxvYWQoZSkKICAgICAgICAgewogICAgICAg
ICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGUudGFyZ2V0LnJlc3VsdCk7Ci0gICAgICAgICAg
ICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgICAgICB0aGlzLl9sb2FkTmV4dENodW5rKGRhdGEsIDEp
OworICAgICAgICAgICAgdGhpcy5sb2FkUmVjb3JkcyhkYXRhKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkKQEAgLTE5Nyw2ICsyMDUsMzEgQEAgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICByZWFkZXIucmVhZEFzVGV4dChm
aWxlKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAorICAg
ICAqLworICAgIGxvYWRGcm9tVXJsOiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7CisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAg
ICAgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOworICAgICAgICB4aHIub25yZWFkeXN0
YXRlY2hhbmdlID0gZGF0YVJlY2VpdmVkOworICAgICAgICB4aHIuc2VuZChudWxsKTsKKworICAg
ICAgICBmdW5jdGlvbiBkYXRhUmVjZWl2ZWQoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
eGhyLnN0YXR1cyA9PT0gMjAwKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOworICAgICAg
ICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KGUubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRSZWNvcmRzKGRhdGEpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSwKKwogICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHZhciByZWNvcmRzID0gWydbJyArIEpTT04uc3RyaW5naWZ5KG5ldyBT
dHJpbmcod2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uKSldOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCmluZGV4IDM2MGFjMTEz
YjlkYjM4MWJkMTFmZTI1ODk1YzQzMjQ0NDY3OGY0YWQuLjAyMjI2YzFkODAyOGFjZmMyN2M2MTEy
NjkwZmVhMmQxMzkwNzc1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKQEAgLTc3MCw2ICs3NzAsMTQgQEAgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gcmVjb3Jkc0lu
V2luZG93Lmxlbmd0aDsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9
IHVybAorICAgICAqLworICAgIGxvYWRGcm9tVXJsOiBmdW5jdGlvbih1cmwpCisgICAgeworICAg
ICAgICB0aGlzLl9tb2RlbC5sb2FkRnJvbVVybCh1cmwpOworICAgIH0sCisKICAgICBfcmVmcmVz
aE1haW5UaHJlYWRCYXJzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBjb25zdCBiYXJPZmZz
ZXQgPSAzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qcwppbmRleCAxZTZhMDEyOTQ2NzU5YjAzZGM4M2QxNDBjYWI5MGE0ZmFiNjE5MzNmLi5jNjNm
YjM4OWFjOWQwYmY3NDk0ZGU2ZTNmNjhjZDk3ZDYzNDBmMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNDQsNyArNDQsNyBAQCB2
YXIgV2ViSW5zcGVjdG9yID0gewogICAgICAgICAgICAgdGhpcy5wYW5lbHMuY29uc29sZSA9IG5l
dyBXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgdmFyIGhpZGRlblBhbmVscyA9IChJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
aGlkZGVuUGFuZWxzKCkgfHwgIiIpLnNwbGl0KCcsJyk7CisgICAgICAgIHZhciBoaWRkZW5QYW5l
bHMgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFuZWxzKCk7CiAgICAgICAgIGlmICho
aWRkZW5QYW5lbHMuaW5kZXhPZigiZWxlbWVudHMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlz
LnBhbmVscy5lbGVtZW50cyA9IG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbCgpOwogICAg
ICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoInJlc291cmNlcyIpID09PSAtMSkKQEAgLTQx
MSw2ICs0MTEsMTUgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CisgICAgfSBlbHNlIGlmIChJbnNwZWN0b3JGcm9udGVuZEhvc3QuaXNTdHViKSB7CisgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImhpZGRlblBhbmVscyJdKSB7
CisgICAgICAgICAgICB2YXIgaGlkZGVuUGFuZWxzID0gV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1z
T2JqZWN0WyJoaWRkZW5QYW5lbHMiXS5zcGxpdCgiLCIpOworICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJoaWRkZW5QYW5lbHMiXS5zcGxpdCgiLCIpLmZvckVhY2go
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmFkZEhpZGRlblBhbmVsLCBJbnNwZWN0b3JGcm9udGVuZEhv
c3QpCisgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLl9kb0xvYWRlZERvbmVXaXRoQ2Fw
YWJpbGl0aWVzKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LnNldEN1cnJl
bnRQYW5lbChXZWJJbnNwZWN0b3IuZmlyc3RQYW5lbCgpKTsKKyAgICAgICAgaWYgKHR5cGVvZiBX
ZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbInVybCJdICE9PSAidW5kZWZpbmVkIikKKyAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMudGltZWxpbmUubG9hZEZyb21VcmwoV2ViSW5z
cGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJ1cmwiXSk7CiAgICAgfQogICAgIFdlYkluc3BlY3Rv
ci5kb0xvYWRlZERvbmUoKTsKIH0KQEAgLTU3MCw2ICs1NzksMTggQEAgV2ViSW5zcGVjdG9yLmFk
ZFBhbmVsID0gZnVuY3Rpb24ocGFuZWwpCiAgICAgV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcu
YWRkUGFuZWwocGFuZWwpOwogfQogCitXZWJJbnNwZWN0b3IuZmlyc3RQYW5lbCA9IGZ1bmN0aW9u
KCkKK3sKKyAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cyB8fAorICAgICAg
ICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcyB8fAorICAgICAgICAgICBXZWJJbnNw
ZWN0b3IucGFuZWxzLm5ldHdvcmsgfHwKKyAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzIHx8CisgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMudGltZWxpbmUgfHwKKyAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5wcm9maWxlcyB8fAorICAgICAgICAgICBXZWJJ
bnNwZWN0b3IucGFuZWxzLmF1ZGl0cyB8fAorICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxz
LmNvbnNvbGU7Cit9CisKIHZhciB3aW5kb3dMb2FkZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgdmFy
IGxvY2FsaXplZFN0cmluZ3NVUkwgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9jYWxpemVkU3Ry
aW5nc1VSTCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154992</attachid>
            <date>2012-07-27 11:14:39 -0700</date>
            <delta_ts>2012-07-30 10:30:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120727141426.patch</filename>
            <type>text/plain</type>
            <size>16329</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRlNGU2NTFkYjA0NGZk
OWJjYjViNjMwNTZkODgzMjlhYjQ0YTU3MS4uODUzMTQ1YTRjNmMwOTUzZjA3OGRjYmM0ZWZlNzkx
Mzk4MWFlNGVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxMi0wNy0xOCAgR2Fi
cmllbCBQZWFsICA8Z3BlYWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBFbWJlZGRhYmxlIERldmVs
b3BlciBUb29scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTE1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwg
cmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgdW50aWwgdGhpcyB0eXBlIG9mIGNoYW5nZSBp
biBpdHMgY3VycmVudCBzdGF0ZSBpcyBhcHByb3ZlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qczoKKyAgICAgICAgKC5XZWJJbnNw
ZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yik6CisgICAgICAgICguV2ViSW5zcGVjdG9y
Lkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmhpZGRlblBhbmVscyk6CisgICAg
ICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmFk
ZEhpZGRlblBhbmVsKToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5wcm90b3R5cGUucmVtb3ZlSGlkZGVuUGFuZWwpOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1l
bGluZU1vZGVsLnByb3RvdHlwZS5sb2FkUmVjb3Jkcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGltZWxpbmVNb2RlbC5wcm90b3R5cGUubG9hZEZyb21GaWxlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5sb2FkRnJvbVVybC5kYXRhUmVjZWl2ZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLmxvYWRGcm9tVXJs
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5wcm90b3R5cGUubG9hZEZyb21VcmwpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLl9jcmVhdGVQYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuZmlyc3RQYW5lbCk6CisKKzIwMTItMDctMTggIEdhYnJp
ZWwgUGVhbCAgPGdwZWFsQGdvb2dsZS5jb20+CisKKyAgICAgICAgRW1iZWRkYWJsZSBEZXZlbG9w
ZXIgVG9vbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTkxNTI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJh
dGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgorICAgICAgICAoSW5zcGVjdG9y
RnJvbnRlbmRBUEkuc2hvd1RpbWVsaW5lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLklu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0
b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZS5oaWRkZW5QYW5lbHMpOgorICAgICAgICAoLldl
Ykluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZS5hZGRIaWRkZW5Q
YW5lbCk6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIu
cHJvdG90eXBlLnJlbW92ZUhpZGRlblBhbmVsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1RpbWVsaW5lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2Rl
bC5wcm90b3R5cGUubG9hZFJlY29yZHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5l
TW9kZWwucHJvdG90eXBlLmxvYWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGlt
ZWxpbmVNb2RlbC5wcm90b3R5cGUubG9hZEZyb21VcmwuZGF0YVJlY2VpdmVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5sb2FkRnJvbVVybCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmxvYWRGcm9tVXJsKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5fY3JlYXRlUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLmZpcnN0UGFuZWwpOgorCisyMDEyLTA3LTE4ICBHYWJyaWVsIFBlYWwg
IDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIEVtYmVkZGFibGUgRGV2ZWxvcGVyIFRvb2xz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTUyOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUu
IFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKKyAgICAgICAgKEluc3BlY3RvckZyb250ZW5k
QVBJLnNob3dUaW1lbGluZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0
b3JGcm9udGVuZEhvc3RTdHViLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JG
cm9udGVuZEhvc3RTdHViKToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5wcm90b3R5cGUuaGlkZGVuUGFuZWxzKToKKyAgICAgICAgKC5XZWJJbnNwZWN0
b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUuYWRkSGlkZGVuUGFuZWwpOgor
ICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlw
ZS5yZW1vdmVIaWRkZW5QYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1l
bGluZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90
eXBlLmxvYWRSZWNvcmRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnBy
b3RvdHlwZS5sb2FkRnJvbUZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9k
ZWwucHJvdG90eXBlLmxvYWRGcm9tVXJsLmRhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5cGUubG9hZEZyb21VcmwpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UaW1lbGluZVBhbmVsLnByb3RvdHlwZS5sb2FkRnJvbVVybCk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuX2NyZWF0
ZVBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5maXJzdFBhbmVsKToKKworMjAxMi0wNy0xNyAgR2FicmllbCBQZWFsICA8Z3BlYWxA
Z29vZ2xlLmNvbT4KKworICAgICAgICBFbWJlZGRhYmxlIERldmVsb3BlciBUb29scworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE1MjgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9y
bWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2Ug
YWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5z
cGVjdG9yRW1iZWRkZWQuanM6IEFkZGVkLgorICAgICAgICAoZG9tQ29udGVudExvYWRlZCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKKyAg
ICAgICAgKEluc3BlY3RvckZyb250ZW5kQVBJLnNob3dUaW1lbGluZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzOgorICAgICAgICAo
LldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViKToKKyAgICAgICAgKC5XZWJJ
bnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUuaGlkZGVuUGFuZWxz
KToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90
b3R5cGUuYWRkSGlkZGVuUGFuZWwpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JG
cm9udGVuZEhvc3RTdHViLnByb3RvdHlwZS5yZW1vdmVIaWRkZW5QYW5lbCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLmxvYWRSZWNvcmRzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5sb2FkRnJvbUZpbGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UaW1lbGluZVBhbmVsLnByb3RvdHlwZS5sb2FkRnJvbVVybCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fY3JlYXRlUGFuZWxz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorCisyMDEyLTA3LTE3ICBHYWJyaWVs
IFBlYWwgIDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIEVtYmVkZGFibGUgRGV2ZWxvcGVy
IFRvb2xzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
MTUyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRp
b25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JFbWJlZGRlZC5qczogQWRkZWQuCisgICAgICAgIChkb21Db250
ZW50TG9hZGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kQVBJLmpzOgorICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd1RpbWVsaW5lKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIu
anM6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIpOgor
ICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlw
ZS5oaWRkZW5QYW5lbHMpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVu
ZEhvc3RTdHViLnByb3RvdHlwZS5hZGRIaWRkZW5QYW5lbCk6CisgICAgICAgICguV2ViSW5zcGVj
dG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLnJlbW92ZUhpZGRlblBhbmVs
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5cGUubG9hZFJlY29yZHMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLmxvYWRGcm9tRmls
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmxvYWRGcm9tVXJsKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
Ll9jcmVhdGVQYW5lbHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisKKzIwMTIt
MDctMTcgIEdhYnJpZWwgUGVhbCAgPGdwZWFsQGdvb2dsZS5jb20+CisKKyAgICAgICAgRW1iZWRk
YWJsZSBEZXZlbG9wZXIgVG9vbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkxNTI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMg
YXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25z
IGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckVtYmVkZGVkLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGRvbUNvbnRlbnRMb2FkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
SW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CisgICAgICAgIChJbnNwZWN0b3JGcm9udGVuZEFQSS5z
aG93VGltZWxpbmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0U3R1Yi5qczoKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yik6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIucHJvdG90eXBlLmhpZGRlblBhbmVscyk6CisgICAgICAgICguV2ViSW5zcGVjdG9yLklu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmFkZEhpZGRlblBhbmVsKToKKyAgICAg
ICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUucmVt
b3ZlSGlkZGVuUGFuZWwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVN
b2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5s
b2FkUmVjb3Jkcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5
cGUubG9hZEZyb21GaWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5l
UGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5wcm90b3R5cGUu
bG9hZEZyb21VcmwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0
bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9h
ZGVkKToKKworMjAxMi0wNy0xNyAgR2FicmllbCBQZWFsICA8Z3BlYWxAZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBFbWJlZGRhYmxlIERldmVsb3BlciBUb29scworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE1MDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBj
aGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlv
biBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9P
UFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRW1iZWRkZWQu
anM6IEFkZGVkLgorICAgICAgICAoZG9tQ29udGVudExvYWRlZCk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qczoKKyAgICAgICAgKEluc3BlY3Rv
ckZyb250ZW5kQVBJLnNob3dUaW1lbGluZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5J
bnNwZWN0b3JGcm9udGVuZEhvc3RTdHViKToKKyAgICAgICAgKC5XZWJJbnNwZWN0b3IuSW5zcGVj
dG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUuaGlkZGVuUGFuZWxzKToKKyAgICAgICAgKC5X
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUuYWRkSGlkZGVu
UGFuZWwpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHVi
LnByb3RvdHlwZS5yZW1vdmVIaWRkZW5QYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9UaW1lbGluZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9k
ZWwucHJvdG90eXBlLmxvYWRSZWNvcmRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGlu
ZU1vZGVsLnByb3RvdHlwZS5sb2FkRnJvbUZpbGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvVGltZWxpbmVQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBh
bmVsLnByb3RvdHlwZS5sb2FkRnJvbVVybCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fY3JlYXRlUGFuZWxzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5sb2FkZWQpOgorCisyMDEyLTA3LTE3ICBHYWJyaWVsIFBlYWwgIDxncGVhbEBn
b29nbGUuY29tPgorCisgICAgICAgIEVtYmVkZGFibGUgRGV2ZWxvcGVyIFRvb2xzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTUwNworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNw
ZWN0b3JFbWJlZGRlZC5qczogQWRkZWQuCisgICAgICAgIChkb21Db250ZW50TG9hZGVkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgorICAg
ICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuc2hvd1RpbWVsaW5lKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICgu
V2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIpOgorICAgICAgICAoLldlYklu
c3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZS5oaWRkZW5QYW5lbHMp
OgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3Rv
dHlwZS5hZGRIaWRkZW5QYW5lbCk6CisgICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZy
b250ZW5kSG9zdFN0dWIucHJvdG90eXBlLnJlbW92ZUhpZGRlblBhbmVsKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5cGUubG9hZFJlY29yZHMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLmxvYWRGcm9tRmlsZSk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmxvYWRGcm9tVXJsKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLl9jcmVhdGVQYW5lbHMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisKIDIwMTItMDctMTYgIFpvbHRhbiBI
b3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmVtb3Zl
IHVubmVjZXNzYXJ5IGV4ZWN1dGFibGUgYml0cyBhZnRlciByMTIyNzIwLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNl
L1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IGNlNmZiZTU5
NDU0ZDFjMWU3ZmUxYjJjODljNGNmY2ZiNDJiNjczNTMuLjA3MmRkMTcwYjBiMmYzMGVlZjQ4ZWVi
NTU3ZTA0YTcyY2E0ZGVhNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHBy
b2ovbG9jYWxpemVkU3RyaW5ncy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9q
L2xvY2FsaXplZFN0cmluZ3MuanMKQEAgLTcyMSwzICs3MjEsNCBAQCBsb2NhbGl6ZWRTdHJpbmdz
WyJFbmNvZGVkIERhdGEgTGVuZ3RoIl0gPSAiRW5jb2RlZCBEYXRhIExlbmd0aCI7CiBsb2NhbGl6
ZWRTdHJpbmdzWyIlZCBCeXRlcyJdID0gIiVkIEJ5dGVzIjsKIGxvY2FsaXplZFN0cmluZ3NbIlRp
bWUgRW5kIl0gPSAiVGltZSBFbmQiOwogbG9jYWxpemVkU3RyaW5nc1siRmluZCJdID0gIkZpbmQi
OworbG9jYWxpemVkU3RyaW5nc1siRmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVy
cm9yOiAlcyJdID0gIkZhaWxlZCB0byBsb2FkIHRpbWVsaW5lIGRhdGEgd2l0aCBlcnJvcjogJXMi
OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwppbmRleCBkZTMzNDU1MDE1OWY2NTU2
NzIzY2M0NDQyMWMzNDU3OTBmYjE2ZjdkLi5lYzE5YzM3Mjc3M2M2ZDA5NTdlN2VkM2Y1ZDAyYjRk
ZDlkNTBkMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luc3BlY3RvclZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbnNwZWN0b3JWaWV3LmpzCkBAIC03Myw2ICs3Myw5IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0
b3JWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgIHNldEN1cnJlbnRQYW5lbDogZnVuY3Rpb24oeCkK
ICAgICB7CisgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gIm51bWJlciIpCisgICAgICAgICAgICB4
ID0gdGhpcy5fcGFuZWxPcmRlclt4XTsKKwogICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhbmVs
ID09PSB4KQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKaW5kZXggYjNiNmE2NjE3MjUwYmJl
ZDI1YjRhNmJiNzdlMmU2N2NiZDY4YTU1Yy4uNDRjY2VlMzU5OGUwMTFlYjcxMDUyNTIwZjRjNTJj
NGFiNDYzMDZiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGltZWxpbmVNb2RlbC5qcwpAQCAtMTY2LDEzICsxNjYsMjEgQEAgV2ViSW5zcGVjdG9yLlRp
bWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2V0VGltZW91dCh0aGlzLl9s
b2FkTmV4dENodW5rLmJpbmQodGhpcywgZGF0YSwgaW5kZXgpLCAwKTsKICAgICB9LAogCisgICAg
LyoqCisgICAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gcmVjb3JkcworICAgICAqLworICAg
IGxvYWRSZWNvcmRzOiBmdW5jdGlvbihyZWNvcmRzKQorICAgIHsKKyAgICAgICAgdGhpcy5yZXNl
dCgpOworICAgICAgICB0aGlzLl9sb2FkTmV4dENodW5rKHJlY29yZHMsIDEpOworICAgIH0sCisK
ICAgICBsb2FkRnJvbUZpbGU6IGZ1bmN0aW9uKGZpbGUpCiAgICAgewogICAgICAgICBmdW5jdGlv
biBvbkxvYWQoZSkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBhcnNl
KGUudGFyZ2V0LnJlc3VsdCk7Ci0gICAgICAgICAgICB0aGlzLnJlc2V0KCk7Ci0gICAgICAgICAg
ICB0aGlzLl9sb2FkTmV4dENodW5rKGRhdGEsIDEpOworICAgICAgICAgICAgdGhpcy5sb2FkUmVj
b3JkcyhkYXRhKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkKQEAg
LTE5Nyw2ICsyMDUsMzEgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0g
ewogICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICB9LAogCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAorICAgICAqLworICAgIGxvYWRGcm9tVXJsOiBmdW5j
dGlvbih1cmwpCisgICAgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIHZhciB4
aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwg
ZmFsc2UpOworICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZGF0YVJlY2VpdmVkOwor
ICAgICAgICB4aHIuc2VuZChudWxsKTsKKworICAgICAgICBmdW5jdGlvbiBkYXRhUmVjZWl2ZWQo
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7CisgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBKU09OLnBh
cnNlKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygn
RmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcycsIGUubWVzc2FnZSkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNlbGYubG9hZFJlY29yZHMoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9LAorCiAgICAgc2F2ZVRvRmlsZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
dmFyIHJlY29yZHMgPSBbJ1snICsgSlNPTi5zdHJpbmdpZnkobmV3IFN0cmluZyh3aW5kb3cubmF2
aWdhdG9yLmFwcFZlcnNpb24pKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKaW5kZXggMzYwYWMxMTNiOWRiMzgxYmQxMWZlMjU4
OTVjNDMyNDQ0Njc4ZjRhZC4uMDIyMjZjMWQ4MDI4YWNmYzI3YzYxMTI2OTBmZWEyZDEzOTA3NzVi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGlu
ZVBhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxp
bmVQYW5lbC5qcwpAQCAtNzcwLDYgKzc3MCwxNCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiByZWNvcmRzSW5XaW5kb3cubGVuZ3RoOwog
ICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisgICAgICovCisg
ICAgbG9hZEZyb21Vcmw6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHRoaXMuX21vZGVs
LmxvYWRGcm9tVXJsKHVybCk7CisgICAgfSwKKwogICAgIF9yZWZyZXNoTWFpblRocmVhZEJhcnM6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGNvbnN0IGJhck9mZnNldCA9IDM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDFlNmEw
MTI5NDY3NTliMDNkYzgzZDE0MGNhYjkwYTRmYWI2MTkzM2YuLjY0ZmQyYTZkN2ZlMGRjYjc4MDhi
YjMxOTAyN2ZhZjJmMTI3MTI2YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC00NCw3ICs0NCwxMCBAQCB2YXIgV2ViSW5zcGVjdG9y
ID0gewogICAgICAgICAgICAgdGhpcy5wYW5lbHMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
Q29uc29sZVBhbmVsKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
dmFyIGhpZGRlblBhbmVscyA9IChJbnNwZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFuZWxzKCkg
fHwgIiIpLnNwbGl0KCcsJyk7CisgICAgICAgIHZhciBoaWRkZW5QYW5lbHNTdHJpbmcgPSBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFuZWxzKCkgfHwgIiI7CisgICAgICAgIGlmIChXZWJJ
bnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImhpZGRlblBhbmVscyJdKQorICAgICAgICAgICAg
aGlkZGVuUGFuZWxzU3RyaW5nICs9ICIsIiArIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVj
dFsiaGlkZGVuUGFuZWxzIl07CisgICAgICAgIHZhciBoaWRkZW5QYW5lbHMgPSBoaWRkZW5QYW5l
bHNTdHJpbmcuc3BsaXQoIiwiKQogICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoImVs
ZW1lbnRzIikgPT09IC0xKQogICAgICAgICAgICAgdGhpcy5wYW5lbHMuZWxlbWVudHMgPSBuZXcg
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5p
bmRleE9mKCJyZXNvdXJjZXMiKSA9PT0gLTEpCkBAIC00MTEsNiArNDE0LDExIEBAIFdlYkluc3Bl
Y3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9Mb2Fk
ZWREb25lKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmlzU3R1YikgeworICAgICAgICBXZWJJbnNwZWN0b3IuX2RvTG9h
ZGVkRG9uZVdpdGhDYXBhYmlsaXRpZXMoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmluc3BlY3Rv
clZpZXcuc2V0Q3VycmVudFBhbmVsKDApOworICAgICAgICBpZiAodHlwZW9mIFdlYkluc3BlY3Rv
ci5xdWVyeVBhcmFtc09iamVjdFsidGltZWxpbmVVcmwiXSAhPT0gInVuZGVmaW5lZCIpCisgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnRpbWVsaW5lLmxvYWRGcm9tVXJsKFdlYkluc3Bl
Y3Rvci5xdWVyeVBhcmFtc09iamVjdFsidGltZWxpbmVVcmwiXSk7CiAgICAgfQogICAgIFdlYklu
c3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155315</attachid>
            <date>2012-07-30 10:30:30 -0700</date>
            <delta_ts>2012-08-01 09:02:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120730133014.patch</filename>
            <type>text/plain</type>
            <size>7025</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggY2U2ZmJlNTk0NTRkMWMxZTdmZTFiMmM4
OWM0Y2ZjZmI0MmI2NzM1My4uMDcyZGQxNzBiMGIyZjMwZWVmNDhlZWI1NTdlMDRhNzJjYTRkZWE1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5n
cy5qcwpAQCAtNzIxLDMgKzcyMSw0IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVuY29kZWQgRGF0YSBM
ZW5ndGgiXSA9ICJFbmNvZGVkIERhdGEgTGVuZ3RoIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVkIEJ5
dGVzIl0gPSAiJWQgQnl0ZXMiOwogbG9jYWxpemVkU3RyaW5nc1siVGltZSBFbmQiXSA9ICJUaW1l
IEVuZCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJGaW5kIl0gPSAiRmluZCI7Citsb2NhbGl6ZWRTdHJp
bmdzWyJGYWlsZWQgdG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAiRmFp
bGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMKaW5kZXggN2VmODQ3OTgwYjU3ZTExNjdi
NDQxNzk3OTljOTg1YTNjNzE4ZjI1ZS4uMTIzYmE0Mjk0ZTE3MDhhZTczODQ1OTA0NjNiYjVmOTFj
ZDEzYTc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bnNwZWN0b3JGcm9udGVuZEFQSS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzCkBAIC0xMjksNiArMTI5LDEwIEBAIEluc3Bl
Y3RvckZyb250ZW5kQVBJID0gewogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQSS5fcGVuZGlu
Z0NvbW1hbmRzLnB1c2goc2lnbmF0dXJlKTsKICAgICB9LAogCisgICAgbG9hZFRpbWVsaW5lRnJv
bVVSTDogZnVuY3Rpb24odXJsKSB7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMudGltZWxp
bmUubG9hZEZyb21VUkwodXJsKTsKKyAgICB9LAorCiAgICAgbG9hZENvbXBsZXRlZDogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBJbnNwZWN0b3JGcm9udGVu
ZEFQSS5fcGVuZGluZ0NvbW1hbmRzLmxlbmd0aDsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RT
dHViLmpzCmluZGV4IGE2Zjk4YjIxMjJhZGE2OWM1YzI5MWE1NDc0ZjdiMzBmZjVkZTVjMDIuLjBi
MDA1ZGM1NTZkZjk5NjdjNjQ1MGIxNTQwZjM1NmJkZWQ3Y2Y5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kSG9zdFN0dWIuanMKQEAgLTEwMiw3ICsxMDIsMTAgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3Rv
ckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogCiAgICAgaGlkZGVuUGFuZWxzOiBmdW5j
dGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHZhciBoaWRkZW5QYW5l
bHMgPSAiIjsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiaGlk
ZGVuUGFuZWxzIl0pCisgICAgICAgICAgICBoaWRkZW5QYW5lbHMgKz0gIiwiICsgV2ViSW5zcGVj
dG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJoaWRkZW5QYW5lbHMiXTsKKyAgICAgICAgcmV0dXJuIGhp
ZGRlblBhbmVsczsKICAgICB9LAogCiAgICAgaW5zcGVjdGVkVVJMQ2hhbmdlZDogZnVuY3Rpb24o
dXJsKQpAQCAtMTc5LDcgKzE4MiwxMCBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiBm
dW5jdGlvbih1cmwpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFs
c2UpOworICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICAgICAgcmV0dXJuIHhoci5yZXNwb25z
ZVRleHQ7CiAgICAgfSwKIAogICAgIHNldFpvb21GYWN0b3I6IGZ1bmN0aW9uKHpvb20pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMK
aW5kZXggZGUzMzQ1NTAxNTlmNjU1NjcyM2NjNDQ0MjFjMzQ1NzkwZmIxNmY3ZC4uNTA4MzQ5MzNk
NTQ4ZGUyMWI2Mjc1ZDVjYmEyMjM3MDUxZTIyMDViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwpAQCAtNzAsNyArNzAsMTAg
QEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYW5lbDsKICAgICB9LAotCisgICAgCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFuZWx9IHgKKyAgICAgKi8KICAgICBzZXRDdXJy
ZW50UGFuZWw6IGZ1bmN0aW9uKHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY3VycmVudFBh
bmVsID09PSB4KQpAQCAtOTYsNiArOTksMTQgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcu
cHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBpbmRleAorICAgICAqLworICAgIGdldFBhbmVsOiBmdW5jdGlvbihpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9wYW5lbE9yZGVyW2luZGV4XSB8fCB0aGlzLl9w
YW5lbE9yZGVyWzBdOworICAgIH0sCisKICAgICBfa2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQog
ICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9rZXlEb3duVGltZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKaW5kZXggYjNiNmE2
NjE3MjUwYmJlZDI1YjRhNmJiNzdlMmU2N2NiZDY4YTU1Yy4uNmU0NWQ4YjFlYzcxMmU5YmMwYzkw
NzFmN2NjYTlkNjE5MmE5NzU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcwpAQCAtMTY2LDEzICsxNjYsMjEgQEAgV2ViSW5z
cGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2V0VGltZW91
dCh0aGlzLl9sb2FkTmV4dENodW5rLmJpbmQodGhpcywgZGF0YSwgaW5kZXgpLCAwKTsKICAgICB9
LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gcmVjb3JkcworICAg
ICAqLworICAgIF9sb2FkUmVjb3JkczogZnVuY3Rpb24ocmVjb3JkcykKKyAgICB7CisgICAgICAg
IHRoaXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVuayhyZWNvcmRzLCAxKTsK
KyAgICB9LAorCiAgICAgbG9hZEZyb21GaWxlOiBmdW5jdGlvbihmaWxlKQogICAgIHsKICAgICAg
ICAgZnVuY3Rpb24gb25Mb2FkKGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBkYXRhID0g
SlNPTi5wYXJzZShlLnRhcmdldC5yZXN1bHQpOwotICAgICAgICAgICAgdGhpcy5yZXNldCgpOwot
ICAgICAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVuayhkYXRhLCAxKTsKKyAgICAgICAgICAgIHRo
aXMuX2xvYWRSZWNvcmRzKGRhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gb25F
cnJvcihlKQpAQCAtMTk3LDYgKzIwNSwyMSBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgIH0sCiAK
KyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisgICAgICovCisgICAgbG9hZEZy
b21VUkw6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHZhciBkYXRhID0gSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsKKyAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOworICAgICAgICAgICAgdGhp
cy5fbG9hZFJlY29yZHMoZGF0YSk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoJ0ZhaWxlZCB0byBsb2FkIHRp
bWVsaW5lIGRhdGEgd2l0aCBlcnJvcjogJXMnLCBlLm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0sCisKICAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICB2YXIgcmVjb3JkcyA9IFsnWycgKyBKU09OLnN0cmluZ2lmeShuZXcgU3Ry
aW5nKHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbikpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwppbmRleCAzNjBhYzExM2I5
ZGIzODFiZDExZmUyNTg5NWM0MzI0NDQ2NzhmNGFkLi5lOTBhMTA5OTI0OTM1Y2ZhNGE4ODI3YTlm
ZWNjMzQxODU2MjY0NDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9UaW1lbGluZVBhbmVsLmpzCkBAIC03NzAsNiArNzcwLDE0IEBAIFdlYkluc3BlY3Rv
ci5UaW1lbGluZVBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJlY29yZHNJbldp
bmRvdy5sZW5ndGg7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwKKyAgICAgKi8KKyAgICBsb2FkRnJvbVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fbW9kZWwubG9hZEZyb21VUkwodXJsKTsKKyAgICB9LAorCiAgICAgX3JlZnJlc2hN
YWluVGhyZWFkQmFyczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgY29uc3QgYmFyT2Zmc2V0
ID0gMzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anMKaW5kZXggMWU2YTAxMjk0Njc1OWIwM2RjODNkMTQwY2FiOTBhNGZhYjYxOTMzZi4uNjM2YzI4
MTEwOGQxMWYzNDE5Nzg3Y2Q2OTNmODA0M2UzZTU0YzJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTQ0LDcgKzQ0LDcgQEAgdmFy
IFdlYkluc3BlY3RvciA9IHsKICAgICAgICAgICAgIHRoaXMucGFuZWxzLmNvbnNvbGUgPSBuZXcg
V2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIHZhciBoaWRkZW5QYW5lbHMgPSAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmhp
ZGRlblBhbmVscygpIHx8ICIiKS5zcGxpdCgnLCcpOworICAgICAgICB2YXIgaGlkZGVuUGFuZWxz
ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmhpZGRlblBhbmVscygpOwogICAgICAgICBpZiAoaGlk
ZGVuUGFuZWxzLmluZGV4T2YoImVsZW1lbnRzIikgPT09IC0xKQogICAgICAgICAgICAgdGhpcy5w
YW5lbHMuZWxlbWVudHMgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwoKTsKICAgICAg
ICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJyZXNvdXJjZXMiKSA9PT0gLTEpCkBAIC00MTIs
NiArNDEyLDE0IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmlz
U3R1YikgeworICAgICAgICBXZWJJbnNwZWN0b3IuX2RvTG9hZGVkRG9uZVdpdGhDYXBhYmlsaXRp
ZXMoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmluc3BlY3RvclZpZXcuc2V0Q3VycmVudFBhbmVs
KFdlYkluc3BlY3Rvci5pbnNwZWN0b3JWaWV3LmdldFBhbmVsKDApKTsKKyAgICAgICAgaWYgKHR5
cGVvZiBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImNhbGxBUEkiXSAhPT0gInVuZGVm
aW5lZCIpIHsKKyAgICAgICAgICAgIHZhciBjYWxsRnVuY3Rpb24gPSB3aW5kb3dbIkluc3BlY3Rv
ckZyb250ZW5kQVBJIl1bV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJjYWxsQVBJIl1d
OworICAgICAgICAgICAgY2FsbEZ1bmN0aW9uKFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVj
dFsicGFyYW1zIl0pOworICAgICAgICB9CisgICAgfQogICAgIFdlYkluc3BlY3Rvci5kb0xvYWRl
ZERvbmUoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155817</attachid>
            <date>2012-08-01 09:02:59 -0700</date>
            <delta_ts>2012-08-01 10:27:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120801120241.patch</filename>
            <type>text/plain</type>
            <size>8864</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggY2U2ZmJlNTk0NTRkMWMxZTdmZTFiMmM4
OWM0Y2ZjZmI0MmI2NzM1My4uOTE3ODUwOTc4ZjY0ZDFmMDNiYTVhNjE1MjAyMDQxNjZlMjE2YmUw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5n
cy5qcwpAQCAtNzIxLDMgKzcyMSw1IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVuY29kZWQgRGF0YSBM
ZW5ndGgiXSA9ICJFbmNvZGVkIERhdGEgTGVuZ3RoIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVkIEJ5
dGVzIl0gPSAiJWQgQnl0ZXMiOwogbG9jYWxpemVkU3RyaW5nc1siVGltZSBFbmQiXSA9ICJUaW1l
IEVuZCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJGaW5kIl0gPSAiRmluZCI7Citsb2NhbGl6ZWRTdHJp
bmdzWyJGYWlsZWQgdG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAiRmFp
bGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7Citsb2NhbGl6ZWRTdHJp
bmdzWyJTeW5jaHJvbm91cyByZXNvdXJjZSBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0
IHN0YXR1cyAlZCJdID0gIlN5bmNocm9ub3VzIHJlc291cmNlIGxvYWQgZmFpbGVkIHdpdGggWE1M
SHR0cFJlcXVlc3Qgc3RhdHVzICVkIjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kQVBJLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JG
cm9udGVuZEFQSS5qcwppbmRleCA3ZWY4NDc5ODBiNTdlMTE2N2I0NDE3OTc5OWM5ODVhM2M3MThm
MjVlLi45OGQxOTI5M2JmYTI3ODU2NTMwNGYwM2U3NjE3NDljZWY4MDg0ZWQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJ
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJv
bnRlbmRBUEkuanMKQEAgLTEyOSw2ICsxMjksMTUgQEAgSW5zcGVjdG9yRnJvbnRlbmRBUEkgPSB7
CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLl9wZW5kaW5nQ29tbWFuZHMucHVzaChzaWdu
YXR1cmUpOwogICAgIH0sCiAKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwK
KyAgICAgKi8KKyAgICBsb2FkVGltZWxpbmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAorICAgIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy50aW1lbGluZS5sb2FkRnJvbVVSTCh1cmwpOwor
ICAgIH0sCisKICAgICBsb2FkQ29tcGxldGVkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IEluc3BlY3RvckZyb250ZW5kQVBJLl9wZW5kaW5nQ29tbWFuZHMu
bGVuZ3RoOyArK2kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMKaW5kZXggYTZmOThiMjEy
MmFkYTY5YzVjMjkxYTU0NzRmN2IzMGZmNWRlNWMwMi4uMGYwNWRkYzE2NjE4NWVhMzRhZDkyODNj
OTcyZjMwNDdkYTQ1Mzg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwpAQCAtMTAy
LDcgKzEwMiwxMCBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90
b3R5cGUgPSB7CiAKICAgICBoaWRkZW5QYW5lbHM6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiAiIjsKKyAgICAgICAgdmFyIGhpZGRlblBhbmVscyA9ICIiOworICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJoaWRkZW5QYW5lbHMiXSkKKyAgICAgICAg
ICAgIGhpZGRlblBhbmVscyArPSAiLCIgKyBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3Rb
ImhpZGRlblBhbmVscyJdOworICAgICAgICByZXR1cm4gaGlkZGVuUGFuZWxzOwogICAgIH0sCiAK
ICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCkBAIC0xNzksNiArMTgyLDEz
IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9IHsK
IAogICAgIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6IGZ1bmN0aW9uKHVybCkKICAgICB7Cisg
ICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9wZW4o
IkdFVCIsIHVybCwgZmFsc2UpOworICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICAgICAgaWYg
KHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4
dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3lu
Y2hyb25vdXMgcmVzb3VyY2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBzdGF0dXMg
JWQiLCB4aHIuc3RhdHVzKSk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9LAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMKaW5k
ZXggZGUzMzQ1NTAxNTlmNjU1NjcyM2NjNDQ0MjFjMzQ1NzkwZmIxNmY3ZC4uNTA4MzQ5MzNkNTQ4
ZGUyMWI2Mjc1ZDVjYmEyMjM3MDUxZTIyMDViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwpAQCAtNzAsNyArNzAsMTAgQEAg
V2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX2N1cnJlbnRQYW5lbDsKICAgICB9LAotCisgICAgCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFuZWx9IHgKKyAgICAgKi8KICAgICBzZXRDdXJyZW50
UGFuZWw6IGZ1bmN0aW9uKHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhbmVs
ID09PSB4KQpAQCAtOTYsNiArOTksMTQgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJv
dG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBpbmRleAorICAgICAqLworICAgIGdldFBhbmVsOiBmdW5jdGlvbihpbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9wYW5lbE9yZGVyW2luZGV4XSB8fCB0aGlzLl9wYW5l
bE9yZGVyWzBdOworICAgIH0sCisKICAgICBfa2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLl9rZXlEb3duVGltZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKaW5kZXggYjNiNmE2NjE3
MjUwYmJlZDI1YjRhNmJiNzdlMmU2N2NiZDY4YTU1Yy4uNjdjZjUwMWU1MTczZDZhZGJkMGJjODVl
NTdmODNiNmM1MzEyMTFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9UaW1lbGluZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcwpAQCAtMTY2LDEzICsxNjYsMjEgQEAgV2ViSW5zcGVj
dG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2V0VGltZW91dCh0
aGlzLl9sb2FkTmV4dENodW5rLmJpbmQodGhpcywgZGF0YSwgaW5kZXgpLCAwKTsKICAgICB9LAog
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gcmVjb3JkcworICAgICAq
LworICAgIF9sb2FkUmVjb3JkczogZnVuY3Rpb24ocmVjb3JkcykKKyAgICB7CisgICAgICAgIHRo
aXMucmVzZXQoKTsKKyAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVuayhyZWNvcmRzLCAxKTsKKyAg
ICB9LAorCiAgICAgbG9hZEZyb21GaWxlOiBmdW5jdGlvbihmaWxlKQogICAgIHsKICAgICAgICAg
ZnVuY3Rpb24gb25Mb2FkKGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBkYXRhID0gSlNP
Ti5wYXJzZShlLnRhcmdldC5yZXN1bHQpOwotICAgICAgICAgICAgdGhpcy5yZXNldCgpOwotICAg
ICAgICAgICAgdGhpcy5fbG9hZE5leHRDaHVuayhkYXRhLCAxKTsKKyAgICAgICAgICAgIHRoaXMu
X2xvYWRSZWNvcmRzKGRhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gb25FcnJv
cihlKQpAQCAtMTk3LDYgKzIwNSwyNSBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgIH0sCiAKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisgICAgICovCisgICAgbG9hZEZyb21V
Ukw6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIC8vdmFyIGRhdGEgPSBJbnNwZWN0b3JG
cm9udGVuZEhvc3QubG9hZFJlc291cmNlU3luY2hyb25vdXNseSh1cmwpOworICAgICAgICBmdW5j
dGlvbiBvbkRhdGFSZWNlaXZlZChkYXRhKSAKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICB2YXIgcmVjb3JkcyA9IEpTT04ucGFyc2UoZGF0YSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5fbG9hZFJlY29yZHMocmVjb3Jkcyk7CisgICAgICAgICAgICB9IGNhdGNo
KGUpIHsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0
cmluZygiRmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyIsIGUubWVz
c2FnZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG9hZFhIUih1cmws
IGZhbHNlLCBvbkRhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCiAgICAgc2F2ZVRv
RmlsZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHJlY29yZHMgPSBbJ1snICsgSlNP
Ti5zdHJpbmdpZnkobmV3IFN0cmluZyh3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24pKV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFu
ZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwu
anMKaW5kZXggMzYwYWMxMTNiOWRiMzgxYmQxMWZlMjU4OTVjNDMyNDQ0Njc4ZjRhZC4uZTkwYTEw
OTkyNDkzNWNmYTRhODgyN2E5ZmVjYzM0MTg1NjI2NDQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwpAQCAtNzcwLDYgKzc3
MCwxNCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHJldHVybiByZWNvcmRzSW5XaW5kb3cubGVuZ3RoOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gdXJsCisgICAgICovCisgICAgbG9hZEZyb21VUkw6IGZ1bmN0aW9u
KHVybCkKKyAgICB7CisgICAgICAgIHRoaXMuX21vZGVsLmxvYWRGcm9tVVJMKHVybCk7CisgICAg
fSwKKwogICAgIF9yZWZyZXNoTWFpblRocmVhZEJhcnM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIGNvbnN0IGJhck9mZnNldCA9IDM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDFlNmEwMTI5NDY3NTliMDNkYzgzZDE0MGNhYjkw
YTRmYWI2MTkzM2YuLjdkYzYxM2I4NWY2YzFiMjc4NzllNmYzN2EyZDYyYWVhZTk5YTJkZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBA
IC00NCw3ICs0NCw3IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgICAgICAgICB0aGlzLnBh
bmVscy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB2YXIgaGlkZGVuUGFuZWxzID0gKEluc3Bl
Y3RvckZyb250ZW5kSG9zdC5oaWRkZW5QYW5lbHMoKSB8fCAiIikuc3BsaXQoJywnKTsKKyAgICAg
ICAgdmFyIGhpZGRlblBhbmVscyA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5oaWRkZW5QYW5lbHMo
KTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJlbGVtZW50cyIpID09PSAtMSkK
ICAgICAgICAgICAgIHRoaXMucGFuZWxzLmVsZW1lbnRzID0gbmV3IFdlYkluc3BlY3Rvci5FbGVt
ZW50c1BhbmVsKCk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhPZigicmVzb3VyY2Vz
IikgPT09IC0xKQpAQCAtNDEyLDYgKzQxMiwxNCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVu
Y3Rpb24oKQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKEluc3Bl
Y3RvckZyb250ZW5kSG9zdC5pc1N0dWIpIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLl9kb0xvYWRl
ZERvbmVXaXRoQ2FwYWJpbGl0aWVzKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5pbnNwZWN0b3JW
aWV3LnNldEN1cnJlbnRQYW5lbChXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5nZXRQYW5lbCgw
KSk7CisgICAgICAgIGlmICh0eXBlb2YgV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJj
YWxsQVBJIl0gIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICB2YXIgY2FsbEZ1bmN0aW9u
ID0gSW5zcGVjdG9yRnJvbnRlbmRBUElbV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJj
YWxsQVBJIl1dOworICAgICAgICAgICAgY2FsbEZ1bmN0aW9uKFdlYkluc3BlY3Rvci5xdWVyeVBh
cmFtc09iamVjdFsicGFyYW1zIl0pOworICAgICAgICB9CisgICAgfQogICAgIFdlYkluc3BlY3Rv
ci5kb0xvYWRlZERvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCA2MzE0ZTVhYzUxMDliZDVmM2JkYzkxNGZjMTFhOGY4
NWVjNTI2NmY5Li44MTcyNDY0ZDE0NWQ2MmJlM2U4NzNiYjMyZTg2ZWE3NjM0NmYwMTRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpAQCAt
NjkzLDMgKzY5MywzNiBAQCBNYXAucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9tYXAgPSB7
fTsKICAgICB9CiB9OworCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAqIEBwYXJhbSB7
Ym9vbGVhbn0gc3luYworICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpfSBjYWxsYmFjaworICog
QHJldHVybiB7c3RyaW5nfSB2YWx1ZQorICovCitmdW5jdGlvbiBsb2FkWEhSKHVybCwgc3luYywg
Y2FsbGJhY2spIHsKKyAgICBmdW5jdGlvbiBvbkRhdGFSZWNlaXZlZCgpIHsKKyAgICAgICAgaWYg
KHhoci5zdGF0dXMgPT09IDIwMCkgeworICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNl
VGV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNw
ZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3luY2hyb25vdXMgcmVzb3VyY2UgbG9h
ZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBzdGF0dXMgJWQiLCB4aHIuc3RhdHVzKSk7Cisg
ICAgICAgIGNhbGxiYWNrKCIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgdmFy
IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQiLCB1cmwsIGZh
bHNlKTsKKyAgICBpZiAoc3luYyA9PT0gZmFsc2UpCisgICAgICAgIHhoci5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBvbkRhdGFSZWNlaXZlZDsgICAgICAgIAorICAgIHhoci5zZW5kKG51bGwpOworICAg
IGlmIChzeW5jID09PSB0cnVlIHx8IHR5cGVvZiBzeW5jID09PSAidW5kZWZpbmVkIiApIHsKKyAg
ICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAgICAgICByZXR1cm4geGhyLnJl
c3BvbnNlVGV4dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0
cmluZygiU3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVz
dCBzdGF0dXMgJWQiLCB4aHIuc3RhdHVzKSk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155833</attachid>
            <date>2012-08-01 10:26:24 -0700</date>
            <delta_ts>2012-08-03 13:31:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120801132606.patch</filename>
            <type>text/plain</type>
            <size>8352</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNo
Lmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggY2U2ZmJlNTk0NTRkMWMxZTdmZTFiMmM4
OWM0Y2ZjZmI0MmI2NzM1My4uOTE3ODUwOTc4ZjY0ZDFmMDNiYTVhNjE1MjAyMDQxNjZlMjE2YmUw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5n
cy5qcwpAQCAtNzIxLDMgKzcyMSw1IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVuY29kZWQgRGF0YSBM
ZW5ndGgiXSA9ICJFbmNvZGVkIERhdGEgTGVuZ3RoIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVkIEJ5
dGVzIl0gPSAiJWQgQnl0ZXMiOwogbG9jYWxpemVkU3RyaW5nc1siVGltZSBFbmQiXSA9ICJUaW1l
IEVuZCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJGaW5kIl0gPSAiRmluZCI7Citsb2NhbGl6ZWRTdHJp
bmdzWyJGYWlsZWQgdG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAiRmFp
bGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7Citsb2NhbGl6ZWRTdHJp
bmdzWyJTeW5jaHJvbm91cyByZXNvdXJjZSBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0
IHN0YXR1cyAlZCJdID0gIlN5bmNocm9ub3VzIHJlc291cmNlIGxvYWQgZmFpbGVkIHdpdGggWE1M
SHR0cFJlcXVlc3Qgc3RhdHVzICVkIjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kQVBJLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JG
cm9udGVuZEFQSS5qcwppbmRleCA3ZWY4NDc5ODBiNTdlMTE2N2I0NDE3OTc5OWM5ODVhM2M3MThm
MjVlLi4wYjFjNjUxNjMyYjRiYTI0N2IxMTc0Y2I4ZmM5MzRmN2YwN2ExNWEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJ
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJv
bnRlbmRBUEkuanMKQEAgLTEyOSw2ICsxMjksMTYgQEAgSW5zcGVjdG9yRnJvbnRlbmRBUEkgPSB7
CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLl9wZW5kaW5nQ29tbWFuZHMucHVzaChzaWdu
YXR1cmUpOwogICAgIH0sCiAKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwK
KyAgICAgKi8KKyAgICBsb2FkVGltZWxpbmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAorICAgIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy50aW1lbGluZS5sb2FkRnJvbVVSTCh1cmwpOwor
ICAgICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5zZXRDdXJyZW50UGFuZWwoV2ViSW5z
cGVjdG9yLnBhbmVscy50aW1lbGluZSk7CisgICAgfSwKKwogICAgIGxvYWRDb21wbGV0ZWQ6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgSW5zcGVjdG9yRnJv
bnRlbmRBUEkuX3BlbmRpbmdDb21tYW5kcy5sZW5ndGg7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5qcwppbmRleCBhNmY5OGIyMTIyYWRhNjljNWMyOTFhNTQ3NGY3YjMwZmY1ZGU1YzAy
Li4zNTY4NGQzMDQyYmVhY2ExNjgwYWRmNDI5YmZiZWUxNmFhMjdmZTVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0
dWIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JG
cm9udGVuZEhvc3RTdHViLmpzCkBAIC0xMDIsNyArMTAyLDcgQEAgV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogCiAgICAgaGlkZGVuUGFuZWxzOiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBXZWJJ
bnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImhpZGRlblBhbmVscyJdIHx8ICIiOwogICAgIH0s
CiAKICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCkBAIC0xNzksNiArMTc5
LDEzIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9
IHsKIAogICAgIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6IGZ1bmN0aW9uKHVybCkKICAgICB7
CisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9w
ZW4oIkdFVCIsIHVybCwgZmFsc2UpOworICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICAgICAg
aWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNl
VGV4dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
U3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBzdGF0
dXMgJWQiLCB4aHIuc3RhdHVzKSk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9LAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMK
aW5kZXggZGUzMzQ1NTAxNTlmNjU1NjcyM2NjNDQ0MjFjMzQ1NzkwZmIxNmY3ZC4uMDAzYTNkYmJk
OTI1YzA1YWIzYzY1NWIxYWM5NWIzOTYxMWUyYWM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwpAQCAtNzAsNyArNzAsMTAg
QEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYW5lbDsKICAgICB9LAotCisgICAgCisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFuZWx9IHgKKyAgICAgKi8KICAgICBzZXRDdXJy
ZW50UGFuZWw6IGZ1bmN0aW9uKHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY3VycmVudFBh
bmVsID09PSB4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9U
aW1lbGluZU1vZGVsLmpzCmluZGV4IGIzYjZhNjYxNzI1MGJiZWQyNWI0YTZiYjc3ZTJlNjdjYmQ2
OGE1NWMuLjY3Y2Y1MDFlNTE3M2Q2YWRiZDBiYzg1ZTU3ZjgzYjZjNTMxMjExYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMK
QEAgLTE2NiwxMyArMTY2LDIxIEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5fbG9hZE5leHRDaHVuay5iaW5kKHRo
aXMsIGRhdGEsIGluZGV4KSwgMCk7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7
QXJyYXkuPE9iamVjdD59IHJlY29yZHMKKyAgICAgKi8KKyAgICBfbG9hZFJlY29yZHM6IGZ1bmN0
aW9uKHJlY29yZHMpCisgICAgeworICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIHRoaXMu
X2xvYWROZXh0Q2h1bmsocmVjb3JkcywgMSk7CisgICAgfSwKKwogICAgIGxvYWRGcm9tRmlsZTog
ZnVuY3Rpb24oZmlsZSkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIG9uTG9hZChlKQogICAgICAg
ICB7CiAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzdWx0KTsK
LSAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKLSAgICAgICAgICAgIHRoaXMuX2xvYWROZXh0Q2h1
bmsoZGF0YSwgMSk7CisgICAgICAgICAgICB0aGlzLl9sb2FkUmVjb3JkcyhkYXRhKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkKQEAgLTE5Nyw2ICsyMDUsMjUgQEAg
V2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICByZWFkZXIu
cmVhZEFzVGV4dChmaWxlKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJp
bmd9IHVybAorICAgICAqLworICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1cmwpCisgICAgewor
ICAgICAgICAvL3ZhciBkYXRhID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkodXJsKTsKKyAgICAgICAgZnVuY3Rpb24gb25EYXRhUmVjZWl2ZWQoZGF0YSkg
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmFyIHJlY29y
ZHMgPSBKU09OLnBhcnNlKGRhdGEpOworICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRSZWNvcmRz
KHJlY29yZHMpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZhaWxlZCB0byBsb2FkIHRpbWVs
aW5lIGRhdGEgd2l0aCBlcnJvcjogJXMiLCBlLm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGxvYWRYSFIodXJsLCBmYWxzZSwgb25EYXRhUmVjZWl2ZWQuYmlu
ZCh0aGlzKSk7CisgICAgfSwKKwogICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHZhciByZWNvcmRzID0gWydbJyArIEpTT04uc3RyaW5naWZ5KG5ldyBTdHJpbmcod2lu
ZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uKSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCmluZGV4IDM2MGFjMTEzYjlkYjM4MWJk
MTFmZTI1ODk1YzQzMjQ0NDY3OGY0YWQuLmU5MGExMDk5MjQ5MzVjZmE0YTg4MjdhOWZlY2MzNDE4
NTYyNjQ0NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGltZWxpbmVQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RpbWVsaW5lUGFuZWwuanMKQEAgLTc3MCw2ICs3NzAsMTQgQEAgV2ViSW5zcGVjdG9yLlRpbWVs
aW5lUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gcmVjb3Jkc0luV2luZG93Lmxl
bmd0aDsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAorICAg
ICAqLworICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICB0aGlz
Ll9tb2RlbC5sb2FkRnJvbVVSTCh1cmwpOworICAgIH0sCisKICAgICBfcmVmcmVzaE1haW5UaHJl
YWRCYXJzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBjb25zdCBiYXJPZmZzZXQgPSAzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRl
eCAxZTZhMDEyOTQ2NzU5YjAzZGM4M2QxNDBjYWI5MGE0ZmFiNjE5MzNmLi5iYzk3ZTAwZjg3ZTI5
NTkwZTk2MzQwNTVjYmVjMzQ3OWFlM2VkODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNDQsNyArNDQsNyBAQCB2YXIgV2ViSW5z
cGVjdG9yID0gewogICAgICAgICAgICAgdGhpcy5wYW5lbHMuY29uc29sZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29uc29sZVBhbmVsKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgdmFyIGhpZGRlblBhbmVscyA9IChJbnNwZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFu
ZWxzKCkgfHwgIiIpLnNwbGl0KCcsJyk7CisgICAgICAgIHZhciBoaWRkZW5QYW5lbHMgPSBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFuZWxzKCk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5l
bHMuaW5kZXhPZigiZWxlbWVudHMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlzLnBhbmVscy5l
bGVtZW50cyA9IG5ldyBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbCgpOwogICAgICAgICBpZiAo
aGlkZGVuUGFuZWxzLmluZGV4T2YoInJlc291cmNlcyIpID09PSAtMSkKQEAgLTQxMiw2ICs0MTIs
MTEgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGlmIChJbnNwZWN0b3JGcm9udGVuZEhvc3QuaXNTdHViKSB7
CisgICAgICAgIFdlYkluc3BlY3Rvci5fZG9Mb2FkZWREb25lV2l0aENhcGFiaWxpdGllcygpOwor
ICAgICAgICBpZiAodHlwZW9mIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiY2FsbEFQ
SSJdICE9PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLmRp
c3BhdGNoKFtXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImNhbGxBUEkiXSxXZWJJbnNw
ZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbInBhcmFtcyJdXSkKKyAgICB9CiAgICAgV2ViSW5zcGVj
dG9yLmRvTG9hZGVkRG9uZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IDYzMTRlNWFjNTEwOWJkNWYzYmRjOTE0ZmMxMWE4
Zjg1ZWM1MjY2ZjkuLmJjN2EyZjcxZWVjNDc5MzhjNDQ0NGFlMjQwMjFjNzQ0YTVhODc5ZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBA
IC02OTMsMyArNjkzLDM5IEBAIE1hcC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21hcCA9
IHt9OwogICAgIH0KIH07CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHVybAorICogQHBhcmFt
IHtib29sZWFufSBzeW5jCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyl9IGNhbGxiYWNrCisg
KiBAcmV0dXJuIHtzdHJpbmd9IHZhbHVlCisgKi8KK2Z1bmN0aW9uIGxvYWRYSFIodXJsLCBzeW5j
LCBjYWxsYmFjaykgeworICAgIGlmICh0eXBlb2Ygc3luYyA9PT0gInVuZGVmaW5lZCIpCisgICAg
ICAgIHN5bmMgPSB0cnVlOworCisgICAgZnVuY3Rpb24gb25EYXRhUmVjZWl2ZWQoKSAKKyAgICB7
CisgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
KHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc291cmNlIGxv
YWQgZmFpbGVkIHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIiwgeGhyLnN0YXR1cykpOwor
ICAgICAgICBjYWxsYmFjayhudWxsKTsgCisgICB9CisKKworICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbigiR0VUIiwgdXJsLCBmYWxzZSk7CisgICAgaWYg
KHN5bmMgPT09IGZhbHNlKQorICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gb25EYXRh
UmVjZWl2ZWQ7ICAgICAgICAKKyAgICB4aHIuc2VuZChudWxsKTsKKyAgICBpZiAoc3luYyA9PT0g
dHJ1ZSkgeworICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSAKKyAgICAgICAgICAgIHJl
dHVybiB4aHIucmVzcG9uc2VUZXh0OworCisgICAgICAgIFdlYkluc3BlY3Rvci5sb2coV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJSZXNvdXJjZSBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0
IHN0YXR1cyAlZCIsIHhoci5zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156447</attachid>
            <date>2012-08-03 13:31:40 -0700</date>
            <delta_ts>2012-08-16 07:59:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120803163119.patch</filename>
            <type>text/plain</type>
            <size>9727</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRlNGU2NTFkYjA0NGZk
OWJjYjViNjMwNTZkODgzMjlhYjQ0YTU3MS4uM2EzYzQ3Yjc1N2RiZGY3ODEzNzMyNjI3ZmU1ZmNm
NmQzYmYwZjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA4LTAzICBHYWJy
aWVsIFBlYWwgIDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIENoYW5nZXMgYWZ0ZXIgZmVs
ZG1hbiByZXZpZXcgZm9yIHBhdGNoIDkxNTI4CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW1i
ZWRkYWJsZSBXZWIgSW5zcGVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MTUyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEVuYWJsZXMgaW5zcGVjdG9yLmh0bWwgaW4gdGhlIGRldmVsb3BlciB0b29s
cyB0byBiZSBydW4gaW5zaWRlIGEgd2VicGFnZSBhbmQgZ2l2ZW4gY29tbWFuZHMgd2l0aCBhIHNp
bXBsZSBxdWVyeSBwYXJhbWV0ZXIgYmFzZWQgQVBJLgorCisgICAgICAgIFRlc3RzIGNhbiBhZGRl
ZCBpZiBuZWVkZWQgd2hlbiB0aGUgc3BlYyBpcyBmaW5hbGl6ZWQuIE1heSBiZSBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3Rv
ckZyb250ZW5kQVBJLmpzOgorICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2hR
dWVyeVBhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVN
b2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5s
b2FkRnJvbVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL3V0aWxpdGllcy5qczoKKwogMjAxMi0wNy0xNiAgWm9sdGFuIEhvcnZhdGggIDx6b2x0
YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZW1vdmUgdW5uZWNlc3Nhcnkg
ZXhlY3V0YWJsZSBiaXRzIGFmdGVyIHIxMjI3MjAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9Fbmds
aXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggY2U2ZmJlNTk0NTRkMWMxZTdmZTFi
MmM4OWM0Y2ZjZmI0MmI2NzM1My4uOTE3ODUwOTc4ZjY0ZDFmMDNiYTVhNjE1MjAyMDQxNjZlMjE2
YmUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRT
dHJpbmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcwpAQCAtNzIxLDMgKzcyMSw1IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVuY29kZWQgRGF0
YSBMZW5ndGgiXSA9ICJFbmNvZGVkIERhdGEgTGVuZ3RoIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVk
IEJ5dGVzIl0gPSAiJWQgQnl0ZXMiOwogbG9jYWxpemVkU3RyaW5nc1siVGltZSBFbmQiXSA9ICJU
aW1lIEVuZCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJGaW5kIl0gPSAiRmluZCI7Citsb2NhbGl6ZWRT
dHJpbmdzWyJGYWlsZWQgdG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAi
RmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7Citsb2NhbGl6ZWRT
dHJpbmdzWyJTeW5jaHJvbm91cyByZXNvdXJjZSBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1
ZXN0IHN0YXR1cyAlZCJdID0gIlN5bmNocm9ub3VzIHJlc291cmNlIGxvYWQgZmFpbGVkIHdpdGgg
WE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZy
b250ZW5kQVBJLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0
b3JGcm9udGVuZEFQSS5qcwppbmRleCA3ZWY4NDc5ODBiNTdlMTE2N2I0NDE3OTc5OWM5ODVhM2M3
MThmMjVlLi42YmJlZjcyZmNjNzdkYTkxMTIzMjdkZGFjNzExNzljZmQyNjAwZDhmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
QVBJLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9y
RnJvbnRlbmRBUEkuanMKQEAgLTEyOSw2ICsxMjksMjEgQEAgSW5zcGVjdG9yRnJvbnRlbmRBUEkg
PSB7CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLl9wZW5kaW5nQ29tbWFuZHMucHVzaChz
aWduYXR1cmUpOwogICAgIH0sCiAKKyAgICBkaXNwYXRjaFF1ZXJ5UGFyYW1ldGVyczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNP
YmplY3RbImNhbGxBUEkiXSAhPT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZEFQSS5kaXNwYXRjaChbV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJjYWxs
QVBJIl0sV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJwYXJhbXMiXV0pCisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKi8KKyAgICBsb2Fk
VGltZWxpbmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAorICAgIHsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLnBhbmVscy50aW1lbGluZS5sb2FkRnJvbVVSTCh1cmwpOworICAgICAgICBXZWJJbnNwZWN0
b3IuaW5zcGVjdG9yVmlldy5zZXRDdXJyZW50UGFuZWwoV2ViSW5zcGVjdG9yLnBhbmVscy50aW1l
bGluZSk7CisgICAgfSwKKwogICAgIGxvYWRDb21wbGV0ZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgSW5zcGVjdG9yRnJvbnRlbmRBUEkuX3BlbmRpbmdD
b21tYW5kcy5sZW5ndGg7ICsraSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcwppbmRleCBh
NmY5OGIyMTIyYWRhNjljNWMyOTFhNTQ3NGY3YjMwZmY1ZGU1YzAyLi4zNTY4NGQzMDQyYmVhY2Ex
NjgwYWRmNDI5YmZiZWUxNmFhMjdmZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpz
CkBAIC0xMDIsNyArMTAyLDcgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0
dWIucHJvdG90eXBlID0gewogCiAgICAgaGlkZGVuUGFuZWxzOiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IucXVlcnlQYXJh
bXNPYmplY3RbImhpZGRlblBhbmVscyJdIHx8ICIiOwogICAgIH0sCiAKICAgICBpbnNwZWN0ZWRV
UkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCkBAIC0xNzksNiArMTc5LDEzIEBAIFdlYkluc3BlY3Rv
ci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKIAogICAgIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHk6IGZ1bmN0aW9uKHVybCkKICAgICB7CisgICAgICAgIHZhciB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhyLm9wZW4oIkdFVCIsIHVybCwgZmFs
c2UpOworICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09
IDIwMCkgCisgICAgICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDsKKworICAgICAgICBX
ZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiU3luY2hyb25vdXMgcmVzb3Vy
Y2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBzdGF0dXMgJWQiLCB4aHIuc3RhdHVz
KSk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMKaW5kZXggZGUzMzQ1NTAxNTlm
NjU1NjcyM2NjNDQ0MjFjMzQ1NzkwZmIxNmY3ZC4uMDAzYTNkYmJkOTI1YzA1YWIzYzY1NWIxYWM5
NWIzOTYxMWUyYWM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbnNwZWN0b3JWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvSW5zcGVjdG9yVmlldy5qcwpAQCAtNzAsNyArNzAsMTAgQEAgV2ViSW5zcGVjdG9yLklu
c3BlY3RvclZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2N1
cnJlbnRQYW5lbDsKICAgICB9LAotCisgICAgCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJ
bnNwZWN0b3IuUGFuZWx9IHgKKyAgICAgKi8KICAgICBzZXRDdXJyZW50UGFuZWw6IGZ1bmN0aW9u
KHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhbmVsID09PSB4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzCmlu
ZGV4IGIzYjZhNjYxNzI1MGJiZWQyNWI0YTZiYjc3ZTJlNjdjYmQ2OGE1NWMuLmViZWJlMTQ1MTQx
ZDQ1NDRkN2Q0MzcwODc3MTNhMTE4MDIwYmNlYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKQEAgLTE2NiwxMyArMTY2LDIx
IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IHNldFRpbWVvdXQodGhpcy5fbG9hZE5leHRDaHVuay5iaW5kKHRoaXMsIGRhdGEsIGluZGV4KSwg
MCk7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHJl
Y29yZHMKKyAgICAgKi8KKyAgICBfbG9hZFJlY29yZHM6IGZ1bmN0aW9uKHJlY29yZHMpCisgICAg
eworICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX2xvYWROZXh0Q2h1bmsocmVj
b3JkcywgMSk7CisgICAgfSwKKwogICAgIGxvYWRGcm9tRmlsZTogZnVuY3Rpb24oZmlsZSkKICAg
ICB7CiAgICAgICAgIGZ1bmN0aW9uIG9uTG9hZChlKQogICAgICAgICB7CiAgICAgICAgICAgICB2
YXIgZGF0YSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzdWx0KTsKLSAgICAgICAgICAgIHRoaXMu
cmVzZXQoKTsKLSAgICAgICAgICAgIHRoaXMuX2xvYWROZXh0Q2h1bmsoZGF0YSwgMSk7CisgICAg
ICAgICAgICB0aGlzLl9sb2FkUmVjb3JkcyhkYXRhKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1
bmN0aW9uIG9uRXJyb3IoZSkKQEAgLTE5Nyw2ICsyMDUsMjUgQEAgV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsK
ICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAorICAgICAqLwor
ICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICAvL3ZhciBkYXRh
ID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkodXJsKTsK
KyAgICAgICAgZnVuY3Rpb24gb25EYXRhUmVjZWl2ZWQoZGF0YSkgCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdmFyIHJlY29yZHMgPSBKU09OLnBhcnNlKGRh
dGEpOworICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRSZWNvcmRzKHJlY29yZHMpOworICAgICAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkZhaWxlZCB0byBsb2FkIHRpbWVsaW5lIGRhdGEgd2l0aCBlcnJv
cjogJXMiLCBlLm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGxvYWRYSFIodXJsLCB0cnVlLCBvbkRhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAor
CiAgICAgc2F2ZVRvRmlsZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHJlY29yZHMg
PSBbJ1snICsgSlNPTi5zdHJpbmdpZnkobmV3IFN0cmluZyh3aW5kb3cubmF2aWdhdG9yLmFwcFZl
cnNpb24pKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RpbWVsaW5lUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rp
bWVsaW5lUGFuZWwuanMKaW5kZXggMzYwYWMxMTNiOWRiMzgxYmQxMWZlMjU4OTVjNDMyNDQ0Njc4
ZjRhZC4uZTkwYTEwOTkyNDkzNWNmYTRhODgyN2E5ZmVjYzM0MTg1NjI2NDQ0MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwpA
QCAtNzcwLDYgKzc3MCwxNCBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiByZWNvcmRzSW5XaW5kb3cubGVuZ3RoOwogICAgIH0sCiAKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisgICAgICovCisgICAgbG9hZEZyb21V
Ukw6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHRoaXMuX21vZGVsLmxvYWRGcm9tVVJM
KHVybCk7CisgICAgfSwKKwogICAgIF9yZWZyZXNoTWFpblRocmVhZEJhcnM6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIGNvbnN0IGJhck9mZnNldCA9IDM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDFlNmEwMTI5NDY3NTliMDNk
YzgzZDE0MGNhYjkwYTRmYWI2MTkzM2YuLjkzN2NmM2Y4M2I2NzEzNDRiNmM5NGM4NTYzZDhkMmUw
M2NiZjk0MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzCkBAIC00NCw3ICs0NCw3IEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAgICAgICAg
ICAgICB0aGlzLnBhbmVscy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwo
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB2YXIgaGlkZGVuUGFu
ZWxzID0gKEluc3BlY3RvckZyb250ZW5kSG9zdC5oaWRkZW5QYW5lbHMoKSB8fCAiIikuc3BsaXQo
JywnKTsKKyAgICAgICAgdmFyIGhpZGRlblBhbmVscyA9IEluc3BlY3RvckZyb250ZW5kSG9zdC5o
aWRkZW5QYW5lbHMoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJlbGVtZW50
cyIpID09PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLmVsZW1lbnRzID0gbmV3IFdlYklu
c3BlY3Rvci5FbGVtZW50c1BhbmVsKCk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhP
ZigicmVzb3VyY2VzIikgPT09IC0xKQpAQCAtNDEyLDYgKzQxMiwxMCBAQCBXZWJJbnNwZWN0b3Iu
bG9hZGVkID0gZnVuY3Rpb24oKQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Cisg
ICAgaWYgKEluc3BlY3RvckZyb250ZW5kSG9zdC5pc1N0dWIpIHsKKyAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRBUEkuZGlzcGF0Y2hRdWVyeVBhcmFtZXRlcnMoKTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLl9kb0xvYWRlZERvbmVXaXRoQ2FwYWJpbGl0aWVzKCk7CisgICAgfQogICAgIFdlYkluc3Bl
Y3Rvci5kb0xvYWRlZERvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCA2MzE0ZTVhYzUxMDliZDVmM2JkYzkxNGZjMTFh
OGY4NWVjNTI2NmY5Li45Zjg2M2U4MzIzNWNkNTY0Mjc1OTRiYTc2ZDcwMzFlNGRiNzU0ZjA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpA
QCAtNjkzLDMgKzY5Myw0MiBAQCBNYXAucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9tYXAg
PSB7fTsKICAgICB9CiB9OworCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAqIEBwYXJh
bSB7Ym9vbGVhbn0gYXN5bmMKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKX0gY2FsbGJhY2sK
KyAqIEByZXR1cm4ge3N0cmluZ30gdmFsdWUKKyAqLworZnVuY3Rpb24gbG9hZFhIUih1cmwsIGFz
eW5jLCBjYWxsYmFjaykgCit7CisgICAgaWYgKHR5cGVvZiBhc3luYyA9PT0gInVuZGVmaW5lZCIp
CisgICAgICAgIGFzeW5jID0gZmFsc2U7CisKKyAgICBmdW5jdGlvbiBvbkRhdGFSZWNlaXZlZCgp
IAorICAgIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CisgICAgICAgICAg
ICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhy
LnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVz
b3VyY2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBzdGF0dXMgJWQiLCB4aHIuc3Rh
dHVzKSk7CisgICAgICAgICAgICBjYWxsYmFjayhudWxsKTsgCisgICAgICAgIH0KKyAgIH0KKwor
CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQi
LCB1cmwsIGFzeW5jKTsKKyAgICBpZiAoYXN5bmMpCisgICAgICAgIHhoci5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBvbkRhdGFSZWNlaXZlZDsgICAgICAgIAorICAgIHhoci5zZW5kKG51bGwpOworICAg
IGlmICghYXN5bmMpIHsKKyAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAg
ICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9n
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVzb3VyY2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRw
UmVxdWVzdCBzdGF0dXMgJWQiLCB4aHIuc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158822</attachid>
            <date>2012-08-16 07:59:51 -0700</date>
            <delta_ts>2012-08-16 12:10:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120816105916.patch</filename>
            <type>text/plain</type>
            <size>9557</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRlNGU2NTFkYjA0NGZk
OWJjYjViNjMwNTZkODgzMjlhYjQ0YTU3MS4uM2EzYzQ3Yjc1N2RiZGY3ODEzNzMyNjI3ZmU1ZmNm
NmQzYmYwZjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA4LTAzICBHYWJy
aWVsIFBlYWwgIDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIENoYW5nZXMgYWZ0ZXIgZmVs
ZG1hbiByZXZpZXcgZm9yIHBhdGNoIDkxNTI4CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW1i
ZWRkYWJsZSBXZWIgSW5zcGVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MTUyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEVuYWJsZXMgaW5zcGVjdG9yLmh0bWwgaW4gdGhlIGRldmVsb3BlciB0b29s
cyB0byBiZSBydW4gaW5zaWRlIGEgd2VicGFnZSBhbmQgZ2l2ZW4gY29tbWFuZHMgd2l0aCBhIHNp
bXBsZSBxdWVyeSBwYXJhbWV0ZXIgYmFzZWQgQVBJLgorCisgICAgICAgIFRlc3RzIGNhbiBhZGRl
ZCBpZiBuZWVkZWQgd2hlbiB0aGUgc3BlYyBpcyBmaW5hbGl6ZWQuIE1heSBiZSBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3Rv
ckZyb250ZW5kQVBJLmpzOgorICAgICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2hR
dWVyeVBhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVN
b2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5s
b2FkRnJvbVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL3V0aWxpdGllcy5qczoKKwogMjAxMi0wNy0xNiAgWm9sdGFuIEhvcnZhdGggIDx6b2x0
YW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBSZW1vdmUgdW5uZWNlc3Nhcnkg
ZXhlY3V0YWJsZSBiaXRzIGFmdGVyIHIxMjI3MjAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9Fbmds
aXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggY2U2ZmJlNTk0NTRkMWMxZTdmZTFi
MmM4OWM0Y2ZjZmI0MmI2NzM1My4uMmM2NDg2MzBhYzhlMGEyN2U0M2JiNzU2MWIyYjU2MGZmNjgy
MmZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRT
dHJpbmdzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3Ry
aW5ncy5qcwpAQCAtNzIxLDMgKzcyMSw1IEBAIGxvY2FsaXplZFN0cmluZ3NbIkVuY29kZWQgRGF0
YSBMZW5ndGgiXSA9ICJFbmNvZGVkIERhdGEgTGVuZ3RoIjsKIGxvY2FsaXplZFN0cmluZ3NbIiVk
IEJ5dGVzIl0gPSAiJWQgQnl0ZXMiOwogbG9jYWxpemVkU3RyaW5nc1siVGltZSBFbmQiXSA9ICJU
aW1lIEVuZCI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJGaW5kIl0gPSAiRmluZCI7Citsb2NhbGl6ZWRT
dHJpbmdzWyJGYWlsZWQgdG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAi
RmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7Citsb2NhbGl6ZWRT
dHJpbmdzWyIlcyBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IHN0YXR1cyAlZCJdID0g
IiVzIGxvYWQgZmFpbGVkIHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIjsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qcwppbmRleCA3ZWY4NDc5ODBiNTdl
MTE2N2I0NDE3OTc5OWM5ODVhM2M3MThmMjVlLi42YmJlZjcyZmNjNzdkYTkxMTIzMjdkZGFjNzEx
NzljZmQyNjAwZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMKQEAgLTEyOSw2ICsxMjksMjEgQEAg
SW5zcGVjdG9yRnJvbnRlbmRBUEkgPSB7CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLl9w
ZW5kaW5nQ29tbWFuZHMucHVzaChzaWduYXR1cmUpOwogICAgIH0sCiAKKyAgICBkaXNwYXRjaFF1
ZXJ5UGFyYW1ldGVyczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBXZWJJ
bnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImNhbGxBUEkiXSAhPT0gInVuZGVmaW5lZCIpCisg
ICAgICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaChbV2ViSW5zcGVjdG9yLnF1
ZXJ5UGFyYW1zT2JqZWN0WyJjYWxsQVBJIl0sV2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0
WyJwYXJhbXMiXV0pCisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwKKyAgICAgKi8KKyAgICBsb2FkVGltZWxpbmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAorICAg
IHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy50aW1lbGluZS5sb2FkRnJvbVVSTCh1cmwp
OworICAgICAgICBXZWJJbnNwZWN0b3IuaW5zcGVjdG9yVmlldy5zZXRDdXJyZW50UGFuZWwoV2Vi
SW5zcGVjdG9yLnBhbmVscy50aW1lbGluZSk7CisgICAgfSwKKwogICAgIGxvYWRDb21wbGV0ZWQ6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgSW5zcGVjdG9y
RnJvbnRlbmRBUEkuX3BlbmRpbmdDb21tYW5kcy5sZW5ndGg7ICsraSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1
Yi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0U3R1Yi5qcwppbmRleCBhNmY5OGIyMTIyYWRhNjljNWMyOTFhNTQ3NGY3YjMwZmY1ZGU1
YzAyLi4zNTY4NGQzMDQyYmVhY2ExNjgwYWRmNDI5YmZiZWUxNmFhMjdmZTVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9z
dFN0dWIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0
b3JGcm9udGVuZEhvc3RTdHViLmpzCkBAIC0xMDIsNyArMTAyLDcgQEAgV2ViSW5zcGVjdG9yLklu
c3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlID0gewogCiAgICAgaGlkZGVuUGFuZWxz
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImhpZGRlblBhbmVscyJdIHx8ICIiOwogICAg
IH0sCiAKICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOiBmdW5jdGlvbih1cmwpCkBAIC0xNzksNiAr
MTc5LDEzIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlw
ZSA9IHsKIAogICAgIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6IGZ1bmN0aW9uKHVybCkKICAg
ICB7CisgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhy
Lm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOworICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICAg
ICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAgICAgICByZXR1cm4geGhyLnJlc3Bv
bnNlVGV4dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiU3luY2hyb25vdXMgcmVzb3VyY2UgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBz
dGF0dXMgJWQiLCB4aHIuc3RhdHVzKSk7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9LAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZp
ZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcu
anMKaW5kZXggZGUzMzQ1NTAxNTlmNjU1NjcyM2NjNDQ0MjFjMzQ1NzkwZmIxNmY3ZC4uMDAzYTNk
YmJkOTI1YzA1YWIzYzY1NWIxYWM5NWIzOTYxMWUyYWM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3LmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwpAQCAtNzAsNyArNzAs
MTAgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYW5lbDsKICAgICB9LAotCisgICAgCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFuZWx9IHgKKyAgICAgKi8KICAgICBzZXRD
dXJyZW50UGFuZWw6IGZ1bmN0aW9uKHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY3VycmVu
dFBhbmVsID09PSB4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9UaW1lbGluZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZU1vZGVsLmpzCmluZGV4IGIzYjZhNjYxNzI1MGJiZWQyNWI0YTZiYjc3ZTJlNjdj
YmQ2OGE1NWMuLjIzZGY5MDM5ZjBkOTBhNjBmNTNmZDk5NTExMTU0MTI1N2E3MDViYjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwu
anMKQEAgLTE2NiwxMyArMTY2LDIxIEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5fbG9hZE5leHRDaHVuay5iaW5k
KHRoaXMsIGRhdGEsIGluZGV4KSwgMCk7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJh
bSB7QXJyYXkuPE9iamVjdD59IHJlY29yZHMKKyAgICAgKi8KKyAgICBfbG9hZFJlY29yZHM6IGZ1
bmN0aW9uKHJlY29yZHMpCisgICAgeworICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIHRo
aXMuX2xvYWROZXh0Q2h1bmsocmVjb3JkcywgMSk7CisgICAgfSwKKwogICAgIGxvYWRGcm9tRmls
ZTogZnVuY3Rpb24oZmlsZSkKICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIG9uTG9hZChlKQogICAg
ICAgICB7CiAgICAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoZS50YXJnZXQucmVzdWx0
KTsKLSAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKLSAgICAgICAgICAgIHRoaXMuX2xvYWROZXh0
Q2h1bmsoZGF0YSwgMSk7CisgICAgICAgICAgICB0aGlzLl9sb2FkUmVjb3JkcyhkYXRhKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZSkKQEAgLTE5Nyw2ICsyMDUsMjQg
QEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICByZWFk
ZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtz
dHJpbmd9IHVybAorICAgICAqLworICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1cmwpCisgICAg
eworICAgICAgICBmdW5jdGlvbiBvbkRhdGFSZWNlaXZlZChkYXRhKSAKKyAgICAgICAgeworICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVjb3JkcyA9IEpTT04ucGFyc2Uo
ZGF0YSk7CisgICAgICAgICAgICAgICAgdGhpcy5fbG9hZFJlY29yZHMocmVjb3Jkcyk7CisgICAg
ICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVy
cm9yOiAlcyIsIGUubWVzc2FnZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgbG9hZFhIUih1cmwsIHRydWUsIG9uRGF0YVJlY2VpdmVkLmJpbmQodGhpcykpOworICAgIH0s
CisKICAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgcmVjb3Jk
cyA9IFsnWycgKyBKU09OLnN0cmluZ2lmeShuZXcgU3RyaW5nKHdpbmRvdy5uYXZpZ2F0b3IuYXBw
VmVyc2lvbikpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGltZWxpbmVQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VGltZWxpbmVQYW5lbC5qcwppbmRleCAzNjBhYzExM2I5ZGIzODFiZDExZmUyNTg5NWM0MzI0NDQ2
NzhmNGFkLi5lOTBhMTA5OTI0OTM1Y2ZhNGE4ODI3YTlmZWNjMzQxODU2MjY0NDQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lUGFuZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpz
CkBAIC03NzAsNiArNzcwLDE0IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIHJlY29yZHNJbldpbmRvdy5sZW5ndGg7CiAgICAgfSwKIAor
ICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKi8KKyAgICBsb2FkRnJv
bVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgdGhpcy5fbW9kZWwubG9hZEZyb21V
UkwodXJsKTsKKyAgICB9LAorCiAgICAgX3JlZnJlc2hNYWluVGhyZWFkQmFyczogZnVuY3Rpb24o
KQogICAgIHsKICAgICAgICAgY29uc3QgYmFyT2Zmc2V0ID0gMzsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggMWU2YTAxMjk0Njc1OWIw
M2RjODNkMTQwY2FiOTBhNGZhYjYxOTMzZi4uOTM3Y2YzZjgzYjY3MTM0NGI2Yzk0Yzg1NjNkOGQy
ZTAzY2JmOTQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKQEAgLTQ0LDcgKzQ0LDcgQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKICAgICAg
ICAgICAgIHRoaXMucGFuZWxzLmNvbnNvbGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5l
bCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHZhciBoaWRkZW5Q
YW5lbHMgPSAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmhpZGRlblBhbmVscygpIHx8ICIiKS5zcGxp
dCgnLCcpOworICAgICAgICB2YXIgaGlkZGVuUGFuZWxzID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmhpZGRlblBhbmVscygpOwogICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoImVsZW1l
bnRzIikgPT09IC0xKQogICAgICAgICAgICAgdGhpcy5wYW5lbHMuZWxlbWVudHMgPSBuZXcgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRl
eE9mKCJyZXNvdXJjZXMiKSA9PT0gLTEpCkBAIC00MTIsNiArNDEyLDEwIEBAIFdlYkluc3BlY3Rv
ci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlzU3R1YikgeworICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZEFQSS5kaXNwYXRjaFF1ZXJ5UGFyYW1ldGVycygpOworICAgICAgICBXZWJJbnNw
ZWN0b3IuX2RvTG9hZGVkRG9uZVdpdGhDYXBhYmlsaXRpZXMoKTsKKyAgICB9CiAgICAgV2ViSW5z
cGVjdG9yLmRvTG9hZGVkRG9uZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IDYzMTRlNWFjNTEwOWJkNWYzYmRjOTE0ZmMx
MWE4Zjg1ZWM1MjY2ZjkuLjQyMjRlMjI5ZWFmNDBiMTA1ZjVlOGRiNTM1ODI3NDAzMjg2N2IzZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVz
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpz
CkBAIC02OTMsMyArNjkzLDQwIEBAIE1hcC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX21h
cCA9IHt9OwogICAgIH0KIH07CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHVybAorICogQHBh
cmFtIHtib29sZWFuPX0gYXN5bmMKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKT19IGNhbGxi
YWNrCisgKiBAcmV0dXJuIHtzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGxvYWRYSFIodXJsLCBhc3lu
YywgY2FsbGJhY2spIAoreworICAgIGZ1bmN0aW9uIG9uUmVhZHlTdGF0ZUNoYW5nZWQoKSAKKyAg
ICB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPSBYTUxIdHRwUmVxdWVzdC5ET05FKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiVzIGxvYWQgZmFpbGVkIHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIiwg
dXJsLCB4aHIuc3RhdHVzKSk7CisgICAgICAgIGNhbGxiYWNrKG51bGwpOyAKKyAgIH0KKworCisg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQiLCB1
cmwsIGFzeW5jKTsKKyAgICBpZiAoYXN5bmMpCisgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFu
Z2UgPSBvblJlYWR5U3RhdGVDaGFuZ2VkOyAgICAgICAgCisgICAgeGhyLnNlbmQobnVsbCk7Cisg
ICAgaWYgKCFhc3luYykgeworICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSAKKyAgICAg
ICAgICAgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0OworCisgICAgICAgIFdlYkluc3BlY3Rvci5s
b2coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlcyBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1
ZXN0IHN0YXR1cyAlZCIsIHVybCwgeGhyLnN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158871</attachid>
            <date>2012-08-16 12:10:28 -0700</date>
            <delta_ts>2012-08-17 09:03:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120816150952.patch</filename>
            <type>text/plain</type>
            <size>10745</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2IyZDQxZDBjYjg1M2E1
ZGY2MGQxMzc1NTMyMDU0OWRkMzM2YjMwOS4uODYzYmUyZjcxM2I0N2ZiMmQ5NWM1YTk3NzI0ODI1
NWUxYjlmYjU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA4LTE2ICBHYWJy
aWVsIFBlYWwgIDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVt
YmVkZGFibGUgV2ViIEluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTE1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGluc3BlY3RvciBzdWNoIHRo
YXQgaXQgaXMgYmV0dGVyIHN1aXRlZCB0byBydW4gZW1iZWRkZWQgaW4gYW5vdGhlciB3ZWJwYWdl
LiBJdCBhZGRzIHRoZSBhYmlsaXR5IHRvIHByZXBvcHVsYXRlIHRoZSB0aW1lbGluZSBwYW5lbCB3
aXRoIGFuIGV4aXN0aW5nIHJlY29yZGluZyBhbW9uZyBvdGhlciBjb250cm9scy4KKworICAgICAg
ICBUQkQKKworICAgICAgICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgorICAg
ICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2hRdWVyeVBhcmFtZXRlcnMpOgorICAg
ICAgICAoSW5zcGVjdG9yRnJvbnRlbmRBUEkubG9hZFRpbWVsaW5lRnJvbVVSTCk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzOgorICAg
ICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZS5o
aWRkZW5QYW5lbHMpOgorICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhv
c3RTdHViLnByb3RvdHlwZS5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanM6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVs
aW5lTW9kZWwucHJvdG90eXBlLmxvYWRGcm9tVVJMLm9uRGF0YVJlY2VpdmVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5sb2FkRnJvbVVSTC5wYXJzZUFu
ZEltcG9ydERhdGEpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90
eXBlLmxvYWRGcm9tVVJMLm9uTG9hZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVN
b2RlbC5wcm90b3R5cGUubG9hZEZyb21VUkwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvVGltZWxpbmVQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVs
LnByb3RvdHlwZS5sb2FkRnJvbVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qczoKKwogMjAxMi0wOC0xNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIGFsd2F5c1Jlc2VydmVUZXh0
dXJlcyBjb2RlIC0gaXQgZG9lc24ndCBkbyBhbnl0aGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUv
RW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IGI2YmFhNzk1ZWE4YjE3OTMy
MzY5OGM3Yzc2MzU1MTBkYjIwYTMzYjguLjk2NTI0YmJkMTA4YjkzZjU5ZmU2NjU4ZTU0MGQ1MDZj
MWMyZWU1NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxp
emVkU3RyaW5ncy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXpl
ZFN0cmluZ3MuanMKQEAgLTcyOCwzICs3MjgsNSBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJFbXVsYXRl
IHBvc2l0aW9uIHVuYXZhaWxhYmxlIl0gPSAiRW11bGF0ZSBwb3NpdGlvbiB1bmF2YWlsYWJsZQog
bG9jYWxpemVkU3RyaW5nc1siT3ZlcnJpZGUgR2VvbG9jYXRpb24iXSA9ICJPdmVycmlkZSBHZW9s
b2NhdGlvbiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJHZW9sb2NhdGlvbiBQb3NpdGlvbiJdID0gIkdl
b2xvY2F0aW9uIFBvc2l0aW9uIjsKIGxvY2FsaXplZFN0cmluZ3NbIk92ZXJyaWRlIERldmljZSBP
cmllbnRhdGlvbiJdID0gIk92ZXJyaWRlIERldmljZSBPcmllbnRhdGlvbiI7Citsb2NhbGl6ZWRT
dHJpbmdzWyJGYWlsZWQgdG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAi
RmFpbGVkIHRvIGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7Citsb2NhbGl6ZWRT
dHJpbmdzWyIlcyBsb2FkIGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IHN0YXR1cyAlZCJdID0g
IiVzIGxvYWQgZmFpbGVkIHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRB
UEkuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kQVBJLmpzCmluZGV4IDQ3MzI2NzA5MTViMmMzMWJmODI3NGI0ZmE5MmE0ODVkNmZjNTYzNTQu
LmEwMzBjZWNhYWYxMTE0YzM4ZjFjZDU0NmI3YTE4YzM3ZjNmNWU4NTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVu
ZEFQSS5qcwpAQCAtMTM0LDYgKzEzNCwyMSBAQCBJbnNwZWN0b3JGcm9udGVuZEFQSSA9IHsKICAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRBUEkuX3BlbmRpbmdDb21tYW5kcy5wdXNoKHNpZ25hdHVy
ZSk7CiAgICAgfSwKIAorICAgIGRpc3BhdGNoUXVlcnlQYXJhbWV0ZXJzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAodHlwZW9mIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsi
Y2FsbEFQSSJdICE9PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5k
QVBJLmRpc3BhdGNoKFtXZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImNhbGxBUEkiXSwg
V2ViSW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJwYXJhbXMiXV0pCisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKi8KKyAgICBsb2FkVGltZWxp
bmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy50aW1lbGluZS5sb2FkRnJvbVVSTCh1cmwpOworICAgICAgICBXZWJJbnNwZWN0b3IuaW5z
cGVjdG9yVmlldy5zZXRDdXJyZW50UGFuZWwoV2ViSW5zcGVjdG9yLnBhbmVscy50aW1lbGluZSk7
CisgICAgfSwKKwogICAgIGxvYWRDb21wbGV0ZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IEluc3BlY3RvckZyb250ZW5kQVBJLl9pc0xvYWRlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5k
SG9zdFN0dWIuanMKaW5kZXggMGI0ZWFhNjIxNDI1MTJlNjNkMmViODc3ZjIxZDcxMWRiYzEzODg2
Yy4uNjFkOGFlODdmZjRjYTc2ZWQyY2FjOWY3ZGE4MzlhYzg1OWQ5NzRmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RT
dHViLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9y
RnJvbnRlbmRIb3N0U3R1Yi5qcwpAQCAtMTAyLDcgKzEwMiw3IEBAIFdlYkluc3BlY3Rvci5JbnNw
ZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9IHsKIAogICAgIGhpZGRlblBhbmVsczog
ZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICIiOworICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLnF1ZXJ5UGFyYW1zT2JqZWN0WyJoaWRkZW5QYW5lbHMiXSB8fCAiIjsKICAgICB9
LAogCiAgICAgaW5zcGVjdGVkVVJMQ2hhbmdlZDogZnVuY3Rpb24odXJsKQpAQCAtMTc5LDcgKzE3
OSw3IEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZSA9
IHsKIAogICAgIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHk6IGZ1bmN0aW9uKHVybCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgcmV0dXJuIGxvYWRYSFIodXJsKTsKICAgICB9
LAogCiAgICAgc2V0Wm9vbUZhY3RvcjogZnVuY3Rpb24oem9vbSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwppbmRleCBjNjYwMWM3
ZjE2YmQ1NzZiNGVjY2QwOWY3MThmNDk3ZDEwMGM1YTVlLi45ZmUyNmE2NWQ3NGNlMThiZDZiYjQx
OTk1YTQ3MDMwYjRiOWI0MjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3LmpzCkBAIC02Niw3ICs2NiwxMCBAQCBXZWJJbnNwZWN0
b3IuSW5zcGVjdG9yVmlldy5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICByZXR1cm4gdGhp
cy5fY3VycmVudFBhbmVsOwogICAgIH0sCi0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5QYW5lbH0geAorICAgICAqLwogICAgIHNldEN1cnJlbnRQYW5lbDogZnVu
Y3Rpb24oeCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UGFuZWwgPT09IHgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9k
ZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwu
anMKaW5kZXggOTFmOWY5NWQyNzA1MmU0NzU4MmRkNjg2NmJmMDg3YzVjYzQzZWNmZC4uYTQyMjQw
ZGM2YWUzZDdmYmI1Mzg2NTNjNzcyNmM4MDgwODFlYjU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcwpAQCAtMjQxLDYgKzI0
MSw0NSBAQCBXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge3N0cmluZ30gdXJsCisgICAgICovCisgICAgbG9hZEZyb21VUkw6IGZ1bmN0aW9uKHVybCwg
cHJvZ3Jlc3MpCisgICAgeworICAgICAgICB2YXIgY29tcG9zaXRlUHJvZ3Jlc3MgPSBuZXcgV2Vi
SW5zcGVjdG9yLkNvbXBvc2l0ZVByb2dyZXNzKHByb2dyZXNzKTsKKyAgICAgICAgdmFyIGxvYWRp
bmdQcm9ncmVzcyA9IGNvbXBvc2l0ZVByb2dyZXNzLmNyZWF0ZVN1YlByb2dyZXNzKDEpOworICAg
ICAgICB2YXIgcGFyc2luZ1Byb2dyZXNzID0gY29tcG9zaXRlUHJvZ3Jlc3MuY3JlYXRlU3ViUHJv
Z3Jlc3MoMSk7CisgICAgICAgIHZhciBwcm9jZXNzaW5nUHJvZ3Jlc3MgPSBjb21wb3NpdGVQcm9n
cmVzcy5jcmVhdGVTdWJQcm9ncmVzcygxKTsKKworICAgICAgICBmdW5jdGlvbiBvbkRhdGFSZWNl
aXZlZChkYXRhKSAKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICB2YXIgcmVjb3JkcyA9IEpTT04ucGFyc2UoZGF0YSk7CisgICAgICAgICAgICAgICAgdGhpcy5f
bG9hZFJlY29yZHMocmVjb3Jkcyk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRmFpbGVkIHRv
IGxvYWQgdGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyIsIGUubWVzc2FnZSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VBbmRJbXBvcnREYXRh
KGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciByZWNvcmRzID0gSlNPTi5wYXJzZShk
YXRhKTsKKyAgICAgICAgICAgIHBhcnNpbmdQcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB0
aGlzLnJlc2V0KCk7CisgICAgICAgICAgICBwcm9jZXNzaW5nUHJvZ3Jlc3Muc2V0VG90YWxXb3Jr
KHJlY29yZHMubGVuZ3RoKTsKKyAgICAgICAgICAgIHRoaXMuX2xvYWROZXh0Q2h1bmsocHJvY2Vz
c2luZ1Byb2dyZXNzLCByZWNvcmRzLCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IG9uTG9hZChyZXNwb25zZVRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvYWRpbmdQcm9n
cmVzcy5kb25lKCk7CisgICAgICAgICAgICBwYXJzaW5nUHJvZ3Jlc3Muc2V0VG90YWxXb3JrKDEp
OworICAgICAgICAgICAgc2V0VGltZW91dChwYXJzZUFuZEltcG9ydERhdGEuYmluZCh0aGlzLCBy
ZXNwb25zZVRleHQpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG9uTG9hZC5jYWxsKHRoaXMs
IGxvYWRYSFIodXJsKSk7CisgICAgfSwKKwogICAgIHNhdmVUb0ZpbGU6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIHZhciByZWNvcmRzID0gWydbJyArIEpTT04uc3RyaW5naWZ5KG5ldyBTdHJp
bmcod2luZG93Lm5hdmlnYXRvci5hcHBWZXJzaW9uKSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVsLmpzCmluZGV4IDNkMzE4YzY2NmE5
NmZkYzk3NWU3MmUyMDI5OGFkYzlmYmE2MmEwZTguLmQ0YWE5MWY3ZWRhMzMxODNjMDhkNmIzNmNm
ZTUwNTEwNzMxNzE5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvVGltZWxpbmVQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RpbWVsaW5lUGFuZWwuanMKQEAgLTM2MSw2ICszNjEsMjMgQEAgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9jcmVhdGVGaWxlU2Vs
ZWN0b3IoKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybAor
ICAgICAqLworICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fb3BlcmF0aW9uSW5Qcm9ncmVzcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKHRoaXMudG9nZ2xlVGltZWxpbmVCdXR0b24udG9nZ2xlZCkgeworICAgICAgICAgICAg
dGhpcy50b2dnbGVUaW1lbGluZUJ1dHRvbi50b2dnbGVkID0gZmFsc2U7CisgICAgICAgICAgICB0
aGlzLl9tb2RlbC5zdG9wUmVjb3JkKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHByb2dyZXNz
SW5kaWNhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9ncmVzc0luZGljYXRvcigpOworICAgICAg
ICBwcm9ncmVzc0luZGljYXRvci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Qcm9ncmVz
c0luZGljYXRvci5FdmVudHMuRG9uZSwgdGhpcy5fc2V0T3BlcmF0aW9uSW5Qcm9ncmVzcy5iaW5k
KHRoaXMsIG51bGwpKTsKKyAgICAgICAgdGhpcy5fc2V0T3BlcmF0aW9uSW5Qcm9ncmVzcyhwcm9n
cmVzc0luZGljYXRvcik7CisgICAgICAgIHRoaXMuX21vZGVsLmxvYWRGcm9tVVJMKHVybCwgcHJv
Z3Jlc3NJbmRpY2F0b3IpOworICAgIH0sCisKICAgICBfcm9vdFJlY29yZDogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLnJvb3RSZWNvcmQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
aW5kZXggMjFjZmMwMjI1ZWY1ZDU3YjEwMDcyZDYxMzkzYmM0N2MzOGM2N2Q3Ni4uNjczYTEwOTRl
NmJiY2JiMDQ5M2U0MGI5Yzc1ZjA1NmRiYWZjZWJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTQ0LDcgKzQ0LDcgQEAgdmFyIFdl
Ykluc3BlY3RvciA9IHsKICAgICAgICAgICAgIHRoaXMucGFuZWxzLmNvbnNvbGUgPSBuZXcgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVQYW5lbCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIHZhciBoaWRkZW5QYW5lbHMgPSAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmhpZGRl
blBhbmVscygpIHx8ICIiKS5zcGxpdCgnLCcpOworICAgICAgICB2YXIgaGlkZGVuUGFuZWxzID0g
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmhpZGRlblBhbmVscygpOwogICAgICAgICBpZiAoaGlkZGVu
UGFuZWxzLmluZGV4T2YoImVsZW1lbnRzIikgPT09IC0xKQogICAgICAgICAgICAgdGhpcy5wYW5l
bHMuZWxlbWVudHMgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwoKTsKICAgICAgICAg
aWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJyZXNvdXJjZXMiKSA9PT0gLTEpCkBAIC00MTQsNiAr
NDE0LDEwIEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmlzU3R1
YikgeworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQSS5kaXNwYXRjaFF1ZXJ5UGFyYW1ldGVy
cygpOworICAgICAgICBXZWJJbnNwZWN0b3IuX2RvTG9hZGVkRG9uZVdpdGhDYXBhYmlsaXRpZXMo
KTsKKyAgICB9CiAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IDQ2ODk4
YmYzMTkwMDFkOWEyMGY4ODY1NGZjYmQ0NGNhNTg1NGI0YTguLmZlZmYzMDE0ZDAwMDYzYWJiYmYz
NWEzZjY3MTc4YjA0YmZlYWEzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC03MjYsNiArNzI2LDQxIEBAIE1hcC5wcm90b3R5cGUg
PSB7CiAgICAgfQogfTsKIAorLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsCisgKiBAcGFyYW0g
e2Jvb2xlYW49fSBhc3luYworICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpPX0gY2FsbGJhY2sK
KyAqIEByZXR1cm4ge3N0cmluZ30KKyAqLworZnVuY3Rpb24gbG9hZFhIUih1cmwsIGFzeW5jLCBj
YWxsYmFjaykgCit7CisgICAgZnVuY3Rpb24gb25SZWFkeVN0YXRlQ2hhbmdlZCgpIAorICAgIHsK
KyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIiVzIGxvYWQgZmFpbGVkIHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIiwgdXJs
LCB4aHIuc3RhdHVzKSk7CisgICAgICAgIGNhbGxiYWNrKG51bGwpOyAKKyAgIH0KKworICAgIHZh
ciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbigiR0VUIiwgdXJsLCBh
c3luYyk7CisgICAgaWYgKGFzeW5jKQorICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
b25SZWFkeVN0YXRlQ2hhbmdlZDsgICAgICAgIAorICAgIHhoci5zZW5kKG51bGwpOworICAgIGlm
ICghYXN5bmMpIHsKKyAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAgICAg
ICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiJXMgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBz
dGF0dXMgJWQiLCB1cmwsIHhoci5zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorfQogCiAvKioKICAqIEBjb25zdHJ1Y3Rvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159136</attachid>
            <date>2012-08-17 09:03:45 -0700</date>
            <delta_ts>2012-08-21 00:55:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120817120309.patch</filename>
            <type>text/plain</type>
            <size>10337</size>
            <attacher name="Gabriel Peal">gpeal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1Nzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2IyZDQxZDBjYjg1M2E1
ZGY2MGQxMzc1NTMyMDU0OWRkMzM2YjMwOS4uZDBiZDA1ZjFiNDU1MmM3ZjYxOWQwMjM4M2E5NGZh
NTIyNmVjMDQ0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA4LTE2ICBHYWJy
aWVsIFBlYWwgIDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVt
YmVkZGFibGUgV2ViIEluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTE1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGluc3BlY3RvciBzdWNoIHRo
YXQgaXQgaXMgYmV0dGVyIHN1aXRlZCB0byBydW4gZW1iZWRkZWQgaW4gYW5vdGhlciB3ZWJwYWdl
LiBJdCBhZGRzIHRoZSBhYmlsaXR5IHRvIHByZXBvcHVsYXRlIHRoZSB0aW1lbGluZSBwYW5lbCB3
aXRoIGFuIGV4aXN0aW5nIHJlY29yZGluZyBhbW9uZyBvdGhlciBjb250cm9scy4KKworICAgICAg
ICAqIEVuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzOgorICAgICAgICAoSW5zcGVjdG9y
RnJvbnRlbmRBUEkuZGlzcGF0Y2hRdWVyeVBhcmFtZXRlcnMpOgorICAgICAgICAoSW5zcGVjdG9y
RnJvbnRlbmRBUEkubG9hZFRpbWVsaW5lRnJvbVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzOgorICAgICAgICAoLldlYkluc3Bl
Y3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlwZS5oaWRkZW5QYW5lbHMpOgor
ICAgICAgICAoLldlYkluc3BlY3Rvci5JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLnByb3RvdHlw
ZS5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0luc3BlY3RvclZpZXcuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1l
bGluZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90
eXBlLmxvYWRGcm9tVVJMLm9uRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
aW1lbGluZU1vZGVsLnByb3RvdHlwZS5sb2FkRnJvbVVSTC5wYXJzZUFuZEltcG9ydERhdGEpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlLmxvYWRGcm9tVVJM
Lm9uTG9hZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5cGUu
bG9hZEZyb21VUkwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLnByb3RvdHlwZS5sb2Fk
RnJvbVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVscyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IubG9hZGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qczoK
KwogMjAxMi0wOC0xNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIGFsd2F5c1Jlc2VydmVUZXh0dXJlcyBjb2RlIC0gaXQg
ZG9lc24ndCBkbyBhbnl0aGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5s
cHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9s
b2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IGI2YmFhNzk1ZWE4YjE3OTMyMzY5OGM3Yzc2MzU1MTBk
YjIwYTMzYjguLjk2NTI0YmJkMTA4YjkzZjU5ZmU2NjU4ZTU0MGQ1MDZjMWMyZWU1NWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKQEAg
LTcyOCwzICs3MjgsNSBAQCBsb2NhbGl6ZWRTdHJpbmdzWyJFbXVsYXRlIHBvc2l0aW9uIHVuYXZh
aWxhYmxlIl0gPSAiRW11bGF0ZSBwb3NpdGlvbiB1bmF2YWlsYWJsZQogbG9jYWxpemVkU3RyaW5n
c1siT3ZlcnJpZGUgR2VvbG9jYXRpb24iXSA9ICJPdmVycmlkZSBHZW9sb2NhdGlvbiI7CiBsb2Nh
bGl6ZWRTdHJpbmdzWyJHZW9sb2NhdGlvbiBQb3NpdGlvbiJdID0gIkdlb2xvY2F0aW9uIFBvc2l0
aW9uIjsKIGxvY2FsaXplZFN0cmluZ3NbIk92ZXJyaWRlIERldmljZSBPcmllbnRhdGlvbiJdID0g
Ik92ZXJyaWRlIERldmljZSBPcmllbnRhdGlvbiI7Citsb2NhbGl6ZWRTdHJpbmdzWyJGYWlsZWQg
dG8gbG9hZCB0aW1lbGluZSBkYXRhIHdpdGggZXJyb3I6ICVzIl0gPSAiRmFpbGVkIHRvIGxvYWQg
dGltZWxpbmUgZGF0YSB3aXRoIGVycm9yOiAlcyI7Citsb2NhbGl6ZWRTdHJpbmdzWyIlcyBsb2Fk
IGZhaWxlZCB3aXRoIFhNTEh0dHBSZXF1ZXN0IHN0YXR1cyAlZCJdID0gIiVzIGxvYWQgZmFpbGVk
IHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJLmpzCmluZGV4
IDQ3MzI2NzA5MTViMmMzMWJmODI3NGI0ZmE5MmE0ODVkNmZjNTYzNTQuLjBlNjU4ODA3YjI5MjM2
YzViNjk1YjM3N2NiYzk4ODgzNDk2MjNjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEFQSS5qcwpAQCAtMTM0
LDYgKzEzNCwyMSBAQCBJbnNwZWN0b3JGcm9udGVuZEFQSSA9IHsKICAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRBUEkuX3BlbmRpbmdDb21tYW5kcy5wdXNoKHNpZ25hdHVyZSk7CiAgICAgfSwKIAor
ICAgIGRpc3BhdGNoUXVlcnlQYXJhbWV0ZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBp
ZiAodHlwZW9mIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiY2FsbEFQSSJdICE9PSAi
dW5kZWZpbmVkIikKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKFtX
ZWJJbnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImNhbGxBUEkiXSwgV2ViSW5zcGVjdG9yLnF1
ZXJ5UGFyYW1zT2JqZWN0WyJwYXJhbXMiXV0pCisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKi8KKyAgICBsb2FkVGltZWxpbmVGcm9tVVJMOiBmdW5j
dGlvbih1cmwpIAorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy50aW1lbGluZS5s
b2FkRnJvbVVSTCh1cmwpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJ0aW1lbGlu
ZSIpOworICAgIH0sCisKICAgICBsb2FkQ29tcGxldGVkOiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEFQSS5faXNMb2FkZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RT
dHViLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9u
dGVuZEhvc3RTdHViLmpzCmluZGV4IDBiNGVhYTYyMTQyNTEyZTYzZDJlYjg3N2YyMWQ3MTFkYmMx
Mzg4NmMuLjYxZDhhZTg3ZmY0Y2E3NmVkMmNhYzlmN2RhODM5YWM4NTlkOTc0ZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIuanMKQEAgLTEwMiw3ICsxMDIsNyBAQCBXZWJJbnNwZWN0b3Iu
SW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICBoaWRkZW5QYW5l
bHM6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdFsiaGlkZGVuUGFuZWxzIl0gfHwgIiI7CiAg
ICAgfSwKIAogICAgIGluc3BlY3RlZFVSTENoYW5nZWQ6IGZ1bmN0aW9uKHVybCkKQEAgLTE3OSw3
ICsxNzksNyBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5
cGUgPSB7CiAKICAgICBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5OiBmdW5jdGlvbih1cmwpCiAg
ICAgewotICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiBsb2FkWEhSKHVybCk7CiAg
ICAgfSwKIAogICAgIHNldFpvb21GYWN0b3I6IGZ1bmN0aW9uKHpvb20pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMKaW5kZXggYzY2
MDFjN2YxNmJkNTc2YjRlY2NkMDlmNzE4ZjQ5N2QxMDBjNWE1ZS4uOWZlMjZhNjVkNzRjZTE4YmQ2
YmI0MTk5NWE0NzAzMGI0YjliNDI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbnNwZWN0b3JWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yVmlldy5qcwpAQCAtNjYsNyArNjYsMTAgQEAgV2ViSW5z
cGVjdG9yLkluc3BlY3RvclZpZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX2N1cnJlbnRQYW5lbDsKICAgICB9LAotCisgICAgCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuUGFuZWx9IHgKKyAgICAgKi8KICAgICBzZXRDdXJyZW50UGFuZWw6
IGZ1bmN0aW9uKHgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhbmVsID09PSB4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGlu
ZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1v
ZGVsLmpzCmluZGV4IDkxZjlmOTVkMjcwNTJlNDc1ODJkZDY4NjZiZjA4N2M1Y2M0M2VjZmQuLmIw
MzVkMDc4M2YxZjk2NzRkNWVhNTZkNmQ4MWYzNDIxMDkxY2VkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKQEAgLTI0MSw2
ICsyNDEsMzMgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAg
ICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IHVybAorICAgICAqLworICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1
cmwsIHByb2dyZXNzKQorICAgIHsKKyAgICAgICAgdmFyIGNvbXBvc2l0ZVByb2dyZXNzID0gbmV3
IFdlYkluc3BlY3Rvci5Db21wb3NpdGVQcm9ncmVzcyhwcm9ncmVzcyk7CisgICAgICAgIHZhciBs
b2FkaW5nUHJvZ3Jlc3MgPSBjb21wb3NpdGVQcm9ncmVzcy5jcmVhdGVTdWJQcm9ncmVzcygxKTsK
KyAgICAgICAgdmFyIHBhcnNpbmdQcm9ncmVzcyA9IGNvbXBvc2l0ZVByb2dyZXNzLmNyZWF0ZVN1
YlByb2dyZXNzKDEpOworICAgICAgICB2YXIgcHJvY2Vzc2luZ1Byb2dyZXNzID0gY29tcG9zaXRl
UHJvZ3Jlc3MuY3JlYXRlU3ViUHJvZ3Jlc3MoMSk7CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VB
bmRJbXBvcnREYXRhKGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciByZWNvcmRzID0g
SlNPTi5wYXJzZShkYXRhKTsKKyAgICAgICAgICAgIHBhcnNpbmdQcm9ncmVzcy5kb25lKCk7Cisg
ICAgICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgICAgICBwcm9jZXNzaW5nUHJvZ3Jlc3Mu
c2V0VG90YWxXb3JrKHJlY29yZHMubGVuZ3RoKTsKKyAgICAgICAgICAgIHRoaXMuX2xvYWROZXh0
Q2h1bmsocHJvY2Vzc2luZ1Byb2dyZXNzLCByZWNvcmRzLCAxKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciByZXNwb25zZVRleHQgPSBsb2FkWEhSKHVybCk7CisgICAgICAgIGlmIChyZXNwb25z
ZVRleHQpIHsKKyAgICAgICAgICAgIGxvYWRpbmdQcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAg
ICBwYXJzaW5nUHJvZ3Jlc3Muc2V0VG90YWxXb3JrKDEpOworICAgICAgICAgICAgc2V0VGltZW91
dChwYXJzZUFuZEltcG9ydERhdGEuYmluZCh0aGlzLCByZXNwb25zZVRleHQpLCAwKTsKKyAgICAg
ICAgfQorICAgIH0sCisKICAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB2YXIgcmVjb3JkcyA9IFsnWycgKyBKU09OLnN0cmluZ2lmeShuZXcgU3RyaW5nKHdpbmRvdy5u
YXZpZ2F0b3IuYXBwVmVyc2lvbikpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwppbmRleCAzZDMxOGM2NjZhOTZmZGM5NzVlNzJl
MjAyOThhZGM5ZmJhNjJhMGU4Li5kNGFhOTFmN2VkYTMzMTgzYzA4ZDZiMzZjZmU1MDUxMDczMTcx
OTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVs
aW5lUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1l
bGluZVBhbmVsLmpzCkBAIC0zNjEsNiArMzYxLDIzIEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZVBh
bmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fY3JlYXRlRmlsZVNlbGVjdG9yKCk7CiAg
ICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKi8KKyAg
ICBsb2FkRnJvbVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX29w
ZXJhdGlvbkluUHJvZ3Jlc3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlz
LnRvZ2dsZVRpbWVsaW5lQnV0dG9uLnRvZ2dsZWQpIHsKKyAgICAgICAgICAgIHRoaXMudG9nZ2xl
VGltZWxpbmVCdXR0b24udG9nZ2xlZCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fbW9kZWwu
c3RvcFJlY29yZCgpOworICAgICAgICB9CisgICAgICAgIHZhciBwcm9ncmVzc0luZGljYXRvciA9
IG5ldyBXZWJJbnNwZWN0b3IuUHJvZ3Jlc3NJbmRpY2F0b3IoKTsKKyAgICAgICAgcHJvZ3Jlc3NJ
bmRpY2F0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuUHJvZ3Jlc3NJbmRpY2F0b3Iu
RXZlbnRzLkRvbmUsIHRoaXMuX3NldE9wZXJhdGlvbkluUHJvZ3Jlc3MuYmluZCh0aGlzLCBudWxs
KSk7CisgICAgICAgIHRoaXMuX3NldE9wZXJhdGlvbkluUHJvZ3Jlc3MocHJvZ3Jlc3NJbmRpY2F0
b3IpOworICAgICAgICB0aGlzLl9tb2RlbC5sb2FkRnJvbVVSTCh1cmwsIHByb2dyZXNzSW5kaWNh
dG9yKTsKKyAgICB9LAorCiAgICAgX3Jvb3RSZWNvcmQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5yb290UmVjb3JkKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDIxY2Zj
MDIyNWVmNWQ1N2IxMDA3MmQ2MTM5M2JjNDdjMzhjNjdkNzYuLjY3M2ExMDk0ZTZiYmNiYjA0OTNl
NDBiOWM3NWYwNTZkYmFmY2ViYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC00NCw3ICs0NCw3IEBAIHZhciBXZWJJbnNwZWN0b3Ig
PSB7CiAgICAgICAgICAgICB0aGlzLnBhbmVscy5jb25zb2xlID0gbmV3IFdlYkluc3BlY3Rvci5D
b25zb2xlUGFuZWwoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB2
YXIgaGlkZGVuUGFuZWxzID0gKEluc3BlY3RvckZyb250ZW5kSG9zdC5oaWRkZW5QYW5lbHMoKSB8
fCAiIikuc3BsaXQoJywnKTsKKyAgICAgICAgdmFyIGhpZGRlblBhbmVscyA9IEluc3BlY3RvckZy
b250ZW5kSG9zdC5oaWRkZW5QYW5lbHMoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRl
eE9mKCJlbGVtZW50cyIpID09PSAtMSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLmVsZW1lbnRz
ID0gbmV3IFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsKCk7CiAgICAgICAgIGlmIChoaWRkZW5Q
YW5lbHMuaW5kZXhPZigicmVzb3VyY2VzIikgPT09IC0xKQpAQCAtNDE0LDYgKzQxNCwxMCBAQCBX
ZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgaWYgKEluc3BlY3RvckZyb250ZW5kSG9zdC5pc1N0dWIpIHsKKyAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRBUEkuZGlzcGF0Y2hRdWVyeVBhcmFtZXRlcnMoKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLl9kb0xvYWRlZERvbmVXaXRoQ2FwYWJpbGl0aWVzKCk7CisgICAgfQog
ICAgIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCA0Njg5OGJmMzE5MDAxZDlh
MjBmODg2NTRmY2JkNDRjYTU4NTRiNGE4Li45MDg0NTM4NmEwMGRlNDg1Yjc4NmM1ZDU0Y2M0Njdl
MDhjYWE2ZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qcwpAQCAtNzI2LDYgKzcyNiw0MSBAQCBNYXAucHJvdG90eXBlID0gewogICAgIH0K
IH07CiAKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHVybAorICogQHBhcmFtIHtib29sZWFuPX0g
YXN5bmMKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyk9fSBjYWxsYmFjaworICogQHJldHVy
biB7P3N0cmluZ30KKyAqLworZnVuY3Rpb24gbG9hZFhIUih1cmwsIGFzeW5jLCBjYWxsYmFjaykg
Cit7CisgICAgZnVuY3Rpb24gb25SZWFkeVN0YXRlQ2hhbmdlZCgpIAorICAgIHsKKyAgICAgICAg
aWYgKHhoci5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVz
IGxvYWQgZmFpbGVkIHdpdGggWE1MSHR0cFJlcXVlc3Qgc3RhdHVzICVkIiwgdXJsLCB4aHIuc3Rh
dHVzKSk7CisgICAgICAgIGNhbGxiYWNrKG51bGwpOyAKKyAgIH0KKworICAgIHZhciB4aHIgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB4aHIub3BlbigiR0VUIiwgdXJsLCBhc3luYyk7Cisg
ICAgaWYgKGFzeW5jKQorICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gb25SZWFkeVN0
YXRlQ2hhbmdlZDsgICAgICAgIAorICAgIHhoci5zZW5kKG51bGwpOworICAgIGlmICghYXN5bmMp
IHsKKyAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgCisgICAgICAgICAgICByZXR1cm4g
eGhyLnJlc3BvbnNlVGV4dDsKKworICAgICAgICBXZWJJbnNwZWN0b3IubG9nKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiJXMgbG9hZCBmYWlsZWQgd2l0aCBYTUxIdHRwUmVxdWVzdCBzdGF0dXMgJWQi
LCB1cmwsIHhoci5zdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQogCiAv
KioKICAqIEBjb25zdHJ1Y3Rvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159636</attachid>
            <date>2012-08-21 00:55:39 -0700</date>
            <delta_ts>2012-08-21 16:30:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91528-20120821115458.patch</filename>
            <type>text/plain</type>
            <size>16581</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUyM2ZiMDkxMDYzNWFh
MzMwNzA0ZjhlMTY1ZDY0NDBiZmVlYWU1ZC4uZWE5YTE2ZjkyZTUwMjA4Y2JhZGZjYzhjNjliMWM1
Y2EzM2JlNzc2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA4LTE2ICBHYWJy
aWVsIFBlYWwgIDxncGVhbEBnb29nbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVt
YmVkZGFibGUgV2ViIEluc3BlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTE1MjgKKworICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgorCisgICAgICAgIEFkZHMgZnVuY3Rpb25hbGl0eSB0byB0aGUgaW5zcGVjdG9yIHN1Y2ggdGhh
dCBpdCBpcyBiZXR0ZXIgc3VpdGVkIHRvIHJ1biBlbWJlZGRlZCBpbiBhbm90aGVyIHdlYnBhZ2Uu
IEl0IGFkZHMgdGhlIGFiaWxpdHkgdG8gcHJlcG9wdWxhdGUgdGhlIHRpbWVsaW5lIHBhbmVsIHdp
dGggYW4gZXhpc3RpbmcgcmVjb3JkaW5nIGFtb25nIG90aGVyIGNvbnRyb2xzLgorCisgICAgICAg
ICogRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CisgICAgICAgIChJbnNwZWN0b3JG
cm9udGVuZEFQSS5kaXNwYXRjaFF1ZXJ5UGFyYW1ldGVycyk6CisgICAgICAgIChJbnNwZWN0b3JG
cm9udGVuZEFQSS5sb2FkVGltZWxpbmVGcm9tVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanM6CisgICAgICAgICguV2ViSW5zcGVj
dG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBlLmhpZGRlblBhbmVscyk6Cisg
ICAgICAgICguV2ViSW5zcGVjdG9yLkluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIucHJvdG90eXBl
LmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSW5zcGVjdG9yVmlldy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVs
aW5lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5
cGUubG9hZEZyb21VUkwub25EYXRhUmVjZWl2ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRp
bWVsaW5lTW9kZWwucHJvdG90eXBlLmxvYWRGcm9tVVJMLnBhcnNlQW5kSW1wb3J0RGF0YSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGltZWxpbmVNb2RlbC5wcm90b3R5cGUubG9hZEZyb21VUkwu
b25Mb2FkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZS5s
b2FkRnJvbVVSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZVBhbmVs
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRpbWVsaW5lUGFuZWwucHJvdG90eXBlLmxvYWRG
cm9tVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5fY3JlYXRlUGFuZWxzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5sb2FkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgor
CiAyMDEyLTA4LTIwICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbVjhdIE1vdmUgaGFuZGxlT3V0T2ZNZW1vcnkoKSBmcm9tIFY4UHJveHkgdG8gVjhCaW5k
aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0
cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3Mu
anMKaW5kZXggOTU3NDJmZWZiODI2ZTE3YmVmNmUzMGI4YzVmYjA3ODFhNmUxNDU5My4uNzUyY2I5
ZTcwMGFjNDZhZmUzYzZhNDNkNzdmZWUwZjkwMWZiOGQwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwpAQCAtNTgyLDkgKzU4Miw5IEBA
IGxvY2FsaXplZFN0cmluZ3NbIkxvYWQgdGltZWxpbmUgZGF0YVx1MjAyNiJdID0gIkxvYWQgVGlt
ZWxpbmUgZGF0YVx1MjAyNiI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJTYXZlIHRpbWVsaW5lIGRhdGFc
dTIwMjYiXSA9ICJTYXZlIFRpbWVsaW5lIGRhdGFcdTIwMjYiOwogbG9jYWxpemVkU3RyaW5nc1si
TG9hZCB0aW1lbGluZSBkYXRhIl0gPSAiTG9hZCBUaW1lbGluZSBkYXRhIjsKIGxvY2FsaXplZFN0
cmluZ3NbIlNhdmUgdGltZWxpbmUgZGF0YSJdID0gIlNhdmUgVGltZWxpbmUgZGF0YSI7Ci1sb2Nh
bGl6ZWRTdHJpbmdzWyJUaW1lbGluZS5sb2FkRnJvbUZpbGU6IEFuIGVycm9yIG9jY3VycmVkIHJl
YWRpbmcgdGhlIGZpbGUgXCIlc1wiIl0gPSAiVGltZWxpbmUubG9hZEZyb21GaWxlOiBBbiBlcnJv
ciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlIFwiJXNcIiI7Ci1sb2NhbGl6ZWRTdHJp
bmdzWyJUaW1lbGluZS5sb2FkRnJvbUZpbGU6IEZpbGUgXCIlc1wiIGlzIG5vdCByZWFkYWJsZSJd
ID0gIlRpbWVsaW5lLmxvYWRGcm9tRmlsZTogRmlsZSBcIiVzXCIgaXMgbm90IHJlYWRhYmxlIjsK
LWxvY2FsaXplZFN0cmluZ3NbIlRpbWVsaW5lLmxvYWRGcm9tRmlsZTogRmlsZSBcIiVzXCIgbm90
IGZvdW5kLiJdID0gIlRpbWVsaW5lLmxvYWRGcm9tRmlsZTogRmlsZSBcIiVzXCIgbm90IGZvdW5k
LiI7Citsb2NhbGl6ZWRTdHJpbmdzWyJBbiBlcnJvciBvY2N1cnJlZCByZWFkaW5nIHRoZSBmaWxl
IFwiJXNcIiJdID0gIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUgXCIl
c1wiIjsKK2xvY2FsaXplZFN0cmluZ3NbIkZpbGUgXCIlc1wiIGlzIG5vdCByZWFkYWJsZSJdID0g
IkZpbGUgXCIlc1wiIGlzIG5vdCByZWFkYWJsZSI7Citsb2NhbGl6ZWRTdHJpbmdzWyJGaWxlIFwi
JXNcIiBub3QgZm91bmQuIl0gPSAiRmlsZSBcIiVzXCIgbm90IGZvdW5kLiI7CiBsb2NhbGl6ZWRT
dHJpbmdzWyJGaWx0ZXIgb3V0IHJlY29yZHMgc2hvcnRlciB0aGFuICVzIl0gPSAiRmlsdGVyIG91
dCByZWNvcmRzIHNob3J0ZXIgdGhhbiAlcyI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJTaG93IHVzZXIg
YWdlbnQgc3R5bGVzIl0gPSAiU2hvdyB1c2VyIGFnZW50IHN0eWxlcyI7CiBsb2NhbGl6ZWRTdHJp
bmdzWyJTaG93IHNjcmlwdCBmb2xkZXJzIl0gPSAiU2hvdyBzY3JpcHQgZm9sZGVycyI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250
ZW5kQVBJLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JG
cm9udGVuZEFQSS5qcwppbmRleCA5MGEyNTRhYjVkZTFmYTU4ZjQ2ZmZlOTRiZDI3Y2YzYWYzNjM5
YTJjLi5iYWI1MjllZjBkZDA0NzA0YWU0OGVlZTRhZjM0NjQzMDJjMjM5MjcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kQVBJ
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJv
bnRlbmRBUEkuanMKQEAgLTUyLDcgKzUyLDcgQEAgSW5zcGVjdG9yRnJvbnRlbmRBUEkgPSB7CiAK
ICAgICBzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQ6IGZ1bmN0aW9uKGVuYWJsZWQpCiAgICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWwoInRpbWVsaW5lIikuc2V0VGltZWxpbmVQcm9m
aWxpbmdFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd1BhbmVsKCJ0
aW1lbGluZSIpLnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChlbmFibGVkKTsKICAgICB9LAog
CiAgICAgaXNQcm9maWxpbmdKYXZhU2NyaXB0OiBmdW5jdGlvbigpCkBAIC0xMzMsNiArMTMzLDIw
IEBAIEluc3BlY3RvckZyb250ZW5kQVBJID0gewogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQ
SS5fcGVuZGluZ0NvbW1hbmRzLnB1c2goc2lnbmF0dXJlKTsKICAgICB9LAogCisgICAgZGlzcGF0
Y2hRdWVyeVBhcmFtZXRlcnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICgiZGlzcGF0
Y2giIGluIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFtc09iamVjdCkKKyAgICAgICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQVBJLmRpc3BhdGNoKEpTT04ucGFyc2Uod2luZG93LmRlY29kZVVSSShXZWJJ
bnNwZWN0b3IucXVlcnlQYXJhbXNPYmplY3RbImRpc3BhdGNoIl0pKSk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAgICAgKi8KKyAgICBsb2FkVGltZWxp
bmVGcm9tVVJMOiBmdW5jdGlvbih1cmwpIAorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNo
b3dQYW5lbCgidGltZWxpbmUiKS5sb2FkRnJvbVVSTCh1cmwpOworICAgIH0sCisKICAgICBsb2Fk
Q29tcGxldGVkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEFQ
SS5faXNMb2FkZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzCmluZGV4IDBi
NGVhYTYyMTQyNTEyZTYzZDJlYjg3N2YyMWQ3MTFkYmMxMzg4NmMuLjYxZDhhZTg3ZmY0Y2E3NmVk
MmNhYzlmN2RhODM5YWM4NTlkOTc0ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMK
QEAgLTEwMiw3ICsxMDIsNyBAQCBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1
Yi5wcm90b3R5cGUgPSB7CiAKICAgICBoaWRkZW5QYW5lbHM6IGZ1bmN0aW9uKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5xdWVyeVBhcmFt
c09iamVjdFsiaGlkZGVuUGFuZWxzIl0gfHwgIiI7CiAgICAgfSwKIAogICAgIGluc3BlY3RlZFVS
TENoYW5nZWQ6IGZ1bmN0aW9uKHVybCkKQEAgLTE3OSw3ICsxNzksNyBAQCBXZWJJbnNwZWN0b3Iu
SW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5OiBmdW5jdGlvbih1cmwpCiAgICAgewotICAgICAgICByZXR1cm4gIiI7
CisgICAgICAgIHJldHVybiBsb2FkWEhSKHVybCk7CiAgICAgfSwKIAogICAgIHNldFpvb21GYWN0
b3I6IGZ1bmN0aW9uKHpvb20pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luc3BlY3RvclZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0luc3BlY3RvclZpZXcuanMKaW5kZXggZDQ5YjA0ZTMzNDYwMDI5YzY5MWMwNWFmOTI4
ODA4M2M1ZmFiMGYwZi4uZTU3OTliYWJlMjM1MjE3OTljNzAzM2NiMTYwMWU2MmZmOWQyNmMyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JW
aWV3LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9y
Vmlldy5qcwpAQCAtOTUsNyArOTUsMTAgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvclZpZXcucHJv
dG90eXBlID0gewogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYW5lbDsKICAg
ICB9LAotCisgICAgCisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUGFuZWx9
IHgKKyAgICAgKi8KICAgICBzZXRDdXJyZW50UGFuZWw6IGZ1bmN0aW9uKHgpCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5fY3VycmVudFBhbmVsID09PSB4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNlRnJhbWUuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcwpp
bmRleCBhZTEyYmFlNjE5ODQyOGM5ZmY1NjVkN2Q3ZWVhMDJjOGQ1NzI5Mjc4Li5mZGQ3MzBhZDNm
ODlkMmFiYjViMTBhYjZiMTFkYTdjNTI3OWMwMTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcwpA
QCAtMTYwLDcgKzE2MCw3IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlRnJhbWUucHJv
dG90eXBlID0gewogICAgIF9kaWRFZGl0Q29udGVudDogZnVuY3Rpb24oZXJyb3IpCiAgICAgewog
ICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5sb2coZXJyb3Is
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IsIHRydWUpOwor
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICghdGhpcy5famF2YVNjcmlwdFNv
dXJjZS5zdXBwb3J0c0VuYWJsZWRCcmVha3BvaW50c1doaWxlRWRpdGluZygpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UaW1lbGluZU1vZGVsLmpzCmluZGV4
IDc3YTViMzlmODJlODg5ODc0OTlhNmQ3YWQ1OGE0OWJhMTc3MTRmYTYuLmRmZjMwNDRiMjNiNWQ2
MmFjNTc4MjYyYjIwZTFmNWM5M2VhODM1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVNb2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RpbWVsaW5lTW9kZWwuanMKQEAgLTE5NywxMSArMTk3LDE2IEBA
IFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBmdW5j
dGlvbiBwYXJzZUFuZEltcG9ydERhdGEoZGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgdmFy
IHJlY29yZHMgPSBKU09OLnBhcnNlKGRhdGEpOwotICAgICAgICAgICAgcGFyc2luZ1Byb2dyZXNz
LmRvbmUoKTsKLSAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKLSAgICAgICAgICAgIHByb2Nlc3Np
bmdQcm9ncmVzcy5zZXRUb3RhbFdvcmsocmVjb3Jkcy5sZW5ndGgpOwotICAgICAgICAgICAgdGhp
cy5fbG9hZE5leHRDaHVuayhwcm9jZXNzaW5nUHJvZ3Jlc3MsIHJlY29yZHMsIDEpOworICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVjb3JkcyA9IEpTT04ucGFyc2UoZGF0
YSk7CisgICAgICAgICAgICAgICAgcGFyc2luZ1Byb2dyZXNzLmRvbmUoKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1Byb2dyZXNzLnNl
dFRvdGFsV29yayhyZWNvcmRzLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgdGhpcy5fbG9hZE5l
eHRDaHVuayhwcm9jZXNzaW5nUHJvZ3Jlc3MsIHJlY29yZHMsIDEpOworICAgICAgICAgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RXJyb3JNZXNzYWdl
KCJNYWxmb3JtZWQgdGltZWxpbmUgZGF0YS4iKTsKKyAgICAgICAgICAgICAgICBwcm9ncmVzcy5k
b25lKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBvbkxv
YWQoZSkKQEAgLTIxNiwxNSArMjIxLDE1IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZU1vZGVsLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHByb2dyZXNzLmRvbmUoKTsKICAgICAgICAgICAgIHN3
aXRjaChlLnRhcmdldC5lcnJvci5jb2RlKSB7CiAgICAgICAgICAgICBjYXNlIGUudGFyZ2V0LmVy
cm9yLk5PVF9GT1VORF9FUlI6Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmxvZyhXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoJ1RpbWVsaW5lLmxvYWRGcm9tRmlsZTogRmlsZSAiJXMiIG5vdCBm
b3VuZC4nLCBmaWxlLm5hbWUpKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0Vy
cm9yTWVzc2FnZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpbGUgXCIlc1wiIG5vdCBmb3VuZC4i
LCBmaWxlLm5hbWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBlLnRh
cmdldC5lcnJvci5OT1RfUkVBREFCTEVfRVJSOgotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5sb2coV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCdUaW1lbGluZS5sb2FkRnJvbUZpbGU6IEZpbGUg
IiVzIiBpcyBub3QgcmVhZGFibGUnLCBmaWxlLm5hbWUpKTsKKyAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3Iuc2hvd0Vycm9yTWVzc2FnZShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkZpbGUgXCIl
c1wiIGlzIG5vdCByZWFkYWJsZSIsIGZpbGUubmFtZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIGUudGFyZ2V0LmVycm9yLkFCT1JUX0VSUjoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmxvZyhXZWJJbnNwZWN0b3IuVUlTdHJpbmcoJ1RpbWVsaW5lLmxvYWRGcm9tRmlsZTogQW4g
ZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgZmlsZSAiJXMiJywgZmlsZS5uYW1lKSk7
CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dFcnJvck1lc3NhZ2UoV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBmaWxlIFwi
JXNcIiIsIGZpbGUubmFtZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTI0Myw2
ICsyNDgsMzkgQEAgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTW9kZWwucHJvdG90eXBlID0gewogICAg
ICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTsKICAgICB9LAogCisgICAgLyoqCisgICAgICog
QHBhcmFtIHtzdHJpbmd9IHVybAorICAgICAqLworICAgIGxvYWRGcm9tVVJMOiBmdW5jdGlvbih1
cmwsIHByb2dyZXNzKQorICAgIHsKKyAgICAgICAgdmFyIGNvbXBvc2l0ZVByb2dyZXNzID0gbmV3
IFdlYkluc3BlY3Rvci5Db21wb3NpdGVQcm9ncmVzcyhwcm9ncmVzcyk7CisgICAgICAgIHZhciBs
b2FkaW5nUHJvZ3Jlc3MgPSBjb21wb3NpdGVQcm9ncmVzcy5jcmVhdGVTdWJQcm9ncmVzcygxKTsK
KyAgICAgICAgdmFyIHBhcnNpbmdQcm9ncmVzcyA9IGNvbXBvc2l0ZVByb2dyZXNzLmNyZWF0ZVN1
YlByb2dyZXNzKDEpOworICAgICAgICB2YXIgcHJvY2Vzc2luZ1Byb2dyZXNzID0gY29tcG9zaXRl
UHJvZ3Jlc3MuY3JlYXRlU3ViUHJvZ3Jlc3MoMSk7CisKKyAgICAgICAgLy8gRklYTUU6IGV4dHJh
Y3QgcGFyc2luZyByb3V0aW5lcyBzbyB0aGF0IHRoZXkgZGlkIG5vdCByZXF1aXJlIHRvbyBtYW55
IHByb2dyZXNzIG9iamVjdHMuCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlQW5kSW1wb3J0RGF0YShk
YXRhKQorICAgICAgICB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciBy
ZWNvcmRzID0gSlNPTi5wYXJzZShkYXRhKTsKKyAgICAgICAgICAgICAgICBwYXJzaW5nUHJvZ3Jl
c3MuZG9uZSgpOworICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzaW5nUHJvZ3Jlc3Muc2V0VG90YWxXb3JrKHJlY29yZHMubGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9sb2FkTmV4dENodW5rKHByb2Nlc3NpbmdQcm9ncmVzcywgcmVjb3Jk
cywgMSk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLnNob3dFcnJvck1lc3NhZ2UoIk1hbGZvcm1lZCB0aW1lbGluZSBkYXRhLiIpOworICAg
ICAgICAgICAgICAgIHByb2dyZXNzLmRvbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHZhciByZXNwb25zZVRleHQgPSBsb2FkWEhSKHVybCk7CisgICAgICAgIGlmIChy
ZXNwb25zZVRleHQpIHsKKyAgICAgICAgICAgIGxvYWRpbmdQcm9ncmVzcy5kb25lKCk7CisgICAg
ICAgICAgICBwYXJzaW5nUHJvZ3Jlc3Muc2V0VG90YWxXb3JrKDEpOworICAgICAgICAgICAgc2V0
VGltZW91dChwYXJzZUFuZEltcG9ydERhdGEuYmluZCh0aGlzLCByZXNwb25zZVRleHQpLCAwKTsK
KyAgICAgICAgfQorICAgIH0sCisKICAgICBzYXZlVG9GaWxlOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICB2YXIgcmVjb3JkcyA9IFsnWycgKyBKU09OLnN0cmluZ2lmeShuZXcgU3RyaW5nKHdp
bmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbikpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvVGltZWxpbmVQYW5lbC5qcwppbmRleCBiNmVjMGRkZTlmY2M4MGE3
MGJlODdmYzdhYTU1NzIwNjBmMzlkNDYyLi42NjFkNmJiOGM0ZDNiMTI3NjczZWY5ZjFiNDcyMTQ5
ZGJkYTU2ZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1RpbWVsaW5lUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UaW1lbGluZVBhbmVsLmpzCkBAIC0zNDksOCArMzQ5LDMxIEBAIFdlYkluc3BlY3Rvci5UaW1l
bGluZVBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9sb2FkRnJvbUZpbGU6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzKQorICAgICAgICB2
YXIgcHJvZ3Jlc3NJbmRpY2F0b3IgPSB0aGlzLl9wcmVwYXJlVG9Mb2FkVGltZWxpbmUoKTsKKyAg
ICAgICAgaWYgKCFwcm9ncmVzc0luZGljYXRvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy5fbW9kZWwubG9hZEZyb21GaWxlKHRoaXMuX2ZpbGVTZWxlY3RvckVsZW1lbnQuZmls
ZXNbMF0sIHByb2dyZXNzSW5kaWNhdG9yKTsKKyAgICAgICAgdGhpcy5fY3JlYXRlRmlsZVNlbGVj
dG9yKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKKyAg
ICAgKi8KKyAgICBsb2FkRnJvbVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgdmFy
IHByb2dyZXNzSW5kaWNhdG9yID0gdGhpcy5fcHJlcGFyZVRvTG9hZFRpbWVsaW5lKCk7CisgICAg
ICAgIGlmICghcHJvZ3Jlc3NJbmRpY2F0b3IpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHRoaXMuX21vZGVsLmxvYWRGcm9tVVJMKHVybCwgcHJvZ3Jlc3NJbmRpY2F0b3IpOworICAgIH0s
CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlByb2dyZXNzSW5kaWNh
dG9yfQorICAgICAqLworICAgIF9wcmVwYXJlVG9Mb2FkVGltZWxpbmU6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLl9vcGVyYXRpb25JblByb2dyZXNzKQorICAgICAgICAgICAg
cmV0dXJuIG51bGw7CiAgICAgICAgIGlmICh0aGlzLnRvZ2dsZVRpbWVsaW5lQnV0dG9uLnRvZ2ds
ZWQpIHsKICAgICAgICAgICAgIHRoaXMudG9nZ2xlVGltZWxpbmVCdXR0b24udG9nZ2xlZCA9IGZh
bHNlOwogICAgICAgICAgICAgdGhpcy5fbW9kZWwuc3RvcFJlY29yZCgpOwpAQCAtMzU4LDggKzM4
MSw3IEBAIFdlYkluc3BlY3Rvci5UaW1lbGluZVBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dmFyIHByb2dyZXNzSW5kaWNhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9ncmVzc0luZGljYXRv
cigpOwogICAgICAgICBwcm9ncmVzc0luZGljYXRvci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5Qcm9ncmVzc0luZGljYXRvci5FdmVudHMuRG9uZSwgdGhpcy5fc2V0T3BlcmF0aW9uSW5Q
cm9ncmVzcy5iaW5kKHRoaXMsIG51bGwpKTsKICAgICAgICAgdGhpcy5fc2V0T3BlcmF0aW9uSW5Q
cm9ncmVzcyhwcm9ncmVzc0luZGljYXRvcik7Ci0gICAgICAgIHRoaXMuX21vZGVsLmxvYWRGcm9t
RmlsZSh0aGlzLl9maWxlU2VsZWN0b3JFbGVtZW50LmZpbGVzWzBdLCBwcm9ncmVzc0luZGljYXRv
cik7Ci0gICAgICAgIHRoaXMuX2NyZWF0ZUZpbGVTZWxlY3RvcigpOworICAgICAgICByZXR1cm4g
cHJvZ3Jlc3NJbmRpY2F0b3I7CiAgICAgfSwKIAogICAgIF9yb290UmVjb3JkOiBmdW5jdGlvbigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2V4dGVybnMu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2V4dGVybnMuanMKaW5kZXgg
YWM1MDhiZjcwZTUwYzM0ZmE3Mjg0ZmZiODEzYzg5OTkwZGYzNDM4ZS4uOTJiODc3ZWQxM2FhNTU2
ZmMwZGVlZDg5YjdiYWZhYzg0NjI3MWY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9leHRlcm5zLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvZXh0ZXJucy5qcwpAQCAtMTQyLDYgKzE0Miw4IEBAIFdlYkluc3BlY3Rvci5j
bG9zZVZpZXdJbkRyYXdlciA9IGZ1bmN0aW9uKCkge30KICAqLwogV2ViSW5zcGVjdG9yLmxvZyA9
IGZ1bmN0aW9uKG1lc3NhZ2UsIG1lc3NhZ2VMZXZlbCwgc2hvd0NvbnNvbGUpIHt9CiAKK1dlYklu
c3BlY3Rvci5zaG93RXJyb3JNZXNzYWdlID0gZnVuY3Rpb24oZXJyb3IpIHt9CisKIFdlYkluc3Bl
Y3Rvci5hZGRNYWluRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbihkb2MpIHt9CiAKIFdlYkluc3Bl
Y3Rvci5vcGVuUmVzb3VyY2UgPSBmdW5jdGlvbih1cmwsIGV4dGVybmFsKSB7fQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA5MWVlNTRm
MDNhNDQzN2FmMzFkY2RiOTdjOTYxMDhmYzNlYTZlN2FjLi5iMzMxOWMxMzkwMzA4YzI3ZWM2MmFi
NWMwOTcxZTMxODg3OGZmNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNTYsNyArNTYsNyBAQCB2YXIgV2ViSW5zcGVjdG9yID0g
ewogICAgICAgICAgICAgcmV0dXJuIHBhbmVsRGVzY3JpcHRvcnM7CiAgICAgICAgIH0KICAgICAg
ICAgdmFyIGFsbERlc2NyaXB0b3JzID0gW2VsZW1lbnRzLCByZXNvdXJjZXMsIG5ldHdvcmssIHNj
cmlwdHMsIHRpbWVsaW5lLCBwcm9maWxlcywgYXVkaXRzLCBjb25zb2xlXTsKLSAgICAgICAgdmFy
IGhpZGRlblBhbmVscyA9IChJbnNwZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFuZWxzKCkgfHwg
IiIpLnNwbGl0KCcsJyk7CisgICAgICAgIHZhciBoaWRkZW5QYW5lbHMgPSBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QuaGlkZGVuUGFuZWxzKCk7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxs
RGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMu
aW5kZXhPZihhbGxEZXNjcmlwdG9yc1tpXS5uYW1lKSA9PT0gLTEpCiAgICAgICAgICAgICAgICAg
cGFuZWxEZXNjcmlwdG9ycy5wdXNoKGFsbERlc2NyaXB0b3JzW2ldKTsKQEAgLTQzMyw3ICs0MzMs
MTQgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47CiAgICAgfQorCiAgICAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSgpOworCisg
ICAgLy8gSW4gY2FzZSBvZiBsb2FkaW5nIGFzIGEgd2ViIHBhZ2Ugd2l0aCBubyBiaW5kaW5ncyAv
IGhhcm5lc3MsIGtpY2sgb2ZmIGluaXRpYWxpemF0aW9uIG1hbnVhbGx5LgorICAgIGlmIChJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuaXNTdHViKSB7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQVBJ
LmRpc3BhdGNoUXVlcnlQYXJhbWV0ZXJzKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5fZG9Mb2Fk
ZWREb25lV2l0aENhcGFiaWxpdGllcygpOworICAgIH0KIH0KIAogV2ViSW5zcGVjdG9yLmRvTG9h
ZGVkRG9uZSA9IGZ1bmN0aW9uKCkKQEAgLTQ1OCw4ICs0NjUsNiBAQCBXZWJJbnNwZWN0b3IuZG9M
b2FkZWREb25lID0gZnVuY3Rpb24oKQogICAgIFBhZ2VBZ2VudC5jYW5PdmVycmlkZURldmljZU1l
dHJpY3MoV2ViSW5zcGVjdG9yLl9pbml0aWFsaXplQ2FwYWJpbGl0eS5iaW5kKFdlYkluc3BlY3Rv
ciwgImNhbk92ZXJyaWRlRGV2aWNlTWV0cmljcyIsIG51bGwpKTsKICAgICBQYWdlQWdlbnQuY2Fu
T3ZlcnJpZGVHZW9sb2NhdGlvbihXZWJJbnNwZWN0b3IuX2luaXRpYWxpemVDYXBhYmlsaXR5LmJp
bmQoV2ViSW5zcGVjdG9yLCAiY2FuT3ZlcnJpZGVHZW9sb2NhdGlvbiIsIG51bGwpKTsKICAgICBQ
YWdlQWdlbnQuY2FuT3ZlcnJpZGVEZXZpY2VPcmllbnRhdGlvbihXZWJJbnNwZWN0b3IuX2luaXRp
YWxpemVDYXBhYmlsaXR5LmJpbmQoV2ViSW5zcGVjdG9yLCAiY2FuT3ZlcnJpZGVEZXZpY2VPcmll
bnRhdGlvbiIsIFdlYkluc3BlY3Rvci5fZG9Mb2FkZWREb25lV2l0aENhcGFiaWxpdGllcy5iaW5k
KFdlYkluc3BlY3RvcikpKTsKLSAgICBpZiAoImRlYnVnTG9hZCIgaW4gV2ViSW5zcGVjdG9yLnF1
ZXJ5UGFyYW1zT2JqZWN0KQotICAgICAgICBXZWJJbnNwZWN0b3IuX2RvTG9hZGVkRG9uZVdpdGhD
YXBhYmlsaXRpZXMoKTsKIH0KIAogV2ViSW5zcGVjdG9yLl9kb0xvYWRlZERvbmVXaXRoQ2FwYWJp
bGl0aWVzID0gZnVuY3Rpb24oKQpAQCAtOTkzLDYgKzk5OCwxMSBAQCBXZWJJbnNwZWN0b3IubG9n
ID0gZnVuY3Rpb24obWVzc2FnZSwgbWVzc2FnZUxldmVsLCBzaG93Q29uc29sZSkKICAgICBsb2dN
ZXNzYWdlKG1lc3NhZ2UpOwogfQogCitXZWJJbnNwZWN0b3Iuc2hvd0Vycm9yTWVzc2FnZSA9IGZ1
bmN0aW9uKGVycm9yKQoreworICAgIFdlYkluc3BlY3Rvci5sb2coZXJyb3IsIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IsIHRydWUpOworfQorCiBXZWJJbnNw
ZWN0b3IuaW5zcGVjdCA9IGZ1bmN0aW9uKHBheWxvYWQsIGhpbnRzKQogewogICAgIHZhciBvYmpl
Y3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBheWxvYWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCBm
MjE1Y2UxNTcwOTI3OTk2OGE1NGJiZDZjYmM5ZjU4MTMzNzM2NzQzLi5kOWZhNzk0MGU1YzI5OGVj
NWI2NmFjM2E2ZDI4NmYwYzZmNjE4YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpAQCAtNzI2LDYgKzcyNiw0MCBAQCBNYXAucHJvdG90
eXBlID0gewogICAgIH0KIH07CiAKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHVybAorICogQHBh
cmFtIHtib29sZWFuPX0gYXN5bmMKKyAqIEBwYXJhbSB7ZnVuY3Rpb24oP3N0cmluZyk9fSBjYWxs
YmFjaworICogQHJldHVybiB7P3N0cmluZ30KKyAqLworZnVuY3Rpb24gbG9hZFhIUih1cmwsIGFz
eW5jLCBjYWxsYmFjaykgCit7CisgICAgZnVuY3Rpb24gb25SZWFkeVN0YXRlQ2hhbmdlZCgpIAor
ICAgIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05F
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAp
IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2sobnVsbCk7IAorICAgfQorCisg
ICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHhoci5vcGVuKCJHRVQiLCB1
cmwsIGFzeW5jKTsKKyAgICBpZiAoYXN5bmMpCisgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFu
Z2UgPSBvblJlYWR5U3RhdGVDaGFuZ2VkOyAgICAgICAgCisgICAgeGhyLnNlbmQobnVsbCk7CisK
KyAgICBpZiAoIWFzeW5jKSB7CisgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIAorICAg
ICAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgIHJldHVybiBudWxsOwor
ICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK30KIAogLyoqCiAgKiBAY29uc3RydWN0b3IK
</data>

          </attachment>
      

    </bug>

</bugzilla>