<?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>154957</bug_id>
          
          <creation_ts>2016-03-03 00:55:29 -0800</creation_ts>
          <short_desc>Adopt CFNetwork storage partitioning SPI</short_desc>
          <delta_ts>2016-03-10 17:23:40 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154958</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170143</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-03-03 00:55:29 -0800</bug_when>
    <thetext>Adopt CFNetwork storage partitioning SPI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170144</commentid>
    <comment_count>1</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-03-03 00:56:39 -0800</bug_when>
    <thetext>rdar://problem/23614620</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170159</commentid>
    <comment_count>2</comment_count>
      <attachid>272744</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-03-03 01:45:05 -0800</bug_when>
    <thetext>Created attachment 272744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170163</commentid>
    <comment_count>3</comment_count>
      <attachid>272747</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-03-03 02:10:51 -0800</bug_when>
    <thetext>Created attachment 272747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170164</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 02:12:01 -0800</bug_when>
    <thetext>Attachment 272747 did not pass style-queue:


ERROR: Source/WebCore/platform/network/mac/CookieJarMac.mm:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170221</commentid>
    <comment_count>5</comment_count>
      <attachid>272747</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-03 09:21:28 -0800</bug_when>
    <thetext>Comment on attachment 272747
Patch

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

&gt; Source/WebCore/page/Settings.h:358
&gt; +    static bool gCookieStoragePartitioningEnabled;

These &quot;g&quot; prefixes sure seem peculiar.

&gt; Source/WebCore/platform/network/NetworkStorageSession.h:84
&gt; +String cookieStoragePartition(const URL&amp; firstPartyForCookies, const URL&amp;);

Might want a name for the second URL to somehow say that it’s the actual resource URL or whatever.

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:126
&gt; +String cookieStoragePartition(const URL&amp; firstPartyForCookies, const URL&amp; url)
&gt; +{
&gt; +    if (!Settings::cookieStoragePartitioningEnabled())
&gt; +        return emptyString();
&gt; +
&gt; +    String firstPartyHost = firstPartyForCookies.host();
&gt; +#if ENABLE(PUBLIC_SUFFIX_LIST)
&gt; +    firstPartyHost = topPrivatelyControlledDomain(firstPartyHost);
&gt; +#endif
&gt; +
&gt; +    String host = url.host();
&gt; +    if (!host.endsWithIgnoringASCIICase(firstPartyHost))
&gt; +        return firstPartyHost;
&gt; +
&gt; +    ASSERT(host.length() &gt;= firstPartyHost.length());
&gt; +    unsigned suffixOffset = host.length() - firstPartyHost.length();
&gt; +    if (suffixOffset &gt; 0 &amp;&amp; host[suffixOffset - 1] != &apos;.&apos;)
&gt; +        return firstPartyHost;
&gt; +
&gt; +    return emptyString();
&gt; +}

The combination of policy and string algorithms seems a bit unpleasant to me; hard to see that both halves of the function’s job are done correctly. Maybe the predicate that takes two host strings and does the suffix check could be a separate helper function. It would return a boolean and take two StringView, not const String&amp;.

Not sure if empty string is better than null string for the &quot;no partition&quot; magic value. Annoying to have to even consider that question. Optional&lt;String&gt; would be better, if String didn’t already have two obvious special values.

&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:67
&gt; +#if HAVE(CFNETWORK_STORAGE_PARTITIONING)

I like to use blank lines inside the #if/#endif so they don’t seem grouped with the first/last functions inside more than with the rest of what’s inside.

&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:89
&gt; +    // FIXME: Stop creating a new NSHTTPCookieStorage object each time we want to query the cookie jar.

A thousand times yes.

&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:97
&gt; +    // completionHandler is called synchronously.

That is a peculiar way to design a method. Is the synchrony guaranteed?

The comment should use active voice for greater clarity:

    // The _getCookiesForURL: method calls the completionHandler synchronously.

&gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:184
&gt; +        filteredCookies = applyPartitionToCookies(partition, filteredCookies.autorelease());

What’s the benefit of calling autorelease() here instead of get()? I think maybe there is no benefit.

&gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:179
&gt; +        [(NSMutableURLRequest *)nsRequest _setProperty:storagePartition forKey:@&quot;__STORAGE_PARTITION_IDENTIFIER&quot;];

Why is this cast to mutable safe? The code just above for !shouldContentSniff goes out of its way to make a mutable copy if needed. Why isn’t that kind of logic needed here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170313</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-03-03 13:31:36 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 272747 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272747&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/NetworkStorageSession.h:84
&gt; &gt; +String cookieStoragePartition(const URL&amp; firstPartyForCookies, const URL&amp;);
&gt; 
&gt; Might want a name for the second URL to somehow say that it’s the actual
&gt; resource URL or whatever.

Sure. I&apos;ll call it resource.

&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:126
&gt; &gt; +String cookieStoragePartition(const URL&amp; firstPartyForCookies, const URL&amp; url)
&gt; &gt; +{
&gt; &gt; +    if (!Settings::cookieStoragePartitioningEnabled())
&gt; &gt; +        return emptyString();
&gt; &gt; +
&gt; &gt; +    String firstPartyHost = firstPartyForCookies.host();
&gt; &gt; +#if ENABLE(PUBLIC_SUFFIX_LIST)
&gt; &gt; +    firstPartyHost = topPrivatelyControlledDomain(firstPartyHost);
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt; +    String host = url.host();
&gt; &gt; +    if (!host.endsWithIgnoringASCIICase(firstPartyHost))
&gt; &gt; +        return firstPartyHost;
&gt; &gt; +
&gt; &gt; +    ASSERT(host.length() &gt;= firstPartyHost.length());
&gt; &gt; +    unsigned suffixOffset = host.length() - firstPartyHost.length();
&gt; &gt; +    if (suffixOffset &gt; 0 &amp;&amp; host[suffixOffset - 1] != &apos;.&apos;)
&gt; &gt; +        return firstPartyHost;
&gt; &gt; +
&gt; &gt; +    return emptyString();
&gt; &gt; +}
&gt; 
&gt; The combination of policy and string algorithms seems a bit unpleasant to
&gt; me; hard to see that both halves of the function’s job are done correctly.
&gt; Maybe the predicate that takes two host strings and does the suffix check
&gt; could be a separate helper function. It would return a boolean and take two
&gt; StringView, not const String&amp;.

Agreed. I&apos;ll split this up into two functions.

&gt; 
&gt; Not sure if empty string is better than null string for the &quot;no partition&quot;
&gt; magic value. Annoying to have to even consider that question.
&gt; Optional&lt;String&gt; would be better, if String didn’t already have two obvious
&gt; special values.

I don&apos;t think we want to create empty partition names in the cookie jar, so I&apos;d still have to check for empty strings if I used another value for &quot;no partition&quot; (for instance, I&apos;d get an empty string if firstPartyForCookie&apos;s host was empty for some reason).

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:67
&gt; &gt; +#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
&gt; 
&gt; I like to use blank lines inside the #if/#endif so they don’t seem grouped
&gt; with the first/last functions inside more than with the rest of what’s
&gt; inside.

Sure.

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:97
&gt; &gt; +    // completionHandler is called synchronously.
&gt; 
&gt; That is a peculiar way to design a method. Is the synchrony guaranteed?

Yeah, I was also surprised. I actually don&apos;t know if it&apos;s guaranteed, so I&apos;ll add some verification logic. I think I&apos;ll also file a bug asking for the cookies array to be a return value if the method is intended to remain synchronous.

&gt; 
&gt; The comment should use active voice for greater clarity:
&gt; 
&gt;     // The _getCookiesForURL: method calls the completionHandler
&gt; synchronously.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/CookieJarMac.mm:184
&gt; &gt; +        filteredCookies = applyPartitionToCookies(partition, filteredCookies.autorelease());
&gt; 
&gt; What’s the benefit of calling autorelease() here instead of get()? I think
&gt; maybe there is no benefit.

Yeah, no benefit. I&apos;ll use get().

&gt; 
&gt; &gt; Source/WebCore/platform/network/mac/ResourceHandleMac.mm:179
&gt; &gt; +        [(NSMutableURLRequest *)nsRequest _setProperty:storagePartition forKey:@&quot;__STORAGE_PARTITION_IDENTIFIER&quot;];
&gt; 
&gt; Why is this cast to mutable safe? The code just above for
&gt; !shouldContentSniff goes out of its way to make a mutable copy if needed.
&gt; Why isn’t that kind of logic needed here?

Yeah, I&apos;ll just follow the pattern from !shouldContentSniff. I think it was safe in this specific case, but I shouldn&apos;t rely on that.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170320</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-03-03 13:45:58 -0800</bug_when>
    <thetext>Committed r197518: &lt;http://trac.webkit.org/changeset/197518&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272744</attachid>
            <date>2016-03-03 01:45:05 -0800</date>
            <delta_ts>2016-03-03 02:10:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154957-20160303014450.patch</filename>
            <type>text/plain</type>
            <size>17181</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQyYTQ0NjIyMTNlMTE5NGUxNTgxZTE0
ZDc2YThmNTZhMWE3MTMyMTguLjhmYTg5NGRhYjc5NDRmNWQ0ZWRiMmExMjhjNGVlMWU5ZGFjNDFj
OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDMtMDMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNA
YXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IENGTmV0d29yayBzdG9yYWdlIHBhcnRpdGlvbmlu
ZyBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NDk1NworICAgICAgICByZGFyOi8vcHJvYmxlbS8yMzYxNDYyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IERlZmluZWQg
SEFWRV9DRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcuCisKIDIwMTYtMDItMjkgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZkNvdW50
ZXI8VD46OkV2ZW50IC0+IFJlZkNvdW50ZXJFdmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY5Yjg1NDFiYjc4
YTlhYWRiZTI5YTRmYTI5ODZiMmFjMDNjMGM4ODUuLjNmNzU2ZGE4NDFiZTVmMTE1ZTVhMDY3OTkx
MjU2NTMzNWQ1NTQ5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNi0wMy0wMyAg
QW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgQ0ZOZXR3b3Jr
IHN0b3JhZ2UgcGFydGl0aW9uaW5nIFNQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTU3CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIzNjE0NjIw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRvcHQg
Q0ZOZXR3b3JrIFNQSSBmb3IgY3JlYXRpbmcgc3RvcmFnZSBwYXJ0aXRpb25zLiBJZiBTZXR0aW5n
czo6Y29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKSBpcyB0cnVlLAorICAgICAgICBj
cmVhdGUgY29va2llIHN0b3JhZ2UgcGFydGl0aW9ucyBmb3IgdGhpcmQtcGFydHkgY29udGV4dHMu
IFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gVGVzdCBzdXBwb3J0IGlzIHRyYWNrZWQgYnkgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1
NDk1OD4uCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCk6IENvbnRyb2xz
IHdoZXRoZXIgc3RvcmFnZSBwYXJ0aXRpb25pbmcgZm9yIGNvb2tpZXMgaXMgZW5hYmxlZC4KKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6Y29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
Zi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVTdG9yYWdlUGFydGl0aW9uKTogQ29tcHV0ZXMgYSBzdG9yYWdlIHBhcnRpdGlvbiBpZGVudGlm
aWVyIGJ5IGRldGVybWluaW5nIHRoZSB0b3AKKyAgICAgICAgcHJpdmF0ZWx5LWNvbnRyb2xsZWQg
ZG9tYWluIG9mIHRoZSBjb29raWUncyBmaXJzdC1wYXJ0eSAobWFpbiBmcmFtZSBkb2N1bWVudCkg
VVJMLCB0aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdGhlCisgICAgICAgIGNvb2tpZSdzIGRvY3Vt
ZW50IGhvc3RuYW1lIGlzIGEgc3ViZG9tYWluIG9mIGl0LiBJZiBpcyBpcyBub3QsIHRoZSBmaXJz
dC1wYXJ0eSB0b3AgZG9tYWluIGlzIHRoZSBwYXJ0aXRpb24gbmFtZS4KKyAgICAgICAgT3RoZXJ3
aXNlLCB0aGVyZSBpcyBubyBwYXJ0aXRpb24gbmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL21hYy9Db29raWVKYXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjphcHBseVBhcnRpdGlv
blRvQ29va2llcyk6IFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIGNvb2tpZSBhcnJh
eSBhZnRlciBhZGRpbmcgYSBzdG9yYWdlCisgICAgICAgIHBhcnRpdGlvbiBwcm9wZXJ0eSB0byBl
YWNoIGNvcGllZCBjb29raWUuCisgICAgICAgIChXZWJDb3JlOjpjb29raWVzSW5QYXJ0aXRpb25G
b3JVUkwpOiBSZXR1cm5zIGNvb2tpZXMgZm9yIHRoZSBwYXJ0aXRpb24gY29tcHV0ZWQgYnkgdGhl
IGdpdmVuIFVSTHMuIElmIG5vCisgICAgICAgIHBhcnRpdGlvbiBjYW4gYmUgZGV0ZXJtaW5lZCwg
bmlsIGlzIHJldHVybmVkLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvclVSTCk6IFJldHVy
bnMgY29va2llc0luUGFydGl0aW9uRm9yVVJMKCkgaWYgbm9uLW5pbCwgb3RoZXJ3aXNlIHJldHVy
bnMgd2tIVFRQQ29va2llc0ZvclVSTCgpLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvclNl
c3Npb24pOiBTdGFydGVkIGNhbGxpbmcgY29va2llc0ZvclVSTCgpLgorICAgICAgICAoV2ViQ29y
ZTo6c2V0Q29va2llc0Zyb21ET00pOiBDYWxsZWQgYXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMoKSBp
ZiBhIHBhcnRpdGlvbiBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUgZ2l2ZW4gVVJMcy4KKyAgICAg
ICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBTdGFydGVkIGNhbGxpbmcgY29va2llc0ZvclVS
TCgpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlv
bik6IENvbXB1dGVkIHRoZSBzdG9yYWdlIHBhcnRpdGlvbiBpZGVudGlmaWVyIGZvciB0aGUgbmV3
IHJlcXVlc3QuCisgICAgICAgIElmIG5vbi1lbXB0eSwgc2V0IGl0IGFzIGEgcHJvcGVydHkgb24g
dGhlIE5TVVJMUmVxdWVzdCB3aGVyZSBDRk5ldHdvcmsga25vd3MgdG8gZmluZCBpdC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg6IERlY2xhcmUgbmV3IFNQSSBmb3Ig
YnVpbGRpbmcgd2l0aCB0aGUgcHVibGljIFNESy4KKwogMjAxNi0wMi0yOSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBXVEY6Ok9wdGlvbmFsIGZvciBIVE1M
T0xpc3RFbGVtZW50OjptX3N0YXJ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2ZhZWI3MDI0ODJjYzg5ZDZkOTRh
MzVjZTE3YTAyOWYwZmY0YjIzMi4uNzlkOTc0OTE1YzFkYjU1ZTUyYTdiMDRiOTUzYTM5YmVjNzk2
MDQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAzLTAzICBBbmR5IEVzdGVz
ICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCBDRk5ldHdvcmsgc3RvcmFnZSBw
YXJ0aXRpb25pbmcgU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTQ5NTcKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjM2MTQ2MjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
RGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6IENvbXB1dGVkIHRoZSBzdG9yYWdlIHBhcnRpdGlv
biBpZGVudGlmaWVyIGZvciB0aGUgbmV3IHNlc3Npb24gdGFzay4KKyAgICAgICAgSWYgbm9uLWVt
cHR5LCBzZXQgaXQgdXNpbmcgYSBOU1VSTFNlc3Npb25UYXNrIFNQSS4KKwogMjAxNi0wMi0yOSAg
QnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuIElEQjog
V2ViS2l0IDIgSVBDIGxheWVyIGVhc2lseSBjb25mdXNlZCBhYm91dCBtdWx0aXBsZSB3ZWIgcHJv
Y2Vzc2VzIGJlaW5nIGNvbm5lY3RlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IGEzNGNhNWMxN2IyOGQ2ZWE4
ODEyMDA2NTEzNzJkNDg0NGY3ZjQwNDkuLjc3ZWYzN2EzMTc3MDY3NjdlMzIxNDhmNzA2ODY5MWMz
OWI2NzdiZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjY1LDYgKzY2NSwxMCBAQAogI2RlZmluZSBIQVZF
X1ZJUlRVQUxBTExPQyAxCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBf
X0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApCisjZGVmaW5lIEhBVkVf
Q0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HIDEKKyNlbmRpZgorCiAvKiBFTkFCTEUgbWFj
cm8gZGVmYXVsdHMgKi8KIAogLyogRklYTUU6IG1vdmUgb3V0IGFsbCBFTkFCTEUoKSBkZWZpbmVz
IGZyb20gaGVyZSB0byBGZWF0dXJlRGVmaW5lcy5oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3Bw
CmluZGV4IDY3NjI3ODY5NWFmYmI2OGYzZDNiMzYwNTUwZTU2NGUzOTlhM2EzZjguLjM2ODkyMjk3
NzJlNDQ4OGMyYzU0ZGE0OTY0NWJjMzM0ZGIxOTA4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCkBAIC04MCw2ICs4MCw3IEBAIGJvb2wgU2V0dGluZ3M6OmdBVkZvdW5kYXRpb25OU1VSTFNl
c3Npb25FbmFibGVkID0gZmFsc2U7CiAKICNpZiBQTEFURk9STShDT0NPQSkKIGJvb2wgU2V0dGlu
Z3M6OmdRVEtpdEVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdDb29raWVTdG9yYWdl
UGFydGl0aW9uaW5nRW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCiAKIGJvb2wgU2V0dGluZ3M6OmdN
b2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKQEAgLTYwMyw2ICs2MDQsMTEgQEAgdm9pZCBT
ZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBnUVRLaXRFbmFibGVk
ID0gZW5hYmxlZDsKICAgICBIVE1MTWVkaWFFbGVtZW50OjpyZXNldE1lZGlhRW5naW5lcygpOwog
fQorICAgIAordm9pZCBTZXR0aW5nczo6c2V0Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIGdDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxl
ZCA9IGVuYWJsZWQ7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmgKaW5kZXggNjU1ZTVmNjA1ODE0NmNkZWFlZjRlMjc1NzEyMTkzMDFiMmUw
MTc2OS4uZWEyYWVlZWFkNWE1NjlmNWM2Zjk5NGIyZmM2YjRlM2UxMDMwZjhkNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuaApAQCAtMjAxLDYgKzIwMSw5IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRRVEtpdEVuYWJsZWQoYm9v
bCBmbGFnKTsKICAgICBzdGF0aWMgYm9vbCBpc1FUS2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdRVEtp
dEVuYWJsZWQ7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldENvb2tpZVN0
b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKGJvb2wgZmxhZyk7CisgICAgc3RhdGljIGJvb2wgY29v
a2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKSB7IHJldHVybiBnQ29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQ7IH0KICNlbHNlCiAgICAgc3RhdGljIGJvb2wgaXNRVEtpdEVuYWJs
ZWQoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCkBAIC0zNTYsNiArMzU5LDcgQEAgcHJpdmF0
ZToKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29s
IGdRVEtpdEVuYWJsZWQ7CisgICAgc3RhdGljIGJvb2wgZ0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkOwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBnTW9ja1Njcm9sbGJhcnNFbmFi
bGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgKaW5kZXggZDllMzhkMDEzYzJmM2JkOWRjZTczMjFjODdhZjc3YjNi
ZjViZDNjOC4uZjNlMjBmNzVkOGNiOTEwMTYyNWFlYTc0MDZiYmZlNjRkYWQxYjJhZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IE5ldHdvcmtpbmdDb250ZXh0OworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgU291cE5l
dHdvcmtTZXNzaW9uOwogCiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb24gewpAQCAtNzksNiAr
ODAsOSBAQCBwcml2YXRlOgogICAgIENyZWRlbnRpYWxTdG9yYWdlIG1fY3JlZGVudGlhbFN0b3Jh
Z2U7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY29va2llU3RvcmFnZVBhcnRpdGlvbihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKK1N0cmluZyBjb29raWVTdG9yYWdlUGFydGl0aW9uKGNv
bnN0IFVSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFVSTCYpOworCiB9CiAKICNlbmRp
ZiAvLyBOZXR3b3JrU3RvcmFnZVNlc3Npb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0
LmNwcAppbmRleCA2NzY3YWQyMzAwMDFlY2I0MTVkMDI4NjU2NzBmMDJkMGJhMzUwODQ4Li5kZWJm
OTVkNzY1YjZjNGI3Yzg2MWFlYzliNTZlZTJlOTQxYWE2NzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbkNGTmV0LmNwcApAQCAtMzEsNiArMzEsOSBAQAogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNz
SUQuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlB1YmxpY1N1ZmZpeC5oIgor
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2Vsc2UKICNpbmNsdWRlIDxXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CkBAIC05NCw0ICs5NywzMyBA
QCBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Ojpjb29raWVTdG9yYWdlKCkgY29uc3QKICNlbmRpZgogfQogCisjaWYgUExBVEZPUk0oQ09DT0Ep
CitTdHJpbmcgY29va2llU3RvcmFnZVBhcnRpdGlvbihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgcmV0dXJuIGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24ocmVxdWVzdC5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCByZXF1ZXN0LnVybCgpKTsKK30KKworU3RyaW5nIGNvb2tpZVN0
b3JhZ2VQYXJ0aXRpb24oY29uc3QgVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgVVJM
JiB1cmwpCit7CisgICAgaWYgKCFTZXR0aW5nczo6Y29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0Vu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBTdHJpbmcgZmly
c3RQYXJ0eUhvc3QgPSBmaXJzdFBhcnR5Rm9yQ29va2llcy5ob3N0KCk7CisjaWYgRU5BQkxFKFBV
QkxJQ19TVUZGSVhfTElTVCkKKyAgICBmaXJzdFBhcnR5SG9zdCA9IHRvcFByaXZhdGVseUNvbnRy
b2xsZWREb21haW4oZmlyc3RQYXJ0eUhvc3QpOworI2VuZGlmCisKKyAgICBTdHJpbmcgaG9zdCA9
IHVybC5ob3N0KCk7CisgICAgaWYgKCFob3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoZmly
c3RQYXJ0eUhvc3QpKQorICAgICAgICByZXR1cm4gZmlyc3RQYXJ0eUhvc3Q7CisKKyAgICBBU1NF
UlQoaG9zdC5sZW5ndGgoKSA+PSBmaXJzdFBhcnR5SG9zdC5sZW5ndGgoKSk7CisgICAgdW5zaWdu
ZWQgc3VmZml4T2Zmc2V0ID0gaG9zdC5sZW5ndGgoKSAtIGZpcnN0UGFydHlIb3N0Lmxlbmd0aCgp
OworICAgIGlmIChzdWZmaXhPZmZzZXQgPiAwICYmIGhvc3Rbc3VmZml4T2Zmc2V0IC0gMV0gIT0g
Jy4nKQorICAgICAgICByZXR1cm4gZmlyc3RQYXJ0eUhvc3Q7CisKKyAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW0KaW5kZXggMTZkMTBlMjA3MDA0MWE4N2U0NjNj
ZWYyNDc0YzNjNDg5ZGQzZmFlYS4uOWI0NmU0ZjZiN2Q2NTU3YWVjZjRiODM5Mjg1MGE4MGQzOGIy
YTQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQ29v
a2llSmFyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nv
b2tpZUphck1hYy5tbQpAQCAtNjQsMTIgKzY0LDYxIEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyQ29va2llcyhOU0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKICAgICByZXR1cm4g
ZmlsdGVyZWRDb29raWVzOwogfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJ
T05JTkcpCitzdGF0aWMgTlNBcnJheSAqYXBwbHlQYXJ0aXRpb25Ub0Nvb2tpZXMoTlNTdHJpbmcg
KnBhcnRpdGlvbiwgTlNBcnJheSAqY29va2llcykKK3sKKyAgICAvLyBGSVhNRSAyNDc0NzczOTog
Q0ZOZXR3b3JrIHNob3VsZCBleHBvc2UgdGhpcyBrZXkgYXMgU1BJCisgICAgc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgcGFydGl0aW9uS2V5ID0gQCJTdG9yYWdlUGFydGl0aW9uIjsKKworICAgIE5T
TXV0YWJsZUFycmF5ICpwYXJ0aXRpb25lZENvb2tpZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlX
aXRoQ2FwYWNpdHk6Y29va2llcy5jb3VudF07CisgICAgZm9yIChOU0hUVFBDb29raWUgKmNvb2tp
ZSBpbiBjb29raWVzKSB7CisgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBw
cm9wZXJ0aWVzID0gYWRvcHROUyhbY29va2llLnByb3BlcnRpZXMgbXV0YWJsZUNvcHldKTsKKyAg
ICAgICAgW3Byb3BlcnRpZXMgc2V0T2JqZWN0OnBhcnRpdGlvbiBmb3JLZXk6cGFydGl0aW9uS2V5
XTsKKyAgICAgICAgW3BhcnRpdGlvbmVkQ29va2llcyBhZGRPYmplY3Q6W05TSFRUUENvb2tpZSBj
b29raWVXaXRoUHJvcGVydGllczpwcm9wZXJ0aWVzLmdldCgpXV07CisgICAgfQorCisgICAgcmV0
dXJuIHBhcnRpdGlvbmVkQ29va2llczsKK30KKworc3RhdGljIE5TQXJyYXkgKmNvb2tpZXNJblBh
cnRpdGlvbkZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgU3RyaW5nIHBhcnRpdGlv
biA9IGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24oZmlyc3RQYXJ0eSwgdXJsKTsKKyAgICBpZiAocGFy
dGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBT
dG9wIGNyZWF0aW5nIGEgbmV3IE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2JqZWN0IGVhY2ggdGltZSB3
ZSB3YW50IHRvIHF1ZXJ5IHRoZSBjb29raWUgamFyLgorICAgIC8vIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiBjb3VsZCBpbnN0ZWFkIGtlZXAgYSBOU0hUVFBDb29raWVTdG9yYWdlIG9iamVjdCBmb3Ig
dXMuCisgICAgUmV0YWluUHRyPE5TSFRUUENvb2tpZVN0b3JhZ2U+IGNvb2tpZVN0b3JhZ2U7Cisg
ICAgaWYgKGF1dG8gc3RvcmFnZSA9IHNlc3Npb24uY29va2llU3RvcmFnZSgpKQorICAgICAgICBj
b29raWVTdG9yYWdlID0gYWRvcHROUyhbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0
V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZS5nZXQoKV0pOworICAgIGVsc2UKKyAgICAg
ICAgY29va2llU3RvcmFnZSA9IFtOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXTsKKworICAgIC8vIGNvbXBsZXRpb25IYW5kbGVyIGlzIGNhbGxlZCBzeW5jaHJvbm91
c2x5LgorICAgIFJldGFpblB0cjxOU0FycmF5PiBjb29raWVzUHRyOworICAgIFtjb29raWVTdG9y
YWdlIF9nZXRDb29raWVzRm9yVVJMOnVybCBtYWluRG9jdW1lbnRVUkw6Zmlyc3RQYXJ0eSBwYXJ0
aXRpb246cGFydGl0aW9uIGNvbXBsZXRpb25IYW5kbGVyOlsmY29va2llc1B0cl0oTlNBcnJheSAq
Y29va2llcykgeworICAgICAgICBjb29raWVzUHRyID0gY29va2llczsKKyAgICB9XTsKKworICAg
IHJldHVybiBjb29raWVzUHRyLmF1dG9yZWxlYXNlKCk7Cit9CisjZW5kaWYgLy8gSEFWRShDRk5F
VFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcpCisgICAgCitzdGF0aWMgTlNBcnJheSAqY29va2ll
c0ZvclVSTChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYg
Zmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCit7CisjaWYgSEFWRShDRk5FVFdPUktfU1RPUkFH
RV9QQVJUSVRJT05JTkcpCisgICAgaWYgKE5TQXJyYXkgKmNvb2tpZXMgPSBjb29raWVzSW5QYXJ0
aXRpb25Gb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKSkKKyAgICAgICAgcmV0dXJuIGNv
b2tpZXM7CisjZW5kaWYKKyAgICByZXR1cm4gd2tIVFRQQ29va2llc0ZvclVSTChzZXNzaW9uLmNv
b2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJsKTsKK30KKwogZW51bSBJbmNsdWRl
SFRUUE9ubHlPck5vdCB7IERvTm90SW5jbHVkZUhUVFBPbmx5LCBJbmNsdWRlSFRUUE9ubHkgfTsK
IHN0YXRpYyBTdHJpbmcgY29va2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBJbmNs
dWRlSFRUUE9ubHlPck5vdCBpbmNsdWRlSFRUUE9ubHkpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JV
Ukwoc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7CisgICAg
TlNBcnJheSAqY29va2llcyA9IGNvb2tpZXNGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJs
KTsKICAgICBpZiAoIVtjb29raWVzIGNvdW50XSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAv
LyBSZXR1cm4gYSBudWxsIHN0cmluZywgbm90IGFuIGVtcHR5IG9uZSB0aGF0IFN0cmluZ0J1aWxk
ZXIgd291bGQgY3JlYXRlIGJlbG93LgogCkBAIC0xMjksNiArMTc4LDEyIEBAIHZvaWQgc2V0Q29v
a2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBV
UkwmIGZpcnN0UGFyCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZp
bHRlckNvb2tpZXModW5maWx0ZXJlZENvb2tpZXMpOwogICAgIEFTU0VSVChbZmlsdGVyZWRDb29r
aWVzLmdldCgpIGNvdW50XSA8PSAxKTsKIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFS
VElUSU9OSU5HKQorICAgIFN0cmluZyBwYXJ0aXRpb24gPSBjb29raWVTdG9yYWdlUGFydGl0aW9u
KGZpcnN0UGFydHksIHVybCk7CisgICAgaWYgKCFwYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAg
ICBmaWx0ZXJlZENvb2tpZXMgPSBhcHBseVBhcnRpdGlvblRvQ29va2llcyhwYXJ0aXRpb24sIGZp
bHRlcmVkQ29va2llcy5hdXRvcmVsZWFzZSgpKTsKKyNlbmRpZgorCiAgICAgd2tTZXRIVFRQQ29v
a2llc0ZvclVSTChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVz
LmdldCgpLCBjb29raWVVUkwsIGZpcnN0UGFydHkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKQEAgLTE1MCw3ICsyMDUsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksCiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAot
ICAgIE5TQXJyYXkgKmNvb2tpZXMgPSB3a0hUVFBDb29raWVzRm9yVVJMKHNlc3Npb24uY29va2ll
U3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwpOworICAgIE5TQXJyYXkgKmNvb2tpZXMg
PSBjb29raWVzRm9yVVJMKHNlc3Npb24sIGZpcnN0UGFydHksIHVybCk7CiAgICAgTlNVSW50ZWdl
ciBjb3VudCA9IFtjb29raWVzIGNvdW50XTsKICAgICByYXdDb29raWVzLnJlc2VydmVDYXBhY2l0
eShjb3VudCk7CiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VI
YW5kbGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJj
ZUhhbmRsZU1hYy5tbQppbmRleCA4YTc2MzNlMGYyZTk0Yjg0MDEzY2E1YTNmYTg5MWU4MmM2YTA5
NmNhLi5hNDI5YTU3OTNiYmNhNmVjOTBhNjNkZjQzYmI5ZTdlMjc1MmE2ZjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRs
ZU1hYy5tbQpAQCAtNDAsNiArNDAsNyBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAi
TUlNRVR5cGVSZWdpc3RyeS5oIgogI2ltcG9ydCAiTlNVUkxDb25uZWN0aW9uU1BJLmgiCisjaW1w
b3J0ICJOZXR3b3JrU3RvcmFnZVNlc3Npb24uaCIKICNpbXBvcnQgIk5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJSZXNvdXJjZUVycm9yLmgiCkBAIC0xNzIs
NiArMTczLDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZU5TVVJMQ29ubmVjdGlvbihp
ZCBkZWxlZ2F0ZSwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsCiAgICAgICAgIG5zUmVxdWVzdCA9
IG11dGFibGVSZXF1ZXN0OwogICAgIH0KIAorI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFS
VElUSU9OSU5HKQorICAgIFN0cmluZyBzdG9yYWdlUGFydGl0aW9uID0gY29va2llU3RvcmFnZVBh
cnRpdGlvbihmaXJzdFJlcXVlc3QoKSk7CisgICAgaWYgKCFzdG9yYWdlUGFydGl0aW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgWyhOU011dGFibGVVUkxSZXF1ZXN0ICopbnNSZXF1ZXN0IF9zZXRQcm9w
ZXJ0eTpzdG9yYWdlUGFydGl0aW9uIGZvcktleTpAIl9fU1RPUkFHRV9QQVJUSVRJT05fSURFTlRJ
RklFUiJdOworI2VuZGlmCisKICAgICBpZiAoZC0+bV9zdG9yYWdlU2Vzc2lvbikKICAgICAgICAg
bnNSZXF1ZXN0ID0gW3drQ29weVJlcXVlc3RXaXRoU3RvcmFnZVNlc3Npb24oZC0+bV9zdG9yYWdl
U2Vzc2lvbi5nZXQoKSwgbnNSZXF1ZXN0KSBhdXRvcmVsZWFzZV07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jZi9DRk5ldHdvcmtTUEkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NwaS9jZi9DRk5ldHdvcmtTUEkuaAppbmRleCAwY2NmNjE0ZGFhNDk2Y2Vj
NjExNzI0ZGE0MzhhMDEwMDkyMzY0ZjQ1Li44MjZkNGEzMGJjNmU2YWUyNWVjMTM0OTcwMjRhMzZl
M2Q4YjRjYTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY2YvQ0ZO
ZXR3b3JrU1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGTmV0d29y
a1NQSS5oCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMUmVzcG9u
c2VQcml2Lmg+CiAjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGVVJMU3RvcmFnZVNlc3Npb24uaD4KIAot
Ly8gRklYTUU6IFJlbW92ZSB0aGUgZGVmaW5lZChfX09CSkNfXyktZ3VhcmQgb25uY2Ugd2UgZml4
IDxyZGFyOi8vcHJvYmxlbS8xOTAzMzYxMD4uCisvLyBGSVhNRTogUmVtb3ZlIHRoZSBkZWZpbmVk
KF9fT0JKQ19fKS1ndWFyZCBvbmNlIHdlIGZpeCA8cmRhcjovL3Byb2JsZW0vMTkwMzM2MTA+Lgog
I2lmIGRlZmluZWQoX19PQkpDX18pICYmIFBMQVRGT1JNKENPQ09BKQogLy8gRklYTUU6IEFzIGEg
d29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzE4MzM3MTgyPiwgd2UgY29uZGl0aW9uYWxs
eSBlbmNsb3NlIHRoZSBoZWFkZXIKIC8vIGluIGFuIGV4dGVybiAiQyIgbGlua2FnZSBibG9jayB0
byBtYWtlIGl0IHN1aXRhYmxlIGZvciBDKysgdXNlLgpAQCAtMTAzLDggKzEwMywyMiBAQCB0eXBl
ZGVmIHZvaWQgKF5DRkNhY2hlZFVSTFJlc3BvbnNlQ2FsbEJhY2tCbG9jaykoQ0ZDYWNoZWRVUkxS
ZXNwb25zZVJlZik7CiBAZW5kCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZPUk0oSU9TKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApCitAaW50ZXJmYWNl
IE5TSFRUUENvb2tpZSAoKQorQHByb3BlcnR5IChudWxsYWJsZSwgcmVhZG9ubHksIGNvcHkpIE5T
U3RyaW5nICpfc3RvcmFnZVBhcnRpdGlvbjsKK0BlbmQKKworQGludGVyZmFjZSBOU0hUVFBDb29r
aWVTdG9yYWdlICgpCistICh2b2lkKV9nZXRDb29raWVzRm9yVVJMOihOU1VSTCAqKXVybCBtYWlu
RG9jdW1lbnRVUkw6KE5TVVJMICopbWFpbkRvY3VtZW50VVJMIHBhcnRpdGlvbjooTlNTdHJpbmcg
KilwYXJ0aXRpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXkgKikpY29tcGxl
dGlvbkhhbmRsZXI7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNVUkxTZXNzaW9uVGFzayAoKQorQHBy
b3BlcnR5IChjb3B5KSBOU1N0cmluZyAqX3N0b3JhZ2VQYXJ0aXRpb25JZGVudGlmaWVyOworQGVu
ZAogI2VuZGlmCiAKKyNlbmRpZiAvLyBkZWZpbmVkKF9fT0JKQ19fKQorCiAjZW5kaWYgLy8gUExB
VEZPUk0oV0lOKSB8fCBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiBFWFRFUk5fQyB2b2lkIENG
VVJMUmVxdWVzdFNldFNob3VsZFN0YXJ0U3luY2hyb25vdXNseShDRlVSTFJlcXVlc3RSZWYsIEJv
b2xlYW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQppbmRleCAzNDA3MTY5YjVjM2YxODc5ZjgyMTQy
MGIzYmU1NmRhNWQ2NjdlNjQ1Li4zNWI4YmQ3Mzc1ZmIyZTY1NWFkM2NkY2I1ZWRjNzBjOTNmNjM1
ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrRGF0YVRhc2tDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVzb3Vy
Y2VSZXF1ZXN0Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogCkBAIC04MCw3ICs4MSwx
MyBAQCBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vz
c2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JgogICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9u
Lm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVx
dWVzdF07CiAgICAgZWxzZQogICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uLm1fc2Vzc2lvbldp
dGhvdXRDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0g
ICAgCisKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICBTdHJp
bmcgc3RvcmFnZVBhcnRpdGlvbiA9IFdlYkNvcmU6OmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24ocmVx
dWVzdCk7CisgICAgaWYgKCFzdG9yYWdlUGFydGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgbV90
YXNrLmdldCgpLl9zdG9yYWdlUGFydGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247
CisjZW5kaWYKKwogICAgIEFTU0VSVCghbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXAuY29udGFpbnMo
dGFza0lkZW50aWZpZXIoKSkpOwogICAgIG1fc2Vzc2lvbi5tX2RhdGFUYXNrTWFwLmFkZCh0YXNr
SWRlbnRpZmllcigpLCB0aGlzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272747</attachid>
            <date>2016-03-03 02:10:51 -0800</date>
            <delta_ts>2016-03-03 09:21:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154957-20160303021036.patch</filename>
            <type>text/plain</type>
            <size>17088</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGEyNjdhMWJlMTg5ZTY4NGRlMzZlYTdi
YjAwZjVkOGIwODQzNmZkZTEuLjgxMjU1ZDhiOTg5YWI0ZDc0ODExYWVjNWYwMzMxOTcxY2JhNmFk
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDMtMDMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNA
YXBwbGUuY29tPgorCisgICAgICAgIEFkb3B0IENGTmV0d29yayBzdG9yYWdlIHBhcnRpdGlvbmlu
ZyBTUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NDk1NworICAgICAgICByZGFyOi8vcHJvYmxlbS8yMzYxNDYyMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IERlZmluZWQg
SEFWRV9DRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcuCisKIDIwMTYtMDMtMDIgIEtvbnN0
YW50aW4gVG9rYXJldiAgPGFubnVsZW5AeWFuZGV4LnJ1PgogCiAgICAgICAgIFtjbWFrZV0gTW92
ZWQgUFJFL1BPU1RfQlVJTERfQ09NTUFORCB0byBXRUJLSVRfRlJBTUVXT1JLLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGVjZTQwZjE4ZjE1NjZkZTQwZTkzNTFmNDY3OTA3NzQ5OWFlYWQzMzEuLmMwZDQ2MTNhMzMx
MDQxNzUwMGNmZjczNjQxNDRjNzdiMGE2OGUyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBA
QAorMjAxNi0wMy0wMyAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWRvcHQgQ0ZOZXR3b3JrIHN0b3JhZ2UgcGFydGl0aW9uaW5nIFNQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTU3CisgICAgICAgIHJkYXI6Ly9w
cm9ibGVtLzIzNjE0NjIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRvcHQgQ0ZOZXR3b3JrIFNQSSBmb3IgY3JlYXRpbmcgc3RvcmFnZSBwYXJ0aXRp
b25zLiBJZiBTZXR0aW5nczo6Y29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKSBpcyB0
cnVlLAorICAgICAgICBjcmVhdGUgY29va2llIHN0b3JhZ2UgcGFydGl0aW9ucyBmb3IgdGhpcmQt
cGFydHkgY29udGV4dHMuIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4gVGVzdCBzdXBwb3J0IGlzIHRyYWNrZWQgYnkgPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzE1NDk1OD4uCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRDb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5h
YmxlZCk6IENvbnRyb2xzIHdoZXRoZXIgc3RvcmFnZSBwYXJ0aXRpb25pbmcgZm9yIGNvb2tpZXMg
aXMgZW5hYmxlZC4KKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTZXR0aW5nczo6Y29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb29raWVTdG9yYWdlUGFydGl0aW9uKTogQ29tcHV0ZXMgYSBzdG9yYWdlIHBh
cnRpdGlvbiBpZGVudGlmaWVyIGJ5IGRldGVybWluaW5nIHRoZSB0b3AKKyAgICAgICAgcHJpdmF0
ZWx5LWNvbnRyb2xsZWQgZG9tYWluIG9mIHRoZSBjb29raWUncyBmaXJzdC1wYXJ0eSAobWFpbiBm
cmFtZSBkb2N1bWVudCkgVVJMLCB0aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdGhlCisgICAgICAg
IGNvb2tpZSdzIGRvY3VtZW50IGhvc3RuYW1lIGlzIGEgc3ViZG9tYWluIG9mIGl0LiBJZiBpcyBp
cyBub3QsIHRoZSBmaXJzdC1wYXJ0eSB0b3AgZG9tYWluIGlzIHRoZSBwYXJ0aXRpb24gbmFtZS4K
KyAgICAgICAgT3RoZXJ3aXNlLCB0aGVyZSBpcyBubyBwYXJ0aXRpb24gbmFtZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Db29raWVKYXJNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjphcHBseVBhcnRpdGlvblRvQ29va2llcyk6IFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhlIGdp
dmVuIGNvb2tpZSBhcnJheSBhZnRlciBhZGRpbmcgYSBzdG9yYWdlCisgICAgICAgIHBhcnRpdGlv
biBwcm9wZXJ0eSB0byBlYWNoIGNvcGllZCBjb29raWUuCisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVzSW5QYXJ0aXRpb25Gb3JVUkwpOiBSZXR1cm5zIGNvb2tpZXMgZm9yIHRoZSBwYXJ0aXRpb24g
Y29tcHV0ZWQgYnkgdGhlIGdpdmVuIFVSTHMuIElmIG5vCisgICAgICAgIHBhcnRpdGlvbiBjYW4g
YmUgZGV0ZXJtaW5lZCwgbmlsIGlzIHJldHVybmVkLgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
c0ZvclVSTCk6IFJldHVybnMgY29va2llc0luUGFydGl0aW9uRm9yVVJMKCkgaWYgbm9uLW5pbCwg
b3RoZXJ3aXNlIHJldHVybnMgd2tIVFRQQ29va2llc0ZvclVSTCgpLgorICAgICAgICAoV2ViQ29y
ZTo6Y29va2llc0ZvclNlc3Npb24pOiBTdGFydGVkIGNhbGxpbmcgY29va2llc0ZvclVSTCgpLgor
ICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOiBDYWxsZWQgYXBwbHlQYXJ0aXRp
b25Ub0Nvb2tpZXMoKSBpZiBhIHBhcnRpdGlvbiBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUgZ2l2
ZW4gVVJMcy4KKyAgICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOiBTdGFydGVkIGNhbGxp
bmcgY29va2llc0ZvclVSTCgpLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlSGFuZGxlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0
ZU5TVVJMQ29ubmVjdGlvbik6IENvbXB1dGVkIHRoZSBzdG9yYWdlIHBhcnRpdGlvbiBpZGVudGlm
aWVyIGZvciB0aGUgbmV3IHJlcXVlc3QuCisgICAgICAgIElmIG5vbi1lbXB0eSwgc2V0IGl0IGFz
IGEgcHJvcGVydHkgb24gdGhlIE5TVVJMUmVxdWVzdCB3aGVyZSBDRk5ldHdvcmsga25vd3MgdG8g
ZmluZCBpdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9zcGkvY2YvQ0ZOZXR3b3JrU1BJLmg6IERlY2xh
cmUgbmV3IFNQSSBmb3IgYnVpbGRpbmcgd2l0aCB0aGUgcHVibGljIFNESy4KKwogMjAxNi0wMy0w
MiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEhUTUxGb3JtRWxl
bWVudCdzIG5hbWVkIHByb3BlcnR5IGdldHRlciBkb2VzIG5vdCByZXR1cm4gYSBSYWRpb05vZGVs
aXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggNDRhYTAyZTdjODc1MWI2ZmNiNDkyYjI0Mzg3N2Q0OWYxNjg5NTM4
ZS4uNTgwMzRkYTU3YzQ3YTYzYTQ3MGUwOGUxNjg5ZTBiYTA2ZWNiYzQ4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTAzLTAzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNv
bT4KKworICAgICAgICBBZG9wdCBDRk5ldHdvcmsgc3RvcmFnZSBwYXJ0aXRpb25pbmcgU1BJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5NTcKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjM2MTQ2MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtE
YXRhVGFzayk6IENvbXB1dGVkIHRoZSBzdG9yYWdlIHBhcnRpdGlvbiBpZGVudGlmaWVyIGZvciB0
aGUgbmV3IHNlc3Npb24gdGFzay4KKyAgICAgICAgSWYgbm9uLWVtcHR5LCBzZXQgaXQgdXNpbmcg
YSBOU1VSTFNlc3Npb25UYXNrIFNQSS4KKwogMjAxNi0wMy0wMiAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFByb3Blcmx5IGNhbmNlbCBkb3du
bG9hZHMgd2hlbiB1c2luZyBOZXR3b3JrU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggYjIxZmFiYTQ4
YmM5N2NmMzE5MjdkOGRlMmYwMTBmMmEzYjAwNmMzMC4uMWRlZDFkYjhlNzg4ZDViYzJiN2Q4ZjMy
ZGJhMzA1OTY4NTE3NWM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC02NjUsNiArNjY1LDEwIEBACiAjZGVm
aW5lIEhBVkVfVklSVFVBTEFMTE9DIDEKICNlbmRpZgogCisjaWYgKFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDApIHx8IChQTEFURk9STShJ
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMDAwMCkKKyNkZWZp
bmUgSEFWRV9DRk5FVFdPUktfU1RPUkFHRV9QQVJUSVRJT05JTkcgMQorI2VuZGlmCisKIC8qIEVO
QUJMRSBtYWNybyBkZWZhdWx0cyAqLwogCiAvKiBGSVhNRTogbW92ZSBvdXQgYWxsIEVOQUJMRSgp
IGRlZmluZXMgZnJvbSBoZXJlIHRvIEZlYXR1cmVEZWZpbmVzLmggKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5jcHAKaW5kZXggYzEzZTlmMTBhMGRhMWY3MWNiNjFmMTYwNTFhYTgyNzMwOTJjMjEyYy4u
ZTA3MTZkNTdjNzM3NDU1MTk1ZjZhNTUyNDQzNjNmMzBkMTFiYzQ0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAKQEAgLTgyLDYgKzgyLDcgQEAgYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlv
bk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogYm9v
bCBTZXR0aW5nczo6Z1FUS2l0RW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0Nvb2tp
ZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAogYm9vbCBTZXR0
aW5nczo6Z01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwpAQCAtNTk4LDYgKzU5OSwxMSBA
QCB2b2lkIFNldHRpbmdzOjpzZXRRVEtpdEVuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIGdRVEtp
dEVuYWJsZWQgPSBlbmFibGVkOwogICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0TWVkaWFFbmdp
bmVzKCk7CiB9CisgICAgCit2b2lkIFNldHRpbmdzOjpzZXRDb29raWVTdG9yYWdlUGFydGl0aW9u
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgZ0Nvb2tpZVN0b3JhZ2VQYXJ0aXRpb25p
bmdFbmFibGVkID0gZW5hYmxlZDsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAppbmRleCBmMTJlZjI0ZTIwNzFhMTQxMWJhY2M3ZGExN2M2
NDc1MjY3MTUzYjBhLi44ZjI0NTQyZjA5Y2M0ZjY2MjE1MTFkNmRiMzk5NzViMGIwN2RhYzY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5oCkBAIC0xOTgsNiArMTk4LDkgQEAgcHVibGljOgogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFFUS2l0RW5h
YmxlZChib29sIGZsYWcpOwogICAgIHN0YXRpYyBib29sIGlzUVRLaXRFbmFibGVkKCkgeyByZXR1
cm4gZ1FUS2l0RW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0
Q29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoYm9vbCBmbGFnKTsKKyAgICBzdGF0aWMg
Ym9vbCBjb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCgpIHsgcmV0dXJuIGdDb29raWVT
dG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZDsgfQogI2Vsc2UKICAgICBzdGF0aWMgYm9vbCBpc1FU
S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKQEAgLTM1Miw2ICszNTUsNyBA
QCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIGJvb2wgZ1FUS2l0RW5hYmxlZDsKKyAgICBzdGF0aWMgYm9vbCBnQ29va2llU3RvcmFnZVBh
cnRpdGlvbmluZ0VuYWJsZWQ7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBib29sIGdNb2NrU2Nyb2xs
YmFyc0VuYWJsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAppbmRleCBkOWUzOGQwMTNjMmYzYmQ5ZGNlNzMyMWM4
N2FmNzdiM2JmNWJkM2M4Li5mM2UyMGY3NWQ4Y2I5MTAxNjI1YWVhNzQwNmJiZmU2NGRhZDFiMmFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmgKQEAgLTM4LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgTmV0d29ya2luZ0NvbnRleHQ7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFz
cyBTb3VwTmV0d29ya1Nlc3Npb247CiAKIGNsYXNzIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiB7CkBA
IC03OSw2ICs4MCw5IEBAIHByaXZhdGU6CiAgICAgQ3JlZGVudGlhbFN0b3JhZ2UgbV9jcmVkZW50
aWFsU3RvcmFnZTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBjb29raWVTdG9yYWdlUGFy
dGl0aW9uKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworU3RyaW5nIGNvb2tpZVN0b3JhZ2VQYXJ0
aXRpb24oY29uc3QgVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgVVJMJik7CisKIH0K
IAogI2VuZGlmIC8vIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkNGTmV0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uQ0ZOZXQuY3BwCmluZGV4IDY3NjdhZDIzMDAwMWVjYjQxNWQwMjg2NTY3MGYwMmQwYmEzNTA4
NDguLmRlYmY5NWQ3NjViNmM0YjdjODYxYWVjOWI1NmVlMmU5NDFhYTY3NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29ya1N0b3JhZ2VTZXNzaW9u
Q0ZOZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCkBAIC0zMSw2ICszMSw5IEBACiAjaW5jbHVkZSA8d3Rm
L1Byb2Nlc3NJRC5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiUHVibGljU3Vm
Zml4LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjZWxzZQogI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KQEAgLTk0LDQg
Kzk3LDMzIEBAIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmNvb2tpZVN0b3JhZ2UoKSBjb25zdAogI2VuZGlmCiB9CiAKKyNpZiBQTEFURk9S
TShDT0NPQSkKK1N0cmluZyBjb29raWVTdG9yYWdlUGFydGl0aW9uKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gY29va2llU3RvcmFnZVBhcnRpdGlvbihyZXF1
ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCksIHJlcXVlc3QudXJsKCkpOworfQorCitTdHJpbmcg
Y29va2llU3RvcmFnZVBhcnRpdGlvbihjb25zdCBVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBj
b25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAoIVNldHRpbmdzOjpjb29raWVTdG9yYWdlUGFydGl0
aW9uaW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIFN0
cmluZyBmaXJzdFBhcnR5SG9zdCA9IGZpcnN0UGFydHlGb3JDb29raWVzLmhvc3QoKTsKKyNpZiBF
TkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQorICAgIGZpcnN0UGFydHlIb3N0ID0gdG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbihmaXJzdFBhcnR5SG9zdCk7CisjZW5kaWYKKworICAgIFN0cmlu
ZyBob3N0ID0gdXJsLmhvc3QoKTsKKyAgICBpZiAoIWhvc3QuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJ
Q2FzZShmaXJzdFBhcnR5SG9zdCkpCisgICAgICAgIHJldHVybiBmaXJzdFBhcnR5SG9zdDsKKwor
ICAgIEFTU0VSVChob3N0Lmxlbmd0aCgpID49IGZpcnN0UGFydHlIb3N0Lmxlbmd0aCgpKTsKKyAg
ICB1bnNpZ25lZCBzdWZmaXhPZmZzZXQgPSBob3N0Lmxlbmd0aCgpIC0gZmlyc3RQYXJ0eUhvc3Qu
bGVuZ3RoKCk7CisgICAgaWYgKHN1ZmZpeE9mZnNldCA+IDAgJiYgaG9zdFtzdWZmaXhPZmZzZXQg
LSAxXSAhPSAnLicpCisgICAgICAgIHJldHVybiBmaXJzdFBhcnR5SG9zdDsKKworICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL0Nvb2tpZUphck1hYy5tbQppbmRleCAxNmQxMGUyMDcwMDQx
YTg3ZTQ2M2NlZjI0NzRjM2M0ODlkZDNmYWVhLi45YjQ2ZTRmNmI3ZDY1NTdhZWNmNGI4MzkyODUw
YTgwZDM4YjJhNDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9Db29raWVKYXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvQ29va2llSmFyTWFjLm1tCkBAIC02NCwxMiArNjQsNjEgQEAgc3RhdGljIFJldGFpblB0
cjxOU0FycmF5PiBmaWx0ZXJDb29raWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQogICAg
IHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKKyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdF
X1BBUlRJVElPTklORykKK3N0YXRpYyBOU0FycmF5ICphcHBseVBhcnRpdGlvblRvQ29va2llcyhO
U1N0cmluZyAqcGFydGl0aW9uLCBOU0FycmF5ICpjb29raWVzKQoreworICAgIC8vIEZJWE1FIDI0
NzQ3NzM5OiBDRk5ldHdvcmsgc2hvdWxkIGV4cG9zZSB0aGlzIGtleSBhcyBTUEkKKyAgICBzdGF0
aWMgTlNTdHJpbmcgKiBjb25zdCBwYXJ0aXRpb25LZXkgPSBAIlN0b3JhZ2VQYXJ0aXRpb24iOwor
CisgICAgTlNNdXRhYmxlQXJyYXkgKnBhcnRpdGlvbmVkQ29va2llcyA9IFtOU011dGFibGVBcnJh
eSBhcnJheVdpdGhDYXBhY2l0eTpjb29raWVzLmNvdW50XTsKKyAgICBmb3IgKE5TSFRUUENvb2tp
ZSAqY29va2llIGluIGNvb2tpZXMpIHsKKyAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IHByb3BlcnRpZXMgPSBhZG9wdE5TKFtjb29raWUucHJvcGVydGllcyBtdXRhYmxlQ29w
eV0pOworICAgICAgICBbcHJvcGVydGllcyBzZXRPYmplY3Q6cGFydGl0aW9uIGZvcktleTpwYXJ0
aXRpb25LZXldOworICAgICAgICBbcGFydGl0aW9uZWRDb29raWVzIGFkZE9iamVjdDpbTlNIVFRQ
Q29va2llIGNvb2tpZVdpdGhQcm9wZXJ0aWVzOnByb3BlcnRpZXMuZ2V0KCldXTsKKyAgICB9CisK
KyAgICByZXR1cm4gcGFydGl0aW9uZWRDb29raWVzOworfQorCitzdGF0aWMgTlNBcnJheSAqY29v
a2llc0luUGFydGl0aW9uRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBTdHJpbmcg
cGFydGl0aW9uID0gY29va2llU3RvcmFnZVBhcnRpdGlvbihmaXJzdFBhcnR5LCB1cmwpOworICAg
IGlmIChwYXJ0aXRpb24uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8g
RklYTUU6IFN0b3AgY3JlYXRpbmcgYSBuZXcgTlNIVFRQQ29va2llU3RvcmFnZSBvYmplY3QgZWFj
aCB0aW1lIHdlIHdhbnQgdG8gcXVlcnkgdGhlIGNvb2tpZSBqYXIuCisgICAgLy8gTmV0d29ya1N0
b3JhZ2VTZXNzaW9uIGNvdWxkIGluc3RlYWQga2VlcCBhIE5TSFRUUENvb2tpZVN0b3JhZ2Ugb2Jq
ZWN0IGZvciB1cy4KKyAgICBSZXRhaW5QdHI8TlNIVFRQQ29va2llU3RvcmFnZT4gY29va2llU3Rv
cmFnZTsKKyAgICBpZiAoYXV0byBzdG9yYWdlID0gc2Vzc2lvbi5jb29raWVTdG9yYWdlKCkpCisg
ICAgICAgIGNvb2tpZVN0b3JhZ2UgPSBhZG9wdE5TKFtbTlNIVFRQQ29va2llU3RvcmFnZSBhbGxv
Y10gX2luaXRXaXRoQ0ZIVFRQQ29va2llU3RvcmFnZTpzdG9yYWdlLmdldCgpXSk7CisgICAgZWxz
ZQorICAgICAgICBjb29raWVTdG9yYWdlID0gW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRU
UENvb2tpZVN0b3JhZ2VdOworCisgICAgLy8gY29tcGxldGlvbkhhbmRsZXIgaXMgY2FsbGVkIHN5
bmNocm9ub3VzbHkuCisgICAgUmV0YWluUHRyPE5TQXJyYXk+IGNvb2tpZXNQdHI7CisgICAgW2Nv
b2tpZVN0b3JhZ2UgX2dldENvb2tpZXNGb3JVUkw6dXJsIG1haW5Eb2N1bWVudFVSTDpmaXJzdFBh
cnR5IHBhcnRpdGlvbjpwYXJ0aXRpb24gY29tcGxldGlvbkhhbmRsZXI6WyZjb29raWVzUHRyXShO
U0FycmF5ICpjb29raWVzKSB7CisgICAgICAgIGNvb2tpZXNQdHIgPSBjb29raWVzOworICAgIH1d
OworCisgICAgcmV0dXJuIGNvb2tpZXNQdHIuYXV0b3JlbGVhc2UoKTsKK30KKyNlbmRpZiAvLyBI
QVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICAKK3N0YXRpYyBOU0FycmF5
ICpjb29raWVzRm9yVVJMKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29u
c3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKK3sKKyNpZiBIQVZFKENGTkVUV09S
S19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICBpZiAoTlNBcnJheSAqY29va2llcyA9IGNvb2tp
ZXNJblBhcnRpdGlvbkZvclVSTChzZXNzaW9uLCBmaXJzdFBhcnR5LCB1cmwpKQorICAgICAgICBy
ZXR1cm4gY29va2llczsKKyNlbmRpZgorICAgIHJldHVybiB3a0hUVFBDb29raWVzRm9yVVJMKHNl
c3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaXJzdFBhcnR5LCB1cmwpOworfQorCiBlbnVt
IEluY2x1ZGVIVFRQT25seU9yTm90IHsgRG9Ob3RJbmNsdWRlSFRUUE9ubHksIEluY2x1ZGVIVFRQ
T25seSB9Owogc3RhdGljIFN0cmluZyBjb29raWVzRm9yU2Vzc2lvbihjb25zdCBOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1
cmwsIEluY2x1ZGVIVFRQT25seU9yTm90IGluY2x1ZGVIVFRQT25seSkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBOU0FycmF5ICpjb29raWVzID0gd2tIVFRQQ29v
a2llc0ZvclVSTChzZXNzaW9uLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlyc3RQYXJ0eSwgdXJs
KTsKKyAgICBOU0FycmF5ICpjb29raWVzID0gY29va2llc0ZvclVSTChzZXNzaW9uLCBmaXJzdFBh
cnR5LCB1cmwpOwogICAgIGlmICghW2Nvb2tpZXMgY291bnRdKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7IC8vIFJldHVybiBhIG51bGwgc3RyaW5nLCBub3QgYW4gZW1wdHkgb25lIHRoYXQgU3Ry
aW5nQnVpbGRlciB3b3VsZCBjcmVhdGUgYmVsb3cuCiAKQEAgLTEyOSw2ICsxNzgsMTIgQEAgdm9p
ZCBzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
IGNvbnN0IFVSTCYgZmlyc3RQYXIKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyZWRDb29r
aWVzID0gZmlsdGVyQ29va2llcyh1bmZpbHRlcmVkQ29va2llcyk7CiAgICAgQVNTRVJUKFtmaWx0
ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOwogCisjaWYgSEFWRShDRk5FVFdPUktfU1RP
UkFHRV9QQVJUSVRJT05JTkcpCisgICAgU3RyaW5nIHBhcnRpdGlvbiA9IGNvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb24oZmlyc3RQYXJ0eSwgdXJsKTsKKyAgICBpZiAoIXBhcnRpdGlvbi5pc0VtcHR5KCkp
CisgICAgICAgIGZpbHRlcmVkQ29va2llcyA9IGFwcGx5UGFydGl0aW9uVG9Db29raWVzKHBhcnRp
dGlvbiwgZmlsdGVyZWRDb29raWVzLmF1dG9yZWxlYXNlKCkpOworI2VuZGlmCisKICAgICB3a1Nl
dEhUVFBDb29raWVzRm9yVVJMKHNlc3Npb24uY29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJl
ZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eSk7CiAKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwpAQCAtMTUwLDcgKzIwNSw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCi0gICAgTlNBcnJheSAqY29va2llcyA9IHdrSFRUUENvb2tpZXNGb3JVUkwoc2Vzc2lv
bi5jb29raWVTdG9yYWdlKCkuZ2V0KCksIGZpcnN0UGFydHksIHVybCk7CisgICAgTlNBcnJheSAq
Y29va2llcyA9IGNvb2tpZXNGb3JVUkwoc2Vzc2lvbiwgZmlyc3RQYXJ0eSwgdXJsKTsKICAgICBO
U1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXMgY291bnRdOwogICAgIHJhd0Nvb2tpZXMucmVzZXJ2
ZUNhcGFjaXR5KGNvdW50KTsKICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9S
ZXNvdXJjZUhhbmRsZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L1Jlc291cmNlSGFuZGxlTWFjLm1tCmluZGV4IDhhNzYzM2UwZjJlOTRiODQwMTNjYTVhM2ZhODkx
ZTgyYzZhMDk2Y2EuLmE0MjlhNTc5M2JiY2E2ZWM5MGE2M2RmNDNiYjllN2UyNzUyYTZmMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFu
ZGxlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlSGFuZGxlTWFjLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAj
aW1wb3J0ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJOU1VSTENvbm5lY3Rpb25TUEku
aCIKKyNpbXBvcnQgIk5ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oIgogI2ltcG9ydCAiTmV0d29ya2lu
Z0NvbnRleHQuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlJlc291cmNlRXJyb3IuaCIK
QEAgLTE3Miw2ICsxNzMsMTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlTlNVUkxDb25u
ZWN0aW9uKGlkIGRlbGVnYXRlLCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWwKICAgICAgICAgbnNS
ZXF1ZXN0ID0gbXV0YWJsZVJlcXVlc3Q7CiAgICAgfQogCisjaWYgSEFWRShDRk5FVFdPUktfU1RP
UkFHRV9QQVJUSVRJT05JTkcpCisgICAgU3RyaW5nIHN0b3JhZ2VQYXJ0aXRpb24gPSBjb29raWVT
dG9yYWdlUGFydGl0aW9uKGZpcnN0UmVxdWVzdCgpKTsKKyAgICBpZiAoIXN0b3JhZ2VQYXJ0aXRp
b24uaXNFbXB0eSgpKQorICAgICAgICBbKE5TTXV0YWJsZVVSTFJlcXVlc3QgKiluc1JlcXVlc3Qg
X3NldFByb3BlcnR5OnN0b3JhZ2VQYXJ0aXRpb24gZm9yS2V5OkAiX19TVE9SQUdFX1BBUlRJVElP
Tl9JREVOVElGSUVSIl07CisjZW5kaWYKKwogICAgIGlmIChkLT5tX3N0b3JhZ2VTZXNzaW9uKQog
ICAgICAgICBuc1JlcXVlc3QgPSBbd2tDb3B5UmVxdWVzdFdpdGhTdG9yYWdlU2Vzc2lvbihkLT5t
X3N0b3JhZ2VTZXNzaW9uLmdldCgpLCBuc1JlcXVlc3QpIGF1dG9yZWxlYXNlXTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGTmV0d29ya1NQSS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGTmV0d29ya1NQSS5oCmluZGV4IDBjY2Y2MTRk
YWE0OTZjZWM2MTE3MjRkYTQzOGEwMTAwOTIzNjRmNDUuLjgyNmQ0YTMwYmM2ZTZhZTI1ZWMxMzQ5
NzAyNGEzNmUzZDhiNGNhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nw
aS9jZi9DRk5ldHdvcmtTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY2Yv
Q0ZOZXR3b3JrU1BJLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZV
UkxSZXNwb25zZVByaXYuaD4KICNpbmNsdWRlIDxDRk5ldHdvcmsvQ0ZVUkxTdG9yYWdlU2Vzc2lv
bi5oPgogCi0vLyBGSVhNRTogUmVtb3ZlIHRoZSBkZWZpbmVkKF9fT0JKQ19fKS1ndWFyZCBvbm5j
ZSB3ZSBmaXggPHJkYXI6Ly9wcm9ibGVtLzE5MDMzNjEwPi4KKy8vIEZJWE1FOiBSZW1vdmUgdGhl
IGRlZmluZWQoX19PQkpDX18pLWd1YXJkIG9uY2Ugd2UgZml4IDxyZGFyOi8vcHJvYmxlbS8xOTAz
MzYxMD4uCiAjaWYgZGVmaW5lZChfX09CSkNfXykgJiYgUExBVEZPUk0oQ09DT0EpCiAvLyBGSVhN
RTogQXMgYSB3b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTgzMzcxODI+LCB3ZSBjb25k
aXRpb25hbGx5IGVuY2xvc2UgdGhlIGhlYWRlcgogLy8gaW4gYW4gZXh0ZXJuICJDIiBsaW5rYWdl
IGJsb2NrIHRvIG1ha2UgaXQgc3VpdGFibGUgZm9yIEMrKyB1c2UuCkBAIC0xMDMsOCArMTAzLDIy
IEBAIHR5cGVkZWYgdm9pZCAoXkNGQ2FjaGVkVVJMUmVzcG9uc2VDYWxsQmFja0Jsb2NrKShDRkNh
Y2hlZFVSTFJlc3BvbnNlUmVmKTsKIEBlbmQKICNlbmRpZgogCisjaWYgKFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDApIHx8IChQTEFURk9S
TShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMDAwMCkKK0Bp
bnRlcmZhY2UgTlNIVFRQQ29va2llICgpCitAcHJvcGVydHkgKG51bGxhYmxlLCByZWFkb25seSwg
Y29weSkgTlNTdHJpbmcgKl9zdG9yYWdlUGFydGl0aW9uOworQGVuZAorCitAaW50ZXJmYWNlIE5T
SFRUUENvb2tpZVN0b3JhZ2UgKCkKKy0gKHZvaWQpX2dldENvb2tpZXNGb3JVUkw6KE5TVVJMICop
dXJsIG1haW5Eb2N1bWVudFVSTDooTlNVUkwgKiltYWluRG9jdW1lbnRVUkwgcGFydGl0aW9uOihO
U1N0cmluZyAqKXBhcnRpdGlvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheSAq
KSljb21wbGV0aW9uSGFuZGxlcjsKK0BlbmQKKworQGludGVyZmFjZSBOU1VSTFNlc3Npb25UYXNr
ICgpCitAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICpfc3RvcmFnZVBhcnRpdGlvbklkZW50aWZp
ZXI7CitAZW5kCiAjZW5kaWYKIAorI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCisKICNlbmRp
ZiAvLyBQTEFURk9STShXSU4pIHx8IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKIEVYVEVSTl9D
IHZvaWQgQ0ZVUkxSZXF1ZXN0U2V0U2hvdWxkU3RhcnRTeW5jaHJvbm91c2x5KENGVVJMUmVxdWVz
dFJlZiwgQm9vbGVhbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCmluZGV4IGJlNGRjYmVmZjE5NDY0
ODAzM2ZiNTRmNWEyMjFkNmFiOTViNDUyMDYuLmI4M2Y5ZTdlNGE1MWY2ZmE2NjY3MzlmNDQxNDEz
YTIwMTllMzIzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCkBAIC0zNCw2ICszNCw3IEBACiAj
aW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ0ZOZXR3b3JrU1BJLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTg1
LDYgKzg2LDEyIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAgICAgICAgIEFTU0VSVCghbV9z
ZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0
YXNrSWRlbnRpZmllcl0pKTsKICAgICAgICAgbV9zZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0
Q3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9CisK
KyNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKKyAgICBTdHJpbmcgc3Rv
cmFnZVBhcnRpdGlvbiA9IFdlYkNvcmU6OmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24ocmVxdWVzdCk7
CisgICAgaWYgKCFzdG9yYWdlUGFydGl0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgbV90YXNrLmdl
dCgpLl9zdG9yYWdlUGFydGl0aW9uSWRlbnRpZmllciA9IHN0b3JhZ2VQYXJ0aXRpb247CisjZW5k
aWYKIH0KIAogTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkK
</data>
<flag name="review"
          id="297511"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>