<?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>32698</bug_id>
          
          <creation_ts>2009-12-17 22:14:59 -0800</creation_ts>
          <short_desc>[JSC] Date binding support</short_desc>
          <delta_ts>2009-12-20 22:23:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>32809</blocked>
    
    <blocked>32697</blocked>
    
    <blocked>32699</blocked>
    
    <blocked>32810</blocked>
    
    <blocked>32811</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>173043</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-17 22:14:59 -0800</bug_when>
    <thetext>HTML5&apos;s HTMLInputElement IDL has
&gt;          attribute Date valueAsDate;

We need to support binding for Date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173058</commentid>
    <comment_count>1</comment_count>
      <attachid>45128</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-17 23:07:10 -0800</bug_when>
    <thetext>Created attachment 45128
Proposed patch

Generated code will be:

JSValue jsHTMLInputElementValueAsDate(ExecState* exec, const Identifier&amp;, const PropertySlot&amp; slot)
{
    JSHTMLInputElement* castedThis = static_cast&lt;JSHTMLInputElement*&gt;(asObject(slot.slotBase()));
    UNUSED_PARAM(exec);
    HTMLInputElement* imp = static_cast&lt;HTMLInputElement*&gt;(castedThis-&gt;impl());
    return (isnan(imp-&gt;valueAsDate()) || isinf(imp-&gt;valueAsDate())) ? jsNull() : new (exec) DateInstance(exec, imp-&gt;valueAsDate());
}

void setJSHTMLInputElementValueAsDate(ExecState* exec, JSObject* thisObject, JSValue value)
{
    HTMLInputElement* imp = static_cast&lt;HTMLInputElement*&gt;(static_cast&lt;JSHTMLInputElement*&gt;(thisObject)-&gt;impl());
    ExceptionCode ec = 0;
    imp-&gt;setValueAsDate(value.isUndefinedOrNull() ? std::numeric_limits&lt;double&gt;::quiet_NaN() : static_cast&lt;DateInstance*&gt;(value.toObject(exec))-&gt;internalNumber(), ec);
    setDOMException(exec, ec);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173061</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-17 23:11:12 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45128 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173190</commentid>
    <comment_count>3</comment_count>
      <attachid>45128</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-18 09:33:44 -0800</bug_when>
    <thetext>Comment on attachment 45128
Proposed patch

&gt; +    return &quot;$value.isUndefinedOrNull() ? std::numeric_limits&lt;double&gt;::quiet_NaN() : static_cast&lt;DateInstance*&gt;($value.toObject(exec))-&gt;internalNumber()&quot; if $type eq &quot;Date&quot;;

This isn&apos;t right. We can&apos;t just call toObject and then cast to DateInstance* without some sort of type check. I also suggest considering putting this logic into a function in JSDOMBinding.h and just have the generated code call the function instead of putting the logic into the bindings generator.

I think the patch needs to include one use of this binding so we can implement the test cases we&apos;ll need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173208</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-18 09:52:40 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; This isn&apos;t right. We can&apos;t just call toObject and then cast to DateInstance*
&gt; without some sort of type check. I also suggest considering putting this logic
&gt; into a function in JSDOMBinding.h and just have the generated code call the
&gt; function instead of putting the logic into the bindings generator.

Ok, I&apos;ll update the patch.

&gt; I think the patch needs to include one use of this binding so we can implement
&gt; the test cases we&apos;ll need.

As you can guess, I&apos;m implementing HTMLInputElement::valueAsDate.  It will have code which is more complex than this patch. Is it ok to implement valueAsDate() and setValueAsDate() as just placeholder functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173246</commentid>
    <comment_count>5</comment_count>
      <attachid>45166</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-18 12:02:14 -0800</bug_when>
    <thetext>Created attachment 45166
Proposed patch (rev.2)

* Follow the Darin&apos;s comments.

Produced code will be:

JSValue jsHTMLInputElementValueAsDate(ExecState* exec, const Identifier&amp;, const PropertySlot&amp; slot)
{
    JSHTMLInputElement* castedThis = static_cast&lt;JSHTMLInputElement*&gt;(asObject(slot.slotBase()));
    UNUSED_PARAM(exec);
    HTMLInputElement* imp = static_cast&lt;HTMLInputElement*&gt;(castedThis-&gt;impl());
    return jsDateOrNull(exec, imp-&gt;valueAsDate());
}


void setJSHTMLInputElementValueAsDate(ExecState* exec, JSObject* thisObject, JSValue value)
{
    HTMLInputElement* imp = static_cast&lt;HTMLInputElement*&gt;(static_cast&lt;JSHTMLInputElement*&gt;(thisObject)-&gt;impl());
    ExceptionCode ec = 0;
    imp-&gt;setValueAsDate(valueToDateWithUndefinedOrNullCheck(exec, value), ec);
    setDOMException(exec, ec);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173252</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-18 12:07:13 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45166 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173254</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-18 12:14:11 -0800</bug_when>
    <thetext>Attachment 45166 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/135251</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173385</commentid>
    <comment_count>8</comment_count>
      <attachid>45166</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-18 16:19:14 -0800</bug_when>
    <thetext>Comment on attachment 45166
Proposed patch (rev.2)

&gt; +    return (isnan(value) || isinf(value)) ? jsNull() : new (exec) DateInstance(exec, value);

I just remembered that there&apos;s a function called isfinite that combines both these checks into one. I think you should use that instead.

Also, does this expression compile? I&apos;m surprised, happily, that it works given the two sides of the ?: expression have different types.

&gt; +    if (value.isUndefinedOrNull() || !value.isObject() || !asObject(value)-&gt;inherits(&amp;DateInstance::info))
&gt; +        return std::numeric_limits&lt;double&gt;::quiet_NaN();

No need for a separate check of isUndefinedOrNull. Neither of those are objects!

You can just call inherits directly on the value. The inherits function in JSValue combines the isObject, asObject, and inherits call all into one convenient package.

    if (!value.inherits(&amp;DateInstance::info))

&gt; +    // NaN if the value if null or undefined.
&gt; +    double valueToDateWithUndefinedOrNullCheck(JSC::ExecState*, JSC::JSValue);

I think it&apos;s strange to call out the undefined/null check in the name of the function, since you also check for any other kind of non-date object and handle them the same way you would undefined or null.

It would be more typical in JavaScript API to try to convert the type, for example make a date from the number if the argument is a number, and perhaps the same thing for a string. Are you sure you have the right expected behavior here for numeric values? Does the behavior you chose come from the HTML5 or WebIDL specification?

&gt; +    // FIXME: This is a temporal implementation to check Date binding.

Slight grammar mistake. This should be &quot;temporary&quot; instead of &quot;temporal&quot;.

I feel a little bad about landing something that includes known-bad code for valueAsDate, but I know it was my own suggestion, so lets do it that way.

&gt; +#if defined(LANGUAGE_JAVASCRIPT) &amp;&amp; LANGUAGE_JAVASCRIPT
&gt; +                 attribute Date            valueAsDate setter raises(DOMException);
&gt; +#endif

It&apos;s a little ugly to have to put LANGUAGE_JAVASCRIPT around any use of Date. It probably would be easy to make the Objective-C binding handle dates, for example.

review- because I think there are enough comments above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173514</commentid>
    <comment_count>9</comment_count>
      <attachid>45235</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-19 06:24:12 -0800</bug_when>
    <thetext>Created attachment 45235
Proposed patch (rev.3)

(In reply to comment #8)
&gt; (From update of attachment 45166 [details])
&gt; &gt; +    return (isnan(value) || isinf(value)) ? jsNull() : new (exec) DateInstance(exec, value);
&gt; 
&gt; I just remembered that there&apos;s a function called isfinite that combines both
&gt; these checks into one. I think you should use that instead.

Done.

&gt; Also, does this expression compile? I&apos;m surprised, happily, that it works given
&gt; the two sides of the ?: expression have different types.

Yes. I confirmed with Xcode and VS2005. But I changed it to a &quot;if&quot; statement just in case.

&gt;     if (!value.inherits(&amp;DateInstance::info))

Done.

&gt; &gt; +    // NaN if the value if null or undefined.
&gt; &gt; +    double valueToDateWithUndefinedOrNullCheck(JSC::ExecState*, JSC::JSValue);
&gt; 
&gt; I think it&apos;s strange to call out the undefined/null check in the name of the
&gt; function, since you also check for any other kind of non-date object and handle
&gt; them the same way you would undefined or null.

Renamed to valueToDate().


&gt; It would be more typical in JavaScript API to try to convert the type, for
&gt; example make a date from the number if the argument is a number, and perhaps
&gt; the same thing for a string. Are you sure you have the right expected behavior
&gt; here for numeric values? Does the behavior you chose come from the HTML5 or
&gt; WebIDL specification?

Neither HTML5 nor WebIDL mention it. I think accepting numbers is reasonable, and changed the code for it.

&gt; &gt; +    // FIXME: This is a temporal implementation to check Date binding.
&gt; 
&gt; Slight grammar mistake. This should be &quot;temporary&quot; instead of &quot;temporal&quot;.

Fixed.

&gt; &gt; +#if defined(LANGUAGE_JAVASCRIPT) &amp;&amp; LANGUAGE_JAVASCRIPT
&gt; &gt; +                 attribute Date            valueAsDate setter raises(DOMException);
&gt; &gt; +#endif
&gt; 
&gt; It&apos;s a little ugly to have to put LANGUAGE_JAVASCRIPT around any use of Date.
&gt; It probably would be easy to make the Objective-C binding handle dates, for
&gt; example.

Indeed.  I&apos;ll make patches for Objective-C and COM soon. I already have V8 support code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173515</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-19 06:27:56 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45235 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173531</commentid>
    <comment_count>11</comment_count>
      <attachid>45235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-19 10:10:21 -0800</bug_when>
    <thetext>Comment on attachment 45235
Proposed patch (rev.3)

&gt; +JSValue jsDateOrNull(ExecState* exec, double value)
&gt; +{
&gt; +    if (isfinite(value))
&gt; +        return new (exec) DateInstance(exec, value);
&gt; +    return jsNull();
&gt; +}

We normally prefer to do early exit for failures. So if (!isfinite) return jsNull. We assume that the success case code might later get longer so we want it to be non-indented.

&gt; +double valueToDate(ExecState* exec, JSValue value)
&gt; +{
&gt; +    if (value.isNumber())
&gt; +        return value.toNumber(exec);
&gt; +    if (!value.inherits(&amp;DateInstance::info))
&gt; +        return std::numeric_limits&lt;double&gt;::quiet_NaN();
&gt; +    return static_cast&lt;DateInstance*&gt;(value.toObject(exec))-&gt;internalNumber();
&gt; +}

I think we still need to think through how we want to handle various types. It&apos;s good that actual numbers will now work, but there are other things like number wrappers (made with expressions like &quot;new Number(1)&quot;) and strings. Generally we want to consider all JavaScript types when writing a conversion function like this.

If you have already gotten true from isNumber, you should not call toNumber. Instead you call uncheckedGetNumber. Or you can combine the two operations into one, using the getNumber function which returns a boolean to indicate whether the value is a number or not.

But all those are coding tips about how to write the tightest, most efficient, version of the code that handles only a true JavaScript number, and I am not sure that&apos;s the behavior we want here.

&gt; +    // NaN if the value is null, undefined, or non-Date object.
&gt; +    double valueToDate(JSC::ExecState*, JSC::JSValue);

The comment is too specific. I would say &quot;NaN if the value can&apos;t be converted to a date&quot;, without giving the specifics of how the date conversion works.

I really think we need a specification of how the conversion to date works for all types. And this unambiguous specification should be in whatever document defines the JavaScript binding. Maybe WebIDL or HTML5. That would include both how the conversion works, and also what behavior is expected when the value can&apos;t be converted (a specific exception raise, perhaps) I am not happy with all the current choices reflected in our valueToDate function.

r=me as is -- lets keep working on some of the issues I mentioned above, but they need not hold up this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173868</commentid>
    <comment_count>12</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-20 22:06:20 -0800</bug_when>
    <thetext>I&apos;ll commit manually with the following changes.

(In reply to comment #11)
&gt; (From update of attachment 45235 [details])
&gt; &gt; +JSValue jsDateOrNull(ExecState* exec, double value)
&gt; &gt; +{
&gt; &gt; +    if (isfinite(value))
&gt; &gt; +        return new (exec) DateInstance(exec, value);
&gt; &gt; +    return jsNull();
&gt; &gt; +}
&gt; 
&gt; We normally prefer to do early exit for failures. So if (!isfinite) return
&gt; jsNull. We assume that the success case code might later get longer so we want
&gt; it to be non-indented.

Fixed.

&gt; &gt; +    if (value.isNumber())
&gt; &gt; +        return value.toNumber(exec);
&gt; 
&gt; I think we still need to think through how we want to handle various types.
&gt; It&apos;s good that actual numbers will now work, but there are other things like
&gt; number wrappers (made with expressions like &quot;new Number(1)&quot;) and strings.
&gt; Generally we want to consider all JavaScript types when writing a conversion
&gt; function like this.
&gt; 
&gt; If you have already gotten true from isNumber, you should not call toNumber.
&gt; Instead you call uncheckedGetNumber. Or you can combine the two operations into
&gt; one, using the getNumber function which returns a boolean to indicate whether
&gt; the value is a number or not.

I changed it to uncheckedGetNumber().

&gt; &gt; +    // NaN if the value is null, undefined, or non-Date object.
&gt; &gt; +    double valueToDate(JSC::ExecState*, JSC::JSValue);
&gt; 
&gt; The comment is too specific. I would say &quot;NaN if the value can&apos;t be converted
&gt; to a date&quot;, without giving the specifics of how the date conversion works.

Fixed.

&gt; I really think we need a specification of how the conversion to date works for
&gt; all types. And this unambiguous specification should be in whatever document
&gt; defines the JavaScript binding. Maybe WebIDL or HTML5. That would include both
&gt; how the conversion works, and also what behavior is expected when the value
&gt; can&apos;t be converted (a specific exception raise, perhaps) I am not happy with
&gt; all the current choices reflected in our valueToDate function.

I made a bug for this issue: Bug#32809.

And bugs for other bindings:
V8: Bug#32699
ObjC: Bug#32810
COM: Bug#32811</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173870</commentid>
    <comment_count>13</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-20 22:23:16 -0800</bug_when>
    <thetext>Landed as r52434.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45128</attachid>
            <date>2009-12-17 23:07:10 -0800</date>
            <delta_ts>2009-12-18 12:02:14 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-jsc-date-1.patch</filename>
            <type>text/plain</type>
            <size>3160</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSA5YWM5OWY2OTRmZmE1ODhmN2VmYmUxMjA1Y2E0ZTE3MDU3MzM5YWE2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBGcmksIDE4IERlYyAyMDA5IDE1OjU5OjE4ICswOTAwClN1YmplY3Q6IFtQQVRDSF0ganNjLWRh
dGUtMQoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAyMCArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbSB8ICAgIDggKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0
aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY3ZjNjOWYuLjUzMGIyMzIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMDktMTItMTcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBK
YXZhU2NyaXB0Q29yZSBEYXRlIGJpbmRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMjY5OAorCisgICAgICAgIFRoaXMgaXMgbmVlZGVkIGZvciBI
VE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFzRGF0ZSBhbmQKKyAgICAgICAgSFRNTFRpbWVFbGVtZW50
Ojp2YWx1ZUFzRGF0ZS4KKworICAgICAgICBBIERhdGUgaW5zdGFuY2UgaXMgbWFwcGVkIHRvIGEg
ZG91YmxlIHZhbHVlIGluIEMrKy4KKyAgICAgICAgLSBJZiBhIG51bGwgb3IgdW5kZWZpbmVkIGlz
IHBhc3NlZCB0byBhIHNldHRlciBDKysgZnVuY3Rpb24sIGEgZG91YmxlCisgICAgICAgICAgTmFO
IHZhbHVlIGlzIHBhc3NlZAorICAgICAgICAtIElmIGEgZ2V0dGVyIEMrKyBmdW5jdGlvbiByZXR1
cm5zIE5hTiBvciBJbmZpbml0eSwgSmF2YVNjcmlwdAorICAgICAgICAgIHJlY2VpdmVzIG51bGwu
CisKKyAgICAgICAgTm8gdGVzdHMgYmVjYXVzZSB0aGlzIGJpbmRpbmcgaXMgbm90IHVzZWQgeWV0
LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisKIDIw
MDktMTItMTcgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQppbmRleCBjYTRiMDNjLi44MTkxYTJjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE4Nyw2ICsxODcsOSBAQCBzdWIgQWRk
SW5jbHVkZXNGb3JUeXBlCiAgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVz
ZSBzcGVjaWFsIGNhc2VzLgogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBl
KCR0eXBlKSBvciBBdm9pZEluY2x1c2lvbk9mVHlwZSgkdHlwZSkKICAgICAgICAgb3IgJHR5cGUg
ZXEgIkRPTVN0cmluZyIgb3IgJHR5cGUgZXEgIkRPTU9iamVjdCIgb3IgJHR5cGUgZXEgIkFycmF5
IikgeworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJEYXRlIikgeworICAgICAgICAkaW1wbEluY2x1
ZGVzeyI8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4ifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVk
ZXN7Ijx3dGYvTWF0aEV4dHJhcy5oPiJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSA9fiAvU1ZH
UGF0aFNlZy8pIHsKICAgICAgICAgJGpvaW5lZE5hbWUgPSAkdHlwZTsKICAgICAgICAgJGpvaW5l
ZE5hbWUgPX4gcy9BYnN8UmVsLy87CkBAIC0xODYxLDYgKzE4NjQsNyBAQCBzdWIgSlNWYWx1ZVRv
TmF0aXZlCiAgICAgcmV0dXJuICIkdmFsdWUudG9GbG9hdChleGVjKSIgaWYgJHR5cGUgZXEgImZs
b2F0IiBvciAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKICAgICByZXR1cm4gIiR2YWx1ZS50b0ludDMy
KGV4ZWMpIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgImxvbmciIG9y
ICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CiAKKyAgICByZXR1cm4gIiR2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpID8gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSA6
IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KCR2YWx1ZS50b09iamVjdChleGVjKSktPmludGVy
bmFsTnVtYmVyKCkiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0
PFJhbmdlOjpDb21wYXJlSG93PigkdmFsdWUudG9JbnQzMihleGVjKSkiIGlmICR0eXBlIGVxICJD
b21wYXJlSG93IjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PFNWR1BhaW50OjpTVkdQYWludFR5
cGU+KCR2YWx1ZS50b0ludDMyKGV4ZWMpKSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAK
QEAgLTE5ODUsNiArMTk4OSwxMCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgfSBlbHNpZiAo
JHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKICAgICAgICAgJGltcGxJbmNsdWRl
c3siJHR5cGUuaCJ9ID0gMTsKICAgICAgICAgcmV0dXJuICIkdmFsdWUtPmRlc2VyaWFsaXplKGV4
ZWMpIjsKKyAgICB9IGVsc2lmICgkdHlwZSBlcSAiRGF0ZSIpIHsKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+In0gPSAxOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyI8d3RmL01hdGhFeHRyYXMuaD4ifSA9IDE7CisgICAgICAgIHJldHVybiAiKGlzbmFuKCR2
YWx1ZSkgfHwgaXNpbmYoJHZhbHVlKSkgPyBqc051bGwoKSA6IG5ldyAoZXhlYykgRGF0ZUluc3Rh
bmNlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMgRGVmYXVsdCwgaW5j
bHVkZSBoZWFkZXIgd2l0aCBzYW1lIG5hbWUuCiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5
cGUuaCJ9ID0gMTsKLS0gCjEuNi4zLjMKCg==
</data>
<flag name="review"
          id="27106"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45166</attachid>
            <date>2009-12-18 12:02:14 -0800</date>
            <delta_ts>2009-12-19 06:24:12 -0800</delta_ts>
            <desc>Proposed patch (rev.2)</desc>
            <filename>0001-jsc-date-2.patch</filename>
            <type>text/plain</type>
            <size>12509</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSAwOTgzMzJlM2ZmNDQwZjM3MTVkOWRjYjg0ODE4YTYzYWU4NTRiMjM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBTYXQsIDE5IERlYyAyMDA5IDA0OjUyOjQ3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0ganNjLWRh
dGUtMgoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMTEgKysrKysrKwogLi4uL2Zhc3QvZm9ybXMvaW5wdXQtdmFsdWVhc2RhdGUtZXhw
ZWN0ZWQudHh0ICAgICAgfCAgIDIzICsrKysrKysrKysrKysrKwogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS5odG1sICAgICAgfCAgIDEzICsrKysrKysrCiAuLi4vZmFz
dC9mb3Jtcy9zY3JpcHQtdGVzdHMvaW5wdXQtdmFsdWVhc2RhdGUuanMgICB8ICAgMzAgKysrKysr
KysrKysrKysrKysrKysKIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAzMCArKysrKysrKysrKysrKysrKysrKwogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwICAgICAgICAgICAgICAgfCAgIDE0ICsrKysrKysrKwogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCAgICAgICAgICAgICAgICAgfCAgICA1ICsrKwog
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSAgICAgICAgfCAgICA2
ICsrKysKIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICAgICAg
IHwgICAxOCArKysrKysrKysrKysKIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggICAg
ICAgICAgICAgICAgICAgIHwgICAgMyArKwogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aWRsICAgICAgICAgICAgICAgICAgfCAgICAzICsrCiAxMSBmaWxlcyBjaGFuZ2VkLCAxNTYgaW5z
ZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtdmFsdWVhc2RhdGUuaHRtbAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2lucHV0
LXZhbHVlYXNkYXRlLmpzCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg5MWM2MjQuLjg4MTYzNjQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAwOS0xMi0xOCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSB0ZXN0IGZv
ciBEYXRlIGJpbmRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMjY5OAorCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW5wdXQtdmFsdWVhc2Rh
dGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvaW5wdXQt
dmFsdWVhc2RhdGUuanM6IEFkZGVkLgorCiAyMDA5LTEyLTE4ICBTaHUgQ2hhbmcgIDxDaGFuZy5T
aHVAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmFmZWFlCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwyMyBAQAorVGVzdCBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFzRGF0
ZSBiaW5kaW5nLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVW5zdXBwcG9ydGVk
IHR5cGU6CitQQVNTIGlucHV0LnZhbHVlQXNEYXRlIGlzIG51bGwKK1BBU1MgaW5wdXQudmFsdWVB
c0RhdGUgPSBkYXRlIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERP
TSBFeGNlcHRpb24gMTEuCisKK1N1cHBvcnRlZCB0eXBlOgorUEFTUyB2YWx1ZUFzRGF0ZSAhPSBu
dWxsIGlzIHRydWUKK1BBU1MgdHlwZW9mIHZhbHVlQXNEYXRlIGlzICJvYmplY3QiCitQQVNTIHR5
cGVvZiB2YWx1ZUFzRGF0ZS5nZXRUaW1lIGlzICJmdW5jdGlvbiIKK1BBU1MgaW5wdXQudmFsdWUg
aXMgIjE5NzAtMDEiCitQQVNTIGlucHV0LnZhbHVlQXNEYXRlLmdldFRpbWUoKSBpcyAwCitQQVNT
IGlucHV0LnZhbHVlQXNEYXRlID0gbnVsbCB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFMSURf
U1RBVEVfRVJSOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBpbnB1dC52YWx1ZUFzRGF0ZSA9IHVu
ZGVmaW5lZCB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFMSURfU1RBVEVfRVJSOiBET00gRXhj
ZXB0aW9uIDExLgorUEFTUyBpbnB1dC52YWx1ZUFzRGF0ZSA9IDAgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1MgaW5wdXQudmFs
dWVBc0RhdGUgPSBkb2N1bWVudCB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFMSURfU1RBVEVf
RVJSOiBET00gRXhjZXB0aW9uIDExLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5w
dXQtdmFsdWVhc2RhdGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtdmFsdWVh
c2RhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDE4ZWM2Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0
ZS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2lucHV0LXZhbHVlYXNkYXRlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvaW5wdXQtdmFsdWVhc2RhdGUuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9pbnB1dC12YWx1ZWFzZGF0ZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM0NGZjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvaW5wdXQtdmFsdWVhc2RhdGUu
anMKQEAgLTAsMCArMSwzMCBAQAorZGVzY3JpcHRpb24oJ1Rlc3QgSFRNTElucHV0RWxlbWVudDo6
dmFsdWVBc0RhdGUgYmluZGluZy4nKTsKKwordmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnaW5wdXQnKTsKK3ZhciBpbnZhbGlkU3RhdGVFcnJvciA9ICdFcnJvcjogSU5WQUxJRF9T
VEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEnOworCitkZWJ1ZygnVW5zdXBwcG9ydGVkIHR5cGU6
Jyk7CitpbnB1dC50eXBlID0gJ3RleHQnOworc2hvdWxkQmUoJ2lucHV0LnZhbHVlQXNEYXRlJywg
J251bGwnKTsKK3Nob3VsZFRocm93KCdpbnB1dC52YWx1ZUFzRGF0ZSA9IGRhdGUnLCAnaW52YWxp
ZFN0YXRlRXJyb3InKTsKKworZGVidWcoJycpOworZGVidWcoJ1N1cHBvcnRlZCB0eXBlOicpOwor
aW5wdXQudHlwZSA9ICdtb250aCc7CitpbnB1dC52YWx1ZSA9ICcyMDA5LTEyJzsKK3ZhciB2YWx1
ZUFzRGF0ZSA9IGlucHV0LnZhbHVlQXNEYXRlOworc2hvdWxkQmVUcnVlKCd2YWx1ZUFzRGF0ZSAh
PSBudWxsJyk7CitzaG91bGRCZSgndHlwZW9mIHZhbHVlQXNEYXRlJywgJyJvYmplY3QiJyk7Citz
aG91bGRCZSgndHlwZW9mIHZhbHVlQXNEYXRlLmdldFRpbWUnLCAnImZ1bmN0aW9uIicpOworCit2
YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CitkYXRlLnNldFRpbWUoMCk7CitpbnB1dC52YWx1ZUFzRGF0
ZSA9IGRhdGU7CitzaG91bGRCZSgnaW5wdXQudmFsdWUnLCAnIjE5NzAtMDEiJyk7CitzaG91bGRC
ZSgnaW5wdXQudmFsdWVBc0RhdGUuZ2V0VGltZSgpJywgJzAnKTsKK3Nob3VsZFRocm93KCdpbnB1
dC52YWx1ZUFzRGF0ZSA9IG51bGwnLCAnaW52YWxpZFN0YXRlRXJyb3InKTsKK3Nob3VsZFRocm93
KCdpbnB1dC52YWx1ZUFzRGF0ZSA9IHVuZGVmaW5lZCcsICdpbnZhbGlkU3RhdGVFcnJvcicpOwor
c2hvdWxkVGhyb3coJ2lucHV0LnZhbHVlQXNEYXRlID0gMCcsICdpbnZhbGlkU3RhdGVFcnJvcicp
Oworc2hvdWxkVGhyb3coJ2lucHV0LnZhbHVlQXNEYXRlID0gZG9jdW1lbnQnLCAnaW52YWxpZFN0
YXRlRXJyb3InKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM4Nzc3ODUuLmNi
YjhkYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDktMTItMTggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBKYXZhU2NyaXB0Q29yZSBEYXRlIGJpbmRpbmcuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjY5OAorCisgICAgICAg
IFRoaXMgaXMgbmVlZGVkIGZvciBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFzRGF0ZSBhbmQKKyAg
ICAgICAgSFRNTFRpbWVFbGVtZW50Ojp2YWx1ZUFzRGF0ZS4KKworICAgICAgICBBIERhdGUgaW5z
dGFuY2UgaXMgbWFwcGVkIHRvIGEgZG91YmxlIHZhbHVlIGluIEMrKy4KKyAgICAgICAgLSBJZiBu
dWxsIG9yIHVuZGVmaW5lZCBpcyBzZXQgdG8gYSBKYXZhU2NyaXB0IHByb3BlcnR5LCBDKysgc2V0
dGVyCisgICAgICAgICAgZnVuY3Rpb24gcmVjZWl2ZXMgTmFOLgorICAgICAgICAtIElmIGEgZ2V0
dGVyIEMrKyBmdW5jdGlvbiByZXR1cm5zIE5hTiBvciBpbmZpbml0eSwgYSBKYXZhU2NyaXB0Cisg
ICAgICAgICAgcHJvcGVydHkgcmV0dXJucyBudWxsLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZm9y
bXMvaW5wdXQtdmFsdWVhc2RhdGUuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzRGF0ZU9yTnVsbCk6IEltcGxlbWVudCB0
aGUgYWJvdmUuCisgICAgICAgIChXZWJDb3JlOjp2YWx1ZVRvRGF0ZVdpdGhVbmRlZmluZWRPck51
bGxDaGVjayk6IGRpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOiBE
ZWNsYXJlIHRoZW0uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06IFByb2R1Y2UganNEYXRlT3JOdWxsKCkgb3IKKyAgICAgICAgICB2YWx1ZVRvRGF0ZVdpdGhV
bmRlZmluZWRPck51bGxDaGVjaygpIGZvciBEYXRlIHR5cGUuCisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnZh
bHVlQXNEYXRlKTogVGVtcG9yYWwgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZSk6IGRpdHRvLgorICAgICAgICAqIGh0bWwv
SFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5pZGw6
IERlY2xhcmUgdmFsdWVBc0RhdGUuCisKIDIwMDktMTItMTggIEFkYW0gUm9iZW4gIDxhcm9iZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFY4IGJ1aWxkIGZpeApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCmluZGV4IDZmYWVhMjcuLjRkNjExNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAKQEAgLTQ5LDkgKzQ5LDExIEBACiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RFeGNl
cHRpb24uaCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRl
IDxydW50aW1lL1Byb3RvdHlwZUZ1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAt
NTk2LDYgKzU5OCwxOCBAQCBVU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgIHJldHVybiB2YWx1ZS50
b1N0cmluZyhleGVjKTsKIH0KIAorSlNWYWx1ZSBqc0RhdGVPck51bGwoRXhlY1N0YXRlKiBleGVj
LCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIChpc25hbih2YWx1ZSkgfHwgaXNpbmYodmFs
dWUpKSA/IGpzTnVsbCgpIDogbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgdmFsdWUpOwor
fQorCitkb3VibGUgdmFsdWVUb0RhdGVXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpIHx8ICF2YWx1ZS5pc09iamVjdCgpIHx8ICFhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZE
YXRlSW5zdGFuY2U6OmluZm8pKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNl
Kj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigpOworfQorCiB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uKQogewogICAg
IFVTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvU3RyaW5nKGV4ZWMpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKaW5kZXggNjkyODE1My4uNGY0YzU4MyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCkBAIC0zNTYsNiArMzU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBKU0M6OlVTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAg
SlNDOjpVU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9y
IHVuZGVmaW5lZAogCisgICAgLy8gUmV0dXJucyBhIERhdGUgaW5zdGFuY2UgZm9yIHRoZSBzcGVj
aWZpZWQgdmFsdWUsIG9yIG51bGwgaWYgdGhlIHZhbHVlIGlzIE5hTiBvciBpbmZpbml0eS4KKyAg
ICBKU0M6OkpTVmFsdWUganNEYXRlT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlKTsKKyAg
ICAvLyBOYU4gaWYgdGhlIHZhbHVlIGlmIG51bGwgb3IgdW5kZWZpbmVkLgorICAgIGRvdWJsZSB2
YWx1ZVRvRGF0ZVdpdGhVbmRlZmluZWRPck51bGxDaGVjayhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSk7CisKICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGEgc3RvcC1nYXAgdW50aWwgYWxs
IHRvSlMgY2FsbHMgY2FuIGJlIGNvbnZlcnRlZCB0byBwYXNzIGEgZ2xvYmFsT2JqZWN0CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBUKiBwdHIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQppbmRleCBjYTRiMDNjLi41ZmEzNDA3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE4Nyw2ICsxODcsOCBAQCBzdWIgQWRk
SW5jbHVkZXNGb3JUeXBlCiAgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVz
ZSBzcGVjaWFsIGNhc2VzLgogICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBl
KCR0eXBlKSBvciBBdm9pZEluY2x1c2lvbk9mVHlwZSgkdHlwZSkKICAgICAgICAgb3IgJHR5cGUg
ZXEgIkRPTVN0cmluZyIgb3IgJHR5cGUgZXEgIkRPTU9iamVjdCIgb3IgJHR5cGUgZXEgIkFycmF5
IikgeworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJEYXRlIikgeworICAgICAgICAkaW1wbEluY2x1
ZGVzeyI8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4ifSA9IDE7CiAgICAgfSBlbHNpZiAoJHR5cGUg
PX4gL1NWR1BhdGhTZWcvKSB7CiAgICAgICAgICRqb2luZWROYW1lID0gJHR5cGU7CiAgICAgICAg
ICRqb2luZWROYW1lID1+IHMvQWJzfFJlbC8vOwpAQCAtMTg2MSw2ICsxODYzLDcgQEAgc3ViIEpT
VmFsdWVUb05hdGl2ZQogICAgIHJldHVybiAiJHZhbHVlLnRvRmxvYXQoZXhlYykiIGlmICR0eXBl
IGVxICJmbG9hdCIgb3IgJHR5cGUgZXEgIlNWR051bWJlciI7CiAgICAgcmV0dXJuICIkdmFsdWUu
dG9JbnQzMihleGVjKSIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciIG9yICR0eXBlIGVxICJs
b25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOwogCisgICAgcmV0dXJuICJ2YWx1ZVRv
RGF0ZVdpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCAkdmFsdWUpIiBpZiAkdHlwZSBlcSAi
RGF0ZSI7CiAgICAgcmV0dXJuICJzdGF0aWNfY2FzdDxSYW5nZTo6Q29tcGFyZUhvdz4oJHZhbHVl
LnRvSW50MzIoZXhlYykpIiBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CiAgICAgcmV0dXJuICJz
dGF0aWNfY2FzdDxTVkdQYWludDo6U1ZHUGFpbnRUeXBlPigkdmFsdWUudG9JbnQzMihleGVjKSki
IGlmICR0eXBlIGVxICJTVkdQYWludFR5cGUiOwogCkBAIC0xOTg1LDYgKzE5ODgsOSBAQCBzdWIg
TmF0aXZlVG9KU1ZhbHVlCiAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siJHR5cGUuaCJ9ID0gMTsKICAgICAgICAg
cmV0dXJuICIkdmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMpIjsKKyAgICB9IGVsc2lmICgkdHlwZSBl
cSAiRGF0ZSIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRGF0ZUluc3RhbmNl
Lmg+In0gPSAxOworICAgICAgICByZXR1cm4gImpzRGF0ZU9yTnVsbChleGVjLCAkdmFsdWUpIjsK
ICAgICB9IGVsc2UgewogICAgICAgICAjIERlZmF1bHQsIGluY2x1ZGUgaGVhZGVyIHdpdGggc2Ft
ZSBuYW1lLgogICAgICAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgifSA9IDE7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKaW5kZXggZmZhNGFhYy4uNTRhMjM2MCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcApAQCAtMTM3NCw2ICsxMzc0LDI0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpCiAg
ICAgdXBkYXRlVmFsaWRpdHkoKTsKIH0KIAorZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVl
QXNEYXRlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFsIGltcGxl
bWVudGF0aW9uIHRvIGNoZWNrIERhdGUgYmluZGluZy4KKyAgICBpZiAoaW5wdXRUeXBlKCkgPT0g
TU9OVEgpCisgICAgICAgIHJldHVybiAwLjA7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWVBc0RhdGUoZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFsIGltcGxlbWVudGF0aW9uIHRvIGNoZWNrIERhdGUgYmlu
ZGluZy4KKyAgICBpZiAoIWlzbmFuKHZhbHVlKSAmJiAhaXNpbmYodmFsdWUpICYmIGlucHV0VHlw
ZSgpID09IE1PTlRIKSB7CisgICAgICAgIHNldFZhbHVlKFN0cmluZygiMTk3MC0wMSIpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworfQorCiBT
dHJpbmcgSFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKS5zdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCmluZGV4IDUzYmU1Y2MuLjJiN2IyOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApA
QCAtMTQ0LDYgKzE0NCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmKTsKIAorICAgIGRvdWJsZSB2YWx1ZUFz
RGF0ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VmFsdWVBc0RhdGUoZG91YmxlLCBFeGNlcHRpb25D
b2RlJik7CisKICAgICB2aXJ0dWFsIFN0cmluZyBwbGFjZWhvbGRlcigpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBzZXRQbGFjZWhvbGRlcihjb25zdCBTdHJpbmcmKTsKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaWRsCmluZGV4IDJhYzY2NzQuLmUxY2I3MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5pZGwKQEAgLTY3LDYgKzY3LDkgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBKU0NDdXN0b21HZXR0ZXJdIERP
TVN0cmluZyB0eXBlOyAvLyByZWFkb25seSBkcm9wcGVkIGFzIHBhcnQgb2YgRE9NIGxldmVsIDIK
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10gRE9N
U3RyaW5nIHVzZU1hcDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFRv
TnVsbFN0cmluZ10gRE9NU3RyaW5nIHZhbHVlOworI2lmIGRlZmluZWQoTEFOR1VBR0VfSkFWQVND
UklQVCkgJiYgTEFOR1VBR0VfSkFWQVNDUklQVAorICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
RGF0ZSAgICAgICAgICAgIHZhbHVlQXNEYXRlIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyNlbmRpZgogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFMSVNUKSAmJiBFTkFCTEVfREFUQUxJU1QK
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxPcHRpb25FbGVtZW50IHNlbGVjdGVkT3B0
aW9uOwogI2VuZGlmCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="27145"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="27146"
          type_id="3"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45235</attachid>
            <date>2009-12-19 06:24:12 -0800</date>
            <delta_ts>2009-12-19 10:10:20 -0800</delta_ts>
            <desc>Proposed patch (rev.3)</desc>
            <filename>0001-jsc-date-3.patch</filename>
            <type>text/plain</type>
            <size>12704</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSA0MTAxOTVjMjQ3NGJlNzk1NjYzNDI3ZTM0NzBmNjhjZjFiZGUzNzdjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBTYXQsIDE5IERlYyAyMDA5IDA0OjUyOjQ3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0ganNjLWRh
dGUtMwoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMTEgKysrKysrCiAuLi4vZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS1leHBl
Y3RlZC50eHQgICAgICB8ICAgMjcgKysrKysrKysrKysrKysrCiBMYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2lucHV0LXZhbHVlYXNkYXRlLmh0bWwgICAgICB8ICAgMTMgKysrKysrKwogLi4uL2Zhc3Qv
Zm9ybXMvc2NyaXB0LXRlc3RzL2lucHV0LXZhbHVlYXNkYXRlLmpzICAgfCAgIDM1ICsrKysrKysr
KysrKysrKysrKysrCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcCAgICAgICAgICAgICAgIHwgICAxOCArKysrKysrKysrCiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oICAgICAgICAgICAgICAgICB8ICAgIDUgKysrCiBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtICAgICAgICB8ICAgIDYgKysr
CiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICB8ICAg
MTggKysrKysrKysrKwogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCAgICAgICAgICAg
ICAgICAgICAgfCAgICAzICsrCiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwgICAg
ICAgICAgICAgICAgICB8ICAgIDQgKysKIDExIGZpbGVzIGNoYW5nZWQsIDE3MCBpbnNlcnRpb25z
KCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvaW5wdXQtdmFsdWVhc2RhdGUtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS5odG1sCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvaW5wdXQtdmFsdWVh
c2RhdGUuanMKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggODkxYzYyNC4uODgxNjM2NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDA5LTEyLTE4ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIHRlc3QgZm9yIERhdGUg
YmluZGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMyNjk4CisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC12YWx1ZWFzZGF0ZS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9pbnB1dC12YWx1ZWFz
ZGF0ZS5qczogQWRkZWQuCisKIDIwMDktMTItMTggIFNodSBDaGFuZyAgPENoYW5nLlNodUBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW5wdXQtdmFsdWVhc2RhdGUtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTRiMTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDI3IEBACitUZXN0IEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNEYXRlIGJpbmRp
bmcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitVbnN1cHBwb3J0ZWQgdHlwZToK
K1BBU1MgaW5wdXQudmFsdWVBc0RhdGUgaXMgbnVsbAorUEFTUyBpbnB1dC52YWx1ZUFzRGF0ZSA9
IGRhdGUgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMS4KKworU3VwcG9ydGVkIHR5cGU6CitQQVNTIHZhbHVlQXNEYXRlICE9IG51bGwgaXMg
dHJ1ZQorUEFTUyB0eXBlb2YgdmFsdWVBc0RhdGUgaXMgIm9iamVjdCIKK1BBU1MgdmFsdWVBc0Rh
dGUuY29uc3RydWN0b3IubmFtZSBpcyAiRGF0ZSIKK1NldHMgYW4gRXBvY2ggRGF0ZToKK1BBU1Mg
aW5wdXQudmFsdWUgaXMgIjE5NzAtMDEiCitQQVNTIGlucHV0LnZhbHVlQXNEYXRlLmdldFRpbWUo
KSBpcyAwCitTZXRzIGEgbnVtYmVyIDA6CitQQVNTIGlucHV0LnZhbHVlIGlzICIxOTcwLTAxIgor
UEFTUyBpbnB1dC52YWx1ZUFzRGF0ZS5nZXRUaW1lKCkgaXMgMAorU2V0cyBvdGhlciB0eXBlczoK
K1BBU1MgaW5wdXQudmFsdWVBc0RhdGUgPSBudWxsIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5W
QUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTIGlucHV0LnZhbHVlQXNEYXRl
ID0gdW5kZWZpbmVkIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERP
TSBFeGNlcHRpb24gMTEuCitQQVNTIGlucHV0LnZhbHVlQXNEYXRlID0gZG9jdW1lbnQgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2lucHV0LXZhbHVlYXNkYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxOGVjNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvaW5wdXQtdmFsdWVhc2RhdGUuaHRtbApAQCAtMCwwICsxLDEzIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9pbnB1dC12YWx1ZWFzZGF0ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRl
c3RzL2lucHV0LXZhbHVlYXNkYXRlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQt
dGVzdHMvaW5wdXQtdmFsdWVhc2RhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzc5Njc5YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
c2NyaXB0LXRlc3RzL2lucHV0LXZhbHVlYXNkYXRlLmpzCkBAIC0wLDAgKzEsMzUgQEAKK2Rlc2Ny
aXB0aW9uKCdUZXN0IEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNEYXRlIGJpbmRpbmcuJyk7CisK
K3ZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Cit2YXIgaW52YWxp
ZFN0YXRlRXJyb3IgPSAnRXJyb3I6IElOVkFMSURfU1RBVEVfRVJSOiBET00gRXhjZXB0aW9uIDEx
JzsKKworZGVidWcoJ1Vuc3VwcHBvcnRlZCB0eXBlOicpOworaW5wdXQudHlwZSA9ICd0ZXh0JzsK
K3Nob3VsZEJlKCdpbnB1dC52YWx1ZUFzRGF0ZScsICdudWxsJyk7CitzaG91bGRUaHJvdygnaW5w
dXQudmFsdWVBc0RhdGUgPSBkYXRlJywgJ2ludmFsaWRTdGF0ZUVycm9yJyk7CisKK2RlYnVnKCcn
KTsKK2RlYnVnKCdTdXBwb3J0ZWQgdHlwZTonKTsKK2lucHV0LnR5cGUgPSAnbW9udGgnOworaW5w
dXQudmFsdWUgPSAnMjAwOS0xMic7Cit2YXIgdmFsdWVBc0RhdGUgPSBpbnB1dC52YWx1ZUFzRGF0
ZTsKK3Nob3VsZEJlVHJ1ZSgndmFsdWVBc0RhdGUgIT0gbnVsbCcpOworc2hvdWxkQmUoJ3R5cGVv
ZiB2YWx1ZUFzRGF0ZScsICcib2JqZWN0IicpOworc2hvdWxkQmUoJ3ZhbHVlQXNEYXRlLmNvbnN0
cnVjdG9yLm5hbWUnLCAnIkRhdGUiJyk7CisKK2RlYnVnKCdTZXRzIGFuIEVwb2NoIERhdGU6Jyk7
Cit2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CitkYXRlLnNldFRpbWUoMCk7CitpbnB1dC52YWx1ZUFz
RGF0ZSA9IGRhdGU7CitzaG91bGRCZSgnaW5wdXQudmFsdWUnLCAnIjE5NzAtMDEiJyk7CitzaG91
bGRCZSgnaW5wdXQudmFsdWVBc0RhdGUuZ2V0VGltZSgpJywgJzAnKTsKK2RlYnVnKCdTZXRzIGEg
bnVtYmVyIDA6Jyk7CitpbnB1dC52YWx1ZUFzRGF0ZSA9IDA7CitzaG91bGRCZSgnaW5wdXQudmFs
dWUnLCAnIjE5NzAtMDEiJyk7CitzaG91bGRCZSgnaW5wdXQudmFsdWVBc0RhdGUuZ2V0VGltZSgp
JywgJzAnKTsKK2RlYnVnKCdTZXRzIG90aGVyIHR5cGVzOicpOworc2hvdWxkVGhyb3coJ2lucHV0
LnZhbHVlQXNEYXRlID0gbnVsbCcsICdpbnZhbGlkU3RhdGVFcnJvcicpOworc2hvdWxkVGhyb3co
J2lucHV0LnZhbHVlQXNEYXRlID0gdW5kZWZpbmVkJywgJ2ludmFsaWRTdGF0ZUVycm9yJyk7Citz
aG91bGRUaHJvdygnaW5wdXQudmFsdWVBc0RhdGUgPSBkb2N1bWVudCcsICdpbnZhbGlkU3RhdGVF
cnJvcicpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzg3Nzc4NS4uZjQ5ZDg3
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMyBAQAorMjAwOS0xMi0xOCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIEphdmFTY3JpcHRDb3JlIERhdGUgYmluZGluZy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNjk4CisKKyAgICAgICAgVGhp
cyBpcyBuZWVkZWQgZm9yIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNEYXRlIGFuZAorICAgICAg
ICBIVE1MVGltZUVsZW1lbnQ6OnZhbHVlQXNEYXRlLgorCisgICAgICAgIEEgRGF0ZSBpbnN0YW5j
ZSBpcyBtYXBwZWQgdG8gYSBkb3VibGUgdmFsdWUgaW4gQysrLgorICAgICAgICAtIElmIG51bGwg
b3IgdW5kZWZpbmVkIGlzIHNldCB0byBhIEphdmFTY3JpcHQgcHJvcGVydHksIEMrKyBzZXR0ZXIK
KyAgICAgICAgICBmdW5jdGlvbiByZWNlaXZlcyBOYU4uCisgICAgICAgIC0gSWYgYSBnZXR0ZXIg
QysrIGZ1bmN0aW9uIHJldHVybnMgTmFOIG9yIGluZmluaXR5LCBhIEphdmFTY3JpcHQKKyAgICAg
ICAgICBwcm9wZXJ0eSByZXR1cm5zIG51bGwuCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy9p
bnB1dC12YWx1ZWFzZGF0ZS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNEYXRlT3JOdWxsKTogSW1wbGVtZW50IHRoZSBh
Ym92ZS4KKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9EYXRlKTogZGl0dG8uCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6IERlY2xhcmUgdGhlbS4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogUHJvZHVjZSBqc0RhdGVPck51bGwoKSBv
cgorICAgICAgICAgIHZhbHVlVG9EYXRlKCkgZm9yIERhdGUgdHlwZS4KKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6dmFsdWVBc0RhdGUpOiBUZW1wb3JhbCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKTogZGl0dG8uCisgICAgICAgICog
aHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmlkbDogRGVjbGFyZSB2YWx1ZUFzRGF0ZS4KKwogMjAwOS0xMi0xOCAgQWRhbSBSb2JlbiAgPGFy
b2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVjggYnVpbGQgZml4CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAKaW5kZXggNmZhZWEyNy4uYmE4MTA5MyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcApAQCAtNDksOSArNDksMTEgQEAKICNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVz
dEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShTVkcp
CkBAIC01OTYsNiArNTk4LDIyIEBAIFVTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgcmV0dXJuIHZh
bHVlLnRvU3RyaW5nKGV4ZWMpOwogfQogCitKU1ZhbHVlIGpzRGF0ZU9yTnVsbChFeGVjU3RhdGUq
IGV4ZWMsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBpZiAoaXNmaW5pdGUodmFsdWUpKQorICAgICAg
ICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgdmFsdWUpOworICAgIHJldHVy
biBqc051bGwoKTsKK30KKworZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIGlmICghdmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6aW5mbykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46
OnF1aWV0X05hTigpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1
ZS50b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Cit9CisKIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb24pCiB7CiAgICAgVVN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9TdHJpbmcoZXhlYyk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaAppbmRleCA2OTI4MTUzLi43OGZmMzE3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKQEAgLTM1Niw2ICszNTYsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IEpTQzo6VVN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aE51bGxDaGVjayhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSk7IC8vIG51bGwgaWYgdGhlIHZhbHVlIGlzIG51bGwKICAgICBKU0M6OlVT
dHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSk7IC8vIG51bGwgaWYgdGhlIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZp
bmVkCiAKKyAgICAvLyBSZXR1cm5zIGEgRGF0ZSBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCB2
YWx1ZSwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgaXMgTmFOIG9yIGluZmluaXR5LgorICAgIEpTQzo6
SlNWYWx1ZSBqc0RhdGVPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUpOworICAgIC8vIE5h
TiBpZiB0aGUgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkLCBvciBub24tRGF0ZSBvYmplY3QuCisg
ICAgZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKwog
ICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgYSBzdG9wLWdhcCB1bnRpbCBhbGwgdG9KUyBjYWxscyBj
YW4gYmUgY29udmVydGVkIHRvIHBhc3MgYSBnbG9iYWxPYmplY3QKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIFQqIHB0cikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CmluZGV4IGNhNGIwM2MuLmY3NjJiYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTg3LDYgKzE4Nyw4IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5
cGUKICAgICAjIHJlb3JnYW5pemF0aW9uLCB3ZSB3b24ndCBuZWVkIHRoZXNlIHNwZWNpYWwgY2Fz
ZXMuCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yIEF2
b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKQogICAgICAgICBvciAkdHlwZSBlcSAiRE9NU3RyaW5n
IiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiQXJyYXkiKSB7CisgICAgfSBl
bHNpZiAoJHR5cGUgZXEgIkRhdGUiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1l
L0RhdGVJbnN0YW5jZS5oPiJ9ID0gMTsKICAgICB9IGVsc2lmICgkdHlwZSA9fiAvU1ZHUGF0aFNl
Zy8pIHsKICAgICAgICAgJGpvaW5lZE5hbWUgPSAkdHlwZTsKICAgICAgICAgJGpvaW5lZE5hbWUg
PX4gcy9BYnN8UmVsLy87CkBAIC0xODYxLDYgKzE4NjMsNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZl
CiAgICAgcmV0dXJuICIkdmFsdWUudG9GbG9hdChleGVjKSIgaWYgJHR5cGUgZXEgImZsb2F0IiBv
ciAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKICAgICByZXR1cm4gIiR2YWx1ZS50b0ludDMyKGV4ZWMp
IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5cGUgZXEgImxvbmciIG9yICR0eXBl
IGVxICJ1bnNpZ25lZCBzaG9ydCI7CiAKKyAgICByZXR1cm4gInZhbHVlVG9EYXRlKGV4ZWMsICR2
YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PFJhbmdl
OjpDb21wYXJlSG93PigkdmFsdWUudG9JbnQzMihleGVjKSkiIGlmICR0eXBlIGVxICJDb21wYXJl
SG93IjsKICAgICByZXR1cm4gInN0YXRpY19jYXN0PFNWR1BhaW50OjpTVkdQYWludFR5cGU+KCR2
YWx1ZS50b0ludDMyKGV4ZWMpKSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAKQEAgLTE5
ODUsNiArMTk4OCw5IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBl
cSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyIkdHlw
ZS5oIn0gPSAxOwogICAgICAgICByZXR1cm4gIiR2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYykiOwor
ICAgIH0gZWxzaWYgKCR0eXBlIGVxICJEYXRlIikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyI8
cnVudGltZS9EYXRlSW5zdGFuY2UuaD4ifSA9IDE7CisgICAgICAgIHJldHVybiAianNEYXRlT3JO
dWxsKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMgRGVmYXVsdCwgaW5j
bHVkZSBoZWFkZXIgd2l0aCBzYW1lIG5hbWUuCiAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5
cGUuaCJ9ID0gMTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBmZmE0YWFjLi5iM2I5
YjljIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMzc0LDYgKzEzNzQsMjQgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29s
IHNlbmRDaGFuZ2VFdmVudCkKICAgICB1cGRhdGVWYWxpZGl0eSgpOwogfQogCitkb3VibGUgSFRN
TElucHV0RWxlbWVudDo6dmFsdWVBc0RhdGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IGltcGxlbWVudGF0aW9uIHRvIGNoZWNrIERhdGUgYmluZGluZy4KKyAg
ICBpZiAoaW5wdXRUeXBlKCkgPT0gTU9OVEgpCisgICAgICAgIHJldHVybiAwLjA7CisgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Cit9CisKK3ZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVBc0RhdGUoZG91YmxlIHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBpbXBsZW1lbnRh
dGlvbiB0byBjaGVjayBEYXRlIGJpbmRpbmcuCisgICAgaWYgKCFpc25hbih2YWx1ZSkgJiYgIWlz
aW5mKHZhbHVlKSAmJiBpbnB1dFR5cGUoKSA9PSBNT05USCkgeworICAgICAgICBzZXRWYWx1ZShT
dHJpbmcoIjE5NzAtMDEiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKK30KKwogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnBsYWNlaG9sZGVy
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cikuc3Ry
aW5nKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCA1M2JlNWNjLi4yYjdiMjhiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTE0NCw2ICsxNDQsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0g
ZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgU3RyaW5nJik7
CiAKKyAgICBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlQXNE
YXRlKGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYpOworCiAgICAgdmlydHVhbCBTdHJpbmcgcGxhY2Vo
b2xkZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGxhY2Vob2xkZXIoY29uc3QgU3Ry
aW5nJik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbCBi
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmlkbAppbmRleCAyYWM2Njc0Li43OGE0MDNh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5pZGwKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaWRsCkBAIC02Nyw2ICs2NywxMCBAQCBtb2R1bGUg
aHRtbCB7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxUb051bGxTdHJp
bmcsIEpTQ0N1c3RvbUdldHRlcl0gRE9NU3RyaW5nIHR5cGU7IC8vIHJlYWRvbmx5IGRyb3BwZWQg
YXMgcGFydCBvZiBET00gbGV2ZWwgMgogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdXNlTWFwOwogICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdmFsdWU7CisjaWYg
ZGVmaW5lZChMQU5HVUFHRV9KQVZBU0NSSVBUKSAmJiBMQU5HVUFHRV9KQVZBU0NSSVBUICYmICEo
ZGVmaW5lZChWOF9CSU5ESU5HKSAmJiBWOF9CSU5ESU5HKQorICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogQWRkIERhdGUgc3VwcG9ydCBmb3IgVjgsIE9iamVjdGl2ZS1DLCBhbmQgQ09NLgorICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgRGF0ZSAgICAgICAgICAgIHZhbHVlQXNEYXRlIHNldHRl
ciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFM
SVNUKSAmJiBFTkFCTEVfREFUQUxJU1QKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxP
cHRpb25FbGVtZW50IHNlbGVjdGVkT3B0aW9uOwogI2VuZGlmCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="27226"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="27227"
          type_id="3"
          status="-"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>