<?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>38142</bug_id>
          
          <creation_ts>2010-04-26 14:35:58 -0700</creation_ts>
          <short_desc>RegExp caching</short_desc>
          <delta_ts>2010-06-22 12:53:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>217284</commentid>
    <comment_count>0</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-04-26 14:35:58 -0700</bug_when>
    <thetext>Now if we create a new RegExp object in jsc - even if with the same patternString - jsc calls the create and compile methods again and again.
We could avoid that with regexp-caching. I have a patch to solve it. I used round robin regex-policy. 
With this extension the ss runtime results didn&apos;t changed significant (8 ** TOTAL **: - 630.7ms +/- 0.4%   628.9ms +/- 0.3%). However by the Windscorpion&apos;s ws-email performance test run 2.61x fast (2658ms +/- 2% -&gt; 1016ms +/- 2%). (130128 hit and 6 miss event).
No new regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217291</commentid>
    <comment_count>1</comment_count>
      <attachid>54334</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-04-26 14:41:46 -0700</bug_when>
    <thetext>Created attachment 54334
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217293</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-26 14:43:55 -0700</bug_when>
    <thetext>Attachment 54334 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/RegExpCache.h:30:  #ifndef header guard has wrong style, please use: RegExpCache_h  [build/header_guard] [5]
JavaScriptCore/runtime/RegExpCache.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/runtime/RegExpCache.h:35:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
JavaScriptCore/runtime/RegExpCache.h:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
JavaScriptCore/runtime/RegExpCache.h:113:  One space before end of line comments  [whitespace/comments] [5]
JavaScriptCore/runtime/RegExpCache.h:115:  Should have a space between // and comment  [whitespace/comments] [4]
JavaScriptCore/runtime/RegExpCache.cpp:27:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 7 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217303</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-04-26 14:59:00 -0700</bug_when>
    <thetext>Do you have data on where ws-email creates regular expressions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217407</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-26 18:08:47 -0700</bug_when>
    <thetext>Attachment 54334 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1853135</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217548</commentid>
    <comment_count>5</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-04-26 23:53:16 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Do you have data on where ws-email creates regular expressions?

ws-email tests random strings whether they are valid e-mail addresses. The neccessery regular expressions are too long, hence they are created from substrings. One such example follows:

 var specialChars=&quot;\\(\\)&gt;&lt;@,;:\\\\\\\&quot;\\.\\[\\]&quot;;
 var validChars=&quot;\[^\\s&quot; + specialChars + &quot;\]&quot;;
 var quotedUser=&quot;(\&quot;[^\&quot;]*\&quot;)&quot;;
 var atom=validChars + &apos;+&apos;;
 var word=&quot;(&quot; + atom + &quot;|&quot; + quotedUser + &quot;)&quot;;
 var userPat=new RegExp(&quot;^&quot; + word + &quot;(\\.&quot; + word + &quot;)*$&quot;);

Every time when the function is called these regular expressions are recreated. This takes a lot of time because regular expressions parsing is expensive.
Furthermore there are many fallbacks to PCRE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219951</commentid>
    <comment_count>6</comment_count>
      <attachid>54334</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-02 18:57:35 -0700</bug_when>
    <thetext>Comment on attachment 54334
RegExp caching

I would have called &quot;get&quot; &quot;lookupOrCreate&quot; to match the Create pattern of the rest of the code.

I assume there is no gotchas to making JSGlobalData larger?

+    RefPtr&lt;RegExp&gt; cacheRegExp;
should be cachedRegExp, not &quot;cache&quot;

I think it would be cleaner to move all the creation logic (under the if (!cacheRegExp) block) into its own function.  Then the function reads:

if (!cachedRegExp)
     return createAndCache(flags, patternString);
return cacheRegExp.release()

Should be m_
+    , ptr(-1) 
+    , isFull(false) 

This code fails for regexps over maxCacheablePatternLength in length.  It should early return creating a new one each time.

I would have made a countFlags(flags) method for:
+    if (flags.find(&apos;g&apos;) != UString::NotFound)
+        flagsCnt += 4;
+    if (flags.find(&apos;i&apos;) != UString::NotFound)
+        flagsCnt += 2;
+    if (flags.find(&apos;m&apos;) != UString::NotFound)
+        flagsCnt += 1;

Also, countFlags probably goes on RegExpKeyType.

Why RegExpKeyType instead of just RegExpKey?

I *really* like this idea.  I just think the code needs some refinement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220552</commentid>
    <comment_count>7</comment_count>
      <attachid>55008</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-05-04 04:30:47 -0700</bug_when>
    <thetext>Created attachment 55008
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220553</commentid>
    <comment_count>8</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-05-04 04:31:25 -0700</bug_when>
    <thetext>&gt; I assume there is no gotchas to making JSGlobalData larger?
No, there isn&apos;t.

&gt; Why RegExpKeyType instead of just RegExpKey?
You&apos;re right. I modified.
 
&gt; I *really* like this idea.
Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220554</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-04 04:36:39 -0700</bug_when>
    <thetext>Attachment 55008 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/RegExpKey.h:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220568</commentid>
    <comment_count>10</comment_count>
      <attachid>55013</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-05-04 06:12:02 -0700</bug_when>
    <thetext>Created attachment 55013
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223005</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-09 01:12:22 -0700</bug_when>
    <thetext>Attachment 55013 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/2214087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226467</commentid>
    <comment_count>12</comment_count>
      <attachid>56186</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-05-16 06:31:36 -0700</bug_when>
    <thetext>Created attachment 56186
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226738</commentid>
    <comment_count>13</comment_count>
      <attachid>56236</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-05-17 06:08:15 -0700</bug_when>
    <thetext>Created attachment 56236
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227263</commentid>
    <comment_count>14</comment_count>
      <attachid>56362</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-05-18 04:59:43 -0700</bug_when>
    <thetext>Created attachment 56362
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227640</commentid>
    <comment_count>15</comment_count>
      <attachid>56362</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-18 20:31:32 -0700</bug_when>
    <thetext>Comment on attachment 56362
RegExp caching

+    RefPtr&lt;RegExp&gt; cachedRegExp;
+
+    if (!flags.isNull())
+        cachedRegExp = RegExp::create(m_globalData, patternString, flags);
+    else
+        cachedRegExp = RegExp::create(m_globalData, patternString);

This code would be much simpler if you changed RegExp::create to always take a flags argument, but do something efficient when it is null. That might be a good thing to do in a future patch.


+    if (patternString.size() &lt; maxCacheablePatternLength) {
+        ++m_ptr;
+        if (m_ptr &gt;= maxCacheableEntries) {
+            m_ptr = 0;
+            m_isFull = true;
+        }
+        if (m_isFull)
+            m_cacheMap.remove(RegExpKey(patternKeyArray[m_ptr].flagsValue, patternKeyArray[m_ptr].pattern));
+
+        RegExpKey key = RegExpKey(flags, patternString);
+        m_cacheMap.set(key, cachedRegExp);
+        patternKeyArray[m_ptr].flagsValue = key.flagsValue;
+        patternKeyArray[m_ptr].pattern = patternString.rep();
+    }
+    return cachedRegExp;

The WebKit style for code like this is to check for the failure case and return early. One advantage of this style is that less code ends up indented. So:

if (patternString.size() &gt;= maxCacheablePatternLength)
    return cachedRegExp;

I wouldn&apos;t call the regexp &apos;cachedRegExp&apos;, nor would I call the function &apos;createAndCache&apos;, since the regexp might not be cached. How about &quot;regeExp&quot; and &quot;create&quot; instead?

You define m_isFull as a data member, but only use it locally in createAndCache. I think you can get rid of it entirely, and just rely on &quot;if (m_ptr &gt;= maxCacheableEntries)&quot; in createAndCache.

lookupOrCreate and createAndCache combine to do more hash lookups and RegExpKey construction than necessary. Here&apos;s what I&apos;d recommend:

1. lookupOrCreate should say &quot;pair &lt;iterator, bool&gt; result = m_cacheMap.add(RegExpKey(flags, patternString), 0)&quot;
2. if result.second is false, there was a pre-existing entry in the map. You can return it.
3. if result.second is true, you&apos;ve added a 0 to the map, and result.first is an iterator pointing at that zero. You can now use that iterator to add a real value to the map.

I think that patternKeyArray is unnecessary complexity. I guess your goal is LRU eviction. However, that&apos;s not what you&apos;ll get. When the cache is full, you&apos;ll evict the oldest item, and whatever item happens to collide with the item you&apos;re trying to add. There&apos;s no guarantee that evicting the oldest item will solve your collision problem.

You could go to greater lengths to implement a strict LRU cache. But what I would recommend is just to evict upon collision. All this would require is changing the call to add() that I suggested into a call to set() in the case where &quot;m_cacheMap.size() &gt; maxCacheableEntries&quot;.

r- because I think there are still good improvements to be made here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233188</commentid>
    <comment_count>16</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-06-02 03:31:48 -0700</bug_when>
    <thetext>&gt; This code would be much simpler if you changed RegExp::create to always take a flags argument, but do something efficient when it is null. That might be a good thing to do in a future patch.
Okay, I&apos;m going to do it.

&gt; +    if (patternString.size() &lt; maxCacheablePatternLength) {
&gt; +        ++m_ptr;
&gt; +        if (m_ptr &gt;= maxCacheableEntries) {
&gt; +            m_ptr = 0;
&gt; +            m_isFull = true;
&gt; +        }
&gt; +        if (m_isFull)
&gt; +            m_cacheMap.remove(RegExpKey(patternKeyArray[m_ptr].flagsValue, patternKeyArray[m_ptr].pattern));
&gt; +
&gt; +        RegExpKey key = RegExpKey(flags, patternString);
&gt; +        m_cacheMap.set(key, cachedRegExp);
&gt; +        patternKeyArray[m_ptr].flagsValue = key.flagsValue;
&gt; +        patternKeyArray[m_ptr].pattern = patternString.rep();
&gt; +    }
&gt; +    return cachedRegExp;
&gt; 
&gt; The WebKit style for code like this is to check for the failure case and return early. One advantage of this style is that less code ends up indented. So:
&gt; 
&gt; if (patternString.size() &gt;= maxCacheablePatternLength)
&gt;     return cachedRegExp;
&gt; 
&gt; I wouldn&apos;t call the regexp &apos;cachedRegExp&apos;, nor would I call the function &apos;createAndCache&apos;, since the regexp might not be cached. How about &quot;regeExp&quot; and &quot;create&quot; instead?
Thanks, I&apos;ve changed it.
 
&gt; You define m_isFull as a data member, but only use it locally in createAndCache. I think you can get rid of it entirely, and just rely on &quot;if (m_ptr &gt;= maxCacheableEntries)&quot; in createAndCache.
m_isFull couldn&apos;t be local, because we have to know if the map became full and it isn&apos;t local inforamtion. But I think the name of the variable was abiguous, so I changed it to m_isFirstIteration.
 
&gt; lookupOrCreate and createAndCache combine to do more hash lookups and RegExpKey construction than necessary. Here&apos;s what I&apos;d recommend:
&gt; 
&gt; 1. lookupOrCreate should say &quot;pair &lt;iterator, bool&gt; result = m_cacheMap.add(RegExpKey(flags, patternString), 0)&quot;
&gt; 2. if result.second is false, there was a pre-existing entry in the map. You can return it.
&gt; 3. if result.second is true, you&apos;ve added a 0 to the map, and result.first is an iterator pointing at that zero. You can now use that iterator to add a real value to the map.
That&apos;s right. Modified.

&gt; I think that patternKeyArray is unnecessary complexity. I guess your goal is LRU eviction.
My implementation is Round Robin, not LRU. I have tried LRU before, but there was no perf. gain, and the code was more complex. However, if you prefer LRU model, I can submit that to the bugzilla.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233189</commentid>
    <comment_count>17</comment_count>
      <attachid>57641</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-06-02 03:33:17 -0700</bug_when>
    <thetext>Created attachment 57641
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237741</commentid>
    <comment_count>18</comment_count>
      <attachid>58626</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-06-14 01:03:40 -0700</bug_when>
    <thetext>Created attachment 58626
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237910</commentid>
    <comment_count>19</comment_count>
      <attachid>58626</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-06-14 10:56:39 -0700</bug_when>
    <thetext>Comment on attachment 58626
RegExp caching


&gt; +RegExpCache::RegExpCache(JSGlobalData* globalData)
&gt; +    : m_globalData(globalData)
&gt; +    , m_ptr(-1)
&gt; +    , m_isFirstIteration(true)
&gt; +    {
&gt; +    }
These braces should not be indented.

Any particular reason for a round robin cache vs. lru?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237935</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-14 11:32:10 -0700</bug_when>
    <thetext>+PassRefPtr&lt;RegExp&gt; RegExpCache::lookupOrCreate(const UString&amp; patternString, const UString&amp; flags)
+{
+    pair&lt;HashMap&lt;RegExpKey, RefPtr&lt;RegExp&gt; &gt;::iterator, bool&gt; result = m_cacheMap.add(RegExpKey(flags, patternString), 0);
+    if (patternString.size() &lt; maxCacheablePatternLength &amp;&amp; !result.second)
+        return (*result.first).second;

No need to check &quot;patternString.size() &lt; maxCacheablePatternLength&quot; here. If an item is in the cache, it must, by logical deduction, satisfy the constraints of the cache.

However, you *should* check &quot;patternString.size() &lt; maxCacheablePatternLength&quot; prior to calling HashMap::add, and avoid calling HashMap::add if the string is too long. One goal of maxCacheablePatternLength, I assume, is to avoid hashing very long strings. 

The C++ way to write &quot;(*x).y&quot; is &quot;x-&gt;y&quot;.

+    ++m_ptr;

Let&apos;s give this a more descriptive name. How about &quot;m_nextKeyToEvict&quot;?

+    if (m_ptr &gt;= maxCacheableEntries) {

Should be &quot;m_ptr == maxCacheableEntries&quot;. m_ptr should never be &gt; maxCacheableEntries.

+        // After this point the value of m_isFirstIteration will be false.
+        m_isFirstIteration = false;

I think the line of code is sufficient -- no need to add a comment with a duplicate meaning.

I guess what this flag really means is, &quot;The cache is full, so a new addition must first evict something old.&quot; How about calling this variable &quot;m_isFull&quot;, and reversing its value?

I think you misunderstood my comment about LRU. I&apos;m not asking you to switch to LRU vs Round Robin. I don&apos;t have a strong opinion on an eviction strategy here.

r- because of the maxCacheablePatternLength bug, but I think the other suggestions here, and Oliver&apos;s suggestion, are important too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237992</commentid>
    <comment_count>21</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-06-14 12:40:59 -0700</bug_when>
    <thetext>&gt; I guess what this flag really means is, &quot;The cache is full, so a new addition must first evict something old.&quot; How about calling this variable &quot;m_isFull&quot;, and reversing its value?

:D Geoff, you was the reason why we changed the name to clarify its purpose:

&quot;You define m_isFull as a data member, but only use it locally in createAndCache.&quot;

So, back to the original?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237995</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-14 12:48:03 -0700</bug_when>
    <thetext>&gt; &gt; I guess what this flag really means is, &quot;The cache is full, so a new addition must first evict something old.&quot; How about calling this variable &quot;m_isFull&quot;, and reversing its value?
&gt; :D Geoff, you was the reason why we changed the name to clarify its purpose:
&gt; 
&gt; &quot;You define m_isFull as a data member, but only use it locally in createAndCache.&quot;

Indeed, I mistook m_isFull as being used only locally. My bad.

But I don&apos;t think I suggested renaming it to m_isFirstIteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238006</commentid>
    <comment_count>23</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-06-14 13:10:43 -0700</bug_when>
    <thetext>&gt; But I don&apos;t think I suggested renaming it to m_isFirstIteration.

I didn&apos;t said that. I said we thought m_isFull is misleading (not show its global nature) and changed it to something different. Perhaps that is even more misleading :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238359</commentid>
    <comment_count>24</comment_count>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-06-15 06:51:07 -0700</bug_when>
    <thetext>Oliver:
RR is far less complex than LRU and the gain for LRU is minimal over RR, but if you prefer LRU there is still time to change.

Garen:
I think, you are right. Your suggestions are done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238360</commentid>
    <comment_count>25</comment_count>
      <attachid>58772</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2010-06-15 06:52:34 -0700</bug_when>
    <thetext>Created attachment 58772
RegExp caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238475</commentid>
    <comment_count>26</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-06-15 11:12:59 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Oliver:
&gt; RR is far less complex than LRU and the gain for LRU is minimal over RR, but if you prefer LRU there is still time to change.
No need to change, I was just interested in whether it was a conscious decision :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241360</commentid>
    <comment_count>27</comment_count>
      <attachid>58772</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-22 11:41:35 -0700</bug_when>
    <thetext>Comment on attachment 58772
RegExp caching

JavaScriptCore/runtime/RegExpCache.cpp:65
 +      m_cacheMap.set(key, regExp);
You could eliminate this hash lookup by passing an iterator from lookupOrCreate. I think that would be a good thing to do in a follow-up patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241384</commentid>
    <comment_count>28</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-06-22 12:18:05 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/61623
If the bots will not complain, I will close the bug soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241403</commentid>
    <comment_count>29</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-06-22 12:53:54 -0700</bug_when>
    <thetext>Buildbots like the patch, even the layout ones.

Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54334</attachid>
            <date>2010-04-26 14:41:46 -0700</date>
            <delta_ts>2010-05-04 06:12:02 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>cache.patch</filename>
            <type>text/plain</type>
            <size>13540</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHJldmlzaW9uIDU4MjYyKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiAr
MTg0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9SZWdFeHAuY3BwIFwKICAgICBydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBc
CisgICAgcnVudGltZS9SZWdFeHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvUm9wZUltcGwuY3Bw
IFwKICAgICBydW50aW1lL1Njb3BlQ2hhaW4uY3BwIFwKICAgICBydW50aW1lL1NtYWxsU3RyaW5n
cy5jcHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHJldmlzaW9uIDU4MjYyKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBSZWdpc3Rl
cklEKiBTdHJpbmdOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZ2Vu
ZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0ZXJuLnVzdHJpbmcoKSwgbV9mbGFncy51c3RyaW5n
KCkpOworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IGdlbmVyYXRvci5nbG9iYWxEYXRhKCkt
PnJlZ0V4cENhY2hlKCkuZ2V0KG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygp
KTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1pdFRocm93
RXJyb3IoZ2VuZXJhdG9yLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9u
OiAlcyIsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHJldmlzaW9uIDU4MjYyKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgSlNHbG9iYWxEYXRh
OjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgcHJvcGVydHlOYW1lSXRlcmF0b3JT
dHJ1Y3R1cmUoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKGpzTnVsbCgp
KSkKICAgICAsIGdldHRlclNldHRlclN0cnVjdHVyZShHZXR0ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVj
dHVyZShqc051bGwoKSkpCiAgICAgLCBhcGlXcmFwcGVyU3RydWN0dXJlKEpTQVBJVmFsdWVXcmFw
cGVyOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQorICAgICwgbV9yZWdFeHBDYWNoZSh0aGlz
KQogICAgICwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUoSlNDZWxsOjpjcmVhdGVEdW1teVN0
cnVjdHVyZSgpKQogI2lmIFVTRShKU1ZBTFVFMzIpCiAgICAgLCBudW1iZXJTdHJ1Y3R1cmUoSlNO
dW1iZXJDZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpKQpAQCAtMTYwLDcgKzE2MSw2IEBA
IEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKIEpTR2xvYmFsRGF0YTo6
fkpTR2xvYmFsRGF0YSgpCiB7CiAgICAgLy8gQnkgdGhlIHRpbWUgdGhpcyBpcyBkZXN0cm95ZWQs
IGhlYXAuZGVzdHJveSgpIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkLgotCiAgICAgZGVs
ZXRlIGludGVycHJldGVyOwogI2lmbmRlZiBOREVCVUcKICAgICAvLyBaZXJvaW5nIG91dCB0byBt
YWtlIHRoZSBiZWhhdmlvciBtb3JlIHByZWRpY3RhYmxlIHdoZW4gc29tZW9uZSBhdHRlbXB0cyB0
byB1c2UgYSBkZWxldGVkIGluc3RhbmNlLgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCShyZXZpc2lvbiA1ODI2MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0cmlu
Z3MuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5o
IgogI2luY2x1ZGUgIlRlcm1pbmF0b3IuaCIKICNpbmNsdWRlICJUaW1lb3V0Q2hlY2tlci5oIgpA
QCAtMTk5LDEzICsyMDAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZG91YmxlIGNh
Y2hlZFVUQ09mZnNldDsKICAgICAgICAgRFNUT2Zmc2V0Q2FjaGUgZHN0T2Zmc2V0Q2FjaGU7Ci0g
ICAgICAgIAorCiAgICAgICAgIFVTdHJpbmcgY2FjaGVkRGF0ZVN0cmluZzsKICAgICAgICAgZG91
YmxlIGNhY2hlZERhdGVTdHJpbmdWYWx1ZTsKLSAgICAgICAgCisKICAgICAgICAgV2Vha1JhbmRv
bSB3ZWFrUmFuZG9tOwogCiAgICAgICAgIGludCBtYXhSZWVudHJ5RGVwdGg7CisKKyAgICAgICAg
UmVnRXhwQ2FjaGUgbV9yZWdFeHBDYWNoZTsKKwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgVGhy
ZWFkSWRlbnRpZmllciBleGNsdXNpdmVUaHJlYWQ7CiAjZW5kaWYKQEAgLTIxNSw2ICsyMTksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzdGFydFNhbXBsaW5nKCk7CiAgICAgICAg
IHZvaWQgc3RvcFNhbXBsaW5nKCk7CiAgICAgICAgIHZvaWQgZHVtcFNhbXBsZURhdGEoRXhlY1N0
YXRlKiBleGVjKTsKKyAgICAgICAgUmVnRXhwQ2FjaGUmIHJlZ0V4cENhY2hlKCkgeyByZXR1cm4g
bV9yZWdFeHBDYWNoZTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YShHbG9i
YWxEYXRhVHlwZSwgVGhyZWFkU3RhY2tUeXBlKTsKICAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0
YSomIHNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDYWNoZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmdldChjb25zdCBVU3RyaW5nJiBwYXR0
ZXJuU3RyaW5nLCBjb25zdCBVU3RyaW5nJiBmbGFncykKK3sKKyAgICBpbnQgZmxhZ3NDbnQgPSAw
OworICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAg
IGZsYWdzQ250ICs9IDQ7CisgICAgaWYgKGZsYWdzLmZpbmQoJ2knKSAhPSBVU3RyaW5nOjpOb3RG
b3VuZCkKKyAgICAgICAgZmxhZ3NDbnQgKz0gMjsKKyAgICBpZiAoZmxhZ3MuZmluZCgnbScpICE9
IFVTdHJpbmc6Ok5vdEZvdW5kKQorICAgICAgICBmbGFnc0NudCArPSAxOworCisgICAgUmVmUHRy
PFJlZ0V4cD4gY2FjaGVSZWdFeHA7CisKKyAgICBpZiAocGF0dGVyblN0cmluZy5zaXplKCkgPCBt
YXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoKQorICAgICAgICBjYWNoZVJlZ0V4cCA9IG1fY2FjaGVN
YXAuZ2V0KFJlZ0V4cEtleVR5cGUoZmxhZ3NDbnQsIHBhdHRlcm5TdHJpbmcpKTsKKworICAgIGlm
ICghY2FjaGVSZWdFeHApIHsKKyAgICAgICAgaWYgKCFmbGFncy5pc051bGwoKSkKKyAgICAgICAg
ICAgIGNhY2hlUmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3Ry
aW5nLCBmbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhY2hlUmVnRXhwID0gUmVn
RXhwOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3RyaW5nKTsKKworICAgICAgICBpZiAo
cGF0dGVyblN0cmluZy5zaXplKCkgPCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoKSB7CisgICAg
ICAgICAgICArK3B0cjsKKyAgICAgICAgICAgIGlmIChwdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmll
cyB8fCBpc0Z1bGwpIHsKKyAgICAgICAgICAgICAgICBwdHIgPSBwdHIgJSBtYXhDYWNoZWFibGVF
bnRyaWVzOworICAgICAgICAgICAgICAgIG1fY2FjaGVNYXAucmVtb3ZlKFJlZ0V4cEtleVR5cGUo
cGF0dGVybktleUFycmF5W3B0cl0uZmxhZ3MsIHBhdHRlcm5LZXlBcnJheVtwdHJdLnBhdHRlcm4p
KTsKKyAgICAgICAgICAgICAgICBpc0Z1bGwgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9jYWNoZU1hcC5zZXQoUmVnRXhwS2V5VHlwZShmbGFnc0NudCwgcGF0dGVyblN0cmlu
ZyksIGNhY2hlUmVnRXhwKTsKKyAgICAgICAgICAgIHBhdHRlcm5LZXlBcnJheVtwdHJdLmZsYWdz
ID0gZmxhZ3NDbnQ7CisgICAgICAgICAgICBwYXR0ZXJuS2V5QXJyYXlbcHRyXS5wYXR0ZXJuID0g
cGF0dGVyblN0cmluZy5yZXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2FjaGVS
ZWdFeHAucmVsZWFzZSgpOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBw
dHIoLTEpIAorICAgICwgaXNGdWxsKGZhbHNlKSAKKyAgICB7CisgICAgfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgJKHJldmlzaW9u
IDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkg
b2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJVU3Ry
aW5nLmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCisKKyNpZm5kZWYgUmVnZXhwQ2FjaGVfaAorI2Rl
ZmluZSBSZWdleHBDYWNoZV9oCisKK25hbWVzcGFjZSBKU0MgeworCisgICAgc3RydWN0IFJlZ0V4
cEtleVR5cGUgeworICAgICAgICBpbnQgZmxhZ3M7CisgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpS
ZXA+IHBhdHRlcm47CisKKyAgICAgICAgUmVnRXhwS2V5VHlwZSgpCisgICAgICAgICAgICA6IGZs
YWdzKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ0V4cEtleVR5cGUoaW50
IGZsYWdzKQorICAgICAgICAgICAgOiBmbGFncyhmbGFncykKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgUmVnRXhwS2V5VHlwZShpbnQgZmxhZ3MsIGNvbnN0IFVTdHJpbmcmIHBhdHRl
cm4pCisgICAgICAgICAgICA6IGZsYWdzKGZsYWdzKQorICAgICAgICAgICAgLCBwYXR0ZXJuKHBh
dHRlcm4ucmVwKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ0V4cEtleVR5
cGUoaW50IGZsYWdzLCBjb25zdCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gcGF0dGVybikKKyAg
ICAgICAgICAgIDogZmxhZ3MoZmxhZ3MpCisgICAgICAgICAgICAsIHBhdHRlcm4ocGF0dGVybikK
KyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKK30KKworbmFtZXNwYWNlIFdURiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBSZWdFeHBIYXNoOworCisgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBKU0M6OlJlZ0V4cEtleVR5cGUmIGEsIGNvbnN0IEpTQzo6UmVnRXhwS2V5VHlwZSYg
YikgeworICAgICAgICBpZiAoYS5mbGFncyAhPSBiLmZsYWdzKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIWEucGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiAhYi5w
YXR0ZXJuOworICAgICAgICBpZiAoIWIucGF0dGVybikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVybi5nZXQoKSwgYi5wYXR0ZXJuLmdldCgp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdFeHBIYXNoPEpTQzo6UmVnRXhw
S2V5VHlwZT4geworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBKU0M6OlJlZ0V4
cEtleVR5cGUmIGtleSkgeyByZXR1cm4ga2V5LnBhdHRlcm4tPmhhc2goKTsgfQorICAgICAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleVR5cGUmIGEsIGNvbnN0IEpTQzo6
UmVnRXhwS2V5VHlwZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UmVnRXhwS2V5VHlwZT4gewor
ICAgICAgICB0eXBlZGVmIFJlZ0V4cEhhc2g8SlNDOjpSZWdFeHBLZXlUeXBlPiBIYXNoOworICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6UmVnRXhwS2V5VHlw
ZT4gOiBHZW5lcmljSGFzaFRyYWl0czxKU0M6OlJlZ0V4cEtleVR5cGU+IHsKKyAgICAgICAgc3Rh
dGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKEpTQzo6UmVnRXhwS2V5VHlwZSYgc2xvdCkg
eyBzbG90LmZsYWdzID0gLTE7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUo
Y29uc3QgSlNDOjpSZWdFeHBLZXlUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZmxhZ3MgPT0g
LTE7IH0KKyAgICB9OworfQorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIFJlZ0V4cENh
Y2hlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFBhc3NSZWZQdHI8UmVnRXhwPiBnZXQoY29uc3Qg
VVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3MpOworICAgICAgICBS
ZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENhY2hlYWJsZVBhdHRlcm5MZW5ndGggPSAy
NTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsK
KworICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKworICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8UmVnRXhwS2V5VHlwZSwgUmVmUHRyPFJlZ0V4cD4gPiBSZWdFeHBDYWNoZU1hcDsK
KyAgICAgICAgUmVnRXhwS2V5VHlwZSBwYXR0ZXJuS2V5QXJyYXlbbWF4Q2FjaGVhYmxlRW50cmll
c107CisgICAgICAgIGludCBwdHI7CisgICAgICAgIGJvb2wgaXNGdWxsOworICAgICAgICBSZWdF
eHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIH07CisKK30gIC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vUmVnRXhwQ2FjaGVfaApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDU4MjYyKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw3ICsz
MDEsNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgVVN0
cmluZyBwYXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRv
U3RyaW5nKGV4ZWMpOwogICAgIFVTdHJpbmcgZmxhZ3MgPSBhcmcxLmlzVW5kZWZpbmVkKCkgPyBV
U3RyaW5nKCIiKSA6IGFyZzEudG9TdHJpbmcoZXhlYyk7CiAKLSAgICBSZWZQdHI8UmVnRXhwPiBy
ZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFn
cyk7CisgICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4
cENhY2hlKCkuZ2V0KHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgbWFrZVN0cmlu
ZygiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIsIHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkp
KTsKICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwLnJlbGVhc2UoKSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1ODI2
MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJv
dG9GdW5jQ29tCiAgICAgfSBlbHNlIHsKICAgICAgICAgVVN0cmluZyBwYXR0ZXJuID0gYXJncy5p
c0VtcHR5KCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIFVT
dHJpbmcgZmxhZ3MgPSBhcmcxLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzEudG9T
dHJpbmcoZXhlYyk7Ci0gICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9i
YWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgcmVnRXhwID0gZXhlYy0+Z2xvYmFs
RGF0YSgpLnJlZ0V4cENhY2hlKCkuZ2V0KHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBp
ZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNTgyNjIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MSw3ICs1OTEsNyBA
QCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTWF0CiAgICAgICAgICAqICBJ
ZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJl
Z0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhl
IGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVn
ID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYykp
OworICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS5nZXQoYTAu
dG9TdHJpbmcoZXhlYyksIFVTdHJpbmc6Om51bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0
cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpAQCAtNjQxLDcgKzY0MSw3IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTZWEKICAgICAgICAgICogIElmIHJl
Z2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhw
IiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhw
cmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBS
ZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSk7Cisg
ICAgICAgIHJlZyA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLmdldChhMC50b1N0
cmluZyhleGVjKSwgVVN0cmluZzo6bnVsbCgpKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7Cg==
</data>
<flag name="review"
          id="38273"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55008</attachid>
            <date>2010-05-04 04:30:47 -0700</date>
            <delta_ts>2010-05-04 06:12:02 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>rr_cache.patch</filename>
            <type>text/plain</type>
            <size>16757</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsOCArNTA2LDExIEBACiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmggXApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3Mp
Cit7CisgICAgUmVmUHRyPFJlZ0V4cD4gY2FjaGVkUmVnRXhwOworCisgICAgaWYgKHBhdHRlcm5T
dHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKKyAgICAgICAgY2FjaGVk
UmVnRXhwID0gbV9jYWNoZU1hcC5nZXQoUmVnRXhwS2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKSk7
CisKKyAgICBpZiAoIWNhY2hlZFJlZ0V4cCkKKyAgICAgICAgY2FjaGVkUmVnRXhwID0gY3JlYXRl
QW5kQ2FjaGUocGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiBjYWNoZWRSZWdFeHAu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmNyZWF0ZUFu
ZENhY2hlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdz
KSAKK3sKKyAgICBSZWZQdHI8UmVnRXhwPiBjYWNoZWRSZWdFeHA7CisKKyAgICBpZiAoIWZsYWdz
LmlzTnVsbCgpKQorICAgICAgICBjYWNoZWRSZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2dsb2Jh
bERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICAgIGNhY2hlZFJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZyk7CisgICAg
aWYgKHBhdHRlcm5TdHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkgewor
ICAgICAgICArK21fcHRyOworICAgICAgICBpZiAobV9wdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmll
cykgeworICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICAgICAgbV9pc0Z1bGwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChtX2lzRnVsbCkKKyAgICAgICAgICAgIG1fY2FjaGVN
YXAucmVtb3ZlKFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9wdHJdLmZsYWdzVmFsdWUsIHBh
dHRlcm5LZXlBcnJheVttX3B0cl0ucGF0dGVybikpOworCisgICAgICAgIFJlZ0V4cEtleSBrZXkg
PSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2NhY2hlTWFwLnNl
dChrZXksIGNhY2hlZFJlZ0V4cCk7CisgICAgICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxh
Z3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOworICAgICAgICBwYXR0ZXJuS2V5QXJyYXlbbV9wdHJd
LnBhdHRlcm4gPSBwYXR0ZXJuU3RyaW5nLnJlcCgpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVk
UmVnRXhwOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3B0cigtMSkg
CisgICAgLCBtX2lzRnVsbChmYWxzZSkgCisgICAgeworICAgIH0KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5mLnUt
c3plZ2VkLmh1KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgorCisj
aWZuZGVmIFJlZ0V4cENhY2hlX2gKKyNkZWZpbmUgUmVnRXhwQ2FjaGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUmVnRXhwQ2FjaGUgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8UmVn
RXhwPiBsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBV
U3RyaW5nJiBmbGFncyk7CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZUFuZENhY2hlKGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBS
ZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7Cisg
ICAgUmVnRXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVFbnRyaWVzXTsKKyAgICBS
ZWdFeHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIGludCBtX3B0cjsKKyAgICBib29sIG1faXNGdWxsOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBDYWNoZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlZ0V4
cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgpAQCAtNTkxLDcgKzU5Miw3
IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNz
XV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRo
IHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVn
RXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9TdHJpbmcoZXhlYyksIFVTdHJpbmc6Om51
bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBp
bnQgcG9zOwpAQCAtNjQxLDcgKzY0Miw3IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90
IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAg
ICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3
IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcg
PSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9T
dHJpbmcoZXhlYyksIFVTdHJpbmc6Om51bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICBj
bGFzcyBMZXhlcjsKICAgICBjbGFzcyBMaXRlcmFsVGFibGU7CiAgICAgY2xhc3MgUGFyc2VyOwor
ICAgIGNsYXNzIFJlZ0V4cENhY2hlOwogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogICAgIGNsYXNz
IFN0cnVjdHVyZTsKICAgICBjbGFzcyBVU3RyaW5nOwpAQCAtMjEwLDYgKzIxMSw5IEBACiAgICAg
ICAgIFdlYWtSYW5kb20gd2Vha1JhbmRvbTsKIAogICAgICAgICBpbnQgbWF4UmVlbnRyeURlcHRo
OworCisgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOworCiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGV4Y2x1c2l2ZVRocmVhZDsKICNlbmRpZgpAQCAt
MjE5LDYgKzIyMyw3IEBACiAgICAgICAgIHZvaWQgc3RhcnRTYW1wbGluZygpOwogICAgICAgICB2
b2lkIHN0b3BTYW1wbGluZygpOwogICAgICAgICB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0
ZSogZXhlYyk7CisgICAgICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsgcmV0dXJuIG1f
cmVnRXhwQ2FjaGU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFs
RGF0YVR5cGUsIFRocmVhZFN0YWNrVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEq
JiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTg2OTkpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ0V4cFBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMDEsNyArMzAyLDcgQEAKICAgICBVU3RyaW5nIHBh
dHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmco
ZXhlYyk7CiAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmco
IiIpIDogYXJnMS50b1N0cmluZyhleGVjKTsKIAotICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAg
ICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUo
KS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICghcmVnRXhwLT5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBtYWtl
U3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIiwgcmVnRXhwLT5lcnJvck1lc3Nh
Z2UoKSkpOwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDU4Njk5
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTm9k
ZXMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RI
UkVBRFMpCkBAIC0xNDgsNiArMTQ5LDcgQEAKICAgICAsIGNhY2hlZFVUQ09mZnNldChOYU4pCiAg
ICAgLCB3ZWFrUmFuZG9tKHN0YXRpY19jYXN0PGludD4oY3VycmVudFRpbWUoKSkpCiAgICAgLCBt
YXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8g
TWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkK
KyAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQogI2VuZGlmCkBAIC0xOTgsNiArMjAwLDcgQEAK
ICAgICBkZWxldGVMaXRlcmFsVGFibGUobGl0ZXJhbFRhYmxlKTsKIAogICAgIGRlbGV0ZSBjbGll
bnREYXRhOworICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwogfQogCiBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBl
IHR5cGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlByb3Rv
dHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTg4LDcgKzg5LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSBh
cmdzLmlzRW1wdHkoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKICAgICAg
ICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJn
MS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBleGVjLT5n
bG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3Mp
OwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEw
IFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBV
TklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBSZWdFeHBL
ZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFJl
Z0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4g
cGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgwKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZsYWdzVmFs
dWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3MsIGNvbnN0
IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICAgICAg
LCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShp
bnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQorICAgICAg
ICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAgIHsKKyAg
ICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKworICAgIGlu
dCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIHsKKyAgICAgICAgZmxhZ3NWYWx1
ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6Tm90Rm91bmQp
CisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdp
JykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDI7Cisg
ICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAg
ICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1ZhbHVlOworICAgIH0K
K307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
UmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU0M6OlJlZ0V4cEtl
eSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChhLmZsYWdzVmFsdWUg
IT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFhLnBhdHRl
cm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5wYXR0ZXJuKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVybi5nZXQoKSwgYi5w
YXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhwSGFzaDxKU0M6OlJl
Z0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpTQzo6UmVnRXhwS2V5
JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFz
aDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxKU0M6OlJlZ0V4cEtl
eT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpSZWdFeHBL
ZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3QpIHsgc2xvdC5mbGFn
c1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBKU0M6
OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUgPT0gLTE7IH0KK307
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9oCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gNTg2
OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1
ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAi
U2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE0NCw3ICsx
NDUsNyBAQAogCiBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdF
eHA+IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fcGF0
dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKKyAgICBSZWZQdHI8UmVnRXhwPiBy
ZWdFeHAgPSBnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLT5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNy
ZWF0ZShtX3BhdHRlcm4udXN0cmluZygpLCBtX2ZsYWdzLnVzdHJpbmcoKSk7CiAgICAgaWYgKCFy
ZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdlbmVyYXRv
ciwgU3ludGF4RXJyb3IsICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiLCByZWdFeHAt
PmVycm9yTWVzc2FnZSgpKTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0
KCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA1ODY5OSkKKysr
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTg4
LDYgKzE4OCw3IEBACiAgICAgcnVudGltZS9SZWdFeHAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCisgICAgcnVu
dGltZS9SZWdFeHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvUm9wZUltcGwuY3BwIFwKICAgICBy
dW50aW1lL1Njb3BlQ2hhaW4uY3BwIFwKICAgICBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55013</attachid>
            <date>2010-05-04 06:12:02 -0700</date>
            <delta_ts>2010-05-16 06:31:36 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>rr_cache.patch</filename>
            <type>text/plain</type>
            <size>16763</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsOCArNTA2LDExIEBACiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmggXApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3Mp
Cit7CisgICAgUmVmUHRyPFJlZ0V4cD4gY2FjaGVkUmVnRXhwOworCisgICAgaWYgKHBhdHRlcm5T
dHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKKyAgICAgICAgY2FjaGVk
UmVnRXhwID0gbV9jYWNoZU1hcC5nZXQoUmVnRXhwS2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKSk7
CisKKyAgICBpZiAoIWNhY2hlZFJlZ0V4cCkKKyAgICAgICAgY2FjaGVkUmVnRXhwID0gY3JlYXRl
QW5kQ2FjaGUocGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiBjYWNoZWRSZWdFeHAu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmNyZWF0ZUFu
ZENhY2hlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdz
KSAKK3sKKyAgICBSZWZQdHI8UmVnRXhwPiBjYWNoZWRSZWdFeHA7CisKKyAgICBpZiAoIWZsYWdz
LmlzTnVsbCgpKQorICAgICAgICBjYWNoZWRSZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2dsb2Jh
bERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICAgIGNhY2hlZFJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZyk7CisgICAg
aWYgKHBhdHRlcm5TdHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkgewor
ICAgICAgICArK21fcHRyOworICAgICAgICBpZiAobV9wdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmll
cykgeworICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICAgICAgbV9pc0Z1bGwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChtX2lzRnVsbCkKKyAgICAgICAgICAgIG1fY2FjaGVN
YXAucmVtb3ZlKFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9wdHJdLmZsYWdzVmFsdWUsIHBh
dHRlcm5LZXlBcnJheVttX3B0cl0ucGF0dGVybikpOworCisgICAgICAgIFJlZ0V4cEtleSBrZXkg
PSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2NhY2hlTWFwLnNl
dChrZXksIGNhY2hlZFJlZ0V4cCk7CisgICAgICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxh
Z3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOworICAgICAgICBwYXR0ZXJuS2V5QXJyYXlbbV9wdHJd
LnBhdHRlcm4gPSBwYXR0ZXJuU3RyaW5nLnJlcCgpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVk
UmVnRXhwOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3B0cigtMSkg
CisgICAgLCBtX2lzRnVsbChmYWxzZSkgCisgICAgeworICAgIH0KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5mLnUt
c3plZ2VkLmh1KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgorCisj
aWZuZGVmIFJlZ0V4cENhY2hlX2gKKyNkZWZpbmUgUmVnRXhwQ2FjaGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUmVnRXhwQ2FjaGUgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8UmVn
RXhwPiBsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBV
U3RyaW5nJiBmbGFncyk7CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZUFuZENhY2hlKGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBS
ZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7Cisg
ICAgUmVnRXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVFbnRyaWVzXTsKKyAgICBS
ZWdFeHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIGludCBtX3B0cjsKKyAgICBib29sIG1faXNGdWxsOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBDYWNoZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlZ0V4
cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgpAQCAtNTkxLDcgKzU5Miw3
IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNz
XV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRo
IHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVn
RXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9TdHJpbmcoZXhlYyksIFVTdHJpbmc6Om51
bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBp
bnQgcG9zOwpAQCAtNjQxLDcgKzY0Miw3IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90
IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAg
ICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3
IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcg
PSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9T
dHJpbmcoZXhlYyksIFVTdHJpbmc6Om51bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICBj
bGFzcyBMZXhlcjsKICAgICBjbGFzcyBMaXRlcmFsVGFibGU7CiAgICAgY2xhc3MgUGFyc2VyOwor
ICAgIGNsYXNzIFJlZ0V4cENhY2hlOwogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogICAgIGNsYXNz
IFN0cnVjdHVyZTsKICAgICBjbGFzcyBVU3RyaW5nOwpAQCAtMjEwLDYgKzIxMSw5IEBACiAgICAg
ICAgIFdlYWtSYW5kb20gd2Vha1JhbmRvbTsKIAogICAgICAgICBpbnQgbWF4UmVlbnRyeURlcHRo
OworCisgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOworCiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGV4Y2x1c2l2ZVRocmVhZDsKICNlbmRpZgpAQCAt
MjE5LDYgKzIyMyw3IEBACiAgICAgICAgIHZvaWQgc3RhcnRTYW1wbGluZygpOwogICAgICAgICB2
b2lkIHN0b3BTYW1wbGluZygpOwogICAgICAgICB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0
ZSogZXhlYyk7CisgICAgICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsgcmV0dXJuIG1f
cmVnRXhwQ2FjaGU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFs
RGF0YVR5cGUsIFRocmVhZFN0YWNrVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEq
JiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTg2OTkpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ0V4cFBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMDEsNyArMzAyLDcgQEAKICAgICBVU3RyaW5nIHBh
dHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmco
ZXhlYyk7CiAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmco
IiIpIDogYXJnMS50b1N0cmluZyhleGVjKTsKIAotICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAg
ICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUo
KS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICghcmVnRXhwLT5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBtYWtl
U3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIiwgcmVnRXhwLT5lcnJvck1lc3Nh
Z2UoKSkpOwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDU4Njk5
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTm9k
ZXMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RI
UkVBRFMpCkBAIC0xNDgsNiArMTQ5LDcgQEAKICAgICAsIGNhY2hlZFVUQ09mZnNldChOYU4pCiAg
ICAgLCB3ZWFrUmFuZG9tKHN0YXRpY19jYXN0PGludD4oY3VycmVudFRpbWUoKSkpCiAgICAgLCBt
YXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8g
TWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkK
KyAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQogI2VuZGlmCkBAIC0xOTgsNiArMjAwLDcgQEAK
ICAgICBkZWxldGVMaXRlcmFsVGFibGUobGl0ZXJhbFRhYmxlKTsKIAogICAgIGRlbGV0ZSBjbGll
bnREYXRhOworICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwogfQogCiBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBl
IHR5cGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlByb3Rv
dHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTg4LDcgKzg5LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSBh
cmdzLmlzRW1wdHkoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKICAgICAg
ICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJn
MS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBleGVjLT5n
bG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3Mp
OwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEw
IFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBV
TklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBSZWdFeHBL
ZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFJl
Z0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4g
cGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgwKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZsYWdzVmFs
dWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3MsIGNvbnN0
IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICAgICAg
LCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShp
bnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQorICAgICAg
ICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAgIHsKKyAg
ICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKworICAgIGlu
dCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIAorICAgIHsKKyAgICAgICAgZmxh
Z3NWYWx1ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6Tm90
Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChmbGFncy5m
aW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9
IDI7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisg
ICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1ZhbHVlOwor
ICAgIH0KK307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgUmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU0M6OlJl
Z0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChhLmZsYWdz
VmFsdWUgIT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFh
LnBhdHRlcm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5wYXR0ZXJu
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVybi5nZXQo
KSwgYi5wYXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhwSGFzaDxK
U0M6OlJlZ0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpTQzo6UmVn
RXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxKU0M6OlJl
Z0V4cEtleT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpS
ZWdFeHBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3QpIHsgc2xv
dC5mbGFnc1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25z
dCBKU0M6OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUgPT0gLTE7
IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9oCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNp
b24gNTg2OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgor
I2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE0
NCw3ICsxNDUsNyBAQAogCiBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0
cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCks
IG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKKyAgICBSZWZQdHI8UmVn
RXhwPiByZWdFeHAgPSBnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLT5yZWdFeHBDYWNoZSgpLT5sb29r
dXBPckNyZWF0ZShtX3BhdHRlcm4udXN0cmluZygpLCBtX2ZsYWdzLnVzdHJpbmcoKSk7CiAgICAg
aWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdl
bmVyYXRvciwgU3ludGF4RXJyb3IsICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiLCBy
ZWdFeHAtPmVycm9yTWVzc2FnZSgpKTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA1ODY5
OSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtMTg4LDYgKzE4OCw3IEBACiAgICAgcnVudGltZS9SZWdFeHAuY3BwIFwKICAgICBydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCisg
ICAgcnVudGltZS9SZWdFeHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvUm9wZUltcGwuY3BwIFwK
ICAgICBydW50aW1lL1Njb3BlQ2hhaW4uY3BwIFwKICAgICBydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56186</attachid>
            <date>2010-05-16 06:31:36 -0700</date>
            <delta_ts>2010-05-17 06:08:15 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>regexp_mac_win.patch</filename>
            <type>text/plain</type>
            <size>21699</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsOCArNTA2LDExIEBACiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmggXApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3Mp
Cit7CisgICAgUmVmUHRyPFJlZ0V4cD4gY2FjaGVkUmVnRXhwOworCisgICAgaWYgKHBhdHRlcm5T
dHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKKyAgICAgICAgY2FjaGVk
UmVnRXhwID0gbV9jYWNoZU1hcC5nZXQoUmVnRXhwS2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKSk7
CisKKyAgICBpZiAoIWNhY2hlZFJlZ0V4cCkKKyAgICAgICAgY2FjaGVkUmVnRXhwID0gY3JlYXRl
QW5kQ2FjaGUocGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiBjYWNoZWRSZWdFeHAu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmNyZWF0ZUFu
ZENhY2hlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdz
KSAKK3sKKyAgICBSZWZQdHI8UmVnRXhwPiBjYWNoZWRSZWdFeHA7CisKKyAgICBpZiAoIWZsYWdz
LmlzTnVsbCgpKQorICAgICAgICBjYWNoZWRSZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2dsb2Jh
bERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICAgIGNhY2hlZFJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZyk7CisgICAg
aWYgKHBhdHRlcm5TdHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkgewor
ICAgICAgICArK21fcHRyOworICAgICAgICBpZiAobV9wdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmll
cykgeworICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICAgICAgbV9pc0Z1bGwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChtX2lzRnVsbCkKKyAgICAgICAgICAgIG1fY2FjaGVN
YXAucmVtb3ZlKFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9wdHJdLmZsYWdzVmFsdWUsIHBh
dHRlcm5LZXlBcnJheVttX3B0cl0ucGF0dGVybikpOworCisgICAgICAgIFJlZ0V4cEtleSBrZXkg
PSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2NhY2hlTWFwLnNl
dChrZXksIGNhY2hlZFJlZ0V4cCk7CisgICAgICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxh
Z3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOworICAgICAgICBwYXR0ZXJuS2V5QXJyYXlbbV9wdHJd
LnBhdHRlcm4gPSBwYXR0ZXJuU3RyaW5nLnJlcCgpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVk
UmVnRXhwOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3B0cigtMSkg
CisgICAgLCBtX2lzRnVsbChmYWxzZSkgCisgICAgeworICAgIH0KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5mLnUt
c3plZ2VkLmh1KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgorCisj
aWZuZGVmIFJlZ0V4cENhY2hlX2gKKyNkZWZpbmUgUmVnRXhwQ2FjaGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUmVnRXhwQ2FjaGUgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8UmVn
RXhwPiBsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBV
U3RyaW5nJiBmbGFncyk7CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZUFuZENhY2hlKGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBS
ZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7Cisg
ICAgUmVnRXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVFbnRyaWVzXTsKKyAgICBS
ZWdFeHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIGludCBtX3B0cjsKKyAgICBib29sIG1faXNGdWxsOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBDYWNoZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlZ0V4
cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgpAQCAtNTkxLDcgKzU5Miw3
IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNz
XV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRo
IHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVn
RXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9TdHJpbmcoZXhlYyksIFVTdHJpbmc6Om51
bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBp
bnQgcG9zOwpAQCAtNjQxLDcgKzY0Miw3IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90
IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAg
ICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3
IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcg
PSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9T
dHJpbmcoZXhlYyksIFVTdHJpbmc6Om51bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICBj
bGFzcyBMZXhlcjsKICAgICBjbGFzcyBMaXRlcmFsVGFibGU7CiAgICAgY2xhc3MgUGFyc2VyOwor
ICAgIGNsYXNzIFJlZ0V4cENhY2hlOwogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogICAgIGNsYXNz
IFN0cnVjdHVyZTsKICAgICBjbGFzcyBVU3RyaW5nOwpAQCAtMjEwLDYgKzIxMSw5IEBACiAgICAg
ICAgIFdlYWtSYW5kb20gd2Vha1JhbmRvbTsKIAogICAgICAgICBpbnQgbWF4UmVlbnRyeURlcHRo
OworCisgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOworCiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGV4Y2x1c2l2ZVRocmVhZDsKICNlbmRpZgpAQCAt
MjE5LDYgKzIyMyw3IEBACiAgICAgICAgIHZvaWQgc3RhcnRTYW1wbGluZygpOwogICAgICAgICB2
b2lkIHN0b3BTYW1wbGluZygpOwogICAgICAgICB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0
ZSogZXhlYyk7CisgICAgICAgIFJlZ0V4cENhY2hlKiByZWdFeHBDYWNoZSgpIHsgcmV0dXJuIG1f
cmVnRXhwQ2FjaGU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBKU0dsb2JhbERhdGEoR2xvYmFs
RGF0YVR5cGUsIFRocmVhZFN0YWNrVHlwZSk7CiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbERhdGEq
JiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTg2OTkpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ0V4cFBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMDEsNyArMzAyLDcgQEAKICAgICBVU3RyaW5nIHBh
dHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzAudG9TdHJpbmco
ZXhlYyk7CiAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmco
IiIpIDogYXJnMS50b1N0cmluZyhleGVjKTsKIAotICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAg
ICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUo
KS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICghcmVnRXhwLT5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBtYWtl
U3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIiwgcmVnRXhwLT5lcnJvck1lc3Nh
Z2UoKSkpOwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDU4Njk5
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTm9k
ZXMuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RI
UkVBRFMpCkBAIC0xNDgsNiArMTQ5LDcgQEAKICAgICAsIGNhY2hlZFVUQ09mZnNldChOYU4pCiAg
ICAgLCB3ZWFrUmFuZG9tKHN0YXRpY19jYXN0PGludD4oY3VycmVudFRpbWUoKSkpCiAgICAgLCBt
YXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8g
TWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkK
KyAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIGV4Y2x1c2l2ZVRocmVhZCgwKQogI2VuZGlmCkBAIC0xOTgsNiArMjAwLDcgQEAK
ICAgICBkZWxldGVMaXRlcmFsVGFibGUobGl0ZXJhbFRhYmxlKTsKIAogICAgIGRlbGV0ZSBjbGll
bnREYXRhOworICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwogfQogCiBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBl
IHR5cGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA1ODY5OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlByb3Rv
dHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTg4LDcgKzg5LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRlcm4gPSBh
cmdzLmlzRW1wdHkoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKICAgICAg
ICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJn
MS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBleGVjLT5n
bG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3Mp
OwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEw
IFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBV
TklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBSZWdFeHBL
ZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFJl
Z0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4g
cGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgwKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZsYWdzVmFs
dWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3MsIGNvbnN0
IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICAgICAg
LCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShp
bnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQorICAgICAg
ICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQorICAgIHsK
KyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAgIHsKKyAg
ICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKworICAgIGlu
dCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIAorICAgIHsKKyAgICAgICAgZmxh
Z3NWYWx1ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6Tm90
Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChmbGFncy5m
aW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9
IDI7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisg
ICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1ZhbHVlOwor
ICAgIH0KK307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgUmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU0M6OlJl
Z0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChhLmZsYWdz
VmFsdWUgIT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFh
LnBhdHRlcm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5wYXR0ZXJu
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVybi5nZXQo
KSwgYi5wYXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhwSGFzaDxK
U0M6OlJlZ0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpTQzo6UmVn
RXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxKU0M6OlJl
Z0V4cEtleT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpS
ZWdFeHBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3QpIHsgc2xv
dC5mbGFnc1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25z
dCBKU0M6OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUgPT0gLTE7
IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9oCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNp
b24gNTg2OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgor
I2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5j
bHVkZSAiU2FtcGxpbmdUb29sLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE0
NCw3ICsxNDUsNyBAQAogCiBSZWdpc3RlcklEKiBSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0
cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCks
IG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKKyAgICBSZWZQdHI8UmVn
RXhwPiByZWdFeHAgPSBnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLT5yZWdFeHBDYWNoZSgpLT5sb29r
dXBPckNyZWF0ZShtX3BhdHRlcm4udXN0cmluZygpLCBtX2ZsYWdzLnVzdHJpbmcoKSk7CiAgICAg
aWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9yKGdl
bmVyYXRvciwgU3ludGF4RXJyb3IsICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiLCBy
ZWdFeHAtPmVycm9yTWVzc2FnZSgpKTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2oJKHJldmlzaW9uIDU4Njk5KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTExMyw2ICsxMTEzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGUuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVu
dGltZVxSZWdFeHBDYWNoZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBDb25zdHJ1Y3Rvci5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTEyMSw2ICsxMTI5LDEwIEBACiAJCQkJPg0KIAkJCTwvRmls
ZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUmVnRXhwS2V5
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlxydW50aW1lXFJlZ0V4cE1hdGNoZXNBcnJheS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTg2OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00OTksNiArNDk5LDkgQEAKIAkJRTFBODYyRDYwRDdGMkI1QzAwMUVDNkFBIC8qIENvbGxhdG9y
RGVmYXVsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUE4NjJENTBEN0YyQjVDMDAxRUM2QUEgLyogQ29sbGF0b3JEZWZhdWx0LmNwcCAqLzsgfTsK
IAkJRTFFRTc5M0QwRDZDOUI5MjAwRkVBM0JBIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU3OTNDMEQ2QzlC
OTIwMEZFQTNCQSAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi87IH07CiAJCUUxRUY3OUFBMENF
OTdCQTYwMDg4RDUwMCAvKiBVVEY4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxRUY3OUE4MENFOTdCQTYwMDg4RDUwMCAvKiBVVEY4LmNwcCAqLzsg
fTsKKwkJRTQyMDQ0QzUxMTk0MkYyQTAwMzQzQzRBIC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyMDQ0QzQxMTk0MkYyQTAwMzQz
QzRBIC8qIFJlZ0V4cEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUU0MjA0NEM3MTE5NDJGM0QwMDM0M0M0QSAvKiBSZWdFeHBDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyMDQ0QzYxMTk0
MkYzRDAwMzQzQzRBIC8qIFJlZ0V4cENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQyMDQ0QzkxMTk0MkY1MDAwMzQzQzRBIC8qIFJlZ0V4
cENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0MjA0NEM4MTE5NDJGNTAwMDM0M0M0QSAvKiBSZWdFeHBDYWNoZS5jcHAgKi87IH07CiAJCUU0
OEUwRjJEMEY4MjE1MTcwMEE4Q0EzNyAvKiBGYXN0QWxsb2NCYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhFMEYyQzBGODIxNTE3MDBBOENBMzcg
LyogRmFzdEFsbG9jQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUZFMUI0NDdBMEVDQ0Q3M0IwMDRGNEREMSAvKiBTdGRMaWJFeHRyYXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUI0NDc5MEVD
Q0Q3M0IwMDRGNEREMSAvKiBTdGRMaWJFeHRyYXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCkBA
IC0xMDM0LDYgKzEwMzcsOSBAQAogCQlFMUVFNzk4QjBENkNBNTNEMDBGRUEzQkEgLyogTWVzc2Fn
ZVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lc3NhZ2VRdWV1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVGNzlBODBDRTk3QkE2MDA4OEQ1MDAg
LyogVVRGOC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVVEY4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFRjc5QTkwQ0U5N0JBNjAwODhENTAw
IC8qIFVURjguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVRGOC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDIwNDRDNDExOTQyRjJBMDAzNDNDNEEgLyogUmVn
RXhwS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cEtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDIwNDRDNjExOTQyRjNEMDAzNDNDNEEgLyog
UmVnRXhwQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwQ2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQyMDQ0QzgxMTk0MkY1MDAwMzQz
QzRBIC8qIFJlZ0V4cENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlZ0V4cENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ4RTBG
MkMwRjgyMTUxNzAwQThDQTM3IC8qIEZhc3RBbGxvY0Jhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmFzdEFsbG9jQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4
RTAxODYzNUNBIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKQEAgLTE1MTEsNiArMTUxNyw5
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDRjYwNTExMEUy
MDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKKwkJCQlFNDIwNDRDODExOTQyRjUwMDAz
NDNDNEEgLyogUmVnRXhwQ2FjaGUuY3BwICovLAorCQkJCUU0MjA0NEM2MTE5NDJGM0QwMDM0M0M0
QSAvKiBSZWdFeHBDYWNoZS5oICovLAorCQkJCUU0MjA0NEM0MTE5NDJGMkEwMDM0M0M0QSAvKiBS
ZWdFeHBLZXkuaCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5o
ICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLAog
CQkJCUJDMjU3REU2MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCAqLywKQEAgLTI1ODAs
NiArMjU4OSw3IEBACiAJCQkJNTExRkM0QzkxMTdFRTI4NzAwNDI1MjcyIC8qIE1ENS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNzM4NjU1NTExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0
b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NTcwNkRFMTE4QTJCQ0YwMDU3Rjg4RiAvKiBK
SVRBcml0aG1ldGljMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQyMDQ0QzkxMTk0MkY1
MDAwMzQzQzRBIC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnBybwkocmV2aXNpb24gNTg2OTkpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsNyBAQAogICAg
IHJ1bnRpbWUvUmVnRXhwLmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBPYmplY3QuY3BwIFwKICAg
ICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAgXAorICAgIHJ1bnRpbWUvUmVnRXhwQ2FjaGUu
Y3BwIFwKICAgICBydW50aW1lL1JvcGVJbXBsLmNwcCBcCiAgICAgcnVudGltZS9TY29wZUNoYWlu
LmNwcCBcCiAgICAgcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56236</attachid>
            <date>2010-05-17 06:08:15 -0700</date>
            <delta_ts>2010-05-18 04:59:43 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>regexp_mac_win.patch</filename>
            <type>text/plain</type>
            <size>22656</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1OTYwMSkKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsOCArNTA3LDExIEBACiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmggXApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3Mp
Cit7CisgICAgUmVmUHRyPFJlZ0V4cD4gY2FjaGVkUmVnRXhwOworCisgICAgaWYgKHBhdHRlcm5T
dHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKKyAgICAgICAgY2FjaGVk
UmVnRXhwID0gbV9jYWNoZU1hcC5nZXQoUmVnRXhwS2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKSk7
CisKKyAgICBpZiAoIWNhY2hlZFJlZ0V4cCkKKyAgICAgICAgY2FjaGVkUmVnRXhwID0gY3JlYXRl
QW5kQ2FjaGUocGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiBjYWNoZWRSZWdFeHAu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmNyZWF0ZUFu
ZENhY2hlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdz
KSAKK3sKKyAgICBSZWZQdHI8UmVnRXhwPiBjYWNoZWRSZWdFeHA7CisKKyAgICBpZiAoIWZsYWdz
LmlzTnVsbCgpKQorICAgICAgICBjYWNoZWRSZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2dsb2Jh
bERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICAgIGNhY2hlZFJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZyk7CisgICAg
aWYgKHBhdHRlcm5TdHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkgewor
ICAgICAgICArK21fcHRyOworICAgICAgICBpZiAobV9wdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmll
cykgeworICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICAgICAgbV9pc0Z1bGwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChtX2lzRnVsbCkKKyAgICAgICAgICAgIG1fY2FjaGVN
YXAucmVtb3ZlKFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9wdHJdLmZsYWdzVmFsdWUsIHBh
dHRlcm5LZXlBcnJheVttX3B0cl0ucGF0dGVybikpOworCisgICAgICAgIFJlZ0V4cEtleSBrZXkg
PSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2NhY2hlTWFwLnNl
dChrZXksIGNhY2hlZFJlZ0V4cCk7CisgICAgICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxh
Z3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOworICAgICAgICBwYXR0ZXJuS2V5QXJyYXlbbV9wdHJd
LnBhdHRlcm4gPSBwYXR0ZXJuU3RyaW5nLnJlcCgpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVk
UmVnRXhwOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3B0cigtMSkg
CisgICAgLCBtX2lzRnVsbChmYWxzZSkgCisgICAgeworICAgIH0KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5mLnUt
c3plZ2VkLmh1KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgorCisj
aWZuZGVmIFJlZ0V4cENhY2hlX2gKKyNkZWZpbmUgUmVnRXhwQ2FjaGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUmVnRXhwQ2FjaGUgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8UmVn
RXhwPiBsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBV
U3RyaW5nJiBmbGFncyk7CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZUFuZENhY2hlKGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBS
ZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7Cisg
ICAgUmVnRXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVFbnRyaWVzXTsKKyAgICBS
ZWdFeHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIGludCBtX3B0cjsKKyAgICBib29sIG1faXNGdWxsOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBDYWNoZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1OTYwMSkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlZ0V4
cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgpAQCAtNTc2LDcgKzU3Nyw3
IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNz
XV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRo
IHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVn
RXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9TdHJpbmcoZXhlYyksIFVTdHJpbmc6Om51
bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBp
bnQgcG9zOwpAQCAtNjI2LDcgKzYyNyw3IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90
IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAg
ICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3
IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcg
PSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9T
dHJpbmcoZXhlYyksIFVTdHJpbmc6Om51bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1OTYwMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICBj
bGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBMZXhlcjsKICAgICBjbGFzcyBQYXJzZXI7CisgICAg
Y2xhc3MgUmVnRXhwQ2FjaGU7CiAgICAgY2xhc3MgU3RyaW5naWZpZXI7CiAgICAgY2xhc3MgU3Ry
dWN0dXJlOwogICAgIGNsYXNzIFVTdHJpbmc7CkBAIC0yMDksNiArMjEwLDkgQEAKICAgICAgICAg
V2Vha1JhbmRvbSB3ZWFrUmFuZG9tOwogCiAgICAgICAgIGludCBtYXhSZWVudHJ5RGVwdGg7CisK
KyAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CisKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgIFRocmVhZElkZW50aWZpZXIgZXhjbHVzaXZlVGhyZWFkOwogI2VuZGlmCkBAIC0yMjAs
NiArMjI0LDcgQEAKICAgICAgICAgdm9pZCBzdGFydFNhbXBsaW5nKCk7CiAgICAgICAgIHZvaWQg
c3RvcFNhbXBsaW5nKCk7CiAgICAgICAgIHZvaWQgZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBl
eGVjKTsKKyAgICAgICAgUmVnRXhwQ2FjaGUqIHJlZ0V4cENhY2hlKCkgeyByZXR1cm4gbV9yZWdF
eHBDYWNoZTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwZSwgVGhyZWFkU3RhY2tUeXBlKTsKICAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNo
YXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1OTYwMSkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMwMSw3ICszMDIsNyBAQAogICAgIFVTdHJpbmcgcGF0dGVy
biA9IGFyZzAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVj
KTsKICAgICBVU3RyaW5nIGZsYWdzID0gYXJnMS5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikg
OiBhcmcxLnRvU3RyaW5nKGV4ZWMpOwogCi0gICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVn
RXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgIFJl
ZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5s
b29rdXBPckNyZWF0ZShwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIG1ha2VTdHJp
bmcoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAiLCByZWdFeHAtPmVycm9yTWVzc2FnZSgp
KSk7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cC5yZWxlYXNlKCkpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gNTk2MDEpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJOb2Rlcy5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVk
ZSA8d3RmL1dURlRocmVhZERhdGEuaD4KIAogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFE
UykKQEAgLTE0Nyw2ICsxNDgsNyBAQAogICAgICwgY2FjaGVkVVRDT2Zmc2V0KE5hTikKICAgICAs
IHdlYWtSYW5kb20oc3RhdGljX2Nhc3Q8aW50PihjdXJyZW50VGltZSgpKSkKICAgICAsIG1heFJl
ZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21hbGwgPyBNYXhT
bWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoKQorICAg
ICwgbV9yZWdFeHBDYWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCiAjaWZuZGVmIE5ERUJVRwog
ICAgICwgZXhjbHVzaXZlVGhyZWFkKDApCiAjZW5kaWYKQEAgLTE5Niw2ICsxOTgsNyBAQAogICAg
ICAgICBkZWxldGVJZGVudGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsKIAogICAgIGRlbGV0
ZSBjbGllbnREYXRhOworICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwogfQogCiBQYXNzUmVmUHRy
PEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3Rh
Y2tUeXBlIHR5cGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiA1OTYwMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTg4LDcgKzg5LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRl
cm4gPSBhcmdzLmlzRW1wdHkoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsK
ICAgICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIp
IDogYXJnMS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBl
eGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwg
ZmxhZ3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDEwIFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBS
ZWdFeHBLZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IFJlZ0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6
OlJlcD4gcGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgw
KQorICAgIHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZs
YWdzVmFsdWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3Ms
IGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAg
ICAgICAgLCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4
cEtleShpbnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQor
ICAgICAgICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0
IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAg
IHsKKyAgICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKwor
ICAgIGludCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIAorICAgIHsKKyAgICAg
ICAgZmxhZ3NWYWx1ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmlu
Zzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChm
bGFncy5maW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1Zh
bHVlICs9IDI7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91
bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1Zh
bHVlOworICAgIH0KK307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBK
U0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChh
LmZsYWdzVmFsdWUgIT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFhLnBhdHRlcm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5w
YXR0ZXJuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVy
bi5nZXQoKSwgYi5wYXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhw
SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpT
Qzo6UmVnRXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdF
eHBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxK
U0M6OlJlZ0V4cEtleT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8
SlNDOjpSZWdFeHBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3Qp
IHsgc2xvdC5mbGFnc1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShjb25zdCBKU0M6OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUg
PT0gLTE7IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9o
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDU5NjAxKQorKysg
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzAy
LDggKzMwMiwxMSBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgnLAog
ICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9S
ZWdFeHAuaCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBDYWNoZS5jcHAnLAorICAgICAg
ICAgICAgJ3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuaCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBLZXkuaCcsCiAgICAgICAgICAgICAn
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdF
eHBPYmplY3QuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL1JlZ0V4cE9iamVjdC5oJywKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZp
c2lvbiA1OTYwMSkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5Lmgi
CisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
MTQ0LDcgKzE0NSw3IEBACiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVm
UHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZ2VuZXJhdG9yLmdsb2JhbERhdGEo
KSwgbV9wYXR0ZXJuLnVzdHJpbmcoKSwgbV9mbGFncy51c3RyaW5nKCkpOworICAgIFJlZlB0cjxS
ZWdFeHA+IHJlZ0V4cCA9IGdlbmVyYXRvci5nbG9iYWxEYXRhKCktPnJlZ0V4cENhY2hlKCktPmxv
b2t1cE9yQ3JlYXRlKG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKICAg
ICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1pdFRocm93RXJyb3Io
Z2VuZXJhdG9yLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAlcyIs
IHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkocmV2aXNpb24gNTk2MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgxLDYgKzEwODEsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBDYWNoZS5jcHAiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVc
UmVnRXhwQ2FjaGUuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBDb25zdHJ1Y3Rvci5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpAQCAtMTA4OSw2ICsxMDk3LDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUmVnRXhwS2V5LmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUmVnRXhw
TWF0Y2hlc0FycmF5LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiA1OTYwMSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwMiw2ICs1MDIsOSBAQAogCQlF
MUVFNzkzRDBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc5M0MwRDZDOUI5MjAw
RkVBM0JBIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCAqLzsgfTsKIAkJRTFFRjc5QUEwQ0U5N0JB
NjAwODhENTAwIC8qIFVURjguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFFRjc5QTgwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguY3BwICovOyB9Owog
CQlFNDhFMEYyRDBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4RTBGMkMwRjgyMTUxNzAwQThD
QTM3IC8qIEZhc3RBbGxvY0Jhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlFNDhGMjM1RDExQTE0MUNDMDA5ODIwRjEgLyogUmVnRXhwS2V5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDhGMjM1QzEx
QTE0MUNDMDA5ODIwRjEgLyogUmVnRXhwS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ4RjIzNUYxMUExNDFFQzAwOTgyMEYxIC8qIFJlZ0V4
cENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NDhGMjM1RTExQTE0MUVDMDA5ODIwRjEgLyogUmVnRXhwQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDhGMjM2MTExQTE0MjA1MDA5ODIw
RjEgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ4RjIzNjAxMUExNDIwNTAwOTgyMEYxIC8qIFJlZ0V4cENhY2hlLmNwcCAq
LzsgfTsKIAkJRkUxQjQ0N0EwRUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQjQ0NzkwRUNDRDcz
QjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAt
MTAzOSw2ICsxMDQyLDkgQEAKIAkJRTFFRjc5QTgwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVRGOC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRUY3OUE5MENFOTdCQTYwMDg4RDUwMCAvKiBVVEY4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVURjguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ4RTBGMkMwRjgyMTUxNzAwQThDQTM3IC8qIEZhc3RBbGxvY0Jhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmFzdEFsbG9jQmFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDhGMjM1QzExQTE0MUNDMDA5ODIwRjEgLyogUmVn
RXhwS2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cEtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDhGMjM1RTExQTE0MUVDMDA5ODIwRjEgLyog
UmVnRXhwQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwQ2Fj
aGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4RjIzNjAxMUExNDIwNTAwOTgy
MEYxIC8qIFJlZ0V4cENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlZ0V4cENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjVCQjJC
QzUwMzBGNzcyMTAxRkNGRTFEIC8qIENvbXBsZXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGxldGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29yZVByZWZpeC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAv
KiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gY29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsK
QEAgLTE1MTYsNiArMTUyMiw5IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKKwkJCQlF
NDhGMjM2MDExQTE0MjA1MDA5ODIwRjEgLyogUmVnRXhwQ2FjaGUuY3BwICovLAorCQkJCUU0OEYy
MzVFMTFBMTQxRUMwMDk4MjBGMSAvKiBSZWdFeHBDYWNoZS5oICovLAorCQkJCUU0OEYyMzVDMTFB
MTQxQ0MwMDk4MjBGMSAvKiBSZWdFeHBLZXkuaCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBC
OUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBB
cmd1bWVudHMuY3BwICovLAogCQkJCUJDMjU3REU2MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVu
dHMuaCAqLywKQEAgLTIxMzYsNiArMjE0NSw4IEBACiAJCQkJQTczODY1NTQxMTg2OTdCNDAwNTQw
Mjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2
MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2OUQwNEFGMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDhGMjM1RDExQTE0MUNDMDA5ODIwRjEgLyogUmVnRXhw
S2V5LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDhGMjM1RjExQTE0MUVDMDA5ODIwRjEgLyogUmVn
RXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjU4OCw2ICsyNTk5LDcgQEAKIAkJCQlBNzU3
MDZERTExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2MjZCRUNGMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVz
MzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ4RjIzNjExMUExNDIwNTAwOTgyMEYxIC8q
IFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnBybwkocmV2aXNpb24gNTk2MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2ICsxODksNyBAQAogICAgIHJ1bnRpbWUvUmVn
RXhwLmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBPYmplY3QuY3BwIFwKICAgICBydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAgXAorICAgIHJ1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwIFwKICAgICBy
dW50aW1lL1JvcGVJbXBsLmNwcCBcCiAgICAgcnVudGltZS9TY29wZUNoYWluLmNwcCBcCiAgICAg
cnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56362</attachid>
            <date>2010-05-18 04:59:43 -0700</date>
            <delta_ts>2010-06-02 03:33:17 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>regexp_reni_mac_win.patch</filename>
            <type>text/plain</type>
            <size>22845</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA1OTY2NykKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsOCArNTA3LDExIEBACiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmggXApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3Mp
Cit7CisgICAgUmVmUHRyPFJlZ0V4cD4gY2FjaGVkUmVnRXhwOworCisgICAgaWYgKHBhdHRlcm5T
dHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkKKyAgICAgICAgY2FjaGVk
UmVnRXhwID0gbV9jYWNoZU1hcC5nZXQoUmVnRXhwS2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKSk7
CisKKyAgICBpZiAoIWNhY2hlZFJlZ0V4cCkKKyAgICAgICAgY2FjaGVkUmVnRXhwID0gY3JlYXRl
QW5kQ2FjaGUocGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiBjYWNoZWRSZWdFeHAu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmNyZWF0ZUFu
ZENhY2hlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdz
KSAKK3sKKyAgICBSZWZQdHI8UmVnRXhwPiBjYWNoZWRSZWdFeHA7CisKKyAgICBpZiAoIWZsYWdz
LmlzTnVsbCgpKQorICAgICAgICBjYWNoZWRSZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2dsb2Jh
bERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBlbHNlCisgICAgICAgIGNhY2hlZFJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZyk7CisgICAg
aWYgKHBhdHRlcm5TdHJpbmcuc2l6ZSgpIDwgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkgewor
ICAgICAgICArK21fcHRyOworICAgICAgICBpZiAobV9wdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmll
cykgeworICAgICAgICAgICAgbV9wdHIgPSAwOworICAgICAgICAgICAgbV9pc0Z1bGwgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChtX2lzRnVsbCkKKyAgICAgICAgICAgIG1fY2FjaGVN
YXAucmVtb3ZlKFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9wdHJdLmZsYWdzVmFsdWUsIHBh
dHRlcm5LZXlBcnJheVttX3B0cl0ucGF0dGVybikpOworCisgICAgICAgIFJlZ0V4cEtleSBrZXkg
PSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpOworICAgICAgICBtX2NhY2hlTWFwLnNl
dChrZXksIGNhY2hlZFJlZ0V4cCk7CisgICAgICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxh
Z3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOworICAgICAgICBwYXR0ZXJuS2V5QXJyYXlbbV9wdHJd
LnBhdHRlcm4gPSBwYXR0ZXJuU3RyaW5nLnJlcCgpOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVk
UmVnRXhwOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3B0cigtMSkg
CisgICAgLCBtX2lzRnVsbChmYWxzZSkgCisgICAgeworICAgIH0KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5mLnUt
c3plZ2VkLmh1KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUmVn
RXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgorCisj
aWZuZGVmIFJlZ0V4cENhY2hlX2gKKyNkZWZpbmUgUmVnRXhwQ2FjaGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgUmVnRXhwQ2FjaGUgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8UmVn
RXhwPiBsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBV
U3RyaW5nJiBmbGFncyk7CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZUFuZENhY2hlKGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBS
ZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7Cisg
ICAgUmVnRXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVFbnRyaWVzXTsKKyAgICBS
ZWdFeHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRh
OworICAgIGludCBtX3B0cjsKKyAgICBib29sIG1faXNGdWxsOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBDYWNoZV9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1OTY2NykKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlJlZ0V4
cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdF
eHBPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgpAQCAtNTc2LDcgKzU3Nyw3
IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNz
XV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRo
IHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAg
ICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
YTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcgPSBleGVjLT5nbG9iYWxEYXRhKCkucmVn
RXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9TdHJpbmcoZXhlYyksIFVTdHJpbmc6Om51
bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBp
bnQgcG9zOwpAQCAtNjI2LDcgKzYyNyw3IEBACiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90
IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAg
ICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3
IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZWcg
PSBleGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUoYTAudG9T
dHJpbmcoZXhlYyksIFVTdHJpbmc6Om51bGwoKSk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA1OTY2NykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAKICAgICBj
bGFzcyBKU09iamVjdDsKICAgICBjbGFzcyBMZXhlcjsKICAgICBjbGFzcyBQYXJzZXI7CisgICAg
Y2xhc3MgUmVnRXhwQ2FjaGU7CiAgICAgY2xhc3MgU3RyaW5naWZpZXI7CiAgICAgY2xhc3MgU3Ry
dWN0dXJlOwogICAgIGNsYXNzIFVTdHJpbmc7CkBAIC0yMTYsNiArMjE3LDkgQEAKICAgICAgICAg
V2Vha1JhbmRvbSB3ZWFrUmFuZG9tOwogCiAgICAgICAgIGludCBtYXhSZWVudHJ5RGVwdGg7CisK
KyAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CisKICNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgIFRocmVhZElkZW50aWZpZXIgZXhjbHVzaXZlVGhyZWFkOwogI2VuZGlmCkBAIC0yMjcs
NiArMjMxLDcgQEAKICAgICAgICAgdm9pZCBzdGFydFNhbXBsaW5nKCk7CiAgICAgICAgIHZvaWQg
c3RvcFNhbXBsaW5nKCk7CiAgICAgICAgIHZvaWQgZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBl
eGVjKTsKKyAgICAgICAgUmVnRXhwQ2FjaGUqIHJlZ0V4cENhY2hlKCkgeyByZXR1cm4gbV9yZWdF
eHBDYWNoZTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwZSwgVGhyZWFkU3RhY2tUeXBlKTsKICAgICAgICAgc3RhdGljIEpTR2xvYmFsRGF0YSomIHNo
YXJlZEluc3RhbmNlSW50ZXJuYWwoKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1OTY2NykKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMwMSw3ICszMDIsNyBAQAogICAgIFVTdHJpbmcgcGF0dGVy
biA9IGFyZzAuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVj
KTsKICAgICBVU3RyaW5nIGZsYWdzID0gYXJnMS5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikg
OiBhcmcxLnRvU3RyaW5nKGV4ZWMpOwogCi0gICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVn
RXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgIFJl
ZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5s
b29rdXBPckNyZWF0ZShwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIG1ha2VTdHJp
bmcoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAiLCByZWdFeHAtPmVycm9yTWVzc2FnZSgp
KSk7CiAgICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cC5yZWxlYXNlKCkpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gNTk2NjcpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJOb2Rlcy5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVk
ZSA8d3RmL1dURlRocmVhZERhdGEuaD4KIAogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFE
UykKQEAgLTE0Nyw2ICsxNDgsNyBAQAogICAgICwgY2FjaGVkVVRDT2Zmc2V0KE5hTikKICAgICAs
IHdlYWtSYW5kb20oc3RhdGljX2Nhc3Q8aW50PihjdXJyZW50VGltZSgpKSkKICAgICAsIG1heFJl
ZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21hbGwgPyBNYXhT
bWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoKQorICAg
ICwgbV9yZWdFeHBDYWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCiAjaWZuZGVmIE5ERUJVRwog
ICAgICwgZXhjbHVzaXZlVGhyZWFkKDApCiAjZW5kaWYKQEAgLTE5Niw2ICsxOTgsNyBAQAogICAg
ICAgICBkZWxldGVJZGVudGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsKIAogICAgIGRlbGV0
ZSBjbGllbnREYXRhOworICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwogfQogCiBQYXNzUmVmUHRy
PEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3Rh
Y2tUeXBlIHR5cGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiA1OTY2NykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IlByb3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVnRXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTg4LDcgKzg5LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRl
cm4gPSBhcmdzLmlzRW1wdHkoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsK
ICAgICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIp
IDogYXJnMS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBl
eGVjLT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwg
ZmxhZ3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDEwIFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBS
ZWdFeHBLZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IFJlZ0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6
OlJlcD4gcGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgw
KQorICAgIHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZs
YWdzVmFsdWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3Ms
IGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAg
ICAgICAgLCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4
cEtleShpbnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQor
ICAgICAgICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0
IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAg
IHsKKyAgICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKwor
ICAgIGludCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIAorICAgIHsKKyAgICAg
ICAgZmxhZ3NWYWx1ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmlu
Zzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChm
bGFncy5maW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1Zh
bHVlICs9IDI7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91
bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1Zh
bHVlOworICAgIH0KK307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBK
U0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChh
LmZsYWdzVmFsdWUgIT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFhLnBhdHRlcm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5w
YXR0ZXJuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVy
bi5nZXQoKSwgYi5wYXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhw
SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpT
Qzo6UmVnRXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdF
eHBLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxK
U0M6OlJlZ0V4cEtleT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8
SlNDOjpSZWdFeHBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3Qp
IHsgc2xvdC5mbGFnc1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1
ZShjb25zdCBKU0M6OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUg
PT0gLTE7IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9o
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDU5NjY3KQorKysg
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzAy
LDggKzMwMiwxMSBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgnLAog
ICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9S
ZWdFeHAuaCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBDYWNoZS5jcHAnLAorICAgICAg
ICAgICAgJ3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuaCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBLZXkuaCcsCiAgICAgICAgICAgICAn
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdF
eHBPYmplY3QuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL1JlZ0V4cE9iamVjdC5oJywKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZp
c2lvbiA1OTY2NykKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5Lmgi
CisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNp
bmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
MTQ0LDcgKzE0NSw3IEBACiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVm
UHRyPFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZ2VuZXJhdG9yLmdsb2JhbERhdGEo
KSwgbV9wYXR0ZXJuLnVzdHJpbmcoKSwgbV9mbGFncy51c3RyaW5nKCkpOworICAgIFJlZlB0cjxS
ZWdFeHA+IHJlZ0V4cCA9IGdlbmVyYXRvci5nbG9iYWxEYXRhKCktPnJlZ0V4cENhY2hlKCktPmxv
b2t1cE9yQ3JlYXRlKG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKICAg
ICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1pdFRocm93RXJyb3Io
Z2VuZXJhdG9yLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAlcyIs
IHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9y
ZWRSZXN1bHQoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvagkocmV2aXNpb24gNTk2NjcpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgxLDYgKzEwODEsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBDYWNoZS5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxy
dW50aW1lXFJlZ0V4cENhY2hlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFJlZ0V4cENvbnN0cnVjdG9yLmNwcCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMDg5LDYgKzEwOTcsMTAgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBL
ZXkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1OTY2NykKKysrIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUwNCw2ICs1MDQsOSBAQAogCQlFMUE4NjJENjBEN0YyQjVDMDAxRUM2QUEgLyogQ29sbGF0
b3JEZWZhdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQTg2MkQ1MEQ3RjJCNUMwMDFFQzZBQSAvKiBDb2xsYXRvckRlZmF1bHQuY3BwICovOyB9
OwogCQlFMUVFNzkzRDBENkM5QjkyMDBGRUEzQkEgLyogVGhyZWFkaW5nUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc5M0MwRDZD
OUI5MjAwRkVBM0JBIC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCAqLzsgfTsKIAkJRTFFRjc5QUEw
Q0U5N0JBNjAwODhENTAwIC8qIFVURjguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFFRjc5QTgwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguY3BwICov
OyB9OworCQlFNDU0MkY4NDExQTJCNjlFMDBENDgwOEEgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDU0MkY4MzExQTJCNjlFMDBE
NDgwOEEgLyogUmVnRXhwS2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRTQ1NDJGODYxMUEyQjZCMDAwRDQ4MDhBIC8qIFJlZ0V4cENhY2hlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDU0MkY4NTEx
QTJCNkIwMDBENDgwOEEgLyogUmVnRXhwQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDU0MkY4ODExQTJCNkM2MDBENDgwOEEgLyogUmVn
RXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTQ1NDJGODcxMUEyQjZDNjAwRDQ4MDhBIC8qIFJlZ0V4cENhY2hlLmNwcCAqLzsgfTsKIAkJ
RTQ4RTBGMkQwRjgyMTUxNzAwQThDQTM3IC8qIEZhc3RBbGxvY0Jhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0OEUwRjJDMEY4MjE1MTcwMEE4Q0Ez
NyAvKiBGYXN0QWxsb2NCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkUxQjQ0N0EwRUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUxQjQ0Nzkw
RUNDRDczQjAwNEY0REQxIC8qIFN0ZExpYkV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
QEAgLTEwNDQsNiArMTA0Nyw5IEBACiAJCUUxRUU3OThCMEQ2Q0E1M0QwMEZFQTNCQSAvKiBNZXNz
YWdlUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVzc2FnZVF1ZXVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRUY3OUE4MENFOTdCQTYwMDg4RDUw
MCAvKiBVVEY4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVURjgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVGNzlBOTBDRTk3QkE2MDA4OEQ1
MDAgLyogVVRGOC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVVEY4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTQyRjgzMTFBMkI2OUUwMEQ0ODA4QSAvKiBS
ZWdFeHBLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwS2V5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NTQyRjg1MTFBMkI2QjAwMEQ0ODA4QSAv
KiBSZWdFeHBDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDU0MkY4NzExQTJCNkM2MDBE
NDgwOEEgLyogUmVnRXhwQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVnRXhwQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDhF
MEYyQzBGODIxNTE3MDBBOENBMzcgLyogRmFzdEFsbG9jQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGYXN0QWxsb2NCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBsZXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNUMyOTBFNjAyODRG
OThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVNjcmlwdENvcmVQcmVmaXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpAQCAtMTUyMyw2ICsxNTI5
LDkgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBB
cmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5o
ICovLAorCQkJCUU0NTQyRjg3MTFBMkI2QzYwMEQ0ODA4QSAvKiBSZWdFeHBDYWNoZS5jcHAgKi8s
CisJCQkJRTQ1NDJGODUxMUEyQjZCMDAwRDQ4MDhBIC8qIFJlZ0V4cENhY2hlLmggKi8sCisJCQkJ
RTQ1NDJGODMxMUEyQjY5RTAwRDQ4MDhBIC8qIFJlZ0V4cEtleS5oICovLAogCQkJCUJDMjU3REU1
MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLAogCQkJCUJDMjU3REU2MEUxRjUx
QzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCAqLywKIAkJCQlCQzc5NTIwNjBFMTVFOEE4MDBBODk4
QUIgLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0yMTQ3LDYgKzIxNTYsOCBAQAogCQkJ
CTg2OUQwNEFGMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9B
c3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3
RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ1NDJGODQxMUEyQjY5
RTAwRDQ4MDhBIC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ1NDJGODYxMUEy
QjZCMDAwRDQ4MDhBIC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI2MDAsNiAr
MjYxMSw3IEBACiAJCQkJODYyNkJFQ0YxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3Mu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9w
Y29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3
RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ1NDJGODgx
MUEyQjZDNjAwRDQ4MDhBIC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkocmV2aXNpb24gNTk2NjcpCisrKyBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2ICsxODksNyBA
QAogICAgIHJ1bnRpbWUvUmVnRXhwLmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
IFwKICAgICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAgXAorICAgIHJ1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwIFwKICAgICBydW50aW1lL1JvcGVJbXBsLmNwcCBcCiAgICAgcnVudGltZS9TY29w
ZUNoYWluLmNwcCBcCiAgICAgcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIFwK
</data>
<flag name="review"
          id="40760"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57641</attachid>
            <date>2010-06-02 03:33:17 -0700</date>
            <delta_ts>2010-06-14 01:03:40 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>webkit_send.patch</filename>
            <type>text/plain</type>
            <size>23012</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MDU0NykKKysrIEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsOCArNTE1LDExIEBACiAJ
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmggXApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlbmF0YSBIb2RvdmFu
IChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pF
R0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6bG9va3VwT3JD
cmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3Mp
Cit7CisgICAgcGFpcjxIYXNoTWFwPFJlZ0V4cEtleSwgUmVmUHRyPFJlZ0V4cD4gPjo6aXRlcmF0
b3IsIGJvb2w+IHJlc3VsdCA9IG1fY2FjaGVNYXAuYWRkKFJlZ0V4cEtleShmbGFncywgcGF0dGVy
blN0cmluZyksIDApOworICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgcmV0dXJuICgq
cmVzdWx0LmZpcnN0KS5zZWNvbmQ7CisgICAgcmV0dXJuIGNyZWF0ZShwYXR0ZXJuU3RyaW5nLCBm
bGFncyk7Cit9CisKK1Bhc3NSZWZQdHI8UmVnRXhwPiBSZWdFeHBDYWNoZTo6Y3JlYXRlKGNvbnN0
IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKSAKK3sKKyAgICBS
ZWZQdHI8UmVnRXhwPiByZWdFeHA7CisKKyAgICBpZiAoIWZsYWdzLmlzTnVsbCgpKQorICAgICAg
ICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcsIGZs
YWdzKTsKKyAgICBlbHNlCisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKG1fZ2xvYmFs
RGF0YSwgcGF0dGVyblN0cmluZyk7CisKKyAgICBpZiAocGF0dGVyblN0cmluZy5zaXplKCkgPj0g
bWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCkgCisgICAgICAgIHJldHVybiByZWdFeHA7CisKKyAg
ICArK21fcHRyOworICAgIGlmIChtX3B0ciA+PSBtYXhDYWNoZWFibGVFbnRyaWVzKSB7CisgICAg
ICAgIG1fcHRyID0gMDsKKyAgICAgICAgLy8gQWZ0ZXIgdGhpcyBwb2ludCB0aGUgdmFsdWUgb2Yg
bV9pc0ZpcnN0SXRlcmF0aW9uIHdpbGwgYmUgZmFsc2UuCisgICAgICAgIG1faXNGaXJzdEl0ZXJh
dGlvbiA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIW1faXNGaXJzdEl0ZXJhdGlvbikKKyAgICAg
ICAgbV9jYWNoZU1hcC5yZW1vdmUoUmVnRXhwS2V5KHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxh
Z3NWYWx1ZSwgcGF0dGVybktleUFycmF5W21fcHRyXS5wYXR0ZXJuKSk7CisKKyAgICBSZWdFeHBL
ZXkga2V5ID0gUmVnRXhwS2V5KGZsYWdzLCBwYXR0ZXJuU3RyaW5nKTsKKyAgICBtX2NhY2hlTWFw
LnNldChrZXksIHJlZ0V4cCk7CisgICAgcGF0dGVybktleUFycmF5W21fcHRyXS5mbGFnc1ZhbHVl
ID0ga2V5LmZsYWdzVmFsdWU7CisgICAgcGF0dGVybktleUFycmF5W21fcHRyXS5wYXR0ZXJuID0g
cGF0dGVyblN0cmluZy5yZXAoKTsKKyAgICByZXR1cm4gcmVnRXhwOworfQorCitSZWdFeHBDYWNo
ZTo6UmVnRXhwQ2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxE
YXRhKGdsb2JhbERhdGEpCisgICAgLCBtX3B0cigtMSkKKyAgICAsIG1faXNGaXJzdEl0ZXJhdGlv
bih0cnVlKQorICAgIHsKKyAgICB9CisKK30KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENhY2hlLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENh
Y2hlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEg
SG9kb3ZhbiAoaG9kb3ZhbkBpbmYudS1zemVnZWQuaHUpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJSZWdFeHBLZXkuaCIKKyNp
bmNsdWRlICJVU3RyaW5nLmgiCisKKyNpZm5kZWYgUmVnRXhwQ2FjaGVfaAorI2RlZmluZSBSZWdF
eHBDYWNoZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBSZWdFeHBDYWNoZSB7CitwdWJs
aWM6CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGxvb2t1cE9yQ3JlYXRlKGNvbnN0IFVTdHJpbmcm
IHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBQYXNzUmVmUHRyPFJl
Z0V4cD4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcm
IGZsYWdzKTsKKyAgICBSZWdFeHBDYWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVu
Z3RoID0gMjU2OworICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1
NjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVn
RXhwQ2FjaGVNYXA7CisgICAgUmVnRXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVF
bnRyaWVzXTsKKyAgICBSZWdFeHBDYWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOworICAgIGludCBtX3B0cjsKKyAgICBib29sIG1faXNGaXJzdEl0ZXJh
dGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVnRXhwQ2FjaGVf
aApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gNjA1NDcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJPYmplY3RQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1l
QXJyYXkuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cENvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KQEAgLTU4NSw3ICs1ODYsNyBAQAogICAgICAgICAgKiAgSWYgcmVnZXhwIGlzIG5v
dCBhbiBvYmplY3Qgd2hvc2UgW1tDbGFzc11dIHByb3BlcnR5IGlzICJSZWdFeHAiLCBpdCBpcwog
ICAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5l
dyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3Jl
YXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIGEwLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmVn
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRlKGEwLnRv
U3RyaW5nKGV4ZWMpLCBVU3RyaW5nOjpudWxsKCkpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1
Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJl
Z0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsKQEAgLTYzNiw3ICs2MzcsNyBAQAogICAg
ICAgICAgKiAgSWYgcmVnZXhwIGlzIG5vdCBhbiBvYmplY3Qgd2hvc2UgW1tDbGFzc11dIHByb3Bl
cnR5IGlzICJSZWdFeHAiLCBpdCBpcwogICAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVz
dWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAgICovCi0g
ICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIGEwLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICAgICAgcmVnID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hl
KCktPmxvb2t1cE9yQ3JlYXRlKGEwLnRvU3RyaW5nKGV4ZWMpLCBVU3RyaW5nOjpudWxsKCkpOwog
ICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gNjA1NDcp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw2ICs1OCw3IEBACiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgTGV4ZXI7
CiAgICAgY2xhc3MgUGFyc2VyOworICAgIGNsYXNzIFJlZ0V4cENhY2hlOwogICAgIGNsYXNzIFN0
cmluZ2lmaWVyOwogICAgIGNsYXNzIFN0cnVjdHVyZTsKICAgICBjbGFzcyBVU3RyaW5nOwpAQCAt
MjExLDYgKzIxMiw5IEBACiAgICAgICAgIFdlYWtSYW5kb20gd2Vha1JhbmRvbTsKIAogICAgICAg
ICBpbnQgbWF4UmVlbnRyeURlcHRoOworCisgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENh
Y2hlOworCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGV4Y2x1c2l2
ZVRocmVhZDsKICNlbmRpZgpAQCAtMjIyLDYgKzIyNiw3IEBACiAgICAgICAgIHZvaWQgc3RhcnRT
YW1wbGluZygpOwogICAgICAgICB2b2lkIHN0b3BTYW1wbGluZygpOwogICAgICAgICB2b2lkIGR1
bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYyk7CisgICAgICAgIFJlZ0V4cENhY2hlKiByZWdF
eHBDYWNoZSgpIHsgcmV0dXJuIG1fcmVnRXhwQ2FjaGU7IH0KICAgICBwcml2YXRlOgogICAgICAg
ICBKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUsIFRocmVhZFN0YWNrVHlwZSk7CiAgICAgICAg
IHN0YXRpYyBKU0dsb2JhbERhdGEqJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
NjA1NDcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgogI2luY2x1ZGUgIlJlZ0V4cFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlJlZ0V4cC5oIgorI2lu
Y2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMDEsNyArMzAy
LDcgQEAKICAgICBVU3RyaW5nIHBhdHRlcm4gPSBhcmcwLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5n
KCIiKSA6IGFyZzAudG9TdHJpbmcoZXhlYyk7CiAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNV
bmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMS50b1N0cmluZyhleGVjKTsKIAotICAgIFJl
ZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCks
IHBhdHRlcm4sIGZsYWdzKTsKKyAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBleGVjLT5nbG9i
YWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxhZ3MpOwog
ICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCBtYWtlU3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjog
IiwgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwogICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4
cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cC5yZWxlYXNlKCkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gNjA1NDcpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgog
I2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSA8
d3RmL1dURlRocmVhZERhdGEuaD4KIAogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykK
QEAgLTE0Nyw2ICsxNDgsNyBAQAogICAgICwgY2FjaGVkVVRDT2Zmc2V0KE5hTikKICAgICAsIHdl
YWtSYW5kb20oc3RhdGljX2Nhc3Q8aW50PihjdXJyZW50VGltZSgpKSkKICAgICAsIG1heFJlZW50
cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21hbGwgPyBNYXhTbWFs
bFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoKQorICAgICwg
bV9yZWdFeHBDYWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCiAjaWZuZGVmIE5ERUJVRwogICAg
ICwgZXhjbHVzaXZlVGhyZWFkKDApCiAjZW5kaWYKQEAgLTE5Niw2ICsxOTgsNyBAQAogICAgICAg
ICBkZWxldGVJZGVudGlmaWVyVGFibGUoaWRlbnRpZmllclRhYmxlKTsKIAogICAgIGRlbGV0ZSBj
bGllbnREYXRhOworICAgIGRlbGV0ZSBtX3JlZ0V4cENhY2hlOwogfQogCiBQYXNzUmVmUHRyPEpT
R2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tU
eXBlIHR5cGUpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiA2MDU0NykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBy
b3RvdHlwZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVnRXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTkxLDcgKzkyLDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBhdHRlcm4g
PSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5nKGV4
ZWMpOwogICAgICAgICBVU3RyaW5nIGZsYWdzID0gYXJnMS5pc1VuZGVmaW5lZCgpID8gVVN0cmlu
ZygiIikgOiBhcmcxLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNy
ZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4
cCA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShwYXR0
ZXJuLCBmbGFncyk7CiAgICAgfQogCiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBLZXkuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5mLnUtc3plZ2VkLmh1KQorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiVVN0cmluZy5oIgorCisjaWZu
ZGVmIFJlZ0V4cEtleV9oCisjZGVmaW5lIFJlZ0V4cEtleV9oCisKK25hbWVzcGFjZSBKU0Mgewor
CitzdHJ1Y3QgUmVnRXhwS2V5IHsKKyAgICBpbnQgZmxhZ3NWYWx1ZTsKKyAgICBSZWZQdHI8VVN0
cmluZzo6UmVwPiBwYXR0ZXJuOworCisgICAgUmVnRXhwS2V5KCkKKyAgICAgICAgOiBmbGFnc1Zh
bHVlKDApCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3MpCisgICAgICAg
IDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICB7CisgICAgfQorCisgICAgUmVnRXhwS2V5KGludCBm
bGFncywgY29uc3QgVVN0cmluZyYgcGF0dGVybikKKyAgICAgICAgOiBmbGFnc1ZhbHVlKGZsYWdz
KQorICAgICAgICAsIHBhdHRlcm4ocGF0dGVybi5yZXAoKSkKKyAgICB7CisgICAgfQorCisgICAg
UmVnRXhwS2V5KGludCBmbGFncywgY29uc3QgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IHBhdHRl
cm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICAgICAgLCBwYXR0ZXJuKHBhdHRl
cm4pCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShjb25zdCBVU3RyaW5nJiBmbGFncywg
Y29uc3QgVVN0cmluZyYgcGF0dGVybikKKyAgICAgICAgOiBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkp
CisgICAgeworICAgICAgICBmbGFnc1ZhbHVlID0gZ2V0RmxhZ3NWYWx1ZShmbGFncyk7CisgICAg
fQorCisgICAgaW50IGdldEZsYWdzVmFsdWUoY29uc3QgVVN0cmluZyBmbGFncykgCisgICAgewor
ICAgICAgICBmbGFnc1ZhbHVlID0gMDsKKyAgICAgICAgaWYgKGZsYWdzLmZpbmQoJ2cnKSAhPSBV
U3RyaW5nOjpOb3RGb3VuZCkKKyAgICAgICAgICAgIGZsYWdzVmFsdWUgKz0gNDsKKyAgICAgICAg
aWYgKGZsYWdzLmZpbmQoJ2knKSAhPSBVU3RyaW5nOjpOb3RGb3VuZCkKKyAgICAgICAgICAgIGZs
YWdzVmFsdWUgKz0gMjsKKyAgICAgICAgaWYgKGZsYWdzLmZpbmQoJ20nKSAhPSBVU3RyaW5nOjpO
b3RGb3VuZCkKKyAgICAgICAgICAgIGZsYWdzVmFsdWUgKz0gMTsKKyAgICAgICAgcmV0dXJuIGZs
YWdzVmFsdWU7CisgICAgfQorfTsKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RG
IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBSZWdFeHBIYXNoOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEpTQzo6UmVnRXhwS2V5JiBhLCBjb25zdCBKU0M6OlJlZ0V4cEtleSYgYikgCit7CisgICAg
aWYgKGEuZmxhZ3NWYWx1ZSAhPSBiLmZsYWdzVmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWEucGF0dGVybikKKyAgICAgICAgcmV0dXJuICFiLnBhdHRlcm47CisgICAgaWYg
KCFiLnBhdHRlcm4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZXF1YWwoYS5w
YXR0ZXJuLmdldCgpLCBiLnBhdHRlcm4uZ2V0KCkpOworfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBS
ZWdFeHBIYXNoPEpTQzo6UmVnRXhwS2V5PiB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgSlNDOjpSZWdFeHBLZXkmIGtleSkgeyByZXR1cm4ga2V5LnBhdHRlcm4tPmhhc2goKTsgfQor
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEpTQzo6UmVnRXhwS2V5JiBhLCBjb25zdCBKU0M6
OlJlZ0V4cEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UmVnRXhwS2V5PiB7CisgICAgdHlwZWRlZiBSZWdFeHBI
YXNoPEpTQzo6UmVnRXhwS2V5PiBIYXNoOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRy
YWl0czxKU0M6OlJlZ0V4cEtleT4gOiBHZW5lcmljSGFzaFRyYWl0czxKU0M6OlJlZ0V4cEtleT4g
eworICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShKU0M6OlJlZ0V4cEtleSYg
c2xvdCkgeyBzbG90LmZsYWdzVmFsdWUgPSAtMTsgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRl
ZFZhbHVlKGNvbnN0IEpTQzo6UmVnRXhwS2V5JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZmxhZ3NW
YWx1ZSA9PSAtMTsgfQorfTsKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gUmVnRXhw
S2V5X2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkocmV2aXNpb24gNjA1NDcp
CisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDUsOCArMzA1LDExIEBACiAgICAgICAgICAgICAncnVudGltZS9QdXRQcm9wZXJ0eVNsb3Qu
aCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdFeHAuY3BwJywKICAgICAgICAgICAgICdydW50
aW1lL1JlZ0V4cC5oJywKKyAgICAgICAgICAgICdydW50aW1lL1JlZ0V4cENhY2hlLmNwcCcsCisg
ICAgICAgICAgICAncnVudGltZS9SZWdFeHBDYWNoZS5oJywKICAgICAgICAgICAgICdydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdydW50aW1lL1JlZ0V4cEtleS5oJywKICAgICAgICAg
ICAgICdydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oJywKICAgICAgICAgICAgICdydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwT2JqZWN0Lmgn
LApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJ
KHJldmlzaW9uIDYwNTQ3KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJy
YXkuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CkBAIC0xNDQsNyArMTQ1LDcgQEAKIAogUmVnaXN0ZXJJRCogUmVnRXhwTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAg
ICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3IuZ2xvYmFs
RGF0YSgpLCBtX3BhdHRlcm4udXN0cmluZygpLCBtX2ZsYWdzLnVzdHJpbmcoKSk7CisgICAgUmVm
UHRyPFJlZ0V4cD4gcmVnRXhwID0gZ2VuZXJhdG9yLmdsb2JhbERhdGEoKS0+cmVnRXhwQ2FjaGUo
KS0+bG9va3VwT3JDcmVhdGUobV9wYXR0ZXJuLnVzdHJpbmcoKSwgbV9mbGFncy51c3RyaW5nKCkp
OwogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dF
cnJvcihnZW5lcmF0b3IsIFN5bnRheEVycm9yLCAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246
ICVzIiwgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSk7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3Iu
aWdub3JlZFJlc3VsdCgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiA2MDU0NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwODksNiArMTA4OSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQog
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNw
cCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUmVnRXhwQ29uc3RydWN0b3IuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTEwOTcsNiArMTEwNSwxMCBAQAogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFJl
Z0V4cEtleS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBNYXRjaGVzQXJyYXkuaCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDYwNTQ3KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjkzLDYgKzI5Myw5IEBACiAJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBP
cGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2
OUEwNzk1MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NkRENzM3OTBGOURBMzEwMDAyN0ZCQ0MgLyog
Vk1UYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NkRENzM3ODBGOURBMzEwMDAyN0ZCQ0MgLyogVk1UYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTcxRURFQTYxMTY5RTBEMzAwNUU0MjYyIC8q
IFRlcm1pbmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3RjY5MDNBMTE2OURGN0YwMEE2QkI0NiAvKiBUZXJtaW5hdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE2MEQ2MzcxMUI2NTVERjAw
MzAxOTFEIC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEExNjBENjM2MTFCNjU1REYwMDMwMTkxRCAvKiBSZWdFeHBDYWNoZS5j
cHAgKi87IH07CisJCUExNjBENjM5MTFCNjU1RkYwMDMwMTkxRCAvKiBSZWdFeHBDYWNoZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE2MEQ2MzgxMUI2
NTVGRjAwMzAxOTFEIC8qIFJlZ0V4cENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTE2MEQ2M0IxMUI2NTYxMDAwMzAxOTFEIC8qIFJlZ0V4
cEtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE2
MEQ2M0ExMUI2NTYxMDAwMzAxOTFEIC8qIFJlZ0V4cEtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3MTIzNkU1MTE5NUYzM0MwMEJEMjE3NCAv
KiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5j
cHAgKi87IH07CiAJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMDc4
MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAqLzsgfTsKIAkJQTcyNzAxQjkw
REFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBF
eGNlcHRpb25IZWxwZXJzLmggKi87IH07CkBAIC04ODUsNiArODg4LDkgQEAKIAkJOTY5QTA5MjIw
RUQxRTA5QzAwRjFGNjgxIC8qIENvbXBsZXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29tcGxldGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTk2REQ3Mzc4MEY5REEzMTAwMDI3RkJDQyAvKiBWTVRhZ3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3RjY5MDNBMTE2OURGN0YwMEE2QkI0NiAvKiBUZXJtaW5hdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRlcm1pbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTE2MEQ2MzYxMUI2NTVERjAwMzAxOTFEIC8qIFJlZ0V4cENhY2hlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlZ0V4cENhY2hlLmNwcDsgcGF0aCA9IHJ1
bnRpbWUvUmVnRXhwQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTYw
RDYzODExQjY1NUZGMDAzMDE5MUQgLyogUmVnRXhwQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUmVnRXhwQ2FjaGUuaDsgcGF0aCA9IHJ1bnRpbWUvUmVnRXhwQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTE2MEQ2M0ExMUI2NTYxMDAwMzAxOTFE
IC8qIFJlZ0V4cEtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZWdFeHBL
ZXkuaDsgcGF0aCA9IHJ1bnRpbWUvUmVnRXhwS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3Bjb2RlczMyXzY0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxOEY2MUExMTc1NEEyMTAwMjQ2NUE3IC8q
IFJlZ0V4cEppdFRhYmxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdF
eHBKaXRUYWJsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxOEY4MjExMTc4
RUI0QjAwMjQ2NUE3IC8qIGNyZWF0ZV9yZWdleF90YWJsZXMgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IGNyZWF0ZV9yZWdleF90YWJsZXM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMTU4LDYgKzExNjQsOSBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcg
LyogSmF2YVNjcmlwdENvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUExNjBENjNBMTFCNjU2MTAwMDMwMTkxRCAvKiBSZWdFeHBLZXkuaCAqLywKKwkJ
CQlBMTYwRDYzODExQjY1NUZGMDAzMDE5MUQgLyogUmVnRXhwQ2FjaGUuaCAqLywKKwkJCQlBMTYw
RDYzNjExQjY1NURGMDAzMDE5MUQgLyogUmVnRXhwQ2FjaGUuY3BwICovLAogCQkJCUE3MThGODIx
MTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICovLAogCQkJCTkzN0I2M0ND
MDlFNzY2RDIwMEE2NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAogCQkJCUY2OTJBODU0
MDI1NTU5N0QwMUZGNjBGNyAvKiBjcmVhdGVfaGFzaF90YWJsZSAqLywKQEAgLTIxNjAsNiArMjE2
OSw4IEBACiAJCQkJODZDNTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3ODNBMEQxMTFBMzZEQ0EwMDU2M0QyMCAvKiBKU09iamVjdFdp
dGhHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDFENEYyMTFBOEYxRkYwMEE1
NEIyQSAvKiBKU1pvbWJpZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTE2MEQ2MzkxMUI2NTVGRjAw
MzAxOTFEIC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMTYwRDYzQjExQjY1
NjEwMDAzMDE5MUQgLyogUmVnRXhwS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI2MTYsNiArMjYy
Nyw3IEBACiAJCQkJMTQ2RkU1MTIxMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzgzQTJBQjExQTVCRTg0MDA1NjNEMjAgLyogSlNPYmplY3RX
aXRoR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDFENEYxMTFBOEYxRkYw
MEE1NEIyQSAvKiBKU1pvbWJpZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMTYwRDYzNzExQjY1
NURGMDAzMDE5MUQgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA2MDU0NykKKysrIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw3IEBACiAg
ICAgcnVudGltZS9SZWdFeHAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAog
ICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCisgICAgcnVudGltZS9SZWdFeHBDYWNo
ZS5jcHAgXAogICAgIHJ1bnRpbWUvUm9wZUltcGwuY3BwIFwKICAgICBydW50aW1lL1Njb3BlQ2hh
aW4uY3BwIFwKICAgICBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58626</attachid>
            <date>2010-06-14 01:03:40 -0700</date>
            <delta_ts>2010-06-15 06:52:34 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>cache_jav_mac.patch</filename>
            <type>text/plain</type>
            <size>22868</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiAoaG9kb3ZhbkBpbmYu
dS1zemVnZWQuaHUpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlKGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKQoreworICAgIHBhaXI8
SGFzaE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID46Oml0ZXJhdG9yLCBib29sPiByZXN1
bHQgPSBtX2NhY2hlTWFwLmFkZChSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJpbmcpLCAwKTsK
KyAgICBpZiAocGF0dGVyblN0cmluZy5zaXplKCkgPCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3Ro
ICYmICFyZXN1bHQuc2Vjb25kKQorICAgICAgICByZXR1cm4gKCpyZXN1bHQuZmlyc3QpLnNlY29u
ZDsKKyAgICByZXR1cm4gY3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKK30KKworUGFzc1Jl
ZlB0cjxSZWdFeHA+IFJlZ0V4cENhY2hlOjpjcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVyblN0
cmluZywgY29uc3QgVVN0cmluZyYgZmxhZ3MpIAoreworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4
cDsKKworICAgIGlmICghZmxhZ3MuaXNOdWxsKCkpCisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6
Y3JlYXRlKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIGVsc2UKKyAg
ICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3RyaW5n
KTsKKworICAgIGlmIChwYXR0ZXJuU3RyaW5nLnNpemUoKSA+PSBtYXhDYWNoZWFibGVQYXR0ZXJu
TGVuZ3RoKQorICAgICAgICByZXR1cm4gcmVnRXhwOworCisgICAgKyttX3B0cjsKKyAgICBpZiAo
bV9wdHIgPj0gbWF4Q2FjaGVhYmxlRW50cmllcykgeworICAgICAgICBtX3B0ciA9IDA7CisgICAg
ICAgIC8vIEFmdGVyIHRoaXMgcG9pbnQgdGhlIHZhbHVlIG9mIG1faXNGaXJzdEl0ZXJhdGlvbiB3
aWxsIGJlIGZhbHNlLgorICAgICAgICBtX2lzRmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKCFtX2lzRmlyc3RJdGVyYXRpb24pCisgICAgICAgIG1fY2FjaGVNYXAucmVtb3Zl
KFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9wdHJdLmZsYWdzVmFsdWUsIHBhdHRlcm5LZXlB
cnJheVttX3B0cl0ucGF0dGVybikpOworCisgICAgUmVnRXhwS2V5IGtleSA9IFJlZ0V4cEtleShm
bGFncywgcGF0dGVyblN0cmluZyk7CisgICAgbV9jYWNoZU1hcC5zZXQoa2V5LCByZWdFeHApOwor
ICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0uZmxhZ3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOwor
ICAgIHBhdHRlcm5LZXlBcnJheVttX3B0cl0ucGF0dGVybiA9IHBhdHRlcm5TdHJpbmcucmVwKCk7
CisgICAgcmV0dXJuIHJlZ0V4cDsKK30KKworUmVnRXhwQ2FjaGU6OlJlZ0V4cENhY2hlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKKyAgICA6IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQorICAg
ICwgbV9wdHIoLTEpCisgICAgLCBtX2lzRmlyc3RJdGVyYXRpb24odHJ1ZSkKKyAgICB7CisgICAg
fQorCit9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAw
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVuYXRhIEhvZG92YW4gKGhvZG92YW5AaW5m
LnUtc3plZ2VkLmh1KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
UmVnRXhwLmgiCisjaW5jbHVkZSAiUmVnRXhwS2V5LmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgor
CisjaWZuZGVmIFJlZ0V4cENhY2hlX2gKKyNkZWZpbmUgUmVnRXhwQ2FjaGVfaAorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgUmVnRXhwQ2FjaGUgeworcHVibGljOgorICAgIFBhc3NSZWZQdHI8
UmVnRXhwPiBsb29rdXBPckNyZWF0ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25z
dCBVU3RyaW5nJiBmbGFncyk7CisgICAgUGFzc1JlZlB0cjxSZWdFeHA+IGNyZWF0ZShjb25zdCBV
U3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBVU3RyaW5nJiBmbGFncyk7CisgICAgUmVnRXhw
Q2FjaGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4Q2FjaGVhYmxlUGF0dGVybkxlbmd0aCA9IDI1NjsKKyAgICBzdGF0
aWMgY29uc3QgaW50IG1heENhY2hlYWJsZUVudHJpZXMgPSAyNTY7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8UmVnRXhwS2V5LCBSZWZQdHI8UmVnRXhwPiA+IFJlZ0V4cENhY2hlTWFwOworICAgIFJl
Z0V4cEtleSBwYXR0ZXJuS2V5QXJyYXlbbWF4Q2FjaGVhYmxlRW50cmllc107CisgICAgUmVnRXhw
Q2FjaGVNYXAgbV9jYWNoZU1hcDsKKyAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKKyAg
ICBpbnQgbV9wdHI7CisgICAgYm9vbCBtX2lzRmlyc3RJdGVyYXRpb247Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlZ0V4cENhY2hlX2gKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYxMTEwKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAi
UmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CkBAIC01ODUsNyAr
NTg2LDcgQEAKICAgICAgICAgICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtb
Q2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2Vk
IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAg
ICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhMC50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJlZyA9IGV4ZWMtPmdsb2JhbERhdGEo
KS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShhMC50b1N0cmluZyhleGVjKSwgVVN0cmlu
Zzo6bnVsbCgpKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVj
dG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwog
ICAgIGludCBwb3M7CkBAIC02MzYsNyArNjM3LDcgQEAKICAgICAgICAgICogIElmIHJlZ2V4cCBp
cyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQg
aXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lv
biBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSk7CisgICAgICAg
IHJlZyA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShh
MC50b1N0cmluZyhleGVjKSwgVVN0cmluZzo6bnVsbCgpKTsKICAgICB9CiAgICAgUmVnRXhwQ29u
c3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDYxMTEwKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAog
ICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIExleGVyOwogICAgIGNsYXNzIFBhcnNlcjsK
KyAgICBjbGFzcyBSZWdFeHBDYWNoZTsKICAgICBjbGFzcyBTdHJpbmdpZmllcjsKICAgICBjbGFz
cyBTdHJ1Y3R1cmU7CiAgICAgY2xhc3MgVVN0cmluZzsKQEAgLTIxMSw2ICsyMTIsOSBAQAogICAg
ICAgICBXZWFrUmFuZG9tIHdlYWtSYW5kb207CiAKICAgICAgICAgaW50IG1heFJlZW50cnlEZXB0
aDsKKworICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKKwogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBleGNsdXNpdmVUaHJlYWQ7CiAjZW5kaWYKQEAg
LTIyMiw2ICsyMjYsNyBAQAogICAgICAgICB2b2lkIHN0YXJ0U2FtcGxpbmcoKTsKICAgICAgICAg
dm9pZCBzdG9wU2FtcGxpbmcoKTsKICAgICAgICAgdm9pZCBkdW1wU2FtcGxlRGF0YShFeGVjU3Rh
dGUqIGV4ZWMpOworICAgICAgICBSZWdFeHBDYWNoZSogcmVnRXhwQ2FjaGUoKSB7IHJldHVybiBt
X3JlZ0V4cENhY2hlOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXBlLCBUaHJlYWRTdGFja1R5cGUpOwogICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRh
KiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYxMTEwKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJSZWdFeHBQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzAyLDcgKzMwMyw3IEBACiAgICAgVVN0cmluZyBw
YXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5n
KGV4ZWMpOwogICAgIFVTdHJpbmcgZmxhZ3MgPSBhcmcxLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5n
KCIiKSA6IGFyZzEudG9TdHJpbmcoZXhlYyk7CiAKLSAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAg
PSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7Cisg
ICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hl
KCktPmxvb2t1cE9yQ3JlYXRlKHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNW
YWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJv
cihleGVjLCBtYWtlU3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIiwgcmVnRXhw
LT5lcnJvck1lc3NhZ2UoKSkpKTsKICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDYxMTEwKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw3IEBACiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRl
ICJQYXJzZXIuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9XVEZU
aHJlYWREYXRhLmg+CiAKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCkBAIC0xNDcs
NiArMTQ4LDcgQEAKICAgICAsIGNhY2hlZFVUQ09mZnNldChOYU4pCiAgICAgLCB3ZWFrUmFuZG9t
KHN0YXRpY19jYXN0PGludD4oY3VycmVudFRpbWUoKSkpCiAgICAgLCBtYXhSZWVudHJ5RGVwdGgo
dGhyZWFkU3RhY2tUeXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRS
ZWVudHJ5RGVwdGggOiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkKKyAgICAsIG1fcmVnRXhw
Q2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmbmRlZiBOREVCVUcKICAgICAsIGV4Y2x1
c2l2ZVRocmVhZCgwKQogI2VuZGlmCkBAIC0xOTYsNiArMTk4LDcgQEAKICAgICAgICAgZGVsZXRl
SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7CiAKICAgICBkZWxldGUgY2xpZW50RGF0
YTsKKyAgICBkZWxldGUgbV9yZWdFeHBDYWNoZTsKIH0KIAogUGFzc1JlZlB0cjxKU0dsb2JhbERh
dGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBl
KQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gNjExMTApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQcm90b3R5cGVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ0V4cC5o
IgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC05MSw3
ICs5Miw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgVVN0cmluZyBwYXR0ZXJuID0gIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKICAg
ICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDog
YXJnMS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBleGVj
LT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxh
Z3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEwIFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBSZWdF
eHBLZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0
IFJlZ0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6OlJl
cD4gcGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZsYWdz
VmFsdWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3MsIGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICAg
ICAgLCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtl
eShpbnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQorICAg
ICAgICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAgIHsK
KyAgICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKworICAg
IGludCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIAorICAgIHsKKyAgICAgICAg
ZmxhZ3NWYWx1ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6
Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChmbGFn
cy5maW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVl
ICs9IDI7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91bmQp
CisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1ZhbHVl
OworICAgIH0KK307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgUmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU0M6
OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChhLmZs
YWdzVmFsdWUgIT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFhLnBhdHRlcm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5wYXR0
ZXJuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVybi5n
ZXQoKSwgYi5wYXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhwSGFz
aDxKU0M6OlJlZ0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpTQzo6
UmVnRXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBL
ZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxKU0M6
OlJlZ0V4cEtleT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpSZWdFeHBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3QpIHsg
c2xvdC5mbGFnc1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShj
b25zdCBKU0M6OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUgPT0g
LTE7IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9oCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDYxMTEwKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzA1LDgg
KzMwNSwxMSBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgnLAogICAg
ICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdF
eHAuaCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBDYWNoZS5jcHAnLAorICAgICAgICAg
ICAgJ3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
aCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBLZXkuaCcsCiAgICAgICAgICAgICAncnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdFeHBP
YmplY3QuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL1JlZ0V4cE9iamVjdC5oJywKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biA2MTExMCkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisj
aW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNs
dWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTQ0
LDcgKzE0NSw3IEBACiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRy
PFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwg
bV9wYXR0ZXJuLnVzdHJpbmcoKSwgbV9mbGFncy51c3RyaW5nKCkpOworICAgIFJlZlB0cjxSZWdF
eHA+IHJlZ0V4cCA9IGdlbmVyYXRvci5nbG9iYWxEYXRhKCktPnJlZ0V4cENhY2hlKCktPmxvb2t1
cE9yQ3JlYXRlKG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKICAgICBp
ZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2Vu
ZXJhdG9yLCBmYWxzZSwgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAlcyIsIHJlZ0V4cC0+
ZXJyb3JNZXNzYWdlKCkpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gNjExMTApCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDg5LDYgKzEwODksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBDYWNoZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFJl
Z0V4cENhY2hlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXFJlZ0V4cENvbnN0cnVjdG9yLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCkBAIC0xMDk3LDYgKzExMDUsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBLZXkuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTExMCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5Myw2
ICsyOTMsOSBAQAogCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5NTBFRDFEM0FF
MDBGMUY2ODEgLyogT3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTZERDczNzkwRjlEQTMxMDAwMjdGQkNDIC8qIFZNVGFncy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTZERDczNzgwRjlEQTMx
MDAwMjdGQkNDIC8qIFZNVGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTk3MUVERUE2MTE2OUUwRDMwMDVFNDI2MiAvKiBUZXJtaW5hdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0Y2OTAzQTEx
NjlERjdGMDBBNkJCNDYgLyogVGVybWluYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUExQTIyNEUwMTFDNjE2QTcwMDY2QjJEMSAvKiBSZWdF
eHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMUEyMjRERjExQzYxNkE2MDA2NkIyRDEgLyogUmVnRXhwQ2FjaGUuY3BwICovOyB9OworCQlB
MUEyMjRFMjExQzYxNkJGMDA2NkIyRDEgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQTIyNEUxMTFDNjE2QkYwMDY2QjJEMSAv
KiBSZWdFeHBDYWNoZS5oICovOyB9OworCQlBMUEyMjRFNDExQzYxNkNGMDA2NkIyRDEgLyogUmVn
RXhwS2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MUEyMjRFMzExQzYxNkNGMDA2NkIyRDEgLyogUmVnRXhwS2V5LmggKi87IH07CiAJCUE3MTIzNkU1
MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8q
IEpJVE9wY29kZXMzMl82NC5jcHAgKi87IH07CiAJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAv
KiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3MjcwMDc4MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCAq
LzsgfTsKIAkJQTcyNzAxQjkwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUIzMERB
REU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi87IH07CkBAIC04ODgsNiArODkx
LDkgQEAKIAkJOTY5QTA5MjIwRUQxRTA5QzAwRjFGNjgxIC8qIENvbXBsZXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxldGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk2REQ3Mzc4MEY5REEzMTAwMDI3RkJDQyAvKiBWTVRhZ3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1UYWdzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3RjY5MDNBMTE2OURGN0YwMEE2QkI0NiAvKiBUZXJtaW5hdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlcm1pbmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFBMjI0REYxMUM2MTZBNjAwNjZCMkQxIC8qIFJlZ0V4
cENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZ0V4cENh
Y2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFBMjI0RTExMUM2MTZCRjAw
NjZCMkQxIC8qIFJlZ0V4cENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZ0V4cENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQTIyNEUzMTFD
NjE2Q0YwMDY2QjJEMSAvKiBSZWdFeHBLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVnRXhwS2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MTIzNkU0
MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3Bjb2RlczMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTcxOEY2MUExMTc1NEEyMTAwMjQ2NUE3IC8qIFJlZ0V4cEppdFRhYmxl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBKaXRUYWJsZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxOEY4MjExMTc4RUI0QjAwMjQ2NUE3IC8q
IGNyZWF0ZV9yZWdleF90YWJsZXMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IGNyZWF0ZV9yZWdleF90YWJsZXM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTM4
LDYgKzE1NDQsOSBAQAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTFBMjI0RTMxMUM2
MTZDRjAwNjZCMkQxIC8qIFJlZ0V4cEtleS5oICovLAorCQkJCUExQTIyNEUxMTFDNjE2QkYwMDY2
QjJEMSAvKiBSZWdFeHBDYWNoZS5oICovLAorCQkJCUExQTIyNERGMTFDNjE2QTYwMDY2QjJEMSAv
KiBSZWdFeHBDYWNoZS5jcHAgKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VGODAwQjlBNjREIC8qIEFy
Z0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0Lmgg
Ki8sCiAJCQkJQkMyNTdERTUwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5jcHAgKi8sCkBA
IC0yMTY2LDYgKzIxNzUsOCBAQAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBT
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzgzQTBEMTExQTM2RENBMDA1NjNEMjAg
LyogSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAxRDRG
MjExQThGMUZGMDBBNTRCMkEgLyogSlNab21iaWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUExQTIy
NEUyMTFDNjE2QkYwMDY2QjJEMSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTFBMjI0RTQxMUM2MTZDRjAwNjZCMkQxIC8qIFJlZ0V4cEtleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yNjA1LDYgKzI2MTYsNyBAQAogCQkJCTE0NkZFNTEyMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRD
YWxsMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4M0EyQUIxMUE1QkU4NDAwNTYzRDIw
IC8qIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzAx
RDRGMTExQThGMUZGMDBBNTRCMkEgLyogSlNab21iaWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTFBMjI0RTAxMUM2MTZBNzAwNjZCMkQxIC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkocmV2aXNpb24gNjExMTApCisrKyBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2
ICsxOTEsNyBAQAogICAgIHJ1bnRpbWUvUmVnRXhwLmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBP
YmplY3QuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAgXAorICAgIHJ1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwIFwKICAgICBydW50aW1lL1JvcGVJbXBsLmNwcCBcCiAgICAgcnVu
dGltZS9TY29wZUNoYWluLmNwcCBcCiAgICAgcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIFwKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2MTExMCkKKysrIEphdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsOCArNTE1LDExIEBACiAJSmF2
YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaCBcCiAJSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oIFwK
KwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCisJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBDYWNoZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oIFwKIAlKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmggXAo=
</data>
<flag name="review"
          id="45004"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58772</attachid>
            <date>2010-06-15 06:52:34 -0700</date>
            <delta_ts>2010-06-22 12:15:27 -0700</delta_ts>
            <desc>RegExp caching</desc>
            <filename>cache_jav_mac.patch</filename>
            <type>text/plain</type>
            <size>22950</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiAoaG9kb3ZhbkBpbmYu
dS1zemVnZWQuaHUpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlKGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKQoreworICAgIGlmIChw
YXR0ZXJuU3RyaW5nLnNpemUoKSA8IG1heENhY2hlYWJsZVBhdHRlcm5MZW5ndGgpIHsKKyAgICAg
ICAgcGFpcjxIYXNoTWFwPFJlZ0V4cEtleSwgUmVmUHRyPFJlZ0V4cD4gPjo6aXRlcmF0b3IsIGJv
b2w+IHJlc3VsdCA9IG1fY2FjaGVNYXAuYWRkKFJlZ0V4cEtleShmbGFncywgcGF0dGVyblN0cmlu
ZyksIDApOworICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LmZpcnN0LT5zZWNvbmQ7CisgICAgfQorICAgIHJldHVybiBjcmVhdGUocGF0dGVyblN0
cmluZywgZmxhZ3MpOworfQorCitQYXNzUmVmUHRyPFJlZ0V4cD4gUmVnRXhwQ2FjaGU6OmNyZWF0
ZShjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBjb25zdCBVU3RyaW5nJiBmbGFncykgCit7
CisgICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwOworCisgICAgaWYgKCFmbGFncy5pc051bGwoKSkK
KyAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3Ry
aW5nLCBmbGFncyk7CisgICAgZWxzZQorICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSht
X2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcpOworCisgICAgaWYgKHBhdHRlcm5TdHJpbmcuc2l6
ZSgpID49IG1heENhY2hlYWJsZVBhdHRlcm5MZW5ndGgpCisgICAgICAgIHJldHVybiByZWdFeHA7
CisKKyAgICArK21fbmV4dEtleVRvRXZpY3Q7CisgICAgaWYgKG1fbmV4dEtleVRvRXZpY3QgPT0g
bWF4Q2FjaGVhYmxlRW50cmllcykgeworICAgICAgICBtX25leHRLZXlUb0V2aWN0ID0gMDsKKyAg
ICAgICAgbV9pc0Z1bGwgPSB0cnVlOworICAgIH0KKyAgICBpZiAobV9pc0Z1bGwpCisgICAgICAg
IG1fY2FjaGVNYXAucmVtb3ZlKFJlZ0V4cEtleShwYXR0ZXJuS2V5QXJyYXlbbV9uZXh0S2V5VG9F
dmljdF0uZmxhZ3NWYWx1ZSwgcGF0dGVybktleUFycmF5W21fbmV4dEtleVRvRXZpY3RdLnBhdHRl
cm4pKTsKKworICAgIFJlZ0V4cEtleSBrZXkgPSBSZWdFeHBLZXkoZmxhZ3MsIHBhdHRlcm5TdHJp
bmcpOworICAgIG1fY2FjaGVNYXAuc2V0KGtleSwgcmVnRXhwKTsKKyAgICBwYXR0ZXJuS2V5QXJy
YXlbbV9uZXh0S2V5VG9FdmljdF0uZmxhZ3NWYWx1ZSA9IGtleS5mbGFnc1ZhbHVlOworICAgIHBh
dHRlcm5LZXlBcnJheVttX25leHRLZXlUb0V2aWN0XS5wYXR0ZXJuID0gcGF0dGVyblN0cmluZy5y
ZXAoKTsKKyAgICByZXR1cm4gcmVnRXhwOworfQorCitSZWdFeHBDYWNoZTo6UmVnRXhwQ2FjaGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEp
CisgICAgLCBtX25leHRLZXlUb0V2aWN0KC0xKQorICAgICwgbV9pc0Z1bGwoZmFsc2UpCit7Cit9
CisKK30KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgJKHJldmlzaW9uIDAp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5hdGEgSG9kb3ZhbiAoaG9kb3ZhbkBpbmYu
dS1zemVnZWQuaHUpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJS
ZWdFeHAuaCIKKyNpbmNsdWRlICJSZWdFeHBLZXkuaCIKKyNpbmNsdWRlICJVU3RyaW5nLmgiCisK
KyNpZm5kZWYgUmVnRXhwQ2FjaGVfaAorI2RlZmluZSBSZWdFeHBDYWNoZV9oCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBSZWdFeHBDYWNoZSB7CitwdWJsaWM6CisgICAgUGFzc1JlZlB0cjxS
ZWdFeHA+IGxvb2t1cE9yQ3JlYXRlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0
IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBQYXNzUmVmUHRyPFJlZ0V4cD4gY3JlYXRlKGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm5TdHJpbmcsIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICBSZWdFeHBD
YWNoZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVQYXR0ZXJuTGVuZ3RoID0gMjU2OworICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4Q2FjaGVhYmxlRW50cmllcyA9IDI1NjsKKworICAgIHR5cGVkZWYgSGFz
aE1hcDxSZWdFeHBLZXksIFJlZlB0cjxSZWdFeHA+ID4gUmVnRXhwQ2FjaGVNYXA7CisgICAgUmVn
RXhwS2V5IHBhdHRlcm5LZXlBcnJheVttYXhDYWNoZWFibGVFbnRyaWVzXTsKKyAgICBSZWdFeHBD
YWNoZU1hcCBtX2NhY2hlTWFwOworICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOworICAg
IGludCBtX25leHRLZXlUb0V2aWN0OworICAgIGJvb2wgbV9pc0Z1bGw7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlZ0V4cENhY2hlX2gKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDYxMTgyKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAi
UmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CkBAIC01ODUsNyAr
NTg2LDcgQEAKICAgICAgICAgICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtb
Q2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2Vk
IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAg
ICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhMC50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJlZyA9IGV4ZWMtPmdsb2JhbERhdGEo
KS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShhMC50b1N0cmluZyhleGVjKSwgVVN0cmlu
Zzo6bnVsbCgpKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVj
dG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwog
ICAgIGludCBwb3M7CkBAIC02MzYsNyArNjM3LDcgQEAKICAgICAgICAgICogIElmIHJlZ2V4cCBp
cyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQg
aXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lv
biBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSk7CisgICAgICAg
IHJlZyA9IGV4ZWMtPmdsb2JhbERhdGEoKS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShh
MC50b1N0cmluZyhleGVjKSwgVVN0cmluZzo6bnVsbCgpKTsKICAgICB9CiAgICAgUmVnRXhwQ29u
c3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDYxMTgyKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAog
ICAgIGNsYXNzIEpTT2JqZWN0OwogICAgIGNsYXNzIExleGVyOwogICAgIGNsYXNzIFBhcnNlcjsK
KyAgICBjbGFzcyBSZWdFeHBDYWNoZTsKICAgICBjbGFzcyBTdHJpbmdpZmllcjsKICAgICBjbGFz
cyBTdHJ1Y3R1cmU7CiAgICAgY2xhc3MgVVN0cmluZzsKQEAgLTIxMSw2ICsyMTIsOSBAQAogICAg
ICAgICBXZWFrUmFuZG9tIHdlYWtSYW5kb207CiAKICAgICAgICAgaW50IG1heFJlZW50cnlEZXB0
aDsKKworICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKKwogI2lmbmRlZiBOREVC
VUcKICAgICAgICAgVGhyZWFkSWRlbnRpZmllciBleGNsdXNpdmVUaHJlYWQ7CiAjZW5kaWYKQEAg
LTIyMiw2ICsyMjYsNyBAQAogICAgICAgICB2b2lkIHN0YXJ0U2FtcGxpbmcoKTsKICAgICAgICAg
dm9pZCBzdG9wU2FtcGxpbmcoKTsKICAgICAgICAgdm9pZCBkdW1wU2FtcGxlRGF0YShFeGVjU3Rh
dGUqIGV4ZWMpOworICAgICAgICBSZWdFeHBDYWNoZSogcmVnRXhwQ2FjaGUoKSB7IHJldHVybiBt
X3JlZ0V4cENhY2hlOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXBlLCBUaHJlYWRTdGFja1R5cGUpOwogICAgICAgICBzdGF0aWMgSlNHbG9iYWxEYXRh
KiYgc2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYxMTgyKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJSZWdFeHBQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdFeHAuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzAyLDcgKzMwMyw3IEBACiAgICAgVVN0cmluZyBw
YXR0ZXJuID0gYXJnMC5pc1VuZGVmaW5lZCgpID8gVVN0cmluZygiIikgOiBhcmcwLnRvU3RyaW5n
KGV4ZWMpOwogICAgIFVTdHJpbmcgZmxhZ3MgPSBhcmcxLmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5n
KCIiKSA6IGFyZzEudG9TdHJpbmcoZXhlYyk7CiAKLSAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAg
PSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7Cisg
ICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnJlZ0V4cENhY2hl
KCktPmxvb2t1cE9yQ3JlYXRlKHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNW
YWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJv
cihleGVjLCBtYWtlU3RyaW5nKCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogIiwgcmVnRXhw
LT5lcnJvck1lc3NhZ2UoKSkpKTsKICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDYxMTgyKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0
OSw3IEBACiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRl
ICJQYXJzZXIuaCIKKyNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9XVEZU
aHJlYWREYXRhLmg+CiAKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCkBAIC0xNDcs
NiArMTQ4LDcgQEAKICAgICAsIGNhY2hlZFVUQ09mZnNldChOYU4pCiAgICAgLCB3ZWFrUmFuZG9t
KHN0YXRpY19jYXN0PGludD4oY3VycmVudFRpbWUoKSkpCiAgICAgLCBtYXhSZWVudHJ5RGVwdGgo
dGhyZWFkU3RhY2tUeXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRS
ZWVudHJ5RGVwdGggOiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkKKyAgICAsIG1fcmVnRXhw
Q2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQogI2lmbmRlZiBOREVCVUcKICAgICAsIGV4Y2x1
c2l2ZVRocmVhZCgwKQogI2VuZGlmCkBAIC0xOTYsNiArMTk4LDcgQEAKICAgICAgICAgZGVsZXRl
SWRlbnRpZmllclRhYmxlKGlkZW50aWZpZXJUYWJsZSk7CiAKICAgICBkZWxldGUgY2xpZW50RGF0
YTsKKyAgICBkZWxldGUgbV9yZWdFeHBDYWNoZTsKIH0KIAogUGFzc1JlZlB0cjxKU0dsb2JhbERh
dGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBl
KQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gNjExODIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJQcm90b3R5cGVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ0V4cC5o
IgorI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC05MSw3
ICs5Miw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgVVN0cmluZyBwYXR0ZXJuID0gIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC50b1N0cmluZyhleGVjKTsKICAg
ICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEuaXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDog
YXJnMS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBleGVj
LT5nbG9iYWxEYXRhKCkucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVybiwgZmxh
Z3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cEtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwS2V5LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cEtleS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAy
MDEwIFJlbmF0YSBIb2RvdmFuIChob2RvdmFuQGluZi51LXN6ZWdlZC5odSkKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVTdHJpbmcuaCIKKworI2lmbmRlZiBSZWdF
eHBLZXlfaAorI2RlZmluZSBSZWdFeHBLZXlfaAorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0
IFJlZ0V4cEtleSB7CisgICAgaW50IGZsYWdzVmFsdWU7CisgICAgUmVmUHRyPFVTdHJpbmc6OlJl
cD4gcGF0dGVybjsKKworICAgIFJlZ0V4cEtleSgpCisgICAgICAgIDogZmxhZ3NWYWx1ZSgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoaW50IGZsYWdzKQorICAgICAgICA6IGZsYWdz
VmFsdWUoZmxhZ3MpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtleShpbnQgZmxhZ3MsIGNv
bnN0IFVTdHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogZmxhZ3NWYWx1ZShmbGFncykKKyAgICAg
ICAgLCBwYXR0ZXJuKHBhdHRlcm4ucmVwKCkpCisgICAgeworICAgIH0KKworICAgIFJlZ0V4cEtl
eShpbnQgZmxhZ3MsIGNvbnN0IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBwYXR0ZXJuKQorICAg
ICAgICA6IGZsYWdzVmFsdWUoZmxhZ3MpCisgICAgICAgICwgcGF0dGVybihwYXR0ZXJuKQorICAg
IHsKKyAgICB9CisKKyAgICBSZWdFeHBLZXkoY29uc3QgVVN0cmluZyYgZmxhZ3MsIGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm4pCisgICAgICAgIDogcGF0dGVybihwYXR0ZXJuLnJlcCgpKQorICAgIHsK
KyAgICAgICAgZmxhZ3NWYWx1ZSA9IGdldEZsYWdzVmFsdWUoZmxhZ3MpOworICAgIH0KKworICAg
IGludCBnZXRGbGFnc1ZhbHVlKGNvbnN0IFVTdHJpbmcgZmxhZ3MpIAorICAgIHsKKyAgICAgICAg
ZmxhZ3NWYWx1ZSA9IDA7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdnJykgIT0gVVN0cmluZzo6
Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDQ7CisgICAgICAgIGlmIChmbGFn
cy5maW5kKCdpJykgIT0gVVN0cmluZzo6Tm90Rm91bmQpCisgICAgICAgICAgICBmbGFnc1ZhbHVl
ICs9IDI7CisgICAgICAgIGlmIChmbGFncy5maW5kKCdtJykgIT0gVVN0cmluZzo6Tm90Rm91bmQp
CisgICAgICAgICAgICBmbGFnc1ZhbHVlICs9IDE7CisgICAgICAgIHJldHVybiBmbGFnc1ZhbHVl
OworICAgIH0KK307Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgUmVnRXhwSGFzaDsKKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBKU0M6
OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBLZXkmIGIpIAoreworICAgIGlmIChhLmZs
YWdzVmFsdWUgIT0gYi5mbGFnc1ZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFhLnBhdHRlcm4pCisgICAgICAgIHJldHVybiAhYi5wYXR0ZXJuOworICAgIGlmICghYi5wYXR0
ZXJuKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVxdWFsKGEucGF0dGVybi5n
ZXQoKSwgYi5wYXR0ZXJuLmdldCgpKTsKK30KKwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnRXhwSGFz
aDxKU0M6OlJlZ0V4cEtleT4geworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEpTQzo6
UmVnRXhwS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5wYXR0ZXJuLT5oYXNoKCk7IH0KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBKU0M6OlJlZ0V4cEtleSYgYSwgY29uc3QgSlNDOjpSZWdFeHBL
ZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxKU0M6OlJlZ0V4cEtleT4geworICAgIHR5cGVkZWYgUmVnRXhwSGFzaDxKU0M6
OlJlZ0V4cEtleT4gSGFzaDsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpSZWdFeHBLZXk+IDogR2VuZXJpY0hhc2hUcmFpdHM8SlNDOjpSZWdFeHBLZXk+IHsKKyAgICBz
dGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoSlNDOjpSZWdFeHBLZXkmIHNsb3QpIHsg
c2xvdC5mbGFnc1ZhbHVlID0gLTE7IH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShj
b25zdCBKU0M6OlJlZ0V4cEtleSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLmZsYWdzVmFsdWUgPT0g
LTE7IH0KK307Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFJlZ0V4cEtleV9oCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDYxMTgyKQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzA1LDgg
KzMwNSwxMSBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgnLAogICAg
ICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdF
eHAuaCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBDYWNoZS5jcHAnLAorICAgICAgICAg
ICAgJ3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
aCcsCisgICAgICAgICAgICAncnVudGltZS9SZWdFeHBLZXkuaCcsCiAgICAgICAgICAgICAncnVu
dGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaCcsCiAgICAgICAgICAgICAncnVudGltZS9SZWdFeHBP
YmplY3QuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL1JlZ0V4cE9iamVjdC5oJywKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biA2MTE4MikKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisj
aW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNs
dWRlICJTYW1wbGluZ1Rvb2wuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTQ0
LDcgKzE0NSw3IEBACiAKIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRy
PFJlZ0V4cD4gcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwg
bV9wYXR0ZXJuLnVzdHJpbmcoKSwgbV9mbGFncy51c3RyaW5nKCkpOworICAgIFJlZlB0cjxSZWdF
eHA+IHJlZ0V4cCA9IGdlbmVyYXRvci5nbG9iYWxEYXRhKCktPnJlZ0V4cENhY2hlKCktPmxvb2t1
cE9yQ3JlYXRlKG1fcGF0dGVybi51c3RyaW5nKCksIG1fZmxhZ3MudXN0cmluZygpKTsKICAgICBp
ZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2Vu
ZXJhdG9yLCBmYWxzZSwgIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAlcyIsIHJlZ0V4cC0+
ZXJyb3JNZXNzYWdlKCkpOwogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agkocmV2aXNpb24gNjExODIpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDg5LDYgKzEwODksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBDYWNoZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXFJl
Z0V4cENhY2hlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlxydW50aW1lXFJlZ0V4cENvbnN0cnVjdG9yLmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCkBAIC0xMDk3LDYgKzExMDUsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxSZWdFeHBLZXkuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTE4MikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5Myw2
ICsyOTMsOSBAQAogCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjlBMDc5NTBFRDFEM0FF
MDBGMUY2ODEgLyogT3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTZERDczNzkwRjlEQTMxMDAwMjdGQkNDIC8qIFZNVGFncy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTZERDczNzgwRjlEQTMx
MDAwMjdGQkNDIC8qIFZNVGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTk3MUVERUE2MTE2OUUwRDMwMDVFNDI2MiAvKiBUZXJtaW5hdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5N0Y2OTAzQTEx
NjlERjdGMDBBNkJCNDYgLyogVGVybWluYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMTcxMkIzQTExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwICovOyB9OworCQlB
MTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNzEyQjNFMTFDN0IyMjgwMDdBNTMxNSAv
KiBSZWdFeHBDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBLZXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExNzEyQjQwMTFDN0IyMzUw
MDdBNTMxNSAvKiBSZWdFeHBLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNzEyMzZFNTExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMy
XzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
MTIzNkU0MTE5NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwICovOyB9OwogCQlB
NzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzI3MDA3ODBEQUM2MDU2MDBFNTQ4
RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgKi87IH07CiAJCUE3MjcwMUI5MERBREU5NDkwMEU1NDhE
NyAvKiBFeGNlcHRpb25IZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVy
cy5oICovOyB9OwpAQCAtODg4LDYgKzg5MSw5IEBACiAJCTk2OUEwOTIyMEVEMUUwOUMwMEYxRjY4
MSAvKiBDb21wbGV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvbXBsZXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NkRENzM3ODBG
OURBMzEwMDAyN0ZCQ0MgLyogVk1UYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZNVGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5N0Y2OTAzQTExNjlE
RjdGMDBBNkJCNDYgLyogVGVybWluYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXJtaW5hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExNzEyQjNB
MTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZWdFeHBDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUExNzEyQjNFMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBMTcxMkI0MDExQzdCMjM1MDA3QTUzMTUgLyogUmVnRXhwS2V5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cEtleS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVE9wY29kZXMz
Ml82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MThGNjFBMTE3NTRBMjEw
MDI0NjVBNyAvKiBSZWdFeHBKaXRUYWJsZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVnRXhwSml0VGFibGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBjcmVhdGVfcmVnZXhfdGFibGVzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTUzOCw2ICsxNTQ0LDkgQEAKIAkJN0VGNkUwQkIwRUI3QTFF
QzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCUExNzEyQjQwMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdFeHBLZXkuaCAqLywK
KwkJCQlBMTcxMkIzRTExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCAqLywKKwkJCQlB
MTcxMkIzQTExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwICovLAogCQkJCUJDRjYw
NTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAz
RUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZD
OSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjE2Niw2ICsyMTc1LDggQEAKIAkJCQk4NkM1NjhF
MjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc4M0EwRDExMUEzNkRDQTAwNTYzRDIwIC8qIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMwMUQ0RjIxMUE4RjFGRjAwQTU0QjJBIC8qIEpTWm9tYmllLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUExNzEyQjQxMTFDN0IyMzUwMDdBNTMxNSAvKiBSZWdF
eHBLZXkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjYwNSw2ICsyNjE2LDcgQEAKIAkJCQkxNDZGRTUx
MjExQTcxMDQzMDA4N0FFNjYgLyogSklUQ2FsbDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3ODNBMkFCMTFBNUJFODQwMDU2M0QyMCAvKiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMUQ0RjExMUE4RjFGRjAwQTU0QjJBIC8qIEpTWm9tYmll
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5w
cm8JKHJldmlzaW9uIDYxMTgyKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDcgQEAKICAgICBydW50aW1lL1JlZ0V4cC5j
cHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuY3BwIFwKKyAgICBydW50aW1lL1JlZ0V4cENhY2hlLmNwcCBcCiAgICAgcnVudGlt
ZS9Sb3BlSW1wbC5jcHAgXAogICAgIHJ1bnRpbWUvU2NvcGVDaGFpbi5jcHAgXAogICAgIHJ1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcCBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24g
NjExODIpCisrKyBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtNTE1LDggKzUxNSwxMSBAQAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlT
bG90LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcCBcCiAJSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
YWNoZS5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuaCBcCiAJSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBLZXkuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oIFwK
</data>
<flag name="review"
          id="45223"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>