<?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>98383</bug_id>
          
          <creation_ts>2012-10-04 01:05:06 -0700</creation_ts>
          <short_desc>Improve code of LocaleMac.mm</short_desc>
          <delta_ts>2012-10-15 03:00:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98116</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>734476</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-04 01:05:06 -0700</bug_when>
    <thetext>Darin suggested some improvements in https://bugs.webkit.org/show_bug.cgi?id=98116#c5 .

- Use isNull() instead of isEmpty()
- create*Formatter should return RetainPtr
- Explicit String conversion is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734489</commentid>
    <comment_count>1</comment_count>
      <attachid>167047</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-04 01:23:30 -0700</bug_when>
    <thetext>Created attachment 167047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737159</commentid>
    <comment_count>2</comment_count>
      <attachid>167047</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-08 16:05:23 -0700</bug_when>
    <thetext>Comment on attachment 167047
Patch

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

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:115
&gt; +RetainPtr&lt;NSDateFormatter&gt; LocaleMac::createShortDateFormatter()

Is returning RetainPtr the modern pattern?  That will cause an extra ref-churn as the temporary RetainPtr is created/destroyed, but can be OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737347</commentid>
    <comment_count>3</comment_count>
      <attachid>167047</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-08 19:09:56 -0700</bug_when>
    <thetext>Comment on attachment 167047
Patch

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

&gt;&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:115
&gt;&gt; +RetainPtr&lt;NSDateFormatter&gt; LocaleMac::createShortDateFormatter()
&gt; 
&gt; Is returning RetainPtr the modern pattern?  That will cause an extra ref-churn as the temporary RetainPtr is created/destroyed, but can be OK.

Darin wrote we should do so in https://bugs.webkit.org/show_bug.cgi?id=98116#c5

&gt; And later createShortDateFormatter should be changed to return a RetainPtr instead of a raw pointer, which would eliminate the need for the adoptNS call here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737873</commentid>
    <comment_count>4</comment_count>
      <attachid>167047</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-09 09:38:53 -0700</bug_when>
    <thetext>Comment on attachment 167047
Patch

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

Changes seem fine. Additional improvement is possible, though. And I spotted another leak in this code.

&gt; Source/WebCore/platform/text/mac/LocaleMac.h:72
&gt; +    RetainPtr&lt;NSDateFormatter&gt; createShortDateFormatter();

Now that these functions return RetainPtr, they don’t need create in their names; the word create was there because of the Core Foundation “create/copy” function naming rule. I think the function could now be named just shortDateFormatter because it’s not creating a new one each time, so the create in the name is actively misleading.

&gt; Source/WebCore/platform/text/mac/LocaleMac.h:83
&gt; +    RetainPtr&lt;NSDateFormatter&gt; createTimeFormatter();
&gt; +    RetainPtr&lt;NSDateFormatter&gt; createShortTimeFormatter();

Same comment as above.

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:73
&gt; +static RetainPtr&lt;NSDateFormatter&gt; createDateTimeFormatter(NSLocale* locale, NSDateFormatterStyle dateStyle, NSDateFormatterStyle timeStyle)

In this case, it’s OK to keep create in the name since the function does create a new one each time.

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:80
&gt;      [formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];

This line leaks an NSCalendar object every time it’s called.

&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:81
&gt; +    return RetainPtr&lt;NSDateFormatter&gt;(AdoptNS, formatter);

Better to just call the adoptNS function rather than using the constructor form.

    return adoptNS(formatter);

Unless you tried that and had some kind of problem with it. We should remove/deprecate the more complicated and wordy constructor form.

&gt;&gt;&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:115
&gt;&gt;&gt; +RetainPtr&lt;NSDateFormatter&gt; LocaleMac::createShortDateFormatter()
&gt;&gt; 
&gt;&gt; Is returning RetainPtr the modern pattern?  That will cause an extra ref-churn as the temporary RetainPtr is created/destroyed, but can be OK.
&gt; 
&gt; Darin wrote we should do so in https://bugs.webkit.org/show_bug.cgi?id=98116#c5

It’s better to return RetainPtr because otherwise we were often getting object lifetime wrong. If we see problems with churn, the best fix is to create PassRetainPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741818</commentid>
    <comment_count>5</comment_count>
      <attachid>168641</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-15 00:40:44 -0700</bug_when>
    <thetext>Created attachment 168641
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741824</commentid>
    <comment_count>6</comment_count>
      <attachid>167047</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-15 00:43:02 -0700</bug_when>
    <thetext>Comment on attachment 167047
Patch

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

&gt;&gt; Source/WebCore/platform/text/mac/LocaleMac.h:72
&gt;&gt; +    RetainPtr&lt;NSDateFormatter&gt; createShortDateFormatter();
&gt; 
&gt; Now that these functions return RetainPtr, they don’t need create in their names; the word create was there because of the Core Foundation “create/copy” function naming rule. I think the function could now be named just shortDateFormatter because it’s not creating a new one each time, so the create in the name is actively misleading.

ok, I renamed it to shortDateFormatter().

&gt;&gt; Source/WebCore/platform/text/mac/LocaleMac.h:83
&gt;&gt; +    RetainPtr&lt;NSDateFormatter&gt; createShortTimeFormatter();
&gt; 
&gt; Same comment as above.

Ditto.

&gt;&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:80
&gt;&gt;      [formatter setCalendar:[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];
&gt; 
&gt; This line leaks an NSCalendar object every time it’s called.

I added RetainPtr&lt;NSCalendar&gt; data member to LocaleMac.

&gt;&gt; Source/WebCore/platform/text/mac/LocaleMac.mm:81
&gt;&gt; +    return RetainPtr&lt;NSDateFormatter&gt;(AdoptNS, formatter);
&gt; 
&gt; Better to just call the adoptNS function rather than using the constructor form.
&gt; 
&gt;     return adoptNS(formatter);
&gt; 
&gt; Unless you tried that and had some kind of problem with it. We should remove/deprecate the more complicated and wordy constructor form.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741893</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-10-15 03:00:45 -0700</bug_when>
    <thetext>Committed r131293: &lt;http://trac.webkit.org/changeset/131293&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167047</attachid>
            <date>2012-10-04 01:23:30 -0700</date>
            <delta_ts>2012-10-15 00:43:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98383-20121004172240.patch</filename>
            <type>text/plain</type>
            <size>10937</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMzY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5ODlmMTA5NjBiYzM1
OWQyMDZlMjcwMjJkMWVlZjE2ODRiODgyMC4uYjgzNTk5ZWE1N2EwNjE3MTBkN2Y1YjdjYTMwOTE0
M2M4MzUyOGU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEyLTEwLTA1ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXByb3ZlIGNvZGUgb2Yg
TG9jYWxlTWFjLm1tCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODM4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIC0gVXNlIGlzTnVsbCBpbnN0ZWFkIG9mIGlzRW1wdHkgYmVjYXVzZSBpc051bGwgaXMgbW9y
ZSBlZmZpY2llbnQuCisgICAgICAgIC0gY3JlYXRlKkZvcm1hdHRlciBzaG91bGQgcmV0dXJuIFJl
dGFpblB0ciB0byBhdm9pZCB0byByZXRhaW4gaW4gZWFjaCBvZiBjYWxsc2l0ZXMuCisgICAgICAg
IC0gRXhwbGljaXQgU3RyaW5nIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKworICAgICAgICBO
byBuZXcgdGVzdHMuIFRoaXMgZG9lc24ndCBjaGFuZ2UgYW55IGJlaGF2aW9yLgorCisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmg6CisgICAgICAgIChMb2NhbGVNYWMpOiBD
aGFuZ2UgdGhlIHJldHVybiB0eXBlcyBvZiBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIsCisgICAg
ICAgIGNyZWF0ZVRpbWVGb3JtYXR0ZXIsIGFuZCBjcmVhdGVTaG9ydFRpbWVGb3JtYXR0ZXIgZnJv
bSBOU0RhdGVGb3JtYXR0ZXIqCisgICAgICAgIHRvIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+
LgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKToKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1
cm4gdHlwZSBmcm9tIE5TRGF0ZUZvcm1hdHRlciogdG8gUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRl
cj4uCisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRl
cik6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpwYXJzZURhdGVUaW1lKTog
Rm9sbG93IHRoZSByZXR1cm4gdHlwZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVN
YWM6OmZvcm1hdERhdGVUaW1lKTogZGl0dG8uIEFsc28sIHJlbW92ZSBleHBsaWNpdCBTdHJpbmcg
Y29uc3RydWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpkYXRlRm9ybWF0VGV4
dCk6IGRpdHRvLiBBbHNvLCB1c2UgaXNOdWxsLgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFj
Ojptb250aExhYmVscyk6IEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxlTWFjOjp3ZWVrRGF5U2hvcnRMYWJlbHMpOiBGb2xsb3cgdGhlIHJldHVy
biB0eXBlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6Y3JlYXRlVGltZUZv
cm1hdHRlcik6CisgICAgICAgIENoYW5nZSB0aGUgcmV0dXJuIHR5cGUgZnJvbSBOU0RhdGVGb3Jt
YXR0ZXIqIHRvIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+LgorICAgICAgICAoV2ViQ29yZTo6
TG9jYWxlTWFjOjpjcmVhdGVTaG9ydFRpbWVGb3JtYXR0ZXIpOiBkaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkxvY2FsZU1hYzo6ZGF0ZUZvcm1hdCk6CisgICAgICAgIFVzZSBpc051bGwuIFJlbW92
ZSBleHBsaWNpdCBTdHJpbmcgY29uc3RydWN0aW9uLiBGb2xsb3cgdGhlIHJldHVybiB0eXBlIGNo
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6dGltZUZvcm1hdCk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpzaG9ydFRpbWVGb3JtYXQpOiBkaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6dGltZUFNUE1MYWJlbHMpOgorICAgICAgICBSZW1v
dmUgZXhwbGljaXQgU3RyaW5nIGNvbnN0cnVjdGlvbi4gRm9sbG93IHRoZSByZXR1cm4gdHlwZSBj
aGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmluaXRpYWxpemVMb2NhbGl6ZXJE
YXRhKToKKyAgICAgICAgUmVtb3ZlIGV4cGxpY2l0IFN0cmluZyBjb25zdHJ1Y3Rpb24uCisKIDIw
MTItMTAtMDQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERh
dGVUaW1lWWVhckZpZWxkRWxlbWVudCBzaG91bGQgcmVzcGVjdCBtaW4vbWF4IHZhbHVlcyBzcGVj
aWZpZWQgYnkgcGFnZSBhdXRob3JzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L21hYy9Mb2NhbGVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFj
L0xvY2FsZU1hYy5oCmluZGV4IGVkOWY3MTYyMDhjNDQwOGIzY2JiNGQwYjM3M2NlZjI0NzUwYTJk
YmYuLjY5ZDVkODY0Y2VjZWUyZTJhNjk0MzFlNmExMzc1NjNjNjlkNjJiNDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCkBAIC02OSw3ICs2OSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBMb2NhbGVNYWMoTlNMb2NhbGUqKTsK
LSAgICBOU0RhdGVGb3JtYXR0ZXIgKmNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpOworICAgIFJl
dGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpOwogICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplTG9jYWxpemVyRGF0YSgpIE9WRVJSSURFOwogCiAgICAg
UmV0YWluUHRyPE5TTG9jYWxlPiBtX2xvY2FsZTsKQEAgLTc5LDggKzc5LDggQEAgcHJpdmF0ZToK
ICAgICBWZWN0b3I8U3RyaW5nPiBtX3dlZWtEYXlTaG9ydExhYmVsczsKICNlbmRpZgogI2lmIEVO
QUJMRShJTlBVVF9NVUxUSVBMRV9GSUVMRFNfVUkpCi0gICAgTlNEYXRlRm9ybWF0dGVyICpjcmVh
dGVUaW1lRm9ybWF0dGVyKCk7Ci0gICAgTlNEYXRlRm9ybWF0dGVyICpjcmVhdGVTaG9ydFRpbWVG
b3JtYXR0ZXIoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBjcmVhdGVUaW1lRm9y
bWF0dGVyKCk7CisgICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gY3JlYXRlU2hvcnRUaW1l
Rm9ybWF0dGVyKCk7CiAKICAgICBTdHJpbmcgbV9kYXRlRm9ybWF0OwogICAgIFN0cmluZyBtX2xv
Y2FsaXplZFRpbWVGb3JtYXRUZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9tYWMvTG9jYWxlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9t
YWMvTG9jYWxlTWFjLm1tCmluZGV4IDU3ZTdiOGUzMzFjN2ExOTU2MzMxYjVlZjIxNTIwYWI2MDI5
NGE5OTAuLjY5ZTljMWFmZjY1YzcwNjA1YmIyZjg5N2MwM2Y1MDMyMWNjMmM5ZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KQEAgLTcwLDcgKzcw
LDcgQEAgUGFzc093blB0cjxMb2NhbGl6ZXI+IExvY2FsaXplcjo6Y3JlYXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxlKQogICAgIHJldHVybiBMb2NhbGVNYWM6OmNyZWF0ZShkZXRlcm1pbmVM
b2NhbGUobG9jYWxlLnN0cmluZygpKSk7CiB9CiAKLXN0YXRpYyBOU0RhdGVGb3JtYXR0ZXIqIGNy
ZWF0ZURhdGVUaW1lRm9ybWF0dGVyKE5TTG9jYWxlKiBsb2NhbGUsIE5TRGF0ZUZvcm1hdHRlclN0
eWxlIGRhdGVTdHlsZSwgTlNEYXRlRm9ybWF0dGVyU3R5bGUgdGltZVN0eWxlKQorc3RhdGljIFJl
dGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKE5TTG9jYWxl
KiBsb2NhbGUsIE5TRGF0ZUZvcm1hdHRlclN0eWxlIGRhdGVTdHlsZSwgTlNEYXRlRm9ybWF0dGVy
U3R5bGUgdGltZVN0eWxlKQogewogICAgIE5TRGF0ZUZvcm1hdHRlciAqZm9ybWF0dGVyID0gW1tO
U0RhdGVGb3JtYXR0ZXIgYWxsb2NdIGluaXRdOwogICAgIFtmb3JtYXR0ZXIgc2V0TG9jYWxlOmxv
Y2FsZV07CkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBOU0RhdGVGb3JtYXR0ZXIqIGNyZWF0ZURh
dGVUaW1lRm9ybWF0dGVyKE5TTG9jYWxlKiBsb2NhbGUsIE5TRGF0ZUZvcm1hdHRlCiAgICAgW2Zv
cm1hdHRlciBzZXRUaW1lU3R5bGU6dGltZVN0eWxlXTsKICAgICBbZm9ybWF0dGVyIHNldFRpbWVa
b25lOltOU1RpbWVab25lIHRpbWVab25lV2l0aEFiYnJldmlhdGlvbjpAIlVUQyJdXTsKICAgICBb
Zm9ybWF0dGVyIHNldENhbGVuZGFyOltbTlNDYWxlbmRhciBhbGxvY10gaW5pdFdpdGhDYWxlbmRh
cklkZW50aWZpZXI6TlNHcmVnb3JpYW5DYWxlbmRhcl1dOwotICAgIHJldHVybiBmb3JtYXR0ZXI7
CisgICAgcmV0dXJuIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+KEFkb3B0TlMsIGZvcm1hdHRl
cik7CiB9CiAKIExvY2FsZU1hYzo6TG9jYWxlTWFjKE5TTG9jYWxlKiBsb2NhbGUpCkBAIC0xMTIs
NyArMTEyLDcgQEAgTG9jYWxlTWFjKiBMb2NhbGVNYWM6OmN1cnJlbnRMb2NhbGUoKQogICAgIHJl
dHVybiBjdXJyZW50TG9jYWxlOwogfQogCi1OU0RhdGVGb3JtYXR0ZXIqIExvY2FsZU1hYzo6Y3Jl
YXRlU2hvcnREYXRlRm9ybWF0dGVyKCkKK1JldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IExvY2Fs
ZU1hYzo6Y3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkKIHsKICAgICByZXR1cm4gY3JlYXRlRGF0
ZVRpbWVGb3JtYXR0ZXIobV9sb2NhbGUuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGUs
IE5TRGF0ZUZvcm1hdHRlck5vU3R5bGUpOwogfQpAQCAtMTIxLDggKzEyMSw3IEBAIGRvdWJsZSBM
b2NhbGVNYWM6OnBhcnNlRGF0ZVRpbWUoY29uc3QgU3RyaW5nJiBpbnB1dCwgRGF0ZUNvbXBvbmVu
dHM6OlR5cGUgdHlwZSkKIHsKICAgICBpZiAodHlwZSAhPSBEYXRlQ29tcG9uZW50czo6RGF0ZSkK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0
ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICBOU0RhdGUgKmRhdGUgPSBbZm9ybWF0dGVyLmdl
dCgpIGRhdGVGcm9tU3RyaW5nOmlucHV0XTsKKyAgICBOU0RhdGUgKmRhdGUgPSBbY3JlYXRlU2hv
cnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgZGF0ZUZyb21TdHJpbmc6aW5wdXRdOwogICAgIGlmICgh
ZGF0ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7CiAgICAgcmV0dXJuIFtkYXRlIHRpbWVJbnRlcnZhbFNpbmNlMTk3MF0gKiBtc1BlclNl
Y29uZDsKQEAgLTEzMiw5ICsxMzEsOCBAQCBTdHJpbmcgTG9jYWxlTWFjOjpmb3JtYXREYXRlVGlt
ZShjb25zdCBEYXRlQ29tcG9uZW50cyYgZGF0ZUNvbXBvbmVudHMsIEZvcm1hdFR5cAogewogICAg
IGlmIChkYXRlQ29tcG9uZW50cy50eXBlKCkgIT0gRGF0ZUNvbXBvbmVudHM6OkRhdGUpCiAgICAg
ICAgIHJldHVybiBMb2NhbGl6ZXI6OmZvcm1hdERhdGVUaW1lKGRhdGVDb21wb25lbnRzLCBmb3Jt
YXRUeXBlKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHRO
UywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwogICAgIE5TVGltZUludGVydmFsIGludGVy
dmFsID0gZGF0ZUNvbXBvbmVudHMubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpIC8gbXNQZXJTZWNv
bmQ7Ci0gICAgcmV0dXJuIFN0cmluZyhbZm9ybWF0dGVyLmdldCgpIHN0cmluZ0Zyb21EYXRlOltO
U0RhdGUgZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzA6aW50ZXJ2YWxdXSk7CisgICAgcmV0
dXJuIFtjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzdHJpbmdGcm9tRGF0ZTpbTlNE
YXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwOmludGVydmFsXV07CiB9CiAKICNpZiBF
TkFCTEUoQ0FMRU5EQVJfUElDS0VSKQpAQCAtMTg3LDEwICsxODUsOSBAQCBzdGF0aWMgU3RyaW5n
IGxvY2FsaXplRGF0ZUZvcm1hdChjb25zdCBTdHJpbmcmIGZvcm1hdCkKIAogU3RyaW5nIExvY2Fs
ZU1hYzo6ZGF0ZUZvcm1hdFRleHQoKQogewotICAgIGlmICghbV9sb2NhbGl6ZWREYXRlRm9ybWF0
VGV4dC5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2xvY2FsaXplZERhdGVGb3JtYXRUZXh0LmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dDsKLSAgICBSZXRh
aW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRl
Rm9ybWF0dGVyKCkpOwotICAgIG1fbG9jYWxpemVkRGF0ZUZvcm1hdFRleHQgPSBsb2NhbGl6ZURh
dGVGb3JtYXQoU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZvcm1hdF0pKTsKKyAgICBtX2xv
Y2FsaXplZERhdGVGb3JtYXRUZXh0ID0gbG9jYWxpemVEYXRlRm9ybWF0KFtjcmVhdGVTaG9ydERh
dGVGb3JtYXR0ZXIoKS5nZXQoKSBkYXRlRm9ybWF0XSk7CiAgICAgcmV0dXJuICBtX2xvY2FsaXpl
ZERhdGVGb3JtYXRUZXh0OwogfQogCkBAIC0xOTksOCArMTk2LDcgQEAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIExvY2FsZU1hYzo6bW9udGhMYWJlbHMoKQogICAgIGlmICghbV9tb250aExhYmVscy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX21vbnRoTGFiZWxzOwogICAgIG1fbW9udGhMYWJl
bHMucmVzZXJ2ZUNhcGFjaXR5KDEyKTsKLSAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBm
b3JtYXR0ZXIoQWRvcHROUywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgIE5TQXJy
YXkgKmFycmF5ID0gW2Zvcm1hdHRlci5nZXQoKSBtb250aFN5bWJvbHNdOworICAgIE5TQXJyYXkg
KmFycmF5ID0gW2NyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIG1vbnRoU3ltYm9sc107
CiAgICAgaWYgKFthcnJheSBjb3VudF0gPT0gMTIpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDEyOyArK2kpCiAgICAgICAgICAgICBtX21vbnRoTGFiZWxzLmFwcGVuZChTdHJp
bmcoW2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKQEAgLTIxNiw4ICsyMTIsNyBAQCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjp3ZWVrRGF5U2hvcnRMYWJlbHMoKQogICAgIGlmICgh
bV93ZWVrRGF5U2hvcnRMYWJlbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV93ZWVrRGF5
U2hvcnRMYWJlbHM7CiAgICAgbV93ZWVrRGF5U2hvcnRMYWJlbHMucmVzZXJ2ZUNhcGFjaXR5KDcp
OwotICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVh
dGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgTlNBcnJheSAqYXJyYXkgPSBbZm9ybWF0dGVy
LmdldCgpIHNob3J0V2Vla2RheVN5bWJvbHNdOworICAgIE5TQXJyYXkgKmFycmF5ID0gW2NyZWF0
ZVNob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIHNob3J0V2Vla2RheVN5bWJvbHNdOwogICAgIGlm
IChbYXJyYXkgY291bnRdID09IDcpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDc7ICsraSkKICAgICAgICAgICAgIG1fd2Vla0RheVNob3J0TGFiZWxzLmFwcGVuZChTdHJpbmco
W2FycmF5IG9iamVjdEF0SW5kZXg6aV0pKTsKQEAgLTI0Miw0MCArMjM3LDM3IEBAIHVuc2lnbmVk
IExvY2FsZU1hYzo6Zmlyc3REYXlPZldlZWsoKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRf
TVVMVElQTEVfRklFTERTX1VJKQotTlNEYXRlRm9ybWF0dGVyKiBMb2NhbGVNYWM6OmNyZWF0ZVRp
bWVGb3JtYXR0ZXIoKQorUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gTG9jYWxlTWFjOjpjcmVh
dGVUaW1lRm9ybWF0dGVyKCkKIHsKICAgICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0ZXIo
bV9sb2NhbGUuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlck5vU3R5bGUsIE5TRGF0ZUZvcm1hdHRlck1l
ZGl1bVN0eWxlKTsKIH0KIAotTlNEYXRlRm9ybWF0dGVyKiBMb2NhbGVNYWM6OmNyZWF0ZVNob3J0
VGltZUZvcm1hdHRlcigpCitSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVNYWM6OmNy
ZWF0ZVNob3J0VGltZUZvcm1hdHRlcigpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9y
bWF0dGVyKG1fbG9jYWxlLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlLCBOU0RhdGVGb3Jt
YXR0ZXJTaG9ydFN0eWxlKTsKIH0KIAogU3RyaW5nIExvY2FsZU1hYzo6ZGF0ZUZvcm1hdCgpCiB7
Ci0gICAgaWYgKCFtX2RhdGVGb3JtYXQuaXNFbXB0eSgpKQorICAgIGlmICghbV9kYXRlRm9ybWF0
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbV9kYXRlRm9ybWF0OwotICAgIFJldGFpblB0cjxO
U0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0
ZXIoKSk7Ci0gICAgbV9kYXRlRm9ybWF0ID0gU3RyaW5nKFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZv
cm1hdF0pOworICAgIG1fZGF0ZUZvcm1hdCA9IFtjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKS5n
ZXQoKSBkYXRlRm9ybWF0XTsKICAgICByZXR1cm4gbV9kYXRlRm9ybWF0OwogfQogCiBTdHJpbmcg
TG9jYWxlTWFjOjp0aW1lRm9ybWF0KCkKIHsKLSAgICBpZiAoIW1fbG9jYWxpemVkVGltZUZvcm1h
dFRleHQuaXNFbXB0eSgpKQorICAgIGlmICghbV9sb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dC5pc051
bGwoKSkKICAgICAgICAgcmV0dXJuIG1fbG9jYWxpemVkVGltZUZvcm1hdFRleHQ7Ci0gICAgUmV0
YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVRpbWVGb3Jt
YXR0ZXIoKSk7Ci0gICAgbV9sb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dCA9IFN0cmluZyhbZm9ybWF0
dGVyLmdldCgpIGRhdGVGb3JtYXRdKTsKKyAgICBtX2xvY2FsaXplZFRpbWVGb3JtYXRUZXh0ID0g
W2NyZWF0ZVRpbWVGb3JtYXR0ZXIoKS5nZXQoKSBkYXRlRm9ybWF0XTsKICAgICByZXR1cm4gbV9s
b2NhbGl6ZWRUaW1lRm9ybWF0VGV4dDsKIH0KIAogU3RyaW5nIExvY2FsZU1hYzo6c2hvcnRUaW1l
Rm9ybWF0KCkKIHsKLSAgICBpZiAoIW1fbG9jYWxpemVkU2hvcnRUaW1lRm9ybWF0VGV4dC5pc0Vt
cHR5KCkpCisgICAgaWYgKCFtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiBtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQ7Ci0gICAgUmV0
YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0VGlt
ZUZvcm1hdHRlcigpKTsKLSAgICBtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQgPSBTdHJp
bmcoW2Zvcm1hdHRlci5nZXQoKSBkYXRlRm9ybWF0XSk7CisgICAgbV9sb2NhbGl6ZWRTaG9ydFRp
bWVGb3JtYXRUZXh0ID0gW2NyZWF0ZVNob3J0VGltZUZvcm1hdHRlcigpLmdldCgpIGRhdGVGb3Jt
YXRdOwogICAgIHJldHVybiBtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQ7CiB9CiAKQEAg
LTI4NCw5ICsyNzYsOSBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjp0aW1lQU1Q
TUxhYmVscygpCiAgICAgaWYgKCFtX3RpbWVBTVBNTGFiZWxzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIG1fdGltZUFNUE1MYWJlbHM7CiAgICAgbV90aW1lQU1QTUxhYmVscy5yZXNlcnZlQ2Fw
YWNpdHkoMik7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0
TlMsIGNyZWF0ZVNob3J0VGltZUZvcm1hdHRlcigpKTsKLSAgICBtX3RpbWVBTVBNTGFiZWxzLmFw
cGVuZChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBBTVN5bWJvbF0pKTsKLSAgICBtX3RpbWVBTVBN
TGFiZWxzLmFwcGVuZChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBQTVN5bWJvbF0pKTsKKyAgICBS
ZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIgPSBjcmVhdGVTaG9ydFRpbWVGb3Jt
YXR0ZXIoKTsKKyAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIEFN
U3ltYm9sXSk7CisgICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBQ
TVN5bWJvbF0pOwogICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogfQogI2VuZGlmCkBAIC0z
MTAsOSArMzAyLDkgQEAgdm9pZCBMb2NhbGVNYWM6OmluaXRpYWxpemVMb2NhbGl6ZXJEYXRhKCkK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTA7ICsraSkKICAgICAgICAgc3ltYm9scy5h
cHBlbmQobmluZVRvWmVyby5zdWJzdHJpbmcoOSAtIGksIDEpKTsKICAgICBBU1NFUlQoc3ltYm9s
cy5zaXplKCkgPT0gRGVjaW1hbFNlcGFyYXRvckluZGV4KTsKLSAgICBzeW1ib2xzLmFwcGVuZChT
dHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBkZWNpbWFsU2VwYXJhdG9yXSkpOworICAgIHN5bWJvbHMu
YXBwZW5kKFtmb3JtYXR0ZXIuZ2V0KCkgZGVjaW1hbFNlcGFyYXRvcl0pOwogICAgIEFTU0VSVChz
eW1ib2xzLnNpemUoKSA9PSBHcm91cFNlcGFyYXRvckluZGV4KTsKLSAgICBzeW1ib2xzLmFwcGVu
ZChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBncm91cGluZ1NlcGFyYXRvcl0pKTsKKyAgICBzeW1i
b2xzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIGdyb3VwaW5nU2VwYXJhdG9yXSk7CiAgICAgQVNT
RVJUKHN5bWJvbHMuc2l6ZSgpID09IERlY2ltYWxTeW1ib2xzU2l6ZSk7CiAKICAgICBTdHJpbmcg
cG9zaXRpdmVQcmVmaXgoW2Zvcm1hdHRlci5nZXQoKSBwb3NpdGl2ZVByZWZpeF0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168641</attachid>
            <date>2012-10-15 00:40:44 -0700</date>
            <delta_ts>2012-10-15 00:43:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-98383-20121015163934.patch</filename>
            <type>text/plain</type>
            <size>13046</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODUzNTgzNmI5ZDg3NDNh
ZDBiMDUzMThhY2I3OTcyYThkNDdkNzQ5Ni4uY2MzZDA1ODcxZGY1MWEyODYwMmU0NDJjOTBiZTYy
MjMxMTBhMmNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTE1ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXByb3ZlIGNvZGUgb2Yg
TG9jYWxlTWFjLm1tCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05ODM4MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IC0gVXNlIGlzTnVsbCBpbnN0ZWFkIG9mIGlzRW1wdHkgYmVjYXVzZSBpc051bGwgaXMgbW9yZSBl
ZmZpY2llbnQuCisgICAgICAgIC0gY3JlYXRlKkZvcm1hdHRlciBzaG91bGQgcmV0dXJuIFJldGFp
blB0ciB0byBhdm9pZCB0byByZXRhaW4gaW4gZWFjaCBvZiBjYWxsc2l0ZXMuCisgICAgICAgIC0g
RXhwbGljaXQgU3RyaW5nIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRoaXMgZG9lc24ndCBjaGFuZ2UgYW55IGJlaGF2aW9yLgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9tYWMvTG9jYWxlTWFjLmg6CisgICAgICAgIChMb2NhbGVNYWMpOgorICAg
ICAgICAtIENoYW5nZSB0aGUgcmV0dXJuIHR5cGVzIG9mIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRl
ciwKKyAgICAgICAgY3JlYXRlVGltZUZvcm1hdHRlciwgYW5kIGNyZWF0ZVNob3J0VGltZUZvcm1h
dHRlciBmcm9tIE5TRGF0ZUZvcm1hdHRlcioKKyAgICAgICAgdG8gUmV0YWluUHRyPE5TRGF0ZUZv
cm1hdHRlcj4uCisgICAgICAgIC0gT21pdCAnY3JlYXRlJyBmcm9tIHRoZWlyIG5hbWVzLgorICAg
ICAgICAtIEFkZCBtX2dyZWdvcmlhbkNhbGVuZGFyLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
bWFjL0xvY2FsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURhdGVUaW1lRm9ybWF0
dGVyKToKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdHlwZSBmcm9tIE5TRGF0ZUZvcm1hdHRl
ciogdG8gUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4uCisgICAgICAgIEFkZCBhbiBOU0NhbGVu
ZGFyIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjpzaG9ydERhdGVGb3Jt
YXR0ZXIpOgorICAgICAgICBSZW5hbWVkIGZyb20gY3JlYXRlU2hvcnRUaW1lRm9ybWF0dGVyLgor
ICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB0eXBlIGZyb20gTlNEYXRlRm9ybWF0dGVyKiB0byBS
ZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPi4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2FsZU1hYzo6
cGFyc2VEYXRlVGltZSk6IEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIGFuZCB0aGUgcmVu
YW1pbmcuCisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OmZvcm1hdERhdGVUaW1lKTogRGl0
dG8uIEFsc28sIHJlbW92ZSBleHBsaWNpdCBTdHJpbmcgY29uc3RydWN0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6TG9jYWxlTWFjOjpkYXRlRm9ybWF0VGV4dCk6IERpdHRvLiBBbHNvLCB1c2UgaXNO
dWxsLgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjptb250aExhYmVscyk6IEZvbGxvdyB0
aGUgcmV0dXJuIHR5cGUgY2hhbmdlIGFuZCB0aGUgcmVuYW1pbmcuCisgICAgICAgIChXZWJDb3Jl
OjpMb2NhbGVNYWM6OndlZWtEYXlTaG9ydExhYmVscyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TG9jYWxlTWFjOjp0aW1lRm9ybWF0dGVyKToKKyAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4g
dHlwZSBmcm9tIE5TRGF0ZUZvcm1hdHRlciogdG8gUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4u
CisgICAgICAgIFJlbmFtZWQgZnJvbSBjcmVhdGVUaW1lRm9ybWF0dGVyLgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYWxlTWFjOjpzaG9ydFRpbWVGb3JtYXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkxvY2FsZU1hYzo6ZGF0ZUZvcm1hdCk6CisgICAgICAgIFVzZSBpc051bGwuIFJlbW92
ZSBleHBsaWNpdCBTdHJpbmcgY29uc3RydWN0aW9uLiBGb2xsb3cgdGhlIHJldHVybiB0eXBlCisg
ICAgICAgIGNoYW5nZSBhbmQgdGhlIHJlbmFtaW5nLgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxl
TWFjOjp0aW1lRm9ybWF0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpMb2NhbGVNYWM6OnNo
b3J0VGltZUZvcm1hdCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TG9jYWxlTWFjOjp0aW1l
QU1QTUxhYmVscyk6CisgICAgICAgIFJlbW92ZSBleHBsaWNpdCBTdHJpbmcgY29uc3RydWN0aW9u
LiBGb2xsb3cgdGhlIHJldHVybiB0eXBlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2Fs
ZU1hYzo6aW5pdGlhbGl6ZUxvY2FsaXplckRhdGEpOgorICAgICAgICBSZW1vdmUgZXhwbGljaXQg
U3RyaW5nIGNvbnN0cnVjdGlvbi4KKwogMjAxMi0xMC0xNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IHVzZXIgY29udGVudCBpbiBXZWJLaXQyIGJ5IHVz
aW5nIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IGFuZCBXZWJDb3JlOjpVc2VyU2NyaXB0IGRpcmVj
dGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVN
YWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCmluZGV4
IDk5NjRiNzg5ZjNiYjBkZjkwNjExNmQ5M2EzYjg2YzljY2Q2MmY0YzIuLmU2NTAwY2Y0MjlhZTQy
YjY5NjY2ZDZhMThmYTAxMDk5ODFjODFjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvbWFjL0xvY2FsZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvbWFjL0xvY2FsZU1hYy5oCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCitPQkpDX0NMQVNTIE5T
Q2FsZW5kYXI7CiBPQkpDX0NMQVNTIE5TRGF0ZUZvcm1hdHRlcjsKIE9CSkNfQ0xBU1MgTlNMb2Nh
bGU7CiAKQEAgLTcwLDE4ICs3MSwxOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgTG9jYWxlTWFjKE5TTG9jYWxlKik7Ci0gICAgTlNEYXRlRm9ybWF0dGVyICpjcmVhdGVTaG9y
dERhdGVGb3JtYXR0ZXIoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBzaG9ydERh
dGVGb3JtYXR0ZXIoKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUxvY2FsaXplckRhdGEo
KSBPVkVSUklERTsKIAogICAgIFJldGFpblB0cjxOU0xvY2FsZT4gbV9sb2NhbGU7CisgICAgUmV0
YWluUHRyPE5TQ2FsZW5kYXI+IG1fZ3JlZ29yaWFuQ2FsZW5kYXI7CiAjaWYgRU5BQkxFKENBTEVO
REFSX1BJQ0tFUikKICAgICBTdHJpbmcgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dDsKICAgICBW
ZWN0b3I8U3RyaW5nPiBtX21vbnRoTGFiZWxzOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fd2Vla0Rh
eVNob3J0TGFiZWxzOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX01VTFRJUExFX0ZJRUxEU19V
SSkKLSAgICBOU0RhdGVGb3JtYXR0ZXIgKmNyZWF0ZVRpbWVGb3JtYXR0ZXIoKTsKLSAgICBOU0Rh
dGVGb3JtYXR0ZXIgKmNyZWF0ZVNob3J0VGltZUZvcm1hdHRlcigpOworICAgIFJldGFpblB0cjxO
U0RhdGVGb3JtYXR0ZXI+IHRpbWVGb3JtYXR0ZXIoKTsKKyAgICBSZXRhaW5QdHI8TlNEYXRlRm9y
bWF0dGVyPiBzaG9ydFRpbWVGb3JtYXR0ZXIoKTsKIAogICAgIFN0cmluZyBtX2RhdGVGb3JtYXQ7
CiAgICAgU3RyaW5nIG1fbG9jYWxpemVkVGltZUZvcm1hdFRleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L21hYy9Mb2NhbGVNYWMubW0KaW5kZXggZTkwYzZmNGQzYTIyYjZmYzc4
YjUwZTM1ZTljMmQ4YmNmODU3NjRmNC4uYzg1ZDgxZWQ3OWFhZTgyNTU4MWRiNmJkZjc1ZmNlODhj
YTQxOWQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9tYWMvTG9j
YWxlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvbWFjL0xvY2FsZU1h
Yy5tbQpAQCAtNzAsMTkgKzcwLDIwIEBAIFBhc3NPd25QdHI8TG9jYWxpemVyPiBMb2NhbGl6ZXI6
OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKICAgICByZXR1cm4gTG9jYWxlTWFj
OjpjcmVhdGUoZGV0ZXJtaW5lTG9jYWxlKGxvY2FsZS5zdHJpbmcoKSkpOwogfQogCi1zdGF0aWMg
TlNEYXRlRm9ybWF0dGVyKiBjcmVhdGVEYXRlVGltZUZvcm1hdHRlcihOU0xvY2FsZSogbG9jYWxl
LCBOU0RhdGVGb3JtYXR0ZXJTdHlsZSBkYXRlU3R5bGUsIE5TRGF0ZUZvcm1hdHRlclN0eWxlIHRp
bWVTdHlsZSkKK3N0YXRpYyBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBjcmVhdGVEYXRlVGlt
ZUZvcm1hdHRlcihOU0xvY2FsZSogbG9jYWxlLCBOU0NhbGVuZGFyKiBjYWxlbmRhciwgTlNEYXRl
Rm9ybWF0dGVyU3R5bGUgZGF0ZVN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTdHlsZSB0aW1lU3R5bGUp
CiB7CiAgICAgTlNEYXRlRm9ybWF0dGVyICpmb3JtYXR0ZXIgPSBbW05TRGF0ZUZvcm1hdHRlciBh
bGxvY10gaW5pdF07CiAgICAgW2Zvcm1hdHRlciBzZXRMb2NhbGU6bG9jYWxlXTsKICAgICBbZm9y
bWF0dGVyIHNldERhdGVTdHlsZTpkYXRlU3R5bGVdOwogICAgIFtmb3JtYXR0ZXIgc2V0VGltZVN0
eWxlOnRpbWVTdHlsZV07CiAgICAgW2Zvcm1hdHRlciBzZXRUaW1lWm9uZTpbTlNUaW1lWm9uZSB0
aW1lWm9uZVdpdGhBYmJyZXZpYXRpb246QCJVVEMiXV07Ci0gICAgW2Zvcm1hdHRlciBzZXRDYWxl
bmRhcjpbW05TQ2FsZW5kYXIgYWxsb2NdIGluaXRXaXRoQ2FsZW5kYXJJZGVudGlmaWVyOk5TR3Jl
Z29yaWFuQ2FsZW5kYXJdXTsKLSAgICByZXR1cm4gZm9ybWF0dGVyOworICAgIFtmb3JtYXR0ZXIg
c2V0Q2FsZW5kYXI6Y2FsZW5kYXJdOworICAgIHJldHVybiBhZG9wdE5TKGZvcm1hdHRlcik7CiB9
CiAKIExvY2FsZU1hYzo6TG9jYWxlTWFjKE5TTG9jYWxlKiBsb2NhbGUpCiAgICAgOiBtX2xvY2Fs
ZShsb2NhbGUpCisgICAgLCBtX2dyZWdvcmlhbkNhbGVuZGFyKEFkb3B0TlMsIFtbTlNDYWxlbmRh
ciBhbGxvY10gaW5pdFdpdGhDYWxlbmRhcklkZW50aWZpZXI6TlNHcmVnb3JpYW5DYWxlbmRhcl0p
CiAgICAgLCBtX2RpZEluaXRpYWxpemVOdW1iZXJEYXRhKGZhbHNlKQogewogICAgIE5TQXJyYXkq
IGF2YWlsYWJsZUxhbmd1YWdlcyA9IFtOU0xvY2FsZSBJU09MYW5ndWFnZUNvZGVzXTsKQEAgLTkw
LDYgKzkxLDcgQEAgTG9jYWxlTWFjOjpMb2NhbGVNYWMoTlNMb2NhbGUqIGxvY2FsZSkKICAgICBO
U1N0cmluZyogbGFuZ3VhZ2UgPSBbbV9sb2NhbGUuZ2V0KCkgb2JqZWN0Rm9yS2V5Ok5TTG9jYWxl
TGFuZ3VhZ2VDb2RlXTsKICAgICBpZiAoW2F2YWlsYWJsZUxhbmd1YWdlcyBpbmRleE9mT2JqZWN0
Omxhbmd1YWdlXSA9PSBOU05vdEZvdW5kKQogICAgICAgICBtX2xvY2FsZSA9IFtbTlNMb2NhbGUg
YWxsb2NdIGluaXRXaXRoTG9jYWxlSWRlbnRpZmllcjpkZWZhdWx0TGFuZ3VhZ2UoKV07CisgICAg
W21fZ3JlZ29yaWFuQ2FsZW5kYXIuZ2V0KCkgc2V0TG9jYWxlOm1fbG9jYWxlLmdldCgpXTsKIH0K
IAogTG9jYWxlTWFjOjp+TG9jYWxlTWFjKCkKQEAgLTExMiwxNyArMTE0LDE2IEBAIExvY2FsZU1h
YyogTG9jYWxlTWFjOjpjdXJyZW50TG9jYWxlKCkKICAgICByZXR1cm4gY3VycmVudExvY2FsZTsK
IH0KIAotTlNEYXRlRm9ybWF0dGVyKiBMb2NhbGVNYWM6OmNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRl
cigpCitSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBMb2NhbGVNYWM6OnNob3J0RGF0ZUZvcm1h
dHRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdl
dCgpLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlKTsK
KyAgICByZXR1cm4gY3JlYXRlRGF0ZVRpbWVGb3JtYXR0ZXIobV9sb2NhbGUuZ2V0KCksIG1fZ3Jl
Z29yaWFuQ2FsZW5kYXIuZ2V0KCksIE5TRGF0ZUZvcm1hdHRlclNob3J0U3R5bGUsIE5TRGF0ZUZv
cm1hdHRlck5vU3R5bGUpOwogfQogCiBkb3VibGUgTG9jYWxlTWFjOjpwYXJzZURhdGVUaW1lKGNv
bnN0IFN0cmluZyYgaW5wdXQsIERhdGVDb21wb25lbnRzOjpUeXBlIHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUgIT0gRGF0ZUNvbXBvbmVudHM6OkRhdGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIFJldGFpblB0cjxOU0RhdGVGb3Jt
YXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5TLCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0g
ICAgTlNEYXRlICpkYXRlID0gW2Zvcm1hdHRlci5nZXQoKSBkYXRlRnJvbVN0cmluZzppbnB1dF07
CisgICAgTlNEYXRlICpkYXRlID0gW3Nob3J0RGF0ZUZvcm1hdHRlcigpLmdldCgpIGRhdGVGcm9t
U3RyaW5nOmlucHV0XTsKICAgICBpZiAoIWRhdGUpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogICAgIHJldHVybiBbZGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZTE5NzBdICogbXNQZXJTZWNvbmQ7CkBAIC0xMzIsOSArMTMzLDggQEAgU3RyaW5n
IExvY2FsZU1hYzo6Zm9ybWF0RGF0ZVRpbWUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21w
b25lbnRzLCBGb3JtYXRUeXAKIHsKICAgICBpZiAoZGF0ZUNvbXBvbmVudHMudHlwZSgpICE9IERh
dGVDb21wb25lbnRzOjpEYXRlKQogICAgICAgICByZXR1cm4gTG9jYWxpemVyOjpmb3JtYXREYXRl
VGltZShkYXRlQ29tcG9uZW50cywgZm9ybWF0VHlwZSk7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZv
cm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsK
ICAgICBOU1RpbWVJbnRlcnZhbCBpbnRlcnZhbCA9IGRhdGVDb21wb25lbnRzLm1pbGxpc2Vjb25k
c1NpbmNlRXBvY2goKSAvIG1zUGVyU2Vjb25kOwotICAgIHJldHVybiBTdHJpbmcoW2Zvcm1hdHRl
ci5nZXQoKSBzdHJpbmdGcm9tRGF0ZTpbTlNEYXRlIGRhdGVXaXRoVGltZUludGVydmFsU2luY2Ux
OTcwOmludGVydmFsXV0pOworICAgIHJldHVybiBbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkg
c3RyaW5nRnJvbURhdGU6W05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MDppbnRl
cnZhbF1dOwogfQogCiAjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikKQEAgLTE4NywxMCArMTg3
LDkgQEAgc3RhdGljIFN0cmluZyBsb2NhbGl6ZURhdGVGb3JtYXQoY29uc3QgU3RyaW5nJiBmb3Jt
YXQpCiAKIFN0cmluZyBMb2NhbGVNYWM6OmRhdGVGb3JtYXRUZXh0KCkKIHsKLSAgICBpZiAoIW1f
bG9jYWxpemVkRGF0ZUZvcm1hdFRleHQuaXNFbXB0eSgpKQorICAgIGlmICghbV9sb2NhbGl6ZWRE
YXRlRm9ybWF0VGV4dC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG1fbG9jYWxpemVkRGF0ZUZv
cm1hdFRleHQ7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0
TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigpKTsKLSAgICBtX2xvY2FsaXplZERhdGVGb3Jt
YXRUZXh0ID0gbG9jYWxpemVEYXRlRm9ybWF0KFN0cmluZyhbZm9ybWF0dGVyLmdldCgpIGRhdGVG
b3JtYXRdKSk7CisgICAgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCA9IGxvY2FsaXplRGF0ZUZv
cm1hdChbc2hvcnREYXRlRm9ybWF0dGVyKCkuZ2V0KCkgZGF0ZUZvcm1hdF0pOwogICAgIHJldHVy
biAgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dDsKIH0KIApAQCAtMTk5LDggKzE5OCw3IEBAIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBMb2NhbGVNYWM6Om1vbnRoTGFiZWxzKCkKICAgICBpZiAoIW1f
bW9udGhMYWJlbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9tb250aExhYmVsczsKICAg
ICBtX21vbnRoTGFiZWxzLnJlc2VydmVDYXBhY2l0eSgxMik7Ci0gICAgUmV0YWluUHRyPE5TRGF0
ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNyZWF0ZVNob3J0RGF0ZUZvcm1hdHRlcigp
KTsKLSAgICBOU0FycmF5ICphcnJheSA9IFtmb3JtYXR0ZXIuZ2V0KCkgbW9udGhTeW1ib2xzXTsK
KyAgICBOU0FycmF5ICphcnJheSA9IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBtb250aFN5
bWJvbHNdOwogICAgIGlmIChbYXJyYXkgY291bnRdID09IDEyKSB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAxMjsgKytpKQogICAgICAgICAgICAgbV9tb250aExhYmVscy5hcHBl
bmQoU3RyaW5nKFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7CkBAIC0yMTYsOCArMjE0LDcgQEAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIExvY2FsZU1hYzo6d2Vla0RheVNob3J0TGFiZWxzKCkKICAg
ICBpZiAoIW1fd2Vla0RheVNob3J0TGFiZWxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1f
d2Vla0RheVNob3J0TGFiZWxzOwogICAgIG1fd2Vla0RheVNob3J0TGFiZWxzLnJlc2VydmVDYXBh
Y2l0eSg3KTsKLSAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIoQWRvcHRO
UywgY3JlYXRlU2hvcnREYXRlRm9ybWF0dGVyKCkpOwotICAgIE5TQXJyYXkgKmFycmF5ID0gW2Zv
cm1hdHRlci5nZXQoKSBzaG9ydFdlZWtkYXlTeW1ib2xzXTsKKyAgICBOU0FycmF5ICphcnJheSA9
IFtzaG9ydERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBzaG9ydFdlZWtkYXlTeW1ib2xzXTsKICAgICBp
ZiAoW2FycmF5IGNvdW50XSA9PSA3KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCA3OyArK2kpCiAgICAgICAgICAgICBtX3dlZWtEYXlTaG9ydExhYmVscy5hcHBlbmQoU3RyaW5n
KFthcnJheSBvYmplY3RBdEluZGV4OmldKSk7CkBAIC0yMzIsMTIgKzIyOSwxMCBAQCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjp3ZWVrRGF5U2hvcnRMYWJlbHMoKQogCiB1bnNpZ25l
ZCBMb2NhbGVNYWM6OmZpcnN0RGF5T2ZXZWVrKCkKIHsKLSAgICBSZXRhaW5QdHI8TlNDYWxlbmRh
cj4gY2FsZW5kYXIoQWRvcHROUywgW1tOU0NhbGVuZGFyIGFsbG9jXSBpbml0V2l0aENhbGVuZGFy
SWRlbnRpZmllcjpOU0dyZWdvcmlhbkNhbGVuZGFyXSk7Ci0gICAgW2NhbGVuZGFyLmdldCgpIHNl
dExvY2FsZTptX2xvY2FsZS5nZXQoKV07CiAgICAgLy8gVGhlIGRvY3VtZW50IGZvciBOU0NhbGVu
ZGFyIC0gZmlyc3RXZWVrZGF5IGRvZXNuJ3QgaGF2ZSBhbiBleHBsYW5hdGlvbiBvZgogICAgIC8v
IGZpcnN0V2Vla2RheSB2YWx1ZS4gV2UgY2FuIGd1ZXNzIGl0IGJ5IHRoZSBkb2N1bWVudCBvZiBO
U0RhdGVDb21wb25lbnRzIC0KICAgICAvLyB3ZWVrRGF5LCBzbyBpdCBjYW4gYmUgMSB0aHJvdWdo
IDcgYW5kIDEgaXMgU3VuZGF5LgotICAgIHJldHVybiBbY2FsZW5kYXIuZ2V0KCkgZmlyc3RXZWVr
ZGF5XSAtIDE7CisgICAgcmV0dXJuIFttX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpIGZpcnN0V2Vl
a2RheV0gLSAxOwogfQogCiBib29sIExvY2FsZU1hYzo6aXNSVEwoKQpAQCAtMjQ3LDQwICsyNDIs
MzcgQEAgYm9vbCBMb2NhbGVNYWM6OmlzUlRMKCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKElOUFVU
X01VTFRJUExFX0ZJRUxEU19VSSkKLU5TRGF0ZUZvcm1hdHRlciogTG9jYWxlTWFjOjpjcmVhdGVU
aW1lRm9ybWF0dGVyKCkKK1JldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IExvY2FsZU1hYzo6dGlt
ZUZvcm1hdHRlcigpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9j
YWxlLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlLCBOU0RhdGVGb3JtYXR0ZXJNZWRpdW1T
dHlsZSk7CisgICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0dGVyKG1fbG9jYWxlLmdldCgp
LCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3JtYXR0ZXJOb1N0eWxlLCBOU0Rh
dGVGb3JtYXR0ZXJNZWRpdW1TdHlsZSk7CiB9CiAKLU5TRGF0ZUZvcm1hdHRlciogTG9jYWxlTWFj
OjpjcmVhdGVTaG9ydFRpbWVGb3JtYXR0ZXIoKQorUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4g
TG9jYWxlTWFjOjpzaG9ydFRpbWVGb3JtYXR0ZXIoKQogewotICAgIHJldHVybiBjcmVhdGVEYXRl
VGltZUZvcm1hdHRlcihtX2xvY2FsZS5nZXQoKSwgTlNEYXRlRm9ybWF0dGVyTm9TdHlsZSwgTlNE
YXRlRm9ybWF0dGVyU2hvcnRTdHlsZSk7CisgICAgcmV0dXJuIGNyZWF0ZURhdGVUaW1lRm9ybWF0
dGVyKG1fbG9jYWxlLmdldCgpLCBtX2dyZWdvcmlhbkNhbGVuZGFyLmdldCgpLCBOU0RhdGVGb3Jt
YXR0ZXJOb1N0eWxlLCBOU0RhdGVGb3JtYXR0ZXJTaG9ydFN0eWxlKTsKIH0KIAogU3RyaW5nIExv
Y2FsZU1hYzo6ZGF0ZUZvcm1hdCgpCiB7Ci0gICAgaWYgKCFtX2RhdGVGb3JtYXQuaXNFbXB0eSgp
KQorICAgIGlmICghbV9kYXRlRm9ybWF0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbV9kYXRl
Rm9ybWF0OwotICAgIFJldGFpblB0cjxOU0RhdGVGb3JtYXR0ZXI+IGZvcm1hdHRlcihBZG9wdE5T
LCBjcmVhdGVTaG9ydERhdGVGb3JtYXR0ZXIoKSk7Ci0gICAgbV9kYXRlRm9ybWF0ID0gU3RyaW5n
KFtmb3JtYXR0ZXIuZ2V0KCkgZGF0ZUZvcm1hdF0pOworICAgIG1fZGF0ZUZvcm1hdCA9IFtzaG9y
dERhdGVGb3JtYXR0ZXIoKS5nZXQoKSBkYXRlRm9ybWF0XTsKICAgICByZXR1cm4gbV9kYXRlRm9y
bWF0OwogfQogCiBTdHJpbmcgTG9jYWxlTWFjOjp0aW1lRm9ybWF0KCkKIHsKLSAgICBpZiAoIW1f
bG9jYWxpemVkVGltZUZvcm1hdFRleHQuaXNFbXB0eSgpKQorICAgIGlmICghbV9sb2NhbGl6ZWRU
aW1lRm9ybWF0VGV4dC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG1fbG9jYWxpemVkVGltZUZv
cm1hdFRleHQ7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0
TlMsIGNyZWF0ZVRpbWVGb3JtYXR0ZXIoKSk7Ci0gICAgbV9sb2NhbGl6ZWRUaW1lRm9ybWF0VGV4
dCA9IFN0cmluZyhbZm9ybWF0dGVyLmdldCgpIGRhdGVGb3JtYXRdKTsKKyAgICBtX2xvY2FsaXpl
ZFRpbWVGb3JtYXRUZXh0ID0gW3RpbWVGb3JtYXR0ZXIoKS5nZXQoKSBkYXRlRm9ybWF0XTsKICAg
ICByZXR1cm4gbV9sb2NhbGl6ZWRUaW1lRm9ybWF0VGV4dDsKIH0KIAogU3RyaW5nIExvY2FsZU1h
Yzo6c2hvcnRUaW1lRm9ybWF0KCkKIHsKLSAgICBpZiAoIW1fbG9jYWxpemVkU2hvcnRUaW1lRm9y
bWF0VGV4dC5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRl
eHQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRl
eHQ7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVyKEFkb3B0TlMsIGNy
ZWF0ZVNob3J0VGltZUZvcm1hdHRlcigpKTsKLSAgICBtX2xvY2FsaXplZFNob3J0VGltZUZvcm1h
dFRleHQgPSBTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBkYXRlRm9ybWF0XSk7CisgICAgbV9sb2Nh
bGl6ZWRTaG9ydFRpbWVGb3JtYXRUZXh0ID0gW3Nob3J0VGltZUZvcm1hdHRlcigpLmdldCgpIGRh
dGVGb3JtYXRdOwogICAgIHJldHVybiBtX2xvY2FsaXplZFNob3J0VGltZUZvcm1hdFRleHQ7CiB9
CiAKQEAgLTI4OSw5ICsyODEsOSBAQCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgTG9jYWxlTWFjOjp0
aW1lQU1QTUxhYmVscygpCiAgICAgaWYgKCFtX3RpbWVBTVBNTGFiZWxzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fdGltZUFNUE1MYWJlbHM7CiAgICAgbV90aW1lQU1QTUxhYmVscy5yZXNl
cnZlQ2FwYWNpdHkoMik7Ci0gICAgUmV0YWluUHRyPE5TRGF0ZUZvcm1hdHRlcj4gZm9ybWF0dGVy
KEFkb3B0TlMsIGNyZWF0ZVNob3J0VGltZUZvcm1hdHRlcigpKTsKLSAgICBtX3RpbWVBTVBNTGFi
ZWxzLmFwcGVuZChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBBTVN5bWJvbF0pKTsKLSAgICBtX3Rp
bWVBTVBNTGFiZWxzLmFwcGVuZChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBQTVN5bWJvbF0pKTsK
KyAgICBSZXRhaW5QdHI8TlNEYXRlRm9ybWF0dGVyPiBmb3JtYXR0ZXIgPSBzaG9ydFRpbWVGb3Jt
YXR0ZXIoKTsKKyAgICBtX3RpbWVBTVBNTGFiZWxzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIEFN
U3ltYm9sXSk7CisgICAgbV90aW1lQU1QTUxhYmVscy5hcHBlbmQoW2Zvcm1hdHRlci5nZXQoKSBQ
TVN5bWJvbF0pOwogICAgIHJldHVybiBtX3RpbWVBTVBNTGFiZWxzOwogfQogI2VuZGlmCkBAIC0z
MTUsOSArMzA3LDkgQEAgdm9pZCBMb2NhbGVNYWM6OmluaXRpYWxpemVMb2NhbGl6ZXJEYXRhKCkK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTA7ICsraSkKICAgICAgICAgc3ltYm9scy5h
cHBlbmQobmluZVRvWmVyby5zdWJzdHJpbmcoOSAtIGksIDEpKTsKICAgICBBU1NFUlQoc3ltYm9s
cy5zaXplKCkgPT0gRGVjaW1hbFNlcGFyYXRvckluZGV4KTsKLSAgICBzeW1ib2xzLmFwcGVuZChT
dHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBkZWNpbWFsU2VwYXJhdG9yXSkpOworICAgIHN5bWJvbHMu
YXBwZW5kKFtmb3JtYXR0ZXIuZ2V0KCkgZGVjaW1hbFNlcGFyYXRvcl0pOwogICAgIEFTU0VSVChz
eW1ib2xzLnNpemUoKSA9PSBHcm91cFNlcGFyYXRvckluZGV4KTsKLSAgICBzeW1ib2xzLmFwcGVu
ZChTdHJpbmcoW2Zvcm1hdHRlci5nZXQoKSBncm91cGluZ1NlcGFyYXRvcl0pKTsKKyAgICBzeW1i
b2xzLmFwcGVuZChbZm9ybWF0dGVyLmdldCgpIGdyb3VwaW5nU2VwYXJhdG9yXSk7CiAgICAgQVNT
RVJUKHN5bWJvbHMuc2l6ZSgpID09IERlY2ltYWxTeW1ib2xzU2l6ZSk7CiAKICAgICBTdHJpbmcg
cG9zaXRpdmVQcmVmaXgoW2Zvcm1hdHRlci5nZXQoKSBwb3NpdGl2ZVByZWZpeF0pOwo=
</data>
<flag name="commit-queue"
          id="181680"
          type_id="3"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>