<?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>88691</bug_id>
          
          <creation_ts>2012-06-08 14:48:01 -0700</creation_ts>
          <short_desc>[BlackBerry] Fix two problems introduced by the userDrivenSeekTimer in MediaPlayerPrivate</short_desc>
          <delta_ts>2012-06-10 07:07:07 -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>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Max Feil">mfeil</reporter>
          <assigned_to name="Max Feil">mfeil</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>jonathan.dong.webkit</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>645048</commentid>
    <comment_count>0</comment_count>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-08 14:48:01 -0700</bug_when>
    <thetext>The main fix that my patch covers is for short media. The m_userDrivenSeekTimer is causing unwanted repeats of short media such as sound effects because it is causing the current time to not reflect that the media has finished playing. This problem only affects media whose duration is close to or less than the SeekSubmissionDelay, which is currently set to 100ms. My fix is to ignore the userDrivenSeekTimer in MediaPlayerPrivate::currentTime() if the duration of the media is within twice the SeekSubmissionDelay. Seek drag smoothness is a non-issue for such short media.

I discovered this problem on the BrickBreakerRevolution game. The sound of the ball hitting the paddle or bricks would  repeat. I have written an automated test using a sound effect from the game.

A second less serious problem is the way the m_userDrivenSeekTimer itself is implemented. When MediaPlayerPrivate::seek() is called, there is always a 100ms delay even if the timer is not running! The timer is supposed to space out multiple seeks, but currently it is slowing down even single seeks. I fixed this in my patch by improving the way the timer fired function is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645054</commentid>
    <comment_count>1</comment_count>
      <attachid>146656</attachid>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-08 14:54:52 -0700</bug_when>
    <thetext>Created attachment 146656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645057</commentid>
    <comment_count>2</comment_count>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-08 14:59:22 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; ...there is always a 100ms delay even if the timer is not running...

I have not written a test for this part of the fix because a 100ms timing difference cannot be reliably tested, in my opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645330</commentid>
    <comment_count>3</comment_count>
      <attachid>146656</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-06-09 08:00:09 -0700</bug_when>
    <thetext>Comment on attachment 146656
Patch

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

Code looks ok, I have some questions, and one request: split it up in two patches/bugs, since we are dealing with two unrelated bugs here.

&gt; Source/WebCore/ChangeLog:19
&gt; +        is a non-issue for such short media.
&gt; +
&gt; +
&gt; +        Test: platform/blackberry/media/short-media-repeats-correctly.html

nit: extra line here

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:237
&gt; +    return m_userDrivenSeekTimer.isActive() &amp;&amp; !shortMedia ? m_lastSeekTime: m_platformPlayer-&gt;currentTime();

nit: needs a space before :

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:254
&gt; +    if (m_lastSeekTimePending) {
&gt; +        m_platformPlayer-&gt;seek(m_lastSeekTime);
&gt; +        m_lastSeekTimePending = false;
&gt; +        m_userDrivenSeekTimer.startOneShot(SeekSubmissionDelay);
&gt; +    }

could you explain why m_lastSeekTimePending is needed? I take it that it is because you are restarting the timer from within line 253, but why do we need it?

Also Max, I think we should do two patches for these two issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645347</commentid>
    <comment_count>4</comment_count>
      <attachid>146656</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-06-09 09:30:18 -0700</bug_when>
    <thetext>Comment on attachment 146656
Patch

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

&gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:236
&gt; +    bool shortMedia = m_platformPlayer-&gt;duration() &lt; SeekSubmissionDelay * 2.0;

Nit: you have a const for SeekSubmissionDelay, why not use another one for &quot;very short duration&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645385</commentid>
    <comment_count>5</comment_count>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-09 12:06:50 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:237
&gt; &gt; +    return m_userDrivenSeekTimer.isActive() &amp;&amp; !shortMedia ? m_lastSeekTime: m_platformPlayer-&gt;currentTime();
&gt; 
&gt; nit: needs a space before :

Note that this part is YOUR code that I left untouched. Are you saying you don&apos;t like your own code? ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645394</commentid>
    <comment_count>6</comment_count>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-09 13:09:45 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; could you explain why m_lastSeekTimePending is needed? I take it that it is because you are restarting the timer from within line 253, but why do we need it?

This flag is needed so that userDrivenSeekTimerFired() knows whether or not to perform the seek. The only case where this flag will not be set is if no MediaPlayerPrivate::seek() call came in while the timer was active, in which case it&apos;s important to do nothing. I could encode this flag&apos;s information into the m_lastSeekTime float, for example by initializing it and resetting it to NAN and using isnan(). But I feel that using a separate bool is a more portable approach. Let me know if you would like me to get rid of m_lastSeekTimePending and use m_lastSeekTime values of NAN instead.

&gt; Also Max, I think we should do two patches for these two issues.

I will split this bug into two...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645423</commentid>
    <comment_count>7</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-06-09 14:06:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:237
&gt; &gt; &gt; +    return m_userDrivenSeekTimer.isActive() &amp;&amp; !shortMedia ? m_lastSeekTime: m_platformPlayer-&gt;currentTime();
&gt; &gt; 
&gt; &gt; nit: needs a space before :
&gt; 
&gt; Note that this part is YOUR code that I left untouched. Are you saying you don&apos;t like your own code? ;)

I blame the reviewer then :p

&gt; This flag is needed so that userDrivenSeekTimerFired() knows whether or not to perform the seek. The only case where this flag will not be set is if no MediaPlayerPrivate::seek() call came in while the timer was active, in which case it&apos;s important to do nothing. I could encode this flag&apos;s information into the m_lastSeekTime float, for example by initializing it and resetting it to NAN and using isnan(). But I feel that using a separate bool is a more portable approach. Let me know if you would like me to get rid of m_lastSeekTimePending and use m_lastSeekTime values of NAN instead.

I thought of reusing m_lastSeekTime as well, but maybe that would not be so clean. I am ok with either ways, lets just add this info to the change log as well..


&gt; &gt; Also Max, I think we should do two patches for these two issues.
&gt; 
&gt; I will split this bug into two...

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645500</commentid>
    <comment_count>8</comment_count>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-10 07:06:09 -0700</bug_when>
    <thetext>Split into bug 88733 and bug 88732.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645501</commentid>
    <comment_count>9</comment_count>
    <who name="Max Feil">mfeil</who>
    <bug_when>2012-06-10 07:07:07 -0700</bug_when>
    <thetext>Closing - being tracked under other bugs. Patches coming soon.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146656</attachid>
            <date>2012-06-08 14:54:52 -0700</date>
            <delta_ts>2012-06-09 09:30:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88691-20120608175451.patch</filename>
            <type>text/plain</type>
            <size>15785</size>
            <attacher name="Max Feil">mfeil</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGEwOWYzNDcwOWE0M2Y2
NjE0OGQ4YjNlYTZmNjU3NTgwOTZkYTRjOS4uNWYzZmYwNDdhYTYzYzIyN2EzMGVkYzU4ZTQyZGM0
ZDExYjFlYmI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA2LTA4ICBNYXgg
RmVpbCAgPG1mZWlsQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnldIEZpeCB0d28gcHJv
YmxlbXMgaW50cm9kdWNlZCBieSB0aGUgdXNlckRyaXZlblNlZWtUaW1lciBpbiBNZWRpYVBsYXll
clByaXZhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4NjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlIG1fdXNlckRyaXZlblNlZWtUaW1lciBpcyBjYXVzaW5nIHVud2FudGVkIHJlcGVhdHMgb2Yg
c2hvcnQKKyAgICAgICAgbWVkaWEgc3VjaCBhcyBzb3VuZCBlZmZlY3RzIGJlY2F1c2UgaXQgaXMg
Y2F1c2luZyB0aGUgY3VycmVudAorICAgICAgICB0aW1lIHRvIG5vdCByZWZsZWN0IHRoYXQgdGhl
IG1lZGlhIGhhcyBmaW5pc2hlZCBwbGF5aW5nLgorICAgICAgICBUaGlzIHByb2JsZW0gb25seSBh
ZmZlY3RzIG1lZGlhIHdob3NlIGR1cmF0aW9uIGlzIGNsb3NlIHRvCisgICAgICAgIG9yIGxlc3Mg
dGhhbiB0aGUgU2Vla1N1Ym1pc3Npb25EZWxheSwgd2hpY2ggaXMgY3VycmVudGx5CisgICAgICAg
IHNldCB0byAxMDBtcy4gTXkgZml4IGlzIHRvIGlnbm9yZSB0aGUgdXNlckRyaXZlblNlZWtUaW1l
ciBpbgorICAgICAgICBNZWRpYVBsYXllclByaXZhdGU6OmN1cnJlbnRUaW1lKCkgaWYgdGhlIGR1
cmF0aW9uIG9mIHRoZSBtZWRpYQorICAgICAgICBpcyB3aXRoaW4gdHdpY2UgdGhlIFNlZWtTdWJt
aXNzaW9uRGVsYXkuIFNlZWsgZHJhZyBzbW9vdGhuZXNzCisgICAgICAgIGlzIGEgbm9uLWlzc3Vl
IGZvciBzdWNoIHNob3J0IG1lZGlhLgorCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vYmxhY2ti
ZXJyeS9tZWRpYS9zaG9ydC1tZWRpYS1yZXBlYXRzLWNvcnJlY3RseS5odG1sCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVy
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXll
clByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGU6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGU6OnVz
ZXJEcml2ZW5TZWVrVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5Lmg6CisgICAgICAgIChNZWRpYVBs
YXllclByaXZhdGUpOgorCiAyMDEyLTA2LTA4ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDbGVhbiB1cCBzb21lIHVubmVjZXNzYXJ5
IExheWVyQ2hyb21pdW0uaCBpbmNsdWRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5
ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAKaW5kZXggM2FjOTNlOGI0YzY3ZWQyZjE0ZmUzNjZhZjY1
MTI2Mjg0MGExMTA5Ny4uMGI3MjhjN2UzNGQ2YWMxMmRkNjI4NTNjZTY0ZTlmODU0NDE5OTIyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9N
ZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuY3Bw
CkBAIC0xMTAsNiArMTEwLDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlOjpNZWRpYVBsYXllclByaXZh
dGUoTWVkaWFQbGF5ZXIqIHBsYXllcikKICNlbmRpZgogICAgICwgbV91c2VyRHJpdmVuU2Vla1Rp
bWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6OnVzZXJEcml2ZW5TZWVrVGltZXJGaXJlZCkK
ICAgICAsIG1fbGFzdFNlZWtUaW1lKDApCisgICAgLCBtX2xhc3RTZWVrVGltZVBlbmRpbmcoZmFs
c2UpCiAgICAgLCBtX3dhaXRNZXRhZGF0YVRpbWVyKHRoaXMsICZNZWRpYVBsYXllclByaXZhdGU6
OndhaXRNZXRhZGF0YVRpbWVyRmlyZWQpCiAgICAgLCBtX3dhaXRNZXRhZGF0YVBvcERpYWxvZ0Nv
dW50ZXIoMCkKIHsKQEAgLTIyNiwyMyArMjI3LDMxIEBAIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZTo6ZHVyYXRpb24oKSBjb25zdAogICAgIHJldHVybiBtX3BsYXRmb3JtUGxheWVyLT5kdXJhdGlv
bigpOwogfQogCitzdGF0aWMgY29uc3QgZG91YmxlIFNlZWtTdWJtaXNzaW9uRGVsYXkgPSAwLjE7
IC8vIFJlYXNvbmFibGUgdGhyb3R0bGluZyB2YWx1ZS4KKwogZmxvYXQgTWVkaWFQbGF5ZXJQcml2
YXRlOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdXNlckRyaXZlblNlZWtU
aW1lci5pc0FjdGl2ZSgpID8gbV9sYXN0U2Vla1RpbWU6IG1fcGxhdGZvcm1QbGF5ZXItPmN1cnJl
bnRUaW1lKCk7CisgICAgLy8gRm9yIHZlcnkgc2hvcnQgbWVkaWEgb24gdGhlIG9yZGVyIG9mIFNl
ZWtTdWJtaXNzaW9uRGVsYXkgd2UgZ2V0CisgICAgLy8gdW53YW50ZWQgcmVwZWF0cyBpZiB3ZSBk
b24ndCByZXR1cm4gdGhlIG1vc3QgdXAtdG8tZGF0ZSBjdXJyZW50VGltZSgpLgorICAgIGJvb2wg
c2hvcnRNZWRpYSA9IG1fcGxhdGZvcm1QbGF5ZXItPmR1cmF0aW9uKCkgPCBTZWVrU3VibWlzc2lv
bkRlbGF5ICogMi4wOworICAgIHJldHVybiBtX3VzZXJEcml2ZW5TZWVrVGltZXIuaXNBY3RpdmUo
KSAmJiAhc2hvcnRNZWRpYSA/IG1fbGFzdFNlZWtUaW1lOiBtX3BsYXRmb3JtUGxheWVyLT5jdXJy
ZW50VGltZSgpOwogfQogCi1zdGF0aWMgY29uc3QgZG91YmxlIFNlZWtTdWJtaXNzaW9uRGVsYXkg
PSAwLjE7IC8vIFJlYXNvbmFibGUgdGhyb3R0bGluZyB2YWx1ZS4KLQogdm9pZCBNZWRpYVBsYXll
clByaXZhdGU6OnNlZWsoZmxvYXQgdGltZSkKIHsKICAgICBtX2xhc3RTZWVrVGltZSA9IHRpbWU7
CisgICAgbV9sYXN0U2Vla1RpbWVQZW5kaW5nID0gdHJ1ZTsKICAgICBpZiAoIW1fdXNlckRyaXZl
blNlZWtUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3VzZXJEcml2ZW5TZWVrVGltZXIuc3Rh
cnRPbmVTaG90KFNlZWtTdWJtaXNzaW9uRGVsYXkpOworICAgICAgICB1c2VyRHJpdmVuU2Vla1Rp
bWVyRmlyZWQoMCk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjp1c2VyRHJpdmVuU2Vl
a1RpbWVyRmlyZWQoVGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiopCiB7Ci0gICAgbV9wbGF0Zm9y
bVBsYXllci0+c2VlayhtX2xhc3RTZWVrVGltZSk7CisgICAgaWYgKG1fbGFzdFNlZWtUaW1lUGVu
ZGluZykgeworICAgICAgICBtX3BsYXRmb3JtUGxheWVyLT5zZWVrKG1fbGFzdFNlZWtUaW1lKTsK
KyAgICAgICAgbV9sYXN0U2Vla1RpbWVQZW5kaW5nID0gZmFsc2U7CisgICAgICAgIG1fdXNlckRy
aXZlblNlZWtUaW1lci5zdGFydE9uZVNob3QoU2Vla1N1Ym1pc3Npb25EZWxheSk7CisgICAgfQog
fQogCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZTo6c2Vla2luZygpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVy
UHJpdmF0ZUJsYWNrQmVycnkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Js
YWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCmluZGV4IDBhYzQ2NmJlYzhl
ZTg4ODExYTFiMTY0MGI3MzUyYTkwOWM4NTM2NWUuLjE5YjY1NGNmZjdlNTg3MWNlZDRmMzBiODgz
ZmUxZTMyMjg5ZGY1OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRl
QmxhY2tCZXJyeS5oCkBAIC0xNjYsNiArMTY2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVzZXJE
cml2ZW5TZWVrVGltZXJGaXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+Kik7CiAgICAgVGlt
ZXI8TWVkaWFQbGF5ZXJQcml2YXRlPiBtX3VzZXJEcml2ZW5TZWVrVGltZXI7CiAgICAgZmxvYXQg
bV9sYXN0U2Vla1RpbWU7CisgICAgYm9vbCBtX2xhc3RTZWVrVGltZVBlbmRpbmc7CiAgICAgdm9p
ZCB3YWl0TWV0YWRhdGFUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZT4qKTsKICAg
ICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGU+IG1fd2FpdE1ldGFkYXRhVGltZXI7CiAgICAgaW50
IG1fd2FpdE1ldGFkYXRhUG9wRGlhbG9nQ291bnRlcjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODQ0MmFjNzZkY2FiYzA5
NjAxZDI4YjYwMTAxNDYwMDQ1NjgzZDJiLi5lYTI2Mjc5YmJhYTNlYWFkZDVjNmIzMmQyZTAxZmM2
NzM3YTg1YmI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDYtMDggIE1heCBGZWlsICA8
bWZlaWxAcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gRml4IHR3byBwcm9ibGVtcyBp
bnRyb2R1Y2VkIGJ5IHRoZSB1c2VyRHJpdmVuU2Vla1RpbWVyIGluIE1lZGlhUGxheWVyUHJpdmF0
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg2OTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0IGZv
ciBwcm9ibGVtIHdoZXJlIHNob3J0IG1lZGlhIHJlcGVhdHMgdW5pbnRlbnRpb25hbGx5LgorCisg
ICAgICAgICogbWVkaWEvY29udGVudC9zaG9ydC53YXY6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2JsYWNrYmVycnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHktZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L21lZGlhL3Nob3J0
LW1lZGlhLXJlcGVhdHMtY29ycmVjdGx5Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA2LTA4ICBTdGVw
aGVuIENoZW5uZXkgIDxzY2hlbm5leUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViQ29yZTo6
SW1hZ2VCdWZmZXIuY3BwIGhhcyBicm9rZW4gY29sb3IgdGFibGUgY29kZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWVkaWEvY29udGVudC9zaG9ydC53YXYgYi9MYXlvdXRUZXN0cy9tZWRpYS9j
b250ZW50L3Nob3J0LndhdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjg3YWYwMWZjYzZlMWRiZmM3NGQ2ZWY3ZDQ0
NjljZGJmNmYzZWI5CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA0OTIwCnpjbVdOVFdtSj8yMUJL
dDNna2hNMDBjbFdMNURYTXM1RUJEajZ6ZytXdUBrVSQ/RzwkYGpKNFpjYnJEb1I1WVNhWgp6NUt1
KEFkdGlWOHJyKGF3LX1qeiM/fmkrKWJDPUFVSnYtMH0wSFE7ZCZEeXdRa0U8bUIwM1pNWFZhV2hz
bkY7fDIKelU8c15XeUp4TldQWTxkVEJJMz8lVURlJWxvQSMreCNgM050JWFeSndoZFRZNWs/Vit6
QHZ2IUg7RjN4Y2NjODRgCnordFF4azhpQlQwZDBieXNANU17MTN2ZyU/e0UqIVZEZEVgZzhNSXY+
cWkoZ2VzMGA3c3N5JGNZLU1fdjNDTUJ5ewp6PmghJjRpcEstaDRRWkdtbUZfbmoxMFJ7QG4/S1Jy
d1JkSXt0Vj9YcGdQcGNLVjx2eCo/aEJNVVhmQXJwYX0+MEMKejJyV19yRzFuSGtFKGx7d3JtcFlH
b3dUdFV3c3ZjMih3PFNhe0BBVFFTIyQoUWBFa09gdzw/aGN0OEs/ZDdiSSNgCnpVKEVhYk9BWSRN
dTc4bGRqSGkyeCYzNTFOYVppR21FKUUlfitMaUEzYz11TTxDN1RQeV9nNmc4bVgzZWZvRyhLXgp6
aGlkWSYoa3BFOUAwQ3VpdSs0MzEkJHhqRTw3aUk5KDZkakNZSSFsSERKalleeCZOMzxfT3k/T2d9
UiR1QTFLRSsKemlickNFPj5sa1g4d1FDU3c9a0V6M0o1IXxMaj5YNmtHZXwhR3hTanBoR0xER25o
IT1fe2ghbillaFRocSpDTjx5CnpSYzx2KEkkWSl8JU18LWN7O2Bzb3VFPjlNR3plVlV8QStUJEhl
LWpvOWpNKUhSZmU5SGYoQWxkcUAwVzsrYXE3Ngp6QHQ0RTAhcXFGK05iey0+JiEyRnN0bF9yaitV
TWxQJWQqYFQ9ZmEySGdtKFQ+YztxRUl7QG45aHlONF8wd0l6bCkKej1pamRLbjRYcExgfkQoRnVm
Q2lKaGF9SkwjJks2YVkrTGA7PnNafiM8P28tYGtwaURoKj1eZ19iKXlaVkMtZ0JICnooaDAqcFJ+
JTNOYFlneFh7cko+aEg8Y0srYlVIOFdlKTszSklKQCg1RiYyfl5yWUxTYXJsOUxWSm9KOW97bmwm
SQp6MlRKJE95WCFaejAtSnhqVlJUYyQwXlIzXm4wVmphRWZaRipEMUJzISUmR3F6Pip2TXkkbytU
VFMtfXhSemMkJnsKeldvRjZCPnVTdmche2FuUks2YXUwaUY8fXBuTGJeNilja3hRejJjSFRTe356
Yj0mSFFUZHZOJGVHKDVOXiM+cHlCCnpAWHAkXmd+fT91eHFReT5SM184MnRIaCRUI25tUSUtI1E7
fWlgczgxbWZ4Nld5KnJLaWxJczhWIStxZUdnRXpjKAp6cmFHZiliKi16aXpnX19lejRMZTJTeHNM
N2V3dWhzVUZDUzgqZ3JlTTAxRCMkNHArNzQ7ckJ0UVRaWWN2NUtkOyQKel9qNnhQYXdePnN7THc3
QV5UNHtPS3hSJStPa1ZseCYyYVktUTtGY1E7aEphbXloKVlQKWxWTUpHdWQ/e3pXKWNeCnotZSpp
JlkmUis2Yk5UdmV5OVgoanBaKz8pSlZxMWhIcmMxWjRha1NVdXp2VHg/PzhSP2Npe3JORFY3RTlT
c3BpeQp6YUJ2RkxGN0BAaj1sZXNuWiUmZG5BQzN9KWl0ZGUmJkhObj1teyE/OEI9T2ZSdXh9Rmw7
VDd4ZmRnX34kKWwmV2sKemFuYW8jXjItY3B5PXImUzFOUUc4ZEZPeUdZfW0xO091eEl5N3EjQkNS
JXkrV3ZpR29Raj5KaTRWZV47T2V3I0A5Cno2JSMpV1QySU11MGNhNGNzWXxkdiRVYyU0amxCJXlQ
TUhYcEllQE1rPWJhZTN4fkI0YjkpRVgjVTI2cEkrUThjWgp6UzlufmhrZVp9M1B5Jkk4Y1NpRj84
ZG1ya3Q/Tz9uWiMzM2FhcTU2NzVgVXImaFhgSUImKTwwX3dacHIqejZ9b1EKelU5Vm14Sn1NTkxO
VjlfKXNxbnJiVSNiTVJOVDFXfE1vUkV5YzV9Xmc8OyFLVzFHOWx1NlI2JkoqYDVBQzZXcDh5Cnp3
SlV3aT89KldESnlkZiN5Qm8qcVJkeDNMWEJ4TE8/YEh5UF4wND5wXn1jTE5QRjs8S0Zhclo7dW9r
fWlVPHBzSgp6YEdvJWxQZSswIWRtWWw0N35nZEQ2XkEjSlFRI3R1XipGLUJgT2xUSyppUkY5UE1s
YyRiZCllPldpX3RCM29iVnUKelpfRzx5VW9gJk4rdVVmWU53PnJPKkNJNyh2LWx1KkhsNHBMbks9
fFJGMD9teSRUQzVfRE5vdGJtbTMtOCh3akQzCnpHNkMqKkpLfXRSUV8xUFFPRlR+YSg8fTReNn40
PFdoYnJZXjl1M1dRS3x5RjVXbUFTY0U0YUxCKWB1fTtoREthbwp6ZVBDSD4kblpUJnpFZnQmXzBo
IzI9a0t5T3hpPSgycy1FTXpfckthUXMlb0lVal47SnJTb3V0UjUjRjw/Q01+OT0Kelh2JS10YWVF
Sld4JW58R2UyVjt7WWl4ZzJIKmNMfUA9JVNNX28+OWJiTmhzajYjR0w+bWk4KVcoYXRqY1hxMFRL
CnpVMUhodk91a2laRU8zc1ZifUhZMEAhOzgqP200fEAtJGJGdiF5UkRvKTJxV1N7P3BxdU4hRStN
Nll7TFNZVnl8PAp6RHE1SjxzR0h2ckkocSZkWWd4I1ZzMGd1Tkt4SjlkNys5bSQ9TE1FODQ1PEEm
eVNPbUQ8MHVwTz93O19wQWRgTEsKenc9OFM9eW1RQEMrN2lReStRZEc7T3Uxajw5SlcoRSghNHVn
UytsQ0hgXm4oVTFmOVdyIyp8dVckWmNoUj1Dczh2CnpLUCtPUWQoZCRwbz1HT2x5Sm9zZj5+V2ty
ZDBKZVImKGFaWnV6e1VUPV4wdURRQFBDWF9rZGxKOEJASCltT1A+UAp6RGVKZEJ5TztXWnM5U1Y0
dDVGcHBnUj51NzV2SzcmaGVGU01KIVBAZ1VmQ05XSV8zfmgtbjlQSkVQbTctQFE3O30KenR6WlBh
V2cxVlEhZ0VHKl93WWw/O1RfJFdOM05IZGpvfWtaJT9OOGdIJFQzOG10bTs+VWlua3VtKENIO3hg
NDtrCnp0cmo3QHFQaUJ8Jkd5NF5salooNCVLbUtnTGVwOEFaMjdLRENEVXtQdlJsU2N5ZlU0anlH
UGZtPjdYWkQpJGohKQp6aExEZGtiM3IxYTAwMmNlWi1kdlEtZmNudVh+emdBYmJzJHVucURAS0g0
fEUkIzxneDRZN3lfZ1VNYlNIP1NyUyoKelVtaVQ1RWJhZiFvJEx6LVVXalhyP2U+JD1RRzZSUzUw
TiNoYTZEaTZUd2M7TlBUOGpJdDQ9cXBaJEdWWkdzPC15CnpgWTxTaVRTO3QoaG5QRVhBVjEkP3NA
WE1PbHUjbnlONEZyV2gtQT9kO0hBfTNlWSZ5VUZybH5IYTZyREhYVFZ+RQp6N05mX3V2OEZFe3ZC
RmJ8PD9sQ3x0QjMjZ19naGA3PD4tfDdoQH0+Y25lVGsyKFdFe3BFUFpWYlopeXZsI2RrUHsKemN8
O01sSHc9NCpgKCNMVllfZmV+PV50VjlIcGc1N192Q2YyOU01KDReSllzUTM3R3t9Y2VEMEpqcnct
UllxNClTCnpzOXElUmBLO0N5P01qVW5qdy0lMVB2WjQle01vU2cjVjUkdyNfUjglRDwoVHVPRWJL
OXA+YXJQUT1EMExAIzM2Mgp6cF4+QCE3RGw+SFg9c350cy1tTFRJV1Jvc0stM0g0UEIqaXVeK0tE
OE0pNE4pTU8oU0NRfms+MEJzeHk5JTEmWioKemI4TjJCeFJtaHZJMyNAOSRLQWZ9bXstTTJwVk1W
bTtWKmApZSheOWRgZEtHM0VOUzVCMlBAdHdeITsxS1BNI3xwCnpFcUw/bnVEPjVYe2ZkKUQ1PEJJ
UShvVWY/WXtsaiZZVzRkT29famBaRVk1YzxOTlg3T2hwZkp+TXckO0BBK30ySQp6ZGhieUQmQ2xW
JVJEIXYrbFk7SUZlMSU/c1VWISNoTXIxI0ZnK0FqfHNCJUdtUT8pZ1hreGM4XyZPYWpVKk0kdTQK
enNNYXpuS352ISQmVTRYYCg1OWRoZ0ZZX1BfYDlmSVJNJTdxZVV+Y3pXV3oxMUt5enQzcD5LK3Ba
ZjImIXBDJihVCnpaVDNoKXFme34yezt3fns/cGByRSRNeiooP2IlN3F3WWIqeE8yYypnIWc2allw
aGMjKW1wSHMxMWQpJSE7Xz0+Ygp6TDheNTNzNWJNfjVaJU1fSVA2Nks4KkxhbW5yOTlqOTFNbzhz
VTkleEkrZ2lrXjtfYmF7IUlIPCtePUswY213d3gKelBPfmMtZExgQk1SNUkoO2lGRCl1LV8hezAp
QlkhTCl9fFVOQEdma3IjVVNVUmZOJjNSOE9AUDZ4PWxFU2NTTEY+CnpQcVM/bEVVPzQrNG0rKUNF
fEJjMGJRK3A5QGNEfSE9d0RlZnhDYEImRTV3e29IIXtFTCNeQTJMdDM5YTZtaHUzdQp6a208fUdv
aCM5VF81d2o+elJiVmt0O2A4PkJzSkNlbkYjXkVhZzZQMng8WWdaSnhmPntPMzQ3LWI4TTlIZnZ5
XjgKejcrZ2NvRiZLYlJ0UGlpIUVDbSFwYHswKj0yUShVUyMmKEk7NVApY0c3ZTxjbndDe3spZ31W
REp4M2B8YHRGeDZCCnp1bHw4RDwxKnVYbz8xI3w7V0t8JXtASnoyX34+T2h7cDBKWWtzZCNATStW
SCRFRk9yb0ttMldmXmFyO0V2Y3pSKAp6I3I8WCFsYWBraD4/dTgwZHZCcmNaRU8xIXZ5Vnh1cnlY
bHs0enZxUWtlYGdHWXE+KztQMj1ZQDM2YGgxakBkKGgKejN3ITZtUlFjR25jZUxjJTRaaCUxYSpm
X0MoQjR8bXpze3o3PXdfdjg7PH1FQGo+a05nbi1Yb2NublgqMz58KCtBCno7OTJaK3pVUjIoPHs4
TFJJfEduMVQqPVNsNFMydFVadntGVD5zZUE8b3Q1QWlpeyUodk1fcGA8YjRlNjl3NyMlMAp6Py12
V2gxVCMkfDB4ZiYwa2M9K3AwKSlFI3FUYUUmZG9pQHV4M258Y1Z3ZmhQez0zVUwrPT42ZT17NUl8
TkZMVEUKentNaVpGaSZnYnBhcmd4XjNnQCM5XjAkVCg+WTxmdjsxfUxMKFIqbnlKPk1BVEIya3RJ
Y0ZPWHBYUUNYZGI8VlJqCnpRTTNyIy1gYnxMRiRJRSRSa0BaP2VUNEwpZ154Ym8+PSljPHh3VUp+
ZktyeEthenptPXhHajAoSEUwPztFUF9uYQp6SFdOMU9VIVhgSmxKc19VMWlDZFlQX3t9LXw2fGgy
Oy1vTTVraXY7fiohWlY1TlNSNnA+ZHFzWmAyTyV5Jjw4U1UKejc2TFBRLWxpSjYqWUt9TXRHSE1Y
aUJkcitNX1BOcGVLeSsjSWtMdDBkS3lOWE9qK1E2V0BlYlBoI2Q7aHAzeWgtCno/TDtSUzdTcGVv
KUIyVXpgaEtnblg1LVBgKXVnTk84R1hjJVkwU1dqRy10XnticHF3aVN4e31fQCQ/TXtoQmd4YQp6
VEZkfm5RZGM8Q1ZtYXB0KkhUTzJEY0Q1dWNqZ3cqQzdifiNhRExLRysrRmF7QElqY1FpYjVhaV9x
SWx9ZDgje3gKendWWlV3U0ZfVWVyK1BWMlBZZzQ8QXlAVF9TVzc2MDRiP3x0ITNJcUFmRXp9S24l
dm5OKVdwSCMldCRKaEotfnMmCnowTGdwNiREKSpxeiRVUU14SHNHPEBFTzFYRjtwZlVONiNgPGdZ
bXEoXyhoPWBjYjhub1IpU3txUiVSdHEmV3xQbQp6PkZtS1BfIypVX0YmQjVDZzMhXjFJLXxMMTFo
eCt+TV5+ViRDQHE9SHAyNDxhSX1OamBJS3c7WXY5WDNVJEtLTDAKemhIclF5LWl8Sz47LVQ0YEgl
SjRBZmpCeEljKjlPKm5xV1RmN3Z2OyRtPHZJVHNGQ1g8MnFGPnVBMTl7e0EmdS13CnooPzBNNl5P
KWgtOUtlek00V2soa3Y9XjZpNzEmQnJLKmVCNkVaO0RpeWxkcEtVZCUwNEt1djt7KEk5dH12IWZU
WQp6ZT14aExFdWFaZ3ZjWk5xdE85Pz0jP1leVFNKVnZuMXZHfn4mRT9UNkBFfj9JUUFNMGJ6cTAz
em82STdDa2dofVEKekx5Zk1nS3JIWFBBcDErd2Z3eDtQQiFCQlQkVU52Z1p1PHModTVmbXsxRWpt
JUNrYD55VnpaN1V4dmZSTilARTNhCno+M2FWfipyI1ZCOFZiVEtmZGRQZnYqb3ZKeDNATGhSUHBX
ej5PSkNeNUFyMmNDaC0rLVFIUDZ4OSpNYXBjcDclKAp6JiEpODYxbjcheEhNYSs/bCUjODtDQVdt
QD1yP1FAX2U/R0pJZmchI1V2QG5ZOXZxJWR7dipIMGBAM145eENgJUsKelBYWVBkWChuQ05pI0pq
fCNzS21sd194eFY8aiV+ajg3KkpkVGBjdyVPLUJjOUVkeztlU0c7JDs/WiNvY0dFNzBICno4MnQ1
bUQhTlhCb05xa316OHJGcFNlVXNBditZOVlPVDI5MUwxS2l9VEVQfn00bmQpNG9iVlI+XlNZdnVi
Ui05MAp6LUVeTW1BeV9qd21pP1hmMUA8RiljKFVBJXt3OTJkRkM/eHBhP0Z2ZldFSmNAezJLSiRX
WF51MWU/YHwpbGtmbjEKekszPWJqcmRSZCVAX21nVnUjfE5he0VKemAtUHsjIUZJeGdITW0leyMh
cWVtPlF4Xll8KT4jTjVKbjskUEdBPm5HCnpMSHRjOEcxdXs+dW5aaTxXZFR3K2hxJXF8VmtMfHBK
NGliVGRXXkd+UU1pPnBpUD9yRig4MEtsekhJYkVjPXs4Ugp6aHkrTHtXO3ZabW9QaXBSKFFwV0w1
aDx0NksocFdzWGFIenU/PW1PWiQ7Mzh6R3dwMHZObHpBITdVKzJ5IWpvKkQKek5YN2pRQj9JO0Y1
YHNeXnJQP1NUYFpJVHNfRzRDMnlfQUJpI09DNURfO3orRkduMzlAMClUakkydjhEUE5ETHVeCno5
PGVYakkkVEtJRyR8bCZWaiZrclRtPjVxKld2bFZTfnc0RU1PZWdeOF5PMEMtIU8rajhTTW5SQS1e
R2UhNGxxQgp6Vko5MkZ6cnN1Z0pJRTdVRHtEXykyRyFJbV95allHNkVrO01tX2JNekc3WHooVDht
fHk9Q2F3d2pYKTxGMiMxcjgKeklDdG1eU09rWkc4VD4qamcxJDw9TGxiIzdAeTd5Uil8ZEE7X2xZ
aFB5dWM8M3dsbTktYlFZJmgoSGNGMnUtSjhlCnpCdEhTKCQtbCRoMEY3OENXa0YzUWUqTVY9TXxL
bGhqalNXdTsyMWNLUy1Ad2hRKmFsZEJBd1k7VDhpXz1HUW49NQp6UURnKzxmKHMmdXo+JWtoKGUh
NWc5Pz1IZkd6SkxeWCVTb25SKWcxZ25aUEdlRUQ7NVNucUhhfjZac3w/QFB7Y3wKemtpfFRNT0pO
XiZLSjApYTVRfXpFP29eV3IxP0wjdkJZU1dLZSttIStuRlFEOU9OZnpCMEotRjRkPH5VaT5XNE89
Cnoza0I8ZFNTWCM+JGN6IShDKkghZGlScEE0ZCgkKXo/OGc3JWVXT0c4VmY9bEpRfjtDNUkyYlJi
ViN0cVpJUSM9ZQp6a1VWTT00NiFmWlgyaXN0N2V2cjgwSDVoI0ducTIxMH1kY0EzJSl+TXliYGBR
Y1N5SnEtR0dlNHgoSjMmQjUlU0MKeldjMUchV1lWOGA2dGZSJHt6KCYwVCpCekVvdSYlbmw0KEJ0
OHFXb3pwYCUxQkBHcTBqZUoxWmd2NlBEWiFqK0xSCnpZelozK3RZKzNqVkd6WjFATUd4K2NuYDZK
MyEqUU9fYzxZYm5CeW9yaiRAblg4LVNYdTxQeWpWKXttJkJyOz9GKQp6RHhGTHdhclgyRHRgQV53
Qk0/UHdxJjBMaGJBWnt4WmZDYUFUaUNtdEZaWWE3ez91PktmeWlqdThATmcjajV+ZG0KWDd8KDZO
X2smfkVNOTNHSzJyTEVObXs5S2o3OUFPNwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1tZWRpYS1y
ZXBlYXRzLWNvcnJlY3RseS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L21lZGlhL3Nob3J0LW1lZGlhLXJlcGVhdHMtY29ycmVjdGx5LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jMmM2YjNhMmQzNjU3YjNkNWJjNDNlZTY2ZjA5MjYyNDZhYTUxYzM5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9y
dC1tZWRpYS1yZXBlYXRzLWNvcnJlY3RseS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMiBAQAor
VGVzdCB0aGF0IGEgdmVyeSBzaG9ydCBhdWRpbyBmaWxlIGRvZXMgbm90IHJlcGVhdCB1bmludGVu
dGlvbmFsbHkuCisKK0VWRU5UKGNhbnBsYXl0aHJvdWdoKQorRVZFTlQocGxheWluZykKK0VWRU5U
KGVuZGVkKQorRVZFTlQocGxheWluZykKK0VWRU5UKGVuZGVkKQorRVZFTlQocHJvZ3Jlc3MpCitF
VkVOVChwbGF5aW5nKQorRVZFTlQoZW5kZWQpCitFVkVOVChwcm9ncmVzcykKK0VWRU5UKHBsYXlp
bmcpCitFVkVOVChlbmRlZCkKK0VWRU5UKHByb2dyZXNzKQorRVZFTlQocGxheWluZykKK0VWRU5U
KGVuZGVkKQorRVZFTlQocHJvZ3Jlc3MpCitFVkVOVChwbGF5aW5nKQorRVZFTlQoZW5kZWQpCitF
VkVOVChwcm9ncmVzcykKK0VYUEVDVEVEKHByb2dyZXNzQ291bnQgPT0gJzUnKSBPSworRU5EIE9G
IFRFU1QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2JsYWNrYmVycnkvbWVkaWEv
c2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHkuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2JsYWNrYmVycnkvbWVkaWEvc2hvcnQtbWVkaWEtcmVwZWF0cy1jb3JyZWN0bHkuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jZmIzNzBmOTNiYzYzZmMzNGMyNjQ0OTcwMDgyYThiYmQxZDVlZDI5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vYmxhY2tiZXJyeS9tZWRpYS9zaG9ydC1t
ZWRpYS1yZXBlYXRzLWNvcnJlY3RseS5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzxodG1sPgorICAg
IDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgiPgorICAg
IDx0aXRsZT5TaG9ydCBNZWRpYSBSZXBlYXRzIENvcnJlY3RseTwvdGl0bGU+CisgICAgPGJvZHk+
CisgICAgPHA+VGVzdCB0aGF0IGEgdmVyeSBzaG9ydCBhdWRpbyBmaWxlIGRvZXMgbm90IHJlcGVh
dCB1bmludGVudGlvbmFsbHkuPC9wPgorCisgICAgPHNjcmlwdCBzcmM9Li4vLi4vLi4vbWVkaWEv
dmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0uLi8uLi8uLi9tZWRpYS9t
ZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGZ1bmN0aW9uIGVy
cm9yTGlzdGVuZXIoZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ1Jlc3VsdChmYWxz
ZSwgIkNhdWdodCAnZXJyb3InIGV2ZW50LCBtZWRpYS5lcnJvci5jb2RlID0gIiArIHRoaXMuZXJy
b3IuY29kZSk7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBjYW5wbGF5dGhyb3VnaExpc3RlbmVyKGV2ZW50KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGNhbnBsYXl0aHJvdWdoKSIpOworICAgICAgICAgICAg
dGhpcy5wbGF5KCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwbGF5aW5nTGlzdGVu
ZXIoZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQocGxh
eWluZykiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzTGlzdGVuZXIo
ZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBtZWRpYSByZXBlYXRzIG1v
cmUgb2Z0ZW4gdGhhbiBpbnRlbmRlZCB0aGVyZSB3aWxsIGJlIHRvbworICAgICAgICAgICAgLy8g
bWFueSBwcm9ncmVzcyBldmVudHMgcmVjZWl2ZWQsIGluIHRoaXMgY2FzZSBvbmUgcHJvZ3Jlc3MK
KyAgICAgICAgICAgIC8vIGV2ZW50IHBlciBwbGF5LiBJIHRyaWVkIGxpc3RlbmluZyBmb3Igb3Ro
ZXIgbW9yZSBpbnR1aXRpdmUKKyAgICAgICAgICAgIC8vIGV2ZW50cyBidXQgbm90aGluZyBlbHNl
IGlzIGJlaW5nIHRyaWdnZXJlZCB3aGVuIHRoZSByZXBlYXRlZAorICAgICAgICAgICAgLy8gcGxh
eXMgaW4gcXVlc3Rpb24gb2NjdXIuCisgICAgICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKHBy
b2dyZXNzKSIpOworICAgICAgICAgICAgKytwcm9ncmVzc0NvdW50OworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gZW5kZWRMaXN0ZW5lcihldmVudCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc29sZVdyaXRlKCJFVkVOVChlbmRlZCkiKTsKKyAgICAgICAgICAgIGlmICgrK2VuZGVk
Q291bnQgPD0gNSkgLy8gU2V0IHRvdGFsIG51bWJlciBvZiByZXBlYXRzIGhlcmUKKyAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KCJjb250aW51ZVRlc3QoKSIsIDEwMCk7IC8vIEdpdmUgZXZlbnRz
IHRpbWUgdG8gY29tZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldFRpbWVv
dXQoImNvbmNsdWRlVGVzdCgpIiwgMTAwKTsgLy8gR2l2ZSBldmVudHMgdGltZSB0byBjb21lCisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3QoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoKytyZXBlYXRDb3VudCA9PSAxKQorICAgICAgICAgICAgICAgIGF1ZGlv
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzTGlzdGVuZXIpOwor
ICAgICAgICAgICAgYXVkaW9FbGVtZW50LnBsYXkoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIGNvbmNsdWRlVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RFeHBlY3Rl
ZCgicHJvZ3Jlc3NDb3VudCIsIHJlcGVhdENvdW50KTsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRvY3VtZW50LndyaXRlKCI8YXVkaW8gY29udHJvbHM+PC9h
dWRpbz4iKTsKKyAgICAgICAgdmFyIGF1ZGlvRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCdhdWRpbycpWzBdOworICAgICAgICB2YXIgZW5kZWRDb3VudCA9IDA7CisgICAg
ICAgIHZhciByZXBlYXRDb3VudCA9IDA7CisgICAgICAgIHZhciBwcm9ncmVzc0NvdW50ID0gMDsK
KyAgICAgICAgYXVkaW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0
ZW5lcik7CisgICAgICAgIGF1ZGlvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhy
b3VnaCcsIGNhbnBsYXl0aHJvdWdoTGlzdGVuZXIpOworICAgICAgICBhdWRpb0VsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigncGxheWluZycsIHBsYXlpbmdMaXN0ZW5lcik7CisgICAgICAgIGF1ZGlv
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGVuZGVkTGlzdGVuZXIpOworICAgICAg
ICBhdWRpb0VsZW1lbnQuc3JjID0gZmluZE1lZGlhRmlsZSgiYXVkaW8iLCAiLi4vLi4vLi4vbWVk
aWEvY29udGVudC9zaG9ydCIpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="153984"
          type_id="1"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
      

    </bug>

</bugzilla>