<?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>107807</bug_id>
          
          <creation_ts>2013-01-24 03:33:28 -0800</creation_ts>
          <short_desc>Make the existing HTMLPreloadScanner threading-aware</short_desc>
          <delta_ts>2013-02-11 00:43:38 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>107973</dependson>
          <blocked>106127</blocked>
    
    <blocked>108027</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>815301</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 03:33:28 -0800</bug_when>
    <thetext>Threaded HTML Parser should be able to issue preload requests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815302</commentid>
    <comment_count>1</comment_count>
      <attachid>184457</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 03:33:47 -0800</bug_when>
    <thetext>Created attachment 184457
incomplete approximation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815303</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 03:34:53 -0800</bug_when>
    <thetext>The goal of this was to re-work the existing preload scanner to make it happy on either thread.

This is still just a sketch (it doesn&apos;t compile yet), but I&apos;m about to get to the beat-it-until-it-compiles stage. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815655</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-24 11:28:07 -0800</bug_when>
    <thetext>Another approach is to scan the speculatively produced CompactHTMLTokens instead of re-tokenizing the input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815704</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 12:07:12 -0800</bug_when>
    <thetext>Yup.  The goal here is to re-architect the current preload scanner logic into something which could run on another thread.  This will not land as a single patch, and our final solution may not look much like this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815706</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 12:10:25 -0800</bug_when>
    <thetext>The preload scanner wants to keep a bunch of state (like if we&apos;re in templates or script tags), but yes, we will likely work from CompactHTMLTokens instead of HTMLToken on the tokenizer thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815918</commentid>
    <comment_count>6</comment_count>
      <attachid>184599</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 15:47:01 -0800</bug_when>
    <thetext>Created attachment 184599
A more complete patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815929</commentid>
    <comment_count>7</comment_count>
      <attachid>184599</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-24 15:55:52 -0800</bug_when>
    <thetext>Comment on attachment 184599
A more complete patch

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

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:89
&gt; +    , m_preloaderWeakFactory(m_preloader.get())

Usually we put the factory on object that it is vending weak pointers for.  In this case, we&apos;d put the factory on HTMLResourcePreloader.  That way the factory always gets destroyed with the object it&apos;s creating pointers for gets destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815933</commentid>
    <comment_count>8</comment_count>
      <attachid>184599</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-24 16:00:29 -0800</bug_when>
    <thetext>Comment on attachment 184599
A more complete patch

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

&gt;&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:89
&gt;&gt; +    , m_preloaderWeakFactory(m_preloader.get())
&gt; 
&gt; Usually we put the factory on object that it is vending weak pointers for.  In this case, we&apos;d put the factory on HTMLResourcePreloader.  That way the factory always gets destroyed with the object it&apos;s creating pointers for gets destroyed.

Yup, that&apos;s fine.  I&apos;m just not yet sure whether HTMLResourcePreloader even want&apos;s to be a separate object. :)  But I&apos;ll move it in my next iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816189</commentid>
    <comment_count>9</comment_count>
      <attachid>184599</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-24 21:36:02 -0800</bug_when>
    <thetext>Comment on attachment 184599
A more complete patch

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

&gt; Source/WebCore/html/parser/CSSPreloadScanner.cpp:201
&gt; +            OwnPtr&lt;PreloadRequest&gt; request = PreloadRequest::create(
&gt; +                cachedResourceRequestInitiators().css, url, baseElementURL, CachedResource::CSSStyleSheet);

I didn&apos;t see the definition of PreloadRequest, but it looks like it contains a bunch of Strings.  We&apos;ll probably need to call isolatedCopy to make sure its safe for transport across threads.

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:56
&gt; +static bool threadSafeEqual(StringImpl* a, StringImpl* b)
&gt; +{
&gt; +    if (a-&gt;hash() != b-&gt;hash())
&gt; +        return false;
&gt; +    return StringHash::equal(a, b);
&gt; +}
&gt; +
&gt; +static bool threadSafeMatch(const String&amp; localName, const QualifiedName&amp; qName)
&gt; +{
&gt; +    return threadSafeEqual(localName.impl(), qName.localName().impl());
&gt; +}

Maybe we should share these functions with BackgroundHTMLParser?

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:276
&gt; +                String hrefValue = StringImpl::create8BitIfPossible(iter-&gt;m_value.data(), iter-&gt;m_value.size());

I&apos;m surprised to see &quot;StringImpl&quot; here.  I think elsewhere we call a static function on String

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:292
&gt; +    AtomicString tagName(token.name().data(), token.name().size());

Should we have an ASSERT(isMainThread()) here as well?  Given that you&apos;re using the threadsafe comparison functions, should we use String instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816190</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-24 21:36:36 -0800</bug_when>
    <thetext>The general approach in this patch looks good.  The comments above are just minor nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816327</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 00:15:54 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 184599 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184599&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/CSSPreloadScanner.cpp:201
&gt; &gt; +            OwnPtr&lt;PreloadRequest&gt; request = PreloadRequest::create(
&gt; &gt; +                cachedResourceRequestInitiators().css, url, baseElementURL, CachedResource::CSSStyleSheet);
&gt; 
&gt; I didn&apos;t see the definition of PreloadRequest, but it looks like it contains a bunch of Strings.  We&apos;ll probably need to call isolatedCopy to make sure its safe for transport across threads.

Must have failed to add the files. And yes, it does. :)

&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:56
&gt; &gt; +static bool threadSafeEqual(StringImpl* a, StringImpl* b)
&gt; &gt; +{
&gt; &gt; +    if (a-&gt;hash() != b-&gt;hash())
&gt; &gt; +        return false;
&gt; &gt; +    return StringHash::equal(a, b);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +static bool threadSafeMatch(const String&amp; localName, const QualifiedName&amp; qName)
&gt; &gt; +{
&gt; &gt; +    return threadSafeEqual(localName.impl(), qName.localName().impl());
&gt; &gt; +}
&gt; 
&gt; Maybe we should share these functions with BackgroundHTMLParser?

I think we&apos;re going to move back to AtomicString eventually, or some more elegant solution.  This is very hackish and difficult to maintain.  (Very easy to add an AtomicString compare, have it do the wrong thing adn not notice).

&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:276
&gt; &gt; +                String hrefValue = StringImpl::create8BitIfPossible(iter-&gt;m_value.data(), iter-&gt;m_value.size());
&gt; 
&gt; I&apos;m surprised to see &quot;StringImpl&quot; here.  I think elsewhere we call a static function on String

K.  Was existing code, will fix.

&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:292
&gt; &gt; +    AtomicString tagName(token.name().data(), token.name().size());
&gt; 
&gt; Should we have an ASSERT(isMainThread()) here as well?  Given that you&apos;re using the threadsafe comparison functions, should we use String instead?

It doesn&apos;t really matter which we use.  This does fewer allocs, and is safe (as each thread already has an AtomicString table) the comparison with main-thread QualifiedNames won&apos;t do what you want of course. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816417</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 02:45:11 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 184599 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184599&amp;action=review
&gt;
&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:276
&gt; &gt; +                String hrefValue = StringImpl::create8BitIfPossible(iter-&gt;m_value.data(), iter-&gt;m_value.size());
&gt; 
&gt; I&apos;m surprised to see &quot;StringImpl&quot; here.  I think elsewhere we call a static function on String

Turns out this function only exists on StringImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816426</commentid>
    <comment_count>13</comment_count>
      <attachid>184710</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 02:50:35 -0800</bug_when>
    <thetext>Created attachment 184710
Actually works for the main thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816436</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 03:02:09 -0800</bug_when>
    <thetext>I&apos;m happy to break this down however.  The next step is to make this work on the background parser, but I believe that to be trivial with this new design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816437</commentid>
    <comment_count>15</comment_count>
      <attachid>184710</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-25 03:02:34 -0800</bug_when>
    <thetext>Comment on attachment 184710
Actually works for the main thread

Attachment 184710 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/16116274</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816438</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-25 03:03:08 -0800</bug_when>
    <thetext>I&apos;m also happy to wait to land this until folks can see the next patch too. :)

Oh, and I guess I need to add these files to all teh other build systems.  Sigh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816451</commentid>
    <comment_count>17</comment_count>
      <attachid>184710</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 03:20:55 -0800</bug_when>
    <thetext>Comment on attachment 184710
Actually works for the main thread

Attachment 184710 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16114316</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816477</commentid>
    <comment_count>18</comment_count>
      <attachid>184710</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-25 04:36:18 -0800</bug_when>
    <thetext>Comment on attachment 184710
Actually works for the main thread

Attachment 184710 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/16111536</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816489</commentid>
    <comment_count>19</comment_count>
      <attachid>184710</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-01-25 04:45:55 -0800</bug_when>
    <thetext>Comment on attachment 184710
Actually works for the main thread

Attachment 184710 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/16110677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816528</commentid>
    <comment_count>20</comment_count>
      <attachid>184710</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 06:10:01 -0800</bug_when>
    <thetext>Comment on attachment 184710
Actually works for the main thread

Attachment 184710 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16112480</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816540</commentid>
    <comment_count>21</comment_count>
      <attachid>184710</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-25 06:29:59 -0800</bug_when>
    <thetext>Comment on attachment 184710
Actually works for the main thread

Attachment 184710 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16113420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817336</commentid>
    <comment_count>22</comment_count>
      <attachid>184902</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 00:39:32 -0800</bug_when>
    <thetext>Created attachment 184902
Now with project changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817337</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 00:40:06 -0800</bug_when>
    <thetext>check-webkit-style seemed to hang for me, attempting to check this patch.  Hopefully the style queue will not suffer the same fate.  Or maybe check-webkit-style is busted on TOT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817338</commentid>
    <comment_count>24</comment_count>
      <attachid>184902</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-27 00:47:19 -0800</bug_when>
    <thetext>Comment on attachment 184902
Now with project changes

Attachment 184902 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/16161126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817339</commentid>
    <comment_count>25</comment_count>
      <attachid>184902</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-27 01:06:45 -0800</bug_when>
    <thetext>Comment on attachment 184902
Now with project changes

Attachment 184902 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16153146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817340</commentid>
    <comment_count>26</comment_count>
      <attachid>184902</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-27 01:08:32 -0800</bug_when>
    <thetext>Comment on attachment 184902
Now with project changes

Attachment 184902 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16153148</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817344</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 01:28:33 -0800</bug_when>
    <thetext>callOnMainThread is not properly exported for Windows WTF.  Not sure how we&apos;re supposed to do that, will have to investigate.

I also just failed to include the xcode proj changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817345</commentid>
    <comment_count>28</comment_count>
      <attachid>184904</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 01:50:19 -0800</bug_when>
    <thetext>Created attachment 184904
should build on Mac and win now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817357</commentid>
    <comment_count>29</comment_count>
      <attachid>184904</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-27 03:19:32 -0800</bug_when>
    <thetext>Comment on attachment 184904
should build on Mac and win now

Attachment 184904 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16146393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817385</commentid>
    <comment_count>30</comment_count>
      <attachid>184904</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 11:13:11 -0800</bug_when>
    <thetext>Comment on attachment 184904
should build on Mac and win now

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

This looks great.

&gt; Source/WebCore/html/parser/CSSPreloadScanner.cpp:201
&gt; +                cachedResourceRequestInitiators().css, url, baseElementURL, CachedResource::CSSStyleSheet);

Is cachedResourceRequestInitiators().css safe to call on a background thread?

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:56
&gt; +static bool threadSafeEqual(StringImpl* a, StringImpl* b)
&gt; +{
&gt; +    if (a-&gt;hash() != b-&gt;hash())
&gt; +        return false;
&gt; +    return StringHash::equal(a, b);
&gt; +}
&gt; +
&gt; +static bool threadSafeMatch(const String&amp; localName, const QualifiedName&amp; qName)
&gt; +{
&gt; +    return threadSafeEqual(localName.impl(), qName.localName().impl());
&gt; +}

We should share this code instead of duplicating it.

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:183
&gt; +    void issuePreloadRequest(WeakPtr&lt;HTMLResourcePreloader&gt;&amp; preloader, const KURL&amp; predictedBaseURL)

const reference?

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:310
&gt; +    AtomicString tagName(token.name().data(), token.name().size());

We might want to use a regular string here.  It&apos;s not clear to me whether we want to boot up an atomic string table on the background thread, especially in the world where we&apos;re using a threadpool.

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:44
&gt; +static bool isStringSafeToSendToAnotherThread(const String&amp; string)
&gt; +{
&gt; +    StringImpl* impl = string.impl();
&gt; +    if (!impl)
&gt; +        return true;
&gt; +    if (impl-&gt;hasOneRef())
&gt; +        return true;
&gt; +    if (string.isEmpty())
&gt; +        return true;
&gt; +    return false;
&gt; +}

We should share this code instead of duplicating it.

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.h:40
&gt; +    bool isSafeToSendToAnotherThread() const;

Should this be #ifndef NDEBUG?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817436</commentid>
    <comment_count>31</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 17:09:45 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 184904 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184904&amp;action=review
&gt; 
&gt; This looks great.

Thank you for the review.

&gt; &gt; Source/WebCore/html/parser/CSSPreloadScanner.cpp:201
&gt; &gt; +                cachedResourceRequestInitiators().css, url, baseElementURL, CachedResource::CSSStyleSheet);
&gt; 
&gt; Is cachedResourceRequestInitiators().css safe to call on a background thread?

Yup:
inline const CachedResourceRequestInitiators&amp; cachedResourceRequestInitiators()
{
    return threadGlobalData().cachedResourceRequestInitiators();
}

The return value will be a per-thread AtomicString, so it may not be safe for our thread... unless we turn on AtomicStrings. :(  Which I think we&apos;re eventually going to do again. :)


&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:56
&gt; &gt; +static bool threadSafeEqual(StringImpl* a, StringImpl* b)
&gt; &gt; +{
&gt; &gt; +    if (a-&gt;hash() != b-&gt;hash())
&gt; &gt; +        return false;
&gt; &gt; +    return StringHash::equal(a, b);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +static bool threadSafeMatch(const String&amp; localName, const QualifiedName&amp; qName)
&gt; &gt; +{
&gt; &gt; +    return threadSafeEqual(localName.impl(), qName.localName().impl());
&gt; &gt; +}
&gt; 
&gt; We should share this code instead of duplicating it.

Yup.  I think we&apos;re going to kill this code eventually, but I agree.

&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:183
&gt; &gt; +    void issuePreloadRequest(WeakPtr&lt;HTMLResourcePreloader&gt;&amp; preloader, const KURL&amp; predictedBaseURL)
&gt; 
&gt; const reference?
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:310
&gt; &gt; +    AtomicString tagName(token.name().data(), token.name().size());
&gt; 
&gt; We might want to use a regular string here.  It&apos;s not clear to me whether we want to boot up an atomic string table on the background thread, especially in the world where we&apos;re using a threadpool.

That turned out to be required for turnign it on: bug 108027.

&gt; &gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:44
&gt; &gt; +static bool isStringSafeToSendToAnotherThread(const String&amp; string)
&gt; &gt; +{
&gt; &gt; +    StringImpl* impl = string.impl();
&gt; &gt; +    if (!impl)
&gt; &gt; +        return true;
&gt; &gt; +    if (impl-&gt;hasOneRef())
&gt; &gt; +        return true;
&gt; &gt; +    if (string.isEmpty())
&gt; &gt; +        return true;
&gt; &gt; +    return false;
&gt; &gt; +}
&gt; 
&gt; We should share this code instead of duplicating it.
&gt; 
&gt; &gt; Source/WebCore/html/parser/HTMLResourcePreloader.h:40
&gt; &gt; +    bool isSafeToSendToAnotherThread() const;
&gt; 
&gt; Should this be #ifndef NDEBUG?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817438</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 17:12:13 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; (From update of attachment 184904 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184904&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/html/parser/CSSPreloadScanner.cpp:201
&gt; &gt; &gt; +                cachedResourceRequestInitiators().css, url, baseElementURL, CachedResource::CSSStyleSheet);
&gt; &gt; 
&gt; &gt; Is cachedResourceRequestInitiators().css safe to call on a background thread?
&gt; 
&gt; Yup:
&gt; inline const CachedResourceRequestInitiators&amp; cachedResourceRequestInitiators()
&gt; {
&gt;     return threadGlobalData().cachedResourceRequestInitiators();
&gt; }
&gt; 
&gt; The return value will be a per-thread AtomicString, so it may not be safe for our thread... unless we turn on AtomicStrings. :(  Which I think we&apos;re eventually going to do again. :)

Right, but then we send that string to another thread, which seems like bad news bears.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817441</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 17:26:32 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; (From update of attachment 184904 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184904&amp;action=review

&gt; &gt; The return value will be a per-thread AtomicString, so it may not be safe for our thread... unless we turn on AtomicStrings. :(  Which I think we&apos;re eventually going to do again. :)
&gt; 
&gt; Right, but then we send that string to another thread, which seems like bad news bears.

Yes, your implicit point that we&apos;re missing an isolatedCopy() here is correct.  But it&apos;s probably also note safe to have this use AtomicString if we haven&apos;t called AtomicString::init().  I suspect one of the preload test is crashing (or would crash after we fix doc.write) and I didn&apos;t notice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817442</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 17:29:53 -0800</bug_when>
    <thetext>I bet we can just change cachedResourceRequestInitiators to be an enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817443</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 17:32:50 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; I bet we can just change cachedResourceRequestInitiators to be an enum.

I&apos;m sure we can.  I think we&apos;re also fighting the rest of WebCore. :)  Eventually I believe we are going to re-accept our AtomicString overlords.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817444</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 17:41:34 -0800</bug_when>
    <thetext>Very likely.  Certainly I don&apos;t think we should block this patch on converting to an enum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817456</commentid>
    <comment_count>37</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-27 18:18:22 -0800</bug_when>
    <thetext>Would you be willing to run the HTML parser benchmark on this change before landing to make sure we&apos;re not slowing it down?  (I don&apos;t think we are, but it&apos;s good to double-check.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817466</commentid>
    <comment_count>38</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-27 18:56:45 -0800</bug_when>
    <thetext>Happily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817614</commentid>
    <comment_count>39</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-01-28 01:48:41 -0800</bug_when>
    <thetext>Looks like it might be a slowdown:


Before:
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2032.85120001 ms
median= 2017.63250004 ms, stdev= 73.7682286267 ms, min= 1942.15300004 ms, max= 2234.08299999 ms
RESULT Parser: html-parser: JSHeap= 2119526.8 bytes
median= 2164094.0 bytes, stdev= 133089.003711 bytes, min= 1663408.0 bytes, max= 2178108.0 bytes
RESULT Parser: html-parser: Malloc= 40682212.4 bytes
median= 40346100.0 bytes, stdev= 1194471.7551 bytes, min= 40178056.0 bytes, max= 45341632.0 bytes
Finished: 45.511458 s

After:
Running 1 tests
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 2108.1245 ms
median= 2116.98500009 ms, stdev= 63.8100291878 ms, min= 1990.56499999 ms, max= 2275.501 ms
RESULT Parser: html-parser: JSHeap= 2004266.2 bytes
median= 2037086.0 bytes, stdev= 95033.0246463 bytes, min= 1663408.0 bytes, max= 2049172.0 bytes
RESULT Parser: html-parser: Malloc= 40585128.0 bytes
median= 40359988.0 bytes, stdev= 1156623.92917 bytes, min= 39334792.0 bytes, max= 45296112.0 bytes
Finished: 47.336479 s

I&apos;m not shocked, given all the avoiding of AtomicString (thus additional mallocs and less efficient compares).

Will have to investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829385</commentid>
    <comment_count>40</comment_count>
      <attachid>187501</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-10 17:52:00 -0800</bug_when>
    <thetext>Created attachment 187501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829388</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-10 17:59:07 -0800</bug_when>
    <thetext>The slowdown from the other patch is not present in this one, btw:

Before:
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 1864.1045 ms
median= 1863.81349999 ms, stdev= 10.56774216 ms, min= 1846.79899999 ms, max= 1884.556 ms
RESULT Parser: html-parser: JSHeap= 2025204.0 bytes
median= 2056024.0 bytes, stdev= 94620.1494687 bytes, min= 1687240.0 bytes, max= 2069624.0 bytes
RESULT Parser: html-parser: Malloc= 41353497.2 bytes
median= 41190176.0 bytes, stdev= 979648.045835 bytes, min= 40282784.0 bytes, max= 45394296.0 bytes
Finished: 41.853883 s

After:
Running Parser/html-parser.html (1 of 1)
RESULT Parser: html-parser= 1832.69735 ms
median= 1839.06099999 ms, stdev= 14.0988717905 ms, min= 1804.87300002 ms, max= 1852.063 ms
RESULT Parser: html-parser: JSHeap= 2157159.2 bytes
median= 2191020.0 bytes, stdev= 95286.9975034 bytes, min= 1818320.0 bytes, max= 2200564.0 bytes
RESULT Parser: html-parser: Malloc= 41040379.6 bytes
median= 41106120.0 bytes, stdev= 1146075.08036 bytes, min= 40095656.0 bytes, max= 45390272.0 bytes
Finished: 41.082746 s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829396</commentid>
    <comment_count>42</comment_count>
      <attachid>187501</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-10 18:52:10 -0800</bug_when>
    <thetext>Comment on attachment 187501
Patch

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

&gt; Source/WebCore/ChangeLog:37
&gt; +          The preload scanners are handed a WeakPtr to the HTMLResourcePreloader and speak to
&gt; +          it using callOnMainThread.

Is this still true?

&gt; Source/WebCore/html/parser/CSSPreloadScanner.h:67
&gt; +    // Only non-null during scan()

null -&gt; zero

&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:90
&gt; +    , m_preloader(adoptPtr(new HTMLResourcePreloader(document)))

It seems like we could hold this as a member instead of via an OwnPtr.

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:48
&gt; +    return token.type() == HTMLTokenTypes::StartTag; // Holy verbosity, batman.

This comment probably isn&apos;t necessary.

&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:302
&gt; +    PreloadTask task(tagName, token.attributes());

The PreloadTask seems like a historical appendage at this point.

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:59
&gt; +CachedResourceRequest PreloadRequest::resourceRequest(Document* document)

resourceRequest -&gt; createResourceRequest?

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:65
&gt; +    // FIXME: It&apos;s possible CORS should work for other request types?

Yes.  It should work for images too.  Perhaps we should fix that in a followup patch?

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:71
&gt; +void HTMLResourcePreloader::preload(PassOwnPtr&lt;PreloadRequest&gt; preload)

It seems odd to separate PreloadRequest::resourceRequest from this function.  Is there some advantage to creating the CachedResourceRequest in a separate function?

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.h:34
&gt; +class PreloadRequest {

In principle, PreloadRequest should have its own file.

&gt; Source/WebCore/html/parser/HTMLResourcePreloader.h:59
&gt; +public:

It seems odd to have some of the members be private and some be public.  Perhaps these should be private and have getters/setters as appropriate?

&gt; Source/WebCore/loader/cache/CachedResourceRequest.h:29
&gt; +#include &quot;Element.h&quot;

Rather than adding this include here, why not add the include to the file that needs it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829418</commentid>
    <comment_count>43</comment_count>
      <attachid>187501</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-10 20:21:38 -0800</bug_when>
    <thetext>Comment on attachment 187501
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:37
&gt;&gt; +          it using callOnMainThread.
&gt; 
&gt; Is this still true?

Fixed.

&gt;&gt; Source/WebCore/html/parser/CSSPreloadScanner.h:67
&gt;&gt; +    // Only non-null during scan()
&gt; 
&gt; null -&gt; zero

Fixed.

&gt;&gt; Source/WebCore/html/parser/HTMLDocumentParser.cpp:90
&gt;&gt; +    , m_preloader(adoptPtr(new HTMLResourcePreloader(document)))
&gt; 
&gt; It seems like we could hold this as a member instead of via an OwnPtr.

Definitely could.  The rest of the class seems to use OwnPtrs for members so I matched the style.  It would be slightly faster to allocate and slighltly slower to compile.   (Generally a trade we like to make.)

&gt;&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:48
&gt;&gt; +    return token.type() == HTMLTokenTypes::StartTag; // Holy verbosity, batman.
&gt; 
&gt; This comment probably isn&apos;t necessary.

These inlines exist because the compares are so horrible.  But I agree the comment is superflous.

&gt;&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:302
&gt;&gt; +    PreloadTask task(tagName, token.attributes());
&gt; 
&gt; The PreloadTask seems like a historical appendage at this point.

Completely.  I think we&apos;ll kill it in a second pass.

It&apos;s really just mis-named.  It&apos;s a &quot;start tag processing context&quot; or &quot;start tag preload scanner?&quot;

&gt;&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:59
&gt;&gt; +CachedResourceRequest PreloadRequest::resourceRequest(Document* document)
&gt; 
&gt; resourceRequest -&gt; createResourceRequest?

Normally create* functions return heap allocated objects, is my understanding.

&gt;&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:65
&gt;&gt; +    // FIXME: It&apos;s possible CORS should work for other request types?
&gt; 
&gt; Yes.  It should work for images too.  Perhaps we should fix that in a followup patch?

Totally.  This should be no change in behavior as is.  There were several FIXMEs like thsi which became obvious in teh refactoring.

&gt;&gt; Source/WebCore/html/parser/HTMLResourcePreloader.cpp:71
&gt;&gt; +void HTMLResourcePreloader::preload(PassOwnPtr&lt;PreloadRequest&gt; preload)
&gt; 
&gt; It seems odd to separate PreloadRequest::resourceRequest from this function.  Is there some advantage to creating the CachedResourceRequest in a separate function?

The CachedResourceRequest seemed like something part of the PreloadRequest (makes the code smaller as less request-&gt; code).  But issuing the preload seemed like something the Request shouldn&apos;t know how to do.  The PreloadRequest is created on the background thread, and the CachedResourceRequest and preload execued on the main thread.

&gt;&gt; Source/WebCore/html/parser/HTMLResourcePreloader.h:34
&gt;&gt; +class PreloadRequest {
&gt; 
&gt; In principle, PreloadRequest should have its own file.

Yes.  I think I will ignore that for now. :)  See my wishes email.

&gt;&gt; Source/WebCore/html/parser/HTMLResourcePreloader.h:59
&gt;&gt; +public:
&gt; 
&gt; It seems odd to have some of the members be private and some be public.  Perhaps these should be private and have getters/setters as appropriate?

Yeah.  It really is an awkward design.  The original goal was to make the constructor take all the &quot;Expected&quot; arguments, and let the special cases be set manually.  This also started as a struct and morphed to a class. :)

I think I&apos;ll add setters, to keep with the pattern.  Making the constructor take &quot;expected&quot; argumetns was helpful in finding FIXMEs in the CSSPreloadScanner. :)

&gt;&gt; Source/WebCore/loader/cache/CachedResourceRequest.h:29
&gt;&gt; +#include &quot;Element.h&quot;
&gt; 
&gt; Rather than adding this include here, why not add the include to the file that needs it?

This file actually does need Element, due to     RefPtr&lt;Element&gt; m_initiatorElement; but was not including it.  So I fixed that. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829419</commentid>
    <comment_count>44</comment_count>
      <attachid>187509</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-10 20:27:43 -0800</bug_when>
    <thetext>Created attachment 187509
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829428</commentid>
    <comment_count>45</comment_count>
      <attachid>187509</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-10 21:15:42 -0800</bug_when>
    <thetext>Comment on attachment 187509
Patch for landing

Clearing flags on attachment: 187509

Committed r142427: &lt;http://trac.webkit.org/changeset/142427&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829429</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-10 21:15:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829478</commentid>
    <comment_count>47</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-02-11 00:43:38 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 187501 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187501&amp;action=review
&gt; &gt;&gt; Source/WebCore/html/parser/HTMLPreloadScanner.cpp:302
&gt; &gt;&gt; +    PreloadTask task(tagName, token.attributes());
&gt; &gt; 
&gt; &gt; The PreloadTask seems like a historical appendage at this point.
&gt; 
&gt; Completely.  I think we&apos;ll kill it in a second pass.
&gt; 
&gt; It&apos;s really just mis-named.  It&apos;s a &quot;start tag processing context&quot; or &quot;start tag preload scanner?&quot;

I&apos;ve filed bug 109406</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184457</attachid>
            <date>2013-01-24 03:33:47 -0800</date>
            <delta_ts>2013-01-24 15:46:59 -0800</delta_ts>
            <desc>incomplete approximation</desc>
            <filename>bug-107807-20130124033048.patch</filename>
            <type>text/plain</type>
            <size>12727</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI0MGI4MWQ1NDE4MmE5
YTI3NWM0ZWVhOWUyNjczZWM2OGVjYjYyZC4uMjgzMWI1ZDU2YWRiNTlhOTEzM2U0NzI2ODAzMjM0
YmZlYzY1Y2Q4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTAxLTI0ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBUaHJlYWRlZCBIVE1MIFBhcnNl
ciBzaG91bGQgYmUgYWJsZSB0byBpc3N1ZSBwcmVsb2FkIHJlcXVlc3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4K
KworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnRocmVhZFNhZmVFcXVhbCk6CisgICAgICAg
IChXZWJDb3JlOjp0aHJlYWRTYWZlTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjppc1N0YXJ0T3JFbmRUYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFByZWxvYWRTY2FubmVyOjpEb2N1bWVudFVSTHM6OkRvY3VtZW50VVJMcyk6CisgICAg
ICAgIChXZWJDb3JlOjpQcmVsb2FkZXI6OnByZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJl
bG9hZFRhc2s6OmNoYXJzZXQpOgorICAgICAgICAoUHJlbG9hZFRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6UHJlbG9hZFRhc2s6OnJlc291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQcmVs
b2FkVGFzazo6aXNzdWVQcmVsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJl
bG9hZFNjYW5uZXI6OkhUTUxQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UHJlbG9hZFNjYW5uZXI6OnNjYW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2Fu
bmVyOjpwcm9jZXNzVG9rZW5Gb3JUZW1wbGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBy
ZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVTdHlsZUNoYXJhY3RlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW4pOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAoUHJlbG9h
ZGVyKToKKyAgICAgICAgKFByZWxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoSFRNTFByZWxvYWRTY2FubmVyKToKKyAgICAgICAgKERvY3VtZW50VVJMcyk6CisKIDIw
MTMtMDEtMjQgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGVjN2U3ZDJiNmI0ZmNiNTRjMzIxMTIxM2I5
ZDQyYzg1M2RhNDU3NGEuLmNlOGIyYjM3ZjRhYmQ4ZDRhYzRlY2QxNjM5OTkxOWMwNjgxNzQ0Mjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVy
LmNwcApAQCAtNDIsNyArNDIsNTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworLy8gSW50ZW50aW9uYWxseSBOT1QgaW1wb3J0aW5nIEhUTUxO
YW1lcywgdG8gbWFrZSBpdCBtb3JlIG9idmlvdXMgd2hlbiB3ZSB1c2UKKy8vIHRoZXNlIG1haW4t
dGhyZWFkLXNwZWNpZmljIFF1YWxpZmllZE5hbWVzLgorCitzdGF0aWMgYm9vbCB0aHJlYWRTYWZl
RXF1YWwoU3RyaW5nSW1wbCogYSwgU3RyaW5nSW1wbCogYikKK3sKKyAgICBpZiAoYS0+aGFzaCgp
ICE9IGItPmhhc2goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBTdHJpbmdI
YXNoOjplcXVhbChhLCBiKTsKK30KKworc3RhdGljIGJvb2wgdGhyZWFkU2FmZU1hdGNoKGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKK3sKKyAgICBy
ZXR1cm4gdGhyZWFkU2FmZUVxdWFsKGxvY2FsTmFtZS5pbXBsKCksIHFOYW1lLmxvY2FsTmFtZSgp
LmltcGwoKSk7Cit9CisKK3N0YXRpYyBib29sIHRocmVhZFNhZmVNYXRjaChjb25zdCBIVE1MVG9r
ZW46OkRhdGFWZWN0b3ImIG5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQoreworICAg
IHJldHVybiBTdHJpbmdJbXBsOjplcXVhbChxTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCksIG5hbWUu
ZGF0YSgpLCBuYW1lLnNpemUoKSk7Cit9CisKKworc3RhdGljIGJvb2wgaXNTdGFydFRhZyhjb25z
dCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIHJldHVybiB0b2tlbi50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnOyAvLyBIb2x5IHZlcmJvc2l0eSwgYmF0bWFuLgorfQorCitzdGF0
aWMgYm9vbCBpc1N0YXJ0T3JFbmRUYWcoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBy
ZXR1cm4gdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwgaXNTdGFydFRh
Zyh0b2tlbik7Cit9CisKKworSFRNTFByZWxvYWRTY2FubmVyOjpEb2N1bWVudFVSTHM6OkRvY3Vt
ZW50VVJMcyhEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50VVJMKGRvY3VtZW50
LT51cmwoKSkKKyAgICAsIG1fZG9jdW1lbnRCYXNlVVJMKGRvY3VtZW50LT5iYXNlVVJMKCkpCisg
ICAgLCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMKGRvY3VtZW50LT5iYXNlRWxlbWVudFVSTCgp
KQoreworfQorCit2b2lkIFByZWxvYWRlcjo6cHJlbG9hZChQYXNzT3duUHRyPFByZWxvYWRSZXF1
ZXN0PiBwcmVsb2FkKQoreworICAgIEtVUkwgYmFzZVVSTCA9IHByZWxvYWQtPmJhc2VVUkwoKS5p
c0VtcHR5KCkgPyBtX2RvY3VtZW50LT51cmwoKSA6IHByZWxvYWQtPmJhc2VVUkwoKTsKKyAgICBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9kb2N1bWVudC0+
Y29tcGxldGVVUkwocHJlbG9hZC0+dXJsKCksIGJhc2VVUkwpKSk7CisgICAgcmVxdWVzdC5zZXRJ
bml0aWF0b3IocHJlbG9hZC0+aW5pdGlhdG9yKCkpOworCisgICAgLy8gRklYTUU6IEl0J3MgcG9z
c2libGUgQ09SUyBzaG91bGQgd29yayBmb3Igb3RoZXIgcmVxdWVzdCB0eXBlcz8KKyAgICBDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlID0gcHJlbG9hZC0+cmVxdWVzdFR5cGUoKTsKKyAgICBpZiAo
dHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KQorICAgICAgICByZXF1ZXN0Lm11dGFibGVS
ZXNvdXJjZVJlcXVlc3QoKS5zZXRBbGxvd0Nvb2tpZXMocHJlbG9hZC0+Y3Jvc3NPcmlnaW5Nb2Rl
QWxsb3dzQ29va2llcygpKTsKKworICAgIG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVy
KCktPnByZWxvYWQodHlwZSwgcmVxdWVzdCwgcHJlbG9hZC0+Y2hhcnNldCgpKTsKK30KIAogY2xh
c3MgUHJlbG9hZFRhc2sgewogcHVibGljOgpAQCAtMTI0LDIyICsxNzUsMzkgQEAgcHVibGljOgog
ICAgICAgICBtX3VybFRvTG9hZCA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhh
dHRyaWJ1dGVWYWx1ZSk7CiAgICAgfQogCi0gICAgdm9pZCBwcmVsb2FkKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKKyAgICBjb25zdCBTdHJpbmcmIGNoYXJzZXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBpbWdUYWcpCisgICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG1fY2hhcnNldDsKKyAgICB9
CisKKyAgICBDYWNoZWRSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBzY3JpcHRUYWcpCisgICAgICAgICAgICByZXR1cm4g
Q2FjaGVkUmVzb3VyY2U6OlNjcmlwdDsKKyAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBpbWdUYWcg
fHwgKG1fdGFnTmFtZSA9PSBpbnB1dFRhZyAmJiBtX2lucHV0SXNJbWFnZSkpCisgICAgICAgICAg
ICByZXR1cm4gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U7CisgICAgICAgIGlmIChtX3Rh
Z05hbWUgPT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQgJiYgbV9saW5rTWVkaWFBdHRy
aWJ1dGVJc1NjcmVlbikKKyAgICAgICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5
bGVTaGVldDsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJdHMg
bm90IGNsZWFyIHRoYXQgdGhpcyBpZiBpcyBuZWVkZWQsIHRoZSBsb2FkZXIgcHJvYmFibHkgaWdu
b3JlcyBjaGFyc2V0IGZvciBpbWFnZSByZXF1ZXN0cyBhbnl3YXkuCisgICAgICAgIGlmIChyZXNv
dXJjVHlwZSgpID09IENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlKQorICAgICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiBtX2NoYXJzZXQ7CisgICAgfQor
CisgICAgdm9pZCBpc3N1ZVByZWxvYWRSZXF1ZXN0KFdlYWtQdHI8UHJlbG9hZGVyPiYgcHJlbG9h
ZGVyLCBjb25zdCBLVVJMJiBwcmVkaWN0ZWRCYXNlVVJMKQogICAgIHsKLSAgICAgICAgaWYgKG1f
dXJsVG9Mb2FkLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKHVybFRvTG9hZCgpLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2Fj
aGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAg
ICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3Vt
ZW50LT5jb21wbGV0ZVVSTChtX3VybFRvTG9hZCwgYmFzZVVSTCkpKTsKLSAgICAgICAgcmVxdWVz
dC5zZXRJbml0aWF0b3IodGFnTmFtZSgpKTsKLSAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBzY3Jp
cHRUYWcpIHsKLSAgICAgICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNl
dEFsbG93Q29va2llcyhjcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCkpOwotICAgICAgICAg
ICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCwg
cmVxdWVzdCwgbV9jaGFyc2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX3RhZ05h
bWUgPT0gaW1nVGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRUYWcgJiYgbV9pbnB1dElzSW1hZ2Up
KQotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3Vy
Y2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3QsIFN0cmluZygpKTsKLSAgICAgICAgZWxzZSBpZiAo
bV90YWdOYW1lID09IGxpbmtUYWcgJiYgbV9saW5rSXNTdHlsZVNoZWV0ICYmIG1fbGlua01lZGlh
QXR0cmlidXRlSXNTY3JlZW4pIAotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnBy
ZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIG1fY2hhcnNldCk7
CisgICAgICAgIFByZWxvYWRlcjo6UmVxdWVzdCByZXF1ZXN0KHRhZ05hbWUoKSwgdXJsVG9Mb2Fk
KCksIHByZWRpY3RlZEJhc2VVUkwsIHVzZUNyZWRlbnRpYWxzKCksIHJlc291cmNlVHlwZSgpLCBj
aGFyc2V0KCkpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJlByZWxvYWRlcjo6cHJl
bG9hZCwgcHJlbG9hZGVyLCByZXF1ZXN0KSk7CiAgICAgfQogCiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CkBAIC0xNjIsOSArMjMw
LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1faW5wdXRJc0ltYWdlOwogfTsKIAotSFRNTFByZWxv
YWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBI
VE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0g
ICAgLCBtX2Nzc1NjYW5uZXIoZG9jdW1lbnQpCitIVE1MUHJlbG9hZFNjYW5uZXI6OkhUTUxQcmVs
b2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPFByZWxvYWRlcj4mIHByZWxvYWRlciBjb25zdCBIVE1M
UGFyc2VyT3B0aW9ucyYgb3B0aW9ucykKKyAgICA6IG1fcHJlbG9hZGVyKHByZWxvYWRlcikKKyAg
ICAsIG1fY3NzU2Nhbm5lcihwcmVsb2FkZXIpCiAgICAgLCBtX3Rva2VuaXplcihIVE1MVG9rZW5p
emVyOjpjcmVhdGUob3B0aW9ucykpCiAgICAgLCBtX2luU3R5bGUoZmFsc2UpCiAjaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCkBAIC0xNzgsNTggKzI0Niw4MyBAQCB2b2lkIEhUTUxQcmVsb2Fk
U2Nhbm5lcjo6YXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAg
bV9zb3VyY2UuYXBwZW5kKHNvdXJjZSk7CiB9CiAKLXZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpz
Y2FuKCkKKy8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgYnkgdGhlIGJhY2tncm91bmQtdGhy
ZWFkIHByZWxvYWQgc2Nhbm5lci4KK3ZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0
IEtVUkwmIHN0YXJ0aW5nQmFzZUVsZW1lbnRVUkwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICAvLyBXaGVuIHdlIHN0YXJ0IHNjYW5uaW5nLCBvdXIgYmVzdCBwcmVkaWN0aW9u
IG9mIHRoZSBiYXNlRWxlbWVudFVSTCBpcyB0aGUgcmVhbCBvbmUhCi0gICAgbV9wcmVkaWN0ZWRC
YXNlRWxlbWVudFVSTCA9IG1fZG9jdW1lbnQtPmJhc2VFbGVtZW50VVJMKCk7CisgICAgbV9wcmVk
aWN0ZWRCYXNlRWxlbWVudFVSTCA9IHN0YXJ0aW5nQmFzZUVsZW1lbnRVUkw7CisKKyAgICBIVE1M
VG9rZW4gdG9rZW47CisgICAgd2hpbGUgKG1fdG9rZW5pemVyLT5uZXh0VG9rZW4obV9zb3VyY2Us
IHRva2VuKSkgeworICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpT
dGFydFRhZykKKyAgICAgICAgICAgIG1fdG9rZW5pemVyLT51cGRhdGVTdGF0ZUZvcihBdG9taWNT
dHJpbmcodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSkpOworICAgICAg
ICBwcm9jZXNzVG9rZW4odG9rZW4pOworICAgICAgICB0b2tlbi5jbGVhcigpOworICAgIH0KK30K
IAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc2F2ZSBhbmQgcmUtdXNlIHRoZXNlIHRva2VucyBp
biBIVE1MRG9jdW1lbnRQYXJzZXIgaWYKLSAgICAvLyB0aGUgcGVuZGluZyBzY3JpcHQgZG9lc24n
dCBlbmQgdXAgY2FsbGluZyBkb2N1bWVudC53cml0ZS4KLSAgICB3aGlsZSAobV90b2tlbml6ZXIt
Pm5leHRUb2tlbihtX3NvdXJjZSwgbV90b2tlbikpIHsKLSAgICAgICAgcHJvY2Vzc1Rva2VuKCk7
Ci0gICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKKyNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
K2Jvb2wgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW5Gb3JUZW1wbGF0ZXMoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIGlm
ICh0aHJlYWRTYWZlTWF0Y2godGFnTmFtZSwgdGVtcGxhdGVUYWcpKSB7CisgICAgICAgIGlmIChp
c1N0YXJ0VGFnKHRva2VuKSkKKyAgICAgICAgICAgIG1fdGVtcGxhdGVDb3VudCsrOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3RlbXBsYXRlQ291bnQtLTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIFR3YXMgb3VyIHRva2VuLgogICAgIH0KKyAgICAvLyBJZiB3ZSdyZSBpbiBhIHRlbXBs
YXRlIHdlICJjb25zdW1lIiBhbGwgdG9rZW5zLgorICAgIHJldHVybiBtX3RlbXBsYXRlQ291bnQg
PiAwOworfQorI2VuZGlmCisKK2Jvb2wgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2li
bGVTdHlsZUNoYXJhY3RlcnMoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAoIW1f
aW5TdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fY3NzU2Nhbm5lci5zY2FuKHRv
a2VuKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnBy
b2Nlc3NUb2tlbigpCitib29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlU3R5
bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQog
ewotICAgIGlmIChtX2luU3R5bGUpIHsKLSAgICAgICAgaWYgKG1fdG9rZW4udHlwZSgpID09IEhU
TUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpCi0gICAgICAgICAgICBtX2Nzc1NjYW5uZXIuc2Nhbiht
X3Rva2VuKTsKLSAgICAgICAgZWxzZSBpZiAobV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OkVuZFRhZykgewotICAgICAgICAgICAgbV9pblN0eWxlID0gZmFsc2U7CisgICAgaWYgKHRo
cmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBzdHlsZVRhZykpIHsKKyAgICAgICAgbV9pblN0eWxlID0g
aXNTdGFydFRhZyh0b2tlbik7CisgICAgICAgIGlmICghbV9pblN0eWxlKQogICAgICAgICAgICAg
bV9jc3NTY2FubmVyLnJlc2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIGlmIChtX3Rva2VuLnR5cGUoKSAhPSBI
VE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpIHsKLSNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
LSAgICAgICAgaWYgKG1fdGVtcGxhdGVDb3VudCAmJiBtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6RW5kVGFnICYmIEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1f
dG9rZW4ubmFtZSgpLnNpemUoKSkgPT0gdGVtcGxhdGVUYWcpCi0gICAgICAgICAgICBtX3RlbXBs
YXRlQ291bnQtLTsKLSNlbmRpZgotICAgICAgICByZXR1cm47Citib29sIEhUTUxQcmVsb2FkU2Nh
bm5lcjo6cHJvY2Vzc1Bvc3NpYmxlQmFzZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNv
bnN0IEhUTUxUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1l
LCBiYXNlVGFnKSkgeworICAgICAgICB1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChLVVJM
KG1fdXJscy5kb2N1bWVudFVSTCwgdGFzay5iYXNlRWxlbWVudEhyZWYoKSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgQXRvbWljU3Ry
aW5nIHRhZ05hbWUobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkp
OworUGFzc093blB0cjxQcmVsb2FkVGFzaz4gSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9r
ZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICAvLyA8c3R5bGU+IGlzIHRoZSBvbmx5
IHBsYWNlIHdlIHNlYXJjaCBmb3IgdXJscyBpbiBub24tc3RhcnQgdG9rZW5zLgorICAgIGlmIChw
cm9jZXNzUG9zc2libGVTdHlsZUNoYXJhY3RlcnModG9rZW4pIHx8ICFpc1N0YXJ0T3JFbmRUYWco
dG9rZW4pKQorICAgICAgICBjb250aW51ZTsKIAorICAgIEF0b21pY1N0cmluZyB0YWdOYW1lKHRv
a2VuLm5hbWUoKS5kYXRhKCksIHRva2VuLm5hbWUoKS5zaXplKCkpOwogI2lmIEVOQUJMRShURU1Q
TEFURV9FTEVNRU5UKQotICAgIGlmICh0YWdOYW1lID09IHRlbXBsYXRlVGFnKQotICAgICAgICBt
X3RlbXBsYXRlQ291bnQrKzsKLQotICAgIGlmIChtX3RlbXBsYXRlQ291bnQpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAocHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGUodGFnTmFtZSwgdG9rZW4pCisg
ICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVN0eWxlKHRv
a2VuKSB8fCAhaXNTdGFydFRhZyh0b2tlbikpCisgICAgICAgIGNvbnRpbnVlOworICAgIGlmIChw
cm9jZXNzUG9zc2libGVCYXNlKHRhZ05hbWUsIHRva2VuKSkKKyAgICAgICAgY29udGludWU7CiAK
LSAgICBQcmVsb2FkVGFzayB0YXNrKHRhZ05hbWUsIG1fdG9rZW4uYXR0cmlidXRlcygpKTsKLSAg
ICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IodGFzay50YWdOYW1lKCkpOwotCi0gICAgaWYg
KHRhc2sudGFnTmFtZSgpID09IHN0eWxlVGFnKQotICAgICAgICBtX2luU3R5bGUgPSB0cnVlOwot
Ci0gICAgaWYgKHRhc2sudGFnTmFtZSgpID09IGJhc2VUYWcpCi0gICAgICAgIHVwZGF0ZVByZWRp
Y3RlZEJhc2VFbGVtZW50VVJMKEtVUkwobV9kb2N1bWVudC0+dXJsKCksIHRhc2suYmFzZUVsZW1l
bnRIcmVmKCkpKTsKLQotICAgIHRhc2sucHJlbG9hZChtX2RvY3VtZW50LCBtX3ByZWRpY3RlZEJh
c2VFbGVtZW50VVJMLmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmJhc2VVUkwoKSA6IG1fcHJlZGlj
dGVkQmFzZUVsZW1lbnRVUkwpOworICAgIFByZWxvYWRUYXNrIHRhc2sodGFnTmFtZSwgdG9rZW4u
YXR0cmlidXRlcygpKTsKKyAgICB0YXNrLmlzc3VlUHJlbG9hZFJlcXVlc3QobV9wcmVsb2FkZXIs
IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOwogfQogCiB2b2lkIEhUTUxQcmVsb2FkU2Nhbm5l
cjo6dXBkYXRlUHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoY29uc3QgS1VSTCYgYmFzZUVsZW1lbnRV
UkwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNj
YW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5o
CmluZGV4IGNiOGYzMzkxNDA5ZDExNzkyMDI0ZTBmY2E4Mjg5MjUxMGM1YjJmNzkuLmRiYTYzYTBj
MzE3YjEyNzUyOWEwNjQ5YTgwMzIyZTZhYTJlODFiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCkBAIC0zOSwyNSArMzksNDYgQEAgY2xh
c3MgSFRNTFRva2VuOwogY2xhc3MgSFRNTFRva2VuaXplcjsKIGNsYXNzIFNlZ21lbnRlZFN0cmlu
ZzsKIAorY2xhc3MgUHJlbG9hZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUHJl
bG9hZFNjYW5uZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBjbGFz
cyBQcmVsb2FkUmVxdWVzdCB7CisgICAgcHVibGljOgorICAgICAgICBQcmVsb2FkUmVxdWVzdCgp
CisgICAgfTsKK3ByaXZhdGU6CisgICAgRG9jdW1lbnQgbV9kb2N1bWVudDsKK307CisKIGNsYXNz
IEhUTUxQcmVsb2FkU2Nhbm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTFByZWxv
YWRTY2FubmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSFRNTFBy
ZWxvYWRTY2FubmVyKERvY3VtZW50KiwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmKTsKKyAgICAv
LyBIVE1MUHJlbG9hZFNjYW5uZXIgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBoYXZlIGEgcG9pbnRl
ciB0byBEb2N1bWVudCwKKyAgICAvLyB0aHVzIERvY3VtZW50VVJMcyBpcyB1c2VkIHRvIGhvbGQg
YWxsIHRoZSBuZWNlc3NhcnkgVVJMcyBmcm9tIHRoZSBEb2N1bWVudC4KKyAgICBjbGFzcyBEb2N1
bWVudFVSTHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgRG9jdW1lbnRVUkxzKERv
Y3VtZW50Kik7CisKKyAgICAgICAgS1VSTCBwcmVkaWN0ZWRCYXNlRWxlbWVudFVSTDsKKyAgICAg
ICAgS1VSTCBkb2N1bWVudFVSTDsKKyAgICAgICAgS1VSTCBkb2N1bWVudEJhc2VVUkw7CisgICAg
fTsKKworICAgIEhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPFByZWxvYWRlcj4mLCBj
b25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IERvY3VtZW50VVJMcyYpOwogCiAgICAgdm9p
ZCBhcHBlbmRUb0VuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKICAgICB2b2lkIHNjYW4oKTsK
IAogcHJpdmF0ZToKICAgICB2b2lkIHByb2Nlc3NUb2tlbigpOworCiAgICAgdm9pZCB1cGRhdGVQ
cmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCk7CiAKLSAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBTZWdtZW50ZWRTdHJpbmcgbV9zb3VyY2U7CiAg
ICAgQ1NTUHJlbG9hZFNjYW5uZXIgbV9jc3NTY2FubmVyOwogICAgIE93blB0cjxIVE1MVG9rZW5p
emVyPiBtX3Rva2VuaXplcjsKLSAgICBIVE1MVG9rZW4gbV90b2tlbjsKICAgICBib29sIG1faW5T
dHlsZTsKLSAgICBLVVJMIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkw7CisgICAgRG9jdW1lbnRV
UkxzIG1fdXJsczsKIAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQogICAgIHNpemVfdCBt
X3RlbXBsYXRlQ291bnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184599</attachid>
            <date>2013-01-24 15:47:01 -0800</date>
            <delta_ts>2013-01-25 02:50:33 -0800</delta_ts>
            <desc>A more complete patch</desc>
            <filename>bug-107807-20130124154359.patch</filename>
            <type>text/plain</type>
            <size>28517</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI0MGI4MWQ1NDE4MmE5
YTI3NWM0ZWVhOWUyNjczZWM2OGVjYjYyZC4uOGU4NWExY2QyMTMyYTM5ODY0YjZiYTMxMjVmMjkw
ZGJkZGQ2ODJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEzLTAxLTI0ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBUaHJlYWRlZCBIVE1MIFBhcnNl
ciBzaG91bGQgYmUgYWJsZSB0byBpc3N1ZSBwcmVsb2FkIHJlcXVlc3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgSFRNTFByZWxvYWRTY2FubmVy
IGFuZCBDU1NQcmVsb2FkU2Nhbm5lciBkbyBhIG51bWJlciBvZiB0aGluZ3MuCisgICAgICAgIENT
U1ByZWxvYWRTY2FubmVyIGlzIG1vc3RseSBqdXN0IGEgaGVscGVyIGNsYXNzIGZvciBIVE1MUHJl
bG9hZFNjYW5uZXIuCisgICAgICAgIEhUTUxQcmVsb2FkU2Nhbm5lciBydW5zIGl0cyBvd24gY29w
eSBvZiB0aGUgSFRNTFRva2VuaXplciBhbmQgdXNlcworICAgICAgICBIVE1MVG9rZW5pemVyOjp1
cGRhdGVTdGF0ZUZvciB0byBlbXVsYXRlIGVub3VnaCBvZiB0aGUgVHJlZUJ1aWxkZXIKKyAgICAg
ICAgdG8gZ2V0IGEgcmVhbGlzdGljIHN0cmVhbSBvZiB0b2tlbnMuICBJdCBkb2VzIHNvbWUgYWRk
aXRpb25hbCBUcmVlQnVpbGRlcgorICAgICAgICBlbXVsYXRpb24sIGluY2x1ZGluZyB0cmFja2lu
ZyB0ZW1wbGF0ZSB0YWdzIGFuZCBiYXNlIHRhZ3MsIGJ1dCBtb3N0bHkKKyAgICAgICAganVzdCBz
Y2FucyB0aGUgdG9rZW4gc3RyZWFtIGZvciBzdGFydC10YWdzIGFuZCBsb29rcyBmb3IgVVJMcyBp
biB0aGVtLgorICAgICAgICBJdCB0cmFja3Mgd2hlbiBpdCBoYXMgc2VlbiBhIDxzdHlsZT4gdGFn
IGFuZCBzdGFydHMgc2VuZGluZyBhbGwgY2hhcmFjdGVyIHRva2VucworICAgICAgICB0byB0aGUg
Q1NTUHJlbG9hZFNjYW5uZXIgdW50aWwgYSA8L3N0eWxlPiB0YWcgaXMgc2Vlbi4KKyAgICAgICAg
SXQgYWxzbyAodW5mb3J0dW5hdGVseSkga25vd3Mgc29tZSBhYm91dCB0aGUgbG9hZGVyIGd1dHMg
YW5kIGhvdyB0byBjb25zdHJ1Y3QKKyAgICAgICAgYSBwcm9wZXIgQ2FjaGVkUmVzb3VyY1JlcXVl
c3QgYW5kIGlzc3VlIGEgcHJlbG9hZC4KKworICAgICAgICBUaGlzIHBhdGNoIGhhcyAzIG1haW4g
cGllY2VzOgorICAgICAgICAtIFJlbW92ZSBEb2N1bWVudCBhbmQgKGFuZCBsb2FkZXIpIGRlcGVu
ZGVuY2llcyBmcm9tIEhUTUxQcmVsb2FkU2Nhbm5lci9DU1NQcmVsb2FkU2Nhbm5lcgorICAgICAg
ICAgIFRoaXMgaXMgZG9uZSB0aHJvdWdoIGludHJvZHVjdGlvbiBvZiBhIG5ldyBIVE1MUmVzb3Vy
Y2VQcmVsb2FkZXIgY2xhc3Mgd2hpY2ggaG9sZHMKKyAgICAgICAgICBhIERvY3VtZW50KiBhbmQg
a25vd3MgaG93IHRvIHRhbGsgdG8gdGhlIENhY2hlZFJlc291cmNlTG9hZGVyLgorICAgICAgICAg
IFRoZSBwcmVsb2FkIHNjYW5uZXJzIGFyZSBoYW5kZWQgYSBXZWFrUHRyIHRvIHRoZSBIVE1MUmVz
b3VyY2VQcmVsb2FkZXIgYW5kIHNwZWFrIHRvCisgICAgICAgICAgaXQgdXNpbmcgY2FsbE9uTWFp
blRocmVhZC4KKyAgICAgICAgLSBSZW1vdmUgQXRvbWljU3RyaW5nL1F1YWxpZmllZE5hbWUgY29t
cGFyaXNvbnMgZnJvbSB0aGUgcHJlbG9hZCBzY2FubmVycy4KKyAgICAgICAgICBVbmZvcnR1bmF0
ZWx5IEhUTUxOYW1lcyBjb21wYXJpc29ucyB3aWxsIGFsd2F5cyBiZSBmYWxzZSBvbiBhIG5vbi1t
YWluIHRocmVhZAorICAgICAgICAgIHdpdGggb3VyIGN1cnJlbnQgZGVzaWduLCBzbyB3ZSBoYXZl
IHRvIHVzZSBzb21lICJ0aHJlYWRTYWZlTWF0Y2giIGhlbHBlcnMgd3JpdHRlbgorICAgICAgICAg
IGZvciB0aGUgSFRNTEJhY2tncm91bmRQYXJzZXIuCisgICAgICAgIC0gQ2xlYW4tdXAgSFRNTFBy
ZWxvYWRTY2FubmVycyB0b2tlbi1sb29wIHRvIG5vdCBiZSB0aWVkIHRvIGhhdmluZyBhIFRva2Vu
aXplci4KKyAgICAgICAgICAoT24gYSBiYWNrZ3JvdW5kIHRoZWFkLCB0aGUgSFRNTFByZWxvYWRT
Y2FubmVyIHdvbid0IG93biB0aGUgdG9rZW5pemVyLCBpdCB3aWxsIGp1c3QKKyAgICAgICAgICAg
YmUgcGFzc2VkIGluIHRva2VucyBhbmQgZXhwZWN0ZWQgdG8gaXNzdWUgbG9hZHMgaWYgbmVjZXNz
YXJ5LikKKworICAgICAgICBJJ2xsIGxpa2VseSBicmVhayB0aGlzIHBhdGNoIHVwIGludG8gcGll
Y2VzIHRvIGxhbmQsIGJ1dCBob3BlZnVsbHkgdGhpcyBnaXZlcyBhbiBvdmVydmlldyBvZiB0aGUg
ZGVzaWduLgorICAgICAgICBJIHRoaW5rIHRoYXQgdGhpbmdzIGNvdWxkIGJlIG1hZGUgZXZlbiBz
aW1wbGVyIGlmL3doZW4gd2Ugc3RvcCBwcmVsb2FkLXNjYW5uaW5nIG9uIHRoZSBtYWluIHRocmVh
ZC4KKyAgICAgICAgSSBhbHNvIHRoaW5rIHRoaXMgaXMgYW5vdGhlciBleGFtcGxlIG9mIHdoeSB3
ZSBwcm9iYWJseSB3YW50IGEgdGhyZWFkLWF3YXJlIGh0bWxOYW1lcygpIG9iamVjdC4KKyAgICAg
ICAgUHJlbG9hZFRhc2sgaXMgc2xpZ2h0bHkgYXdrd2FyZGx5IG5hbWVkLCBhbmQgbWF5IG1vcnBo
IGluIHRoZSBmdXR1cmUuCisgICAgICAgIEFuZCBmaW5hbGx5IGl0cyBub3QgY2xlYXIgaWYgSFRN
TFJlc291cmNlUHJlbG9hZGVyIHdhbnRzIHRvIGJlIGl0cyBvd24gY2xhc3MsIG9yIGlmCisgICAg
ICAgIHdlIGp1c3Qgd2FudCB0byBwYXNzIGFyb3VuZCBXZWFrUHRyPEhUTUxEb2N1bWVudExvYWRl
cj4gaW5zdGVhZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2Fk
U2Nhbm5lcjo6Q1NTUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9h
ZFNjYW5uZXI6OmVtaXRSdWxlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nh
bm5lci5oOgorICAgICAgICAoQ1NTUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1l
bnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2Vy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRD
dXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2Nhbik6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChIVE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0aHJlYWRTYWZlRXF1YWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0aHJlYWRTYWZlTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFy
dFRhZyk6CisgICAgICAgIChXZWJDb3JlOjppc1N0YXJ0T3JFbmRUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6UHJlbG9hZFRhc2s6OnByb2Nlc3NBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRUYXNrOjpjaGFyc2V0KToKKyAgICAgICAgKFByZWxvYWRUYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlByZWxvYWRUYXNrOjpyZXNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UHJlbG9hZFRhc2s6Omlzc3VlUHJlbG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2Fk
U2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzU3R5bGVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVCYXNlVGFn
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKEhU
TUxQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
UmVxdWVzdC5oOgorCiAyMDEzLTAxLTI0ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBCdWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggZTZjNTg1ZTRjNTM5MjQ5YTJjZDVmNTNjMTM1ZWFiYjVjNWY3NGZjNy4uZmU5OGIyYzAwZGU0
ODhiODA3NTNkY2U0NDIxNmNlYWI3MzE3YzA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzM3NSw2
ICszMzc1LDggQEAKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUGFyc2VyVGhyZWFkLmgn
LAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAnLAogICAg
ICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oJywKKyAgICAgICAgICAg
ICdodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9w
YXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hU
TUxTY3JpcHRSdW5uZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lckhvc3QuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQ
cmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2Fk
U2Nhbm5lci5jcHAKaW5kZXggOGVlYzgxYjExZGZjM2FmZTRiYjg5MzEzNTNjOWM3MjBkMTVmMGY4
Ni4uNTRjZjExZGM3NWYyNTg1ZjJlMGQyMDViZjA4NDI3ZjQ2MmMzNjY1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcApAQCAtMzIsMTUg
KzMyLDE2IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJ
bml0aWF0b3JzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUNTU1ByZWxvYWRTY2FubmVyOjpDU1NQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCogZG9jdW1l
bnQpCi0gICAgOiBtX3N0YXRlKEluaXRpYWwpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQor
Q1NTUHJlbG9hZFNjYW5uZXI6OkNTU1ByZWxvYWRTY2FubmVyKGNvbnN0IFdlYWtQdHI8SFRNTFJl
c291cmNlUHJlbG9hZGVyPiYgcHJlbG9hZGVyKQorICAgIDogbV9wcmVsb2FkZXIocHJlbG9hZGVy
KQorICAgICwgbV9zdGF0ZShJbml0aWFsKQogewogfQogCkBAIC0xOTMsMTEgKzE5NCwxMyBAQCBz
dGF0aWMgU3RyaW5nIHBhcnNlQ1NTU3RyaW5nT3JVUkwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCiB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiB7CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBt
X3J1bGUubGVuZ3RoKCkpKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5n
T3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwo
dmFsdWUpKSk7Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcihjYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQs
IHJlcXVlc3QsIFN0cmluZygpKTsKKyAgICAgICAgU3RyaW5nIHVybCA9IHBhcnNlQ1NTU3RyaW5n
T3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7Cisg
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgS1VSTCBiYXNlRWxlbWVu
dFVSTDsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhc3NlZCBpbiBmcm9tIHRoZSBIVE1MUHJl
bG9hZFNjYW5lciB2aWEgc2NhbigpIQorICAgICAgICAgICAgT3duUHRyPFByZWxvYWRSZXF1ZXN0
PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBjYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzLCB1cmwsIGJhc2VFbGVtZW50VVJMLCBD
YWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHRoaXMgYmUgaW5jbHVkaW5nIHRoZSBjaGFyc2V0IGluIHRoZSBwcmVsb2FkIHJlcXVlc3Q/
CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkhUTUxSZXNvdXJjZVByZWxvYWRl
cjo6cHJlbG9hZCwgbV9wcmVsb2FkZXIsIHJlcXVlc3QucmVsZWFzZSgpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7CiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFyYWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgoKSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAppbmRleCA4
ZTE5Mjk2NWU3ZWEwYzk0MmI3YjgyMGE1YzU4NTQ2Yzk3YjYxYTY4Li5mMzE2Y2VjNzYyNWUwNTQz
YzZmMTg1NmYxZGRlNGY0YzBmOGNhODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKQEAgLTI3LDE3ICsyNywxOCBAQAogI2lmbmRlZiBDU1NQ
cmVsb2FkU2Nhbm5lcl9oCiAjZGVmaW5lIENTU1ByZWxvYWRTY2FubmVyX2gKIAorI2luY2x1ZGUg
IkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIERvY3VtZW50OwogY2xhc3MgSFRNTFRva2VuOwogCiBjbGFzcyBDU1NQcmVsb2FkU2Nh
bm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTUHJlbG9hZFNjYW5uZXIpOwogcHVi
bGljOgotICAgIGV4cGxpY2l0IENTU1ByZWxvYWRTY2FubmVyKERvY3VtZW50Kik7CisgICAgZXhw
bGljaXQgQ1NTUHJlbG9hZFNjYW5uZXIoY29uc3QgV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2Fk
ZXI+Jik7CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tl
biYpOwpAQCAtNTYsMTQgKzU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIERvbmVQYXJzaW5nSW1w
b3J0UnVsZXMsCiAgICAgfTsKIAotICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyIGMpOwor
ICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyKTsKICAgICB2b2lkIGVtaXRSdWxlKCk7CiAK
KyAgICBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gbV9wcmVsb2FkZXI7CisKICAgICBT
dGF0ZSBtX3N0YXRlOwogICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlOwogICAgIFN0cmluZ0J1aWxk
ZXIgbV9ydWxlVmFsdWU7Ci0KLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmlu
ZGV4IGU3YTBlMTc1ZjVjMjY1MzdhZDE3M2U1ZGI5MDEzMTA2ZDZiM2VmMzcuLmQ0MmIzNTc3N2Zm
MTc3OGNhMDMxOWYxMzRkMmE5N2Y1Y2RiODVkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtODUsNiArODUsOCBAQCBIVE1M
RG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIHJlcG9ydEVycm9ycwogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAg
ICAsIG1fd2Vha0ZhY3RvcnkodGhpcykKICNlbmRpZgorICAgICwgbV9wcmVsb2FkZXIoYWRvcHRQ
dHIobmV3IEhUTUxSZXNvdXJjZVByZWxvYWRlcihkb2N1bWVudCkpKQorICAgICwgbV9wcmVsb2Fk
ZXJXZWFrRmFjdG9yeShtX3ByZWxvYWRlci5nZXQoKSkKICAgICAsIG1fZW5kV2FzRGVsYXllZChm
YWxzZSkKICAgICAsIG1faGF2ZUJhY2tncm91bmRQYXJzZXIoZmFsc2UpCiAgICAgLCBtX3B1bXBT
ZXNzaW9uTmVzdGluZ0xldmVsKDApCkBAIC0xMDIsNiArMTA0LDcgQEAgSFRNTERvY3VtZW50UGFy
c2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1l
bnQqIGNvbnQKICNpZiBFTkFCTEUoVEhSRUFERURfSFRNTF9QQVJTRVIpCiAgICAgLCBtX3dlYWtG
YWN0b3J5KHRoaXMpCiAjZW5kaWYKKyAgICAsIG1fcHJlbG9hZGVyV2Vha0ZhY3RvcnkoMCkKICAg
ICAsIG1fZW5kV2FzRGVsYXllZChmYWxzZSkKICAgICAsIG1faGF2ZUJhY2tncm91bmRQYXJzZXIo
ZmFsc2UpCiAgICAgLCBtX3B1bXBTZXNzaW9uTmVzdGluZ0xldmVsKDApCkBAIC0zNzQsMTAgKzM3
NywxMSBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcihTeW5jaHJvbm91
c01vZGUgbW9kZSkKICAgICBpZiAoaXNXYWl0aW5nRm9yU2NyaXB0cygpKSB7CiAgICAgICAgIEFT
U0VSVChtX3Rva2VuaXplci0+c3RhdGUoKSA9PSBIVE1MVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0
ZSk7CiAgICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lcikgewotICAgICAgICAgICAgbV9wcmVs
b2FkU2Nhbm5lciA9IGFkb3B0UHRyKG5ldyBIVE1MUHJlbG9hZFNjYW5uZXIoZG9jdW1lbnQoKSwg
bV9vcHRpb25zKSk7CisgICAgICAgICAgICBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4g
cHJlbG9hZGVyID0gbV9wcmVsb2FkZXJXZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7CisgICAg
ICAgICAgICBtX3ByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5l
cihwcmVsb2FkZXIsIG1fb3B0aW9ucywgZG9jdW1lbnQoKS0+dXJsKCkpKTsKICAgICAgICAgICAg
IG1fcHJlbG9hZFNjYW5uZXItPmFwcGVuZFRvRW5kKG1faW5wdXQuY3VycmVudCgpKTsKICAgICAg
ICAgfQotICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgIG1fcHJlbG9h
ZFNjYW5uZXItPnNjYW4oZG9jdW1lbnQoKS0+YmFzZUVsZW1lbnRVUkwoKSk7CiAgICAgfQogCiAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhUTUwoY29va2llLCBtX2lucHV0
LmN1cnJlbnQoKS5jdXJyZW50TGluZSgpLnplcm9CYXNlZEludCgpKTsKQEAgLTQ1MSwxMCArNDU1
LDEyIEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3Ry
aW5nJiBzb3VyY2UpCiAgICAgaWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgewogICAgICAgICAv
LyBDaGVjayB0aGUgZG9jdW1lbnQud3JpdGUoKSBvdXRwdXQgd2l0aCBhIHNlcGFyYXRlIHByZWxv
YWQgc2Nhbm5lciBhcwogICAgICAgICAvLyB0aGUgbWFpbiBzY2FubmVyIGNhbid0IGRlYWwgd2l0
aCBpbnNlcnRpb25zLgotICAgICAgICBpZiAoIW1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIpCi0g
ICAgICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQ
cmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpLCBtX29wdGlvbnMpKTsKKyAgICAgICAgaWYgKCFtX2lu
c2VydGlvblByZWxvYWRTY2FubmVyKSB7CisgICAgICAgICAgICBXZWFrUHRyPEhUTUxSZXNvdXJj
ZVByZWxvYWRlcj4gcHJlbG9hZGVyID0gbV9wcmVsb2FkZXJXZWFrRmFjdG9yeS5jcmVhdGVXZWFr
UHRyKCk7CisgICAgICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIo
bmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihwcmVsb2FkZXIsIG1fb3B0aW9ucywgZG9jdW1lbnQoKS0+
dXJsKCkpKTsKKyAgICAgICAgfQogICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyLT5h
cHBlbmRUb0VuZChzb3VyY2UpOwotICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyLT5z
Y2FuKCk7CisgICAgICAgIG1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXItPnNjYW4oZG9jdW1lbnQo
KS0+YmFzZUVsZW1lbnRVUkwoKSk7CiAgICAgfQogCiAgICAgZW5kSWZEZWxheWVkKCk7CkBAIC01
MTQsNyArNTIwLDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZChjb25zdCBTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fcHJl
bG9hZFNjYW5uZXItPmFwcGVuZFRvRW5kKHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAoaXNXYWl0
aW5nRm9yU2NyaXB0cygpKQotICAgICAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPnNjYW4o
KTsKKyAgICAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKGRvY3VtZW50KCktPmJh
c2VFbGVtZW50VVJMKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02OTYsNyArNzAyLDcgQEAg
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEN1cnJlbnRJbnB1dFN0cmVhbVRvUHJlbG9h
ZFNjYW5uZXJBbmRTY2FuKCkKIHsKICAgICBBU1NFUlQobV9wcmVsb2FkU2Nhbm5lcik7CiAgICAg
bV9wcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQobV9pbnB1dC5jdXJyZW50KCkpOwotICAgIG1f
cHJlbG9hZFNjYW5uZXItPnNjYW4oKTsKKyAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKGRvY3Vt
ZW50KCktPmJhc2VFbGVtZW50VVJMKCkpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6
bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBmMTljYjEy
Mjk0NWVmNTk2MWYxN2Y3MGI5NWRlZDMzNDg0YjViYzFmLi45MDQ5NTBiZmNmOTc2NDU1OGIyZTQ4
MDczYjZiODNiZjg5MDY1ZmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgogI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiSFRNTFJlc291cmNlUHJlbG9h
ZGVyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCIKICNpbmNsdWRlICJIVE1M
U291cmNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgpAQCAtMTc0LDYgKzE3NSw4
IEBAIHByaXZhdGU6CiAgICAgRGVxdWU8T3duUHRyPENvbXBhY3RIVE1MVG9rZW5TdHJlYW0+ID4g
bV9wZW5kaW5nVG9rZW5zOwogICAgIFdlYWtQdHJGYWN0b3J5PEhUTUxEb2N1bWVudFBhcnNlcj4g
bV93ZWFrRmFjdG9yeTsKICNlbmRpZgorICAgIE93blB0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+
IG1fcHJlbG9hZGVyOworICAgIFdlYWtQdHJGYWN0b3J5PEhUTUxSZXNvdXJjZVByZWxvYWRlcj4g
bV9wcmVsb2FkZXJXZWFrRmFjdG9yeTsKIAogICAgIGJvb2wgbV9lbmRXYXNEZWxheWVkOwogICAg
IGJvb2wgbV9oYXZlQmFja2dyb3VuZFBhcnNlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGVjN2U3ZDJiNmI0ZmNiNTRjMzIx
MTIxM2I5ZDQyYzg1M2RhNDU3NGEuLmZkMDE3MDM5YWU2ZjRjMDY5M2EwNjdlZWZkZmNlYzczMWI5
NjRlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2Fk
U2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRT
Y2FubmVyLmNwcApAQCAtMjgsMjIgKzI4LDQ4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSFRNTFByZWxvYWRTY2FubmVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxv
YWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50UGFy
c2VyLmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0
aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJJbnB1dFR5cGVO
YW1lcy5oIgogI2luY2x1ZGUgIkxpbmtSZWxBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3N0YXRpYyBib29sIHRocmVh
ZFNhZmVFcXVhbChTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBiKQoreworICAgIGlmIChhLT5o
YXNoKCkgIT0gYi0+aGFzaCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFN0
cmluZ0hhc2g6OmVxdWFsKGEsIGIpOworfQorCitzdGF0aWMgYm9vbCB0aHJlYWRTYWZlTWF0Y2go
Y29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQorewor
ICAgIHJldHVybiB0aHJlYWRTYWZlRXF1YWwobG9jYWxOYW1lLmltcGwoKSwgcU5hbWUubG9jYWxO
YW1lKCkuaW1wbCgpKTsKK30KKworc3RhdGljIGJvb2wgdGhyZWFkU2FmZU1hdGNoKGNvbnN0IEhU
TUxUb2tlbjo6RGF0YVZlY3RvciYgbmFtZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCit7
CisgICAgcmV0dXJuIGVxdWFsKHFOYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgbmFtZS5kYXRhKCks
IG5hbWUuc2l6ZSgpKTsKK30KKworc3RhdGljIGJvb2wgaXNTdGFydFRhZyhjb25zdCBIVE1MVG9r
ZW4mIHRva2VuKQoreworICAgIHJldHVybiB0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6
OlN0YXJ0VGFnOyAvLyBIb2x5IHZlcmJvc2l0eSwgYmF0bWFuLgorfQorCitzdGF0aWMgYm9vbCBp
c1N0YXJ0T3JFbmRUYWcoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICByZXR1cm4gdG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwgaXNTdGFydFRhZyh0b2tlbik7
Cit9CisKIGNsYXNzIFByZWxvYWRUYXNrIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBQcmVsb2Fk
VGFzayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmli
dXRlTGlzdCYgYXR0cmlidXRlcykKQEAgLTU3LDExICs4MywxMSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHByb2Nlc3NBdHRyaWJ1dGVzKGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0
cmlidXRlcykKICAgICB7Ci0gICAgICAgIGlmIChtX3RhZ05hbWUgIT0gaW1nVGFnCi0gICAgICAg
ICAgICAmJiBtX3RhZ05hbWUgIT0gaW5wdXRUYWcKLSAgICAgICAgICAgICYmIG1fdGFnTmFtZSAh
PSBsaW5rVGFnCi0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0gc2NyaXB0VGFnCi0gICAgICAg
ICAgICAmJiBtX3RhZ05hbWUgIT0gYmFzZVRhZykKKyAgICAgICAgaWYgKCF0aHJlYWRTYWZlTWF0
Y2gobV90YWdOYW1lLCBpbWdUYWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1f
dGFnTmFtZSwgaW5wdXRUYWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFn
TmFtZSwgbGlua1RhZykKKyAgICAgICAgICAgICYmICF0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1l
LCBzY3JpcHRUYWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwg
YmFzZVRhZykpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9yIChIVE1MVG9rZW46
OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7
CkBAIC02OSwyOSArOTUsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0
dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CiAg
ICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0
SWZQb3NzaWJsZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOwog
Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBjaGFyc2V0QXR0cikKKyAgICAgICAg
ICAgIGlmICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgY2hhcnNldEF0dHIpKQogICAg
ICAgICAgICAgICAgIG1fY2hhcnNldCA9IGF0dHJpYnV0ZVZhbHVlOwogCi0gICAgICAgICAgICBp
ZiAobV90YWdOYW1lID09IHNjcmlwdFRhZyB8fCBtX3RhZ05hbWUgPT0gaW1nVGFnKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gc3JjQXR0cikKKyAgICAgICAgICAgIGlm
ICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBzY3JpcHRUYWcpIHx8IHRocmVhZFNhZmVNYXRj
aChtX3RhZ05hbWUsIGltZ1RhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1h
dGNoKGF0dHJpYnV0ZU5hbWUsIHNyY0F0dHIpKQogICAgICAgICAgICAgICAgICAgICBzZXRVcmxU
b0xvYWQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0
ZU5hbWUgPT0gY3Jvc3NvcmlnaW5BdHRyICYmICFhdHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgY3Jv
c3NvcmlnaW5BdHRyKSAmJiAhYXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG1fY3Jvc3NPcmlnaW5Nb2RlID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV90YWdOYW1lID09
IGxpbmtUYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBocmVmQXR0
cikKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlu
a1RhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5h
bWUsIGhyZWZBdHRyKSkKICAgICAgICAgICAgICAgICAgICAgc2V0VXJsVG9Mb2FkKGF0dHJpYnV0
ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IHJlbEF0
dHIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5h
bWUsIHJlbEF0dHIpKQogICAgICAgICAgICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBy
ZWxBdHRyaWJ1dGVJc1N0eWxlU2hlZXQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gbWVkaWFBdHRyKQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRocmVhZFNhZmVNYXRjaChhdHRyaWJ1dGVOYW1lLCBtZWRpYUF0dHIpKQogICAgICAg
ICAgICAgICAgICAgICBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuID0gbGlua01lZGlhQXR0
cmlidXRlSXNTY3JlZW4oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICht
X3RhZ05hbWUgPT0gaW5wdXRUYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFt
ZSA9PSBzcmNBdHRyKQorICAgICAgICAgICAgfSBlbHNlIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90
YWdOYW1lLCBpbnB1dFRhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNo
KGF0dHJpYnV0ZU5hbWUsIHNyY0F0dHIpKQogICAgICAgICAgICAgICAgICAgICBzZXRVcmxUb0xv
YWQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5h
bWUgPT0gdHlwZUF0dHIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNo
KGF0dHJpYnV0ZU5hbWUsIHR5cGVBdHRyKSkKICAgICAgICAgICAgICAgICAgICAgbV9pbnB1dElz
SW1hZ2UgPSBlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgSW5wdXRUeXBlTmFtZXM6
OmltYWdlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RhZ05hbWUgPT0gYmFzZVRhZykg
ewotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGhyZWZBdHRyKQotICAgICAg
ICAgICAgICAgICAgICBtX2Jhc2VFbGVtZW50SHJlZiA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMjQsMjYgKzE0NywzOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fdXJsVG9Mb2FkID0g
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9
CiAKLSAgICB2b2lkIHByZWxvYWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNl
VVJMKQorICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0CisgICAgeworICAgICAgICAv
LyBGSVhNRTogSXRzIG5vdCBjbGVhciB0aGF0IHRoaXMgaWYgaXMgbmVlZGVkLCB0aGUgbG9hZGVy
IHByb2JhYmx5IGlnbm9yZXMgY2hhcnNldCBmb3IgaW1hZ2UgcmVxdWVzdHMgYW55d2F5LgorICAg
ICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW1nVGFnKSkKKyAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gbV9jaGFyc2V0OworICAgIH0K
KworICAgIENhY2hlZFJlc291cmNlOjpUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgc2NyaXB0VGFnKSkKKyAgICAg
ICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OworICAgICAgICBpZiAodGhyZWFk
U2FmZU1hdGNoKG1fdGFnTmFtZSwgaW1nVGFnKSB8fCAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFt
ZSwgaW5wdXRUYWcpICYmIG1faW5wdXRJc0ltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNo
ZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZTsKKyAgICAgICAgaWYgKHRocmVhZFNhZmVNYXRjaCht
X3RhZ05hbWUsIGxpbmtUYWcpICYmIG1fbGlua0lzU3R5bGVTaGVldCAmJiBtX2xpbmtNZWRpYUF0
dHJpYnV0ZUlzU2NyZWVuKQorICAgICAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZTsKKyAgICB9CisKKyAgICB2b2lkIGlzc3VlUHJl
bG9hZFJlcXVlc3QoV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+JiBwcmVsb2FkZXIsIGNv
bnN0IEtVUkwmIHByZWRpY3RlZEJhc2VVUkwpCiAgICAgewogICAgICAgICBpZiAobV91cmxUb0xv
YWQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpOwotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBsZXRlVVJMKG1fdXJsVG9Mb2FkLCBiYXNlVVJMKSkpOwot
ICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcih0YWdOYW1lKCkpOwotICAgICAgICBpZiAobV90
YWdOYW1lID09IHNjcmlwdFRhZykgewotICAgICAgICAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3Vy
Y2VSZXF1ZXN0KCkuc2V0QWxsb3dDb29raWVzKGNyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMo
KSk7Ci0gICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cHJlbG9hZChDYWNoZWRSZXNv
dXJjZTo6U2NyaXB0LCByZXF1ZXN0LCBtX2NoYXJzZXQpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKG1fdGFnTmFtZSA9PSBpbWdUYWcgfHwgKG1fdGFnTmFtZSA9PSBpbnB1dFRhZyAmJiBt
X2lucHV0SXNJbWFnZSkpCi0gICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cHJlbG9h
ZChDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5nKCkpOwotICAg
ICAgICBlbHNlIGlmIChtX3RhZ05hbWUgPT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQg
JiYgbV9saW5rTWVkaWFBdHRyaWJ1dGVJc1NjcmVlbikgCi0gICAgICAgICAgICBjYWNoZWRSZXNv
dXJjZUxvYWRlci0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVxdWVz
dCwgbV9jaGFyc2V0KTsKKyAgICAgICAgT3duUHRyPFByZWxvYWRSZXF1ZXN0PiByZXF1ZXN0ID0g
UHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZShtX3RhZ05hbWUsIG1fdXJsVG9Mb2FkLCBwcmVkaWN0ZWRC
YXNlVVJMLCByZXNvdXJjZVR5cGUoKSk7CisgICAgICAgIHJlcXVlc3QtPm1fY3Jvc3NPcmlnaW5N
b2RlQWxsb3dzQ29va2llcyA9IGNyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMoKTsKKyAgICAg
ICAgcmVxdWVzdC0+bV9jaGFyc2V0ID0gY2hhcnNldCgpOworICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKGJpbmQoJkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9hZCwgcHJlbG9hZGVyLCByZXF1
ZXN0LnJlbGVhc2UoKSkpOwogICAgIH0KIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFzZUVs
ZW1lbnRIcmVmKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRWxlbWVudEhyZWY7IH0KIAogcHJpdmF0
ZToKIApAQCAtMTU1LDE4ICsxOTAsMTggQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV90
YWdOYW1lOwogICAgIFN0cmluZyBtX3VybFRvTG9hZDsKICAgICBTdHJpbmcgbV9jaGFyc2V0Owot
ICAgIFN0cmluZyBtX2Jhc2VFbGVtZW50SHJlZjsKICAgICBTdHJpbmcgbV9jcm9zc09yaWdpbk1v
ZGU7CiAgICAgYm9vbCBtX2xpbmtJc1N0eWxlU2hlZXQ7CiAgICAgYm9vbCBtX2xpbmtNZWRpYUF0
dHJpYnV0ZUlzU2NyZWVuOwogICAgIGJvb2wgbV9pbnB1dElzSW1hZ2U7CiB9OwogCi1IVE1MUHJl
bG9hZFNjYW5uZXI6OkhUTUxQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRpb25zKQotICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkK
LSAgICAsIG1fY3NzU2Nhbm5lcihkb2N1bWVudCkKK0hUTUxQcmVsb2FkU2Nhbm5lcjo6SFRNTFBy
ZWxvYWRTY2FubmVyKGNvbnN0IFdlYWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiYgcHJlbG9h
ZGVyLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgS1VSTCYgZG9jdW1l
bnRVUkwpCisgICAgOiBtX3ByZWxvYWRlcihwcmVsb2FkZXIpCisgICAgLCBtX2Nzc1NjYW5uZXIo
cHJlbG9hZGVyKQogICAgICwgbV90b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKG9wdGlv
bnMpKQogICAgICwgbV9pblN0eWxlKGZhbHNlKQorICAgICwgbV9kb2N1bWVudFVSTChkb2N1bWVu
dFVSTCkKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKICAgICAsIG1fdGVtcGxhdGVDb3Vu
dCgwKQogI2VuZGlmCkBAIC0xNzgsNjYgKzIxMyw5NCBAQCB2b2lkIEhUTUxQcmVsb2FkU2Nhbm5l
cjo6YXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgbV9zb3Vy
Y2UuYXBwZW5kKHNvdXJjZSk7CiB9CiAKLXZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKCkK
Ky8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgYnkgdGhlIGJhY2tncm91bmQtdGhyZWFkIHBy
ZWxvYWQgc2Nhbm5lci4KK3ZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0IEtVUkwm
IHN0YXJ0aW5nQmFzZUVsZW1lbnRVUkwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsg
Ly8gSFRNTFRva2VuaXplcjo6dXBkYXRlU3RhdGVGb3Igb25seSB3b3JrcyBvbiB0aGUgbWFpbiB0
aHJlYWQuCiAgICAgLy8gV2hlbiB3ZSBzdGFydCBzY2FubmluZywgb3VyIGJlc3QgcHJlZGljdGlv
biBvZiB0aGUgYmFzZUVsZW1lbnRVUkwgaXMgdGhlIHJlYWwgb25lIQotICAgIG1fcHJlZGljdGVk
QmFzZUVsZW1lbnRVUkwgPSBtX2RvY3VtZW50LT5iYXNlRWxlbWVudFVSTCgpOwotCi0gICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzYXZlIGFuZCByZS11c2UgdGhlc2UgdG9rZW5zIGluIEhUTUxEb2N1
bWVudFBhcnNlciBpZgotICAgIC8vIHRoZSBwZW5kaW5nIHNjcmlwdCBkb2Vzbid0IGVuZCB1cCBj
YWxsaW5nIGRvY3VtZW50LndyaXRlLgotICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2Vu
KG1fc291cmNlLCBtX3Rva2VuKSkgewotICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAg
bV90b2tlbi5jbGVhcigpOworICAgIGlmICghc3RhcnRpbmdCYXNlRWxlbWVudFVSTC5pc0VtcHR5
KCkpCisgICAgICAgIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwgPSBzdGFydGluZ0Jhc2VFbGVt
ZW50VVJMOworCisgICAgSFRNTFRva2VuIHRva2VuOworICAgIHdoaWxlIChtX3Rva2VuaXplci0+
bmV4dFRva2VuKG1fc291cmNlLCB0b2tlbikpIHsKKyAgICAgICAgaWYgKGlzU3RhcnRUYWcodG9r
ZW4pKQorICAgICAgICAgICAgbV90b2tlbml6ZXItPnVwZGF0ZVN0YXRlRm9yKEF0b21pY1N0cmlu
Zyh0b2tlbi5uYW1lKCkuZGF0YSgpLCB0b2tlbi5uYW1lKCkuc2l6ZSgpKSk7CisgICAgICAgIHBy
b2Nlc3NUb2tlbih0b2tlbik7CisgICAgICAgIHRva2VuLmNsZWFyKCk7CiAgICAgfQogfQogCi12
b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKCkKLXsKLSAgICBpZiAobV9pblN0
eWxlKSB7Ci0gICAgICAgIGlmIChtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hh
cmFjdGVyKQotICAgICAgICAgICAgbV9jc3NTY2FubmVyLnNjYW4obV90b2tlbik7Ci0gICAgICAg
IGVsc2UgaWYgKG1fdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpIHsKLSAg
ICAgICAgICAgIG1faW5TdHlsZSA9IGZhbHNlOwotICAgICAgICAgICAgbV9jc3NTY2FubmVyLnJl
c2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV90b2tlbi50eXBlKCkgIT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0g
ICAgICAgIGlmIChtX3RlbXBsYXRlQ291bnQgJiYgbV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OkVuZFRhZyAmJiBBdG9taWNTdHJpbmcobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rv
a2VuLm5hbWUoKS5zaXplKCkpID09IHRlbXBsYXRlVGFnKQorYm9vbCBIVE1MUHJlbG9hZFNjYW5u
ZXI6OnByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSwgY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAodGhyZWFkU2FmZU1hdGNoKHRh
Z05hbWUsIHRlbXBsYXRlVGFnKSkgeworICAgICAgICBpZiAoaXNTdGFydFRhZyh0b2tlbikpCisg
ICAgICAgICAgICBtX3RlbXBsYXRlQ291bnQrKzsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV90ZW1wbGF0ZUNvdW50LS07Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsgLy8gVHdhcyBvdXIgdG9rZW4uCiAgICAgfQotCi0gICAgQXRvbWljU3RyaW5nIHRh
Z05hbWUobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpOwotCi0j
aWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRhZ05hbWUgPT0gdGVtcGxhdGVU
YWcpCi0gICAgICAgIG1fdGVtcGxhdGVDb3VudCsrOwotCi0gICAgaWYgKG1fdGVtcGxhdGVDb3Vu
dCkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIHdlJ3JlIGluIGEgdGVtcGxhdGUgd2UgImNv
bnN1bWUiIGFsbCB0b2tlbnMuCisgICAgcmV0dXJuIG1fdGVtcGxhdGVDb3VudCA+IDA7Cit9CiAj
ZW5kaWYKIAotICAgIFByZWxvYWRUYXNrIHRhc2sodGFnTmFtZSwgbV90b2tlbi5hdHRyaWJ1dGVz
KCkpOwotICAgIG1fdG9rZW5pemVyLT51cGRhdGVTdGF0ZUZvcih0YXNrLnRhZ05hbWUoKSk7Citi
b29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1N0eWxlQ2hhcmFjdGVycyhjb25zdCBIVE1M
VG9rZW4mIHRva2VuKQoreworICAgIGlmICghbV9pblN0eWxlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgbV9jc3NTY2FubmVyLnNjYW4odG9rZW4pOworICAgIHJldHVybiB0cnVlOworfQog
Ci0gICAgaWYgKHRhc2sudGFnTmFtZSgpID09IHN0eWxlVGFnKQotICAgICAgICBtX2luU3R5bGUg
PSB0cnVlOworYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZVN0eWxlVGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sK
KyAgICBpZiAodGhyZWFkU2FmZU1hdGNoKHRhZ05hbWUsIHN0eWxlVGFnKSkgeworICAgICAgICBt
X2luU3R5bGUgPSBpc1N0YXJ0VGFnKHRva2VuKTsKKyAgICAgICAgaWYgKCFtX2luU3R5bGUpCisg
ICAgICAgICAgICBtX2Nzc1NjYW5uZXIucmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIGlmICh0YXNrLnRhZ05hbWUoKSA9PSBi
YXNlVGFnKQotICAgICAgICB1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChLVVJMKG1fZG9j
dW1lbnQtPnVybCgpLCB0YXNrLmJhc2VFbGVtZW50SHJlZigpKSk7Citib29sIEhUTUxQcmVsb2Fk
U2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0
YWdOYW1lLCBiYXNlVGFnKSkgeworICAgICAgICAvLyBUaGUgZmlyc3QgPGJhc2U+IGVsZW1lbnQg
aXMgdGhlIG9uZSB0aGF0IHdpbnMuCisgICAgICAgIGlmICghbV9wcmVkaWN0ZWRCYXNlRWxlbWVu
dFVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHRhc2sucHJl
bG9hZChtX2RvY3VtZW50LCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSA/IG1f
ZG9jdW1lbnQtPmJhc2VVUkwoKSA6IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOworICAgICAg
ICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRv
a2VuLmF0dHJpYnV0ZXMoKS5iZWdpbigpOyBpdGVyICE9IHRva2VuLmF0dHJpYnV0ZXMoKS5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGl0ZXItPm1fbmFt
ZSwgaHJlZkF0dHIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGhyZWZWYWx1ZSA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5t
X3ZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVS
TCA9IEtVUkwobV9kb2N1bWVudFVSTCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KGhyZWZWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVS
TChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCkKK3ZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpw
cm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICAvLyBUaGUgZmlyc3Qg
PGJhc2U+IGVsZW1lbnQgaXMgdGhlIG9uZSB0aGF0IHdpbnMuCi0gICAgaWYgKCFtX3ByZWRpY3Rl
ZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSkKKyAgICAvLyA8c3R5bGU+IGlzIHRoZSBvbmx5IHBs
YWNlIHdlIHNlYXJjaCBmb3IgdXJscyBpbiBub24tc3RhcnQvZW5kLXRhZyB0b2tlbnMuCisgICAg
aWYgKHByb2Nlc3NTdHlsZUNoYXJhY3RlcnModG9rZW4pIHx8ICFpc1N0YXJ0T3JFbmRUYWcodG9r
ZW4pKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IGJh
c2VFbGVtZW50VVJMOworCisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgpLmRh
dGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQp
CisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKHRhZ05hbWUsIHRva2VuKSkKKyAg
ICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKHRh
Z05hbWUsIHRva2VuKSB8fCAhaXNTdGFydFRhZyh0b2tlbikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAocHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyh0YWdOYW1lLCB0b2tlbikpCisgICAgICAgIHJl
dHVybjsKKworICAgIFByZWxvYWRUYXNrIHRhc2sodGFnTmFtZSwgdG9rZW4uYXR0cmlidXRlcygp
KTsKKyAgICB0YXNrLmlzc3VlUHJlbG9hZFJlcXVlc3QobV9wcmVsb2FkZXIsIG1fcHJlZGljdGVk
QmFzZUVsZW1lbnRVUkwpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQcmVsb2FkU2Nhbm5lci5oCmluZGV4IGNiOGYzMzkxNDA5ZDExNzkyMDI0ZTBmY2E4Mjg5
MjUxMGM1YjJmNzkuLjBkOWE4ZTkxZTRjYzc3NmQ4YzM5YTZlZWE0MDM4ODU5YWEyMjNiNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCkBA
IC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBIVE1MUGFyc2VyT3B0aW9uczsKIGNsYXNzIEhUTUxUb2tlbjsKIGNsYXNzIEhUTUxU
b2tlbml6ZXI7CkBAIC00MiwyMSArNDEsMzEgQEAgY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xh
c3MgSFRNTFByZWxvYWRTY2FubmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUHJl
bG9hZFNjYW5uZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBIVE1M
UHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYpOworICAg
IC8vIEhUTUxQcmVsb2FkU2Nhbm5lciBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGhhdmUgYSBwb2lu
dGVyIHRvIERvY3VtZW50LgorICAgIEhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPEhU
TUxSZXNvdXJjZVByZWxvYWRlcj4mLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IEtV
UkwmIGRvY3VtZW50VVJMKTsKIAogICAgIHZvaWQgYXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVk
U3RyaW5nJik7Ci0gICAgdm9pZCBzY2FuKCk7CisgICAgdm9pZCBzY2FuKGNvbnN0IEtVUkwmIGRv
Y3VtZW50QmFzZUVsZW1lbnRVUkwpOwogCiBwcml2YXRlOgotICAgIHZvaWQgcHJvY2Vzc1Rva2Vu
KCk7Ci0gICAgdm9pZCB1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBi
YXNlRWxlbWVudFVSTCk7CisgICAgdm9pZCBwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJik7
CisKKyAgICBib29sIHByb2Nlc3NTdHlsZUNoYXJhY3RlcnMoY29uc3QgSFRNTFRva2VuJik7CisK
KyNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZVRl
bXBsYXRlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJik7
CisjZW5kaWYKKworICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKKyAgICBib29sIHByb2Nlc3NQb3Nz
aWJsZUJhc2VUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4m
KTsKKworICAgIFdlYWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAot
ICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsK
ICAgICBDU1NQcmVsb2FkU2Nhbm5lciBtX2Nzc1NjYW5uZXI7CiAgICAgT3duUHRyPEhUTUxUb2tl
bml6ZXI+IG1fdG9rZW5pemVyOwotICAgIEhUTUxUb2tlbiBtX3Rva2VuOwogICAgIGJvb2wgbV9p
blN0eWxlOworICAgIEtVUkwgbV9kb2N1bWVudFVSTDsKICAgICBLVVJMIG1fcHJlZGljdGVkQmFz
ZUVsZW1lbnRVUkw7CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAppbmRleCA5
ZDQwOGU2MjE2MmZiYmI2ZDI0MDg2MjM5NDc1ZDI2ZmE1YWFhYzA4Li40YWI4MmZlZTMwMzE2Mzkx
MWJhYmUwYTFmNTEzYjRjNGU0YzQ5MGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIENhY2hlZFJlc291cmNlUmVxdWVzdF9oCiAjZGVmaW5lIENhY2hlZFJlc291cmNlUmVxdWVz
dF9oCiAKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3Jp
dHkuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKQEAgLTM0LDcgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwogCiBjbGFzcyBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184710</attachid>
            <date>2013-01-25 02:50:35 -0800</date>
            <delta_ts>2013-01-27 00:39:27 -0800</delta_ts>
            <desc>Actually works for the main thread</desc>
            <filename>bug-107807-20130125024732.patch</filename>
            <type>text/plain</type>
            <size>35997</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmI0MGI4MWQ1NDE4MmE5
YTI3NWM0ZWVhOWUyNjczZWM2OGVjYjYyZC4uNWNhZTJmMWI3ZWMzOWYyNGRkMTEzYmM4NGVhNjgw
ZTQ0YmNjNDdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDEzLTAxLTI1ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAgICBUaHJlYWRlZCBIVE1MIFBhcnNl
ciBzaG91bGQgYmUgYWJsZSB0byBpc3N1ZSBwcmVsb2FkIHJlcXVlc3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc4MDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgSFRNTFByZWxvYWRTY2FubmVy
IGFuZCBDU1NQcmVsb2FkU2Nhbm5lciBkbyBhIG51bWJlciBvZiB0aGluZ3MuCisgICAgICAgIENT
U1ByZWxvYWRTY2FubmVyIGlzIG1vc3RseSBqdXN0IGEgaGVscGVyIGNsYXNzIGZvciBIVE1MUHJl
bG9hZFNjYW5uZXIuCisgICAgICAgIEhUTUxQcmVsb2FkU2Nhbm5lciBydW5zIGl0cyBvd24gY29w
eSBvZiB0aGUgSFRNTFRva2VuaXplciBhbmQgdXNlcworICAgICAgICBIVE1MVG9rZW5pemVyOjp1
cGRhdGVTdGF0ZUZvciB0byBlbXVsYXRlIGVub3VnaCBvZiB0aGUgVHJlZUJ1aWxkZXIKKyAgICAg
ICAgdG8gZ2V0IGEgcmVhbGlzdGljIHN0cmVhbSBvZiB0b2tlbnMuICBJdCBkb2VzIHNvbWUgYWRk
aXRpb25hbCBUcmVlQnVpbGRlcgorICAgICAgICBlbXVsYXRpb24sIGluY2x1ZGluZyB0cmFja2lu
ZyB0ZW1wbGF0ZSB0YWdzIGFuZCBiYXNlIHRhZ3MsIGJ1dCBtb3N0bHkKKyAgICAgICAganVzdCBz
Y2FucyB0aGUgdG9rZW4gc3RyZWFtIGZvciBzdGFydC10YWdzIGFuZCBsb29rcyBmb3IgVVJMcyBp
biB0aGVtLgorICAgICAgICBJdCB0cmFja3Mgd2hlbiBpdCBoYXMgc2VlbiBhIDxzdHlsZT4gdGFn
IGFuZCBzdGFydHMgc2VuZGluZyBhbGwgY2hhcmFjdGVyIHRva2VucworICAgICAgICB0byB0aGUg
Q1NTUHJlbG9hZFNjYW5uZXIgdW50aWwgYSA8L3N0eWxlPiB0YWcgaXMgc2Vlbi4KKyAgICAgICAg
SXQgYWxzbyAodW5mb3J0dW5hdGVseSkga25vd3Mgc29tZSBhYm91dCB0aGUgbG9hZGVyIGd1dHMg
YW5kIGhvdyB0byBjb25zdHJ1Y3QKKyAgICAgICAgYSBwcm9wZXIgQ2FjaGVkUmVzb3VyY1JlcXVl
c3QgYW5kIGlzc3VlIGEgcHJlbG9hZC4KKworICAgICAgICBUaGlzIHBhdGNoIGhhcyAzIG1haW4g
cGllY2VzOgorICAgICAgICAtIFJlbW92ZSBEb2N1bWVudCBhbmQgKGFuZCBsb2FkZXIpIGRlcGVu
ZGVuY2llcyBmcm9tIEhUTUxQcmVsb2FkU2Nhbm5lci9DU1NQcmVsb2FkU2Nhbm5lcgorICAgICAg
ICAgIFRoaXMgaXMgZG9uZSB0aHJvdWdoIGludHJvZHVjdGlvbiBvZiBhIG5ldyBIVE1MUmVzb3Vy
Y2VQcmVsb2FkZXIgY2xhc3Mgd2hpY2ggaG9sZHMKKyAgICAgICAgICBhIERvY3VtZW50KiBhbmQg
a25vd3MgaG93IHRvIHRhbGsgdG8gdGhlIENhY2hlZFJlc291cmNlTG9hZGVyLgorICAgICAgICAg
IFRoZSBwcmVsb2FkIHNjYW5uZXJzIGFyZSBoYW5kZWQgYSBXZWFrUHRyIHRvIHRoZSBIVE1MUmVz
b3VyY2VQcmVsb2FkZXIgYW5kIHNwZWFrIHRvCisgICAgICAgICAgaXQgdXNpbmcgY2FsbE9uTWFp
blRocmVhZC4KKyAgICAgICAgLSBSZW1vdmUgQXRvbWljU3RyaW5nL1F1YWxpZmllZE5hbWUgY29t
cGFyaXNvbnMgZnJvbSB0aGUgcHJlbG9hZCBzY2FubmVycy4KKyAgICAgICAgICBVbmZvcnR1bmF0
ZWx5IEhUTUxOYW1lcyBjb21wYXJpc29ucyB3aWxsIGFsd2F5cyBiZSBmYWxzZSBvbiBhIG5vbi1t
YWluIHRocmVhZAorICAgICAgICAgIHdpdGggb3VyIGN1cnJlbnQgZGVzaWduLCBzbyB3ZSBoYXZl
IHRvIHVzZSBzb21lICJ0aHJlYWRTYWZlTWF0Y2giIGhlbHBlcnMgd3JpdHRlbgorICAgICAgICAg
IGZvciB0aGUgSFRNTEJhY2tncm91bmRQYXJzZXIuCisgICAgICAgIC0gQ2xlYW4tdXAgSFRNTFBy
ZWxvYWRTY2FubmVycyB0b2tlbi1sb29wIHRvIG5vdCBiZSB0aWVkIHRvIGhhdmluZyBhIFRva2Vu
aXplci4KKyAgICAgICAgICAoT24gYSBiYWNrZ3JvdW5kIHRoZWFkLCB0aGUgSFRNTFByZWxvYWRT
Y2FubmVyIHdvbid0IG93biB0aGUgdG9rZW5pemVyLCBpdCB3aWxsIGp1c3QKKyAgICAgICAgICAg
YmUgcGFzc2VkIGluIHRva2VucyBhbmQgZXhwZWN0ZWQgdG8gaXNzdWUgbG9hZHMgaWYgbmVjZXNz
YXJ5LikKKworICAgICAgICBJJ20gaGFwcHkgdG8gYnJlYWsgdGhpcyBwYXRjaCB1cCBpbnRvIHNt
YWxsZXIgcGllY2VzIGlmIHJldmlld2VyIGhhdmUgc3VnZ2VzdGlvbnMgYXMgdG8gd2hpY2gKKyAg
ICAgICAgcGllY2VzIHRoZXknZCBsaWtlLgorICAgICAgICBJIHRoaW5rIHRoYXQgdGhpbmdzIGNv
dWxkIGJlIG1hZGUgZXZlbiBzaW1wbGVyIGlmL3doZW4gd2Ugc3RvcCBwcmVsb2FkLXNjYW5uaW5n
IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgSSBhbHNvIHRoaW5rIHRoaXMgaXMgYW5vdGhl
ciBleGFtcGxlIG9mIHdoeSB3ZSBwcm9iYWJseSB3YW50IGEgdGhyZWFkLWF3YXJlIGh0bWxOYW1l
cygpIG9iamVjdC4KKyAgICAgICAgUHJlbG9hZFRhc2sgaXMgc2xpZ2h0bHkgYXdrd2FyZGx5IG5h
bWVkLCBhbmQgbWF5IG1vcnBoIGluIHRoZSBmdXR1cmUuCisgICAgICAgIEFuZCBmaW5hbGx5IGl0
cyBub3QgY2xlYXIgaWYgSFRNTFJlc291cmNlUHJlbG9hZGVyIHdhbnRzIHRvIGJlIGl0cyBvd24g
Y2xhc3MsIG9yIGlmCisgICAgICAgIHdlIGp1c3Qgd2FudCB0byBwYXNzIGFyb3VuZCBXZWFrUHRy
PEhUTUxEb2N1bWVudExvYWRlcj4gaW5zdGVhZC4KKworICAgICAgICBUaGlzIHBhc3NlcyBhbGwg
b2YgdGhlIExheW91dFRlc3RzIHVzaW5nIHRoZSBtYWluIHRocmVhZCBwYXJzZXIuICBJJ2xsIGFk
ZCBzdXBwb3J0IGZvciB0aGUgYmFja2dyb3VuZAorICAgICAgICBwYXJzZXIgaW4gYSBmb2xsb3ct
dXAgcGF0Y2guCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNj
YW5uZXI6OkNTU1ByZWxvYWRTY2FubmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRT
Y2FubmVyOjplbWl0UnVsZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5u
ZXIuaDoKKyAgICAgICAgKENTU1ByZWxvYWRTY2FubmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dFBhcnNlcjo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kQ3Vy
cmVudElucHV0U3RyZWFtVG9QcmVsb2FkU2Nhbm5lckFuZFNjYW4pOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoSFRNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dGhyZWFkU2FmZUVxdWFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6dGhyZWFkU2FmZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RhcnRU
YWcpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFydE9yRW5kVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OlByZWxvYWRUYXNrOjpwcm9jZXNzQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
cmVsb2FkVGFzazo6Y2hhcnNldCk6CisgICAgICAgIChQcmVsb2FkVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpQcmVsb2FkVGFzazo6cmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBy
ZWxvYWRUYXNrOjpzaG91bGRQcmVsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRUYXNr
Ojppc3N1ZVByZWxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nh
bm5lcjo6SFRNTFByZWxvYWRTY2FubmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2Fk
U2Nhbm5lcjo6c2Nhbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OnBy
b2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2Fk
U2Nhbm5lcjo6cHJvY2Vzc1N0eWxlQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NUb2tlbik6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmg6CisgICAgICAgIChIVE1MUHJlbG9hZFNj
YW5uZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc1N0cmluZ1Nh
ZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVl
c3Q6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVs
b2FkUmVxdWVzdDo6Y29tcGxldGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVl
c3Q6OnJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUmVzb3VyY2VQcmVs
b2FkZXI6OnByZWxvYWQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxv
YWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJlbG9hZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQcmVsb2FkUmVxdWVzdDo6UHJlbG9hZFJlcXVlc3QpOgorICAgICAgICAoSFRN
TFJlc291cmNlUHJlbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxv
YWRlcjo6SFRNTFJlc291cmNlUHJlbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNv
dXJjZVByZWxvYWRlcjo6Y3JlYXRlV2Vha1B0cik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlUmVxdWVzdC5oOgorCiAyMDEzLTAxLTI0ICBLZW50YXJvIEhhcmEgIDxoYXJh
a2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBCdWlsZCBmaXguCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggZTZjNTg1ZTRjNTM5MjQ5YTJjZDVmNTNjMTM1ZWFiYjVjNWY3NGZjNy4u
ZmU5OGIyYzAwZGU0ODhiODA3NTNkY2U0NDIxNmNlYWI3MzE3YzA5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzM3NSw2ICszMzc1LDggQEAKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUGFy
c2VyVGhyZWFkLmgnLAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oJywK
KyAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwJywKKyAg
ICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAnLAogICAgICAgICAgICAgJ2h0
bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIv
SFRNTFNjcmlwdFJ1bm5lckhvc3QuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggOGVlYzgxYjExZGZjM2FmZTRiYjg5MzEzNTNj
OWM3MjBkMTVmMGY4Ni4uNTRjZjExZGM3NWYyNTg1ZjJlMGQyMDViZjA4NDI3ZjQ2MmMzNjY1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNw
cApAQCAtMzIsMTUgKzMyLDE2IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZVJlcXVlc3RJbml0aWF0b3JzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUNTU1ByZWxvYWRTY2FubmVyOjpDU1NQcmVsb2FkU2Nhbm5lcihEb2N1
bWVudCogZG9jdW1lbnQpCi0gICAgOiBtX3N0YXRlKEluaXRpYWwpCi0gICAgLCBtX2RvY3VtZW50
KGRvY3VtZW50KQorQ1NTUHJlbG9hZFNjYW5uZXI6OkNTU1ByZWxvYWRTY2FubmVyKGNvbnN0IFdl
YWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiYgcHJlbG9hZGVyKQorICAgIDogbV9wcmVsb2Fk
ZXIocHJlbG9hZGVyKQorICAgICwgbV9zdGF0ZShJbml0aWFsKQogewogfQogCkBAIC0xOTMsMTEg
KzE5NCwxMyBAQCBzdGF0aWMgU3RyaW5nIHBhcnNlQ1NTU3RyaW5nT3JVUkwoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjplbWl0
UnVsZSgpCiB7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hh
cmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHBh
cnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5s
ZW5ndGgoKSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9kb2N1bWVudC0+
Y29tcGxldGVVUkwodmFsdWUpKSk7Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcihj
YWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsKLSAgICAgICAgICAgIG1fZG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNT
U1N0eWxlU2hlZXQsIHJlcXVlc3QsIFN0cmluZygpKTsKKyAgICAgICAgU3RyaW5nIHVybCA9IHBh
cnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5s
ZW5ndGgoKSk7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgS1VS
TCBiYXNlRWxlbWVudFVSTDsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhc3NlZCBpbiBmcm9t
IHRoZSBIVE1MUHJlbG9hZFNjYW5lciB2aWEgc2NhbigpIQorICAgICAgICAgICAgT3duUHRyPFBy
ZWxvYWRSZXF1ZXN0PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZSgKKyAgICAgICAg
ICAgICAgICBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzLCB1cmwsIGJhc2VF
bGVtZW50VVJMLCBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCk7CisgICAgICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkaW5nIHRoZSBjaGFyc2V0IGluIHRoZSBwcmVs
b2FkIHJlcXVlc3Q/CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkhUTUxSZXNv
dXJjZVByZWxvYWRlcjo6cHJlbG9hZCwgbV9wcmVsb2FkZXIsIHJlcXVlc3QucmVsZWFzZSgpKSk7
CiAgICAgICAgIH0KICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7CiAgICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFyYWN0ZXJzKCksIG1fcnVsZS5s
ZW5ndGgoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVs
b2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5u
ZXIuaAppbmRleCA4ZTE5Mjk2NWU3ZWEwYzk0MmI3YjgyMGE1YzU4NTQ2Yzk3YjYxYTY4Li5mMzE2
Y2VjNzYyNWUwNTQzYzZmMTg1NmYxZGRlNGY0YzBmOGNhODYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKQEAgLTI3LDE3ICsyNywxOCBAQAog
I2lmbmRlZiBDU1NQcmVsb2FkU2Nhbm5lcl9oCiAjZGVmaW5lIENTU1ByZWxvYWRTY2FubmVyX2gK
IAorI2luY2x1ZGUgIkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgSFRNTFRva2VuOwogCiBjbGFzcyBD
U1NQcmVsb2FkU2Nhbm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTUHJlbG9hZFNj
YW5uZXIpOwogcHVibGljOgotICAgIGV4cGxpY2l0IENTU1ByZWxvYWRTY2FubmVyKERvY3VtZW50
Kik7CisgICAgZXhwbGljaXQgQ1NTUHJlbG9hZFNjYW5uZXIoY29uc3QgV2Vha1B0cjxIVE1MUmVz
b3VyY2VQcmVsb2FkZXI+Jik7CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBzY2FuKGNv
bnN0IEhUTUxUb2tlbiYpOwpAQCAtNTYsMTQgKzU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIERv
bmVQYXJzaW5nSW1wb3J0UnVsZXMsCiAgICAgfTsKIAotICAgIGlubGluZSB2b2lkIHRva2VuaXpl
KFVDaGFyIGMpOworICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyKTsKICAgICB2b2lkIGVt
aXRSdWxlKCk7CiAKKyAgICBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gbV9wcmVsb2Fk
ZXI7CisKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlOwogICAg
IFN0cmluZ0J1aWxkZXIgbV9ydWxlVmFsdWU7Ci0KLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCmluZGV4IGU3YTBlMTc1ZjVjMjY1MzdhZDE3M2U1ZGI5MDEzMTA2ZDZiM2VmMzcu
LjMwNzYyNmUyN2E5NWVkMTA0Zjc5OGViZTlhMDY0M2Y3NDJmMGEyNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtODUsNiAr
ODUsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1M
X1BBUlNFUikKICAgICAsIG1fd2Vha0ZhY3RvcnkodGhpcykKICNlbmRpZgorICAgICwgbV9wcmVs
b2FkZXIoYWRvcHRQdHIobmV3IEhUTUxSZXNvdXJjZVByZWxvYWRlcihkb2N1bWVudCkpKQogICAg
ICwgbV9lbmRXYXNEZWxheWVkKGZhbHNlKQogICAgICwgbV9oYXZlQmFja2dyb3VuZFBhcnNlcihm
YWxzZSkKICAgICAsIG1fcHVtcFNlc3Npb25OZXN0aW5nTGV2ZWwoMCkKQEAgLTM3NCwxMCArMzc1
LDEwIEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3Vz
TW9kZSBtb2RlKQogICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpIHsKICAgICAgICAgQVNT
RVJUKG1fdG9rZW5pemVyLT5zdGF0ZSgpID09IEhUTUxUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRl
KTsKICAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKSB7Ci0gICAgICAgICAgICBtX3ByZWxv
YWRTY2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpLCBt
X29wdGlvbnMpKTsKKyAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0cihuZXcg
SFRNTFByZWxvYWRTY2FubmVyKG1fcHJlbG9hZGVyLT5jcmVhdGVXZWFrUHRyKCksIG1fb3B0aW9u
cywgZG9jdW1lbnQoKS0+dXJsKCkpKTsKICAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPmFw
cGVuZFRvRW5kKG1faW5wdXQuY3VycmVudCgpKTsKICAgICAgICAgfQotICAgICAgICBtX3ByZWxv
YWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPnNjYW4oZG9jdW1l
bnQoKS0+YmFzZUVsZW1lbnRVUkwoKSk7CiAgICAgfQogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRXcml0ZUhUTUwoY29va2llLCBtX2lucHV0LmN1cnJlbnQoKS5jdXJyZW50TGlu
ZSgpLnplcm9CYXNlZEludCgpKTsKQEAgLTQ1Miw5ICs0NTMsOSBAQCB2b2lkIEhUTUxEb2N1bWVu
dFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAv
LyBDaGVjayB0aGUgZG9jdW1lbnQud3JpdGUoKSBvdXRwdXQgd2l0aCBhIHNlcGFyYXRlIHByZWxv
YWQgc2Nhbm5lciBhcwogICAgICAgICAvLyB0aGUgbWFpbiBzY2FubmVyIGNhbid0IGRlYWwgd2l0
aCBpbnNlcnRpb25zLgogICAgICAgICBpZiAoIW1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIpCi0g
ICAgICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQ
cmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpLCBtX29wdGlvbnMpKTsKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uUHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0cihuZXcgSFRNTFByZWxvYWRTY2FubmVyKG1f
cHJlbG9hZGVyLT5jcmVhdGVXZWFrUHRyKCksIG1fb3B0aW9ucywgZG9jdW1lbnQoKS0+dXJsKCkp
KTsKICAgICAgICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQoc291cmNl
KTsKLSAgICAgICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+c2NhbigpOworICAgICAgICBt
X2luc2VydGlvblByZWxvYWRTY2FubmVyLT5zY2FuKGRvY3VtZW50KCktPmJhc2VFbGVtZW50VVJM
KCkpOwogICAgIH0KIAogICAgIGVuZElmRGVsYXllZCgpOwpAQCAtNTE0LDcgKzUxNSw3IEBAIHZv
aWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3Vy
Y2UpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5hcHBl
bmRUb0VuZChzb3VyY2UpOwogICAgICAgICAgICAgaWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkK
LSAgICAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgICAgICAg
ICAgbV9wcmVsb2FkU2Nhbm5lci0+c2Nhbihkb2N1bWVudCgpLT5iYXNlRWxlbWVudFVSTCgpKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNjk2LDcgKzY5Nyw3IEBAIHZvaWQgSFRNTERvY3VtZW50
UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2Nhbigp
CiB7CiAgICAgQVNTRVJUKG1fcHJlbG9hZFNjYW5uZXIpOwogICAgIG1fcHJlbG9hZFNjYW5uZXIt
PmFwcGVuZFRvRW5kKG1faW5wdXQuY3VycmVudCgpKTsKLSAgICBtX3ByZWxvYWRTY2FubmVyLT5z
Y2FuKCk7CisgICAgbV9wcmVsb2FkU2Nhbm5lci0+c2Nhbihkb2N1bWVudCgpLT5iYXNlRWxlbWVu
dFVSTCgpKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZjE5Y2IxMjI5NDVlZjU5NjFmMTdmNzBi
OTVkZWQzMzQ4NGI1YmMxZi4uY2FkYjJjMTcyNzBhMzljZjZjODEwZDExY2U3OTg0NTdjY2QzNjBk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
T3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgogI2luY2x1ZGUg
IkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIK
ICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKQEAgLTE3NCw2ICsxNzUsNyBAQCBwcml2YXRlOgogICAg
IERlcXVlPE93blB0cjxDb21wYWN0SFRNTFRva2VuU3RyZWFtPiA+IG1fcGVuZGluZ1Rva2VuczsK
ICAgICBXZWFrUHRyRmFjdG9yeTxIVE1MRG9jdW1lbnRQYXJzZXI+IG1fd2Vha0ZhY3Rvcnk7CiAj
ZW5kaWYKKyAgICBPd25QdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAog
ICAgIGJvb2wgbV9lbmRXYXNEZWxheWVkOwogICAgIGJvb2wgbV9oYXZlQmFja2dyb3VuZFBhcnNl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nh
bm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIu
Y3BwCmluZGV4IGVjN2U3ZDJiNmI0ZmNiNTRjMzIxMTIxM2I5ZDQyYzg1M2RhNDU3NGEuLmRjMjA1
MWM5Mjg0YWQ3NDZiMjE0MTcyMTA3YjkzYTI2N2FjZGQyODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcApAQCAtMjgsMjIgKzI4LDQ4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTFByZWxvYWRTY2FubmVyLmgi
CiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTFRva2Vu
aXplci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxUb2tl
bml6ZXIuaCIKICNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2luY2x1ZGUgIkxpbmtSZWxB
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXZhbHVhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKK3N0YXRpYyBib29sIHRocmVhZFNhZmVFcXVhbChTdHJpbmdJbXBsKiBhLCBT
dHJpbmdJbXBsKiBiKQoreworICAgIGlmIChhLT5oYXNoKCkgIT0gYi0+aGFzaCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZ0hhc2g6OmVxdWFsKGEsIGIpOworfQor
CitzdGF0aWMgYm9vbCB0aHJlYWRTYWZlTWF0Y2goY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQoreworICAgIHJldHVybiB0aHJlYWRTYWZlRXF1YWwo
bG9jYWxOYW1lLmltcGwoKSwgcU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKK30KKworc3RhdGlj
IGJvb2wgdGhyZWFkU2FmZU1hdGNoKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3RvciYgbmFtZSwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCit7CisgICAgcmV0dXJuIGVxdWFsKHFOYW1lLmxv
Y2FsTmFtZSgpLmltcGwoKSwgbmFtZS5kYXRhKCksIG5hbWUuc2l6ZSgpKTsKK30KKworc3RhdGlj
IGJvb2wgaXNTdGFydFRhZyhjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIHJldHVybiB0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnOyAvLyBIb2x5IHZlcmJvc2l0
eSwgYmF0bWFuLgorfQorCitzdGF0aWMgYm9vbCBpc1N0YXJ0T3JFbmRUYWcoY29uc3QgSFRNTFRv
a2VuJiB0b2tlbikKK3sKKyAgICByZXR1cm4gdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpFbmRUYWcgfHwgaXNTdGFydFRhZyh0b2tlbik7Cit9CisKIGNsYXNzIFByZWxvYWRUYXNrIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBQcmVsb2FkVGFzayhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykKQEAgLTU3
LDExICs4MywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByb2Nlc3NBdHRyaWJ1dGVzKGNvbnN0
IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIGlm
IChtX3RhZ05hbWUgIT0gaW1nVGFnCi0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0gaW5wdXRU
YWcKLSAgICAgICAgICAgICYmIG1fdGFnTmFtZSAhPSBsaW5rVGFnCi0gICAgICAgICAgICAmJiBt
X3RhZ05hbWUgIT0gc2NyaXB0VGFnCi0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0gYmFzZVRh
ZykKKyAgICAgICAgaWYgKCF0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBpbWdUYWcpCisgICAg
ICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW5wdXRUYWcpCisgICAgICAg
ICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlua1RhZykKKyAgICAgICAgICAg
ICYmICF0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBzY3JpcHRUYWcpCisgICAgICAgICAgICAm
JiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgYmFzZVRhZykpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7CkBAIC02OSwyOSArOTUsMjYgQEAgcHVibGlj
OgogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRh
dGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CiAgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRl
VmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShpdGVyLT5tX3ZhbHVlLmRh
dGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOwogCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRl
TmFtZSA9PSBjaGFyc2V0QXR0cikKKyAgICAgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2goYXR0
cmlidXRlTmFtZSwgY2hhcnNldEF0dHIpKQogICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IGF0
dHJpYnV0ZVZhbHVlOwogCi0gICAgICAgICAgICBpZiAobV90YWdOYW1lID09IHNjcmlwdFRhZyB8
fCBtX3RhZ05hbWUgPT0gaW1nVGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5h
bWUgPT0gc3JjQXR0cikKKyAgICAgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1l
LCBzY3JpcHRUYWcpIHx8IHRocmVhZFNhZmVNYXRjaChtX3RhZ05hbWUsIGltZ1RhZykpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHNyY0F0dHIp
KQogICAgICAgICAgICAgICAgICAgICBzZXRVcmxUb0xvYWQoYXR0cmlidXRlVmFsdWUpOwotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gY3Jvc3NvcmlnaW5BdHRyICYm
ICFhdHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aHJl
YWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgY3Jvc3NvcmlnaW5BdHRyKSAmJiAhYXR0cmlidXRl
VmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fY3Jvc3NPcmlnaW5Nb2RlID0g
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV90YWdOYW1lID09IGxpbmtUYWcpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlTmFtZSA9PSBocmVmQXR0cikKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
dGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlua1RhZykpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIGhyZWZBdHRyKSkKICAgICAgICAgICAg
ICAgICAgICAgc2V0VXJsVG9Mb2FkKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IHJlbEF0dHIpCisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHJlbEF0dHIpKQogICAgICAgICAgICAg
ICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSByZWxBdHRyaWJ1dGVJc1N0eWxlU2hlZXQoYXR0
cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
bWVkaWFBdHRyKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocmVhZFNhZmVNYXRjaChhdHRy
aWJ1dGVOYW1lLCBtZWRpYUF0dHIpKQogICAgICAgICAgICAgICAgICAgICBtX2xpbmtNZWRpYUF0
dHJpYnV0ZUlzU2NyZWVuID0gbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4oYXR0cmlidXRlVmFs
dWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RhZ05hbWUgPT0gaW5wdXRUYWcpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBzcmNBdHRyKQorICAgICAgICAgICAg
fSBlbHNlIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBpbnB1dFRhZykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHNyY0F0dHIpKQog
ICAgICAgICAgICAgICAgICAgICBzZXRVcmxUb0xvYWQoYXR0cmlidXRlVmFsdWUpOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gdHlwZUF0dHIpCisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHR5cGVBdHRyKSkK
ICAgICAgICAgICAgICAgICAgICAgbV9pbnB1dElzSW1hZ2UgPSBlcXVhbElnbm9yaW5nQ2FzZShh
dHRyaWJ1dGVWYWx1ZSwgSW5wdXRUeXBlTmFtZXM6OmltYWdlKCkpOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3RhZ05hbWUgPT0gYmFzZVRhZykgewotICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVOYW1lID09IGhyZWZBdHRyKQotICAgICAgICAgICAgICAgICAgICBtX2Jhc2VFbGVtZW50
SHJlZiA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGVWYWx1ZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQsMjYgKzE0Nyw1MSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fdXJsVG9Mb2FkID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1M
U3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHByZWxvYWQoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMKQorICAgIGNvbnN0IFN0cmluZyYgY2hh
cnNldCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTogSXRzIG5vdCBjbGVhciB0aGF0
IHRoaXMgaWYgaXMgbmVlZGVkLCB0aGUgbG9hZGVyIHByb2JhYmx5IGlnbm9yZXMgY2hhcnNldCBm
b3IgaW1hZ2UgcmVxdWVzdHMgYW55d2F5LgorICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1f
dGFnTmFtZSwgaW1nVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAg
ICAgICByZXR1cm4gbV9jaGFyc2V0OworICAgIH0KKworICAgIENhY2hlZFJlc291cmNlOjpUeXBl
IHJlc291cmNlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNo
KG1fdGFnTmFtZSwgc2NyaXB0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJj
ZTo6U2NyaXB0OworICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW1nVGFn
KSB8fCAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW5wdXRUYWcpICYmIG1faW5wdXRJc0lt
YWdlKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZTsK
KyAgICAgICAgaWYgKHRocmVhZFNhZmVNYXRjaChtX3RhZ05hbWUsIGxpbmtUYWcpICYmIG1fbGlu
a0lzU3R5bGVTaGVldCAmJiBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuKQorICAgICAgICAg
ICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJj
ZTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFByZWxvYWQoKQogICAgIHsKICAgICAgICAgaWYg
KG1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlua1RhZykgJiYgKCFtX2xpbmtJ
c1N0eWxlU2hlZXQgfHwgIW1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4pKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1l
LCBpbnB1dFRhZykgJiYgIW1faW5wdXRJc0ltYWdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGlzc3VlUHJlbG9hZFJl
cXVlc3QoV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+JiBwcmVsb2FkZXIsIGNvbnN0IEtV
UkwmIHByZWRpY3RlZEJhc2VVUkwpCisgICAgeworICAgICAgICBpZiAoIXNob3VsZFByZWxvYWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsK
LSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGRv
Y3VtZW50LT5jb21wbGV0ZVVSTChtX3VybFRvTG9hZCwgYmFzZVVSTCkpKTsKLSAgICAgICAgcmVx
dWVzdC5zZXRJbml0aWF0b3IodGFnTmFtZSgpKTsKLSAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBz
Y3JpcHRUYWcpIHsKLSAgICAgICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgp
LnNldEFsbG93Q29va2llcyhjcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCkpOwotICAgICAg
ICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlNjcmlw
dCwgcmVxdWVzdCwgbV9jaGFyc2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX3Rh
Z05hbWUgPT0gaW1nVGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRUYWcgJiYgbV9pbnB1dElzSW1h
Z2UpKQotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVz
b3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3QsIFN0cmluZygpKTsKLSAgICAgICAgZWxzZSBp
ZiAobV90YWdOYW1lID09IGxpbmtUYWcgJiYgbV9saW5rSXNTdHlsZVNoZWV0ICYmIG1fbGlua01l
ZGlhQXR0cmlidXRlSXNTY3JlZW4pIAotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIG1fY2hhcnNl
dCk7CisgICAgICAgIE93blB0cjxQcmVsb2FkUmVxdWVzdD4gcmVxdWVzdCA9IFByZWxvYWRSZXF1
ZXN0OjpjcmVhdGUobV90YWdOYW1lLCBtX3VybFRvTG9hZCwgcHJlZGljdGVkQmFzZVVSTCwgcmVz
b3VyY2VUeXBlKCkpOworICAgICAgICByZXF1ZXN0LT5tX2Nyb3NzT3JpZ2luTW9kZUFsbG93c0Nv
b2tpZXMgPSBjcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCk7CisgICAgICAgIHJlcXVlc3Qt
Pm1fY2hhcnNldCA9IGNoYXJzZXQoKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZI
VE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQsIHByZWxvYWRlciwgcmVxdWVzdC5yZWxlYXNl
KCkpKTsKICAgICB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUoKSBjb25zdCB7
IHJldHVybiBtX3RhZ05hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIGJhc2VFbGVtZW50SHJlZigp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZUVsZW1lbnRIcmVmOyB9CiAKIHByaXZhdGU6CiAKQEAgLTE1
NSwxOCArMjAzLDE4IEBAIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fdGFnTmFtZTsKICAg
ICBTdHJpbmcgbV91cmxUb0xvYWQ7CiAgICAgU3RyaW5nIG1fY2hhcnNldDsKLSAgICBTdHJpbmcg
bV9iYXNlRWxlbWVudEhyZWY7CiAgICAgU3RyaW5nIG1fY3Jvc3NPcmlnaW5Nb2RlOwogICAgIGJv
b2wgbV9saW5rSXNTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9saW5rTWVkaWFBdHRyaWJ1dGVJc1Nj
cmVlbjsKICAgICBib29sIG1faW5wdXRJc0ltYWdlOwogfTsKIAotSFRNTFByZWxvYWRTY2FubmVy
OjpIVE1MUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBIVE1MUGFyc2Vy
T3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2Nz
c1NjYW5uZXIoZG9jdW1lbnQpCitIVE1MUHJlbG9hZFNjYW5uZXI6OkhUTUxQcmVsb2FkU2Nhbm5l
cihjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4mIHByZWxvYWRlciwgY29uc3Qg
SFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQorICAg
IDogbV9wcmVsb2FkZXIocHJlbG9hZGVyKQorICAgICwgbV9jc3NTY2FubmVyKHByZWxvYWRlcikK
ICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZShvcHRpb25zKSkKICAgICAs
IG1faW5TdHlsZShmYWxzZSkKKyAgICAsIG1fZG9jdW1lbnRVUkwoZG9jdW1lbnRVUkwpCiAjaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgLCBtX3RlbXBsYXRlQ291bnQoMCkKICNlbmRp
ZgpAQCAtMTc4LDY2ICsyMjYsMTAxIEBAIHZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjphcHBlbmRU
b0VuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBtX3NvdXJjZS5hcHBlbmQo
c291cmNlKTsKIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oKQorLy8gVGhpcyBm
dW5jdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgYmFja2dyb3VuZC10aHJlYWQgcHJlbG9hZCBzY2Fu
bmVyLgordm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oY29uc3QgS1VSTCYgc3RhcnRpbmdC
YXNlRWxlbWVudFVSTCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBIVE1MVG9r
ZW5pemVyOjp1cGRhdGVTdGF0ZUZvciBvbmx5IHdvcmtzIG9uIHRoZSBtYWluIHRocmVhZC4KICAg
ICAvLyBXaGVuIHdlIHN0YXJ0IHNjYW5uaW5nLCBvdXIgYmVzdCBwcmVkaWN0aW9uIG9mIHRoZSBi
YXNlRWxlbWVudFVSTCBpcyB0aGUgcmVhbCBvbmUhCi0gICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVu
dFVSTCA9IG1fZG9jdW1lbnQtPmJhc2VFbGVtZW50VVJMKCk7CisgICAgaWYgKCFzdGFydGluZ0Jh
c2VFbGVtZW50VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVS
TCA9IHN0YXJ0aW5nQmFzZUVsZW1lbnRVUkw7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNh
dmUgYW5kIHJlLXVzZSB0aGVzZSB0b2tlbnMgaW4gSFRNTERvY3VtZW50UGFyc2VyIGlmCi0gICAg
Ly8gdGhlIHBlbmRpbmcgc2NyaXB0IGRvZXNuJ3QgZW5kIHVwIGNhbGxpbmcgZG9jdW1lbnQud3Jp
dGUuCisgICAgLy8gTm90ZTogbV90b2tlbiBpcyBvbmx5IHVzZWQgZnJvbSB0aGlzIGZ1bmN0aW9u
IGFuZCBmb3IgdGhlIG1haW4gdGhyZWFkLgorICAgIC8vIEFsbCBvdGhlciBmdW5jdGlvbnMgYXJl
IHBhc3NlZCBhIHRva2VuLgogICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2VuKG1fc291
cmNlLCBtX3Rva2VuKSkgewotICAgICAgICBwcm9jZXNzVG9rZW4oKTsKKyAgICAgICAgaWYgKGlz
U3RhcnRUYWcobV90b2tlbikpCisgICAgICAgICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVG
b3IoQXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6
ZSgpKSk7CisgICAgICAgIHByb2Nlc3NUb2tlbihtX3Rva2VuKTsKICAgICAgICAgbV90b2tlbi5j
bGVhcigpOwogICAgIH0KIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NUb2tl
bigpCi17Ci0gICAgaWYgKG1faW5TdHlsZSkgewotICAgICAgICBpZiAobV90b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OkNoYXJhY3RlcikKLSAgICAgICAgICAgIG1fY3NzU2Nhbm5lci5z
Y2FuKG1fdG9rZW4pOwotICAgICAgICBlbHNlIGlmIChtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6RW5kVGFnKSB7Ci0gICAgICAgICAgICBtX2luU3R5bGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIG1fY3NzU2Nhbm5lci5yZXNldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KG1fdG9rZW4udHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykgewogI2lmIEVOQUJM
RShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAobV90ZW1wbGF0ZUNvdW50ICYmIG1fdG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgJiYgQXRvbWljU3RyaW5nKG1fdG9r
ZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpKSA9PSB0ZW1wbGF0ZVRhZykK
K2Jvb2wgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVUZW1wbGF0ZVRhZyhjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCit7CisgICAg
aWYgKGlzU3RhcnRPckVuZFRhZyh0b2tlbikgJiYgdGhyZWFkU2FmZU1hdGNoKHRhZ05hbWUsIHRl
bXBsYXRlVGFnKSkgeworICAgICAgICBpZiAoaXNTdGFydFRhZyh0b2tlbikpCisgICAgICAgICAg
ICBtX3RlbXBsYXRlQ291bnQrKzsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV90ZW1wbGF0
ZUNvdW50LS07Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gVHdhcyBvdXIgdG9rZW4uCiAgICAgfQotCi0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWUobV90
b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpOwotCi0jaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRhZ05hbWUgPT0gdGVtcGxhdGVUYWcpCi0gICAg
ICAgIG1fdGVtcGxhdGVDb3VudCsrOwotCi0gICAgaWYgKG1fdGVtcGxhdGVDb3VudCkKLSAgICAg
ICAgcmV0dXJuOworICAgIC8vIElmIHdlJ3JlIGluIGEgdGVtcGxhdGUgd2UgImNvbnN1bWUiIGFs
bCB0b2tlbnMuCisgICAgcmV0dXJuIG1fdGVtcGxhdGVDb3VudCA+IDA7Cit9CiAjZW5kaWYKIAot
ICAgIFByZWxvYWRUYXNrIHRhc2sodGFnTmFtZSwgbV90b2tlbi5hdHRyaWJ1dGVzKCkpOwotICAg
IG1fdG9rZW5pemVyLT51cGRhdGVTdGF0ZUZvcih0YXNrLnRhZ05hbWUoKSk7Citib29sIEhUTUxQ
cmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1N0eWxlQ2hhcmFjdGVycyhjb25zdCBIVE1MVG9rZW4mIHRv
a2VuKQoreworICAgIGlmICghbV9pblN0eWxlIHx8IHRva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW5U
eXBlczo6Q2hhcmFjdGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jc3NTY2FubmVy
LnNjYW4odG9rZW4pOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgaWYgKHRhc2sudGFnTmFt
ZSgpID09IHN0eWxlVGFnKQotICAgICAgICBtX2luU3R5bGUgPSB0cnVlOworYm9vbCBIVE1MUHJl
bG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBBU1NFUlQoaXNTdGFydE9y
RW5kVGFnKHRva2VuKSk7CisgICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBzdHlsZVRh
ZykpIHsKKyAgICAgICAgbV9pblN0eWxlID0gaXNTdGFydFRhZyh0b2tlbik7CisgICAgICAgIGlm
ICghbV9pblN0eWxlKQorICAgICAgICAgICAgbV9jc3NTY2FubmVyLnJlc2V0KCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBpZiAodGFz
ay50YWdOYW1lKCkgPT0gYmFzZVRhZykKLSAgICAgICAgdXBkYXRlUHJlZGljdGVkQmFzZUVsZW1l
bnRVUkwoS1VSTChtX2RvY3VtZW50LT51cmwoKSwgdGFzay5iYXNlRWxlbWVudEhyZWYoKSkpOwor
Ym9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIEFTU0VS
VChpc1N0YXJ0VGFnKHRva2VuKSk7CisgICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBi
YXNlVGFnKSkgeworICAgICAgICAvLyBUaGUgZmlyc3QgPGJhc2U+IGVsZW1lbnQgaXMgdGhlIG9u
ZSB0aGF0IHdpbnMuCisgICAgICAgIGlmICghbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHRhc2sucHJlbG9hZChtX2Rv
Y3VtZW50LCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQt
PmJhc2VVUkwoKSA6IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOworICAgICAgICBmb3IgKEhU
TUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRva2VuLmF0dHJp
YnV0ZXMoKS5iZWdpbigpOyBpdGVyICE9IHRva2VuLmF0dHJpYnV0ZXMoKS5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGl0ZXItPm1fbmFtZSwgaHJlZkF0
dHIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGhyZWZWYWx1ZSA9IFN0cmluZ0ltcGw6OmNy
ZWF0ZThCaXRJZlBvc3NpYmxlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5tX3ZhbHVlLnNp
emUoKSk7CisgICAgICAgICAgICAgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IEtVUkwo
bV9kb2N1bWVudFVSTCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGhyZWZWYWx1
ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
SFRNTFByZWxvYWRTY2FubmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBL
VVJMJiBiYXNlRWxlbWVudFVSTCkKK3ZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9r
ZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICAvLyBUaGUgZmlyc3QgPGJhc2U+IGVs
ZW1lbnQgaXMgdGhlIG9uZSB0aGF0IHdpbnMuCi0gICAgaWYgKCFtX3ByZWRpY3RlZEJhc2VFbGVt
ZW50VVJMLmlzRW1wdHkoKSkKKyAgICAvLyA8c3R5bGU+IGlzIHRoZSBvbmx5IHBsYWNlIHdlIHNl
YXJjaCBmb3IgdXJscyBpbiBub24tc3RhcnQvZW5kLXRhZyB0b2tlbnMuCisgICAgaWYgKHByb2Nl
c3NTdHlsZUNoYXJhY3RlcnModG9rZW4pKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcmVkaWN0
ZWRCYXNlRWxlbWVudFVSTCA9IGJhc2VFbGVtZW50VVJMOworICAgIGlmICghaXNTdGFydE9yRW5k
VGFnKHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUo
dG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CisjaWYgRU5BQkxFKFRF
TVBMQVRFX0VMRU1FTlQpCisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKHRhZ05h
bWUsIHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgaWYgKHByb2Nlc3NQb3Nz
aWJsZVN0eWxlVGFnKHRhZ05hbWUsIHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
aXNTdGFydFRhZyh0b2tlbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocHJvY2Vzc1Bvc3Np
YmxlQmFzZVRhZyh0YWdOYW1lLCB0b2tlbikpCisgICAgICAgIHJldHVybjsKKworICAgIFByZWxv
YWRUYXNrIHRhc2sodGFnTmFtZSwgdG9rZW4uYXR0cmlidXRlcygpKTsKKyAgICB0YXNrLmlzc3Vl
UHJlbG9hZFJlcXVlc3QobV9wcmVsb2FkZXIsIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9h
ZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5oCmluZGV4IGNiOGYzMzkxNDA5ZDExNzkyMDI0ZTBmY2E4Mjg5MjUxMGM1YjJmNzkuLjlkMTlh
M2ViZjQyMjRlZTk3YTJhOTY2N2UxNTJmMDg2Y2MwZWI5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCkBAIC0zMyw3ICszMyw2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MUGFyc2Vy
T3B0aW9uczsKIGNsYXNzIEhUTUxUb2tlbjsKIGNsYXNzIEhUTUxUb2tlbml6ZXI7CkBAIC00Miwy
MSArNDEsMzIgQEAgY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xhc3MgSFRNTFByZWxvYWRTY2Fu
bmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUHJlbG9hZFNjYW5uZXIpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBIVE1MUHJlbG9hZFNjYW5uZXIoRG9j
dW1lbnQqLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYpOworICAgIC8vIEhUTUxQcmVsb2FkU2Nh
bm5lciBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGhhdmUgYSBwb2ludGVyIHRvIERvY3VtZW50Lgor
ICAgIEhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRl
cj4mLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsK
IAogICAgIHZvaWQgYXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7Ci0gICAgdm9p
ZCBzY2FuKCk7CisgICAgdm9pZCBzY2FuKGNvbnN0IEtVUkwmIGRvY3VtZW50QmFzZUVsZW1lbnRV
UkwpOwogCiBwcml2YXRlOgotICAgIHZvaWQgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgdm9pZCB1cGRh
dGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCk7Cisg
ICAgdm9pZCBwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJik7CisKKyAgICBib29sIHByb2Nl
c3NTdHlsZUNoYXJhY3RlcnMoY29uc3QgSFRNTFRva2VuJik7CisKKyNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJik7CisjZW5kaWYKKworICAgIGJv
b2wgcHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBj
b25zdCBIVE1MVG9rZW4mKTsKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKKworICAgIFdlYWtQdHI8
SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAotICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OwogICAgIFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsKICAgICBDU1NQcmVsb2FkU2Nh
bm5lciBtX2Nzc1NjYW5uZXI7Ci0gICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVy
OwogICAgIEhUTUxUb2tlbiBtX3Rva2VuOworICAgIE93blB0cjxIVE1MVG9rZW5pemVyPiBtX3Rv
a2VuaXplcjsKICAgICBib29sIG1faW5TdHlsZTsKKyAgICBLVVJMIG1fZG9jdW1lbnRVUkw7CiAg
ICAgS1VSTCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMOwogCiAjaWYgRU5BQkxFKFRFTVBMQVRF
X0VMRU1FTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVz
b3VyY2VQcmVsb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291
cmNlUHJlbG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGEyNGQ2NmQzOWY4ZjU5ZDZlNDEzN2Q4OTA5
OWYzNDIyZDk4NzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSFRNTFJlc291cmNlUHJlbG9hZGVyLmgiCisKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGJvb2wgaXNTdHJpbmdTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKGNv
bnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFN0cmluZ0ltcGwqIGltcGwgPSBzdHJpbmcuaW1w
bCgpOworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGltcGwt
Pmhhc09uZVJlZigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFByZWxvYWRSZXF1ZXN0Ojppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAorewor
ICAgIHJldHVybiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQobV9pbml0aWF0b3Ip
CisgICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX2NoYXJzZXQp
CisgICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX3Jlc291cmNl
VVJMKQorICAgICAgICAmJiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQobV9iYXNl
VVJMLnN0cmluZygpKTsKK30KKworS1VSTCBQcmVsb2FkUmVxdWVzdDo6Y29tcGxldGVVUkwoRG9j
dW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwobV9y
ZXNvdXJjZVVSTCwgbV9iYXNlVVJMLmlzRW1wdHkoKSA/IGRvY3VtZW50LT51cmwoKSA6IG1fYmFz
ZVVSTCk7Cit9CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdCBQcmVsb2FkUmVxdWVzdDo6cmVzb3Vy
Y2VSZXF1ZXN0KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChj
b21wbGV0ZVVSTChkb2N1bWVudCkpKTsKKyAgICByZXF1ZXN0LnNldEluaXRpYXRvcihtX2luaXRp
YXRvcik7CisKKyAgICAvLyBGSVhNRTogSXQncyBwb3NzaWJsZSBDT1JTIHNob3VsZCB3b3JrIGZv
ciBvdGhlciByZXF1ZXN0IHR5cGVzPworICAgIGlmIChtX3Jlc291cmNlVHlwZSA9PSBDYWNoZWRS
ZXNvdXJjZTo6U2NyaXB0KQorICAgICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3Qo
KS5zZXRBbGxvd0Nvb2tpZXMobV9jcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKTsKKyAgICBy
ZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQo
UGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKK3sKKyAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdCA9IHByZWxvYWQtPnJlc291cmNlUmVxdWVzdChtX2RvY3VtZW50KTsK
KyAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2FkKHByZWxvYWQt
Pm1fcmVzb3VyY2VUeXBlLCByZXF1ZXN0LCBwcmVsb2FkLT5tX2NoYXJzZXQpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY5NzExYmU1N2Y4NWNkOWVmMmUyMGYyOGM5MWFjNGU3ZDI1ZWNhMTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQ
cmVsb2FkZXIuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhUTUxSZXNvdXJjZVByZWxvYWRlcl9oCisjZGVm
aW5lIEhUTUxSZXNvdXJjZVByZWxvYWRlcl9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5o
IgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFByZWxvYWRSZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxQcmVsb2FkUmVxdWVzdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5pdGlhdG9yLCBjb25z
dCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBDYWNoZWRSZXNvdXJj
ZTo6VHlwZSByZXNvdXJjZVR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFByZWxvYWRSZXF1ZXN0KGluaXRpYXRvciwgcmVzb3VyY2VVUkwsIGJhc2VVUkwsIHJlc291cmNl
VHlwZSkpOworICAgIH0KKyAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNv
bnN0OworCisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChEb2N1bWVu
dCopOworCitwcml2YXRlOgorICAgIFByZWxvYWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgaW5pdGlh
dG9yLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBDYWNo
ZWRSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUpCisgICAgICAgIDogbV9pbml0aWF0b3IoaW5p
dGlhdG9yKQorICAgICAgICAsIG1fcmVzb3VyY2VVUkwocmVzb3VyY2VVUkwpCisgICAgICAgICwg
bV9iYXNlVVJMKGJhc2VVUkwpCisgICAgICAgICwgbV9yZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBl
KQorICAgICAgICAsIG1fY3Jvc3NPcmlnaW5Nb2RlQWxsb3dzQ29va2llcyhmYWxzZSkKKyAgICB7
IH0KKworICAgIEtVUkwgY29tcGxldGVVUkwoRG9jdW1lbnQqKTsKKworICAgIFN0cmluZyBtX2lu
aXRpYXRvcjsKKyAgICBTdHJpbmcgbV9yZXNvdXJjZVVSTDsKKyAgICBLVVJMIG1fYmFzZVVSTDsK
KworcHVibGljOgorICAgIENhY2hlZFJlc291cmNlOjpUeXBlIG1fcmVzb3VyY2VUeXBlOworICAg
IFN0cmluZyBtX2NoYXJzZXQ7CisgICAgYm9vbCBtX2Nyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tp
ZXM7Cit9OworCitjbGFzcyBIVE1MUmVzb3VyY2VQcmVsb2FkZXIgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEhUTUxSZXNvdXJjZVByZWxvYWRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGV4cGxpY2l0IEhUTUxSZXNvdXJjZVByZWxvYWRlcihEb2N1bWVudCog
ZG9jdW1lbnQpCisgICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAgICAgLCBtX3dl
YWtGYWN0b3J5KHRoaXMpCisgICAgeyB9CisKKyAgICB2b2lkIHByZWxvYWQoUGFzc093blB0cjxQ
cmVsb2FkUmVxdWVzdD4pOworCisgICAgV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+IGNy
ZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQor
Citwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIFdlYWtQdHJGYWN0b3J5
PEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gbV93ZWFrRmFjdG9yeTsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgKaW5kZXggOWQ0MDhlNjIxNjJmYmJiNmQyNDA4NjIzOTQ3NWQyNmZhNWFhYWMwOC4uNGFi
ODJmZWUzMDMxNjM5MTFiYWJlMGExZjUxM2I0YzRlNGM0OTBjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaApAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAogI2RlZmluZSBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3RfaAogCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlc291
cmNlTG9hZFByaW9yaXR5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0zNCw3ICszNSw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKIAogY2xhc3MgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0IHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184902</attachid>
            <date>2013-01-27 00:39:32 -0800</date>
            <delta_ts>2013-01-27 01:50:14 -0800</delta_ts>
            <desc>Now with project changes</desc>
            <filename>bug-107807-20130127003624.patch</filename>
            <type>text/plain</type>
            <size>42855</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY3NDQ1OTUzMDFiMGJi
ZjljMGM4ZTc2YWEyNDI1NGI5Y2U2ZjVkNC4uZDY1NGM1ODRlMWFlYjQ1Y2RkOWZkNDU2ZTVmOTZl
OGY3YmNlMTEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAxMy0wMS0yNyAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUgZXhpc3Rpbmcg
SFRNTFByZWxvYWRTY2FubmVyIHRocmVhZGluZy1hd2FyZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEhUTUxQcmVsb2FkU2Nhbm5lciBhbmQgQ1NT
UHJlbG9hZFNjYW5uZXIgZG8gYSBudW1iZXIgb2YgdGhpbmdzLgorICAgICAgICBDU1NQcmVsb2Fk
U2Nhbm5lciBpcyBtb3N0bHkganVzdCBhIGhlbHBlciBjbGFzcyBmb3IgSFRNTFByZWxvYWRTY2Fu
bmVyLgorICAgICAgICBIVE1MUHJlbG9hZFNjYW5uZXIgcnVucyBpdHMgb3duIGNvcHkgb2YgdGhl
IEhUTUxUb2tlbml6ZXIgYW5kIHVzZXMKKyAgICAgICAgSFRNTFRva2VuaXplcjo6dXBkYXRlU3Rh
dGVGb3IgdG8gZW11bGF0ZSBlbm91Z2ggb2YgdGhlIFRyZWVCdWlsZGVyCisgICAgICAgIHRvIGdl
dCBhIHJlYWxpc3RpYyBzdHJlYW0gb2YgdG9rZW5zLiAgSXQgZG9lcyBzb21lIGFkZGl0aW9uYWwg
VHJlZUJ1aWxkZXIKKyAgICAgICAgZW11bGF0aW9uLCBpbmNsdWRpbmcgdHJhY2tpbmcgdGVtcGxh
dGUgdGFncyBhbmQgYmFzZSB0YWdzLCBidXQgbW9zdGx5CisgICAgICAgIGp1c3Qgc2NhbnMgdGhl
IHRva2VuIHN0cmVhbSBmb3Igc3RhcnQtdGFncyBhbmQgbG9va3MgZm9yIFVSTHMgaW4gdGhlbS4K
KyAgICAgICAgSXQgdHJhY2tzIHdoZW4gaXQgaGFzIHNlZW4gYSA8c3R5bGU+IHRhZyBhbmQgc3Rh
cnRzIHNlbmRpbmcgYWxsIGNoYXJhY3RlciB0b2tlbnMKKyAgICAgICAgdG8gdGhlIENTU1ByZWxv
YWRTY2FubmVyIHVudGlsIGEgPC9zdHlsZT4gdGFnIGlzIHNlZW4uCisgICAgICAgIEl0IGFsc28g
KHVuZm9ydHVuYXRlbHkpIGtub3dzIHNvbWUgYWJvdXQgdGhlIGxvYWRlciBndXRzIGFuZCBob3cg
dG8gY29uc3RydWN0CisgICAgICAgIGEgcHJvcGVyIENhY2hlZFJlc291cmNSZXF1ZXN0IGFuZCBp
c3N1ZSBhIHByZWxvYWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBoYXMgMyBtYWluIHBpZWNlczoK
KyAgICAgICAgLSBSZW1vdmUgRG9jdW1lbnQgYW5kIChhbmQgbG9hZGVyKSBkZXBlbmRlbmNpZXMg
ZnJvbSBIVE1MUHJlbG9hZFNjYW5uZXIvQ1NTUHJlbG9hZFNjYW5uZXIKKyAgICAgICAgICBUaGlz
IGlzIGRvbmUgdGhyb3VnaCBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgSFRNTFJlc291cmNlUHJlbG9h
ZGVyIGNsYXNzIHdoaWNoIGhvbGRzCisgICAgICAgICAgYSBEb2N1bWVudCogYW5kIGtub3dzIGhv
dyB0byB0YWxrIHRvIHRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlci4KKyAgICAgICAgICBUaGUgcHJl
bG9hZCBzY2FubmVycyBhcmUgaGFuZGVkIGEgV2Vha1B0ciB0byB0aGUgSFRNTFJlc291cmNlUHJl
bG9hZGVyIGFuZCBzcGVhayB0bworICAgICAgICAgIGl0IHVzaW5nIGNhbGxPbk1haW5UaHJlYWQu
CisgICAgICAgIC0gUmVtb3ZlIEF0b21pY1N0cmluZy9RdWFsaWZpZWROYW1lIGNvbXBhcmlzb25z
IGZyb20gdGhlIHByZWxvYWQgc2Nhbm5lcnMuCisgICAgICAgICAgVW5mb3J0dW5hdGVseSBIVE1M
TmFtZXMgY29tcGFyaXNvbnMgd2lsbCBhbHdheXMgYmUgZmFsc2Ugb24gYSBub24tbWFpbiB0aHJl
YWQKKyAgICAgICAgICB3aXRoIG91ciBjdXJyZW50IGRlc2lnbiwgc28gd2UgaGF2ZSB0byB1c2Ug
c29tZSAidGhyZWFkU2FmZU1hdGNoIiBoZWxwZXJzIHdyaXR0ZW4KKyAgICAgICAgICBmb3IgdGhl
IEhUTUxCYWNrZ3JvdW5kUGFyc2VyLgorICAgICAgICAtIENsZWFuLXVwIEhUTUxQcmVsb2FkU2Nh
bm5lcnMgdG9rZW4tbG9vcCB0byBub3QgYmUgdGllZCB0byBoYXZpbmcgYSBUb2tlbml6ZXIuCisg
ICAgICAgICAgKE9uIGEgYmFja2dyb3VuZCB0aGVhZCwgdGhlIEhUTUxQcmVsb2FkU2Nhbm5lciB3
b24ndCBvd24gdGhlIHRva2VuaXplciwgaXQgd2lsbCBqdXN0CisgICAgICAgICAgIGJlIHBhc3Nl
ZCBpbiB0b2tlbnMgYW5kIGV4cGVjdGVkIHRvIGlzc3VlIGxvYWRzIGlmIG5lY2Vzc2FyeS4pCisK
KyAgICAgICAgSSdtIGhhcHB5IHRvIGJyZWFrIHRoaXMgcGF0Y2ggdXAgaW50byBzbWFsbGVyIHBp
ZWNlcyBpZiByZXZpZXdlciBoYXZlIHN1Z2dlc3Rpb25zIGFzIHRvIHdoaWNoCisgICAgICAgIHBp
ZWNlcyB0aGV5J2QgbGlrZS4KKyAgICAgICAgSSB0aGluayB0aGF0IHRoaW5ncyBjb3VsZCBiZSBt
YWRlIGV2ZW4gc2ltcGxlciBpZi93aGVuIHdlIHN0b3AgcHJlbG9hZC1zY2FubmluZyBvbiB0aGUg
bWFpbiB0aHJlYWQuCisgICAgICAgIEkgYWxzbyB0aGluayB0aGlzIGlzIGFub3RoZXIgZXhhbXBs
ZSBvZiB3aHkgd2UgcHJvYmFibHkgd2FudCBhIHRocmVhZC1hd2FyZSBodG1sTmFtZXMoKSBvYmpl
Y3QuCisgICAgICAgIFByZWxvYWRUYXNrIGlzIHNsaWdodGx5IGF3a3dhcmRseSBuYW1lZCwgYW5k
IG1heSBtb3JwaCBpbiB0aGUgZnV0dXJlLgorICAgICAgICBBbmQgZmluYWxseSBpdHMgbm90IGNs
ZWFyIGlmIEhUTUxSZXNvdXJjZVByZWxvYWRlciB3YW50cyB0byBiZSBpdHMgb3duIGNsYXNzLCBv
ciBpZgorICAgICAgICB3ZSBqdXN0IHdhbnQgdG8gcGFzcyBhcm91bmQgV2Vha1B0cjxIVE1MRG9j
dW1lbnRMb2FkZXI+IGluc3RlYWQuCisKKyAgICAgICAgVGhpcyBwYXNzZXMgYWxsIG9mIHRoZSBM
YXlvdXRUZXN0cyB1c2luZyB0aGUgbWFpbiB0aHJlYWQgcGFyc2VyLiAgSSdsbCBhZGQgc3VwcG9y
dCBmb3IgdGhlIGJhY2tncm91bmQKKyAgICAgICAgcGFyc2VyIGluIGEgZm9sbG93LXVwIHBhdGNo
LgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1By
ZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjpD
U1NQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6
ZW1pdFJ1bGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmg6Cisg
ICAgICAgIChDU1NQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
SFRNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNl
cjo6cHVtcFRva2VuaXplcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6
Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEN1cnJlbnRJbnB1
dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRTY2FuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKEhUTUxEb2N1bWVudFBhcnNlcik6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRocmVhZFNhZmVFcXVhbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OnRocmVhZFNhZmVNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjppc1N0YXJ0VGFnKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzU3RhcnRPckVuZFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpQcmVs
b2FkVGFzazo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRh
c2s6OmNoYXJzZXQpOgorICAgICAgICAoUHJlbG9hZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
UHJlbG9hZFRhc2s6OnJlc291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkVGFz
azo6c2hvdWxkUHJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkVGFzazo6aXNzdWVQ
cmVsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OkhU
TUxQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6
OnNjYW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9z
c2libGVUZW1wbGF0ZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6
OnByb2Nlc3NTdHlsZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRT
Y2FubmVyOjpwcm9jZXNzUG9zc2libGVTdHlsZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2VUYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAoSFRNTFByZWxvYWRTY2FubmVyKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdHJpbmdTYWZlVG9TZW5k
VG9Bbm90aGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1ZXN0Ojppc1Nh
ZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVl
c3Q6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1ZXN0OjpyZXNv
dXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFJlc291cmNlUHJlbG9hZGVyOjpw
cmVsb2FkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFByZWxvYWRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UHJlbG9hZFJlcXVlc3Q6OlByZWxvYWRSZXF1ZXN0KToKKyAgICAgICAgKEhUTUxSZXNvdXJj
ZVByZWxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OkhU
TUxSZXNvdXJjZVByZWxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUmVzb3VyY2VQcmVs
b2FkZXI6OmNyZWF0ZVdlYWtQdHIpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZVJlcXVlc3QuaDoKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2Fk
U2Nhbm5lcjo6Q1NTUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9h
ZFNjYW5uZXI6OmVtaXRSdWxlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nh
bm5lci5oOgorICAgICAgICAoQ1NTUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1l
bnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3Vt
ZW50UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2Vy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRD
dXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2Nhbik6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChIVE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0aHJlYWRTYWZlRXF1YWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0aHJlYWRTYWZlTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFy
dFRhZyk6CisgICAgICAgIChXZWJDb3JlOjppc1N0YXJ0T3JFbmRUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6UHJlbG9hZFRhc2s6OnByb2Nlc3NBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRUYXNrOjpjaGFyc2V0KToKKyAgICAgICAgKFByZWxvYWRUYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlByZWxvYWRUYXNrOjpyZXNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UHJlbG9hZFRhc2s6OnNob3VsZFByZWxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRh
c2s6Omlzc3VlUHJlbG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRT
Y2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxv
YWRTY2FubmVyOjpzY2FuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6
cHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxv
YWRTY2FubmVyOjpwcm9jZXNzU3R5bGVDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVCYXNlVGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKEhUTUxQcmVsb2Fk
U2Nhbm5lcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyaW5n
U2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkUmVx
dWVzdDo6aXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlBy
ZWxvYWRSZXF1ZXN0Ojpjb21wbGV0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkUmVx
dWVzdDo6cmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVBy
ZWxvYWRlcjo6cHJlbG9hZCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJl
bG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQcmVsb2FkUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkUmVxdWVzdDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1ZXN0OjpQcmVsb2FkUmVxdWVzdCk6CisgICAgICAgIChI
VE1MUmVzb3VyY2VQcmVsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFJlc291cmNlUHJl
bG9hZGVyOjpIVE1MUmVzb3VyY2VQcmVsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFJl
c291cmNlUHJlbG9hZGVyOjpjcmVhdGVXZWFrUHRyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6CisKIDIwMTMtMDEtMjYgIFRvbnkgQ2hhbmcgIDx0b255
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERvbid0IHVzZSBnb21hIHRvIHBy
ZXByb2Nlc3MgYmluZGluZ3MgaWRsIGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGFmYjlh
ZWUzOThhM2Q2MjQ2YTFhYTZlY2I1ZTI4ZmMyMDZjNGEyNDEuLjdmZmQ4YTg2MzIzMjE1MmQ4N2Qx
YzhlYzkxOTZkYmYzMzQzODM5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTQ2LDYgKzE1
NDYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRp
bmdFbGVtZW50TGlzdC5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIu
Y3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorICAgIGh0bWwvcGFy
c2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmNwcAogICAgIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcAogICAgIGh0
bWwvcGFyc2VyL0hUTUxUb2tlbml6ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCAzZDZlMjMxMjg5MWEwYTg0MzA5NjNkNGUzZDI0NDg3ODk5OTQ5NjAwLi42NDA0N2ZhZGJj
YTk2OGQ0ZGFhZTE2OGFmYWY4ZmEzNTBhYWIxYzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTM1NzIsNiArMzU3Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlclRocmVhZC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXJIb3N0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMjk5OGM5ZDUxNGQ3ZDUyYjFjOWJhZGJj
ZWM5NzZjNWVhMzNiMzQ0Ni4uNWYzMjU0NGZjNjgyN2Q2OTlmN2U3NWQ4NTMwNDI3MDE5YzgzMmYw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCkBAIC03MjYsNiArNzI2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRt
bC9wYXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5jcHAgXAogICAgIGh0bWwvcGFyc2VyL0hUTUxQ
YXJzZXJUaHJlYWQuY3BwIFwKICAgICBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3Bw
IFwKKyAgICBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIFwKICAgICBodG1s
L3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFNvdXJj
ZVRyYWNrZXIuY3BwIFwKICAgICBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcCBcCkBAIC0x
ODk4LDYgKzE4OTksNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL3BhcnNlci9IVE1MRm9ybWF0
dGluZ0VsZW1lbnRMaXN0LmggXAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJTY2hlZHVsZXIu
aCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmggXAorICAgIGh0bWwvcGFy
c2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5oIFwKICAgICBodG1sL3BhcnNlci9IVE1MU2NyaXB0
UnVubmVyLmggXAogICAgIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmggXAogICAg
IGh0bWwvcGFyc2VyL0hUTUxUb2tlbi5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA0ZDU4NjgxMmMx
OWE3ODg4YTcwMzJjNzY3NTcxMWE3MzA0ODRiZTk4Li5mMzk3NTRjNWMwZTYzZTQ0MjFkYTIwNWYw
NDJmNjUxODNkMDJmZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zMzc0LDYgKzMzNzQsOCBAQAog
ICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJUaHJlYWQuaCcsCiAgICAgICAgICAg
ICAnaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCcsCiAgICAgICAgICAgICAnaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvcGFyc2Vy
L0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hU
TUxSZXNvdXJjZVByZWxvYWRlci5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MU2Ny
aXB0UnVubmVyLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggODI2
Y2ZhNGIzYzlkMWUxNzc0YmFjYWE1OGYyMDAzMmJjZTI2Yzg0MC4uNzQ0MDFmMzU1MTU1M2MyY2Nl
NTJjZWI2ZGQzMzBiNTcyMzM5NjU5MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY0OTI1LDYgKzY0OTI1LDE0IEBACiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHBhcnNlclxIVE1M
UmVzb3VyY2VQcmVsb2FkZXIuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxwYXJzZXJcSFRNTFJlc291cmNlUHJlbG9hZGVyLmgi
CisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxo
dG1sXHBhcnNlclxIVE1MU2NyaXB0UnVubmVyLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDY2
YTMwMjJiMzU1ZTc5ZGI1YWM5Nzc4OGViZGEwZmZiNzZkZDhkODUuLjNiMDA3M2NiYTZjMzZlODM5
YjU3Y2NlY2NhM2U2N2M4NjIzZDkwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtNDg4NCw2ICs0ODg0LDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxQYXJzZXJTY2hlZHVsZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlclRocmVhZC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUHJlbG9h
ZFNjYW5uZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJc
SFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGh0bWxccGFyc2VyXEhUTUxTY3JpcHRSdW5uZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFNvdXJjZVRyYWNrZXIuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFRva2VuaXplci5jcHAiIC8+CkBAIC03
OTI1LDYgKzc5MjYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJc
SFRNTFBhcnNlclNjaGVkdWxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxwYXJzZXJcSFRNTFBhcnNlclRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caHRtbFxwYXJzZXJcSFRNTFByZWxvYWRTY2FubmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxTY3JpcHRSdW5uZXIuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxTY3JpcHRSdW5uZXJI
b3N0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MU291
cmNlVHJhY2tlci5oIiAvPgpAQCAtODY3NSw0ICs4Njc3LDQgQEAKICAgPEltcG9ydCBQcm9qZWN0
PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdy
b3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVj
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggOGVlYzgxYjEx
ZGZjM2FmZTRiYjg5MzEzNTNjOWM3MjBkMTVmMGY4Ni4uNTRjZjExZGM3NWYyNTg1ZjJlMGQyMDVi
ZjA4NDI3ZjQ2MmMzNjY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
Q1NTUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NT
U1ByZWxvYWRTY2FubmVyLmNwcApAQCAtMzIsMTUgKzMyLDE2IEBACiAjaW5jbHVkZSAiQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRv
a2VuLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1ByZWxvYWRTY2FubmVyOjpDU1NQ
cmVsb2FkU2Nhbm5lcihEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBtX3N0YXRlKEluaXRpYWwp
Ci0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorQ1NTUHJlbG9hZFNjYW5uZXI6OkNTU1ByZWxv
YWRTY2FubmVyKGNvbnN0IFdlYWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiYgcHJlbG9hZGVy
KQorICAgIDogbV9wcmVsb2FkZXIocHJlbG9hZGVyKQorICAgICwgbV9zdGF0ZShJbml0aWFsKQog
ewogfQogCkBAIC0xOTMsMTEgKzE5NCwxMyBAQCBzdGF0aWMgU3RyaW5nIHBhcnNlQ1NTU3RyaW5n
T3JVUkwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB2b2lkIENTU1By
ZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiB7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJp
bXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKSB7Ci0gICAgICAg
IFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVy
cygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJl
cXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwodmFsdWUpKSk7Ci0gICAgICAgICAgICByZXF1
ZXN0LnNldEluaXRpYXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsK
LSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQo
Q2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIFN0cmluZygpKTsKKyAgICAg
ICAgU3RyaW5nIHVybCA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVy
cygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgS1VSTCBiYXNlRWxlbWVudFVSTDsgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIHBhc3NlZCBpbiBmcm9tIHRoZSBIVE1MUHJlbG9hZFNjYW5lciB2aWEgc2NhbigpIQorICAg
ICAgICAgICAgT3duUHRyPFByZWxvYWRSZXF1ZXN0PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVlc3Q6
OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3Jz
KCkuY3NzLCB1cmwsIGJhc2VFbGVtZW50VVJMLCBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkaW5nIHRoZSBj
aGFyc2V0IGluIHRoZSBwcmVsb2FkIHJlcXVlc3Q/CisgICAgICAgICAgICBjYWxsT25NYWluVGhy
ZWFkKGJpbmQoJkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9hZCwgbV9wcmVsb2FkZXIsIHJl
cXVlc3QucmVsZWFzZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7
CiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFy
YWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAppbmRleCA4ZTE5Mjk2NWU3ZWEwYzk0MmI3YjgyMGE1YzU4
NTQ2Yzk3YjYxYTY4Li5mMzE2Y2VjNzYyNWUwNTQzYzZmMTg1NmYxZGRlNGY0YzBmOGNhODYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKQEAg
LTI3LDE3ICsyNywxOCBAQAogI2lmbmRlZiBDU1NQcmVsb2FkU2Nhbm5lcl9oCiAjZGVmaW5lIENT
U1ByZWxvYWRTY2FubmVyX2gKIAorI2luY2x1ZGUgIkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgor
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgSFRN
TFRva2VuOwogCiBjbGFzcyBDU1NQcmVsb2FkU2Nhbm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ1NTUHJlbG9hZFNjYW5uZXIpOwogcHVibGljOgotICAgIGV4cGxpY2l0IENTU1ByZWxv
YWRTY2FubmVyKERvY3VtZW50Kik7CisgICAgZXhwbGljaXQgQ1NTUHJlbG9hZFNjYW5uZXIoY29u
c3QgV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+Jik7CiAKICAgICB2b2lkIHJlc2V0KCk7
CiAgICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tlbiYpOwpAQCAtNTYsMTQgKzU3LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIERvbmVQYXJzaW5nSW1wb3J0UnVsZXMsCiAgICAgfTsKIAotICAgIGlu
bGluZSB2b2lkIHRva2VuaXplKFVDaGFyIGMpOworICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVD
aGFyKTsKICAgICB2b2lkIGVtaXRSdWxlKCk7CiAKKyAgICBXZWFrUHRyPEhUTUxSZXNvdXJjZVBy
ZWxvYWRlcj4gbV9wcmVsb2FkZXI7CisKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFN0cmluZ0J1
aWxkZXIgbV9ydWxlOwogICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlVmFsdWU7Ci0KLSAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDAyOTE0YjIxMzkyZmRiODA0MDRjMWY2
YjBjZTE3MzA5ZmRmYmVhNWMuLjZlZWM0ZTIwMDMxZDhjZjE0MTA0YzZlN2M4NTdjMjMxMDhlZjM3
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmNwcApAQCAtODUsNiArODUsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVu
dFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogI2lmIEVO
QUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAgICAsIG1fd2Vha0ZhY3RvcnkodGhpcykKICNl
bmRpZgorICAgICwgbV9wcmVsb2FkZXIoYWRvcHRQdHIobmV3IEhUTUxSZXNvdXJjZVByZWxvYWRl
cihkb2N1bWVudCkpKQogICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNlKQogICAgICwgbV9oYXZl
QmFja2dyb3VuZFBhcnNlcihmYWxzZSkKICAgICAsIG1fcHVtcFNlc3Npb25OZXN0aW5nTGV2ZWwo
MCkKQEAgLTM3NSwxMCArMzc2LDEwIEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9r
ZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQogICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRz
KCkpIHsKICAgICAgICAgQVNTRVJUKG1fdG9rZW5pemVyLT5zdGF0ZSgpID09IEhUTUxUb2tlbml6
ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKICAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKSB7Ci0g
ICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nh
bm5lcihkb2N1bWVudCgpLCBtX29wdGlvbnMpKTsKKyAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5u
ZXIgPSBhZG9wdFB0cihuZXcgSFRNTFByZWxvYWRTY2FubmVyKG1fcHJlbG9hZGVyLT5jcmVhdGVX
ZWFrUHRyKCksIG1fb3B0aW9ucywgZG9jdW1lbnQoKS0+dXJsKCkpKTsKICAgICAgICAgICAgIG1f
cHJlbG9hZFNjYW5uZXItPmFwcGVuZFRvRW5kKG1faW5wdXQuY3VycmVudCgpKTsKICAgICAgICAg
fQotICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgIG1fcHJlbG9hZFNj
YW5uZXItPnNjYW4oZG9jdW1lbnQoKS0+YmFzZUVsZW1lbnRVUkwoKSk7CiAgICAgfQogCiAgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhUTUwoY29va2llLCBtX2lucHV0LmN1
cnJlbnQoKS5jdXJyZW50TGluZSgpLnplcm9CYXNlZEludCgpKTsKQEAgLTQ1Myw5ICs0NTQsOSBA
QCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYg
c291cmNlKQogICAgICAgICAvLyBDaGVjayB0aGUgZG9jdW1lbnQud3JpdGUoKSBvdXRwdXQgd2l0
aCBhIHNlcGFyYXRlIHByZWxvYWQgc2Nhbm5lciBhcwogICAgICAgICAvLyB0aGUgbWFpbiBzY2Fu
bmVyIGNhbid0IGRlYWwgd2l0aCBpbnNlcnRpb25zLgogICAgICAgICBpZiAoIW1faW5zZXJ0aW9u
UHJlbG9hZFNjYW5uZXIpCi0gICAgICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyID0g
YWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpLCBtX29wdGlvbnMpKTsK
KyAgICAgICAgICAgIG1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0cihuZXcgSFRN
TFByZWxvYWRTY2FubmVyKG1fcHJlbG9hZGVyLT5jcmVhdGVXZWFrUHRyKCksIG1fb3B0aW9ucywg
ZG9jdW1lbnQoKS0+dXJsKCkpKTsKICAgICAgICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+
YXBwZW5kVG9FbmQoc291cmNlKTsKLSAgICAgICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+
c2NhbigpOworICAgICAgICBtX2luc2VydGlvblByZWxvYWRTY2FubmVyLT5zY2FuKGRvY3VtZW50
KCktPmJhc2VFbGVtZW50VVJMKCkpOwogICAgIH0KIAogICAgIGVuZElmRGVsYXllZCgpOwpAQCAt
NTE2LDcgKzUxNyw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3By
ZWxvYWRTY2FubmVyLT5hcHBlbmRUb0VuZChzb3VyY2UpOwogICAgICAgICAgICAgaWYgKGlzV2Fp
dGluZ0ZvclNjcmlwdHMoKSkKLSAgICAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2Fu
KCk7CisgICAgICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+c2Nhbihkb2N1bWVudCgpLT5i
YXNlRWxlbWVudFVSTCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjk4LDcgKzY5OSw3IEBA
IHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxv
YWRTY2FubmVyQW5kU2NhbigpCiB7CiAgICAgQVNTRVJUKG1fcHJlbG9hZFNjYW5uZXIpOwogICAg
IG1fcHJlbG9hZFNjYW5uZXItPmFwcGVuZFRvRW5kKG1faW5wdXQuY3VycmVudCgpKTsKLSAgICBt
X3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgbV9wcmVsb2FkU2Nhbm5lci0+c2Nhbihkb2N1
bWVudCgpLT5iYXNlRWxlbWVudFVSTCgpKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6
Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZjE5Y2Ix
MjI5NDVlZjU5NjFmMTdmNzBiOTVkZWQzMzQ4NGI1YmMxZi4uY2FkYjJjMTcyNzBhMzljZjZjODEw
ZDExY2U3OTg0NTdjY2QzNjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNp
bmNsdWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxSZXNvdXJjZVByZWxv
YWRlci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRN
TFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJIVE1MVG9rZW4uaCIKQEAgLTE3NCw2ICsxNzUs
NyBAQCBwcml2YXRlOgogICAgIERlcXVlPE93blB0cjxDb21wYWN0SFRNTFRva2VuU3RyZWFtPiA+
IG1fcGVuZGluZ1Rva2VuczsKICAgICBXZWFrUHRyRmFjdG9yeTxIVE1MRG9jdW1lbnRQYXJzZXI+
IG1fd2Vha0ZhY3Rvcnk7CiAjZW5kaWYKKyAgICBPd25QdHI8SFRNTFJlc291cmNlUHJlbG9hZGVy
PiBtX3ByZWxvYWRlcjsKIAogICAgIGJvb2wgbV9lbmRXYXNEZWxheWVkOwogICAgIGJvb2wgbV9o
YXZlQmFja2dyb3VuZFBhcnNlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGVjN2U3ZDJiNmI0ZmNiNTRjMzIxMTIxM2I5ZDQy
Yzg1M2RhNDU3NGEuLmRjMjA1MWM5Mjg0YWQ3NDZiMjE0MTcyMTA3YjkzYTI2N2FjZGQyODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cApAQCAtMjgsMjIgKzI4LDQ4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRN
TFByZWxvYWRTY2FubmVyLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCi0j
aW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgor
I2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgog
I2luY2x1ZGUgIkxpbmtSZWxBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNp
bmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3N0YXRpYyBib29sIHRocmVhZFNhZmVFcXVh
bChTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBiKQoreworICAgIGlmIChhLT5oYXNoKCkgIT0g
Yi0+aGFzaCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZ0hhc2g6
OmVxdWFsKGEsIGIpOworfQorCitzdGF0aWMgYm9vbCB0aHJlYWRTYWZlTWF0Y2goY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQoreworICAgIHJldHVy
biB0aHJlYWRTYWZlRXF1YWwobG9jYWxOYW1lLmltcGwoKSwgcU5hbWUubG9jYWxOYW1lKCkuaW1w
bCgpKTsKK30KKworc3RhdGljIGJvb2wgdGhyZWFkU2FmZU1hdGNoKGNvbnN0IEhUTUxUb2tlbjo6
RGF0YVZlY3RvciYgbmFtZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpCit7CisgICAgcmV0
dXJuIGVxdWFsKHFOYW1lLmxvY2FsTmFtZSgpLmltcGwoKSwgbmFtZS5kYXRhKCksIG5hbWUuc2l6
ZSgpKTsKK30KKworc3RhdGljIGJvb2wgaXNTdGFydFRhZyhjb25zdCBIVE1MVG9rZW4mIHRva2Vu
KQoreworICAgIHJldHVybiB0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFn
OyAvLyBIb2x5IHZlcmJvc2l0eSwgYmF0bWFuLgorfQorCitzdGF0aWMgYm9vbCBpc1N0YXJ0T3JF
bmRUYWcoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICByZXR1cm4gdG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwgaXNTdGFydFRhZyh0b2tlbik7Cit9CisKIGNs
YXNzIFByZWxvYWRUYXNrIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBQcmVsb2FkVGFzayhjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYg
YXR0cmlidXRlcykKQEAgLTU3LDExICs4MywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHByb2Nl
c3NBdHRyaWJ1dGVzKGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykK
ICAgICB7Ci0gICAgICAgIGlmIChtX3RhZ05hbWUgIT0gaW1nVGFnCi0gICAgICAgICAgICAmJiBt
X3RhZ05hbWUgIT0gaW5wdXRUYWcKLSAgICAgICAgICAgICYmIG1fdGFnTmFtZSAhPSBsaW5rVGFn
Ci0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0gc2NyaXB0VGFnCi0gICAgICAgICAgICAmJiBt
X3RhZ05hbWUgIT0gYmFzZVRhZykKKyAgICAgICAgaWYgKCF0aHJlYWRTYWZlTWF0Y2gobV90YWdO
YW1lLCBpbWdUYWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwg
aW5wdXRUYWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlu
a1RhZykKKyAgICAgICAgICAgICYmICF0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBzY3JpcHRU
YWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgYmFzZVRhZykp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0
ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7CkBAIC02OSwy
OSArOTUsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5h
bWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CiAgICAgICAgICAg
ICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJs
ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOwogCi0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBjaGFyc2V0QXR0cikKKyAgICAgICAgICAgIGlmICh0
aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgY2hhcnNldEF0dHIpKQogICAgICAgICAgICAg
ICAgIG1fY2hhcnNldCA9IGF0dHJpYnV0ZVZhbHVlOwogCi0gICAgICAgICAgICBpZiAobV90YWdO
YW1lID09IHNjcmlwdFRhZyB8fCBtX3RhZ05hbWUgPT0gaW1nVGFnKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gc3JjQXR0cikKKyAgICAgICAgICAgIGlmICh0aHJlYWRT
YWZlTWF0Y2gobV90YWdOYW1lLCBzY3JpcHRUYWcpIHx8IHRocmVhZFNhZmVNYXRjaChtX3RhZ05h
bWUsIGltZ1RhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJp
YnV0ZU5hbWUsIHNyY0F0dHIpKQogICAgICAgICAgICAgICAgICAgICBzZXRVcmxUb0xvYWQoYXR0
cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
Y3Jvc3NvcmlnaW5BdHRyICYmICFhdHRyaWJ1dGVWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgY3Jvc3NvcmlnaW5B
dHRyKSAmJiAhYXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIG1f
Y3Jvc3NPcmlnaW5Nb2RlID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJp
YnV0ZVZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV90YWdOYW1lID09IGxpbmtUYWcp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBocmVmQXR0cikKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlua1RhZykpIHsK
KyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIGhyZWZB
dHRyKSkKICAgICAgICAgICAgICAgICAgICAgc2V0VXJsVG9Mb2FkKGF0dHJpYnV0ZVZhbHVlKTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IHJlbEF0dHIpCisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHJlbEF0
dHIpKQogICAgICAgICAgICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSByZWxBdHRyaWJ1
dGVJc1N0eWxlU2hlZXQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGF0dHJpYnV0ZU5hbWUgPT0gbWVkaWFBdHRyKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRo
cmVhZFNhZmVNYXRjaChhdHRyaWJ1dGVOYW1lLCBtZWRpYUF0dHIpKQogICAgICAgICAgICAgICAg
ICAgICBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuID0gbGlua01lZGlhQXR0cmlidXRlSXNT
Y3JlZW4oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RhZ05hbWUg
PT0gaW5wdXRUYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBzcmNB
dHRyKQorICAgICAgICAgICAgfSBlbHNlIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBp
bnB1dFRhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0
ZU5hbWUsIHNyY0F0dHIpKQogICAgICAgICAgICAgICAgICAgICBzZXRVcmxUb0xvYWQoYXR0cmli
dXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gdHlw
ZUF0dHIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0
ZU5hbWUsIHR5cGVBdHRyKSkKICAgICAgICAgICAgICAgICAgICAgbV9pbnB1dElzSW1hZ2UgPSBl
cXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgSW5wdXRUeXBlTmFtZXM6OmltYWdlKCkp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RhZ05hbWUgPT0gYmFzZVRhZykgewotICAgICAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGhyZWZBdHRyKQotICAgICAgICAgICAgICAg
ICAgICBtX2Jhc2VFbGVtZW50SHJlZiA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNl
cyhhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MjQsMjYgKzE0Nyw1MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fdXJsVG9Mb2FkID0gc3RyaXBMZWFk
aW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9CiAKLSAgICB2
b2lkIHByZWxvYWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMKQorICAg
IGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTog
SXRzIG5vdCBjbGVhciB0aGF0IHRoaXMgaWYgaXMgbmVlZGVkLCB0aGUgbG9hZGVyIHByb2JhYmx5
IGlnbm9yZXMgY2hhcnNldCBmb3IgaW1hZ2UgcmVxdWVzdHMgYW55d2F5LgorICAgICAgICBpZiAo
dGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW1nVGFnKSkKKyAgICAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gbV9jaGFyc2V0OworICAgIH0KKworICAgIENh
Y2hlZFJlc291cmNlOjpUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgc2NyaXB0VGFnKSkKKyAgICAgICAgICAgIHJl
dHVybiBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OworICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNo
KG1fdGFnTmFtZSwgaW1nVGFnKSB8fCAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW5wdXRU
YWcpICYmIG1faW5wdXRJc0ltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJj
ZTo6SW1hZ2VSZXNvdXJjZTsKKyAgICAgICAgaWYgKHRocmVhZFNhZmVNYXRjaChtX3RhZ05hbWUs
IGxpbmtUYWcpICYmIG1fbGlua0lzU3R5bGVTaGVldCAmJiBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlz
U2NyZWVuKQorICAgICAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZFJl
c291cmNlOjpSYXdSZXNvdXJjZTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFByZWxvYWQoKQog
ICAgIHsKICAgICAgICAgaWYgKG1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlu
a1RhZykgJiYgKCFtX2xpbmtJc1N0eWxlU2hlZXQgfHwgIW1fbGlua01lZGlhQXR0cmlidXRlSXNT
Y3JlZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh0aHJlYWRT
YWZlTWF0Y2gobV90YWdOYW1lLCBpbnB1dFRhZykgJiYgIW1faW5wdXRJc0ltYWdlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2
b2lkIGlzc3VlUHJlbG9hZFJlcXVlc3QoV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+JiBw
cmVsb2FkZXIsIGNvbnN0IEtVUkwmIHByZWRpY3RlZEJhc2VVUkwpCisgICAgeworICAgICAgICBp
ZiAoIXNob3VsZFByZWxvYWQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDYWNo
ZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0KGRvY3VtZW50LT5jb21wbGV0ZVVSTChtX3VybFRvTG9hZCwgYmFzZVVS
TCkpKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IodGFnTmFtZSgpKTsKLSAgICAgICAg
aWYgKG1fdGFnTmFtZSA9PSBzY3JpcHRUYWcpIHsKLSAgICAgICAgICAgIHJlcXVlc3QubXV0YWJs
ZVJlc291cmNlUmVxdWVzdCgpLnNldEFsbG93Q29va2llcyhjcm9zc09yaWdpbk1vZGVBbGxvd3ND
b29raWVzKCkpOwotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2Fj
aGVkUmVzb3VyY2U6OlNjcmlwdCwgcmVxdWVzdCwgbV9jaGFyc2V0KTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIGlmIChtX3RhZ05hbWUgPT0gaW1nVGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRU
YWcgJiYgbV9pbnB1dElzSW1hZ2UpKQotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIt
PnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3QsIFN0cmluZygp
KTsKLSAgICAgICAgZWxzZSBpZiAobV90YWdOYW1lID09IGxpbmtUYWcgJiYgbV9saW5rSXNTdHls
ZVNoZWV0ICYmIG1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4pIAotICAgICAgICAgICAgY2Fj
aGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQs
IHJlcXVlc3QsIG1fY2hhcnNldCk7CisgICAgICAgIE93blB0cjxQcmVsb2FkUmVxdWVzdD4gcmVx
dWVzdCA9IFByZWxvYWRSZXF1ZXN0OjpjcmVhdGUobV90YWdOYW1lLCBtX3VybFRvTG9hZCwgcHJl
ZGljdGVkQmFzZVVSTCwgcmVzb3VyY2VUeXBlKCkpOworICAgICAgICByZXF1ZXN0LT5tX2Nyb3Nz
T3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMgPSBjcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCk7
CisgICAgICAgIHJlcXVlc3QtPm1fY2hhcnNldCA9IGNoYXJzZXQoKTsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChiaW5kKCZIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQsIHByZWxvYWRl
ciwgcmVxdWVzdC5yZWxlYXNlKCkpKTsKICAgICB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcm
IGJhc2VFbGVtZW50SHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUVsZW1lbnRIcmVmOyB9CiAK
IHByaXZhdGU6CiAKQEAgLTE1NSwxOCArMjAzLDE4IEBAIHByaXZhdGU6CiAgICAgQXRvbWljU3Ry
aW5nIG1fdGFnTmFtZTsKICAgICBTdHJpbmcgbV91cmxUb0xvYWQ7CiAgICAgU3RyaW5nIG1fY2hh
cnNldDsKLSAgICBTdHJpbmcgbV9iYXNlRWxlbWVudEhyZWY7CiAgICAgU3RyaW5nIG1fY3Jvc3NP
cmlnaW5Nb2RlOwogICAgIGJvb2wgbV9saW5rSXNTdHlsZVNoZWV0OwogICAgIGJvb2wgbV9saW5r
TWVkaWFBdHRyaWJ1dGVJc1NjcmVlbjsKICAgICBib29sIG1faW5wdXRJc0ltYWdlOwogfTsKIAot
SFRNTFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpCi0gICAgLCBtX2Nzc1NjYW5uZXIoZG9jdW1lbnQpCitIVE1MUHJlbG9hZFNjYW5uZXI6
OkhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4m
IHByZWxvYWRlciwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IEtVUkwm
IGRvY3VtZW50VVJMKQorICAgIDogbV9wcmVsb2FkZXIocHJlbG9hZGVyKQorICAgICwgbV9jc3NT
Y2FubmVyKHByZWxvYWRlcikKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0
ZShvcHRpb25zKSkKICAgICAsIG1faW5TdHlsZShmYWxzZSkKKyAgICAsIG1fZG9jdW1lbnRVUkwo
ZG9jdW1lbnRVUkwpCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgLCBtX3RlbXBs
YXRlQ291bnQoMCkKICNlbmRpZgpAQCAtMTc4LDY2ICsyMjYsMTAxIEBAIHZvaWQgSFRNTFByZWxv
YWRTY2FubmVyOjphcHBlbmRUb0VuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAg
ICBtX3NvdXJjZS5hcHBlbmQoc291cmNlKTsKIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6
OnNjYW4oKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgdXNlZCBieSB0aGUgYmFja2dyb3VuZC10
aHJlYWQgcHJlbG9hZCBzY2FubmVyLgordm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oY29u
c3QgS1VSTCYgc3RhcnRpbmdCYXNlRWxlbWVudFVSTCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOyAvLyBIVE1MVG9rZW5pemVyOjp1cGRhdGVTdGF0ZUZvciBvbmx5IHdvcmtzIG9uIHRo
ZSBtYWluIHRocmVhZC4KICAgICAvLyBXaGVuIHdlIHN0YXJ0IHNjYW5uaW5nLCBvdXIgYmVzdCBw
cmVkaWN0aW9uIG9mIHRoZSBiYXNlRWxlbWVudFVSTCBpcyB0aGUgcmVhbCBvbmUhCi0gICAgbV9w
cmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IG1fZG9jdW1lbnQtPmJhc2VFbGVtZW50VVJMKCk7Cisg
ICAgaWYgKCFzdGFydGluZ0Jhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgbV9wcmVk
aWN0ZWRCYXNlRWxlbWVudFVSTCA9IHN0YXJ0aW5nQmFzZUVsZW1lbnRVUkw7CiAKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHNhdmUgYW5kIHJlLXVzZSB0aGVzZSB0b2tlbnMgaW4gSFRNTERvY3Vt
ZW50UGFyc2VyIGlmCi0gICAgLy8gdGhlIHBlbmRpbmcgc2NyaXB0IGRvZXNuJ3QgZW5kIHVwIGNh
bGxpbmcgZG9jdW1lbnQud3JpdGUuCisgICAgLy8gTm90ZTogbV90b2tlbiBpcyBvbmx5IHVzZWQg
ZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBmb3IgdGhlIG1haW4gdGhyZWFkLgorICAgIC8vIEFsbCBv
dGhlciBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhIHRva2VuLgogICAgIHdoaWxlIChtX3Rva2VuaXpl
ci0+bmV4dFRva2VuKG1fc291cmNlLCBtX3Rva2VuKSkgewotICAgICAgICBwcm9jZXNzVG9rZW4o
KTsKKyAgICAgICAgaWYgKGlzU3RhcnRUYWcobV90b2tlbikpCisgICAgICAgICAgICBtX3Rva2Vu
aXplci0+dXBkYXRlU3RhdGVGb3IoQXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwg
bV90b2tlbi5uYW1lKCkuc2l6ZSgpKSk7CisgICAgICAgIHByb2Nlc3NUb2tlbihtX3Rva2VuKTsK
ICAgICAgICAgbV90b2tlbi5jbGVhcigpOwogICAgIH0KIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNj
YW5uZXI6OnByb2Nlc3NUb2tlbigpCi17Ci0gICAgaWYgKG1faW5TdHlsZSkgewotICAgICAgICBp
ZiAobV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNoYXJhY3RlcikKLSAgICAgICAg
ICAgIG1fY3NzU2Nhbm5lci5zY2FuKG1fdG9rZW4pOwotICAgICAgICBlbHNlIGlmIChtX3Rva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKSB7Ci0gICAgICAgICAgICBtX2luU3R5
bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fY3NzU2Nhbm5lci5yZXNldCgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKG1fdG9rZW4udHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZykgewogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAobV90ZW1w
bGF0ZUNvdW50ICYmIG1fdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgJiYg
QXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgp
KSA9PSB0ZW1wbGF0ZVRhZykKK2Jvb2wgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2li
bGVUZW1wbGF0ZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tl
biYgdG9rZW4pCit7CisgICAgaWYgKGlzU3RhcnRPckVuZFRhZyh0b2tlbikgJiYgdGhyZWFkU2Fm
ZU1hdGNoKHRhZ05hbWUsIHRlbXBsYXRlVGFnKSkgeworICAgICAgICBpZiAoaXNTdGFydFRhZyh0
b2tlbikpCisgICAgICAgICAgICBtX3RlbXBsYXRlQ291bnQrKzsKKyAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV90ZW1wbGF0ZUNvdW50LS07Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gVHdhcyBvdXIgdG9rZW4uCiAgICAgfQotCi0gICAgQXRvbWlj
U3RyaW5nIHRhZ05hbWUobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXpl
KCkpOwotCi0jaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRhZ05hbWUgPT0g
dGVtcGxhdGVUYWcpCi0gICAgICAgIG1fdGVtcGxhdGVDb3VudCsrOwotCi0gICAgaWYgKG1fdGVt
cGxhdGVDb3VudCkKLSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIHdlJ3JlIGluIGEgdGVtcGxh
dGUgd2UgImNvbnN1bWUiIGFsbCB0b2tlbnMuCisgICAgcmV0dXJuIG1fdGVtcGxhdGVDb3VudCA+
IDA7Cit9CiAjZW5kaWYKIAotICAgIFByZWxvYWRUYXNrIHRhc2sodGFnTmFtZSwgbV90b2tlbi5h
dHRyaWJ1dGVzKCkpOwotICAgIG1fdG9rZW5pemVyLT51cGRhdGVTdGF0ZUZvcih0YXNrLnRhZ05h
bWUoKSk7Citib29sIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1N0eWxlQ2hhcmFjdGVycyhj
b25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIGlmICghbV9pblN0eWxlIHx8IHRva2VuLnR5
cGUoKSAhPSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9jc3NTY2FubmVyLnNjYW4odG9rZW4pOworICAgIHJldHVybiB0cnVlOworfQogCi0g
ICAgaWYgKHRhc2sudGFnTmFtZSgpID09IHN0eWxlVGFnKQotICAgICAgICBtX2luU3R5bGUgPSB0
cnVlOworYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAg
ICBBU1NFUlQoaXNTdGFydE9yRW5kVGFnKHRva2VuKSk7CisgICAgaWYgKHRocmVhZFNhZmVNYXRj
aCh0YWdOYW1lLCBzdHlsZVRhZykpIHsKKyAgICAgICAgbV9pblN0eWxlID0gaXNTdGFydFRhZyh0
b2tlbik7CisgICAgICAgIGlmICghbV9pblN0eWxlKQorICAgICAgICAgICAgbV9jc3NTY2FubmVy
LnJlc2V0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CiAKLSAgICBpZiAodGFzay50YWdOYW1lKCkgPT0gYmFzZVRhZykKLSAgICAgICAgdXBkYXRl
UHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoS1VSTChtX2RvY3VtZW50LT51cmwoKSwgdGFzay5iYXNl
RWxlbWVudEhyZWYoKSkpOworYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJs
ZUJhc2VUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRv
a2VuKQoreworICAgIEFTU0VSVChpc1N0YXJ0VGFnKHRva2VuKSk7CisgICAgaWYgKHRocmVhZFNh
ZmVNYXRjaCh0YWdOYW1lLCBiYXNlVGFnKSkgeworICAgICAgICAvLyBUaGUgZmlyc3QgPGJhc2U+
IGVsZW1lbnQgaXMgdGhlIG9uZSB0aGF0IHdpbnMuCisgICAgICAgIGlmICghbV9wcmVkaWN0ZWRC
YXNlRWxlbWVudFVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IHRhc2sucHJlbG9hZChtX2RvY3VtZW50LCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1w
dHkoKSA/IG1fZG9jdW1lbnQtPmJhc2VVUkwoKSA6IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwp
OworICAgICAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHRva2VuLmF0dHJpYnV0ZXMoKS5iZWdpbigpOyBpdGVyICE9IHRva2VuLmF0dHJpYnV0
ZXMoKS5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGl0
ZXItPm1fbmFtZSwgaHJlZkF0dHIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGhyZWZWYWx1
ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGl0ZXItPm1fdmFsdWUuZGF0YSgp
LCBpdGVyLT5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9wcmVkaWN0ZWRCYXNl
RWxlbWVudFVSTCA9IEtVUkwobV9kb2N1bWVudFVSTCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdI
VE1MU3BhY2VzKGhyZWZWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNl
RWxlbWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCkKK3ZvaWQgSFRNTFByZWxvYWRT
Y2FubmVyOjpwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICAvLyBU
aGUgZmlyc3QgPGJhc2U+IGVsZW1lbnQgaXMgdGhlIG9uZSB0aGF0IHdpbnMuCi0gICAgaWYgKCFt
X3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSkKKyAgICAvLyA8c3R5bGU+IGlzIHRo
ZSBvbmx5IHBsYWNlIHdlIHNlYXJjaCBmb3IgdXJscyBpbiBub24tc3RhcnQvZW5kLXRhZyB0b2tl
bnMuCisgICAgaWYgKHByb2Nlc3NTdHlsZUNoYXJhY3RlcnModG9rZW4pKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IGJhc2VFbGVtZW50VVJMOworICAg
IGlmICghaXNTdGFydE9yRW5kVGFnKHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQXRv
bWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUo
KSk7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAgaWYgKHByb2Nlc3NQb3NzaWJs
ZVRlbXBsYXRlVGFnKHRhZ05hbWUsIHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisg
ICAgaWYgKHByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKHRhZ05hbWUsIHRva2VuKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghaXNTdGFydFRhZyh0b2tlbikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAocHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyh0YWdOYW1lLCB0b2tlbikpCisgICAgICAgIHJl
dHVybjsKKworICAgIFByZWxvYWRUYXNrIHRhc2sodGFnTmFtZSwgdG9rZW4uYXR0cmlidXRlcygp
KTsKKyAgICB0YXNrLmlzc3VlUHJlbG9hZFJlcXVlc3QobV9wcmVsb2FkZXIsIG1fcHJlZGljdGVk
QmFzZUVsZW1lbnRVUkwpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQcmVsb2FkU2Nhbm5lci5oCmluZGV4IGNiOGYzMzkxNDA5ZDExNzkyMDI0ZTBmY2E4Mjg5
MjUxMGM1YjJmNzkuLjlkMTlhM2ViZjQyMjRlZTk3YTJhOTY2N2UxNTJmMDg2Y2MwZWI5NWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCkBA
IC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBIVE1MUGFyc2VyT3B0aW9uczsKIGNsYXNzIEhUTUxUb2tlbjsKIGNsYXNzIEhUTUxU
b2tlbml6ZXI7CkBAIC00MiwyMSArNDEsMzIgQEAgY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xh
c3MgSFRNTFByZWxvYWRTY2FubmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUHJl
bG9hZFNjYW5uZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBIVE1M
UHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYpOworICAg
IC8vIEhUTUxQcmVsb2FkU2Nhbm5lciBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGhhdmUgYSBwb2lu
dGVyIHRvIERvY3VtZW50LgorICAgIEhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPEhU
TUxSZXNvdXJjZVByZWxvYWRlcj4mLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IEtV
UkwmIGRvY3VtZW50VVJMKTsKIAogICAgIHZvaWQgYXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVk
U3RyaW5nJik7Ci0gICAgdm9pZCBzY2FuKCk7CisgICAgdm9pZCBzY2FuKGNvbnN0IEtVUkwmIGRv
Y3VtZW50QmFzZUVsZW1lbnRVUkwpOwogCiBwcml2YXRlOgotICAgIHZvaWQgcHJvY2Vzc1Rva2Vu
KCk7Ci0gICAgdm9pZCB1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBi
YXNlRWxlbWVudFVSTCk7CisgICAgdm9pZCBwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJik7
CisKKyAgICBib29sIHByb2Nlc3NTdHlsZUNoYXJhY3RlcnMoY29uc3QgSFRNTFRva2VuJik7CisK
KyNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZVRl
bXBsYXRlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJik7
CisjZW5kaWYKKworICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKKyAgICBib29sIHByb2Nlc3NQb3Nz
aWJsZUJhc2VUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4m
KTsKKworICAgIFdlYWtQdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAot
ICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsK
ICAgICBDU1NQcmVsb2FkU2Nhbm5lciBtX2Nzc1NjYW5uZXI7Ci0gICAgT3duUHRyPEhUTUxUb2tl
bml6ZXI+IG1fdG9rZW5pemVyOwogICAgIEhUTUxUb2tlbiBtX3Rva2VuOworICAgIE93blB0cjxI
VE1MVG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBib29sIG1faW5TdHlsZTsKKyAgICBLVVJM
IG1fZG9jdW1lbnRVUkw7CiAgICAgS1VSTCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMOwogCiAj
aWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGEyNGQ2NmQz
OWY4ZjU5ZDZlNDEzN2Q4OTA5OWYzNDIyZDk4NzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcApAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTFJlc291cmNlUHJlbG9hZGVyLmgiCisK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNTdHJpbmdTYWZlVG9TZW5k
VG9Bbm90aGVyVGhyZWFkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFN0cmluZ0ltcGwq
IGltcGwgPSBzdHJpbmcuaW1wbCgpOworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKGltcGwtPmhhc09uZVJlZigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFByZWxvYWRSZXF1ZXN0Ojppc1NhZmVUb1NlbmRUb0Fub3RoZXJU
aHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJU
aHJlYWQobV9pbml0aWF0b3IpCisgICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhl
clRocmVhZChtX2NoYXJzZXQpCisgICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhl
clRocmVhZChtX3Jlc291cmNlVVJMKQorICAgICAgICAmJiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fu
b3RoZXJUaHJlYWQobV9iYXNlVVJMLnN0cmluZygpKTsKK30KKworS1VSTCBQcmVsb2FkUmVxdWVz
dDo6Y29tcGxldGVVUkwoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBkb2N1bWVu
dC0+Y29tcGxldGVVUkwobV9yZXNvdXJjZVVSTCwgbV9iYXNlVVJMLmlzRW1wdHkoKSA/IGRvY3Vt
ZW50LT51cmwoKSA6IG1fYmFzZVVSTCk7Cit9CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdCBQcmVs
b2FkUmVxdWVzdDo6cmVzb3VyY2VSZXF1ZXN0KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KFJlc291cmNlUmVxdWVzdChjb21wbGV0ZVVSTChkb2N1bWVudCkpKTsKKyAgICByZXF1ZXN0LnNl
dEluaXRpYXRvcihtX2luaXRpYXRvcik7CisKKyAgICAvLyBGSVhNRTogSXQncyBwb3NzaWJsZSBD
T1JTIHNob3VsZCB3b3JrIGZvciBvdGhlciByZXF1ZXN0IHR5cGVzPworICAgIGlmIChtX3Jlc291
cmNlVHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KQorICAgICAgICByZXF1ZXN0Lm11dGFi
bGVSZXNvdXJjZVJlcXVlc3QoKS5zZXRBbGxvd0Nvb2tpZXMobV9jcm9zc09yaWdpbk1vZGVBbGxv
d3NDb29raWVzKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBIVE1MUmVzb3VyY2VQ
cmVsb2FkZXI6OnByZWxvYWQoUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKK3sK
KyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHByZWxvYWQtPnJlc291cmNlUmVx
dWVzdChtX2RvY3VtZW50KTsKKyAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
LT5wcmVsb2FkKHByZWxvYWQtPm1fcmVzb3VyY2VUeXBlLCByZXF1ZXN0LCBwcmVsb2FkLT5tX2No
YXJzZXQpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxS
ZXNvdXJjZVByZWxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5NzExYmU1N2Y4NWNkOWVmMmUyMGYyOGM5
MWFjNGU3ZDI1ZWNhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhUTUxSZXNvdXJj
ZVByZWxvYWRlcl9oCisjZGVmaW5lIEhUTUxSZXNvdXJjZVByZWxvYWRlcl9oCisKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFByZWxvYWRSZXF1ZXN0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgaW5pdGlhdG9yLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNl
VVJMLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFByZWxvYWRSZXF1ZXN0KGluaXRpYXRvciwgcmVzb3VyY2VVUkws
IGJhc2VVUkwsIHJlc291cmNlVHlwZSkpOworICAgIH0KKyAgICBib29sIGlzU2FmZVRvU2VuZFRv
QW5vdGhlclRocmVhZCgpIGNvbnN0OworCisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlc291
cmNlUmVxdWVzdChEb2N1bWVudCopOworCitwcml2YXRlOgorICAgIFByZWxvYWRSZXF1ZXN0KGNv
bnN0IFN0cmluZyYgaW5pdGlhdG9yLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBL
VVJMJiBiYXNlVVJMLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUpCisgICAgICAg
IDogbV9pbml0aWF0b3IoaW5pdGlhdG9yKQorICAgICAgICAsIG1fcmVzb3VyY2VVUkwocmVzb3Vy
Y2VVUkwpCisgICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpCisgICAgICAgICwgbV9yZXNvdXJj
ZVR5cGUocmVzb3VyY2VUeXBlKQorICAgICAgICAsIG1fY3Jvc3NPcmlnaW5Nb2RlQWxsb3dzQ29v
a2llcyhmYWxzZSkKKyAgICB7IH0KKworICAgIEtVUkwgY29tcGxldGVVUkwoRG9jdW1lbnQqKTsK
KworICAgIFN0cmluZyBtX2luaXRpYXRvcjsKKyAgICBTdHJpbmcgbV9yZXNvdXJjZVVSTDsKKyAg
ICBLVVJMIG1fYmFzZVVSTDsKKworcHVibGljOgorICAgIENhY2hlZFJlc291cmNlOjpUeXBlIG1f
cmVzb3VyY2VUeXBlOworICAgIFN0cmluZyBtX2NoYXJzZXQ7CisgICAgYm9vbCBtX2Nyb3NzT3Jp
Z2luTW9kZUFsbG93c0Nvb2tpZXM7Cit9OworCitjbGFzcyBIVE1MUmVzb3VyY2VQcmVsb2FkZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhUTUxSZXNvdXJjZVByZWxvYWRlcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEhUTUxSZXNvdXJjZVBy
ZWxvYWRlcihEb2N1bWVudCogZG9jdW1lbnQpCisgICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKKyAgICAgICAgLCBtX3dlYWtGYWN0b3J5KHRoaXMpCisgICAgeyB9CisKKyAgICB2b2lkIHBy
ZWxvYWQoUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4pOworCisgICAgV2Vha1B0cjxIVE1MUmVz
b3VyY2VQcmVsb2FkZXI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNy
ZWF0ZVdlYWtQdHIoKTsgfQorCitwcml2YXRlOgorICAgIERvY3VtZW50KiBtX2RvY3VtZW50Owor
ICAgIFdlYWtQdHJGYWN0b3J5PEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gbV93ZWFrRmFjdG9yeTsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggOWQ0MDhlNjIxNjJmYmJiNmQyNDA4NjIzOTQ3
NWQyNmZhNWFhYWMwOC4uNGFiODJmZWUzMDMxNjM5MTFiYWJlMGExZjUxM2I0YzRlNGM0OTBjOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVx
dWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJl
cXVlc3QuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3Rf
aAogI2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAogCisjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9yaXR5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBAIC0zNCw3ICsz
NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxl
bWVudDsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184904</attachid>
            <date>2013-01-27 01:50:19 -0800</date>
            <delta_ts>2013-02-10 17:51:56 -0800</delta_ts>
            <desc>should build on Mac and win now</desc>
            <filename>bug-107807-20130127014712.patch</filename>
            <type>text/plain</type>
            <size>57077</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY3NDQ1OTUzMDFiMGJi
ZjljMGM4ZTc2YWEyNDI1NGI5Y2U2ZjVkNC4uNTk3NTEzODc4NDFiNTFmMGI2OGZhMDUwM2YyZTA5
Yjk2NjhhNzc3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMS0yNyAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUgZXhpc3Rpbmcg
SFRNTFByZWxvYWRTY2FubmVyIHRocmVhZGluZy1hd2FyZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEhUTUxQcmVsb2FkU2Nhbm5lciBhbmQgQ1NT
UHJlbG9hZFNjYW5uZXIgZG8gYSBudW1iZXIgb2YgdGhpbmdzLgorICAgICAgICBDU1NQcmVsb2Fk
U2Nhbm5lciBpcyBtb3N0bHkganVzdCBhIGhlbHBlciBjbGFzcyBmb3IgSFRNTFByZWxvYWRTY2Fu
bmVyLgorICAgICAgICBIVE1MUHJlbG9hZFNjYW5uZXIgcnVucyBpdHMgb3duIGNvcHkgb2YgdGhl
IEhUTUxUb2tlbml6ZXIgYW5kIHVzZXMKKyAgICAgICAgSFRNTFRva2VuaXplcjo6dXBkYXRlU3Rh
dGVGb3IgdG8gZW11bGF0ZSBlbm91Z2ggb2YgdGhlIFRyZWVCdWlsZGVyCisgICAgICAgIHRvIGdl
dCBhIHJlYWxpc3RpYyBzdHJlYW0gb2YgdG9rZW5zLiAgSXQgZG9lcyBzb21lIGFkZGl0aW9uYWwg
VHJlZUJ1aWxkZXIKKyAgICAgICAgZW11bGF0aW9uLCBpbmNsdWRpbmcgdHJhY2tpbmcgdGVtcGxh
dGUgdGFncyBhbmQgYmFzZSB0YWdzLCBidXQgbW9zdGx5CisgICAgICAgIGp1c3Qgc2NhbnMgdGhl
IHRva2VuIHN0cmVhbSBmb3Igc3RhcnQtdGFncyBhbmQgbG9va3MgZm9yIFVSTHMgaW4gdGhlbS4K
KyAgICAgICAgSXQgdHJhY2tzIHdoZW4gaXQgaGFzIHNlZW4gYSA8c3R5bGU+IHRhZyBhbmQgc3Rh
cnRzIHNlbmRpbmcgYWxsIGNoYXJhY3RlciB0b2tlbnMKKyAgICAgICAgdG8gdGhlIENTU1ByZWxv
YWRTY2FubmVyIHVudGlsIGEgPC9zdHlsZT4gdGFnIGlzIHNlZW4uCisgICAgICAgIEl0IGFsc28g
KHVuZm9ydHVuYXRlbHkpIGtub3dzIHNvbWUgYWJvdXQgdGhlIGxvYWRlciBndXRzIGFuZCBob3cg
dG8gY29uc3RydWN0CisgICAgICAgIGEgcHJvcGVyIENhY2hlZFJlc291cmNSZXF1ZXN0IGFuZCBp
c3N1ZSBhIHByZWxvYWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBoYXMgMyBtYWluIHBpZWNlczoK
KyAgICAgICAgLSBSZW1vdmUgRG9jdW1lbnQgYW5kIChhbmQgbG9hZGVyKSBkZXBlbmRlbmNpZXMg
ZnJvbSBIVE1MUHJlbG9hZFNjYW5uZXIvQ1NTUHJlbG9hZFNjYW5uZXIKKyAgICAgICAgICBUaGlz
IGlzIGRvbmUgdGhyb3VnaCBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgSFRNTFJlc291cmNlUHJlbG9h
ZGVyIGNsYXNzIHdoaWNoIGhvbGRzCisgICAgICAgICAgYSBEb2N1bWVudCogYW5kIGtub3dzIGhv
dyB0byB0YWxrIHRvIHRoZSBDYWNoZWRSZXNvdXJjZUxvYWRlci4KKyAgICAgICAgICBUaGUgcHJl
bG9hZCBzY2FubmVycyBhcmUgaGFuZGVkIGEgV2Vha1B0ciB0byB0aGUgSFRNTFJlc291cmNlUHJl
bG9hZGVyIGFuZCBzcGVhayB0bworICAgICAgICAgIGl0IHVzaW5nIGNhbGxPbk1haW5UaHJlYWQu
CisgICAgICAgIC0gUmVtb3ZlIEF0b21pY1N0cmluZy9RdWFsaWZpZWROYW1lIGNvbXBhcmlzb25z
IGZyb20gdGhlIHByZWxvYWQgc2Nhbm5lcnMuCisgICAgICAgICAgVW5mb3J0dW5hdGVseSBIVE1M
TmFtZXMgY29tcGFyaXNvbnMgd2lsbCBhbHdheXMgYmUgZmFsc2Ugb24gYSBub24tbWFpbiB0aHJl
YWQKKyAgICAgICAgICB3aXRoIG91ciBjdXJyZW50IGRlc2lnbiwgc28gd2UgaGF2ZSB0byB1c2Ug
c29tZSAidGhyZWFkU2FmZU1hdGNoIiBoZWxwZXJzIHdyaXR0ZW4KKyAgICAgICAgICBmb3IgdGhl
IEhUTUxCYWNrZ3JvdW5kUGFyc2VyLgorICAgICAgICAtIENsZWFuLXVwIEhUTUxQcmVsb2FkU2Nh
bm5lcnMgdG9rZW4tbG9vcCB0byBub3QgYmUgdGllZCB0byBoYXZpbmcgYSBUb2tlbml6ZXIuCisg
ICAgICAgICAgKE9uIGEgYmFja2dyb3VuZCB0aGVhZCwgdGhlIEhUTUxQcmVsb2FkU2Nhbm5lciB3
b24ndCBvd24gdGhlIHRva2VuaXplciwgaXQgd2lsbCBqdXN0CisgICAgICAgICAgIGJlIHBhc3Nl
ZCBpbiB0b2tlbnMgYW5kIGV4cGVjdGVkIHRvIGlzc3VlIGxvYWRzIGlmIG5lY2Vzc2FyeS4pCisK
KyAgICAgICAgSSdtIGhhcHB5IHRvIGJyZWFrIHRoaXMgcGF0Y2ggdXAgaW50byBzbWFsbGVyIHBp
ZWNlcyBpZiByZXZpZXdlciBoYXZlIHN1Z2dlc3Rpb25zIGFzIHRvIHdoaWNoCisgICAgICAgIHBp
ZWNlcyB0aGV5J2QgbGlrZS4KKyAgICAgICAgSSB0aGluayB0aGF0IHRoaW5ncyBjb3VsZCBiZSBt
YWRlIGV2ZW4gc2ltcGxlciBpZi93aGVuIHdlIHN0b3AgcHJlbG9hZC1zY2FubmluZyBvbiB0aGUg
bWFpbiB0aHJlYWQuCisgICAgICAgIEkgYWxzbyB0aGluayB0aGlzIGlzIGFub3RoZXIgZXhhbXBs
ZSBvZiB3aHkgd2UgcHJvYmFibHkgd2FudCBhIHRocmVhZC1hd2FyZSBodG1sTmFtZXMoKSBvYmpl
Y3QuCisgICAgICAgIFByZWxvYWRUYXNrIGlzIHNsaWdodGx5IGF3a3dhcmRseSBuYW1lZCwgYW5k
IG1heSBtb3JwaCBpbiB0aGUgZnV0dXJlLgorICAgICAgICBBbmQgZmluYWxseSBpdHMgbm90IGNs
ZWFyIGlmIEhUTUxSZXNvdXJjZVByZWxvYWRlciB3YW50cyB0byBiZSBpdHMgb3duIGNsYXNzLCBv
ciBpZgorICAgICAgICB3ZSBqdXN0IHdhbnQgdG8gcGFzcyBhcm91bmQgV2Vha1B0cjxIVE1MRG9j
dW1lbnRMb2FkZXI+IGluc3RlYWQuCisKKyAgICAgICAgVGhpcyBwYXNzZXMgYWxsIG9mIHRoZSBM
YXlvdXRUZXN0cyB1c2luZyB0aGUgbWFpbiB0aHJlYWQgcGFyc2VyLiAgSSdsbCBhZGQgc3VwcG9y
dCBmb3IgdGhlIGJhY2tncm91bmQKKyAgICAgICAgcGFyc2VyIGluIGEgZm9sbG93LXVwIHBhdGNo
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6Q1NTUHJlbG9hZFNjYW5u
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRSdWxlKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAoQ1NTUHJl
bG9hZFNjYW5uZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBh
cnNlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjppbnNlcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxv
YWRTY2FubmVyQW5kU2Nhbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmg6CisgICAgICAgIChIVE1MRG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRTYWZl
RXF1YWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJlYWRTYWZl
TWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3Jl
Ojppc1N0YXJ0T3JFbmRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6OnByb2Nl
c3NBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRUYXNrOjpjaGFyc2V0KToK
KyAgICAgICAgKFByZWxvYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRUYXNrOjpy
ZXNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6OnNob3VsZFByZWxv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6Omlzc3VlUHJlbG9hZFJlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5u
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVU
YWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzU3R5bGVD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vz
c1Bvc3NpYmxlU3R5bGVUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVy
Ojpwcm9jZXNzUG9zc2libGVCYXNlVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcmVsb2Fk
U2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUHJlbG9h
ZFNjYW5uZXIuaDoKKyAgICAgICAgKEhUTUxQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkUmVxdWVzdDo6aXNTYWZlVG9TZW5kVG9Bbm90
aGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1ZXN0Ojpjb21wbGV0ZVVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkUmVxdWVzdDo6cmVzb3VyY2VSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9hZCk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChQcmVsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQcmVsb2FkUmVxdWVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1
ZXN0OjpQcmVsb2FkUmVxdWVzdCk6CisgICAgICAgIChIVE1MUmVzb3VyY2VQcmVsb2FkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFJlc291cmNlUHJlbG9hZGVyOjpIVE1MUmVzb3VyY2VQcmVs
b2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFJlc291cmNlUHJlbG9hZGVyOjpjcmVhdGVX
ZWFrUHRyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6
CisKIDIwMTMtMDEtMjYgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW1dIERvbid0IHVzZSBnb21hIHRvIHByZXByb2Nlc3MgYmluZGluZ3MgaWRsIGZp
bGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMDQ5M2U5YzBmOWQ5ZDQ2MzAxNGQ2NjY3YzQwMDllZDhm
OTY0M2RlMy4uZmIzMzFjY2NlMjNlMWZkOTE5ZDQzZTdmMDc1NjExMTUxYjMzYTVjZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEzLTAxLTI3ICBFcmljIFNlaWRlbCAgPGVy
aWNAd2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIHRoZSBleGlzdGluZyBIVE1MUHJlbG9hZFNj
YW5uZXIgdGhyZWFkaW5nLWF3YXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDc4MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYktpdC52Y3Byb2ovV2ViS2l0RXhwb3J0cy5kZWYuaW46CisKIDIw
MTMtMDEtMjYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIGNvZGUgZm9yIGhhbmRsaW5nIE5ldHdvcmtQcm9jZXNzIGF1dGhlbnRpY2F0aW9uIGNo
YWxsZW5nZXMgaW4gV2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhZmI5YWVlMzk4
YTNkNjI0NmExYWE2ZWNiNWUyOGZjMjA2YzRhMjQxLi43ZmZkOGE4NjMyMzIxNTJkODdkMWM4ZWM5
MTk2ZGJmMzM0MzgzOWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTU0Niw2ICsxNTQ2LDcg
QEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxl
bWVudExpc3QuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKKyAgICBodG1sL3BhcnNlci9I
VE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHAKICAgICBodG1sL3Bh
cnNlci9IVE1MVG9rZW5pemVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
M2Q2ZTIzMTI4OTFhMGE4NDMwOTYzZDRlM2QyNDQ4Nzg5OTk0OTYwMC4uNjQwNDdmYWRiY2E5Njhk
NGRhYWUxNjhhZmFmOGZhMzUwYWFiMWMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0zNTcyLDYgKzM1NzIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJUaHJlYWQuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxSZXNvdXJjZVByZWxvYWRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MU2NyaXB0UnVubmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNj
cmlwdFJ1bm5lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVySG9zdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDI5OThjOWQ1MTRkN2Q1MmIxYzliYWRiY2VjOTc2
YzVlYTMzYjM0NDYuLjVmMzI1NDRmYzY4MjdkNjk5ZjdlNzVkODUzMDQyNzAxOWM4MzJmMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQpAQCAtNzI2LDYgKzcyNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvcGFy
c2VyL0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwIFwKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2Vy
VGhyZWFkLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCBcCisg
ICAgaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCBcCiAgICAgaHRtbC9wYXJz
ZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgXAogICAgIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFj
a2VyLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAgXApAQCAtMTg5OCw2
ICsxODk5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdC5oIFwKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmggXAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oIFwKKyAgICBodG1sL3BhcnNlci9I
VE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5l
ci5oIFwKICAgICBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oIFwKICAgICBodG1s
L3BhcnNlci9IVE1MVG9rZW4uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNGQ1ODY4MTJjMTlhNzg4
OGE3MDMyYzc2NzU3MTFhNzMwNDg0YmU5OC4uZjM5NzU0YzVjMGU2M2U0NDIxZGEyMDVmMDQyZjY1
MTgzZDAyZmQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzM3NCw2ICszMzc0LDggQEAKICAgICAg
ICAgICAgICdodG1sL3BhcnNlci9IVE1MUGFyc2VyVGhyZWFkLmgnLAogICAgICAgICAgICAgJ2h0
bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oJywKKyAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1M
UmVzb3VyY2VQcmVsb2FkZXIuY3BwJywKKyAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUmVz
b3VyY2VQcmVsb2FkZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1
bm5lci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCcs
CiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDgyNmNmYTRi
M2M5ZDFlMTc3NGJhY2FhNThmMjAwMzJiY2UyNmM4NDAuLjc0NDAxZjM1NTE1NTNjMmNjZTUyY2Vi
NmRkMzMwYjU3MjMzOTY1OTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCkBAIC02NDkyNSw2ICs2NDkyNSwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxl
PgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxwYXJzZXJcSFRNTFJlc291
cmNlUHJlbG9hZGVyLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGh0bWxccGFyc2VyXEhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxw
YXJzZXJcSFRNTFNjcmlwdFJ1bm5lci5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCA2NmEzMDIy
YjM1NWU3OWRiNWFjOTc3ODhlYmRhMGZmYjc2ZGQ4ZDg1Li4zYjAwNzNjYmE2YzM2ZTgzOWI1N2Nj
ZWNjYTNlNjdjODYyM2Q5MDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKQEAgLTQ4ODQsNiArNDg4NCw3IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUGFyc2VyU2NoZWR1bGVyLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxQYXJzZXJUaHJlYWQuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFByZWxvYWRTY2Fu
bmVyLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxS
ZXNvdXJjZVByZWxvYWRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1s
XHBhcnNlclxIVE1MU2NyaXB0UnVubmVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGh0bWxccGFyc2VyXEhUTUxTb3VyY2VUcmFja2VyLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxUb2tlbml6ZXIuY3BwIiAvPgpAQCAtNzkyNSw2
ICs3OTI2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxQ
YXJzZXJTY2hlZHVsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFy
c2VyXEhUTUxQYXJzZXJUaHJlYWQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0
bWxccGFyc2VyXEhUTUxQcmVsb2FkU2Nhbm5lci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFxwYXJzZXJcSFRNTFJlc291cmNlUHJlbG9hZGVyLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MU2NyaXB0UnVubmVyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MU2NyaXB0UnVubmVySG9zdC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFNvdXJjZVRy
YWNrZXIuaCIgLz4KQEAgLTg2NzUsNCArODY3Nyw0IEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBM
YWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUxMmVkZWUwMjhmZmMy
YzM3YjVhODcyNzQwZjJiMjU5MWUyYzQyN2MuLmYxMzE4OWE3MGIxN2E4MjcyNzNjY2EzMDE1MmU3
ZWI0NThmNGMwMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTQzOTYsNiArNDM5Niw4IEBACiAJCUE4RDA2NUFFMEEyNDQ2Q0Qw
MDVFNzIwMyAvKiBKU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQwNjVBRDBBMjQ0NkNEMDA1RTcyMDMgLyog
SlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlBOEQwNkIzOTBBMjY1RENEMDA1
RTcyMDMgLyogSFRNTE5hbWVzLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQwNkIzNzBBMjY1RENEMDA1RTcyMDMgLyogSFRN
TE5hbWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJQThEMDZC
M0EwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQwNkIzODBBMjY1RENEMDA1RTcyMDMgLyogSFRN
TE5hbWVzLmNwcCAqLzsgfTsKKwkJQThEMjIzRkQxNkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNv
dXJjZVByZWxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEQyMjNGQjE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291cmNlUHJlbG9hZGVy
LmNwcCAqLzsgfTsKKwkJQThEMjIzRkUxNkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVBy
ZWxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThEMjIzRkMxNkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVByZWxvYWRlci5oICovOyB9
OwogCQlBOERGM0ZDRTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4REYz
RkM2MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oICovOyB9
OwogCQlBOERGM0ZDRjA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThE
RjNGQzcwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCAq
LzsgfTsKIAkJQThERjNGRDAwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDODA5N0ZB
MEZCMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE3MDksNiArMTE3MTEsOCBAQAogCQlBOEQwNjVB
RDBBMjQ0NkNEMDA1RTcyMDMgLyogSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEQwNkIzNzBBMjY1RENEMDA1RTcyMDMg
LyogSFRNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MTmFt
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThEMDZCMzgwQTI2NURDRDAwNUU3
MjAzIC8qIEhUTUxOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSFRNTE5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThEMjIzRkIx
NkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwOyBwYXRo
ID0gcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4RDIyM0ZDMTZCNTJFNEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSFRNTFJlc291cmNlUHJlbG9h
ZGVyLmg7IHBhdGggPSBwYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4REYzRkM2MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MRm9ybUNv
bnRyb2xzQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThERjNGQzcwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4REYzRkM4MDk3
RkEwRkIwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSFRNTENvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE1NTE5LDEwICsxNTUyMyw2IEBACiAJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAvKiBj
YW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUZC
OTEzOTFFMTZBRTRCMEIwMDFGRTY4MiAvKiBDYW52YXNQYXRoTWV0aG9kcy5jcHAgKi8sCi0JCQkJ
RkI5MTM5MUYxNkFFNEIwQjAwMUZFNjgyIC8qIENhbnZhc1BhdGhNZXRob2RzLmggKi8sCi0JCQkJ
RkI5MTM5MjAxNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaCAqLywKLQkJCQlGQjkxMzkyMTE2
QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5pZGwgKi8sCiAJCQkJNDlFRUNEQ0MxMDUwM0MyMzAw
MDk5RkFCIC8qIEFycmF5QnVmZmVyLmlkbCAqLywKIAkJCQk0OUVFQ0RDOTEwNTAzQzIzMDAwOTlG
QUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAqLywKIAkJCQk2RTRFOTFBNzEwRjdGQjMxMDBBMjc3
OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovLApAQCAtMTU1MzAsNiArMTU1MzAs
OCBAQAogCQkJCTQ5NDg0RkIzMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAg
Ki8sCiAJCQkJNDk0ODRGQjQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmggKi8s
CiAJCQkJNDk0ODRGQjUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmlkbCAqLywK
KwkJCQlGQjkxMzkxRTE2QUU0QjBCMDAxRkU2ODIgLyogQ2FudmFzUGF0aE1ldGhvZHMuY3BwICov
LAorCQkJCUZCOTEzOTFGMTZBRTRCMEIwMDFGRTY4MiAvKiBDYW52YXNQYXRoTWV0aG9kcy5oICov
LAogCQkJCTQ5NDg0RkI2MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLywK
IAkJCQk0OTQ4NEZCNzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5oICovLAogCQkJ
CTQ5NDg0RkI4MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLywKQEAgLTE1
NTQ4LDYgKzE1NTUwLDggQEAKIAkJCQkyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZp
ZXcuY3BwICovLAogCQkJCTJFOTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICov
LAogCQkJCTJFOTdDQ0U5MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5pZGwgKi8sCisJCQkJ
RkI5MTM5MjAxNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaCAqLywKKwkJCQlGQjkxMzkyMTE2
QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5pZGwgKi8sCiAJCQkJNzcyODY5NEIxNEY4ODgyNTAw
RjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5
NEMxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovLAog
CQkJCTc3Mjg2OTREMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMuaWRsICovLApAQCAtMTg1OTAsNiArMTg1OTQsOCBAQAogCQkJCTk3NDE4N0QxMTZBNzkzMjIw
MEZBNzdBNyAvKiBIVE1MUGFyc2VyVGhyZWFkLmggKi8sCiAJCQkJOTc3QjM4NTkxMjI4ODNFOTAw
QjgxRkY4IC8qIEhUTUxQcmVsb2FkU2Nhbm5lci5jcHAgKi8sCiAJCQkJOTc3QjM4NUExMjI4ODNF
OTAwQjgxRkY4IC8qIEhUTUxQcmVsb2FkU2Nhbm5lci5oICovLAorCQkJCUE4RDIyM0ZCMTZCNTJF
NEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwICovLAorCQkJCUE4RDIyM0ZD
MTZCNTJFNEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCAqLywKIAkJCQk5NzdC
Mzg1QjEyMjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lci5jcHAgKi8sCiAJCQkJOTc3
QjM4NUMxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxTY3JpcHRSdW5uZXIuaCAqLywKIAkJCQk5NzdC
Mzg1RDEyMjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCAqLywKQEAgLTE5
NTE5LDggKzE5NTI1LDggQEAKIAkJCQk1MTg5RjAxQzEwQjM3QkQ5MDBGM0M3MzkgLyogSlNQb3BT
dGF0ZUV2ZW50LmggKi8sCiAJCQkJOTMzQTE0QjYwQjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2
ZW50LmNwcCAqLywKIAkJCQk5MzNBMTRCNzBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQu
aCAqLywKLQkJCQlFMTdCNDkxRjE2QTlCOEZGMDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQu
aCAqLywKIAkJCQlFMTdCNDkyMDE2QTlCOEZGMDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQu
Y3BwICovLAorCQkJCUUxN0I0OTFGMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVu
dC5oICovLAogCQkJCUE4NjYyOUNBMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwICov
LAogCQkJCUE4NjYyOUM5MDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCAqLywKIAkJCQkz
MUMwRkYzOTBFNENFRkFDMDA3RDZGRTUgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi8s
CkBAIC0yMzA5MCw2ICsyMzA5Niw3IEBACiAJCQkJQjFENUVDQjUxMzRCNThEQTAwODdDNzhGIC8q
IENhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNEU5MUFEMTBGN0ZCMzEw
MEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDk0ODRGQzIxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQlGQjkxMzkyNjE2QUU0QzJGMDAxRkU2ODIgLyogQ2FudmFzUGF0aE1ldGhvZHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkM1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0
ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTQ4NEZDNTEwMkNGMjNDMDAxODhERDMgLyogQ2Fu
dmFzUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUREMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMTQ5LDYgKzIz
MTU2LDcgQEAKIAkJCQlFMUExNDcwODExMTAyQjE1MDBFRUMwRjMgLyogQ29udGFpbmVyTm9kZUFs
Z29yaXRobXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCOTgxMEU4MjA3MjUwMEIyNTk2NSAv
KiBDb250ZW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdCNzkxQTQxNEM2QTYyOTAwRjIw
MkQxIC8qIENvbnRlbnREaXN0cmlidXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjkxOUExRTkx
NkIzMzc2NjAwNzg3MjEzIC8qIENvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU5
MTAyRkJDMTQzMjdEM0IwMDNDOUQwNCAvKiBDb250ZW50U2VhcmNoVXRpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QzQ3MURDMTJGOTI1QkQwMDg2MzU0QiAvKiBDb250ZW50U2VjdXJpdHlQb2xp
Y3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3Qjc5MUE2MTRDNkE2MjkwMEYyMDJEMSAvKiBDb250
ZW50U2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzYwNiw2ICsyMzYxNCw3IEBA
CiAJCQkJRTEyODRCRDYxMDQ0QTAxRTAwRUFFQjUyIC8qIERPTVBhZ2VUcmFuc2l0aW9uRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQ0U1M0U4MEE4RDE4RTcwMDIyOTQ3RCAvKiBET01QYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBNTQ4ODE3MTRFNDMyQTEwMDZBRTA1QSAvKiBET01Q
YXRjaFN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZCOTEzOTI0MTZBRTRDMTcwMDFGRTY4
MiAvKiBET01QYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUM2RTRFQzBENzQ1RTJCMDA2NDQy
RTkgLyogRE9NUGx1Z2luLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUM2RTRGMDBENzQ1RTM4MDA2
NDQyRTkgLyogRE9NUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUEzN0JCMDk3
QzcxNUYwMDE5RjNEOCAvKiBET01Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0MzExLDYg
KzI0MzIwLDcgQEAKIAkJCQlBNDNCRjU5OTExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNz
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDMzQTZBN0MxNDdFMDdEMjAwNTA5QjM2IC8q
IEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QTMw
QTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxRdW90ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE4RDIyM0ZFMTZCNTJFNEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4NzFEQzI1MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MU2NyaXB0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NzUxMjI4ODNFOTAwQjgxRkY4IC8qIEhU
TUxTY3JpcHRSdW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0IzODc2MTIyODgzRTkwMEI4
MUZGOCAvKiBIVE1MU2NyaXB0UnVubmVySG9zdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDQ4OSw3
ICsyNDQ5OSw2IEBACiAJCQkJQjI3NTM1NzYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemVIYXNo
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQkEwQTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNj
cmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBG
MDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQjA5REI1MTZB
RjVGNkMwMDg1MzhFNyAvKiBTdG9yYWdlU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
QTE1RUNBMTJCMDNGNTAwMDNBNTgzQSAvKiBKU0FuYWx5c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ5RUVDRjFDMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmll
dy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDU3NSw2ICsyNDU4NCw3IEBACiAJCQkJQTlEMjQ4MDkw
RDc1N0U3RDAwRkRGOTU5IC8qIEpTRE9NTWltZVR5cGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTJDQ0E5RTMxNUUzRjYyQzAwNTNDNzdGIC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDRTUzRTAwQThEMTg4MTAwMjI5NDdEIC8qIEpTRE9NUGFy
c2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGQjkxMzkyQTE2QUU0RkMwMDAxRkU2ODIgLyogSlNE
T01QYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOUQyNDdGRjBENzU3RTY5MDBGREY5NTkgLyog
SlNET01QbHVnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZERjk1
OSAvKiBKU0RPTVBsdWdpbkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVBODZCNjBDMzM2
N0U4MDBFRUE2NDkgLyogSlNET01TZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjUxNDEs
NiArMjUxNTEsNyBAQAogCQkJCUE3OEU1MjcwMTM0NkJEMTcwMEFEOUMzMSAvKiBNZXRlclNoYWRv
d0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RERDREE1MTM4NDUwMUMwMDA4Qjc5MyAv
KiBNSFRNTEFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RERDREE3MTM4NDUwMUMwMDA4
Qjc5MyAvKiBNSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkUwNzc1MzQxNkIxQkQ0
QzAwNEQ5OTM2IC8qIE1pY3JvRGF0YUF0dHJpYnV0ZVRva2VuTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUIzNzVFREIxNDQ3OEEwMTAwRjNDQUU1IC8qIE1pY3JvRGF0YUl0ZW1MaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzN0REQ0Q5NTEzODQ0RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzJDNEYwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBl
UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjU3MDgsNiArMjU3MTksNyBAQAogCQkJCTUx
RTBCQjM4MERBNUFDQjYwMEE5RTQxNyAvKiBTdG9yYWdlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTBEMEU4MzBGRjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzU1RTM4QkYxMDA0MEQ1RDAwQTU2QkRCIC8qIFN0b3JhZ2VOYW1lc3BhY2VJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUIwOURCNTE2QUY1RjZDMDA4NTM4RTcgLyogU3Rv
cmFnZVN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTEwMkQ5NDBGRDlBQTJEMDBGQUZG
MDQgLyogU3RvcmFnZVN5bmNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFGMjMxODBE
QzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMUYy
MzFBMERDMTYwREEwMDRGMDAzMiAvKiBTdG9yYWdlVGhyZWFkLmggaW4gSGVhZGVycyAqLywKQEAg
LTI2MjgyLDExICsyNjI5NCw2IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhT
TFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEz
Mzc5IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgw
MDAwOERDRSAvKiBaZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkI5MTM5MjQxNkFFNEMx
NzAwMUZFNjgyIC8qIERPTVBhdGguaCBpbiBIZWFkZXJzICovLAotCQkJCUZCOTEzOTI2MTZBRTRD
MkYwMDFGRTY4MiAvKiBDYW52YXNQYXRoTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkI5
MTM5MkExNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MkUwNzc1MzQxNkIxQkQ0QzAwNEQ5OTM2IC8qIE1pY3JvRGF0YUF0dHJpYnV0ZVRva2VuTGlzdC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMjkxOUExRTkxNkIzMzc2NjAwNzg3MjEzIC8qIENvbnRlbnRG
aWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjY3NTgsNiArMjY3NjUsNyBAQAogCQkJCUIxODI3
NDkzMTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTZFNEU5MUFDMTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRl
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkI5MTM5MjcxNkFFNEMzNDAwMUZF
NjgyIC8qIENhbnZhc1BhdGhNZXRob2RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkM0
MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5NDg0RkM0MTAyQ0YyM0MwMDE4OEREMyAvKiBDYW52YXNQcm94eS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0OUM3QjlEQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2ODA2LDYgKzI2ODE0LDcgQEAKIAkJCQlBN0E3OENE
NTE1MzJCQTYyMDA2QzIxRTQgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTU3Qjc5MUEzMTRDNkE2MjkwMEYyMDJEMSAvKiBDb250ZW50RGlz
dHJpYnV0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMjkxOUExRUIxNkIzMzc4OTAwNzg3MjEz
IC8qIENvbnRlbnRGaWx0ZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1OTEwMkZCQjE0MzI3
RDNCMDAzQzlEMDQgLyogQ29udGVudFNlYXJjaFV0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3QzQ3MURCMTJGOTI1QkQwMDg2MzU0QiAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTdCNzkxQTUxNEM2QTYyOTAwRjIwMkQxIC8qIENvbnRlbnRTZWxl
Y3RvclF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc1OTEsNiArMjc2MDAsNyBAQAogCQkJ
CUE0M0JGNTk4MTE0OTI5MEEwMEM2NDNDQSAvKiBIVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTAzM0E2QTdFMTQ3RTA3RTcwMDUwOUIzNiAvKiBIVE1MUHJvcGVydGll
c0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY3QTUwQTE1Njk3ODAwMEE0
MjM0IC8qIEhUTUxRdW90ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThEMjIzRkQx
NkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBODcxREMyMjBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFNjcmlwdEVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM4NzQxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxTY3Jp
cHRSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgxMzY5RDkwOTczNzRGNjAwRDc0NDYz
IC8qIEhUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjc4NjQsNiArMjc4
NzQsNyBAQAogCQkJCUE5QzZFNjQ3MEQ3NDY1Q0EwMDY0NDJFOSAvKiBKU0RPTU1pbWVUeXBlQXJy
YXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJDQ0E5RTIxNUUzRjYyQzAwNTNDNzdG
IC8qIEpTRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNF
NTNERjBBOEQxODgxMDAyMjk0N0QgLyogSlNET01QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkI5MTM5MkIxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOUQyNDdGRTBENzU3RTY5MDBGREY5NTkgLyogSlNET01QbHVnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTlEMjQ4MDAwRDc1N0U2OTAwRkRGOTU5IC8qIEpTRE9NUGx1Z2luQXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU2NEMwRDc0NjVFNzAwNjQ0MkU5IC8qIEpT
RE9NUGx1Z2luQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODA5Miw3ICsyODEw
Myw2IEBACiAJCQkJQTlEMjQ3RjcwRDc1N0UzNDAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0REMwRDM3MDlGRUQwNzMwMDdCMDIzNSAvKiBKU05vZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEOUMyNjQwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTm9kZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxQUIwOURCNDE2QUY1RjZDMDA4NTM4RTcgLyog
U3RvcmFnZVN0cmF0ZWd5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MTE1QjcyMDlGODRDRDYw
MENBNEZDMSAvKiBKU05vZGVGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCNzczNjEw
QzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0I3NzM2MzBDMTc4NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVyQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjg1MDksNiArMjg1MTksNyBAQAogCQkJCUE3OEU1MjZGMTM0
NkJEMTcwMEFEOUMzMSAvKiBNZXRlclNoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzdERENEQTQxMzg0NTAxQzAwMDhCNzkzIC8qIE1IVE1MQXJjaGl2ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzN0REQ0RBNjEzODQ1MDFDMDAwOEI3OTMgLyogTUhUTUxQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMkUwNzc1MzExNkIxQkQxMzAwNEQ5OTM2IC8qIE1pY3JvRGF0YUF0
dHJpYnV0ZVRva2VuTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5QjM3NUVEQTE0NDc4QTAx
MDBGM0NBRTUgLyogTWljcm9EYXRhSXRlbUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUIy
QjdBQzExNTA5ODUwQTAwODkzMkNDIC8qIE1pY3JvRGF0YUl0ZW1WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzN0REQ0Q5NDEzODQ0RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI4OTcyLDYgKzI4OTgzLDcgQEAKIAkJCQk1MUUwQkIzOTBEQTVBQ0I2
MDBBOUU0MTcgLyogU3RvcmFnZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTBEMEU4MjBG
RjQyNzI5MDBBQzI2NDQgLyogU3RvcmFnZU5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDNTVFMzhDMDEwMDQwRDVEMDBBNTZCREIgLyogU3RvcmFnZU5hbWVzcGFjZUltcGwuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMUFCMDlEQjQxNkFGNUY2QzAwODUzOEU3IC8qIFN0b3JhZ2VTdHJh
dGVneS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTEwMkQ5NTBGRDlBQTJEMDBGQUZGMDQgLyog
U3RvcmFnZVN5bmNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMUYyMzE3MERDMTYw
REEwMDRGMDAzMiAvKiBTdG9yYWdlVGFzay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTFGMjMx
OTBEQzE2MERBMDA0RjAwMzIgLyogU3RvcmFnZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI5MjU3LDggKzI5MjY5LDggQEAKIAkJCQk0OUU5MTFDRjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJh
bnNmb3JtT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1REIxQkM2QjEwNzE1QTY0
MDBFRkFBNDkgLyogVHJhbnNmb3JtU291cmNlTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0OTQ1QkZEMzEzQ0Y4MDkwMDBDQzNCMzggLyogVHJhbnNmb3JtU3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTdCNDkxNTE2QTlCMDk0MDAxQzg4
MzkgLyogVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RTkxMUQxMEVG
ODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODU0RkU3MzYwQTIyOTdCRTAwNThEN0FEIC8qIFRyYXZlcnNhbC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEQ2NEI1QzEzNEE1QjZCMDBFNThGREEgLyogVHJlZVNjb3BlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0UxRkVGMTRBQUNCNkUwMDVCN0NCNiAvKiBUcmVlU2Nv
cGVBZG9wdGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk0MzUsMTAgKzI5NDQ3LDYgQEAKIAkJ
CQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlGQjkxMzkyNzE2QUU0QzM0MDAxRkU2ODIgLyogQ2FudmFz
UGF0aE1ldGhvZHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkI5MTM5MkIxNkFFNEZDMDAwMUZF
NjgyIC8qIEpTRE9NUGF0aC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTA3NzUzMTE2QjFCRDEz
MDA0RDk5MzYgLyogTWljcm9EYXRhQXR0cmlidXRlVG9rZW5MaXN0LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTI5MTlBMUVCMTZCMzM3ODkwMDc4NzIxMyAvKiBDb250ZW50RmlsdGVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQ
cmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2Fk
U2Nhbm5lci5jcHAKaW5kZXggOGVlYzgxYjExZGZjM2FmZTRiYjg5MzEzNTNjOWM3MjBkMTVmMGY4
Ni4uNTRjZjExZGM3NWYyNTg1ZjJlMGQyMDViZjA4NDI3ZjQ2MmMzNjY1OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcApAQCAtMzIsMTUg
KzMyLDE2IEBACiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJ
bml0aWF0b3JzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUNTU1ByZWxvYWRTY2FubmVyOjpDU1NQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCogZG9jdW1l
bnQpCi0gICAgOiBtX3N0YXRlKEluaXRpYWwpCi0gICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQor
Q1NTUHJlbG9hZFNjYW5uZXI6OkNTU1ByZWxvYWRTY2FubmVyKGNvbnN0IFdlYWtQdHI8SFRNTFJl
c291cmNlUHJlbG9hZGVyPiYgcHJlbG9hZGVyKQorICAgIDogbV9wcmVsb2FkZXIocHJlbG9hZGVy
KQorICAgICwgbV9zdGF0ZShJbml0aWFsKQogewogfQogCkBAIC0xOTMsMTEgKzE5NCwxMyBAQCBz
dGF0aWMgU3RyaW5nIHBhcnNlQ1NTU3RyaW5nT3JVUkwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCiB2b2lkIENTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiB7CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBt
X3J1bGUubGVuZ3RoKCkpKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5n
T3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7Ci0g
ICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwo
dmFsdWUpKSk7Ci0gICAgICAgICAgICByZXF1ZXN0LnNldEluaXRpYXRvcihjYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzKTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNhY2hl
ZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQs
IHJlcXVlc3QsIFN0cmluZygpKTsKKyAgICAgICAgU3RyaW5nIHVybCA9IHBhcnNlQ1NTU3RyaW5n
T3JVUkwobV9ydWxlVmFsdWUuY2hhcmFjdGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7Cisg
ICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgS1VSTCBiYXNlRWxlbWVu
dFVSTDsgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBhc3NlZCBpbiBmcm9tIHRoZSBIVE1MUHJl
bG9hZFNjYW5lciB2aWEgc2NhbigpIQorICAgICAgICAgICAgT3duUHRyPFByZWxvYWRSZXF1ZXN0
PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBjYWNo
ZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3NzLCB1cmwsIGJhc2VFbGVtZW50VVJMLCBD
YWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIHRoaXMgYmUgaW5jbHVkaW5nIHRoZSBjaGFyc2V0IGluIHRoZSBwcmVsb2FkIHJlcXVlc3Q/
CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkhUTUxSZXNvdXJjZVByZWxvYWRl
cjo6cHJlbG9hZCwgbV9wcmVsb2FkZXIsIHJlcXVlc3QucmVsZWFzZSgpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgbV9zdGF0ZSA9IEluaXRpYWw7CiAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSgiY2hhcnNldCIsIG1fcnVsZS5jaGFyYWN0ZXJzKCksIG1fcnVsZS5sZW5ndGgoKSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaAppbmRleCA4
ZTE5Mjk2NWU3ZWEwYzk0MmI3YjgyMGE1YzU4NTQ2Yzk3YjYxYTY4Li5mMzE2Y2VjNzYyNWUwNTQz
YzZmMTg1NmYxZGRlNGY0YzBmOGNhODYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKQEAgLTI3LDE3ICsyNywxOCBAQAogI2lmbmRlZiBDU1NQ
cmVsb2FkU2Nhbm5lcl9oCiAjZGVmaW5lIENTU1ByZWxvYWRTY2FubmVyX2gKIAorI2luY2x1ZGUg
IkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIERvY3VtZW50OwogY2xhc3MgSFRNTFRva2VuOwogCiBjbGFzcyBDU1NQcmVsb2FkU2Nh
bm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTUHJlbG9hZFNjYW5uZXIpOwogcHVi
bGljOgotICAgIGV4cGxpY2l0IENTU1ByZWxvYWRTY2FubmVyKERvY3VtZW50Kik7CisgICAgZXhw
bGljaXQgQ1NTUHJlbG9hZFNjYW5uZXIoY29uc3QgV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2Fk
ZXI+Jik7CiAKICAgICB2b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxUb2tl
biYpOwpAQCAtNTYsMTQgKzU3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIERvbmVQYXJzaW5nSW1w
b3J0UnVsZXMsCiAgICAgfTsKIAotICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyIGMpOwor
ICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyKTsKICAgICB2b2lkIGVtaXRSdWxlKCk7CiAK
KyAgICBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gbV9wcmVsb2FkZXI7CisKICAgICBT
dGF0ZSBtX3N0YXRlOwogICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlOwogICAgIFN0cmluZ0J1aWxk
ZXIgbV9ydWxlVmFsdWU7Ci0KLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmlu
ZGV4IDAyOTE0YjIxMzkyZmRiODA0MDRjMWY2YjBjZTE3MzA5ZmRmYmVhNWMuLjZlZWM0ZTIwMDMx
ZDhjZjE0MTA0YzZlN2M4NTdjMjMxMDhlZjM3OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtODUsNiArODUsNyBAQCBIVE1M
RG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIHJlcG9ydEVycm9ycwogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAg
ICAsIG1fd2Vha0ZhY3RvcnkodGhpcykKICNlbmRpZgorICAgICwgbV9wcmVsb2FkZXIoYWRvcHRQ
dHIobmV3IEhUTUxSZXNvdXJjZVByZWxvYWRlcihkb2N1bWVudCkpKQogICAgICwgbV9lbmRXYXNE
ZWxheWVkKGZhbHNlKQogICAgICwgbV9oYXZlQmFja2dyb3VuZFBhcnNlcihmYWxzZSkKICAgICAs
IG1fcHVtcFNlc3Npb25OZXN0aW5nTGV2ZWwoMCkKQEAgLTM3NSwxMCArMzc2LDEwIEBAIHZvaWQg
SFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQog
ICAgIGlmIChpc1dhaXRpbmdGb3JTY3JpcHRzKCkpIHsKICAgICAgICAgQVNTRVJUKG1fdG9rZW5p
emVyLT5zdGF0ZSgpID09IEhUTUxUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKICAgICAgICAg
aWYgKCFtX3ByZWxvYWRTY2FubmVyKSB7Ci0gICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyID0g
YWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpLCBtX29wdGlvbnMpKTsK
KyAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0cihuZXcgSFRNTFByZWxvYWRT
Y2FubmVyKG1fcHJlbG9hZGVyLT5jcmVhdGVXZWFrUHRyKCksIG1fb3B0aW9ucywgZG9jdW1lbnQo
KS0+dXJsKCkpKTsKICAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPmFwcGVuZFRvRW5kKG1f
aW5wdXQuY3VycmVudCgpKTsKICAgICAgICAgfQotICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5z
Y2FuKCk7CisgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPnNjYW4oZG9jdW1lbnQoKS0+YmFzZUVs
ZW1lbnRVUkwoKSk7CiAgICAgfQogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRX
cml0ZUhUTUwoY29va2llLCBtX2lucHV0LmN1cnJlbnQoKS5jdXJyZW50TGluZSgpLnplcm9CYXNl
ZEludCgpKTsKQEAgLTQ1Myw5ICs0NTQsOSBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5z
ZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICAvLyBDaGVjayB0aGUg
ZG9jdW1lbnQud3JpdGUoKSBvdXRwdXQgd2l0aCBhIHNlcGFyYXRlIHByZWxvYWQgc2Nhbm5lciBh
cwogICAgICAgICAvLyB0aGUgbWFpbiBzY2FubmVyIGNhbid0IGRlYWwgd2l0aCBpbnNlcnRpb25z
LgogICAgICAgICBpZiAoIW1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIpCi0gICAgICAgICAgICBt
X2luc2VydGlvblByZWxvYWRTY2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5l
cihkb2N1bWVudCgpLCBtX29wdGlvbnMpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uUHJlbG9h
ZFNjYW5uZXIgPSBhZG9wdFB0cihuZXcgSFRNTFByZWxvYWRTY2FubmVyKG1fcHJlbG9hZGVyLT5j
cmVhdGVXZWFrUHRyKCksIG1fb3B0aW9ucywgZG9jdW1lbnQoKS0+dXJsKCkpKTsKICAgICAgICAg
bV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQoc291cmNlKTsKLSAgICAgICAg
bV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+c2NhbigpOworICAgICAgICBtX2luc2VydGlvblBy
ZWxvYWRTY2FubmVyLT5zY2FuKGRvY3VtZW50KCktPmJhc2VFbGVtZW50VVJMKCkpOwogICAgIH0K
IAogICAgIGVuZElmRGVsYXllZCgpOwpAQCAtNTE2LDcgKzUxNyw3IEBAIHZvaWQgSFRNTERvY3Vt
ZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5hcHBlbmRUb0VuZChzb3Vy
Y2UpOwogICAgICAgICAgICAgaWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkKLSAgICAgICAgICAg
ICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgICAgICAgICAgbV9wcmVsb2Fk
U2Nhbm5lci0+c2Nhbihkb2N1bWVudCgpLT5iYXNlRWxlbWVudFVSTCgpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNjk4LDcgKzY5OSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBl
bmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2NhbigpCiB7CiAgICAgQVNT
RVJUKG1fcHJlbG9hZFNjYW5uZXIpOwogICAgIG1fcHJlbG9hZFNjYW5uZXItPmFwcGVuZFRvRW5k
KG1faW5wdXQuY3VycmVudCgpKTsKLSAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAg
bV9wcmVsb2FkU2Nhbm5lci0+c2Nhbihkb2N1bWVudCgpLT5iYXNlRWxlbWVudFVSTCgpKTsKIH0K
IAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
KiBjYWNoZWRSZXNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmgKaW5kZXggZjE5Y2IxMjI5NDVlZjU5NjFmMTdmNzBiOTVkZWQzMzQ4NGI1
YmMxZi4uY2FkYjJjMTcyNzBhMzljZjZjODEwZDExY2U3OTg0NTdjY2QzNjBkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKICNpbmNs
dWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgor
I2luY2x1ZGUgIkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRS
dW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNpbmNsdWRlICJI
VE1MVG9rZW4uaCIKQEAgLTE3NCw2ICsxNzUsNyBAQCBwcml2YXRlOgogICAgIERlcXVlPE93blB0
cjxDb21wYWN0SFRNTFRva2VuU3RyZWFtPiA+IG1fcGVuZGluZ1Rva2VuczsKICAgICBXZWFrUHRy
RmFjdG9yeTxIVE1MRG9jdW1lbnRQYXJzZXI+IG1fd2Vha0ZhY3Rvcnk7CiAjZW5kaWYKKyAgICBP
d25QdHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAogICAgIGJvb2wgbV9l
bmRXYXNEZWxheWVkOwogICAgIGJvb2wgbV9oYXZlQmFja2dyb3VuZFBhcnNlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGVj
N2U3ZDJiNmI0ZmNiNTRjMzIxMTIxM2I5ZDQyYzg1M2RhNDU3NGEuLmRjMjA1MWM5Mjg0YWQ3NDZi
MjE0MTcyMTA3YjkzYTI2N2FjZGQyODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcApAQCAtMjgsMjIgKzI4LDQ4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTFByZWxvYWRTY2FubmVyLmgiCiAKLSNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNs
dWRlICJIVE1MUGFyc2VyT3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNp
bmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2luY2x1ZGUgIkxpbmtSZWxBdHRyaWJ1dGUuaCIK
ICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgi
CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
K3N0YXRpYyBib29sIHRocmVhZFNhZmVFcXVhbChTdHJpbmdJbXBsKiBhLCBTdHJpbmdJbXBsKiBi
KQoreworICAgIGlmIChhLT5oYXNoKCkgIT0gYi0+aGFzaCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIFN0cmluZ0hhc2g6OmVxdWFsKGEsIGIpOworfQorCitzdGF0aWMgYm9v
bCB0aHJlYWRTYWZlTWF0Y2goY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHFOYW1lKQoreworICAgIHJldHVybiB0aHJlYWRTYWZlRXF1YWwobG9jYWxOYW1lLmlt
cGwoKSwgcU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKK30KKworc3RhdGljIGJvb2wgdGhyZWFk
U2FmZU1hdGNoKGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3RvciYgbmFtZSwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgcU5hbWUpCit7CisgICAgcmV0dXJuIGVxdWFsKHFOYW1lLmxvY2FsTmFtZSgpLmlt
cGwoKSwgbmFtZS5kYXRhKCksIG5hbWUuc2l6ZSgpKTsKK30KKworc3RhdGljIGJvb2wgaXNTdGFy
dFRhZyhjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIHJldHVybiB0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnOyAvLyBIb2x5IHZlcmJvc2l0eSwgYmF0bWFuLgor
fQorCitzdGF0aWMgYm9vbCBpc1N0YXJ0T3JFbmRUYWcoY29uc3QgSFRNTFRva2VuJiB0b2tlbikK
K3sKKyAgICByZXR1cm4gdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgfHwg
aXNTdGFydFRhZyh0b2tlbik7Cit9CisKIGNsYXNzIFByZWxvYWRUYXNrIHsKIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBQcmVsb2FkVGFzayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0
IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykKQEAgLTU3LDExICs4MywxMSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHByb2Nlc3NBdHRyaWJ1dGVzKGNvbnN0IEhUTUxUb2tlbjo6
QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIGlmIChtX3RhZ05hbWUg
IT0gaW1nVGFnCi0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0gaW5wdXRUYWcKLSAgICAgICAg
ICAgICYmIG1fdGFnTmFtZSAhPSBsaW5rVGFnCi0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0g
c2NyaXB0VGFnCi0gICAgICAgICAgICAmJiBtX3RhZ05hbWUgIT0gYmFzZVRhZykKKyAgICAgICAg
aWYgKCF0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBpbWdUYWcpCisgICAgICAgICAgICAmJiAh
dGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW5wdXRUYWcpCisgICAgICAgICAgICAmJiAhdGhy
ZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlua1RhZykKKyAgICAgICAgICAgICYmICF0aHJlYWRT
YWZlTWF0Y2gobV90YWdOYW1lLCBzY3JpcHRUYWcpCisgICAgICAgICAgICAmJiAhdGhyZWFkU2Fm
ZU1hdGNoKG1fdGFnTmFtZSwgYmFzZVRhZykpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBh
dHRyaWJ1dGVzLmJlZ2luKCk7CkBAIC02OSwyOSArOTUsMjYgQEAgcHVibGljOgogICAgICAgICAg
ICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+
bV9uYW1lLnNpemUoKSk7CiAgICAgICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWUgPSBTdHJp
bmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+
bV92YWx1ZS5zaXplKCkpOwogCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBjaGFy
c2V0QXR0cikKKyAgICAgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwg
Y2hhcnNldEF0dHIpKQogICAgICAgICAgICAgICAgIG1fY2hhcnNldCA9IGF0dHJpYnV0ZVZhbHVl
OwogCi0gICAgICAgICAgICBpZiAobV90YWdOYW1lID09IHNjcmlwdFRhZyB8fCBtX3RhZ05hbWUg
PT0gaW1nVGFnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gc3JjQXR0
cikKKyAgICAgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBzY3JpcHRUYWcp
IHx8IHRocmVhZFNhZmVNYXRjaChtX3RhZ05hbWUsIGltZ1RhZykpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHNyY0F0dHIpKQogICAgICAgICAg
ICAgICAgICAgICBzZXRVcmxUb0xvYWQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gY3Jvc3NvcmlnaW5BdHRyICYmICFhdHRyaWJ1dGVW
YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0aHJlYWRTYWZlTWF0Y2go
YXR0cmlidXRlTmFtZSwgY3Jvc3NvcmlnaW5BdHRyKSAmJiAhYXR0cmlidXRlVmFsdWUuaXNOdWxs
KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fY3Jvc3NPcmlnaW5Nb2RlID0gc3RyaXBMZWFkaW5n
QW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV90YWdOYW1lID09IGxpbmtUYWcpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXR0cmli
dXRlTmFtZSA9PSBocmVmQXR0cikKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU2FmZU1h
dGNoKG1fdGFnTmFtZSwgbGlua1RhZykpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhyZWFkU2Fm
ZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIGhyZWZBdHRyKSkKICAgICAgICAgICAgICAgICAgICAgc2V0
VXJsVG9Mb2FkKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRy
aWJ1dGVOYW1lID09IHJlbEF0dHIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhyZWFkU2Fm
ZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHJlbEF0dHIpKQogICAgICAgICAgICAgICAgICAgICBtX2xp
bmtJc1N0eWxlU2hlZXQgPSByZWxBdHRyaWJ1dGVJc1N0eWxlU2hlZXQoYXR0cmlidXRlVmFsdWUp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gbWVkaWFBdHRyKQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRocmVhZFNhZmVNYXRjaChhdHRyaWJ1dGVOYW1lLCBt
ZWRpYUF0dHIpKQogICAgICAgICAgICAgICAgICAgICBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2Ny
ZWVuID0gbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4oYXR0cmlidXRlVmFsdWUpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX3RhZ05hbWUgPT0gaW5wdXRUYWcpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlTmFtZSA9PSBzcmNBdHRyKQorICAgICAgICAgICAgfSBlbHNlIGlmICh0
aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBpbnB1dFRhZykpIHsKKyAgICAgICAgICAgICAgICBp
ZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHNyY0F0dHIpKQogICAgICAgICAgICAg
ICAgICAgICBzZXRVcmxUb0xvYWQoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gdHlwZUF0dHIpCisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUsIHR5cGVBdHRyKSkKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnB1dElzSW1hZ2UgPSBlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1
ZSwgSW5wdXRUeXBlTmFtZXM6OmltYWdlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Rh
Z05hbWUgPT0gYmFzZVRhZykgewotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09
IGhyZWZBdHRyKQotICAgICAgICAgICAgICAgICAgICBtX2Jhc2VFbGVtZW50SHJlZiA9IHN0cmlw
TGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjQsMjYgKzE0Nyw1MSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fdXJsVG9Mb2FkID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJp
YnV0ZVZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHByZWxvYWQoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiBiYXNlVVJMKQorICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBGSVhNRTogSXRzIG5vdCBjbGVhciB0aGF0IHRoaXMgaWYgaXMg
bmVlZGVkLCB0aGUgbG9hZGVyIHByb2JhYmx5IGlnbm9yZXMgY2hhcnNldCBmb3IgaW1hZ2UgcmVx
dWVzdHMgYW55d2F5LgorICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW1n
VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
bV9jaGFyc2V0OworICAgIH0KKworICAgIENhY2hlZFJlc291cmNlOjpUeXBlIHJlc291cmNlVHlw
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwg
c2NyaXB0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0Owor
ICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgaW1nVGFnKSB8fCAodGhyZWFk
U2FmZU1hdGNoKG1fdGFnTmFtZSwgaW5wdXRUYWcpICYmIG1faW5wdXRJc0ltYWdlKSkKKyAgICAg
ICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZTsKKyAgICAgICAgaWYg
KHRocmVhZFNhZmVNYXRjaChtX3RhZ05hbWUsIGxpbmtUYWcpICYmIG1fbGlua0lzU3R5bGVTaGVl
dCAmJiBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuKQorICAgICAgICAgICAgcmV0dXJuIENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZTsKKyAgICB9CisK
KyAgICBib29sIHNob3VsZFByZWxvYWQoKQogICAgIHsKICAgICAgICAgaWYgKG1fdXJsVG9Mb2Fk
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAodGhy
ZWFkU2FmZU1hdGNoKG1fdGFnTmFtZSwgbGlua1RhZykgJiYgKCFtX2xpbmtJc1N0eWxlU2hlZXQg
fHwgIW1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmICh0aHJlYWRTYWZlTWF0Y2gobV90YWdOYW1lLCBpbnB1dFRhZykg
JiYgIW1faW5wdXRJc0ltYWdlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGlzc3VlUHJlbG9hZFJlcXVlc3QoV2Vha1B0
cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+JiBwcmVsb2FkZXIsIGNvbnN0IEtVUkwmIHByZWRpY3Rl
ZEJhc2VVUkwpCisgICAgeworICAgICAgICBpZiAoIXNob3VsZFByZWxvYWQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKLSAgICAgICAgQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGRvY3VtZW50LT5jb21w
bGV0ZVVSTChtX3VybFRvTG9hZCwgYmFzZVVSTCkpKTsKLSAgICAgICAgcmVxdWVzdC5zZXRJbml0
aWF0b3IodGFnTmFtZSgpKTsKLSAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBzY3JpcHRUYWcpIHsK
LSAgICAgICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldEFsbG93Q29v
a2llcyhjcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCkpOwotICAgICAgICAgICAgY2FjaGVk
UmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdCwgcmVxdWVzdCwg
bV9jaGFyc2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtX3RhZ05hbWUgPT0gaW1n
VGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRUYWcgJiYgbV9pbnB1dElzSW1hZ2UpKQotICAgICAg
ICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2UsIHJlcXVlc3QsIFN0cmluZygpKTsKLSAgICAgICAgZWxzZSBpZiAobV90YWdOYW1l
ID09IGxpbmtUYWcgJiYgbV9saW5rSXNTdHlsZVNoZWV0ICYmIG1fbGlua01lZGlhQXR0cmlidXRl
SXNTY3JlZW4pIAotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2Fj
aGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIG1fY2hhcnNldCk7CisgICAgICAg
IE93blB0cjxQcmVsb2FkUmVxdWVzdD4gcmVxdWVzdCA9IFByZWxvYWRSZXF1ZXN0OjpjcmVhdGUo
bV90YWdOYW1lLCBtX3VybFRvTG9hZCwgcHJlZGljdGVkQmFzZVVSTCwgcmVzb3VyY2VUeXBlKCkp
OworICAgICAgICByZXF1ZXN0LT5tX2Nyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMgPSBjcm9z
c09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCk7CisgICAgICAgIHJlcXVlc3QtPm1fY2hhcnNldCA9
IGNoYXJzZXQoKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZIVE1MUmVzb3VyY2VQ
cmVsb2FkZXI6OnByZWxvYWQsIHByZWxvYWRlciwgcmVxdWVzdC5yZWxlYXNlKCkpKTsKICAgICB9
CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3Rh
Z05hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIGJhc2VFbGVtZW50SHJlZigpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZUVsZW1lbnRIcmVmOyB9CiAKIHByaXZhdGU6CiAKQEAgLTE1NSwxOCArMjAzLDE4
IEBAIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fdGFnTmFtZTsKICAgICBTdHJpbmcgbV91
cmxUb0xvYWQ7CiAgICAgU3RyaW5nIG1fY2hhcnNldDsKLSAgICBTdHJpbmcgbV9iYXNlRWxlbWVu
dEhyZWY7CiAgICAgU3RyaW5nIG1fY3Jvc3NPcmlnaW5Nb2RlOwogICAgIGJvb2wgbV9saW5rSXNT
dHlsZVNoZWV0OwogICAgIGJvb2wgbV9saW5rTWVkaWFBdHRyaWJ1dGVJc1NjcmVlbjsKICAgICBi
b29sIG1faW5wdXRJc0ltYWdlOwogfTsKIAotSFRNTFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9h
ZFNjYW5uZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0
aW9ucykKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX2Nzc1NjYW5uZXIoZG9j
dW1lbnQpCitIVE1MUHJlbG9hZFNjYW5uZXI6OkhUTUxQcmVsb2FkU2Nhbm5lcihjb25zdCBXZWFr
UHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4mIHByZWxvYWRlciwgY29uc3QgSFRNTFBhcnNlck9w
dGlvbnMmIG9wdGlvbnMsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQorICAgIDogbV9wcmVsb2Fk
ZXIocHJlbG9hZGVyKQorICAgICwgbV9jc3NTY2FubmVyKHByZWxvYWRlcikKICAgICAsIG1fdG9r
ZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZShvcHRpb25zKSkKICAgICAsIG1faW5TdHlsZShm
YWxzZSkKKyAgICAsIG1fZG9jdW1lbnRVUkwoZG9jdW1lbnRVUkwpCiAjaWYgRU5BQkxFKFRFTVBM
QVRFX0VMRU1FTlQpCiAgICAgLCBtX3RlbXBsYXRlQ291bnQoMCkKICNlbmRpZgpAQCAtMTc4LDY2
ICsyMjYsMTAxIEBAIHZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjphcHBlbmRUb0VuZChjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBtX3NvdXJjZS5hcHBlbmQoc291cmNlKTsKIH0K
IAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBu
b3QgdXNlZCBieSB0aGUgYmFja2dyb3VuZC10aHJlYWQgcHJlbG9hZCBzY2FubmVyLgordm9pZCBI
VE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oY29uc3QgS1VSTCYgc3RhcnRpbmdCYXNlRWxlbWVudFVS
TCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBIVE1MVG9rZW5pemVyOjp1cGRh
dGVTdGF0ZUZvciBvbmx5IHdvcmtzIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICAvLyBXaGVuIHdl
IHN0YXJ0IHNjYW5uaW5nLCBvdXIgYmVzdCBwcmVkaWN0aW9uIG9mIHRoZSBiYXNlRWxlbWVudFVS
TCBpcyB0aGUgcmVhbCBvbmUhCi0gICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IG1fZG9j
dW1lbnQtPmJhc2VFbGVtZW50VVJMKCk7CisgICAgaWYgKCFzdGFydGluZ0Jhc2VFbGVtZW50VVJM
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IHN0YXJ0aW5n
QmFzZUVsZW1lbnRVUkw7CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNhdmUgYW5kIHJlLXVz
ZSB0aGVzZSB0b2tlbnMgaW4gSFRNTERvY3VtZW50UGFyc2VyIGlmCi0gICAgLy8gdGhlIHBlbmRp
bmcgc2NyaXB0IGRvZXNuJ3QgZW5kIHVwIGNhbGxpbmcgZG9jdW1lbnQud3JpdGUuCisgICAgLy8g
Tm90ZTogbV90b2tlbiBpcyBvbmx5IHVzZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBmb3IgdGhl
IG1haW4gdGhyZWFkLgorICAgIC8vIEFsbCBvdGhlciBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhIHRv
a2VuLgogICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2VuKG1fc291cmNlLCBtX3Rva2Vu
KSkgewotICAgICAgICBwcm9jZXNzVG9rZW4oKTsKKyAgICAgICAgaWYgKGlzU3RhcnRUYWcobV90
b2tlbikpCisgICAgICAgICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IoQXRvbWljU3Ry
aW5nKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpKSk7CisgICAg
ICAgIHByb2Nlc3NUb2tlbihtX3Rva2VuKTsKICAgICAgICAgbV90b2tlbi5jbGVhcigpOwogICAg
IH0KIH0KIAotdm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NUb2tlbigpCi17Ci0gICAg
aWYgKG1faW5TdHlsZSkgewotICAgICAgICBpZiAobV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OkNoYXJhY3RlcikKLSAgICAgICAgICAgIG1fY3NzU2Nhbm5lci5zY2FuKG1fdG9rZW4p
OwotICAgICAgICBlbHNlIGlmIChtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5k
VGFnKSB7Ci0gICAgICAgICAgICBtX2luU3R5bGUgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fY3Nz
U2Nhbm5lci5yZXNldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdG9rZW4udHlw
ZSgpICE9IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykgewogI2lmIEVOQUJMRShURU1QTEFURV9F
TEVNRU5UKQotICAgICAgICBpZiAobV90ZW1wbGF0ZUNvdW50ICYmIG1fdG9rZW4udHlwZSgpID09
IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcgJiYgQXRvbWljU3RyaW5nKG1fdG9rZW4ubmFtZSgpLmRh
dGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpKSA9PSB0ZW1wbGF0ZVRhZykKK2Jvb2wgSFRNTFBy
ZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVUZW1wbGF0ZVRhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKGlzU3RhcnRP
ckVuZFRhZyh0b2tlbikgJiYgdGhyZWFkU2FmZU1hdGNoKHRhZ05hbWUsIHRlbXBsYXRlVGFnKSkg
eworICAgICAgICBpZiAoaXNTdGFydFRhZyh0b2tlbikpCisgICAgICAgICAgICBtX3RlbXBsYXRl
Q291bnQrKzsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV90ZW1wbGF0ZUNvdW50LS07Ci0j
ZW5kaWYKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVHdhcyBvdXIg
dG9rZW4uCiAgICAgfQotCi0gICAgQXRvbWljU3RyaW5nIHRhZ05hbWUobV90b2tlbi5uYW1lKCku
ZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpOwotCi0jaWYgRU5BQkxFKFRFTVBMQVRFX0VM
RU1FTlQpCi0gICAgaWYgKHRhZ05hbWUgPT0gdGVtcGxhdGVUYWcpCi0gICAgICAgIG1fdGVtcGxh
dGVDb3VudCsrOwotCi0gICAgaWYgKG1fdGVtcGxhdGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwor
ICAgIC8vIElmIHdlJ3JlIGluIGEgdGVtcGxhdGUgd2UgImNvbnN1bWUiIGFsbCB0b2tlbnMuCisg
ICAgcmV0dXJuIG1fdGVtcGxhdGVDb3VudCA+IDA7Cit9CiAjZW5kaWYKIAotICAgIFByZWxvYWRU
YXNrIHRhc2sodGFnTmFtZSwgbV90b2tlbi5hdHRyaWJ1dGVzKCkpOwotICAgIG1fdG9rZW5pemVy
LT51cGRhdGVTdGF0ZUZvcih0YXNrLnRhZ05hbWUoKSk7Citib29sIEhUTUxQcmVsb2FkU2Nhbm5l
cjo6cHJvY2Vzc1N0eWxlQ2hhcmFjdGVycyhjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAg
IGlmICghbV9pblN0eWxlIHx8IHRva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFj
dGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jc3NTY2FubmVyLnNjYW4odG9rZW4p
OworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgaWYgKHRhc2sudGFnTmFtZSgpID09IHN0eWxl
VGFnKQotICAgICAgICBtX2luU3R5bGUgPSB0cnVlOworYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6
OnByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29u
c3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBBU1NFUlQoaXNTdGFydE9yRW5kVGFnKHRva2Vu
KSk7CisgICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBzdHlsZVRhZykpIHsKKyAgICAg
ICAgbV9pblN0eWxlID0gaXNTdGFydFRhZyh0b2tlbik7CisgICAgICAgIGlmICghbV9pblN0eWxl
KQorICAgICAgICAgICAgbV9jc3NTY2FubmVyLnJlc2V0KCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBpZiAodGFzay50YWdOYW1lKCkg
PT0gYmFzZVRhZykKLSAgICAgICAgdXBkYXRlUHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoS1VSTCht
X2RvY3VtZW50LT51cmwoKSwgdGFzay5iYXNlRWxlbWVudEhyZWYoKSkpOworYm9vbCBIVE1MUHJl
bG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIEFTU0VSVChpc1N0YXJ0VGFn
KHRva2VuKSk7CisgICAgaWYgKHRocmVhZFNhZmVNYXRjaCh0YWdOYW1lLCBiYXNlVGFnKSkgewor
ICAgICAgICAvLyBUaGUgZmlyc3QgPGJhc2U+IGVsZW1lbnQgaXMgdGhlIG9uZSB0aGF0IHdpbnMu
CisgICAgICAgIGlmICghbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHRhc2sucHJlbG9hZChtX2RvY3VtZW50LCBtX3By
ZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSA/IG1fZG9jdW1lbnQtPmJhc2VVUkwoKSA6
IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOworICAgICAgICBmb3IgKEhUTUxUb2tlbjo6QXR0
cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRva2VuLmF0dHJpYnV0ZXMoKS5iZWdp
bigpOyBpdGVyICE9IHRva2VuLmF0dHJpYnV0ZXMoKS5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
ICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGl0ZXItPm1fbmFtZSwgaHJlZkF0dHIpKSB7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIGhyZWZWYWx1ZSA9IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBv
c3NpYmxlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5tX3ZhbHVlLnNpemUoKSk7CisgICAg
ICAgICAgICAgICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTCA9IEtVUkwobV9kb2N1bWVudFVS
TCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGhyZWZWYWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSFRNTFByZWxvYWRT
Y2FubmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxl
bWVudFVSTCkKK3ZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW4oY29uc3QgSFRN
TFRva2VuJiB0b2tlbikKIHsKLSAgICAvLyBUaGUgZmlyc3QgPGJhc2U+IGVsZW1lbnQgaXMgdGhl
IG9uZSB0aGF0IHdpbnMuCi0gICAgaWYgKCFtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1w
dHkoKSkKKyAgICAvLyA8c3R5bGU+IGlzIHRoZSBvbmx5IHBsYWNlIHdlIHNlYXJjaCBmb3IgdXJs
cyBpbiBub24tc3RhcnQvZW5kLXRhZyB0b2tlbnMuCisgICAgaWYgKHByb2Nlc3NTdHlsZUNoYXJh
Y3RlcnModG9rZW4pKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcmVkaWN0ZWRCYXNlRWxlbWVu
dFVSTCA9IGJhc2VFbGVtZW50VVJMOworICAgIGlmICghaXNTdGFydE9yRW5kVGFnKHRva2VuKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWUodG9rZW4ubmFtZSgp
LmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1F
TlQpCisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKHRhZ05hbWUsIHRva2VuKSkK
KyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVN0eWxlVGFn
KHRhZ05hbWUsIHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNTdGFydFRhZyh0
b2tlbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyh0
YWdOYW1lLCB0b2tlbikpCisgICAgICAgIHJldHVybjsKKworICAgIFByZWxvYWRUYXNrIHRhc2so
dGFnTmFtZSwgdG9rZW4uYXR0cmlidXRlcygpKTsKKyAgICB0YXNrLmlzc3VlUHJlbG9hZFJlcXVl
c3QobV9wcmVsb2FkZXIsIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCmluZGV4IGNi
OGYzMzkxNDA5ZDExNzkyMDI0ZTBmY2E4Mjg5MjUxMGM1YjJmNzkuLjlkMTlhM2ViZjQyMjRlZTk3
YTJhOTY2N2UxNTJmMDg2Y2MwZWI5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oCkBAIC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MUGFyc2VyT3B0aW9uczsKIGNs
YXNzIEhUTUxUb2tlbjsKIGNsYXNzIEhUTUxUb2tlbml6ZXI7CkBAIC00MiwyMSArNDEsMzIgQEAg
Y2xhc3MgU2VnbWVudGVkU3RyaW5nOwogY2xhc3MgSFRNTFByZWxvYWRTY2FubmVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShIVE1MUHJlbG9hZFNjYW5uZXIpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBIVE1MUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqLCBjb25z
dCBIVE1MUGFyc2VyT3B0aW9ucyYpOworICAgIC8vIEhUTUxQcmVsb2FkU2Nhbm5lciBpbnRlbnRp
b25hbGx5IGRvZXMgbm90IGhhdmUgYSBwb2ludGVyIHRvIERvY3VtZW50LgorICAgIEhUTUxQcmVs
b2FkU2Nhbm5lcihjb25zdCBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4mLCBjb25zdCBI
VE1MUGFyc2VyT3B0aW9ucyYsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsKIAogICAgIHZvaWQg
YXBwZW5kVG9FbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7Ci0gICAgdm9pZCBzY2FuKCk7Cisg
ICAgdm9pZCBzY2FuKGNvbnN0IEtVUkwmIGRvY3VtZW50QmFzZUVsZW1lbnRVUkwpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgdm9pZCB1cGRhdGVQcmVkaWN0ZWRC
YXNlRWxlbWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCk7CisgICAgdm9pZCBwcm9j
ZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJik7CisKKyAgICBib29sIHByb2Nlc3NTdHlsZUNoYXJh
Y3RlcnMoY29uc3QgSFRNTFRva2VuJik7CisKKyNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
KyAgICBib29sIHByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJik7CisjZW5kaWYKKworICAgIGJvb2wgcHJvY2Vzc1Bv
c3NpYmxlU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9r
ZW4mKTsKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKKworICAgIFdlYWtQdHI8SFRNTFJlc291cmNl
UHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAotICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAg
IFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsKICAgICBDU1NQcmVsb2FkU2Nhbm5lciBtX2Nzc1Nj
YW5uZXI7Ci0gICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwogICAgIEhUTUxU
b2tlbiBtX3Rva2VuOworICAgIE93blB0cjxIVE1MVG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAg
ICBib29sIG1faW5TdHlsZTsKKyAgICBLVVJMIG1fZG9jdW1lbnRVUkw7CiAgICAgS1VSTCBtX3By
ZWRpY3RlZEJhc2VFbGVtZW50VVJMOwogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MGEyNGQ2NmQzOWY4ZjU5ZDZlNDEzN2Q4OTA5OWYzNDIyZDk4NzAx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291
cmNlUHJlbG9hZGVyLmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SFRNTFJlc291cmNlUHJlbG9hZGVyLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIGJvb2wgaXNTdHJpbmdTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKGNvbnN0IFN0cmluZyYg
c3RyaW5nKQoreworICAgIFN0cmluZ0ltcGwqIGltcGwgPSBzdHJpbmcuaW1wbCgpOworICAgIGlm
ICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGltcGwtPmhhc09uZVJlZigp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFByZWxvYWRSZXF1
ZXN0Ojppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBjb25zdAoreworICAgIHJldHVybiBp
c1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQobV9pbml0aWF0b3IpCisgICAgICAgICYm
IGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX2NoYXJzZXQpCisgICAgICAgICYm
IGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX3Jlc291cmNlVVJMKQorICAgICAg
ICAmJiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQobV9iYXNlVVJMLnN0cmluZygp
KTsKK30KKworS1VSTCBQcmVsb2FkUmVxdWVzdDo6Y29tcGxldGVVUkwoRG9jdW1lbnQqIGRvY3Vt
ZW50KQoreworICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwobV9yZXNvdXJjZVVSTCwg
bV9iYXNlVVJMLmlzRW1wdHkoKSA/IGRvY3VtZW50LT51cmwoKSA6IG1fYmFzZVVSTCk7Cit9CisK
K0NhY2hlZFJlc291cmNlUmVxdWVzdCBQcmVsb2FkUmVxdWVzdDo6cmVzb3VyY2VSZXF1ZXN0KERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIENh
Y2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNlUmVxdWVzdChjb21wbGV0ZVVSTChk
b2N1bWVudCkpKTsKKyAgICByZXF1ZXN0LnNldEluaXRpYXRvcihtX2luaXRpYXRvcik7CisKKyAg
ICAvLyBGSVhNRTogSXQncyBwb3NzaWJsZSBDT1JTIHNob3VsZCB3b3JrIGZvciBvdGhlciByZXF1
ZXN0IHR5cGVzPworICAgIGlmIChtX3Jlc291cmNlVHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0KQorICAgICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5zZXRBbGxvd0Nv
b2tpZXMobV9jcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKTsKKyAgICByZXR1cm4gcmVxdWVz
dDsKK30KKwordm9pZCBIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQoUGFzc093blB0cjxQ
cmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVx
dWVzdCA9IHByZWxvYWQtPnJlc291cmNlUmVxdWVzdChtX2RvY3VtZW50KTsKKyAgICBtX2RvY3Vt
ZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2FkKHByZWxvYWQtPm1fcmVzb3VyY2VU
eXBlLCByZXF1ZXN0LCBwcmVsb2FkLT5tX2NoYXJzZXQpOworfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY5NzExYmU1N2Y4NWNkOWVmMmUyMGYyOGM5MWFjNGU3ZDI1ZWNhMTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaApA
QCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEhUTUxSZXNvdXJjZVByZWxvYWRlcl9oCisjZGVmaW5lIEhUTUxSZXNv
dXJjZVByZWxvYWRlcl9oCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFByZWxvYWRSZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQcmVsb2Fk
UmVxdWVzdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5pdGlhdG9yLCBjb25zdCBTdHJpbmcmIHJl
c291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSByZXNv
dXJjZVR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByZWxvYWRSZXF1
ZXN0KGluaXRpYXRvciwgcmVzb3VyY2VVUkwsIGJhc2VVUkwsIHJlc291cmNlVHlwZSkpOworICAg
IH0KKyAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0OworCisgICAg
Q2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChEb2N1bWVudCopOworCitwcml2
YXRlOgorICAgIFByZWxvYWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgaW5pdGlhdG9yLCBjb25zdCBT
dHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBDYWNoZWRSZXNvdXJjZTo6
VHlwZSByZXNvdXJjZVR5cGUpCisgICAgICAgIDogbV9pbml0aWF0b3IoaW5pdGlhdG9yKQorICAg
ICAgICAsIG1fcmVzb3VyY2VVUkwocmVzb3VyY2VVUkwpCisgICAgICAgICwgbV9iYXNlVVJMKGJh
c2VVUkwpCisgICAgICAgICwgbV9yZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBlKQorICAgICAgICAs
IG1fY3Jvc3NPcmlnaW5Nb2RlQWxsb3dzQ29va2llcyhmYWxzZSkKKyAgICB7IH0KKworICAgIEtV
UkwgY29tcGxldGVVUkwoRG9jdW1lbnQqKTsKKworICAgIFN0cmluZyBtX2luaXRpYXRvcjsKKyAg
ICBTdHJpbmcgbV9yZXNvdXJjZVVSTDsKKyAgICBLVVJMIG1fYmFzZVVSTDsKKworcHVibGljOgor
ICAgIENhY2hlZFJlc291cmNlOjpUeXBlIG1fcmVzb3VyY2VUeXBlOworICAgIFN0cmluZyBtX2No
YXJzZXQ7CisgICAgYm9vbCBtX2Nyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXM7Cit9OworCitj
bGFzcyBIVE1MUmVzb3VyY2VQcmVsb2FkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhU
TUxSZXNvdXJjZVByZWxvYWRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGV4cGxpY2l0IEhUTUxSZXNvdXJjZVByZWxvYWRlcihEb2N1bWVudCogZG9jdW1lbnQpCisg
ICAgICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAgICAgLCBtX3dlYWtGYWN0b3J5KHRo
aXMpCisgICAgeyB9CisKKyAgICB2b2lkIHByZWxvYWQoUGFzc093blB0cjxQcmVsb2FkUmVxdWVz
dD4pOworCisgICAgV2Vha1B0cjxIVE1MUmVzb3VyY2VQcmVsb2FkZXI+IGNyZWF0ZVdlYWtQdHIo
KSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQorCitwcml2YXRlOgor
ICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIFdlYWtQdHJGYWN0b3J5PEhUTUxSZXNvdXJj
ZVByZWxvYWRlcj4gbV93ZWFrRmFjdG9yeTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXgg
OWQ0MDhlNjIxNjJmYmJiNmQyNDA4NjIzOTQ3NWQyNmZhNWFhYWMwOC4uNGFiODJmZWUzMDMxNjM5
MTFiYWJlMGExZjUxM2I0YzRlNGM0OTBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaApAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RfaAogI2RlZmluZSBDYWNoZWRSZXNvdXJjZVJlcXVl
c3RfaAogCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFByaW9y
aXR5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJPcHRpb25zLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXF1ZXN0LmgiCkBAIC0zNCw3ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52
Y3Byb2ovV2ViS2l0RXhwb3J0cy5kZWYuaW4gYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNw
cm9qL1dlYktpdEV4cG9ydHMuZGVmLmluCmluZGV4IGRhMDYxNTYwODcyNjU5ZjYxYzExYzQ5ZWVl
NmEyYTQxMWFiM2VmNmIuLmJiNTI4NGY4MzRkODgyZDc3YmIxYzBkMzk3MGUyOGVmODlmODliMGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0RXhwb3J0
cy5kZWYuaW4KKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXRFeHBv
cnRzLmRlZi5pbgpAQCAtMTE4LDYgKzExOCw3IEBAIEVYUE9SVFMKICAgICAgICAgP2FkZFRleHRN
YXRjaE1hcmtlckBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXJAV2ViQ29yZUBAUUFFWFBCVlJhbmdl
QDJAX05AWgogICAgICAgICA/YnJvYWRjYXN0QFRocmVhZENvbmRpdGlvbkBXVEZAQFFBRVhYWgog
ICAgICAgICA/Y2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWFA2QVhQQVhAWjBAWgorICAgICAgICA/
Y2FsbE9uTWFpblRocmVhZEBXVEZAQFlBWEFCVj8kRnVuY3Rpb25AJCRBNkFYWFpAMUBAWgogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgID9jb25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRz
QEluc3BlY3RvckNvbnNvbGVBZ2VudEBXZWJDb3JlQEBRQUU/QVY/JFZlY3RvckBJJDBBQEBXVEZA
QFhaCiAgICAgICAgID9jb3VudGVyVmFsdWVASW5zcGVjdG9yQ291bnRlcnNAV2ViQ29yZUBAU0FI
VzRDb3VudGVyVHlwZUAxMkBAWgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187501</attachid>
            <date>2013-02-10 17:52:00 -0800</date>
            <delta_ts>2013-02-10 20:27:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107807-20130210174841.patch</filename>
            <type>text/plain</type>
            <size>42659</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJhOWE0NGI5YmYyYmJh
Y2JkOGExYzEyNDFmYWMxZWM4OWEzZTA1Yy4uMGI3NGRmYTJiZDMzZTZhYzgxYjFkMmI2N2YyZDBk
ODM5NDRhODIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMy0wMi0xMCAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUgZXhpc3Rpbmcg
SFRNTFByZWxvYWRTY2FubmVyIHRocmVhZGluZy1hd2FyZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KKworICAgICAgICBUaGUgSFRNTFByZWxvYWRTY2FubmVyIGFuZCBDU1NQcmVs
b2FkU2Nhbm5lciBkbyBhIG51bWJlciBvZiB0aGluZ3MuCisgICAgICAgIENTU1ByZWxvYWRTY2Fu
bmVyIGlzIG1vc3RseSBqdXN0IGEgaGVscGVyIGNsYXNzIGZvciBIVE1MUHJlbG9hZFNjYW5uZXIu
CisgICAgICAgIEhUTUxQcmVsb2FkU2Nhbm5lciBydW5zIGl0cyBvd24gY29weSBvZiB0aGUgSFRN
TFRva2VuaXplciBhbmQgdXNlcworICAgICAgICBIVE1MVG9rZW5pemVyOjp1cGRhdGVTdGF0ZUZv
ciB0byBlbXVsYXRlIGVub3VnaCBvZiB0aGUgVHJlZUJ1aWxkZXIKKyAgICAgICAgdG8gZ2V0IGEg
cmVhbGlzdGljIHN0cmVhbSBvZiB0b2tlbnMuICBJdCBkb2VzIHNvbWUgYWRkaXRpb25hbCBUcmVl
QnVpbGRlcgorICAgICAgICBlbXVsYXRpb24sIGluY2x1ZGluZyB0cmFja2luZyB0ZW1wbGF0ZSB0
YWdzIGFuZCBiYXNlIHRhZ3MsIGJ1dCBtb3N0bHkKKyAgICAgICAganVzdCBzY2FucyB0aGUgdG9r
ZW4gc3RyZWFtIGZvciBzdGFydC10YWdzIGFuZCBsb29rcyBmb3IgVVJMcyBpbiB0aGVtLgorICAg
ICAgICBJdCB0cmFja3Mgd2hlbiBpdCBoYXMgc2VlbiBhIDxzdHlsZT4gdGFnIGFuZCBzdGFydHMg
c2VuZGluZyBhbGwgY2hhcmFjdGVyIHRva2VucworICAgICAgICB0byB0aGUgQ1NTUHJlbG9hZFNj
YW5uZXIgdW50aWwgYSA8L3N0eWxlPiB0YWcgaXMgc2Vlbi4KKyAgICAgICAgSXQgYWxzbyAodW5m
b3J0dW5hdGVseSkga25vd3Mgc29tZSBhYm91dCB0aGUgbG9hZGVyIGd1dHMgYW5kIGhvdyB0byBj
b25zdHJ1Y3QKKyAgICAgICAgYSBwcm9wZXIgQ2FjaGVkUmVzb3VyY1JlcXVlc3QgYW5kIGlzc3Vl
IGEgcHJlbG9hZC4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIG1vZGVsIHNvIHRo
YXQgdGhlIHByZWxvYWQgc2Nhbm5lcnMgb25seSBrbm93IGhvdyB0byBwcm9kdWNlCisgICAgICAg
IFByZWxvYWRSZXF1ZXN0IG9iamVjdHMgYW5kIGFwcGVuZCB0aGVtIHRvIGEgcGFzc2VkLWluIHZl
Y3Rvci4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIHByZWxvYWQtc2Nhbm5lciBiZWhhdmlv
ciBzbyB0aGF0IHByZWxvYWRzIGFyZSBub3cgYWxsIGlzc3VlZCBpbiBvbmUgbGFyZ2UKKyAgICAg
ICAgYmF0Y2ggYXQgdGhlIGVuZCBvZiBzY2FubmluZywgaW5zdGVhZCBvZiBhcyB3ZSBoaXQgZWFj
aCByZXNvdXJjZS4gIEl0J3MgcG9zc2libGUgdGhhdAorICAgICAgICB3ZSdsbCB3YWl0IHRvIGlu
c3RlYWQgY2hlY2sgZm9yIHByZWxvYWQgcmVxdWVzdHMgbW9yZSBvZnRlbiwgYXQgYSBwb3NzaWJs
ZSB0cmFkZW9mZgorICAgICAgICB0byB0b2tlbml6aW5nIHNwZWVkLgorCisgICAgICAgIEFuIGFs
dGVybmF0ZSBhcHByb2FjaCBtaWdodCBiZSB0byBwYXNzIGluIGEgcHJlbG9hZC1kZWxlZ2F0ZSBv
ZiBzb3J0cyB3aGljaCBrbmV3IGhvdworICAgICAgICB0byBlaXRoZXIgYnVpbGQgYSB2ZWN0b3Is
IG9yIHNlbmQgcmVxdWVzdHMgaW1tZWRpYXRlbHkuICBGb3Igbm93IHRoZSBidWlsZC1hLXZlY3Rv
ci1hbHdheXMKKyAgICAgICAgYXBwcm9hY2ggc2VlbXMgY2xlYW4sIGFuZCBkb2VzIG5vdCBzZWVt
IHRvIHNsb3cgZG93biBvdXIgUGVyZm9ybWFuY2VUZXN0IG1pY3JvYmVuY2htYXJrcyBhdCBsZWFz
dC4KKworICAgICAgICBUaGlzIHBhdGNoIGhhcyAyIG1haW4gcGllY2VzOgorICAgICAgICAtIFJl
bW92ZSBEb2N1bWVudCBhbmQgKGFuZCBsb2FkZXIpIGRlcGVuZGVuY2llcyBmcm9tIEhUTUxQcmVs
b2FkU2Nhbm5lci9DU1NQcmVsb2FkU2Nhbm5lcgorICAgICAgICAgIFRoaXMgaXMgZG9uZSB0aHJv
dWdoIGludHJvZHVjdGlvbiBvZiBhIG5ldyBIVE1MUmVzb3VyY2VQcmVsb2FkZXIgY2xhc3Mgd2hp
Y2ggaG9sZHMKKyAgICAgICAgICBhIERvY3VtZW50KiBhbmQga25vd3MgaG93IHRvIHRhbGsgdG8g
dGhlIENhY2hlZFJlc291cmNlTG9hZGVyLgorICAgICAgICAgIFRoZSBwcmVsb2FkIHNjYW5uZXJz
IGFyZSBoYW5kZWQgYSBXZWFrUHRyIHRvIHRoZSBIVE1MUmVzb3VyY2VQcmVsb2FkZXIgYW5kIHNw
ZWFrIHRvCisgICAgICAgICAgaXQgdXNpbmcgY2FsbE9uTWFpblRocmVhZC4KKyAgICAgICAgLSBD
bGVhbi11cCBIVE1MUHJlbG9hZFNjYW5uZXJzIHRva2VuLWxvb3AgdG8gbm90IGJlIHRpZWQgdG8g
aGF2aW5nIGEgVG9rZW5pemVyLgorICAgICAgICAgIChPbiBhIGJhY2tncm91bmQgdGhlYWQsIHRo
ZSBIVE1MUHJlbG9hZFNjYW5uZXIgd29uJ3Qgb3duIHRoZSB0b2tlbml6ZXIsIGl0IHdpbGwganVz
dAorICAgICAgICAgICBiZSBwYXNzZWQgaW4gdG9rZW5zIGFuZCBleHBlY3RlZCB0byBpc3N1ZSBs
b2FkcyBpZiBuZWNlc3NhcnkuKQorCisgICAgICAgIFRoaXMgcGFzc2VzIGFsbCBvZiB0aGUgTGF5
b3V0VGVzdHMgdXNpbmcgdGhlIG1haW4gdGhyZWFkIHBhcnNlci4KKworICAgICAgICBUaGlzIHBh
dGNoIGRvZXMgbm90IG1ha2UgdGhlIEhUTUxQcmVsb2FkU2Nhbm5lciAxMDAlIHJlYWR5IGZvciB0
aHJlYWRpbmcKKyAgICAgICAgKGl0IHN0aWxsIHVzZXMgQXRvbWljU3RyaW5nIHdoaWNoIGlzIGN1
cnJlbnRseSBub3QtT0sgb24gdGhlIHBhcnNlciB0aHJlYWQpCisgICAgICAgIGJ1dCBpdCdzIHZl
cnkgY2xvc2UuICBUd28gZnVydGhlciAoYWxyZWFkeSB3cml0dGVuKSBwYXRjaGVzIHdpbGwgY29t
cGxldGUgdGhpcy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9h
ZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OkNTU1By
ZWxvYWRTY2FubmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjpzY2Fu
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaDoKKyAgICAgICAgKENTU1ByZWxv
YWRTY2FubmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kQ3VycmVudElucHV0U3RyZWFtVG9QcmVsb2Fk
U2Nhbm5lckFuZFNjYW4pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNl
ci5oOgorICAgICAgICAoSFRNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFydFRhZyk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3RhcnRPckVuZFRhZyk6
CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkVGFzazo6cHJvY2Vzc0F0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6OmNoYXJzZXQpOgorICAgICAgICAoUHJlbG9hZFRh
c2spOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFRhc2s6OnJlc291cmNlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQcmVsb2FkVGFzazo6c2hvdWxkUHJlbG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpQcmVsb2FkVGFzazo6Y3JlYXRlUHJlbG9hZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFByZWxvYWRTY2FubmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpzY2FuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
cmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzUG9zc2libGVTdHlsZVRhZyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZUJhc2VUYWcp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW4pOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAoSFRN
TFByZWxvYWRTY2FubmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVs
b2FkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
aXNTdHJpbmdTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlBy
ZWxvYWRSZXF1ZXN0Ojppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UHJlbG9hZFJlcXVlc3Q6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBy
ZWxvYWRSZXF1ZXN0OjpyZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFJl
c291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVz
b3VyY2VQcmVsb2FkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBy
ZWxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRSZXF1ZXN0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVlc3Q6OlByZWxvYWRSZXF1ZXN0KToKKyAg
ICAgICAgKEhUTUxSZXNvdXJjZVByZWxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUmVz
b3VyY2VQcmVsb2FkZXI6OkhUTUxSZXNvdXJjZVByZWxvYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OmNyZWF0ZVdlYWtQdHIpOgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaDoKKwogMjAxMy0wMi0wNyAgUm9nZXIgRm9u
ZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFZTMjAxMCBXZWJDb3JlIFRlc3RT
dXBwb3J0IHByb2plY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDNhNDlmNmYyYzYyYmJjOTM0
NTA1YjhkNDVhMjM4NDlkMzBmNTI3YzYuLjA0MWNkNzAwZDkyZDE4ZTAzMjZkZTVmOWZmOGU2NTNh
NTAzNjdlMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNTYzLDYgKzE1NjMsNyBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9wYXJzZXIvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlz
dC5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCiAgICAgaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorICAgIGh0bWwvcGFyc2VyL0hUTUxSZXNv
dXJjZVByZWxvYWRlci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNwcAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcAogICAgIGh0bWwvcGFyc2VyL0hU
TUxUb2tlbml6ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5OTk5Njcx
ZjhiOTZmM2JmNjdkZjZkNDIwNDM2YWIzM2MzMmYyNDUyLi5jMjQ1MWU1MzkwMzZmYjNhNDM5ZThm
ZGM2ZjMzYWQxYWJmYjBjY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM2
MDIsNiArMzYwMiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlclRocmVhZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUHJlbG9hZFNjYW5uZXIuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJl
c291cmNlUHJlbG9hZGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJl
c291cmNlUHJlbG9hZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3Jp
cHRSdW5uZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MU2NyaXB0UnVu
bmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggZGQzMTNhYTY0ODYxZmUzOWQyM2VkNDFkZjVjNjJiYTY4NDZi
ZjIxMi4uYjYxMjEyMTkyZWMyZDU4NWIxYjFhNzE2MTg1ZTdkZjNiOWY3YWQ0YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC03NDIsNiArNzQyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9wYXJzZXIvSFRN
TFBhcnNlclNjaGVkdWxlci5jcHAgXAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJUaHJlYWQu
Y3BwIFwKICAgICBodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIFwKKyAgICBodG1s
L3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIFwKICAgICBodG1sL3BhcnNlci9IVE1M
U2NyaXB0UnVubmVyLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFNvdXJjZVRyYWNrZXIuY3Bw
IFwKICAgICBodG1sL3BhcnNlci9IVE1MVG9rZW5pemVyLmNwcCBcCkBAIC0xOTI3LDYgKzE5Mjgs
NyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRM
aXN0LmggXAogICAgIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJTY2hlZHVsZXIuaCBcCiAgICAgaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmggXAorICAgIGh0bWwvcGFyc2VyL0hUTUxSZXNv
dXJjZVByZWxvYWRlci5oIFwKICAgICBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmggXAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXJIb3N0LmggXAogICAgIGh0bWwvcGFyc2Vy
L0hUTUxUb2tlbi5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMTJlNzZkMGI0MWRkZjBlZTcxZDhk
MjZhZjQ3Njc1YTZmYzQ4MzAzLi4zZmJjZTY2Y2Y5ZDg5ZjlkMDcwMWI5ZTg3NDE0ZDIxZDM4MGIx
ZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNDA5LDYgKzM0MDksOCBAQAogICAgICAgICAgICAg
J2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJUaHJlYWQuaCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJz
ZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRN
TFByZWxvYWRTY2FubmVyLmgnLAorICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJj
ZVByZWxvYWRlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVBy
ZWxvYWRlci5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cCcsCiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5oJywKICAgICAg
ICAgICAgICdodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVySG9zdC5oJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZjY5NWMyY2YyYmViNGQ5
OTZjNTA1NzQ1MzU5NGU3MzhlMjMwMWJhZi4uM2VjNjdlYjI4NjI0ZTVjODdjYzY2NjQ2MWVjMzc5
NDhmZmViNzhkNCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTY0OTQ2LDYgKzY0OTQ2LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHBhcnNlclxIVE1MUmVzb3VyY2VQcmVs
b2FkZXIuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxwYXJzZXJcSFRNTFJlc291cmNlUHJlbG9hZGVyLmgiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHBhcnNlclxI
VE1MU2NyaXB0UnVubmVyLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IDI3YTNlZGFmMjQ4NzUy
MzNmY2Y3YTM4Yjk2YWIzYzFhMTQ2Y2NhMzkuLjJhMmYzNjllNDM2YTNhNzlhZGRiZWY3YWMyODFi
NTBlODlhNmIzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9X
ZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvagpAQCAtNDg5MSw2ICs0ODkxLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGh0bWxccGFyc2VyXEhUTUxQYXJzZXJTY2hlZHVsZXIuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlclRocmVhZC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUHJlbG9hZFNjYW5uZXIuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2Vy
XEhUTUxTY3JpcHRSdW5uZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRt
bFxwYXJzZXJcSFRNTFNvdXJjZVRyYWNrZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFxwYXJzZXJcSFRNTFRva2VuaXplci5jcHAiIC8+CkBAIC03OTM5LDYgKzc5NDAs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlclNj
aGVkdWxlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRN
TFBhcnNlclRocmVhZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJz
ZXJcSFRNTFByZWxvYWRTY2FubmVyLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXHBhcnNlclxIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxTY3JpcHRSdW5uZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MU291cmNlVHJhY2tlci5o
IiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU0MGU4ZDMyM2E4MmYyZTI2ZGJhYTYyZjIwM2NjMjgwZDNmMDhmNzEuLjdiZTI4
NmI5YTE1M2MyZjNkMjdiZDY3ZWRhNzIwNmUxMjkyNDE2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ0MTQsNiArNDQxNCw4
IEBACiAJCUE4RDA2NUFFMEEyNDQ2Q0QwMDVFNzIwMyAvKiBKU0hUTUxGb3JtRWxlbWVudEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQw
NjVBRDBBMjQ0NkNEMDA1RTcyMDMgLyogSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwICovOyB9
OwogCQlBOEQwNkIzOTBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmggaW4gQ29weSBHZW5l
cmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQwNkIz
NzBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoKTsgfTsgfTsKIAkJQThEMDZCM0EwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQwNkIz
ODBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmNwcCAqLzsgfTsKKwkJQThEMjIzRkQxNkI1
MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEQyMjNGQjE2QjUyRTRFMDAxNTcyODgg
LyogSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCAqLzsgfTsKKwkJQThEMjIzRkUxNkI1MkU0RTAw
MTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVByZWxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThEMjIzRkMxNkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxS
ZXNvdXJjZVByZWxvYWRlci5oICovOyB9OwogCQlBOERGM0ZDRTA5N0ZBMEZDMDA1Mjk4MUIgLyog
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4REYzRkM2MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MRm9ybUNv
bnRyb2xzQ29sbGVjdGlvbi5oICovOyB9OwogCQlBOERGM0ZDRjA5N0ZBMEZDMDA1Mjk4MUIgLyog
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThERjNGQzcwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJQThERjNGRDAwOTdGQTBGQzAwNTI5ODFC
IC8qIEhUTUxDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOERGM0ZDODA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTE3NTgs
NiArMTE3NjAsOCBAQAogCQlBOEQwNjVBRDBBMjQ0NkNEMDA1RTcyMDMgLyogSlNIVE1MRm9ybUVs
ZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
OEQwNkIzNzBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQThEMDZCMzgwQTI2NURDRDAwNUU3MjAzIC8qIEhUTUxOYW1lcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTE5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQThEMjIzRkIxNkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVBy
ZWxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBIVE1MUmVz
b3VyY2VQcmVsb2FkZXIuY3BwOyBwYXRoID0gcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4RDIyM0ZDMTZCNTJFNEUwMDE1NzI4
OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSFRNTFJlc291cmNlUHJlbG9hZGVyLmg7IHBhdGggPSBwYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4REYzRkM2MDk3RkEw
RkIwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThERjNGQzcwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4REYzRkM4MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTENvbGxlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4NjcwLDYgKzE4Njc0LDggQEAKIAkJCQk5NzQx
ODdEMTE2QTc5MzIyMDBGQTc3QTcgLyogSFRNTFBhcnNlclRocmVhZC5oICovLAogCQkJCTk3N0Iz
ODU5MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MUHJlbG9hZFNjYW5uZXIuY3BwICovLAogCQkJCTk3
N0IzODVBMTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MUHJlbG9hZFNjYW5uZXIuaCAqLywKKwkJCQlB
OEQyMjNGQjE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCAqLywK
KwkJCQlBOEQyMjNGQzE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291cmNlUHJlbG9hZGVyLmgg
Ki8sCiAJCQkJOTc3QjM4NUIxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxTY3JpcHRSdW5uZXIuY3Bw
ICovLAogCQkJCTk3N0IzODVDMTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MU2NyaXB0UnVubmVyLmgg
Ki8sCiAJCQkJOTc3QjM4NUQxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxTY3JpcHRSdW5uZXJIb3N0
LmggKi8sCkBAIC0yNDQxOSw2ICsyNDQyNSw3IEBACiAJCQkJQTQzQkY1OTkxMTQ5MjkwQTAwQzY0
M0NBIC8qIEhUTUxQcm9ncmVzc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTAzM0E2QTdD
MTQ3RTA3RDIwMDUwOUIzNiAvKiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4Q0ZGN0EzMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MUXVvdGVFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBOEQyMjNGRTE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291
cmNlUHJlbG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxREMyNTBBMTUyMDU3MDBCMTJB
NjggLyogSFRNTFNjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0IzODc1MTIy
ODgzRTkwMEI4MUZGOCAvKiBIVE1MU2NyaXB0UnVubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NzdCMzg3NjEyMjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjc3MTIsNiArMjc3MTksNyBAQAogCQkJCUE0M0JGNTk4MTE0OTI5MEEwMEM2
NDNDQSAvKiBIVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAzM0E2
QTdFMTQ3RTA3RTcwMDUwOUIzNiAvKiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThDRkY3QTUwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxRdW90ZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThEMjIzRkQxNkI1MkU0RTAwMTU3Mjg4IC8qIEhU
TUxSZXNvdXJjZVByZWxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODcxREMyMjBBMTUy
MDU3MDBCMTJBNjggLyogSFRNTFNjcmlwdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTc3QjM4NzQxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxTY3JpcHRSdW5uZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgxMzY5RDkwOTczNzRGNjAwRDc0NDYzIC8qIEhUTUxTZWxlY3RFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NT
UHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IDhlZWM4MWIxMWRmYzNhZmU0YmI4OTMxMzUzYzljNzIw
ZDE1ZjBmODYuLjNiZmU4MTY4YjE4YWMxNzlkNzJiY2E4OGVkODliMTdlMzk4ZGQzODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAKQEAg
LTMyLDE1ICszMiwxNiBAQAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0SW5pdGlhdG9ycy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbi5oIgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1DU1NQcmVsb2FkU2Nhbm5lcjo6Q1NTUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQq
IGRvY3VtZW50KQorQ1NTUHJlbG9hZFNjYW5uZXI6OkNTU1ByZWxvYWRTY2FubmVyKCkKICAgICA6
IG1fc3RhdGUoSW5pdGlhbCkKLSAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3Jl
cXVlc3RzKDApCiB7CiB9CiAKQEAgLTUxLDExICs1MiwxMyBAQCB2b2lkIENTU1ByZWxvYWRTY2Fu
bmVyOjpyZXNldCgpCiAgICAgbV9ydWxlVmFsdWUuY2xlYXIoKTsKIH0KIAotdm9pZCBDU1NQcmVs
b2FkU2Nhbm5lcjo6c2Nhbihjb25zdCBIVE1MVG9rZW4mIHRva2VuKQordm9pZCBDU1NQcmVsb2Fk
U2Nhbm5lcjo6c2Nhbihjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBWZWN0b3I8T3duUHRyPFByZWxv
YWRSZXF1ZXN0PiA+JiByZXF1ZXN0cykKIHsKKyAgICBtX3JlcXVlc3RzID0gJnJlcXVlc3RzOwog
ICAgIGNvbnN0IEhUTUxUb2tlbjo6RGF0YVZlY3RvciYgY2hhcmFjdGVycyA9IHRva2VuLmNoYXJh
Y3RlcnMoKTsKICAgICBmb3IgKEhUTUxUb2tlbjo6RGF0YVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGNoYXJhY3RlcnMuYmVnaW4oKTsgaXRlciAhPSBjaGFyYWN0ZXJzLmVuZCgpICYmIG1f
c3RhdGUgIT0gRG9uZVBhcnNpbmdJbXBvcnRSdWxlczsgKytpdGVyKQogICAgICAgICB0b2tlbml6
ZSgqaXRlcik7CisgICAgbV9yZXF1ZXN0cyA9IDA7CiB9CiAKIGlubGluZSB2b2lkIENTU1ByZWxv
YWRTY2FubmVyOjp0b2tlbml6ZShVQ2hhciBjKQpAQCAtMTkzLDExICsxOTYsMTMgQEAgc3RhdGlj
IFN0cmluZyBwYXJzZUNTU1N0cmluZ09yVVJMKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQogdm9pZCBDU1NQcmVsb2FkU2Nhbm5lcjo6ZW1pdFJ1bGUoKQogewogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSgiaW1wb3J0IiwgbV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9ydWxl
Lmxlbmd0aCgpKSkgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSBwYXJzZUNTU1N0cmluZ09yVVJM
KG1fcnVsZVZhbHVlLmNoYXJhY3RlcnMoKSwgbV9ydWxlVmFsdWUubGVuZ3RoKCkpOwotICAgICAg
ICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KG1fZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHZhbHVl
KSkpOwotICAgICAgICAgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycygpLmNzcyk7Ci0gICAgICAgICAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5wcmVsb2FkKENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1
ZXN0LCBTdHJpbmcoKSk7CisgICAgICAgIFN0cmluZyB1cmwgPSBwYXJzZUNTU1N0cmluZ09yVVJM
KG1fcnVsZVZhbHVlLmNoYXJhY3RlcnMoKSwgbV9ydWxlVmFsdWUubGVuZ3RoKCkpOworICAgICAg
ICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEtVUkwgYmFzZUVsZW1lbnRVUkw7
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXNzZWQgaW4gZnJvbSB0aGUgSFRNTFByZWxvYWRT
Y2FuZXIgdmlhIHNjYW4oKSEKKyAgICAgICAgICAgIE93blB0cjxQcmVsb2FkUmVxdWVzdD4gcmVx
dWVzdCA9IFByZWxvYWRSZXF1ZXN0OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgY2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9ycygpLmNzcywgdXJsLCBiYXNlRWxlbWVudFVSTCwgQ2FjaGVk
UmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQpOworICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0
aGlzIGJlIGluY2x1ZGluZyB0aGUgY2hhcnNldCBpbiB0aGUgcHJlbG9hZCByZXF1ZXN0PworICAg
ICAgICAgICAgbV9yZXF1ZXN0cy0+YXBwZW5kKHJlcXVlc3QucmVsZWFzZSgpKTsKICAgICAgICAg
fQogICAgICAgICBtX3N0YXRlID0gSW5pdGlhbDsKICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKCJjaGFyc2V0IiwgbV9ydWxlLmNoYXJhY3RlcnMoKSwgbV9ydWxlLmxlbmd0aCgpKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5oCmluZGV4
IDhlMTkyOTY1ZTdlYTBjOTQyYjdiODIwYTVjNTg1NDZjOTdiNjFhNjguLmE4YTQwZGM5MGQwZmEy
NDljZmJkYjczODU1OTQxZTUxYjYxOWNmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaApAQCAtMjcsMjAgKzI3LDIxIEBACiAjaWZuZGVmIENT
U1ByZWxvYWRTY2FubmVyX2gKICNkZWZpbmUgQ1NTUHJlbG9hZFNjYW5uZXJfaAogCisjaW5jbHVk
ZSAiSFRNTFJlc291cmNlUHJlbG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBIVE1MVG9rZW47CiAKIGNsYXNzIENTU1ByZWxvYWRT
Y2FubmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NQcmVsb2FkU2Nhbm5lcik7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqKTsKKyAgICBl
eHBsaWNpdCBDU1NQcmVsb2FkU2Nhbm5lcigpOwogCiAgICAgdm9pZCByZXNldCgpOwotICAgIHZv
aWQgc2Nhbihjb25zdCBIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHNjYW4oY29uc3QgSFRNTFRva2Vu
JiwgVmVjdG9yPE93blB0cjxQcmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMpOwogCiBwcml2YXRl
OgogICAgIGVudW0gU3RhdGUgewpAQCAtNTYsMTQgKzU3LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
IERvbmVQYXJzaW5nSW1wb3J0UnVsZXMsCiAgICAgfTsKIAotICAgIGlubGluZSB2b2lkIHRva2Vu
aXplKFVDaGFyIGMpOworICAgIGlubGluZSB2b2lkIHRva2VuaXplKFVDaGFyKTsKICAgICB2b2lk
IGVtaXRSdWxlKCk7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFN0cmluZ0J1aWxkZXIgbV9y
dWxlOwogICAgIFN0cmluZ0J1aWxkZXIgbV9ydWxlVmFsdWU7CiAKLSAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKKyAgICAvLyBPbmx5IG5vbi1udWxsIGR1cmluZyBzY2FuKCkKKyAgICBWZWN0b3I8
T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+KiBtX3JlcXVlc3RzOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggMWU3
YzBiODhkZTM0ZjIxM2NiYTFiODU1YTk3NDQ1Njc1ZjBiYWU0Zi4uMTZjYmU1ODZiY2Q5MGRlOTk5
MjNlMzRlMDU0YWFmZTc3ZDdkYzBhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC04Nyw2ICs4Nyw3IEBAIEhUTUxEb2N1bWVu
dFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wg
cmVwb3J0RXJyb3JzCiAjaWYgRU5BQkxFKFRIUkVBREVEX0hUTUxfUEFSU0VSKQogICAgICwgbV93
ZWFrRmFjdG9yeSh0aGlzKQogI2VuZGlmCisgICAgLCBtX3ByZWxvYWRlcihhZG9wdFB0cihuZXcg
SFRNTFJlc291cmNlUHJlbG9hZGVyKGRvY3VtZW50KSkpCiAgICAgLCBtX2VuZFdhc0RlbGF5ZWQo
ZmFsc2UpCiAgICAgLCBtX2hhdmVCYWNrZ3JvdW5kUGFyc2VyKGZhbHNlKQogICAgICwgbV9wdW1w
U2Vzc2lvbk5lc3RpbmdMZXZlbCgwKQpAQCAtNDA5LDEwICs0MTAsMTAgQEAgdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiAgICAgaWYg
KGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgewogICAgICAgICBBU1NFUlQobV90b2tlbml6ZXItPnN0
YXRlKCkgPT0gSFRNTFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOwogICAgICAgICBpZiAoIW1f
cHJlbG9hZFNjYW5uZXIpIHsKLSAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0
cihuZXcgSFRNTFByZWxvYWRTY2FubmVyKGRvY3VtZW50KCksIG1fb3B0aW9ucykpOworICAgICAg
ICAgICAgbV9wcmVsb2FkU2Nhbm5lciA9IGFkb3B0UHRyKG5ldyBIVE1MUHJlbG9hZFNjYW5uZXIo
bV9vcHRpb25zLCBkb2N1bWVudCgpLT51cmwoKSkpOwogICAgICAgICAgICAgbV9wcmVsb2FkU2Nh
bm5lci0+YXBwZW5kVG9FbmQobV9pbnB1dC5jdXJyZW50KCkpOwogICAgICAgICB9Ci0gICAgICAg
IG1fcHJlbG9hZFNjYW5uZXItPnNjYW4oKTsKKyAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+c2Nh
bihtX3ByZWxvYWRlci5nZXQoKSwgZG9jdW1lbnQoKS0+YmFzZUVsZW1lbnRVUkwoKSk7CiAgICAg
fQogCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRXcml0ZUhUTUwoY29va2llLCBt
X2lucHV0LmN1cnJlbnQoKS5jdXJyZW50TGluZSgpLnplcm9CYXNlZEludCgpKTsKQEAgLTQ5Niw5
ICs0OTcsOSBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQogICAgICAgICAvLyBDaGVjayB0aGUgZG9jdW1lbnQud3JpdGUoKSBv
dXRwdXQgd2l0aCBhIHNlcGFyYXRlIHByZWxvYWQgc2Nhbm5lciBhcwogICAgICAgICAvLyB0aGUg
bWFpbiBzY2FubmVyIGNhbid0IGRlYWwgd2l0aCBpbnNlcnRpb25zLgogICAgICAgICBpZiAoIW1f
aW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIpCi0gICAgICAgICAgICBtX2luc2VydGlvblByZWxvYWRT
Y2FubmVyID0gYWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpLCBtX29w
dGlvbnMpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0
cihuZXcgSFRNTFByZWxvYWRTY2FubmVyKG1fb3B0aW9ucywgZG9jdW1lbnQoKS0+dXJsKCkpKTsK
ICAgICAgICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQoc291cmNlKTsK
LSAgICAgICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lci0+c2NhbigpOworICAgICAgICBtX2lu
c2VydGlvblByZWxvYWRTY2FubmVyLT5zY2FuKG1fcHJlbG9hZGVyLmdldCgpLCBkb2N1bWVudCgp
LT5iYXNlRWxlbWVudFVSTCgpKTsKICAgICB9CiAKICAgICBlbmRJZkRlbGF5ZWQoKTsKQEAgLTU2
Miw3ICs1NjMsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kKGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYgc291cmNlKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9wcmVs
b2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQoc291cmNlKTsKICAgICAgICAgICAgIGlmIChpc1dhaXRp
bmdGb3JTY3JpcHRzKCkpCi0gICAgICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+c2Nhbigp
OworICAgICAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPnNjYW4obV9wcmVsb2FkZXIuZ2V0
KCksIGRvY3VtZW50KCktPmJhc2VFbGVtZW50VVJMKCkpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC03NDksNyArNzUwLDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmFwcGVuZEN1cnJlbnRJ
bnB1dFN0cmVhbVRvUHJlbG9hZFNjYW5uZXJBbmRTY2FuKCkKIHsKICAgICBBU1NFUlQobV9wcmVs
b2FkU2Nhbm5lcik7CiAgICAgbV9wcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQobV9pbnB1dC5j
dXJyZW50KCkpOwotICAgIG1fcHJlbG9hZFNjYW5uZXItPnNjYW4oKTsKKyAgICBtX3ByZWxvYWRT
Y2FubmVyLT5zY2FuKG1fcHJlbG9hZGVyLmdldCgpLCBkb2N1bWVudCgpLT5iYXNlRWxlbWVudFVS
TCgpKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hl
ZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggOTU3MjJmMWI4Zjk1NzBhNTZmNzVhNDgwODJl
Y2ZmODRmYmE5NDQ3Ni4uMjNiNDk2MTIyZjViODc3OTk5MDRiZDM5MGMzYzRhMmI0ZGE0OTI2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24u
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRTdHJlYW0uaCIKICNpbmNsdWRlICJIVE1MUGFyc2VyT3B0
aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxSZXNvdXJjZVByZWxvYWRlci5oIgogI2luY2x1ZGUgIkhU
TUxTY3JpcHRSdW5uZXJIb3N0LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZVRyYWNrZXIuaCIKICNp
bmNsdWRlICJIVE1MVG9rZW4uaCIKQEAgLTE4Myw2ICsxODQsNyBAQCBwcml2YXRlOgogICAgIERl
cXVlPE93blB0cjxQYXJzZWRDaHVuaz4gPiBtX3NwZWN1bGF0aW9uczsKICAgICBXZWFrUHRyRmFj
dG9yeTxIVE1MRG9jdW1lbnRQYXJzZXI+IG1fd2Vha0ZhY3Rvcnk7CiAjZW5kaWYKKyAgICBPd25Q
dHI8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3ByZWxvYWRlcjsKIAogICAgIGJvb2wgbV9lbmRX
YXNEZWxheWVkOwogICAgIGJvb2wgbV9oYXZlQmFja2dyb3VuZFBhcnNlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGVjN2U3
ZDJiNmI0ZmNiNTRjMzIxMTIxM2I5ZDQyYzg1M2RhNDU3NGEuLjMxZTg0NWJkMTVkODk5OTFlMTNm
NDc2NjRlNzIyZmMzYjUzMmFlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcApAQCAtMjgsMjIgKzI4LDMxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTFByZWxvYWRTY2FubmVyLmgiCiAKLSNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTERvY3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VyT3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNs
dWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2luY2x1ZGUgIkxpbmtSZWxBdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK3N0
YXRpYyBib29sIGlzU3RhcnRUYWcoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICByZXR1
cm4gdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZzsgLy8gSG9seSB2ZXJi
b3NpdHksIGJhdG1hbi4KK30KKworc3RhdGljIGJvb2wgaXNTdGFydE9yRW5kVGFnKGNvbnN0IEhU
TUxUb2tlbiYgdG9rZW4pCit7CisgICAgcmV0dXJuIHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5U
eXBlczo6RW5kVGFnIHx8IGlzU3RhcnRUYWcodG9rZW4pOworfQorCiBjbGFzcyBQcmVsb2FkVGFz
ayB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUHJlbG9hZFRhc2soY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpCkBA
IC04OSw5ICs5OCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc2V0VXJsVG9Mb2Fk
KGF0dHJpYnV0ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1l
ID09IHR5cGVBdHRyKQogICAgICAgICAgICAgICAgICAgICBtX2lucHV0SXNJbWFnZSA9IGVxdWFs
SWdub3JpbmdDYXNlKGF0dHJpYnV0ZVZhbHVlLCBJbnB1dFR5cGVOYW1lczo6aW1hZ2UoKSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fdGFnTmFtZSA9PSBiYXNlVGFnKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHJlZkF0dHIpCi0gICAgICAgICAgICAgICAgICAg
IG1fYmFzZUVsZW1lbnRIcmVmID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0
dHJpYnV0ZVZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyNCwy
NiArMTMwLDUxIEBAIHB1YmxpYzoKICAgICAgICAgbV91cmxUb0xvYWQgPSBzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoYXR0cmlidXRlVmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQg
cHJlbG9hZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCisgICAgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJdHMg
bm90IGNsZWFyIHRoYXQgdGhpcyBpZiBpcyBuZWVkZWQsIHRoZSBsb2FkZXIgcHJvYmFibHkgaWdu
b3JlcyBjaGFyc2V0IGZvciBpbWFnZSByZXF1ZXN0cyBhbnl3YXkuCisgICAgICAgIGlmIChtX3Rh
Z05hbWUgPT0gaW1nVGFnKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAg
ICAgIHJldHVybiBtX2NoYXJzZXQ7CisgICAgfQorCisgICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
cmVzb3VyY2VUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3RhZ05hbWUgPT0gc2Ny
aXB0VGFnKQorICAgICAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpTY3JpcHQ7CisgICAg
ICAgIGlmIChtX3RhZ05hbWUgPT0gaW1nVGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRUYWcgJiYg
bV9pbnB1dElzSW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpJbWFn
ZVJlc291cmNlOworICAgICAgICBpZiAobV90YWdOYW1lID09IGxpbmtUYWcgJiYgbV9saW5rSXNT
dHlsZVNoZWV0ICYmIG1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW4pCisgICAgICAgICAgICBy
ZXR1cm4gQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOwor
ICAgIH0KKworICAgIGJvb2wgc2hvdWxkUHJlbG9hZCgpCiAgICAgewogICAgICAgICBpZiAobV91
cmxUb0xvYWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUxvYWRlciA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgICAgICBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3QoZG9jdW1lbnQtPmNvbXBs
ZXRlVVJMKG1fdXJsVG9Mb2FkLCBiYXNlVVJMKSkpOwotICAgICAgICByZXF1ZXN0LnNldEluaXRp
YXRvcih0YWdOYW1lKCkpOwotICAgICAgICBpZiAobV90YWdOYW1lID09IHNjcmlwdFRhZykgewot
ICAgICAgICAgICAgcmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkuc2V0QWxsb3dDb29r
aWVzKGNyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMoKSk7Ci0gICAgICAgICAgICBjYWNoZWRS
ZXNvdXJjZUxvYWRlci0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCByZXF1ZXN0LCBt
X2NoYXJzZXQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fdGFnTmFtZSA9PSBpbWdU
YWcgfHwgKG1fdGFnTmFtZSA9PSBpbnB1dFRhZyAmJiBtX2lucHV0SXNJbWFnZSkpCi0gICAgICAg
ICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cHJlbG9hZChDYWNoZWRSZXNvdXJjZTo6SW1hZ2VS
ZXNvdXJjZSwgcmVxdWVzdCwgU3RyaW5nKCkpOwotICAgICAgICBlbHNlIGlmIChtX3RhZ05hbWUg
PT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQgJiYgbV9saW5rTWVkaWFBdHRyaWJ1dGVJ
c1NjcmVlbikgCi0gICAgICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci0+cHJlbG9hZChDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCwgcmVxdWVzdCwgbV9jaGFyc2V0KTsKKyAgICAgICAg
aWYgKG1fdGFnTmFtZSA9PSBsaW5rVGFnICYmICghbV9saW5rSXNTdHlsZVNoZWV0IHx8ICFtX2xp
bmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAobV90YWdOYW1lID09IGlucHV0VGFnICYmICFtX2lucHV0SXNJbWFnZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gY3JlYXRlUHJlbG9hZFJlcXVlc3QoY29uc3Qg
S1VSTCYgcHJlZGljdGVkQmFzZVVSTCkKKyAgICB7CisgICAgICAgIGlmICghc2hvdWxkUHJlbG9h
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgT3duUHRyPFByZWxv
YWRSZXF1ZXN0PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZShtX3RhZ05hbWUsIG1f
dXJsVG9Mb2FkLCBwcmVkaWN0ZWRCYXNlVVJMLCByZXNvdXJjZVR5cGUoKSk7CisgICAgICAgIHJl
cXVlc3QtPm1fY3Jvc3NPcmlnaW5Nb2RlQWxsb3dzQ29va2llcyA9IGNyb3NzT3JpZ2luTW9kZUFs
bG93c0Nvb2tpZXMoKTsKKyAgICAgICAgcmVxdWVzdC0+bV9jaGFyc2V0ID0gY2hhcnNldCgpOwor
ICAgICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiBiYXNlRWxlbWVudEhyZWYoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VFbGVtZW50
SHJlZjsgfQogCiBwcml2YXRlOgogCkBAIC0xNTUsMTggKzE4NiwxNiBAQCBwcml2YXRlOgogICAg
IEF0b21pY1N0cmluZyBtX3RhZ05hbWU7CiAgICAgU3RyaW5nIG1fdXJsVG9Mb2FkOwogICAgIFN0
cmluZyBtX2NoYXJzZXQ7Ci0gICAgU3RyaW5nIG1fYmFzZUVsZW1lbnRIcmVmOwogICAgIFN0cmlu
ZyBtX2Nyb3NzT3JpZ2luTW9kZTsKICAgICBib29sIG1fbGlua0lzU3R5bGVTaGVldDsKICAgICBi
b29sIG1fbGlua01lZGlhQXR0cmlidXRlSXNTY3JlZW47CiAgICAgYm9vbCBtX2lucHV0SXNJbWFn
ZTsKIH07CiAKLUhUTUxQcmVsb2FkU2Nhbm5lcjo6SFRNTFByZWxvYWRTY2FubmVyKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBtX2Rv
Y3VtZW50KGRvY3VtZW50KQotICAgICwgbV9jc3NTY2FubmVyKGRvY3VtZW50KQotICAgICwgbV90
b2tlbml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKG9wdGlvbnMpKQorSFRNTFByZWxvYWRTY2Fu
bmVyOjpIVE1MUHJlbG9hZFNjYW5uZXIoY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMs
IGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQorICAgIDogbV90b2tlbml6ZXIoSFRNTFRva2VuaXpl
cjo6Y3JlYXRlKG9wdGlvbnMpKQogICAgICwgbV9pblN0eWxlKGZhbHNlKQorICAgICwgbV9kb2N1
bWVudFVSTChkb2N1bWVudFVSTCkKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKICAgICAs
IG1fdGVtcGxhdGVDb3VudCgwKQogI2VuZGlmCkBAIC0xNzgsNjYgKzIwNywxMDIgQEAgdm9pZCBI
VE1MUHJlbG9hZFNjYW5uZXI6OmFwcGVuZFRvRW5kKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQogICAgIG1fc291cmNlLmFwcGVuZChzb3VyY2UpOwogfQogCi12b2lkIEhUTUxQcmVsb2Fk
U2Nhbm5lcjo6c2NhbigpCisvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBmb3IgY29udmVuaWVuY2Ug
b24gdGhlIG1haW4gdGhyZWFkIGFuZCBpcyBub3QgdXNlZCBieSB0aGUgYmFja2dyb3VuZC10aHJl
YWQgcHJlbG9hZCBzY2FubmVyLgordm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oSFRNTFJl
c291cmNlUHJlbG9hZGVyKiBwcmVsb2FkZXIsIGNvbnN0IEtVUkwmIHN0YXJ0aW5nQmFzZUVsZW1l
bnRVUkwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSFRNTFRva2VuaXplcjo6
dXBkYXRlU3RhdGVGb3Igb25seSB3b3JrcyBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgLy8gV2hl
biB3ZSBzdGFydCBzY2FubmluZywgb3VyIGJlc3QgcHJlZGljdGlvbiBvZiB0aGUgYmFzZUVsZW1l
bnRVUkwgaXMgdGhlIHJlYWwgb25lIQotICAgIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwgPSBt
X2RvY3VtZW50LT5iYXNlRWxlbWVudFVSTCgpOworICAgIGlmICghc3RhcnRpbmdCYXNlRWxlbWVu
dFVSTC5pc0VtcHR5KCkpCisgICAgICAgIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwgPSBzdGFy
dGluZ0Jhc2VFbGVtZW50VVJMOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBzYXZlIGFuZCBy
ZS11c2UgdGhlc2UgdG9rZW5zIGluIEhUTUxEb2N1bWVudFBhcnNlciBpZgotICAgIC8vIHRoZSBw
ZW5kaW5nIHNjcmlwdCBkb2Vzbid0IGVuZCB1cCBjYWxsaW5nIGRvY3VtZW50LndyaXRlLgorICAg
IFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4gcmVxdWVzdHM7CisgICAgLy8gTm90ZTog
bV90b2tlbiBpcyBvbmx5IHVzZWQgZnJvbSB0aGlzIGZ1bmN0aW9uIGFuZCBmb3IgdGhlIG1haW4g
dGhyZWFkLgorICAgIC8vIEFsbCBvdGhlciBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhIHRva2VuLgog
ICAgIHdoaWxlIChtX3Rva2VuaXplci0+bmV4dFRva2VuKG1fc291cmNlLCBtX3Rva2VuKSkgewot
ICAgICAgICBwcm9jZXNzVG9rZW4oKTsKKyAgICAgICAgaWYgKGlzU3RhcnRUYWcobV90b2tlbikp
CisgICAgICAgICAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IoQXRvbWljU3RyaW5nKG1f
dG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpKSk7CisgICAgICAgIHBy
b2Nlc3NUb2tlbihtX3Rva2VuLCByZXF1ZXN0cyk7CiAgICAgICAgIG1fdG9rZW4uY2xlYXIoKTsK
ICAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0cy5zaXplKCk7IGkrKykK
KyAgICAgICAgcHJlbG9hZGVyLT5wcmVsb2FkKHJlcXVlc3RzW2ldLnJlbGVhc2UoKSk7CiB9CiAK
LXZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjpwcm9jZXNzVG9rZW4oKQotewotICAgIGlmIChtX2lu
U3R5bGUpIHsKLSAgICAgICAgaWYgKG1fdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpD
aGFyYWN0ZXIpCi0gICAgICAgICAgICBtX2Nzc1NjYW5uZXIuc2NhbihtX3Rva2VuKTsKLSAgICAg
ICAgZWxzZSBpZiAobV90b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZykgewot
ICAgICAgICAgICAgbV9pblN0eWxlID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2Nzc1NjYW5uZXIu
cmVzZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3Rva2VuLnR5cGUoKSAhPSBI
VE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpIHsKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
LSAgICAgICAgaWYgKG1fdGVtcGxhdGVDb3VudCAmJiBtX3Rva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW5UeXBlczo6RW5kVGFnICYmIEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1f
dG9rZW4ubmFtZSgpLnNpemUoKSkgPT0gdGVtcGxhdGVUYWcpCitib29sIEhUTUxQcmVsb2FkU2Nh
bm5lcjo6cHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lLCBjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIGlmIChpc1N0YXJ0T3JFbmRUYWco
dG9rZW4pICYmIHRhZ05hbWUgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICAgICAgaWYgKGlzU3RhcnRU
YWcodG9rZW4pKQorICAgICAgICAgICAgbV90ZW1wbGF0ZUNvdW50Kys7CisgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fdGVtcGxhdGVDb3VudC0tOwotI2VuZGlmCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7IC8vIFR3YXMgb3VyIHRva2VuLgogICAgIH0KLQotICAgIEF0
b21pY1N0cmluZyB0YWdOYW1lKG1fdG9rZW4ubmFtZSgpLmRhdGEoKSwgbV90b2tlbi5uYW1lKCku
c2l6ZSgpKTsKLQotI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIGlmICh0YWdOYW1l
ID09IHRlbXBsYXRlVGFnKQotICAgICAgICBtX3RlbXBsYXRlQ291bnQrKzsKLQotICAgIGlmICht
X3RlbXBsYXRlQ291bnQpCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBJZiB3ZSdyZSBpbiBhIHRl
bXBsYXRlIHdlICJjb25zdW1lIiBhbGwgdG9rZW5zLgorICAgIHJldHVybiBtX3RlbXBsYXRlQ291
bnQgPiAwOworfQogI2VuZGlmCiAKLSAgICBQcmVsb2FkVGFzayB0YXNrKHRhZ05hbWUsIG1fdG9r
ZW4uYXR0cmlidXRlcygpKTsKLSAgICBtX3Rva2VuaXplci0+dXBkYXRlU3RhdGVGb3IodGFzay50
YWdOYW1lKCkpOwotCi0gICAgaWYgKHRhc2sudGFnTmFtZSgpID09IHN0eWxlVGFnKQotICAgICAg
ICBtX2luU3R5bGUgPSB0cnVlOworYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3Nz
aWJsZVN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2Vu
JiB0b2tlbikKK3sKKyAgICBBU1NFUlQoaXNTdGFydE9yRW5kVGFnKHRva2VuKSk7CisgICAgaWYg
KHRhZ05hbWUgPT0gc3R5bGVUYWcpIHsKKyAgICAgICAgbV9pblN0eWxlID0gaXNTdGFydFRhZyh0
b2tlbik7CisgICAgICAgIGlmICghbV9pblN0eWxlKQorICAgICAgICAgICAgbV9jc3NTY2FubmVy
LnJlc2V0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CiAKLSAgICBpZiAodGFzay50YWdOYW1lKCkgPT0gYmFzZVRhZykKLSAgICAgICAgdXBkYXRl
UHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoS1VSTChtX2RvY3VtZW50LT51cmwoKSwgdGFzay5iYXNl
RWxlbWVudEhyZWYoKSkpOworYm9vbCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJs
ZUJhc2VUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mIHRv
a2VuKQoreworICAgIEFTU0VSVChpc1N0YXJ0VGFnKHRva2VuKSk7CisgICAgaWYgKHRhZ05hbWUg
PT0gYmFzZVRhZykgeworICAgICAgICAvLyBUaGUgZmlyc3QgPGJhc2U+IGVsZW1lbnQgaXMgdGhl
IG9uZSB0aGF0IHdpbnMuCisgICAgICAgIGlmICghbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHRhc2sucHJlbG9hZCht
X2RvY3VtZW50LCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMLmlzRW1wdHkoKSA/IG1fZG9jdW1l
bnQtPmJhc2VVUkwoKSA6IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwpOworICAgICAgICBmb3Ig
KEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRva2VuLmF0
dHJpYnV0ZXMoKS5iZWdpbigpOyBpdGVyICE9IHRva2VuLmF0dHJpYnV0ZXMoKS5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZShpdGVyLT5tX25h
bWUuZGF0YSgpLCBpdGVyLT5tX25hbWUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVOYW1lID09IGhyZWZBdHRyKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGhyZWZWYWx1ZSA9
IFN0cmluZ0ltcGw6OmNyZWF0ZThCaXRJZlBvc3NpYmxlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBp
dGVyLT5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbV9wcmVkaWN0ZWRCYXNlRWxl
bWVudFVSTCA9IEtVUkwobV9kb2N1bWVudFVSTCwgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1M
U3BhY2VzKGhyZWZWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjp1cGRhdGVQcmVkaWN0ZWRCYXNlRWxl
bWVudFVSTChjb25zdCBLVVJMJiBiYXNlRWxlbWVudFVSTCkKK3ZvaWQgSFRNTFByZWxvYWRTY2Fu
bmVyOjpwcm9jZXNzVG9rZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgVmVjdG9yPE93blB0cjxQ
cmVsb2FkUmVxdWVzdD4gPiYgcmVxdWVzdHMpCiB7Ci0gICAgLy8gVGhlIGZpcnN0IDxiYXNlPiBl
bGVtZW50IGlzIHRoZSBvbmUgdGhhdCB3aW5zLgotICAgIGlmICghbV9wcmVkaWN0ZWRCYXNlRWxl
bWVudFVSTC5pc0VtcHR5KCkpCisgICAgLy8gPHN0eWxlPiBpcyB0aGUgb25seSBwbGFjZSB3ZSBz
ZWFyY2ggZm9yIHVybHMgaW4gbm9uLXN0YXJ0L2VuZC10YWcgdG9rZW5zLgorICAgIGlmIChtX2lu
U3R5bGUpIHsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW5UeXBlczo6Q2hh
cmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbV9jc3NTY2FubmVy
LnNjYW4odG9rZW4sIHJlcXVlc3RzKTsKKyAgICB9CisgICAgaWYgKCFpc1N0YXJ0T3JFbmRUYWco
dG9rZW4pKQorICAgICAgICByZXR1cm47CisKKyAgICBBdG9taWNTdHJpbmcgdGFnTmFtZSh0b2tl
bi5uYW1lKCkuZGF0YSgpLCB0b2tlbi5uYW1lKCkuc2l6ZSgpKTsKKyNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKKyAgICBpZiAocHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcodGFnTmFtZSwg
dG9rZW4pKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICBpZiAocHJvY2Vzc1Bvc3NpYmxl
U3R5bGVUYWcodGFnTmFtZSwgdG9rZW4pKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcmVkaWN0
ZWRCYXNlRWxlbWVudFVSTCA9IGJhc2VFbGVtZW50VVJMOworICAgIGlmICghaXNTdGFydFRhZyh0
b2tlbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyh0
YWdOYW1lLCB0b2tlbikpCisgICAgICAgIHJldHVybjsKKworICAgIFByZWxvYWRUYXNrIHRhc2so
dGFnTmFtZSwgdG9rZW4uYXR0cmlidXRlcygpKTsKKyAgICBPd25QdHI8UHJlbG9hZFJlcXVlc3Q+
IHJlcXVlc3QgPSAgdGFzay5jcmVhdGVQcmVsb2FkUmVxdWVzdChtX3ByZWRpY3RlZEJhc2VFbGVt
ZW50VVJMKTsKKyAgICBpZiAocmVxdWVzdCkKKyAgICAgICAgcmVxdWVzdHMuYXBwZW5kKHJlcXVl
c3QucmVsZWFzZSgpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUHJlbG9hZFNjYW5uZXIuaAppbmRleCBjYjhmMzM5MTQwOWQxMTc5MjAyNGUwZmNhODI4OTI1
MTBjNWIyZjc5Li45MGZmMWM1MDM0NTAzMzAwOWJkMzE5NGMxMTUwMjgyOTQ4NWM1ZThkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaApAQCAt
MzMsNyArMzMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50Owog
Y2xhc3MgSFRNTFBhcnNlck9wdGlvbnM7CiBjbGFzcyBIVE1MVG9rZW47CiBjbGFzcyBIVE1MVG9r
ZW5pemVyOwpAQCAtNDIsMjEgKzQxLDMwIEBAIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNsYXNz
IEhUTUxQcmVsb2FkU2Nhbm5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTFByZWxv
YWRTY2FubmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSFRNTFBy
ZWxvYWRTY2FubmVyKERvY3VtZW50KiwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmKTsKKyAgICAv
LyBIVE1MUHJlbG9hZFNjYW5uZXIgaW50ZW50aW9uYWxseSBkb2VzIG5vdCBoYXZlIGEgcG9pbnRl
ciB0byBEb2N1bWVudC4KKyAgICBIVE1MUHJlbG9hZFNjYW5uZXIoY29uc3QgSFRNTFBhcnNlck9w
dGlvbnMmLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CiAKICAgICB2b2lkIGFwcGVuZFRvRW5k
KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwotICAgIHZvaWQgc2NhbigpOworICAgIHZvaWQgc2Nh
bihIVE1MUmVzb3VyY2VQcmVsb2FkZXIqLCBjb25zdCBLVVJMJiBkb2N1bWVudEJhc2VFbGVtZW50
VVJMKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHByb2Nlc3NUb2tlbigpOwotICAgIHZvaWQgdXBk
YXRlUHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoY29uc3QgS1VSTCYgYmFzZUVsZW1lbnRVUkwpOwor
ICAgIHZvaWQgcHJvY2Vzc1Rva2VuKGNvbnN0IEhUTUxUb2tlbiYsIFZlY3RvcjxPd25QdHI8UHJl
bG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKTsKKworICAgIGJvb2wgcHJvY2Vzc1N0eWxlQ2hhcmFj
dGVycyhjb25zdCBIVE1MVG9rZW4mKTsKKworI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQor
ICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlVGVtcGxhdGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKKyNlbmRpZgorCisgICAgYm9vbCBwcm9jZXNzUG9z
c2libGVTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tl
biYpOworICAgIGJvb2wgcHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIGNvbnN0IEhUTUxUb2tlbiYpOwogCi0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
CiAgICAgU2VnbWVudGVkU3RyaW5nIG1fc291cmNlOwogICAgIENTU1ByZWxvYWRTY2FubmVyIG1f
Y3NzU2Nhbm5lcjsKLSAgICBPd25QdHI8SFRNTFRva2VuaXplcj4gbV90b2tlbml6ZXI7CiAgICAg
SFRNTFRva2VuIG1fdG9rZW47CisgICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVy
OwogICAgIGJvb2wgbV9pblN0eWxlOworICAgIEtVUkwgbV9kb2N1bWVudFVSTDsKICAgICBLVVJM
IG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkw7CiAKICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVO
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVBy
ZWxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVs
b2FkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwYTI0ZDY2ZDM5ZjhmNTlkNmU0MTM3ZDg5MDk5ZjM0MjJk
OTg3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UmVzb3VyY2VQcmVsb2FkZXIuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCIKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgYm9vbCBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy5pbXBsKCk7Cisg
ICAgaWYgKCFpbXBsKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaW1wbC0+aGFzT25l
UmVmKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUHJlbG9h
ZFJlcXVlc3Q6OmlzU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX2luaXRpYXRvcikKKyAgICAg
ICAgJiYgaXNTdHJpbmdTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKG1fY2hhcnNldCkKKyAgICAg
ICAgJiYgaXNTdHJpbmdTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKG1fcmVzb3VyY2VVUkwpCisg
ICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZChtX2Jhc2VVUkwuc3Ry
aW5nKCkpOworfQorCitLVVJMIFByZWxvYWRSZXF1ZXN0Ojpjb21wbGV0ZVVSTChEb2N1bWVudCog
ZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGRvY3VtZW50LT5jb21wbGV0ZVVSTChtX3Jlc291cmNl
VVJMLCBtX2Jhc2VVUkwuaXNFbXB0eSgpID8gZG9jdW1lbnQtPnVybCgpIDogbV9iYXNlVVJMKTsK
K30KKworQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IFByZWxvYWRSZXF1ZXN0OjpyZXNvdXJjZVJlcXVl
c3QoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGNvbXBsZXRl
VVJMKGRvY3VtZW50KSkpOworICAgIHJlcXVlc3Quc2V0SW5pdGlhdG9yKG1faW5pdGlhdG9yKTsK
KworICAgIC8vIEZJWE1FOiBJdCdzIHBvc3NpYmxlIENPUlMgc2hvdWxkIHdvcmsgZm9yIG90aGVy
IHJlcXVlc3QgdHlwZXM/CisgICAgaWYgKG1fcmVzb3VyY2VUeXBlID09IENhY2hlZFJlc291cmNl
OjpTY3JpcHQpCisgICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVzdCgpLnNldEFs
bG93Q29va2llcyhtX2Nyb3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMpOworICAgIHJldHVybiBy
ZXF1ZXN0OworfQorCit2b2lkIEhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9hZChQYXNzT3du
UHRyPFByZWxvYWRSZXF1ZXN0PiBwcmVsb2FkKQoreworICAgIENhY2hlZFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0ID0gcHJlbG9hZC0+cmVzb3VyY2VSZXF1ZXN0KG1fZG9jdW1lbnQpOworICAgIG1f
ZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnByZWxvYWQocHJlbG9hZC0+bV9yZXNv
dXJjZVR5cGUsIHJlcXVlc3QsIHByZWxvYWQtPm1fY2hhcnNldCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjk3MTFiZTU3Zjg1Y2Q5ZWYyZTIwZjI4YzkxYWM0ZTdkMjVlY2ExMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRl
ci5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSFRNTFJlc291cmNlUHJlbG9hZGVyX2gKKyNkZWZpbmUgSFRN
TFJlc291cmNlUHJlbG9hZGVyX2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUHJlbG9hZFJlcXVlc3QgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFBy
ZWxvYWRSZXF1ZXN0PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpbml0aWF0b3IsIGNvbnN0IFN0cmlu
ZyYgcmVzb3VyY2VVUkwsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIENhY2hlZFJlc291cmNlOjpUeXBl
IHJlc291cmNlVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJlbG9h
ZFJlcXVlc3QoaW5pdGlhdG9yLCByZXNvdXJjZVVSTCwgYmFzZVVSTCwgcmVzb3VyY2VUeXBlKSk7
CisgICAgfQorICAgIGJvb2wgaXNTYWZlVG9TZW5kVG9Bbm90aGVyVGhyZWFkKCkgY29uc3Q7CisK
KyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVzb3VyY2VSZXF1ZXN0KERvY3VtZW50Kik7CisK
K3ByaXZhdGU6CisgICAgUHJlbG9hZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBpbml0aWF0b3IsIGNv
bnN0IFN0cmluZyYgcmVzb3VyY2VVUkwsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIENhY2hlZFJlc291
cmNlOjpUeXBlIHJlc291cmNlVHlwZSkKKyAgICAgICAgOiBtX2luaXRpYXRvcihpbml0aWF0b3Ip
CisgICAgICAgICwgbV9yZXNvdXJjZVVSTChyZXNvdXJjZVVSTCkKKyAgICAgICAgLCBtX2Jhc2VV
UkwoYmFzZVVSTCkKKyAgICAgICAgLCBtX3Jlc291cmNlVHlwZShyZXNvdXJjZVR5cGUpCisgICAg
ICAgICwgbV9jcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKGZhbHNlKQorICAgIHsgfQorCisg
ICAgS1VSTCBjb21wbGV0ZVVSTChEb2N1bWVudCopOworCisgICAgU3RyaW5nIG1faW5pdGlhdG9y
OworICAgIFN0cmluZyBtX3Jlc291cmNlVVJMOworICAgIEtVUkwgbV9iYXNlVVJMOworCitwdWJs
aWM6CisgICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgbV9yZXNvdXJjZVR5cGU7CisgICAgU3RyaW5n
IG1fY2hhcnNldDsKKyAgICBib29sIG1fY3Jvc3NPcmlnaW5Nb2RlQWxsb3dzQ29va2llczsKK307
CisKK2NsYXNzIEhUTUxSZXNvdXJjZVByZWxvYWRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSFRNTFJlc291cmNlUHJlbG9hZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgSFRNTFJlc291cmNlUHJlbG9hZGVyKERvY3VtZW50KiBkb2N1bWVu
dCkKKyAgICAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICAgICAsIG1fd2Vha0ZhY3Rv
cnkodGhpcykKKyAgICB7IH0KKworICAgIHZvaWQgcHJlbG9hZChQYXNzT3duUHRyPFByZWxvYWRS
ZXF1ZXN0Pik7CisKKyAgICBXZWFrUHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gY3JlYXRlV2Vh
a1B0cigpIHsgcmV0dXJuIG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKK3ByaXZh
dGU6CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgV2Vha1B0ckZhY3Rvcnk8SFRNTFJl
c291cmNlUHJlbG9hZGVyPiBtX3dlYWtGYWN0b3J5OworfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaApp
bmRleCAzNzU5YjI4M2RjMDc4ZmE1OGRmNTM3NDAwN2E4MzQzZTkyZjM5OTRiLi41NWMyNGNlZmYy
M2U5ZjczMjU5MzdhZTMzMzAwOGEwMjNmZTJlYzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaWZuZGVmIENhY2hlZFJlc291cmNlUmVxdWVzdF9oCiAjZGVmaW5lIENhY2hlZFJlc291cmNl
UmVxdWVzdF9oCiAKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
UHJpb3JpdHkuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTM0LDcgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwogCiBjbGFzcyBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187509</attachid>
            <date>2013-02-10 20:27:43 -0800</date>
            <delta_ts>2013-02-10 21:15:42 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-107807-20130210202426.patch</filename>
            <type>text/plain</type>
            <size>42752</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyMzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJhOWE0NGI5YmYyYmJh
Y2JkOGExYzEyNDFmYWMxZWM4OWEzZTA1Yy4uM2Y4MWYzNTM3MmVmZWI2YzhhOTFiMWFkMDYxZThl
ZmQ5YzNkNWM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxMy0wMi0xMCAgRXJp
YyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSB0aGUgZXhpc3Rpbmcg
SFRNTFByZWxvYWRTY2FubmVyIHRocmVhZGluZy1hd2FyZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KKworICAgICAgICBUaGUgSFRNTFByZWxvYWRTY2FubmVyIGFuZCBDU1NQcmVs
b2FkU2Nhbm5lciBkbyBhIG51bWJlciBvZiB0aGluZ3MuCisgICAgICAgIENTU1ByZWxvYWRTY2Fu
bmVyIGlzIG1vc3RseSBqdXN0IGEgaGVscGVyIGNsYXNzIGZvciBIVE1MUHJlbG9hZFNjYW5uZXIu
CisgICAgICAgIEhUTUxQcmVsb2FkU2Nhbm5lciBydW5zIGl0cyBvd24gY29weSBvZiB0aGUgSFRN
TFRva2VuaXplciBhbmQgdXNlcworICAgICAgICBIVE1MVG9rZW5pemVyOjp1cGRhdGVTdGF0ZUZv
ciB0byBlbXVsYXRlIGVub3VnaCBvZiB0aGUgVHJlZUJ1aWxkZXIKKyAgICAgICAgdG8gZ2V0IGEg
cmVhbGlzdGljIHN0cmVhbSBvZiB0b2tlbnMuICBJdCBkb2VzIHNvbWUgYWRkaXRpb25hbCBUcmVl
QnVpbGRlcgorICAgICAgICBlbXVsYXRpb24sIGluY2x1ZGluZyB0cmFja2luZyB0ZW1wbGF0ZSB0
YWdzIGFuZCBiYXNlIHRhZ3MsIGJ1dCBtb3N0bHkKKyAgICAgICAganVzdCBzY2FucyB0aGUgdG9r
ZW4gc3RyZWFtIGZvciBzdGFydC10YWdzIGFuZCBsb29rcyBmb3IgVVJMcyBpbiB0aGVtLgorICAg
ICAgICBJdCB0cmFja3Mgd2hlbiBpdCBoYXMgc2VlbiBhIDxzdHlsZT4gdGFnIGFuZCBzdGFydHMg
c2VuZGluZyBhbGwgY2hhcmFjdGVyIHRva2VucworICAgICAgICB0byB0aGUgQ1NTUHJlbG9hZFNj
YW5uZXIgdW50aWwgYSA8L3N0eWxlPiB0YWcgaXMgc2Vlbi4KKyAgICAgICAgSXQgYWxzbyAodW5m
b3J0dW5hdGVseSkga25vd3Mgc29tZSBhYm91dCB0aGUgbG9hZGVyIGd1dHMgYW5kIGhvdyB0byBj
b25zdHJ1Y3QKKyAgICAgICAgYSBwcm9wZXIgQ2FjaGVkUmVzb3VyY1JlcXVlc3QgYW5kIGlzc3Vl
IGEgcHJlbG9hZC4KKworICAgICAgICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIG1vZGVsIHNvIHRo
YXQgdGhlIHByZWxvYWQgc2Nhbm5lcnMgb25seSBrbm93IGhvdyB0byBwcm9kdWNlCisgICAgICAg
IFByZWxvYWRSZXF1ZXN0IG9iamVjdHMgYW5kIGFwcGVuZCB0aGVtIHRvIGEgcGFzc2VkLWluIHZl
Y3Rvci4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIHByZWxvYWQtc2Nhbm5lciBiZWhhdmlv
ciBzbyB0aGF0IHByZWxvYWRzIGFyZSBub3cgYWxsIGlzc3VlZCBpbiBvbmUgbGFyZ2UKKyAgICAg
ICAgYmF0Y2ggYXQgdGhlIGVuZCBvZiBzY2FubmluZywgaW5zdGVhZCBvZiBhcyB3ZSBoaXQgZWFj
aCByZXNvdXJjZS4gIEl0J3MgcG9zc2libGUgdGhhdAorICAgICAgICB3ZSdsbCB3YWl0IHRvIGlu
c3RlYWQgY2hlY2sgZm9yIHByZWxvYWQgcmVxdWVzdHMgbW9yZSBvZnRlbiwgYXQgYSBwb3NzaWJs
ZSB0cmFkZW9mZgorICAgICAgICB0byB0b2tlbml6aW5nIHNwZWVkLgorCisgICAgICAgIEFuIGFs
dGVybmF0ZSBhcHByb2FjaCBtaWdodCBiZSB0byBwYXNzIGluIGEgcHJlbG9hZC1kZWxlZ2F0ZSBv
ZiBzb3J0cyB3aGljaCBrbmV3IGhvdworICAgICAgICB0byBlaXRoZXIgYnVpbGQgYSB2ZWN0b3Is
IG9yIHNlbmQgcmVxdWVzdHMgaW1tZWRpYXRlbHkuICBGb3Igbm93IHRoZSBidWlsZC1hLXZlY3Rv
ci1hbHdheXMKKyAgICAgICAgYXBwcm9hY2ggc2VlbXMgY2xlYW4sIGFuZCBkb2VzIG5vdCBzZWVt
IHRvIHNsb3cgZG93biBvdXIgUGVyZm9ybWFuY2VUZXN0IG1pY3JvYmVuY2htYXJrcyBhdCBsZWFz
dC4KKworICAgICAgICBUaGlzIHBhdGNoIGhhcyAyIG1haW4gcGllY2VzOgorICAgICAgICAtIFJl
bW92ZSBEb2N1bWVudCBhbmQgKGFuZCBsb2FkZXIpIGRlcGVuZGVuY2llcyBmcm9tIEhUTUxQcmVs
b2FkU2Nhbm5lci9DU1NQcmVsb2FkU2Nhbm5lcgorICAgICAgICAgIFRoaXMgaXMgZG9uZSB0aHJv
dWdoIGludHJvZHVjdGlvbiBvZiBhIG5ldyBIVE1MUmVzb3VyY2VQcmVsb2FkZXIgY2xhc3Mgd2hp
Y2ggaG9sZHMKKyAgICAgICAgICBhIERvY3VtZW50KiBhbmQga25vd3MgaG93IHRvIHRhbGsgdG8g
dGhlIENhY2hlZFJlc291cmNlTG9hZGVyLgorICAgICAgICAtIENsZWFuLXVwIEhUTUxQcmVsb2Fk
U2Nhbm5lcnMgdG9rZW4tbG9vcCB0byBub3QgYmUgdGllZCB0byBoYXZpbmcgYSBUb2tlbml6ZXIu
CisgICAgICAgICAgKE9uIGEgYmFja2dyb3VuZCB0aGVhZCwgdGhlIEhUTUxQcmVsb2FkU2Nhbm5l
ciB3b24ndCBvd24gdGhlIHRva2VuaXplciwgaXQgd2lsbCBqdXN0CisgICAgICAgICAgIGJlIHBh
c3NlZCBpbiB0b2tlbnMgYW5kIGV4cGVjdGVkIHRvIGlzc3VlIGxvYWRzIGlmIG5lY2Vzc2FyeS4p
CisKKyAgICAgICAgVGhpcyBwYXNzZXMgYWxsIG9mIHRoZSBMYXlvdXRUZXN0cyB1c2luZyB0aGUg
bWFpbiB0aHJlYWQgcGFyc2VyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBub3QgbWFrZSB0
aGUgSFRNTFByZWxvYWRTY2FubmVyIDEwMCUgcmVhZHkgZm9yIHRocmVhZGluZworICAgICAgICAo
aXQgc3RpbGwgdXNlcyBBdG9taWNTdHJpbmcgd2hpY2ggaXMgY3VycmVudGx5IG5vdC1PSyBvbiB0
aGUgcGFyc2VyIHRocmVhZCkKKyAgICAgICAgYnV0IGl0J3MgdmVyeSBjbG9zZS4gIFR3byBmdXJ0
aGVyIChhbHJlYWR5IHdyaXR0ZW4pIHBhdGNoZXMgd2lsbCBjb21wbGV0ZSB0aGlzLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ov
V2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBodG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcmVsb2FkU2Nhbm5lcjo6Q1NTUHJlbG9hZFNjYW5uZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OnNjYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUHJlbG9hZFNjYW5uZXI6OmVtaXRSdWxlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9D
U1NQcmVsb2FkU2Nhbm5lci5oOgorICAgICAgICAoQ1NTUHJlbG9hZFNjYW5uZXIpOgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50UGFyc2VyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50UGFyc2VyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFy
c2VyOjphcHBlbmRDdXJyZW50SW5wdXRTdHJlYW1Ub1ByZWxvYWRTY2FubmVyQW5kU2Nhbik6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChIVE1M
RG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1N0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6aXNTdGFydE9yRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRUYXNrOjpwcm9jZXNzQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpQcmVs
b2FkVGFzazo6Y2hhcnNldCk6CisgICAgICAgIChQcmVsb2FkVGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpQcmVsb2FkVGFzazo6cmVzb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxv
YWRUYXNrOjpzaG91bGRQcmVsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRUYXNrOjpj
cmVhdGVQcmVsb2FkUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNjYW5u
ZXI6OkhUTUxQcmVsb2FkU2Nhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNj
YW5uZXI6OnNjYW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByZWxvYWRTY2FubmVyOjpwcm9j
ZXNzUG9zc2libGVUZW1wbGF0ZVRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJlbG9hZFNj
YW5uZXI6OnByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
cmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Bvc3NpYmxlQmFzZVRhZyk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NUb2tlbik6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFByZWxvYWRTY2FubmVyLmg6CisgICAgICAgIChIVE1MUHJlbG9hZFNjYW5uZXIpOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppc1N0cmluZ1NhZmVUb1NlbmRU
b0Fub3RoZXJUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVlc3Q6OmlzU2Fm
ZVRvU2VuZFRvQW5vdGhlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkUmVxdWVz
dDo6Y29tcGxldGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVlc3Q6OnJlc291
cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnBy
ZWxvYWQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUHJlbG9hZFJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJlbG9hZFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQcmVsb2FkUmVxdWVzdDo6UHJlbG9hZFJlcXVlc3QpOgorICAgICAgICAoSFRNTFJlc291cmNl
UHJlbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxvYWRlcjo6SFRN
TFJlc291cmNlUHJlbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxSZXNvdXJjZVByZWxv
YWRlcjo6Y3JlYXRlV2Vha1B0cik6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlUmVxdWVzdC5oOgorCiAyMDEzLTAyLTA3ICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBs
ZS5jb20+CiAKICAgICAgICAgVlMyMDEwIFdlYkNvcmUgVGVzdFN1cHBvcnQgcHJvamVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggM2E0OWY2ZjJjNjJiYmM5MzQ1MDViOGQ0NWEyMzg0OWQzMGY1
MjdjNi4uMDQxY2Q3MDBkOTJkMThlMDMyNmRlNWY5ZmY4ZTY1M2E1MDM2N2UyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTE1NjMsNiArMTU2Myw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmNwcAogICAgIGh0bWwvcGFy
c2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MUHJlbG9h
ZFNjYW5uZXIuY3BwCisgICAgaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRN
TFNvdXJjZVRyYWNrZXIuY3BwCiAgICAgaHRtbC9wYXJzZXIvSFRNTFRva2VuaXplci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDk5OTk2NzFmOGI5NmYzYmY2N2RmNmQ0MjA0
MzZhYjMzYzMyZjI0NTIuLmMyNDUxZTUzOTAzNmZiM2E0MzllOGZkYzZmMzNhZDFhYmZiMGNjYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzYwMiw2ICszNjAyLDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2Vy
VGhyZWFkLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5l
ci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3Bw
IFwKKwlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBc
CiAJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRl
eCBkZDMxM2FhNjQ4NjFmZTM5ZDIzZWQ0MWRmNWM2MmJhNjg0NmJmMjEyLi5iNjEyMTIxOTJlYzJk
NTg1YjFiMWE3MTYxODVlN2RmM2I5ZjdhZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTc0Miw2ICs3NDIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL3BhcnNlci9IVE1MUGFyc2VyU2NoZWR1bGVyLmNw
cCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFBhcnNlclRocmVhZC5jcHAgXAogICAgIGh0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgXAorICAgIGh0bWwvcGFyc2VyL0hUTUxSZXNvdXJj
ZVByZWxvYWRlci5jcHAgXAogICAgIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwIFwK
ICAgICBodG1sL3BhcnNlci9IVE1MU291cmNlVHJhY2tlci5jcHAgXAogICAgIGh0bWwvcGFyc2Vy
L0hUTUxUb2tlbml6ZXIuY3BwIFwKQEAgLTE5MjcsNiArMTkyOCw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCBcCiAgICAgaHRtbC9w
YXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5oIFwKICAgICBodG1sL3BhcnNlci9IVE1MUHJlbG9h
ZFNjYW5uZXIuaCBcCisgICAgaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmggXAog
ICAgIGh0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuaCBcCiAgICAgaHRtbC9wYXJzZXIvSFRN
TFNjcmlwdFJ1bm5lckhvc3QuaCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFRva2VuLmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IGExMmU3NmQwYjQxZGRmMGVlNzFkOGQyNmFmNDc2NzVhNmZjNDgzMDMu
LjNmYmNlNjZjZjlkODlmOWQwNzAxYjllODc0MTRkMjFkMzgwYjFkMWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM0MDksNiArMzQwOSw4IEBACiAgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFBh
cnNlclRocmVhZC5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5u
ZXIuY3BwJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuaCcs
CisgICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCcsCisg
ICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmgnLAogICAgICAg
ICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxTY3JpcHRSdW5uZXIuY3BwJywKICAgICAgICAgICAgICdo
dG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvcGFyc2Vy
L0hUTUxTY3JpcHRSdW5uZXJIb3N0LmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCBmNjk1YzJjZjJiZWI0ZDk5NmM1MDU3NDUzNTk0ZTczOGUy
MzAxYmFmLi4zZWM2N2ViMjg2MjRlNWM4N2NjNjY2NDYxZWMzNzk0OGZmZWI3OGQ0IDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjQ5NDYsNiAr
NjQ5NDYsMTQgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxccGFyc2VyXEhUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAiCisJCQkJCT4K
KwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHBhcnNl
clxIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8Rmls
ZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxccGFyc2VyXEhUTUxTY3JpcHRSdW5uZXIuY3Bw
IgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2oKaW5kZXggMjdhM2VkYWYyNDg3NTIzM2ZjZjdhMzhiOTZhYjNjMWEx
NDZjY2EzOS4uMmEyZjM2OWU0MzZhM2E3OWFkZGJlZjdhYzI4MWI1MGU4OWE2YjNmMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC00ODkx
LDYgKzQ4OTEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRN
TFBhcnNlclNjaGVkdWxlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1s
XHBhcnNlclxIVE1MUGFyc2VyVGhyZWFkLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGh0bWxccGFyc2VyXEhUTUxQcmVsb2FkU2Nhbm5lci5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxwYXJzZXJcSFRNTFNjcmlwdFJ1bm5lci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MU291cmNl
VHJhY2tlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxI
VE1MVG9rZW5pemVyLmNwcCIgLz4KQEAgLTc5MzksNiArNzk0MCw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUGFyc2VyU2NoZWR1bGVyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUGFyc2VyVGhyZWFkLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHBhcnNlclxIVE1MUHJlbG9hZFNjYW5u
ZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxSZXNv
dXJjZVByZWxvYWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxwYXJz
ZXJcSFRNTFNjcmlwdFJ1bm5lci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRt
bFxwYXJzZXJcSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGh0bWxccGFyc2VyXEhUTUxTb3VyY2VUcmFja2VyLmgiIC8+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTQwZThkMzIz
YTgyZjJlMjZkYmFhNjJmMjAzY2MyODBkM2YwOGY3MS4uN2JlMjg2YjlhMTUzYzJmM2QyN2JkNjdl
ZGE3MjA2ZTEyOTI0MTYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDQxNCw2ICs0NDE0LDggQEAKIAkJQThEMDY1QUUwQTI0
NDZDRDAwNUU3MjAzIC8qIEpTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RDA2NUFEMEEyNDQ2Q0QwMDVFNzIw
MyAvKiBKU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUE4RDA2QjM5MEEyNjVE
Q0QwMDVFNzIwMyAvKiBIVE1MTmFtZXMuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RDA2QjM3MEEyNjVEQ0QwMDVFNzIwMyAv
KiBIVE1MTmFtZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQlB
OEQwNkIzQTBBMjY1RENEMDA1RTcyMDMgLyogSFRNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4RDA2QjM4MEEyNjVEQ0QwMDVFNzIwMyAv
KiBIVE1MTmFtZXMuY3BwICovOyB9OworCQlBOEQyMjNGRDE2QjUyRTRFMDAxNTcyODggLyogSFRN
TFJlc291cmNlUHJlbG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4RDIyM0ZCMTZCNTJFNEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVs
b2FkZXIuY3BwICovOyB9OworCQlBOEQyMjNGRTE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291
cmNlUHJlbG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOEQyMjNGQzE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291cmNlUHJlbG9hZGVyLmgg
Ki87IH07CiAJCUE4REYzRkNFMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QThERjNGQzYwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgg
Ki87IH07CiAJCUE4REYzRkNGMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOERGM0ZDNzA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24u
Y3BwICovOyB9OwogCQlBOERGM0ZEMDA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4REYzRkM4
MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMTc1OCw2ICsxMTc2MCw4IEBACiAJCUE4
RDA2NUFEMEEyNDQ2Q0QwMDVFNzIwMyAvKiBKU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtRWxlbWVudEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RDA2QjM3MEEyNjVEQ0QwMDVF
NzIwMyAvKiBIVE1MTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEQwNkIzODBBMjY1RENE
MDA1RTcyMDMgLyogSFRNTE5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEQy
MjNGQjE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxSZXNvdXJjZVByZWxvYWRlci5jcHA7
IHBhdGggPSBwYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQThEMjIzRkMxNkI1MkU0RTAwMTU3Mjg4IC8qIEhUTUxSZXNvdXJjZVBy
ZWxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBIVE1MUmVzb3VyY2VQ
cmVsb2FkZXIuaDsgcGF0aCA9IHBhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThERjNGQzYwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOERGM0ZDNzA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThERjNG
QzgwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTg2NzAsNiArMTg2NzQsOCBAQAogCQkJCTk3NDE4N0QxMTZBNzkzMjIwMEZBNzdB
NyAvKiBIVE1MUGFyc2VyVGhyZWFkLmggKi8sCiAJCQkJOTc3QjM4NTkxMjI4ODNFOTAwQjgxRkY4
IC8qIEhUTUxQcmVsb2FkU2Nhbm5lci5jcHAgKi8sCiAJCQkJOTc3QjM4NUExMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxQcmVsb2FkU2Nhbm5lci5oICovLAorCQkJCUE4RDIyM0ZCMTZCNTJFNEUwMDE1
NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwICovLAorCQkJCUE4RDIyM0ZDMTZCNTJF
NEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCAqLywKIAkJCQk5NzdCMzg1QjEy
Mjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lci5jcHAgKi8sCiAJCQkJOTc3QjM4NUMx
MjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxTY3JpcHRSdW5uZXIuaCAqLywKIAkJCQk5NzdCMzg1RDEy
Mjg4M0U5MDBCODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCAqLywKQEAgLTI0NDE5LDYg
KzI0NDI1LDcgQEAKIAkJCQlBNDNCRjU5OTExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNz
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDMzQTZBN0MxNDdFMDdEMjAwNTA5QjM2IC8q
IEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkY3QTMw
QTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxRdW90ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE4RDIyM0ZFMTZCNTJFNEUwMDE1NzI4OCAvKiBIVE1MUmVzb3VyY2VQcmVsb2FkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4NzFEQzI1MEExNTIwNTcwMEIxMkE2OCAvKiBIVE1MU2NyaXB0RWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NzUxMjI4ODNFOTAwQjgxRkY4IC8qIEhU
TUxTY3JpcHRSdW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0IzODc2MTIyODgzRTkwMEI4
MUZGOCAvKiBIVE1MU2NyaXB0UnVubmVySG9zdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzcxMiw2
ICsyNzcxOSw3IEBACiAJCQkJQTQzQkY1OTgxMTQ5MjkwQTAwQzY0M0NBIC8qIEhUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDMzQTZBN0UxNDdFMDdFNzAwNTA5QjM2
IC8qIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENG
RjdBNTBBMTU2OTc4MDAwQTQyMzQgLyogSFRNTFF1b3RlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBOEQyMjNGRDE2QjUyRTRFMDAxNTcyODggLyogSFRNTFJlc291cmNlUHJlbG9hZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFEQzIyMEExNTIwNTcwMEIxMkE2OCAvKiBIVE1M
U2NyaXB0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdCMzg3NDEyMjg4M0U5MDBC
ODFGRjggLyogSFRNTFNjcmlwdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODEzNjlE
OTA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nhbm5lci5jcHAK
aW5kZXggOGVlYzgxYjExZGZjM2FmZTRiYjg5MzEzNTNjOWM3MjBkMTVmMGY4Ni4uM2JmZTgxNjhi
MThhYzE3OWQ3MmJjYTg4ZWQ4OWIxN2UzOThkZDM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmNwcApAQCAtMzIsMTUgKzMyLDE2IEBACiAj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAj
aW5jbHVkZSAiSFRNTFRva2VuLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1ByZWxv
YWRTY2FubmVyOjpDU1NQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCogZG9jdW1lbnQpCitDU1NQcmVs
b2FkU2Nhbm5lcjo6Q1NTUHJlbG9hZFNjYW5uZXIoKQogICAgIDogbV9zdGF0ZShJbml0aWFsKQot
ICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICAsIG1fcmVxdWVzdHMoMCkKIHsKIH0KIApA
QCAtNTEsMTEgKzUyLDEzIEBAIHZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OnJlc2V0KCkKICAgICBt
X3J1bGVWYWx1ZS5jbGVhcigpOwogfQogCi12b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNv
bnN0IEhUTUxUb2tlbiYgdG9rZW4pCit2b2lkIENTU1ByZWxvYWRTY2FubmVyOjpzY2FuKGNvbnN0
IEhUTUxUb2tlbiYgdG9rZW4sIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVl
c3RzKQogeworICAgIG1fcmVxdWVzdHMgPSAmcmVxdWVzdHM7CiAgICAgY29uc3QgSFRNTFRva2Vu
OjpEYXRhVmVjdG9yJiBjaGFyYWN0ZXJzID0gdG9rZW4uY2hhcmFjdGVycygpOwogICAgIGZvciAo
SFRNTFRva2VuOjpEYXRhVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gY2hhcmFjdGVycy5i
ZWdpbigpOyBpdGVyICE9IGNoYXJhY3RlcnMuZW5kKCkgJiYgbV9zdGF0ZSAhPSBEb25lUGFyc2lu
Z0ltcG9ydFJ1bGVzOyArK2l0ZXIpCiAgICAgICAgIHRva2VuaXplKCppdGVyKTsKKyAgICBtX3Jl
cXVlc3RzID0gMDsKIH0KIAogaW5saW5lIHZvaWQgQ1NTUHJlbG9hZFNjYW5uZXI6OnRva2VuaXpl
KFVDaGFyIGMpCkBAIC0xOTMsMTEgKzE5NiwxMyBAQCBzdGF0aWMgU3RyaW5nIHBhcnNlQ1NTU3Ry
aW5nT3JVUkwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCiB2b2lkIENT
U1ByZWxvYWRTY2FubmVyOjplbWl0UnVsZSgpCiB7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KCJpbXBvcnQiLCBtX3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKSB7Ci0gICAg
ICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFj
dGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJj
ZVJlcXVlc3QobV9kb2N1bWVudC0+Y29tcGxldGVVUkwodmFsdWUpKSk7Ci0gICAgICAgICAgICBy
ZXF1ZXN0LnNldEluaXRpYXRvcihjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzKCkuY3Nz
KTsKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnByZWxv
YWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIFN0cmluZygpKTsKKyAg
ICAgICAgU3RyaW5nIHVybCA9IHBhcnNlQ1NTU3RyaW5nT3JVUkwobV9ydWxlVmFsdWUuY2hhcmFj
dGVycygpLCBtX3J1bGVWYWx1ZS5sZW5ndGgoKSk7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgS1VSTCBiYXNlRWxlbWVudFVSTDsgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIHBhc3NlZCBpbiBmcm9tIHRoZSBIVE1MUHJlbG9hZFNjYW5lciB2aWEgc2NhbigpIQor
ICAgICAgICAgICAgT3duUHRyPFByZWxvYWRSZXF1ZXN0PiByZXF1ZXN0ID0gUHJlbG9hZFJlcXVl
c3Q6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBjYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0
b3JzKCkuY3NzLCB1cmwsIGJhc2VFbGVtZW50VVJMLCBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldCk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkaW5nIHRo
ZSBjaGFyc2V0IGluIHRoZSBwcmVsb2FkIHJlcXVlc3Q/CisgICAgICAgICAgICBtX3JlcXVlc3Rz
LT5hcHBlbmQocmVxdWVzdC5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgICAgIG1fc3RhdGUg
PSBJbml0aWFsOwogICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoImNoYXJzZXQiLCBt
X3J1bGUuY2hhcmFjdGVycygpLCBtX3J1bGUubGVuZ3RoKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9hZFNjYW5uZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0NTU1ByZWxvYWRTY2FubmVyLmgKaW5kZXggOGUxOTI5NjVlN2VhMGM5NDJi
N2I4MjBhNWM1ODU0NmM5N2I2MWE2OC4uZmY5NDk2ZmE1N2YxOWFiNTY3OWY1YjU1NzIyZGUyZjk4
M2IzNDcyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvQ1NTUHJlbG9h
ZFNjYW5uZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9DU1NQcmVsb2FkU2Nh
bm5lci5oCkBAIC0yNywyMCArMjcsMjEgQEAKICNpZm5kZWYgQ1NTUHJlbG9hZFNjYW5uZXJfaAog
I2RlZmluZSBDU1NQcmVsb2FkU2Nhbm5lcl9oCiAKKyNpbmNsdWRlICJIVE1MUmVzb3VyY2VQcmVs
b2FkZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEhUTUxUb2tlbjsKIAogY2xhc3MgQ1NTUHJlbG9hZFNjYW5uZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENTU1ByZWxvYWRTY2FubmVyKTsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBDU1NQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCopOworICAgIGV4cGxpY2l0IENTU1ByZWxvYWRT
Y2FubmVyKCk7CiAKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBzY2FuKGNvbnN0IEhUTUxU
b2tlbiYpOworICAgIHZvaWQgc2Nhbihjb25zdCBIVE1MVG9rZW4mLCBWZWN0b3I8T3duUHRyPFBy
ZWxvYWRSZXF1ZXN0PiA+JiByZXF1ZXN0cyk7CiAKIHByaXZhdGU6CiAgICAgZW51bSBTdGF0ZSB7
CkBAIC01NiwxNCArNTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgRG9uZVBhcnNpbmdJbXBvcnRS
dWxlcywKICAgICB9OwogCi0gICAgaW5saW5lIHZvaWQgdG9rZW5pemUoVUNoYXIgYyk7CisgICAg
aW5saW5lIHZvaWQgdG9rZW5pemUoVUNoYXIpOwogICAgIHZvaWQgZW1pdFJ1bGUoKTsKIAogICAg
IFN0YXRlIG1fc3RhdGU7CiAgICAgU3RyaW5nQnVpbGRlciBtX3J1bGU7CiAgICAgU3RyaW5nQnVp
bGRlciBtX3J1bGVWYWx1ZTsKIAotICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworICAgIC8vIE9u
bHkgbm9uLXplcm8gZHVyaW5nIHNjYW4oKQorICAgIFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVl
c3Q+ID4qIG1fcmVxdWVzdHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCAxZTdjMGI4OGRlMzRmMjEzY2JhMWI4
NTVhOTc0NDU2NzVmMGJhZTRmLi4xNmNiZTU4NmJjZDkwZGU5OTkyM2UzNGUwNTRhYWZlNzdkN2Rj
MGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAKQEAgLTg3LDYgKzg3LDcgQEAgSFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1l
bnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMKICNpZiBF
TkFCTEUoVEhSRUFERURfSFRNTF9QQVJTRVIpCiAgICAgLCBtX3dlYWtGYWN0b3J5KHRoaXMpCiAj
ZW5kaWYKKyAgICAsIG1fcHJlbG9hZGVyKGFkb3B0UHRyKG5ldyBIVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIoZG9jdW1lbnQpKSkKICAgICAsIG1fZW5kV2FzRGVsYXllZChmYWxzZSkKICAgICAsIG1faGF2
ZUJhY2tncm91bmRQYXJzZXIoZmFsc2UpCiAgICAgLCBtX3B1bXBTZXNzaW9uTmVzdGluZ0xldmVs
KDApCkBAIC00MDksMTAgKzQxMCwxMCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRv
a2VuaXplcihTeW5jaHJvbm91c01vZGUgbW9kZSkKICAgICBpZiAoaXNXYWl0aW5nRm9yU2NyaXB0
cygpKSB7CiAgICAgICAgIEFTU0VSVChtX3Rva2VuaXplci0+c3RhdGUoKSA9PSBIVE1MVG9rZW5p
emVyU3RhdGU6OkRhdGFTdGF0ZSk7CiAgICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lcikgewot
ICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lciA9IGFkb3B0UHRyKG5ldyBIVE1MUHJlbG9hZFNj
YW5uZXIoZG9jdW1lbnQoKSwgbV9vcHRpb25zKSk7CisgICAgICAgICAgICBtX3ByZWxvYWRTY2Fu
bmVyID0gYWRvcHRQdHIobmV3IEhUTUxQcmVsb2FkU2Nhbm5lcihtX29wdGlvbnMsIGRvY3VtZW50
KCktPnVybCgpKSk7CiAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5hcHBlbmRUb0VuZCht
X2lucHV0LmN1cnJlbnQoKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+
c2NhbigpOworICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKG1fcHJlbG9hZGVyLmdldCgp
LCBkb2N1bWVudCgpLT5iYXNlRWxlbWVudFVSTCgpKTsKICAgICB9CiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZFdyaXRlSFRNTChjb29raWUsIG1faW5wdXQuY3VycmVudCgpLmN1
cnJlbnRMaW5lKCkuemVyb0Jhc2VkSW50KCkpOwpAQCAtNDk2LDkgKzQ5Nyw5IEBAIHZvaWQgSFRN
TERvY3VtZW50UGFyc2VyOjppbnNlcnQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCiAg
ICAgICAgIC8vIENoZWNrIHRoZSBkb2N1bWVudC53cml0ZSgpIG91dHB1dCB3aXRoIGEgc2VwYXJh
dGUgcHJlbG9hZCBzY2FubmVyIGFzCiAgICAgICAgIC8vIHRoZSBtYWluIHNjYW5uZXIgY2FuJ3Qg
ZGVhbCB3aXRoIGluc2VydGlvbnMuCiAgICAgICAgIGlmICghbV9pbnNlcnRpb25QcmVsb2FkU2Nh
bm5lcikKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uUHJlbG9hZFNjYW5uZXIgPSBhZG9wdFB0cihu
ZXcgSFRNTFByZWxvYWRTY2FubmVyKGRvY3VtZW50KCksIG1fb3B0aW9ucykpOworICAgICAgICAg
ICAgbV9pbnNlcnRpb25QcmVsb2FkU2Nhbm5lciA9IGFkb3B0UHRyKG5ldyBIVE1MUHJlbG9hZFNj
YW5uZXIobV9vcHRpb25zLCBkb2N1bWVudCgpLT51cmwoKSkpOwogICAgICAgICBtX2luc2VydGlv
blByZWxvYWRTY2FubmVyLT5hcHBlbmRUb0VuZChzb3VyY2UpOwotICAgICAgICBtX2luc2VydGlv
blByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgIG1faW5zZXJ0aW9uUHJlbG9hZFNjYW5u
ZXItPnNjYW4obV9wcmVsb2FkZXIuZ2V0KCksIGRvY3VtZW50KCktPmJhc2VFbGVtZW50VVJMKCkp
OwogICAgIH0KIAogICAgIGVuZElmRGVsYXllZCgpOwpAQCAtNTYyLDcgKzU2Myw3IEBAIHZvaWQg
SFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2Up
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5hcHBlbmRU
b0VuZChzb3VyY2UpOwogICAgICAgICAgICAgaWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkKLSAg
ICAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5zY2FuKCk7CisgICAgICAgICAgICAgICAg
bV9wcmVsb2FkU2Nhbm5lci0+c2NhbihtX3ByZWxvYWRlci5nZXQoKSwgZG9jdW1lbnQoKS0+YmFz
ZUVsZW1lbnRVUkwoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc0OSw3ICs3NTAsNyBAQCB2
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YXBwZW5kQ3VycmVudElucHV0U3RyZWFtVG9QcmVsb2Fk
U2Nhbm5lckFuZFNjYW4oKQogewogICAgIEFTU0VSVChtX3ByZWxvYWRTY2FubmVyKTsKICAgICBt
X3ByZWxvYWRTY2FubmVyLT5hcHBlbmRUb0VuZChtX2lucHV0LmN1cnJlbnQoKSk7Ci0gICAgbV9w
cmVsb2FkU2Nhbm5lci0+c2NhbigpOworICAgIG1fcHJlbG9hZFNjYW5uZXItPnNjYW4obV9wcmVs
b2FkZXIuZ2V0KCksIGRvY3VtZW50KCktPmJhc2VFbGVtZW50VVJMKCkpOwogfQogCiB2b2lkIEhU
TUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJl
c291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAppbmRleCA5NTcyMmYxYjhmOTU3MGE1NmY3NWE0ODA4MmVjZmY4NGZiYTk0NDc2Li5kNzlj
YTYzZjdhMzRjOTZlODZjOTUyNTg5Mzk2OTQzZWVlNzc3YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtNTUsNiArNTUsNyBAQCBj
bGFzcyBIVE1MVG9rZW5pemVyOwogY2xhc3MgSFRNTFNjcmlwdFJ1bm5lcjsKIGNsYXNzIEhUTUxU
cmVlQnVpbGRlcjsKIGNsYXNzIEhUTUxQcmVsb2FkU2Nhbm5lcjsKK2NsYXNzIEhUTUxSZXNvdXJj
ZVByZWxvYWRlcjsKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7CiBjbGFzcyBTY3JpcHRTb3VyY2VD
b2RlOwogCkBAIC0xODMsNiArMTg0LDcgQEAgcHJpdmF0ZToKICAgICBEZXF1ZTxPd25QdHI8UGFy
c2VkQ2h1bms+ID4gbV9zcGVjdWxhdGlvbnM7CiAgICAgV2Vha1B0ckZhY3Rvcnk8SFRNTERvY3Vt
ZW50UGFyc2VyPiBtX3dlYWtGYWN0b3J5OwogI2VuZGlmCisgICAgT3duUHRyPEhUTUxSZXNvdXJj
ZVByZWxvYWRlcj4gbV9wcmVsb2FkZXI7CiAKICAgICBib29sIG1fZW5kV2FzRGVsYXllZDsKICAg
ICBib29sIG1faGF2ZUJhY2tncm91bmRQYXJzZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAppbmRleCBlYzdlN2QyYjZiNGZjYjU0YzMy
MTEyMTNiOWQ0MmM4NTNkYTQ1NzRhLi45ZmRkMTQ1NTcwNGZlNDFhZDE4ZjkyZTE3NGY4MTYzZDNj
MWE3ODkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9h
ZFNjYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2Fk
U2Nhbm5lci5jcHAKQEAgLTI4LDIyICsyOCwzMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkhUTUxQcmVsb2FkU2Nhbm5lci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBh
cnNlci5oIgotI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlck9w
dGlvbnMuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiSW5wdXRUeXBl
TmFtZXMuaCIKICNpbmNsdWRlICJMaW5rUmVsQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiTWVkaWFM
aXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitzdGF0aWMgYm9vbCBpc1N0
YXJ0VGFnKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCit7CisgICAgcmV0dXJuIHRva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWc7Cit9CisKK3N0YXRpYyBib29sIGlzU3RhcnRP
ckVuZFRhZyhjb25zdCBIVE1MVG9rZW4mIHRva2VuKQoreworICAgIHJldHVybiB0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyB8fCBpc1N0YXJ0VGFnKHRva2VuKTsKK30KKwog
Y2xhc3MgUHJlbG9hZFRhc2sgewogcHVibGljOgogICAgIGV4cGxpY2l0IFByZWxvYWRUYXNrKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0
JiBhdHRyaWJ1dGVzKQpAQCAtODksOSArOTgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIHNldFVybFRvTG9hZChhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoYXR0cmlidXRlTmFtZSA9PSB0eXBlQXR0cikKICAgICAgICAgICAgICAgICAgICAgbV9pbnB1
dElzSW1hZ2UgPSBlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgSW5wdXRUeXBlTmFt
ZXM6OmltYWdlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3RhZ05hbWUgPT0gYmFzZVRh
ZykgewotICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGhyZWZBdHRyKQotICAg
ICAgICAgICAgICAgICAgICBtX2Jhc2VFbGVtZW50SHJlZiA9IHN0cmlwTGVhZGluZ0FuZFRyYWls
aW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMjQsMjYgKzEzMCw1MSBAQCBwdWJsaWM6CiAgICAgICAgIG1fdXJsVG9Mb2Fk
ID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGF0dHJpYnV0ZVZhbHVlKTsKICAg
ICB9CiAKLSAgICB2b2lkIHByZWxvYWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiBi
YXNlVVJMKQorICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICAvLyBGSVhNRTogSXRzIG5vdCBjbGVhciB0aGF0IHRoaXMgaWYgaXMgbmVlZGVkLCB0aGUgbG9h
ZGVyIHByb2JhYmx5IGlnbm9yZXMgY2hhcnNldCBmb3IgaW1hZ2UgcmVxdWVzdHMgYW55d2F5Lgor
ICAgICAgICBpZiAobV90YWdOYW1lID09IGltZ1RhZykKKyAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOworICAgICAgICByZXR1cm4gbV9jaGFyc2V0OworICAgIH0KKworICAgIENhY2hl
ZFJlc291cmNlOjpUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV90YWdOYW1lID09IHNjcmlwdFRhZykKKyAgICAgICAgICAgIHJldHVybiBDYWNoZWRSZXNvdXJj
ZTo6U2NyaXB0OworICAgICAgICBpZiAobV90YWdOYW1lID09IGltZ1RhZyB8fCAobV90YWdOYW1l
ID09IGlucHV0VGFnICYmIG1faW5wdXRJc0ltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiBDYWNo
ZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZTsKKyAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBsaW5r
VGFnICYmIG1fbGlua0lzU3R5bGVTaGVldCAmJiBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVu
KQorICAgICAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENhY2hlZFJlc291cmNl
OjpSYXdSZXNvdXJjZTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFByZWxvYWQoKQogICAgIHsK
ICAgICAgICAgaWYgKG1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
KGRvY3VtZW50LT5jb21wbGV0ZVVSTChtX3VybFRvTG9hZCwgYmFzZVVSTCkpKTsKLSAgICAgICAg
cmVxdWVzdC5zZXRJbml0aWF0b3IodGFnTmFtZSgpKTsKLSAgICAgICAgaWYgKG1fdGFnTmFtZSA9
PSBzY3JpcHRUYWcpIHsKLSAgICAgICAgICAgIHJlcXVlc3QubXV0YWJsZVJlc291cmNlUmVxdWVz
dCgpLnNldEFsbG93Q29va2llcyhjcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKCkpOwotICAg
ICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OlNj
cmlwdCwgcmVxdWVzdCwgbV9jaGFyc2V0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICht
X3RhZ05hbWUgPT0gaW1nVGFnIHx8IChtX3RhZ05hbWUgPT0gaW5wdXRUYWcgJiYgbV9pbnB1dElz
SW1hZ2UpKQotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnByZWxvYWQoQ2FjaGVk
UmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJlcXVlc3QsIFN0cmluZygpKTsKLSAgICAgICAgZWxz
ZSBpZiAobV90YWdOYW1lID09IGxpbmtUYWcgJiYgbV9saW5rSXNTdHlsZVNoZWV0ICYmIG1fbGlu
a01lZGlhQXR0cmlidXRlSXNTY3JlZW4pIAotICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2Fk
ZXItPnByZWxvYWQoQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQsIHJlcXVlc3QsIG1fY2hh
cnNldCk7CisgICAgICAgIGlmIChtX3RhZ05hbWUgPT0gbGlua1RhZyAmJiAoIW1fbGlua0lzU3R5
bGVTaGVldCB8fCAhbV9saW5rTWVkaWFBdHRyaWJ1dGVJc1NjcmVlbikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fdGFnTmFtZSA9PSBpbnB1dFRhZyAmJiAhbV9p
bnB1dElzSW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIFBhc3NPd25QdHI8UHJlbG9hZFJlcXVlc3Q+IGNyZWF0ZVByZWxv
YWRSZXF1ZXN0KGNvbnN0IEtVUkwmIHByZWRpY3RlZEJhc2VVUkwpCisgICAgeworICAgICAgICBp
ZiAoIXNob3VsZFByZWxvYWQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIE93blB0cjxQcmVsb2FkUmVxdWVzdD4gcmVxdWVzdCA9IFByZWxvYWRSZXF1ZXN0OjpjcmVh
dGUobV90YWdOYW1lLCBtX3VybFRvTG9hZCwgcHJlZGljdGVkQmFzZVVSTCwgcmVzb3VyY2VUeXBl
KCkpOworICAgICAgICByZXF1ZXN0LT5zZXRDcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVzKGNy
b3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMoKSk7CisgICAgICAgIHJlcXVlc3QtPnNldENoYXJz
ZXQoY2hhcnNldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogICAgIH0K
IAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFn
TmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgYmFzZUVsZW1lbnRIcmVmKCkgY29uc3QgeyByZXR1
cm4gbV9iYXNlRWxlbWVudEhyZWY7IH0KIAogcHJpdmF0ZToKIApAQCAtMTU1LDE4ICsxODYsMTYg
QEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV90YWdOYW1lOwogICAgIFN0cmluZyBtX3Vy
bFRvTG9hZDsKICAgICBTdHJpbmcgbV9jaGFyc2V0OwotICAgIFN0cmluZyBtX2Jhc2VFbGVtZW50
SHJlZjsKICAgICBTdHJpbmcgbV9jcm9zc09yaWdpbk1vZGU7CiAgICAgYm9vbCBtX2xpbmtJc1N0
eWxlU2hlZXQ7CiAgICAgYm9vbCBtX2xpbmtNZWRpYUF0dHJpYnV0ZUlzU2NyZWVuOwogICAgIGJv
b2wgbV9pbnB1dElzSW1hZ2U7CiB9OwogCi1IVE1MUHJlbG9hZFNjYW5uZXI6OkhUTUxQcmVsb2Fk
U2Nhbm5lcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRp
b25zKQotICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fY3NzU2Nhbm5lcihkb2N1
bWVudCkKLSAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZShvcHRpb25zKSkK
K0hUTUxQcmVsb2FkU2Nhbm5lcjo6SFRNTFByZWxvYWRTY2FubmVyKGNvbnN0IEhUTUxQYXJzZXJP
cHRpb25zJiBvcHRpb25zLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCkKKyAgICA6IG1fdG9rZW5p
emVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZShvcHRpb25zKSkKICAgICAsIG1faW5TdHlsZShmYWxz
ZSkKKyAgICAsIG1fZG9jdW1lbnRVUkwoZG9jdW1lbnRVUkwpCiAjaWYgRU5BQkxFKFRFTVBMQVRF
X0VMRU1FTlQpCiAgICAgLCBtX3RlbXBsYXRlQ291bnQoMCkKICNlbmRpZgpAQCAtMTc4LDY2ICsy
MDcsMTAyIEBAIHZvaWQgSFRNTFByZWxvYWRTY2FubmVyOjphcHBlbmRUb0VuZChjb25zdCBTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSkKICAgICBtX3NvdXJjZS5hcHBlbmQoc291cmNlKTsKIH0KIAot
dm9pZCBIVE1MUHJlbG9hZFNjYW5uZXI6OnNjYW4oKQorLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMg
Zm9yIGNvbnZlbmllbmNlIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgaXMgbm90IHVzZWQgYnkgdGhl
IGJhY2tncm91bmQtdGhyZWFkIHByZWxvYWQgc2Nhbm5lci4KK3ZvaWQgSFRNTFByZWxvYWRTY2Fu
bmVyOjpzY2FuKEhUTUxSZXNvdXJjZVByZWxvYWRlciogcHJlbG9hZGVyLCBjb25zdCBLVVJMJiBz
dGFydGluZ0Jhc2VFbGVtZW50VVJMKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8v
IEhUTUxUb2tlbml6ZXI6OnVwZGF0ZVN0YXRlRm9yIG9ubHkgd29ya3Mgb24gdGhlIG1haW4gdGhy
ZWFkLgogICAgIC8vIFdoZW4gd2Ugc3RhcnQgc2Nhbm5pbmcsIG91ciBiZXN0IHByZWRpY3Rpb24g
b2YgdGhlIGJhc2VFbGVtZW50VVJMIGlzIHRoZSByZWFsIG9uZSEKLSAgICBtX3ByZWRpY3RlZEJh
c2VFbGVtZW50VVJMID0gbV9kb2N1bWVudC0+YmFzZUVsZW1lbnRVUkwoKTsKKyAgICBpZiAoIXN0
YXJ0aW5nQmFzZUVsZW1lbnRVUkwuaXNFbXB0eSgpKQorICAgICAgICBtX3ByZWRpY3RlZEJhc2VF
bGVtZW50VVJMID0gc3RhcnRpbmdCYXNlRWxlbWVudFVSTDsKIAotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgc2F2ZSBhbmQgcmUtdXNlIHRoZXNlIHRva2VucyBpbiBIVE1MRG9jdW1lbnRQYXJzZXIg
aWYKLSAgICAvLyB0aGUgcGVuZGluZyBzY3JpcHQgZG9lc24ndCBlbmQgdXAgY2FsbGluZyBkb2N1
bWVudC53cml0ZS4KKyAgICBWZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+IHJlcXVlc3Rz
OworICAgIC8vIE5vdGU6IG1fdG9rZW4gaXMgb25seSB1c2VkIGZyb20gdGhpcyBmdW5jdGlvbiBh
bmQgZm9yIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBBbGwgb3RoZXIgZnVuY3Rpb25zIGFyZSBw
YXNzZWQgYSB0b2tlbi4KICAgICB3aGlsZSAobV90b2tlbml6ZXItPm5leHRUb2tlbihtX3NvdXJj
ZSwgbV90b2tlbikpIHsKLSAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CisgICAgICAgIGlmIChpc1N0
YXJ0VGFnKG1fdG9rZW4pKQorICAgICAgICAgICAgbV90b2tlbml6ZXItPnVwZGF0ZVN0YXRlRm9y
KEF0b21pY1N0cmluZyhtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1fdG9rZW4ubmFtZSgpLnNpemUo
KSkpOworICAgICAgICBwcm9jZXNzVG9rZW4obV90b2tlbiwgcmVxdWVzdHMpOwogICAgICAgICBt
X3Rva2VuLmNsZWFyKCk7CiAgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVxdWVz
dHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHByZWxvYWRlci0+cHJlbG9hZChyZXF1ZXN0c1tpXS5y
ZWxlYXNlKCkpOwogfQogCi12b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKCkK
LXsKLSAgICBpZiAobV9pblN0eWxlKSB7Ci0gICAgICAgIGlmIChtX3Rva2VuLnR5cGUoKSA9PSBI
VE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKQotICAgICAgICAgICAgbV9jc3NTY2FubmVyLnNjYW4o
bV90b2tlbik7Ci0gICAgICAgIGVsc2UgaWYgKG1fdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpFbmRUYWcpIHsKLSAgICAgICAgICAgIG1faW5TdHlsZSA9IGZhbHNlOwotICAgICAgICAg
ICAgbV9jc3NTY2FubmVyLnJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV90
b2tlbi50eXBlKCkgIT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKSB7CiAjaWYgRU5BQkxFKFRF
TVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmIChtX3RlbXBsYXRlQ291bnQgJiYgbV90b2tlbi50
eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyAmJiBBdG9taWNTdHJpbmcobV90b2tlbi5u
YW1lKCkuZGF0YSgpLCBtX3Rva2VuLm5hbWUoKS5zaXplKCkpID09IHRlbXBsYXRlVGFnKQorYm9v
bCBIVE1MUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAo
aXNTdGFydE9yRW5kVGFnKHRva2VuKSAmJiB0YWdOYW1lID09IHRlbXBsYXRlVGFnKSB7CisgICAg
ICAgIGlmIChpc1N0YXJ0VGFnKHRva2VuKSkKKyAgICAgICAgICAgIG1fdGVtcGxhdGVDb3VudCsr
OworICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3RlbXBsYXRlQ291bnQtLTsKLSNlbmRpZgot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOyAvLyBUd2FzIG91ciB0b2tlbi4K
ICAgICB9Ci0KLSAgICBBdG9taWNTdHJpbmcgdGFnTmFtZShtX3Rva2VuLm5hbWUoKS5kYXRhKCks
IG1fdG9rZW4ubmFtZSgpLnNpemUoKSk7Ci0KLSNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
LSAgICBpZiAodGFnTmFtZSA9PSB0ZW1wbGF0ZVRhZykKLSAgICAgICAgbV90ZW1wbGF0ZUNvdW50
Kys7Ci0KLSAgICBpZiAobV90ZW1wbGF0ZUNvdW50KQotICAgICAgICByZXR1cm47CisgICAgLy8g
SWYgd2UncmUgaW4gYSB0ZW1wbGF0ZSB3ZSAiY29uc3VtZSIgYWxsIHRva2Vucy4KKyAgICByZXR1
cm4gbV90ZW1wbGF0ZUNvdW50ID4gMDsKK30KICNlbmRpZgogCi0gICAgUHJlbG9hZFRhc2sgdGFz
ayh0YWdOYW1lLCBtX3Rva2VuLmF0dHJpYnV0ZXMoKSk7Ci0gICAgbV90b2tlbml6ZXItPnVwZGF0
ZVN0YXRlRm9yKHRhc2sudGFnTmFtZSgpKTsKLQotICAgIGlmICh0YXNrLnRhZ05hbWUoKSA9PSBz
dHlsZVRhZykKLSAgICAgICAgbV9pblN0eWxlID0gdHJ1ZTsKK2Jvb2wgSFRNTFByZWxvYWRTY2Fu
bmVyOjpwcm9jZXNzUG9zc2libGVTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUs
IGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCit7CisgICAgQVNTRVJUKGlzU3RhcnRPckVuZFRhZyh0
b2tlbikpOworICAgIGlmICh0YWdOYW1lID09IHN0eWxlVGFnKSB7CisgICAgICAgIG1faW5TdHls
ZSA9IGlzU3RhcnRUYWcodG9rZW4pOworICAgICAgICBpZiAoIW1faW5TdHlsZSkKKyAgICAgICAg
ICAgIG1fY3NzU2Nhbm5lci5yZXNldCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKHRhc2sudGFnTmFtZSgpID09IGJhc2VUYWcp
Ci0gICAgICAgIHVwZGF0ZVByZWRpY3RlZEJhc2VFbGVtZW50VVJMKEtVUkwobV9kb2N1bWVudC0+
dXJsKCksIHRhc2suYmFzZUVsZW1lbnRIcmVmKCkpKTsKK2Jvb2wgSFRNTFByZWxvYWRTY2FubmVy
Ojpwcm9jZXNzUG9zc2libGVCYXNlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29u
c3QgSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBBU1NFUlQoaXNTdGFydFRhZyh0b2tlbikpOwor
ICAgIGlmICh0YWdOYW1lID09IGJhc2VUYWcpIHsKKyAgICAgICAgLy8gVGhlIGZpcnN0IDxiYXNl
PiBlbGVtZW50IGlzIHRoZSBvbmUgdGhhdCB3aW5zLgorICAgICAgICBpZiAoIW1fcHJlZGljdGVk
QmFzZUVsZW1lbnRVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICB0YXNrLnByZWxvYWQobV9kb2N1bWVudCwgbV9wcmVkaWN0ZWRCYXNlRWxlbWVudFVSTC5pc0Vt
cHR5KCkgPyBtX2RvY3VtZW50LT5iYXNlVVJMKCkgOiBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJM
KTsKKyAgICAgICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYmVnaW4oKTsgaXRlciAhPSB0b2tlbi5hdHRyaWJ1
dGVzKCkuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0
ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAg
ICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBocmVmQXR0cikgeworICAgICAgICAgICAgICAgIFN0
cmluZyBocmVmVmFsdWUgPSBTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShpdGVyLT5t
X3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgICAgICAgICAgICAgIG1f
cHJlZGljdGVkQmFzZUVsZW1lbnRVUkwgPSBLVVJMKG1fZG9jdW1lbnRVUkwsIHN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhocmVmVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhUTUxQcmVsb2FkU2Nhbm5lcjo6dXBkYXRl
UHJlZGljdGVkQmFzZUVsZW1lbnRVUkwoY29uc3QgS1VSTCYgYmFzZUVsZW1lbnRVUkwpCit2b2lk
IEhUTUxQcmVsb2FkU2Nhbm5lcjo6cHJvY2Vzc1Rva2VuKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4s
IFZlY3RvcjxPd25QdHI8UHJlbG9hZFJlcXVlc3Q+ID4mIHJlcXVlc3RzKQogewotICAgIC8vIFRo
ZSBmaXJzdCA8YmFzZT4gZWxlbWVudCBpcyB0aGUgb25lIHRoYXQgd2lucy4KLSAgICBpZiAoIW1f
cHJlZGljdGVkQmFzZUVsZW1lbnRVUkwuaXNFbXB0eSgpKQorICAgIC8vIDxzdHlsZT4gaXMgdGhl
IG9ubHkgcGxhY2Ugd2Ugc2VhcmNoIGZvciB1cmxzIGluIG5vbi1zdGFydC9lbmQtdGFnIHRva2Vu
cy4KKyAgICBpZiAobV9pblN0eWxlKSB7CisgICAgICAgIGlmICh0b2tlbi50eXBlKCkgIT0gSFRN
TFRva2VuVHlwZXM6OkNoYXJhY3RlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1fY3NzU2Nhbm5lci5zY2FuKHRva2VuLCByZXF1ZXN0cyk7CisgICAgfQorICAgIGlmICgh
aXNTdGFydE9yRW5kVGFnKHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQXRvbWljU3Ry
aW5nIHRhZ05hbWUodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7Cisj
aWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAgaWYgKHByb2Nlc3NQb3NzaWJsZVRlbXBs
YXRlVGFnKHRhZ05hbWUsIHRva2VuKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgaWYg
KHByb2Nlc3NQb3NzaWJsZVN0eWxlVGFnKHRhZ05hbWUsIHRva2VuKSkKICAgICAgICAgcmV0dXJu
OwotICAgIG1fcHJlZGljdGVkQmFzZUVsZW1lbnRVUkwgPSBiYXNlRWxlbWVudFVSTDsKKyAgICBp
ZiAoIWlzU3RhcnRUYWcodG9rZW4pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHByb2Nlc3NQ
b3NzaWJsZUJhc2VUYWcodGFnTmFtZSwgdG9rZW4pKQorICAgICAgICByZXR1cm47CisKKyAgICBQ
cmVsb2FkVGFzayB0YXNrKHRhZ05hbWUsIHRva2VuLmF0dHJpYnV0ZXMoKSk7CisgICAgT3duUHRy
PFByZWxvYWRSZXF1ZXN0PiByZXF1ZXN0ID0gIHRhc2suY3JlYXRlUHJlbG9hZFJlcXVlc3QobV9w
cmVkaWN0ZWRCYXNlRWxlbWVudFVSTCk7CisgICAgaWYgKHJlcXVlc3QpCisgICAgICAgIHJlcXVl
c3RzLmFwcGVuZChyZXF1ZXN0LnJlbGVhc2UoKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmgKaW5kZXggY2I4ZjMzOTE0MDlkMTE3
OTIwMjRlMGZjYTgyODkyNTEwYzViMmY3OS4uOTBmZjFjNTAzNDUwMzMwMDliZDMxOTRjMTE1MDI4
Mjk0ODVjNWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBy
ZWxvYWRTY2FubmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxv
YWRTY2FubmVyLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxQYXJzZXJPcHRpb25zOwogY2xhc3MgSFRNTFRva2Vu
OwogY2xhc3MgSFRNTFRva2VuaXplcjsKQEAgLTQyLDIxICs0MSwzMCBAQCBjbGFzcyBTZWdtZW50
ZWRTdHJpbmc7CiBjbGFzcyBIVE1MUHJlbG9hZFNjYW5uZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEhUTUxQcmVsb2FkU2Nhbm5lcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIEhUTUxQcmVsb2FkU2Nhbm5lcihEb2N1bWVudCosIGNvbnN0IEhUTUxQYXJzZXJP
cHRpb25zJik7CisgICAgLy8gSFRNTFByZWxvYWRTY2FubmVyIGludGVudGlvbmFsbHkgZG9lcyBu
b3QgaGF2ZSBhIHBvaW50ZXIgdG8gRG9jdW1lbnQuCisgICAgSFRNTFByZWxvYWRTY2FubmVyKGNv
bnN0IEhUTUxQYXJzZXJPcHRpb25zJiwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwogCiAgICAg
dm9pZCBhcHBlbmRUb0VuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKLSAgICB2b2lkIHNjYW4o
KTsKKyAgICB2b2lkIHNjYW4oSFRNTFJlc291cmNlUHJlbG9hZGVyKiwgY29uc3QgS1VSTCYgZG9j
dW1lbnRCYXNlRWxlbWVudFVSTCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwcm9jZXNzVG9rZW4o
KTsKLSAgICB2b2lkIHVwZGF0ZVByZWRpY3RlZEJhc2VFbGVtZW50VVJMKGNvbnN0IEtVUkwmIGJh
c2VFbGVtZW50VVJMKTsKKyAgICB2b2lkIHByb2Nlc3NUb2tlbihjb25zdCBIVE1MVG9rZW4mLCBW
ZWN0b3I8T3duUHRyPFByZWxvYWRSZXF1ZXN0PiA+JiByZXF1ZXN0cyk7CisKKyAgICBib29sIHBy
b2Nlc3NTdHlsZUNoYXJhY3RlcnMoY29uc3QgSFRNTFRva2VuJik7CisKKyNpZiBFTkFCTEUoVEVN
UExBVEVfRUxFTUVOVCkKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZVRlbXBsYXRlVGFnKGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgY29uc3QgSFRNTFRva2VuJik7CisjZW5kaWYKKworICAg
IGJvb2wgcHJvY2Vzc1Bvc3NpYmxlU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBjb25zdCBIVE1MVG9rZW4mKTsKKyAgICBib29sIHByb2Nlc3NQb3NzaWJsZUJhc2VUYWcoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBjb25zdCBIVE1MVG9rZW4mKTsKIAotICAgIERvY3Vt
ZW50KiBtX2RvY3VtZW50OwogICAgIFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsKICAgICBDU1NQ
cmVsb2FkU2Nhbm5lciBtX2Nzc1NjYW5uZXI7Ci0gICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1f
dG9rZW5pemVyOwogICAgIEhUTUxUb2tlbiBtX3Rva2VuOworICAgIE93blB0cjxIVE1MVG9rZW5p
emVyPiBtX3Rva2VuaXplcjsKICAgICBib29sIG1faW5TdHlsZTsKKyAgICBLVVJMIG1fZG9jdW1l
bnRVUkw7CiAgICAgS1VSTCBtX3ByZWRpY3RlZEJhc2VFbGVtZW50VVJMOwogCiAjaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTE5ZDIwZDkxMjY0ODE5Y2Iy
MWQ0YTcxYmUzMzUwZGJmMWQ5OGI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcApAQCAtMCwwICsxLDc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTFJlc291cmNlUHJlbG9hZGVyLmgiCisKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNTdHJpbmdTYWZlVG9TZW5kVG9Bbm90aGVy
VGhyZWFkKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIFN0cmluZ0ltcGwqIGltcGwgPSBz
dHJpbmcuaW1wbCgpOworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKGltcGwtPmhhc09uZVJlZigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3Ry
aW5nLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFByZWxvYWRSZXF1ZXN0Ojppc1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQoKSBj
b25zdAoreworICAgIHJldHVybiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJlYWQobV9p
bml0aWF0b3IpCisgICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCht
X2NoYXJzZXQpCisgICAgICAgICYmIGlzU3RyaW5nU2FmZVRvU2VuZFRvQW5vdGhlclRocmVhZCht
X3Jlc291cmNlVVJMKQorICAgICAgICAmJiBpc1N0cmluZ1NhZmVUb1NlbmRUb0Fub3RoZXJUaHJl
YWQobV9iYXNlVVJMLnN0cmluZygpKTsKK30KKworS1VSTCBQcmVsb2FkUmVxdWVzdDo6Y29tcGxl
dGVVUkwoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxl
dGVVUkwobV9yZXNvdXJjZVVSTCwgbV9iYXNlVVJMLmlzRW1wdHkoKSA/IGRvY3VtZW50LT51cmwo
KSA6IG1fYmFzZVVSTCk7Cit9CisKK0NhY2hlZFJlc291cmNlUmVxdWVzdCBQcmVsb2FkUmVxdWVz
dDo6cmVzb3VyY2VSZXF1ZXN0KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFJlc291cmNl
UmVxdWVzdChjb21wbGV0ZVVSTChkb2N1bWVudCkpKTsKKyAgICByZXF1ZXN0LnNldEluaXRpYXRv
cihtX2luaXRpYXRvcik7CisKKyAgICAvLyBGSVhNRTogSXQncyBwb3NzaWJsZSBDT1JTIHNob3Vs
ZCB3b3JrIGZvciBvdGhlciByZXF1ZXN0IHR5cGVzPworICAgIGlmIChtX3Jlc291cmNlVHlwZSA9
PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KQorICAgICAgICByZXF1ZXN0Lm11dGFibGVSZXNvdXJj
ZVJlcXVlc3QoKS5zZXRBbGxvd0Nvb2tpZXMobV9jcm9zc09yaWdpbk1vZGVBbGxvd3NDb29raWVz
KTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCBIVE1MUmVzb3VyY2VQcmVsb2FkZXI6
OnByZWxvYWQoUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKK3sKKyAgICBDYWNo
ZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHByZWxvYWQtPnJlc291cmNlUmVxdWVzdChtX2Rv
Y3VtZW50KTsKKyAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5wcmVsb2Fk
KHByZWxvYWQtPnJlc291cmNlVHlwZSgpLCByZXF1ZXN0LCBwcmVsb2FkLT5jaGFyc2V0KCkpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3Vy
Y2VQcmVsb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVBy
ZWxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMmEyNTA5NGQxYjNhMDBmMTQxZjNmNzAwOTA5NjE3ODk4
YTljYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UmVzb3VyY2VQcmVsb2FkZXIuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhUTUxSZXNvdXJjZVByZWxvYWRl
cl9oCisjZGVmaW5lIEhUTUxSZXNvdXJjZVByZWxvYWRlcl9oCisKKyNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlUmVxdWVzdC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFByZWxvYWRSZXF1ZXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxQcmVsb2FkUmVxdWVzdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaW5pdGlh
dG9yLCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBDYWNo
ZWRSZXNvdXJjZTo6VHlwZSByZXNvdXJjZVR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFByZWxvYWRSZXF1ZXN0KGluaXRpYXRvciwgcmVzb3VyY2VVUkwsIGJhc2VVUkws
IHJlc291cmNlVHlwZSkpOworICAgIH0KKyAgICBib29sIGlzU2FmZVRvU2VuZFRvQW5vdGhlclRo
cmVhZCgpIGNvbnN0OworCisgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVz
dChEb2N1bWVudCopOworCisgICAgY29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9jaGFyc2V0OyB9CisgICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNl
dCkgeyBtX2NoYXJzZXQgPSBjaGFyc2V0OyB9CisgICAgdm9pZCBzZXRDcm9zc09yaWdpbk1vZGVB
bGxvd3NDb29raWVzKGJvb2wgYWxsb3dzQ29va2llcykgeyBtX2Nyb3NzT3JpZ2luTW9kZUFsbG93
c0Nvb2tpZXMgPSBhbGxvd3NDb29raWVzOyB9CisgICAgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgcmVz
b3VyY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVR5cGU7IH0KKworcHJpdmF0ZToK
KyAgICBQcmVsb2FkUmVxdWVzdChjb25zdCBTdHJpbmcmIGluaXRpYXRvciwgY29uc3QgU3RyaW5n
JiByZXNvdXJjZVVSTCwgY29uc3QgS1VSTCYgYmFzZVVSTCwgQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
cmVzb3VyY2VUeXBlKQorICAgICAgICA6IG1faW5pdGlhdG9yKGluaXRpYXRvcikKKyAgICAgICAg
LCBtX3Jlc291cmNlVVJMKHJlc291cmNlVVJMKQorICAgICAgICAsIG1fYmFzZVVSTChiYXNlVVJM
KQorICAgICAgICAsIG1fcmVzb3VyY2VUeXBlKHJlc291cmNlVHlwZSkKKyAgICAgICAgLCBtX2Ny
b3NzT3JpZ2luTW9kZUFsbG93c0Nvb2tpZXMoZmFsc2UpCisgICAgeyB9CisKKyAgICBLVVJMIGNv
bXBsZXRlVVJMKERvY3VtZW50Kik7CisKKyAgICBTdHJpbmcgbV9pbml0aWF0b3I7CisgICAgU3Ry
aW5nIG1fcmVzb3VyY2VVUkw7CisgICAgS1VSTCBtX2Jhc2VVUkw7CisgICAgU3RyaW5nIG1fY2hh
cnNldDsKKyAgICBDYWNoZWRSZXNvdXJjZTo6VHlwZSBtX3Jlc291cmNlVHlwZTsKKyAgICBib29s
IG1fY3Jvc3NPcmlnaW5Nb2RlQWxsb3dzQ29va2llczsKK307CisKK2NsYXNzIEhUTUxSZXNvdXJj
ZVByZWxvYWRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTFJlc291cmNlUHJlbG9h
ZGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSFRN
TFJlc291cmNlUHJlbG9hZGVyKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICAgICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQorICAgICAgICAsIG1fd2Vha0ZhY3RvcnkodGhpcykKKyAgICB7IH0KKwor
ICAgIHZvaWQgcHJlbG9hZChQYXNzT3duUHRyPFByZWxvYWRSZXF1ZXN0Pik7CisKKyAgICBXZWFr
UHRyPEhUTUxSZXNvdXJjZVByZWxvYWRlcj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vh
a0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisKK3ByaXZhdGU6CisgICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CisgICAgV2Vha1B0ckZhY3Rvcnk8SFRNTFJlc291cmNlUHJlbG9hZGVyPiBtX3dl
YWtGYWN0b3J5OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAppbmRleCAzNzU5YjI4M2RjMDc4ZmE1
OGRmNTM3NDAwN2E4MzQzZTkyZjM5OTRiLi41NWMyNGNlZmYyM2U5ZjczMjU5MzdhZTMzMzAwOGEw
MjNmZTJlYzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlUmVxdWVzdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENhY2hlZFJlc291
cmNlUmVxdWVzdF9oCiAjZGVmaW5lIENhY2hlZFJlc291cmNlUmVxdWVzdF9oCiAKKyNpbmNsdWRl
ICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRlck9wdGlvbnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
QEAgLTM0LDcgKzM1LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRG9jdW1lbnQ7
Ci1jbGFzcyBFbGVtZW50OwogCiBjbGFzcyBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgewogcHVibGlj
Ogo=
</data>

          </attachment>
      

    </bug>

</bugzilla>