<?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>16753</bug_id>
          
          <creation_ts>2008-01-05 14:25:18 -0800</creation_ts>
          <short_desc>date set methods with no args should result in NaN (Acid3 bug)</short_desc>
          <delta_ts>2008-02-20 20:54:03 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          <blocked>17064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66308</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-05 14:25:18 -0800</bug_when>
    <thetext>date set methods with no args should result in NaN (acid3 bug)

    function () {
      // test 90: a Date object&apos;s method called with no arguments
      var d = new Date();
      assert(isNaN(d.setMilliseconds()), &quot;calling setMilliseconds() with no arguments didn&apos;t result in NaN&quot;);
      assert(isNaN(d), &quot;date wasn&apos;t made NaN&quot;);
      assert(isNaN(d.getDay()), &quot;date wasn&apos;t made NaN&quot;);
      return 6;
    },</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66314</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-05 14:59:32 -0800</bug_when>
    <thetext>This is the spec:

15.9.5.29 Date.prototype.setUTCMilliseconds(ms)
1. Let t be this time value.
2. Call ToNumber(ms).
3. Compute MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), Result(2)).
4. Compute MakeDate(Day(t), Result(3)).
5. Set the [[Value]] property of the this value to TimeClip(Result(4)).
6. Return the value of the [[Value]] property of the this value.

I&apos;m not sure I fully understand why this turns date into NaN yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66315</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-05 15:02:43 -0800</bug_when>
    <thetext>Never mind.  It&apos;s quite clear from the spec we should be setting the Date internal value to be NaN.  Our implementation works differently than the spec does, which is our problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66419</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-06 17:23:01 -0800</bug_when>
    <thetext>I&apos;ll fix this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66427</commentid>
    <comment_count>4</comment_count>
      <attachid>18308</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-06 19:15:45 -0800</bug_when>
    <thetext>Created attachment 18308
Abstract all dateObject.set* functions into shared static functions

 JavaScriptCore/ChangeLog           |   26 +++
 JavaScriptCore/kjs/date_object.cpp |  293 ++++++------------------------------
 2 files changed, 74 insertions(+), 245 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66428</commentid>
    <comment_count>5</comment_count>
      <attachid>18309</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-06 19:15:47 -0800</bug_when>
    <thetext>Created attachment 18309
Add fast/js/date-set-to-nan test

 LayoutTests/fast/js/date-set-to-nan.html         |   13 +++++
 LayoutTests/fast/js/resources/date-set-to-nan.js |   53 ++++++++++++++++++++++
 2 files changed, 66 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66429</commentid>
    <comment_count>6</comment_count>
      <attachid>18308</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-06 19:18:34 -0800</bug_when>
    <thetext>Comment on attachment 18308
Abstract all dateObject.set* functions into shared static functions

This can stand for review by itself. Then when it&apos;s OK&apos;d I&apos;ll land it and clear the flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66430</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-06 20:11:29 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=18308) [edit]
&gt; Abstract all dateObject.set* functions into shared static functions

Sam, I think this patch may address &lt;rdar://problem/5595552&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66431</commentid>
    <comment_count>8</comment_count>
      <attachid>18308</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-06 20:34:42 -0800</bug_when>
    <thetext>Comment on attachment 18308
Abstract all dateObject.set* functions into shared static functions

Thanks, Eric!  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66448</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-07 07:02:07 -0800</bug_when>
    <thetext>At this point, the difficult part is not the fix, it&apos;s the test case.  I&apos;m not certain the test case I&apos;ve posted is enough.  I think for functions which take more arguments, I may need to test correct handling of NaN/null/undefined/inf, at different argument numbers to make sure NaN is produced in appropriate cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66451</commentid>
    <comment_count>10</comment_count>
      <attachid>18308</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-07 07:02:43 -0800</bug_when>
    <thetext>Comment on attachment 18308
Abstract all dateObject.set* functions into shared static functions

This landed as:
http://trac.webkit.org/projects/webkit/changeset/29217
Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66846</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-10 16:53:54 -0800</bug_when>
    <thetext>I&apos;m distracted by other things at the moment.  Returning this back to unassigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69306</commentid>
    <comment_count>12</comment_count>
      <attachid>18897</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-03 20:11:26 -0800</bug_when>
    <thetext>Created attachment 18897
patch, good enough

It&apos;d be even better to fix cases like undefined and null. But to fix enough to pass Acid3, this patch is all it will take.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69348</commentid>
    <comment_count>13</comment_count>
      <attachid>18897</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-04 08:07:47 -0800</bug_when>
    <thetext>Comment on attachment 18897
patch, good enough

Looking at the original Ecma algorithm, there are other ways to get a NaN during processing.  I don&apos;t think we support any of those either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71081</commentid>
    <comment_count>14</comment_count>
      <attachid>19197</attachid>
    <who name="Michael Knaup">michael.knaup</who>
    <bug_when>2008-02-18 14:09:15 -0800</bug_when>
    <thetext>Created attachment 19197
Patch to handle NaN, Inf and missing arguments

The fast/js/date-set-to-nan test runs successfully after applying this patch.

But there seems to be an additional problem with the DST correction for years smaller 1917 (at least when using UTC-1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71114</commentid>
    <comment_count>15</comment_count>
      <attachid>19206</attachid>
    <who name="Michael Knaup">michael.knaup</who>
    <bug_when>2008-02-18 22:12:04 -0800</bug_when>
    <thetext>Created attachment 19206
Patch to handle NaN, Inf and missing arguments

There was still a bug with recovering from NaN, by using setMilliseconds() which lead to a buggy date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71116</commentid>
    <comment_count>16</comment_count>
      <attachid>19206</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-02-18 22:41:30 -0800</bug_when>
    <thetext>Comment on attachment 19206
Patch to handle NaN, Inf and missing arguments

Thanks for the patch!

A few comments.  One, you should familiarize yourself with the WebKit coding style guidelines:
http://webkit.org/coding/coding-style.html

A few &quot;violations&quot; I see in this patch include:
if (foo)
{

(The { should be on the same line as the if)

and:

if (0 != args.size())

should be:

if (args.size()) (we avoid == 0 and != 0 when the meaning is otherwise clear from context.  e.g. comparing pointers to NULL or using size() for isEmpty()... in this case, there migth even be an isEmpty() which could be more clear).

Single line ifs should not have { }

Wouldn&apos;t:
ok = !(isinf(millis) || isnan(millis));
be equivalent to:
ok = isfinite(mills); ?

Also, the above if (ok) block, generally we prefer an early-return style in webkit.  In this instance you would use:
if (!ok)
   return false;

instead of wrapping that section in an if (ok) block.

Likewise, it would be more clear (or at least more inline with webkit style) to do:

if (!args.size()) {
   result = jsNaN();
   date-&gt;setInternalValue(result);
   return result;
} 

as an early return, instead of adding a long if block.

We&apos;ll need to of course run SunSpider with this change to make sure there is not speed regression due to added branching in these functions.

r- for the style issues.

Ideallly your patch would include the diff for the test case, since someone else will be landing this for you (unless you have commit-bit and I simply don&apos;t recognize your name).

Thanks again for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71154</commentid>
    <comment_count>17</comment_count>
      <attachid>19214</attachid>
    <who name="Michael Knaup">michael.knaup</who>
    <bug_when>2008-02-19 14:11:10 -0800</bug_when>
    <thetext>Created attachment 19214
Patch to handle NaN, Inf and missing arguments

I changed the code to match the code style guidelines and I added a modified the testcase which also checks for NaN &quot;recovery&quot; using the setTime, setYear, setFullYear and setUTCFullYear methods. For all other methods it is not possible to recover from an NaN date</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71261</commentid>
    <comment_count>18</comment_count>
      <attachid>19214</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-20 09:37:55 -0800</bug_when>
    <thetext>Comment on attachment 19214
Patch to handle NaN, Inf and missing arguments

+    if (3 == numArgsToUse &amp;&amp; isnan(milli))

I know that in some projects people think that putting the constant on the left side of an &quot;==&quot; is good style because it helps you avoid the mistake of using &quot;=&quot; by mistake, but we really don&apos;t believe in that, and I think it&apos;s strange to have this once instance of it mixed in with the other code.

The test is great. It&apos;s thorough. I&apos;d prefer it if a lot more of the test cases and results were written out; it&apos;s better if the results file shows a lot more of what&apos;s being tested rather than just the conclusions.

If you look at other tests that make heavy use of shouldBe you&apos;ll see how that can work.

+function makeIEHappy (functionNameRoot, value)

We don&apos;t put spaces after function names.

+function testDateFunctionWithValueExpectingNaN1(functionNameRoot) {

We put the braces on the next line, not the same line as the function.

r=me as-is, but please consider making improvements as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71303</commentid>
    <comment_count>19</comment_count>
      <attachid>19240</attachid>
    <who name="Michael Knaup">michael.knaup</who>
    <bug_when>2008-02-20 13:50:50 -0800</bug_when>
    <thetext>Created attachment 19240
revised version of the patch

Changed the testcase based on darin comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71304</commentid>
    <comment_count>20</comment_count>
      <attachid>19240</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-20 14:24:10 -0800</bug_when>
    <thetext>Comment on attachment 19240
revised version of the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71347</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-02-20 20:54:03 -0800</bug_when>
    <thetext>Landed in r30453.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18308</attachid>
            <date>2008-01-06 19:15:45 -0800</date>
            <delta_ts>2008-01-07 07:02:43 -0800</delta_ts>
            <desc>Abstract all dateObject.set* functions into shared static functions</desc>
            <filename>Abstract-all-dateObject.set-functions-into-shared-static-functions.patch</filename>
            <type>text/plain</type>
            <size>16037</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ODMyZjk1MWRhYzRmMjIwOTAyYWNiYzM4MWUyZDU5ODJiYTNjOTU2MQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDFi
YjM3M2UuLmNjNTM4OTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOC0wMS0wNiAg
RXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWJzdHJhY3QgYWxsIERhdGVPYmplY3Quc2V0KiBmdW5j
dGlvbnMgaW4gcHJlcGFyYXRpb24gZm9yIGZpeGluZzoKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NTMKKworICAgICAgICAqIGtqcy9kYXRlX29iamVj
dC5jcHA6CisgICAgICAgIChLSlM6OmZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyk6CisgICAg
ICAgIChLSlM6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEtKUzo6c2V0TmV3
VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoS0pTOjpEYXRlUHJvdG9GdW5jU2V0TWlsbGlT
ZWNvbmRzOjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChLSlM6OkRhdGVQcm90b0Z1bmNTZXRV
VENNaWxsaXNlY29uZHM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RGF0ZVByb3Rv
RnVuY1NldFNlY29uZHM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RGF0ZVByb3Rv
RnVuY1NldFVUQ1NlY29uZHM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RGF0ZVBy
b3RvRnVuY1NldE1pbnV0ZXM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RGF0ZVBy
b3RvRnVuY1NldFVUQ01pbnV0ZXM6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RGF0
ZVByb3RvRnVuY1NldEhvdXJzOjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChLSlM6OkRhdGVQ
cm90b0Z1bmNTZXRVVENIb3Vyczo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpEYXRl
UHJvdG9GdW5jU2V0RGF0ZTo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpEYXRlUHJv
dG9GdW5jU2V0VVRDRGF0ZTo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpEYXRlUHJv
dG9GdW5jU2V0TW9udGg6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKEtKUzo6RGF0ZVByb3Rv
RnVuY1NldFVUQ01vbnRoOjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgIChLSlM6OkRhdGVQcm90
b0Z1bmNTZXRGdWxsWWVhcjo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAoS0pTOjpEYXRlUHJv
dG9GdW5jU2V0VVRDRnVsbFllYXI6OmNhbGxBc0Z1bmN0aW9uKToKKwogMjAwOC0wMS0wNiAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhbi4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAg
Yi9KYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCmluZGV4IDk2MzRkM2YuLjQ4YmVk
YTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcApAQCAtMjQ2LDcgKzI0Niw3IEBAIHN0
YXRpYyBVU3RyaW5nIGZvcm1hdFRpbWUoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUgJnQsIGJvb2wg
dXRjKQogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMpIGFuZCB0IChyZXByZXNlbnRp
bmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHByb3ByaWF0ZWx5LgogLy8KIC8v
IEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW2hvdXIsXSBbbWluLF0gW3NlYyxdIFttc10p
Ci1zdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoRXhlY1N0YXRlICpleGVj
LCBjb25zdCBMaXN0ICZhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlICptcywgR3JlZ29yaWFuRGF0
ZVRpbWUgKnQpCitzdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlKiBtcywgR3Jl
Z29yaWFuRGF0ZVRpbWUqIHQpCiB7CiAgICAgZG91YmxlIG1pbGxpc2Vjb25kcyA9IDA7CiAgICAg
aW50IGlkeCA9IDA7CkBAIC0yNzUsMTEgKzI3NSwxMCBAQCBzdGF0aWMgdm9pZCBmaWxsU3RydWN0
dXJlc1VzaW5nVGltZUFyZ3MoRXhlY1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBpbnQg
bQogICAgIH0KICAgICAKICAgICAvLyBtaWxsaXNlY29uZHMKLSAgICBpZiAoaWR4IDwgbnVtQXJn
cykgeworICAgIGlmIChpZHggPCBudW1BcmdzKQogICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJn
c1tpZHhdLT50b051bWJlcihleGVjKTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAg
bWlsbGlzZWNvbmRzICs9ICptczsKLSAgICB9CiAgICAgCiAgICAgKm1zID0gbWlsbGlzZWNvbmRz
OwogfQpAQCAtMTQ0NCwzMjYgKzE0NDMsMTMwIEBAIEpTVmFsdWUqIERhdGVQcm90b0Z1bmNTZXRU
aW1lOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSogRGF0ZVByb3RvRnVuY1NldE1pbGxpU2Vj
b25kczo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYgYXJncykKK3N0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1lQXJn
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzLCBp
bnQgbnVtQXJnc1RvVXNlLCBib29sIGlucHV0SXNVVEMpCiB7CiAgICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKIAotICAgIGNvbnN0IGJvb2wgdXRjID0gZmFsc2U7Ci0KLSAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhp
c09iaik7IAorICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRl
SW5zdGFuY2UqPih0aGlzT2JqKTsKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVy
bmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKICAgICBk
b3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwogICAgIGRvdWJsZSBtcyA9
IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsK
LSAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7CisgICAgbXNUb0dyZWdv
cmlhbkRhdGVUaW1lKG1pbGxpLCBpbnB1dElzVVRDLCB0KTsKIAotICAgIGZpbGxTdHJ1Y3R1cmVz
VXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCAxLCAmbXMsICZ0KTsKKyAgICBmaWxsU3RydWN0dXJl
c1VzaW5nVGltZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KTsKIAotICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywg
dXRjKSk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVU
b01TKHQsIG1zLCBpbnB1dElzVVRDKSk7CiAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFs
dWUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlKiBEYXRlUHJvdG9G
dW5jU2V0VVRDTWlsbGlzZWNvbmRzOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUqIHNldE5l
d1ZhbHVlRnJvbURhdGVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MsIGludCBudW1BcmdzVG9Vc2UsIGJvb2wgaW5wdXRJc1VUQykKIHsKICAg
ICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCi0gICAgY29uc3QgYm9vbCB1dGMg
PSB0cnVlOwotCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERh
dGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKKyAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7CiAgICAgSlNWYWx1ZSogdiA9IHRo
aXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1i
ZXIoZXhlYyk7CiAgICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsK
ICAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKIAogICAgIEdyZWdv
cmlhbkRhdGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQp
OworICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7CiAKLSAg
ICBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgYXJncywgMSwgJm1zLCAmdCk7Cisg
ICAgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwg
Jm1zLCAmdCk7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRl
VGltZVRvTVModCwgbXMsIHV0YykpOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGdy
ZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNEYXRlT2Jq
LT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNW
YWx1ZSogRGF0ZVByb3RvRnVuY1NldFNlY29uZHM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCitKU1ZhbHVlKiBEYXRl
UHJvdG9GdW5jU2V0TWlsbGlTZWNvbmRzOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09i
ai0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0KLSAgICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwotCi0g
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+
KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUo
KTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKLSAgICBkb3VibGUgc2Vj
cyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIGRvdWJsZSBtcyA9IG1pbGxpIC0g
c2VjcyAqIG1zUGVyU2Vjb25kOwotCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBtc1Rv
R3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7CisgICAgY29uc3QgYm9vbCBpbnB1dElz
VVRDID0gZmFsc2U7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRo
aXNPYmosIGFyZ3MsIDEsIGlucHV0SXNVVEMpOworfQogCi0gICAgZmlsbFN0cnVjdHVyZXNVc2lu
Z1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIDIsICZtcywgJnQpOworSlNWYWx1ZSogRGF0ZVByb3RvRnVu
Y1NldFVUQ01pbGxpc2Vjb25kczo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBjb25zdCBib29sIGlucHV0
SXNVVEMgPSB0cnVlOworICAgIHJldHVybiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0
aGlzT2JqLCBhcmdzLCAxLCBpbnB1dElzVVRDKTsKK30KIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9
IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7Ci0gICAgdGhpc0Rh
dGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OworSlNW
YWx1ZSogRGF0ZVByb3RvRnVuY1NldFNlY29uZHM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgY29uc3Qg
Ym9vbCBpbnB1dElzVVRDID0gZmFsc2U7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVB
cmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIDIsIGlucHV0SXNVVEMpOwogfQogCiBKU1ZhbHVlKiBE
YXRlUHJvdG9GdW5jU2V0VVRDU2Vjb25kczo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBpZiAoIXRoaXNP
YmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgY29uc3QgYm9vbCB1dGMgPSB0cnVlOwotCi0g
ICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+
KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUo
KTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKLSAgICBkb3VibGUgc2Vj
cyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIGRvdWJsZSBtcyA9IG1pbGxpIC0g
c2VjcyAqIG1zUGVyU2Vjb25kOwotCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBtc1Rv
R3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0KLSAgICBmaWxsU3RydWN0dXJlc1Vz
aW5nVGltZUFyZ3MoZXhlYywgYXJncywgMiwgJm1zLCAmdCk7Ci0KLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIHV0YykpOwotICAgIHRo
aXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSB0cnVlOworICAgIHJldHVybiBzZXROZXdWYWx1
ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzT2JqLCBhcmdzLCAyLCBpbnB1dElzVVRDKTsKIH0KIAog
SlNWYWx1ZSogRGF0ZVByb3RvRnVuY1NldE1pbnV0ZXM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaWYg
KCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLQotICAgIGNvbnN0IGJvb2wgdXRjID0gZmFs
c2U7Ci0KLSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUlu
c3RhbmNlKj4odGhpc09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJu
YWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgIGRv
dWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgZG91YmxlIG1zID0g
bWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0Owot
ICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLQotICAgIGZpbGxTdHJ1
Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCAzLCAmbXMsICZ0KTsKLQotICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7
Ci0gICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIGNvbnN0IGJvb2wgaW5wdXRJc1VUQyA9IGZhbHNlOworICAgIHJldHVybiBz
ZXROZXdWYWx1ZUZyb21UaW1lQXJncyhleGVjLCB0aGlzT2JqLCBhcmdzLCAzLCBpbnB1dElzVVRD
KTsKIH0KIAogSlNWYWx1ZSogRGF0ZVByb3RvRnVuY1NldFVUQ01pbnV0ZXM6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3Mp
CiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLQotICAgIGNvbnN0IGJv
b2wgdXRjID0gdHJ1ZTsKLQotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNf
Y2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRl
T2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhl
Yyk7Ci0gICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKLSAgICBk
b3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLQotICAgIEdyZWdvcmlhbkRh
dGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwotCi0g
ICAgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIDMsICZtcywgJnQpOwot
Ci0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQs
IG1zLCB1dGMpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKKyAg
ICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhpc09iaiwgYXJncywgMywg
aW5wdXRJc1VUQyk7CiB9CiAKIEpTVmFsdWUqIERhdGVQcm90b0Z1bmNTZXRIb3Vyczo6Y2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYg
YXJncykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8p
KQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgY29u
c3QgYm9vbCB1dGMgPSBmYWxzZTsKLQotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBz
dGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRo
aXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1i
ZXIoZXhlYyk7Ci0gICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsK
LSAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLQotICAgIEdyZWdv
cmlhbkRhdGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQp
OwotCi0gICAgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIDQsICZtcywg
JnQpOwotCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVU
b01TKHQsIG1zLCB1dGMpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFs
c2U7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKGV4ZWMsIHRoaXNPYmosIGFy
Z3MsIDQsIGlucHV0SXNVVEMpOwogfQogCiBKU1ZhbHVlKiBEYXRlUHJvdG9GdW5jU2V0VVRDSG91
cnM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3Rh
bmNlOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
LQotICAgIGNvbnN0IGJvb2wgdXRjID0gdHJ1ZTsKLQotICAgIERhdGVJbnN0YW5jZSogdGhpc0Rh
dGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1
ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0g
di0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVy
U2Vjb25kKTsKLSAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLQot
ICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxp
LCB1dGMsIHQpOwotCi0gICAgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3Ms
IDQsICZtcywgJnQpOwotCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFu
RGF0ZVRpbWVUb01TKHQsIG1zLCB1dGMpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgY29uc3QgYm9vbCBpbnB1dElz
VVRDID0gdHJ1ZTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoZXhlYywgdGhp
c09iaiwgYXJncywgNCwgaW5wdXRJc1VUQyk7CiB9CiAKIEpTVmFsdWUqIERhdGVQcm90b0Z1bmNT
ZXREYXRlOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkRhdGVJ
bnN0YW5jZTo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7Ci0KLSAgICBjb25zdCBib29sIHV0YyA9IGZhbHNlOwotCi0gICAgRGF0ZUluc3RhbmNlKiB0
aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBK
U1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWls
bGkgPSB2LT50b051bWJlcihleGVjKTsKLSAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8g
bXNQZXJTZWNvbmQpOwotICAgIGRvdWJsZSBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25k
OwotCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsKLSAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUo
bWlsbGksIHV0YywgdCk7Ci0KLSAgICBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywg
YXJncywgMSwgJm1zLCAmdCk7Ci0KLSAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihncmVn
b3JpYW5EYXRlVGltZVRvTVModCwgbXMsIHV0YykpOwotICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRl
cm5hbFZhbHVlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBjb25zdCBib29sIGlu
cHV0SXNVVEMgPSBmYWxzZTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhl
YywgdGhpc09iaiwgYXJncywgMSwgaW5wdXRJc1VUQyk7CiB9CiAKIEpTVmFsdWUqIERhdGVQcm90
b0Z1bmNTZXRVVENEYXRlOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6aW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7Ci0KLSAgICBjb25zdCBib29sIHV0YyA9IHRydWU7Ci0KLSAgICBEYXRlSW5z
dGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7
IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRv
dWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgIGRvdWJsZSBzZWNzID0gZmxvb3Io
bWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgZG91YmxlIG1zID0gbWlsbGkgLSBzZWNzICogbXNQ
ZXJTZWNvbmQ7Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIG1zVG9HcmVnb3JpYW5E
YXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLQotICAgIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJn
cyhleGVjLCBhcmdzLCAxLCAmbXMsICZ0KTsKLQotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7Ci0gICAgdGhpc0RhdGVPYmot
PnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIGNvbnN0
IGJvb2wgaW5wdXRJc1VUQyA9IHRydWU7CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVB
cmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3MsIDEsIGlucHV0SXNVVEMpOwogfQogCiBKU1ZhbHVlKiBE
YXRlUHJvdG9GdW5jU2V0TW9udGg6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmRGF0ZUluc3RhbmNlOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKLQotICAgIGNvbnN0IGJvb2wgdXRjID0gZmFsc2U7Ci0KLSAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhp
c09iaik7IAotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwot
ICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgIGRvdWJsZSBzZWNzID0g
Zmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgZG91YmxlIG1zID0gbWlsbGkgLSBzZWNz
ICogbXNQZXJTZWNvbmQ7Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIG1zVG9HcmVn
b3JpYW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKLQotICAgIGZpbGxTdHJ1Y3R1cmVzVXNpbmdE
YXRlQXJncyhleGVjLCBhcmdzLCAyLCAmbXMsICZ0KTsgICAgCi0KLSAgICBKU1ZhbHVlKiByZXN1
bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIHV0YykpOwotICAgIHRo
aXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBjb25zdCBib29sIGlucHV0SXNVVEMgPSBmYWxzZTsKKyAgICByZXR1cm4gc2V0TmV3VmFs
dWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc09iaiwgYXJncywgMiwgaW5wdXRJc1VUQyk7CiB9CiAK
IEpTVmFsdWUqIERhdGVQcm90b0Z1bmNTZXRVVENNb250aDo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQotICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgY29uc3QgYm9vbCB1dGMgPSB0
cnVlOwotCi0gICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJ
bnN0YW5jZSo+KHRoaXNPYmopOyAKLSAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVy
bmFsVmFsdWUoKTsKLSAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKLSAgICBk
b3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIGRvdWJsZSBtcyA9
IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwotCi0gICAgR3JlZ29yaWFuRGF0ZVRpbWUgdDsK
LSAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0KLSAgICBmaWxsU3Ry
dWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywgYXJncywgMiwgJm1zLCAmdCk7ICAgIAotCi0gICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCB1
dGMpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gdHJ1ZTsKKyAgICByZXR1
cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhpc09iaiwgYXJncywgMiwgaW5wdXRJ
c1VUQyk7CiB9CiAKIEpTVmFsdWUqIERhdGVQcm90b0Z1bmNTZXRGdWxsWWVhcjo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJn
cykKIHsKLSAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OmluZm8pKQot
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwotCi0gICAgY29uc3Qg
Ym9vbCB1dGMgPSBmYWxzZTsKLQotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0
aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRoaXNE
YXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIo
ZXhlYyk7Ci0gICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKLSAg
ICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLQotICAgIEdyZWdvcmlh
bkRhdGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwot
Ci0gICAgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIDMsICZtcywgJnQp
OwotCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01T
KHQsIG1zLCB1dGMpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQp
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgY29uc3QgYm9vbCBpbnB1dElzVVRDID0gZmFsc2U7
CisgICAgcmV0dXJuIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKGV4ZWMsIHRoaXNPYmosIGFyZ3Ms
IDMsIGlucHV0SXNVVEMpOwogfQogCiBKU1ZhbHVlKiBEYXRlUHJvdG9GdW5jU2V0VVRDRnVsbFll
YXI6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmRGF0ZUluc3Rh
bmNlOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
LQotICAgIGNvbnN0IGJvb2wgdXRjID0gdHJ1ZTsKLQotICAgIERhdGVJbnN0YW5jZSogdGhpc0Rh
dGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1
ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0g
di0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVy
U2Vjb25kKTsKLSAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLQot
ICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxp
LCB1dGMsIHQpOwotCi0gICAgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMsIGFyZ3Ms
IDMsICZtcywgJnQpOwotCi0gICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFu
RGF0ZVRpbWVUb01TKHQsIG1zLCB1dGMpKTsKLSAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxW
YWx1ZShyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgY29uc3QgYm9vbCBpbnB1dElz
VVRDID0gdHJ1ZTsKKyAgICByZXR1cm4gc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoZXhlYywgdGhp
c09iaiwgYXJncywgMywgaW5wdXRJc1VUQyk7CiB9CiAKIEpTVmFsdWUqIERhdGVQcm90b0Z1bmNT
ZXRZZWFyOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBMaXN0JiBhcmdzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18309</attachid>
            <date>2008-01-06 19:15:47 -0800</date>
            <delta_ts>2008-01-06 19:15:47 -0800</delta_ts>
            <desc>Add fast/js/date-set-to-nan test</desc>
            <filename>Add-fast-js-date-set-to-nan-test.patch</filename>
            <type>text/plain</type>
            <size>2400</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDdhM2JkYmQ0OWY0ZmI2NGI2ZWY1ZjU4OWNlMWM3ZjEyMDEyODk0ZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9qcy9kYXRlLXNldC10by1uYW4uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
anMvZGF0ZS1zZXQtdG8tbmFuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uM2M2MTkyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvZGF0ZS1z
ZXQtdG8tbmFuLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kYXRlLXNldC10by1uYW4uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZGF0ZS1zZXQtdG8tbmFu
LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZGF0ZS1zZXQtdG8tbmFuLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTFlNmYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9kYXRlLXNldC10by1uYW4uanMKQEAg
LTAsMCArMSw1MyBAQAorCit2YXIgZGF0ZUZ1bmN0aW9uTmFtZVJvb3RzID0gWworICAgICJUaW1l
IiwKKyAgICAiTWlsbGlzZWNvbmRzIiwKKyAgICAiVVRDTWlsbGlzZWNvbmRzIiwKKyAgICAiU2Vj
b25kcyIsCisgICAgIlVUQ1NlY29uZHMiLAorICAgICJNaW51dGVzIiwKKyAgICAiVVRDTWludXRl
cyIsCisgICAgIkhvdXJzIiwKKyAgICAiVVRDSG91cnMiLAorICAgICJEYXRlIiwKKyAgICAiVVRD
RGF0ZSIsCisgICAgIk1vbnRoIiwKKyAgICAiVVRDTW9udGgiLAorICAgICJGdWxsWWVhciIsCisg
ICAgIlVUQ0Z1bGxZZWFyIiwKKyAgICAiWWVhciIKK107CisKK3ZhciBwb3NJbmYgPSAxLzA7Cit2
YXIgbmVnSW5mID0gLTEvMDsKKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4
cGVjdGluZ05hTihmdW5jdGlvbk5hbWVSb290LCBzZXRWYWx1ZSkgeworICAgIHZhciBkYXRlID0g
bmV3IERhdGUoKTsKKyAgICB2YXIgc2V0UmVzdWx0ID0gZGF0ZVsic2V0IiArIGZ1bmN0aW9uTmFt
ZVJvb3RdKHNldFZhbHVlKTsKKyAgICBpZiAoIWlzTmFOKHNldFJlc3VsdCkpIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgiZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoIiArIHNldFZhbHVl
ICsgIikgd2FzICIgKyBzZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFOIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFyIGdldFJlc3VsdCA9IGRhdGVbImdldCIgKyBmdW5j
dGlvbk5hbWVSb290XSgpOworICAgIGlmICghaXNOYU4oZ2V0UmVzdWx0KSkgeworICAgICAgICB0
ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVSb290ICsgIigpIHdhcyAiICsgZ2V0
UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiB0ZXN0RGF0ZUZ1bmN0aW9uKGZ1bmN0
aW9uTmFtZVJvb3QpIHsKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisgICAgc3VjY2VzcyAmPSB0
ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlRXhwZWN0aW5nTmFOKGZ1bmN0aW9uTmFtZVJvb3QpOwor
ICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTihmdW5j
dGlvbk5hbWVSb290LCBOYU4pOworICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlvbldpdGhW
YWx1ZUV4cGVjdGluZ05hTihmdW5jdGlvbk5hbWVSb290LCBwb3NJbmYpOworICAgIHN1Y2Nlc3Mg
Jj0gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTihmdW5jdGlvbk5hbWVSb290
LCBuZWdJbmYpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICB0ZXN0UGFzc2VkKCJkYXRlLnNl
dCIgKyBmdW5jdGlvbk5hbWVSb290ICsgIiBwYXNzZWQgYWxsIHRlc3RzIik7Cit9CisKK2ZvciAo
dmFyIHggaW4gZGF0ZUZ1bmN0aW9uTmFtZVJvb3RzKSB7CisgICAgdGVzdERhdGVGdW5jdGlvbihk
YXRlRnVuY3Rpb25OYW1lUm9vdHNbeF0pOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18897</attachid>
            <date>2008-02-03 20:11:26 -0800</date>
            <delta_ts>2008-02-03 20:11:26 -0800</delta_ts>
            <desc>patch, good enough</desc>
            <filename>DatePatch.txt</filename>
            <type>text/plain</type>
            <size>683</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAkocmV2aXNpb24gMjk5NTcpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ3
LDYgKzE0NDcsMTMgQEAgc3RhdGljIEpTVmFsdWUqIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKAog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUlu
c3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmop
OworCisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApIHsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOYU4oKTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBKU1ZhbHVlKiB2ID0gdGhp
c0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJl
cihleGVjKTsKICAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19197</attachid>
            <date>2008-02-18 14:09:15 -0800</date>
            <delta_ts>2008-02-18 22:12:04 -0800</delta_ts>
            <desc>Patch to handle NaN, Inf and missing arguments</desc>
            <filename>jsDatePatch.txt</filename>
            <type>text/plain</type>
            <size>5984</size>
            <attacher name="Michael Knaup">michael.knaup</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwMzgzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDItMTggIE1pY2hhZWwg
S25hdXAgIDxtaWNoYWVsLmtuYXVwQG1hYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBCdWcgMTg3NTMgLSBkYXRlIHNldCBtZXRo
b2RzIHdpdGggbm8gYXJncyBzaG91bGQgcmVzdWxkIGluIE5hTgorICAgICAgICBVc2luZyBubyBh
cmdzLCBOYU4gb3IgKy1JbmYgdmFsdWVzIHdpbGwgbm93IHJlc3VsdCBpbiBOYU4gdmFsdWVzLgor
CisgICAgICAgICoga2pzL2RhdGVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6ZmlsbFN0cnVj
dHVyZXNVc2luZ1RpbWVBcmdzKToKKyAgICAgICAgKEtKUzo6ZmlsbFN0cnVjdHVyZXNVc2luZ0Rh
dGVBcmdzKToKKyAgICAgICAgKEtKUzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAg
ICAoS0pTOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6CisKIDIwMDgtMDItMTggIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAkocmV2aXNpb24gMzAzNjgpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5LDcg
QEAgc3RhdGljIFVTdHJpbmcgZm9ybWF0VGltZShjb25zdCBHcmVnb3JpYQogc3RhdGljIHZvaWQg
ZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYg
YXJncywgaW50IG1heEFyZ3MsIGRvdWJsZSogbXMsIEdyZWdvcmlhbkRhdGVUaW1lKiB0KQogewog
ICAgIGRvdWJsZSBtaWxsaXNlY29uZHMgPSAwOworICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGlu
dCBpZHggPSAwOwogICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgICAgCkBAIC0yNTks
MjQgKzI2MCwzMiBAQCBzdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoCiAg
ICAgLy8gaG91cnMKICAgICBpZiAobWF4QXJncyA+PSA0ICYmIGlkeCA8IG51bUFyZ3MpIHsKICAg
ICAgICAgdC0+aG91ciA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+
dG9JbnQzMihleGVjKSAqIG1zUGVySG91cjsKKyAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3Nb
aWR4KytdLT50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVySG91cjsKICAgICB9CiAKICAgICAvLyBt
aW51dGVzCi0gICAgaWYgKG1heEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzKSB7CisgICAgaWYg
KG1heEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzICYmIG9rKSB7CiAgICAgICAgIHQtPm1pbnV0
ZSA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVj
KSAqIG1zUGVyTWludXRlOworICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJnc1tpZHgrK10tPnRv
SW50MzIoZXhlYywgb2spICogbXNQZXJNaW51dGU7CiAgICAgfQogICAgIAogICAgIC8vIHNlY29u
ZHMKLSAgICBpZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MpIHsKKyAgICBpZiAobWF4
QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2spIHsKICAgICAgICAgdC0+c2Vjb25kID0g
MDsKLSAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMpICog
bXNQZXJTZWNvbmQ7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQz
MihleGVjLCBvaykgKiBtc1BlclNlY29uZDsKICAgICB9CiAgICAgCiAgICAgLy8gbWlsbGlzZWNv
bmRzCi0gICAgaWYgKGlkeCA8IG51bUFyZ3MpCi0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdz
W2lkeF0tPnRvTnVtYmVyKGV4ZWMpOworICAgIGlmIChpZHggPCBudW1BcmdzICYmIG9rKQorICAg
IHsKKyAgICAgICAgZG91YmxlIG1pbGxpcyA9IGFyZ3NbaWR4XS0+dG9OdW1iZXIoZXhlYyk7Cisg
ICAgICAgIGlmIChpc2luZihtaWxsaXMpIHx8IGlzbmFuKG1pbGxpcykpCisgICAgICAgICAgICBt
aWxsaXNlY29uZHMgPSBOYU47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1pbGxpc2Vjb25k
cyArPSBtaWxsaXM7CisgICAgfQorICAgIGVsc2UgaWYgKG51bUFyZ3MgPT0gMCB8fCAhb2spCisg
ICAgICAgIG1pbGxpc2Vjb25kcyA9IE5hTjsKICAgICBlbHNlCiAgICAgICAgIG1pbGxpc2Vjb25k
cyArPSAqbXM7CiAgICAgCkBAIC0yOTAsNiArMjk5LDcgQEAgc3RhdGljIHZvaWQgZmlsbFN0cnVj
dHVyZXNVc2luZ1RpbWVBcmdzKAogc3RhdGljIHZvaWQgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVB
cmdzKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncywgaW50IG1heEFyZ3MsIGRvdWJs
ZSAqbXMsIEdyZWdvcmlhbkRhdGVUaW1lICp0KQogewogICAgIGludCBpZHggPSAwOworICAgIGJv
b2wgb2sgPSB0cnVlOwogICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgIAogICAgIC8v
IEpTIGFsbG93cyBleHRyYSB0cmFpbGluZyBhcmd1bWVudHMgLS0gaWdub3JlIHRoZW0KQEAgLTI5
OCwxNyArMzA4LDI1IEBAIHN0YXRpYyB2b2lkIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncygK
ICAgCiAgICAgLy8geWVhcnMKICAgICBpZiAobWF4QXJncyA+PSAzICYmIGlkeCA8IG51bUFyZ3Mp
Ci0gICAgICAgIHQtPnllYXIgPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjKSAtIDE5MDA7Ci0g
IAorICAgIHsKKyAgICAgICAgdC0+eWVhciA9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMsIG9r
KSAtIDE5MDA7CisgICAgfQorICAgIAogICAgIC8vIG1vbnRocwotICAgIGlmIChtYXhBcmdzID49
IDIgJiYgaWR4IDwgbnVtQXJncykKLSAgICAgICAgdC0+bW9udGggPSBhcmdzW2lkeCsrXS0+dG9J
bnQzMihleGVjKTsKLSAgCisgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBudW1BcmdzICYm
IG9rKQorICAgIHsgICAKKyAgICAgICAgdC0+bW9udGggPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihl
eGVjLCBvayk7CisgICAgfQorICAgIAogICAgIC8vIGRheXMKLSAgICBpZiAoaWR4IDwgbnVtQXJn
cykgeworICAgIGlmIChpZHggPCBudW1BcmdzICYmIG9rKQorICAgIHsgICAKICAgICAgICAgdC0+
bW9udGhEYXkgPSAwOwotICAgICAgICAqbXMgKz0gYXJnc1tpZHhdLT50b0ludDMyKGV4ZWMpICog
bXNQZXJEYXk7CisgICAgICAgICptcyArPSBhcmdzW2lkeF0tPnRvSW50MzIoZXhlYywgb2spICog
bXNQZXJEYXk7CiAgICAgfQorICAgIAorICAgIGlmIChudW1BcmdzID09IDAgfHwgIW9rKQorICAg
ICAgICAqbXMgPSBOYU47CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBE
YXRlSW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDY5LDEzICsx
NDg3LDIxIEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21EYXRlQXJncygKIAogICAg
IERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih0
aGlzT2JqKTsKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFsVmFsdWUoKTsK
KyAgICAKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKLSAgICBkb3VibGUg
c2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIGRvdWJsZSBtcyA9IG1pbGxp
IC0gc2VjcyAqIG1zUGVyU2Vjb25kOworICAgIGRvdWJsZSBtcyA9IDA7CiAKICAgICBHcmVnb3Jp
YW5EYXRlVGltZSB0OwotICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VU
QywgdCk7Ci0KKyAgICBpZiAoMyA9PSBudW1BcmdzVG9Vc2UgJiYgaXNuYW4obWlsbGkpKQorICAg
ICAgICAvLyBCYXNlZCBvbiAxNS45LjUuNDAgLSAuNDEgLSBzZXRGdWxsKFVUQylZZWFyIC0gdGhl
IHRpbWUgbXVzdCBiZSByZXNldCB0byArMCBpZiBpdCBpcyBOYU4uIAorICAgICAgICBtc1RvR3Jl
Z29yaWFuRGF0ZVRpbWUoMCwgdHJ1ZSwgdCk7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZG91
YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKKyAgICAgICAgbXMgPSBtaWxs
aSAtIHNlY3MgKiBtc1BlclNlY29uZDsKKyAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1p
bGxpLCBpbnB1dElzVVRDLCB0KTsKKyAgICB9CisgICAgCiAgICAgZmlsbFN0cnVjdHVyZXNVc2lu
Z0RhdGVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAmdCk7CiAKICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0
SXNVVEMpKTsKQEAgLTE1NzMsMTcgKzE1OTksMzUgQEAgSlNWYWx1ZSogZGF0ZVByb3RvRnVuY1Nl
dFllYXIoRXhlY1N0YXRlKgogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwogCiAgICAgY29uc3QgYm9vbCB1dGMgPSBmYWxzZTsKKyAgICBib29sIG9rID0gdHJ1ZTsK
IAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2FzdDxEYXRlSW5zdGFu
Y2UqPih0aGlzT2JqKTsgCisgICAgCisgICAgaWYgKDAgPT0gYXJncy5zaXplKCkpCisgICAgewor
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgICAgICB0aGlzRGF0ZU9iai0+
c2V0SW50ZXJuYWxWYWx1ZSAocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAg
ICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgZG91YmxlIHNlY3MgPSBm
bG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKLSAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3Mg
KiBtc1BlclNlY29uZDsKKyAgICBkb3VibGUgbXMgPSAwOwogCiAgICAgR3JlZ29yaWFuRGF0ZVRp
bWUgdDsKLSAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0KLSAgICB0
LnllYXIgPSAoYXJnc1swXS0+dG9JbnQzMihleGVjKSA+IDk5IHx8IGFyZ3NbMF0tPnRvSW50MzIo
ZXhlYykgPCAwKSA/IGFyZ3NbMF0tPnRvSW50MzIoZXhlYykgLSAxOTAwIDogYXJnc1swXS0+dG9J
bnQzMihleGVjKTsKKyAgICBpZiAoaXNuYW4obWlsbGkpKQorICAgICAgICAvLyByZXNldCB0aGUg
dGltZSB0byArMAorICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoMCwgdHJ1ZSwgdCk7Cisg
ICAgZWxzZQorICAgIHsgICAKKyAgICAgICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1z
UGVyU2Vjb25kKTsKKyAgICAgICAgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKKyAg
ICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOworICAgIH0KKyAgICAK
KyAgICB0LnllYXIgPSAoYXJnc1swXS0+dG9JbnQzMihleGVjLCBvaykgPiA5OSB8fCBhcmdzWzBd
LT50b0ludDMyKGV4ZWMpIDwgMCkgPyBhcmdzWzBdLT50b0ludDMyKGV4ZWMpIC0gMTkwMCA6IGFy
Z3NbMF0tPnRvSW50MzIoZXhlYyk7CisgICAgaWYgKCFvaykKKyAgICAgICAgbXMgPSBOYU47CiAK
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVModCwg
bXMsIHV0YykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19206</attachid>
            <date>2008-02-18 22:12:04 -0800</date>
            <delta_ts>2008-02-19 14:11:10 -0800</delta_ts>
            <desc>Patch to handle NaN, Inf and missing arguments</desc>
            <filename>jsDatePatch.txt</filename>
            <type>text/plain</type>
            <size>8552</size>
            <attacher name="Michael Knaup">michael.knaup</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwMzgzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDItMTggIE1pY2hhZWwg
S25hdXAgIDxtaWNoYWVsLmtuYXVwQG1hYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBCdWcgMTg3NTMgLSBkYXRlIHNldCBtZXRo
b2RzIHdpdGggbm8gYXJncyBzaG91bGQgcmVzdWxkIGluIE5hTgorICAgICAgICBVc2luZyBubyBh
cmdzLCBOYU4gb3IgKy1JbmYgdmFsdWVzIHdpbGwgbm93IHJlc3VsdCBpbiBOYU4gdmFsdWVzLgor
CisgICAgICAgICoga2pzL2RhdGVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6ZmlsbFN0cnVj
dHVyZXNVc2luZ1RpbWVBcmdzKToKKyAgICAgICAgKEtKUzo6ZmlsbFN0cnVjdHVyZXNVc2luZ0Rh
dGVBcmdzKToKKyAgICAgICAgKEtKUzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAg
ICAoS0pTOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6CisKIDIwMDgtMDItMTggIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAkocmV2aXNpb24gMzAzNjgpCisrKyBKYXZhU2NyaXB0
Q29yZS9ranMvZGF0ZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsOSArMjQ2LDEw
IEBAIHN0YXRpYyBVU3RyaW5nIGZvcm1hdFRpbWUoY29uc3QgR3JlZ29yaWEKIC8vIG1zIChyZXBy
ZXNlbnRpbmcgbWlsbGlzZWNvbmRzKSBhbmQgdCAocmVwcmVzZW50aW5nIHRoZSByZXN0IG9mIHRo
ZSBkYXRlIHN0cnVjdHVyZSkgYXBwcm9wcmlhdGVseS4KIC8vCiAvLyBGb3JtYXQgb2YgbWVtYmVy
IGZ1bmN0aW9uOiBmKFtob3VyLF0gW21pbixdIFtzZWMsXSBbbXNdKQotc3RhdGljIHZvaWQgZmls
bFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJn
cywgaW50IG1heEFyZ3MsIGRvdWJsZSogbXMsIEdyZWdvcmlhbkRhdGVUaW1lKiB0KQorc3RhdGlj
IGJvb2wgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
TGlzdCYgYXJncywgaW50IG1heEFyZ3MsIGRvdWJsZSogbXMsIEdyZWdvcmlhbkRhdGVUaW1lKiB0
KQogewogICAgIGRvdWJsZSBtaWxsaXNlY29uZHMgPSAwOworICAgIGJvb2wgb2sgPSB0cnVlOwog
ICAgIGludCBpZHggPSAwOwogICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgICAgCkBA
IC0yNTksMzcgKzI2MCw0NiBAQCBzdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFy
Z3MoCiAgICAgLy8gaG91cnMKICAgICBpZiAobWF4QXJncyA+PSA0ICYmIGlkeCA8IG51bUFyZ3Mp
IHsKICAgICAgICAgdC0+aG91ciA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lk
eCsrXS0+dG9JbnQzMihleGVjKSAqIG1zUGVySG91cjsKKyAgICAgICAgbWlsbGlzZWNvbmRzICs9
IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVySG91cjsKICAgICB9CiAKICAg
ICAvLyBtaW51dGVzCi0gICAgaWYgKG1heEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzKSB7Cisg
ICAgaWYgKG1heEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzICYmIG9rKSB7CiAgICAgICAgIHQt
Pm1pbnV0ZSA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQz
MihleGVjKSAqIG1zUGVyTWludXRlOworICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJnc1tpZHgr
K10tPnRvSW50MzIoZXhlYywgb2spICogbXNQZXJNaW51dGU7CiAgICAgfQogICAgIAogICAgIC8v
IHNlY29uZHMKLSAgICBpZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MpIHsKKyAgICBp
ZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2spIHsKICAgICAgICAgdC0+c2Vj
b25kID0gMDsKLSAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4
ZWMpICogbXNQZXJTZWNvbmQ7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+
dG9JbnQzMihleGVjLCBvaykgKiBtc1BlclNlY29uZDsKICAgICB9CiAgICAgCiAgICAgLy8gbWls
bGlzZWNvbmRzCi0gICAgaWYgKGlkeCA8IG51bUFyZ3MpCi0gICAgICAgIG1pbGxpc2Vjb25kcyAr
PSBhcmdzW2lkeF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgIGVsc2UKLSAgICAgICAgbWlsbGlzZWNv
bmRzICs9ICptczsKKyAgICBpZiAob2spCisgICAgeworICAgICAgICBpZiAoaWR4IDwgbnVtQXJn
cykKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlIG1pbGxpcyA9IGFyZ3NbaWR4XS0+dG9O
dW1iZXIoZXhlYyk7CisgICAgICAgICAgICBvayA9ICEoaXNpbmYobWlsbGlzKSB8fCBpc25hbiht
aWxsaXMpKTsKKyAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBtaWxsaXM7CisgICAgICAgIH0g
ICAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9ICptczsKICAgICAK
LSAgICAqbXMgPSBtaWxsaXNlY29uZHM7CisgICAgICAgICptcyA9IG1pbGxpc2Vjb25kczsKKyAg
ICB9CisgICAgcmV0dXJuIG9rOwogfQogCiAvLyBDb252ZXJ0cyBhIGxpc3Qgb2YgYXJndW1lbnRz
IHNlbnQgdG8gYSBEYXRlIG1lbWJlciBmdW5jdGlvbiBpbnRvIHllYXJzLCBtb250aHMsIGFuZCBt
aWxsaXNlY29uZHMsIHVwZGF0aW5nCiAvLyBtcyAocmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcykg
YW5kIHQgKHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0aGUgZGF0ZSBzdHJ1Y3R1cmUpIGFwcHJv
cHJpYXRlbHkuCiAvLwogLy8gRm9ybWF0IG9mIG1lbWJlciBmdW5jdGlvbjogZihbeWVhcnMsXSBb
bW9udGhzLF0gW2RheXNdKQotc3RhdGljIHZvaWQgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdz
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncywgaW50IG1heEFyZ3MsIGRvdWJsZSAq
bXMsIEdyZWdvcmlhbkRhdGVUaW1lICp0KQorc3RhdGljIGJvb2wgZmlsbFN0cnVjdHVyZXNVc2lu
Z0RhdGVBcmdzKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncywgaW50IG1heEFyZ3Ms
IGRvdWJsZSAqbXMsIEdyZWdvcmlhbkRhdGVUaW1lICp0KQogewogICAgIGludCBpZHggPSAwOwor
ICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgIAog
ICAgIC8vIEpTIGFsbG93cyBleHRyYSB0cmFpbGluZyBhcmd1bWVudHMgLS0gaWdub3JlIHRoZW0K
QEAgLTI5OCwxNyArMzA4LDI0IEBAIHN0YXRpYyB2b2lkIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRl
QXJncygKICAgCiAgICAgLy8geWVhcnMKICAgICBpZiAobWF4QXJncyA+PSAzICYmIGlkeCA8IG51
bUFyZ3MpCi0gICAgICAgIHQtPnllYXIgPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjKSAtIDE5
MDA7Ci0gIAorICAgIHsKKyAgICAgICAgdC0+eWVhciA9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4
ZWMsIG9rKSAtIDE5MDA7CisgICAgfQorICAgIAogICAgIC8vIG1vbnRocwotICAgIGlmIChtYXhB
cmdzID49IDIgJiYgaWR4IDwgbnVtQXJncykKLSAgICAgICAgdC0+bW9udGggPSBhcmdzW2lkeCsr
XS0+dG9JbnQzMihleGVjKTsKLSAgCisgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBudW1B
cmdzICYmIG9rKQorICAgIHsgICAKKyAgICAgICAgdC0+bW9udGggPSBhcmdzW2lkeCsrXS0+dG9J
bnQzMihleGVjLCBvayk7CisgICAgfQorICAgIAogICAgIC8vIGRheXMKLSAgICBpZiAoaWR4IDwg
bnVtQXJncykgeworICAgIGlmIChpZHggPCBudW1BcmdzICYmIG9rKQorICAgIHsgICAKICAgICAg
ICAgdC0+bW9udGhEYXkgPSAwOwotICAgICAgICAqbXMgKz0gYXJnc1tpZHhdLT50b0ludDMyKGV4
ZWMpICogbXNQZXJEYXk7CisgICAgICAgICptcyArPSBhcmdzW2lkeF0tPnRvSW50MzIoZXhlYywg
b2spICogbXNQZXJEYXk7CiAgICAgfQorICAgIAorICAgIHJldHVybiBvazsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERhdGVJbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KQEAgLTE0NDcsMTcgKzE0NjQsMjUgQEAgc3RhdGljIEpTVmFsdWUqIHNl
dE5ld1ZhbHVlRnJvbVRpbWVBcmdzKAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0
PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOwotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+
aW50ZXJuYWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwot
ICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgZG91Ymxl
IG1zID0gbWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGlt
ZSB0OwotICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7Cisg
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAKKyAgICBpZiAoMCAhPSBhcmdzLnNp
emUoKSkKKyAgICB7IAorICAgICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmludGVybmFs
VmFsdWUoKTsKKyAgICAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWlzbmFuKG1pbGxpKSkKKyAgICAgICAgeworICAgICAgICAgICAg
ZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKKyAgICAgICAgICAgIGRv
dWJsZSBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOwogCi0gICAgZmlsbFN0cnVjdHVy
ZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAmdCk7CisgICAg
ICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSB0OworICAgICAgICAgICAgbXNUb0dyZWdvcmlhbkRh
dGVUaW1lKG1pbGxpLCBpbnB1dElzVVRDLCB0KTsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOworICAgICAg
ICAgICAgaWYgKGZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1Bcmdz
VG9Vc2UsICZtcywgJnQpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdv
cmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOworICAgICAgICB9CisgICAgfQog
ICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTE0NjgsMTcgKzE0OTMsMjggQEAgc3RhdGljIEpTVmFsdWUqIHNldE5ld1Zh
bHVlRnJvbURhdGVBcmdzKAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJy
b3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJ
bnN0YW5jZSo+KHRoaXNPYmopOwotICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJu
YWxWYWx1ZSgpOwotICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRvTnVtYmVyKGV4ZWMpOwotICAgIGRv
dWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCk7Ci0gICAgZG91YmxlIG1zID0g
bWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7Ci0KLSAgICBHcmVnb3JpYW5EYXRlVGltZSB0Owot
ICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7Ci0KLSAgICBm
aWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMs
ICZ0KTsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgIAorICAgIGlmICgwICE9
IGFyZ3Muc2l6ZSgpKQorICAgIHsgCisgICAgICAgIEpTVmFsdWUqIHYgPSB0aGlzRGF0ZU9iai0+
aW50ZXJuYWxWYWx1ZSgpOworICAgICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVj
KTsKKyAgICAgICAgZG91YmxlIG1zID0gMDsKIAotICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVt
YmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOworICAgICAgICBH
cmVnb3JpYW5EYXRlVGltZSB0OworICAgICAgICBpZiAoMyA9PSBudW1BcmdzVG9Vc2UgJiYgaXNu
YW4obWlsbGkpKQorICAgICAgICAgICAgLy8gQmFzZWQgb24gMTUuOS41LjQwIC0gLjQxIC0gc2V0
RnVsbChVVEMpWWVhciAtIHRoZSB0aW1lIG11c3QgYmUgcmVzZXQgdG8gKzAgaWYgaXQgaXMgTmFO
LiAKKyAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZSgwLCB0cnVlLCB0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxp
IC8gbXNQZXJTZWNvbmQpOworICAgICAgICAgICAgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNl
Y29uZDsKKyAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VU
QywgdCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKGZpbGxTdHJ1Y3R1cmVzVXNpbmdE
YXRlQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9Vc2UsICZtcywgJnQpKQorICAgICAgICAgICAg
cmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBpbnB1dElzVVRD
KSk7CisgICAgfQogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1NzMsMTkgKzE2MDksMzUgQEAgSlNWYWx1ZSogZGF0
ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwogCiAgICAgY29uc3QgYm9vbCB1dGMgPSBmYWxzZTsKKyAgICBib29s
IG9rID0gdHJ1ZTsKIAogICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2Fz
dDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCi0gICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2Jq
LT5pbnRlcm5hbFZhbHVlKCk7Ci0gICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7
Ci0gICAgZG91YmxlIHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKLSAgICBkb3Vi
bGUgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKLQotICAgIEdyZWdvcmlhbkRhdGVU
aW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwotCi0gICAg
dC55ZWFyID0gKGFyZ3NbMF0tPnRvSW50MzIoZXhlYykgPiA5OSB8fCBhcmdzWzBdLT50b0ludDMy
KGV4ZWMpIDwgMCkgPyBhcmdzWzBdLT50b0ludDMyKGV4ZWMpIC0gMTkwMCA6IGFyZ3NbMF0tPnRv
SW50MzIoZXhlYyk7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAKKyAgICBp
ZiAoMCAhPSBhcmdzLnNpemUoKSkKKyAgICB7IAorICAgICAgICBKU1ZhbHVlKiB2ID0gdGhpc0Rh
dGVPYmotPmludGVybmFsVmFsdWUoKTsKKyAgICAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIGRvdWJsZSBtcyA9IDA7CiAKLSAgICBKU1ZhbHVlKiByZXN1bHQg
PSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIHV0YykpOworICAgICAgICBH
cmVnb3JpYW5EYXRlVGltZSB0OworICAgICAgICBpZiAoaXNuYW4obWlsbGkpKQorICAgICAgICAg
ICAgLy8gcmVzZXQgdGhlIHRpbWUgdG8gKzAKKyAgICAgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRl
VGltZSgwLCB0cnVlLCB0KTsKKyAgICAgICAgZWxzZQorICAgICAgICB7ICAgCisgICAgICAgICAg
ICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOworICAgICAgICAgICAg
bXMgPSBtaWxsaSAtIHNlY3MgKiBtc1BlclNlY29uZDsKKyAgICAgICAgICAgIG1zVG9HcmVnb3Jp
YW5EYXRlVGltZShtaWxsaSwgdXRjLCB0KTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBpbnQz
Ml90IHllYXIgPSBhcmdzWzBdLT50b0ludDMyKGV4ZWMsIG9rKTsKKyAgICAgICAgaWYgKG9rKQor
ICAgICAgICB7CisgICAgICAgICAgICB0LnllYXIgPSAoeWVhciA+IDk5IHx8IHllYXIgPCAwKSA/
IHllYXIgLSAxOTAwIDogeWVhcjsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdv
cmlhbkRhdGVUaW1lVG9NUyh0LCBtcywgdXRjKSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgdGhp
c0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQo=
</data>
<flag name="review"
          id="8386"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19214</attachid>
            <date>2008-02-19 14:11:10 -0800</date>
            <delta_ts>2008-02-20 13:50:50 -0800</delta_ts>
            <desc>Patch to handle NaN, Inf and missing arguments</desc>
            <filename>jsDatePatch.txt</filename>
            <type>text/plain</type>
            <size>26815</size>
            <attacher name="Michael Knaup">michael.knaup</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNDEyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDItMTkgIE1pY2hhZWwg
S25hdXAgIDxzZXQgRU1BSUxfQUREUkVTUyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIEJ1ZyAxNjc1
MzogZGF0ZSBzZXQgbWV0aG9kcyB3aXRoIG5vIGFyZ3Mgc2hvdWxkIHJlc3VsdCBpbiBOYU4gKEFj
aWQzIGJ1ZykKKyAgICAgICAgVGhlIHNldCB2YWx1ZXMgcmVzdWx0IGluIE5hTiBub3cgd2hlbiBj
YWxsZWQgd2l0aCBubyBhcmdzLCBOYU4gb3IgKy8tIGluZiB2YWx1ZXMuCisgICAgICAgIFRoZSBz
ZXRZZWFyLCBzZXRGdWxsWWVhciBhbmQgc2V0VVRDRnVsbFllYXIgbWV0aG9kcyB1c2VkIG9uIE5h
TiBkYXRlcyB3b3JrIGFzIAorICAgICAgICBkZXNjcmlwdGVkIGluIHRoZSBzdGFuZGFyZC4KKwor
ICAgICAgICAqIGtqcy9kYXRlX29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OmZpbGxTdHJ1Y3R1
cmVzVXNpbmdUaW1lQXJncyk6CisgICAgICAgIChLSlM6OmZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRl
QXJncyk6CisgICAgICAgIChLSlM6OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAg
KEtKUzo6c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MpOgorICAgICAgICAoS0pTOjpkYXRlUHJvdG9G
dW5jU2V0WWVhcik6CisKIDIwMDgtMDItMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IEFuZGVycy4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9kYXRlX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L2RhdGVfb2JqZWN0LmNwcAkocmV2aXNpb24gMzA0MDcpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
ZGF0ZV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsOSArMjQ2LDEwIEBAIHN0YXRp
YyBVU3RyaW5nIGZvcm1hdFRpbWUoY29uc3QgR3JlZ29yaWEKIC8vIG1zIChyZXByZXNlbnRpbmcg
bWlsbGlzZWNvbmRzKSBhbmQgdCAocmVwcmVzZW50aW5nIHRoZSByZXN0IG9mIHRoZSBkYXRlIHN0
cnVjdHVyZSkgYXBwcm9wcmlhdGVseS4KIC8vCiAvLyBGb3JtYXQgb2YgbWVtYmVyIGZ1bmN0aW9u
OiBmKFtob3VyLF0gW21pbixdIFtzZWMsXSBbbXNdKQotc3RhdGljIHZvaWQgZmlsbFN0cnVjdHVy
ZXNVc2luZ1RpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncywgaW50IG1h
eEFyZ3MsIGRvdWJsZSogbXMsIEdyZWdvcmlhbkRhdGVUaW1lKiB0KQorc3RhdGljIGJvb2wgZmls
bFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJn
cywgaW50IG1heEFyZ3MsIGRvdWJsZSogbXMsIEdyZWdvcmlhbkRhdGVUaW1lKiB0KQogewogICAg
IGRvdWJsZSBtaWxsaXNlY29uZHMgPSAwOworICAgIGJvb2wgb2sgPSB0cnVlOwogICAgIGludCBp
ZHggPSAwOwogICAgIGludCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAgICAgCkBAIC0yNTksMzcg
KzI2MCw0NCBAQCBzdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoCiAgICAg
Ly8gaG91cnMKICAgICBpZiAobWF4QXJncyA+PSA0ICYmIGlkeCA8IG51bUFyZ3MpIHsKICAgICAg
ICAgdC0+aG91ciA9IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9J
bnQzMihleGVjKSAqIG1zUGVySG91cjsKKyAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3NbaWR4
KytdLT50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVySG91cjsKICAgICB9CiAKICAgICAvLyBtaW51
dGVzCi0gICAgaWYgKG1heEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzKSB7CisgICAgaWYgKG1h
eEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzICYmIG9rKSB7CiAgICAgICAgIHQtPm1pbnV0ZSA9
IDA7Ci0gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjKSAq
IG1zUGVyTWludXRlOworICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJnc1tpZHgrK10tPnRvSW50
MzIoZXhlYywgb2spICogbXNQZXJNaW51dGU7CiAgICAgfQogICAgIAogICAgIC8vIHNlY29uZHMK
LSAgICBpZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MpIHsKKyAgICBpZiAobWF4QXJn
cyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2spIHsKICAgICAgICAgdC0+c2Vjb25kID0gMDsK
LSAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMpICogbXNQ
ZXJTZWNvbmQ7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihl
eGVjLCBvaykgKiBtc1BlclNlY29uZDsKICAgICB9CiAgICAgCisgICAgaWYgKCFvaykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKICAgICAvLyBtaWxsaXNlY29uZHMKLSAgICBpZiAo
aWR4IDwgbnVtQXJncykKLSAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3NbaWR4XS0+dG9OdW1i
ZXIoZXhlYyk7Ci0gICAgZWxzZQorICAgIGlmIChpZHggPCBudW1BcmdzKSB7CisgICAgICAgIGRv
dWJsZSBtaWxsaXMgPSBhcmdzW2lkeF0tPnRvTnVtYmVyKGV4ZWMpOworICAgICAgICBvayA9IGlz
ZmluaXRlKG1pbGxpcyk7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBtaWxsaXM7CisgICAgfSBl
bHNlCiAgICAgICAgIG1pbGxpc2Vjb25kcyArPSAqbXM7CiAgICAgCiAgICAgKm1zID0gbWlsbGlz
ZWNvbmRzOworICAgIHJldHVybiBvazsKIH0KIAogLy8gQ29udmVydHMgYSBsaXN0IG9mIGFyZ3Vt
ZW50cyBzZW50IHRvIGEgRGF0ZSBtZW1iZXIgZnVuY3Rpb24gaW50byB5ZWFycywgbW9udGhzLCBh
bmQgbWlsbGlzZWNvbmRzLCB1cGRhdGluZwogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29u
ZHMpIGFuZCB0IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBh
cHByb3ByaWF0ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW3llYXJz
LF0gW21vbnRocyxdIFtkYXlzXSkKLXN0YXRpYyB2b2lkIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRl
QXJncyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGludCBtYXhBcmdzLCBkb3Vi
bGUgKm1zLCBHcmVnb3JpYW5EYXRlVGltZSAqdCkKK3N0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVz
VXNpbmdEYXRlQXJncyhFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MsIGludCBtYXhB
cmdzLCBkb3VibGUgKm1zLCBHcmVnb3JpYW5EYXRlVGltZSAqdCkKIHsKICAgICBpbnQgaWR4ID0g
MDsKKyAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpbnQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgpOwog
ICAKICAgICAvLyBKUyBhbGxvd3MgZXh0cmEgdHJhaWxpbmcgYXJndW1lbnRzIC0tIGlnbm9yZSB0
aGVtCkBAIC0yOTgsMTcgKzMwNiwxOSBAQCBzdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5n
RGF0ZUFyZ3MoCiAgIAogICAgIC8vIHllYXJzCiAgICAgaWYgKG1heEFyZ3MgPj0gMyAmJiBpZHgg
PCBudW1BcmdzKQotICAgICAgICB0LT55ZWFyID0gYXJnc1tpZHgrK10tPnRvSW50MzIoZXhlYykg
LSAxOTAwOwotICAKKyAgICAgICAgdC0+eWVhciA9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMs
IG9rKSAtIDE5MDA7CisgICAgCiAgICAgLy8gbW9udGhzCi0gICAgaWYgKG1heEFyZ3MgPj0gMiAm
JiBpZHggPCBudW1BcmdzKQotICAgICAgICB0LT5tb250aCA9IGFyZ3NbaWR4KytdLT50b0ludDMy
KGV4ZWMpOwotICAKKyAgICBpZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2sp
ICAgCisgICAgICAgIHQtPm1vbnRoID0gYXJnc1tpZHgrK10tPnRvSW50MzIoZXhlYywgb2spOwor
ICAgIAogICAgIC8vIGRheXMKLSAgICBpZiAoaWR4IDwgbnVtQXJncykgeworICAgIGlmIChpZHgg
PCBudW1BcmdzICYmIG9rKSB7ICAgCiAgICAgICAgIHQtPm1vbnRoRGF5ID0gMDsKLSAgICAgICAg
Km1zICs9IGFyZ3NbaWR4XS0+dG9JbnQzMihleGVjKSAqIG1zUGVyRGF5OworICAgICAgICAqbXMg
Kz0gYXJnc1tpZHhdLT50b0ludDMyKGV4ZWMsIG9rKSAqIG1zUGVyRGF5OwogICAgIH0KKyAgICAK
KyAgICByZXR1cm4gb2s7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBE
YXRlSW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDQ5LDE0ICsx
NDU5LDI1IEBAIHN0YXRpYyBKU1ZhbHVlKiBzZXROZXdWYWx1ZUZyb21UaW1lQXJncygKICAgICBE
YXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhp
c09iaik7CiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7CiAg
ICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7CisgICAgCisgICAgaWYgKGFyZ3Mu
aXNFbXB0eSgpIHx8IGlzbmFuKG1pbGxpKSkgeworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBq
c05hTigpOworICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAgCiAgICAgZG91YmxlIHNlY3MgPSBm
bG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKICAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNlY3Mg
KiBtc1BlclNlY29uZDsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7CiAgICAgbXNUb0dyZWdv
cmlhbkRhdGVUaW1lKG1pbGxpLCBpbnB1dElzVVRDLCB0KTsKIAotICAgIGZpbGxTdHJ1Y3R1cmVz
VXNpbmdUaW1lQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9Vc2UsICZtcywgJnQpOwotCisgICAg
aWYgKCFmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNl
LCAmbXMsICZ0KSkgeworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgICAg
ICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0gCisgICAgCiAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWVUb01TKHQsIG1zLCBpbnB1dElzVVRDKSk7CiAgICAgdGhpc0RhdGVPYmot
PnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTQ2OCwx
NiArMTQ4OSwzMyBAQCBzdGF0aWMgSlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAKICAgICBEYXRlSW5z
dGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odGhpc09iaik7
CisgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
TmFOKCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVlKHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSAgICAgIAorICAgIAogICAgIEpTVmFsdWUqIHYg
PSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRvdWJsZSBtaWxsaSA9IHYtPnRv
TnVtYmVyKGV4ZWMpOwotICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29u
ZCk7Ci0gICAgZG91YmxlIG1zID0gbWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7CisgICAgZG91
YmxlIG1zID0gMDsKIAogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHQ7Ci0gICAgbXNUb0dyZWdvcmlh
bkRhdGVUaW1lKG1pbGxpLCBpbnB1dElzVVRDLCB0KTsKLQotICAgIGZpbGxTdHJ1Y3R1cmVzVXNp
bmdEYXRlQXJncyhleGVjLCBhcmdzLCBudW1BcmdzVG9Vc2UsICZtcywgJnQpOwotCisgICAgaWYg
KDMgPT0gbnVtQXJnc1RvVXNlICYmIGlzbmFuKG1pbGxpKSkKKyAgICAgICAgLy8gQmFzZWQgb24g
RUNNQSAyNjIgMTUuOS41LjQwIC0gLjQxIChzZXRbVVRDXUZ1bGxZZWFyKQorICAgICAgICAvLyB0
aGUgdGltZSBtdXN0IGJlIHJlc2V0IHRvICswIGlmIGl0IGlzIE5hTi4gCisgICAgICAgIG1zVG9H
cmVnb3JpYW5EYXRlVGltZSgwLCB0cnVlLCB0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgZG91Ymxl
IHNlY3MgPSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKKyAgICAgICAgbXMgPSBtaWxsaSAt
IHNlY3MgKiBtc1BlclNlY29uZDsKKyAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxp
LCBpbnB1dElzVVRDLCB0KTsKKyAgICB9CisgICAgCisgICAgaWYgKCFmaWxsU3RydWN0dXJlc1Vz
aW5nRGF0ZUFyZ3MoZXhlYywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KSkgeworICAgICAg
ICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50
ZXJuYWxWYWx1ZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0gCisgICAg
ICAgICAgIAogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1l
VG9NUyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZh
bHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1NzQsMTcgKzE2MTIsMzcgQEAg
SlNWYWx1ZSogZGF0ZVByb3RvRnVuY1NldFllYXIoRXhlY1N0YXRlKgogCiAgICAgY29uc3QgYm9v
bCB1dGMgPSBmYWxzZTsKIAotICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNf
Y2FzdDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgCisgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0
ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOyAgICAgCisgICAgaWYg
KGFyZ3MuaXNFbXB0eSgpKSB7IAorICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOwor
ICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmot
PmludGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsK
LSAgICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIGRvdWJs
ZSBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOworICAgIGRvdWJsZSBtcyA9IDA7CiAK
ICAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxs
aSwgdXRjLCB0KTsKLQotICAgIHQueWVhciA9IChhcmdzWzBdLT50b0ludDMyKGV4ZWMpID4gOTkg
fHwgYXJnc1swXS0+dG9JbnQzMihleGVjKSA8IDApID8gYXJnc1swXS0+dG9JbnQzMihleGVjKSAt
IDE5MDAgOiBhcmdzWzBdLT50b0ludDMyKGV4ZWMpOwotCisgICAgaWYgKGlzbmFuKG1pbGxpKSkK
KyAgICAgICAgLy8gQmFzZWQgb24gRUNNQSAyNjIgQi4yLjUgKHNldFllYXIpCisgICAgICAgIC8v
IHRoZSB0aW1lIG11c3QgYmUgcmVzZXQgdG8gKzAgaWYgaXQgaXMgTmFOLiAKKyAgICAgICAgbXNU
b0dyZWdvcmlhbkRhdGVUaW1lKDAsIHRydWUsIHQpOworICAgIGVsc2UgeyAgIAorICAgICAgICBk
b3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOworICAgICAgICBtcyA9IG1p
bGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOworICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUo
bWlsbGksIHV0YywgdCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb2sgPSB0cnVlOworICAgIGlu
dDMyX3QgeWVhciA9IGFyZ3NbMF0tPnRvSW50MzIoZXhlYywgb2spOworICAgIGlmICghb2spIHsK
KyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAgICAgdGhpc0RhdGVPYmot
PnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICB0LnllYXIgPSAoeWVhciA+IDk5IHx8IHllYXIgPCAwKSA/IHll
YXIgLSAxOTAwIDogeWVhcjsKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihncmVnb3Jp
YW5EYXRlVGltZVRvTVModCwgbXMsIHV0YykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5h
bFZhbHVlKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDMw
NDEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMDgtMDItMTkgIE1pY2hhZWwgS25hdXAgIDxtaWNoYWVsLmtuYXVwQG1hYy5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSB0ZXN0
IGZvciBCdWcgMTY3NTM6IGRhdGUgc2V0IG1ldGhvZHMgd2l0aCBubyBhcmdzIHNob3VsZCByZXN1
bHQgaW4gTmFOIChBY2lkMyBidWcpCisKKyAgICAgICAgKiBmYXN0L2pzL2RhdGUtc2V0LXRvLW5h
bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvZGF0ZS1zZXQtdG8tbmFu
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVzb3VyY2VzL2RhdGUtc2V0LXRvLW5h
bi5qczogQWRkZWQuCisKIDIwMDgtMDItMTkgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvanMvZGF0ZS1zZXQtdG8tbmFuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL2RhdGUtc2V0LXRvLW5hbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2RhdGUtc2V0LXRvLW5hbi1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK1BBU1MgZGF0ZS5zZXRUaW1lIHBhc3NlZCBhbGwg
dGVzdHMKK1BBU1MgZGF0ZS5zZXRNaWxsaXNlY29uZHMgcGFzc2VkIGFsbCB0ZXN0cworUEFTUyBk
YXRlLnNldFVUQ01pbGxpc2Vjb25kcyBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUuc2V0U2Vj
b25kcyBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUuc2V0VVRDU2Vjb25kcyBwYXNzZWQgYWxs
IHRlc3RzCitQQVNTIGRhdGUuc2V0TWludXRlcyBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUu
c2V0VVRDTWludXRlcyBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUuc2V0SG91cnMgcGFzc2Vk
IGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldFVUQ0hvdXJzIHBhc3NlZCBhbGwgdGVzdHMKK1BBU1Mg
ZGF0ZS5zZXREYXRlIHBhc3NlZCBhbGwgdGVzdHMKK1BBU1MgZGF0ZS5zZXRVVENEYXRlIHBhc3Nl
ZCBhbGwgdGVzdHMKK1BBU1MgZGF0ZS5zZXRNb250aCBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRh
dGUuc2V0VVRDTW9udGggcGFzc2VkIGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldEZ1bGxZZWFyIHBh
c3NlZCBhbGwgdGVzdHMKK1BBU1MgZGF0ZS5zZXRVVENGdWxsWWVhciBwYXNzZWQgYWxsIHRlc3Rz
CitQQVNTIGRhdGUuc2V0WWVhciBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9kYXRlLXNldC10by1uYW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L2RhdGUtc2V0LXRvLW5hbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9kYXRlLXNldC10by1uYW4uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kYXRlLXNldC10by1uYW4uanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMv
ZGF0ZS1zZXQtdG8tbmFuLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVz
b3VyY2VzL2RhdGUtc2V0LXRvLW5hbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvcmVzb3VyY2VzL2RhdGUtc2V0LXRvLW5hbi5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MDMgQEAKKwordmFyIGRhdGVGdW5jdGlvbk5hbWVSb290cyA9IFsKKyAgICAiVGltZSIsCisg
ICAgIk1pbGxpc2Vjb25kcyIsCisgICAgIlVUQ01pbGxpc2Vjb25kcyIsCisgICAgIlNlY29uZHMi
LAorICAgICJVVENTZWNvbmRzIiwKKyAgICAiTWludXRlcyIsCisgICAgIlVUQ01pbnV0ZXMiLAor
ICAgICJIb3VycyIsCisgICAgIlVUQ0hvdXJzIiwKKyAgICAiRGF0ZSIsCisgICAgIlVUQ0RhdGUi
LAorICAgICJNb250aCIsCisgICAgIlVUQ01vbnRoIiwKKyAgICAiRnVsbFllYXIiLAorICAgICJV
VENGdWxsWWVhciIsCisgICAgIlllYXIiCitdOworCit2YXIgZGF0ZUZ1bmN0aW9uUGFyYW1ldGVy
TnVtID0gWworICAgIDEsCisgICAgMSwKKyAgICAxLAorICAgIDIsCisgICAgMiwKKyAgICAzLAor
ICAgIDMsCisgICAgNCwKKyAgICA0LAorICAgIDEsCisgICAgMSwKKyAgICAyLAorICAgIDIsCisg
ICAgMywKKyAgICAzLAorICAgIDEKK107CisKK3ZhciB0ZXN0VmFsdWVzID0gWworICAgIDAsCisg
ICAgTnVtYmVyLk5hTiwKKyAgICBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksCisgICAgTnVtYmVy
Lk5FR0FUSVZFX0lORklOSVRZCitdOworCitmdW5jdGlvbiB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZh
bHVlTm9SZWNvdmVyTmFOKGZ1bmN0aW9uTmFtZVJvb3QsIHN0ZXBzKSB7CisgICAgdmFyIGRhdGUg
PSBuZXcgRGF0ZSgpOworICAgIHZhciBzZXRWYWx1ZSA9IGRhdGVbImdldCIgKyBmdW5jdGlvbk5h
bWVSb290XSgpOyAgICAKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyhOdW1iZXIuTmFOKTsKKyAg
ICB2YXIgcGFyYW1zID0gWworICAgICAgICAiIiwKKyAgICAgICAgIiwgMCIsCisgICAgICAgICIs
IDAsIDAiLAorICAgICAgICAiLCAwLCAwLCAwIgorICAgIF07CisgICAgdmFyIHNldFJlc3VsdCA9
ICgxID09IHN0ZXBzKSA/ICBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oc2V0VmFsdWUp
CisgICAgICAgICAgICAgICAgICA6ICgoMiA9PSBzdGVwcykgPyBkYXRlWyJzZXQiICsgZnVuY3Rp
b25OYW1lUm9vdF0oc2V0VmFsdWUsIDApCisgICAgICAgICAgICAgICAgICA6ICgoMyA9PSBzdGVw
cykgPyBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oc2V0VmFsdWUsIDAsIDApCisgICAg
ICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgZGF0ZVsic2V0IiArIGZ1bmN0aW9uTmFt
ZVJvb3RdKHNldFZhbHVlLCAwLCAwLCAwKSkpOworICAgIGlmICghaXNOYU4oc2V0UmVzdWx0KSkg
eworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlKE5hTikuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3Qg
KyAiKCIgKyBzZXRWYWx1ZSArIHBhcmFtc1tzdGVwcyAtIDFdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgIikgd2FzICIgKyBzZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFO
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFyIGdldFJlc3VsdCA9IGRh
dGVbImdldCIgKyBmdW5jdGlvbk5hbWVSb290XSgpOworICAgIGlmICghaXNOYU4oZ2V0UmVzdWx0
KSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVSb290ICsg
IigpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiB0ZXN0RGF0
ZUZ1bmN0aW9uV2l0aFZhbHVlUmVjb3ZlclRpbWUoZnVuY3Rpb25OYW1lUm9vdCkgeworICAgIHZh
ciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICB2YXIgc2V0VmFsdWUgPSBkYXRlWyJnZXQiICsgZnVu
Y3Rpb25OYW1lUm9vdF0oKTsgICAgCisgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoTnVtYmVyLk5h
Tik7CisgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIgKyBmdW5jdGlvbk5hbWVSb290XShz
ZXRWYWx1ZSk7CisgICAgaWYgKHNldFZhbHVlICE9IHNldFJlc3VsdCkgeworICAgICAgICB0ZXN0
RmFpbGVkKCJkYXRlKE5hTikuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCIgKyBzZXRWYWx1
ZSArICIpIHdhcyAiICsgc2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mICIgKyBzZXRWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFyIGdldFJlc3VsdCA9IGRhdGVbImdl
dCIgKyBmdW5jdGlvbk5hbWVSb290XSgpOworICAgIGlmIChnZXRSZXN1bHQgIT0gc2V0VmFsdWUp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIo
KSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAiICsgc2V0VmFsdWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiB0
ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlUmVjb3ZlckZ1bGxZZWFyKGZ1bmN0aW9uTmFtZVJvb3Qp
IHsKKyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgdmFyIHNldFZhbHVlID0gZGF0ZVsi
Z2V0IiArIGZ1bmN0aW9uTmFtZVJvb3RdKCk7ICAgIAorICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRz
KE51bWJlci5OYU4pOworICAgIHZhciBzZXRSZXN1bHQgPSBkYXRlWyJzZXQiICsgZnVuY3Rpb25O
YW1lUm9vdF0oc2V0VmFsdWUpOyAgICAKKyAgICB2YXIgZ2V0UmVzdWx0ID0gZGF0ZVsiZ2V0IiAr
IGZ1bmN0aW9uTmFtZVJvb3RdKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSBzZXRWYWx1ZSkgewor
ICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVSb290ICsgIigpIHdh
cyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mICIgKyBzZXRWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMo
KTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5n
ZXRNaWxsaXNlY29uZHMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAwIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0ZS5nZXRTZWNv
bmRzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImRh
dGUuZ2V0U2Vjb25kcygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdldE1pbnV0
ZXMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0
ZS5nZXRNaW51dGVzKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgMCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0SG91cnMo
KTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5n
ZXRIb3VycygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdldERhdGUoKTsKKyAg
ICBpZiAoZ2V0UmVzdWx0ICE9IDEpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXREYXRl
KCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgMSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0TW9udGgoKTsKKyAgICBpZiAo
Z2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXRNb250aCgpIHdh
cyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlv
bldpdGhWYWx1ZVJlY292ZXJVVENGdWxsWWVhcihmdW5jdGlvbk5hbWVSb290KSB7CisgICAgdmFy
IGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIHZhciBzZXRWYWx1ZSA9IGRhdGVbImdldCIgKyBmdW5j
dGlvbk5hbWVSb290XSgpOyAgICAKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyhOdW1iZXIuTmFO
KTsKKyAgICB2YXIgc2V0UmVzdWx0ID0gZGF0ZVsic2V0IiArIGZ1bmN0aW9uTmFtZVJvb3RdKHNl
dFZhbHVlKTsgICAgCisgICAgdmFyIGdldFJlc3VsdCA9IGRhdGVbImdldCIgKyBmdW5jdGlvbk5h
bWVSb290XSgpOworICAgIGlmIChnZXRSZXN1bHQgIT0gc2V0VmFsdWUpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiZGF0ZS5nZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoKSB3YXMgIiArIGdldFJl
c3VsdCArICIgaW5zdGVhZCBvZiAiICsgc2V0VmFsdWUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7CisgICAg
aWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0VVRDTWls
bGlzZWNvbmRzKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgMCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0VVRDU2Vjb25k
cygpOworICAgIGlmIChnZXRSZXN1bHQgIT0gMCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRl
LmdldFVUQ1NlY29uZHMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAwIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0ZS5nZXRVVENN
aW51dGVzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRlc3RGYWlsZWQo
ImRhdGUuZ2V0VVRDTWludXRlcygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdl
dFVUQ0hvdXJzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoImRhdGUuZ2V0VVRDSG91cnMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAw
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0ZS5n
ZXRVVENEYXRlKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAxKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoImRhdGUuZ2V0VVRDRGF0ZSgpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDEi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdl
dFVUQ01vbnRoKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoImRhdGUuZ2V0VVRDTW9udGgoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAw
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Z1bmN0aW9uIHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVSZWNvdmVyWWVhcihmdW5jdGlvbk5h
bWVSb290KSB7CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgIHZhciBzZXRWYWx1ZSA9
IGRhdGVbImdldCIgKyBmdW5jdGlvbk5hbWVSb290XSgpOworICAgIHZhciBmdWxsWWVhcnMgPSBk
YXRlLmdldEZ1bGxZZWFyKCkgLSAxOTAwOyAgICAKKyAgICBpZiAoc2V0VmFsdWUgIT0gZnVsbFll
YXJzKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFtZVJvb3Qg
KyAiKCkgd2FzICIgKyBzZXRWYWx1ZSArICIgaW5zdGVhZCBvZiAiICsgZnVsbFllYXJzKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25k
cyhOdW1iZXIuTmFOKTsKKyAgICB2YXIgc2V0UmVzdWx0ID0gZGF0ZVsic2V0IiArIGZ1bmN0aW9u
TmFtZVJvb3RdKHNldFZhbHVlICsgMTkwMCk7ICAgICAgICAKKyAgICB2YXIgZ2V0UmVzdWx0ID0g
ZGF0ZVsiZ2V0IiArIGZ1bmN0aW9uTmFtZVJvb3RdKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSBz
ZXRWYWx1ZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVS
b290ICsgIigpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mICIgKyBzZXRWYWx1ZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0ZS5nZXRN
aWxsaXNlY29uZHMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgiZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVh
ZCBvZiAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0g
ZGF0ZS5nZXRTZWNvbmRzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRl
c3RGYWlsZWQoImRhdGUuZ2V0U2Vjb25kcygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFk
IG9mIDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBk
YXRlLmdldE1pbnV0ZXMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiZGF0ZS5nZXRNaW51dGVzKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQg
b2YgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRh
dGUuZ2V0SG91cnMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZh
aWxlZCgiZGF0ZS5nZXRIb3VycygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdl
dERhdGUoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDEpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgi
ZGF0ZS5nZXREYXRlKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgMSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0TW9udGgo
KTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5n
ZXRNb250aCgpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gbWFr
ZUlFSGFwcHkgKGZ1bmN0aW9uTmFtZVJvb3QsIHZhbHVlKQoreyAgICAKKyAgICB2YXIgZGF0ZSA9
IG5ldyBEYXRlKCk7CisgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIgKyBmdW5jdGlvbk5h
bWVSb290XSh2YWx1ZSk7CisgICAgaWYgKCFpc05hTihzZXRSZXN1bHQpKSB7CisgICAgICAgIHRl
c3RGYWlsZWQoImRhdGUuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArICIoKSB3YXMgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgc2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhciBnZXRSZXN1bHQgPSBkYXRlWyJnZXQiICsg
ZnVuY3Rpb25OYW1lUm9vdF0oKTsKKyAgICBpZiAoIWlzTmFOKGdldFJlc3VsdCkpIHsKKyAgICAg
ICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoKSB3YXMgIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2Yg
TmFOIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9ICAgCisgICAgcmV0dXJuIHRydWUK
K30KKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTjEoZnVu
Y3Rpb25OYW1lUm9vdCkgeworICAgIGZvciAodmFyIGlkeDAgaW4gdGVzdFZhbHVlcykKKyAgICAg
ICAgaWYgKGlkeDAgIT0gMCkgeworICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwor
ICAgICAgICAgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIgKyBmdW5jdGlvbk5hbWVSb290
XSh0ZXN0VmFsdWVzW2lkeDBdKTsKKyAgICAgICAgICAgIGlmICghaXNOYU4oc2V0UmVzdWx0KSkg
eworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuc2V0IiArIGZ1bmN0aW9uTmFtZVJv
b3QgKyAiKCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGVzdFZh
bHVlc1tpZHgwXSArICIpIHdhcyAiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArIHNldFJlc3VsdCArICIgaW5zdGVhZCBvZiBOYU4iKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh
ciBnZXRSZXN1bHQgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oKTsKKyAgICAgICAg
ICAgIGlmICghaXNOYU4oZ2V0UmVzdWx0KSkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
ImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCkgd2FzICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFOIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZiAo
IW1ha2VJRUhhcHB5KGZ1bmN0aW9uTmFtZVJvb3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHRlc3REYXRlRnVuY3Rpb25XaXRo
VmFsdWVFeHBlY3RpbmdOYU4yKGZ1bmN0aW9uTmFtZVJvb3QpIHsKKyAgICBmb3IgKHZhciBpZHgw
IGluIHRlc3RWYWx1ZXMpCisgICAgICAgIGZvciAodmFyIGlkeDEgaW4gdGVzdFZhbHVlcykKKyAg
ICAgICAgICAgIGlmIChpZHgwICE9IDAgfHwgaWR4MSAhPSAwKSB7CisgICAgICAgICAgICAgICAg
dmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgICAgICAgICAgICAgIHZhciBzZXRSZXN1bHQgPSBk
YXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0odGVzdFZhbHVlc1tpZHgwXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RWYWx1ZXNbaWR4MV0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgh
aXNOYU4oc2V0UmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkYXRl
LnNldCIgKyBmdW5jdGlvbk5hbWVSb290ICsgIigiIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKyB0ZXN0VmFsdWVzW2lkeDBdICsgIiwgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZXN0VmFsdWVzW2lkeDFdICsgIikgd2Fz
ICIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNldFJlc3Vs
dCArICIgaW5zdGVhZCBvZiBOYU4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBn
ZXRSZXN1bHQgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzTmFOKGdldFJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCgiZGF0ZS5nZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoKSB3YXMgIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQg
b2YgTmFOIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdGVzdERhdGVGdW5j
dGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTjMoZnVuY3Rpb25OYW1lUm9vdCkgeworICAgIGZvciAo
dmFyIGlkeDAgaW4gdGVzdFZhbHVlcykKKyAgICAgICAgZm9yICh2YXIgaWR4MSBpbiB0ZXN0VmFs
dWVzKQorICAgICAgICAgICAgZm9yICh2YXIgaWR4MiBpbiB0ZXN0VmFsdWVzKQorICAgICAgICAg
ICAgICAgIGlmIChpZHgwICE9IDAgfHwgaWR4MSAhPSAwIHx8IGlkeDIgIT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBzZXRSZXN1bHQgPSBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0odGVzdFZhbHVl
c1tpZHgwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0VmFsdWVzW2lkeDFdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RWYWx1
ZXNbaWR4Ml0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHNldFJlc3VsdCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuc2V0IiArIGZ1bmN0aW9u
TmFtZVJvb3QgKyAiKCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKyB0ZXN0VmFsdWVzW2lkeDBdICsgIiwgIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgdGVzdFZhbHVlc1tpZHgxXSArICIsICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRlc3RWYWx1ZXNbaWR4Ml0g
KyAiKSB3YXMgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArIHNldFJlc3VsdCArICIgaW5zdGVhZCBvZiBOYU4iKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBnZXRSZXN1bHQgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25O
YW1lUm9vdF0oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihnZXRSZXN1bHQpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlv
bk5hbWVSb290ICsgIigpIHdhcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFOIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlvbldpdGhW
YWx1ZUV4cGVjdGluZ05hTjQoZnVuY3Rpb25OYW1lUm9vdCkgeworICAgIGZvciAodmFyIGlkeDAg
aW4gdGVzdFZhbHVlcykKKyAgICAgICAgZm9yICh2YXIgaWR4MSBpbiB0ZXN0VmFsdWVzKQorICAg
ICAgICAgICAgZm9yICh2YXIgaWR4MiBpbiB0ZXN0VmFsdWVzKQorICAgICAgICAgICAgICAgIGZv
ciAodmFyIGlkeDMgaW4gdGVzdFZhbHVlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkeDAg
IT0gMCB8fCBpZHgxICE9IDAgfHwgaWR4MiAhPSAwIHx8IGlkeDMgIT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIgKyBmdW5jdGlvbk5hbWVSb290XSh0ZXN0
VmFsdWVzW2lkeDBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0VmFsdWVzW2lkeDFdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0VmFsdWVzW2lkeDJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0VmFsdWVzW2lkeDNdKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oc2V0UmVzdWx0KSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuc2V0IiArIGZ1bmN0aW9uTmFt
ZVJvb3QgKyAiKCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsgdGVzdFZhbHVlc1tpZHgwXSArICIsICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZXN0VmFsdWVzW2lkeDFdICsgIiwgIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRlc3RWYWx1
ZXNbaWR4Ml0gKyAiLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsgdGVzdFZhbHVlc1tpZHgzXSArICIpIHdhcyAiIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNldFJlc3VsdCArICIgaW5zdGVh
ZCBvZiBOYU4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBnZXRSZXN1bHQgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oZ2V0UmVzdWx0KSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFt
ZVJvb3QgKyAiKCkgd2FzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFOIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCisKK2Z1bmN0aW9uIHRlc3RE
YXRlRnVuY3Rpb24oZnVuY3Rpb25OYW1lUm9vdCwgZnVuY3Rpb25QYXJhbU51bSkgeworICAgIHZh
ciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uUGFyYW1OdW0pCisg
ICAgeworICAgIGNhc2UgNDoKKyAgICAgICAgc3VjY2VzcyAmPSB0ZXN0RGF0ZUZ1bmN0aW9uV2l0
aFZhbHVlRXhwZWN0aW5nTmFONChmdW5jdGlvbk5hbWVSb290KTsKKyAgICAgICAgaWYgKGZ1bmN0
aW9uTmFtZVJvb3QgIT0gIlRpbWUiICYmCisgICAgICAgICAgICBmdW5jdGlvbk5hbWVSb290ICE9
ICJGdWxsWWVhciIgJiYKKyAgICAgICAgICAgIGZ1bmN0aW9uTmFtZVJvb3QgIT0gIlVUQ0Z1bGxZ
ZWFyIiAmJgorICAgICAgICAgICAgZnVuY3Rpb25OYW1lUm9vdCAhPSAiWWVhciIpCisgICAgICAg
ICAgICBzdWNjZXNzICY9IHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVOb1JlY292ZXJOYU4oZnVu
Y3Rpb25OYW1lUm9vdCwgNCk7CisKKyAgICBjYXNlIDM6CisgICAgICAgIHN1Y2Nlc3MgJj0gdGVz
dERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTjMoZnVuY3Rpb25OYW1lUm9vdCk7Cisg
ICAgICAgIGlmIChmdW5jdGlvbk5hbWVSb290ICE9ICJUaW1lIiAmJgorICAgICAgICAgICAgZnVu
Y3Rpb25OYW1lUm9vdCAhPSAiRnVsbFllYXIiICYmCisgICAgICAgICAgICBmdW5jdGlvbk5hbWVS
b290ICE9ICJVVENGdWxsWWVhciIgJiYKKyAgICAgICAgICAgIGZ1bmN0aW9uTmFtZVJvb3QgIT0g
IlllYXIiKQorICAgICAgICAgICAgc3VjY2VzcyAmPSB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVl
Tm9SZWNvdmVyTmFOKGZ1bmN0aW9uTmFtZVJvb3QsIDMpOworICAgICAgICAKKyAgICBjYXNlIDI6
CisgICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGluZ05h
TjIoZnVuY3Rpb25OYW1lUm9vdCk7CisgICAgICAgIGlmIChmdW5jdGlvbk5hbWVSb290ICE9ICJU
aW1lIiAmJgorICAgICAgICAgICAgZnVuY3Rpb25OYW1lUm9vdCAhPSAiRnVsbFllYXIiICYmCisg
ICAgICAgICAgICBmdW5jdGlvbk5hbWVSb290ICE9ICJVVENGdWxsWWVhciIgJiYKKyAgICAgICAg
ICAgIGZ1bmN0aW9uTmFtZVJvb3QgIT0gIlllYXIiKQorICAgICAgICAgICAgc3VjY2VzcyAmPSB0
ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlTm9SZWNvdmVyTmFOKGZ1bmN0aW9uTmFtZVJvb3QsIDIp
OworICAgICAgICAKKyAgICBjYXNlIDE6CisgICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5j
dGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTjEoZnVuY3Rpb25OYW1lUm9vdCk7CisgICAgICAgIGlm
IChmdW5jdGlvbk5hbWVSb290ID09ICJUaW1lIikKKyAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdGVz
dERhdGVGdW5jdGlvbldpdGhWYWx1ZVJlY292ZXJUaW1lKGZ1bmN0aW9uTmFtZVJvb3QpOyAgICAg
ICAKKyAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25OYW1lUm9vdCA9PSAiRnVsbFllYXIiKQorICAg
ICAgICAgICAgc3VjY2VzcyAmPSB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlUmVjb3ZlckZ1bGxZ
ZWFyKGZ1bmN0aW9uTmFtZVJvb3QpOworICAgICAgICBlbHNlIGlmIChmdW5jdGlvbk5hbWVSb290
ID09ICJVVENGdWxsWWVhciIpCisgICAgICAgICAgICBzdWNjZXNzICY9IHRlc3REYXRlRnVuY3Rp
b25XaXRoVmFsdWVSZWNvdmVyVVRDRnVsbFllYXIoZnVuY3Rpb25OYW1lUm9vdCk7CisgICAgICAg
IGVsc2UgaWYgKGZ1bmN0aW9uTmFtZVJvb3QgPT0gIlllYXIiKQorICAgICAgICAgICAgc3VjY2Vz
cyAmPSB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlUmVjb3ZlclllYXIoZnVuY3Rpb25OYW1lUm9v
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlv
bldpdGhWYWx1ZU5vUmVjb3Zlck5hTihmdW5jdGlvbk5hbWVSb290LCAxKTsKKyAgICB9CisgICAg
ICAgIAorICAgIGlmIChzdWNjZXNzKQorICAgICAgICB0ZXN0UGFzc2VkKCJkYXRlLnNldCIgKyBm
dW5jdGlvbk5hbWVSb290ICsgIiBwYXNzZWQgYWxsIHRlc3RzIik7Cit9CisKK2ZvciAodmFyIHgg
aW4gZGF0ZUZ1bmN0aW9uTmFtZVJvb3RzKSB7CisgICAgdGVzdERhdGVGdW5jdGlvbihkYXRlRnVu
Y3Rpb25OYW1lUm9vdHNbeF0sIGRhdGVGdW5jdGlvblBhcmFtZXRlck51bVt4XSk7Cit9CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZGF0ZS1zZXQtdG8tbmFuLmpzCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCg==
</data>
<flag name="review"
          id="8390"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19240</attachid>
            <date>2008-02-20 13:50:50 -0800</date>
            <delta_ts>2008-02-20 14:24:10 -0800</delta_ts>
            <desc>revised version of the patch</desc>
            <filename>bug16753.patch</filename>
            <type>text/plain</type>
            <size>32278</size>
            <attacher name="Michael Knaup">michael.knaup</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNDI1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDItMjAgIE1pY2hhZWwg
S25hdXAgIDxtaWNoYWVsLmtuYXVwQG1hYy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBCdWcgMTY3NTM6IGRhdGUgc2V0IG1ldGhv
ZHMgd2l0aCBubyBhcmdzIHNob3VsZCByZXN1bHQgaW4gTmFOIChBY2lkMyBidWcpCisgICAgICAg
IFRoZSBzZXQgdmFsdWVzIHJlc3VsdCBpbiBOYU4gbm93IHdoZW4gY2FsbGVkIHdpdGggbm8gYXJn
cywgTmFOIG9yICsvLSBpbmYgdmFsdWVzLgorICAgICAgICBUaGUgc2V0WWVhciwgc2V0RnVsbFll
YXIgYW5kIHNldFVUQ0Z1bGxZZWFyIG1ldGhvZHMgdXNlZCBvbiBOYU4gZGF0ZXMgd29yayBhcyAK
KyAgICAgICAgZGVzY3JpcHRlZCBpbiB0aGUgc3RhbmRhcmQuCisKKyAgICAgICAgKiBranMvZGF0
ZV9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3Mp
OgorICAgICAgICAoS0pTOjpmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MpOgorICAgICAgICAo
S0pTOjpzZXROZXdWYWx1ZUZyb21UaW1lQXJncyk6CisgICAgICAgIChLSlM6OnNldE5ld1ZhbHVl
RnJvbURhdGVBcmdzKToKKyAgICAgICAgKEtKUzo6ZGF0ZVByb3RvRnVuY1NldFllYXIpOgorCiAy
MDA4LTAyLTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvZGF0ZV9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9kYXRlX29iamVjdC5jcHAJ
KHJldmlzaW9uIDMwNDI1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2RhdGVfb2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ2LDkgKzI0NiwxMCBAQCBzdGF0aWMgVVN0cmluZyBmb3JtYXRU
aW1lKGNvbnN0IEdyZWdvcmlhCiAvLyBtcyAocmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcykgYW5k
IHQgKHJlcHJlc2VudGluZyB0aGUgcmVzdCBvZiB0aGUgZGF0ZSBzdHJ1Y3R1cmUpIGFwcHJvcHJp
YXRlbHkuCiAvLwogLy8gRm9ybWF0IG9mIG1lbWJlciBmdW5jdGlvbjogZihbaG91cixdIFttaW4s
XSBbc2VjLF0gW21zXSkKLXN0YXRpYyB2b2lkIGZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MsIGludCBtYXhBcmdzLCBkb3VibGUqIG1z
LCBHcmVnb3JpYW5EYXRlVGltZSogdCkKK3N0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdU
aW1lQXJncyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MsIGludCBtYXhBcmdzLCBk
b3VibGUqIG1zLCBHcmVnb3JpYW5EYXRlVGltZSogdCkKIHsKICAgICBkb3VibGUgbWlsbGlzZWNv
bmRzID0gMDsKKyAgICBib29sIG9rID0gdHJ1ZTsKICAgICBpbnQgaWR4ID0gMDsKICAgICBpbnQg
bnVtQXJncyA9IGFyZ3Muc2l6ZSgpOwogICAgIApAQCAtMjU5LDM3ICsyNjAsNDQgQEAgc3RhdGlj
IHZvaWQgZmlsbFN0cnVjdHVyZXNVc2luZ1RpbWVBcmdzKAogICAgIC8vIGhvdXJzCiAgICAgaWYg
KG1heEFyZ3MgPj0gNCAmJiBpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIHQtPmhvdXIgPSAwOwot
ICAgICAgICBtaWxsaXNlY29uZHMgKz0gYXJnc1tpZHgrK10tPnRvSW50MzIoZXhlYykgKiBtc1Bl
ckhvdXI7CisgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVj
LCBvaykgKiBtc1BlckhvdXI7CiAgICAgfQogCiAgICAgLy8gbWludXRlcwotICAgIGlmIChtYXhB
cmdzID49IDMgJiYgaWR4IDwgbnVtQXJncykgeworICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4
IDwgbnVtQXJncyAmJiBvaykgewogICAgICAgICB0LT5taW51dGUgPSAwOwotICAgICAgICBtaWxs
aXNlY29uZHMgKz0gYXJnc1tpZHgrK10tPnRvSW50MzIoZXhlYykgKiBtc1Blck1pbnV0ZTsKKyAg
ICAgICAgbWlsbGlzZWNvbmRzICs9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMsIG9rKSAqIG1z
UGVyTWludXRlOwogICAgIH0KICAgICAKICAgICAvLyBzZWNvbmRzCi0gICAgaWYgKG1heEFyZ3Mg
Pj0gMiAmJiBpZHggPCBudW1BcmdzKSB7CisgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBu
dW1BcmdzICYmIG9rKSB7CiAgICAgICAgIHQtPnNlY29uZCA9IDA7Ci0gICAgICAgIG1pbGxpc2Vj
b25kcyArPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjKSAqIG1zUGVyU2Vjb25kOworICAgICAg
ICBtaWxsaXNlY29uZHMgKz0gYXJnc1tpZHgrK10tPnRvSW50MzIoZXhlYywgb2spICogbXNQZXJT
ZWNvbmQ7CiAgICAgfQogICAgIAorICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCiAgICAgLy8gbWlsbGlzZWNvbmRzCi0gICAgaWYgKGlkeCA8IG51bUFyZ3MpCi0g
ICAgICAgIG1pbGxpc2Vjb25kcyArPSBhcmdzW2lkeF0tPnRvTnVtYmVyKGV4ZWMpOwotICAgIGVs
c2UKKyAgICBpZiAoaWR4IDwgbnVtQXJncykgeworICAgICAgICBkb3VibGUgbWlsbGlzID0gYXJn
c1tpZHhdLT50b051bWJlcihleGVjKTsKKyAgICAgICAgb2sgPSBpc2Zpbml0ZShtaWxsaXMpOwor
ICAgICAgICBtaWxsaXNlY29uZHMgKz0gbWlsbGlzOworICAgIH0gZWxzZQogICAgICAgICBtaWxs
aXNlY29uZHMgKz0gKm1zOwogICAgIAogICAgICptcyA9IG1pbGxpc2Vjb25kczsKKyAgICByZXR1
cm4gb2s7CiB9CiAKIC8vIENvbnZlcnRzIGEgbGlzdCBvZiBhcmd1bWVudHMgc2VudCB0byBhIERh
dGUgbWVtYmVyIGZ1bmN0aW9uIGludG8geWVhcnMsIG1vbnRocywgYW5kIG1pbGxpc2Vjb25kcywg
dXBkYXRpbmcKIC8vIG1zIChyZXByZXNlbnRpbmcgbWlsbGlzZWNvbmRzKSBhbmQgdCAocmVwcmVz
ZW50aW5nIHRoZSByZXN0IG9mIHRoZSBkYXRlIHN0cnVjdHVyZSkgYXBwcm9wcmlhdGVseS4KIC8v
CiAvLyBGb3JtYXQgb2YgbWVtYmVyIGZ1bmN0aW9uOiBmKFt5ZWFycyxdIFttb250aHMsXSBbZGF5
c10pCi1zdGF0aWMgdm9pZCBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBMaXN0ICZhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlICptcywgR3JlZ29yaWFu
RGF0ZVRpbWUgKnQpCitzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBMaXN0ICZhcmdzLCBpbnQgbWF4QXJncywgZG91YmxlICptcywg
R3JlZ29yaWFuRGF0ZVRpbWUgKnQpCiB7CiAgICAgaW50IGlkeCA9IDA7CisgICAgYm9vbCBvayA9
IHRydWU7CiAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKICAgCiAgICAgLy8gSlMgYWxs
b3dzIGV4dHJhIHRyYWlsaW5nIGFyZ3VtZW50cyAtLSBpZ25vcmUgdGhlbQpAQCAtMjk4LDE3ICsz
MDYsMTkgQEAgc3RhdGljIHZvaWQgZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKAogICAKICAg
ICAvLyB5ZWFycwogICAgIGlmIChtYXhBcmdzID49IDMgJiYgaWR4IDwgbnVtQXJncykKLSAgICAg
ICAgdC0+eWVhciA9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMpIC0gMTkwMDsKLSAgCisgICAg
ICAgIHQtPnllYXIgPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjLCBvaykgLSAxOTAwOworICAg
IAogICAgIC8vIG1vbnRocwotICAgIGlmIChtYXhBcmdzID49IDIgJiYgaWR4IDwgbnVtQXJncykK
LSAgICAgICAgdC0+bW9udGggPSBhcmdzW2lkeCsrXS0+dG9JbnQzMihleGVjKTsKLSAgCisgICAg
aWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBudW1BcmdzICYmIG9rKSAgIAorICAgICAgICB0LT5t
b250aCA9IGFyZ3NbaWR4KytdLT50b0ludDMyKGV4ZWMsIG9rKTsKKyAgICAKICAgICAvLyBkYXlz
Ci0gICAgaWYgKGlkeCA8IG51bUFyZ3MpIHsKKyAgICBpZiAoaWR4IDwgbnVtQXJncyAmJiBvaykg
eyAgIAogICAgICAgICB0LT5tb250aERheSA9IDA7Ci0gICAgICAgICptcyArPSBhcmdzW2lkeF0t
PnRvSW50MzIoZXhlYykgKiBtc1BlckRheTsKKyAgICAgICAgKm1zICs9IGFyZ3NbaWR4XS0+dG9J
bnQzMihleGVjLCBvaykgKiBtc1BlckRheTsKICAgICB9CisgICAgCisgICAgcmV0dXJuIG9rOwog
fQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0ZUluc3RhbmNlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ0OSwxNCArMTQ1OSwyNSBAQCBzdGF0aWMg
SlNWYWx1ZSogc2V0TmV3VmFsdWVGcm9tVGltZUFyZ3MoCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlz
RGF0ZU9iaiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOwogICAgIEpTVmFs
dWUqIHYgPSB0aGlzRGF0ZU9iai0+aW50ZXJuYWxWYWx1ZSgpOwogICAgIGRvdWJsZSBtaWxsaSA9
IHYtPnRvTnVtYmVyKGV4ZWMpOworICAgIAorICAgIGlmIChhcmdzLmlzRW1wdHkoKSB8fCBpc25h
bihtaWxsaSkpIHsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAgICAg
dGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgIAogICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWlsbGkgLyBtc1Bl
clNlY29uZCk7CiAgICAgZG91YmxlIG1zID0gbWlsbGkgLSBzZWNzICogbXNQZXJTZWNvbmQ7CiAK
ICAgICBHcmVnb3JpYW5EYXRlVGltZSB0OwogICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxs
aSwgaW5wdXRJc1VUQywgdCk7CiAKLSAgICBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoZXhl
YywgYXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KTsKLQorICAgIGlmICghZmlsbFN0cnVjdHVy
ZXNVc2luZ1RpbWVBcmdzKGV4ZWMsIGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAmdCkpIHsKKyAg
ICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNl
dEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IAor
ICAgIAogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lVG9N
Uyh0LCBtcywgaW5wdXRJc1VUQykpOwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVl
KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE0NjgsMTYgKzE0ODksMzMgQEAgc3Rh
dGljIEpTVmFsdWUqIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKAogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCiAgICAgRGF0ZUluc3RhbmNlKiB0aGlzRGF0ZU9i
aiA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHRoaXNPYmopOworICAgIGlmIChhcmdzLmlz
RW1wdHkoKSkgeworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc05hTigpOworICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0gICAgICAKKyAgICAKICAgICBKU1ZhbHVlKiB2ID0gdGhpc0RhdGVPYmotPmlu
dGVybmFsVmFsdWUoKTsKICAgICBkb3VibGUgbWlsbGkgPSB2LT50b051bWJlcihleGVjKTsKLSAg
ICBkb3VibGUgc2VjcyA9IGZsb29yKG1pbGxpIC8gbXNQZXJTZWNvbmQpOwotICAgIGRvdWJsZSBt
cyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVyU2Vjb25kOworICAgIGRvdWJsZSBtcyA9IDA7CiAKICAg
ICBHcmVnb3JpYW5EYXRlVGltZSB0OwotICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwg
aW5wdXRJc1VUQywgdCk7Ci0KLSAgICBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZXhlYywg
YXJncywgbnVtQXJnc1RvVXNlLCAmbXMsICZ0KTsKLQorICAgIGlmIChudW1BcmdzVG9Vc2UgPT0g
MyAmJiBpc25hbihtaWxsaSkpCisgICAgICAgIC8vIEJhc2VkIG9uIEVDTUEgMjYyIDE1LjkuNS40
MCAtIC40MSAoc2V0W1VUQ11GdWxsWWVhcikKKyAgICAgICAgLy8gdGhlIHRpbWUgbXVzdCBiZSBy
ZXNldCB0byArMCBpZiBpdCBpcyBOYU4uIAorICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUo
MCwgdHJ1ZSwgdCk7CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSBzZWNzID0gZmxvb3IobWls
bGkgLyBtc1BlclNlY29uZCk7CisgICAgICAgIG1zID0gbWlsbGkgLSBzZWNzICogbXNQZXJTZWNv
bmQ7CisgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShtaWxsaSwgaW5wdXRJc1VUQywgdCk7
CisgICAgfQorICAgIAorICAgIGlmICghZmlsbFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKGV4ZWMs
IGFyZ3MsIG51bUFyZ3NUb1VzZSwgJm1zLCAmdCkpIHsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOYU4oKTsKKyAgICAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsVmFsdWUocmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IAorICAgICAgICAgICAKICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc051bWJlcihncmVnb3JpYW5EYXRlVGltZVRvTVModCwgbXMsIGlucHV0
SXNVVEMpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwogICAg
IHJldHVybiByZXN1bHQ7CkBAIC0xNTc0LDE3ICsxNjEyLDM3IEBAIEpTVmFsdWUqIGRhdGVQcm90
b0Z1bmNTZXRZZWFyKEV4ZWNTdGF0ZSoKIAogICAgIGNvbnN0IGJvb2wgdXRjID0gZmFsc2U7CiAK
LSAgICBEYXRlSW5zdGFuY2UqIHRoaXNEYXRlT2JqID0gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNl
Kj4odGhpc09iaik7IAorICAgIERhdGVJbnN0YW5jZSogdGhpc0RhdGVPYmogPSBzdGF0aWNfY2Fz
dDxEYXRlSW5zdGFuY2UqPih0aGlzT2JqKTsgICAgIAorICAgIGlmIChhcmdzLmlzRW1wdHkoKSkg
eyAKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOYU4oKTsKKyAgICAgICAgdGhpc0RhdGVP
YmotPnNldEludGVybmFsVmFsdWUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCiAgICAgSlNWYWx1ZSogdiA9IHRoaXNEYXRlT2JqLT5pbnRlcm5hbFZhbHVlKCk7
CiAgICAgZG91YmxlIG1pbGxpID0gdi0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgZG91YmxlIHNlY3Mg
PSBmbG9vcihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKLSAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNl
Y3MgKiBtc1BlclNlY29uZDsKKyAgICBkb3VibGUgbXMgPSAwOwogCiAgICAgR3JlZ29yaWFuRGF0
ZVRpbWUgdDsKLSAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUobWlsbGksIHV0YywgdCk7Ci0KLSAg
ICB0LnllYXIgPSAoYXJnc1swXS0+dG9JbnQzMihleGVjKSA+IDk5IHx8IGFyZ3NbMF0tPnRvSW50
MzIoZXhlYykgPCAwKSA/IGFyZ3NbMF0tPnRvSW50MzIoZXhlYykgLSAxOTAwIDogYXJnc1swXS0+
dG9JbnQzMihleGVjKTsKLQorICAgIGlmIChpc25hbihtaWxsaSkpCisgICAgICAgIC8vIEJhc2Vk
IG9uIEVDTUEgMjYyIEIuMi41IChzZXRZZWFyKQorICAgICAgICAvLyB0aGUgdGltZSBtdXN0IGJl
IHJlc2V0IHRvICswIGlmIGl0IGlzIE5hTi4gCisgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGlt
ZSgwLCB0cnVlLCB0KTsKKyAgICBlbHNlIHsgICAKKyAgICAgICAgZG91YmxlIHNlY3MgPSBmbG9v
cihtaWxsaSAvIG1zUGVyU2Vjb25kKTsKKyAgICAgICAgbXMgPSBtaWxsaSAtIHNlY3MgKiBtc1Bl
clNlY29uZDsKKyAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKG1pbGxpLCB1dGMsIHQpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBpbnQzMl90IHllYXIgPSBhcmdz
WzBdLT50b0ludDMyKGV4ZWMsIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzTmFOKCk7CisgICAgICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbFZhbHVl
KHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgICAgICAgICAgCisg
ICAgdC55ZWFyID0gKHllYXIgPiA5OSB8fCB5ZWFyIDwgMCkgPyB5ZWFyIC0gMTkwMCA6IHllYXI7
CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKHQs
IG1zLCB1dGMpKTsKICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxWYWx1ZShyZXN1bHQpOwog
ICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDQyNSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDA4LTAyLTIw
ICBNaWNoYWVsIEtuYXVwICA8bWljaGFlbC5rbmF1cEBtYWMuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gdGVzdCBmb3IgQnVnIDE2NzUzOiBk
YXRlIHNldCBtZXRob2RzIHdpdGggbm8gYXJncyBzaG91bGQgcmVzdWx0IGluIE5hTiAoQWNpZDMg
YnVnKQorCisgICAgICAgICogZmFzdC9qcy9kYXRlLXNldC10by1uYW4tZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2RhdGUtc2V0LXRvLW5hbi5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9kYXRlLXNldC10by1uYW4uanM6IEFkZGVkLgorCiAy
MDA4LTAyLTIwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZGF0ZS1zZXQt
dG8tbmFuLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2Rh
dGUtc2V0LXRvLW5hbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL2RhdGUtc2V0LXRvLW5hbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTA2IEBACitUaGlzIHRlc3RzIGlmIHRoZSBEYXRlIHNldHRlcnMgaGFuZGxlIGludmFsaWQg
cGFyYW1ldGVycyBjb3JyZWN0bHkgcmVzdWx0aW5nIGluIGEgTmFOIGRhdGUgYW5kIGlmIGEgcmVj
b3ZlcnkgZnJvbSBzdWNoIGEgTmFOIGRhdGUgaXMgb25seSBwb3NzaWJsZSBieSB1c2luZyB0aGUg
ZGF0ZS5zZXRUaW1lKCkgYW5kIGRhdGUuc2V0W1tVVENdRnVsbF1ZZWFyKCkgZnVuY3Rpb25zLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBkYXRlLnNldFRpbWUoYXJnMCkK
K1BBU1MgZGF0ZS5zZXRUaW1lKCkKK1BBU1MgcmVjb3ZlciBmcm9tIE5hTiBkYXRlIHVzaW5nIGRh
dGUuc2V0VGltZSgpCitQQVNTIGRhdGUuc2V0VGltZSBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRh
dGUuc2V0TWlsbGlzZWNvbmRzKGFyZzApCitQQVNTIGRhdGUuc2V0TWlsbGlzZWNvbmRzKCkKK1BB
U1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0TWlsbGlzZWNvbmRz
KGFyZzApCitQQVNTIGRhdGUuc2V0TWlsbGlzZWNvbmRzIHBhc3NlZCBhbGwgdGVzdHMKK1BBU1Mg
ZGF0ZS5zZXRVVENNaWxsaXNlY29uZHMoYXJnMCkKK1BBU1MgZGF0ZS5zZXRVVENNaWxsaXNlY29u
ZHMoKQorUEFTUyBubyByZWNvdmVyaW5nIGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0ZS5zZXRVVENN
aWxsaXNlY29uZHMoYXJnMCkKK1BBU1MgZGF0ZS5zZXRVVENNaWxsaXNlY29uZHMgcGFzc2VkIGFs
bCB0ZXN0cworUEFTUyBkYXRlLnNldFNlY29uZHMoYXJnMCwgYXJnMSkKK1BBU1Mgbm8gcmVjb3Zl
cmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0U2Vjb25kcyhhcmcwLCAwKQorUEFTUyBk
YXRlLnNldFNlY29uZHMoYXJnMCkKK1BBU1MgZGF0ZS5zZXRTZWNvbmRzKCkKK1BBU1Mgbm8gcmVj
b3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0U2Vjb25kcyhhcmcwKQorUEFTUyBk
YXRlLnNldFNlY29uZHMgcGFzc2VkIGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldFVUQ1NlY29uZHMo
YXJnMCwgYXJnMSkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUu
c2V0VVRDU2Vjb25kcyhhcmcwLCAwKQorUEFTUyBkYXRlLnNldFVUQ1NlY29uZHMoYXJnMCkKK1BB
U1MgZGF0ZS5zZXRVVENTZWNvbmRzKCkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRl
IHVzaW5nIGRhdGUuc2V0VVRDU2Vjb25kcyhhcmcwKQorUEFTUyBkYXRlLnNldFVUQ1NlY29uZHMg
cGFzc2VkIGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldE1pbnV0ZXMoYXJnMCwgYXJnMSwgYXJnMikK
K1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0TWludXRlcyhh
cmcwLCAwLCAwKQorUEFTUyBkYXRlLnNldE1pbnV0ZXMoYXJnMCwgYXJnMSkKK1BBU1Mgbm8gcmVj
b3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0TWludXRlcyhhcmcwLCAwKQorUEFT
UyBkYXRlLnNldE1pbnV0ZXMoYXJnMCkKK1BBU1MgZGF0ZS5zZXRNaW51dGVzKCkKK1BBU1Mgbm8g
cmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0TWludXRlcyhhcmcwKQorUEFT
UyBkYXRlLnNldE1pbnV0ZXMgcGFzc2VkIGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldFVUQ01pbnV0
ZXMoYXJnMCwgYXJnMSwgYXJnMikKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVz
aW5nIGRhdGUuc2V0VVRDTWludXRlcyhhcmcwLCAwLCAwKQorUEFTUyBkYXRlLnNldFVUQ01pbnV0
ZXMoYXJnMCwgYXJnMSkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRh
dGUuc2V0VVRDTWludXRlcyhhcmcwLCAwKQorUEFTUyBkYXRlLnNldFVUQ01pbnV0ZXMoYXJnMCkK
K1BBU1MgZGF0ZS5zZXRVVENNaW51dGVzKCkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBk
YXRlIHVzaW5nIGRhdGUuc2V0VVRDTWludXRlcyhhcmcwKQorUEFTUyBkYXRlLnNldFVUQ01pbnV0
ZXMgcGFzc2VkIGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldEhvdXJzKGFyZzAsIGFyZzEsIGFyZzIs
IGFyZzMpCitQQVNTIG5vIHJlY292ZXJpbmcgZnJvbSBOYU4gZGF0ZSB1c2luZyBkYXRlLnNldEhv
dXJzKGFyZzAsIDAsIDAsIDApCitQQVNTIGRhdGUuc2V0SG91cnMoYXJnMCwgYXJnMSwgYXJnMikK
K1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0SG91cnMoYXJn
MCwgMCwgMCkKK1BBU1MgZGF0ZS5zZXRIb3VycyhhcmcwLCBhcmcxKQorUEFTUyBubyByZWNvdmVy
aW5nIGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0ZS5zZXRIb3VycyhhcmcwLCAwKQorUEFTUyBkYXRl
LnNldEhvdXJzKGFyZzApCitQQVNTIGRhdGUuc2V0SG91cnMoKQorUEFTUyBubyByZWNvdmVyaW5n
IGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0ZS5zZXRIb3VycyhhcmcwKQorUEFTUyBkYXRlLnNldEhv
dXJzIHBhc3NlZCBhbGwgdGVzdHMKK1BBU1MgZGF0ZS5zZXRVVENIb3VycyhhcmcwLCBhcmcxLCBh
cmcyLCBhcmczKQorUEFTUyBubyByZWNvdmVyaW5nIGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0ZS5z
ZXRVVENIb3VycyhhcmcwLCAwLCAwLCAwKQorUEFTUyBkYXRlLnNldFVUQ0hvdXJzKGFyZzAsIGFy
ZzEsIGFyZzIpCitQQVNTIG5vIHJlY292ZXJpbmcgZnJvbSBOYU4gZGF0ZSB1c2luZyBkYXRlLnNl
dFVUQ0hvdXJzKGFyZzAsIDAsIDApCitQQVNTIGRhdGUuc2V0VVRDSG91cnMoYXJnMCwgYXJnMSkK
K1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0VVRDSG91cnMo
YXJnMCwgMCkKK1BBU1MgZGF0ZS5zZXRVVENIb3VycyhhcmcwKQorUEFTUyBkYXRlLnNldFVUQ0hv
dXJzKCkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0VVRD
SG91cnMoYXJnMCkKK1BBU1MgZGF0ZS5zZXRVVENIb3VycyBwYXNzZWQgYWxsIHRlc3RzCitQQVNT
IGRhdGUuc2V0RGF0ZShhcmcwKQorUEFTUyBkYXRlLnNldERhdGUoKQorUEFTUyBubyByZWNvdmVy
aW5nIGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0ZS5zZXREYXRlKGFyZzApCitQQVNTIGRhdGUuc2V0
RGF0ZSBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUuc2V0VVRDRGF0ZShhcmcwKQorUEFTUyBk
YXRlLnNldFVUQ0RhdGUoKQorUEFTUyBubyByZWNvdmVyaW5nIGZyb20gTmFOIGRhdGUgdXNpbmcg
ZGF0ZS5zZXRVVENEYXRlKGFyZzApCitQQVNTIGRhdGUuc2V0VVRDRGF0ZSBwYXNzZWQgYWxsIHRl
c3RzCitQQVNTIGRhdGUuc2V0TW9udGgoYXJnMCwgYXJnMSkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBm
cm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0TW9udGgoYXJnMCwgMCkKK1BBU1MgZGF0ZS5zZXRN
b250aChhcmcwKQorUEFTUyBkYXRlLnNldE1vbnRoKCkKK1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9t
IE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0TW9udGgoYXJnMCkKK1BBU1MgZGF0ZS5zZXRNb250aCBw
YXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUuc2V0VVRDTW9udGgoYXJnMCwgYXJnMSkKK1BBU1Mg
bm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0VVRDTW9udGgoYXJnMCwg
MCkKK1BBU1MgZGF0ZS5zZXRVVENNb250aChhcmcwKQorUEFTUyBkYXRlLnNldFVUQ01vbnRoKCkK
K1BBU1Mgbm8gcmVjb3ZlcmluZyBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0VVRDTW9udGgo
YXJnMCkKK1BBU1MgZGF0ZS5zZXRVVENNb250aCBwYXNzZWQgYWxsIHRlc3RzCitQQVNTIGRhdGUu
c2V0RnVsbFllYXIoYXJnMCwgYXJnMSwgYXJnMikKK1BBU1MgZGF0ZS5zZXRGdWxsWWVhcihhcmcw
LCBhcmcxKQorUEFTUyBkYXRlLnNldEZ1bGxZZWFyKGFyZzApCitQQVNTIGRhdGUuc2V0RnVsbFll
YXIoKQorUEFTUyByZWNvdmVyIGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0ZS5zZXRGdWxsWWVhcigp
CitQQVNTIGRhdGUuc2V0RnVsbFllYXIgcGFzc2VkIGFsbCB0ZXN0cworUEFTUyBkYXRlLnNldFVU
Q0Z1bGxZZWFyKGFyZzAsIGFyZzEsIGFyZzIpCitQQVNTIGRhdGUuc2V0VVRDRnVsbFllYXIoYXJn
MCwgYXJnMSkKK1BBU1MgZGF0ZS5zZXRVVENGdWxsWWVhcihhcmcwKQorUEFTUyBkYXRlLnNldFVU
Q0Z1bGxZZWFyKCkKK1BBU1MgcmVjb3ZlciBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0VVRD
RnVsbFllYXIoKQorUEFTUyBkYXRlLnNldFVUQ0Z1bGxZZWFyIHBhc3NlZCBhbGwgdGVzdHMKK1BB
U1MgZGF0ZS5zZXRZZWFyKGFyZzApCitQQVNTIGRhdGUuc2V0WWVhcigpCitQQVNTIGRhdGUuZ2V0
WWVhcigpIGlzIGNvbXBhdGlibGUgdG8gSmF2YVNjcmlwdCAxLjMgYW5kIGxhdGVyCitQQVNTIHJl
Y292ZXIgZnJvbSBOYU4gZGF0ZSB1c2luZyBkYXRlLnNldFVUQ0Z1bGxZZWFyKCkKK1BBU1MgZGF0
ZS5zZXRZZWFyIHBhc3NlZCBhbGwgdGVzdHMKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2RhdGUtc2V0
LXRvLW5hbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZGF0ZS1zZXQt
dG8tbmFuLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2RhdGUtc2V0
LXRvLW5hbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGUtc2V0LXRvLW5hbi5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9kYXRlLXNldC10
by1uYW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZGF0
ZS1zZXQtdG8tbmFuLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNv
dXJjZXMvZGF0ZS1zZXQtdG8tbmFuLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1MiBAQAor
ZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0cyBpZiB0aGUgRGF0ZSBzZXR0ZXJzIGhhbmRsZSBpbnZh
bGlkIHBhcmFtZXRlcnMgY29ycmVjdGx5IHJlc3VsdGluZyBpbiBhIE5hTiBkYXRlIGFuZCBpZiBh
IHJlY292ZXJ5IGZyb20gc3VjaCBhIE5hTiBkYXRlIGlzIG9ubHkgcG9zc2libGUgYnkgdXNpbmcg
dGhlIGRhdGUuc2V0VGltZSgpIGFuZCBkYXRlLnNldFtbVVRDXUZ1bGxdWWVhcigpIGZ1bmN0aW9u
cy4iCispOworCit2YXIgZGF0ZUZ1bmN0aW9uTmFtZVJvb3RzID0gWworICAgICJUaW1lIiwKKyAg
ICAiTWlsbGlzZWNvbmRzIiwKKyAgICAiVVRDTWlsbGlzZWNvbmRzIiwKKyAgICAiU2Vjb25kcyIs
CisgICAgIlVUQ1NlY29uZHMiLAorICAgICJNaW51dGVzIiwKKyAgICAiVVRDTWludXRlcyIsCisg
ICAgIkhvdXJzIiwKKyAgICAiVVRDSG91cnMiLAorICAgICJEYXRlIiwKKyAgICAiVVRDRGF0ZSIs
CisgICAgIk1vbnRoIiwKKyAgICAiVVRDTW9udGgiLAorICAgICJGdWxsWWVhciIsCisgICAgIlVU
Q0Z1bGxZZWFyIiwKKyAgICAiWWVhciIKK107CisKK3ZhciBkYXRlRnVuY3Rpb25QYXJhbWV0ZXJO
dW0gPSBbCisgICAgMSwKKyAgICAxLAorICAgIDEsCisgICAgMiwKKyAgICAyLAorICAgIDMsCisg
ICAgMywKKyAgICA0LAorICAgIDQsCisgICAgMSwKKyAgICAxLAorICAgIDIsCisgICAgMiwKKyAg
ICAzLAorICAgIDMsCisgICAgMQorXTsKKwordmFyIHRlc3RWYWx1ZXMgPSBbCisgICAgMCwKKyAg
ICBOdW1iZXIuTmFOLAorICAgIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwKKyAgICBOdW1iZXIu
TkVHQVRJVkVfSU5GSU5JVFkKK107CisKK2Z1bmN0aW9uIHRlc3REYXRlRnVuY3Rpb25XaXRoVmFs
dWVOb1JlY292ZXJOYU4oZnVuY3Rpb25OYW1lUm9vdCwgc3RlcHMpCit7CisgICAgdmFyIGRhdGUg
PSBuZXcgRGF0ZSgpOworICAgIHZhciBzZXRWYWx1ZSA9IGRhdGVbImdldCIgKyBmdW5jdGlvbk5h
bWVSb290XSgpOyAgICAKKyAgICBkYXRlLnNldE1pbGxpc2Vjb25kcyhOdW1iZXIuTmFOKTsKKyAg
ICB2YXIgcGFyYW1zID0gWworICAgICAgICAiIiwKKyAgICAgICAgIiwgMCIsCisgICAgICAgICIs
IDAsIDAiLAorICAgICAgICAiLCAwLCAwLCAwIgorICAgIF07CisgICAgdmFyIHNldFJlc3VsdCA9
ICgxID09IHN0ZXBzKSA/ICBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oc2V0VmFsdWUp
CisgICAgICAgICAgICAgICAgICA6ICgoMiA9PSBzdGVwcykgPyBkYXRlWyJzZXQiICsgZnVuY3Rp
b25OYW1lUm9vdF0oc2V0VmFsdWUsIDApCisgICAgICAgICAgICAgICAgICA6ICgoMyA9PSBzdGVw
cykgPyBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oc2V0VmFsdWUsIDAsIDApCisgICAg
ICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgZGF0ZVsic2V0IiArIGZ1bmN0aW9uTmFt
ZVJvb3RdKHNldFZhbHVlLCAwLCAwLCAwKSkpOworICAgIGlmICghaXNOYU4oc2V0UmVzdWx0KSkg
eworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlKE5hTikuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3Qg
KyAiKCIgKyBzZXRWYWx1ZSArIHBhcmFtc1tzdGVwcyAtIDFdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgIikgd2FzICIgKyBzZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFO
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdmFyIGdldFJlc3VsdCA9IGRh
dGVbImdldCIgKyBmdW5jdGlvbk5hbWVSb290XSgpOworICAgIGlmICghaXNOYU4oZ2V0UmVzdWx0
KSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVSb290ICsg
IigpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHRlc3RQYXNzZWQgKCJubyByZWNvdmVyaW5nIGZyb20gTmFO
IGRhdGUgdXNpbmcgZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9vdCAKKyAgICAgICAgKyAiKGFy
ZzAiICsgcGFyYW1zW3N0ZXBzIC0gMV0gKyAiKSIpOworICAgIHJldHVybiB0cnVlOworfQorCitm
dW5jdGlvbiB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlUmVjb3ZlclRpbWUoZnVuY3Rpb25OYW1l
Um9vdCkKK3sKKyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgdmFyIHNldFZhbHVlID0g
ZGF0ZVsiZ2V0IiArIGZ1bmN0aW9uTmFtZVJvb3RdKCk7ICAgIAorICAgIGRhdGUuc2V0TWlsbGlz
ZWNvbmRzKE51bWJlci5OYU4pOworICAgIHZhciBzZXRSZXN1bHQgPSBkYXRlWyJzZXQiICsgZnVu
Y3Rpb25OYW1lUm9vdF0oc2V0VmFsdWUpOworICAgIGlmIChzZXRWYWx1ZSAhPSBzZXRSZXN1bHQp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZShOYU4pLnNldCIgKyBmdW5jdGlvbk5hbWVSb290
ICsgIigiICsgc2V0VmFsdWUgKyAiKSB3YXMgIiArIHNldFJlc3VsdCArICIgaW5zdGVhZCBvZiAi
ICsgc2V0VmFsdWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhciBnZXRS
ZXN1bHQgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oKTsKKyAgICBpZiAoZ2V0UmVz
dWx0ICE9IHNldFZhbHVlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0
aW9uTmFtZVJvb3QgKyAiKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgIiArIHNl
dFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB0ZXN0UGFzc2VkICgi
cmVjb3ZlciBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3Qg
KyAiKCkiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlv
bldpdGhWYWx1ZVJlY292ZXJGdWxsWWVhcihmdW5jdGlvbk5hbWVSb290KQoreworICAgIHZhciBy
ZXN1bHQgPSB0cnVlOworICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICB2YXIgc2V0VmFs
dWUgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oKTsgICAgCisgICAgZGF0ZS5zZXRN
aWxsaXNlY29uZHMoTnVtYmVyLk5hTik7CisgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIg
KyBmdW5jdGlvbk5hbWVSb290XShzZXRWYWx1ZSk7ICAgIAorICAgIHZhciBnZXRSZXN1bHQgPSBk
YXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IHNl
dFZhbHVlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFtZVJv
b3QgKyAiKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgIiArIHNldFZhbHVlKTsK
KyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0
TWlsbGlzZWNvbmRzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAgIHRlc3RG
YWlsZWQoImRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3Rl
YWQgb2YgMCIpOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0
ID0gZGF0ZS5nZXRTZWNvbmRzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAg
IHRlc3RGYWlsZWQoImRhdGUuZ2V0U2Vjb25kcygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0
ZWFkIG9mIDAiKTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3Vs
dCA9IGRhdGUuZ2V0TWludXRlcygpOworICAgIGlmIChnZXRSZXN1bHQgIT0gMCkgeworICAgICAg
ICB0ZXN0RmFpbGVkKCJkYXRlLmdldE1pbnV0ZXMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5z
dGVhZCBvZiAwIik7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1
bHQgPSBkYXRlLmdldEhvdXJzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAg
IHRlc3RGYWlsZWQoImRhdGUuZ2V0SG91cnMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVh
ZCBvZiAwIik7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQg
PSBkYXRlLmdldERhdGUoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDEpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiZGF0ZS5nZXREYXRlKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2Yg
MSIpOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0
ZS5nZXRNb250aCgpOworICAgIGlmIChnZXRSZXN1bHQgIT0gMCkgeworICAgICAgICB0ZXN0RmFp
bGVkKCJkYXRlLmdldE1vbnRoKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgMCIp
OworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgdGVzdFBhc3NlZCAoInJlY292ZXIgZnJvbSBOYU4gZGF0ZSB1c2luZyBkYXRlLnNldEZ1bGxZ
ZWFyKCkiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQgKCJyZWNvdmVyIGZyb20gTmFO
IGRhdGUgdXNpbmcgZGF0ZS5zZXRGdWxsWWVhcigpIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZVJlY292ZXJVVENGdWxsWWVhcihm
dW5jdGlvbk5hbWVSb290KQoreworICAgIHZhciByZXN1bHQgPSB0cnVlOyAKKyAgICB2YXIgZGF0
ZSA9IG5ldyBEYXRlKCk7CisgICAgdmFyIHNldFZhbHVlID0gZGF0ZVsiZ2V0IiArIGZ1bmN0aW9u
TmFtZVJvb3RdKCk7ICAgIAorICAgIGRhdGUuc2V0TWlsbGlzZWNvbmRzKE51bWJlci5OYU4pOwor
ICAgIHZhciBzZXRSZXN1bHQgPSBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0oc2V0VmFs
dWUpOyAgICAKKyAgICB2YXIgZ2V0UmVzdWx0ID0gZGF0ZVsiZ2V0IiArIGZ1bmN0aW9uTmFtZVJv
b3RdKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSBzZXRWYWx1ZSkgeworICAgICAgICB0ZXN0RmFp
bGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVSb290ICsgIigpIHdhcyAiICsgZ2V0UmVzdWx0
ICsgIiBpbnN0ZWFkIG9mICIgKyBzZXRWYWx1ZSk7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOwor
ICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpOworICAgIGlm
IChnZXRSZXN1bHQgIT0gMCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldFVUQ01pbGxp
c2Vjb25kcygpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAg
cmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9IGRhdGUuZ2V0VVRDU2Vjb25k
cygpOworICAgIGlmIChnZXRSZXN1bHQgIT0gMCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJkYXRl
LmdldFVUQ1NlY29uZHMoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAwIik7Cisg
ICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1bHQgPSBkYXRlLmdldFVU
Q01pbnV0ZXMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiZGF0ZS5nZXRVVENNaW51dGVzKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2Yg
MCIpOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0gZGF0
ZS5nZXRVVENIb3VycygpOworICAgIGlmIChnZXRSZXN1bHQgIT0gMCkgeworICAgICAgICB0ZXN0
RmFpbGVkKCJkYXRlLmdldFVUQ0hvdXJzKCkgd2FzICIgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQg
b2YgMCIpOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0g
ZGF0ZS5nZXRVVENEYXRlKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAxKSB7CisgICAgICAgIHRl
c3RGYWlsZWQoImRhdGUuZ2V0VVRDRGF0ZSgpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFk
IG9mIDEiKTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGdldFJlc3VsdCA9
IGRhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAgICAg
dGVzdEZhaWxlZCgiZGF0ZS5nZXRVVENNb250aCgpIHdhcyAiICsgZ2V0UmVzdWx0ICsgIiBpbnN0
ZWFkIG9mIDAiKTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChyZXN1
bHQpCisgICAgICAgIHRlc3RQYXNzZWQgKCJyZWNvdmVyIGZyb20gTmFOIGRhdGUgdXNpbmcgZGF0
ZS5zZXRVVENGdWxsWWVhcigpIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkICgicmVj
b3ZlciBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUuc2V0VVRDRnVsbFllYXIoKSIpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVSZWNv
dmVyWWVhcihmdW5jdGlvbk5hbWVSb290KQoreworICAgIHZhciByZXN1bHQgPSB0cnVlOworICAg
IHZhciBpczEzQ29tcGF0aWJsZSA9IHRydWU7CisgICAgCisgICAgdmFyIGRhdGUgPSBuZXcgRGF0
ZSgpOworICAgIHZhciBzZXRWYWx1ZSA9IGRhdGVbImdldCIgKyBmdW5jdGlvbk5hbWVSb290XSgp
OworICAgIHZhciBmdWxsWWVhcnMgPSBkYXRlLmdldEZ1bGxZZWFyKCkgLSAxOTAwOyAgICAKKyAg
ICBpZiAoc2V0VmFsdWUgIT0gZnVsbFllYXJzKSB7CisgICAgICAgIHRlc3RGYWlsZWQoImRhdGUu
Z2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCkgd2FzICIgKyBzZXRWYWx1ZSArICIgaW5zdGVh
ZCBvZiAiICsgZnVsbFllYXJzKTsKKyAgICAgICAgaXMxM0NvbXBhdGlibGUgPSBmYWxzZTsKKyAg
ICB9IGVsc2UgCisgICAgICAgIHRlc3RQYXNzZWQoImRhdGUuZ2V0WWVhcigpIGlzIGNvbXBhdGli
bGUgdG8gSmF2YVNjcmlwdCAxLjMgYW5kIGxhdGVyIik7CisgICAgCisgICAgZGF0ZS5zZXRNaWxs
aXNlY29uZHMoTnVtYmVyLk5hTik7CisgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIgKyBm
dW5jdGlvbk5hbWVSb290XShzZXRWYWx1ZSArIDE5MDApOyAgICAgICAgCisgICAgdmFyIGdldFJl
c3VsdCA9IGRhdGVbImdldCIgKyBmdW5jdGlvbk5hbWVSb290XSgpOworICAgIGlmIChnZXRSZXN1
bHQgIT0gc2V0VmFsdWUpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXQiICsgZnVuY3Rp
b25OYW1lUm9vdCArICIoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVhZCBvZiAiICsgc2V0
VmFsdWUpOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAgZ2V0UmVzdWx0ID0g
ZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsKKyAgICAg
ICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSB3YXMgIiArIGdldFJlc3VsdCAr
ICIgaW5zdGVhZCBvZiAwIik7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBn
ZXRSZXN1bHQgPSBkYXRlLmdldFNlY29uZHMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXRTZWNvbmRzKCkgd2FzICIgKyBnZXRSZXN1bHQg
KyAiIGluc3RlYWQgb2YgMCIpOworICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICB9CisgICAg
Z2V0UmVzdWx0ID0gZGF0ZS5nZXRNaW51dGVzKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0TWludXRlcygpIHdhcyAiICsgZ2V0UmVzdWx0
ICsgIiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAg
IGdldFJlc3VsdCA9IGRhdGUuZ2V0SG91cnMoKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IDApIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5nZXRIb3VycygpIHdhcyAiICsgZ2V0UmVzdWx0ICsg
IiBpbnN0ZWFkIG9mIDAiKTsKKyAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgfQorICAgIGdl
dFJlc3VsdCA9IGRhdGUuZ2V0RGF0ZSgpOworICAgIGlmIChnZXRSZXN1bHQgIT0gMSkgeworICAg
ICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldERhdGUoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5z
dGVhZCBvZiAxIik7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBnZXRSZXN1
bHQgPSBkYXRlLmdldE1vbnRoKCk7CisgICAgaWYgKGdldFJlc3VsdCAhPSAwKSB7CisgICAgICAg
IHRlc3RGYWlsZWQoImRhdGUuZ2V0TW9udGgoKSB3YXMgIiArIGdldFJlc3VsdCArICIgaW5zdGVh
ZCBvZiAwIik7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAocmVzdWx0
KQorICAgICAgICB0ZXN0UGFzc2VkICgicmVjb3ZlciBmcm9tIE5hTiBkYXRlIHVzaW5nIGRhdGUu
c2V0VVRDRnVsbFllYXIoKSIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCAoInJlY292
ZXIgZnJvbSBOYU4gZGF0ZSB1c2luZyBkYXRlLnNldFVUQ0Z1bGxZZWFyKCkiKTsKKyAgICByZXR1
cm4gcmVzdWx0ICYmIGlzMTNDb21wYXRpYmxlOworfQorCitmdW5jdGlvbiBtYWtlSUVIYXBweShm
dW5jdGlvbk5hbWVSb290LCB2YWx1ZSkKK3sgICAgCisgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgp
OworICAgIHZhciBzZXRSZXN1bHQgPSBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0odmFs
dWUpOworICAgIGlmICghaXNOYU4oc2V0UmVzdWx0KSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJk
YXRlLnNldCIgKyBmdW5jdGlvbk5hbWVSb290IAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKyAiKCkgd2FzICIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNldFJlc3Vs
dCArICIgaW5zdGVhZCBvZiBOYU4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICB2YXIgZ2V0UmVzdWx0ID0gZGF0ZVsiZ2V0IiArIGZ1bmN0aW9uTmFt
ZVJvb3RdKCk7CisgICAgaWYgKCFpc05hTihnZXRSZXN1bHQpKSB7CisgICAgICAgIHRlc3RGYWls
ZWQoImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCkgd2FzICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSAgIAorICAgIHJldHVybiB0cnVlCit9CisKK2Z1bmN0
aW9uIHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVFeHBlY3RpbmdOYU4xKGZ1bmN0aW9uTmFtZVJv
b3QpCit7CisgICAgdmFyIHJlc3VsdCA9IHRydWU7CisgICAgZm9yICh2YXIgaWR4MCBpbiB0ZXN0
VmFsdWVzKQorICAgICAgICBpZiAoaWR4MCAhPSAwKSB7CisgICAgICAgICAgICB2YXIgZGF0ZSA9
IG5ldyBEYXRlKCk7CisgICAgICAgICAgICB2YXIgc2V0UmVzdWx0ID0gZGF0ZVsic2V0IiArIGZ1
bmN0aW9uTmFtZVJvb3RdKHRlc3RWYWx1ZXNbaWR4MF0pOworICAgICAgICAgICAgaWYgKCFpc05h
TihzZXRSZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiZGF0ZS5zZXQiICsg
ZnVuY3Rpb25OYW1lUm9vdCArICIoIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKyB0ZXN0VmFsdWVzW2lkeDBdICsgIikgd2FzICIgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgc2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgZ2V0UmVzdWx0ID0gZGF0ZVsiZ2V0IiArIGZ1bmN0aW9uTmFtZVJv
b3RdKCk7CisgICAgICAgICAgICBpZiAoIWlzTmFOKGdldFJlc3VsdCkpIHsKKyAgICAgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJkYXRlLmdldCIgKyBmdW5jdGlvbk5hbWVSb290ICsgIigpIHdhcyAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZ2V0UmVzdWx0ICsgIiBp
bnN0ZWFkIG9mIE5hTiIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgIH0gZWxzZSBpZiAoIW1ha2VJRUhhcHB5KGZ1bmN0aW9uTmFtZVJvb3QpKQorICAgICAg
ICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgaWYgKHJlc3VsdCkgeyAKKyAgICAgICAgdGVzdFBh
c3NlZCgiZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoYXJnMCkiKTsKKyAgICAgICAg
dGVzdFBhc3NlZCgiZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoKSIpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZh
bHVlRXhwZWN0aW5nTmFOMihmdW5jdGlvbk5hbWVSb290KQoreworICAgIHZhciByZXN1bHQgPSB0
cnVlOworICAgIGZvciAodmFyIGlkeDAgaW4gdGVzdFZhbHVlcykKKyAgICAgICAgZm9yICh2YXIg
aWR4MSBpbiB0ZXN0VmFsdWVzKQorICAgICAgICAgICAgaWYgKGlkeDAgIT0gMCB8fCBpZHgxICE9
IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgICAgICAg
ICAgICAgdmFyIHNldFJlc3VsdCA9IGRhdGVbInNldCIgKyBmdW5jdGlvbk5hbWVSb290XSh0ZXN0
VmFsdWVzW2lkeDBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdFZhbHVlc1tpZHgxXSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKCFpc05hTihzZXRSZXN1bHQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoImRhdGUuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCIgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRlc3RWYWx1ZXNbaWR4
MF0gKyAiLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRl
c3RWYWx1ZXNbaWR4MV0gKyAiKSB3YXMgIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgc2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YXIgZ2V0UmVzdWx0ID0gZGF0ZVsiZ2V0IiArIGZ1bmN0aW9u
TmFtZVJvb3RdKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc05hTihnZXRSZXN1bHQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFtZVJv
b3QgKyAiKCkgd2FzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgZ2V0UmVzdWx0ICsgIiBpbnN0ZWFkIG9mIE5hTiIpOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICBpZiAocmVz
dWx0KSAKKyAgICAgICAgdGVzdFBhc3NlZCgiZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9vdCAr
ICIoYXJnMCwgYXJnMSkiKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiB0ZXN0
RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlRXhwZWN0aW5nTmFOMyhmdW5jdGlvbk5hbWVSb290KQorewor
ICAgIHZhciByZXN1bHQgPSB0cnVlOworICAgIGZvciAodmFyIGlkeDAgaW4gdGVzdFZhbHVlcykK
KyAgICAgICAgZm9yICh2YXIgaWR4MSBpbiB0ZXN0VmFsdWVzKQorICAgICAgICAgICAgZm9yICh2
YXIgaWR4MiBpbiB0ZXN0VmFsdWVzKQorICAgICAgICAgICAgICAgIGlmIChpZHgwICE9IDAgfHwg
aWR4MSAhPSAwIHx8IGlkeDIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZSA9
IG5ldyBEYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBzZXRSZXN1bHQgPSBkYXRlWyJz
ZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0odGVzdFZhbHVlc1tpZHgwXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
VmFsdWVzW2lkeDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RWYWx1ZXNbaWR4Ml0pOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzTmFOKHNldFJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RGYWlsZWQoImRhdGUuc2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCIgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZXN0VmFsdWVzW2lkeDBd
ICsgIiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg
dGVzdFZhbHVlc1tpZHgxXSArICIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArIHRlc3RWYWx1ZXNbaWR4Ml0gKyAiKSB3YXMgIiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNldFJlc3VsdCArICIgaW5zdGVh
ZCBvZiBOYU4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFy
IGdldFJlc3VsdCA9IGRhdGVbImdldCIgKyBmdW5jdGlvbk5hbWVSb290XSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzTmFOKGdldFJlc3VsdCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0aW9uTmFtZVJvb3QgKyAiKCkgd2FzICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGdldFJlc3Vs
dCArICIgaW5zdGVhZCBvZiBOYU4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgaWYgKHJlc3VsdCkgCisgICAgICAgIHRlc3RQYXNzZWQoImRhdGUuc2V0IiArIGZ1bmN0
aW9uTmFtZVJvb3QgKyAiKGFyZzAsIGFyZzEsIGFyZzIpIik7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGluZ05hTjQoZnVu
Y3Rpb25OYW1lUm9vdCkKK3sKKyAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsKKyAgICBmb3IgKHZhciBp
ZHgwIGluIHRlc3RWYWx1ZXMpCisgICAgICAgIGZvciAodmFyIGlkeDEgaW4gdGVzdFZhbHVlcykK
KyAgICAgICAgICAgIGZvciAodmFyIGlkeDIgaW4gdGVzdFZhbHVlcykKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBpZHgzIGluIHRlc3RWYWx1ZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIChp
ZHgwICE9IDAgfHwgaWR4MSAhPSAwIHx8IGlkeDIgIT0gMCB8fCBpZHgzICE9IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzZXRSZXN1bHQgPSBkYXRlWyJzZXQiICsgZnVuY3Rpb25OYW1lUm9vdF0o
dGVzdFZhbHVlc1tpZHgwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFZhbHVlc1tpZHgxXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdFZhbHVlc1tpZHgyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFZhbHVlc1tpZHgz
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHNldFJlc3VsdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkYXRlLnNldCIgKyBmdW5jdGlv
bk5hbWVSb290ICsgIigiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArIHRlc3RWYWx1ZXNbaWR4MF0gKyAiLCAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdGVzdFZhbHVlc1tpZHgxXSArICIsICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0ZXN0
VmFsdWVzW2lkeDJdICsgIiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArIHRlc3RWYWx1ZXNbaWR4M10gKyAiKSB3YXMgIiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzZXRSZXN1bHQgKyAiIGlu
c3RlYWQgb2YgTmFOIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBnZXRSZXN1bHQgPSBkYXRlWyJnZXQiICsgZnVuY3Rpb25OYW1lUm9v
dF0oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNOYU4oZ2V0UmVzdWx0KSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImRhdGUuZ2V0IiArIGZ1bmN0
aW9uTmFtZVJvb3QgKyAiKCkgd2FzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKyBnZXRSZXN1bHQgKyAiIGluc3RlYWQgb2YgTmFOIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICBpZiAocmVzdWx0KSAKKyAgICAgICAgdGVzdFBhc3NlZCgi
ZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9vdCArICIoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMyki
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKKworZnVuY3Rpb24gdGVzdERhdGVGdW5jdGlv
bihmdW5jdGlvbk5hbWVSb290LCBmdW5jdGlvblBhcmFtTnVtKQoreworICAgIHZhciBzdWNjZXNz
ID0gdHJ1ZTsKKyAgICAKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uUGFyYW1OdW0pIHsKKyAgICBjYXNl
IDQ6CisgICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZUV4cGVjdGlu
Z05hTjQoZnVuY3Rpb25OYW1lUm9vdCk7CisgICAgICAgIGlmIChmdW5jdGlvbk5hbWVSb290ICE9
ICJUaW1lIiAmJgorICAgICAgICAgICAgZnVuY3Rpb25OYW1lUm9vdCAhPSAiRnVsbFllYXIiICYm
CisgICAgICAgICAgICBmdW5jdGlvbk5hbWVSb290ICE9ICJVVENGdWxsWWVhciIgJiYKKyAgICAg
ICAgICAgIGZ1bmN0aW9uTmFtZVJvb3QgIT0gIlllYXIiKQorICAgICAgICAgICAgc3VjY2VzcyAm
PSB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlTm9SZWNvdmVyTmFOKGZ1bmN0aW9uTmFtZVJvb3Qs
IDQpOworCisgICAgY2FzZSAzOgorICAgICAgICBzdWNjZXNzICY9IHRlc3REYXRlRnVuY3Rpb25X
aXRoVmFsdWVFeHBlY3RpbmdOYU4zKGZ1bmN0aW9uTmFtZVJvb3QpOworICAgICAgICBpZiAoZnVu
Y3Rpb25OYW1lUm9vdCAhPSAiVGltZSIgJiYKKyAgICAgICAgICAgIGZ1bmN0aW9uTmFtZVJvb3Qg
IT0gIkZ1bGxZZWFyIiAmJgorICAgICAgICAgICAgZnVuY3Rpb25OYW1lUm9vdCAhPSAiVVRDRnVs
bFllYXIiICYmCisgICAgICAgICAgICBmdW5jdGlvbk5hbWVSb290ICE9ICJZZWFyIikKKyAgICAg
ICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZU5vUmVjb3Zlck5hTihm
dW5jdGlvbk5hbWVSb290LCAzKTsKKyAgICAgICAgCisgICAgY2FzZSAyOgorICAgICAgICBzdWNj
ZXNzICY9IHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVFeHBlY3RpbmdOYU4yKGZ1bmN0aW9uTmFt
ZVJvb3QpOworICAgICAgICBpZiAoZnVuY3Rpb25OYW1lUm9vdCAhPSAiVGltZSIgJiYKKyAgICAg
ICAgICAgIGZ1bmN0aW9uTmFtZVJvb3QgIT0gIkZ1bGxZZWFyIiAmJgorICAgICAgICAgICAgZnVu
Y3Rpb25OYW1lUm9vdCAhPSAiVVRDRnVsbFllYXIiICYmCisgICAgICAgICAgICBmdW5jdGlvbk5h
bWVSb290ICE9ICJZZWFyIikKKyAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVGdW5jdGlv
bldpdGhWYWx1ZU5vUmVjb3Zlck5hTihmdW5jdGlvbk5hbWVSb290LCAyKTsKKyAgICAgICAgCisg
ICAgY2FzZSAxOgorICAgICAgICBzdWNjZXNzICY9IHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVF
eHBlY3RpbmdOYU4xKGZ1bmN0aW9uTmFtZVJvb3QpOworICAgICAgICBpZiAoZnVuY3Rpb25OYW1l
Um9vdCA9PSAiVGltZSIpCisgICAgICAgICAgICBzdWNjZXNzICY9IHRlc3REYXRlRnVuY3Rpb25X
aXRoVmFsdWVSZWNvdmVyVGltZShmdW5jdGlvbk5hbWVSb290KTsgICAgICAgCisgICAgICAgIGVs
c2UgaWYgKGZ1bmN0aW9uTmFtZVJvb3QgPT0gIkZ1bGxZZWFyIikKKyAgICAgICAgICAgIHN1Y2Nl
c3MgJj0gdGVzdERhdGVGdW5jdGlvbldpdGhWYWx1ZVJlY292ZXJGdWxsWWVhcihmdW5jdGlvbk5h
bWVSb290KTsKKyAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25OYW1lUm9vdCA9PSAiVVRDRnVsbFll
YXIiKQorICAgICAgICAgICAgc3VjY2VzcyAmPSB0ZXN0RGF0ZUZ1bmN0aW9uV2l0aFZhbHVlUmVj
b3ZlclVUQ0Z1bGxZZWFyKGZ1bmN0aW9uTmFtZVJvb3QpOworICAgICAgICBlbHNlIGlmIChmdW5j
dGlvbk5hbWVSb290ID09ICJZZWFyIikKKyAgICAgICAgICAgIHN1Y2Nlc3MgJj0gdGVzdERhdGVG
dW5jdGlvbldpdGhWYWx1ZVJlY292ZXJZZWFyKGZ1bmN0aW9uTmFtZVJvb3QpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzdWNjZXNzICY9IHRlc3REYXRlRnVuY3Rpb25XaXRoVmFsdWVOb1Jl
Y292ZXJOYU4oZnVuY3Rpb25OYW1lUm9vdCwgMSk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAo
c3VjY2VzcykKKyAgICAgICAgdGVzdFBhc3NlZCgiZGF0ZS5zZXQiICsgZnVuY3Rpb25OYW1lUm9v
dCArICIgcGFzc2VkIGFsbCB0ZXN0cyIpOworfQorCitmb3IgKHZhciB4IGluIGRhdGVGdW5jdGlv
bk5hbWVSb290cykKK3sKKyAgICB0ZXN0RGF0ZUZ1bmN0aW9uKGRhdGVGdW5jdGlvbk5hbWVSb290
c1t4XSwgZGF0ZUZ1bmN0aW9uUGFyYW1ldGVyTnVtW3hdKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="8402"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>