<?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>131776</bug_id>
          
          <creation_ts>2014-04-16 17:17:14 -0700</creation_ts>
          <short_desc>Find on page - extend API by providing highlighted match index</short_desc>
          <delta_ts>2014-04-22 16:35:52 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alice Liu">alice.barraclough</reporter>
          <assigned_to name="Alice Liu">alice.barraclough</assigned_to>
          <cc>alice.barraclough</cc>
    
    <cc>enrica</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1001416</commentid>
    <comment_count>0</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2014-04-16 17:17:14 -0700</bug_when>
    <thetext>The API of WebPage provides a way to find and visually indicate a string in the webpage, which is the &quot;findString&quot; function. In response, the WebProcess responds via a &quot;DidFindString&quot; message containing the string, and number of matches.  We could expand the data in this response to also include, if applicable, the index of the matched string among all matches.  Since each subsequent call to &quot;findString&quot; results in a different occurrence being highlighted, this highlighted index data is relevant to the response.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001429</commentid>
    <comment_count>1</comment_count>
      <attachid>229506</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2014-04-16 17:42:28 -0700</bug_when>
    <thetext>Created attachment 229506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001506</commentid>
    <comment_count>2</comment_count>
      <attachid>229506</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-17 00:15:28 -0700</bug_when>
    <thetext>Comment on attachment 229506
Patch

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

&gt; Source/WebKit2/ChangeLog:31
&gt; +            Pull out the calculation of matchCount because it was only being done if the highlight or overlay flag bits

This was intentional, I believe. We should first understand whether there is any significant performance impact for clients who specify neither of those flags *and* don&apos;t need the total match count (and also whether there are any such clients). If we decide that there are and it is a significant impact, we could add a new find option that means &quot;I really want an accurate count, not just the next string&quot;

&gt; Source/WebKit2/ChangeLog:36
&gt; +        to be less than match count. In other words this is like performing a mathematical modulo operation, except it&apos;s
&gt; +        not as inefficient or undefined for negative numbers as &quot;%&quot; operator is.

this last sentence of commentary is a bit unnecessary :)

&gt; Source/WebKit2/UIProcess/API/C/WKPageFindClient.h:35
&gt; -typedef void (*WKPageDidFindStringCallback)(WKPageRef page, WKStringRef string, unsigned matchCount, const void* clientInfo);
&gt; +typedef void (*WKPageDidFindStringCallback)(WKPageRef page, WKStringRef string, unsigned matchCount, int matchIndex, const void* clientInfo);

I don&apos;t think we can change the C API willy-nilly like this.

I wonder if we should add a new client callback/WKFindDelegate callback (DidIndicateMatch or something) instead of changing the old one. In any case you&apos;ll have to version this somehow.

&gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:134
&gt; +        if (pluginView)

aforementioned perf concerns

&gt; Source/WebKit2/WebProcess/WebPage/FindController.h:99
&gt; +    // Index value is -1 if not showing find indicator.
&gt; +    int m_foundStringMatchIndex;

The name doesn&apos;t sound like it has anything to do with the indicator. Also, isn&apos;t it updated and send correctly even if not using the indicator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001649</commentid>
    <comment_count>3</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2014-04-17 13:04:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 229506 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229506&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:31
&gt; &gt; +            Pull out the calculation of matchCount because it was only being done if the highlight or overlay flag bits
&gt; 
&gt; This was intentional, I believe. We should first understand whether there is any significant performance impact for clients who specify neither of those flags *and* don&apos;t need the total match count (and also whether there are any such clients). If we decide that there are and it is a significant impact, we could add a new find option that means &quot;I really want an accurate count, not just the next string&quot;

I like the idea of adding a new FindOption, but i&apos;m not sure if describing it as &quot;really wanting an accurate count&quot; is the best way to say it.  That flag wouldn&apos;t mean much or result in an accurate count if the actual count exceeds the client-provided maxCount. I think we want something like FindOptionDetermineMatchIndex? It would fit with the other find options that describe actions. 

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/WKPageFindClient.h:35
&gt; &gt; -typedef void (*WKPageDidFindStringCallback)(WKPageRef page, WKStringRef string, unsigned matchCount, const void* clientInfo);
&gt; &gt; +typedef void (*WKPageDidFindStringCallback)(WKPageRef page, WKStringRef string, unsigned matchCount, int matchIndex, const void* clientInfo);
&gt; 
&gt; I don&apos;t think we can change the C API willy-nilly like this.
&gt; 
&gt; I wonder if we should add a new client callback/WKFindDelegate callback (DidIndicateMatch or something) instead of changing the old one. In any case you&apos;ll have to version this somehow.

ah, yes, i&apos;ll version.  Do you prefer adding DidIndicateMatch or altering DidFindString?  I somewhat prefer altering DidFindString because the data provided is pertinent to the found string.  The FindOptionsShowFindIndicator flag need not be on for the matchIndex data to be applicable.  

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:134
&gt; &gt; +        if (pluginView)
&gt; 
&gt; aforementioned perf concerns

Unintentional perf concerns would be eliminated by a new FindOption opting into tracking total matches in my response above. 

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/FindController.h:99
&gt; &gt; +    // Index value is -1 if not showing find indicator.
&gt; &gt; +    int m_foundStringMatchIndex;
&gt; 
&gt; The name doesn&apos;t sound like it has anything to do with the indicator. Also, isn&apos;t it updated and send correctly even if not using the indicator?

True, and yes.  It would be more accurate to say the value is -1 if not found or if match number of matches exceed max.  Regarding the variable name, since the match index is trackable regardless of whether the match is being indicated, I would say the variable name doesn&apos;t need to have &quot;indicate&quot; in its name. 


New patch coming.  Thanks Tim.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001830</commentid>
    <comment_count>4</comment_count>
      <attachid>229619</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2014-04-17 21:04:57 -0700</bug_when>
    <thetext>Created attachment 229619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001917</commentid>
    <comment_count>5</comment_count>
      <attachid>229619</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-18 08:17:40 -0700</bug_when>
    <thetext>Comment on attachment 229619
Patch

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

&gt; Source/WebKit2/UIProcess/API/C/WKPage.cpp:708
&gt; -        virtual void didFindString(WebPageProxy* page, const String&amp; string, uint32_t matchCount) override
&gt; +        virtual void didFindString(WebPageProxy* page, const String&amp; string, uint32_t matchCount, int32_t matchIndex) override

You don&apos;t seem to have revved the C API. That said, mitz pointed out that we can probably just ignore the C API (don&apos;t change it to support the new parameter at all) for this new feature.

&gt; Source/WebKit2/UIProcess/API/Cocoa/_WKFindDelegate.h:37
&gt; +- (void)_webView:(WKWebView *)webView didFindMatches:(NSUInteger)matches forString:(NSString *)string indicatingMatchIndex:(NSInteger)matchIndex;

should this selector name still have &quot;indicating&quot; in it, now that it&apos;s possible to DetermineMatchIndex without ShowFindIndicator?

&gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:-138
&gt; -                matchCount = pluginView-&gt;countFindMatches(string, core(options), maxMatchCount + 1);

Should you still be removing this? Does it not break PDF find-in-page on desktop (since I assume DetermineMatchIndex is not passed in).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001970</commentid>
    <comment_count>6</comment_count>
      <attachid>229661</attachid>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2014-04-18 11:53:21 -0700</bug_when>
    <thetext>Created attachment 229661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002030</commentid>
    <comment_count>7</comment_count>
      <attachid>229661</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-18 14:26:23 -0700</bug_when>
    <thetext>Comment on attachment 229661
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:136
&gt; +            if (pluginView)
&gt; +                matchCount = pluginView-&gt;countFindMatches(string, core(options), maxMatchCount + 1);

I&apos;m not sure this comment from last time got fixed (below) but I can&apos;t tell because your patch doesn&apos;t let me expand context for some reason :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002031</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-18 14:27:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 229661 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229661&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:136
&gt; &gt; +            if (pluginView)
&gt; &gt; +                matchCount = pluginView-&gt;countFindMatches(string, core(options), maxMatchCount + 1);
&gt; 
&gt; I&apos;m not sure this comment from last time got fixed (below) but I can&apos;t tell because your patch doesn&apos;t let me expand context for some reason :D

It did, I just misread. Now we countFindMatches twice in the PluginView case, though.

Also, WKPage is still touched; is that intentional? Seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002032</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-18 14:27:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 229661 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229661&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/FindController.cpp:136
&gt; &gt; &gt; +            if (pluginView)
&gt; &gt; &gt; +                matchCount = pluginView-&gt;countFindMatches(string, core(options), maxMatchCount + 1);
&gt; &gt; 
&gt; &gt; I&apos;m not sure this comment from last time got fixed (below) but I can&apos;t tell because your patch doesn&apos;t let me expand context for some reason :D
&gt; 
&gt; It did, I just misread. Now we countFindMatches twice in the PluginView case, though.
&gt; 
&gt; Also, WKPage is still touched; is that intentional? Seems wrong.

No, actually, that&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1003101</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-22 16:35:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/167519</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229506</attachid>
            <date>2014-04-16 17:42:28 -0700</date>
            <delta_ts>2014-04-17 21:04:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131776-20140416174257.patch</filename>
            <type>text/plain</type>
            <size>18200</size>
            <attacher name="Alice Liu">alice.barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzQwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE0LTA0LTE2ICBBbGljZSBC
YXJyYWNsb3VnaCAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CisKKyAgICAgICAgRmluZCBvbiBwYWdl
IC0gZXh0ZW5kIEFQSSBieSBwcm92aWRpbmcgaGlnaGxpZ2h0ZWQgbWF0Y2ggaW5kZXgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc3NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBsdW1iIHRocm91Z2gg
dGhlIEFQSSBsYXllcnMgdGhlIGFkZGl0aW9uIG9mIGEgcGFyYW1ldGVyIGZvciBtYXRjaCBpbmRl
eC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAgKEFQ
STo6RmluZENsaWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS0ZpbmREZWxlZ2F0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9GaW5kQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQubW06
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDbGllbnQ6OnNldERlbGVnYXRlKToKKyAgICAgICAgKFdl
YktpdDo6RmluZENsaWVudDo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YkZpbmRDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGaW5kQ2xpZW50OjpkaWRGaW5k
U3RyaW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRmluZENsaWVudC5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OmRpZEZpbmRTdHJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAK
KyAgICAgICAgVGhlIGFjdHVhbCB0cmFja2luZyBvZiB0aGUgbWF0Y2ggaW5kZXggaXMgY29udGFp
bmVkIGluIEZpbmRDb250cm9sbGVyIGNsYXNzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpG
aW5kQ29udHJvbGxlcik6IFN0YXJ0IG91dCBhcyAtMSwgdW5kZXJzdG9vZCB0byBiZSBhbiB1bmRl
ZmluZWQgaW5kZXggaW4gdGhpcyBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJv
bGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKTogCisgICAgICAgICAgICBQdWxsIG91
dCB0aGUgY2FsY3VsYXRpb24gb2YgbWF0Y2hDb3VudCBiZWNhdXNlIGl0IHdhcyBvbmx5IGJlaW5n
IGRvbmUgaWYgdGhlIGhpZ2hsaWdodCBvciBvdmVybGF5IGZsYWcgYml0cworICAgICAgICB3ZXJl
IG9uLiBJZiBtYXRjaENvdW50IGV4Y2VlZHMgbWF4LCBrZWVwIHRoZSBtYXRjaCBpbmRleCB1bmRl
ZmluZWQgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGZpbmRpbmcgY291bGQgYWR2YW5jZQorICAgICAg
ICB0byBhIHBvaW50IHdoZXJlIHRoZSBpbmRleCBleGNlZWRzIHRoZSBtYXRjaCBjb3VudCwgbGVn
aXRpbWF0ZWx5LiBJZiBtYXRjaENvdW50IGRvZXNuJ3QgZXhjZWVkIHRoZSBtYXgsIHRoZW4gbWFr
ZQorICAgICAgICBzdXJlIHRoZSBtYXRjaCBpbmRleCwgd2hpY2ggaGFkIGJlZW4gYmVpbmcgaW5j
cmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQgYmxpbmRseSBiYWNrIGluIGZpbmRTdHJpbmcoKSwgaXMg
bm9ybWFsaXplZAorICAgICAgICB0byBiZSBsZXNzIHRoYW4gbWF0Y2ggY291bnQuIEluIG90aGVy
IHdvcmRzIHRoaXMgaXMgbGlrZSBwZXJmb3JtaW5nIGEgbWF0aGVtYXRpY2FsIG1vZHVsbyBvcGVy
YXRpb24sIGV4Y2VwdCBpdCdzCisgICAgICAgIG5vdCBhcyBpbmVmZmljaWVudCBvciB1bmRlZmlu
ZWQgZm9yIG5lZ2F0aXZlIG51bWJlcnMgYXMgIiUiIG9wZXJhdG9yIGlzLgorICAgICAgICAoV2Vi
S2l0OjpGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyk6IAorICAgICAgICAgICAgSWYgdGhlcmUg
aXMgYSB1c2VyIHNlbGVjdGlvbiBleGlzdGluZyBvbiB0aGUgcGFnZSwgdGhlIG5leHQgb2NjdXJl
bmNlIG9mIHRoZSBzdHJpbmcgd2lsbCBiZSBmb3VuZCBhZnRlciB0aGF0CisgICAgICAgIHNlbGVj
dGlvbi4gSW4gdGhhdCBjYXNlIHdlIHN0aWxsIHdhbnQgdGhlIGluZGV4IHRvIHByb3Blcmx5IHJl
ZmxlY3QgaXRzIG9yZGluYWwgIHBvc2l0aW9uIHdpdGhpbiB0aGUgZW50aXJlIGRvY3VtZW50Lgor
ICAgICAgICBVc2UgZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzIHRvIHByb3ZpZGUgdGhlIG1hdGNo
IGluZGV4LCBhbmQgc2V0IGEgZmxhZyB0aGF0IHByZXZlbnRzIHRoZSBtYXRjaCBpbmRleCBmcm9t
IGJlaW5nCisgICAgICAgIGJsaW5kbHkgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQgbGF0ZXIu
IEFmdGVyIGZpbmRTdHJpbmcoKSBpcyBhY3R1YWxseSBjYWxsZWQgb24gdGhlIHBhZ2UsIGluY3Jl
bWVudCBvciBkZWNyZW1lbnQKKyAgICAgICAgdGhlIGZpbmQgaW5kZXggdW5kZXIgc3BlY2lmaWMg
Y29uZGl0aW9ucy4gCisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpoaWRlRmluZElu
ZGljYXRvcik6IFJlc2V0IG1hdGNoIGluZGV4IHdoZW4gZmluZCBVSSBnb2VzIGF3YXkuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmg6IEFkZCBtX2ZvdW5kU3Ry
aW5nTWF0Y2hJbmRleCB0byBwcml2YXRlIHZhcmlhYmxlcy4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpGaW5k
Q29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IpOiBSZXNldCBtYXRjaCBpbmRleCB3aGVuIGZp
bmQgVUkgZ29lcyBhd2F5LgorCiAyMDE0LTA0LTE2ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtA
aWdhbGlhLmNvbT4KIAogICAgICAgICBNYWtlIElQQzo6QXJndW1lbnRzIGEgdmFyaWFkaWMgdGVt
cGxhdGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGaW5kQ2xpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRmluZENsaWVudC5jcHAJ
KHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGaW5kQ2xp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEyIEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi12b2lkIFdlYkZpbmRDbGllbnQ6OmRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5
KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKK3ZvaWQg
V2ViRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCiB7
CiAgICAgaWYgKCFtX2NsaWVudC5kaWRGaW5kU3RyaW5nKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2NsaWVudC5kaWRGaW5kU3RyaW5nKHRvQVBJKHBhZ2UpLCB0b0FQSShzdHJpbmcuaW1wbCgp
KSwgbWF0Y2hDb3VudCwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICBtX2NsaWVudC5k
aWRGaW5kU3RyaW5nKHRvQVBJKHBhZ2UpLCB0b0FQSShzdHJpbmcuaW1wbCgpKSwgbWF0Y2hDb3Vu
dCwgbWF0Y2hJbmRleCwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIAogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRmluZENsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGaW5kQ2xpZW50LmgJKHJldmlzaW9uIDE2NzE3NykK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGaW5kQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgV2ViSW1hZ2U7CiAKIGNsYXNzIFdlYkZpbmRDbGll
bnQgOiBwdWJsaWMgQVBJOjpDbGllbnQ8V0tQYWdlRmluZENsaWVudEJhc2U+IHsKIHB1YmxpYzoK
LSAgICB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgdWlu
dDMyX3QgbWF0Y2hDb3VudCk7CisgICAgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSos
IGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCk7
CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmlu
ZyYpOwogICAgIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNjcxNzcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1
NSw5ICszMjU1LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRJbmRpY2F0b3IoY29ucwog
ICAgIG1fcGFnZUNsaWVudC5zZXRGaW5kSW5kaWNhdG9yKGZpbmRJbmRpY2F0b3IucmVsZWFzZSgp
LCBmYWRlT3V0LCBhbmltYXRlKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkRmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0
Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogewotICAgIG1fZmluZENsaWVudC0+ZGlkRmlu
ZFN0cmluZyh0aGlzLCBzdHJpbmcsIG1hdGNoQ291bnQpOworICAgIG1fZmluZENsaWVudC0+ZGlk
RmluZFN0cmluZyh0aGlzLCBzdHJpbmcsIG1hdGNoQ291bnQsIG1hdGNoSW5kZXgpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4+IG1hdGNoUmVjdHMsIGludDMyX3Qg
Zmlyc3RJbmRleEFmdGVyU2VsZWN0aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTYsNyArODE2LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRp
b25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KTsKICAgICB2b2lkIGRpZENvdW50U3RyaW5nTWF0
Y2hlcyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKICAgICB2b2lkIHNldEZp
bmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5k
b3dDb29yZGluYXRlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0
c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBmbG9hdCBjb250ZW50SW1hZ2VTY2FsZUZhY3Rv
ciwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9v
bCBmYWRlT3V0LCBib29sIGFuaW1hdGUpOwotICAgIHZvaWQgZGlkRmluZFN0cmluZyhjb25zdCBT
dHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKKyAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29u
c3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KTsKICAg
ICB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRG
aW5kU3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+PiBtYXRjaFJlY3RzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgIyBGaW5kIG1lc3NhZ2VzCiAgICAgRGlk
Q291bnRTdHJpbmdNYXRjaGVzKFN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCiAg
ICAgU2V0RmluZEluZGljYXRvcihXZWJDb3JlOjpGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdCwgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4gdGV4dFJlY3RzLCBmbG9hdCBjb250ZW50SW1hZ2VTY2Fs
ZUZhY3RvciwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5k
bGUsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKQotICAgIERpZEZpbmRTdHJpbmcoU3RyaW5n
IHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKKyAgICBEaWRGaW5kU3RyaW5nKFN0cmluZyBz
dHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKICAgICBEaWRG
YWlsVG9GaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcpCiAgICAgRGlkRmluZFN0cmluZ01hdGNoZXMo
U3RyaW5nIHN0cmluZywgVmVjdG9yPFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4gbWF0Y2hlcywg
aW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24pCiAgICAgRGlkR2V0SW1hZ2VGb3JGaW5k
TWF0Y2goV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBjb250ZW50SW1hZ2VIYW5kbGUs
IHVpbnQzMl90IG1hdGNoSW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSUZpbmRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSUZpbmRDbGllbnQuaAkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkZpbmRDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25z
dCBXVEY6OlN0cmluZyYsIHVpbnQzMl90KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0
cmluZyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgdWludDMyX3Qp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYktpdDo6V2ViUGFnZVByb3h5
KiwgY29uc3QgV1RGOjpTdHJpbmcmLCB1aW50MzJfdCwgaW50MzJfdCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBX
VEY6OlN0cmluZyYpIHsgfQogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsMTIgKzcwNSwxMiBA
QCB2b2lkIFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KFdLUGFnZVJlZiBwCiAgICAgICAgIH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQ
cm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpIG92
ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSog
cGFnZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3Qg
bWF0Y2hJbmRleCkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5kaWRGaW5kU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9jbGllbnQuZGlkRmluZFN0cmluZyh0b0FQSShwYWdlKSwgdG9BUEkoc3Ry
aW5nLmltcGwoKSksIG1hdGNoQ291bnQsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAg
ICAgICAgICBtX2NsaWVudC5kaWRGaW5kU3RyaW5nKHRvQVBJKHBhZ2UpLCB0b0FQSShzdHJpbmcu
aW1wbCgpKSwgbWF0Y2hDb3VudCwgbWF0Y2hJbmRleCwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5n
KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpIG92ZXJyaWRlCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlRmluZENsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VGaW5kQ2xpZW50
LmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2VGaW5kQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIGV4dGVy
biAiQyIgewogI2VuZGlmCiAKLXR5cGVkZWYgdm9pZCAoKldLUGFnZURpZEZpbmRTdHJpbmdDYWxs
YmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQgbWF0Y2hD
b3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRG
aW5kU3RyaW5nQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIHVu
c2lnbmVkIG1hdGNoQ291bnQsIGludCBtYXRjaEluZGV4LCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKIHR5cGVkZWYgdm9pZCAoKldLUGFnZURpZEZhaWxUb0ZpbmRTdHJpbmdDYWxsYmFjaykoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7
CiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRDb3VudFN0cmluZ01hdGNoZXNDYWxsYmFjaykoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQgbWF0Y2hDb3VudCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLRmluZERlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tGaW5kRGVsZWdhdGUuaAkocmV2aXNpb24gMTY3MTc3KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tGaW5kRGVsZWdhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogQG9wdGlvbmFsCiAKIC0gKHZvaWQpX3dl
YlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQ291bnRNYXRjaGVzOihOU1VJbnRlZ2VyKW1h
dGNoZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKLS0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZE1hdGNoZXM6KE5TVUludGVnZXIpbWF0Y2hlcyBmb3JT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICop
d2ViVmlldyBkaWRGaW5kTWF0Y2hlczooTlNVSW50ZWdlciltYXRjaGVzIGZvclN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcgaW5kaWNhdGluZ01hdGNoSW5kZXg6KE5TSW50ZWdlciltYXRjaEluZGV4
OwogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGYWlsVG9GaW5kU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZzsKIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5oCShyZXZpc2lvbiAxNjcxNzcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgLy8gRnJvbSBBUEk6OkZpbmRDbGll
bnQKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdlYlBhZ2VQcm94eSos
IGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNo
Q291bnQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNv
bnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiwgY29uc3Qg
U3RyaW5nJik7CiAgICAgCiAgICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRmluZENsaWVudC5tbQkocmV2aXNpb24gMTY3MTc3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgdm9pZCBGaW5kQ2xpZW50OjpzZXREZWxlZ2F0ZShp
ZCA8X1dLRmluZAogICAgIG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAogICAgIG1fZGVsZWdhdGVN
ZXRob2RzLndlYnZpZXdEaWRDb3VudFN0cmluZ01hdGNoZXMgPSBbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkaWRDb3VudE1hdGNoZXM6Zm9yU3RyaW5nOild
OwotICAgIG1fZGVsZWdhdGVNZXRob2RzLndlYnZpZXdEaWRGaW5kU3RyaW5nID0gW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkRmluZE1hdGNoZXM6Zm9y
U3RyaW5nOildOworICAgIG1fZGVsZWdhdGVNZXRob2RzLndlYnZpZXdEaWRGaW5kU3RyaW5nID0g
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkRmluZE1h
dGNoZXM6Zm9yU3RyaW5nOmluZGljYXRpbmdNYXRjaEluZGV4OildOwogICAgIG1fZGVsZWdhdGVN
ZXRob2RzLndlYnZpZXdEaWRGYWlsVG9GaW5kU3RyaW5nID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkRmFpbFRvRmluZFN0cmluZzopXTsKIH0KICAg
ICAKQEAgLTU3LDEwICs1NywxMCBAQCB2b2lkIEZpbmRDbGllbnQ6OmRpZENvdW50U3RyaW5nTWF0
Y2hlcyhXCiAgICAgICAgIFttX2RlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fd2ViVmlldyBkaWRD
b3VudE1hdGNoZXM6bWF0Y2hDb3VudCBmb3JTdHJpbmc6c3RyaW5nXTsKIH0KIAotdm9pZCBGaW5k
Q2xpZW50OjpkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgc3RyaW5n
LCB1aW50MzJfdCBtYXRjaENvdW50KQordm9pZCBGaW5kQ2xpZW50OjpkaWRGaW5kU3RyaW5nKFdl
YlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50LCBp
bnQzMl90IG1hdGNoSW5kZXgpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLndlYnZpZXdE
aWRGaW5kU3RyaW5nKQotICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfd2ViVmlldzptX3dlYlZp
ZXcgZGlkRmluZE1hdGNoZXM6bWF0Y2hDb3VudCBmb3JTdHJpbmc6c3RyaW5nXTsKKyAgICAgICAg
W21fZGVsZWdhdGUuZ2V0KCkgX3dlYlZpZXc6bV93ZWJWaWV3IGRpZEZpbmRNYXRjaGVzOm1hdGNo
Q291bnQgZm9yU3RyaW5nOnN0cmluZyBpbmRpY2F0aW5nTWF0Y2hJbmRleDptYXRjaEluZGV4XTsK
IH0KIAogdm9pZCBGaW5kQ2xpZW50OjpkaWRGYWlsVG9GaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSos
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNjcxNzcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIEZpbmRDb250cm9sbGVyOjpGaW5kQ29udHJv
bGxlcihXZWJQYWdlKiAKICAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQogICAgICwgbV9maW5kUGFn
ZU92ZXJsYXkoMCkKICAgICAsIG1faXNTaG93aW5nRmluZEluZGljYXRvcihmYWxzZSkKKyAgICAs
IG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KC0xKQogewogfQogCkBAIC0xMzAsMTIgKzEzMSwxNiBA
QCB2b2lkIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhCiAgICAgICAgIGJvb2wg
c2hvdWxkU2hvd0hpZ2hsaWdodCA9IG9wdGlvbnMgJiBGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQ7
CiAgICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAxOwogCisgICAgICAgIGlmIChwbHVnaW5W
aWV3KQorICAgICAgICAgICAgbWF0Y2hDb3VudCA9IHBsdWdpblZpZXctPmNvdW50RmluZE1hdGNo
ZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50ICsgMSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1hdGNoQ291bnQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmNvdW50
RmluZE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50ICsgMSk7CisK
ICAgICAgICAgaWYgKHNob3VsZFNob3dPdmVybGF5IHx8IHNob3VsZFNob3dIaWdobGlnaHQpIHsK
ICAgICAgICAgICAgIGlmIChtYXhNYXRjaENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKICAgICAgICAgICAgICAgICAtLW1heE1hdGNoQ291bnQ7CiAKICAgICAg
ICAgICAgIGlmIChwbHVnaW5WaWV3KSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hDb3VudCA9IHBs
dWdpblZpZXctPmNvdW50RmluZE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRj
aENvdW50ICsgMSk7CiAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd092ZXJsYXkgPSBmYWxzZTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwpAQCAtMTQ4LDggKzE1MywxNiBAQCB2b2lkIEZp
bmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhCiAgICAgICAgICAgICAgICAgbWF0Y2hD
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhhbk1heGltdW1NYXRjaENvdW50
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hDb3VudCA9PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oa1dLTW9yZVRoYW5NYXhpbXVtTWF0Y2hDb3VudCkpCisgICAg
ICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA9IC0xOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA8IDApCisgICAgICAgICAgICAg
ICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggKz0gbWF0Y2hDb3VudDsKKyAgICAgICAgICAgIGlm
IChtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCA+PSAoaW50KSBtYXRjaENvdW50KQorICAgICAgICAg
ICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IC09IG1hdGNoQ291bnQ7CisgICAgICAgIH0K
IAotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlu
ZFN0cmluZyhzdHJpbmcsIG1hdGNoQ291bnQpKTsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmcoc3RyaW5nLCBtYXRjaENvdW50LCBt
X2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCkpOwogCiAgICAgICAgIGlmICghKG9wdGlvbnMgJiBGaW5k
T3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yKSB8fCAhc2VsZWN0ZWRGcmFtZSB8fCAhdXBkYXRlRmlu
ZEluZGljYXRvcigqc2VsZWN0ZWRGcmFtZSwgc2hvdWxkU2hvd092ZXJsYXkpKQogICAgICAgICAg
ICAgaGlkZUZpbmRJbmRpY2F0b3IoKTsKQEAgLTE4MywxMiArMTk2LDMzIEBAIHZvaWQgRmluZENv
bnRyb2xsZXI6OmZpbmRTdHJpbmcoY29uc3QgU3QKIAogICAgIHdpbGxGaW5kU3RyaW5nKCk7CiAK
KyAgICBib29sIGZvdW5kU3RyaW5nU3RhcnRzQWZ0ZXJTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICBp
ZiAoIXBsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBzZWxlY3RlZEZyYW1lID0gZnJh
bWVXaXRoU2VsZWN0aW9uKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKSkpIHsKKyAgICAgICAgICAgIEZy
YW1lU2VsZWN0aW9uJiBmcyA9IHNlbGVjdGVkRnJhbWUtPnNlbGVjdGlvbigpOworICAgICAgICAg
ICAgaWYgKGZzLnNlbGVjdGlvbkJvdW5kcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IG1fZmluZE1hdGNoZXMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JTZWxl
Y3Rpb247CisgICAgICAgICAgICAgICAgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5n
TWF0Y2hpbmdSYW5nZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50LCAmbV9m
aW5kTWF0Y2hlcywgaW5kZXhGb3JTZWxlY3Rpb24pOworICAgICAgICAgICAgICAgIG1fZm91bmRT
dHJpbmdNYXRjaEluZGV4ID0gaW5kZXhGb3JTZWxlY3Rpb247CisgICAgICAgICAgICAgICAgZm91
bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbiA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBib29sIGZvdW5kOwogICAgIGlmIChwbHVnaW5WaWV3KQogICAg
ICAgICBmb3VuZCA9IHBsdWdpblZpZXctPmZpbmRTdHJpbmcoc3RyaW5nLCBjb3JlT3B0aW9ucywg
bWF4TWF0Y2hDb3VudCk7CiAgICAgZWxzZQogICAgICAgICBmb3VuZCA9IG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmVPcHRpb25zKTsKIAorICAgIGlmIChmb3Vu
ZCAmJiAhZm91bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbikgeworICAgICAgICBpZiAob3B0
aW9ucyAmIEZpbmRPcHRpb25zQmFja3dhcmRzKQorICAgICAgICAgICAgbV9mb3VuZFN0cmluZ01h
dGNoSW5kZXgtLTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mb3VuZFN0cmluZ01hdGNo
SW5kZXgrKzsKKyAgICB9CisKICAgICBtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCktPmRpc3BhdGNo
QWZ0ZXJFbnN1cmluZ1VwZGF0ZWRTY3JvbGxQb3NpdGlvbihXVEY6OmJpbmQoJkZpbmRDb250cm9s
bGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwsIHRoaXMsIGZvdW5kLCBzdHJpbmcsIG9w
dGlvbnMsIG1heE1hdGNoQ291bnQpKTsKIH0KIApAQCAtMzMzLDYgKzM2Nyw3IEBAIHZvaWQgRmlu
ZENvbnRyb2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKCkKICAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGU7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlNldEZpbmRJbmRpY2F0b3IoRmxvYXRSZWN0KCksIFZlY3RvcjxGbG9hdFJlY3Q+KCksIG1fd2Vi
UGFnZS0+Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgaGFuZGxlLCBmYWxzZSwgdHJ1
ZSkpOwogICAgIG1faXNTaG93aW5nRmluZEluZGljYXRvciA9IGZhbHNlOworICAgIG1fZm91bmRT
dHJpbmdNYXRjaEluZGV4ID0gLTE7CiAgICAgZGlkSGlkZUZpbmRJbmRpY2F0b3IoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3I7CiAgICAgV2ViQ29y
ZTo6SW50UmVjdCBtX2ZpbmRJbmRpY2F0b3JSZWN0OwogICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+PiBtX2ZpbmRNYXRjaGVzOworICAgIC8vIEluZGV4IHZhbHVlIGlzIC0xIGlmIG5v
dCBzaG93aW5nIGZpbmQgaW5kaWNhdG9yLgorICAgIGludCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRl
eDsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBSZWZQdHI8UGFnZU92ZXJsYXk+IG1fZmluZElu
ZGljYXRvck92ZXJsYXk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDE2NzE3
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xs
ZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEZpbmRDb250
cm9sbGVyOjpoaWRlRmluZEluZGljYXRvcigpCiAgICAgbV93ZWJQYWdlLT51bmluc3RhbGxQYWdl
T3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsKICAgICBtX2ZpbmRJbmRpY2F0
b3JPdmVybGF5ID0gbnVsbHB0cjsKICAgICBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0b3IgPSBmYWxz
ZTsKLQorICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CiAgICAgZGlkSGlkZUZpbmRJ
bmRpY2F0b3IoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229619</attachid>
            <date>2014-04-17 21:04:57 -0700</date>
            <delta_ts>2014-04-18 11:53:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131776-20140417210500.patch</filename>
            <type>text/plain</type>
            <size>18902</size>
            <attacher name="Alice Liu">alice.barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzQwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE0LTA0LTE3ICBBbGljZSBC
YXJyYWNsb3VnaCAgPGFsaWNlLmJhcnJhY2xvdWdoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmlu
ZCBvbiBwYWdlIC0gZXh0ZW5kIEFQSSBieSBwcm92aWRpbmcgaGlnaGxpZ2h0ZWQgbWF0Y2ggaW5k
ZXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hh
cmVkL1dlYkZpbmRPcHRpb25zLmg6IEFkZCBhbiBvcHRpb24gZm9yIGRldGVybWluaW5nIG1hdGNo
IGluZGV4LgorCisgICAgICAgIFBsdW1iIHRocm91Z2ggdGhlIEFQSSBsYXllcnMgdGhlIGFkZGl0
aW9uIG9mIGEgcGFyYW1ldGVyIGZvciBtYXRjaCBpbmRleC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6RmluZENsaWVudDo6ZGlkRmluZFN0
cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChX
S1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICh0b0ZpbmRPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKE5TX09QVElPTlMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRmluZERlbGVnYXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvRmluZENsaWVudC5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudDo6c2V0RGVsZWdh
dGUpOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ2xpZW50OjpkaWRGaW5kU3RyaW5nKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViRmluZENsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZp
bmRDbGllbnQ6OmRpZEZpbmRTdHJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGaW5kQ2xp
ZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46CisKKyAgICAgICAgVGhlIGFjdHVhbCB0cmFja2luZyBvZiB0aGUgbWF0Y2ggaW5kZXgg
aXMgY29udGFpbmVkIGluIEZpbmRDb250cm9sbGVyIGNsYXNzLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250
cm9sbGVyOjpGaW5kQ29udHJvbGxlcik6IFN0YXJ0IG91dCBhcyAtMSwgdW5kZXJzdG9vZCB0byBi
ZSBhbiB1bmRlZmluZWQgaW5kZXggaW4gdGhpcyBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpG
aW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKTogCisgICAgICAgICAg
ICBQdWxsIG91dCB0aGUgY2FsY3VsYXRpb24gb2YgbWF0Y2hDb3VudCBiZWNhdXNlIGl0IHdhcyBv
bmx5IGJlaW5nIGRvbmUgaWYgdGhlIGhpZ2hsaWdodCBvciBvdmVybGF5IGZsYWcgYml0cworICAg
ICAgICB3ZXJlIG9uLiBJZiBtYXRjaENvdW50IGV4Y2VlZHMgbWF4LCBrZWVwIHRoZSBtYXRjaCBp
bmRleCB1bmRlZmluZWQgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGZpbmRpbmcgY291bGQgYWR2YW5j
ZQorICAgICAgICB0byBhIHBvaW50IHdoZXJlIHRoZSBpbmRleCBleGNlZWRzIHRoZSBtYXRjaCBj
b3VudCwgbGVnaXRpbWF0ZWx5LiBJZiBtYXRjaENvdW50IGRvZXNuJ3QgZXhjZWVkIHRoZSBtYXgs
IHRoZW4gbWFrZQorICAgICAgICBzdXJlIHRoZSBtYXRjaCBpbmRleCwgd2hpY2ggaGFkIGJlZW4g
YmVpbmcgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQgYmxpbmRseSBiYWNrIGluIGZpbmRTdHJp
bmcoKSwgaXMgbm9ybWFsaXplZAorICAgICAgICB0byBiZSBsZXNzIHRoYW4gbWF0Y2ggY291bnQu
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpmaW5kU3RyaW5nKTogCisgICAgICAg
ICAgICBJZiB0aGVyZSBpcyBhIHVzZXIgc2VsZWN0aW9uIGV4aXN0aW5nIG9uIHRoZSBwYWdlLCB0
aGUgbmV4dCBvY2N1cmVuY2Ugb2YgdGhlIHN0cmluZyB3aWxsIGJlIGZvdW5kIGFmdGVyIHRoYXQK
KyAgICAgICAgc2VsZWN0aW9uLiBJbiB0aGF0IGNhc2Ugd2Ugc3RpbGwgd2FudCB0aGUgaW5kZXgg
dG8gcHJvcGVybHkgcmVmbGVjdCBpdHMgb3JkaW5hbCAgcG9zaXRpb24gd2l0aGluIHRoZSBlbnRp
cmUgZG9jdW1lbnQuCisgICAgICAgIFVzZSBmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMgdG8gcHJv
dmlkZSB0aGUgbWF0Y2ggaW5kZXgsIGFuZCBzZXQgYSBmbGFnIHRoYXQgcHJldmVudHMgdGhlIG1h
dGNoIGluZGV4IGZyb20gYmVpbmcKKyAgICAgICAgYmxpbmRseSBpbmNyZW1lbnRlZCBvciBkZWNy
ZW1lbnRlZCBsYXRlci4gQWZ0ZXIgZmluZFN0cmluZygpIGlzIGFjdHVhbGx5IGNhbGxlZCBvbiB0
aGUgcGFnZSwgaW5jcmVtZW50IG9yIGRlY3JlbWVudAorICAgICAgICB0aGUgZmluZCBpbmRleCB1
bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLiAKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xs
ZXI6OmhpZGVGaW5kSW5kaWNhdG9yKTogUmVzZXQgbWF0Y2ggaW5kZXggd2hlbiBmaW5kIFVJIGdv
ZXMgYXdheS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaDog
QWRkIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IHRvIHByaXZhdGUgdmFyaWFibGVzLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpoaWRlRmluZEluZGljYXRvcik6IFJlc2V0IG1hdGNo
IGluZGV4IHdoZW4gZmluZCBVSSBnb2VzIGF3YXkuCisKIDIwMTQtMDQtMTYgIFphbiBEb2JlcnNl
ayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2UgSVBDOjpBcmd1bWVudHMg
YSB2YXJpYWRpYyB0ZW1wbGF0ZQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkZpbmRP
cHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkZpbmRPcHRp
b25zLmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJGaW5k
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw4IEBAIGVudW0gRmluZE9wdGlv
bnMgewogICAgIEZpbmRPcHRpb25zV3JhcEFyb3VuZCA9IDEgPDwgNCwKICAgICBGaW5kT3B0aW9u
c1Nob3dPdmVybGF5ID0gMSA8PCA1LAogICAgIEZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3Ig
PSAxIDw8IDYsCi0gICAgRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0ID0gMSA8PCA3CisgICAgRmlu
ZE9wdGlvbnNTaG93SGlnaGxpZ2h0ID0gMSA8PCA3LAorICAgIEZpbmRPcHRpb25zRGV0ZXJtaW5l
TWF0Y2hJbmRleCA9IDEgPDwgOCwKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZpbmRDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGaW5kQ2xpZW50LmNwcAkocmV2aXNpb24gMTY3
MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZpbmRDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZv
aWQgV2ViRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50KQordm9pZCBXZWJGaW5kQ2xpZW50
OjpkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcs
IHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKIHsKICAgICBpZiAoIW1f
Y2xpZW50LmRpZEZpbmRTdHJpbmcpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fY2xpZW50LmRp
ZEZpbmRTdHJpbmcodG9BUEkocGFnZSksIHRvQVBJKHN0cmluZy5pbXBsKCkpLCBtYXRjaENvdW50
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotCiB9CiAKIHZvaWQgV2ViRmluZENsaWVudDo6
ZGlkRmFpbFRvRmluZFN0cmluZyhXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZpbmRDbGllbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRmluZENsaWVudC5oCShyZXZp
c2lvbiAxNjcxNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRmluZENsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFdlYkltYWdlOwogCiBjbGFz
cyBXZWJGaW5kQ2xpZW50IDogcHVibGljIEFQSTo6Q2xpZW50PFdLUGFnZUZpbmRDbGllbnRCYXNl
PiB7CiBwdWJsaWM6Ci0gICAgdm9pZCBkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOworICAgIHZvaWQgZGlkRmluZFN0cmluZyhX
ZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90
IG1hdGNoSW5kZXgpOwogICAgIHZvaWQgZGlkRmFpbFRvRmluZFN0cmluZyhXZWJQYWdlUHJveHkq
LCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhXZWJQYWdl
UHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTY3MTc3
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNTUsOSArMzI1NSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRGaW5kSW5k
aWNhdG9yKGNvbnMKICAgICBtX3BhZ2VDbGllbnQuc2V0RmluZEluZGljYXRvcihmaW5kSW5kaWNh
dG9yLnJlbGVhc2UoKSwgZmFkZU91dCwgYW5pbWF0ZSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50
KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCkKIHsKLSAgICBtX2ZpbmRD
bGllbnQtPmRpZEZpbmRTdHJpbmcodGhpcywgc3RyaW5nLCBtYXRjaENvdW50KTsKKyAgICBtX2Zp
bmRDbGllbnQtPmRpZEZpbmRTdHJpbmcodGhpcywgc3RyaW5nLCBtYXRjaENvdW50LCBtYXRjaElu
ZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+PiBtYXRjaFJl
Y3RzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODE2LDcg
KzgxNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJp
bmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCk7CiAgICAgdm9pZCBkaWRD
b3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCk7CiAg
ICAgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0
aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgZmxvYXQgY29udGVudElt
YWdlU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBjb250ZW50SW1h
Z2VIYW5kbGUsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRlKTsKLSAgICB2b2lkIGRpZEZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCk7CisgICAgdm9pZCBkaWRG
aW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0
Y2hJbmRleCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
ICAgIHZvaWQgZGlkRmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0Pj4gbWF0Y2hSZWN0cywgaW50MzJfdCBmaXJzdEluZGV4QWZ0ZXJT
ZWxlY3Rpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIw
OSw3ICsyMDksNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgICMgRmluZCBtZXNz
YWdlcwogICAgIERpZENvdW50U3RyaW5nTWF0Y2hlcyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBt
YXRjaENvdW50KQogICAgIFNldEZpbmRJbmRpY2F0b3IoV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVj
dGlvblJlY3QsIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IHRleHRSZWN0cywgZmxvYXQgY29u
dGVudEltYWdlU2NhbGVGYWN0b3IsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgY29u
dGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQsIGJvb2wgYW5pbWF0ZSkKLSAgICBEaWRGaW5k
U3RyaW5nKFN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQpCisgICAgRGlkRmluZFN0
cmluZyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5k
ZXgpCiAgICAgRGlkRmFpbFRvRmluZFN0cmluZyhTdHJpbmcgc3RyaW5nKQogICAgIERpZEZpbmRT
dHJpbmdNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4+IG1hdGNoZXMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVyU2VsZWN0aW9uKQogICAgIERpZEdl
dEltYWdlRm9yRmluZE1hdGNoKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgY29udGVu
dEltYWdlSGFuZGxlLCB1aW50MzJfdCBtYXRjaEluZGV4KQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJRmluZENsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaW5kQ2xpZW50KCkgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdlYktpdDo6V2ViUGFn
ZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCB1aW50MzJfdCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIGRpZEZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmlu
ZyYsIHVpbnQzMl90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJLaXQ6
OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgdWludDMyX3QsIGludDMyX3QpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdlYktpdDo6V2ViUGFnZVBy
b3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAxNjcxNzcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA1
LDcgKzcwNSw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoV0tQYWdlUmVmIHAKICAg
ICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJp
bmcoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0
Y2hDb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2Vi
UGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3Vu
dCwgaW50MzJfdCBtYXRjaEluZGV4KSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50LmRpZEZpbmRTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0J
KHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2LDYgKzExNDYsOCBAQCBzdGF0aWMg
aW5saW5lIFdlYktpdDo6RmluZE9wdGlvbnMgdG9GaW5kCiAgICAgICAgIGZpbmRPcHRpb25zIHw9
IFdlYktpdDo6RmluZE9wdGlvbnNTaG93RmluZEluZGljYXRvcjsKICAgICBpZiAod2tGaW5kT3B0
aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodCkKICAgICAgICAgZmluZE9wdGlvbnMg
fD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQ7CisgICAgaWYgKHdrRmluZE9wdGlv
bnMgJiBfV0tGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXgpCisgICAgICAgIGZpbmRPcHRp
b25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4OwogCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlvbnM+KGZpbmRPcHRpb25zKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAxNjcxNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLRmluZE9wCiAgICAgX1dL
RmluZE9wdGlvbnNTaG93T3ZlcmxheSA9IDEgPDwgNSwKICAgICBfV0tGaW5kT3B0aW9uc1Nob3dG
aW5kSW5kaWNhdG9yID0gMSA8PCA2LAogICAgIF9XS0ZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodCA9
IDEgPDwgNywKKyAgICBfV0tGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5kZXggPSAxIDw8IDgs
CiB9OwogCiBAY2xhc3MgV0tCcm93c2luZ0NvbnRleHRIYW5kbGU7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZpbmREZWxlZ2F0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRmluZERlbGVnYXRlLmgJKHJl
dmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
RmluZERlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIEBvcHRpb25h
bAogCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZENvdW50TWF0Y2hl
czooTlNVSW50ZWdlciltYXRjaGVzIGZvclN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7Ci0tICh2
b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmRNYXRjaGVzOihOU1VJbnRl
Z2VyKW1hdGNoZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZE1hdGNoZXM6KE5TVUludGVnZXIpbWF0Y2hl
cyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGluZGljYXRpbmdNYXRjaEluZGV4OihOU0lu
dGVnZXIpbWF0Y2hJbmRleDsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcg
ZGlkRmFpbFRvRmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CiAKIEBlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaAkocmV2aXNpb24gMTY3
MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIEZy
b20gQVBJOjpGaW5kQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hl
cyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcm
LCB1aW50MzJfdCBtYXRjaENvdW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhX
ZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50LCBpbnQzMl90
IG1hdGNoSW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdlYlBh
Z2VQcm94eSosIGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQubW0J
KHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5k
Q2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgRmluZENsaWVu
dDo6c2V0RGVsZWdhdGUoaWQgPF9XS0ZpbmQKICAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7CiAK
ICAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3RGlkQ291bnRTdHJpbmdNYXRjaGVzID0gW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGlkQ291bnRNYXRj
aGVzOmZvclN0cmluZzopXTsKLSAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3RGlkRmluZFN0
cmluZyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRp
ZEZpbmRNYXRjaGVzOmZvclN0cmluZzopXTsKKyAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3
RGlkRmluZFN0cmluZyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJWaWV3OmRpZEZpbmRNYXRjaGVzOmZvclN0cmluZzppbmRpY2F0aW5nTWF0Y2hJbmRleDopXTsK
ICAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3RGlkRmFpbFRvRmluZFN0cmluZyA9IFtkZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZEZhaWxUb0ZpbmRT
dHJpbmc6KV07CiB9CiAgICAgCkBAIC01NywxMCArNTcsMTAgQEAgdm9pZCBGaW5kQ2xpZW50Ojpk
aWRDb3VudFN0cmluZ01hdGNoZXMoVwogICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfd2ViVmll
dzptX3dlYlZpZXcgZGlkQ291bnRNYXRjaGVzOm1hdGNoQ291bnQgZm9yU3RyaW5nOnN0cmluZ107
CiB9CiAKLXZvaWQgRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25z
dCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKK3ZvaWQgRmluZENsaWVudDo6
ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMy
X3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogewogICAgIGlmIChtX2RlbGVnYXRl
TWV0aG9kcy53ZWJ2aWV3RGlkRmluZFN0cmluZykKLSAgICAgICAgW21fZGVsZWdhdGUuZ2V0KCkg
X3dlYlZpZXc6bV93ZWJWaWV3IGRpZEZpbmRNYXRjaGVzOm1hdGNoQ291bnQgZm9yU3RyaW5nOnN0
cmluZ107CisgICAgICAgIFttX2RlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fd2ViVmlldyBkaWRG
aW5kTWF0Y2hlczptYXRjaENvdW50IGZvclN0cmluZzpzdHJpbmcgaW5kaWNhdGluZ01hdGNoSW5k
ZXg6bWF0Y2hJbmRleF07CiB9CiAKIHZvaWQgRmluZENsaWVudDo6ZGlkRmFpbFRvRmluZFN0cmlu
ZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIHN0cmluZykKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBGaW5kQ29udHJv
bGxlcjo6RmluZENvbnRyb2xsZXIoV2ViUGFnZSogCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFnZSkK
ICAgICAsIG1fZmluZFBhZ2VPdmVybGF5KDApCiAgICAgLCBtX2lzU2hvd2luZ0ZpbmRJbmRpY2F0
b3IoZmFsc2UpCisgICAgLCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCgtMSkKIHsKIH0KIApAQCAt
MTMwLDEyICsxMzEsMTggQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQ
YQogICAgICAgICBib29sIHNob3VsZFNob3dIaWdobGlnaHQgPSBvcHRpb25zICYgRmluZE9wdGlv
bnNTaG93SGlnaGxpZ2h0OwogICAgICAgICB1bnNpZ25lZCBtYXRjaENvdW50ID0gMTsKIAorICAg
ICAgICBpZiAob3B0aW9ucyAmIEZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleCkgeworICAg
ICAgICAgICAgaWYgKHBsdWdpblZpZXcpCisgICAgICAgICAgICAgICAgbWF0Y2hDb3VudCA9IHBs
dWdpblZpZXctPmNvdW50RmluZE1hdGNoZXMoc3RyaW5nLCBjb3JlKG9wdGlvbnMpLCBtYXhNYXRj
aENvdW50ICsgMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWF0Y2hDb3Vu
dCA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+Y291bnRGaW5kTWF0Y2hlcyhzdHJpbmcsIGNvcmUo
b3B0aW9ucyksIG1heE1hdGNoQ291bnQgKyAxKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChz
aG91bGRTaG93T3ZlcmxheSB8fCBzaG91bGRTaG93SGlnaGxpZ2h0KSB7CiAgICAgICAgICAgICBp
ZiAobWF4TWF0Y2hDb3VudCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
CiAgICAgICAgICAgICAgICAgLS1tYXhNYXRjaENvdW50OwogCiAgICAgICAgICAgICBpZiAocGx1
Z2luVmlldykgewotICAgICAgICAgICAgICAgIG1hdGNoQ291bnQgPSBwbHVnaW5WaWV3LT5jb3Vu
dEZpbmRNYXRjaGVzKHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCArIDEpOwog
ICAgICAgICAgICAgICAgIHNob3VsZFNob3dPdmVybGF5ID0gZmFsc2U7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+dW5tYXJrQWxs
VGV4dE1hdGNoZXMoKTsKQEAgLTE0OCw4ICsxNTUsMTYgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6
dXBkYXRlRmluZFVJQWZ0ZXJQYQogICAgICAgICAgICAgICAgIG1hdGNoQ291bnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oa1dLTW9yZVRoYW5NYXhpbXVtTWF0Y2hDb3VudCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoQ291bnQgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGtXS01vcmVUaGFuTWF4aW11bU1hdGNoQ291bnQpKQorICAgICAgICAgICAgbV9mb3Vu
ZFN0cmluZ01hdGNoSW5kZXggPSAtMTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAo
bV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPCAwKQorICAgICAgICAgICAgICAgIG1fZm91bmRTdHJp
bmdNYXRjaEluZGV4ICs9IG1hdGNoQ291bnQ7CisgICAgICAgICAgICBpZiAobV9mb3VuZFN0cmlu
Z01hdGNoSW5kZXggPj0gKGludCkgbWF0Y2hDb3VudCkKKyAgICAgICAgICAgICAgICBtX2ZvdW5k
U3RyaW5nTWF0Y2hJbmRleCAtPSBtYXRjaENvdW50OworICAgICAgICB9CiAKLSAgICAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmcoc3RyaW5n
LCBtYXRjaENvdW50KSk7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01h
dGNoSW5kZXgpKTsKIAogICAgICAgICBpZiAoIShvcHRpb25zICYgRmluZE9wdGlvbnNTaG93Rmlu
ZEluZGljYXRvcikgfHwgIXNlbGVjdGVkRnJhbWUgfHwgIXVwZGF0ZUZpbmRJbmRpY2F0b3IoKnNl
bGVjdGVkRnJhbWUsIHNob3VsZFNob3dPdmVybGF5KSkKICAgICAgICAgICAgIGhpZGVGaW5kSW5k
aWNhdG9yKCk7CkBAIC0xODMsMTIgKzE5OCwzMyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpmaW5k
U3RyaW5nKGNvbnN0IFN0CiAKICAgICB3aWxsRmluZFN0cmluZygpOwogCisgICAgYm9vbCBmb3Vu
ZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gZmFsc2U7CisgICAgaWYgKCFwbHVnaW5WaWV3
KSB7CisgICAgICAgIGlmIChGcmFtZSogc2VsZWN0ZWRGcmFtZSA9IGZyYW1lV2l0aFNlbGVjdGlv
bihtX3dlYlBhZ2UtPmNvcmVQYWdlKCkpKSB7CisgICAgICAgICAgICBGcmFtZVNlbGVjdGlvbiYg
ZnMgPSBzZWxlY3RlZEZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChmcy5zZWxl
Y3Rpb25Cb3VuZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVz
LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgaW50IGluZGV4Rm9yU2VsZWN0aW9uOworICAgICAg
ICAgICAgICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2Vz
KHN0cmluZywgY29yZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCwgJm1fZmluZE1hdGNoZXMsIGlu
ZGV4Rm9yU2VsZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRl
eCA9IGluZGV4Rm9yU2VsZWN0aW9uOworICAgICAgICAgICAgICAgIGZvdW5kU3RyaW5nU3RhcnRz
QWZ0ZXJTZWxlY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CiAgICAgYm9vbCBmb3VuZDsKICAgICBpZiAocGx1Z2luVmlldykKICAgICAgICAgZm91bmQgPSBw
bHVnaW5WaWV3LT5maW5kU3RyaW5nKHN0cmluZywgY29yZU9wdGlvbnMsIG1heE1hdGNoQ291bnQp
OwogICAgIGVsc2UKICAgICAgICAgZm91bmQgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZpbmRT
dHJpbmcoc3RyaW5nLCBjb3JlT3B0aW9ucyk7CiAKKyAgICBpZiAoZm91bmQgJiYgIWZvdW5kU3Ry
aW5nU3RhcnRzQWZ0ZXJTZWxlY3Rpb24pIHsKKyAgICAgICAgaWYgKG9wdGlvbnMgJiBGaW5kT3B0
aW9uc0JhY2t3YXJkcykKKyAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4LS07Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4Kys7CisgICAg
fQorCiAgICAgbV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpLT5kaXNwYXRjaEFmdGVyRW5zdXJpbmdV
cGRhdGVkU2Nyb2xsUG9zaXRpb24oV1RGOjpiaW5kKCZGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmlu
ZFVJQWZ0ZXJQYWdlU2Nyb2xsLCB0aGlzLCBmb3VuZCwgc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRj
aENvdW50KSk7CiB9CiAKQEAgLTMzMyw2ICszNjksNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpo
aWRlRmluZEluZGljYXRvcigpCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwog
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRGaW5kSW5kaWNh
dG9yKEZsb2F0UmVjdCgpLCBWZWN0b3I8RmxvYXRSZWN0PigpLCBtX3dlYlBhZ2UtPmNvcmVQYWdl
KCktPmRldmljZVNjYWxlRmFjdG9yKCksIGhhbmRsZSwgZmFsc2UsIHRydWUpKTsKICAgICBtX2lz
U2hvd2luZ0ZpbmRJbmRpY2F0b3IgPSBmYWxzZTsKKyAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRl
eCA9IC0xOwogICAgIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oCShyZXZp
c2lvbiAxNjcxNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9m
aW5kSW5kaWNhdG9yUmVjdDsKICAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlJhbmdlPj4gbV9m
aW5kTWF0Y2hlczsKKyAgICAvLyBJbmRleCB2YWx1ZSBpcyAtMSBpZiBub3QgZm91bmQgb3IgaWYg
bnVtYmVyIG9mIG1hdGNoZXMgZXhjZWVkcyBwcm92aWRlZCBtYXhpbXVtLgorICAgIGludCBtX2Zv
dW5kU3RyaW5nTWF0Y2hJbmRleDsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBSZWZQdHI8UGFn
ZU92ZXJsYXk+IG1fZmluZEluZGljYXRvck92ZXJsYXk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1Mu
bW0JKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpoaWRlRmluZEluZGljYXRvcigpCiAgICAgbV93ZWJQ
YWdlLT51bmluc3RhbGxQYWdlT3ZlcmxheShtX2ZpbmRJbmRpY2F0b3JPdmVybGF5LmdldCgpKTsK
ICAgICBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5ID0gbnVsbHB0cjsKICAgICBtX2lzU2hvd2luZ0Zp
bmRJbmRpY2F0b3IgPSBmYWxzZTsKLQorICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7
CiAgICAgZGlkSGlkZUZpbmRJbmRpY2F0b3IoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229661</attachid>
            <date>2014-04-18 11:53:21 -0700</date>
            <delta_ts>2014-04-18 14:26:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131776-20140418115304.patch</filename>
            <type>text/plain</type>
            <size>18582</size>
            <attacher name="Alice Liu">alice.barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzQwMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE0LTA0LTE3ICBBbGljZSBC
YXJyYWNsb3VnaCAgPGFsaWNlLmJhcnJhY2xvdWdoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmlu
ZCBvbiBwYWdlIC0gZXh0ZW5kIEFQSSBieSBwcm92aWRpbmcgaGlnaGxpZ2h0ZWQgbWF0Y2ggaW5k
ZXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hh
cmVkL1dlYkZpbmRPcHRpb25zLmg6IEFkZCBhbiBvcHRpb24gZm9yIGRldGVybWluaW5nIG1hdGNo
IGluZGV4LgorCisgICAgICAgIFBsdW1iIHRocm91Z2ggdGhlIEFQSSBsYXllcnMgdGhlIGFkZGl0
aW9uIG9mIGEgcGFyYW1ldGVyIGZvciBtYXRjaCBpbmRleC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0FQSUZpbmRDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6RmluZENsaWVudDo6ZGlkRmluZFN0
cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChX
S1BhZ2VTZXRQYWdlRmluZENsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICh0b0ZpbmRPcHRpb25zKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKE5TX09QVElPTlMpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRmluZERlbGVnYXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29j
b2EvRmluZENsaWVudC5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZENsaWVudDo6c2V0RGVsZWdh
dGUpOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ2xpZW50OjpkaWRGaW5kU3RyaW5nKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViRmluZENsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZp
bmRDbGllbnQ6OmRpZEZpbmRTdHJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGaW5kQ2xp
ZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkRmluZFN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46CisKKyAgICAgICAgVGhlIGFjdHVhbCB0cmFja2luZyBvZiB0aGUgbWF0Y2ggaW5kZXgg
aXMgY29udGFpbmVkIGluIEZpbmRDb250cm9sbGVyIGNsYXNzLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250
cm9sbGVyOjpGaW5kQ29udHJvbGxlcik6IFN0YXJ0IG91dCBhcyAtMSwgdW5kZXJzdG9vZCB0byBi
ZSBhbiB1bmRlZmluZWQgaW5kZXggaW4gdGhpcyBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpG
aW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKTogCisgICAgICAgICAg
ICBQZXJmb3JtIHRoZSBjYWxjdWxhdGlvbiBvZiBtYXRjaENvdW50IGlmIHRoZSBmbGFnIGZvciBE
ZXRlcm1pbmVNYXRjaEluZGV4IGlzIG9uLgorICAgICAgICBJZiBtYXRjaENvdW50IGV4Y2VlZHMg
bWF4LCBrZWVwIHRoZSBtYXRjaCBpbmRleCB1bmRlZmluZWQgYmVjYXVzZSBvdGhlcndpc2UgdGhl
IGZpbmRpbmcgY291bGQgYWR2YW5jZQorICAgICAgICB0byBhIHBvaW50IHdoZXJlIHRoZSBpbmRl
eCBleGNlZWRzIHRoZSBtYXRjaCBjb3VudCwgbGVnaXRpbWF0ZWx5LiBJZiBtYXRjaENvdW50IGRv
ZXNuJ3QgZXhjZWVkIHRoZSBtYXgsIHRoZW4gbWFrZQorICAgICAgICBzdXJlIHRoZSBtYXRjaCBp
bmRleCwgd2hpY2ggaGFkIGJlZW4gYmVpbmcgaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQgYmxp
bmRseSBiYWNrIGluIGZpbmRTdHJpbmcoKSwgaXMgbm9ybWFsaXplZAorICAgICAgICB0byBiZSBs
ZXNzIHRoYW4gbWF0Y2ggY291bnQuCisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpm
aW5kU3RyaW5nKTogCisgICAgICAgICAgICBJZiB0aGVyZSBpcyBhIHVzZXIgc2VsZWN0aW9uIGV4
aXN0aW5nIG9uIHRoZSBwYWdlLCB0aGUgbmV4dCBvY2N1cmVuY2Ugb2YgdGhlIHN0cmluZyB3aWxs
IGJlIGZvdW5kIGFmdGVyIHRoYXQKKyAgICAgICAgc2VsZWN0aW9uLiBJbiB0aGF0IGNhc2Ugd2Ug
c3RpbGwgd2FudCB0aGUgaW5kZXggdG8gcHJvcGVybHkgcmVmbGVjdCBpdHMgb3JkaW5hbCAgcG9z
aXRpb24gd2l0aGluIHRoZSBlbnRpcmUgZG9jdW1lbnQuCisgICAgICAgIFVzZSBmaW5kU3RyaW5n
TWF0Y2hpbmdSYW5nZXMgdG8gcHJvdmlkZSB0aGUgbWF0Y2ggaW5kZXgsIGFuZCBzZXQgYSBmbGFn
IHRoYXQgcHJldmVudHMgdGhlIG1hdGNoIGluZGV4IGZyb20gYmVpbmcKKyAgICAgICAgYmxpbmRs
eSBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCBsYXRlci4gQWZ0ZXIgZmluZFN0cmluZygpIGlz
IGFjdHVhbGx5IGNhbGxlZCBvbiB0aGUgcGFnZSwgaW5jcmVtZW50IG9yIGRlY3JlbWVudAorICAg
ICAgICB0aGUgZmluZCBpbmRleCB1bmRlciBzcGVjaWZpYyBjb25kaXRpb25zLiAKKyAgICAgICAg
KFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmhpZGVGaW5kSW5kaWNhdG9yKTogUmVzZXQgbWF0Y2gg
aW5kZXggd2hlbiBmaW5kIFVJIGdvZXMgYXdheS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuaDogQWRkIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IHRvIHByaXZh
dGUgdmFyaWFibGVzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRy
b2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpoaWRlRmluZElu
ZGljYXRvcik6IFJlc2V0IG1hdGNoIGluZGV4IHdoZW4gZmluZCBVSSBnb2VzIGF3YXkuCisKIDIw
MTQtMDQtMTYgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IE1ha2UgSVBDOjpBcmd1bWVudHMgYSB2YXJpYWRpYyB0ZW1wbGF0ZQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkZpbmRPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkZpbmRPcHRpb25zLmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJGaW5kT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw4IEBAIGVudW0gRmluZE9wdGlvbnMgewogICAgIEZpbmRPcHRpb25zV3JhcEFyb3VuZCA9IDEg
PDwgNCwKICAgICBGaW5kT3B0aW9uc1Nob3dPdmVybGF5ID0gMSA8PCA1LAogICAgIEZpbmRPcHRp
b25zU2hvd0ZpbmRJbmRpY2F0b3IgPSAxIDw8IDYsCi0gICAgRmluZE9wdGlvbnNTaG93SGlnaGxp
Z2h0ID0gMSA8PCA3CisgICAgRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0ID0gMSA8PCA3LAorICAg
IEZpbmRPcHRpb25zRGV0ZXJtaW5lTWF0Y2hJbmRleCA9IDEgPDwgOCwKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZpbmRDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGaW5kQ2xp
ZW50LmNwcAkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkZpbmRDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTIgQEAKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgV2ViRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQ
YWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50
KQordm9pZCBXZWJGaW5kQ2xpZW50OjpkaWRGaW5kU3RyaW5nKFdlYlBhZ2VQcm94eSogcGFnZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJ
bmRleCkKIHsKICAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmRTdHJpbmcpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fY2xpZW50LmRpZEZpbmRTdHJpbmcodG9BUEkocGFnZSksIHRvQVBJKHN0cmlu
Zy5pbXBsKCkpLCBtYXRjaENvdW50LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotCiB9CiAK
IHZvaWQgV2ViRmluZENsaWVudDo6ZGlkRmFpbFRvRmluZFN0cmluZyhXZWJQYWdlUHJveHkqIHBh
Z2UsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkZpbmRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViRmluZENsaWVudC5oCShyZXZpc2lvbiAxNjcxNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViRmluZENsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNs
YXNzIFdlYkltYWdlOwogCiBjbGFzcyBXZWJGaW5kQ2xpZW50IDogcHVibGljIEFQSTo6Q2xpZW50
PFdLUGFnZUZpbmRDbGllbnRCYXNlPiB7CiBwdWJsaWM6Ci0gICAgdm9pZCBkaWRGaW5kU3RyaW5n
KFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1hdGNoQ291bnQpOworICAg
IHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJf
dCBtYXRjaENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOwogICAgIHZvaWQgZGlkRmFpbFRvRmlu
ZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZENvdW50
U3RyaW5nTWF0Y2hlcyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRj
aENvdW50KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNTUsOSArMzI1NSw5IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRGaW5kSW5kaWNhdG9yKGNvbnMKICAgICBtX3BhZ2VDbGllbnQuc2V0Rmlu
ZEluZGljYXRvcihmaW5kSW5kaWNhdG9yLnJlbGVhc2UoKSwgZmFkZU91dCwgYW5pbWF0ZSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCB1aW50MzJfdCBtYXRjaENvdW50KQordm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRTdHJpbmco
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQzMl90IG1hdGNoQ291bnQsIGludDMyX3QgbWF0Y2hJ
bmRleCkKIHsKLSAgICBtX2ZpbmRDbGllbnQtPmRpZEZpbmRTdHJpbmcodGhpcywgc3RyaW5nLCBt
YXRjaENvdW50KTsKKyAgICBtX2ZpbmRDbGllbnQtPmRpZEZpbmRTdHJpbmcodGhpcywgc3RyaW5n
LCBtYXRjaENvdW50LCBtYXRjaEluZGV4KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZp
bmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8VmVjdG9yPFdlYkNv
cmU6OkludFJlY3Q+PiBtYXRjaFJlY3RzLCBpbnQzMl90IGZpcnN0SW5kZXhBZnRlclNlbGVjdGlv
bikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9u
IDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtODE2LDcgKzgxNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvdW50U3Ry
aW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hD
b3VudCk7CiAgICAgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3RyaW5nJiwgdWlu
dDMyX3QgbWF0Y2hDb3VudCk7CiAgICAgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGlu
YXRlcywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIGNvbnN0IFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91dCwgYm9vbCBhbmltYXRl
KTsKLSAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwgdWludDMyX3QgbWF0Y2hD
b3VudCk7CisgICAgdm9pZCBkaWRGaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIHVpbnQzMl90IG1h
dGNoQ291bnQsIGludDMyX3QgbWF0Y2hJbmRleCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlkRmluZFN0cmluZ01hdGNoZXMoY29uc3Qg
U3RyaW5nJiwgVmVjdG9yPFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0Pj4gbWF0Y2hSZWN0cywgaW50
MzJfdCBmaXJzdEluZGV4QWZ0ZXJTZWxlY3Rpb24pOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2NzE3
NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJv
eHkgewogICAgICMgRmluZCBtZXNzYWdlcwogICAgIERpZENvdW50U3RyaW5nTWF0Y2hlcyhTdHJp
bmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENvdW50KQogICAgIFNldEZpbmRJbmRpY2F0b3IoV2Vi
Q29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJlY3QsIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+
IHRleHRSZWN0cywgZmxvYXQgY29udGVudEltYWdlU2NhbGVGYWN0b3IsIFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQsIGJvb2wg
YW5pbWF0ZSkKLSAgICBEaWRGaW5kU3RyaW5nKFN0cmluZyBzdHJpbmcsIHVpbnQzMl90IG1hdGNo
Q291bnQpCisgICAgRGlkRmluZFN0cmluZyhTdHJpbmcgc3RyaW5nLCB1aW50MzJfdCBtYXRjaENv
dW50LCBpbnQzMl90IG1hdGNoSW5kZXgpCiAgICAgRGlkRmFpbFRvRmluZFN0cmluZyhTdHJpbmcg
c3RyaW5nKQogICAgIERpZEZpbmRTdHJpbmdNYXRjaGVzKFN0cmluZyBzdHJpbmcsIFZlY3RvcjxW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4+IG1hdGNoZXMsIGludDMyX3QgZmlyc3RJbmRleEFmdGVy
U2VsZWN0aW9uKQogICAgIERpZEdldEltYWdlRm9yRmluZE1hdGNoKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpIYW5kbGUgY29udGVudEltYWdlSGFuZGxlLCB1aW50MzJfdCBtYXRjaEluZGV4KQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElGaW5kQ2xpZW50LmgJKHJl
dmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJRmluZENs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5GaW5kQ2xpZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ291bnRTdHJpbmdN
YXRjaGVzKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmLCB1aW50MzJf
dCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViS2l0OjpXZWJQYWdlUHJv
eHkqLCBjb25zdCBXVEY6OlN0cmluZyYsIHVpbnQzMl90KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluZFN0cmluZyhXZWJLaXQ6OldlYlBhZ2VQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwg
dWludDMyX3QsIGludDMyX3QpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9GaW5kU3Ry
aW5nKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lv
biAxNjcxNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzA1LDcgKzcwNSw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUZpbmRD
bGllbnQoV0tQYWdlUmVmIHAKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcm
IHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmRTdHJpbmcoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KSBvdmVycmlkZQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmRTdHJpbmcpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYlZpZXcubW0JKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2
LDYgKzExNDYsOCBAQCBzdGF0aWMgaW5saW5lIFdlYktpdDo6RmluZE9wdGlvbnMgdG9GaW5kCiAg
ICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNTaG93RmluZEluZGljYXRv
cjsKICAgICBpZiAod2tGaW5kT3B0aW9ucyAmIF9XS0ZpbmRPcHRpb25zU2hvd0hpZ2hsaWdodCkK
ICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQ7
CisgICAgaWYgKHdrRmluZE9wdGlvbnMgJiBfV0tGaW5kT3B0aW9uc0RldGVybWluZU1hdGNoSW5k
ZXgpCisgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6RmluZE9wdGlvbnNEZXRlcm1pbmVN
YXRjaEluZGV4OwogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdDo6RmluZE9wdGlvbnM+
KGZpbmRPcHRpb25zKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAxNjcxNzcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdl
ciwgX1dLRmluZE9wCiAgICAgX1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheSA9IDEgPDwgNSwKICAg
ICBfV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yID0gMSA8PCA2LAogICAgIF9XS0ZpbmRP
cHRpb25zU2hvd0hpZ2hsaWdodCA9IDEgPDwgNywKKyAgICBfV0tGaW5kT3B0aW9uc0RldGVybWlu
ZU1hdGNoSW5kZXggPSAxIDw8IDgsCiB9OwogCiBAY2xhc3MgV0tCcm93c2luZ0NvbnRleHRIYW5k
bGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0ZpbmREZWxl
Z2F0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
X1dLRmluZERlbGVnYXRlLmgJKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLRmluZERlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIEBvcHRpb25hbAogCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3
ZWJWaWV3IGRpZENvdW50TWF0Y2hlczooTlNVSW50ZWdlciltYXRjaGVzIGZvclN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmc7Ci0tICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRp
ZEZpbmRNYXRjaGVzOihOU1VJbnRlZ2VyKW1hdGNoZXMgZm9yU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZzsKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluZE1hdGNo
ZXM6KE5TVUludGVnZXIpbWF0Y2hlcyBmb3JTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIHdpdGhN
YXRjaEluZGV4OihOU0ludGVnZXIpbWF0Y2hJbmRleDsKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgZGlkRmFpbFRvRmluZFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CiAK
IEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9GaW5kQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0ZpbmRDbGllbnQu
aAkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0Zp
bmRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIC8vIEZyb20gQVBJOjpGaW5kQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpZENv
dW50U3RyaW5nTWF0Y2hlcyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBt
YXRjaENvdW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkq
LCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRj
aENvdW50LCBpbnQzMl90IG1hdGNoSW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsVG9G
aW5kU3RyaW5nKFdlYlBhZ2VQcm94eSosIGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIFdLV2Vi
VmlldyAqbV93ZWJWaWV3OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0Zp
bmRDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L0ZpbmRDbGllbnQubW0JKHJldmlzaW9uIDE2NzE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db2NvYS9GaW5kQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IHZvaWQgRmluZENsaWVudDo6c2V0RGVsZWdhdGUoaWQgPF9XS0ZpbmQKICAgICBtX2RlbGVnYXRl
ID0gZGVsZWdhdGU7CiAKICAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3RGlkQ291bnRTdHJp
bmdNYXRjaGVzID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6ZGlkQ291bnRNYXRjaGVzOmZvclN0cmluZzopXTsKLSAgICBtX2RlbGVnYXRlTWV0aG9kcy53
ZWJ2aWV3RGlkRmluZFN0cmluZyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKF93ZWJWaWV3OmRpZEZpbmRNYXRjaGVzOmZvclN0cmluZzopXTsKKyAgICBtX2RlbGVnYXRl
TWV0aG9kcy53ZWJ2aWV3RGlkRmluZFN0cmluZyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZEZpbmRNYXRjaGVzOmZvclN0cmluZzp3aXRoTWF0Y2hJ
bmRleDopXTsKICAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3RGlkRmFpbFRvRmluZFN0cmlu
ZyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZEZh
aWxUb0ZpbmRTdHJpbmc6KV07CiB9CiAgICAgCkBAIC01NywxMCArNTcsMTAgQEAgdm9pZCBGaW5k
Q2xpZW50OjpkaWRDb3VudFN0cmluZ01hdGNoZXMoVwogICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQo
KSBfd2ViVmlldzptX3dlYlZpZXcgZGlkQ291bnRNYXRjaGVzOm1hdGNoQ291bnQgZm9yU3RyaW5n
OnN0cmluZ107CiB9CiAKLXZvaWQgRmluZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJv
eHkqLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDMyX3QgbWF0Y2hDb3VudCkKK3ZvaWQgRmlu
ZENsaWVudDo6ZGlkRmluZFN0cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZywgdWludDMyX3QgbWF0Y2hDb3VudCwgaW50MzJfdCBtYXRjaEluZGV4KQogewogICAgIGlmICht
X2RlbGVnYXRlTWV0aG9kcy53ZWJ2aWV3RGlkRmluZFN0cmluZykKLSAgICAgICAgW21fZGVsZWdh
dGUuZ2V0KCkgX3dlYlZpZXc6bV93ZWJWaWV3IGRpZEZpbmRNYXRjaGVzOm1hdGNoQ291bnQgZm9y
U3RyaW5nOnN0cmluZ107CisgICAgICAgIFttX2RlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fd2Vi
VmlldyBkaWRGaW5kTWF0Y2hlczptYXRjaENvdW50IGZvclN0cmluZzpzdHJpbmcgd2l0aE1hdGNo
SW5kZXg6bWF0Y2hJbmRleF07CiB9CiAKIHZvaWQgRmluZENsaWVudDo6ZGlkRmFpbFRvRmluZFN0
cmluZyhXZWJQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmIHN0cmluZykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBGaW5kQ29u
dHJvbGxlcjo6RmluZENvbnRyb2xsZXIoV2ViUGFnZSogCiAgICAgOiBtX3dlYlBhZ2Uod2ViUGFn
ZSkKICAgICAsIG1fZmluZFBhZ2VPdmVybGF5KDApCiAgICAgLCBtX2lzU2hvd2luZ0ZpbmRJbmRp
Y2F0b3IoZmFsc2UpCisgICAgLCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCgtMSkKIHsKIH0KIApA
QCAtMTMwLDYgKzEzMSwxMyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRl
clBhCiAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0hpZ2hsaWdodCA9IG9wdGlvbnMgJiBGaW5kT3B0
aW9uc1Nob3dIaWdobGlnaHQ7CiAgICAgICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAxOwogCisg
ICAgICAgIGlmIChvcHRpb25zICYgRmluZE9wdGlvbnNEZXRlcm1pbmVNYXRjaEluZGV4KSB7Cisg
ICAgICAgICAgICBpZiAocGx1Z2luVmlldykKKyAgICAgICAgICAgICAgICBtYXRjaENvdW50ID0g
cGx1Z2luVmlldy0+Y291bnRGaW5kTWF0Y2hlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1h
dGNoQ291bnQgKyAxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXRjaENv
dW50ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5jb3VudEZpbmRNYXRjaGVzKHN0cmluZywgY29y
ZShvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCArIDEpOworICAgICAgICB9CisKICAgICAgICAgaWYg
KHNob3VsZFNob3dPdmVybGF5IHx8IHNob3VsZFNob3dIaWdobGlnaHQpIHsKICAgICAgICAgICAg
IGlmIChtYXhNYXRjaENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkKICAgICAgICAgICAgICAgICAtLW1heE1hdGNoQ291bnQ7CkBAIC0xNDgsOCArMTU2LDE2IEBA
IHZvaWQgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGEKICAgICAgICAgICAgICAg
ICBtYXRjaENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtXS01vcmVUaGFuTWF4aW11bU1h
dGNoQ291bnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaENv
dW50ID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrV0tNb3JlVGhhbk1heGltdW1NYXRjaENvdW50
KSkKKyAgICAgICAgICAgIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID0gLTE7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKG1fZm91bmRTdHJpbmdNYXRjaEluZGV4IDwgMCkKKyAgICAg
ICAgICAgICAgICBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCArPSBtYXRjaENvdW50OworICAgICAg
ICAgICAgaWYgKG1fZm91bmRTdHJpbmdNYXRjaEluZGV4ID49IChpbnQpIG1hdGNoQ291bnQpCisg
ICAgICAgICAgICAgICAgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXggLT0gbWF0Y2hDb3VudDsKKyAg
ICAgICAgfQogCi0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hDb3VudCkpOworICAgICAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZyhzdHJpbmcsIG1hdGNo
Q291bnQsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4KSk7CiAKICAgICAgICAgaWYgKCEob3B0aW9u
cyAmIEZpbmRPcHRpb25zU2hvd0ZpbmRJbmRpY2F0b3IpIHx8ICFzZWxlY3RlZEZyYW1lIHx8ICF1
cGRhdGVGaW5kSW5kaWNhdG9yKCpzZWxlY3RlZEZyYW1lLCBzaG91bGRTaG93T3ZlcmxheSkpCiAg
ICAgICAgICAgICBoaWRlRmluZEluZGljYXRvcigpOwpAQCAtMTgzLDEyICsxOTksMzMgQEAgdm9p
ZCBGaW5kQ29udHJvbGxlcjo6ZmluZFN0cmluZyhjb25zdCBTdAogCiAgICAgd2lsbEZpbmRTdHJp
bmcoKTsKIAorICAgIGJvb2wgZm91bmRTdHJpbmdTdGFydHNBZnRlclNlbGVjdGlvbiA9IGZhbHNl
OworICAgIGlmICghcGx1Z2luVmlldykgeworICAgICAgICBpZiAoRnJhbWUqIHNlbGVjdGVkRnJh
bWUgPSBmcmFtZVdpdGhTZWxlY3Rpb24obV93ZWJQYWdlLT5jb3JlUGFnZSgpKSkgeworICAgICAg
ICAgICAgRnJhbWVTZWxlY3Rpb24mIGZzID0gc2VsZWN0ZWRGcmFtZS0+c2VsZWN0aW9uKCk7Cisg
ICAgICAgICAgICBpZiAoZnMuc2VsZWN0aW9uQm91bmRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgbV9maW5kTWF0Y2hlcy5jbGVhcigpOworICAgICAgICAgICAgICAgIGludCBpbmRl
eEZvclNlbGVjdGlvbjsKKyAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmZp
bmRTdHJpbmdNYXRjaGluZ1JhbmdlcyhzdHJpbmcsIGNvcmUob3B0aW9ucyksIG1heE1hdGNoQ291
bnQsICZtX2ZpbmRNYXRjaGVzLCBpbmRleEZvclNlbGVjdGlvbik7CisgICAgICAgICAgICAgICAg
bV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPSBpbmRleEZvclNlbGVjdGlvbjsKKyAgICAgICAgICAg
ICAgICBmb3VuZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgZm91bmQ7CiAgICAgaWYgKHBsdWdpblZp
ZXcpCiAgICAgICAgIGZvdW5kID0gcGx1Z2luVmlldy0+ZmluZFN0cmluZyhzdHJpbmcsIGNvcmVP
cHRpb25zLCBtYXhNYXRjaENvdW50KTsKICAgICBlbHNlCiAgICAgICAgIGZvdW5kID0gbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5maW5kU3RyaW5nKHN0cmluZywgY29yZU9wdGlvbnMpOwogCisgICAg
aWYgKGZvdW5kICYmICFmb3VuZFN0cmluZ1N0YXJ0c0FmdGVyU2VsZWN0aW9uKSB7CisgICAgICAg
IGlmIChvcHRpb25zICYgRmluZE9wdGlvbnNCYWNrd2FyZHMpCisgICAgICAgICAgICBtX2ZvdW5k
U3RyaW5nTWF0Y2hJbmRleC0tOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZvdW5kU3Ry
aW5nTWF0Y2hJbmRleCsrOworICAgIH0KKwogICAgIG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKS0+
ZGlzcGF0Y2hBZnRlckVuc3VyaW5nVXBkYXRlZFNjcm9sbFBvc2l0aW9uKFdURjo6YmluZCgmRmlu
ZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbCwgdGhpcywgZm91bmQsIHN0
cmluZywgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCkpOwogfQogCkBAIC0zMzMsNiArMzcwLDcgQEAg
dm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJbmRpY2F0b3IoKQogICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlIGhhbmRsZTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6U2V0RmluZEluZGljYXRvcihGbG9hdFJlY3QoKSwgVmVjdG9yPEZsb2F0UmVjdD4o
KSwgbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBoYW5kbGUsIGZh
bHNlLCB0cnVlKSk7CiAgICAgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yID0gZmFsc2U7CisgICAg
bV9mb3VuZFN0cmluZ01hdGNoSW5kZXggPSAtMTsKICAgICBkaWRIaWRlRmluZEluZGljYXRvcigp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTY3MTc3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYg
Kzk1LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNTaG93aW5nRmluZEluZGljYXRvcjsKICAg
ICBXZWJDb3JlOjpJbnRSZWN0IG1fZmluZEluZGljYXRvclJlY3Q7CiAgICAgVmVjdG9yPFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4+IG1fZmluZE1hdGNoZXM7CisgICAgLy8gSW5kZXggdmFsdWUgaXMg
LTEgaWYgbm90IGZvdW5kIG9yIGlmIG51bWJlciBvZiBtYXRjaGVzIGV4Y2VlZHMgcHJvdmlkZWQg
bWF4aW11bS4KKyAgICBpbnQgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXg7CiAKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBtX2ZpbmRJbmRpY2F0b3JPdmVybGF5OwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxl
cklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAxNjcxNzcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6aGlkZUZpbmRJ
bmRpY2F0b3IoKQogICAgIG1fd2ViUGFnZS0+dW5pbnN0YWxsUGFnZU92ZXJsYXkobV9maW5kSW5k
aWNhdG9yT3ZlcmxheS5nZXQoKSk7CiAgICAgbV9maW5kSW5kaWNhdG9yT3ZlcmxheSA9IG51bGxw
dHI7CiAgICAgbV9pc1Nob3dpbmdGaW5kSW5kaWNhdG9yID0gZmFsc2U7Ci0KKyAgICBtX2ZvdW5k
U3RyaW5nTWF0Y2hJbmRleCA9IC0xOwogICAgIGRpZEhpZGVGaW5kSW5kaWNhdG9yKCk7CiB9CiAK
</data>
<flag name="review"
          id="254029"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>