<?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>136631</bug_id>
          
          <creation_ts>2014-09-08 08:05:47 -0700</creation_ts>
          <short_desc>Buffer images on network process side</short_desc>
          <delta_ts>2015-11-30 07:45:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</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>136667</dependson>
    
    <dependson>137692</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ossy</cc>
    
    <cc>psolanki</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033856</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 08:05:47 -0700</bug_when>
    <thetext>We can substantially reduce IPC and decoding time for large images by allowing some buffering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033859</commentid>
    <comment_count>1</comment_count>
      <attachid>237789</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 08:26:21 -0700</bug_when>
    <thetext>Created attachment 237789
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033862</commentid>
    <comment_count>2</comment_count>
      <attachid>237790</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 09:06:06 -0700</bug_when>
    <thetext>Created attachment 237790
patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033866</commentid>
    <comment_count>3</comment_count>
      <attachid>237789</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-08 09:21:46 -0700</bug_when>
    <thetext>Comment on attachment 237789
patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:101
&gt; +    , m_bufferingTimer(this, &amp;NetworkResourceLoader::bufferingTimerFired)

I’m surprised we still only have the static member function version of this, not the std::function version, but I guess that’s where we still are!

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:252
&gt; +        // FIXME: In reality we always get -1.

Would be nice to have a slightly less mysterious version of this comment. What’s the right thing to fix this, for example? Stop pretending we have the encoded data length?

Also it’s kind of lame design to have an optional number where “I don’t know” is represented by -1. Seems a little old fashioned to me. Anyway, you’re not adding this, just commenting on it.

If this entire thing doesn’t work anyway, then why add m_bufferDataEncodedDataLength at all? All the code that manipulates it seems confusing.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:254
&gt; +        if (encodedDataLength &gt; 0)
&gt; +            m_bufferDataEncodedDataLength += encodedDataLength;

I don’t understand why it’s OK for m_bufferDataEncodedDataLength to just be wrong when encodedDataLength is -1. There doesn’t seem to be a flag here saying “m_bufferDataEncodedDataLength is meaningless”; instead we are using 0 as a magic number to mean that. It seems better to have a “unknown” value and set m_bufferDataEncodedDataLength to that if we ever get a buffer with a -1.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:270
&gt; -            sendBuffer(m_bufferedData.get(), m_bufferedData-&gt;size());
&gt; +            sendBuffer(m_bufferedData.get(), m_bufferDataEncodedDataLength ? m_bufferDataEncodedDataLength : m_bufferedData-&gt;size());

I find this confusing. If we are sending a buffer and we know its size, why would we ever use m_bufferDataEncodedDataLength instead? Would it even be correct to send that instead of the actual buffer size? Would it be helpful in some way? Change log does not shed any light on this.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:416
&gt; +    if (m_maximumBufferingTime == 0_ms || m_maximumBufferingTime == std::chrono::milliseconds::max())
&gt; +        return;

I am not sure that either of these checks is needed.

I understand that 0ms is a special magic value to say that we should not buffer at all. But it seems that in that case we would not create m_bufferedData and we would not get here. So I’d think we could assert that instead of doing an early return. If we did want an early return, I would suggest checking m_bufferedData rather than checking m_maximumBufferingTime directly.

Do we need the max optimization? It seems sort of elegant to never call start on the timer, but is it important to optimize? Maybe to keep from putting unnecessary timers in the timer heap?

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:428
&gt; +    size_t encodedDataLength = m_bufferDataEncodedDataLength ? m_bufferDataEncodedDataLength : m_bufferedData-&gt;size();

I don’t understand this rule here either. Same questions as above in the sendBuffer function.

I also wish we could share more code between this and NetworkResourceLoader::sendBuffer and its caller. Both are sending the same message with the same rule about encoded data length.

&gt; Source/WebKit2/Shared/Network/NetworkResourceLoadParameters.cpp:50
&gt; +    , maximumBufferingTime(false)

I think we want 0_ms here, since maximumBufferingTime is a time, not a boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033867</commentid>
    <comment_count>4</comment_count>
      <attachid>237790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-08 09:22:31 -0700</bug_when>
    <thetext>Comment on attachment 237790
patch 2

See my comments on the older version of this patch. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033927</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 12:46:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; If this entire thing doesn’t work anyway, then why add m_bufferDataEncodedDataLength at all? All the code that manipulates it seems confusing.

I think it may work on some platforms. -1 seems to be coming via callbacks from some newish CFNetwork APIs.

I cleaned it up to be more consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033928</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 12:49:27 -0700</bug_when>
    <thetext>&gt; I am not sure that either of these checks is needed.

Got rid of them both. I believe max duration timer does get added to the timer heap but there are probably never enough loads for it to matter. Also we could optimize them away in Timer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033929</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 13:02:51 -0700</bug_when>
    <thetext>https://trac.webkit.org/r173394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033936</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-09-08 13:29:18 -0700</bug_when>
    <thetext>Shame about the title</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033940</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-09-08 13:48:43 -0700</bug_when>
    <thetext>Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034081</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-09-08 23:43:08 -0700</bug_when>
    <thetext>EFL buildfix landed in http://trac.webkit.org/changeset/173420</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237789</attachid>
            <date>2014-09-08 08:26:21 -0700</date>
            <delta_ts>2014-09-08 09:21:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>image-buffer.patch</filename>
            <type>text/plain</type>
            <size>13393</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzM3NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE0LTA5LTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBCdWZmZXIgaW1hZ2VzIG9uIHdl
YiBwcm9jZXNzIHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjYzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGNhbiBzdWJzdGFudGlhbGx5IHJlZHVjZSBJUEMgYW5kIGRlY29kaW5nIHRpbWUg
Zm9yIGxhcmdlIGltYWdlcyBieSBhbGxvd2luZyBzb21lIGJ1ZmZlcmluZy4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIHVzIGJ1ZmZlciBpbWFnZSBkYXRhIHVwIHRvIDAuNXMgYmVmb3JlIHNl
bmRpbmcgaXQgb3ZlciB0byB0aGUgd2ViIHByb2Nlc3MuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcik6CisKKyAgICAgICAgICAgIFN0YXJ0
IHRoZSB0aW1lci4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEJ1ZmZlcik6CisKKyAgICAgICAgICAgIFNlbmQgdGhl
IGRhdGEgd2hlbiB0aGUgdGltZXIgZmlyZXMgb3IgdGhlIGxvYWQgZmluaXNoZXMsIHdoaWNoZXZl
ciBoYXBwZW5zIGZpcnN0LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50RGVjb2Rlci5oOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudERlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZv
cm0vSVBDL0FyZ3VtZW50RW5jb2Rlci5oOgorICAgICAgICAoSVBDOjpBcmd1bWVudEVuY29kZXI6
OmVuY29kZSk6CisKKyAgICAgICAgICAgIFN1cHBvcnQgZW5jb2Rpbmcgc3RkOjpjaHJvbm86OmR1
cmF0aW9uCisKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzOjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
TmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oOgorCisgICAgICAgICAgICBQ
YXNzIG1heGltaW11bSBidWZmZXJpbmcgZHVyYXRpb24uCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
bWF4aW11bUJ1ZmZlcmluZ1RpbWUpOgorCisgICAgICAgICAgICBEZXRlcmltaW5lIGR1cmF0aW9u
IGZyb20gdGhlIHJlc291cmNlIHR5cGUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQpOgorCiAyMDE0LTA5LTA2ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgWFBDUHRyIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50
byBhbiBhbGwgcHVycG9zZSBzbWFydCBwb2ludGVyIGZvciBvc19vYmplY3RzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDE3MzM3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgz
LDcgQEAgc3RhdGljIHZvaWQgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlcwogICAgIGRhdGEu
bV9kZWxheWVkUmVwbHkgPSBudWxscHRyOwogfQogCi1OZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYg
cGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIFBh
c3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3Jt
U3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVwbHk+IHJlcGx5KQorTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0
aW9uLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiBzeW5jaHJvbm91c1JlcGx5KQog
ICAgIDogbV9ieXRlc1JlY2VpdmVkKDApCiAgICAgLCBtX2hhbmRsZUNvbnZlcnRlZFRvRG93bmxv
YWQoZmFsc2UpCiAgICAgLCBtX2lkZW50aWZpZXIocGFyYW1ldGVycy5pZGVudGlmaWVyKQpAQCAt
OTcsOCArOTcsMTEgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMbwog
ICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHBhcmFtZXRl
cnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKICAgICAsIG1faXNM
b2FkaW5nTWFpblJlc291cmNlKHBhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpCiAgICAgLCBtX2Rl
ZmVyc0xvYWRpbmcocGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nKQorICAgICwgbV9tYXhpbXVtQnVm
ZmVyaW5nVGltZShwYXJhbWV0ZXJzLm1heGltdW1CdWZmZXJpbmdUaW1lKQorICAgICwgbV9idWZm
ZXJpbmdUaW1lcih0aGlzLCAmTmV0d29ya1Jlc291cmNlTG9hZGVyOjpidWZmZXJpbmdUaW1lckZp
cmVkKQogICAgICwgbV9zYW5kYm94RXh0ZW5zaW9uc0FyZUNvbnN1bWVkKGZhbHNlKQogICAgICwg
bV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCisgICAgLCBtX2J1ZmZlckRhdGFFbmNvZGVkRGF0YUxl
bmd0aCgwKQogewogICAgIC8vIEVpdGhlciB0aGlzIGxvYWRlciBoYXMgYm90aCBhIHdlYlBhZ2VJ
RCBhbmQgd2ViRnJhbWVJRCwgb3IgaXQgaXMgbm90IGFsbG93ZWQgdG8gYXNrIHRoZSBjbGllbnQg
Zm9yIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLgogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIG9mIHRoZSBleGlzdGVuY2Ugb2YgRW1wdHlGcmFtZUxvYWRlckNsaWVu
dCBpbiBXZWJDb3JlLgpAQCAtMTI3LDExICsxMzAsMTEgQEAgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpOZXR3b3JrUmVzb3VyY2VMbwogCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAKLSAgICBpZiAocmVwbHkgfHwgcGFyYW1ldGVycy5zaG91bGRCdWZmZXJSZXNvdXJjZSkKKyAg
ICBpZiAoc3luY2hyb25vdXNSZXBseSB8fCBtX21heGltdW1CdWZmZXJpbmdUaW1lID4gMF9tcykK
ICAgICAgICAgbV9idWZmZXJlZERhdGEgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgp
OwogCi0gICAgaWYgKHJlcGx5KQotICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPFN5bmNocm9ub3VzTG9hZERhdGE+KG1fcmVxdWVzdCwgcmVwbHkpOworICAg
IGlmIChzeW5jaHJvbm91c1JlcGx5KQorICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPFN5bmNocm9ub3VzTG9hZERhdGE+KG1fcmVxdWVzdCwgc3luY2hyb25v
dXNSZXBseSk7CiB9CiAKIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6fk5ldHdvcmtSZXNvdXJjZUxv
YWRlcigpCkBAIC0xODMsNiArMTg2LDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNs
ZWFudXAoKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKKyAgICBtX2J1ZmZl
cmluZ1RpbWVyLnN0b3AoKTsKKwogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwog
CiAgICAgLy8gVGVsbCB0aGUgc2NoZWR1bGVyIGFib3V0IHRoaXMgZmluaXNoZWQgbG9hZGVyIHNv
b24gc28gaXQgY2FuIHN0YXJ0IG1vcmUgbmV0d29yayByZXF1ZXN0cy4KQEAgLTI0NCw3ICsyNDks
MTEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCdQogCiAgICAgbV9i
eXRlc1JlY2VpdmVkICs9IGJ1ZmZlci0+c2l6ZSgpOwogICAgIGlmIChtX2J1ZmZlcmVkRGF0YSkg
eworICAgICAgICAvLyBGSVhNRTogSW4gcmVhbGl0eSB3ZSBhbHdheXMgZ2V0IC0xLgorICAgICAg
ICBpZiAoZW5jb2RlZERhdGFMZW5ndGggPiAwKQorICAgICAgICAgICAgbV9idWZmZXJEYXRhRW5j
b2RlZERhdGFMZW5ndGggKz0gZW5jb2RlZERhdGFMZW5ndGg7CiAgICAgICAgIG1fYnVmZmVyZWRE
YXRhLT5hcHBlbmQoYnVmZmVyLmdldCgpKTsKKyAgICAgICAgc3RhcnRCdWZmZXJpbmdUaW1lcklm
TmVlZGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgc2VuZEJ1ZmZlcihidWZmZXIu
Z2V0KCksIGVuY29kZWREYXRhTGVuZ3RoKTsKQEAgLTI1OCw3ICsyNjcsNyBAQCB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hCiAgICAgICAgIHNlbmRSZXBseVRvU3luY2hy
b25vdXNSZXF1ZXN0KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIG1fYnVmZmVyZWREYXRhLmdldCgp
KTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKG1fYnVmZmVyZWREYXRhICYmIG1fYnVmZmVyZWRE
YXRhLT5zaXplKCkpCi0gICAgICAgICAgICBzZW5kQnVmZmVyKG1fYnVmZmVyZWREYXRhLmdldCgp
LCBtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIHNlbmRCdWZmZXIobV9idWZm
ZXJlZERhdGEuZ2V0KCksIG1fYnVmZmVyRGF0YUVuY29kZWREYXRhTGVuZ3RoID8gbV9idWZmZXJE
YXRhRW5jb2RlZERhdGFMZW5ndGggOiBtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKTsKICAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChm
aW5pc2hUaW1lKSk7CiAgICAgfQogCkBAIC0zOTksNiArNDA4LDMyIEBAIHZvaWQgTmV0d29ya1Jl
c291cmNlTG9hZGVyOjpyZWNlaXZlZENhbmMKICAgICBkaWRGYWlsKG1faGFuZGxlLmdldCgpLCBj
YW5jZWxsZWRFcnJvcihtX3JlcXVlc3QpKTsKIH0KIAordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKGlzU3luY2hyb25v
dXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX21heGltdW1CdWZmZXJpbmdUaW1lID09
IDBfbXMgfHwgbV9tYXhpbXVtQnVmZmVyaW5nVGltZSA9PSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzOjptYXgoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX2J1ZmZlcmluZ1RpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2J1ZmZlcmluZ1RpbWVyLnN0YXJ0T25l
U2hvdChtX21heGltdW1CdWZmZXJpbmdUaW1lKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmJ1ZmZlcmluZ1RpbWVyRmlyZWQoVGltZXI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiYp
Cit7CisgICAgQVNTRVJUKG1fYnVmZmVyZWREYXRhKTsKKyAgICBBU1NFUlQobV9oYW5kbGUpOwor
ICAgIGlmICghbV9idWZmZXJlZERhdGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHNp
emVfdCBlbmNvZGVkRGF0YUxlbmd0aCA9IG1fYnVmZmVyRGF0YUVuY29kZWREYXRhTGVuZ3RoID8g
bV9idWZmZXJEYXRhRW5jb2RlZERhdGFMZW5ndGggOiBtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpOwor
CisgICAgSVBDOjpTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UobV9idWZm
ZXJlZERhdGEuZ2V0KCkpOworICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2Vi
UmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWREYXRh
TGVuZ3RoKSk7CisKKyAgICBtX2J1ZmZlckRhdGFFbmNvZGVkRGF0YUxlbmd0aCA9IDA7CisgICAg
bV9idWZmZXJlZERhdGEgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworfQorCiB2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEJ1ZmZlcihXZWJDb3JlOjpTaGFyZWRCdWZm
ZXIqIGJ1ZmZlciwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVCghaXNTeW5j
aHJvbm91cygpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxNzMzNzIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCkBAIC0xNjEsNiAr
MTYyLDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHBsYXRmb3JtRGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKIAorICAgIHZvaWQgc3RhcnRC
dWZmZXJpbmdUaW1lcklmTmVlZGVkKCk7CisgICAgdm9pZCBidWZmZXJpbmdUaW1lckZpcmVkKFdl
YkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4mKTsKICAgICB2b2lkIHNlbmRCdWZm
ZXIoV2ViQ29yZTo6U2hhcmVkQnVmZmVyKiwgaW50IGVuY29kZWREYXRhTGVuZ3RoKTsKIAogICAg
IHZvaWQgY29uc3VtZVNhbmRib3hFeHRlbnNpb25zKCk7CkBAIC0xOTAsNiArMTkzLDkgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dDsKICAgICBib29sIG1faXNMb2FkaW5nTWFpblJlc291cmNlOwogICAgIGJvb2wgbV9kZWZlcnNM
b2FkaW5nOworICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbV9tYXhpbXVtQnVm
ZmVyaW5nVGltZTsKKworICAgIFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4g
bV9idWZmZXJpbmdUaW1lcjsKIAogICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+
IG1fcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uczsKICAgICBWZWN0b3I8UmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+PiBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnM7CkBAIC0xOTksNiArMjA1
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
IG1fY29ubmVjdGlvbjsKICAgICAKICAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBt
X2J1ZmZlcmVkRGF0YTsKKyAgICBzaXplX3QgbV9idWZmZXJEYXRhRW5jb2RlZERhdGFMZW5ndGg7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0lQQy9Bcmd1bWVudERlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9JUEMvQXJndW1lbnREZWNvZGVyLmgJKHJldmlzaW9uIDE3MzM3MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Bcmd1bWVudERlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNiArNjAsMTUgQEAgcHVibGljOgogICAgIGJvb2wgZGVjb2RlKGZsb2F0Jik7CiAgICAg
Ym9vbCBkZWNvZGUoZG91YmxlJik7CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBSZXAsIGNsYXNzIFBl
cmlvZD4gYm9vbCBkZWNvZGUoc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgcmVz
dWx0KQorICAgIHsKKyAgICAgICAgUmVwIGNvdW50OworICAgICAgICBpZiAoIWRlY29kZShjb3Vu
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4oY291bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUVudW0oVCYgcmVz
dWx0KQogICAgIHsKICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwgIkVudW0g
dHlwZSBUIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQXJndW1lbnRFbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0FyZ3VtZW50RW5jb2Rlci5oCShyZXZpc2lvbiAxNzMz
NzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvQXJndW1lbnRFbmNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbmNvZGUo
ZmxvYXQpOwogICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7CiAKKyAgICB0ZW1wbGF0ZTxjbGFzcyBS
ZXAsIGNsYXNzIFBlcmlvZD4gdm9pZCBlbmNvZGUoc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwg
UGVyaW9kPiBkdXJhdGlvbikKKyAgICB7CisgICAgICAgIGVuY29kZShkdXJhdGlvbi5jb3VudCgp
KTsKKyAgICB9CisKICAgICB1aW50OF90KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90
IHNpemUpOwogCiAgICAgdWludDhfdCBtX2lubGluZUJ1ZmZlcls1MTJdOwpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMTczMzcyKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
OjpOZXR3b3JrUmUKICAgICAsIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QodHJ1ZSkKICAgICAsIGlzTWFpblJlc291cmNlKGZhbHNlKQogICAgICwgZGVmZXJzTG9hZGlu
ZyhmYWxzZSkKLSAgICAsIHNob3VsZEJ1ZmZlclJlc291cmNlKGZhbHNlKQorICAgICwgbWF4aW11
bUJ1ZmZlcmluZ1RpbWUoZmFsc2UpCiB7CiB9CiAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZW5jbwogICAgIGVuY29kZXIgPDwgc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKICAgICBlbmNvZGVyIDw8IGlzTWFpblJl
c291cmNlOwogICAgIGVuY29kZXIgPDwgZGVmZXJzTG9hZGluZzsKLSAgICBlbmNvZGVyIDw8IHNo
b3VsZEJ1ZmZlclJlc291cmNlOworICAgIGVuY29kZXIgPDwgbWF4aW11bUJ1ZmZlcmluZ1RpbWU7
CiB9CiAKIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFy
Z3VtZW50RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIHJl
c3VsdCkKQEAgLTE0Niw3ICsxNDYsNyBAQCBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzOjpkZWNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlc3VsdC5kZWZlcnNMb2FkaW5nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEJ1ZmZlclJlc291cmNlKSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5tYXhpbXVtQnVmZmVyaW5nVGltZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVk
L05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVy
cy5oCShyZXZpc2lvbiAxNzMzNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9O
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3Q7CiAgICAgYm9vbCBpc01haW5SZXNvdXJjZTsKICAgICBib29sIGRlZmVyc0xvYWRp
bmc7Ci0gICAgYm9vbCBzaG91bGRCdWZmZXJSZXNvdXJjZTsKKyAgICBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzIG1heGltdW1CdWZmZXJpbmdUaW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcAkocmV2aXNpb24gMTczMzcyKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVk
dWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDI3IEBAIFBhc3NSZWZQdHI8TmV0
c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IFcKICAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsK
IH0KIAorc3RhdGljIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbWF4aW11bUJ1ZmZlcmluZ1Rp
bWUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIGlmICghcmVzb3VyY2UpCisgICAg
ICAgIHJldHVybiAwX21zOworCisgICAgc3dpdGNoIChyZXNvdXJjZS0+dHlwZSgpKSB7CisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpTY3JpcHQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgorICAg
ICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7CisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIDUwMF9tczsKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6UmF3UmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRS
ZXNvdXJjZToKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICByZXR1cm4gMF9t
czsKKyAgICB9Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxv
YWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3Vy
Y2UsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKIHsKICAg
ICBBU1NFUlQocmVzb3VyY2VMb2FkZXIpOwpAQCAtMTQxLDcgKzE2Miw3IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUwKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRD
bGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdDsKICAgICBsb2FkUGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSA9
IHJlc291cmNlICYmIHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNv
dXJjZTsKICAgICBsb2FkUGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nID0gcmVzb3VyY2VMb2FkZXIt
PmRlZmVyc0xvYWRpbmcoKTsKLSAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRCdWZmZXJSZXNvdXJj
ZSA9IHJlc291cmNlICYmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0IHx8IHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCk7
CisgICAgbG9hZFBhcmFtZXRlcnMubWF4aW11bUJ1ZmZlcmluZ1RpbWUgPSBtYXhpbXVtQnVmZmVy
aW5nVGltZShyZXNvdXJjZSk7CiAKICAgICBBU1NFUlQoKGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJ
RCAmJiBsb2FkUGFyYW1ldGVycy53ZWJGcmFtZUlEKSB8fCBsb2FkUGFyYW1ldGVycy5jbGllbnRD
cmVkZW50aWFsUG9saWN5ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237790</attachid>
            <date>2014-09-08 09:06:06 -0700</date>
            <delta_ts>2014-09-08 09:22:30 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>image-buffer-2.patch</filename>
            <type>text/plain</type>
            <size>13314</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzM3NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE0LTA5LTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBCdWZmZXIgaW1hZ2VzIG9uIHdl
YiBwcm9jZXNzIHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjYzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGNhbiBzdWJzdGFudGlhbGx5IHJlZHVjZSBJUEMgYW5kIGRlY29kaW5nIHRpbWUg
Zm9yIGxhcmdlIGltYWdlcyBieSBhbGxvd2luZyBzb21lIGJ1ZmZlcmluZy4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIHVzIGJ1ZmZlciBpbWFnZSBkYXRhIHVwIHRvIDAuNXMgYmVmb3JlIHNl
bmRpbmcgaXQgb3ZlciB0byB0aGUgd2ViIHByb2Nlc3MuCisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcik6CisKKyAgICAgICAgICAgIFN0YXJ0
IHRoZSB0aW1lci4KKworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OnN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEJ1ZmZlcik6CisKKyAgICAgICAgICAgIFNlbmQgdGhl
IGRhdGEgd2hlbiB0aGUgdGltZXIgZmlyZXMgb3IgdGhlIGxvYWQgZmluaXNoZXMsIHdoaWNoZXZl
ciBoYXBwZW5zIGZpcnN0LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmg6CisK
KyAgICAgICAgICAgIFN1cHBvcnQgZW5jb2Rpbmcgc3RkOjpjaHJvbm86OmR1cmF0aW9uCisKKyAg
ICAgICAgKiBTaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHA6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oOgorCisgICAgICAgICAgICBQYXNzIG1heGltaW11
bSBidWZmZXJpbmcgZHVyYXRpb24uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6bWF4aW11bUJ1ZmZl
cmluZ1RpbWUpOgorCisgICAgICAgICAgICBEZXRlcmltaW5lIGR1cmF0aW9uIGZyb20gdGhlIHJl
c291cmNlIHR5cGUuCisgICAgICAgICAgICBFbmFibGVkIGZ1bGwgYnVmZmVyaW5nIGZvciBmb250
IHJlc291cmNlcy4gVGhleSBhcmUgbm90IGRlY29kZWQgaW5jcmVtZW50YWxseS4KKworICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCk6CisKIDIw
MTQtMDktMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBYUENQdHIg
c2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGFsbCBwdXJwb3NlIHNtYXJ0IHBvaW50ZXIgZm9y
IG9zX29iamVjdHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMTczMzcyKQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgdm9pZCBzZW5kUmVwbHlUb1N5bmNo
cm9ub3VzUmVxdWVzCiAgICAgZGF0YS5tX2RlbGF5ZWRSZXBseSA9IG51bGxwdHI7CiB9CiAKLU5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyogY29ubmVjdGlvbiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRlbGF5ZWRSZXBseT4gcmVw
bHkpCitOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24sIFBhc3NSZWZQdHI8TWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpEZWxheWVkUmVw
bHk+IHN5bmNocm9ub3VzUmVwbHkpCiAgICAgOiBtX2J5dGVzUmVjZWl2ZWQoMCkKICAgICAsIG1f
aGFuZGxlQ29udmVydGVkVG9Eb3dubG9hZChmYWxzZSkKICAgICAsIG1faWRlbnRpZmllcihwYXJh
bWV0ZXJzLmlkZW50aWZpZXIpCkBAIC05Nyw4ICs5NywxMSBAQCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiAgICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QocGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KQogICAgICwgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UocGFyYW1ldGVycy5pc01h
aW5SZXNvdXJjZSkKICAgICAsIG1fZGVmZXJzTG9hZGluZyhwYXJhbWV0ZXJzLmRlZmVyc0xvYWRp
bmcpCisgICAgLCBtX21heGltdW1CdWZmZXJpbmdUaW1lKHBhcmFtZXRlcnMubWF4aW11bUJ1ZmZl
cmluZ1RpbWUpCisgICAgLCBtX2J1ZmZlcmluZ1RpbWVyKHRoaXMsICZOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmJ1ZmZlcmluZ1RpbWVyRmlyZWQpCiAgICAgLCBtX3NhbmRib3hFeHRlbnNpb25zQXJl
Q29uc3VtZWQoZmFsc2UpCiAgICAgLCBtX2Nvbm5lY3Rpb24oY29ubmVjdGlvbikKKyAgICAsIG1f
YnVmZmVyRGF0YUVuY29kZWREYXRhTGVuZ3RoKDApCiB7CiAgICAgLy8gRWl0aGVyIHRoaXMgbG9h
ZGVyIGhhcyBib3RoIGEgd2ViUGFnZUlEIGFuZCB3ZWJGcmFtZUlELCBvciBpdCBpcyBub3QgYWxs
b3dlZCB0byBhc2sgdGhlIGNsaWVudCBmb3IgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMuCiAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGV4aXN0ZW5jZSBv
ZiBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IGluIFdlYkNvcmUuCkBAIC0xMjcsMTEgKzEzMCwxMSBA
QCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvCiAKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAotICAgIGlmIChyZXBseSB8fCBwYXJhbWV0ZXJzLnNo
b3VsZEJ1ZmZlclJlc291cmNlKQorICAgIGlmIChzeW5jaHJvbm91c1JlcGx5IHx8IG1fbWF4aW11
bUJ1ZmZlcmluZ1RpbWUgPiAwX21zKQogICAgICAgICBtX2J1ZmZlcmVkRGF0YSA9IFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAKLSAgICBpZiAocmVwbHkpCi0gICAgICAgIG1fc3lu
Y2hyb25vdXNMb2FkRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNMb2FkRGF0YT4o
bV9yZXF1ZXN0LCByZXBseSk7CisgICAgaWYgKHN5bmNocm9ub3VzUmVwbHkpCisgICAgICAgIG1f
c3luY2hyb25vdXNMb2FkRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8U3luY2hyb25vdXNMb2FkRGF0
YT4obV9yZXF1ZXN0LCBzeW5jaHJvbm91c1JlcGx5KTsKIH0KIAogTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjp+TmV0d29ya1Jlc291cmNlTG9hZGVyKCkKQEAgLTE4Myw2ICsxODYsOCBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAorICAgIG1fYnVmZmVyaW5nVGltZXIuc3RvcCgpOworCiAgICAgaW52YWxpZGF0
ZVNhbmRib3hFeHRlbnNpb25zKCk7CiAKICAgICAvLyBUZWxsIHRoZSBzY2hlZHVsZXIgYWJvdXQg
dGhpcyBmaW5pc2hlZCBsb2FkZXIgc29vbiBzbyBpdCBjYW4gc3RhcnQgbW9yZSBuZXR3b3JrIHJl
cXVlc3RzLgpAQCAtMjQ0LDcgKzI0OSwxMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZUJ1CiAKICAgICBtX2J5dGVzUmVjZWl2ZWQgKz0gYnVmZmVyLT5zaXplKCk7CiAg
ICAgaWYgKG1fYnVmZmVyZWREYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbiByZWFsaXR5IHdl
IGFsd2F5cyBnZXQgLTEuCisgICAgICAgIGlmIChlbmNvZGVkRGF0YUxlbmd0aCA+IDApCisgICAg
ICAgICAgICBtX2J1ZmZlckRhdGFFbmNvZGVkRGF0YUxlbmd0aCArPSBlbmNvZGVkRGF0YUxlbmd0
aDsKICAgICAgICAgbV9idWZmZXJlZERhdGEtPmFwcGVuZChidWZmZXIuZ2V0KCkpOworICAgICAg
ICBzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBzZW5kQnVmZmVyKGJ1ZmZlci5nZXQoKSwgZW5jb2RlZERhdGFMZW5ndGgpOwpAQCAtMjU4
LDcgKzI2Nyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2EKICAg
ICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25vdXNMb2FkRGF0
YSwgbV9idWZmZXJlZERhdGEuZ2V0KCkpOwogICAgIGVsc2UgewogICAgICAgICBpZiAobV9idWZm
ZXJlZERhdGEgJiYgbV9idWZmZXJlZERhdGEtPnNpemUoKSkKLSAgICAgICAgICAgIHNlbmRCdWZm
ZXIobV9idWZmZXJlZERhdGEuZ2V0KCksIG1fYnVmZmVyZWREYXRhLT5zaXplKCkpOworICAgICAg
ICAgICAgc2VuZEJ1ZmZlcihtX2J1ZmZlcmVkRGF0YS5nZXQoKSwgbV9idWZmZXJEYXRhRW5jb2Rl
ZERhdGFMZW5ndGggPyBtX2J1ZmZlckRhdGFFbmNvZGVkRGF0YUxlbmd0aCA6IG1fYnVmZmVyZWRE
YXRhLT5zaXplKCkpOwogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkRmluaXNoUmVzb3VyY2VMb2FkKGZpbmlzaFRpbWUpKTsKICAgICB9CiAKQEAgLTM5OSw2ICs0
MDgsMzIgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkQ2FuYwogICAgIGRp
ZEZhaWwobV9oYW5kbGUuZ2V0KCksIGNhbmNlbGxlZEVycm9yKG1fcmVxdWVzdCkpOwogfQogCit2
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnRCdWZmZXJpbmdUaW1lcklmTmVlZGVkKCkK
K3sKKyAgICBpZiAoaXNTeW5jaHJvbm91cygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1f
bWF4aW11bUJ1ZmZlcmluZ1RpbWUgPT0gMF9tcyB8fCBtX21heGltdW1CdWZmZXJpbmdUaW1lID09
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fYnVmZmVyaW5nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
YnVmZmVyaW5nVGltZXIuc3RhcnRPbmVTaG90KG1fbWF4aW11bUJ1ZmZlcmluZ1RpbWUpOworfQor
Cit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6YnVmZmVyaW5nVGltZXJGaXJlZChUaW1lcjxO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI+JikKK3sKKyAgICBBU1NFUlQobV9idWZmZXJlZERhdGEpOwor
ICAgIEFTU0VSVChtX2hhbmRsZSk7CisgICAgaWYgKCFtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisgICAgc2l6ZV90IGVuY29kZWREYXRhTGVuZ3RoID0gbV9idWZmZXJE
YXRhRW5jb2RlZERhdGFMZW5ndGggPyBtX2J1ZmZlckRhdGFFbmNvZGVkRGF0YUxlbmd0aCA6IG1f
YnVmZmVyZWREYXRhLT5zaXplKCk7CisKKyAgICBJUEM6OlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVu
Y2UgZGF0YVJlZmVyZW5jZShtX2J1ZmZlcmVkRGF0YS5nZXQoKSk7CisgICAgc2VuZEFib3J0aW5n
T25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZURhdGEoZGF0
YVJlZmVyZW5jZSwgZW5jb2RlZERhdGFMZW5ndGgpKTsKKworICAgIG1fYnVmZmVyRGF0YUVuY29k
ZWREYXRhTGVuZ3RoID0gMDsKKyAgICBtX2J1ZmZlcmVkRGF0YSA9IFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCk7Cit9CisKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZW5kQnVm
ZmVyKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciogYnVmZmVyLCBpbnQgZW5jb2RlZERhdGFMZW5ndGgp
CiB7CiAgICAgQVNTRVJUKCFpc1N5bmNocm9ub3VzKCkpOwpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHJldmlz
aW9uIDE3MzM3MikKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAKQEAgLTE2MSw2ICsxNjIsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
cGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpOwogCisgICAgdm9pZCBzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQoKTsKKyAgICB2b2lk
IGJ1ZmZlcmluZ1RpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TmV0d29ya1Jlc291cmNlTG9hZGVy
PiYpOwogICAgIHZvaWQgc2VuZEJ1ZmZlcihXZWJDb3JlOjpTaGFyZWRCdWZmZXIqLCBpbnQgZW5j
b2RlZERhdGFMZW5ndGgpOwogCiAgICAgdm9pZCBjb25zdW1lU2FuZGJveEV4dGVuc2lvbnMoKTsK
QEAgLTE5MCw2ICsxOTMsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRDbGVhclJlZmVy
cmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwogICAgIGJvb2wgbV9pc0xvYWRpbmdNYWluUmVzb3Vy
Y2U7CiAgICAgYm9vbCBtX2RlZmVyc0xvYWRpbmc7CisgICAgY29uc3Qgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBtX21heGltdW1CdWZmZXJpbmdUaW1lOworCisgICAgV2ViQ29yZTo6VGltZXI8
TmV0d29ya1Jlc291cmNlTG9hZGVyPiBtX2J1ZmZlcmluZ1RpbWVyOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9yZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25zOwog
ICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fcmVzb3VyY2VTYW5kYm94RXh0
ZW5zaW9uczsKQEAgLTE5OSw2ICsyMDUsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uOwogICAgIAogICAgIFJlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fYnVmZmVyZWREYXRhOworICAgIHNpemVfdCBtX2J1ZmZl
ckRhdGFFbmNvZGVkRGF0YUxlbmd0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDE3MzM3MikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDIyIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHN0cnVjdCAKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXAsIHR5cGVuYW1lIFBlcmlvZD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpjaHJvbm86OmR1
cmF0aW9uPFJlcCwgUGVyaW9kPj4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IGR1cmF0aW9uKQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBkdXJhdGlvbi5jb3VudCgpOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHJlc3VsdCkKKyAgICB7CisgICAg
ICAgIFJlcCBjb3VudDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb3VudCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdCA9IHN0ZDo6Y2hyb25vOjpkdXJh
dGlvbjxSZXAsIFBlcmlvZD4oY291bnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBX
VEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+JiBwYWlyKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDE3MzM3MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVyczo6TmV0d29ya1JlCiAgICAgLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KHRydWUpCiAgICAgLCBpc01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIGRlZmVy
c0xvYWRpbmcoZmFsc2UpCi0gICAgLCBzaG91bGRCdWZmZXJSZXNvdXJjZShmYWxzZSkKKyAgICAs
IG1heGltdW1CdWZmZXJpbmdUaW1lKGZhbHNlKQogewogfQogCkBAIC05NSw3ICs5NSw3IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY28KICAgICBlbmNvZGVyIDw8IHNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CiAgICAgZW5jb2RlciA8PCBp
c01haW5SZXNvdXJjZTsKICAgICBlbmNvZGVyIDw8IGRlZmVyc0xvYWRpbmc7Ci0gICAgZW5jb2Rl
ciA8PCBzaG91bGRCdWZmZXJSZXNvdXJjZTsKKyAgICBlbmNvZGVyIDw8IG1heGltdW1CdWZmZXJp
bmdUaW1lOwogfQogCiBib29sIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpkZWNvZGUo
SVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0
ZXJzJiByZXN1bHQpCkBAIC0xNDYsNyArMTQ2LDcgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVyczo6ZGVjbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuZGVmZXJzTG9hZGluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRCdWZmZXJSZXNvdXJjZSkpCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWF4aW11bUJ1ZmZlcmluZ1RpbWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OZXR3b3JrL05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBh
cmFtZXRlcnMuaAkocmV2aXNpb24gMTczMzcyKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05l
dHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQ
U1RvSFRUUFJlZGlyZWN0OwogICAgIGJvb2wgaXNNYWluUmVzb3VyY2U7CiAgICAgYm9vbCBkZWZl
cnNMb2FkaW5nOwotICAgIGJvb2wgc2hvdWxkQnVmZmVyUmVzb3VyY2U7CisgICAgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcyBtYXhpbXVtQnVmZmVyaW5nVGltZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAJKHJldmlzaW9uIDE3
MzM3MikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSwzNiBAQCBQYXNzUmVm
UHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBXCiAgICAgcmV0dXJuIGxvYWRlci5yZWxl
YXNlKCk7CiB9CiAKK3N0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1heGltdW1CdWZm
ZXJpbmdUaW1lKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNl
KQorICAgICAgICByZXR1cm4gMF9tczsKKworICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkg
eworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJj
ZToKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOworICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6CisgICAgICAgIHJldHVybiA1MDBf
bXM7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNWR0Rv
Y3VtZW50UmVzb3VyY2U6CisgICAgICAgIHJldHVybiAwX21zOworI2lmIEVOQUJMRShMSU5LX1BS
RUZFVENIKQorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CisjZW5kaWYKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6VGV4dFRyYWNrUmVzb3VyY2U6Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHls
ZVNoZWV0OgorI2VuZGlmCisgICAgICAgIHJldHVybiAwX21zOworICAgIH0KK30KKwogdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQogewogICAgIEFTU0VSVChyZXNvdXJjZUxvYWRl
cik7CkBAIC0xNDEsNyArMTcxLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlTAogICAgIGxvYWRQYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QgPSBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0Owog
ICAgIGxvYWRQYXJhbWV0ZXJzLmlzTWFpblJlc291cmNlID0gcmVzb3VyY2UgJiYgcmVzb3VyY2Ut
PnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOwogICAgIGxvYWRQYXJhbWV0
ZXJzLmRlZmVyc0xvYWRpbmcgPSByZXNvdXJjZUxvYWRlci0+ZGVmZXJzTG9hZGluZygpOwotICAg
IGxvYWRQYXJhbWV0ZXJzLnNob3VsZEJ1ZmZlclJlc291cmNlID0gcmVzb3VyY2UgJiYgKHJlc291
cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQgfHwgcmVzb3VyY2Ut
PnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KTsKKyAgICBsb2FkUGFyYW1ldGVycy5t
YXhpbXVtQnVmZmVyaW5nVGltZSA9IG1heGltdW1CdWZmZXJpbmdUaW1lKHJlc291cmNlKTsKIAog
ICAgIEFTU0VSVCgobG9hZFBhcmFtZXRlcnMud2ViUGFnZUlEICYmIGxvYWRQYXJhbWV0ZXJzLndl
YkZyYW1lSUQpIHx8IGxvYWRQYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gRG9O
b3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscyk7CiAK
</data>
<flag name="review"
          id="262521"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>