<?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>31204</bug_id>
          
          <creation_ts>2009-11-06 07:20:10 -0800</creation_ts>
          <short_desc>WebInspector: RR for unit test of timeline data</short_desc>
          <delta_ts>2009-11-11 09:05:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Ayers">zundel</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jaimeyap</cc>
    
    <cc>joepeck</cc>
    
    <cc>knorton</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
    
    <cc>zundel</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161135</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 07:20:10 -0800</bug_when>
    <thetext>This is more just to show a work in progress and show where I am going with the LayoutTests for the Timeline data

There has not yet been an attempt to use Pavel&apos;s recently updated modular test infrastructure.   I&apos;ve been keeping all the test infrastructure in timeline-test-api.js

Currently, the test turns on the timeline, reloads the page, then after the page is loaded the second time, dumps all the inspector console messages and timeline data.

The timeline data is scrubbed of events that appear to be related to the test framework infrastructure by marking nodes with the console.markTimeline API.
The timeline data is also scrubbed of the start/end times which will cause the layout test to fail 

I&apos;m concerned that a test that looks like this will be too brittle and difficult to tell when it needs updating, so I&apos;m considering an even more abbreviated format.  The new format would put each event on a different line, indented with the level of nesting in order to make a diff come out looking nice when the test fails.

Current:

{&quot;children&quot;:[{&quot;data&quot;:{&quot;url&quot;:&quot;file:///Users/zundel/apu-webkit/WebKit/LayoutTests/inspector/timeline-test-api.js&quot;,&quot;lineNumber&quot;:1},&quot;children&quot;:[],&quot;type&quot;:10},{&quot;data&quot;:{&quot;type&quot;:&quot;load&quot;},&quot;children&quot;:[],&quot;type&quot;:0},{&quot;data&quot;:{&quot;url&quot;:&quot;file:///Users/zundel/apu-webkit/WebKit/LayoutTests/inspector/timeline-script-tag-1.html?reload&quot;,&quot;lineNumber&quot;:19},&quot;children&quot;:[],&quot;type&quot;:10}],&quot;type&quot;:4}

would become:

ParseHTML
    EvaluateScript
    EventDispatch
    EvaluateScript

If we wanted more details on a particular event, maybe we could turn them on for one test and get a record like this

timelineExpandEvent(TimelineAgent.RecordType.EventDispatch);

ParseHTML
    EvaluateScript
    EventDispatch :  {&quot;data&quot;:{&quot;type&quot;:&quot;load&quot;},&quot;type&quot;:0}
    EvaluateScript


That way, we can write a test that is sensitive to the change to one event type without causing all the timeline tests to fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161136</commentid>
    <comment_count>1</comment_count>
      <attachid>42650</attachid>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 07:30:13 -0800</bug_when>
    <thetext>Created attachment 42650
WebInspector: Adds a unit test for Timeline records</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161144</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 08:08:01 -0800</bug_when>
    <thetext>(Here&apos;s an updated test output using the simplified tree)

ResourceSendRequest
ResourceReceiveResponse
RecalculateStyles
RecalculateStyles
ResourceSendRequest
ResourceReceiveResponse
ResourceFinish
ParseHTML
----&gt; EvaluateScript
----&gt; EventDispatch
----&gt; EvaluateScript
ResourceFinish
Layout
----&gt; Layout
ParseHTML
EventDispatch
EventDispatch
----&gt; TimerInstall
Paint
Layout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161226</commentid>
    <comment_count>3</comment_count>
      <attachid>42667</attachid>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 12:36:08 -0800</bug_when>
    <thetext>Created attachment 42667
WebInspector: Adds a unit test for Timeline records

I am trying to minimize the amount of data output by the test so that it won&apos;t be brittle.  I could go further by not printing out the ParseHTML timeline record.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161232</commentid>
    <comment_count>4</comment_count>
      <attachid>42667</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-06 13:05:27 -0800</bug_when>
    <thetext>Comment on attachment 42667
WebInspector: Adds a unit test for Timeline records

&gt; -    setTimeout(function() {
&gt; -        if (window.layoutTestController)
&gt; -            layoutTestController.showWebInspector();
&gt; -        window.location.href += &quot;?reload&quot;;
&gt; -    }, 0);
&gt; +    if (window.layoutTestController)
&gt; +        layoutTestController.showWebInspector();

Sync opening of web inspector will fail on windows as far as i remember.

&gt; +            }, 100); // give other scripts a chance to do work before the reload

100ms is not going to work on bots. What &apos;other&apos; scripts and &apos;work&apos; do you refer to here?

&gt; -    }
&gt; -    evaluateInWebInspector(toInject.join(&quot;\n&quot;), doit);
&gt; +    doit();

It is important that doit is called after evaluateInWebInspector invoked its callback.

&gt; +if (window.layoutTestController) {
&gt; +    layoutTestController.dumpAsText();
&gt; +    layoutTestController.waitUntilDone();
&gt; +}

You have it in inspector-test.js already.

&gt; +        }
&gt; +        markCurrentRecordAsOverhead(&quot;onload&quot; + (ignoreLoad ? &quot;:ignoreLoad&quot;: &quot;&quot;));
&gt; +    }, 1000);  // Give timer fires created in script a chance to run.  Is 1 second too long to delay?
&gt; +}

Again, time won&apos;t help. What is the goal here?

&gt; +// We ignore initial load of the page, enable inspector and initiate reload. 
&gt; +// This allows inspector controller to capture events that happen during the 
&gt; +// initial page load, and startup the Timeline to capture all the records from
&gt; +// loading the second page.

I&apos;d like to keep reload logic in one place. We can extend inspector-test to make it call into
frontend_setUp early in the cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161235</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 13:18:11 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 42667 [details])
&gt; &gt; -    setTimeout(function() {
&gt; &gt; -        if (window.layoutTestController)
&gt; &gt; -            layoutTestController.showWebInspector();
&gt; &gt; -        window.location.href += &quot;?reload&quot;;
&gt; &gt; -    }, 0);
&gt; &gt; +    if (window.layoutTestController)
&gt; &gt; +        layoutTestController.showWebInspector();
&gt; 
&gt; Sync opening of web inspector will fail on windows as far as i remember.
&gt; 
&gt; &gt; +            }, 100); // give other scripts a chance to do work before the reload
&gt; 
&gt; 100ms is not going to work on bots. What &apos;other&apos; scripts and &apos;work&apos; do you
&gt; refer to here?

The idea was not for 100ms, but to get behind other setTimeout(xxx,0) methods I had setup in timline-test.js.

&gt; 
&gt; &gt; -    }
&gt; &gt; -    evaluateInWebInspector(toInject.join(&quot;\n&quot;), doit);
&gt; &gt; +    doit();
&gt; 
&gt; It is important that doit is called after evaluateInWebInspector invoked its
&gt; callback.

I modified the code so that the scripts are injected before the reload.   The functions should have long been defined before we get to this point, or is it that you want to defer execution of doit() until all of onload() has finished?

&gt; 
&gt; &gt; +if (window.layoutTestController) {
&gt; &gt; +    layoutTestController.dumpAsText();
&gt; &gt; +    layoutTestController.waitUntilDone();
&gt; &gt; +}
&gt; 
&gt; You have it in inspector-test.js already.

Removed.

&gt; 
&gt; &gt; +        }
&gt; &gt; +        markCurrentRecordAsOverhead(&quot;onload&quot; + (ignoreLoad ? &quot;:ignoreLoad&quot;: &quot;&quot;));
&gt; &gt; +    }, 1000);  // Give timer fires created in script a chance to run.  Is 1 second too long to delay?
&gt; &gt; +}
&gt; 
&gt; Again, time won&apos;t help. What is the goal here?

When I write a test script that does a timer fire, I want to make sure the timer fire goes off before we try to pull down the timeline data.  I want to queue up the analysis after all the other script activity we might perform, like a timer fire or XHR.  I know testing XHR is going to be problematic.  What do you suggest I do?
 
&gt; &gt; +// We ignore initial load of the page, enable inspector and initiate reload. 
&gt; &gt; +// This allows inspector controller to capture events that happen during the 
&gt; &gt; +// initial page load, and startup the Timeline to capture all the records from
&gt; &gt; +// loading the second page.
&gt; 
&gt; I&apos;d like to keep reload logic in one place. We can extend inspector-test to
&gt; make it call into
&gt; frontend_setUp early in the cycle.

Why don&apos;t we have a prefix like frontendSetup_ and inject and execute all of those methods before reload?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161238</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-06 13:24:51 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 42667 [details] [details])
&gt; &gt; &gt; -    setTimeout(function() {
&gt; &gt; &gt; -        if (window.layoutTestController)
&gt; &gt; &gt; -            layoutTestController.showWebInspector();
&gt; &gt; &gt; -        window.location.href += &quot;?reload&quot;;
&gt; &gt; &gt; -    }, 0);
&gt; &gt; &gt; +    if (window.layoutTestController)
&gt; &gt; &gt; +        layoutTestController.showWebInspector();
&gt; &gt; 
&gt; &gt; Sync opening of web inspector will fail on windows as far as i remember.
&gt; &gt; 
&gt; &gt; &gt; +            }, 100); // give other scripts a chance to do work before the reload
&gt; &gt; 
&gt; &gt; 100ms is not going to work on bots. What &apos;other&apos; scripts and &apos;work&apos; do you
&gt; &gt; refer to here?
&gt; 
&gt; The idea was not for 100ms, but to get behind other setTimeout(xxx,0) methods I
&gt; had setup in timline-test.js.
&gt; 

setTimeout(xxx, 0) just queues them. No need in numbers.

&gt; &gt; 
&gt; &gt; &gt; -    }
&gt; &gt; &gt; -    evaluateInWebInspector(toInject.join(&quot;\n&quot;), doit);
&gt; &gt; &gt; +    doit();
&gt; &gt; 
&gt; &gt; It is important that doit is called after evaluateInWebInspector invoked its
&gt; &gt; callback.
&gt; 
&gt; I modified the code so that the scripts are injected before the reload.   The
&gt; functions should have long been defined before we get to this point, or is it
&gt; that you want to defer execution of doit() until all of onload() has finished?

When page loads, it pushes dom into the frontend. The main idea is that test execution continues (and does doit) when frontend received that information, made additional async calls, received response and everything settles down. That&apos;s what you violate here.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; +if (window.layoutTestController) {
&gt; &gt; &gt; +    layoutTestController.dumpAsText();
&gt; &gt; &gt; +    layoutTestController.waitUntilDone();
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; You have it in inspector-test.js already.
&gt; 
&gt; Removed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; +        }
&gt; &gt; &gt; +        markCurrentRecordAsOverhead(&quot;onload&quot; + (ignoreLoad ? &quot;:ignoreLoad&quot;: &quot;&quot;));
&gt; &gt; &gt; +    }, 1000);  // Give timer fires created in script a chance to run.  Is 1 second too long to delay?
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; Again, time won&apos;t help. What is the goal here?
&gt; 
&gt; When I write a test script that does a timer fire, I want to make sure the
&gt; timer fire goes off before we try to pull down the timeline data.  I want to
&gt; queue up the analysis after all the other script activity we might perform,
&gt; like a timer fire or XHR.  I know testing XHR is going to be problematic.  What
&gt; do you suggest I do?
&gt; 

For timers, setTimeout(0) would queue the fires. Isn&apos;t it enough?


&gt; &gt; &gt; +// We ignore initial load of the page, enable inspector and initiate reload. 
&gt; &gt; &gt; +// This allows inspector controller to capture events that happen during the 
&gt; &gt; &gt; +// initial page load, and startup the Timeline to capture all the records from
&gt; &gt; &gt; +// loading the second page.
&gt; &gt; 
&gt; &gt; I&apos;d like to keep reload logic in one place. We can extend inspector-test to
&gt; &gt; make it call into
&gt; &gt; frontend_setUp early in the cycle.
&gt; 
&gt; Why don&apos;t we have a prefix like frontendSetup_ and inject and execute all of
&gt; those methods before reload?

Fine with me, but you would need to care about order. While explicit frontend_setup sounds inline with unit testing in general.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161243</commentid>
    <comment_count>7</comment_count>
      <attachid>42670</attachid>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 14:15:07 -0800</bug_when>
    <thetext>Created attachment 42670
WebInspector: Adds a unit test for Timeline records

Incorporates review feedback, adding the optional execution of frontend_setup() method before the reload is executed.
All timers are set with 0 interval.

all tests in the inspector directory pass, (but the --interval 100 hasn&apos;t finshed yet.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161244</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-06 14:19:00 -0800</bug_when>
    <thetext>(In reply to comment #6)
...
&gt; &gt; 
&gt; &gt; The idea was not for 100ms, but to get behind other setTimeout(xxx,0) methods I
&gt; &gt; had setup in timline-test.js.
&gt; &gt; 
&gt; 
&gt; setTimeout(xxx, 0) just queues them. No need in numbers.

changed all timeouts to 0.

&gt; &gt; &gt; &gt; -    evaluateInWebInspector(toInject.join(&quot;\n&quot;), doit);
&gt; &gt; &gt; &gt; +    doit();
&gt; &gt; &gt; 
&gt; &gt; &gt; It is important that doit is called after evaluateInWebInspector invoked its
&gt; &gt; &gt; callback.
&gt; &gt; 
&gt; &gt; I modified the code so that the scripts are injected before the reload.   The
&gt; &gt; functions should have long been defined before we get to this point, or is it
&gt; &gt; that you want to defer execution of doit() until all of onload() has finished?
&gt; 
&gt; When page loads, it pushes dom into the frontend. The main idea is that test
&gt; execution continues (and does doit) when frontend received that information,
&gt; made additional async calls, received response and everything settles down.
&gt; That&apos;s what you violate here.

added an executeInWebInspector() with a trivial body to invoke doit

&gt; &gt; &gt; &gt; +        }
&gt; &gt; &gt; &gt; +        markCurrentRecordAsOverhead(&quot;onload&quot; + (ignoreLoad ? &quot;:ignoreLoad&quot;: &quot;&quot;));
&gt; &gt; &gt; &gt; +    }, 1000);  // Give timer fires created in script a chance to run.  Is 1 second too long to delay?
&gt; &gt; &gt; &gt; +}
&gt; &gt; &gt; 
&gt; &gt; &gt; Again, time won&apos;t help. What is the goal here?
&gt; &gt; 
&gt; &gt; When I write a test script that does a timer fire, I want to make sure the
&gt; &gt; timer fire goes off before we try to pull down the timeline data.  I want to
&gt; &gt; queue up the analysis after all the other script activity we might perform,
&gt; &gt; like a timer fire or XHR.  I know testing XHR is going to be problematic.  What
&gt; &gt; do you suggest I do?
&gt; &gt; 
&gt; 
&gt; For timers, setTimeout(0) would queue the fires. Isn&apos;t it enough?

Now, the analysis occurs when you ask for it with retrieveTimelineData(). If you ask for it in doit() it will run as soon as possible.


&gt; &gt; &gt; I&apos;d like to keep reload logic in one place. We can extend inspector-test to
&gt; &gt; &gt; make it call into
&gt; &gt; &gt; frontend_setUp early in the cycle.
&gt; &gt; 
&gt; &gt; Why don&apos;t we have a prefix like frontendSetup_ and inject and execute all of
&gt; &gt; those methods before reload?
&gt; 
&gt; Fine with me, but you would need to care about order. While explicit
&gt; frontend_setup sounds inline with unit testing in general.

inspector-test.js now injects the functions before reload, and executes frontend_setup() if it exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161246</commentid>
    <comment_count>9</comment_count>
      <attachid>42670</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-06 14:27:13 -0800</bug_when>
    <thetext>Comment on attachment 42670
WebInspector: Adds a unit test for Timeline records

&gt; +    // Synchronous opening of web inspector may fail on Windows

Wait a minute, we don&apos;t want that - we do run these on windows bots and need tests to succeed. You&apos;ll need to put stuff under onload / ignoreLoad into setTimeout to queue I guess once this one is reverted.


&gt; +        // Invoke a setup method if it has been specified
&gt; +        toInject.push(&quot;frontend_setup ? frontend_setup() : undefined&quot;);

&quot;(if (frontend_setup) frontend_setup();)&quot; ?



General comments: 
1. { } are used for single-line ifs all over the place
2. Use === instead of == for primitive types

Otherwise looks good.

Why added svn:executable flag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161778</commentid>
    <comment_count>10</comment_count>
      <attachid>42798</attachid>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-09 14:00:16 -0800</bug_when>
    <thetext>Created attachment 42798
WebInspector: Adds a unit test for Timeline records

Added a few changes since the last patch:

- Addressed braces style comment
- Added &apos;timeline&apos; to name of all functions meant to be used in tests
- Changed the output of the test to only print the MarkTImeline node and its ancestors.  Intended to make the test less brittle to changes not related to the script tag
- Changed the output of the test to print the properties of the EvaluateScript timeline record.  If there is a new property added or one removed, the test will need to be updated.

Tested this patch with --iterations 100 on all scripts in the LayoutTests/inspetor directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162193</commentid>
    <comment_count>11</comment_count>
      <attachid>42889</attachid>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-10 13:33:45 -0800</bug_when>
    <thetext>Created attachment 42889
WebInspector: Adds a unit test for Timeline records

Fixes some formatting glitches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162375</commentid>
    <comment_count>12</comment_count>
      <attachid>42889</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-11-11 00:08:28 -0800</bug_when>
    <thetext>Comment on attachment 42889
WebInspector: Adds a unit test for Timeline records

&gt; +        var invokeSetup = false;

Is this unused?

&gt; +}
&gt; \ No newline at end of file

Please add newline.

Otherwise r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162469</commentid>
    <comment_count>13</comment_count>
      <attachid>42960</attachid>
    <who name="Eric Ayers">zundel</who>
    <bug_when>2009-11-11 07:09:11 -0800</bug_when>
    <thetext>Created attachment 42960
WebInspector: Adds a unit test for Timeline records

Addresses review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162502</commentid>
    <comment_count>14</comment_count>
      <attachid>42960</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-11 09:05:39 -0800</bug_when>
    <thetext>Comment on attachment 42960
WebInspector: Adds a unit test for Timeline records

Clearing flags on attachment: 42960

Committed r50809: &lt;http://trac.webkit.org/changeset/50809&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162503</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-11 09:05:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42650</attachid>
            <date>2009-11-06 07:30:13 -0800</date>
            <delta_ts>2009-11-06 12:36:08 -0800</delta_ts>
            <desc>WebInspector: Adds a unit test for Timeline records</desc>
            <filename>webkit-31204-1.patch</filename>
            <type>text/plain</type>
            <size>9899</size>
            <attacher name="Eric Ayers">zundel</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNTk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEtMDYgIEVyaWMgWi4gQXllcnMgIDx6
dW5kZWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgdGVzdCB0aGF0IGR1bXBzIHRoZSB0aW1lbGluZSBkYXRhIGZvciBh
IHNpbXBsZSBzY3JpcHQgdGFnLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTIwNAorCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlw
dC10YWctMS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci90aW1lbGlu
ZS1zY3JpcHQtdGFnLTEuaHRtbDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5l
LXRlc3QtYXBpLmpzOiBBZGRlZC4KKyAgICAgICAgKG9ubG9hZC5zZXRUaW1lb3V0Lik6CisgICAg
ICAgIChvbmxvYWQpOgorICAgICAgICAoKToKKyAgICAgICAgKHN0cmlwTm9uRGV0ZXJtaW5pc3Rp
Y0ZpZWxkcyk6CisgICAgICAgIChpc092ZXJoZWFkUmVjb3JkKToKKyAgICAgICAgKG1hcmtDdXJy
ZW50UmVjb3JkQXNPdmVyaGVhZCk6CisgICAgICAgIChldmFsdWF0ZUluV2ViSW5zcGVjdG9yKToK
KyAgICAgICAgKG5vdGlmeURvbmUpOgorICAgICAgICAob3V0cHV0KToKKyAgICAgICAgKGR1bXBD
b25zb2xlTWVzc2FnZXMpOgorICAgICAgICAoc3RhcnRUaW1lbGluZVByb2ZpbGVyLldlYkluc3Bl
Y3Rvci5hZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAgICAgKHN0YXJ0VGltZWxpbmVQcm9maWxl
ci53aW5kb3cuZ2V0VGltZWxpbmVSZXN1bHRzKToKKyAgICAgICAgKHN0YXJ0VGltZWxpbmVQcm9m
aWxlcik6CisgICAgICAgICh3aW5kb3cuZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCk6Cisg
ICAgICAgIChyZWxvYWRQYWdlKToKKwogMjAwOS0xMS0wNCAgU2hpbmljaGlybyBIYW1hamkgIDxo
YW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlw
dC10YWctMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0
b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMiBAQAorVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gb2YgYW4g
SFRNTCBzY3JpcHQgdGFnLgorCitUaGUgc2NyaXB0IGJsb2NrcyBmb3IgMSBzZWNvbmQuCisKK0R1
bXBpbmcgUmVzdWx0cworeyJkYXRhIjp7ImlkZW50aWZpZXIiOjMsInVybCI6ImZpbGU6Ly8vVXNl
cnMvenVuZGVsL2FwdS13ZWJraXQvV2ViS2l0L0xheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGlu
ZS1zY3JpcHQtdGFnLTEuaHRtbD9yZWxvYWQiLCJyZXF1ZXN0TWV0aG9kIjoiR0VUIiwiaXNNYWlu
UmVzb3VyY2UiOnRydWV9LCJ0eXBlIjoxMn0KK3siZGF0YSI6eyJpZGVudGlmaWVyIjozLCJzdGF0
dXNDb2RlIjowLCJtaW1lVHlwZSI6InRleHQvaHRtbCIsImV4cGVjdGVkQ29udGVudExlbmd0aCI6
Njk0fSwidHlwZSI6MTN9Cit7ImNoaWxkcmVuIjpbXSwidHlwZSI6Mn0KK3siY2hpbGRyZW4iOltd
LCJ0eXBlIjoyfQoreyJkYXRhIjp7ImlkZW50aWZpZXIiOjQsInVybCI6ImZpbGU6Ly8vVXNlcnMv
enVuZGVsL2FwdS13ZWJraXQvV2ViS2l0L0xheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS10
ZXN0LWFwaS5qcyIsInJlcXVlc3RNZXRob2QiOiJHRVQiLCJpc01haW5SZXNvdXJjZSI6ZmFsc2V9
LCJ0eXBlIjoxMn0KK3siZGF0YSI6eyJpZGVudGlmaWVyIjo0LCJzdGF0dXNDb2RlIjowLCJtaW1l
VHlwZSI6ImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIsImV4cGVjdGVkQ29udGVudExlbmd0aCI6
NTE4NH0sInR5cGUiOjEzfQoreyJkYXRhIjp7ImlkZW50aWZpZXIiOjQsImRpZEZhaWwiOmZhbHNl
fSwidHlwZSI6MTR9Cit7ImNoaWxkcmVuIjpbeyJkYXRhIjp7InVybCI6ImZpbGU6Ly8vVXNlcnMv
enVuZGVsL2FwdS13ZWJraXQvV2ViS2l0L0xheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS10
ZXN0LWFwaS5qcyIsImxpbmVOdW1iZXIiOjF9LCJjaGlsZHJlbiI6W10sInR5cGUiOjEwfSx7ImRh
dGEiOnsidHlwZSI6ImxvYWQifSwiY2hpbGRyZW4iOltdLCJ0eXBlIjowfSx7ImRhdGEiOnsidXJs
IjoiZmlsZTovLy9Vc2Vycy96dW5kZWwvYXB1LXdlYmtpdC9XZWJLaXQvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1sP3JlbG9hZCIsImxpbmVOdW1iZXIiOjE5
fSwiY2hpbGRyZW4iOltdLCJ0eXBlIjoxMH1dLCJ0eXBlIjo0fQoreyJkYXRhIjp7ImlkZW50aWZp
ZXIiOjMsImRpZEZhaWwiOmZhbHNlfSwidHlwZSI6MTR9Cit7ImNoaWxkcmVuIjpbeyJjaGlsZHJl
biI6W10sInR5cGUiOjF9XSwidHlwZSI6MX0KK3siY2hpbGRyZW4iOltdLCJ0eXBlIjo0fQoreyJk
YXRhIjp7InR5cGUiOiJET01Db250ZW50TG9hZGVkIn0sImNoaWxkcmVuIjpbXSwidHlwZSI6MH0K
K3siZGF0YSI6eyJ0eXBlIjoibG9hZCJ9LCJjaGlsZHJlbiI6W3siZGF0YSI6eyJ0aW1lcklkIjo0
NCwidGltZW91dCI6MTAwMCwic2luZ2xlU2hvdCI6dHJ1ZX0sInR5cGUiOjV9XSwidHlwZSI6MH0K
K3siZGF0YSI6eyJ4IjowLCJ5IjowLCJ3aWR0aCI6ODAwLCJoZWlnaHQiOjM1MH0sImNoaWxkcmVu
IjpbXSwidHlwZSI6M30KK3siY2hpbGRyZW4iOltdLCJ0eXBlIjoxfQoreyJkYXRhIjp7InRpbWVy
SWQiOjYyLCJ0aW1lb3V0IjowLCJzaW5nbGVTaG90Ijp0cnVlfSwidHlwZSI6NX0KKwpJbmRleDog
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFn
LTEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJ0aW1lbGluZS10ZXN0LWFwaS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxi
b2R5IG9ubG9hZD0ib25sb2FkKCkiPgorPHA+CitUZXN0cyB0aGUgVGltZWxpbmUgQVBJIGluc3Ry
dW1lbnRhdGlvbiBvZiBhbiBIVE1MIHNjcmlwdCB0YWcuCis8L3A+Cis8cD4KK1RoZSBzY3JpcHQg
YmxvY2tzIGZvciAxIHNlY29uZC4KKzwvcD4KKworPGRpdiBpZD0ib3V0cHV0Ij4KKzwvZGl2Pgor
Cis8IS0tIEFkZCBjdXN0b20gc3R1ZmYgYmVsb3cgdGhpcyBsaW5lIC0tPgorCis8c2NyaXB0Pgor
ICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZSgpOworICAgICB2YXIgdGltZW91dCA9IDEwMDA7Cisg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAgICAg
IGlmIChub3cuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpID4gdGltZW91dCkKKyAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAKKyAgICAgICAgIC8vIGJ1c3kgd29yay4KKyAgICAgICAgIHZh
ciBidXN5Q291bnQ7CisgICAgICAgICBmb3IgKGJ1c3lDb3VudCA9IDA7IGJ1c3lDb3VudCA8IDEw
MDAgOyBidXN5Q291bnQrKykgeworICAgICAgICAgICAgIHZhciBmb28gPSB0aW1lb3V0ICogYnVz
eUNvdW50IC8gc3RhcnQuZ2V0TWlsbGlzZWNvbmRzKCk7CisgICAgICAgICB9CisgICAgIH0KKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Rp
bWVsaW5lLXRlc3QtYXBpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90
aW1lbGluZS10ZXN0LWFwaS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rv
ci90aW1lbGluZS10ZXN0LWFwaS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYgQEAKK3Zh
ciBsYXN0Q2FsbElkID0gMDsKK3ZhciBjYWxsYmFja3MgPSB7fTsKK3ZhciBpZ25vcmVMb2FkID0g
KHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIj9yZWxvYWQiKSA9PSAtMSk7Cit2YXIgb3Zl
cmhlYWRNYXJrID0gIioqKk92ZXJoZWFkKioqIjsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIG9ubG9h
ZCgpCit7CisgICAgaWYgKGlnbm9yZUxvYWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgICAgIG91dHB1dCgiRHVtcGluZyBSZXN1bHRzIik7CisgICAgICAgICAg
ICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJkdW1wQ29uc29sZU1lc3NhZ2VzKCkiLCBmdW5jdGlv
bihjb25zb2xlTWVzc2FnZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgbnVtQ29uc29sZU1lc3Nh
Z2VzID0gY29uc29sZU1lc3NhZ2VzID8gY29uc29sZU1lc3NhZ2VzLmxlbmd0aCA6IDA7CisgICAg
ICAgICAgICAgICAgaWYgKG51bUNvbnNvbGVNZXNzYWdlcykKKyAgICAgICAgICAgICAgICAgICAg
b3V0cHV0KCJJbnNwZWN0b3IgQ29uc29sZSBNZXNzYWdlczogIik7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1Db25zb2xlTWVzc2FnZXM7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQoIiAgICAiICsgY29uc29sZU1lc3NhZ2VzW2ldKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiZ2V0VGlt
ZWxpbmVSZXN1bHRzKCkiLCBmdW5jdGlvbih0aW1lbGluZVJlY29yZHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0VGltZWxpbmVSZXN1bHRzKHRpbWVsaW5lUmVjb3Jkcyk7CisgICAgICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FsbGJhY2sgdG8gZmlyZQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm8gdGVzdCBpbiBwcm9ncmVzcywgTmVlZCB0byBz
aHV0IGRvd24gdGhlIGluc3BlY3RvciB3aW5kb3cgaW4gYW55IGNhc2UuCisgICAgICAgICAgICBu
b3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgbWFya0N1cnJlbnRSZWNvcmRBc092ZXJo
ZWFkKCJvbmxvYWQiICsgKGlnbm9yZUxvYWQgPyAiOmlnbm9yZUxvYWQiOiAiIikpOworICAgIH0s
IDEwMDApOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBhIHNpbXBsaWZpZWQgdmVyc2lv
biBvZiB0aGUgVGltZWxpbmUgZGF0YSB0byB0aGUKKy8vIG91dHB1dCBkaXYuCitmdW5jdGlvbiBv
dXRwdXRUaW1lbGluZVJlc3VsdHModGltZWxpbmVSZWNvcmRzKSB7CisgICAgdmFyIG51bVJlY29y
ZHMgPSB0aW1lbGluZVJlY29yZHMubGVuZ3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVt
UmVjb3JkczsgKytpKSB7CisgICAgICAgIHZhciByZWNvcmQgPSB0aW1lbGluZVJlY29yZHNbaV07
CisgICAgICAgIGlmICghaXNPdmVyaGVhZFJlY29yZChyZWNvcmQpKSB7CisgICAgICAgICAgICBz
dHJpcE5vbkRldGVybWluaXN0aWNGaWVsZHMocmVjb3JkKTsKKyAgICAgICAgICAgIG91dHB1dChK
U09OLnN0cmluZ2lmeShyZWNvcmQpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24g
c3RyaXBOb25EZXRlcm1pbmlzdGljRmllbGRzKHJlY29yZCkgeworICAgIC8vIFN0cmlwIG91dCBz
dGFydFRpbWUgYW5kIGVuZFRpbWUsIHRoZXkgYXJlIG5vdCBkZXRlcm1pbmlzdGljCisgICAgZGVs
ZXRlIHJlY29yZC5lbmRUaW1lOworICAgIGRlbGV0ZSByZWNvcmQuc3RhcnRUaW1lOworICAgIHZh
ciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/ICByZWNvcmQuY2hpbGRyZW4ubGVuZ3Ro
IDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKKyAgICAg
ICAgc3RyaXBOb25EZXRlcm1pbmlzdGljRmllbGRzKHJlY29yZC5jaGlsZHJlbltpXSk7CisgICAg
fQorfQorCitmdW5jdGlvbiBpc092ZXJoZWFkUmVjb3JkKHJlY29yZCkgeworICAgIGlmIChyZWNv
cmQudHlwZSA9PSAxMSAmJiByZWNvcmQuZGF0YS5tZXNzYWdlLmluZGV4T2Yob3ZlcmhlYWRNYXJr
KSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgdmFyIG51bUNoaWxkcmVuID0gcmVj
b3JkLmNoaWxkcmVuID8gIHJlY29yZC5jaGlsZHJlbi5sZW5ndGggOiAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgeworICAgICAgICBpZiAoaXNPdmVyaGVhZFJl
Y29yZChyZWNvcmQuY2hpbGRyZW5baV0pKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgbWFyayB3aWxs
IGhlbHAgdGhlIHRlc3QgYW5hbHlzaXMgY3VsbCBvdXQgcmVjb3JkcyB0aGF0IGFyZSBvdmVyaGVh
ZC4KK2Z1bmN0aW9uIG1hcmtDdXJyZW50UmVjb3JkQXNPdmVyaGVhZChhcmcpIHsKKyAgICB2YXIg
c3VmZml4ID0gJyc7CisgICAgaWYgKGFyZykgeworICAgICAgICBzdWZmaXggPSAiOiAiICsgYXJn
OworICAgIH0KKyAgICBjb25zb2xlLm1hcmtUaW1lbGluZShvdmVyaGVhZE1hcmsgKyBzdWZmaXgp
OworfQorCitmdW5jdGlvbiBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKHNjcmlwdCwgY2FsbGJhY2sp
Cit7CisgICAgdmFyIGNhbGxJZCA9IGxhc3RDYWxsSWQrKzsKKyAgICBjYWxsYmFja3NbY2FsbElk
XSA9IGNhbGxiYWNrOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNhbGxJZCwgc2NyaXB0KTsKKyAgICAgICAgbWFy
a0N1cnJlbnRSZWNvcmRBc092ZXJoZWFkKCdldmFsdWF0ZUluV2ViSW5zcGVjdG9yJyk7CisgICAg
fSwgMCk7Cit9CisKK2Z1bmN0aW9uIG5vdGlmeURvbmUoKQoreworICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsb3NlV2ViSW5zcGVjdG9yKCk7CisgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAg
ICB9LCAwKTsKK30KKworZnVuY3Rpb24gb3V0cHV0KHRleHQpCit7CisgICAgdmFyIG91dHB1dCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKTsKKyAgICBvdXRwdXQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOworICAgIG91dHB1dC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKworLy8gSW5qZWN0ZWQgaW50byBp
bnNwZWN0b3Igd2luZG93CitmdW5jdGlvbiBkdW1wQ29uc29sZU1lc3NhZ2VzKCkKK3sKKyAgICB2
YXIgcmVzdWx0ID0gW107CisgICAgdmFyIG1lc3NhZ2VzID0gV2ViSW5zcGVjdG9yLmNvbnNvbGUu
bWVzc2FnZXM7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7ICsraSkg
eworICAgICAgICB2YXIgZWxlbWVudCA9IG1lc3NhZ2VzW2ldLnRvTWVzc2FnZUVsZW1lbnQoKTsK
KyAgICAgICAgcmVzdWx0LnB1c2goeyB0ZXh0OiBlbGVtZW50LnRleHRDb250ZW50LnJlcGxhY2Uo
L1x1MjAwYi9nLCAiIiksIGNsYXp6OiBlbGVtZW50LmdldEF0dHJpYnV0ZSgiY2xhc3MiKX0pOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBJbmplY3RlZCBpbnRvIEluc3BlY3Rv
ciB3aW5kb3cKK2Z1bmN0aW9uIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpIHsKKyAgICB3aW5kb3cu
dGltZWxpbmVSZXN1bHRzID0gbmV3IEFycmF5KCk7CisgICAgV2ViSW5zcGVjdG9yLmFkZFJlY29y
ZFRvVGltZWxpbmUgPSBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAgd2luZG93LnRpbWVsaW5lUmVz
dWx0cy5wdXNoKGFyZyk7CisgICAgfTsKKyAgICB3aW5kb3cuZ2V0VGltZWxpbmVSZXN1bHRzID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGltZWxpbmVSZXN1bHRzOworICAgIH07Cisg
ICAgSW5zcGVjdG9yQ29udHJvbGxlci5zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKK30KKword2lu
ZG93LmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQgPSBmdW5jdGlvbihjYWxsSWQsIGpzb25S
ZXN1bHQpCit7CisgICAgaWYgKGNhbGxiYWNrc1tjYWxsSWRdKSB7CisgICAgICAgIGNhbGxiYWNr
c1tjYWxsSWRdLmNhbGwodGhpcywgSlNPTi5wYXJzZShqc29uUmVzdWx0KSk7CisgICAgICAgIGRl
bGV0ZSBjYWxsYmFja3NbY2FsbElkXTsKKyAgICB9Cit9OworCitmdW5jdGlvbiByZWxvYWRQYWdl
KCkgeworICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmICs9ICI/cmVsb2FkIjsKKyAgICBtYXJrQ3Vy
cmVudFJlY29yZEFzT3ZlcmhlYWQoJ3JlbG9hZCcpOworfQorCisvLyBXZSBpZ25vcmUgaW5pdGlh
bCBsb2FkIG9mIHRoZSBwYWdlLCBlbmFibGUgaW5zcGVjdG9yIGFuZCBpbml0aWF0ZSByZWxvYWQu
IAorLy8gVGhpcyBhbGxvd3MgaW5zcGVjdG9yIGNvbnRyb2xsZXIgdG8gY2FwdHVyZSBldmVudHMg
dGhhdCBoYXBwZW4gZHVyaW5nIHRoZSAKKy8vIGluaXRpYWwgcGFnZSBsb2FkLCBhbmQgc3RhcnR1
cCB0aGUgVGltZWxpbmUgdG8gY2FwdHVyZSBhbGwgdGhlIHJlY29yZHMgZnJvbQorLy8gbG9hZGlu
ZyB0aGUgc2Vjb25kIHBhZ2UuCitpZiAoaWdub3JlTG9hZCkgeworICAgIHZhciB0b0luamVjdCA9
IGR1bXBDb25zb2xlTWVzc2FnZXMudG9TdHJpbmcoKQorICAgICAgICArIHN0YXJ0VGltZWxpbmVQ
cm9maWxlci50b1N0cmluZygpICsgIlxuIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOyI7CisKKyAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zaG93V2Vi
SW5zcGVjdG9yKCk7CisgICAgICAgICAgICAgZXZhbHVhdGVJbldlYkluc3BlY3Rvcih0b0luamVj
dCwgcmVsb2FkUGFnZSk7CisgICAgICAgICB9CisgICAgIH0sIDApOworfQorCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC1hcGkuanMKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42667</attachid>
            <date>2009-11-06 12:36:08 -0800</date>
            <delta_ts>2009-11-09 14:00:16 -0800</delta_ts>
            <desc>WebInspector: Adds a unit test for Timeline records</desc>
            <filename>webkit-31204-2.patch</filename>
            <type>text/plain</type>
            <size>10709</size>
            <attacher name="Eric Ayers">zundel</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNjAzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTEtMDYgIEVyaWMgWi4gQXllcnMgIDx6
dW5kZWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgdGVzdCB0aGF0IGR1bXBzIHRoZSB0aW1lbGluZSBkYXRhIGZvciBh
IHNpbXBsZSBzY3JpcHQgdGFnLgorICAgICAgICBTb21lIHVwZGF0ZXMgdG8gaW5zcGVjdG9yLXRl
c3QuanMgdG8gYWxsb3cgdGhlIHRpbWVsaW5lLXRlc3QuanMgdG8gCisgICAgICAgIGRvIHdvcmsg
aW4gdGhlIGZyb250ZW5kIGJlZm9yZSB0aGUgcGFnZSBpcyByZWxvYWRlZC4KKyAgICAgICAgCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTIwNAorICAg
ICAgICAKKyAgICAgICAgKiBpbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanM6CisgICAgICAgIChv
bmxvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0x
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci90aW1lbGluZS10ZXN0LmpzOiBBZGRl
ZC4KKyAgICAgICAgKHJldHJpZXZlVGltZWxpbmVEYXRhKToKKyAgICAgICAgKCk6CisgICAgICAg
IChzdHJpcE5vbkRldGVybWluaXN0aWNGaWVsZHMpOgorICAgICAgICAoaXNPdmVyaGVhZFJlY29y
ZCk6CisgICAgICAgIChtYXJrQ3VycmVudFJlY29yZEFzT3ZlcmhlYWQpOgorICAgICAgICAodGlt
ZWxpbmVBZ2VudFR5cGVUb1N0cmluZyk6CisgICAgICAgIChmcm9udGVuZF9zdGFydFRpbWVsaW5l
UHJvZmlsZXIud2luZG93LldlYkluc3BlY3Rvci5hZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAg
ICAgKGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChmcm9udGVuZF9n
ZXRUaW1lbGluZVJlc3VsdHMpOgorCiAyMDA5LTExLTA0ICBTaGluaWNoaXJvIEhhbWFqaSAgPGhh
bWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCklu
ZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCShyZXZpc2lvbiA1MDYw
MCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTAsMjggKzEwLDMzIEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKIC8vIHRvIGNhcHR1cmUgZXZlbnRzIHRoYXQgaGFwcGVuIGR1cmluZyB0aGUgaW5pdGlhbCBw
YWdlIGxvYWQuCiB2YXIgaWdub3JlTG9hZCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2Yo
Ij9yZWxvYWQiKSA9PT0gLTE7CiBpZiAoaWdub3JlTG9hZCkgewotICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zaG93V2ViSW5zcGVjdG9yKCk7Ci0gICAgICAg
IHdpbmRvdy5sb2NhdGlvbi5ocmVmICs9ICI/cmVsb2FkIjsKLSAgICB9LCAwKTsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5zaG93V2ViSW5zcGVjdG9yKCk7CiB9CiAKIGZ1bmN0aW9uIG9ubG9hZCgpCiB7Ci0gICAgaWYg
KGlnbm9yZUxvYWQpCisgICAgaWYgKGlnbm9yZUxvYWQpIHsKKyAgICAgICAgLy8gSW5qZWN0IHNj
cmlwdHMgaW50byB0aGUgZnJvbnRlbmQgb24gdGhlIGZpcnN0IHBhc3MuICBTb21lIG90aGVyIGxv
Z2ljIG1heSB3YW50IHRvCisgICAgICAgIC8vIHVzZSB0aGVtIGJlZm9yZSB0aGUgcmVsb2FkLgor
ICAgICAgICB2YXIgdG9JbmplY3QgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB3aW5k
b3cpIHsKKyAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoImZyb250ZW5kXyIpID09PSAwICYm
IHR5cGVvZiB3aW5kb3dbbmFtZV0gPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgICB0
b0luamVjdC5wdXNoKHdpbmRvd1tuYW1lXS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKHRvSW5qZWN0LmpvaW4oIlxu
IiksIGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArPSAiP3JlbG9hZCI7CisgICAg
ICAgICAgICB9LCAxMDApOyAvLyBnaXZlIG90aGVyIHNjcmlwdHMgYSBjaGFuY2UgdG8gZG8gd29y
ayBiZWZvcmUgdGhlIHJlbG9hZAorICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAogICAgIHZhciBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CiAgICAgb3V0cHV0RWxlbWVudC5pZCA9ICJvdXRwdXQiOwogICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQob3V0cHV0RWxlbWVudCk7Ci0KLSAgICB2YXIgdG9JbmplY3QgPSBbXTsKLSAgICBm
b3IgKHZhciBuYW1lIGluIHdpbmRvdykgewotICAgICAgICBpZiAobmFtZS5pbmRleE9mKCJmcm9u
dGVuZF8iKSA9PT0gMCAmJiB0eXBlb2Ygd2luZG93W25hbWVdID09PSAiZnVuY3Rpb24iKQotICAg
ICAgICAgICAgdG9JbmplY3QucHVzaCh3aW5kb3dbbmFtZV0udG9TdHJpbmcoKSk7Ci0gICAgfQot
ICAgIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IodG9JbmplY3Quam9pbigiXG4iKSwgZG9pdCk7Cisg
ICAgZG9pdCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlYiBpbnNwZWN0b3Igd2luZG93IGlzIGNs
b3NlZCBiZWZvcmUgdGhlIHRlc3QgaXMgaW50ZXJydXB0ZWQuCiAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFn
LTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1l
bGluZS1zY3JpcHQtdGFnLTEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0
aW9uIG9mIGFuIEhUTUwgc2NyaXB0IHRhZy4KKworUGFyc2VIVE1MCistLS0tPiBFdmFsdWF0ZVNj
cmlwdAorLS0tLT4gRXZlbnREaXNwYXRjaAorLS0tLT4gRXZhbHVhdGVTY3JpcHQKKy0tLS0+IEV2
ZW50RGlzcGF0Y2gKKy0tLS0+IEV2YWx1YXRlU2NyaXB0CistLS0tPiBFdmFsdWF0ZVNjcmlwdAor
LS0tLS0tLS0+IE1hcmtUaW1lbGluZQorU2NyaXB0IHRhZyBmb3VuZCBpbiB0aW1lbGluZSBkYXRh
OiBTQ1JJUFQgVEFHCisKSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3Jp
cHQtdGFnLTEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxp
bmUtc2NyaXB0LXRhZy0xLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9pbnNwZWN0
b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzAg
QEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iaW5zcGVjdG9yLXRlc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InRpbWVsaW5lLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4K
K3ZhciB0aW1lbGluZU1hcmsgPSAiU0NSSVBUIFRBRyI7CisKK2Z1bmN0aW9uIGFuYWx5emVFdmFs
dWF0ZVNjcmlwdChyZWNvcmQpIHsKKyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hpbGRy
ZW4gPyByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoIDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bUNoaWxkcmVuOyArK2kpIHsKKyAgICAgICAgdmFyIGNoaWxkID0gcmVjb3JkLmNoaWxkcmVu
W2ldOworICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSB0aW1lbGluZUFnZW50UmVjb3JkVHlwZS5N
YXJrVGltZWxpbmUKKyAgICAgICAgICAgICYmIGNoaWxkLmRhdGEubWVzc2FnZSA9PSB0aW1lbGlu
ZU1hcmspIHsKKyAgICAgICAgICAgIC8vIEZvdW5kIGl0ISAgVGhpcyBpcyB0aGUgc2NyaXB0IHRh
ZyB3ZSB3ZXJlIGhvcGluZyB0byBhbm5vdGF0ZS4KKyAgICAgICAgICAgIG91dHB1dCgiU2NyaXB0
IHRhZyBmb3VuZCBpbiB0aW1lbGluZSBkYXRhOiAiICsgY2hpbGQuZGF0YS5tZXNzYWdlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworZnVuY3Rpb24gYW5hbHl6ZVBhcnNlSFRNTChyZWNvcmQpIHsKKyAgICAvLyBOb3cs
IGR1bXAgdGhlIHNwZWNpZmljIFNjcmlwdCB0YWcgdGhhdCBpbmNsdWRlcyB0aGUgTWFya2VyIGFu
ZCBkdW1wIGl0IGluIGRldGFpbC4KKyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hpbGRy
ZW4gPyByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoIDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bUNoaWxkcmVuOyArK2kpIHsKKyAgICAgICAgdmFyIGNoaWxkID0gcmVjb3JkLmNoaWxkcmVu
W2ldOworICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSB0aW1lbGluZUFnZW50UmVjb3JkVHlwZS5F
dmFsdWF0ZVNjcmlwdCkgeworICAgICAgICAgICAgaWYgKGFuYWx5emVFdmFsdWF0ZVNjcmlwdChj
aGlsZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9ICAKKworLy8gTG9vayBmb3IgdGhl
IFBhcnNlSHRtbC0+RXZhbHVhdGVTY3JpcHQtPk1hcmtUaW1lbGluZSB0aGF0IGNvcnJlbGF0ZXMg
CisvLyB0byB0aGUgPHNjcmlwdD4gdGFnIGJlbG93LgorZnVuY3Rpb24gYW5hbHl6ZVRpbWVsaW5l
RGF0YSh0aW1lbGluZVJlY29yZHMpIAoreworICAgIC8vIFNlYXJjaCBmb3IgYSBQYXJzZUhUTUwg
cmVjb3JkCisgICAgdmFyIG51bVJlY29yZHMgPSB0aW1lbGluZVJlY29yZHMubGVuZ3RoOworICAg
IGZvciAodmFyIGkgPSAwIDsgaSA8IG51bVJlY29yZHM7ICsraSkgeworICAgICAgICB2YXIgcmVj
b3JkID0gdGltZWxpbmVSZWNvcmRzW2ldOworICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT0gdGlt
ZWxpbmVBZ2VudFJlY29yZFR5cGUuUGFyc2VIVE1MKSB7CisgICAgICAgICAgICAvLyBGb3VuZCBQ
YXJzZUhUTUwgVGFnCisgICAgICAgICAgICBkdW1wUmVjb3JkKHJlY29yZCwgMCk7CisgICAgICAg
ICAgICBpZiAoIWFuYWx5emVQYXJzZUhUTUwocmVjb3JkKSkgeworICAgICAgICAgICAgICAgIG91
dHB1dCgiRmFpbGVkIHRvIGZpbmQgdGltZWxpbmUgbWFyazogIiArIHRpbWVsaW5lTWFyayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvaXQoKSB7Cisg
ICAgcmV0cmlldmVUaW1lbGluZURhdGEoYW5hbHl6ZVRpbWVsaW5lRGF0YSk7Cit9CisKKzwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxwPgorVGVzdHMgdGhl
IFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gb2YgYW4gSFRNTCBzY3JpcHQgdGFnLgorPC9w
PgorCis8c2NyaXB0PgorICAgICBjb25zb2xlLm1hcmtUaW1lbGluZSh0aW1lbGluZU1hcmspOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
dGltZWxpbmUtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGlt
ZWxpbmUtdGVzdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1l
bGluZS10ZXN0LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorLy8gVXNlZCB0byBt
YXJrIHRpbWVsaW5lIHJlY29yZHMgYXMgYmVsb25naW5nIHRvIHRoZSB0ZXN0IGZyYW1ld29yay4K
K3ZhciBvdmVyaGVhZE1hcmsgPSAiKioqT3ZlcmhlYWQqKioiOworCisvLyBUaW1lbGluZUFnZW50
IHJlY29yZCB0eXBlIGRlZmluaXRpb25zIGZyb20gdGhlIGluc3BlY3RvcgordmFyIHRpbWVsaW5l
QWdlbnRSZWNvcmRUeXBlID0ge307CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCisvLyBDYWxsIHRoaXMgZnVuY3Rpb24g
ZnJvbSB0aGUgZG9pdCgpIGZ1bmN0aW9uIGluIHRoZSBtYWluIHRlc3QgcGFnZS4KKy8vIFBhc3Mg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgZ2V0IGFuIGFycmF5IG9mIHRpbWVsaW5lIGRhdGEgdG8gcHJv
Y2Vzcy4KK2Z1bmN0aW9uIHJldHJpZXZlVGltZWxpbmVEYXRhKGFuYWx5emVGdW5jdGlvbikKK3sK
KyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJXZWJJbnNwZWN0b3IuVGltZWxpbmVBZ2VudC5S
ZWNvcmRUeXBlIiwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHRpbWVsaW5lQWdlbnRSZWNv
cmRUeXBlID0gcmVzdWx0OworICAgIH0pOworCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
IGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoImZyb250ZW5kX2dldFRpbWVsaW5lUmVzdWx0cygpIiwg
ZnVuY3Rpb24odGltZWxpbmVSZWNvcmRzKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZih0
aW1lbGluZVJlY29yZHMpID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNv
bWUga2luZCBvZiBlcnJvciBtZXNzYWdlLgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQoIkVy
cm9yIGZldGNoaW5nIFRpbWVsaW5lIHJlc3VsdHM6ICIgKyB0aW1lbGluZVJlY29yZHMpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFuYWx5emVGdW5jdGlv
bih0aW1lbGluZVJlY29yZHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBu
b3RpZnlEb25lKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgLy8gV2FpdCBmb3IgY2Fs
bGJhY2sgdG8gZmlyZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbm90aWZ5RG9uZSgp
OworICAgICAgICB9CisgICAgICAgIG1hcmtDdXJyZW50UmVjb3JkQXNPdmVyaGVhZCgib25sb2Fk
IiArIChpZ25vcmVMb2FkID8gIjppZ25vcmVMb2FkIjogIiIpKTsKKyAgICB9LCAxMDAwKTsgIC8v
IEdpdmUgdGltZXIgZmlyZXMgY3JlYXRlZCBpbiBzY3JpcHQgYSBjaGFuY2UgdG8gcnVuLiAgSXMg
MSBzZWNvbmQgdG9vIGxvbmcgdG8gZGVsYXk/Cit9CisKK2Z1bmN0aW9uIGR1bXBSZWNvcmQocmVj
b3JkLCBsZXZlbCkgeworICAgIHZhciBwcmVmaXggPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxldmVsIDsgKytpKSB7CisgICAgICAgIHByZWZpeCA9ICItLS0tIiArIHByZWZpeDsKKyAg
ICB9CisgICAgaWYgKGxldmVsID4gMCkKKyAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgIj4gIjsK
KyAgICBvdXRwdXQocHJlZml4ICsgdGltZWxpbmVBZ2VudFR5cGVUb1N0cmluZyhyZWNvcmQudHlw
ZSkpOworICAgIHZhciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/IHJlY29yZC5jaGls
ZHJlbi5sZW5ndGggOiAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsr
aSkgeworICAgICAgICBkdW1wUmVjb3JkKHJlY29yZC5jaGlsZHJlbltpXSwgbGV2ZWwgKyAxKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHN0cmlwTm9uRGV0ZXJtaW5pc3RpY0ZpZWxkcyhyZWNvcmQp
IHsKKyAgICAvLyBTdHJpcCBvdXQgc3RhcnRUaW1lIGFuZCBlbmRUaW1lLCB0aGV5IGFyZSBub3Qg
ZGV0ZXJtaW5pc3RpYworICAgIGRlbGV0ZSByZWNvcmQuZW5kVGltZTsKKyAgICBkZWxldGUgcmVj
b3JkLnN0YXJ0VGltZTsKKyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW4gPyAg
cmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1D
aGlsZHJlbjsgKytpKSB7CisgICAgICAgIHN0cmlwTm9uRGV0ZXJtaW5pc3RpY0ZpZWxkcyhyZWNv
cmQuY2hpbGRyZW5baV0pOworICAgIH0KK30KKworZnVuY3Rpb24gaXNPdmVyaGVhZFJlY29yZChy
ZWNvcmQpIHsKKyAgICBpZiAocmVjb3JkLnR5cGUgPT0gMTEgJiYgcmVjb3JkLmRhdGEubWVzc2Fn
ZS5pbmRleE9mKG92ZXJoZWFkTWFyaykgIT0gLTEpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHZhciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/ICByZWNvcmQuY2hpbGRyZW4ubGVu
Z3RoIDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKKyAg
ICAgICAgaWYgKGlzT3ZlcmhlYWRSZWNvcmQocmVjb3JkLmNoaWxkcmVuW2ldKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLyBUaGlzIG1hcmsgd2lsbCBoZWxwIHRoZSB0ZXN0IGFuYWx5c2lzIGN1bGwgb3V0IHJl
Y29yZHMgdGhhdCBhcmUgb3ZlcmhlYWQuCitmdW5jdGlvbiBtYXJrQ3VycmVudFJlY29yZEFzT3Zl
cmhlYWQoYXJnKSB7CisgICAgdmFyIHN1ZmZpeCA9ICcnOworICAgIGlmIChhcmcpIHsKKyAgICAg
ICAgc3VmZml4ID0gIjogIiArIGFyZzsKKyAgICB9CisgICAgY29uc29sZS5tYXJrVGltZWxpbmUo
b3ZlcmhlYWRNYXJrICsgc3VmZml4KTsKK30KKworZnVuY3Rpb24gdGltZWxpbmVBZ2VudFR5cGVU
b1N0cmluZyhudW1lcmljVHlwZSkgeworICAgIGZvciAodmFyIHByb3AgaW4gdGltZWxpbmVBZ2Vu
dFJlY29yZFR5cGUpIHsKKyAgICAgICAgaWYgKHRpbWVsaW5lQWdlbnRSZWNvcmRUeXBlW3Byb3Bd
ID09IG51bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHByb3A7CisgICAgfQorICAgIHJl
dHVybiB1bmRlZmluZWQ7Cit9CisKKy8vIEluamVjdGVkIGludG8gSW5zcGVjdG9yIHdpbmRvdwor
ZnVuY3Rpb24gZnJvbnRlbmRfc3RhcnRUaW1lbGluZVByb2ZpbGVyKCkgeworICAgIHdpbmRvdy50
aW1lbGluZVJlc3VsdHMgPSBuZXcgQXJyYXkoKTsKKyAgICB3aW5kb3cuV2ViSW5zcGVjdG9yLmFk
ZFJlY29yZFRvVGltZWxpbmUgPSBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAgd2luZG93LnRpbWVs
aW5lUmVzdWx0cy5wdXNoKGFyZyk7CisgICAgfTsKKyAgICB3aW5kb3cuSW5zcGVjdG9yQ29udHJv
bGxlci5zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKKyAgICByZXR1cm4gJ2RvbmUnOworfQorLy8g
SW5qZWN0ZWQgaW50byBJbnNwZWN0b3Igd2luZG93CitmdW5jdGlvbiBmcm9udGVuZF9nZXRUaW1l
bGluZVJlc3VsdHMoKSB7CisgICAgcmV0dXJuIHdpbmRvdy50aW1lbGluZVJlc3VsdHM7Cit9CisK
Ky8vIFdlIGlnbm9yZSBpbml0aWFsIGxvYWQgb2YgdGhlIHBhZ2UsIGVuYWJsZSBpbnNwZWN0b3Ig
YW5kIGluaXRpYXRlIHJlbG9hZC4gCisvLyBUaGlzIGFsbG93cyBpbnNwZWN0b3IgY29udHJvbGxl
ciB0byBjYXB0dXJlIGV2ZW50cyB0aGF0IGhhcHBlbiBkdXJpbmcgdGhlIAorLy8gaW5pdGlhbCBw
YWdlIGxvYWQsIGFuZCBzdGFydHVwIHRoZSBUaW1lbGluZSB0byBjYXB0dXJlIGFsbCB0aGUgcmVj
b3JkcyBmcm9tCisvLyBsb2FkaW5nIHRoZSBzZWNvbmQgcGFnZS4KK2lmIChpZ25vcmVMb2FkKSB7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiZnJv
bnRlbmRfc3RhcnRUaW1lbGluZVByb2ZpbGVyKCkiLCBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJnICE9ICdkb25lJykgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiZnJvbnRlbmRfc3RhcnRUaW1lbGluZVByb2ZpbGVyKCkgZmFpbGVkOiAiICsgYXJnKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgMCk7CisgICAg
fQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5l
LXRlc3QuanMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgo=
</data>
<flag name="review"
          id="24231"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42670</attachid>
            <date>2009-11-06 14:15:07 -0800</date>
            <delta_ts>2009-11-09 14:00:16 -0800</delta_ts>
            <desc>WebInspector: Adds a unit test for Timeline records</desc>
            <filename>webkit-31137-3.patch</filename>
            <type>text/plain</type>
            <size>10470</size>
            <attacher name="Eric Ayers">zundel</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNjA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMDktMTEtMDYgIEVyaWMgWi4gQXllcnMgIDx6
dW5kZWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgdGVzdCB0aGF0IGR1bXBzIHRoZSB0aW1lbGluZSBkYXRhIGZvciBh
IHNpbXBsZSBzY3JpcHQgdGFnLgorIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzEyMDQKKyAKKyAgICAgICAgKiBpbnNwZWN0b3IvaW5zcGVjdG9yLXRl
c3QuanM6CisgICAgICAgIChvbmxvYWQpOgorICAgICAgICAqIGluc3BlY3Rvci90aW1lbGluZS1z
Y3JpcHQtdGFnLTEtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvdGlt
ZWxpbmUtc2NyaXB0LXRhZy0xLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci90aW1l
bGluZS10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKCk6CisgICAgICAgIChkdW1wUmVjb3Jkcyk6
CisgICAgICAgIChzdHJpcE5vbkRldGVybWluaXN0aWNGaWVsZHMpOgorICAgICAgICAoaXNPdmVy
aGVhZFJlY29yZCk6CisgICAgICAgIChtYXJrQ3VycmVudFJlY29yZEFzT3ZlcmhlYWQpOgorICAg
ICAgICAodGltZWxpbmVBZ2VudFR5cGVUb1N0cmluZyk6CisgICAgICAgIChmcm9udGVuZF9zdGFy
dFRpbWVsaW5lUHJvZmlsZXIud2luZG93LldlYkluc3BlY3Rvci5hZGRSZWNvcmRUb1RpbWVsaW5l
KToKKyAgICAgICAgKGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChm
cm9udGVuZF9nZXRUaW1lbGluZVJlc3VsdHMpOgorICAgICAgICAoZnJvbnRlbmRfc2V0dXApOgor
CiAyMDA5LTExLTA2ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rv
ci9pbnNwZWN0b3ItdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
aW5zcGVjdG9yLXRlc3QuanMJKHJldmlzaW9uIDUwNjAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2luc3BlY3Rvci10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMCwyOCArMTAsMzcgQEAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogLy8gdG8gY2FwdHVyZSBldmVudHMg
dGhhdCBoYXBwZW4gZHVyaW5nIHRoZSBpbml0aWFsIHBhZ2UgbG9hZC4KIHZhciBpZ25vcmVMb2Fk
ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiP3JlbG9hZCIpID09PSAtMTsKIGlmIChp
Z25vcmVMb2FkKSB7Ci0gICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLnNob3dXZWJJbnNwZWN0b3IoKTsKLSAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgKz0g
Ij9yZWxvYWQiOwotICAgIH0sIDApOworICAgIC8vIFN5bmNocm9ub3VzIG9wZW5pbmcgb2Ygd2Vi
IGluc3BlY3RvciBtYXkgZmFpbCBvbiBXaW5kb3dzCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgc2V0VGltZW91dChsYXlvdXRUZXN0Q29udHJvbGxlci5zaG93
V2ViSW5zcGVjdG9yLCAwKTsKIH0KIAogZnVuY3Rpb24gb25sb2FkKCkKIHsKLSAgICBpZiAoaWdu
b3JlTG9hZCkKKyAgICBpZiAoaWdub3JlTG9hZCkgeworICAgICAgICAvLyBJbmplY3Qgc2NyaXB0
cyBpbnRvIHRoZSBmcm9udGVuZCBvbiB0aGUgZmlyc3QgcGFzcy4gIFNvbWUgb3RoZXIgbG9naWMg
bWF5IHdhbnQgdG8KKyAgICAgICAgLy8gdXNlIHRoZW0gYmVmb3JlIHRoZSByZWxvYWQuCisgICAg
ICAgIHZhciB0b0luamVjdCA9IFtdOworICAgICAgICB2YXIgaW52b2tlU2V0dXAgPSBmYWxzZTsK
KyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB3aW5kb3cpIHsKKyAgICAgICAgICAgIGlmIChuYW1l
LmluZGV4T2YoImZyb250ZW5kXyIpID09PSAwICYmIHR5cGVvZiB3aW5kb3dbbmFtZV0gPT09ICJm
dW5jdGlvbiIpCisgICAgICAgICAgICAgICAgdG9JbmplY3QucHVzaCh3aW5kb3dbbmFtZV0udG9T
dHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW52b2tlIGEgc2V0dXAgbWV0aG9kIGlm
IGl0IGhhcyBiZWVuIHNwZWNpZmllZAorICAgICAgICB0b0luamVjdC5wdXNoKCJmcm9udGVuZF9z
ZXR1cCA/IGZyb250ZW5kX3NldHVwKCkgOiB1bmRlZmluZWQiKTsKKworICAgICAgICBldmFsdWF0
ZUluV2ViSW5zcGVjdG9yKHRvSW5qZWN0LmpvaW4oIlxuIiksIGZ1bmN0aW9uKGFyZykgeworICAg
ICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgKz0gIj9yZWxvYWQiOworICAgICAgICB9KTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHZhciBvdXRwdXRFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgb3V0cHV0RWxlbWVudC5pZCA9ICJvdXRwdXQi
OwogICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0cHV0RWxlbWVudCk7CiAKLSAgICB2
YXIgdG9JbmplY3QgPSBbXTsKLSAgICBmb3IgKHZhciBuYW1lIGluIHdpbmRvdykgewotICAgICAg
ICBpZiAobmFtZS5pbmRleE9mKCJmcm9udGVuZF8iKSA9PT0gMCAmJiB0eXBlb2Ygd2luZG93W25h
bWVdID09PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgdG9JbmplY3QucHVzaCh3aW5kb3dbbmFt
ZV0udG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IodG9Jbmpl
Y3Quam9pbigiXG4iKSwgZG9pdCk7CisgICAgLy8gTWFrZSBzdXJlIHdlYiBpbnNwZWN0b3IgaGFz
IHNldHRsZWQgZG93biBiZWZvcmUgZXhlY3V0aW5nIHVzZXIgY29kZQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoInRydWUiLCBkb2l0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZWIgaW5zcGVj
dG9yIHdpbmRvdyBpcyBjbG9zZWQgYmVmb3JlIHRoZSB0ZXN0IGlzIGludGVycnVwdGVkLgogICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGlt
ZWxpbmUtc2NyaXB0LXRhZy0xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9pbnNwZWN0b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitUZXN0cyB0aGUgVGltZWxpbmUg
QVBJIGluc3RydW1lbnRhdGlvbiBvZiBhbiBIVE1MIHNjcmlwdCB0YWcuCisKK1BhcnNlSFRNTAor
LS0tLT4gRXZhbHVhdGVTY3JpcHQKKy0tLS0+IEV2ZW50RGlzcGF0Y2gKKy0tLS0+IEV2YWx1YXRl
U2NyaXB0CistLS0tPiBFdmVudERpc3BhdGNoCistLS0tPiBFdmFsdWF0ZVNjcmlwdAorLS0tLT4g
RXZhbHVhdGVTY3JpcHQKKy0tLS0tLS0tPiBNYXJrVGltZWxpbmUKK1NjcmlwdCB0YWcgZm91bmQg
aW4gdGltZWxpbmUgZGF0YTogU0NSSVBUIFRBRworCkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0
b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDczIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Imluc3BlY3Rv
ci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ0aW1lbGluZS10ZXN0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+Cit2YXIgdGltZWxpbmVNYXJrID0gIlNDUklQVCBUQUciOworCitmdW5j
dGlvbiBhbmFseXplRXZhbHVhdGVTY3JpcHQocmVjb3JkKSB7CisgICAgdmFyIG51bUNoaWxkcmVu
ID0gcmVjb3JkLmNoaWxkcmVuID8gcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9
IHJlY29yZC5jaGlsZHJlbltpXTsKKyAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gdGltZWxpbmVB
Z2VudFJlY29yZFR5cGUuTWFya1RpbWVsaW5lCisgICAgICAgICAgICAmJiBjaGlsZC5kYXRhLm1l
c3NhZ2UgPT0gdGltZWxpbmVNYXJrKSB7CisgICAgICAgICAgICAvLyBGb3VuZCBpdCEgIFRoaXMg
aXMgdGhlIHNjcmlwdCB0YWcgd2Ugd2VyZSBob3BpbmcgdG8gYW5ub3RhdGUuCisgICAgICAgICAg
ICBvdXRwdXQoIlNjcmlwdCB0YWcgZm91bmQgaW4gdGltZWxpbmUgZGF0YTogIiArIGNoaWxkLmRh
dGEubWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGFuYWx5emVQYXJzZUhUTUwocmVjb3Jk
KSB7CisgICAgLy8gTm93LCBkdW1wIHRoZSBzcGVjaWZpYyBTY3JpcHQgdGFnIHRoYXQgaW5jbHVk
ZXMgdGhlIE1hcmtlciBhbmQgZHVtcCBpdCBpbiBkZXRhaWwuCisgICAgdmFyIG51bUNoaWxkcmVu
ID0gcmVjb3JkLmNoaWxkcmVuID8gcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9
IHJlY29yZC5jaGlsZHJlbltpXTsKKyAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gdGltZWxpbmVB
Z2VudFJlY29yZFR5cGUuRXZhbHVhdGVTY3JpcHQpIHsKKyAgICAgICAgICAgIGlmIChhbmFseXpl
RXZhbHVhdGVTY3JpcHQoY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfSAgCisK
Ky8vIExvb2sgZm9yIHRoZSBQYXJzZUh0bWwtPkV2YWx1YXRlU2NyaXB0LT5NYXJrVGltZWxpbmUg
dGhhdCBjb3JyZWxhdGVzIAorLy8gdG8gdGhlIDxzY3JpcHQ+IHRhZyBiZWxvdy4KK2Z1bmN0aW9u
IGFuYWx5emVUaW1lbGluZURhdGEodGltZWxpbmVSZWNvcmRzKSAKK3sKKyAgICAvLyBVbmNvbW1l
bnQgdG8gZGVidWdnaW5nIHRoZSBsaXN0IG9mIGRhdGEgcmV0dXJuZWQuCisgICAgLy8gZHVtcFJl
Y29yZHModGltZWxpbmVSZWNvcmRzKTsKKworICAgIC8vIFNlYXJjaCBmb3IgYSBQYXJzZUhUTUwg
cmVjb3JkCisgICAgdmFyIG51bVJlY29yZHMgPSB0aW1lbGluZVJlY29yZHMubGVuZ3RoOworICAg
IGZvciAodmFyIGkgPSAwIDsgaSA8IG51bVJlY29yZHM7ICsraSkgeworICAgICAgICB2YXIgcmVj
b3JkID0gdGltZWxpbmVSZWNvcmRzW2ldOworICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT0gdGlt
ZWxpbmVBZ2VudFJlY29yZFR5cGUuUGFyc2VIVE1MKSB7CisgICAgICAgICAgICAvLyBGb3VuZCBQ
YXJzZUhUTUwgVGFnCisgICAgICAgICAgICBkdW1wUmVjb3JkKHJlY29yZCwgMCk7CisgICAgICAg
ICAgICBpZiAoIWFuYWx5emVQYXJzZUhUTUwocmVjb3JkKSkgeworICAgICAgICAgICAgICAgIG91
dHB1dCgiRmFpbGVkIHRvIGZpbmQgdGltZWxpbmUgbWFyazogIiArIHRpbWVsaW5lTWFyayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvaXQoKSB7Cisg
ICAgcmV0cmlldmVUaW1lbGluZURhdGEoYW5hbHl6ZVRpbWVsaW5lRGF0YSk7Cit9CisKKzwvc2Ny
aXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxwPgorVGVzdHMgdGhl
IFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gb2YgYW4gSFRNTCBzY3JpcHQgdGFnLgorPC9w
PgorCis8c2NyaXB0PgorICAgICBjb25zb2xlLm1hcmtUaW1lbGluZSh0aW1lbGluZU1hcmspOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
dGltZWxpbmUtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGlt
ZWxpbmUtdGVzdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1l
bGluZS10ZXN0LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLy8gVXNlZCB0byBt
YXJrIHRpbWVsaW5lIHJlY29yZHMgYXMgYmVsb25naW5nIHRvIHRoZSB0ZXN0IGZyYW1ld29yay4K
K3ZhciBvdmVyaGVhZE1hcmsgPSAiKioqT3ZlcmhlYWQqKioiOworCisvLyBUaW1lbGluZUFnZW50
IHJlY29yZCB0eXBlIGRlZmluaXRpb25zIGZyb20gdGhlIGluc3BlY3RvcgordmFyIHRpbWVsaW5l
QWdlbnRSZWNvcmRUeXBlID0ge307CisKKy8vIENhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBk
b2l0KCkgZnVuY3Rpb24gaW4gdGhlIG1haW4gdGVzdCBwYWdlLgorLy8gUGFzcyBhIGZ1bmN0aW9u
IHRoYXQgd2lsbCBnZXQgYW4gYXJyYXkgb2YgdGltZWxpbmUgZGF0YSB0byBwcm9jZXNzLgorZnVu
Y3Rpb24gcmV0cmlldmVUaW1lbGluZURhdGEoYW5hbHl6ZUZ1bmN0aW9uKQoreworICAgIGV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoIldlYkluc3BlY3Rvci5UaW1lbGluZUFnZW50LlJlY29yZFR5cGUi
LCBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgdGltZWxpbmVBZ2VudFJlY29yZFR5cGUgPSBy
ZXN1bHQ7CisgICAgfSk7CisKKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJmcm9udGVuZF9n
ZXRUaW1lbGluZVJlc3VsdHMoKSIsIGZ1bmN0aW9uKHRpbWVsaW5lUmVjb3JkcykgeworICAgICAg
ICBpZiAodHlwZW9mKHRpbWVsaW5lUmVjb3JkcykgPT0gInN0cmluZyIpCisgICAgICAgICAgICBv
dXRwdXQoIkVycm9yIGZldGNoaW5nIFRpbWVsaW5lIHJlc3VsdHM6ICIgKyB0aW1lbGluZVJlY29y
ZHMpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgYW5hbHl6ZUZ1bmN0aW9uKHRpbWVsaW5l
UmVjb3Jkcyk7CisgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICB9KTsKKyAgICBtYXJrQ3VycmVu
dFJlY29yZEFzT3ZlcmhlYWQoIm9ubG9hZCIgKyAoaWdub3JlTG9hZCA/ICI6aWdub3JlTG9hZCI6
ICIiKSk7Cit9CisKKy8vIER1bXAganVzdCB0aGUgcmVjb3JkIG5hbWUsIGluZGVudGluZyBvdXRw
dXQgb24gc2VwYXJhdGUgbGluZXMgZm9yIHN1YnJlY29yZHMKK2Z1bmN0aW9uIGR1bXBSZWNvcmQo
cmVjb3JkLCBsZXZlbCkgeworICAgIHZhciBwcmVmaXggPSAiIjsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGxldmVsIDsgKytpKSB7CisgICAgICAgIHByZWZpeCA9ICItLS0tIiArIHByZWZpeDsK
KyAgICB9CisgICAgaWYgKGxldmVsID4gMCkKKyAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgIj4g
IjsKKyAgICBvdXRwdXQocHJlZml4ICsgdGltZWxpbmVBZ2VudFR5cGVUb1N0cmluZyhyZWNvcmQu
dHlwZSkpOworICAgIHZhciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/IHJlY29yZC5j
aGlsZHJlbi5sZW5ndGggOiAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47
ICsraSkgeworICAgICAgICBkdW1wUmVjb3JkKHJlY29yZC5jaGlsZHJlbltpXSwgbGV2ZWwgKyAx
KTsKKyAgICB9Cit9CisKKy8vIER1bXBzIGFuIGVudGlyZSBsaXN0IG9mIHJlY29yZHMsIGN1bGxp
bmcgb3V0IHRob3NlIG1hcmtlZCBhcyBvdmVyaGVhZAorZnVuY3Rpb24gZHVtcFJlY29yZHModGlt
ZWxpbmVSZWNvcmRzKSB7CisgICAgdmFyIG51bVJlY29yZHMgPSB0aW1lbGluZVJlY29yZHMubGVu
Z3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtUmVjb3JkczsgKytpKSB7CisgICAgICAg
IHZhciByZWNvcmQgPSB0aW1lbGluZVJlY29yZHNbaV07CisgICAgICAgIGlmICghaXNPdmVyaGVh
ZFJlY29yZChyZWNvcmQpKSB7CisgICAgICAgICAgICBkdW1wUmVjb3JkKHJlY29yZCwgMCk7Cisg
ICAgICAgIH0KKyAgICB9CisgfQorCisvLyBTdHJpcCBvdXQgc3RhcnRUaW1lIGFuZCBlbmRUaW1l
LCB0aGV5IGFyZSBub3QgZGV0ZXJtaW5pc3RpYyAKK2Z1bmN0aW9uIHN0cmlwTm9uRGV0ZXJtaW5p
c3RpY0ZpZWxkcyhyZWNvcmQpIHsKKworICAgIGRlbGV0ZSByZWNvcmQuZW5kVGltZTsKKyAgICBk
ZWxldGUgcmVjb3JkLnN0YXJ0VGltZTsKKyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hp
bGRyZW4gPyAgcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIHN0cmlwTm9uRGV0ZXJtaW5pc3RpY0Zp
ZWxkcyhyZWNvcmQuY2hpbGRyZW5baV0pOworICAgIH0KK30KKworLy8gUmVjb3JkcyB0aGF0IGhh
dmUgYmVlbiBtYXJrZWQgd2l0aCBjb25zb2xlLm1hcmtUaW1lbGluZSh0aW1lbGluZU1hcmspCisv
LyBhcmUgYSBwYXJ0IG9mIHRoZSB0ZXN0IGZyYW1ld29yayBhbmQgbm90IGEgcGFydCBvZiB0aGUg
dGVzdCBiZWluZyBwZXJmb3JtZWQKK2Z1bmN0aW9uIGlzT3ZlcmhlYWRSZWNvcmQocmVjb3JkKSB7
CisgICAgaWYgKHJlY29yZC50eXBlID09IDExICYmIHJlY29yZC5kYXRhLm1lc3NhZ2UuaW5kZXhP
ZihvdmVyaGVhZE1hcmspICE9IC0xKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB2YXIgbnVt
Q2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW4gPyAgcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIGlm
IChpc092ZXJoZWFkUmVjb3JkKHJlY29yZC5jaGlsZHJlbltpXSkpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8g
VGhpcyBtYXJrIHdpbGwgaGVscCB0aGUgdGVzdCBhbmFseXNpcyBjdWxsIG91dCByZWNvcmRzIHRo
YXQgYXJlIG92ZXJoZWFkLgorZnVuY3Rpb24gbWFya0N1cnJlbnRSZWNvcmRBc092ZXJoZWFkKGFy
ZykgeworICAgIHZhciBzdWZmaXggPSAnJzsKKyAgICBpZiAoYXJnKSB7CisgICAgICAgIHN1ZmZp
eCA9ICI6ICIgKyBhcmc7CisgICAgfQorICAgIGNvbnNvbGUubWFya1RpbWVsaW5lKG92ZXJoZWFk
TWFyayArIHN1ZmZpeCk7Cit9CisKK2Z1bmN0aW9uIHRpbWVsaW5lQWdlbnRUeXBlVG9TdHJpbmco
bnVtZXJpY1R5cGUpIHsKKyAgICBmb3IgKHZhciBwcm9wIGluIHRpbWVsaW5lQWdlbnRSZWNvcmRU
eXBlKSB7CisgICAgICAgIGlmICh0aW1lbGluZUFnZW50UmVjb3JkVHlwZVtwcm9wXSA9PSBudW1l
cmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBwcm9wOworICAgIH0KKyAgICByZXR1cm4gdW5k
ZWZpbmVkOworfQorCisvLyBJbmplY3RlZCBpbnRvIEluc3BlY3RvciB3aW5kb3cKK2Z1bmN0aW9u
IGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcigpIHsKKyAgICB3aW5kb3cudGltZWxpbmVS
ZXN1bHRzID0gbmV3IEFycmF5KCk7CisgICAgd2luZG93LldlYkluc3BlY3Rvci5hZGRSZWNvcmRU
b1RpbWVsaW5lID0gZnVuY3Rpb24oYXJnKSB7CisgICAgICAgIHdpbmRvdy50aW1lbGluZVJlc3Vs
dHMucHVzaChhcmcpOworICAgIH07CisgICAgd2luZG93Lkluc3BlY3RvckNvbnRyb2xsZXIuc3Rh
cnRUaW1lbGluZVByb2ZpbGVyKCk7CisgICAgcmV0dXJuICdkb25lJzsKK30KKy8vIEluamVjdGVk
IGludG8gSW5zcGVjdG9yIHdpbmRvdworZnVuY3Rpb24gZnJvbnRlbmRfZ2V0VGltZWxpbmVSZXN1
bHRzKCkgeworICAgIHJldHVybiB3aW5kb3cudGltZWxpbmVSZXN1bHRzOworfQorCisvLyBJbmpl
Y3RlZCBpbnRvIEluc3BlY3RvciB3aW5kb3cKKy8vIGZyb250ZW5kX3NldHVwIGFsd2F5cyBnZXRz
IGNhbGxlZCBiZWZvcmUgdGhlIHBhZ2UgaXMgcmVsb2FkZWQuCitmdW5jdGlvbiBmcm9udGVuZF9z
ZXR1cCgpIHsKKyAgICBmcm9udGVuZF9zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS10ZXN0LmpzCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="24234"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42798</attachid>
            <date>2009-11-09 14:00:16 -0800</date>
            <delta_ts>2009-11-10 13:33:45 -0800</delta_ts>
            <desc>WebInspector: Adds a unit test for Timeline records</desc>
            <filename>webkit-31204-3.patch</filename>
            <type>text/plain</type>
            <size>12172</size>
            <attacher name="Eric Ayers">zundel</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNjg3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEtMDkgIEVyaWMgWi4gQXllcnMgIDx6
dW5kZWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgdGVzdCB0aGF0IGR1bXBzIHRoZSB0aW1lbGluZSBkYXRhIGZvciBh
IHNpbXBsZSBzY3JpcHQgdGFnLgorICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTIwNAorCisgICAgICAgICogaW5zcGVjdG9yL2luc3BlY3Rvci10
ZXN0LmpzOiBSZW1vdmVkIHByb3BlcnR5IHN2bjpleGVjdXRhYmxlLgorICAgICAgICAob25sb2Fk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qczogQWRkZWQuCisg
ICAgICAgIChyZXRyaWV2ZVRpbWVsaW5lRGF0YSk6CisgICAgICAgICgpOgorICAgICAgICAoZHVt
cFRpbWVsaW5lUmVjb3Jkcyk6CisgICAgICAgIChwcmludFRpbWVsaW5lUmVjb3JkUHJvcGVydGll
cyk6CisgICAgICAgIChpc05vbkRldGVybWluaXN0aWNQcm9wKToKKyAgICAgICAgKHByaW50UHJv
cHMpOgorICAgICAgICAoaXNUaW1lbGluZU92ZXJoZWFkUmVjb3JkKToKKyAgICAgICAgKG1hcmtU
aW1lbGluZVJlY29yZEFzT3ZlcmhlYWQpOgorICAgICAgICAodGltZWxpbmVBZ2VudFR5cGVUb1N0
cmluZyk6CisgICAgICAgIChmcm9udGVuZF9zdGFydFRpbWVsaW5lUHJvZmlsZXIud2luZG93Lldl
Ykluc3BlY3Rvci5hZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAgICAgICAgKGZyb250ZW5kX3N0YXJ0
VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChmcm9udGVuZF9nZXRUaW1lbGluZVJlc3VsdHMp
OgorICAgICAgICAoZnJvbnRlbmRfc2V0dXApOgorCiAyMDA5LTExLTA5ICBZYWVsIEFoYXJvbiAg
PHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3It
dGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRl
c3QuanMJKHJldmlzaW9uIDUwNjAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rv
ci10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMCwyOCArMTAsNDAgQEAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgewogLy8gdG8gY2FwdHVyZSBldmVudHMgdGhhdCBoYXBwZW4g
ZHVyaW5nIHRoZSBpbml0aWFsIHBhZ2UgbG9hZC4KIHZhciBpZ25vcmVMb2FkID0gd2luZG93Lmxv
Y2F0aW9uLmhyZWYuaW5kZXhPZigiP3JlbG9hZCIpID09PSAtMTsKIGlmIChpZ25vcmVMb2FkKSB7
CisgICAgLy8gU3RhcnQgaW4gYSB0aW1lciwgYXMgc3luY2hyb25vdXMgb3BlbmluZyBvZiB3ZWIg
aW5zcGVjdG9yIG1heSBmYWlsIG9uIFdpbmRvd3MKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
ewogICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2hvd1dlYkluc3BlY3RvcigpOwotICAgICAgICB3aW5kb3cu
bG9jYXRpb24uaHJlZiArPSAiP3JlbG9hZCI7CiAgICAgfSwgMCk7CiB9CiAKIGZ1bmN0aW9uIG9u
bG9hZCgpCiB7Ci0gICAgaWYgKGlnbm9yZUxvYWQpCisgICAgaWYgKGlnbm9yZUxvYWQpIHsKKyAg
ICAgICAgLy8gSW5qZWN0IHNjcmlwdHMgaW50byB0aGUgZnJvbnRlbmQgb24gdGhlIGZpcnN0IHBh
c3MuICBTb21lIG90aGVyIGxvZ2ljIG1heSB3YW50IHRvCisgICAgICAgIC8vIHVzZSB0aGVtIGJl
Zm9yZSB0aGUgcmVsb2FkLgorICAgICAgICB2YXIgdG9JbmplY3QgPSBbXTsKKyAgICAgICAgdmFy
IGludm9rZVNldHVwID0gZmFsc2U7CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gd2luZG93KSB7
CisgICAgICAgICAgICBpZiAobmFtZS5pbmRleE9mKCJmcm9udGVuZF8iKSA9PT0gMCAmJiB0eXBl
b2Ygd2luZG93W25hbWVdID09PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgIHRvSW5qZWN0
LnB1c2god2luZG93W25hbWVdLnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIC8vIElu
dm9rZSBhIHNldHVwIG1ldGhvZCBpZiBpdCBoYXMgYmVlbiBzcGVjaWZpZWQKKyAgICAgICAgaWYg
KHdpbmRvd1siZnJvbnRlbmRfc2V0dXAiXSkgCisgICAgICAgICAgICB0b0luamVjdC5wdXNoKCJm
cm9udGVuZF9zZXR1cCgpOyIpOworCisgICAgICAgIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IodG9J
bmplY3Quam9pbigiXG4iKSwgZnVuY3Rpb24oYXJnKSB7CisgICAgICAgICAgICB3aW5kb3cubG9j
YXRpb24uaHJlZiArPSAiP3JlbG9hZCI7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm47Cisg
ICAgfQogCiAgICAgdmFyIG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKICAgICBvdXRwdXRFbGVtZW50LmlkID0gIm91dHB1dCI7CiAgICAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChvdXRwdXRFbGVtZW50KTsKIAotICAgIHZhciB0b0luamVjdCA9IFtdOwot
ICAgIGZvciAodmFyIG5hbWUgaW4gd2luZG93KSB7Ci0gICAgICAgIGlmIChuYW1lLmluZGV4T2Yo
ImZyb250ZW5kXyIpID09PSAwICYmIHR5cGVvZiB3aW5kb3dbbmFtZV0gPT09ICJmdW5jdGlvbiIp
Ci0gICAgICAgICAgICB0b0luamVjdC5wdXNoKHdpbmRvd1tuYW1lXS50b1N0cmluZygpKTsKLSAg
ICB9Ci0gICAgZXZhbHVhdGVJbldlYkluc3BlY3Rvcih0b0luamVjdC5qb2luKCJcbiIpLCBkb2l0
KTsKKyAgICAvLyBNYWtlIHN1cmUgd2ViIGluc3BlY3RvciBoYXMgc2V0dGxlZCBkb3duIGJlZm9y
ZSBleGVjdXRpbmcgdXNlciBjb2RlCisgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigidHJ1ZSIs
IGRvaXQpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlYiBpbnNwZWN0b3Igd2luZG93IGlzIGNsb3Nl
ZCBiZWZvcmUgdGhlIHRlc3QgaXMgaW50ZXJydXB0ZWQuCiAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0
b3ItdGVzdC5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiAgIC0gKgoKSW5k
ZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQt
dGFnLTEtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3RpbWVsaW5lLXNjcmlwdC10YWctMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTYgQEAKK1Rlc3RzIHRoZSBUaW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0aW9uIG9mIGFuIEhU
TUwgc2NyaXB0IHRhZy4KKworUGFyc2VIVE1MCistLS0tPiBFdmFsdWF0ZVNjcmlwdAorLS0tLS0t
LS0+IE1hcmtUaW1lbGluZSA6IFNDUklQVCBUQUcKKworRXZhbHVhdGVTY3JpcHQgUHJvcGVydGll
czoKKysgc3RhcnRUaW1lIDogKiBERUZJTkVEICoKKysgZGF0YSA6IHsKKystIHVybCA6ICogREVG
SU5FRCAqCisrLSBsaW5lTnVtYmVyIDogNzAKKysgfQorKyBjaGlsZHJlbiA6ICogREVGSU5FRCAq
CisrIGVuZFRpbWUgOiAqIERFRklORUQgKgorKyB0eXBlIDogMTAKKwpJbmRleDogTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJpbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idGltZWxpbmUtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordmFyIHRpbWVsaW5lTWFyayA9ICJTQ1JJUFQgVEFH
IjsKKworZnVuY3Rpb24gYW5hbHl6ZUV2YWx1YXRlU2NyaXB0KHJlY29yZCkgeworICAgIHZhciBu
dW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/IHJlY29yZC5jaGlsZHJlbi5sZW5ndGggOiAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgeworICAgICAgICB2
YXIgY2hpbGQgPSByZWNvcmQuY2hpbGRyZW5baV07CisgICAgICAgIGlmIChjaGlsZC50eXBlID09
IHRpbWVsaW5lQWdlbnRSZWNvcmRUeXBlLk1hcmtUaW1lbGluZQorICAgICAgICAgICAgJiYgY2hp
bGQuZGF0YS5tZXNzYWdlID09IHRpbWVsaW5lTWFyaykgeworICAgICAgICAgICAgLy8gRmluaXNo
IHByaW50aW5nIHRoZSByZWNvcmQgYXMgYSB0cmVlCisgICAgICAgICAgICBkdW1wVGltZWxpbmVS
ZWNvcmQocmVjb3JkLCAxKTsKKyAgICAgICAgICAgIG91dHB1dCgiIik7CisgICAgICAgICAgICAv
LyBOb3cgcHJpbnQgdGhlIGltcG9ydGFudCBmaWVsZHMgb2YgdGhlIHJlY29yZAorICAgICAgICAg
ICAgcHJpbnRUaW1lbGluZVJlY29yZFByb3BlcnRpZXMocmVjb3JkKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworZnVu
Y3Rpb24gYW5hbHl6ZVBhcnNlSFRNTChyZWNvcmQpIHsKKyAgICAvLyBOb3csIGR1bXAgdGhlIHNw
ZWNpZmljIFNjcmlwdCB0YWcgdGhhdCBpbmNsdWRlcyB0aGUgTWFya2VyIGFuZCBkdW1wIGl0IGlu
IGRldGFpbC4KKyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW4gPyByZWNvcmQu
Y2hpbGRyZW4ubGVuZ3RoIDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVu
OyArK2kpIHsKKyAgICAgICAgdmFyIGNoaWxkID0gcmVjb3JkLmNoaWxkcmVuW2ldOworICAgICAg
ICBpZiAoY2hpbGQudHlwZSA9PSB0aW1lbGluZUFnZW50UmVjb3JkVHlwZS5FdmFsdWF0ZVNjcmlw
dCkKKyAgICAgICAgICAgIGlmIChhbmFseXplRXZhbHVhdGVTY3JpcHQoY2hpbGQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9ICAKKwor
Ly8gTG9vayBmb3IgdGhlIFBhcnNlSHRtbC0+RXZhbHVhdGVTY3JpcHQtPk1hcmtUaW1lbGluZSB0
aGF0IGNvcnJlbGF0ZXMgCisvLyB0byB0aGUgPHNjcmlwdD4gdGFnIGJlbG93LgorZnVuY3Rpb24g
YW5hbHl6ZVRpbWVsaW5lRGF0YSh0aW1lbGluZVJlY29yZHMpIAoreworICAgIC8vIFVuY29tbWVu
dCB0byBkZWJ1Z2dpbmcgdGhlIGxpc3Qgb2YgZGF0YSByZXR1cm5lZC4KKyAgICAvLyBkdW1wVGlt
ZWxpbmVSZWNvcmRzKHRpbWVsaW5lUmVjb3Jkcyk7CisKKyAgICAvLyBTZWFyY2ggZm9yIGEgUGFy
c2VIVE1MIHJlY29yZAorICAgIHZhciBudW1SZWNvcmRzID0gdGltZWxpbmVSZWNvcmRzLmxlbmd0
aDsKKyAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBudW1SZWNvcmRzOyArK2kpIHsKKyAgICAgICAg
dmFyIHJlY29yZCA9IHRpbWVsaW5lUmVjb3Jkc1tpXTsKKyAgICAgICAgaWYgKHJlY29yZC50eXBl
ID09IHRpbWVsaW5lQWdlbnRSZWNvcmRUeXBlLlBhcnNlSFRNTCkgeworICAgICAgICAgICAgLy8g
VW5jb21tZW50IHRvIGRlYnVnIHRoZSBQYXJzZUhUTUwgZGF0YSByZWNvcmQKKyAgICAgICAgICAg
IC8vIGR1bXBUaW1lbGluZVJlY29yZChyZWNvcmQsIDApOworICAgICAgICAgICAgb3V0cHV0KCJQ
YXJzZUhUTUwiKTsKKyAgICAgICAgICAgIGlmICghYW5hbHl6ZVBhcnNlSFRNTChyZWNvcmQpKQor
ICAgICAgICAgICAgICAgIG91dHB1dCgiRmFpbGVkIHRvIGZpbmQgdGltZWxpbmUgbWFyazogIiAr
IHRpbWVsaW5lTWFyayk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvaXQoKSB7
CisgICAgcmV0cmlldmVUaW1lbGluZURhdGEoYW5hbHl6ZVRpbWVsaW5lRGF0YSk7Cit9CisKKzwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxwPgorVGVzdHMg
dGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gb2YgYW4gSFRNTCBzY3JpcHQgdGFnLgor
PC9wPgorCis8c2NyaXB0PgorICAgICAvKiBUaGlzIHRlc3QgY29uZmlybXMgdGhhdCB0aGlzIHNj
cmlwdCB0YWcgaXMgYmVpbmcgcmVjb3JkZWQgaW4gdGhlIHRpbWVsaW5lIGRhdGEuICovCisgICAg
IGNvbnNvbGUubWFya1RpbWVsaW5lKHRpbWVsaW5lTWFyayk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS10ZXN0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS10ZXN0LmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQ3IEBACisvLyBVc2VkIHRvIG1hcmsgdGltZWxpbmUgcmVjb3Jk
cyBhcyBiZWxvbmdpbmcgdG8gdGhlIHRlc3QgZnJhbWV3b3JrLgordmFyIHRpbWVsaW5lT3Zlcmhl
YWRNYXJrID0gIioqKk92ZXJoZWFkKioqIjsKKworLy8gVGltZWxpbmVBZ2VudCByZWNvcmQgdHlw
ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBpbnNwZWN0b3IKK3ZhciB0aW1lbGluZUFnZW50UmVjb3Jk
VHlwZSA9IHt9OworCisvLyBTY3J1YiB2YWx1ZXMgd2hlbiBwcmludGluZyBvdXQgdGhlc2UgcHJv
cGVydGllcyBpbiB0aGUgcmVjb3JkIG9yIGRhdGEgZmllbGQuCit2YXIgdGltZWxpbmVOb25EZXRl
cm1pbmlzdGljUHJvcHMgPSB7IAorICAgIGVuZFRpbWUgOiAxLCAKKyAgICBzdGFydFRpbWUgOiAx
LAorICAgIGNoaWxkcmVuIDogMSwKKyAgICB1cmwgOiAxCit9OworCisvLyBDYWxsIHRoaXMgZnVu
Y3Rpb24gZnJvbSB0aGUgZG9pdCgpIGZ1bmN0aW9uIGluIHRoZSBtYWluIHRlc3QgcGFnZS4KKy8v
IFBhc3MgYSBmdW5jdGlvbiB0aGF0IHdpbGwgZ2V0IGFuIGFycmF5IG9mIHRpbWVsaW5lIGRhdGEg
dG8gcHJvY2Vzcy4KK2Z1bmN0aW9uIHJldHJpZXZlVGltZWxpbmVEYXRhKGFuYWx5emVGdW5jdGlv
bikKK3sKKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJXZWJJbnNwZWN0b3IuVGltZWxpbmVB
Z2VudC5SZWNvcmRUeXBlIiwgZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgIHRpbWVsaW5lQWdl
bnRSZWNvcmRUeXBlID0gcmVzdWx0OworICAgIH0pOworCisgICAgZXZhbHVhdGVJbldlYkluc3Bl
Y3RvcigiZnJvbnRlbmRfZ2V0VGltZWxpbmVSZXN1bHRzKCkiLCBmdW5jdGlvbih0aW1lbGluZVJl
Y29yZHMpIHsKKyAgICAgICAgaWYgKHR5cGVvZih0aW1lbGluZVJlY29yZHMpID09PSAic3RyaW5n
IikKKyAgICAgICAgICAgIG91dHB1dCgiRXJyb3IgZmV0Y2hpbmcgVGltZWxpbmUgcmVzdWx0czog
IiArIHRpbWVsaW5lUmVjb3Jkcyk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBhbmFseXpl
RnVuY3Rpb24odGltZWxpbmVSZWNvcmRzKTsKKyAgICAgICAgbm90aWZ5RG9uZSgpOworICAgIH0p
OworICAgIG1hcmtUaW1lbGluZVJlY29yZEFzT3ZlcmhlYWQoIm9ubG9hZCIgKyAoaWdub3JlTG9h
ZCA/ICI6aWdub3JlTG9hZCI6ICIiKSk7Cit9CisKKy8vIER1bXAganVzdCB0aGUgcmVjb3JkIG5h
bWUsIGluZGVudGluZyBvdXRwdXQgb24gc2VwYXJhdGUgbGluZXMgZm9yIHN1YnJlY29yZHMKK2Z1
bmN0aW9uIGR1bXBUaW1lbGluZVJlY29yZChyZWNvcmQsIGxldmVsKSB7CisgICAgdmFyIHByZWZp
eCA9ICIiOworICAgIHZhciBzdWZmaXggPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
dmVsIDsgKytpKQorICAgICAgICBwcmVmaXggPSAiLS0tLSIgKyBwcmVmaXg7CisgICAgaWYgKGxl
dmVsID4gMCkKKyAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgIj4gIjsKKyAgICBpZiAocmVjb3Jk
LnR5cGUgPT0gdGltZWxpbmVBZ2VudFJlY29yZFR5cGUuTWFya1RpbWVsaW5lKSB7CisgICAgICAg
IHN1ZmZpeCA9ICIgOiAiICsgcmVjb3JkLmRhdGEubWVzc2FnZTsKKyAgICB9CisgICAgb3V0cHV0
KHByZWZpeCArIHRpbWVsaW5lQWdlbnRUeXBlVG9TdHJpbmcocmVjb3JkLnR5cGUpICsgc3VmZml4
KTsKKworICAgIHZhciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/IHJlY29yZC5jaGls
ZHJlbi5sZW5ndGggOiAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsr
aSkKKyAgICAgICAgZHVtcFRpbWVsaW5lUmVjb3JkKHJlY29yZC5jaGlsZHJlbltpXSwgbGV2ZWwg
KyAxKTsKK30KKworLy8gRHVtcHMgYW4gZW50aXJlIGxpc3Qgb2YgcmVjb3JkcywgY3VsbGluZyBv
dXQgdGhvc2UgbWFya2VkIGFzIG92ZXJoZWFkCitmdW5jdGlvbiBkdW1wVGltZWxpbmVSZWNvcmRz
KHRpbWVsaW5lUmVjb3JkcykgeworICAgIHZhciBudW1SZWNvcmRzID0gdGltZWxpbmVSZWNvcmRz
Lmxlbmd0aDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVJlY29yZHM7ICsraSkgeworICAg
ICAgICB2YXIgcmVjb3JkID0gdGltZWxpbmVSZWNvcmRzW2ldOworICAgICAgICBpZiAoIWlzVGlt
ZWxpbmVPdmVyaGVhZFJlY29yZChyZWNvcmQpKQorICAgICAgICAgICAgZHVtcFRpbWVsaW5lUmVj
b3JkKHJlY29yZCwgMCk7CisgICAgfQorIH0KKworLy8gU29ydCB0aGUgZmllbGRzLCB0aGVuIHN0
cmlwIG91dCBzdGFydFRpbWUgYW5kIGVuZFRpbWUsIHRoZXkgYXJlIG5vdCBkZXRlcm1pbmlzdGlj
LgorLy8gQWxzbyByZW1vdmUgY2hpbGRyZW4gLSB0aGF0IGZpZWxkIGlzbid0IGltcG9ydGFudCBm
b3IgdGhlIHByaW50b3V0LgorZnVuY3Rpb24gcHJpbnRUaW1lbGluZVJlY29yZFByb3BlcnRpZXMo
cmVjb3JkKSB7CisgICAgb3V0cHV0KHRpbWVsaW5lQWdlbnRUeXBlVG9TdHJpbmcocmVjb3JkLnR5
cGUpICsgIiBQcm9wZXJ0aWVzOiIpOworICAgIC8vIFVzZSB0aGlzIHJlY3Vyc2l2ZSByb3V0aW5l
IHRvIHByaW50IHRoZSBwcm9wZXJ0aWVzCisgICAgcHJpbnRQcm9wcyhyZWNvcmQsIDApOworfQor
CitmdW5jdGlvbiBpc05vbkRldGVybWluaXN0aWNQcm9wKHByb3BOYW1lKSB7CisgICAgaWYgKHRp
bWVsaW5lTm9uRGV0ZXJtaW5pc3RpY1Byb3BzW3Byb3BOYW1lXSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBwcmludFByb3BzIChyZWNvcmQs
IGxldmVsKSB7CisgICAgdmFyIHByb3BzID0gbmV3IEFycmF5KCk7CisgICAgZm9yICh2YXIgcHJv
cCBpbiByZWNvcmQpIHsKKyAgICAgICAgcHJvcHMucHVzaChwcm9wKTsKKyAgICB9CisKKyAgICB2
YXIgcHJlZml4ID0gIisiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV2ZWwgOyBpKyspIHsK
KyAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgIi0iOworICAgIH0KKworICAgIHByZWZpeCA9IHBy
ZWZpeCArICIgIjsKKyAgICBmb3IgKHZhciBwcm9wIGluIHByb3BzKSB7CisgICAgICAgIHZhciBw
cm9wTmFtZSA9IHByb3BzW3Byb3BdOworICAgICAgICB2YXIgcHJvcFZhbHVlID0gcmVjb3JkW3By
b3BOYW1lXTsKKyAgICAgICAgaWYgKGlzTm9uRGV0ZXJtaW5pc3RpY1Byb3AocHJvcE5hbWUpKQor
ICAgICAgICAgICAgb3V0cHV0KHByZWZpeCArIHByb3BOYW1lICsgIiA6ICIgKyAocHJvcFZhbHVl
ID09PSB1bmRlZmluZWQgPyAiPHVuZGVmaW5lZD4iIDogIiAqIERFRklORUQgKiIpKTsKKyAgICAg
ICAgZWxzZSBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAg
IG91dHB1dChwcmVmaXggKyBwcm9wTmFtZSArICIgOiB7Iik7CisgICAgICAgICAgICBwcmludFBy
b3BzKHByb3BWYWx1ZSwgbGV2ZWwgKyAxKTsKKyAgICAgICAgICAgIG91dHB1dChwcmVmaXggKyAi
fSIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dHB1dChwcmVmaXggKyBwcm9wTmFt
ZSArICIgOiAiICsgcHJvcFZhbHVlKTsKKyAgICB9Cit9CisvLyBSZWNvcmRzIHRoYXQgaGF2ZSBi
ZWVuIG1hcmtlZCB3aXRoIGNvbnNvbGUubWFya1RpbWVsaW5lKHRpbWVsaW5lTWFyaykKKy8vIGFy
ZSBhIHBhcnQgb2YgdGhlIHRlc3QgZnJhbWV3b3JrIGFuZCBub3QgYSBwYXJ0IG9mIHRoZSB0ZXN0
IGJlaW5nIHBlcmZvcm1lZAorZnVuY3Rpb24gaXNUaW1lbGluZU92ZXJoZWFkUmVjb3JkKHJlY29y
ZCkgeworICAgIGlmIChyZWNvcmQudHlwZSA9PT0gMTEgJiYgcmVjb3JkLmRhdGEubWVzc2FnZS5p
bmRleE9mKHRpbWVsaW5lT3ZlcmhlYWRNYXJrKSAhPT0gLTEpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHZhciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/ICByZWNvcmQuY2hpbGRy
ZW4ubGVuZ3RoIDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kp
IHsKKyAgICAgICAgaWYgKGlzVGltZWxpbmVPdmVyaGVhZFJlY29yZChyZWNvcmQuY2hpbGRyZW5b
aV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworLy8gVGhpcyBtYXJrIHdpbGwgaGVscCB0aGUgdGVzdCBhbmFseXNpcyBjdWxsIG91dCBy
ZWNvcmRzIHRoYXQgYXJlIG92ZXJoZWFkLgorZnVuY3Rpb24gbWFya1RpbWVsaW5lUmVjb3JkQXNP
dmVyaGVhZChhcmcpIHsKKyAgICB2YXIgc3VmZml4ID0gJyc7CisgICAgaWYgKGFyZykKKyAgICAg
ICAgc3VmZml4ID0gIjogIiArIGFyZzsKKyAgICBjb25zb2xlLm1hcmtUaW1lbGluZSh0aW1lbGlu
ZU92ZXJoZWFkTWFyayArIHN1ZmZpeCk7Cit9CisKK2Z1bmN0aW9uIHRpbWVsaW5lQWdlbnRUeXBl
VG9TdHJpbmcobnVtZXJpY1R5cGUpIHsKKyAgICBmb3IgKHZhciBwcm9wIGluIHRpbWVsaW5lQWdl
bnRSZWNvcmRUeXBlKSB7CisgICAgICAgIGlmICh0aW1lbGluZUFnZW50UmVjb3JkVHlwZVtwcm9w
XSA9PSBudW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBwcm9wOworICAgIH0KKyAgICBy
ZXR1cm4gdW5kZWZpbmVkOworfQorCisvLyBJbmplY3RlZCBpbnRvIEluc3BlY3RvciB3aW5kb3cK
K2Z1bmN0aW9uIGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcigpIHsKKyAgICB3aW5kb3cu
dGltZWxpbmVSZXN1bHRzID0gbmV3IEFycmF5KCk7CisgICAgd2luZG93LldlYkluc3BlY3Rvci5h
ZGRSZWNvcmRUb1RpbWVsaW5lID0gZnVuY3Rpb24oYXJnKSB7CisgICAgICAgIHdpbmRvdy50aW1l
bGluZVJlc3VsdHMucHVzaChhcmcpOworICAgIH07CisgICAgd2luZG93Lkluc3BlY3RvckNvbnRy
b2xsZXIuc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CisgICAgcmV0dXJuICdkb25lJzsKK30KKy8v
IEluamVjdGVkIGludG8gSW5zcGVjdG9yIHdpbmRvdworZnVuY3Rpb24gZnJvbnRlbmRfZ2V0VGlt
ZWxpbmVSZXN1bHRzKCkgeworICAgIHJldHVybiB3aW5kb3cudGltZWxpbmVSZXN1bHRzOworfQor
CisvLyBJbmplY3RlZCBpbnRvIEluc3BlY3RvciB3aW5kb3cKKy8vIGZyb250ZW5kX3NldHVwIGFs
d2F5cyBnZXRzIGNhbGxlZCBiZWZvcmUgdGhlIHBhZ2UgaXMgcmVsb2FkZWQuCitmdW5jdGlvbiBm
cm9udGVuZF9zZXR1cCgpIHsKKyAgICBmcm9udGVuZF9zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsK
K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42889</attachid>
            <date>2009-11-10 13:33:45 -0800</date>
            <delta_ts>2009-11-11 07:09:11 -0800</delta_ts>
            <desc>WebInspector: Adds a unit test for Timeline records</desc>
            <filename>webkit-31204-4.patch</filename>
            <type>text/plain</type>
            <size>11997</size>
            <attacher name="Eric Ayers">zundel</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwNzU4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEtMTAgIEVyaWMgWi4gQXllcnMgIDx6
dW5kZWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgdGVzdCB0aGF0IGR1bXBzIHRoZSB0aW1lbGluZSBkYXRhIGZvciBh
IHNpbXBsZSBzY3JpcHQgdGFnLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTIwNAorCisgICAgICAgICogaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0
LmpzOgorICAgICAgICAob25sb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtc2Ny
aXB0LXRhZy0xLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVs
aW5lLXNjcmlwdC10YWctMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxp
bmUtdGVzdC5qczogQWRkZWQuCisgICAgICAgIChyZXRyaWV2ZVRpbWVsaW5lRGF0YSk6CisgICAg
ICAgICgpOgorICAgICAgICAoZHVtcFRpbWVsaW5lUmVjb3Jkcyk6CisgICAgICAgIChwcmludFRp
bWVsaW5lUmVjb3JkUHJvcGVydGllcyk6CisgICAgICAgIChpc05vbkRldGVybWluaXN0aWNQcm9w
KToKKyAgICAgICAgKHByaW50UHJvcHMpOgorICAgICAgICAoaXNUaW1lbGluZU92ZXJoZWFkUmVj
b3JkKToKKyAgICAgICAgKG1hcmtUaW1lbGluZVJlY29yZEFzT3ZlcmhlYWQpOgorICAgICAgICAo
dGltZWxpbmVBZ2VudFR5cGVUb1N0cmluZyk6CisgICAgICAgIChmcm9udGVuZF9zdGFydFRpbWVs
aW5lUHJvZmlsZXIud2luZG93LldlYkluc3BlY3Rvci5hZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAg
ICAgICAgKGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChmcm9udGVu
ZF9nZXRUaW1lbGluZVJlc3VsdHMpOgorICAgICAgICAoZnJvbnRlbmRfc2V0dXApOgorCiAyMDA5
LTExLTEwICBFcmljIFouIEF5ZXJzICA8enVuZGVsQGdvb2dsZS5jb20+CiAKSW5kZXg6IExheW91
dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMJKHJldmlzaW9uIDUwNzQxKQorKysgTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0x
MCwyOCArMTAsNDAgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogLy8gdG8g
Y2FwdHVyZSBldmVudHMgdGhhdCBoYXBwZW4gZHVyaW5nIHRoZSBpbml0aWFsIHBhZ2UgbG9hZC4K
IHZhciBpZ25vcmVMb2FkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiP3JlbG9hZCIp
ID09PSAtMTsKIGlmIChpZ25vcmVMb2FkKSB7CisgICAgLy8gU3RhcnQgaW4gYSB0aW1lciwgYXMg
c3luY2hyb25vdXMgb3BlbmluZyBvZiB3ZWIgaW5zcGVjdG9yIG1heSBmYWlsIG9uIFdpbmRvd3MK
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQogICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2hvd1dlYklu
c3BlY3RvcigpOwotICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArPSAiP3JlbG9hZCI7CiAg
ICAgfSwgMCk7CiB9CiAKIGZ1bmN0aW9uIG9ubG9hZCgpCiB7Ci0gICAgaWYgKGlnbm9yZUxvYWQp
CisgICAgaWYgKGlnbm9yZUxvYWQpIHsKKyAgICAgICAgLy8gSW5qZWN0IHNjcmlwdHMgaW50byB0
aGUgZnJvbnRlbmQgb24gdGhlIGZpcnN0IHBhc3MuICBTb21lIG90aGVyIGxvZ2ljIG1heSB3YW50
IHRvCisgICAgICAgIC8vIHVzZSB0aGVtIGJlZm9yZSB0aGUgcmVsb2FkLgorICAgICAgICB2YXIg
dG9JbmplY3QgPSBbXTsKKyAgICAgICAgdmFyIGludm9rZVNldHVwID0gZmFsc2U7CisgICAgICAg
IGZvciAodmFyIG5hbWUgaW4gd2luZG93KSB7CisgICAgICAgICAgICBpZiAobmFtZS5pbmRleE9m
KCJmcm9udGVuZF8iKSA9PT0gMCAmJiB0eXBlb2Ygd2luZG93W25hbWVdID09PSAiZnVuY3Rpb24i
KQorICAgICAgICAgICAgICAgIHRvSW5qZWN0LnB1c2god2luZG93W25hbWVdLnRvU3RyaW5nKCkp
OworICAgICAgICB9CisgICAgICAgIC8vIEludm9rZSBhIHNldHVwIG1ldGhvZCBpZiBpdCBoYXMg
YmVlbiBzcGVjaWZpZWQKKyAgICAgICAgaWYgKHdpbmRvd1siZnJvbnRlbmRfc2V0dXAiXSkgCisg
ICAgICAgICAgICB0b0luamVjdC5wdXNoKCJmcm9udGVuZF9zZXR1cCgpOyIpOworCisgICAgICAg
IGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IodG9JbmplY3Quam9pbigiXG4iKSwgZnVuY3Rpb24oYXJn
KSB7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArPSAiP3JlbG9hZCI7CisgICAg
ICAgIH0pOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgdmFyIG91dHB1dEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICBvdXRwdXRFbGVtZW50LmlkID0g
Im91dHB1dCI7CiAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRwdXRFbGVtZW50KTsK
IAotICAgIHZhciB0b0luamVjdCA9IFtdOwotICAgIGZvciAodmFyIG5hbWUgaW4gd2luZG93KSB7
Ci0gICAgICAgIGlmIChuYW1lLmluZGV4T2YoImZyb250ZW5kXyIpID09PSAwICYmIHR5cGVvZiB3
aW5kb3dbbmFtZV0gPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICB0b0luamVjdC5wdXNoKHdp
bmRvd1tuYW1lXS50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgZXZhbHVhdGVJbldlYkluc3BlY3Rv
cih0b0luamVjdC5qb2luKCJcbiIpLCBkb2l0KTsKKyAgICAvLyBNYWtlIHN1cmUgd2ViIGluc3Bl
Y3RvciBoYXMgc2V0dGxlZCBkb3duIGJlZm9yZSBleGVjdXRpbmcgdXNlciBjb2RlCisgICAgZXZh
bHVhdGVJbldlYkluc3BlY3RvcigidHJ1ZSIsIGRvaXQpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdl
YiBpbnNwZWN0b3Igd2luZG93IGlzIGNsb3NlZCBiZWZvcmUgdGhlIHRlc3QgaXMgaW50ZXJydXB0
ZWQuCiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKSW5kZXg6IExheW91dFRlc3RzL2luc3Bl
Y3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWct
MS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKK1Rlc3RzIHRoZSBU
aW1lbGluZSBBUEkgaW5zdHJ1bWVudGF0aW9uIG9mIGFuIEhUTUwgc2NyaXB0IHRhZy4KKworUGFy
c2VIVE1MCistLS0tPiBFdmFsdWF0ZVNjcmlwdAorLS0tLS0tLS0+IE1hcmtUaW1lbGluZSA6IFND
UklQVCBUQUcKKworRXZhbHVhdGVTY3JpcHQgUHJvcGVydGllczoKKysgc3RhcnRUaW1lIDogKiBE
RUZJTkVEICoKKysgZGF0YSA6IHsKKystIHVybCA6ICogREVGSU5FRCAqCisrLSBsaW5lTnVtYmVy
IDogNzYKKysgfQorKyBjaGlsZHJlbiA6ICogREVGSU5FRCAqCisrIGVuZFRpbWUgOiAqIERFRklO
RUQgKgorKyB0eXBlIDogMTAKKwpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5l
LXNjcmlwdC10YWctMS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2luc3BlY3Rvci90
aW1lbGluZS1zY3JpcHQtdGFnLTEuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2lu
c3BlY3Rvci90aW1lbGluZS1zY3JpcHQtdGFnLTEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJpbnNwZWN0b3ItdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0idGltZWxpbmUtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgordmFyIHRpbWVsaW5lTWFyayA9ICJTQ1JJUFQgVEFHIjsKKworZnVuY3Rpb24gYW5hbHl6
ZUV2YWx1YXRlU2NyaXB0KHJlY29yZCkgCit7CisgICAgdmFyIG51bUNoaWxkcmVuID0gcmVjb3Jk
LmNoaWxkcmVuID8gcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9IHJlY29yZC5j
aGlsZHJlbltpXTsKKyAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gdGltZWxpbmVBZ2VudFJlY29y
ZFR5cGUuTWFya1RpbWVsaW5lCisgICAgICAgICAgICAmJiBjaGlsZC5kYXRhLm1lc3NhZ2UgPT0g
dGltZWxpbmVNYXJrCisgICAgICAgICAgICAmJiByZWNvcmQuZGF0YS51cmwuaW5kZXhPZigidGlt
ZWxpbmUtc2NyaXB0LXRhZy0xLmh0bWwiKSAhPT0gLTEpIHsKKworICAgICAgICAgICAgLy8gRmlu
aXNoIHByaW50aW5nIHRoZSByZWNvcmQgYXMgYSB0cmVlCisgICAgICAgICAgICBkdW1wVGltZWxp
bmVSZWNvcmQocmVjb3JkLCAxKTsKKyAgICAgICAgICAgIG91dHB1dCgiIik7CisKKyAgICAgICAg
ICAgIC8vIE5vdyBwcmludCB0aGUgaW1wb3J0YW50IGZpZWxkcyBvZiB0aGUgcmVjb3JkCisgICAg
ICAgICAgICBwcmludFRpbWVsaW5lUmVjb3JkUHJvcGVydGllcyhyZWNvcmQpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitmdW5jdGlvbiBhbmFseXplUGFyc2VIVE1MKHJlY29yZCkgCit7CisgICAgLy8gTm93LCBkdW1w
IHRoZSBzcGVjaWZpYyBTY3JpcHQgdGFnIHRoYXQgaW5jbHVkZXMgdGhlIE1hcmtlciBhbmQgZHVt
cCBpdCBpbiBkZXRhaWwuCisgICAgdmFyIG51bUNoaWxkcmVuID0gcmVjb3JkLmNoaWxkcmVuID8g
cmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1D
aGlsZHJlbjsgKytpKSB7CisgICAgICAgIHZhciBjaGlsZCA9IHJlY29yZC5jaGlsZHJlbltpXTsK
KyAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT0gdGltZWxpbmVBZ2VudFJlY29yZFR5cGUuRXZhbHVh
dGVTY3JpcHQpCisgICAgICAgICAgICBpZiAoYW5hbHl6ZUV2YWx1YXRlU2NyaXB0KGNoaWxkKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fSAgCisKKy8vIExvb2sgZm9yIHRoZSBQYXJzZUh0bWwtPkV2YWx1YXRlU2NyaXB0LT5NYXJrVGlt
ZWxpbmUgdGhhdCBjb3JyZWxhdGVzIAorLy8gdG8gdGhlIDxzY3JpcHQ+IHRhZyBiZWxvdy4KK2Z1
bmN0aW9uIGFuYWx5emVUaW1lbGluZURhdGEodGltZWxpbmVSZWNvcmRzKSAKK3sKKyAgICAvLyBV
bmNvbW1lbnQgdG8gZGVidWdnaW5nIHRoZSBsaXN0IG9mIGRhdGEgcmV0dXJuZWQuCisgICAgLy8g
ZHVtcFRpbWVsaW5lUmVjb3Jkcyh0aW1lbGluZVJlY29yZHMpOworCisgICAgLy8gU2VhcmNoIGZv
ciBhIFBhcnNlSFRNTCByZWNvcmQKKyAgICB2YXIgbnVtUmVjb3JkcyA9IHRpbWVsaW5lUmVjb3Jk
cy5sZW5ndGg7CisgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbnVtUmVjb3JkczsgKytpKSB7Cisg
ICAgICAgIHZhciByZWNvcmQgPSB0aW1lbGluZVJlY29yZHNbaV07CisgICAgICAgIGlmIChyZWNv
cmQudHlwZSA9PSB0aW1lbGluZUFnZW50UmVjb3JkVHlwZS5QYXJzZUhUTUwpIHsKKyAgICAgICAg
ICAgIC8vIFVuY29tbWVudCB0byBkZWJ1ZyB0aGUgUGFyc2VIVE1MIGRhdGEgcmVjb3JkCisgICAg
ICAgICAgICAvLyBkdW1wVGltZWxpbmVSZWNvcmQocmVjb3JkLCAwKTsKKyAgICAgICAgICAgIG91
dHB1dCgiUGFyc2VIVE1MIik7CisgICAgICAgICAgICBpZiAoIWFuYWx5emVQYXJzZUhUTUwocmVj
b3JkKSkKKyAgICAgICAgICAgICAgICBvdXRwdXQoIkZhaWxlZCB0byBmaW5kIHRpbWVsaW5lIG1h
cms6ICIgKyB0aW1lbGluZU1hcmspOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBk
b2l0KCkgCit7CisgICAgcmV0cmlldmVUaW1lbGluZURhdGEoYW5hbHl6ZVRpbWVsaW5lRGF0YSk7
Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxw
PgorVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24gb2YgYW4gSFRNTCBzY3Jp
cHQgdGFnLgorPC9wPgorCis8c2NyaXB0PgorICAgICAvLyBNYXJrIHRoaXMgc2NyaXB0IHRhZyBz
byB3ZSBjYW4gZmluZCBpdCBpbiB0aGUgdGltZWxpbmUgZGF0YS4KKyAgICAgY29uc29sZS5tYXJr
VGltZWxpbmUodGltZWxpbmVNYXJrKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXRlc3QuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtdGVzdC5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNTUgQEAKKy8vIFVzZWQgdG8gbWFyayB0aW1lbGluZSByZWNvcmRzIGFzIGJlbG9uZ2lu
ZyB0byB0aGUgdGVzdCBmcmFtZXdvcmsuCit2YXIgdGltZWxpbmVPdmVyaGVhZE1hcmsgPSAiKioq
T3ZlcmhlYWQqKioiOworCisvLyBUaW1lbGluZUFnZW50IHJlY29yZCB0eXBlIGRlZmluaXRpb25z
IGZyb20gdGhlIGluc3BlY3RvcgordmFyIHRpbWVsaW5lQWdlbnRSZWNvcmRUeXBlID0ge307CisK
Ky8vIFNjcnViIHZhbHVlcyB3aGVuIHByaW50aW5nIG91dCB0aGVzZSBwcm9wZXJ0aWVzIGluIHRo
ZSByZWNvcmQgb3IgZGF0YSBmaWVsZC4KK3ZhciB0aW1lbGluZU5vbkRldGVybWluaXN0aWNQcm9w
cyA9IHsgCisgICAgZW5kVGltZSA6IDEsIAorICAgIHN0YXJ0VGltZSA6IDEsCisgICAgY2hpbGRy
ZW4gOiAxLAorICAgIHVybCA6IDEKK307CisKKy8vIENhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHRo
ZSBkb2l0KCkgZnVuY3Rpb24gaW4gdGhlIG1haW4gdGVzdCBwYWdlLgorLy8gUGFzcyBhIGZ1bmN0
aW9uIHRoYXQgd2lsbCBnZXQgYW4gYXJyYXkgb2YgdGltZWxpbmUgZGF0YSB0byBwcm9jZXNzLgor
ZnVuY3Rpb24gcmV0cmlldmVUaW1lbGluZURhdGEoYW5hbHl6ZUZ1bmN0aW9uKQoreworICAgIGV2
YWx1YXRlSW5XZWJJbnNwZWN0b3IoIldlYkluc3BlY3Rvci5UaW1lbGluZUFnZW50LlJlY29yZFR5
cGUiLCBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgdGltZWxpbmVBZ2VudFJlY29yZFR5cGUg
PSByZXN1bHQ7CisgICAgfSk7CisKKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJmcm9udGVu
ZF9nZXRUaW1lbGluZVJlc3VsdHMoKSIsIGZ1bmN0aW9uKHRpbWVsaW5lUmVjb3JkcykgeworICAg
ICAgICBpZiAodHlwZW9mKHRpbWVsaW5lUmVjb3JkcykgPT09ICJzdHJpbmciKQorICAgICAgICAg
ICAgb3V0cHV0KCJFcnJvciBmZXRjaGluZyBUaW1lbGluZSByZXN1bHRzOiAiICsgdGltZWxpbmVS
ZWNvcmRzKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIGFuYWx5emVGdW5jdGlvbih0aW1l
bGluZVJlY29yZHMpOworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfSk7CisgICAgbWFya1Rp
bWVsaW5lUmVjb3JkQXNPdmVyaGVhZCgib25sb2FkIiArIChpZ25vcmVMb2FkID8gIjppZ25vcmVM
b2FkIjogIiIpKTsKK30KKworLy8gRHVtcCBqdXN0IHRoZSByZWNvcmQgbmFtZSwgaW5kZW50aW5n
IG91dHB1dCBvbiBzZXBhcmF0ZSBsaW5lcyBmb3Igc3VicmVjb3JkcworZnVuY3Rpb24gZHVtcFRp
bWVsaW5lUmVjb3JkKHJlY29yZCwgbGV2ZWwpIAoreworICAgIHZhciBwcmVmaXggPSAiIjsKKyAg
ICB2YXIgc3VmZml4ID0gIiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbCA7ICsraSkK
KyAgICAgICAgcHJlZml4ID0gIi0tLS0iICsgcHJlZml4OworICAgIGlmIChsZXZlbCA+IDApCisg
ICAgICAgIHByZWZpeCA9IHByZWZpeCArICI+ICI7CisgICAgaWYgKHJlY29yZC50eXBlID09IHRp
bWVsaW5lQWdlbnRSZWNvcmRUeXBlLk1hcmtUaW1lbGluZSkgeworICAgICAgICBzdWZmaXggPSAi
IDogIiArIHJlY29yZC5kYXRhLm1lc3NhZ2U7CisgICAgfQorICAgIG91dHB1dChwcmVmaXggKyB0
aW1lbGluZUFnZW50VHlwZVRvU3RyaW5nKHJlY29yZC50eXBlKSArIHN1ZmZpeCk7CisKKyAgICB2
YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW4gPyByZWNvcmQuY2hpbGRyZW4ubGVuZ3Ro
IDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpCisgICAgICAg
IGR1bXBUaW1lbGluZVJlY29yZChyZWNvcmQuY2hpbGRyZW5baV0sIGxldmVsICsgMSk7Cit9CisK
Ky8vIER1bXBzIGFuIGVudGlyZSBsaXN0IG9mIHJlY29yZHMsIGN1bGxpbmcgb3V0IHRob3NlIG1h
cmtlZCBhcyBvdmVyaGVhZAorZnVuY3Rpb24gZHVtcFRpbWVsaW5lUmVjb3Jkcyh0aW1lbGluZVJl
Y29yZHMpIHsKKyAgICB2YXIgbnVtUmVjb3JkcyA9IHRpbWVsaW5lUmVjb3Jkcy5sZW5ndGg7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1SZWNvcmRzOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
Y29yZCA9IHRpbWVsaW5lUmVjb3Jkc1tpXTsKKyAgICAgICAgaWYgKCFpc1RpbWVsaW5lT3Zlcmhl
YWRSZWNvcmQocmVjb3JkKSkKKyAgICAgICAgICAgIGR1bXBUaW1lbGluZVJlY29yZChyZWNvcmQs
IDApOworICAgIH0KK30KKworLy8gU29ydCB0aGUgZmllbGRzLCB0aGVuIHN0cmlwIG91dCBzdGFy
dFRpbWUgYW5kIGVuZFRpbWUsIHRoZXkgYXJlIG5vdCBkZXRlcm1pbmlzdGljLgorLy8gQWxzbyBy
ZW1vdmUgY2hpbGRyZW4gLSB0aGF0IGZpZWxkIGlzbid0IGltcG9ydGFudCBmb3IgdGhlIHByaW50
b3V0LgorZnVuY3Rpb24gcHJpbnRUaW1lbGluZVJlY29yZFByb3BlcnRpZXMocmVjb3JkKQorewor
ICAgIG91dHB1dCh0aW1lbGluZUFnZW50VHlwZVRvU3RyaW5nKHJlY29yZC50eXBlKSArICIgUHJv
cGVydGllczoiKTsKKyAgICAvLyBVc2UgdGhpcyByZWN1cnNpdmUgcm91dGluZSB0byBwcmludCB0
aGUgcHJvcGVydGllcworICAgIHByaW50UHJvcHMocmVjb3JkLCAwKTsKK30KKworZnVuY3Rpb24g
aXNOb25EZXRlcm1pbmlzdGljUHJvcChwcm9wTmFtZSkKK3sKKyAgICBpZiAodGltZWxpbmVOb25E
ZXRlcm1pbmlzdGljUHJvcHNbcHJvcE5hbWVdKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHByaW50UHJvcHMgKHJlY29yZCwgbGV2ZWwpCit7
CisgICAgdmFyIHByb3BzID0gbmV3IEFycmF5KCk7CisgICAgZm9yICh2YXIgcHJvcCBpbiByZWNv
cmQpIHsKKyAgICAgICAgcHJvcHMucHVzaChwcm9wKTsKKyAgICB9CisKKyAgICB2YXIgcHJlZml4
ID0gIisiOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV2ZWwgOyBpKyspIHsKKyAgICAgICAg
cHJlZml4ID0gcHJlZml4ICsgIi0iOworICAgIH0KKworICAgIHByZWZpeCA9IHByZWZpeCArICIg
IjsKKyAgICBmb3IgKHZhciBwcm9wIGluIHByb3BzKSB7CisgICAgICAgIHZhciBwcm9wTmFtZSA9
IHByb3BzW3Byb3BdOworICAgICAgICB2YXIgcHJvcFZhbHVlID0gcmVjb3JkW3Byb3BOYW1lXTsK
KyAgICAgICAgaWYgKGlzTm9uRGV0ZXJtaW5pc3RpY1Byb3AocHJvcE5hbWUpKQorICAgICAgICAg
ICAgb3V0cHV0KHByZWZpeCArIHByb3BOYW1lICsgIiA6ICIgKyAocHJvcFZhbHVlID09PSB1bmRl
ZmluZWQgPyAiPHVuZGVmaW5lZD4iIDogIiAqIERFRklORUQgKiIpKTsKKyAgICAgICAgZWxzZSBp
ZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgIG91dHB1dChw
cmVmaXggKyBwcm9wTmFtZSArICIgOiB7Iik7CisgICAgICAgICAgICBwcmludFByb3BzKHByb3BW
YWx1ZSwgbGV2ZWwgKyAxKTsKKyAgICAgICAgICAgIG91dHB1dChwcmVmaXggKyAifSIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dHB1dChwcmVmaXggKyBwcm9wTmFtZSArICIgOiAi
ICsgcHJvcFZhbHVlKTsKKyAgICB9Cit9CisvLyBSZWNvcmRzIHRoYXQgaGF2ZSBiZWVuIG1hcmtl
ZCB3aXRoIGNvbnNvbGUubWFya1RpbWVsaW5lKHRpbWVsaW5lTWFyaykKKy8vIGFyZSBhIHBhcnQg
b2YgdGhlIHRlc3QgZnJhbWV3b3JrIGFuZCBub3QgYSBwYXJ0IG9mIHRoZSB0ZXN0IGJlaW5nIHBl
cmZvcm1lZAorZnVuY3Rpb24gaXNUaW1lbGluZU92ZXJoZWFkUmVjb3JkKHJlY29yZCkgeworICAg
IGlmIChyZWNvcmQudHlwZSA9PT0gMTEgJiYgcmVjb3JkLmRhdGEubWVzc2FnZS5pbmRleE9mKHRp
bWVsaW5lT3ZlcmhlYWRNYXJrKSAhPT0gLTEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHZh
ciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGlsZHJlbiA/ICByZWNvcmQuY2hpbGRyZW4ubGVuZ3Ro
IDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKKyAgICAg
ICAgaWYgKGlzVGltZWxpbmVPdmVyaGVhZFJlY29yZChyZWNvcmQuY2hpbGRyZW5baV0pKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8g
VGhpcyBtYXJrIHdpbGwgaGVscCB0aGUgdGVzdCBhbmFseXNpcyBjdWxsIG91dCByZWNvcmRzIHRo
YXQgYXJlIG92ZXJoZWFkLgorZnVuY3Rpb24gbWFya1RpbWVsaW5lUmVjb3JkQXNPdmVyaGVhZChh
cmcpCit7CisgICAgdmFyIHN1ZmZpeCA9ICcnOworICAgIGlmIChhcmcpCisgICAgICAgIHN1ZmZp
eCA9ICI6ICIgKyBhcmc7CisgICAgY29uc29sZS5tYXJrVGltZWxpbmUodGltZWxpbmVPdmVyaGVh
ZE1hcmsgKyBzdWZmaXgpOworfQorCitmdW5jdGlvbiB0aW1lbGluZUFnZW50VHlwZVRvU3RyaW5n
KG51bWVyaWNUeXBlKQoreworICAgIGZvciAodmFyIHByb3AgaW4gdGltZWxpbmVBZ2VudFJlY29y
ZFR5cGUpIHsKKyAgICAgICAgaWYgKHRpbWVsaW5lQWdlbnRSZWNvcmRUeXBlW3Byb3BdID09IG51
bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHByb3A7CisgICAgfQorICAgIHJldHVybiB1
bmRlZmluZWQ7Cit9CisKKy8vIEluamVjdGVkIGludG8gSW5zcGVjdG9yIHdpbmRvdworZnVuY3Rp
b24gZnJvbnRlbmRfc3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKK3sKKyAgICB3aW5kb3cudGltZWxp
bmVSZXN1bHRzID0gbmV3IEFycmF5KCk7CisgICAgd2luZG93LldlYkluc3BlY3Rvci5hZGRSZWNv
cmRUb1RpbWVsaW5lID0gZnVuY3Rpb24oYXJnKSB7CisgICAgICAgIHdpbmRvdy50aW1lbGluZVJl
c3VsdHMucHVzaChhcmcpOworICAgIH07CisgICAgd2luZG93Lkluc3BlY3RvckNvbnRyb2xsZXIu
c3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CisgICAgcmV0dXJuICdkb25lJzsKK30KKworLy8gSW5q
ZWN0ZWQgaW50byBJbnNwZWN0b3Igd2luZG93CitmdW5jdGlvbiBmcm9udGVuZF9nZXRUaW1lbGlu
ZVJlc3VsdHMoKSB7CisgICAgcmV0dXJuIHdpbmRvdy50aW1lbGluZVJlc3VsdHM7Cit9CisKKy8v
IEluamVjdGVkIGludG8gSW5zcGVjdG9yIHdpbmRvdworLy8gZnJvbnRlbmRfc2V0dXAgYWx3YXlz
IGdldHMgY2FsbGVkIGJlZm9yZSB0aGUgcGFnZSBpcyByZWxvYWRlZC4KK2Z1bmN0aW9uIGZyb250
ZW5kX3NldHVwKCkgeworICAgIGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcigpOworfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="24512"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42960</attachid>
            <date>2009-11-11 07:09:11 -0800</date>
            <delta_ts>2009-11-11 09:05:39 -0800</delta_ts>
            <desc>WebInspector: Adds a unit test for Timeline records</desc>
            <filename>webkit-31204-5.patch</filename>
            <type>text/plain</type>
            <size>12000</size>
            <attacher name="Eric Ayers">zundel</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUwODA2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEtMTEgIEVyaWMgWi4gQXllcnMgIDx6
dW5kZWxAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRzIGEgdGVzdCB0aGF0IGR1bXBzIHRoZSB0aW1lbGluZSBkYXRhIGZvciBh
IHNpbXBsZSBzY3JpcHQgdGFnLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTIwNAorCisgICAgICAgICogaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0
LmpzOgorICAgICAgICAob25sb2FkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxpbmUtc2Ny
aXB0LXRhZy0xLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3RpbWVs
aW5lLXNjcmlwdC10YWctMS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvdGltZWxp
bmUtdGVzdC5qczogQWRkZWQuCisgICAgICAgIChyZXRyaWV2ZVRpbWVsaW5lRGF0YSk6CisgICAg
ICAgICgpOgorICAgICAgICAoZHVtcFRpbWVsaW5lUmVjb3Jkcyk6CisgICAgICAgIChwcmludFRp
bWVsaW5lUmVjb3JkUHJvcGVydGllcyk6CisgICAgICAgIChpc05vbkRldGVybWluaXN0aWNQcm9w
KToKKyAgICAgICAgKHByaW50UHJvcHMpOgorICAgICAgICAoaXNUaW1lbGluZU92ZXJoZWFkUmVj
b3JkKToKKyAgICAgICAgKG1hcmtUaW1lbGluZVJlY29yZEFzT3ZlcmhlYWQpOgorICAgICAgICAo
dGltZWxpbmVBZ2VudFR5cGVUb1N0cmluZyk6CisgICAgICAgIChmcm9udGVuZF9zdGFydFRpbWVs
aW5lUHJvZmlsZXIud2luZG93LldlYkluc3BlY3Rvci5hZGRSZWNvcmRUb1RpbWVsaW5lKToKKyAg
ICAgICAgKGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQcm9maWxlcik6CisgICAgICAgIChmcm9udGVu
ZF9nZXRUaW1lbGluZVJlc3VsdHMpOgorICAgICAgICAoZnJvbnRlbmRfc2V0dXApOgorCiAyMDA5
LTExLTExICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3Jh
LmNvLnVrPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFNraXBwaW5nIG5ldyB0ZXN0cy4KSW5kZXg6
IExheW91dFRlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMJKHJldmlzaW9uIDUwNzQxKQor
KysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0xMCwyOCArMTAsMzkgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewog
Ly8gdG8gY2FwdHVyZSBldmVudHMgdGhhdCBoYXBwZW4gZHVyaW5nIHRoZSBpbml0aWFsIHBhZ2Ug
bG9hZC4KIHZhciBpZ25vcmVMb2FkID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiP3Jl
bG9hZCIpID09PSAtMTsKIGlmIChpZ25vcmVMb2FkKSB7CisgICAgLy8gU3RhcnQgaW4gYSB0aW1l
ciwgYXMgc3luY2hyb25vdXMgb3BlbmluZyBvZiB3ZWIgaW5zcGVjdG9yIG1heSBmYWlsIG9uIFdp
bmRvd3MKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2hv
d1dlYkluc3BlY3RvcigpOwotICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiArPSAiP3JlbG9h
ZCI7CiAgICAgfSwgMCk7CiB9CiAKIGZ1bmN0aW9uIG9ubG9hZCgpCiB7Ci0gICAgaWYgKGlnbm9y
ZUxvYWQpCisgICAgaWYgKGlnbm9yZUxvYWQpIHsKKyAgICAgICAgLy8gSW5qZWN0IHNjcmlwdHMg
aW50byB0aGUgZnJvbnRlbmQgb24gdGhlIGZpcnN0IHBhc3MuICBTb21lIG90aGVyIGxvZ2ljIG1h
eSB3YW50IHRvCisgICAgICAgIC8vIHVzZSB0aGVtIGJlZm9yZSB0aGUgcmVsb2FkLgorICAgICAg
ICB2YXIgdG9JbmplY3QgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB3aW5kb3cpIHsK
KyAgICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoImZyb250ZW5kXyIpID09PSAwICYmIHR5cGVv
ZiB3aW5kb3dbbmFtZV0gPT09ICJmdW5jdGlvbiIpCisgICAgICAgICAgICAgICAgdG9JbmplY3Qu
cHVzaCh3aW5kb3dbbmFtZV0udG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSW52
b2tlIGEgc2V0dXAgbWV0aG9kIGlmIGl0IGhhcyBiZWVuIHNwZWNpZmllZAorICAgICAgICBpZiAo
d2luZG93WyJmcm9udGVuZF9zZXR1cCJdKSAKKyAgICAgICAgICAgIHRvSW5qZWN0LnB1c2goImZy
b250ZW5kX3NldHVwKCk7Iik7CisKKyAgICAgICAgZXZhbHVhdGVJbldlYkluc3BlY3Rvcih0b0lu
amVjdC5qb2luKCJcbiIpLCBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAgICAgIHdpbmRvdy5sb2Nh
dGlvbi5ocmVmICs9ICI/cmVsb2FkIjsKKyAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICB2YXIgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOwogICAgIG91dHB1dEVsZW1lbnQuaWQgPSAib3V0cHV0IjsKICAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKG91dHB1dEVsZW1lbnQpOwogCi0gICAgdmFyIHRvSW5qZWN0ID0gW107Ci0g
ICAgZm9yICh2YXIgbmFtZSBpbiB3aW5kb3cpIHsKLSAgICAgICAgaWYgKG5hbWUuaW5kZXhPZigi
ZnJvbnRlbmRfIikgPT09IDAgJiYgdHlwZW9mIHdpbmRvd1tuYW1lXSA9PT0gImZ1bmN0aW9uIikK
LSAgICAgICAgICAgIHRvSW5qZWN0LnB1c2god2luZG93W25hbWVdLnRvU3RyaW5nKCkpOwotICAg
IH0KLSAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKHRvSW5qZWN0LmpvaW4oIlxuIiksIGRvaXQp
OworICAgIC8vIE1ha2Ugc3VyZSB3ZWIgaW5zcGVjdG9yIGhhcyBzZXR0bGVkIGRvd24gYmVmb3Jl
IGV4ZWN1dGluZyB1c2VyIGNvZGUKKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJ0cnVlIiwg
ZG9pdCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2ViIGluc3BlY3RvciB3aW5kb3cgaXMgY2xvc2Vk
IGJlZm9yZSB0aGUgdGVzdCBpcyBpbnRlcnJ1cHRlZC4KICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgewpJbmRleDogTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5l
LXNjcmlwdC10YWctMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9p
bnNwZWN0b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNiBAQAorVGVzdHMgdGhlIFRpbWVsaW5lIEFQSSBpbnN0cnVtZW50YXRpb24g
b2YgYW4gSFRNTCBzY3JpcHQgdGFnLgorCitQYXJzZUhUTUwKKy0tLS0+IEV2YWx1YXRlU2NyaXB0
CistLS0tLS0tLT4gTWFya1RpbWVsaW5lIDogU0NSSVBUIFRBRworCitFdmFsdWF0ZVNjcmlwdCBQ
cm9wZXJ0aWVzOgorKyBzdGFydFRpbWUgOiAqIERFRklORUQgKgorKyBkYXRhIDogeworKy0gdXJs
IDogKiBERUZJTkVEICoKKystIGxpbmVOdW1iZXIgOiA3NgorKyB9CisrIGNoaWxkcmVuIDogKiBE
RUZJTkVEICoKKysgZW5kVGltZSA6ICogREVGSU5FRCAqCisrIHR5cGUgOiAxMAorCkluZGV4OiBM
YXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxpbmUtc2NyaXB0LXRhZy0xLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWctMS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3RpbWVsaW5lLXNjcmlwdC10YWct
MS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Imluc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJ0aW1l
bGluZS10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Cit2YXIgdGltZWxpbmVNYXJrID0gIlND
UklQVCBUQUciOworCitmdW5jdGlvbiBhbmFseXplRXZhbHVhdGVTY3JpcHQocmVjb3JkKSAKK3sK
KyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW4gPyByZWNvcmQuY2hpbGRyZW4u
bGVuZ3RoIDogMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsK
KyAgICAgICAgdmFyIGNoaWxkID0gcmVjb3JkLmNoaWxkcmVuW2ldOworICAgICAgICBpZiAoY2hp
bGQudHlwZSA9PSB0aW1lbGluZUFnZW50UmVjb3JkVHlwZS5NYXJrVGltZWxpbmUKKyAgICAgICAg
ICAgICYmIGNoaWxkLmRhdGEubWVzc2FnZSA9PSB0aW1lbGluZU1hcmsKKyAgICAgICAgICAgICYm
IHJlY29yZC5kYXRhLnVybC5pbmRleE9mKCJ0aW1lbGluZS1zY3JpcHQtdGFnLTEuaHRtbCIpICE9
PSAtMSkgeworCisgICAgICAgICAgICAvLyBGaW5pc2ggcHJpbnRpbmcgdGhlIHJlY29yZCBhcyBh
IHRyZWUKKyAgICAgICAgICAgIGR1bXBUaW1lbGluZVJlY29yZChyZWNvcmQsIDEpOworICAgICAg
ICAgICAgb3V0cHV0KCIiKTsKKworICAgICAgICAgICAgLy8gTm93IHByaW50IHRoZSBpbXBvcnRh
bnQgZmllbGRzIG9mIHRoZSByZWNvcmQKKyAgICAgICAgICAgIHByaW50VGltZWxpbmVSZWNvcmRQ
cm9wZXJ0aWVzKHJlY29yZCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGFuYWx5emVQYXJzZUhUTUwo
cmVjb3JkKSAKK3sKKyAgICAvLyBOb3csIGR1bXAgdGhlIHNwZWNpZmljIFNjcmlwdCB0YWcgdGhh
dCBpbmNsdWRlcyB0aGUgTWFya2VyIGFuZCBkdW1wIGl0IGluIGRldGFpbC4KKyAgICB2YXIgbnVt
Q2hpbGRyZW4gPSByZWNvcmQuY2hpbGRyZW4gPyByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoIDogMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsKKyAgICAgICAgdmFy
IGNoaWxkID0gcmVjb3JkLmNoaWxkcmVuW2ldOworICAgICAgICBpZiAoY2hpbGQudHlwZSA9PSB0
aW1lbGluZUFnZW50UmVjb3JkVHlwZS5FdmFsdWF0ZVNjcmlwdCkKKyAgICAgICAgICAgIGlmIChh
bmFseXplRXZhbHVhdGVTY3JpcHQoY2hpbGQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9ICAKKworLy8gTG9vayBmb3IgdGhlIFBhcnNl
SHRtbC0+RXZhbHVhdGVTY3JpcHQtPk1hcmtUaW1lbGluZSB0aGF0IGNvcnJlbGF0ZXMgCisvLyB0
byB0aGUgPHNjcmlwdD4gdGFnIGJlbG93LgorZnVuY3Rpb24gYW5hbHl6ZVRpbWVsaW5lRGF0YSh0
aW1lbGluZVJlY29yZHMpIAoreworICAgIC8vIFVuY29tbWVudCB0byBkZWJ1Z2dpbmcgdGhlIGxp
c3Qgb2YgZGF0YSByZXR1cm5lZC4KKyAgICAvLyBkdW1wVGltZWxpbmVSZWNvcmRzKHRpbWVsaW5l
UmVjb3Jkcyk7CisKKyAgICAvLyBTZWFyY2ggZm9yIGEgUGFyc2VIVE1MIHJlY29yZAorICAgIHZh
ciBudW1SZWNvcmRzID0gdGltZWxpbmVSZWNvcmRzLmxlbmd0aDsKKyAgICBmb3IgKHZhciBpID0g
MCA7IGkgPCBudW1SZWNvcmRzOyArK2kpIHsKKyAgICAgICAgdmFyIHJlY29yZCA9IHRpbWVsaW5l
UmVjb3Jkc1tpXTsKKyAgICAgICAgaWYgKHJlY29yZC50eXBlID09IHRpbWVsaW5lQWdlbnRSZWNv
cmRUeXBlLlBhcnNlSFRNTCkgeworICAgICAgICAgICAgLy8gVW5jb21tZW50IHRvIGRlYnVnIHRo
ZSBQYXJzZUhUTUwgZGF0YSByZWNvcmQKKyAgICAgICAgICAgIC8vIGR1bXBUaW1lbGluZVJlY29y
ZChyZWNvcmQsIDApOworICAgICAgICAgICAgb3V0cHV0KCJQYXJzZUhUTUwiKTsKKyAgICAgICAg
ICAgIGlmICghYW5hbHl6ZVBhcnNlSFRNTChyZWNvcmQpKQorICAgICAgICAgICAgICAgIG91dHB1
dCgiRmFpbGVkIHRvIGZpbmQgdGltZWxpbmUgbWFyazogIiArIHRpbWVsaW5lTWFyayk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvaXQoKSAKK3sKKyAgICByZXRyaWV2ZVRpbWVs
aW5lRGF0YShhbmFseXplVGltZWxpbmVEYXRhKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisK
Kzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorPHA+CitUZXN0cyB0aGUgVGltZWxpbmUgQVBJIGlu
c3RydW1lbnRhdGlvbiBvZiBhbiBIVE1MIHNjcmlwdCB0YWcuCis8L3A+CisKKzxzY3JpcHQ+Cisg
ICAgIC8vIE1hcmsgdGhpcyBzY3JpcHQgdGFnIHNvIHdlIGNhbiBmaW5kIGl0IGluIHRoZSB0aW1l
bGluZSBkYXRhLgorICAgICBjb25zb2xlLm1hcmtUaW1lbGluZSh0aW1lbGluZU1hcmspOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGlt
ZWxpbmUtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvdGltZWxp
bmUtdGVzdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2luc3BlY3Rvci90aW1lbGlu
ZS10ZXN0LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NiBAQAorLy8gVXNlZCB0byBtYXJr
IHRpbWVsaW5lIHJlY29yZHMgYXMgYmVsb25naW5nIHRvIHRoZSB0ZXN0IGZyYW1ld29yay4KK3Zh
ciB0aW1lbGluZU92ZXJoZWFkTWFyayA9ICIqKipPdmVyaGVhZCoqKiI7CisKKy8vIFRpbWVsaW5l
QWdlbnQgcmVjb3JkIHR5cGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgaW5zcGVjdG9yCit2YXIgdGlt
ZWxpbmVBZ2VudFJlY29yZFR5cGUgPSB7fTsKKworLy8gU2NydWIgdmFsdWVzIHdoZW4gcHJpbnRp
bmcgb3V0IHRoZXNlIHByb3BlcnRpZXMgaW4gdGhlIHJlY29yZCBvciBkYXRhIGZpZWxkLgordmFy
IHRpbWVsaW5lTm9uRGV0ZXJtaW5pc3RpY1Byb3BzID0geyAKKyAgICBjaGlsZHJlbiA6IDEsCisg
ICAgZW5kVGltZSA6IDEsIAorICAgIHN0YXJ0VGltZSA6IDEsCisgICAgdXJsIDogMQorfTsKKwor
Ly8gQ2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGRvaXQoKSBmdW5jdGlvbiBpbiB0aGUgbWFp
biB0ZXN0IHBhZ2UuCisvLyBQYXNzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGdldCBhbiBhcnJheSBv
ZiB0aW1lbGluZSBkYXRhIHRvIHByb2Nlc3MuCitmdW5jdGlvbiByZXRyaWV2ZVRpbWVsaW5lRGF0
YShhbmFseXplRnVuY3Rpb24pCit7CisgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiV2ViSW5z
cGVjdG9yLlRpbWVsaW5lQWdlbnQuUmVjb3JkVHlwZSIsIGZ1bmN0aW9uKHJlc3VsdCkgeworICAg
ICAgICB0aW1lbGluZUFnZW50UmVjb3JkVHlwZSA9IHJlc3VsdDsKKyAgICB9KTsKKworICAgIGV2
YWx1YXRlSW5XZWJJbnNwZWN0b3IoImZyb250ZW5kX2dldFRpbWVsaW5lUmVzdWx0cygpIiwgZnVu
Y3Rpb24odGltZWxpbmVSZWNvcmRzKSB7CisgICAgICAgIGlmICh0eXBlb2YodGltZWxpbmVSZWNv
cmRzKSA9PT0gInN0cmluZyIpCisgICAgICAgICAgICBvdXRwdXQoIkVycm9yIGZldGNoaW5nIFRp
bWVsaW5lIHJlc3VsdHM6ICIgKyB0aW1lbGluZVJlY29yZHMpOworICAgICAgICBlbHNlIAorICAg
ICAgICAgICAgYW5hbHl6ZUZ1bmN0aW9uKHRpbWVsaW5lUmVjb3Jkcyk7CisgICAgICAgIG5vdGlm
eURvbmUoKTsKKyAgICB9KTsKKyAgICBtYXJrVGltZWxpbmVSZWNvcmRBc092ZXJoZWFkKCJvbmxv
YWQiICsgKGlnbm9yZUxvYWQgPyAiOmlnbm9yZUxvYWQiOiAiIikpOworfQorCisvLyBEdW1wIGp1
c3QgdGhlIHJlY29yZCBuYW1lLCBpbmRlbnRpbmcgb3V0cHV0IG9uIHNlcGFyYXRlIGxpbmVzIGZv
ciBzdWJyZWNvcmRzCitmdW5jdGlvbiBkdW1wVGltZWxpbmVSZWNvcmQocmVjb3JkLCBsZXZlbCkg
Cit7CisgICAgdmFyIHByZWZpeCA9ICIiOworICAgIHZhciBzdWZmaXggPSAiIjsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGxldmVsIDsgKytpKQorICAgICAgICBwcmVmaXggPSAiLS0tLSIgKyBw
cmVmaXg7CisgICAgaWYgKGxldmVsID4gMCkKKyAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgIj4g
IjsKKyAgICBpZiAocmVjb3JkLnR5cGUgPT0gdGltZWxpbmVBZ2VudFJlY29yZFR5cGUuTWFya1Rp
bWVsaW5lKSB7CisgICAgICAgIHN1ZmZpeCA9ICIgOiAiICsgcmVjb3JkLmRhdGEubWVzc2FnZTsK
KyAgICB9CisgICAgb3V0cHV0KHByZWZpeCArIHRpbWVsaW5lQWdlbnRUeXBlVG9TdHJpbmcocmVj
b3JkLnR5cGUpICsgc3VmZml4KTsKKworICAgIHZhciBudW1DaGlsZHJlbiA9IHJlY29yZC5jaGls
ZHJlbiA/IHJlY29yZC5jaGlsZHJlbi5sZW5ndGggOiAwOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbnVtQ2hpbGRyZW47ICsraSkKKyAgICAgICAgZHVtcFRpbWVsaW5lUmVjb3JkKHJlY29yZC5j
aGlsZHJlbltpXSwgbGV2ZWwgKyAxKTsKK30KKworLy8gRHVtcHMgYW4gZW50aXJlIGxpc3Qgb2Yg
cmVjb3JkcywgY3VsbGluZyBvdXQgdGhvc2UgbWFya2VkIGFzIG92ZXJoZWFkCitmdW5jdGlvbiBk
dW1wVGltZWxpbmVSZWNvcmRzKHRpbWVsaW5lUmVjb3JkcykgeworICAgIHZhciBudW1SZWNvcmRz
ID0gdGltZWxpbmVSZWNvcmRzLmxlbmd0aDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVJl
Y29yZHM7ICsraSkgeworICAgICAgICB2YXIgcmVjb3JkID0gdGltZWxpbmVSZWNvcmRzW2ldOwor
ICAgICAgICBpZiAoIWlzVGltZWxpbmVPdmVyaGVhZFJlY29yZChyZWNvcmQpKQorICAgICAgICAg
ICAgZHVtcFRpbWVsaW5lUmVjb3JkKHJlY29yZCwgMCk7CisgICAgfQorfQorCisvLyBTb3J0IHRo
ZSBmaWVsZHMsIHRoZW4gc3RyaXAgb3V0IHN0YXJ0VGltZSBhbmQgZW5kVGltZSwgdGhleSBhcmUg
bm90IGRldGVybWluaXN0aWMuCisvLyBBbHNvIHJlbW92ZSBjaGlsZHJlbiAtIHRoYXQgZmllbGQg
aXNuJ3QgaW1wb3J0YW50IGZvciB0aGUgcHJpbnRvdXQuCitmdW5jdGlvbiBwcmludFRpbWVsaW5l
UmVjb3JkUHJvcGVydGllcyhyZWNvcmQpCit7CisgICAgb3V0cHV0KHRpbWVsaW5lQWdlbnRUeXBl
VG9TdHJpbmcocmVjb3JkLnR5cGUpICsgIiBQcm9wZXJ0aWVzOiIpOworICAgIC8vIFVzZSB0aGlz
IHJlY3Vyc2l2ZSByb3V0aW5lIHRvIHByaW50IHRoZSBwcm9wZXJ0aWVzCisgICAgcHJpbnRQcm9w
cyhyZWNvcmQsIDApOworfQorCitmdW5jdGlvbiBpc05vbkRldGVybWluaXN0aWNQcm9wKHByb3BO
YW1lKQoreworICAgIGlmICh0aW1lbGluZU5vbkRldGVybWluaXN0aWNQcm9wc1twcm9wTmFtZV0p
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24g
cHJpbnRQcm9wcyAocmVjb3JkLCBsZXZlbCkKK3sKKyAgICB2YXIgcHJvcHMgPSBuZXcgQXJyYXko
KTsKKyAgICBmb3IgKHZhciBwcm9wIGluIHJlY29yZCkgeworICAgICAgICBwcm9wcy5wdXNoKHBy
b3ApOworICAgIH0KKworICAgIHZhciBwcmVmaXggPSAiKyI7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZXZlbCA7IGkrKykgeworICAgICAgICBwcmVmaXggPSBwcmVmaXggKyAiLSI7CisgICAg
fQorCisgICAgcHJlZml4ID0gcHJlZml4ICsgIiAiOworICAgIGZvciAodmFyIHByb3AgaW4gcHJv
cHMpIHsKKyAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcHNbcHJvcF07CisgICAgICAgIHZhciBw
cm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWVdOworICAgICAgICBpZiAoaXNOb25EZXRlcm1pbmlz
dGljUHJvcChwcm9wTmFtZSkpCisgICAgICAgICAgICBvdXRwdXQocHJlZml4ICsgcHJvcE5hbWUg
KyAiIDogIiArIChwcm9wVmFsdWUgPT09IHVuZGVmaW5lZCA/ICI8dW5kZWZpbmVkPiIgOiAiICog
REVGSU5FRCAqIikpOworICAgICAgICBlbHNlIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAib2Jq
ZWN0IikgeworICAgICAgICAgICAgb3V0cHV0KHByZWZpeCArIHByb3BOYW1lICsgIiA6IHsiKTsK
KyAgICAgICAgICAgIHByaW50UHJvcHMocHJvcFZhbHVlLCBsZXZlbCArIDEpOworICAgICAgICAg
ICAgb3V0cHV0KHByZWZpeCArICJ9Iik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3V0
cHV0KHByZWZpeCArIHByb3BOYW1lICsgIiA6ICIgKyBwcm9wVmFsdWUpOworICAgIH0KK30KKwor
Ly8gUmVjb3JkcyB0aGF0IGhhdmUgYmVlbiBtYXJrZWQgd2l0aCBjb25zb2xlLm1hcmtUaW1lbGlu
ZSh0aW1lbGluZU1hcmspCisvLyBhcmUgYSBwYXJ0IG9mIHRoZSB0ZXN0IGZyYW1ld29yayBhbmQg
bm90IGEgcGFydCBvZiB0aGUgdGVzdCBiZWluZyBwZXJmb3JtZWQKK2Z1bmN0aW9uIGlzVGltZWxp
bmVPdmVyaGVhZFJlY29yZChyZWNvcmQpIHsKKyAgICBpZiAocmVjb3JkLnR5cGUgPT09IDExICYm
IHJlY29yZC5kYXRhLm1lc3NhZ2UuaW5kZXhPZih0aW1lbGluZU92ZXJoZWFkTWFyaykgIT09IC0x
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB2YXIgbnVtQ2hpbGRyZW4gPSByZWNvcmQuY2hp
bGRyZW4gPyAgcmVjb3JkLmNoaWxkcmVuLmxlbmd0aCA6IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CisgICAgICAgIGlmIChpc1RpbWVsaW5lT3ZlcmhlYWRS
ZWNvcmQocmVjb3JkLmNoaWxkcmVuW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgbWFyayB3aWxsIGhlbHAgdGhlIHRl
c3QgYW5hbHlzaXMgY3VsbCBvdXQgcmVjb3JkcyB0aGF0IGFyZSBvdmVyaGVhZC4KK2Z1bmN0aW9u
IG1hcmtUaW1lbGluZVJlY29yZEFzT3ZlcmhlYWQoYXJnKQoreworICAgIHZhciBzdWZmaXggPSAn
JzsKKyAgICBpZiAoYXJnKQorICAgICAgICBzdWZmaXggPSAiOiAiICsgYXJnOworICAgIGNvbnNv
bGUubWFya1RpbWVsaW5lKHRpbWVsaW5lT3ZlcmhlYWRNYXJrICsgc3VmZml4KTsKK30KKworZnVu
Y3Rpb24gdGltZWxpbmVBZ2VudFR5cGVUb1N0cmluZyhudW1lcmljVHlwZSkKK3sKKyAgICBmb3Ig
KHZhciBwcm9wIGluIHRpbWVsaW5lQWdlbnRSZWNvcmRUeXBlKSB7CisgICAgICAgIGlmICh0aW1l
bGluZUFnZW50UmVjb3JkVHlwZVtwcm9wXSA9PSBudW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBwcm9wOworICAgIH0KKyAgICByZXR1cm4gdW5kZWZpbmVkOworfQorCisvLyBJbmplY3Rl
ZCBpbnRvIEluc3BlY3RvciB3aW5kb3cKK2Z1bmN0aW9uIGZyb250ZW5kX3N0YXJ0VGltZWxpbmVQ
cm9maWxlcigpCit7CisgICAgd2luZG93LnRpbWVsaW5lUmVzdWx0cyA9IG5ldyBBcnJheSgpOwor
ICAgIHdpbmRvdy5XZWJJbnNwZWN0b3IuYWRkUmVjb3JkVG9UaW1lbGluZSA9IGZ1bmN0aW9uKGFy
ZykgeworICAgICAgICB3aW5kb3cudGltZWxpbmVSZXN1bHRzLnB1c2goYXJnKTsKKyAgICB9Owor
ICAgIHdpbmRvdy5JbnNwZWN0b3JDb250cm9sbGVyLnN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwor
ICAgIHJldHVybiAnZG9uZSc7Cit9CisKKy8vIEluamVjdGVkIGludG8gSW5zcGVjdG9yIHdpbmRv
dworZnVuY3Rpb24gZnJvbnRlbmRfZ2V0VGltZWxpbmVSZXN1bHRzKCkgeworICAgIHJldHVybiB3
aW5kb3cudGltZWxpbmVSZXN1bHRzOworfQorCisvLyBJbmplY3RlZCBpbnRvIEluc3BlY3RvciB3
aW5kb3cKKy8vIGZyb250ZW5kX3NldHVwIGFsd2F5cyBnZXRzIGNhbGxlZCBiZWZvcmUgdGhlIHBh
Z2UgaXMgcmVsb2FkZWQuCitmdW5jdGlvbiBmcm9udGVuZF9zZXR1cCgpIHsKKyAgICBmcm9udGVu
ZF9zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>