<?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>139108</bug_id>
          
          <creation_ts>2014-11-29 23:47:01 -0800</creation_ts>
          <short_desc>Track pages preventing suppression in WebProcessProxy using RefCounter (instead of HashSet)</short_desc>
          <delta_ts>2014-12-11 21:41:12 -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>WebKit2</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>139106</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1051356</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-11-29 23:47:01 -0800</bug_when>
    <thetext>The networking process is allowed to app nap if all web pages are also currently in app nap.*

In order to detect whether any page in any process currently requires the networking process to be active we:
 - maintains hash sets in every WebProcessProxy of pages that are okay with suppression.
 - if anything changes, the WebContext iterates every WebProcessProxy to recompute state.
This is all crazy - all we actually need is a simple count of the number of pages that need to prevent the networking process from entering app nap.

This patch gets us half way there - replace the HashSet with a RefCounter. Next step will be to hoist the RefCounters from the process proxies up to the context to do away with the iteration.

(* Actually, more specifically the networking process will app nap if all pages are visually idle - that&apos;s probably a bug, we&apos;re failing to take media &amp; page load state into account.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051358</commentid>
    <comment_count>1</comment_count>
      <attachid>242289</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-11-30 00:09:57 -0800</bug_when>
    <thetext>Created attachment 242289
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054631</commentid>
    <comment_count>2</comment_count>
      <attachid>243151</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-12-11 15:03:23 -0800</bug_when>
    <thetext>Created attachment 243151
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054703</commentid>
    <comment_count>3</comment_count>
      <attachid>243151</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-12-11 17:11:58 -0800</bug_when>
    <thetext>Comment on attachment 243151
Fix

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

We should consider removing all the #ifdefs. The concepts seems useful for other platforms.

Something I don&apos;t see: shouldn&apos;t there be code updating the counter when the settings change?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:391
&gt; +    updateProccessSuppressionState();

Why not make updateProccessSuppressionState() a step of updateActivityToken()? (and maybe rename updateActivityToken)

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1283
&gt; +        m_preventProcessSuppression.clear();

m_preventProcessSuppression = nullptr?

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:4567
&gt; +    m_preventProcessSuppression.clear();

m_preventProcessSuppression = nullptr?

&gt; Source/WebKit2/UIProcess/WebProcessProxy.h:123
&gt; +    PassRefPtr&lt;RefCounter::Count&gt; preventProcessSuppressionForPage()

The function name is an action, that is no good for a getter.

Not sure what would be a better name. Maybe processSuppressionCounter()?

&gt; Source/WebKit2/UIProcess/WebProcessProxy.h:234
&gt; +    RefCounter m_pagesPreventingSuppression;

m_pagesPreventingSuppression -&gt; m_pagesPreventingSuppressionCount/m_pagesPreventingSuppressionCounter/m_processSupressionCounter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054751</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-12-11 21:41:12 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 243151 [details]
&gt; Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=243151&amp;action=review
&gt; 
&gt; We should consider removing all the #ifdefs. The concepts seems useful for
&gt; other platforms.

Yep, that seems reasonable.
 
&gt; Something I don&apos;t see: shouldn&apos;t there be code updating the counter when the
&gt; settings change?

That happens from WebPageProxy::preferencesDidChange().
(though this can probably go away after in the next patch).
 
&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:391
&gt; &gt; +    updateProccessSuppressionState();
&gt; 
&gt; Why not make updateProccessSuppressionState() a step of
&gt; updateActivityToken()? (and maybe rename updateActivityToken)

Yeah, the repeated separate calls aren&apos;t great. :-(
 
This should probably be merged out to a separate subclass, similar to PageThrotter in WebCore. I&apos;m gonna leave them separate for now.

&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:1283
&gt; &gt; +        m_preventProcessSuppression.clear();
&gt; 
&gt; m_preventProcessSuppression = nullptr?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:4567
&gt; &gt; +    m_preventProcessSuppression.clear();
&gt; 
&gt; m_preventProcessSuppression = nullptr?

Done.
 
&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.h:123
&gt; &gt; +    PassRefPtr&lt;RefCounter::Count&gt; preventProcessSuppressionForPage()
&gt; 
&gt; The function name is an action, that is no good for a getter.
&gt; 
&gt; Not sure what would be a better name. Maybe processSuppressionCounter()?

Done.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.h:234
&gt; &gt; +    RefCounter m_pagesPreventingSuppression;
&gt; 
&gt; m_pagesPreventingSuppression -&gt;
&gt; m_pagesPreventingSuppressionCount/m_pagesPreventingSuppressionCounter/
&gt; m_processSupressionCounter?

Done.
 
https://trac.webkit.org/changeset/177209</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242289</attachid>
            <date>2014-11-30 00:09:57 -0800</date>
            <delta_ts>2014-12-11 15:03:23 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>139108.1.patch</filename>
            <type>text/plain</type>
            <size>12291</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjU3MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE0LTExLTI5ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBUcmFjayBwYWdl
cyBwcmV2ZW50aW5nIHN1cHByZXNzaW9uIGluIFdlYlByb2Nlc3NQcm94eSB1c2luZyBSZWZDb3Vu
dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzkx
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUg
bmV0d29ya2luZyBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gYXBwIG5hcCBpZiBhbGwgd2ViIHBhZ2Vz
IGFyZSBhbHNvIGN1cnJlbnRseSBpbiBhcHAgbmFwLgorICAgICAgICBJbiBvcmRlciB0byBkZXRl
Y3Qgd2hldGhlciBhbnkgcGFnZSBpbiBhbnkgcHJvY2VzcyBjdXJyZW50bHkgcmVxdWlyZXMgdGhl
IG5ldHdvcmtpbmcgcHJvY2VzcworICAgICAgICB0byBiZSBhY3RpdmUgd2U6CisgICAgICAgICAt
IG1haW50YWluIGhhc2ggc2V0cyBpbiBldmVyeSBXZWJQcm9jZXNzUHJveHkgb2YgcGFnZXMgdGhh
dCBhcmUgb2theSB3aXRoIHN1cHByZXNzaW9uLgorICAgICAgICAgLSBpZiBhbnl0aGluZyBjaGFu
Z2VzLCB0aGUgV2ViQ29udGV4dCBpdGVyYXRlcyBldmVyeSBXZWJQcm9jZXNzUHJveHkgdG8gcmVj
b21wdXRlIHN0YXRlLgorCisgICAgICAgIFRoaXMgaXMgYWxsIGNyYXp5IC0gYWxsIHdlIGFjdHVh
bGx5IG5lZWQgaXMgYSBzaW1wbGUgY291bnQgb2YgdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0IG5l
ZWQKKyAgICAgICAgdG8gcHJldmVudCB0aGUgbmV0d29ya2luZyBwcm9jZXNzIGZyb20gZW50ZXJp
bmcgYXBwIG5hcC4gVGhpcyBwYXRjaCBnZXRzIHVzIGhhbGYgd2F5IHRoZXJlIC0KKyAgICAgICAg
cmVwbGFjZSB0aGUgSGFzaFNldCB3aXRoIGEgUmVmQ291bnRlci4gTmV4dCBzdGVwIHdpbGwgYmUg
dG8gaG9pc3QgdGhlIFJlZkNvdW50ZXJzIGZyb20gdGhlCisgICAgICAgIHByb2Nlc3MgcHJveGll
cyB1cCB0byB0aGUgY29udGV4dCB0byBkbyBhd2F5IHdpdGggdGhlIGl0ZXJhdGlvbi4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OldlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cmVhdHRhY2hUb1dlYlByb2Nlc3MpOgorICAgICAgICAgICAgLSBtYWtlIHN1cmUgd2UgcHJldmVu
dCBwcm9jZXNzIHN1cHByZXNzaW9uLCBwZXIgY3VycmVudCB2aWV3c3RhdGUgJiBwcmVmZXJlbmNl
cy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaXNwYXRjaFZpZXdTdGF0ZUNoYW5n
ZSk6CisgICAgICAgICAgICAtIG1ha2Ugc3VyZSB3ZSBwcmV2ZW50IHByb2Nlc3Mgc3VwcHJlc3Np
b24sIHBlciB2aWV3c3RhdGUgY2hhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnVwZGF0ZVByb2NjZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgICAgICAtIHJlY29tcHV0
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gcHJldmVudCBwcm9jZXNzIHN1cHByZXNzaW9uLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWZlcmVuY2VzRGlkQ2hhbmdlKToKKyAgICAgICAg
ICAgIC0gd2hlbiBwcmVmZXJlbmNlcyBjaGFuZ2UgcHJvY2VzcyBzdXByZXNzaW9uIG1heSBiZSBk
aXNhYmxlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQ
cm9jZXNzRXhpdGVkKToKKyAgICAgICAgICAgIC0gd2UgbmVlZCB0byBkcm9wIHRoZSBvbGQgcmVm
LCB0byBhbGxvdyBhIG5ldyBvbmUgdG8gYmUgdGFrZW4gd2hlbiB3ZSByZWF0dGFjaC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc1Byb2Nlc3NTdXBwcmVzc2libGUpOiBEZWxldGVk
LgorICAgICAgICAgICAgLSBtb3JlZ2VkIGludG8gdXBkYXRlUHJvY2Nlc3NTdXBwcmVzc2lvblN0
YXRlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgICAgIC0g
YWRkZWQgbV9wcmV2ZW50UHJvY2Vzc1N1cHByZXNzaW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Oldl
YlByb2Nlc3NQcm94eSk6CisgICAgICAgICAgICAtIGluaXRpYWxpemUgbV9wYWdlc1ByZXZlbnRp
bmdTdXBwcmVzc2lvbgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZVdl
YlBhZ2UpOgorICAgICAgICAgICAgLSBtb3ZlZCB0byBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94
eQorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFkZEV4aXN0aW5nV2ViUGFnZSk6
CisgICAgICAgICAgICAtIG1vdmVkIHRvIFdlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nl
c3MKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdlKToKKyAg
ICAgICAgICAgIC0gbm93IGltcGxpY2l0OyB3aGVuIHRoZSBwYWdlIGlzIGRlc3Ryb3llZCB0aGUg
UmVmUHRyIHdpbGwgcmVsZWFzZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpw
YWdlU3VwcHJlc3NpYmlsaXR5Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICAgICAtIG1vdmVk
IHRvIFdlYlBhZ2VQcm94eTo6ZGlzcGF0Y2hWaWV3U3RhdGVDaGFuZ2UuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6cGFnZVByZWZlcmVuY2VzQ2hhbmdlZCk6IERlbGV0ZWQuCisg
ICAgICAgICAgICAtIG1vdmVkIHRvIFdlYlBhZ2VQcm94eTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2Uu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OnByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb25Gb3JQYWdlKToKKyAg
ICAgICAgICAgIC0gcmVmZXJlbmNlIGNvdW50IG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJlc3Npb24K
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94eU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphbGxQYWdlc0FyZVByb2Nlc3NTdXBwcmVzc2libGUp
OgorICAgICAgICAgICAgLSBjb252ZXJ0ZWQgdG8gdXNlIG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJl
c3Npb24uCisgICAgICAgICAgICAtIHJlbW92ZWQgZ3VhcmQgdGhhdCBtZWFudCBwcm9jZXNzZXMg
d2l0aCBubyBwYWdlcyB3b3VsZCBrZWVwIHRoZSBuZXR3b3JraW5nCisgICAgICAgICAgICAgIHBy
b2Nlc3MgZnJvbSBlbnRlcmluZyBhcHAgbmFwLCB3aGljaCBtYWRlIG5vIHNlbnNlLgorCiAyMDE0
LTExLTI4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IFN0YWxlIHVzZXJEYXRhIGlzIGhhbmRlZCB0byBXS1ZpZXcgX2FjdGlvbk1lbnVJdGVtc0Zvckhp
dFRlc3RSZXN1bHQgdW5kZXIgcHJlcGFyZUZvck1lbnUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNzY1MDcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDYg
KzM4NSw3IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHAKIAogICAg
IHVwZGF0ZVZpZXdTdGF0ZSgpOwogICAgIHVwZGF0ZUFjdGl2aXR5VG9rZW4oKTsKKyAgICB1cGRh
dGVQcm9jY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsKICAgICAKICNpZiBIQVZFKE9VVF9PRl9QUk9D
RVNTX0xBWUVSX0hPU1RJTkcpCiAgICAgbV9sYXllckhvc3RpbmdNb2RlID0gbV92aWV3U3RhdGUg
JiBWaWV3U3RhdGU6OklzSW5XaW5kb3cgPyBtX3BhZ2VDbGllbnQudmlld0xheWVySG9zdGluZ01v
ZGUoKSA6IExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczsKQEAgLTU3Myw2ICs1NzQsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MoCiAKICAgICB1cGRhdGVW
aWV3U3RhdGUoKTsKICAgICB1cGRhdGVBY3Rpdml0eVRva2VuKCk7CisgICAgdXBkYXRlUHJvY2Nl
c3NTdXBwcmVzc2lvblN0YXRlKCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIG1faW5z
cGVjdG9yID0gV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZSh0aGlzKTsKQEAgLTY1NiwxMSArNjU4
LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKCkKICNlbmRpZgogfQog
Ci1ib29sIFdlYlBhZ2VQcm94eTo6aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gKG1fdmlld1N0YXRlICYgVmlld1N0YXRlOjpJc1Zpc3VhbGx5SWRsZSkgJiYgbV9w
cmVmZXJlbmNlcy0+cGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQo
KTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmNsb3NlKCkKIHsKICAgICBpZiAobV9pc0Nsb3Nl
ZCkKQEAgLTEyMzgsOSArMTIzNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNwYXRjaFZpZXdT
dGF0ZUNoYW4KIAogICAgIC8vIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIFNldFZpZXdTdGF0
ZSBtZXNzYWdlIGlzIHNlbnQsIHRvIGVuc3VyZSB0aGUgcGFnZSB2aXNpYmlsaXR5IGV2ZW50IGNh
biBmaXJlLgogICAgIHVwZGF0ZUFjdGl2aXR5VG9rZW4oKTsKLQotICAgIGlmIChjaGFuZ2VkICYg
Vmlld1N0YXRlOjpJc1Zpc3VhbGx5SWRsZSkKLSAgICAgICAgbV9wcm9jZXNzLT5wYWdlU3VwcHJl
c3NpYmlsaXR5Q2hhbmdlZCh0aGlzKTsKKyAgICB1cGRhdGVQcm9jY2Vzc1N1cHByZXNzaW9uU3Rh
dGUoKTsKIAogICAgIC8vIElmIHdlJ3ZlIHN0YXJ0ZWQgdGhlIHJlc3BvbnNpdmVuZXNzIHRpbWVy
IGFzIHBhcnQgb2YgdGVsbGluZyB0aGUgd2ViIHByb2Nlc3MgdG8gdXBkYXRlIHRoZSBiYWNraW5n
IHN0b3JlCiAgICAgLy8gc3RhdGUsIGl0IG1pZ2h0IG5vdCBzZW5kIGJhY2sgYSByZXBseSAoc2lu
Y2UgaXQgd29uJ3QgcGFpbnQgYW55dGhpbmcgaWYgdGhlIHdlYiBwYWdlIGlzIGhpZGRlbikgc28g
d2UKQEAgLTEyNzQsNiArMTI2OSwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlQWN0aXZp
dHlUb2tlbigpCiAjZW5kaWYKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVByb2NjZXNz
U3VwcHJlc3Npb25TdGF0ZSgpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgaWYgKChtX3Zp
ZXdTdGF0ZSAmIFZpZXdTdGF0ZTo6SXNWaXN1YWxseUlkbGUpICYmIG1fcHJlZmVyZW5jZXMtPnBh
Z2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCisgICAgICAgIG1f
cHJldmVudFByb2Nlc3NTdXBwcmVzc2lvbi5jbGVhcigpOworICAgIGVsc2UgaWYgKCFtX3ByZXZl
bnRQcm9jZXNzU3VwcHJlc3Npb24pCisgICAgICAgIG1fcHJldmVudFByb2Nlc3NTdXBwcmVzc2lv
biA9IG1fcHJvY2Vzcy0+cHJldmVudFByb2Nlc3NTdXBwcmVzc2lvbkZvclBhZ2UoKTsKKyNlbmRp
ZgorfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6bGF5ZXJIb3N0aW5nTW9kZURpZENoYW5nZSgpCiB7
CiAgICAgaWYgKCFpc1ZhbGlkKCkpCkBAIC0yNDgyLDcgKzI0ODcsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UoCiAgICAgICAgIGluc3BlY3RvcigpLT5lbmFibGVS
ZW1vdGVJbnNwZWN0aW9uKCk7CiAjZW5kaWYKIAotICAgIG1fcHJvY2Vzcy0+cGFnZVByZWZlcmVu
Y2VzQ2hhbmdlZCh0aGlzKTsKKyAgICB1cGRhdGVQcm9jY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsK
IAogICAgIG1fcGFnZUNsaWVudC5wcmVmZXJlbmNlc0RpZENoYW5nZSgpOwogCkBAIC00NTQxLDYg
KzQ1NDYsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzZXRTdGF0ZUFmdGVyUHJvY2VzCiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIG1fYWN0aXZpdHlUb2tlbiA9IG51bGxwdHI7CiAjZW5kaWYKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBtX3ByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb24uY2xlYXIo
KTsKKyNlbmRpZgogCiAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgbV9pc1BhZ2VTdXNwZW5k
ZWQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHJldmlzaW9uIDE3NjUwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw2IEBAIHB1YmxpYzoKICAgICBXZWJD
b3JlOjpJbnRTaXplIHZpZXdTaXplKCkgY29uc3Q7CiAgICAgYm9vbCBpc1ZpZXdWaXNpYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3U3RhdGUgJiBXZWJDb3JlOjpWaWV3U3RhdGU6OklzVmlzaWJs
ZTsgfQogICAgIGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1By
b2Nlc3NTdXBwcmVzc2libGUoKSBjb25zdDsKIAogICAgIHZvaWQgYWRkTUlNRVR5cGVXaXRoQ3Vz
dG9tQ29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogCkBAIC05NTYsNiAr
OTU1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlVmlld1N0YXRlKFdlYkNvcmU6OlZp
ZXdTdGF0ZTo6RmxhZ3MgZmxhZ3NUb1VwZGF0ZSA9IFdlYkNvcmU6OlZpZXdTdGF0ZTo6QWxsRmxh
Z3MpOwogICAgIHZvaWQgdXBkYXRlQWN0aXZpdHlUb2tlbigpOworICAgIHZvaWQgdXBkYXRlUHJv
Y2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7CiAKICAgICBlbnVtIGNsYXNzIFJlc2V0U3RhdGVSZWFz
b24gewogICAgICAgICBQYWdlSW52YWxpZGF0ZWQsCkBAIC0xNTgwLDYgKzE1ODAsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1f
dGVtcG9yYXJ5UERGRmlsZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJ1bkxvb3BP
YnNlcnZlcj4gbV92aWV3U3RhdGVDaGFuZ2VEaXNwYXRjaGVyOworICAgIFJlZlB0cjxSZWZDb3Vu
dGVyOjpDb3VudGVyPiBtX3ByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb247CiAjZW5kaWYKICAgICAg
ICAgCiAgICAgV2ViQ29yZTo6U2Nyb2xsUGlubmluZ0JlaGF2aW9yIG1fc2Nyb2xsUGlubmluZ0Jl
aGF2aW9yOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAJKHJldmlzaW9uIDE3NjUwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIFdlYlByb2Nl
c3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5KFdlYkNvbnQKICAgICAsIG1fbWF5SGF2ZVVuaXZlcnNh
bEZpbGVSZWFkU2FuZGJveEV4dGVuc2lvbihmYWxzZSkKICAgICAsIG1fY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkodGhpcywgY29udGV4dCkKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1f
cGFnZXNQcmV2ZW50aW5nU3VwcHJlc3Npb24oW3RoaXNdKCkgeyB1cGRhdGVQcm9jZXNzU3VwcHJl
c3Npb25TdGF0ZSgpOyB9KQogICAgICwgbV9wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGZhbHNl
KQogI2VuZGlmCiAgICAgLCBtX251bWJlck9mVGltZXNTdWRkZW5UZXJtaW5hdGlvbldhc0Rpc2Fi
bGVkKDApCkBAIC0xODksMTEgKzE5MCw2IEBAIFBhc3NSZWZQdHI8V2ViUGFnZVByb3h5PiBXZWJQ
cm9jZXNzUHJveHkKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiB3ZWJQYWdlID0gV2ViUGFnZVBy
b3h5OjpjcmVhdGUocGFnZUNsaWVudCwgKnRoaXMsIHBhZ2VJRCwgY29uZmlndXJhdGlvbik7CiAg
ICAgbV9wYWdlTWFwLnNldChwYWdlSUQsIHdlYlBhZ2UuZ2V0KCkpOwogICAgIGdsb2JhbFBhZ2VN
YXAoKS5zZXQocGFnZUlELCB3ZWJQYWdlLmdldCgpKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBpZiAod2ViUGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkpCi0gICAgICAgIG1fcHJvY2Vz
c1N1cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlSUQpOwotICAgIHVwZGF0ZVByb2Nlc3NTdXBwcmVz
c2lvblN0YXRlKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gd2ViUGFnZS5yZWxlYXNlKCk7CiB9CiAK
QEAgLTIwNCwxMSArMjAwLDYgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmFkZEV4aXN0aW5nV2Vi
UGFnZQogCiAgICAgbV9wYWdlTWFwLnNldChwYWdlSUQsIHdlYlBhZ2UpOwogICAgIGdsb2JhbFBh
Z2VNYXAoKS5zZXQocGFnZUlELCB3ZWJQYWdlKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
ZiAod2ViUGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkpCi0gICAgICAgIG1fcHJvY2Vzc1N1
cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlSUQpOwotICAgIHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnJlbW92ZVdlYlBh
Z2UodWludDY0X3QgcGFnZUlEKQpAQCAtMjI0LDExICsyMTUsNiBAQCB2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6cmVtb3ZlV2ViUGFnZSh1aW50CiAgICAgZm9yIChhdXRvIGl0ZW1JRCA6IGl0ZW1JRHNU
b1JlbW92ZSkKICAgICAgICAgbV9iYWNrRm9yd2FyZExpc3RJdGVtTWFwLnJlbW92ZShpdGVtSUQp
OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV9wcm9jZXNzU3VwcHJlc3NpYmxlUGFnZXMu
cmVtb3ZlKHBhZ2VJRCk7Ci0gICAgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsKLSNl
bmRpZgotCiAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3QgV2ViUGFnZSBvcGVuIGluIHRoYXQg
d2ViIHByb2Nlc3MsIGFuZCB3ZSBoYXZlIG5vIG90aGVyIHJlYXNvbiB0byBrZWVwIGl0IGFsaXZl
LCBsZXQgaXQgZ28uCiAgICAgLy8gV2Ugb25seSBhbGxvdyB0aGlzIHdoZW4gdXNpbmcgYSBuZXR3
b3JrIHByb2Nlc3MsIGFzIG90aGVyd2lzZSB0aGUgV2ViUHJvY2VzcyBuZWVkcyB0byBwcmVzZXJ2
ZSBpdHMgc2Vzc2lvbiBzdGF0ZS4KICAgICBpZiAoIW1fY29udGV4dC0+dXNlc05ldHdvcmtQcm9j
ZXNzKCkgfHwgc3RhdGUoKSA9PSBTdGF0ZTo6VGVybWluYXRlZCB8fCAhY2FuVGVybWluYXRlQ2hp
bGRQcm9jZXNzKCkpCkBAIC02ODMsMzIgKzY2OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpk
aWRVcGRhdGVIaXN0b3J5VGkKICAgICBtX2NvbnRleHQtPmhpc3RvcnlDbGllbnQoKS5kaWRVcGRh
dGVIaXN0b3J5VGl0bGUobV9jb250ZXh0LnB0cigpLCBwYWdlLCB0aXRsZSwgdXJsLCBmcmFtZSk7
CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwYWdlU3VwcHJlc3NpYmlsaXR5Q2hhbmdlZChX
ZWJLaXQ6OldlYlBhZ2VQcm94eSAqcGFnZSkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
ZiAocGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkpCi0gICAgICAgIG1fcHJvY2Vzc1N1cHBy
ZXNzaWJsZVBhZ2VzLmFkZChwYWdlLT5wYWdlSUQoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX3By
b2Nlc3NTdXBwcmVzc2libGVQYWdlcy5yZW1vdmUocGFnZS0+cGFnZUlEKCkpOwotICAgIHVwZGF0
ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwYWdl
KTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlByb2Nlc3NQcm94eTo6cGFnZVByZWZlcmVuY2VzQ2hh
bmdlZChXZWJLaXQ6OldlYlBhZ2VQcm94eSAqcGFnZSkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBpZiAocGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkpCi0gICAgICAgIG1fcHJvY2Vz
c1N1cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlLT5wYWdlSUQoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3Byb2Nlc3NTdXBwcmVzc2libGVQYWdlcy5yZW1vdmUocGFnZS0+cGFnZUlEKCkpOwotICAg
IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShwYWdlKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkU2F2ZVRvUGFn
ZUNhY2hlKCkKIHsKICAgICBtX2NvbnRleHQtPnByb2Nlc3NEaWRDYWNoZVBhZ2UodGhpcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lv
biAxNzY1MDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlci5oPgogCiAjaWYgUExBVEZPUk0oSU9TKQogI2lu
Y2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKQEAgLTExOCw4ICsxMTksMTIgQEAgcHVibGljOgog
CiAgICAgRG93bmxvYWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKTsKIAotICAgIHZvaWQgcGFnZVN1cHByZXNzaWJpbGl0eUNoYW5nZWQo
V2ViUGFnZVByb3h5Kik7Ci0gICAgdm9pZCBwYWdlUHJlZmVyZW5jZXNDaGFuZ2VkKFdlYlBhZ2VQ
cm94eSopOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFBhc3NSZWZQdHI8UmVmQ291bnRlcjo6
Q291bnRlcj4gcHJldmVudFByb2Nlc3NTdXBwcmVzc2lvbkZvclBhZ2UoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJlc3Npb24uY291bnRlcigpOworICAgIH0K
KyNlbmRpZgogCiAgICAgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsKICAgICB2b2lkIHJlbGVh
c2VQYWdlQ2FjaGUoKTsKQEAgLTIyNiw3ICsyMzEsNyBAQCBwcml2YXRlOgogICAgIEN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5IG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk7CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX3Byb2Nlc3NTdXBwcmVzc2li
bGVQYWdlczsKKyAgICBSZWZDb3VudGVyIG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJlc3Npb247CiAg
ICAgYm9vbCBtX3Byb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQ7CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlNYWMubW0J
KHJldmlzaW9uIDE3NjUwNykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUHJv
Y2Vzc1Byb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE8KIAogYm9vbCBXZWJQcm9jZXNzUHJveHk6
OmFsbFBhZ2VzQXJlUHJvY2Vzc1N1cHByZXNzaWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICht
X3Byb2Nlc3NTdXBwcmVzc2libGVQYWdlcy5zaXplKCkgPT0gbV9wYWdlTWFwLnNpemUoKSkgJiYg
IW1fcHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1fcGFn
ZXNQcmV2ZW50aW5nU3VwcHJlc3Npb24udmFsdWUoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJv
eHk6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243151</attachid>
            <date>2014-12-11 15:03:23 -0800</date>
            <delta_ts>2014-12-11 17:11:58 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>139108.2.patch</filename>
            <type>text/plain</type>
            <size>12251</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzE2MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE0LTEyLTExICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBUcmFjayBwYWdl
cyBwcmV2ZW50aW5nIHN1cHByZXNzaW9uIGluIFdlYlByb2Nlc3NQcm94eSB1c2luZyBSZWZDb3Vu
dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzkx
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUg
bmV0d29ya2luZyBwcm9jZXNzIGlzIGFsbG93ZWQgdG8gYXBwIG5hcCBpZiBhbGwgd2ViIHBhZ2Vz
IGFyZSBhbHNvIGN1cnJlbnRseSBpbiBhcHAgbmFwLgorICAgICAgICBJbiBvcmRlciB0byBkZXRl
Y3Qgd2hldGhlciBhbnkgcGFnZSBpbiBhbnkgcHJvY2VzcyBjdXJyZW50bHkgcmVxdWlyZXMgdGhl
IG5ldHdvcmtpbmcgcHJvY2VzcworICAgICAgICB0byBiZSBhY3RpdmUgd2U6CisgICAgICAgICAt
IG1haW50YWluIGhhc2ggc2V0cyBpbiBldmVyeSBXZWJQcm9jZXNzUHJveHkgb2YgcGFnZXMgdGhh
dCBhcmUgb2theSB3aXRoIHN1cHByZXNzaW9uLgorICAgICAgICAgLSBpZiBhbnl0aGluZyBjaGFu
Z2VzLCB0aGUgV2ViQ29udGV4dCBpdGVyYXRlcyBldmVyeSBXZWJQcm9jZXNzUHJveHkgdG8gcmVj
b21wdXRlIHN0YXRlLgorCisgICAgICAgIFRoaXMgaXMgYWxsIGNyYXp5IC0gYWxsIHdlIGFjdHVh
bGx5IG5lZWQgaXMgYSBzaW1wbGUgY291bnQgb2YgdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0IG5l
ZWQKKyAgICAgICAgdG8gcHJldmVudCB0aGUgbmV0d29ya2luZyBwcm9jZXNzIGZyb20gZW50ZXJp
bmcgYXBwIG5hcC4gVGhpcyBwYXRjaCBnZXRzIHVzIGhhbGYgd2F5IHRoZXJlIC0KKyAgICAgICAg
cmVwbGFjZSB0aGUgSGFzaFNldCB3aXRoIGEgUmVmQ291bnRlci4gTmV4dCBzdGVwIHdpbGwgYmUg
dG8gaG9pc3QgdGhlIFJlZkNvdW50ZXJzIGZyb20gdGhlCisgICAgICAgIHByb2Nlc3MgcHJveGll
cyB1cCB0byB0aGUgY29udGV4dCB0byBkbyBhd2F5IHdpdGggdGhlIGl0ZXJhdGlvbi4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OldlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cmVhdHRhY2hUb1dlYlByb2Nlc3MpOgorICAgICAgICAgICAgLSBtYWtlIHN1cmUgd2UgcHJldmVu
dCBwcm9jZXNzIHN1cHByZXNzaW9uLCBwZXIgY3VycmVudCB2aWV3c3RhdGUgJiBwcmVmZXJlbmNl
cy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaXNwYXRjaFZpZXdTdGF0ZUNoYW5n
ZSk6CisgICAgICAgICAgICAtIG1ha2Ugc3VyZSB3ZSBwcmV2ZW50IHByb2Nlc3Mgc3VwcHJlc3Np
b24sIHBlciB2aWV3c3RhdGUgY2hhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnVwZGF0ZVByb2NjZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgICAgICAtIHJlY29tcHV0
ZSB3aGV0aGVyIHdlIG5lZWQgdG8gcHJldmVudCBwcm9jZXNzIHN1cHByZXNzaW9uLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByZWZlcmVuY2VzRGlkQ2hhbmdlKToKKyAgICAgICAg
ICAgIC0gd2hlbiBwcmVmZXJlbmNlcyBjaGFuZ2UgcHJvY2VzcyBzdXByZXNzaW9uIG1heSBiZSBk
aXNhYmxlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNldFN0YXRlQWZ0ZXJQ
cm9jZXNzRXhpdGVkKToKKyAgICAgICAgICAgIC0gd2UgbmVlZCB0byBkcm9wIHRoZSBvbGQgcmVm
LCB0byBhbGxvdyBhIG5ldyBvbmUgdG8gYmUgdGFrZW4gd2hlbiB3ZSByZWF0dGFjaC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc1Byb2Nlc3NTdXBwcmVzc2libGUpOiBEZWxldGVk
LgorICAgICAgICAgICAgLSBtb3JlZ2VkIGludG8gdXBkYXRlUHJvY2Nlc3NTdXBwcmVzc2lvblN0
YXRlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgICAgIC0g
YWRkZWQgbV9wcmV2ZW50UHJvY2Vzc1N1cHByZXNzaW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6Oldl
YlByb2Nlc3NQcm94eSk6CisgICAgICAgICAgICAtIGluaXRpYWxpemUgbV9wYWdlc1ByZXZlbnRp
bmdTdXBwcmVzc2lvbgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZVdl
YlBhZ2UpOgorICAgICAgICAgICAgLSBtb3ZlZCB0byBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94
eQorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmFkZEV4aXN0aW5nV2ViUGFnZSk6
CisgICAgICAgICAgICAtIG1vdmVkIHRvIFdlYlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nl
c3MKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZW1vdmVXZWJQYWdlKToKKyAg
ICAgICAgICAgIC0gbm93IGltcGxpY2l0OyB3aGVuIHRoZSBwYWdlIGlzIGRlc3Ryb3llZCB0aGUg
UmVmUHRyIHdpbGwgcmVsZWFzZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpw
YWdlU3VwcHJlc3NpYmlsaXR5Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgICAgICAtIG1vdmVk
IHRvIFdlYlBhZ2VQcm94eTo6ZGlzcGF0Y2hWaWV3U3RhdGVDaGFuZ2UuCisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6cGFnZVByZWZlcmVuY2VzQ2hhbmdlZCk6IERlbGV0ZWQuCisg
ICAgICAgICAgICAtIG1vdmVkIHRvIFdlYlBhZ2VQcm94eTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2Uu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzUHJveHk6OnByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb25Gb3JQYWdlKToKKyAg
ICAgICAgICAgIC0gcmVmZXJlbmNlIGNvdW50IG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJlc3Npb24K
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94eU1hYy5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjphbGxQYWdlc0FyZVByb2Nlc3NTdXBwcmVzc2libGUp
OgorICAgICAgICAgICAgLSBjb252ZXJ0ZWQgdG8gdXNlIG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJl
c3Npb24uCisgICAgICAgICAgICAtIHJlbW92ZWQgZ3VhcmQgdGhhdCBtZWFudCBwcm9jZXNzZXMg
d2l0aCBubyBwYWdlcyB3b3VsZCBrZWVwIHRoZSBuZXR3b3JraW5nCisgICAgICAgICAgICAgIHBy
b2Nlc3MgZnJvbSBlbnRlcmluZyBhcHAgbmFwLCB3aGljaCBtYWRlIG5vIHNlbnNlLgorCiAyMDE0
LTEyLTA5ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0
b3JlIGludGVyZmFjZSBzdGF0ZSB3aGVuIHN0b3BwaW5nIG9wdGltaXplZCBmdWxsc2NyZWVuLgpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDE3NzE2MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODgsNiArMzg4LDcgQEAgV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJv
eHkoUGFnZUNsaWVudCYgcAogCiAgICAgdXBkYXRlVmlld1N0YXRlKCk7CiAgICAgdXBkYXRlQWN0
aXZpdHlUb2tlbigpOworICAgIHVwZGF0ZVByb2NjZXNzU3VwcHJlc3Npb25TdGF0ZSgpOwogICAg
IAogI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJfSE9TVElORykKICAgICBtX2xheWVySG9z
dGluZ01vZGUgPSBtX3ZpZXdTdGF0ZSAmIFZpZXdTdGF0ZTo6SXNJbldpbmRvdyA/IG1fcGFnZUNs
aWVudC52aWV3TGF5ZXJIb3N0aW5nTW9kZSgpIDogTGF5ZXJIb3N0aW5nTW9kZTo6T3V0T2ZQcm9j
ZXNzOwpAQCAtNTc2LDYgKzU3Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWF0dGFjaFRvV2Vi
UHJvY2VzcygKIAogICAgIHVwZGF0ZVZpZXdTdGF0ZSgpOwogICAgIHVwZGF0ZUFjdGl2aXR5VG9r
ZW4oKTsKKyAgICB1cGRhdGVQcm9jY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAgICAgbV9pbnNwZWN0b3IgPSBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRl
KHRoaXMpOwpAQCAtNjU5LDExICs2NjEsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6
ZVdlYlBhZ2UoKQogI2VuZGlmCiB9CiAKLWJvb2wgV2ViUGFnZVByb3h5Ojppc1Byb2Nlc3NTdXBw
cmVzc2libGUoKSBjb25zdAotewotICAgIHJldHVybiAobV92aWV3U3RhdGUgJiBWaWV3U3RhdGU6
OklzVmlzdWFsbHlJZGxlKSAmJiBtX3ByZWZlcmVuY2VzLT5wYWdlVmlzaWJpbGl0eUJhc2VkUHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpOwotfQotCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xvc2Uo
KQogewogICAgIGlmIChtX2lzQ2xvc2VkKQpAQCAtMTI0NSw5ICsxMjQyLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpc3BhdGNoVmlld1N0YXRlQ2hhbgogCiAgICAgLy8gVGhpcyBtdXN0IGhhcHBl
biBhZnRlciB0aGUgU2V0Vmlld1N0YXRlIG1lc3NhZ2UgaXMgc2VudCwgdG8gZW5zdXJlIHRoZSBw
YWdlIHZpc2liaWxpdHkgZXZlbnQgY2FuIGZpcmUuCiAgICAgdXBkYXRlQWN0aXZpdHlUb2tlbigp
OwotCi0gICAgaWYgKGNoYW5nZWQgJiBWaWV3U3RhdGU6OklzVmlzdWFsbHlJZGxlKQotICAgICAg
ICBtX3Byb2Nlc3MtPnBhZ2VTdXBwcmVzc2liaWxpdHlDaGFuZ2VkKHRoaXMpOworICAgIHVwZGF0
ZVByb2NjZXNzU3VwcHJlc3Npb25TdGF0ZSgpOwogCiAgICAgLy8gSWYgd2UndmUgc3RhcnRlZCB0
aGUgcmVzcG9uc2l2ZW5lc3MgdGltZXIgYXMgcGFydCBvZiB0ZWxsaW5nIHRoZSB3ZWIgcHJvY2Vz
cyB0byB1cGRhdGUgdGhlIGJhY2tpbmcgc3RvcmUKICAgICAvLyBzdGF0ZSwgaXQgbWlnaHQgbm90
IHNlbmQgYmFjayBhIHJlcGx5IChzaW5jZSBpdCB3b24ndCBwYWludCBhbnl0aGluZyBpZiB0aGUg
d2ViIHBhZ2UgaXMgaGlkZGVuKSBzbyB3ZQpAQCAtMTI4MSw2ICsxMjc2LDE2IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojp1cGRhdGVBY3Rpdml0eVRva2VuKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlBh
Z2VQcm94eTo6dXBkYXRlUHJvY2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKK3sKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBpZiAoKG1fdmlld1N0YXRlICYgVmlld1N0YXRlOjpJc1Zpc3VhbGx5SWRs
ZSkgJiYgbV9wcmVmZXJlbmNlcy0+cGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lv
bkVuYWJsZWQoKSkKKyAgICAgICAgbV9wcmV2ZW50UHJvY2Vzc1N1cHByZXNzaW9uLmNsZWFyKCk7
CisgICAgZWxzZSBpZiAoIW1fcHJldmVudFByb2Nlc3NTdXBwcmVzc2lvbikKKyAgICAgICAgbV9w
cmV2ZW50UHJvY2Vzc1N1cHByZXNzaW9uID0gbV9wcm9jZXNzLT5wcmV2ZW50UHJvY2Vzc1N1cHBy
ZXNzaW9uRm9yUGFnZSgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpsYXllckhv
c3RpbmdNb2RlRGlkQ2hhbmdlKCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKQEAgLTI0ODksNyAr
MjQ5NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwcmVmZXJlbmNlc0RpZENoYW5nZSgKICAgICAg
ICAgaW5zcGVjdG9yKCktPmVuYWJsZVJlbW90ZUluc3BlY3Rpb24oKTsKICNlbmRpZgogCi0gICAg
bV9wcm9jZXNzLT5wYWdlUHJlZmVyZW5jZXNDaGFuZ2VkKHRoaXMpOworICAgIHVwZGF0ZVByb2Nj
ZXNzU3VwcHJlc3Npb25TdGF0ZSgpOwogCiAgICAgbV9wYWdlQ2xpZW50LnByZWZlcmVuY2VzRGlk
Q2hhbmdlKCk7CiAKQEAgLTQ1NTgsNiArNDU2Myw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNl
dFN0YXRlQWZ0ZXJQcm9jZXMKICNpZiBQTEFURk9STShJT1MpCiAgICAgbV9hY3Rpdml0eVRva2Vu
ID0gbnVsbHB0cjsKICNlbmRpZgorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIG1fcHJldmVudFBy
b2Nlc3NTdXBwcmVzc2lvbi5jbGVhcigpOworI2VuZGlmCiAKICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKICAgICBtX2lzUGFnZVN1c3BlbmRlZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTc3MTYwKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODMsNyArMzgz
LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBjb25zdDsKICAg
ICBib29sIGlzVmlld1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdTdGF0ZSAmIFdlYkNv
cmU6OlZpZXdTdGF0ZTo6SXNWaXNpYmxlOyB9CiAgICAgYm9vbCBpc1ZpZXdXaW5kb3dBY3RpdmUo
KSBjb25zdDsKLSAgICBib29sIGlzUHJvY2Vzc1N1cHByZXNzaWJsZSgpIGNvbnN0OwogCiAgICAg
dm9pZCBhZGRNSU1FVHlwZVdpdGhDdXN0b21Db250ZW50UHJvdmlkZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CiAKQEAgLTk1OSw2ICs5NTgsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRh
dGVWaWV3U3RhdGUoV2ViQ29yZTo6Vmlld1N0YXRlOjpGbGFncyBmbGFnc1RvVXBkYXRlID0gV2Vi
Q29yZTo6Vmlld1N0YXRlOjpBbGxGbGFncyk7CiAgICAgdm9pZCB1cGRhdGVBY3Rpdml0eVRva2Vu
KCk7CisgICAgdm9pZCB1cGRhdGVQcm9jY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsKIAogICAgIGVu
dW0gY2xhc3MgUmVzZXRTdGF0ZVJlYXNvbiB7CiAgICAgICAgIFBhZ2VJbnZhbGlkYXRlZCwKQEAg
LTE1ODEsNiArMTU4MSw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gbV90ZW1wb3JhcnlQREZGaWxlczsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6UnVuTG9vcE9ic2VydmVyPiBtX3ZpZXdTdGF0ZUNoYW5nZURpc3BhdGNo
ZXI7CisgICAgUmVmUHRyPFJlZkNvdW50ZXI6OkNvdW50PiBtX3ByZXZlbnRQcm9jZXNzU3VwcHJl
c3Npb247CiAjZW5kaWYKICAgICAgICAgCiAgICAgV2ViQ29yZTo6U2Nyb2xsUGlubmluZ0JlaGF2
aW9yIG1fc2Nyb2xsUGlubmluZ0JlaGF2aW9yOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDE3NzE2MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw2ICs5NCw3IEBAIFdlYlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5KFdlYkNvbnQKICAg
ICAsIG1fbWF5SGF2ZVVuaXZlcnNhbEZpbGVSZWFkU2FuZGJveEV4dGVuc2lvbihmYWxzZSkKICAg
ICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkodGhpcywgY29udGV4dCkKICNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICAsIG1fcGFnZXNQcmV2ZW50aW5nU3VwcHJlc3Npb24oW3RoaXNdKCkg
eyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQogICAgICwgbV9wcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX251bWJlck9mVGltZXNTdWRk
ZW5UZXJtaW5hdGlvbldhc0Rpc2FibGVkKDApCkBAIC0xODksMTEgKzE5MCw2IEBAIFBhc3NSZWZQ
dHI8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUHJveHkKICAgICBSZWZQdHI8V2ViUGFnZVByb3h5
PiB3ZWJQYWdlID0gV2ViUGFnZVByb3h5OjpjcmVhdGUocGFnZUNsaWVudCwgKnRoaXMsIHBhZ2VJ
RCwgY29uZmlndXJhdGlvbik7CiAgICAgbV9wYWdlTWFwLnNldChwYWdlSUQsIHdlYlBhZ2UuZ2V0
KCkpOwogICAgIGdsb2JhbFBhZ2VNYXAoKS5zZXQocGFnZUlELCB3ZWJQYWdlLmdldCgpKTsKLSNp
ZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAod2ViUGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxl
KCkpCi0gICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlSUQpOwotICAg
IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gd2Vi
UGFnZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTIwNCwxMSArMjAwLDYgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmFkZEV4aXN0aW5nV2ViUGFnZQogCiAgICAgbV9wYWdlTWFwLnNldChwYWdlSUQsIHdl
YlBhZ2UpOwogICAgIGdsb2JhbFBhZ2VNYXAoKS5zZXQocGFnZUlELCB3ZWJQYWdlKTsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBpZiAod2ViUGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkp
Ci0gICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlSUQpOwotICAgIHVw
ZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OnJlbW92ZVdlYlBhZ2UodWludDY0X3QgcGFnZUlEKQpAQCAtMjI0LDExICsyMTUs
NiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVtb3ZlV2ViUGFnZSh1aW50CiAgICAgZm9yIChh
dXRvIGl0ZW1JRCA6IGl0ZW1JRHNUb1JlbW92ZSkKICAgICAgICAgbV9iYWNrRm9yd2FyZExpc3RJ
dGVtTWFwLnJlbW92ZShpdGVtSUQpOwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgbV9wcm9j
ZXNzU3VwcHJlc3NpYmxlUGFnZXMucmVtb3ZlKHBhZ2VJRCk7Ci0gICAgdXBkYXRlUHJvY2Vzc1N1
cHByZXNzaW9uU3RhdGUoKTsKLSNlbmRpZgotCiAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qg
V2ViUGFnZSBvcGVuIGluIHRoYXQgd2ViIHByb2Nlc3MsIGFuZCB3ZSBoYXZlIG5vIG90aGVyIHJl
YXNvbiB0byBrZWVwIGl0IGFsaXZlLCBsZXQgaXQgZ28uCiAgICAgLy8gV2Ugb25seSBhbGxvdyB0
aGlzIHdoZW4gdXNpbmcgYSBuZXR3b3JrIHByb2Nlc3MsIGFzIG90aGVyd2lzZSB0aGUgV2ViUHJv
Y2VzcyBuZWVkcyB0byBwcmVzZXJ2ZSBpdHMgc2Vzc2lvbiBzdGF0ZS4KICAgICBpZiAoIW1fY29u
dGV4dC0+dXNlc05ldHdvcmtQcm9jZXNzKCkgfHwgc3RhdGUoKSA9PSBTdGF0ZTo6VGVybWluYXRl
ZCB8fCAhY2FuVGVybWluYXRlQ2hpbGRQcm9jZXNzKCkpCkBAIC02ODMsMzIgKzY2OSw2IEBAIHZv
aWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRVcGRhdGVIaXN0b3J5VGkKICAgICBtX2NvbnRleHQtPmhp
c3RvcnlDbGllbnQoKS5kaWRVcGRhdGVIaXN0b3J5VGl0bGUobV9jb250ZXh0LnB0cigpLCBwYWdl
LCB0aXRsZSwgdXJsLCBmcmFtZSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpwYWdlU3Vw
cHJlc3NpYmlsaXR5Q2hhbmdlZChXZWJLaXQ6OldlYlBhZ2VQcm94eSAqcGFnZSkKLXsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBpZiAocGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxlKCkpCi0g
ICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlLT5wYWdlSUQoKSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX3Byb2Nlc3NTdXBwcmVzc2libGVQYWdlcy5yZW1vdmUocGFnZS0+
cGFnZUlEKCkpOwotICAgIHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYlByb2Nlc3NQcm94
eTo6cGFnZVByZWZlcmVuY2VzQ2hhbmdlZChXZWJLaXQ6OldlYlBhZ2VQcm94eSAqcGFnZSkKLXsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAocGFnZS0+aXNQcm9jZXNzU3VwcHJlc3NpYmxl
KCkpCi0gICAgICAgIG1fcHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzLmFkZChwYWdlLT5wYWdlSUQo
KSk7Ci0gICAgZWxzZQotICAgICAgICBtX3Byb2Nlc3NTdXBwcmVzc2libGVQYWdlcy5yZW1vdmUo
cGFnZS0+cGFnZUlEKCkpOwotICAgIHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6ZGlkU2F2ZVRvUGFnZUNhY2hlKCkKIHsKICAgICBtX2NvbnRleHQtPnByb2Nlc3NE
aWRDYWNoZVBhZ2UodGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCShyZXZpc2lvbiAxNzcxNjApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlci5oPgogCiAj
aWYgUExBVEZPUk0oSU9TKQogI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKQEAgLTExOCw4
ICsxMTksMTIgQEAgcHVibGljOgogCiAgICAgRG93bmxvYWRQcm94eSogY3JlYXRlRG93bmxvYWRQ
cm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKIAotICAgIHZvaWQgcGFnZVN1
cHByZXNzaWJpbGl0eUNoYW5nZWQoV2ViUGFnZVByb3h5Kik7Ci0gICAgdm9pZCBwYWdlUHJlZmVy
ZW5jZXNDaGFuZ2VkKFdlYlBhZ2VQcm94eSopOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFBh
c3NSZWZQdHI8UmVmQ291bnRlcjo6Q291bnQ+IHByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb25Gb3JQ
YWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhZ2VzUHJldmVudGluZ1N1cHByZXNzaW9u
LmNvdW50KCk7CisgICAgfQorI2VuZGlmCiAKICAgICB2b2lkIGRpZFNhdmVUb1BhZ2VDYWNoZSgp
OwogICAgIHZvaWQgcmVsZWFzZVBhZ2VDYWNoZSgpOwpAQCAtMjI2LDcgKzIzMSw3IEBAIHByaXZh
dGU6CiAgICAgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkgbV9jdXN0b21Qcm90b2NvbE1hbmFn
ZXJQcm94eTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1f
cHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzOworICAgIFJlZkNvdW50ZXIgbV9wYWdlc1ByZXZlbnRp
bmdTdXBwcmVzc2lvbjsKICAgICBib29sIG1fcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZDsKICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlByb2Nlc3NQcm94
eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBy
b2Nlc3NQcm94eU1hYy5tbQkocmV2aXNpb24gMTc3MTYwKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcg
KzYyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoTwogCiBib29s
IFdlYlByb2Nlc3NQcm94eTo6YWxsUGFnZXNBcmVQcm9jZXNzU3VwcHJlc3NpYmxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gKG1fcHJvY2Vzc1N1cHByZXNzaWJsZVBhZ2VzLnNpemUoKSA9PSBtX3Bh
Z2VNYXAuc2l6ZSgpKSAmJiAhbV9wcm9jZXNzU3VwcHJlc3NpYmxlUGFnZXMuaXNFbXB0eSgpOwor
ICAgIHJldHVybiAhbV9wYWdlc1ByZXZlbnRpbmdTdXBwcmVzc2lvbi52YWx1ZSgpOwogfQogCiB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKQo=
</data>
<flag name="review"
          id="268002"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>